[Intel-xe] [PATCH v2 09/10] drm/xe: Carve out top of DSM as reserved

Lucas De Marchi lucas.demarchi at intel.com
Wed Jul 26 18:03:20 UTC 2023


On Wed, Jul 26, 2023 at 10:07:57AM -0700, Matt Roper wrote:
>On Wed, Jul 26, 2023 at 10:04:07AM -0700, Matt Roper wrote:
>> On Wed, Jul 26, 2023 at 09:07:07AM -0700, Lucas De Marchi wrote:
>> > Top of DSM contains the WOPCM where kernel driver shouldn't access as
>> > it contains data from other HW agents. Carve it out from the stolen
>> > memory. On a MTL system, the output now matches the expected values:
>> >
>> > Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
>>
>> Reviewed-by: Matt Roper <matthew.d.roper at intel.com>
>>
>> > ---
>> >  drivers/gpu/drm/xe/regs/xe_regs.h      | 3 +++
>> >  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c | 8 +++++++-
>> >  2 files changed, 10 insertions(+), 1 deletion(-)
>> >
>> > diff --git a/drivers/gpu/drm/xe/regs/xe_regs.h b/drivers/gpu/drm/xe/regs/xe_regs.h
>> > index dbf572d11af0..315f6f8dadf3 100644
>> > --- a/drivers/gpu/drm/xe/regs/xe_regs.h
>> > +++ b/drivers/gpu/drm/xe/regs/xe_regs.h
>> > @@ -84,4 +84,7 @@
>> >  #define DSMBASE					XE_REG(0x1080C0)
>> >  #define   BDSM_MASK				REG_GENMASK64(63, 20)
>> >
>> > +#define STOLEN_RESERVED				XE_REG(0x1082c0)
>> > +#define   WOPCM_SIZE_MASK			REG_GENMASK64(8, 7)
>> > +
>> >  #endif
>> > diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
>> > index 271b3fba4129..7bba8fff5a5d 100644
>> > --- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
>> > +++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
>> > @@ -89,7 +89,7 @@ static s64 detect_bar2_dgfx(struct xe_device *xe, struct xe_ttm_stolen_mgr *mgr)
>> >  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);
>> > -	u32 stolen_size;
>> > +	u32 stolen_size, wopcm_size;
>> >  	u32 ggc, gms;
>> >
>> >  	ggc = xe_mmio_read32(xe_root_mmio_gt(xe), GGC);
>> > @@ -124,6 +124,12 @@ static u32 detect_bar2_integrated(struct xe_device *xe, struct xe_ttm_stolen_mgr
>> >  		return 0;
>> >  	}
>> >
>> > +	/* Carve out the top of DSM as it contains the reserved WOPCM region */
>> > +	wopcm_size = REG_FIELD_GET64(WOPCM_SIZE_MASK,
>> > +				     xe_mmio_read64(xe_root_mmio_gt(xe),
>> > +						    STOLEN_RESERVED));
>> > +	stolen_size -= (1U << wopcm_size) * SZ_1M;
>> > +
>> >  	if (drm_WARN_ON(&xe->drm, stolen_size + SZ_8M > pci_resource_len(pdev, 2)))
>> >  		return 0;
>
>Oh, actually shouldn't we do this WARN check before we slice off the
>WOPCM?  If the GSM + DSM (_including_ WOPCM) is larger than the size of
>the BAR, something is wrong.

as far as I can see, the check is only for: "do we have access to
everything we need"?  So I left it after removing wopcm because we don´t
care about accesing that.

Lucas De Marchi


More information about the Intel-xe mailing list