drivers: Replace set_vbe_mode_info_valid
Currently it's not possible to add multiple graphics driver into one coreboot image. This patch series will fix this issue by providing a single API that multiple graphics driver can use. This is required for platforms that have two graphic cards, but different graphic drivers, like Intel+Aspeed on server platforms or Intel+Nvidia on consumer notebooks. The goal is to remove duplicated fill_fb_framebuffer(), the advertisment of multiple indepent framebuffers in coreboot tables, and better runtime/build time graphic configuration options. Replace set_vbe_mode_info_valid with fb_add_framebuffer_info or fb_new_framebuffer_info_from_edid. Change-Id: I95d1d62385a201c68c6c2527c023ad2292a235c5 Signed-off-by: Patrick Rudolph <patrick.rudolph@9elements.com> Reviewed-on: https://review.coreboot.org/c/coreboot/+/39004 Tested-by: build bot (Jenkins) <no-reply@coreboot.org> Reviewed-by: Hung-Te Lin <hungte@chromium.org>
This commit is contained in:
committed by
Hung-Te Lin
parent
6c04b353c5
commit
8b56c8c6b2
@@ -6,6 +6,7 @@
|
||||
#include <console/console.h>
|
||||
#include <edid.h>
|
||||
#include <device/pci_def.h>
|
||||
#include <framebuffer_info.h>
|
||||
|
||||
#include "ast_drv.h"
|
||||
|
||||
@@ -200,7 +201,7 @@ int ast_driver_framebuffer_init(struct drm_device *dev, int flags)
|
||||
return ret;
|
||||
}
|
||||
|
||||
/* Updated edid for set_vbe_mode_info_valid */
|
||||
/* Updated edid for fb_fill_framebuffer_info */
|
||||
edid.x_resolution = edid.mode.ha;
|
||||
edid.y_resolution = edid.mode.va;
|
||||
edid.framebuffer_bits_per_pixel = format.cpp[0] * 8;
|
||||
@@ -227,7 +228,7 @@ int ast_driver_framebuffer_init(struct drm_device *dev, int flags)
|
||||
ast_hide_cursor(&crtc);
|
||||
|
||||
/* Advertise new mode */
|
||||
set_vbe_mode_info_valid(&edid, fb.mmio_addr);
|
||||
fb_new_framebuffer_info_from_edid(&edid, fb.mmio_addr);
|
||||
|
||||
/* Clear display */
|
||||
memset((void *)(uintptr_t)fb.mmio_addr, 0, edid.bytes_per_line * edid.y_resolution);
|
||||
|
@@ -1,7 +1,6 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-only */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <edid.h>
|
||||
#include <arch/io.h>
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
@@ -10,6 +9,7 @@
|
||||
#include <device/pci_ids.h>
|
||||
#include <pc80/vga.h>
|
||||
#include <pc80/vga_io.h>
|
||||
#include <framebuffer_info.h>
|
||||
|
||||
/* VGA init. We use the Bochs VESA VBE extensions */
|
||||
#define VBE_DISPI_IOPORT_INDEX 0x01CE
|
||||
@@ -82,7 +82,6 @@ static struct resource res_legacy = {
|
||||
|
||||
static void bochs_init_linear_fb(struct device *dev)
|
||||
{
|
||||
struct edid edid;
|
||||
struct resource *res_fb, *res_io;
|
||||
int id, mem, bar;
|
||||
|
||||
@@ -139,13 +138,8 @@ static void bochs_init_linear_fb(struct device *dev)
|
||||
|
||||
bochs_vga_write(res_io, 0, 0x20); /* disable blanking */
|
||||
|
||||
/* setup coreboot framebuffer */
|
||||
edid.mode.ha = width;
|
||||
edid.mode.va = height;
|
||||
edid.panel_bits_per_color = 8;
|
||||
edid.panel_bits_per_pixel = 24;
|
||||
edid_set_framebuffer_bits_per_pixel(&edid, 32, 0);
|
||||
set_vbe_mode_info_valid(&edid, res_fb->base);
|
||||
/* Advertise new mode */
|
||||
fb_add_framebuffer_info(res_fb->base, width, height, 4 * width, 32);
|
||||
}
|
||||
|
||||
static void bochs_init_text_mode(struct device *dev)
|
||||
|
@@ -1,13 +1,13 @@
|
||||
/* SPDX-License-Identifier: GPL-2.0-or-later */
|
||||
|
||||
#include <stdint.h>
|
||||
#include <edid.h>
|
||||
#include <console/console.h>
|
||||
#include <device/device.h>
|
||||
#include <device/pci.h>
|
||||
#include <device/pci_ops.h>
|
||||
#include <pc80/vga.h>
|
||||
#include <pc80/vga_io.h>
|
||||
#include <framebuffer_info.h>
|
||||
|
||||
static int width = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_XRES;
|
||||
static int height = CONFIG_DRIVERS_EMULATION_QEMU_BOCHS_YRES;
|
||||
@@ -299,13 +299,7 @@ static void cirrus_init_linear_fb(struct device *dev)
|
||||
vga_sr_write (CIRRUS_SR_EXTENDED_MODE, sr_ext);
|
||||
write_hidden_dac (hidden_dac);
|
||||
|
||||
struct edid edid;
|
||||
edid.mode.ha = width;
|
||||
edid.mode.va = height;
|
||||
edid.panel_bits_per_color = 8;
|
||||
edid.panel_bits_per_pixel = 24;
|
||||
edid_set_framebuffer_bits_per_pixel(&edid, 32, 0);
|
||||
set_vbe_mode_info_valid(&edid, addr);
|
||||
fb_add_framebuffer_info(addr, width, height, 4 * width, 32);
|
||||
}
|
||||
|
||||
static void cirrus_init_text_mode(struct device *dev)
|
||||
|
Reference in New Issue
Block a user