diff options
author | Nicolas Boichat <drinkcat@chromium.org> | 2019-08-06 08:29:52 +0800 |
---|---|---|
committer | Martin Roth <martinroth@google.com> | 2019-08-08 03:18:35 +0000 |
commit | 87f265b210e02a7aefb6da0bae61c2b0d9239a3e (patch) | |
tree | 1edba4e3dbd67b562053e2f167fd6b75a48d5018 | |
parent | 0ecdf3e5361414bd345f414e922b57ffdd60e898 (diff) |
lib/edid: Add suport for display rotation
Sometimes the display native orientation does not match the device
default orientation. We add a parameter to be passed to libpayload,
which can then do the rotation.
BUG=b:132049716
TEST=Boot krane, see that FW screen is orientation properly.
Change-Id: I5e1d94b973a3f615b73eebe0ca1202ba03731844
Signed-off-by: Nicolas Boichat <drinkcat@chromium.org>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/34731
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Julius Werner <jwerner@chromium.org>
-rw-r--r-- | src/commonlib/include/commonlib/coreboot_tables.h | 13 | ||||
-rw-r--r-- | src/include/edid.h | 2 | ||||
-rw-r--r-- | src/lib/edid_fill_fb.c | 5 |
3 files changed, 20 insertions, 0 deletions
diff --git a/src/commonlib/include/commonlib/coreboot_tables.h b/src/commonlib/include/commonlib/coreboot_tables.h index 0fe9703d34..7bded2a3a3 100644 --- a/src/commonlib/include/commonlib/coreboot_tables.h +++ b/src/commonlib/include/commonlib/coreboot_tables.h @@ -283,6 +283,18 @@ struct lb_forward { * fields described above. It may, however, only implement a subset * of the possible color formats. */ + +/* + * Framebuffer orientation, matches drm_connector.h drm_panel_orientation in the + * Linux kernel. + */ +enum lb_fb_orientation { + LB_FB_ORIENTATION_NORMAL = 0, + LB_FB_ORIENTATION_BOTTOM_UP = 1, + LB_FB_ORIENTATION_LEFT_UP = 2, + LB_FB_ORIENTATION_RIGHT_UP = 3, +}; + struct lb_framebuffer { uint32_t tag; uint32_t size; @@ -300,6 +312,7 @@ struct lb_framebuffer { uint8_t blue_mask_size; uint8_t reserved_mask_pos; uint8_t reserved_mask_size; + uint8_t orientation; }; diff --git a/src/include/edid.h b/src/include/edid.h index d567115744..e5f7d98926 100644 --- a/src/include/edid.h +++ b/src/include/edid.h @@ -17,6 +17,7 @@ #define EDID_H #include <stdint.h> +#include "commonlib/coreboot_tables.h" enum edid_modes { EDID_MODE_640x480_60Hz, @@ -107,6 +108,7 @@ int decode_edid(unsigned char *edid, int size, struct edid *out); void edid_set_framebuffer_bits_per_pixel(struct edid *edid, int fb_bpp, int row_byte_alignment); void set_vbe_mode_info_valid(const struct edid *edid, uintptr_t fb_addr); +void set_vbe_framebuffer_orientation(enum lb_fb_orientation orientation); int set_display_mode(struct edid *edid, enum edid_modes mode); #endif /* EDID_H */ diff --git a/src/lib/edid_fill_fb.c b/src/lib/edid_fill_fb.c index 210c727224..1b38ead596 100644 --- a/src/lib/edid_fill_fb.c +++ b/src/lib/edid_fill_fb.c @@ -81,6 +81,11 @@ void set_vbe_mode_info_valid(const struct edid *edid, uintptr_t fb_addr) fb_valid = 1; } +void set_vbe_framebuffer_orientation(enum lb_fb_orientation orientation) +{ + edid_fb.orientation = orientation; +} + int fill_lb_framebuffer(struct lb_framebuffer *framebuffer) { if (!fb_valid) |