Re: [U-Boot] [PATCH 4/6] ARM: imx: novena: Convert block devices to DM

2019-05-05 Thread Vagrant Cascadian
On 2019-05-06, Marek Vasut wrote:
> Enable DM block, DM MMC and DM SATA support on iMX6Q Novena
> convert board code to match the DM support.

Tested booting from MMC and SATA.

SATA performance was *much* faster, too! Thanks!

Tested-by: Vagrant Cascadian 

live well,
  vagrant

> Signed-off-by: Marek Vasut 
> Cc: Fabio Estevam 
> Cc: Stefano Babic 
> Cc: Vagrant Cascadian 
> ---
>  arch/arm/dts/imx6q-novena.dts |   5 ++
>  board/kosagi/novena/novena.c  | 107 +-
>  configs/novena_defconfig  |   3 +
>  include/configs/novena.h  |   5 --
>  4 files changed, 61 insertions(+), 59 deletions(-)
>
> diff --git a/arch/arm/dts/imx6q-novena.dts b/arch/arm/dts/imx6q-novena.dts
> index 61347a545d..35383c9a2b 100644
> --- a/arch/arm/dts/imx6q-novena.dts
> +++ b/arch/arm/dts/imx6q-novena.dts
> @@ -61,6 +61,11 @@
>   reg = <0x1000 0>;
>   };
>  
> + aliases {
> + mmc0 = 
> + mmc1 = 
> + };
> +
>   chosen {
>   stdout-path = 
>   };
> diff --git a/board/kosagi/novena/novena.c b/board/kosagi/novena/novena.c
> index 0750c4667e..4b31e2961c 100644
> --- a/board/kosagi/novena/novena.c
> +++ b/board/kosagi/novena/novena.c
> @@ -6,6 +6,9 @@
>   */
>  
>  #include 
> +#include 
> +#include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -20,6 +23,7 @@
>  #include 
>  #include 
>  #include 
> +#include 
>  #include 
>  #include 
>  #include 
> @@ -101,60 +105,6 @@ int drv_keyboard_init(void)
>  }
>  #endif
>  
> -/*
> - * SDHC
> - */
> -#ifdef CONFIG_FSL_ESDHC
> -static struct fsl_esdhc_cfg usdhc_cfg[] = {
> - { USDHC3_BASE_ADDR, 0, 4 }, /* Micro SD */
> - { USDHC2_BASE_ADDR, 0, 4 }, /* Big SD */
> -};
> -
> -int board_mmc_getcd(struct mmc *mmc)
> -{
> - struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
> -
> - /* There is no CD for a microSD card, assume always present. */
> - if (cfg->esdhc_base == USDHC3_BASE_ADDR)
> - return 1;
> - else
> - return !gpio_get_value(NOVENA_SD_CD);
> -}
> -
> -int board_mmc_getwp(struct mmc *mmc)
> -{
> - struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
> -
> - /* There is no WP for a microSD card, assume always read-write. */
> - if (cfg->esdhc_base == USDHC3_BASE_ADDR)
> - return 0;
> - else
> - return gpio_get_value(NOVENA_SD_WP);
> -}
> -
> -
> -int board_mmc_init(bd_t *bis)
> -{
> - s32 status = 0;
> - int index;
> -
> - usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
> - usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
> -
> - /* Big SD write-protect and card-detect */
> - gpio_direction_input(NOVENA_SD_WP);
> - gpio_direction_input(NOVENA_SD_CD);
> -
> - for (index = 0; index < ARRAY_SIZE(usdhc_cfg); index++) {
> - status = fsl_esdhc_initialize(bis, _cfg[index]);
> - if (status)
> - return status;
> - }
> -
> - return status;
> -}
> -#endif
> -
>  int board_early_init_f(void)
>  {
>  #if defined(CONFIG_VIDEO_IPUV3)
> @@ -270,3 +220,52 @@ int misc_init_r(void)
>  
>   return ret;
>  }
> +
> +#if CONFIG_IS_ENABLED(AHCI)
> +static int sata_imx_probe(struct udevice *dev)
> +{
> + int i, err;
> +
> + for (i = 0; i < 10; i++) {
> + err = setup_sata();
> + if (err) {
> + printf("SATA setup failed: %d\n", err);
> + return err;
> + }
> +
> + udelay(100);
> +
> + err = dwc_ahsata_probe(dev);
> + if (!err)
> + break;
> +
> + /* There is no device on the SATA port */
> + if (sata_dm_port_status(0, 0) == 0)
> + break;
> +
> + /* There's a device, but link not established. Retry */
> + device_remove(dev, DM_REMOVE_NORMAL);
> + }
> +
> + return 0;
> +}
> +
> +struct ahci_ops sata_imx_ops = {
> + .port_status = dwc_ahsata_port_status,
> + .reset  = dwc_ahsata_bus_reset,
> + .scan   = dwc_ahsata_scan,
> +};
> +
> +static const struct udevice_id sata_imx_ids[] = {
> + { .compatible = "fsl,imx6q-ahci" },
> + { }
> +};
> +
> +U_BOOT_DRIVER(sata_imx) = {
> + .name   = "dwc_ahci",
> + .id = UCLASS_AHCI,
> + .of_match   = sata_imx_ids,
> + .ops= _imx_ops,
> + .probe  = sata_imx_probe,
> +};
> +#endif /* AHCI */
> diff --git a/configs/novena_defconfig b/configs/novena_defconfig
> index c74f635121..fa5fdea278 100644
> --- a/configs/novena_defconfig
> +++ b/configs/novena_defconfig
> @@ -13,6 +13,7 @@ CONFIG_SPL=y
>  CONFIG_SPL_FS_FAT=y
>  CONFIG_SPL_LIBDISK_SUPPORT=y
>  CONFIG_CMD_HDMIDETECT=y
> +CONFIG_AHCI=y
>  CONFIG_DISTRO_DEFAULTS=y
>  # CONFIG_SYS_MALLOC_F is not set
>  CONFIG_FIT=y
> @@ -48,6 +49,7 @@ CONFIG_ENV_IS_IN_MMC=y
>  CONFIG_DM=y
>  CONFIG_DWC_AHSATA=y
>  

[U-Boot] [PATCH 4/6] ARM: imx: novena: Convert block devices to DM

2019-05-05 Thread Marek Vasut
Enable DM block, DM MMC and DM SATA support on iMX6Q Novena
convert board code to match the DM support.

Signed-off-by: Marek Vasut 
Cc: Fabio Estevam 
Cc: Stefano Babic 
Cc: Vagrant Cascadian 
---
 arch/arm/dts/imx6q-novena.dts |   5 ++
 board/kosagi/novena/novena.c  | 107 +-
 configs/novena_defconfig  |   3 +
 include/configs/novena.h  |   5 --
 4 files changed, 61 insertions(+), 59 deletions(-)

diff --git a/arch/arm/dts/imx6q-novena.dts b/arch/arm/dts/imx6q-novena.dts
index 61347a545d..35383c9a2b 100644
--- a/arch/arm/dts/imx6q-novena.dts
+++ b/arch/arm/dts/imx6q-novena.dts
@@ -61,6 +61,11 @@
reg = <0x1000 0>;
};
 
+   aliases {
+   mmc0 = 
+   mmc1 = 
+   };
+
chosen {
stdout-path = 
};
diff --git a/board/kosagi/novena/novena.c b/board/kosagi/novena/novena.c
index 0750c4667e..4b31e2961c 100644
--- a/board/kosagi/novena/novena.c
+++ b/board/kosagi/novena/novena.c
@@ -6,6 +6,9 @@
  */
 
 #include 
+#include 
+#include 
+#include 
 #include 
 #include 
 #include 
@@ -20,6 +23,7 @@
 #include 
 #include 
 #include 
+#include 
 #include 
 #include 
 #include 
@@ -101,60 +105,6 @@ int drv_keyboard_init(void)
 }
 #endif
 
-/*
- * SDHC
- */
-#ifdef CONFIG_FSL_ESDHC
-static struct fsl_esdhc_cfg usdhc_cfg[] = {
-   { USDHC3_BASE_ADDR, 0, 4 }, /* Micro SD */
-   { USDHC2_BASE_ADDR, 0, 4 }, /* Big SD */
-};
-
-int board_mmc_getcd(struct mmc *mmc)
-{
-   struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
-
-   /* There is no CD for a microSD card, assume always present. */
-   if (cfg->esdhc_base == USDHC3_BASE_ADDR)
-   return 1;
-   else
-   return !gpio_get_value(NOVENA_SD_CD);
-}
-
-int board_mmc_getwp(struct mmc *mmc)
-{
-   struct fsl_esdhc_cfg *cfg = (struct fsl_esdhc_cfg *)mmc->priv;
-
-   /* There is no WP for a microSD card, assume always read-write. */
-   if (cfg->esdhc_base == USDHC3_BASE_ADDR)
-   return 0;
-   else
-   return gpio_get_value(NOVENA_SD_WP);
-}
-
-
-int board_mmc_init(bd_t *bis)
-{
-   s32 status = 0;
-   int index;
-
-   usdhc_cfg[0].sdhc_clk = mxc_get_clock(MXC_ESDHC3_CLK);
-   usdhc_cfg[1].sdhc_clk = mxc_get_clock(MXC_ESDHC2_CLK);
-
-   /* Big SD write-protect and card-detect */
-   gpio_direction_input(NOVENA_SD_WP);
-   gpio_direction_input(NOVENA_SD_CD);
-
-   for (index = 0; index < ARRAY_SIZE(usdhc_cfg); index++) {
-   status = fsl_esdhc_initialize(bis, _cfg[index]);
-   if (status)
-   return status;
-   }
-
-   return status;
-}
-#endif
-
 int board_early_init_f(void)
 {
 #if defined(CONFIG_VIDEO_IPUV3)
@@ -270,3 +220,52 @@ int misc_init_r(void)
 
return ret;
 }
+
+#if CONFIG_IS_ENABLED(AHCI)
+static int sata_imx_probe(struct udevice *dev)
+{
+   int i, err;
+
+   for (i = 0; i < 10; i++) {
+   err = setup_sata();
+   if (err) {
+   printf("SATA setup failed: %d\n", err);
+   return err;
+   }
+
+   udelay(100);
+
+   err = dwc_ahsata_probe(dev);
+   if (!err)
+   break;
+
+   /* There is no device on the SATA port */
+   if (sata_dm_port_status(0, 0) == 0)
+   break;
+
+   /* There's a device, but link not established. Retry */
+   device_remove(dev, DM_REMOVE_NORMAL);
+   }
+
+   return 0;
+}
+
+struct ahci_ops sata_imx_ops = {
+   .port_status = dwc_ahsata_port_status,
+   .reset  = dwc_ahsata_bus_reset,
+   .scan   = dwc_ahsata_scan,
+};
+
+static const struct udevice_id sata_imx_ids[] = {
+   { .compatible = "fsl,imx6q-ahci" },
+   { }
+};
+
+U_BOOT_DRIVER(sata_imx) = {
+   .name   = "dwc_ahci",
+   .id = UCLASS_AHCI,
+   .of_match   = sata_imx_ids,
+   .ops= _imx_ops,
+   .probe  = sata_imx_probe,
+};
+#endif /* AHCI */
diff --git a/configs/novena_defconfig b/configs/novena_defconfig
index c74f635121..fa5fdea278 100644
--- a/configs/novena_defconfig
+++ b/configs/novena_defconfig
@@ -13,6 +13,7 @@ CONFIG_SPL=y
 CONFIG_SPL_FS_FAT=y
 CONFIG_SPL_LIBDISK_SUPPORT=y
 CONFIG_CMD_HDMIDETECT=y
+CONFIG_AHCI=y
 CONFIG_DISTRO_DEFAULTS=y
 # CONFIG_SYS_MALLOC_F is not set
 CONFIG_FIT=y
@@ -48,6 +49,7 @@ CONFIG_ENV_IS_IN_MMC=y
 CONFIG_DM=y
 CONFIG_DWC_AHSATA=y
 CONFIG_DM_GPIO=y
+CONFIG_DM_MMC=y
 CONFIG_FSL_ESDHC=y
 CONFIG_PHYLIB=y
 CONFIG_PHY_MICREL=y
@@ -56,6 +58,7 @@ CONFIG_MII=y
 CONFIG_PCI=y
 CONFIG_PINCTRL=y
 CONFIG_PINCTRL_IMX6=y
+CONFIG_DM_SCSI=y
 CONFIG_USB=y
 CONFIG_USB_KEYBOARD=y
 CONFIG_SYS_USB_EVENT_POLL_VIA_CONTROL_EP=y
diff --git a/include/configs/novena.h b/include/configs/novena.h
index bb5bf808c2..bc7383e957 100644
--- a/include/configs/novena.h