[RESEND] nouveau regression 3.19: unable to load BIOS from ACPI

From: Ortwin GlÃck
Date: Wed Mar 11 2015 - 12:55:33 EST


Hi Ben,

Since 3.19 the NV BIOS can no longer be loaded via ACPI. This breaks my HP laptop.
Looking at the recent changes (ad4a3626 split out shadow methods) in the bios shadow code, I think this happens:

- nvbios_shadow loops over all possible bios sources
- shadow_method
- shadow_score
- shadow_image tries to validate the image contents *before* loading it via ACPI calls
- nvbios_imagen calls nv_ro16 on the bios object which tries to read 16 bytes directly from memory.

Before the change, the code was:
- mthd->shadow(bios);
- which for ACPI calls nouveau_bios_shadow_acpi which doesn't try to validate the image
mthd->score = nouveau_bios_score(bios, mthd->rw); which validates the image

So shadowing always happened *before* trying to look at the bios data.

The relevant log is below.

Ortwin

3.18:
Feb 15 11:28:50 localhost kernel: nouveau [ DEVICE][0000:01:00.0] BOOT0 : 0x0e63c0a1
Feb 15 11:28:50 localhost kernel: nouveau [ DEVICE][0000:01:00.0] Chipset: GK106 (NVE6)
Feb 15 11:28:50 localhost kernel: nouveau [ DEVICE][0000:01:00.0] Family : NVE0
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking PRAMIN for image...
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] ... signature not found
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking PROM for image...
Feb 15 11:28:50 localhost kernel: fbcon: inteldrmfb (fb0) is primary device
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] ... signature not found
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking ACPI for image...
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] ... appears to be valid
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] using image from ACPI
Feb 15 11:28:50 localhost kernel: nouveau [ VBIOS][0000:01:00.0] BIT signature found


3.19:
Feb 15 11:30:40 localhost kernel: VGA switcheroo: detected Optimus DSM method \_SB_.PCI0.PEGP.DGFX handle
Feb 15 11:30:40 localhost kernel: nouveau 0000:01:00.0: enabling device (0004 -> 0007)
Feb 15 11:30:40 localhost kernel: nouveau [ DEVICE][0000:01:00.0] BOOT0 : 0x0e63c0a1
Feb 15 11:30:40 localhost kernel: nouveau [ DEVICE][0000:01:00.0] Chipset: GK106 (NVE6)
Feb 15 11:30:40 localhost kernel: nouveau [ DEVICE][0000:01:00.0] Family : NVE0
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying ACPI...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: type 00, 65536 bytes
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: fetch failed
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] scored 0
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying ACPI...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: type 00, 65536 bytes
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: fetch failed
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] scored 0
Feb 15 11:30:40 localhost kernel: nouveau E[ VBIOS][0000:01:00.0] ACPI invalid
Feb 15 11:30:40 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking (null) for image...
Feb 15 11:30:40 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking PRAMIN for image...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying PRAMIN...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] ... not enabled
Feb 15 11:30:40 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking PROM for image...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying PROM...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: ROM signature (ffff) unknown
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] image 0 invalid
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] scored 0
Feb 15 11:30:40 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking ACPI for image...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying ACPI...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: type 00, 65536 bytes
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: fetch failed
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] scored 0
Feb 15 11:30:40 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking ACPI for image...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying ACPI...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: type 00, 65536 bytes
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: fetch failed
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] scored 0
Feb 15 11:30:40 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking PCIROM for image...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying PCIROM...
Feb 15 11:30:40 localhost kernel: nouveau 0000:01:00.0: Invalid ROM contents
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] 00000000: ROM signature (0000) unknown
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] image 0 invalid
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] scored 0
Feb 15 11:30:40 localhost kernel: nouveau [ VBIOS][0000:01:00.0] checking PLATFORM for image...
Feb 15 11:30:40 localhost kernel: nouveau D[ VBIOS][0000:01:00.0] trying PLATFORM...
Feb 15 11:30:40 localhost kernel: nouveau ![ VBIOS][0000:01:00.0] unable to locate usable image
Feb 15 11:30:40 localhost kernel: nouveau E[ DEVICE][0000:01:00.0] failed to create 0x10000001, -22
Feb 15 11:30:40 localhost kernel: nouveau E[ DRM] failed to create 0x00000080, -22
Feb 15 11:30:40 localhost kernel: nouveau: probe of 0000:01:00.0 failed with error -22
--
To unsubscribe from this list: send the line "unsubscribe linux-kernel" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at http://vger.kernel.org/majordomo-info.html
Please read the FAQ at http://www.tux.org/lkml/