[Intel-xe] [PATCH v2 3/3] drm/xe: Add Wa_14019821291

Upadhyay, Tejas tejas.upadhyay at intel.com
Wed Oct 25 09:16:04 UTC 2023



> -----Original Message-----
> From: Intel-xe <intel-xe-bounces at lists.freedesktop.org> On Behalf Of Lucas
> De Marchi
> Sent: Wednesday, October 25, 2023 3:38 AM
> To: intel-xe at lists.freedesktop.org
> Cc: De Marchi, Lucas <lucas.demarchi at intel.com>; Roper, Matthew D
> <matthew.d.roper at intel.com>
> Subject: [Intel-xe] [PATCH v2 3/3] drm/xe: Add Wa_14019821291
> 
> From: Matt Roper <matthew.d.roper at intel.com>
> 
> This workaround is primarily implemented by the BIOS.  However if the BIOS
> applies the workaround it will reserve a small piece of our DSM (which
> should be at the top, right below the WOPCM); we just need to keep that
> region reserved so that nothing else attempts to re-use it.
> 
> Signed-off-by: Matt Roper <matthew.d.roper at intel.com>
> Signed-off-by: Lucas De Marchi <lucas.demarchi at intel.com>
> ---
>  drivers/gpu/drm/xe/Makefile            |  2 +-
>  drivers/gpu/drm/xe/regs/xe_gt_regs.h   |  2 ++
>  drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c | 24 ++++++++++++++++++++++++
>  drivers/gpu/drm/xe/xe_wa_oob.rules     |  1 +
>  4 files changed, 28 insertions(+), 1 deletion(-)
> 
> diff --git a/drivers/gpu/drm/xe/Makefile b/drivers/gpu/drm/xe/Makefile index
> cee57681732d..ef9d954f5a75 100644
> --- a/drivers/gpu/drm/xe/Makefile
> +++ b/drivers/gpu/drm/xe/Makefile
> @@ -37,7 +37,7 @@ quiet_cmd_wa_oob = GEN     $(notdir
> $(generated_oob))
>  $(generated_oob) &: $(obj)/xe_gen_wa_oob
> $(srctree)/$(src)/xe_wa_oob.rules
>  	$(call cmd,wa_oob)
> 
> -$(obj)/xe_guc.o $(obj)/xe_migrate.o $(obj)/xe_ring_ops.o $(obj)/xe_vm.o
> $(obj)/xe_wa.o: $(generated_oob)
> +$(obj)/xe_guc.o $(obj)/xe_migrate.o $(obj)/xe_ring_ops.o $(obj)/xe_vm.o
> +$(obj)/xe_wa.o $(obj)/xe_ttm_stolen_mgr.o: $(generated_oob)
> 
>  # Please keep these build lists sorted!
> 
> diff --git a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> index 55ceadfc30b0..d542a4e2e6fa 100644
> --- a/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> +++ b/drivers/gpu/drm/xe/regs/xe_gt_regs.h
> @@ -155,6 +155,8 @@
>  #define XEHP_SQCM				XE_REG_MCR(0x8724)
>  #define   EN_32B_ACCESS				REG_BIT(30)
> 
> +#define GSCPSMI_BASE				XE_REG(0x880c)
> +
>  #define	MIRROR_FUSE3
> 	XE_REG(0x9118)
>  #define   XE2_NODE_ENABLE_MASK			REG_GENMASK(31,
> 16)
>  #define   L3BANK_PAIR_COUNT			4
> diff --git a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
> b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
> index 79fbd74a3944..b23827534ab9 100644
> --- a/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
> +++ b/drivers/gpu/drm/xe/xe_ttm_stolen_mgr.c
> @@ -11,6 +11,8 @@
>  #include <drm/ttm/ttm_placement.h>
>  #include <drm/ttm/ttm_range_manager.h>
> 
> +#include "generated/xe_wa_oob.h"
> +#include "regs/xe_gt_regs.h"
>  #include "regs/xe_regs.h"
>  #include "xe_bo.h"
>  #include "xe_device.h"
> @@ -19,6 +21,7 @@
>  #include "xe_res_cursor.h"
>  #include "xe_ttm_stolen_mgr.h"
>  #include "xe_ttm_vram_mgr.h"
> +#include "xe_wa.h"
> 
>  struct xe_ttm_stolen_mgr {
>  	struct xe_ttm_vram_mgr base;
> @@ -112,6 +115,7 @@ static u32 get_wopcm_size(struct xe_device *xe)
> 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);
> +	struct xe_gt *media_gt = xe_device_get_root_tile(xe)->media_gt;
>  	u32 stolen_size, wopcm_size;
>  	u32 ggc, gms;
> 
> @@ -154,6 +158,26 @@ static u32 detect_bar2_integrated(struct xe_device
> *xe, struct xe_ttm_stolen_mgr
> 
>  	stolen_size -= wopcm_size;
> 
> +	if (XE_WA(media_gt, 14019821291)) {
> +		u64 gscpsmi_base = xe_mmio_read64_2x32(media_gt,
> GSCPSMI_BASE);
> +
> +		/*
> +		 * This workaround is primarily implemented by the BIOS.
> We
> +		 * just need to figure out whether the BIOS has applied the
> +		 * workaround (meaning the programmed address falls within
> +		 * the DSM) and, if so, reserve that part of the DSM to
> +		 * prevent accidental reuse.  The DSM location should be just
> +		 * below the WOPCM.
> +		 */
> +		if (gscpsmi_base >= mgr->io_base &&
> +		    gscpsmi_base < mgr->io_base + stolen_size) {
> +			xe_gt_dbg(media_gt,
> +				  "Reserving %llu bytes of DSM for
> Wa_14019821291\n",
> +				  mgr->io_base + stolen_size - gscpsmi_base);
> +			stolen_size = gscpsmi_base - mgr->io_base;
> +		}
> +	}

Wont it be better if warning also posted here if workaround was not applied by BIOS ? 

Thanks,
Tejas
> +
>  	if (drm_WARN_ON(&xe->drm, stolen_size + SZ_8M >
> pci_resource_len(pdev, 2)))
>  		return 0;
> 
> diff --git a/drivers/gpu/drm/xe/xe_wa_oob.rules
> b/drivers/gpu/drm/xe/xe_wa_oob.rules
> index f3ff774dc4aa..752842d734be 100644
> --- a/drivers/gpu/drm/xe/xe_wa_oob.rules
> +++ b/drivers/gpu/drm/xe/xe_wa_oob.rules
> @@ -19,3 +19,4 @@
>  		SUBPLATFORM(DG2, G12)
>  16017236439	PLATFORM(PVC)
>  22010954014	PLATFORM(DG2)
> +14019821291	MEDIA_VERSION_RANGE(1300, 2000)
> --
> 2.40.1



More information about the Intel-xe mailing list