[5/7] sata_sil: Enable DM_PCI operation

Message ID 20200611110321.9574-6-andre.przywara@arm.com
State Accepted
Commit 44a4042b01b547a100c387538196dacfa28b88f4
Headers show
Series
  • arm: Juno board updates and PCIe/SATA enablement
Related show

Commit Message

Andre Przywara June 11, 2020, 11:03 a.m.
Even though the sata_sil driver was converted over to the driver model,
it still assumed that the PCI controller is using the legacy interface.

Allow the "devno" member to be a struct udevice pointer and use
DM_PCI_COMPAT to covert the rest of the interface.

Signed-off-by: Andre Przywara <andre.przywara at arm.com>
---
 drivers/ata/sata_sil.c | 11 ++++++++++-
 drivers/ata/sata_sil.h |  6 +++++-
 2 files changed, 15 insertions(+), 2 deletions(-)

Comments

Linus Walleij June 20, 2020, 8:27 p.m. | #1
On Thu, Jun 11, 2020 at 1:04 PM Andre Przywara <andre.przywara at arm.com> wrote:

> Even though the sata_sil driver was converted over to the driver model,
> it still assumed that the PCI controller is using the legacy interface.
>
> Allow the "devno" member to be a struct udevice pointer and use
> DM_PCI_COMPAT to covert the rest of the interface.
>
> Signed-off-by: Andre Przywara <andre.przywara at arm.com>

Reviewed-by: Linus Walleij <linus.walleij at linaro.org>

Yours,
Linus Walleij

Patch

diff --git a/drivers/ata/sata_sil.c b/drivers/ata/sata_sil.c
index 6896fa8771..d5ba94c172 100644
--- a/drivers/ata/sata_sil.c
+++ b/drivers/ata/sata_sil.c
@@ -27,7 +27,11 @@ 
 
 #include "sata_sil.h"
 
+#ifdef CONFIG_DM_PCI
+#define virt_to_bus(devno, v)	dm_pci_virt_to_mem(devno, (void *) (v))
+#else
 #define virt_to_bus(devno, v)	pci_virt_to_mem(devno, (void *) (v))
+#endif
 
 /* just compatible ahci_ops */
 struct sil_ops {
@@ -608,13 +612,18 @@  static int sil_init_sata(struct udevice *uc_dev, int dev)
 	/* Save the private struct to block device struct */
 #if !CONFIG_IS_ENABLED(BLK)
 	sata_dev_desc[dev].priv = (void *)sata;
+	sata->devno = sata_info.devno;
 #else
 	priv->sil_sata_desc[dev] = sata;
 	priv->port_num = dev;
+#ifdef CONFIG_DM_PCI
+	sata->devno = uc_dev->parent;
+#else
+	sata->devno = sata_info.devno;
+#endif	/* CONFIG_DM_PCI */
 #endif
 	sata->id = dev;
 	sata->port = port;
-	sata->devno = sata_info.devno;
 	sprintf(sata->name, "SATA#%d", dev);
 	sil_cmd_soft_reset(sata);
 	tmp = readl(port + PORT_SSTATUS);
diff --git a/drivers/ata/sata_sil.h b/drivers/ata/sata_sil.h
index ef41e8259a..a300c0c388 100644
--- a/drivers/ata/sata_sil.h
+++ b/drivers/ata/sata_sil.h
@@ -21,7 +21,11 @@  struct sil_sata {
 	u16		pio;
 	u16		mwdma;
 	u16		udma;
-	pci_dev_t devno;
+#ifdef CONFIG_DM_PCI
+	struct udevice	*devno;
+#else
+	pci_dev_t	devno;
+#endif
 	int		wcache;
 	int		flush;
 	int		flush_ext;