mirror of
https://git.proxmox.com/git/mirror_ubuntu-kernels.git
synced 2025-12-26 19:12:39 +00:00
drm/xe/xe2: Extend reserved stolen sizes
For xe2, besides the previous sizes, the reserved portion of stolen can also have 16MB and 32MB. Bspec: 53148 Reviewed-by: Matt Roper <matthew.d.roper@intel.com> Link: https://lore.kernel.org/r/20230929044959.3149265-1-lucas.demarchi@intel.com Signed-off-by: Lucas De Marchi <lucas.demarchi@intel.com> Signed-off-by: Rodrigo Vivi <rodrigo.vivi@intel.com>
This commit is contained in:
parent
c489925a15
commit
0dcac63649
@ -82,7 +82,7 @@
|
||||
#define GSMBASE XE_REG(0x108100)
|
||||
|
||||
#define STOLEN_RESERVED XE_REG(0x1082c0)
|
||||
#define WOPCM_SIZE_MASK REG_GENMASK64(8, 7)
|
||||
#define WOPCM_SIZE_MASK REG_GENMASK64(9, 7)
|
||||
|
||||
#define MTL_RP_STATE_CAP XE_REG(0x138000)
|
||||
|
||||
|
||||
@ -86,6 +86,29 @@ static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
|
||||
return ALIGN_DOWN(stolen_size, SZ_1M);
|
||||
}
|
||||
|
||||
static u32 get_wopcm_size(struct xe_device *xe)
|
||||
{
|
||||
u32 wopcm_size;
|
||||
u64 val;
|
||||
|
||||
val = xe_mmio_read64_2x32(xe_root_mmio_gt(xe), STOLEN_RESERVED);
|
||||
val = REG_FIELD_GET64(WOPCM_SIZE_MASK, val);
|
||||
|
||||
switch (val) {
|
||||
case 0x5 ... 0x6:
|
||||
val--;
|
||||
fallthrough;
|
||||
case 0x0 ... 0x3:
|
||||
wopcm_size = (1U << val) * SZ_1M;
|
||||
break;
|
||||
default:
|
||||
WARN(1, "Missing case wopcm_size=%llx\n", val);
|
||||
wopcm_size = 0;
|
||||
}
|
||||
|
||||
return wopcm_size;
|
||||
}
|
||||
|
||||
static u32 detect_bar2_integrated(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
|
||||
{
|
||||
struct pci_dev *pdev = to_pci_dev(xe->drm.dev);
|
||||
@ -125,10 +148,11 @@ static u32 detect_bar2_integrated(struct xe_device *xe, struct xe_ttm_stolen_mgr
|
||||
}
|
||||
|
||||
/* Carve out the top of DSM as it contains the reserved WOPCM region */
|
||||
wopcm_size = REG_FIELD_GET64(WOPCM_SIZE_MASK,
|
||||
xe_mmio_read64_2x32(xe_root_mmio_gt(xe),
|
||||
STOLEN_RESERVED));
|
||||
stolen_size -= (1U << wopcm_size) * SZ_1M;
|
||||
wopcm_size = get_wopcm_size(xe);
|
||||
if (drm_WARN_ON(&xe->drm, !wopcm_size))
|
||||
return 0;
|
||||
|
||||
stolen_size -= wopcm_size;
|
||||
|
||||
if (drm_WARN_ON(&xe->drm, stolen_size + SZ_8M > pci_resource_len(pdev, 2)))
|
||||
return 0;
|
||||
|
||||
Loading…
Reference in New Issue
Block a user