[Intel-xe] [PATCH] drm/xe/xe2: Extend reserved stolen sizes
Matt Roper
matthew.d.roper at intel.com
Fri Sep 29 22:43:54 UTC 2023
On Thu, Sep 28, 2023 at 09:49:59PM -0700, Lucas De Marchi wrote:
> For xe2, besides the previous sizes, the reserved portion of stolen can
> also have 16MB and 32MB.
>
> Bspec: 53148
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
While looking at this I'm trying to remember why we don't need to also
use the media WOPCM field (13:11) from this register? Is the media
allocation already included in the value we're reading here?
Matt
> ---
> drivers/gpu/drm/xe/regs/xe_regs.h | 2 +-
> drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c | 32 ++++++++++++++++++++++----
> 2 files changed, 29 insertions(+), 5 deletions(-)
>
> diff --git a/drivers/gpu/drm/xe/regs/xe_regs.h b/drivers/gpu/drm/xe/regs/xe_regs.h
> index 8a93ab169e04..dbb0ea1a585e 100644
> --- a/drivers/gpu/drm/xe/regs/xe_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_regs.h
> @@ -69,7 +69,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)
>
> diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
> index 6ba6b1b7f34b..79fbd74a3944 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
> @@ -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;
> --
> 2.40.1
>
--
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation
More information about the Intel-xe
mailing list