--- linux-2.6.20-rc3/drivers/ata/pata_marvell.c 2007-01-01 01:53:20.000000000 +0100 +++ linux-2.6.20-rc3.new/drivers/ata/pata_marvell.c 2007-01-06 12:33:03.000000000 +0100 @@ -49,7 +49,7 @@ devices = readl(barp + 0x0C); pci_iounmap(pdev, barp); - if ((pdev->device == 0x6145) && (ap->port_no == 0) && + if (((pdev->device == 0x6145) || (pdev->device == 0x6121)) && (ap->port_no == 0) && (!(devices & 0x10))) /* PATA enable ? */ return -ENOENT; @@ -181,9 +181,19 @@ }; struct ata_port_info *port_info[2] = { &info, &info_sata }; int n_port = 2; + void __iomem *mmio_base; if (pdev->device == 0x6101) n_port = 1; + else if (pdev->device == 0x6121) { + mmio_base = pci_iomap(pdev, 5, 0); + if (mmio_base == NULL) { + return -ENOMEM; + } + /* turn on legacy mode */ + writel(0, mmio_base + 0x04); + (void) readl(mmio_base + 0x04); /* flush */ + } return ata_pci_init_one(pdev, port_info, n_port); } @@ -191,6 +201,7 @@ static const struct pci_device_id marvell_pci_tbl[] = { { PCI_DEVICE(0x11AB, 0x6101), }, { PCI_DEVICE(0x11AB, 0x6145), }, + { PCI_DEVICE(0x11AB, 0x6121), }, { } /* terminate list */ };