x86: fsp: Add FSP_GRAPHICS_INFO_HOB

This adds a new HOB type for graphics information introduced in FSP
spec 1.1. When graphics capability is included in FSP and enabled,
FSP produces an FSP_GRAPHICS_INFO_HOB as described in the EFI PI
specification which provides information about the graphics mode and
framebuffer.

Signed-off-by: Bin Meng <bmeng.cn@gmail.com>
Reviewed-by: Simon Glass <sjg@chromium.org>
This commit is contained in:
Bin Meng 2017-08-15 22:41:52 -07:00
parent bb737ced7f
commit 4ff333b7dd
3 changed files with 45 additions and 0 deletions

View file

@ -127,6 +127,26 @@ struct hob_guid {
/* GUID specific data goes here */
};
enum pixel_format {
pixel_rgbx_8bpc, /* RGB 8 bit per color */
pixel_bgrx_8bpc, /* BGR 8 bit per color */
pixel_bitmask,
};
struct __packed hob_graphics_info {
phys_addr_t fb_base; /* framebuffer base address */
u32 fb_size; /* framebuffer size */
u32 version;
u32 width;
u32 height;
enum pixel_format pixel_format;
u32 red_mask;
u32 green_mask;
u32 blue_mask;
u32 reserved_mask;
u32 pixels_per_scanline;
};
/**
* get_next_hob() - return a pointer to the next HOB in the HOB list
*
@ -250,4 +270,10 @@ static inline u16 get_guid_hob_data_size(const struct hob_header *hdr)
{ 0xb3, 0x16, 0x36, 0x35, 0x36, 0x67, 0xad, 0x44 } \
}
#define FSP_GRAPHICS_INFO_HOB_GUID \
{ \
0x39f62cce, 0x6825, 0x4669, \
{ 0xbb, 0x56, 0x54, 0x1a, 0xba, 0x75, 0x3a, 0x07 } \
}
#endif

View file

@ -190,6 +190,18 @@ void *fsp_get_nvs_data(const void *hob_list, u32 *len);
*/
void *fsp_get_bootloader_tmp_mem(const void *hob_list, u32 *len);
/**
* This function retrieves graphics information.
*
* @hob_list: A HOB list pointer.
* @len: A pointer to the graphics info HOB length.
* If the HOB is located, the length will be updated.
*
* @retval NULL: Failed to find the graphics info HOB.
* @retval others: A pointer to struct hob_graphics_info.
*/
void *fsp_get_graphics_info(const void *hob_list, u32 *len);
/**
* This function overrides the default configurations of FSP.
*

View file

@ -425,3 +425,10 @@ void *fsp_get_bootloader_tmp_mem(const void *hob_list, u32 *len)
return fsp_get_guid_hob_data(hob_list, len, (struct efi_guid *)&guid);
}
void *fsp_get_graphics_info(const void *hob_list, u32 *len)
{
const struct efi_guid guid = FSP_GRAPHICS_INFO_HOB_GUID;
return fsp_get_guid_hob_data(hob_list, len, (struct efi_guid *)&guid);
}