Commit c40e7cb8 authored by Jose Alberto Reguero's avatar Jose Alberto Reguero Committed by Jeff Garzik

ahci: Add Marvell 6121 SATA support

Signed-off-by: default avatarJose Alberto Reguero <jareguero@telefonica.net>
Signed-off-by: default avatarJeff Garzik <jeff@garzik.org>
parent 4a38e733
...@@ -591,6 +591,7 @@ static const struct pci_device_id ahci_pci_tbl[] = { ...@@ -591,6 +591,7 @@ static const struct pci_device_id ahci_pci_tbl[] = {
/* Marvell */ /* Marvell */
{ PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */ { PCI_VDEVICE(MARVELL, 0x6145), board_ahci_mv }, /* 6145 */
{ PCI_VDEVICE(MARVELL, 0x6121), board_ahci_mv }, /* 6121 */
/* Generic, PCI class code for AHCI */ /* Generic, PCI class code for AHCI */
{ PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, { PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID, PCI_ANY_ID,
...@@ -665,6 +666,7 @@ static void ahci_save_initial_config(struct pci_dev *pdev, ...@@ -665,6 +666,7 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
void __iomem *mmio = pcim_iomap_table(pdev)[AHCI_PCI_BAR]; void __iomem *mmio = pcim_iomap_table(pdev)[AHCI_PCI_BAR];
u32 cap, port_map; u32 cap, port_map;
int i; int i;
int mv;
/* make sure AHCI mode is enabled before accessing CAP */ /* make sure AHCI mode is enabled before accessing CAP */
ahci_enable_ahci(mmio); ahci_enable_ahci(mmio);
...@@ -700,12 +702,16 @@ static void ahci_save_initial_config(struct pci_dev *pdev, ...@@ -700,12 +702,16 @@ static void ahci_save_initial_config(struct pci_dev *pdev,
* presence register, as bit 4 (counting from 0) * presence register, as bit 4 (counting from 0)
*/ */
if (hpriv->flags & AHCI_HFLAG_MV_PATA) { if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
if (pdev->device == 0x6121)
mv = 0x3;
else
mv = 0xf;
dev_printk(KERN_ERR, &pdev->dev, dev_printk(KERN_ERR, &pdev->dev,
"MV_AHCI HACK: port_map %x -> %x\n", "MV_AHCI HACK: port_map %x -> %x\n",
hpriv->port_map, port_map,
hpriv->port_map & 0xf); port_map & mv);
port_map &= 0xf; port_map &= mv;
} }
/* cross check port_map and cap.n_ports */ /* cross check port_map and cap.n_ports */
...@@ -1172,9 +1178,14 @@ static void ahci_init_controller(struct ata_host *host) ...@@ -1172,9 +1178,14 @@ static void ahci_init_controller(struct ata_host *host)
int i; int i;
void __iomem *port_mmio; void __iomem *port_mmio;
u32 tmp; u32 tmp;
int mv;
if (hpriv->flags & AHCI_HFLAG_MV_PATA) { if (hpriv->flags & AHCI_HFLAG_MV_PATA) {
port_mmio = __ahci_port_base(host, 4); if (pdev->device == 0x6121)
mv = 2;
else
mv = 4;
port_mmio = __ahci_port_base(host, mv);
writel(0, port_mmio + PORT_IRQ_MASK); writel(0, port_mmio + PORT_IRQ_MASK);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment