works for PCI vga cards too


git-svn-id: svn://svn.coreboot.org/coreboot/trunk@1856 2b7e53f0-3cfb-0310-b3e9-8179ed1497e1
diff --git a/src/devices/device.c b/src/devices/device.c
index d974a19..0ad756b 100644
--- a/src/devices/device.c
+++ b/src/devices/device.c
@@ -378,6 +378,7 @@
 		if (((dev->class >> 16) == PCI_BASE_CLASS_DISPLAY) &&
 		    ((dev->class >> 8) != PCI_CLASS_DISPLAY_OTHER)) {
 			if (!vga) {
+                                printk_debug("Allocating VGA resource %s\n", dev_path(dev));
 				vga = dev;
 			}
 			if (vga == dev) {
@@ -394,6 +395,8 @@
 	}
 	/* Now walk up the bridges setting the VGA enable */
 	while (bus) {
+		printk_debug("Setting PCI_BRIDGE_CTL_VGA for bridge %s\n",
+			     dev_path(bus->dev));
 		bus->bridge_ctrl |= PCI_BRIDGE_CTL_VGA;
 		bus = (bus == bus->dev->bus)? 0 : bus->dev->bus;
 	} 
diff --git a/src/devices/emulator/biosemu.c b/src/devices/emulator/biosemu.c
index 0288403..c1f48a2 100644
--- a/src/devices/emulator/biosemu.c
+++ b/src/devices/emulator/biosemu.c
@@ -46,8 +46,8 @@
 	X86_CS = MEM_RW((num << 2) + 2);
 	X86_IP = MEM_RW(num << 2);
 
-	printk_debug("%s: INT %x CS:IP = %x:%x\n", __FUNCTION__,
-		     num, MEM_RW((num << 2) + 2), MEM_RW(num << 2));
+	//printk_debug("%s: INT %x CS:IP = %x:%x\n", __FUNCTION__,
+	//	     num, MEM_RW((num << 2) + 2), MEM_RW(num << 2));
 
 	return 1;
 }
@@ -58,8 +58,8 @@
 
 	val = inb(port);
 
-	if (port != 0x40)
-	    printk_debug("inb(0x%04x) = 0x%02x\n", port, val);
+	//if (port != 0x40)
+	//    printk_debug("inb(0x%04x) = 0x%02x\n", port, val);
 
 	return val;
 }
@@ -70,7 +70,7 @@
 
 	val = inw(port);
 
-	printk_debug("inw(0x%04x) = 0x%04x\n", port, val);
+	//printk_debug("inw(0x%04x) = 0x%04x\n", port, val);
 	return val;
 }
 
@@ -80,26 +80,26 @@
 
 	val = inl(port);
 
-	printk_debug("inl(0x%04x) = 0x%08x\n", port, val);
+	//printk_debug("inl(0x%04x) = 0x%08x\n", port, val);
 	return val;
 }
 
 void x_outb(u16 port, u8 val)
 {
-	if (port != 0x43)
-		printk_debug("outb(0x%02x, 0x%04x)\n", val, port);
+	//if (port != 0x43)
+	//	printk_debug("outb(0x%02x, 0x%04x)\n", val, port);
 	outb(val, port);
 }
 
 void x_outw(u16 port, u16 val)
 {
-	printk_debug("outw(0x%04x, 0x%04x)\n", val, port);
+	//printk_debug("outw(0x%04x, 0x%04x)\n", val, port);
 	outw(val, port);
 }
 
 void x_outl(u16 port, u32 val)
 {
-	printk_debug("outl(0x%08x, 0x%04x)\n", val, port);
+	//printk_debug("outl(0x%08x, 0x%04x)\n", val, port);
 	outl(val, port);
 }
 
@@ -116,7 +116,7 @@
 {
 	int ret = 0;
 
-	printk_debug("int%x vector at %x\n", num, getIntVect(num));
+	//printk_debug("int%x vector at %x\n", num, getIntVect(num));
 
 	switch (num) {
 #ifndef _PC
@@ -143,6 +143,7 @@
 		break;
 	case 0x1A:
 		ret = pcibios_handler();
+		ret = 1;
 		break;
 	case 0xe6:
 		//ret = intE6_handler();
diff --git a/src/devices/emulator/pcbios/pcibios.c b/src/devices/emulator/pcbios/pcibios.c
index 74d25dc..1517d2a 100644
--- a/src/devices/emulator/pcbios/pcibios.c
+++ b/src/devices/emulator/pcbios/pcibios.c
@@ -12,8 +12,6 @@
 	int i, ret = 0;
 	struct device *dev = 0;
 
-	printk_debug("%s AX = %x\n", __func__, X86_AX);
-
 	switch (X86_AX) {
 	case PCI_BIOS_PRESENT:
 		X86_AH	= 0x00;		/* no config space/special cycle support */
diff --git a/src/devices/emulator/x86emu/sys.c b/src/devices/emulator/x86emu/sys.c
index 2b437bf..7669c29 100644
--- a/src/devices/emulator/x86emu/sys.c
+++ b/src/devices/emulator/x86emu/sys.c
@@ -205,8 +205,8 @@
 	} else
 #endif
 	if (addr < 0x200) {
-		printk("%x:%x updating int vector 0x%x\n",
-		       M.x86.R_CS, M.x86.R_IP, addr >> 2);
+		//printk("%x:%x updating int vector 0x%x\n",
+		//       M.x86.R_CS, M.x86.R_IP, addr >> 2);
 
 		retaddr = (u8 *) (M.mem_base + addr);
 	} else {
diff --git a/src/devices/pci_device.c b/src/devices/pci_device.c
index 7471694..5b038e4 100644
--- a/src/devices/pci_device.c
+++ b/src/devices/pci_device.c
@@ -537,6 +537,12 @@
 void pci_bus_enable_resources(struct device *dev)
 {
 	uint16_t ctrl;
+
+	/* 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;
+
 	ctrl = pci_read_config16(dev, PCI_BRIDGE_CONTROL);
 	ctrl |= dev->link[0].bridge_ctrl;
 	ctrl |= (PCI_BRIDGE_CTL_PARITY + PCI_BRIDGE_CTL_SERR); /* error check */
diff --git a/src/devices/pci_rom.c b/src/devices/pci_rom.c
index 1869a5b..cbeaf85 100644
--- a/src/devices/pci_rom.c
+++ b/src/devices/pci_rom.c
@@ -17,17 +17,17 @@
 		return NULL;
 	}
 
-	printk_debug("%s, rom address for %s = %x\n",
-		     __func__, dev_path(dev), rom_address);
+	printk_spew("%s, rom address for %s = %x\n",
+		    __func__, dev_path(dev), rom_address);
 
 	/* enable expansion ROM address decoding */
 	pci_write_config32(dev, PCI_ROM_ADDRESS, rom_address|PCI_ROM_ADDRESS_ENABLE);
 
 	rom_header = rom_address;
-	printk_debug("%s, PCI Expansion ROM, signature 0x%04x, \n\t"
-		     "INIT size 0x%04x, data ptr 0x%04x\n",
-		     __func__, le32_to_cpu(rom_header->signature),
-		     rom_header->size * 512, le32_to_cpu(rom_header->data));
+	printk_spew("%s, PCI Expansion ROM, signature 0x%04x, \n\t"
+		    "INIT size 0x%04x, data ptr 0x%04x\n",
+		    __func__, le32_to_cpu(rom_header->signature),
+		    rom_header->size * 512, le32_to_cpu(rom_header->data));
 	if (le32_to_cpu(rom_header->signature) != PCI_ROM_HDR) {
 		printk_err("%s, Incorrect Expansion ROM Header Signature %04x\n",
 			   __func__, le32_to_cpu(rom_header->signature));
@@ -35,16 +35,16 @@
 	}
 
 	rom_data = (unsigned char *) rom_header + le32_to_cpu(rom_header->data);
-	printk_debug("%s, PCI ROM Image,  Vendor %04x, Device %04x,\n",
-		     __func__, rom_data->vendor, rom_data->device);
+	printk_spew("%s, PCI ROM Image,  Vendor %04x, Device %04x,\n",
+		    __func__, rom_data->vendor, rom_data->device);
 	if (dev->vendor != rom_data->vendor || dev->device != rom_data->device) {
 		printk_err("%s, Device or Vendor ID mismatch\n");
 		return NULL;
 	}
 
-	printk_debug("%s, PCI ROM Image,  Class Code %02x%04x, Code Type %02x\n",
-		     __func__, rom_data->class_hi, rom_data->class_lo,
-		     rom_data->type);
+	printk_spew("%s, PCI ROM Image,  Class Code %02x%04x, Code Type %02x\n",
+		    __func__, rom_data->class_hi, rom_data->class_lo,
+		    rom_data->type);
 	if ((dev->class >> 8) != (rom_data->class_hi << 16 | rom_data->class_lo)) {
 		printk_err("%s, Class Code mismatch %x\n",
 			   __func__, dev->class);
@@ -66,13 +66,13 @@
 	rom_size = rom_header->size*512;
 
 	if (PCI_CLASS_DISPLAY_VGA == (rom_data->class_hi << 16 | rom_data->class_lo)) {
-		printk_debug("%s, copying VGA ROM Image from %x to %x, %x bytes\n",
-			     __func__, rom_header, PCI_VGA_RAM_IMAGE_START, rom_size);
+		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);
 		return (struct rom_header *) (PCI_VGA_RAM_IMAGE_START);
 	} else {
-		printk_debug("%s, copying non-VGA ROM Image from %x to %x, %x bytes\n",
-			     __func__, rom_header, pci_ram_image_start, rom_size);
+		printk_spew("%s, copying non-VGA ROM Image from %x to %x, %x bytes\n",
+			    __func__, rom_header, pci_ram_image_start, rom_size);
 		memcpy(pci_ram_image_start, rom_header, rom_size);
 		pci_ram_image_start += rom_size;
 		return (struct rom_header *) pci_ram_image_start;