summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/devices/Config.lb7
-rw-r--r--src/devices/device.c5
-rw-r--r--src/devices/pci_device.c10
-rw-r--r--src/devices/pci_rom.c14
-rw-r--r--src/mainboard/tyan/s2850/Options.lb8
5 files changed, 39 insertions, 5 deletions
diff --git a/src/devices/Config.lb b/src/devices/Config.lb
index da621e7962..8de8d4af32 100644
--- a/src/devices/Config.lb
+++ b/src/devices/Config.lb
@@ -1,3 +1,4 @@
+uses CONFIG_PCI_ROM_RUN
object device.o
object root_device.o
object device_util.o
@@ -7,5 +8,7 @@ object hypertransport.o
object pci_ops.o
object smbus_ops.o
-object pci_rom.o
-dir emulator
+if CONFIG_PCI_ROM_RUN
+ object pci_rom.o
+ dir emulator
+end
diff --git a/src/devices/device.c b/src/devices/device.c
index 8279a652b1..40d3f5cf2d 100644
--- a/src/devices/device.c
+++ b/src/devices/device.c
@@ -364,6 +364,7 @@ void compute_allocate_resource(
}
+#if CONFIG_CONSOLE_VGA == 1
static void allocate_vga_resource(void)
{
#warning "FIXME modify allocate_vga_resource so it is less pci centric!"
@@ -401,7 +402,7 @@ static void allocate_vga_resource(void)
bus = (bus == bus->dev->bus)? 0 : bus->dev->bus;
}
}
-
+#endif
/**
* @brief Assign the computed resources to the devices on the bus.
@@ -556,8 +557,10 @@ void dev_configure(void)
mem->flags |= IORESOURCE_ASSIGNED;
mem->flags &= ~IORESOURCE_STORED;
+#if CONFIG_CONSOLE_VGA == 1
/* Allocate the VGA I/O resource.. */
allocate_vga_resource();
+#endif
/* Store the computed resource allocations into device registers ... */
printk_info("Setting resources...\n");
diff --git a/src/devices/pci_device.c b/src/devices/pci_device.c
index 8bd6ec846e..4aef2229b3 100644
--- a/src/devices/pci_device.c
+++ b/src/devices/pci_device.c
@@ -551,10 +551,12 @@ void pci_bus_enable_resources(struct device *dev)
{
uint16_t ctrl;
+#if CONFIG_CONSOLE_VGA == 1
/* enable IO in command register if there is VGA card
* connected with (even it does not claim IO resource) */
if (dev->link[0].bridge_ctrl & PCI_BRIDGE_CTL_VGA)
dev->command |= PCI_COMMAND_IO;
+#endif
ctrl = pci_read_config16(dev, PCI_BRIDGE_CONTROL);
ctrl |= dev->link[0].bridge_ctrl;
@@ -573,6 +575,7 @@ void pci_dev_set_subsystem(device_t dev, unsigned vendor, unsigned device)
((device & 0xffff) << 16) | (vendor & 0xffff));
}
+#if CONFIG_PCI_ROM_RUN == 1
void pci_dev_init(struct device *dev)
{
struct rom_header *rom, *ram;
@@ -581,9 +584,12 @@ void pci_dev_init(struct device *dev)
if (rom == NULL)
return;
ram = pci_rom_load(dev, rom);
+ if (ram == NULL)
+ return;
run_bios(dev, ram);
}
+#endif
/** Default device operation for PCI devices */
static struct pci_operations pci_dev_ops_pci = {
@@ -594,7 +600,11 @@ struct device_operations default_pci_ops_dev = {
.read_resources = pci_dev_read_resources,
.set_resources = pci_dev_set_resources,
.enable_resources = pci_dev_enable_resources,
+#if CONFIG_PCI_ROM_RUN == 1
.init = pci_dev_init,
+#else
+ .init = 0,
+#endif
.scan_bus = 0,
.enable = 0,
.ops_pci = &pci_dev_ops_pci,
diff --git a/src/devices/pci_rom.c b/src/devices/pci_rom.c
index 614fbd55b9..310c00f00c 100644
--- a/src/devices/pci_rom.c
+++ b/src/devices/pci_rom.c
@@ -11,11 +11,12 @@ struct rom_header * pci_rom_probe(struct device *dev)
struct pci_data *rom_data;
rom_address = pci_read_config32(dev, PCI_ROM_ADDRESS);
+
if (rom_address == 0x00000000 || rom_address == 0xffffffff) {
return NULL;
}
- printk_spew("%s, rom address for %s = %x\n",
+ printk_debug("%s, rom address for %s = %x\n",
__func__, dev_path(dev), rom_address);
/* enable expansion ROM address decoding */
@@ -53,6 +54,11 @@ struct rom_header * pci_rom_probe(struct device *dev)
}
static void *pci_ram_image_start = PCI_RAM_IMAGE_START;
+
+#if CONFIG_CONSOLE_VGA == 1
+int vga_inited = 0; // it will be used by vga_console
+#endif
+
struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_header)
{
struct pci_data * rom_data;
@@ -64,10 +70,14 @@ struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_heade
rom_size = rom_header->size*512;
if (PCI_CLASS_DISPLAY_VGA == (rom_data->class_hi << 16 | rom_data->class_lo)) {
+#if CONFIG_CONSOLE_VGA == 1
+ if(vga_inited) return NULL; // only one VGA supported
printk_spew("%s, copying VGA ROM Image from %x to %x, %x bytes\n",
__func__, rom_header, PCI_VGA_RAM_IMAGE_START, rom_size);
memcpy(PCI_VGA_RAM_IMAGE_START, rom_header, rom_size);
+ vga_inited = 1;
return (struct rom_header *) (PCI_VGA_RAM_IMAGE_START);
+#endif
} else {
printk_spew("%s, copying non-VGA ROM Image from %x to %x, %x bytes\n",
__func__, rom_header, pci_ram_image_start, rom_size);
@@ -77,4 +87,6 @@ struct rom_header *pci_rom_load(struct device *dev, struct rom_header *rom_heade
}
/* disable expansion ROM address decoding */
pci_write_config32(dev, PCI_ROM_ADDRESS, rom_address & ~PCI_ROM_ADDRESS_ENABLE);
+
+ return NULL;
}
diff --git a/src/mainboard/tyan/s2850/Options.lb b/src/mainboard/tyan/s2850/Options.lb
index d161e165c1..b9f488f194 100644
--- a/src/mainboard/tyan/s2850/Options.lb
+++ b/src/mainboard/tyan/s2850/Options.lb
@@ -51,6 +51,8 @@ uses CC
uses HOSTCC
uses OBJCOPY
uses CONFIG_CHIP_NAME
+uses CONFIG_CONSOLE_VGA
+uses CONFIG_PCI_ROM_RUN
###
### Build options
@@ -115,7 +117,11 @@ default CONFIG_SMP=1
default CONFIG_MAX_CPUS=1
#BTEXT CONSOLE
-default CONFIG_CONSOLE_BTEXT=1
+#default CONFIG_CONSOLE_BTEXT=1
+
+#VGA
+default CONFIG_CONSOLE_VGA=1
+default CONFIG_PCI_ROM_RUN=1
##
## Build code to setup a generic IOAPIC