Re: Intel Arc / DG2

2023-02-13 Thread Thomas Frohwein
On Mon, Feb 13, 2023 at 08:40:22PM +1100, Jonathan Gray wrote:
> On Sun, Feb 12, 2023 at 02:25:47PM -0500, Thomas Frohwein wrote:
> > On Tue, Feb 07, 2023 at 08:51:40PM +1100, Jonathan Gray wrote:
> > 
> > [...] 
> > > > ...
> > > > i915_resize_lmem_bar: stub
> > > > panic: kernel diagnostic assertion "pdev->pci->sc_bridgetag == NULL" 
> > > > failed: file "/usr/src/sys/dev/pci/drm/drm_linux.c", line 1277
> > > > ...
> > > 
> > > The vga arbiter bits need to change.  There isn't an easy way to get
> > > a softc to avoid having state shared by multiple inteldrm instances.
> > > 
> > > perhaps they can be skipped for the moment?
> > 
> > Thanks, this leads to a uvm_fault now:
> > 
> > xehp_load_dss_mask: stub
> > xehp_load_dss_mask: stub
> > intel_slicemask_from_xehp_dssmask: stub
> > intel_slicemask_from_xehp_dssmask: stub
> > i915_resize_lmem_bar: stub
> > uvm_fault(0x825181f8, 0x10, 0, 1) -> e
> > 
> > screen photo at https://thfr.info/tmp/DG2-error-20230212.jpg
> 
> unfortunately, that isn't much help
> 
> If you boot -d and do:
>   w db_panic 0
>   c
> you should be able to get a backtrace.

There is no difference if I do this, and still no backtrace.

> 
> > 
> > > 
> > > Index: sys/dev/pci/drm/drm_linux.c
> > > ===
> > > RCS file: /cvs/src/sys/dev/pci/drm/drm_linux.c,v
> > > retrieving revision 1.95
> > > diff -u -p -r1.95 drm_linux.c
> > > --- sys/dev/pci/drm/drm_linux.c   1 Jan 2023 01:34:34 -   1.95
> > > +++ sys/dev/pci/drm/drm_linux.c   7 Feb 2023 09:31:55 -
> > > @@ -1274,7 +1274,8 @@ vga_disable_bridge(struct pci_attach_arg
> > >  void
> > >  vga_get_uninterruptible(struct pci_dev *pdev, int rsrc)
> > >  {
> > > - KASSERT(pdev->pci->sc_bridgetag == NULL);
> > > + if (pdev->pci->sc_bridgetag != NULL)
> > > + return;
> > >   pci_enumerate_bus(pdev->pci, vga_disable_bridge, NULL);
> > >  }
> > >  
> > > @@ -1282,6 +1283,9 @@ void
> > >  vga_put(struct pci_dev *pdev, int rsrc)
> > >  {
> > >   pcireg_t bc;
> > > +
> > > + if (pdev->pci->sc_bridgetag != NULL)
> > > + return;
> > >  
> > >   if (!vga_bridge_disabled)
> > >   return;
> > > 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 -  
> > > 1.15
> > > +++ sys/dev/pci/drm/i915/i915_pci.c   3 Feb 2023 01:43:02 -
> > > @@ -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/intel_memory_region.h
> > > ===
> > > RCS file: /cvs/src/sys/dev/pci/drm/i915/intel_memory_region.h,v
> > > retrieving revision 1.3
> > > diff -u -p -r1.3 intel_memory_region.h
> > > --- sys/dev/pci/drm/i915/intel_memory_region.h1 Jan 2023 01:34:55 
> > > -   1.3
> > > +++ sys/dev/pci/drm/i915/intel_memory_region.h4 Feb 2023 00:59:23 
> > > -
> > > @@ -70,8 +70,13 @@ struct intel_memory_region {
> > >  
> > >   const struct intel_memory_region_ops *ops;
> > >  
> > > -#ifdef notyet
> > > +#ifdef __linux__
> > >   struct io_mapping iomap;
> > > +#else
> > > + struct vm_page *pgs;
> > > + struct agp_map *agph;
> > > + bus_space_handle_t bsh;
> > > + bus_space_tag_t bst;
> > >  #endif
> > >   struct resource region;
> > >  
> > > Index: sys/dev/pci/drm/i915/gem/i915_gem_lmem.c
> > > ===
> > > RCS file: /cvs/src/sys/dev/pci/drm/i915/gem/i915_gem_lmem.c,v
> > > retrieving revision 1.4
> > > diff -u -p -r1.4 i915_gem_lmem.c
> > > --- sys/dev/pci/drm/i915/gem/i915_gem_lmem.c  1 Jan 2023 01:34:56 
> > > -   1.4
> > > +++ sys/dev/pci/drm/i915/gem/i915_gem_lmem.c  4 Feb 2023 00:58:16 
> > > -
> > > @@ -15,9 +15,6 @@ i915_gem_object_lmem_io_map(struct drm_i
> > >   unsigned long n,
> > >   unsigned long size)
> > >  {
> > > - STUB();
> > > - return NULL;
> > > -#ifdef notyet
> > >   resource_size_t offset;
> > >  
> > >   GEM_BUG_ON(!i915_gem_object_is_contiguous(obj));
> > > @@ -25,7 +22,11 @@ i915_gem_object_lmem_io_map(struct drm_i
> > >   offset = i915_gem_object_get_dma_address(obj, n);
> > >   offset -= obj->mm.region->region.start;
> > >  
> > > +#ifdef __linux__
> > >   return io_mapping_map_wc(>mm.region->iomap, offset, size);
> > > +#else
> > > + agp_map_atomic(obj->mm.region->agph, offset, >mm.region->bsh);
> > > + return bus_space_vaddr(obj->mm.region->bst, 

Re: Intel Arc / DG2

2023-02-13 Thread Jonathan Gray
On Sun, Feb 12, 2023 at 02:25:47PM -0500, Thomas Frohwein wrote:
> On Tue, Feb 07, 2023 at 08:51:40PM +1100, Jonathan Gray wrote:
> 
> [...] 
> > > ...
> > > i915_resize_lmem_bar: stub
> > > panic: kernel diagnostic assertion "pdev->pci->sc_bridgetag == NULL" 
> > > failed: file "/usr/src/sys/dev/pci/drm/drm_linux.c", line 1277
> > > ...
> > 
> > The vga arbiter bits need to change.  There isn't an easy way to get
> > a softc to avoid having state shared by multiple inteldrm instances.
> > 
> > perhaps they can be skipped for the moment?
> 
> Thanks, this leads to a uvm_fault now:
> 
> xehp_load_dss_mask: stub
> xehp_load_dss_mask: stub
> intel_slicemask_from_xehp_dssmask: stub
> intel_slicemask_from_xehp_dssmask: stub
> i915_resize_lmem_bar: stub
> uvm_fault(0x825181f8, 0x10, 0, 1) -> e
> 
> screen photo at https://thfr.info/tmp/DG2-error-20230212.jpg

unfortunately, that isn't much help

If you boot -d and do:
w db_panic 0
c
you should be able to get a backtrace.

> 
> > 
> > Index: sys/dev/pci/drm/drm_linux.c
> > ===
> > RCS file: /cvs/src/sys/dev/pci/drm/drm_linux.c,v
> > retrieving revision 1.95
> > diff -u -p -r1.95 drm_linux.c
> > --- sys/dev/pci/drm/drm_linux.c 1 Jan 2023 01:34:34 -   1.95
> > +++ sys/dev/pci/drm/drm_linux.c 7 Feb 2023 09:31:55 -
> > @@ -1274,7 +1274,8 @@ vga_disable_bridge(struct pci_attach_arg
> >  void
> >  vga_get_uninterruptible(struct pci_dev *pdev, int rsrc)
> >  {
> > -   KASSERT(pdev->pci->sc_bridgetag == NULL);
> > +   if (pdev->pci->sc_bridgetag != NULL)
> > +   return;
> > pci_enumerate_bus(pdev->pci, vga_disable_bridge, NULL);
> >  }
> >  
> > @@ -1282,6 +1283,9 @@ void
> >  vga_put(struct pci_dev *pdev, int rsrc)
> >  {
> > pcireg_t bc;
> > +
> > +   if (pdev->pci->sc_bridgetag != NULL)
> > +   return;
> >  
> > if (!vga_bridge_disabled)
> > return;
> > 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 -  1.15
> > +++ sys/dev/pci/drm/i915/i915_pci.c 3 Feb 2023 01:43:02 -
> > @@ -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/intel_memory_region.h
> > ===
> > RCS file: /cvs/src/sys/dev/pci/drm/i915/intel_memory_region.h,v
> > retrieving revision 1.3
> > diff -u -p -r1.3 intel_memory_region.h
> > --- sys/dev/pci/drm/i915/intel_memory_region.h  1 Jan 2023 01:34:55 
> > -   1.3
> > +++ sys/dev/pci/drm/i915/intel_memory_region.h  4 Feb 2023 00:59:23 
> > -
> > @@ -70,8 +70,13 @@ struct intel_memory_region {
> >  
> > const struct intel_memory_region_ops *ops;
> >  
> > -#ifdef notyet
> > +#ifdef __linux__
> > struct io_mapping iomap;
> > +#else
> > +   struct vm_page *pgs;
> > +   struct agp_map *agph;
> > +   bus_space_handle_t bsh;
> > +   bus_space_tag_t bst;
> >  #endif
> > struct resource region;
> >  
> > Index: sys/dev/pci/drm/i915/gem/i915_gem_lmem.c
> > ===
> > RCS file: /cvs/src/sys/dev/pci/drm/i915/gem/i915_gem_lmem.c,v
> > retrieving revision 1.4
> > diff -u -p -r1.4 i915_gem_lmem.c
> > --- sys/dev/pci/drm/i915/gem/i915_gem_lmem.c1 Jan 2023 01:34:56 
> > -   1.4
> > +++ sys/dev/pci/drm/i915/gem/i915_gem_lmem.c4 Feb 2023 00:58:16 
> > -
> > @@ -15,9 +15,6 @@ i915_gem_object_lmem_io_map(struct drm_i
> > unsigned long n,
> > unsigned long size)
> >  {
> > -   STUB();
> > -   return NULL;
> > -#ifdef notyet
> > resource_size_t offset;
> >  
> > GEM_BUG_ON(!i915_gem_object_is_contiguous(obj));
> > @@ -25,7 +22,11 @@ i915_gem_object_lmem_io_map(struct drm_i
> > offset = i915_gem_object_get_dma_address(obj, n);
> > offset -= obj->mm.region->region.start;
> >  
> > +#ifdef __linux__
> > return io_mapping_map_wc(>mm.region->iomap, offset, size);
> > +#else
> > +   agp_map_atomic(obj->mm.region->agph, offset, >mm.region->bsh);
> > +   return bus_space_vaddr(obj->mm.region->bst, obj->mm.region->bsh);
> >  #endif
> >  }
> >  
> > 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.5
> > diff -u -p -r1.5 i915_gem_stolen.c
> > --- 

Re: Intel Arc / DG2

2023-02-12 Thread Thomas Frohwein
On Tue, Feb 07, 2023 at 08:51:40PM +1100, Jonathan Gray wrote:

[...] 
> > ...
> > i915_resize_lmem_bar: stub
> > panic: kernel diagnostic assertion "pdev->pci->sc_bridgetag == NULL" 
> > failed: file "/usr/src/sys/dev/pci/drm/drm_linux.c", line 1277
> > ...
> 
> The vga arbiter bits need to change.  There isn't an easy way to get
> a softc to avoid having state shared by multiple inteldrm instances.
> 
> perhaps they can be skipped for the moment?

Thanks, this leads to a uvm_fault now:

xehp_load_dss_mask: stub
xehp_load_dss_mask: stub
intel_slicemask_from_xehp_dssmask: stub
intel_slicemask_from_xehp_dssmask: stub
i915_resize_lmem_bar: stub
uvm_fault(0x825181f8, 0x10, 0, 1) -> e

screen photo at https://thfr.info/tmp/DG2-error-20230212.jpg

> 
> Index: sys/dev/pci/drm/drm_linux.c
> ===
> RCS file: /cvs/src/sys/dev/pci/drm/drm_linux.c,v
> retrieving revision 1.95
> diff -u -p -r1.95 drm_linux.c
> --- sys/dev/pci/drm/drm_linux.c   1 Jan 2023 01:34:34 -   1.95
> +++ sys/dev/pci/drm/drm_linux.c   7 Feb 2023 09:31:55 -
> @@ -1274,7 +1274,8 @@ vga_disable_bridge(struct pci_attach_arg
>  void
>  vga_get_uninterruptible(struct pci_dev *pdev, int rsrc)
>  {
> - KASSERT(pdev->pci->sc_bridgetag == NULL);
> + if (pdev->pci->sc_bridgetag != NULL)
> + return;
>   pci_enumerate_bus(pdev->pci, vga_disable_bridge, NULL);
>  }
>  
> @@ -1282,6 +1283,9 @@ void
>  vga_put(struct pci_dev *pdev, int rsrc)
>  {
>   pcireg_t bc;
> +
> + if (pdev->pci->sc_bridgetag != NULL)
> + return;
>  
>   if (!vga_bridge_disabled)
>   return;
> 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 -  1.15
> +++ sys/dev/pci/drm/i915/i915_pci.c   3 Feb 2023 01:43:02 -
> @@ -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/intel_memory_region.h
> ===
> RCS file: /cvs/src/sys/dev/pci/drm/i915/intel_memory_region.h,v
> retrieving revision 1.3
> diff -u -p -r1.3 intel_memory_region.h
> --- sys/dev/pci/drm/i915/intel_memory_region.h1 Jan 2023 01:34:55 
> -   1.3
> +++ sys/dev/pci/drm/i915/intel_memory_region.h4 Feb 2023 00:59:23 
> -
> @@ -70,8 +70,13 @@ struct intel_memory_region {
>  
>   const struct intel_memory_region_ops *ops;
>  
> -#ifdef notyet
> +#ifdef __linux__
>   struct io_mapping iomap;
> +#else
> + struct vm_page *pgs;
> + struct agp_map *agph;
> + bus_space_handle_t bsh;
> + bus_space_tag_t bst;
>  #endif
>   struct resource region;
>  
> Index: sys/dev/pci/drm/i915/gem/i915_gem_lmem.c
> ===
> RCS file: /cvs/src/sys/dev/pci/drm/i915/gem/i915_gem_lmem.c,v
> retrieving revision 1.4
> diff -u -p -r1.4 i915_gem_lmem.c
> --- sys/dev/pci/drm/i915/gem/i915_gem_lmem.c  1 Jan 2023 01:34:56 -   
> 1.4
> +++ sys/dev/pci/drm/i915/gem/i915_gem_lmem.c  4 Feb 2023 00:58:16 -
> @@ -15,9 +15,6 @@ i915_gem_object_lmem_io_map(struct drm_i
>   unsigned long n,
>   unsigned long size)
>  {
> - STUB();
> - return NULL;
> -#ifdef notyet
>   resource_size_t offset;
>  
>   GEM_BUG_ON(!i915_gem_object_is_contiguous(obj));
> @@ -25,7 +22,11 @@ i915_gem_object_lmem_io_map(struct drm_i
>   offset = i915_gem_object_get_dma_address(obj, n);
>   offset -= obj->mm.region->region.start;
>  
> +#ifdef __linux__
>   return io_mapping_map_wc(>mm.region->iomap, offset, size);
> +#else
> + agp_map_atomic(obj->mm.region->agph, offset, >mm.region->bsh);
> + return bus_space_vaddr(obj->mm.region->bst, obj->mm.region->bsh);
>  #endif
>  }
>  
> 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.5
> diff -u -p -r1.5 i915_gem_stolen.c
> --- sys/dev/pci/drm/i915/gem/i915_gem_stolen.c4 Feb 2023 00:07:11 
> -   1.5
> +++ sys/dev/pci/drm/i915/gem/i915_gem_stolen.c4 Feb 2023 01:23:34 
> -
> @@ -774,18 +774,44 @@ static int init_stolen_lmem(struct intel
>   if (err)
>   return err;
>  
> - STUB();
> - return -ENOSYS;
> -#ifdef notyet
> +#ifdef __linux__
>   if (mem->io_size && 

Re: Intel Arc / DG2

2023-02-07 Thread Jonathan Gray
On Fri, Feb 03, 2023 at 10:38:53PM -0500, Thomas Frohwein wrote:
> On Sat, Feb 04, 2023 at 01:24:42PM +1100, Jonathan Gray wrote:
> 
> [...]
> 
> > 
> > I've committed the i915_gem_stolen_lmem_setup() portion.
> > 
> > Another diff
> > 
> > likely some more iomap use will show up later
> > 
> > i915_gem_object_read_from_page_iomap()
> > i915_gem_object_map_pfn()
> > i915_gem_object_map()
> > i915_ttm_io_mem_pfn()
> 
> I applied this; now the kernel panics when trying to switch the video
> mode. Excerpt (handtyped; screenshot at [1]):
> 
> ...
> i915_resize_lmem_bar: stub
> panic: kernel diagnostic assertion "pdev->pci->sc_bridgetag == NULL" failed: 
> file "/usr/src/sys/dev/pci/drm/drm_linux.c", line 1277
> ...

The vga arbiter bits need to change.  There isn't an easy way to get
a softc to avoid having state shared by multiple inteldrm instances.

perhaps they can be skipped for the moment?

Index: sys/dev/pci/drm/drm_linux.c
===
RCS file: /cvs/src/sys/dev/pci/drm/drm_linux.c,v
retrieving revision 1.95
diff -u -p -r1.95 drm_linux.c
--- sys/dev/pci/drm/drm_linux.c 1 Jan 2023 01:34:34 -   1.95
+++ sys/dev/pci/drm/drm_linux.c 7 Feb 2023 09:31:55 -
@@ -1274,7 +1274,8 @@ vga_disable_bridge(struct pci_attach_arg
 void
 vga_get_uninterruptible(struct pci_dev *pdev, int rsrc)
 {
-   KASSERT(pdev->pci->sc_bridgetag == NULL);
+   if (pdev->pci->sc_bridgetag != NULL)
+   return;
pci_enumerate_bus(pdev->pci, vga_disable_bridge, NULL);
 }
 
@@ -1282,6 +1283,9 @@ void
 vga_put(struct pci_dev *pdev, int rsrc)
 {
pcireg_t bc;
+
+   if (pdev->pci->sc_bridgetag != NULL)
+   return;
 
if (!vga_bridge_disabled)
return;
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 -  1.15
+++ sys/dev/pci/drm/i915/i915_pci.c 3 Feb 2023 01:43:02 -
@@ -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/intel_memory_region.h
===
RCS file: /cvs/src/sys/dev/pci/drm/i915/intel_memory_region.h,v
retrieving revision 1.3
diff -u -p -r1.3 intel_memory_region.h
--- sys/dev/pci/drm/i915/intel_memory_region.h  1 Jan 2023 01:34:55 -   
1.3
+++ sys/dev/pci/drm/i915/intel_memory_region.h  4 Feb 2023 00:59:23 -
@@ -70,8 +70,13 @@ struct intel_memory_region {
 
const struct intel_memory_region_ops *ops;
 
-#ifdef notyet
+#ifdef __linux__
struct io_mapping iomap;
+#else
+   struct vm_page *pgs;
+   struct agp_map *agph;
+   bus_space_handle_t bsh;
+   bus_space_tag_t bst;
 #endif
struct resource region;
 
Index: sys/dev/pci/drm/i915/gem/i915_gem_lmem.c
===
RCS file: /cvs/src/sys/dev/pci/drm/i915/gem/i915_gem_lmem.c,v
retrieving revision 1.4
diff -u -p -r1.4 i915_gem_lmem.c
--- sys/dev/pci/drm/i915/gem/i915_gem_lmem.c1 Jan 2023 01:34:56 -   
1.4
+++ sys/dev/pci/drm/i915/gem/i915_gem_lmem.c4 Feb 2023 00:58:16 -
@@ -15,9 +15,6 @@ i915_gem_object_lmem_io_map(struct drm_i
unsigned long n,
unsigned long size)
 {
-   STUB();
-   return NULL;
-#ifdef notyet
resource_size_t offset;
 
GEM_BUG_ON(!i915_gem_object_is_contiguous(obj));
@@ -25,7 +22,11 @@ i915_gem_object_lmem_io_map(struct drm_i
offset = i915_gem_object_get_dma_address(obj, n);
offset -= obj->mm.region->region.start;
 
+#ifdef __linux__
return io_mapping_map_wc(>mm.region->iomap, offset, size);
+#else
+   agp_map_atomic(obj->mm.region->agph, offset, >mm.region->bsh);
+   return bus_space_vaddr(obj->mm.region->bst, obj->mm.region->bsh);
 #endif
 }
 
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.5
diff -u -p -r1.5 i915_gem_stolen.c
--- sys/dev/pci/drm/i915/gem/i915_gem_stolen.c  4 Feb 2023 00:07:11 -   
1.5
+++ sys/dev/pci/drm/i915/gem/i915_gem_stolen.c  4 Feb 2023 01:23:34 -
@@ -774,18 +774,44 @@ static int init_stolen_lmem(struct intel
if (err)
return err;
 
-   STUB();
-   return -ENOSYS;
-#ifdef notyet
+#ifdef __linux__
if (mem->io_size && !io_mapping_init_wc(>iomap,
  

Re: Intel Arc / DG2

2023-02-03 Thread Thomas Frohwein
On Sat, Feb 04, 2023 at 01:24:42PM +1100, Jonathan Gray wrote:

[...]

> 
> I've committed the i915_gem_stolen_lmem_setup() portion.
> 
> Another diff
> 
> likely some more iomap use will show up later
> 
> i915_gem_object_read_from_page_iomap()
> i915_gem_object_map_pfn()
> i915_gem_object_map()
> i915_ttm_io_mem_pfn()

I applied this; now the kernel panics when trying to switch the video
mode. Excerpt (handtyped; screenshot at [1]):

...
i915_resize_lmem_bar: stub
panic: kernel diagnostic assertion "pdev->pci->sc_bridgetag == NULL" failed: 
file "/usr/src/sys/dev/pci/drm/drm_linux.c", line 1277
...

[1] https://thfr.info/tmp/DG2-error-20230203.jpg

> 
> 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 -  1.15
> +++ sys/dev/pci/drm/i915/i915_pci.c   3 Feb 2023 01:43:02 -
> @@ -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/intel_memory_region.h
> ===
> RCS file: /cvs/src/sys/dev/pci/drm/i915/intel_memory_region.h,v
> retrieving revision 1.3
> diff -u -p -r1.3 intel_memory_region.h
> --- sys/dev/pci/drm/i915/intel_memory_region.h1 Jan 2023 01:34:55 
> -   1.3
> +++ sys/dev/pci/drm/i915/intel_memory_region.h4 Feb 2023 00:59:23 
> -
> @@ -70,8 +70,13 @@ struct intel_memory_region {
>  
>   const struct intel_memory_region_ops *ops;
>  
> -#ifdef notyet
> +#ifdef __linux__
>   struct io_mapping iomap;
> +#else
> + struct vm_page *pgs;
> + struct agp_map *agph;
> + bus_space_handle_t bsh;
> + bus_space_tag_t bst;
>  #endif
>   struct resource region;
>  
> Index: sys/dev/pci/drm/i915/gem/i915_gem_lmem.c
> ===
> RCS file: /cvs/src/sys/dev/pci/drm/i915/gem/i915_gem_lmem.c,v
> retrieving revision 1.4
> diff -u -p -r1.4 i915_gem_lmem.c
> --- sys/dev/pci/drm/i915/gem/i915_gem_lmem.c  1 Jan 2023 01:34:56 -   
> 1.4
> +++ sys/dev/pci/drm/i915/gem/i915_gem_lmem.c  4 Feb 2023 00:58:16 -
> @@ -15,9 +15,6 @@ i915_gem_object_lmem_io_map(struct drm_i
>   unsigned long n,
>   unsigned long size)
>  {
> - STUB();
> - return NULL;
> -#ifdef notyet
>   resource_size_t offset;
>  
>   GEM_BUG_ON(!i915_gem_object_is_contiguous(obj));
> @@ -25,7 +22,11 @@ i915_gem_object_lmem_io_map(struct drm_i
>   offset = i915_gem_object_get_dma_address(obj, n);
>   offset -= obj->mm.region->region.start;
>  
> +#ifdef __linux__
>   return io_mapping_map_wc(>mm.region->iomap, offset, size);
> +#else
> + agp_map_atomic(obj->mm.region->agph, offset, >mm.region->bsh);
> + return bus_space_vaddr(obj->mm.region->bst, obj->mm.region->bsh);
>  #endif
>  }
>  
> 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.5
> diff -u -p -r1.5 i915_gem_stolen.c
> --- sys/dev/pci/drm/i915/gem/i915_gem_stolen.c4 Feb 2023 00:07:11 
> -   1.5
> +++ sys/dev/pci/drm/i915/gem/i915_gem_stolen.c4 Feb 2023 01:23:34 
> -
> @@ -774,18 +774,44 @@ static int init_stolen_lmem(struct intel
>   if (err)
>   return err;
>  
> - STUB();
> - return -ENOSYS;
> -#ifdef notyet
> +#ifdef __linux__
>   if (mem->io_size && !io_mapping_init_wc(>iomap,
>   mem->io_start,
>   mem->io_size)) {
>   err = -EIO;
>   goto err_cleanup;
>   }
> +#else
> + if (mem->io_size) {
> + int i;
> +
> + uvm_page_physload(atop(mem->io_start),
> + atop(mem->io_start + mem->io_size),
> + atop(mem->io_start),
> + atop(mem->io_start + mem->io_size),
> + PHYSLOAD_DEVICE);
> + /* array of vm pages that physload introduced. */
> + mem->pgs = PHYS_TO_VM_PAGE(mem->io_start);
> + KASSERT(mem->pgs != NULL);
> + /*
> +  * XXX mark all pages write combining so user mmaps get the
> +  * right bits. We really need a proper MI api for doing this,
> +  * but for now this allows us to use PAT where available.
> +  */
> + for (i = 0; i < atop(mem->io_size); i++)
> + 

Re: Intel Arc / DG2

2023-02-03 Thread Jonathan Gray
On Fri, Feb 03, 2023 at 02:27:09PM -0500, Thomas Frohwein wrote:
> On Fri, Feb 03, 2023 at 12:54:52PM +1100, Jonathan Gray wrote:
> [...]
> > > +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()
> 
> thanks, this moves forward into the next stub:
> 
> -i915_gem_stolen_lmem_setup: stub
> +init_stolen_lmem: stub

I've committed the i915_gem_stolen_lmem_setup() portion.

Another diff

likely some more iomap use will show up later

i915_gem_object_read_from_page_iomap()
i915_gem_object_map_pfn()
i915_gem_object_map()
i915_ttm_io_mem_pfn()

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 -  1.15
+++ sys/dev/pci/drm/i915/i915_pci.c 3 Feb 2023 01:43:02 -
@@ -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/intel_memory_region.h
===
RCS file: /cvs/src/sys/dev/pci/drm/i915/intel_memory_region.h,v
retrieving revision 1.3
diff -u -p -r1.3 intel_memory_region.h
--- sys/dev/pci/drm/i915/intel_memory_region.h  1 Jan 2023 01:34:55 -   
1.3
+++ sys/dev/pci/drm/i915/intel_memory_region.h  4 Feb 2023 00:59:23 -
@@ -70,8 +70,13 @@ struct intel_memory_region {
 
const struct intel_memory_region_ops *ops;
 
-#ifdef notyet
+#ifdef __linux__
struct io_mapping iomap;
+#else
+   struct vm_page *pgs;
+   struct agp_map *agph;
+   bus_space_handle_t bsh;
+   bus_space_tag_t bst;
 #endif
struct resource region;
 
Index: sys/dev/pci/drm/i915/gem/i915_gem_lmem.c
===
RCS file: /cvs/src/sys/dev/pci/drm/i915/gem/i915_gem_lmem.c,v
retrieving revision 1.4
diff -u -p -r1.4 i915_gem_lmem.c
--- sys/dev/pci/drm/i915/gem/i915_gem_lmem.c1 Jan 2023 01:34:56 -   
1.4
+++ sys/dev/pci/drm/i915/gem/i915_gem_lmem.c4 Feb 2023 00:58:16 -
@@ -15,9 +15,6 @@ i915_gem_object_lmem_io_map(struct drm_i
unsigned long n,
unsigned long size)
 {
-   STUB();
-   return NULL;
-#ifdef notyet
resource_size_t offset;
 
GEM_BUG_ON(!i915_gem_object_is_contiguous(obj));
@@ -25,7 +22,11 @@ i915_gem_object_lmem_io_map(struct drm_i
offset = i915_gem_object_get_dma_address(obj, n);
offset -= obj->mm.region->region.start;
 
+#ifdef __linux__
return io_mapping_map_wc(>mm.region->iomap, offset, size);
+#else
+   agp_map_atomic(obj->mm.region->agph, offset, >mm.region->bsh);
+   return bus_space_vaddr(obj->mm.region->bst, obj->mm.region->bsh);
 #endif
 }
 
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.5
diff -u -p -r1.5 i915_gem_stolen.c
--- sys/dev/pci/drm/i915/gem/i915_gem_stolen.c  4 Feb 2023 00:07:11 -   
1.5
+++ sys/dev/pci/drm/i915/gem/i915_gem_stolen.c  4 Feb 2023 01:23:34 -
@@ -774,18 +774,44 @@ static int init_stolen_lmem(struct intel
if (err)
return err;
 
-   STUB();
-   return -ENOSYS;
-#ifdef notyet
+#ifdef __linux__
if (mem->io_size && !io_mapping_init_wc(>iomap,
mem->io_start,
mem->io_size)) {
err = -EIO;
goto err_cleanup;
}
+#else
+   if (mem->io_size) {
+   int i;
+
+   uvm_page_physload(atop(mem->io_start),
+   atop(mem->io_start + mem->io_size),
+   atop(mem->io_start),
+   atop(mem->io_start + mem->io_size),
+   PHYSLOAD_DEVICE);
+   /* array of vm pages that physload introduced. */
+   mem->pgs = PHYS_TO_VM_PAGE(mem->io_start);
+   KASSERT(mem->pgs != NULL);
+   /*
+* XXX mark all pages write 

Re: Intel Arc / DG2

2023-02-03 Thread Thomas Frohwein
On Fri, Feb 03, 2023 at 12:54:52PM +1100, Jonathan Gray wrote:
[...]
> > +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()

thanks, this moves forward into the next stub:

-i915_gem_stolen_lmem_setup: stub
+init_stolen_lmem: stub

attaching the complete diff of the dmesg before and after your most recent diff.

> 
> 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 -  1.15
> +++ sys/dev/pci/drm/i915/i915_pci.c   3 Feb 2023 01:43:02 -
> @@ -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.c1 Jan 2023 01:34:56 
> -   1.4
> +++ sys/dev/pci/drm/i915/gem/i915_gem_stolen.c3 Feb 2023 01:50:07 
> -
> @@ -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 = >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, _start, _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*
--- dmesg-20230202-postDG2patch.txt Thu Feb  2 15:49:28 2023
+++ dmesg-20230202-post-secondDG2diff.txt   Fri Feb  3 14:23:46 2023
@@ -1,7 +1,7 @@
-OpenBSD 7.2-current (GENERIC.MP) #0: Thu Feb  2 15:38:20 EST 2023
+OpenBSD 7.2-current (GENERIC.MP) #1: Fri Feb  3 14:18:10 EST 2023
 t...@thfr-hdd320g.my.domain:/usr/src/sys/arch/amd64/compile/GENERIC.MP
 real mem = 34226315264 (32640MB)
-avail mem = 33169633280 (31633MB)
+avail mem = 33169629184 (31633MB)
 random: good seed from bootblocks
 mpath0 at 

Re: Intel Arc / DG2

2023-02-02 Thread Jonathan Gray
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 -  1.15
+++ sys/dev/pci/drm/i915/i915_pci.c 3 Feb 2023 01:43:02 -
@@ -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 -   
1.4
+++ sys/dev/pci/drm/i915/gem/i915_gem_stolen.c  3 Feb 2023 01:50:07 -
@@ -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 = >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, _start, _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*



Re: Intel Arc / DG2

2023-02-02 Thread Thomas Frohwein
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.

> 
> 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 -U5 -r1.15 i915_pci.c
> --- sys/dev/pci/drm/i915/i915_pci.c   25 Jan 2023 01:51:59 -  1.15
> +++ sys/dev/pci/drm/i915/i915_pci.c   29 Jan 2023 23:15:09 -
> @@ -1076,11 +1076,10 @@ static const struct intel_device_info xe
>  static const struct intel_device_info dg2_info = {
>   DG2_FEATURES,
>   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 = {
>   DG2_FEATURES,
>   NO_DISPLAY,
> 
--- dmesg-20230202-preDG2patch.txt  Thu Feb  2 15:50:30 2023
+++ dmesg-20230202-postDG2patch.txt Thu Feb  2 15:50:46 2023
@@ -1,7 +1,7 @@
-OpenBSD 7.2-current (GENERIC.MP) #1015: Thu Feb  2 06:25:57 MST 2023
-dera...@amd64.openbsd.org:/usr/src/sys/arch/amd64/compile/GENERIC.MP
+OpenBSD 7.2-current (GENERIC.MP) #0: Thu Feb  2 15:38:20 EST 2023
+t...@thfr-hdd320g.my.domain:/usr/src/sys/arch/amd64/compile/GENERIC.MP
 real mem = 34226315264 (32640MB)
-avail mem = 33169625088 (31633MB)
+avail mem = 33169633280 (31633MB)
 random: good seed from bootblocks
 mpath0 at root
 scsibus0 at mpath0: 256 targets
@@ -29,22 +29,22 @@
 cpu0: apic clock running at 24MHz
 cpu0: mwait min=64, max=64, C-substates=0.2.1.2.4.1.1.1, IBE
 cpu1 at mainbus0: apid 2 (application processor)
-cpu1: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz, 4589.31 MHz, 06-a5-05
+cpu1: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz, 4589.32 MHz, 06-a5-05
 cpu1: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT,PKU,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
 cpu1: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 
4-way L2 cache, 16MB 64b/line 16-way L3 cache
 cpu1: smt 0, core 1, package 0
 cpu2 at mainbus0: apid 4 (application processor)
-cpu2: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz, 4589.31 MHz, 06-a5-05
+cpu2: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz, 4589.33 MHz, 06-a5-05
 cpu2: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT,PKU,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
 cpu2: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 
4-way L2 cache, 16MB 64b/line 16-way L3 cache
 cpu2: smt 0, core 2, package 0
 cpu3 at mainbus0: apid 6 (application processor)
-cpu3: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz, 4589.31 MHz, 06-a5-05
+cpu3: Intel(R) Core(TM) i7-10700 CPU @ 2.90GHz, 4589.32 MHz, 06-a5-05
 cpu3: 
FPU,VME,DE,PSE,TSC,MSR,PAE,MCE,CX8,APIC,SEP,MTRR,PGE,MCA,CMOV,PAT,PSE36,CFLUSH,DS,ACPI,MMX,FXSR,SSE,SSE2,SS,HTT,TM,PBE,SSE3,PCLMUL,DTES64,MWAIT,DS-CPL,VMX,SMX,EST,TM2,SSSE3,SDBG,FMA3,CX16,xTPR,PDCM,PCID,SSE4.1,SSE4.2,x2APIC,MOVBE,POPCNT,DEADLINE,AES,XSAVE,AVX,F16C,RDRAND,NXE,PAGE1GB,RDTSCP,LONG,LAHF,ABM,3DNOWP,PERF,ITSC,FSGSBASE,TSC_ADJUST,SGX,BMI1,AVX2,SMEP,BMI2,ERMS,INVPCID,MPX,RDSEED,ADX,SMAP,CLFLUSHOPT,PT,PKU,SRBDS_CTRL,MD_CLEAR,IBRS,IBPB,STIBP,L1DF,SSBD,SENSOR,ARAT,XSAVEOPT,XSAVEC,XGETBV1,XSAVES
 cpu3: 32KB 64b/line 8-way D-cache, 32KB 64b/line 8-way I-cache, 256KB 64b/line 
4-way L2 cache, 16MB 64b/line 16-way L3 cache
 cpu3: smt 0, core 3, package 0
 cpu4 at mainbus0: apid 8 

Intel Arc / DG2

2023-01-30 Thread Jonathan Gray
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.

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 -U5 -r1.15 i915_pci.c
--- sys/dev/pci/drm/i915/i915_pci.c 25 Jan 2023 01:51:59 -  1.15
+++ sys/dev/pci/drm/i915/i915_pci.c 29 Jan 2023 23:15:09 -
@@ -1076,11 +1076,10 @@ static const struct intel_device_info xe
 static const struct intel_device_info dg2_info = {
DG2_FEATURES,
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 = {
DG2_FEATURES,
NO_DISPLAY,