mirror of https://gitee.com/openkylin/linux.git
ahci: Add Marvell 6121 SATA support
Signed-off-by: Jose Alberto Reguero <jareguero@telefonica.net> Signed-off-by: Jeff Garzik <jeff@garzik.org>
This commit is contained in:
parent
4a38e733a7
commit
c40e7cb89f
|
@ -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,
|
||||||
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,
|
||||||
* 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)
|
||||||
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);
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue