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*