Hey,
I’ve been trying to write a patch to get vega 20 working, but due to a
screw up on my end I lost the progress I’d made. Before I start over again,
I was wondering if you had any advice on how to do it? Before, I was trying
to more or less just port the vega 20 hwmgr files in from FreeBSD drm next
which is at linux drm 5.0 as well as the other files which seemed to
mention Vega 20 or seemed to be needed to compile. I wasn’t having much
luck as you can imagine, and currently I’m still in university so my
experience with kernel patching isn’t fantastic, I was wondering if you
might have any advice where to begin if I’m having to start from scratch?
Best regards,
Charlie Burnett

On Thu, Aug 1, 2019 at 11:06 PM Jonathan Gray <j...@jsg.id.au> wrote:

> On Fri, Aug 02, 2019 at 03:11:54AM -0500, Charlie Burnett wrote:
> > Hey-
> > I'd been messing around with the AMDGPU on current (which I'm aware is
> very
> > experimental) and had very few issues with it using a Vega 56 GPU. I
> > recently swapped to another Vega GPU (Radeon VII) and have issues with
> the
> > display not showing anything. Still boots fine, in that I can still enter
> > commands (i.e. reboot) so it has to be a display issue. I tried searching
> > for the diff where the firmware was added which I'm certain I saw (for
> Vega
> > 20) but can't seem to find it in the commit history. Anyone have a fix
> for
> > it, and if not, who should I talk to if I wanted to help get it working?
> I
> > saw most of the AMDGPU commits have been by @jonathangray if he would be
> > the best option.
> > Thanks!
>
> vega20 firmware was added when ports/sysutils/firmware/amdgpu was
> updated to 20190312.
>
> vega20 is marked as experimental in the version of drm we have, but we
> don't currently check the flag on probe like linux does.
>
> The following diff will prevent amdgpu from matching on devices
> in the amdgpu_pciidlist table with the AMD_EXP_HW_SUPPORT flag
> (currently these are all vega20 ids).
>
> Index: sys/dev/pci/drm/include/drm/drm_drv.h
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/include/drm/drm_drv.h,v
> retrieving revision 1.2
> diff -u -p -r1.2 drm_drv.h
> --- sys/dev/pci/drm/include/drm/drm_drv.h       25 Jul 2019 05:48:16
> -0000      1.2
> +++ sys/dev/pci/drm/include/drm/drm_drv.h       2 Aug 2019 03:29:58 -0000
> @@ -291,5 +291,7 @@ static inline bool drm_drv_uses_atomic_m
>  int    drm_dev_register(struct drm_device *, unsigned long);
>  void   drm_dev_unregister(struct drm_device *);
>  int    drm_getpciinfo(struct drm_device *, void *, struct drm_file *);
> +const struct drm_pcidev        *drm_find_description(int, int,
> +    const struct drm_pcidev *);
>
>  #endif
> Index: sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c,v
> retrieving revision 1.3
> diff -u -p -r1.3 amdgpu_kms.c
> --- sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c     4 Jul 2019 03:39:07 -0000
>      1.3
> +++ sys/dev/pci/drm/amd/amdgpu/amdgpu_kms.c     2 Aug 2019 03:35:35 -0000
> @@ -1337,10 +1337,23 @@ int amdgpu_debugfs_firmware_init(struct
>  int
>  amdgpu_probe(struct device *parent, void *match, void *aux)
>  {
> +       struct pci_attach_args *pa = aux;
> +       const struct drm_pcidev *id_entry;
> +       unsigned long flags = 0;
> +
>         if (amdgpu_fatal_error)
>                 return 0;
> -       if (drm_pciprobe(aux, amdgpu_pciidlist))
> -               return 20;
> +
> +       id_entry = drm_find_description(PCI_VENDOR(pa->pa_id),
> +           PCI_PRODUCT(pa->pa_id), amdgpu_pciidlist);
> +       if (id_entry != NULL) {
> +               flags = id_entry->driver_data;
> +               if (flags & AMD_EXP_HW_SUPPORT)
> +                       return 0;
> +               else
> +                       return 20;
> +       }
> +
>         return 0;
>  }
>
>
>

Reply via email to