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

Matt Roper matthew.d.roper at intel.com
Wed Jul 26 17:07:57 UTC 2023


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.


Matt

> >  
> > -- 
> > 2.40.1
> > 
> 
> -- 
> Matt Roper
> Graphics Software Engineer
> Linux GPU Platform Enablement
> Intel Corporation

-- 
Matt Roper
Graphics Software Engineer
Linux GPU Platform Enablement
Intel Corporation


More information about the Intel-xe mailing list