Raul Rangel has uploaded this change for review.

View Change

lib/edid_fill_fb: Relax bits_per_pixel constraint

The Picasso VBIOS is not setting the reserved_mask_size correctly. This
change relaxes the constraint to allow bpp_mask <= bits_per_pixel. This
is how the code previously used to work before CB:39002.

BUG=b:177094598, b:177422379
TEST=boot zork and see depthcharge working

Signed-off-by: Raul E Rangel <rrangel@chromium.org>
Change-Id: I2e67532fa949fbd673269d8d7f1c0d8af6124ac9
---
M src/lib/edid_fill_fb.c
1 file changed, 10 insertions(+), 3 deletions(-)

git pull ssh://review.coreboot.org:29418/coreboot refs/changes/04/49404/1
diff --git a/src/lib/edid_fill_fb.c b/src/lib/edid_fill_fb.c
index 712cd0f..cfd7776 100644
--- a/src/lib/edid_fill_fb.c
+++ b/src/lib/edid_fill_fb.c
@@ -48,10 +48,17 @@

bpp_mask = fb->blue_mask_size + fb->green_mask_size + fb->red_mask_size +
fb->reserved_mask_size;
- if (fb->bits_per_pixel != bpp_mask) {
- printk(BIOS_ERR, "%s: BPP=%d and channel bit mask=%d doesn't match."
- " This is a driver bug.\n", __func__, fb->bits_per_pixel, bpp_mask);
+ if (bpp_mask > fb->bits_per_pixel) {
+ printk(BIOS_ERR,
+ "%s: channel bit mask=%d is greater than BPP=%d ."
+ " This is a driver bug. Framebuffer is invalid.\n",
+ __func__, bpp_mask, fb->bits_per_pixel);
return NULL;
+ } else if (fb->bits_per_pixel != bpp_mask) {
+ printk(BIOS_WARNING,
+ "%s: BPP=%d and channel bit mask=%d doesn't match."
+ " This is a driver bug.\n",
+ __func__, fb->bits_per_pixel, bpp_mask);
}

info = fb_new_framebuffer_info();

To view, visit change 49404. To unsubscribe, or for help writing mail filters, visit settings.

Gerrit-Project: coreboot
Gerrit-Branch: master
Gerrit-Change-Id: I2e67532fa949fbd673269d8d7f1c0d8af6124ac9
Gerrit-Change-Number: 49404
Gerrit-PatchSet: 1
Gerrit-Owner: Raul Rangel <rrangel@chromium.org>
Gerrit-MessageType: newchange