mirror of
https://github.com/u-boot/u-boot.git
synced 2024-11-25 05:04:23 +08:00
x86: Configure VESA parameters before loading Linux kernel
Store VESA parameters to Linux setup header so that vesafb driver in the kernel could work. Signed-off-by: Bin Meng <bmeng.cn@gmail.com> Acked-by: Simon Glass <sjg@chromium.org> Tested-by: Jian Luo <jian.luo4@boschrexroth.de>
This commit is contained in:
parent
7aaff9bf81
commit
a452002259
@ -38,5 +38,6 @@ struct boot_params *load_zimage(char *image, unsigned long kernel_size,
|
||||
ulong *load_addressp);
|
||||
int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
|
||||
unsigned long initrd_addr, unsigned long initrd_size);
|
||||
void setup_video(struct screen_info *screen_info);
|
||||
|
||||
#endif
|
||||
|
@ -273,6 +273,8 @@ int setup_zimage(struct boot_params *setup_base, char *cmd_line, int auto_boot,
|
||||
build_command_line(cmd_line, auto_boot);
|
||||
}
|
||||
|
||||
setup_video(&setup_base->screen_info);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
@ -31,6 +31,7 @@
|
||||
#include <pci_rom.h>
|
||||
#include <vbe.h>
|
||||
#include <video_fb.h>
|
||||
#include <linux/screen_info.h>
|
||||
|
||||
#ifdef CONFIG_HAVE_ACPI_RESUME
|
||||
#include <asm/acpi.h>
|
||||
@ -230,6 +231,33 @@ int vbe_get_video_info(struct graphic_device *gdev)
|
||||
#endif
|
||||
}
|
||||
|
||||
void setup_video(struct screen_info *screen_info)
|
||||
{
|
||||
#ifdef CONFIG_FRAMEBUFFER_SET_VESA_MODE
|
||||
struct vesa_mode_info *vesa = &mode_info.vesa;
|
||||
|
||||
screen_info->orig_video_isVGA = VIDEO_TYPE_VLFB;
|
||||
|
||||
screen_info->lfb_width = vesa->x_resolution;
|
||||
screen_info->lfb_height = vesa->y_resolution;
|
||||
screen_info->lfb_depth = vesa->bits_per_pixel;
|
||||
screen_info->lfb_linelength = vesa->bytes_per_scanline;
|
||||
screen_info->lfb_base = vesa->phys_base_ptr;
|
||||
screen_info->lfb_size =
|
||||
ALIGN(screen_info->lfb_linelength * screen_info->lfb_height,
|
||||
65536);
|
||||
screen_info->lfb_size >>= 16;
|
||||
screen_info->red_size = vesa->red_mask_size;
|
||||
screen_info->red_pos = vesa->red_mask_pos;
|
||||
screen_info->green_size = vesa->green_mask_size;
|
||||
screen_info->green_pos = vesa->green_mask_pos;
|
||||
screen_info->blue_size = vesa->blue_mask_size;
|
||||
screen_info->blue_pos = vesa->blue_mask_pos;
|
||||
screen_info->rsvd_size = vesa->reserved_mask_size;
|
||||
screen_info->rsvd_pos = vesa->reserved_mask_pos;
|
||||
#endif
|
||||
}
|
||||
|
||||
int pci_run_vga_bios(pci_dev_t dev, int (*int15_handler)(void), int exec_method)
|
||||
{
|
||||
struct pci_rom_header *rom, *ram;
|
||||
|
@ -12,7 +12,7 @@
|
||||
#define _VBE_H
|
||||
|
||||
/* these structs are for input from and output to OF */
|
||||
struct __packed screen_info {
|
||||
struct __packed vbe_screen_info {
|
||||
u8 display_type; /* 0=NONE, 1= analog, 2=digital */
|
||||
u16 screen_width;
|
||||
u16 screen_height;
|
||||
@ -23,7 +23,7 @@ struct __packed screen_info {
|
||||
u8 edid_block_zero[128];
|
||||
};
|
||||
|
||||
struct __packed screen_info_input {
|
||||
struct __packed vbe_screen_info_input {
|
||||
u8 signature[4];
|
||||
u16 size_reserved;
|
||||
u8 monitor_number;
|
||||
|
Loading…
Reference in New Issue
Block a user