i3100: add sata_ports_implemented option
authorSven Schnelle <svens@stackframe.org>
Tue, 31 Jan 2012 21:44:53 +0000 (22:44 +0100)
committerSven Schnelle <svens@stackframe.org>
Tue, 31 Jan 2012 22:31:50 +0000 (23:31 +0100)
BIOS needs to set the bit mask which ports are iplemented on the
board. Without setting this option, seabios fails to boot from
SATA.

Change-Id: I21de3fde3a9cff7c590226f70fa549274f36e2a8
Signed-off-by: Sven Schnelle <svens@stackframe.org>
Reviewed-on: http://review.coreboot.org/601
Tested-by: build bot (Jenkins)
src/southbridge/intel/i3100/chip.h
src/southbridge/intel/i3100/sata.c

index f35e4a8b0e25f41601af8800ee39eb2e3788b0eb..7e58674daf80a0f9019ffdc90e716eb274aa8f24 100644 (file)
@@ -43,6 +43,7 @@ struct southbridge_intel_i3100_config
 
        /* GPIO use select */
        u8 gpio[64];
+       int sata_ports_implemented;
        u32 pirq_a_d;
        u32 pirq_e_h;
 };
index 1925f888ed560d1931f9bb891b112a8530b6b780..2341ca1a76732351f5e7f88d9016f077edab02a6 100644 (file)
@@ -31,7 +31,14 @@ typedef struct southbridge_intel_i3100_config config_t;
 
 static void sata_init(struct device *dev)
 {
-        u8 ahci;
+       u8 ahci;
+       u32 *ahci_bar;
+       config_t *config = dev->chip_info;
+
+       if (config == NULL) {
+          printk(BIOS_ERR, "i3100_sata: error: device not in devicetree.cb!\n");
+          return;
+       }
 
        /* Get the chip configuration */
        ahci = (pci_read_config8(dev, SATA_MAP) >> 6) & 0x03;
@@ -58,6 +65,8 @@ static void sata_init(struct device *dev)
          /* IDE I/O configuration */
          pci_write_config32(dev, SATA_IIOC, 0);
 
+         ahci_bar = (u32 *)(pci_read_config32(dev, 0x27) & ~0x3ff);
+         ahci_bar[3] = config->sata_ports_implemented;
        } else {
          /* SATA configuration */
          pci_write_config8(dev, SATA_CMD, 0x07);