> Date: Tue, 21 Aug 2018 23:34:38 +0200 (CEST)
> From: Mark Kettenis <mark.kette...@xs4all.nl>
> 
> If firmware doesn't initialize the device, the BAR will be zero and
> mapping that address leads to "interesting" issues on many machines.
> This BAR is a bit special since we don't want to immediately map it.
> So we have to explicitly allocate the address space for the BAR.  Bail
> out if we fail.  Don't do this on sparc64 because there the address
> can actually be zero.
> 
> ok?

Ping?

> Index: dev/pci/drm/radeon/radeon_kms.c
> ===================================================================
> RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_kms.c,v
> retrieving revision 1.56
> diff -u -p -r1.56 radeon_kms.c
> --- dev/pci/drm/radeon/radeon_kms.c   3 May 2018 10:09:51 -0000       1.56
> +++ dev/pci/drm/radeon/radeon_kms.c   21 Aug 2018 21:30:45 -0000
> @@ -485,6 +485,26 @@ radeondrm_attach_kms(struct device *pare
>               printf(": can't get frambuffer info\n");
>               return;
>       }
> +#if !defined(__sparc64__)
> +     if (rdev->fb_aper_offset == 0) {
> +             bus_size_t start, end;
> +             bus_addr_t base;
> +
> +             start = max(PCI_MEM_START, pa->pa_memex->ex_start);
> +             end = min(PCI_MEM_END, pa->pa_memex->ex_end);
> +             if (pa->pa_memex == NULL ||
> +                 extent_alloc_subregion(pa->pa_memex, start, end,
> +                 rdev->fb_aper_size, rdev->fb_aper_size, 0, 0, 0, &base)) {
> +                     printf(": can't reserve framebuffer space\n");
> +                     return;
> +             }
> +             pci_conf_write(pa->pa_pc, pa->pa_tag, RADEON_PCI_MEM, base);
> +             if (PCI_MAPREG_MEM_TYPE(type) == PCI_MAPREG_MEM_TYPE_64BIT)
> +                     pci_conf_write(pa->pa_pc, pa->pa_tag,
> +                         RADEON_PCI_MEM + 4, (uint64_t)base >> 32);
> +             rdev->fb_aper_offset = base;
> +     }
> +#endif
>  
>       for (i = PCI_MAPREG_START; i < PCI_MAPREG_END ; i+= 4) {
>               type = pci_mapreg_type(pa->pa_pc, pa->pa_tag, i);
> 
> 

Reply via email to