Re: [U-Boot] [PATCH v2 2/2] mmc: Add bcm2835 sdhost controller

2018-01-23 Thread Alexander Graf

On 01/18/2018 05:41 AM, Jaehoon Chung wrote:

On 01/18/2018 08:33 AM, Alexander Graf wrote:

The BCM2835 family of SoCs has 2 different SD controllers: One based on
the SDHCI spec and a custom, home-grown one.

This patch implements a driver for the latter based on the Linux driver.
This is needed so that we can make use of device trees that assume driver
presence of both SD controllers.

Signed-off-by: Alexander Graf 

---

v1 -> v2:

   - Remove hand written pinctrl support
   - Checkpatch fixes
---
  MAINTAINERS  |   1 +
  drivers/mmc/Kconfig  |  14 +
  drivers/mmc/Makefile |   1 +
  drivers/mmc/bcm2835_sdhost.c | 994 +++
  4 files changed, 1010 insertions(+)
  create mode 100644 drivers/mmc/bcm2835_sdhost.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 1f2545191b..728d38aebf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -97,6 +97,7 @@ S:Orphaned (Since 2017-07)
  F:arch/arm/mach-bcm283x/
  F:drivers/gpio/bcm2835_gpio.c
  F:drivers/mmc/bcm2835_sdhci.c
+F: drivers/mmc/bcm2835_sdhost.c
  F:drivers/serial/serial_bcm283x_mu.c
  F:drivers/video/bcm2835.c
  F:include/dm/platform_data/serial_bcm283x_mu.h
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index ab0627a8af..9b90db908b 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -256,6 +256,20 @@ config MMC_UNIPHIER
  This selects support for the Matsushita SD/MMC Host Controller on
  SocioNext UniPhier and Renesas RCar SoCs.
  
+config MMC_BCM2835

+   bool "BCM2835 family custom SD/MMC Host Controller support"
+   depends on ARCH_BCM283X
+   depends on BLK && DM_MMC
+   depends on OF_CONTROL
+   default y
+   help
+ This selects support for the custom SD host controller in the BCM2835
+ family of devices.
+
+ If you have a BCM2835 platform with SD or MMC devices, say Y here.
+
+ If unsure, say N.
+
  config MMC_SANDBOX
bool "Sandbox MMC support"
depends on SANDBOX
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index 64b6f21c61..42113e2603 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -64,3 +64,4 @@ obj-$(CONFIG_MMC_SDHCI_ZYNQ)  += zynq_sdhci.o
  
  obj-$(CONFIG_MMC_SUNXI)			+= sunxi_mmc.o

  obj-$(CONFIG_MMC_UNIPHIER)+= uniphier-sd.o
+obj-$(CONFIG_MMC_BCM2835)  += bcm2835_sdhost.o
diff --git a/drivers/mmc/bcm2835_sdhost.c b/drivers/mmc/bcm2835_sdhost.c
new file mode 100644
index 00..ad9c7adb5a
--- /dev/null
+++ b/drivers/mmc/bcm2835_sdhost.c
@@ -0,0 +1,994 @@
+/*
+ * bcm2835 sdhost driver.
+ *
+ * The 2835 has two SD controllers: The Arasan sdhci controller
+ * (supported by the iproc driver) and a custom sdhost controller
+ * (supported by this driver).
+ *
+ * The sdhci controller supports both sdcard and sdio.  The sdhost
+ * controller supports the sdcard only, but has better performance.
+ * Also note that the rpi3 has sdio wifi, so driving the sdcard with
+ * the sdhost controller allows to use the sdhci controller for wifi
+ * support.
+ *
+ * The configuration is done by devicetree via pin muxing.  Both
+ * SD controller are available on the same pins (2 pin groups = pin 22
+ * to 27 + pin 48 to 53).  So it's possible to use both SD controllers
+ * at the same time with different pin groups.
+ *
+ * This code was ported to U-Boot by
+ *  Alexander Graf 
+ * and is based on drivers/mmc/host/bcm2835.c in Linux which is written by
+ *  Phil Elwell 
+ *  Copyright (C) 2015-2016 Raspberry Pi (Trading) Ltd.
+ * which is based on
+ *  mmc-bcm2835.c by Gellert Weisz
+ * which is, in turn, based on
+ *  sdhci-bcm2708.c by Broadcom
+ *  sdhci-bcm2835.c by Stephen Warren and Oleksandr Tymoshenko
+ *  sdhci.c and sdhci-pci.c by Pierre Ossman
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .

Can be replaced to SPDX-License-Identifier?





Thanks a lot for the very in-depth review. I think I've fixed most of 
your comments :).


[...]


+
+   if (!host->data)
+   return 0;
+   if (intmask & (SDHSTS_CRC16_ERROR | SDHSTS_FIFO_ERROR))
+   r = -EILSEQ;
+   if (intmask & SDHSTS_REW_TIME_OUT)
+   r = -ETIMEDOUT;
+
+   if (r)
+   printf("%s:%d %d\n", __func__, __LINE__, r);
+
+   return r;
+}
+
+static void 

Re: [U-Boot] [PATCH v2 2/2] mmc: Add bcm2835 sdhost controller

2018-01-17 Thread Jaehoon Chung
On 01/18/2018 08:33 AM, Alexander Graf wrote:
> The BCM2835 family of SoCs has 2 different SD controllers: One based on
> the SDHCI spec and a custom, home-grown one.
> 
> This patch implements a driver for the latter based on the Linux driver.
> This is needed so that we can make use of device trees that assume driver
> presence of both SD controllers.
> 
> Signed-off-by: Alexander Graf 
> 
> ---
> 
> v1 -> v2:
> 
>   - Remove hand written pinctrl support
>   - Checkpatch fixes
> ---
>  MAINTAINERS  |   1 +
>  drivers/mmc/Kconfig  |  14 +
>  drivers/mmc/Makefile |   1 +
>  drivers/mmc/bcm2835_sdhost.c | 994 
> +++
>  4 files changed, 1010 insertions(+)
>  create mode 100644 drivers/mmc/bcm2835_sdhost.c
> 
> diff --git a/MAINTAINERS b/MAINTAINERS
> index 1f2545191b..728d38aebf 100644
> --- a/MAINTAINERS
> +++ b/MAINTAINERS
> @@ -97,6 +97,7 @@ S:  Orphaned (Since 2017-07)
>  F:   arch/arm/mach-bcm283x/
>  F:   drivers/gpio/bcm2835_gpio.c
>  F:   drivers/mmc/bcm2835_sdhci.c
> +F:   drivers/mmc/bcm2835_sdhost.c
>  F:   drivers/serial/serial_bcm283x_mu.c
>  F:   drivers/video/bcm2835.c
>  F:   include/dm/platform_data/serial_bcm283x_mu.h
> diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
> index ab0627a8af..9b90db908b 100644
> --- a/drivers/mmc/Kconfig
> +++ b/drivers/mmc/Kconfig
> @@ -256,6 +256,20 @@ config MMC_UNIPHIER
> This selects support for the Matsushita SD/MMC Host Controller on
> SocioNext UniPhier and Renesas RCar SoCs.
>  
> +config MMC_BCM2835
> + bool "BCM2835 family custom SD/MMC Host Controller support"
> + depends on ARCH_BCM283X
> + depends on BLK && DM_MMC
> + depends on OF_CONTROL
> + default y
> + help
> +   This selects support for the custom SD host controller in the BCM2835
> +   family of devices.
> +
> +   If you have a BCM2835 platform with SD or MMC devices, say Y here.
> +
> +   If unsure, say N.
> +
>  config MMC_SANDBOX
>   bool "Sandbox MMC support"
>   depends on SANDBOX
> diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
> index 64b6f21c61..42113e2603 100644
> --- a/drivers/mmc/Makefile
> +++ b/drivers/mmc/Makefile
> @@ -64,3 +64,4 @@ obj-$(CONFIG_MMC_SDHCI_ZYNQ)+= zynq_sdhci.o
>  
>  obj-$(CONFIG_MMC_SUNXI)  += sunxi_mmc.o
>  obj-$(CONFIG_MMC_UNIPHIER)   += uniphier-sd.o
> +obj-$(CONFIG_MMC_BCM2835)+= bcm2835_sdhost.o
> diff --git a/drivers/mmc/bcm2835_sdhost.c b/drivers/mmc/bcm2835_sdhost.c
> new file mode 100644
> index 00..ad9c7adb5a
> --- /dev/null
> +++ b/drivers/mmc/bcm2835_sdhost.c
> @@ -0,0 +1,994 @@
> +/*
> + * bcm2835 sdhost driver.
> + *
> + * The 2835 has two SD controllers: The Arasan sdhci controller
> + * (supported by the iproc driver) and a custom sdhost controller
> + * (supported by this driver).
> + *
> + * The sdhci controller supports both sdcard and sdio.  The sdhost
> + * controller supports the sdcard only, but has better performance.
> + * Also note that the rpi3 has sdio wifi, so driving the sdcard with
> + * the sdhost controller allows to use the sdhci controller for wifi
> + * support.
> + *
> + * The configuration is done by devicetree via pin muxing.  Both
> + * SD controller are available on the same pins (2 pin groups = pin 22
> + * to 27 + pin 48 to 53).  So it's possible to use both SD controllers
> + * at the same time with different pin groups.
> + *
> + * This code was ported to U-Boot by
> + *  Alexander Graf 
> + * and is based on drivers/mmc/host/bcm2835.c in Linux which is written by
> + *  Phil Elwell 
> + *  Copyright (C) 2015-2016 Raspberry Pi (Trading) Ltd.
> + * which is based on
> + *  mmc-bcm2835.c by Gellert Weisz
> + * which is, in turn, based on
> + *  sdhci-bcm2708.c by Broadcom
> + *  sdhci-bcm2835.c by Stephen Warren and Oleksandr Tymoshenko
> + *  sdhci.c and sdhci-pci.c by Pierre Ossman
> + *
> + * This program is free software; you can redistribute it and/or modify it
> + * under the terms and conditions of the GNU General Public License,
> + * version 2, as published by the Free Software Foundation.
> + *
> + * This program is distributed in the hope it will be useful, but WITHOUT
> + * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
> + * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
> + * more details.
> + *
> + * You should have received a copy of the GNU General Public License
> + * along with this program.  If not, see .

Can be replaced to SPDX-License-Identifier?

> + */
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 
> +#include 

Ordering.

> +
> +DECLARE_GLOBAL_DATA_PTR;
> +
> +#define msleep(a) udelay(a * 1000)
> +
> +#define SDCMD  0x00 /* Command to SD card  

[U-Boot] [PATCH v2 2/2] mmc: Add bcm2835 sdhost controller

2018-01-17 Thread Alexander Graf
The BCM2835 family of SoCs has 2 different SD controllers: One based on
the SDHCI spec and a custom, home-grown one.

This patch implements a driver for the latter based on the Linux driver.
This is needed so that we can make use of device trees that assume driver
presence of both SD controllers.

Signed-off-by: Alexander Graf 

---

v1 -> v2:

  - Remove hand written pinctrl support
  - Checkpatch fixes
---
 MAINTAINERS  |   1 +
 drivers/mmc/Kconfig  |  14 +
 drivers/mmc/Makefile |   1 +
 drivers/mmc/bcm2835_sdhost.c | 994 +++
 4 files changed, 1010 insertions(+)
 create mode 100644 drivers/mmc/bcm2835_sdhost.c

diff --git a/MAINTAINERS b/MAINTAINERS
index 1f2545191b..728d38aebf 100644
--- a/MAINTAINERS
+++ b/MAINTAINERS
@@ -97,6 +97,7 @@ S:Orphaned (Since 2017-07)
 F: arch/arm/mach-bcm283x/
 F: drivers/gpio/bcm2835_gpio.c
 F: drivers/mmc/bcm2835_sdhci.c
+F: drivers/mmc/bcm2835_sdhost.c
 F: drivers/serial/serial_bcm283x_mu.c
 F: drivers/video/bcm2835.c
 F: include/dm/platform_data/serial_bcm283x_mu.h
diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index ab0627a8af..9b90db908b 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -256,6 +256,20 @@ config MMC_UNIPHIER
  This selects support for the Matsushita SD/MMC Host Controller on
  SocioNext UniPhier and Renesas RCar SoCs.
 
+config MMC_BCM2835
+   bool "BCM2835 family custom SD/MMC Host Controller support"
+   depends on ARCH_BCM283X
+   depends on BLK && DM_MMC
+   depends on OF_CONTROL
+   default y
+   help
+ This selects support for the custom SD host controller in the BCM2835
+ family of devices.
+
+ If you have a BCM2835 platform with SD or MMC devices, say Y here.
+
+ If unsure, say N.
+
 config MMC_SANDBOX
bool "Sandbox MMC support"
depends on SANDBOX
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index 64b6f21c61..42113e2603 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -64,3 +64,4 @@ obj-$(CONFIG_MMC_SDHCI_ZYNQ)  += zynq_sdhci.o
 
 obj-$(CONFIG_MMC_SUNXI)+= sunxi_mmc.o
 obj-$(CONFIG_MMC_UNIPHIER) += uniphier-sd.o
+obj-$(CONFIG_MMC_BCM2835)  += bcm2835_sdhost.o
diff --git a/drivers/mmc/bcm2835_sdhost.c b/drivers/mmc/bcm2835_sdhost.c
new file mode 100644
index 00..ad9c7adb5a
--- /dev/null
+++ b/drivers/mmc/bcm2835_sdhost.c
@@ -0,0 +1,994 @@
+/*
+ * bcm2835 sdhost driver.
+ *
+ * The 2835 has two SD controllers: The Arasan sdhci controller
+ * (supported by the iproc driver) and a custom sdhost controller
+ * (supported by this driver).
+ *
+ * The sdhci controller supports both sdcard and sdio.  The sdhost
+ * controller supports the sdcard only, but has better performance.
+ * Also note that the rpi3 has sdio wifi, so driving the sdcard with
+ * the sdhost controller allows to use the sdhci controller for wifi
+ * support.
+ *
+ * The configuration is done by devicetree via pin muxing.  Both
+ * SD controller are available on the same pins (2 pin groups = pin 22
+ * to 27 + pin 48 to 53).  So it's possible to use both SD controllers
+ * at the same time with different pin groups.
+ *
+ * This code was ported to U-Boot by
+ *  Alexander Graf 
+ * and is based on drivers/mmc/host/bcm2835.c in Linux which is written by
+ *  Phil Elwell 
+ *  Copyright (C) 2015-2016 Raspberry Pi (Trading) Ltd.
+ * which is based on
+ *  mmc-bcm2835.c by Gellert Weisz
+ * which is, in turn, based on
+ *  sdhci-bcm2708.c by Broadcom
+ *  sdhci-bcm2835.c by Stephen Warren and Oleksandr Tymoshenko
+ *  sdhci.c and sdhci-pci.c by Pierre Ossman
+ *
+ * This program is free software; you can redistribute it and/or modify it
+ * under the terms and conditions of the GNU General Public License,
+ * version 2, as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE.  See the GNU General Public License for
+ * more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program.  If not, see .
+ */
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+#include 
+
+DECLARE_GLOBAL_DATA_PTR;
+
+#define msleep(a) udelay(a * 1000)
+
+#define SDCMD  0x00 /* Command to SD card  - 16 R/W */
+#define SDARG  0x04 /* Argument to SD card - 32 R/W */
+#define SDTOUT 0x08 /* Start value for timeout counter - 32 R/W */
+#define SDCDIV 0x0c /* Start value for clock divider   - 11 R/W */
+#define SDRSP0 0x10 /* SD card response (31:0) - 32 R   */
+#define SDRSP1 0x14 /* SD card