i3100: add sata_ports_implemented option

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)
This commit is contained in:
Sven Schnelle 2012-01-31 22:44:53 +01:00
parent ab46c15f61
commit f61ad93bc9
2 changed files with 11 additions and 1 deletions

View File

@ -43,6 +43,7 @@ struct southbridge_intel_i3100_config
/* GPIO use select */ /* GPIO use select */
u8 gpio[64]; u8 gpio[64];
int sata_ports_implemented;
u32 pirq_a_d; u32 pirq_a_d;
u32 pirq_e_h; u32 pirq_e_h;
}; };

View File

@ -31,7 +31,14 @@ typedef struct southbridge_intel_i3100_config config_t;
static void sata_init(struct device *dev) 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 */ /* Get the chip configuration */
ahci = (pci_read_config8(dev, SATA_MAP) >> 6) & 0x03; ahci = (pci_read_config8(dev, SATA_MAP) >> 6) & 0x03;
@ -58,6 +65,8 @@ static void sata_init(struct device *dev)
/* IDE I/O configuration */ /* IDE I/O configuration */
pci_write_config32(dev, SATA_IIOC, 0); pci_write_config32(dev, SATA_IIOC, 0);
ahci_bar = (u32 *)(pci_read_config32(dev, 0x27) & ~0x3ff);
ahci_bar[3] = config->sata_ports_implemented;
} else { } else {
/* SATA configuration */ /* SATA configuration */
pci_write_config8(dev, SATA_CMD, 0x07); pci_write_config8(dev, SATA_CMD, 0x07);