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*

Reply via email to