Re: [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device

2017-04-09 Thread Simon Glass
On 7 April 2017 at 05:42, Jean-Jacques Hiblot  wrote:
> From: Mugunthan V N 
>
> Implement a sata driver for Synopsys DWC sata device based on
> U-boot driver model.
>
> Signed-off-by: Mugunthan V N 
> Signed-off-by: Jean-Jacques Hiblot 
> ---
>  drivers/block/Kconfig|  10 +
>  drivers/block/Makefile   |   1 +
>  drivers/block/dwc_ahci.c | 100 
> +++
>  3 files changed, 111 insertions(+)
>  create mode 100644 drivers/block/dwc_ahci.c

Reviewed-by: Simon Glass 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device

2017-04-08 Thread Tom Rini
On Fri, Apr 07, 2017 at 01:42:05PM +0200, Jean-Jacques Hiblot wrote:

> From: Mugunthan V N 
> 
> Implement a sata driver for Synopsys DWC sata device based on
> U-boot driver model.
> 
> Signed-off-by: Mugunthan V N 
> Signed-off-by: Jean-Jacques Hiblot 

Reviewed-by: Tom Rini 

-- 
Tom


signature.asc
Description: Digital signature
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v2 06/10] drivers: block: dwc_ahci: Implement a driver for Synopsys DWC sata device

2017-04-07 Thread Jean-Jacques Hiblot
From: Mugunthan V N 

Implement a sata driver for Synopsys DWC sata device based on
U-boot driver model.

Signed-off-by: Mugunthan V N 
Signed-off-by: Jean-Jacques Hiblot 
---
 drivers/block/Kconfig|  10 +
 drivers/block/Makefile   |   1 +
 drivers/block/dwc_ahci.c | 100 +++
 3 files changed, 111 insertions(+)
 create mode 100644 drivers/block/dwc_ahci.c

diff --git a/drivers/block/Kconfig b/drivers/block/Kconfig
index 88e66e2..b3d35bd 100644
--- a/drivers/block/Kconfig
+++ b/drivers/block/Kconfig
@@ -48,4 +48,14 @@ config SATA_CEVA
  ZynqMP. Support up to 2 external devices. Complient with SATA 3.1 and
  AHCI 1.3 specifications with hot-plug detect feature.
 
+
+config DWC_AHCI
+   bool "Enable Synopsys DWC AHCI driver support"
+   select SCSI_AHCI
+   select GENERIC_PHY
+   depends on DM_SCSI
+   help
+ Enable this driver to support Sata devices through
+ Synopsys DWC AHCI module.
+
 endmenu
diff --git a/drivers/block/Makefile b/drivers/block/Makefile
index a72feec..cffe498 100644
--- a/drivers/block/Makefile
+++ b/drivers/block/Makefile
@@ -11,6 +11,7 @@ ifndef CONFIG_BLK
 obj-y += blk_legacy.o
 endif
 
+obj-$(CONFIG_DWC_AHCI) += dwc_ahci.o
 obj-$(CONFIG_AHCI) += ahci-uclass.o
 obj-$(CONFIG_DM_SCSI) += scsi-uclass.o
 obj-$(CONFIG_SCSI_AHCI) += ahci.o
diff --git a/drivers/block/dwc_ahci.c b/drivers/block/dwc_ahci.c
new file mode 100644
index 000..bf44946
--- /dev/null
+++ b/drivers/block/dwc_ahci.c
@@ -0,0 +1,100 @@
+/*
+ * DWC SATA platform driver
+ *
+ * (C) Copyright 2016
+ * Texas Instruments Incorporated, 
+ *
+ * Author: Mugunthan V N 
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+DECLARE_GLOBAL_DATA_PTR;
+
+struct dwc_ahci_priv {
+   void *base;
+   void *wrapper_base;
+};
+
+static int dwc_ahci_ofdata_to_platdata(struct udevice *dev)
+{
+   struct dwc_ahci_priv *priv = dev_get_priv(dev);
+   struct scsi_platdata *plat = dev_get_platdata(dev);
+   fdt_addr_t addr;
+
+   plat->max_id = fdtdec_get_uint(gd->fdt_blob, dev->of_offset, "max-id",
+  CONFIG_SYS_SCSI_MAX_SCSI_ID);
+   plat->max_lun = fdtdec_get_uint(gd->fdt_blob, dev->of_offset,
+   "max-lun", CONFIG_SYS_SCSI_MAX_LUN);
+
+   priv->base = map_physmem(dev_get_addr(dev), sizeof(void *),
+MAP_NOCACHE);
+
+   addr = dev_get_addr_index(dev, 1);
+   if (addr != FDT_ADDR_T_NONE) {
+   priv->wrapper_base = map_physmem(addr, sizeof(void *),
+MAP_NOCACHE);
+   } else {
+   priv->wrapper_base = NULL;
+   }
+
+   return 0;
+}
+
+static int dwc_ahci_probe(struct udevice *dev)
+{
+   struct dwc_ahci_priv *priv = dev_get_priv(dev);
+   int ret;
+   struct generic_phy *phy = dm_generic_phy_get(dev, "phys");
+
+   if (IS_ERR(phy)) {
+   error("can't get the phy from DT\n");
+   return PTR_ERR(phy);
+   }
+
+   ret = generic_phy_init(phy);
+   if (ret) {
+   error("unable to initialize the sata phy\n");
+   return ret;
+   }
+
+   ret = generic_phy_power_on(phy);
+   if (ret) {
+   error("unable to power on the sata phy\n");
+   return ret;
+   }
+
+   if (priv->wrapper_base) {
+   u32 val = TI_SATA_IDLE_NO | TI_SATA_STANDBY_NO;
+
+   /* Enable SATA module, No Idle, No Standby */
+   writel(val, priv->wrapper_base + TI_SATA_SYSCONFIG);
+   }
+
+   return ahci_init(priv->base);
+}
+
+static const struct udevice_id dwc_ahci_ids[] = {
+   { .compatible = "snps,dwc-ahci" },
+   { }
+};
+
+U_BOOT_DRIVER(dwc_ahci) = {
+   .name   = "dwc_ahci",
+   .id = UCLASS_SCSI,
+   .of_match = dwc_ahci_ids,
+   .ofdata_to_platdata = dwc_ahci_ofdata_to_platdata,
+   .probe  = dwc_ahci_probe,
+   .priv_auto_alloc_size = sizeof(struct dwc_ahci_priv),
+   .platdata_auto_alloc_size = sizeof(struct scsi_platdata),
+   .flags = DM_FLAG_ALLOC_PRIV_DMA,
+};
-- 
1.9.1

___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot