|
|
@@ -122,28 +122,13 @@ static void efifb_copy_bmp(u8 *src, u32 *dst, int width, struct screen_info *si)
|
|
|
*/
|
|
|
static bool efifb_bgrt_sanity_check(struct screen_info *si, u32 bmp_width)
|
|
|
{
|
|
|
- static const int default_resolutions[][2] = {
|
|
|
- { 800, 600 },
|
|
|
- { 1024, 768 },
|
|
|
- { 1280, 1024 },
|
|
|
- };
|
|
|
- u32 i, right_margin;
|
|
|
-
|
|
|
- for (i = 0; i < ARRAY_SIZE(default_resolutions); i++) {
|
|
|
- if (default_resolutions[i][0] == si->lfb_width &&
|
|
|
- default_resolutions[i][1] == si->lfb_height)
|
|
|
- break;
|
|
|
- }
|
|
|
- /* If not a default resolution used for textmode, this should be fine */
|
|
|
- if (i >= ARRAY_SIZE(default_resolutions))
|
|
|
- return true;
|
|
|
-
|
|
|
- /* If the right margin is 5 times smaller then the left one, reject */
|
|
|
- right_margin = si->lfb_width - (bgrt_tab.image_offset_x + bmp_width);
|
|
|
- if (right_margin < (bgrt_tab.image_offset_x / 5))
|
|
|
- return false;
|
|
|
+ /*
|
|
|
+ * All x86 firmwares horizontally center the image (the yoffset
|
|
|
+ * calculations differ between boards, but xoffset is predictable).
|
|
|
+ */
|
|
|
+ u32 expected_xoffset = (si->lfb_width - bmp_width) / 2;
|
|
|
|
|
|
- return true;
|
|
|
+ return bgrt_tab.image_offset_x == expected_xoffset;
|
|
|
}
|
|
|
#else
|
|
|
static bool efifb_bgrt_sanity_check(struct screen_info *si, u32 bmp_width)
|