2 * Copyright (C) 2016, Bin Meng <bmeng.cn@gmail.com>
4 * SPDX-License-Identifier: GPL-2.0+
11 #include <asm/arch/sysinfo.h>
13 static int save_vesa_mode(struct cb_framebuffer
*fb
,
14 struct vesa_mode_info
*vesa
)
17 * If there is no framebuffer structure, bail out and keep
18 * running on the serial console.
23 vesa
->x_resolution
= fb
->x_resolution
;
24 vesa
->y_resolution
= fb
->y_resolution
;
25 vesa
->bits_per_pixel
= fb
->bits_per_pixel
;
26 vesa
->bytes_per_scanline
= fb
->bytes_per_line
;
27 vesa
->phys_base_ptr
= fb
->physical_address
;
28 vesa
->red_mask_size
= fb
->red_mask_size
;
29 vesa
->red_mask_pos
= fb
->red_mask_pos
;
30 vesa
->green_mask_size
= fb
->green_mask_size
;
31 vesa
->green_mask_pos
= fb
->green_mask_pos
;
32 vesa
->blue_mask_size
= fb
->blue_mask_size
;
33 vesa
->blue_mask_pos
= fb
->blue_mask_pos
;
34 vesa
->reserved_mask_size
= fb
->reserved_mask_size
;
35 vesa
->reserved_mask_pos
= fb
->reserved_mask_pos
;
40 static int coreboot_video_probe(struct udevice
*dev
)
42 struct video_uc_platdata
*plat
= dev_get_uclass_platdata(dev
);
43 struct video_priv
*uc_priv
= dev_get_uclass_priv(dev
);
44 struct cb_framebuffer
*fb
= lib_sysinfo
.framebuffer
;
45 struct vesa_mode_info
*vesa
= &mode_info
.vesa
;
50 /* Initialize vesa_mode_info structure */
51 ret
= save_vesa_mode(fb
, vesa
);
55 ret
= vbe_setup_video_priv(vesa
, uc_priv
, plat
);
59 printf("%dx%dx%d\n", uc_priv
->xsize
, uc_priv
->ysize
,
60 vesa
->bits_per_pixel
);
65 printf("No video mode configured in coreboot!\n");
69 static const struct udevice_id coreboot_video_ids
[] = {
70 { .compatible
= "coreboot-fb" },
74 U_BOOT_DRIVER(coreboot_video
) = {
75 .name
= "coreboot_video",
77 .of_match
= coreboot_video_ids
,
78 .probe
= coreboot_video_probe
,