|
@@ -54,19 +54,13 @@ static int __init ahci_probe(struct platform_device *pdev)
|
|
return -EINVAL;
|
|
return -EINVAL;
|
|
}
|
|
}
|
|
|
|
|
|
- if (pdata && pdata->init) {
|
|
|
|
- rc = pdata->init(dev);
|
|
|
|
- if (rc)
|
|
|
|
- return rc;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
if (pdata && pdata->ata_port_info)
|
|
if (pdata && pdata->ata_port_info)
|
|
pi = *pdata->ata_port_info;
|
|
pi = *pdata->ata_port_info;
|
|
|
|
|
|
hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
|
|
hpriv = devm_kzalloc(dev, sizeof(*hpriv), GFP_KERNEL);
|
|
if (!hpriv) {
|
|
if (!hpriv) {
|
|
- rc = -ENOMEM;
|
|
|
|
- goto err0;
|
|
|
|
|
|
+ dev_err(dev, "can't alloc ahci_host_priv\n");
|
|
|
|
+ return -ENOMEM;
|
|
}
|
|
}
|
|
|
|
|
|
hpriv->flags |= (unsigned long)pi.private_data;
|
|
hpriv->flags |= (unsigned long)pi.private_data;
|
|
@@ -74,8 +68,19 @@ static int __init ahci_probe(struct platform_device *pdev)
|
|
hpriv->mmio = devm_ioremap(dev, mem->start, resource_size(mem));
|
|
hpriv->mmio = devm_ioremap(dev, mem->start, resource_size(mem));
|
|
if (!hpriv->mmio) {
|
|
if (!hpriv->mmio) {
|
|
dev_err(dev, "can't map %pR\n", mem);
|
|
dev_err(dev, "can't map %pR\n", mem);
|
|
- rc = -ENOMEM;
|
|
|
|
- goto err0;
|
|
|
|
|
|
+ return -ENOMEM;
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * Some platforms might need to prepare for mmio region access,
|
|
|
|
+ * which could be done in the following init call. So, the mmio
|
|
|
|
+ * region shouldn't be accessed before init (if provided) has
|
|
|
|
+ * returned successfully.
|
|
|
|
+ */
|
|
|
|
+ if (pdata && pdata->init) {
|
|
|
|
+ rc = pdata->init(dev, hpriv->mmio);
|
|
|
|
+ if (rc)
|
|
|
|
+ return rc;
|
|
}
|
|
}
|
|
|
|
|
|
ahci_save_initial_config(dev, hpriv,
|
|
ahci_save_initial_config(dev, hpriv,
|