Commit 904c04fe authored by Richard Zhu's avatar Richard Zhu Committed by Jeff Garzik

[libata] ahci_platform: Add the board_ids and pi refer to different features

On imx53 AHCI, soft reset fails with IPMS set when PMP
is enabled but SATA HDD/ODD is connected to SATA port,
do soft reset again to port 0.
So the 'ahci_pmp_retry_srst_ops' is required when imx53
ahci is present.
Signed-off-by: default avatarRichard Zhu <richard.zhu@linaro.org>
Acked-by: default avatarEric Miao <eric.miao@linaro.org>
Signed-off-by: default avatarJeff Garzik <jgarzik@redhat.com>
parent e8411fba
...@@ -23,6 +23,41 @@ ...@@ -23,6 +23,41 @@
#include <linux/ahci_platform.h> #include <linux/ahci_platform.h>
#include "ahci.h" #include "ahci.h"
enum ahci_type {
AHCI, /* standard platform ahci */
IMX53_AHCI, /* ahci on i.mx53 */
};
static struct platform_device_id ahci_devtype[] = {
{
.name = "ahci",
.driver_data = AHCI,
}, {
.name = "imx53-ahci",
.driver_data = IMX53_AHCI,
}, {
/* sentinel */
}
};
MODULE_DEVICE_TABLE(platform, ahci_devtype);
static const struct ata_port_info ahci_port_info[] = {
/* by features */
[AHCI] = {
.flags = AHCI_FLAG_COMMON,
.pio_mask = ATA_PIO4,
.udma_mask = ATA_UDMA6,
.port_ops = &ahci_ops,
},
[IMX53_AHCI] = {
.flags = AHCI_FLAG_COMMON,
.pio_mask = ATA_PIO4,
.udma_mask = ATA_UDMA6,
.port_ops = &ahci_pmp_retry_srst_ops,
},
};
static struct scsi_host_template ahci_platform_sht = { static struct scsi_host_template ahci_platform_sht = {
AHCI_SHT("ahci_platform"), AHCI_SHT("ahci_platform"),
}; };
...@@ -31,12 +66,8 @@ static int __init ahci_probe(struct platform_device *pdev) ...@@ -31,12 +66,8 @@ static int __init ahci_probe(struct platform_device *pdev)
{ {
struct device *dev = &pdev->dev; struct device *dev = &pdev->dev;
struct ahci_platform_data *pdata = dev->platform_data; struct ahci_platform_data *pdata = dev->platform_data;
struct ata_port_info pi = { const struct platform_device_id *id = platform_get_device_id(pdev);
.flags = AHCI_FLAG_COMMON, struct ata_port_info pi = ahci_port_info[id->driver_data];
.pio_mask = ATA_PIO4,
.udma_mask = ATA_UDMA6,
.port_ops = &ahci_ops,
};
const struct ata_port_info *ppi[] = { &pi, NULL }; const struct ata_port_info *ppi[] = { &pi, NULL };
struct ahci_host_priv *hpriv; struct ahci_host_priv *hpriv;
struct ata_host *host; struct ata_host *host;
...@@ -177,6 +208,7 @@ static struct platform_driver ahci_driver = { ...@@ -177,6 +208,7 @@ static struct platform_driver ahci_driver = {
.name = "ahci", .name = "ahci",
.owner = THIS_MODULE, .owner = THIS_MODULE,
}, },
.id_table = ahci_devtype,
}; };
static int __init ahci_init(void) static int __init ahci_init(void)
......
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