On Tue, Feb 02, 2016 at 10:27:24PM +1100, Jonathan Gray wrote:
> On Tue, Feb 02, 2016 at 05:49:33AM -0500, James Hastings wrote:
> > On 2/2/16, Jonathan Gray <[email protected]> wrote:
> > > On Tue, Feb 02, 2016 at 03:56:13AM -0500, James Hastings wrote:
> > >> On 2/2/16, Jonathan Gray <[email protected]> wrote:
> > >> >
> > >> > The bios may have to be fetched from the acpi VFCT table for the uefi
> > >> > case.
> > >> >
> > >> > Here's a quick attempt at trying to avoid the crash at least:
> > >> >
> > >>
> > >> Different panic this time.
> > >
> > > Thanks.  Here is a version modified to have a better check for efi.
> > > Still may need some things shuffled around to deal with the root hook.
> > >
> > 
> > Identical panic again.
> > 
> > Thinking out loud; could these two issues be caused by bad information
> > passed by
> > the bootloader or firmware? memory maps? framebuffer address?
> 
> It's because one of the ways of getting the video bios is to check where
> it has long been mapped and reading out of that memory.
> 
> It sounds like your machine has enough of it there to convince the code
> that checks for a signature but not all of the expected 256k of memory
> after 0xc0000 is actually mapped.
> 
> Putting a "return false;" at the top of radeon_read_platform_bios()
> should prevent this method from being tried entirely.
> 

Can you try this to limit the size?

Index: radeon_bios.c
===================================================================
RCS file: /cvs/src/sys/dev/pci/drm/radeon/radeon_bios.c,v
retrieving revision 1.6
diff -u -p -r1.6 radeon_bios.c
--- radeon_bios.c       12 Apr 2015 12:14:30 -0000      1.6
+++ radeon_bios.c       2 Feb 2016 21:30:25 -0000
@@ -48,11 +48,10 @@ radeon_read_platform_bios(struct radeon_
 {
 #if defined(__amd64__) || defined(__i386__)
        uint8_t __iomem *bios;
-       bus_size_t size = 256 * 1024; /* ??? */
+       bus_size_t size = 0x20000;
        uint8_t *found = NULL;
        int i;
-       
-       
+
        if (!(rdev->flags & RADEON_IS_IGP))
                if (!radeon_card_posted(rdev))
                        return false;

Reply via email to