drivers/xgi/z9s: Port Linux framebuffer initialization to coreboot

Add native XGI Z9s framebuffer support to coreboot
XGI initialization code largely taken from Linux 3.18.5

TEST: Booted KFSN4-DRE with XGI Volari Z9s into SeaBIOS
with SeaVGABIOS enabled.  Text appeared correctly on screen
and interaction with graphical comboot menu was successful.
However, Linux cleared the framebuffer on boot, rendering the
screen useless until Linux loaded its native xgifb driver.

Change-Id: I606a3892849fc578b0c4d74536aec0a0adef3be3
Signed-off-by: Timothy Pearson <tpearson@raptorengineeringinc.com>
Reviewed-on: http://review.coreboot.org/8331
Tested-by: build bot (Jenkins)
Reviewed-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
This commit is contained in:
Timothy Pearson
2015-02-02 18:25:34 -06:00
committed by Alexandru Gagniuc
parent 5c015f045d
commit c522fc8f38
29 changed files with 13566 additions and 0 deletions

View File

@@ -0,0 +1,14 @@
config DRIVERS_XGI_Z9S
bool
if DRIVERS_XGI_Z9S
config DEVICE_SPECIFIC_OPTIONS # dummy
def_bool y
select DRIVERS_XGI_Z79_COMMON
config NATIVE_VGA_INIT_USE_EDID
bool
default n
endif # DRIVERS_XGI_Z9S

View File

@@ -0,0 +1 @@
ramstage-$(CONFIG_DRIVERS_XGI_Z9S) += z9s.c

59
src/drivers/xgi/z9s/z9s.c Normal file
View File

@@ -0,0 +1,59 @@
/*
* This file is part of the coreboot project.
*
* Copyright (C) 2015 Timothy Pearson <tpearson@raptorengineeringinc.com>, Raptor Engineering
*
* This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; version 2 of the License.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
*/
#include <delay.h>
#include <stdlib.h>
#include <string.h>
#include <arch/io.h>
#include <edid.h>
#include <console/console.h>
#include <device/device.h>
#include <device/pci.h>
#include <device/pci_ids.h>
#include <device/pci_ops.h>
#include "../common/xgi_coreboot.h"
#include "../common/XGIfb.h"
static void xgi_z9s_init(struct device *dev)
{
u8 ret;
struct xgifb_video_info *xgifb_info;
printk(BIOS_INFO, "XGI Z9s: initializing video device\n");
xgifb_info = malloc(sizeof(*xgifb_info));
ret = xgifb_probe(dev, xgifb_info);
if (!ret)
xgifb_modeset(dev, xgifb_info);
free(xgifb_info);
}
static struct device_operations xgi_z9s_ops = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
.init = xgi_z9s_init,
.scan_bus = 0,
};
static const struct pci_driver xgi_z9s_driver __pci_driver = {
.ops = &xgi_z9s_ops,
.vendor = PCI_VENDOR_ID_XGI,
.device = PCI_DEVICE_ID_XGI_20,
};