Skip to contentSkip to conversation

Add mmc driver for Sunplus SP7021 SOC

PATCH Superseded Tony Huang 4 participants 7 messages Feb 9, 2022 – Feb 14, 2022

Subsystems (2)

v3 of 12 Superseded Latest is v12 →

lore
Share & tools
lore

Tony Huang

author
#0 lore raw

v3 cover Add mmc driver for Sunplus SP7021 SOC

This is a patch series for mmc driver for Sunplus SP7021 SOC.

Sunplus SP7021 is an ARM Cortex A7 (4 cores) based SoC. It integrates many peripherals (ex: UART, I2C, SPI, SDIO, eMMC, USB, SD card and etc.) into a single chip. It is designed for industrial control.

Refer to:
https://sunplus-tibbo.atlassian.net/wiki/spaces/doc/overview
https://tibbo.com/store/plus1.html

Tony Huang (2):
dt-binding: mmc: Add mmc yaml file for Sunplus SP7021
mmc: Add mmc driver for Sunplus SP7021

 .../devicetree/bindings/mmc/sunplus-mmc.yaml       |   76 +
 MAINTAINERS                                        |    7 +
 drivers/mmc/host/Kconfig                           |    9 +
 drivers/mmc/host/Makefile                          |    1 +
 drivers/mmc/host/sunplus_mmc.c                     | 2168 ++++++++++++++++++++
 5 files changed, 2261 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml
 create mode 100644 drivers/mmc/host/sunplus_mmc.c
Signature · 1 line
2.7.4
author
#1 lore raw

PATCH v3 1/2 dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Add mmc yaml file for Sunplus SP7021

---
Changes in v3:
- combine sdcard and eMMC into one driver.

 .../devicetree/bindings/mmc/sunplus-mmc.yaml       | 76 ++++++++++++++++++++++
 MAINTAINERS                                        |  6 ++
 2 files changed, 82 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +76 -0
new file mode 100644
index 0000000..8f44d13
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright (C) Sunplus Ltd. Co. 2021
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mmc/sunplus-mmc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: sunplus MMC controller
+
+allOf:
+  - $ref: "mmc-controller.yaml"
+
+maintainers:
+  - Tony Huang <[email protected]>
+  - Li-hao Kuo <[email protected]>
+
+properties:
+  compatible:
+    enum:
+      - sunplus,sp7021-emmc
+      - sunplus,sp7021-sdhci
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    minItems: 1
+
+  resets:
+    maxItems: 1
+
+  max-frequency: true
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - resets
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    mmc0: mmc@9c003b00 {
+        compatible = "sunplus,sp7021-emmc";
+        reg = <0x9c003b00 0x180>;
+        interrupts = <20 IRQ_TYPE_LEVEL_HIGH>;
+        clocks = <&clkc 0x4e>;
+        resets = <&rstc 0x3e>;
+        bus-width = <8>;
+        max-frequency = <52000000>;
+        non-removable;
+        disable-wp;
+        cap-mmc-highspeed;
+        mmc-ddr-3_3v;
+        no-sdio;
+        no-sd;
+    };
+
+    mmc1: mmc@9c003e80 {
+       compatible = "sunplus,sp7021-sdhci";
+       reg = <0x9c003e80 0x280>;
+       interrupts = <21 IRQ_TYPE_LEVEL_HIGH>;
+       clocks = <&clkc 0x4f>;
+       resets = <&rstc 0x3f>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc1_mux &mmc1_mux_cd>;
+       max-frequency = <52000000>;
+    };
+...
MAINTAINERS +6 -0
index fb18ce7..cb46a55 100644
@@ -18242,6 +18242,12 @@ L:	[email protected]
 S:	Maintained
 F:	drivers/net/ethernet/dlink/sundance.c
 
+SUNPLUS MMC DRIVER
+M:	Tony Huang <[email protected]>
+M:	Li-hao Kuo <[email protected]>
+S:	Maintained
+F:	Documentation/devicetree/bindings/mmc/sunplu-mmc.yaml
+
 SUPERH
 M:	Yoshinori Sato <[email protected]>
 M:	Rich Felker <[email protected]>
Signature · 1 line
2.7.4
maintainer
#2 lore raw

Re: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Quoted 29 lines · Tony Huang

Add mmc yaml file for Sunplus SP7021

---
Changes in v3:
- combine sdcard and eMMC into one driver.

 .../devicetree/bindings/mmc/sunplus-mmc.yaml       | 76 ++++++++++++++++++++++
 MAINTAINERS                                        |  6 ++
 2 files changed, 82 insertions(+)
 create mode 100644 Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +11 -0
new file mode 100644
index 0000000..8f44d13
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause)
+# Copyright (C) Sunplus Ltd. Co. 2021
+%YAML 1.2
+---
+$id: http://devicetree.org/schemas/mmc/sunplus-mmc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: sunplus MMC controller
+
+allOf:
+  - $ref: "mmc-controller.yaml"

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml line 21

Quoted 10 lines
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +10 -0
+
+maintainers:
+  - Tony Huang <[email protected]>
+  - Li-hao Kuo <[email protected]>
+
+properties:
+  compatible:
+    enum:
+      - sunplus,sp7021-emmc
+      - sunplus,sp7021-sdhci

Why are these still different? Looking at the driver, it seems the settings are the same for both. And for clock speeds, we have properties to control them as they can be board specific.

Quoted 76 lines
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +55 -0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    minItems: 1
+
+  resets:
+    maxItems: 1
+
+  max-frequency: true
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - resets
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    mmc0: mmc@9c003b00 {
+        compatible = "sunplus,sp7021-emmc";
+        reg = <0x9c003b00 0x180>;
+        interrupts = <20 IRQ_TYPE_LEVEL_HIGH>;
+        clocks = <&clkc 0x4e>;
+        resets = <&rstc 0x3e>;
+        bus-width = <8>;
+        max-frequency = <52000000>;
+        non-removable;
+        disable-wp;
+        cap-mmc-highspeed;
+        mmc-ddr-3_3v;
+        no-sdio;
+        no-sd;
+    };
+
+    mmc1: mmc@9c003e80 {
+       compatible = "sunplus,sp7021-sdhci";
+       reg = <0x9c003e80 0x280>;
+       interrupts = <21 IRQ_TYPE_LEVEL_HIGH>;
+       clocks = <&clkc 0x4f>;
+       resets = <&rstc 0x3f>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc1_mux &mmc1_mux_cd>;
+       max-frequency = <52000000>;
+    };
+...
MAINTAINERS +6 -0
index fb18ce7..cb46a55 100644
@@ -18242,6 +18242,12 @@ L:	[email protected]
 S:	Maintained
 F:	drivers/net/ethernet/dlink/sundance.c
 
+SUNPLUS MMC DRIVER
+M:	Tony Huang <[email protected]>
+M:	Li-hao Kuo <[email protected]>
+S:	Maintained
+F:	Documentation/devicetree/bindings/mmc/sunplu-mmc.yaml
+
 SUPERH
 M:	Yoshinori Sato <[email protected]>
 M:	Rich Felker <[email protected]>
Signature · 1 line
2.7.4
#3 lore raw

RE: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Dear Robh:

Quoted 41 lines

Subject: Re: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Quoted 8 lines · Tony Huang

Add mmc yaml file for Sunplus SP7021

---
Changes in v3:
- combine sdcard and eMMC into one driver.

 .../devicetree/bindings/mmc/sunplus-mmc.yaml       | 76

++++++++++++++++++++++

Quoted 28 lines
 MAINTAINERS                                        |  6 ++
 2 files changed, 82 insertions(+)
 create mode 100644

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +16 -0
new file mode 100644
index 0000000..8f44d13
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) # Copyright
+(C) Sunplus Ltd. Co. 2021 %YAML 1.2
+---
+$id: http://devicetree.org/schemas/mmc/sunplus-mmc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: sunplus MMC controller
+
+allOf:
+  - $ref: "mmc-controller.yaml"
+
+maintainers:
+  - Tony Huang <[email protected]>
+  - Li-hao Kuo <[email protected]>
+
+properties:
Quoted 9 lines

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml line 21

Quoted 4 lines
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +4 -0
+  compatible:
+    enum:
+      - sunplus,sp7021-emmc
+      - sunplus,sp7021-sdhci

Why are these still different? Looking at the driver, it seems the settings are the same for both. And for clock speeds, we have properties to control them as they can be board specific.

The register base address of emmc and sd card are different. eMMC and sdcard are individual hardware settings

Quoted 75 lines
Quoted 75 lines
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +55 -0
+
+  reg:
+    maxItems: 1
+
+  interrupts:
+    maxItems: 1
+
+  clocks:
+    minItems: 1
+
+  resets:
+    maxItems: 1
+
+  max-frequency: true
+
+required:
+  - compatible
+  - reg
+  - interrupts
+  - clocks
+  - resets
+
+unevaluatedProperties: false
+
+examples:
+  - |
+    #include <dt-bindings/interrupt-controller/irq.h>
+    #include <dt-bindings/interrupt-controller/arm-gic.h>
+    mmc0: mmc@9c003b00 {
+        compatible = "sunplus,sp7021-emmc";
+        reg = <0x9c003b00 0x180>;
+        interrupts = <20 IRQ_TYPE_LEVEL_HIGH>;
+        clocks = <&clkc 0x4e>;
+        resets = <&rstc 0x3e>;
+        bus-width = <8>;
+        max-frequency = <52000000>;
+        non-removable;
+        disable-wp;
+        cap-mmc-highspeed;
+        mmc-ddr-3_3v;
+        no-sdio;
+        no-sd;
+    };
+
+    mmc1: mmc@9c003e80 {
+       compatible = "sunplus,sp7021-sdhci";
+       reg = <0x9c003e80 0x280>;
+       interrupts = <21 IRQ_TYPE_LEVEL_HIGH>;
+       clocks = <&clkc 0x4f>;
+       resets = <&rstc 0x3f>;
+       pinctrl-names = "default";
+       pinctrl-0 = <&mmc1_mux &mmc1_mux_cd>;
+       max-frequency = <52000000>;
+    };
+...
MAINTAINERS +6 -1
@@ -18242,6 +18242,12 @@ L:	[email protected]
 S:	Maintained
 F:	drivers/net/ethernet/dlink/sundance.c
 
+SUNPLUS MMC DRIVER
+M:	Tony Huang <[email protected]>
+M:	Li-hao Kuo <[email protected]>
+S:	Maintained
+F:	Documentation/devicetree/bindings/mmc/sunplu-mmc.yaml
+
 SUPERH
 M:	Yoshinori Sato <[email protected]>
 M:	Rich Felker <[email protected]>
--

2.7.4

#4 lore raw

Re: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Quoted 54 lines · Tony Huang 黃懷厚

Dear Robh:

Quoted 41 lines

Subject: Re: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Quoted 8 lines · Tony Huang

Add mmc yaml file for Sunplus SP7021

---
Changes in v3:
- combine sdcard and eMMC into one driver.

 .../devicetree/bindings/mmc/sunplus-mmc.yaml       | 76

++++++++++++++++++++++

Quoted 28 lines
 MAINTAINERS                                        |  6 ++
 2 files changed, 82 insertions(+)
 create mode 100644

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +16 -0
new file mode 100644
index 0000000..8f44d13
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) # Copyright
+(C) Sunplus Ltd. Co. 2021 %YAML 1.2
+---
+$id: http://devicetree.org/schemas/mmc/sunplus-mmc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: sunplus MMC controller
+
+allOf:
+  - $ref: "mmc-controller.yaml"
+
+maintainers:
+  - Tony Huang <[email protected]>
+  - Li-hao Kuo <[email protected]>
+
+properties:
Quoted 9 lines

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml line 21

Quoted 4 lines
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +4 -0
+  compatible:
+    enum:
+      - sunplus,sp7021-emmc
+      - sunplus,sp7021-sdhci

Why are these still different? Looking at the driver, it seems the settings are the same for both. And for clock speeds, we have properties to control them as they can be board specific.

Quoted 2 lines

The register base address of emmc and sd card are different. eMMC and sdcard are individual hardware settings

When I looked at the previous version of the driver(s) that was posted, I got the impression that you have some registers in the controller that are specific for eMMC, SD or SDIO.

So, depending on how the controller is going to be used (for eMMC, SD or SDIO) it's needs to be configured differently. Right?

If I got this right, I think you can instead use the existing common DT properties, "no-sd", "no-sdio", "no-mmc" to explain how each controller is configured.

Does this make sense to you?

Kind regards
Uffe

#5 lore raw

RE: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Dear Uffe:

Quoted 68 lines

Subject: Re: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus SP7021

Quoted 56 lines · Tony Huang 黃懷厚

Dear Robh:

Quoted 43 lines

Subject: Re: [PATCH v3 1/2] dt-binding: mmc: Add mmc yaml file for Sunplus
SP7021

Quoted 8 lines · Tony Huang

Add mmc yaml file for Sunplus SP7021

---
Changes in v3:
- combine sdcard and eMMC into one driver.

 .../devicetree/bindings/mmc/sunplus-mmc.yaml       | 76

++++++++++++++++++++++

Quoted 29 lines
 MAINTAINERS                                        |  6 ++
 2 files changed, 82 insertions(+)  create mode 100644

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml

diff --git a/Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml b/Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file mode 100644
index 0000000..8f44d13

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +17 -0
@@ -0,0 +1,76 @@
+# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) #
+Copyright
+(C) Sunplus Ltd. Co. 2021 %YAML 1.2
+---
+$id: http://devicetree.org/schemas/mmc/sunplus-mmc.yaml#
+$schema: http://devicetree.org/meta-schemas/core.yaml#
+
+title: sunplus MMC controller
+
+allOf:
+  - $ref: "mmc-controller.yaml"
+
+maintainers:
+  - Tony Huang <[email protected]>
+  - Li-hao Kuo <[email protected]>
+
+properties:
Quoted 9 lines

Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml line 21

Quoted 4 lines
Documentation/devicetree/bindings/mmc/sunplus-mmc.yaml new file +4 -0
+  compatible:
+    enum:
+      - sunplus,sp7021-emmc
+      - sunplus,sp7021-sdhci

Why are these still different? Looking at the driver, it seems the settings are the same for both. And for clock speeds, we have properties to control them as they can be board specific.

Quoted 2 lines

The register base address of emmc and sd card are different. eMMC and sdcard are individual hardware settings

When I looked at the previous version of the driver(s) that was posted, I got the impression that you have some registers in the controller that are specific for eMMC, SD or SDIO.

Quoted 7 lines

So, depending on how the controller is going to be used (for eMMC, SD or SDIO) it's needs to be configured differently. Right?

If I got this right, I think you can instead use the existing common DT properties, "no-sd", "no-sdio", "no-mmc" to explain how each controller is configured.

OK, I will use DT> properties, "no-sd", "no-sdio", "no-mmc" to explain how each controller is configured.
Thanks

author
#6 lore raw

PATCH v3 2/2 mmc: Add mmc driver for Sunplus SP7021

In reply to Tony Huang

Add mmc driver for Sunplus SP7021

---
Changes in v3:
- combine sdcard and eMMC into one driver.

 MAINTAINERS                    |    1 +
 drivers/mmc/host/Kconfig       |    9 +
 drivers/mmc/host/Makefile      |    1 +
 drivers/mmc/host/sunplus_mmc.c | 2168 ++++++++++++++++++++++++++++++++++++++++
 4 files changed, 2179 insertions(+)
 create mode 100644 drivers/mmc/host/sunplus_mmc.c
MAINTAINERS +1 -0
index cb46a55..89caa06 100644
@@ -18247,6 +18247,7 @@ M:	Tony Huang <[email protected]>
 M:  Li-hao Kuo <[email protected]>
 S:	Maintained
 F:	Documentation/devicetree/bindings/mmc/sunplu-mmc.yaml
+F:	drivers/mmc/host/sunplus_mmc.c
 
 SUPERH
 M:	Yoshinori Sato <[email protected]>
drivers/mmc/host/Kconfig +9 -0
index 5af8494..285daa1 100644
@@ -14,6 +14,15 @@ config MMC_DEBUG
 	  added host drivers please don't invent their private macro for
 	  debugging.
 
+config MMC_SUNPLUS
+	tristate "Sunplus SP7021 MMC Controller"
+	depends on ARCH_SUNPLUS
+	help
+	  If you say yes here, you will get support for eMMC host interface
+	  on Sunplus SoCs.
+
+	  If unsure, say N
+
 config MMC_ARMMMCI
 	tristate "ARM AMBA Multimedia Card Interface support"
 	depends on ARM_AMBA
drivers/mmc/host/Makefile +1 -0
index ea36d37..e6958e7 100644
@@ -97,6 +97,7 @@ obj-$(CONFIG_MMC_SDHCI_MICROCHIP_PIC32)	+= sdhci-pic32.o
 obj-$(CONFIG_MMC_SDHCI_BRCMSTB)		+= sdhci-brcmstb.o
 obj-$(CONFIG_MMC_SDHCI_OMAP)		+= sdhci-omap.o
 obj-$(CONFIG_MMC_SDHCI_SPRD)		+= sdhci-sprd.o
+obj-$(CONFIG_MMC_SUNPLUS)		+= sunplus_mmc.o
 obj-$(CONFIG_MMC_CQHCI)			+= cqhci.o
 cqhci-y					+= cqhci-core.o
 cqhci-$(CONFIG_MMC_CRYPTO)		+= cqhci-crypto.o
drivers/mmc/host/sunplus_mmc.c new file +2168 -0

2,168 lines not on this page · raw message

Signature · 1 line
2.7.4