On Thu, Feb 02, 2023 at 03:52:58PM -0500, Thomas Frohwein wrote:
> On Mon, Jan 30, 2023 at 09:32:08PM +1100, Jonathan Gray wrote:
> > The current generation of Intel Arc branded graphics cards are part of
> > what drm and Mesa refers to as DG2.
> >
> > https://ark.intel.com/content/www/us/en/ark/products/codename/226095/products-formerly-alchemist.html
> >
> > In -current we now have Mesa 22.3 which has support for DG2.
> > There is support in inteldrm but DG2 is not matched by default.
> >
> > The following diff matches it by default, as do versions of linux
> > after 6.1.
> > d2eae8e98d59 ("drm/i915/dg2: Drop force_probe requirement")
> >
> > I'm not sure if all the intel discrete gpu paths work. I don't have
> > hardware to test.
>
> I have tested this with Intel Arc A750. It recognizes the device, but
> fails to initialize it. diff of dmesg before vs. after your diff attached.
...
>
> +xehp_load_dss_mask: stub
> +xehp_load_dss_mask: stub
> +intel_slicemask_from_xehp_dssmask: stub
> +intel_slicemask_from_xehp_dssmask: stub
> +i915_gem_stolen_lmem_setup: stub
> +drm:pid0:intel_memory_regions_hw_probe *ERROR* [drm] *ERROR* Failed to setup
> region(-78) type=3
> +Device initialization failed (-78)
thanks
xehp_load_dss_mask() needs:
bitmap_from_arr32()
intel_slicemask_from_xehp_dssmask() needs:
bitmap_intersects()
bitmap_shift_right()
updated diff which unstubs i915_gem_stolen_lmem_setup()
Index: sys/dev/pci/drm/i915/i915_pci.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/i915_pci.c,v
retrieving revision 1.15
diff -u -p -r1.15 i915_pci.c
--- sys/dev/pci/drm/i915/i915_pci.c 25 Jan 2023 01:51:59 -0000 1.15
+++ sys/dev/pci/drm/i915/i915_pci.c 3 Feb 2023 01:43:02 -0000
@@ -1078,7 +1078,6 @@ static const struct intel_device_info dg
XE_LPD_FEATURES,
.__runtime.cpu_transcoder_mask = BIT(TRANSCODER_A) | BIT(TRANSCODER_B) |
BIT(TRANSCODER_C) | BIT(TRANSCODER_D),
- .require_force_probe = 1,
};
static const struct intel_device_info ats_m_info = {
Index: sys/dev/pci/drm/i915/gem/i915_gem_stolen.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/i915/gem/i915_gem_stolen.c,v
retrieving revision 1.4
diff -u -p -r1.4 i915_gem_stolen.c
--- sys/dev/pci/drm/i915/gem/i915_gem_stolen.c 1 Jan 2023 01:34:56 -0000
1.4
+++ sys/dev/pci/drm/i915/gem/i915_gem_stolen.c 3 Feb 2023 01:50:07 -0000
@@ -813,26 +813,40 @@ struct intel_memory_region *
i915_gem_stolen_lmem_setup(struct drm_i915_private *i915, u16 type,
u16 instance)
{
- STUB();
- return ERR_PTR(-ENOSYS);
-#ifdef notyet
struct intel_uncore *uncore = &i915->uncore;
struct pci_dev *pdev = i915->drm.pdev;
resource_size_t dsm_size, dsm_base, lmem_size;
struct intel_memory_region *mem;
resource_size_t io_start, io_size;
resource_size_t min_page_size;
+ pcireg_t mtype;
+ bus_addr_t lmem_start;
+ bus_size_t lmem_len;
+ int ret;
if (WARN_ON_ONCE(instance))
return ERR_PTR(-ENODEV);
+#ifdef __linux__
if (!i915_pci_resource_valid(pdev, GEN12_LMEM_BAR))
return ERR_PTR(-ENXIO);
+#else
+ mtype = pci_mapreg_type(i915->pc, i915->tag,
+ 0x10 + (4 * GEN12_LMEM_BAR));
+ ret = pci_mapreg_info(i915->pc, i915->tag,
+ 0x10 + (4 * GEN12_LMEM_BAR), mtype, &lmem_start, &lmem_len, NULL);
+ if (ret != 0)
+ return ERR_PTR(-ENXIO);
+#endif
/* Use DSM base address instead for stolen memory */
dsm_base = intel_uncore_read64(uncore, GEN12_DSMBASE);
if (IS_DG1(uncore->i915)) {
+#ifdef __linux__
lmem_size = pci_resource_len(pdev, GEN12_LMEM_BAR);
+#else
+ lmem_size = lmem_len;
+#endif
if (WARN_ON(lmem_size < dsm_base))
return ERR_PTR(-ENODEV);
} else {
@@ -844,6 +858,7 @@ i915_gem_stolen_lmem_setup(struct drm_i9
}
dsm_size = lmem_size - dsm_base;
+#ifdef __linux__
if (pci_resource_len(pdev, GEN12_LMEM_BAR) < lmem_size) {
io_start = 0;
io_size = 0;
@@ -851,6 +866,15 @@ i915_gem_stolen_lmem_setup(struct drm_i9
io_start = pci_resource_start(pdev, GEN12_LMEM_BAR) + dsm_base;
io_size = dsm_size;
}
+#else
+ if (lmem_len < lmem_size) {
+ io_start = 0;
+ io_size = 0;
+ } else {
+ io_start = lmem_start + dsm_base;
+ io_size = dsm_size;
+ }
+#endif
min_page_size = HAS_64K_PAGES(i915) ? I915_GTT_PAGE_SIZE_64K :
I915_GTT_PAGE_SIZE_4K;
@@ -878,7 +902,6 @@ i915_gem_stolen_lmem_setup(struct drm_i9
mem->private = true;
return mem;
-#endif
}
struct intel_memory_region*