All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH v9 00/19] spacemit mmc driver
@ 2026-08-19  3:54 Eric Chung
  2026-08-19  3:54 ` [PATCH v9 01/19] spacemit: k1: select boot device via config registers Eric Chung
                   ` (20 more replies)
  0 siblings, 21 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Yixun Lan,
	Yixun Lan, Alex Elder, Yixun Lan, Iker Pedrosa, Anand Moon,
	Trevor Gamblin, Vincent Legoll, Troy Mitchell, Margherita Milani,
	Aurelien Jarno, Andre Heider

This series adds MMC support for the SpacemiT K1: an SDHCI platform
driver, the SD card device-tree overlay, defconfig options, and SPL
boot-device selection from the SoC strap/config registers. The SDHCI
driver is usable in both SPL and U-Boot proper.

A flashing guide (doc/board/spacemit/k1-flash.rst) describes how to
write images to eMMC.

---
Changes in v9:
- spl: Enhance detection on booting from SD.
- dts: Synched upstream DTS files for K1.
- doc: Create SD card image from scratch.
- mmc: Avoid to use CMD18 on SD card in SPL.
- pinctrl: Drop "fix drive strength configuration".
- Link to v8: https://patch.msgid.link/20260802-m4-v8-4-e916643205f3@riscstar.com

Changes in v8:
- doc: Remove SD card.
- Link to v7: https://patch.msgid.link/20260729-m4-v7-8-2cb04b4fe389@riscstar.com

Changes in v7:
- env: Drop env support on the mmc series.
- dts: Sync upstream DTS files for spacemit.
- pinctrl: Simply clrsetbits_le32() on pull-up/pull-down configuration.
- spl: Fix DTB matching.
- Link to v6: https://patch.msgid.link/20260727-m4-v6-0-2f58566d48ca@riscstar.com

Changes in v6:
- pinctrl: Fix drive strength configuration.
- pinctrl: Fix pull-up/pull-down configuration.
- pinctrl: Use dev_read_phandle_with_args() to fetch "spacemit,syscon" instead.
- spacemit: rebase on latest upstream branch.
- Link to v5: https://patch.msgid.link/20260722-m4-v5-0-c41a951e5157@riscstar.com

Changes in v5:
- mmc: Split CMD23 support out.
- mmc: Use read_poll_timeout().
- mmc: Set pinctrl state based on selected timing mode.
- mmc: Remove the condition based on quirks.
- pinctrl: Fix power source argument.
- dts: Add missing power source on mmc pins.
- Link to v4: https://patch.msgid.link/20260707-m4-v4-0-dbd01185f911@riscstar.com

Changes in v4:
- mmc: Add CMD23 for write.
- mmc: Fix CMD23 only for CMD18.
- mmc: Update bulk release operations on reset and clocks for spacemit
  platform driver.
- MAINTAINER: update the maintainer of Spacemit K1.
- Link to v3: https://patch.msgid.link/20260705-m4-v3-0-5a9bc7f25fc5@riscstar.com

Changes in v3:
- pinctrl: Fix "fast" by "uhs".
- pinctrl: Add syscon dependency.
- mmc: Fix quick by capability.
- doc: Add SD boot support.
- Link to v2: https://lore.kernel.org/u-boot/20260630-m1-v1-0-83f13347b3ba@riscstar.com/T/#m2aba875a2696a7bb9b704618d22ae2fd7f7f5acc

Changes in v2:
- cmd: drop patches on eminfo & tlv_eeprom.
- configs: Enable ADMA and SYSCON support.
- dts: Use vmmc-supply as vqmmc-supply on the SD card node.
- mmc: k1: Enable ADMA mode support, use CMD23 for multi-block
  read/write, correct pinctrl state from "fast" to "uhs".
- mmc: sdhci: Add new quirk patch to enable CMD23 for multi-block
  transfers.
- pinctrl: k1: Add new IO power domain configuration support for
  dual-voltage GPIO banks.
- spacemit: k1: Use FIELD_GET() to parse boot strap mode.
- Link to v1: https://lore.kernel.org/u-boot/20260521-k1-spl-mmc-sdcard-v1-0-1bd14b8c4f9f@riscstar.com/

To: u-boot-spacemit@groups.io
To: u-boot@lists.denx.de
To: u-boot@lists.u-boot-project.org
Cc: Huan Zhou <pericycle.cc@gmail.com>
Cc: Tom Rini <trini@konsulko.com>
Cc: Tim Ouyang <tim609@andestech.com>
Cc: Leo Liang <leo.liang@sifive.com>
Cc: Raymond Mao <raymond.mao@riscstar.com>
Cc: Peng Fan <peng.fan@nxp.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Bhimeswararao Matsa <bhimeswararao.matsa@gmail.com>
Cc: Tanmay Kathpalia <tanmay.kathpalia@altera.com>
Cc: Kaustabh Chakraborty <kauschluss@disroot.org>
Cc: Han Xu <han.xu@nxp.com>
Cc: Yanir Levin <yanir.levin@tandemg.com>
Cc: Christoph Stoidner <c.stoidner@phytec.de>
Cc: Balsundar Ponnusamy <balsundar.ponnusamy@altera.com>
Cc: Daniel Palmer <daniel@thingy.jp>
Cc: Anshul Dalal <anshuld@ti.com>
Cc: Bastien Curutchet <bastien.curutchet@bootlin.com>
Cc: Angelo Dureghello <angelo@kernel-space.org>
Cc: Johan Jonker <jbx6244@gmail.com>
Cc: Sam Protsenko <semen.protsenko@linaro.org>
Cc: Guodong Xu <guodong@riscstar.com>
Cc: Yao Zi <me@ziyao.cc>
Cc: Rick Chen <rick@andestech.com>
Cc: Leo <ycliang@andestech.com>
Signed-off-by: Eric Chung <eric.chung@riscstar.com>

---
Alex Elder (1):
      riscv: dts: spacemit: define a SPI controller node

Andre Heider (6):
      riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure
      riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom
      riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR
      riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports
      riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports
      riscv: dts: spacemit: k1-musepi-pro: set default console baud rate

Eric Chung (9):
      spacemit: k1: select boot device via config registers
      pinctrl: k1: fix pull-up/pull-down configuration
      pinctrl: k1: add IO power domain configuration support
      mmc: k1: add sdhci platform driver
      dts: k1: enable mmc devices in SPL
      configs: k1: enable SD and eMMC support
      MAINTAINER: update Spacemit K1 entry
      doc: spacemit: flash on K1 SoC based boards
      spacemit: k1: fix product name detection and DTB matching in SPL

Iker Pedrosa (2):
      riscv: dts: spacemit: k1: add SD card controller and pinctrl support
      riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes

Trevor Gamblin (1):
      riscv: dts: spacemit: k1-musepi-pro: add SD card support with UHS modes

 arch/riscv/dts/k1-bananapi-f3-u-boot.dtsi          |  12 +-
 arch/riscv/dts/k1-musepi-pro-u-boot.dtsi           | 136 +---
 board/spacemit/k1/MAINTAINERS                      |   5 +-
 board/spacemit/k1/spl.c                            | 145 ++++-
 configs/spacemit_k1_defconfig                      |  22 +
 doc/board/spacemit/index.rst                       |   1 +
 doc/board/spacemit/k1-mmc.rst                      | 271 ++++++++
 drivers/mmc/Kconfig                                |   7 +
 drivers/mmc/Makefile                               |   1 +
 drivers/mmc/spacemit_sdhci.c                       | 684 +++++++++++++++++++++
 drivers/pinctrl/spacemit/pinctrl-k1.c              | 104 +++-
 dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts |  31 +-
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts  | 329 +++++++++-
 dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi    |  60 ++
 dts/upstream/src/riscv/spacemit/k1.dtsi            |  28 +
 15 files changed, 1677 insertions(+), 159 deletions(-)
---
base-commit: 527115ef6783cec49e5610c523c124b399011361
change-id: 20260629-m4-98e01659fefb

Best regards,
--  
Eric Chung <eric.chung@riscstar.com>


^ permalink raw reply	[flat|nested] 27+ messages in thread

* [PATCH v9 01/19] spacemit: k1: select boot device via config registers
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 02/19] pinctrl: k1: fix pull-up/pull-down configuration Eric Chung
                   ` (19 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung

Add logic to determine the current boot device by reading the
SoC's configuration registers, rather than using a hardcoded
default.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>
Reviewed-by: Yao Zi <me@ziyao.cc>
---
v9:
- Enhance detection on booting from SD card.
v5:
- Add blank lines around the switch statement.
v2:
- Use FIELD_GET() to parse boot strap mode.
- Remove comments on hacking. Since the sequence between eMMC
  and SD device is exchanged in the upstream DTS. So it isn't
  a hacking any more.
---
 board/spacemit/k1/spl.c | 95 ++++++++++++++++++++++++++++++++++++++++++++++++-
 1 file changed, 94 insertions(+), 1 deletion(-)

diff --git a/board/spacemit/k1/spl.c b/board/spacemit/k1/spl.c
index d749e21a2d57..b70eed14e6ed 100644
--- a/board/spacemit/k1/spl.c
+++ b/board/spacemit/k1/spl.c
@@ -13,6 +13,7 @@
 #include <dm/device.h>
 #include <dm/uclass.h>
 #include <i2c.h>
+#include <linux/bitfield.h>
 #include <linux/ctype.h>
 #include <linux/delay.h>
 #include <log.h>
@@ -22,6 +23,20 @@
 #include <tlv_eeprom.h>
 #include "tlv_codes.h"
 
+/* boot mode configs */
+#define BOOT_DEV_FLAG_REG	0xd4282d10
+#define BOOT_PIN_SEL_REG	0xd4282c20
+
+#define BOOT_STRAP_MODE_OFFSET	9
+#define BOOT_STRAP_MODE_MASK	3
+#define BOOT_STRAP_MODE_EMMC	0
+#define BOOT_STRAP_MODE_SPI	1
+#define BOOT_STRAP_MODE_NAND	2
+#define BOOT_STRAP_MODE_SD	3
+
+#define STORAGE_API_P_ADDR	0xc0838498
+#define SDCARD_API_ENTRY	0xffe0a548
+
 #define MUX_MODE4		4
 #define EDGE_NONE		BIT(6)
 #define PULL_UP			(6 << 13)       /* bit[15:13] 110 */
@@ -46,6 +61,17 @@ typedef void (*puts_func_t)(const char *s);
 typedef int (*ddr_init_func_t)(u64 ddr_base, u32 cs_num, u32 data_rate,
 			       puts_func_t puts);
 
+enum board_boot_mode {
+	BOOT_MODE_NONE = 0,
+	BOOT_MODE_USB = 0x55a,
+	BOOT_MODE_EMMC,
+	BOOT_MODE_NAND,
+	BOOT_MODE_SPI,
+	BOOT_MODE_SD,
+	BOOT_MODE_SHELL = 0x55f,
+	BOOT_MODE_BOOTSTRAP,
+};
+
 struct ddr_cfg {
 	u32     data_rate;
 	u32     cs_num;
@@ -58,6 +84,69 @@ binman_sym_declare(ulong, ddr_fw, size);
 
 char product_name[I2C_BUF_SIZE] = "k1";
 
+u32 read_boot_mode(void)
+{
+	void __iomem *boot_dev = (void __iomem *)BOOT_DEV_FLAG_REG;
+	void __iomem *boot_strap = (void __iomem *)BOOT_PIN_SEL_REG;
+	void __iomem *storage_api = (void __iomem *)STORAGE_API_P_ADDR;
+	u32 mode, sel, ret = 0;
+
+	mode = readl(storage_api);
+	if (mode == SDCARD_API_ENTRY)
+		return BOOT_MODE_SD;
+
+	mode = readl(boot_dev);
+	if (mode == BOOT_MODE_NONE || mode > BOOT_MODE_SD) {
+		sel = FIELD_GET(BOOT_STRAP_MODE_MASK << BOOT_STRAP_MODE_OFFSET,
+				readl(boot_strap));
+		switch (sel) {
+		case BOOT_STRAP_MODE_EMMC:
+			mode = BOOT_MODE_EMMC;
+			break;
+		case BOOT_STRAP_MODE_NAND:
+			mode = BOOT_MODE_NAND;
+			break;
+		case BOOT_STRAP_MODE_SPI:
+			mode = BOOT_MODE_SPI;
+			break;
+		case BOOT_STRAP_MODE_SD:
+		default:
+			mode = BOOT_MODE_SD;
+			break;
+		}
+	}
+
+	switch (mode) {
+	case BOOT_MODE_EMMC:
+		ret = BOOT_DEVICE_MMC1;
+		break;
+	case BOOT_MODE_NAND:
+		ret = BOOT_DEVICE_NAND;
+		break;
+	case BOOT_MODE_SPI:
+		ret = BOOT_DEVICE_SPI;
+		break;
+	case BOOT_MODE_USB:
+		ret = BOOT_DEVICE_USB;
+		break;
+	case BOOT_MODE_SD:
+		ret = BOOT_DEVICE_MMC2;
+		break;
+	default:
+		ret = BOOT_DEVICE_MMC1;
+		break;
+	}
+
+	return ret;
+}
+
+void write_boot_mode(u32 mode)
+{
+	void __iomem *boot_dev = (void __iomem *)BOOT_DEV_FLAG_REG;
+
+	writel(mode, boot_dev);
+}
+
 static void i2c_early_init(void)
 {
 	struct udevice *bus;
@@ -327,8 +416,12 @@ void nor_early_init(void)
 
 void board_init_f(ulong dummy)
 {
+	u32 mode;
 	int ret;
 
+	mode = read_boot_mode();
+	write_boot_mode(mode);
+
 	ret = spl_early_init();
 	if (ret)
 		panic("spl_early_init() failed:%d\n", ret);
@@ -354,7 +447,7 @@ void board_init_f(ulong dummy)
 
 u32 spl_boot_device(void)
 {
-	return BOOT_DEVICE_SPI;
+	return read_boot_mode();
 }
 
 void spl_board_init(void)

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 02/19] pinctrl: k1: fix pull-up/pull-down configuration
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
  2026-08-19  3:54 ` [PATCH v9 01/19] spacemit: k1: select boot device via config registers Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-21 16:54   ` Yixun Lan
  2026-08-19  3:54 ` [PATCH v9 03/19] pinctrl: k1: add IO power domain configuration support Eric Chung
                   ` (18 subsequent siblings)
  20 siblings, 1 reply; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Yixun Lan

Fix pull-up/pull-down configuration to honor the argument parameter:
when argument is non-zero, enable the requested pull direction;
when argument is zero, clear all pull bits to disable.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>
Reviewed-by: Yixun Lan <dlan@kenrel.org>

---
v9:
- Rebase since drop patch "fix drive strength configuration".
v7:
- Simplify pull-up/pull-down configuration by using a single
  clrsetbits_le32() call.
v6:
- Fix pull-up/pull-down configuration.
---
 drivers/pinctrl/spacemit/pinctrl-k1.c | 9 ++++-----
 1 file changed, 4 insertions(+), 5 deletions(-)

diff --git a/drivers/pinctrl/spacemit/pinctrl-k1.c b/drivers/pinctrl/spacemit/pinctrl-k1.c
index a6a22eacac7b..9ca4ef7c771e 100644
--- a/drivers/pinctrl/spacemit/pinctrl-k1.c
+++ b/drivers/pinctrl/spacemit/pinctrl-k1.c
@@ -406,7 +406,6 @@ static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector,
 	struct spacemit_pinctrl_data *data;
 	struct spacemit_pinctrl_priv *priv = dev_get_priv(dev);
 	void __iomem *addr;
-	u32 mask = 0;
 	unsigned int io_type;
 	u8 ds;
 	bool found;
@@ -421,12 +420,12 @@ static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector,
 		clrbits_le32(addr, PAD_PULLUP | PAD_PULLDOWN | PAD_PULL_EN);
 		break;
 	case PIN_CONFIG_BIAS_PULL_DOWN:
-		mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN;
-		clrsetbits_le32(addr, mask, PAD_PULLDOWN | PAD_PULL_EN);
+		clrsetbits_le32(addr, PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN,
+				argument ? PAD_PULLDOWN | PAD_PULL_EN : 0);
 		break;
 	case PIN_CONFIG_BIAS_PULL_UP:
-		mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN;
-		clrsetbits_le32(addr, mask, PAD_PULLUP | PAD_PULL_EN);
+		clrsetbits_le32(addr, PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN,
+				argument ? PAD_PULLUP | PAD_PULL_EN : 0);
 		break;
 	case PIN_CONFIG_DRIVE_STRENGTH:
 		io_type = IO_TYPE_1V8;

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 03/19] pinctrl: k1: add IO power domain configuration support
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
  2026-08-19  3:54 ` [PATCH v9 01/19] spacemit: k1: select boot device via config registers Eric Chung
  2026-08-19  3:54 ` [PATCH v9 02/19] pinctrl: k1: fix pull-up/pull-down configuration Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 04/19] mmc: k1: add sdhci platform driver Eric Chung
                   ` (17 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Yixun Lan

Dual-voltage GPIO banks default to 3.3V, but when externally supplied
with 1.8V the internal logic must be explicitly reconfigured to match.

Add the ability to program IO power domain control registers through the
APBC block. These registers require unlocking the AIB Secure Access
Register (ASAR) before every read/write, since configuring a 1.8V domain
while 3.3V is externally supplied can cause back-powering and pin damage.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>
Reviewed-by: Yao Zi <me@ziyao.cc>
Reviewed-by: Yixun Lan <dlan@kernel.org>

---
v7:
- Remove the dependency on SYSCON.
v6:
- Use dev_read_phandle_with_args() to fetch "spacemit,apbc" instead.
v5:
- Use tabs for macro definition alignment.
- Fix the missing power source argument.
v3:
- Add SYSCON dependency in Kconfig.
- Fix not sorted issue in the driver.
---
 drivers/pinctrl/spacemit/pinctrl-k1.c | 95 +++++++++++++++++++++++++++++++++--
 1 file changed, 92 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/spacemit/pinctrl-k1.c b/drivers/pinctrl/spacemit/pinctrl-k1.c
index 9ca4ef7c771e..6cb71b44b3a6 100644
--- a/drivers/pinctrl/spacemit/pinctrl-k1.c
+++ b/drivers/pinctrl/spacemit/pinctrl-k1.c
@@ -12,6 +12,7 @@
 #include <linux/bitops.h>
 #include <linux/errno.h>
 #include <linux/io.h>
+#include <regmap.h>
 
 /*
  * +---------+----------+-----------+--------+--------+----------+--------+
@@ -34,8 +35,23 @@
 #define PAD_PULLUP		BIT(14)
 #define PAD_PULL_EN		BIT(15)
 
-#define PIN_POWER_STATE_1V8		1800
-#define PIN_POWER_STATE_3V3		3300
+#define IO_PWR_DOMAIN_OFFSET	0x800
+
+#define IO_PWR_DOMAIN_GPIO2_Kx	0x0c
+#define IO_PWR_DOMAIN_GPIO3_K1	0x10
+#define IO_PWR_DOMAIN_MMC_Kx	0x1c
+#define IO_PWR_DOMAIN_QSPI_K1	0x20
+
+#define IO_PWR_DOMAIN_V18EN	BIT(2)
+
+#define APBC_ASFAR		0x50
+#define APBC_ASSAR		0x54
+
+#define APBC_ASFAR_AKEY		0xbaba
+#define APBC_ASSAR_AKEY		0xeb10
+
+#define PIN_POWER_STATE_1V8	1800
+#define PIN_POWER_STATE_3V3	3300
 
 enum spacemit_pin_io_type {
 	IO_TYPE_NONE = 0,
@@ -60,12 +76,14 @@ struct spacemit_pinctrl_data {
 	int (*get_pins)(struct udevice *dev);
 	int (*get_functions)(struct udevice *dev);
 	int (*get_io_type)(struct udevice *dev, unsigned int pin);
+	unsigned int (*pin_to_io_pd_offset)(unsigned int pin);
 };
 
 struct spacemit_pinctrl_priv {
 	void __iomem		*regs;
 	struct spacemit_pin_io	*io_pins;
 	int			nr_io_pins;
+	struct regmap		*regmap;
 };
 
 struct spacemit_pin_mux_config {
@@ -196,6 +214,28 @@ static int k1_get_io_type(struct udevice *dev, unsigned int selector)
 	return -EINVAL;
 }
 
+static unsigned int spacemit_k1_pin_to_io_pd_offset(unsigned int pin)
+{
+	unsigned int offset = 0;
+
+	switch (pin) {
+	case 47 ... 52:
+		offset = IO_PWR_DOMAIN_GPIO3_K1;
+		break;
+	case 75 ... 80:
+		offset = IO_PWR_DOMAIN_GPIO2_Kx;
+		break;
+	case 98 ... 103:
+		offset = IO_PWR_DOMAIN_QSPI_K1;
+		break;
+	case 104 ... 109:
+		offset = IO_PWR_DOMAIN_MMC_Kx;
+		break;
+	}
+
+	return offset;
+}
+
 /* use IO high level output current as the table */
 static struct spacemit_pin_drv_strength spacemit_ds_1v8_tbl[4] = {
 	{ 0, 11 },
@@ -400,6 +440,35 @@ static const struct pinconf_param spacemit_pinconf_params[] = {
 	{ "power-source",	PIN_CONFIG_POWER_SOURCE,	U32_MAX },
 };
 
+static void spacemit_set_io_power_domain(struct udevice *dev,
+					 unsigned int pin,
+					 unsigned int io_type)
+{
+	struct spacemit_pinctrl_priv *priv = dev_get_priv(dev);
+	struct spacemit_pinctrl_data *data;
+	unsigned int offset;
+	u32 val = 0;
+
+	if (!priv->regmap)
+		return;
+
+	data = (struct spacemit_pinctrl_data *)dev_get_driver_data(dev);
+	if (!data || !data->pin_to_io_pd_offset)
+		return;
+
+	offset = data->pin_to_io_pd_offset(pin);
+	if (!offset)
+		return;
+
+	if (io_type == IO_TYPE_1V8)
+		val = IO_PWR_DOMAIN_V18EN;
+
+	regmap_write(priv->regmap, APBC_ASFAR, APBC_ASFAR_AKEY);
+	regmap_write(priv->regmap, APBC_ASSAR, APBC_ASSAR_AKEY);
+
+	writel(val, priv->regs + IO_PWR_DOMAIN_OFFSET + offset);
+}
+
 static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector,
 				unsigned int param, unsigned int argument)
 {
@@ -414,6 +483,7 @@ static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector,
 	data = (struct spacemit_pinctrl_data *)dev_get_driver_data(dev);
 	if (!data || !data->pin_to_reg)
 		return -EINVAL;
+
 	addr = data->pin_to_reg(dev, pin_selector);
 	switch (param) {
 	case PIN_CONFIG_BIAS_DISABLE:
@@ -455,10 +525,14 @@ static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector,
 			}
 			break;
 		}
-		if (!found && argument != PIN_POWER_STATE_1V8) {
+		if (!found && argument != PIN_POWER_STATE_1V8 &&
+		    argument != PIN_POWER_STATE_3V3) {
 			dev_err(dev, "Invalid power source (%d)\n", argument);
 			return -EINVAL;
 		}
+		if (found)
+			spacemit_set_io_power_domain(dev, pin_selector,
+						     priv->io_pins[i].io_type);
 		break;
 	default:
 		return -EOPNOTSUPP;
@@ -471,6 +545,7 @@ static int spacemit_pinctrl_probe(struct udevice *dev)
 	struct spacemit_pinctrl_data *data;
 	struct spacemit_pinctrl_priv *priv;
 	struct clk_bulk clks;
+	struct ofnode_phandle_args args;
 	size_t size;
 	int ret;
 
@@ -488,6 +563,19 @@ static int spacemit_pinctrl_probe(struct udevice *dev)
 		dev_err(dev, "Fail to allocate memory\n");
 		return -ENOMEM;
 	}
+	ret = dev_read_phandle_with_args(dev, "spacemit,apbc",
+					 NULL, 0, 0, &args);
+	if (ret) {
+		dev_warn(dev, "no APBC phandle found, disable IO power domain switching\n");
+		priv->regmap = NULL;
+	} else {
+		ret = regmap_init_mem(args.node, &priv->regmap);
+		if (ret) {
+			dev_warn(dev, "failed to get APBC regmap,"
+				 " disable IO power domain switching\n");
+			priv->regmap = NULL;
+		}
+	}
 
 	ret = clk_get_bulk(dev, &clks);
 	if (ret) {
@@ -515,6 +603,7 @@ static const struct spacemit_pinctrl_data k1_pinctrl_data = {
 	.get_pins	= k1_get_pins,
 	.get_functions	= k1_get_functions,
 	.get_io_type	= k1_get_io_type,
+	.pin_to_io_pd_offset = spacemit_k1_pin_to_io_pd_offset,
 };
 
 static const struct udevice_id spacemit_pinctrl_ids[] = {

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 04/19] mmc: k1: add sdhci platform driver
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (2 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 03/19] pinctrl: k1: add IO power domain configuration support Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 05/19] riscv: dts: spacemit: define a SPI controller node Eric Chung
                   ` (16 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung

Add SDHCI platform driver support for SpacemiT K1 SoC. This driver
implements the necessary platform-specific operations for the SDHCI
controller, enabling MMC/SD card functionality on K1-based platforms.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>

---
v9:
- Disable CMD18 (multiple-block read) for SD cards in SPL.
v6:
- Remove ".data = 0" in spacemit_sdhci_ids[].
v5:
- Remove MMC_CAP_CMD23 as the CMD23 support is now a separate series.
- Use tabs for macro definition alignment.
- Use read_poll_timeout().
- Set pinctrl state based on selected timing mode.
- Add the definition of SDHC_DLL_REG1_HS400_VAL.
- Remove the condition based on quirks.
v4:
- Add bulk release operations on reset and clock.
v3:
- Enable CMD23 in capability.
v2:
- Enable ADMA mode support.
- Use CMD23 for multi-block read/write.
- Move ASR/AIB register into pinctrl driver.
- Correct pinctrl state from "fast" to "uhs".
- Migrate tuning support from the spacemit linux driver.
---
 drivers/mmc/Kconfig          |   7 +
 drivers/mmc/Makefile         |   1 +
 drivers/mmc/spacemit_sdhci.c | 684 +++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 692 insertions(+)

diff --git a/drivers/mmc/Kconfig b/drivers/mmc/Kconfig
index f9f7aa5cf97d..b991a5931c0b 100644
--- a/drivers/mmc/Kconfig
+++ b/drivers/mmc/Kconfig
@@ -722,6 +722,13 @@ config MMC_SDHCI_SNPS
 
 	  If unsure, say N.
 
+config MMC_SDHCI_SPACEMIT
+	bool "Spacemit SDHCI controller"
+	depends on MMC_SDHCI
+	help
+	  Support for Secure Digital Host Controller Interface (SDHCI) on
+	  Spacemit K1 SoC.
+
 config MMC_SDHCI_STI
 	bool "SDHCI support for STMicroelectronics SoC"
 	depends on MMC_SDHCI && OF_CONTROL && ARCH_STI
diff --git a/drivers/mmc/Makefile b/drivers/mmc/Makefile
index a23336d7d8d7..aa05cec23be7 100644
--- a/drivers/mmc/Makefile
+++ b/drivers/mmc/Makefile
@@ -71,6 +71,7 @@ obj-$(CONFIG_MMC_SDHCI_ROCKCHIP)	+= rockchip_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_ADI)		+= adi_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_S5P)		+= s5p_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_SNPS)		+= snps_sdhci.o
+obj-$(CONFIG_MMC_SDHCI_SPACEMIT)	+= spacemit_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_STI)		+= sti_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_TANGIER)		+= tangier_sdhci.o
 obj-$(CONFIG_MMC_SDHCI_TEGRA)		+= tegra_mmc.o
diff --git a/drivers/mmc/spacemit_sdhci.c b/drivers/mmc/spacemit_sdhci.c
new file mode 100644
index 000000000000..4731c9ca0832
--- /dev/null
+++ b/drivers/mmc/spacemit_sdhci.c
@@ -0,0 +1,684 @@
+// SPDX-License-Identifier: GPL-2.0+
+/*
+ * Driver for Spacemit K1 Mobile Storage Host Controller
+ *
+ * Copyright (C) 2023-2026 Spacemit Inc.
+ * Copyright (C) 2026 RISCstar Ltd.
+ */
+
+#define LOG_CATEGORY UCLASS_MMC
+
+#include <clk.h>
+#include <dm.h>
+#include <fdtdec.h>
+#include <log.h>
+#include <malloc.h>
+#include <sdhci.h>
+#include <reset-uclass.h>
+#include <mapmem.h>
+#include <dm/pinctrl.h>
+#include <linux/bitfield.h>
+#include <linux/iopoll.h>
+#include <linux/libfdt.h>
+#include <linux/delay.h>
+#include <power/regulator.h>
+
+/* SDH register definitions */
+#define SPACEMIT_SDHC_OP_EXT_REG	0x108
+#define  SDHC_OVRRD_CLK_OEN		BIT(11)
+#define  SDHC_FORCE_CLK_ON		BIT(12)
+
+#define SPACEMIT_SDHC_LEGACY_CTRL_REG	0x10C
+#define  SDHC_GEN_PAD_CLK_ON		BIT(6)
+
+#define SPACEMIT_SDHC_MMC_CTRL_REG	0x114
+#define  SDHC_MISC_INT_EN		BIT(1)
+#define  SDHC_MISC_INT			BIT(2)
+#define  SDHC_ENHANCE_STROBE_EN		BIT(8)
+#define  SDHC_MMC_HS400			BIT(9)
+#define  SDHC_MMC_HS200			BIT(10)
+#define  SDHC_MMC_CARD_MODE		BIT(12)
+
+#define SPACEMIT_SDHC_TX_CFG_REG	0x11C
+#define  SDHC_TX_INT_CLK_SEL		BIT(30)
+#define  SDHC_TX_MUX_SEL		BIT(31)
+
+#define SPACEMIT_SDHC_PHY_CTRL_REG	0x160
+#define  SDHC_PHY_FUNC_EN		BIT(0)
+#define  SDHC_PHY_PLL_LOCK		BIT(1)
+#define  SDHC_HOST_LEGACY_MODE		BIT(31)
+
+#define SPACEMIT_SDHC_PHY_FUNC_REG	0x164
+#define  SDHC_PHY_TEST_EN		BIT(7)
+#define  SDHC_HS200_USE_RFIFO		BIT(15)
+
+#define SPACEMIT_SDHC_PHY_DLLCFG	0x168
+#define  SDHC_DLL_PREDLY_NUM		GENMASK(3, 2)
+#define  SDHC_DLL_FULLDLY_RANGE		GENMASK(5, 4)
+#define  SDHC_DLL_VREG_CTRL		GENMASK(7, 6)
+#define  SDHC_DLL_ENABLE		BIT(31)
+
+#define SPACEMIT_SDHC_PHY_DLLCFG1	0x16C
+#define  SDHC_DLL_REG1_CTRL		GENMASK(7, 0)
+#define  SDHC_DLL_REG2_CTRL		GENMASK(15, 8)
+#define  SDHC_DLL_REG3_CTRL		GENMASK(23, 16)
+#define  SDHC_DLL_REG4_CTRL		GENMASK(31, 24)
+#define  SDHC_DLL_REG1_HS400_VAL	0x92
+
+#define SPACEMIT_SDHC_PHY_DLLSTS	0x170
+#define  SDHC_DLL_LOCK_STATE		BIT(0)
+
+#define SPACEMIT_SDHC_PHY_PADCFG_REG	0x178
+#define  SDHC_PHY_DRIVE_SEL		GENMASK(2, 0)
+#define  SDHC_RX_BIAS_CTRL		BIT(5)
+
+#define SPACEMIT_SDHC_RX_CFG_REG	0x118
+#define  SDHC_RX_SDCLK_SEL0_MASK	GENMASK(1, 0)
+#define  SDHC_RX_SDCLK_SEL1_MASK	GENMASK(3, 2)
+#define  SDHC_RX_SDCLK_SEL1		FIELD_PREP(SDHC_RX_SDCLK_SEL1_MASK, 1)
+
+#define SPACEMIT_SDHC_DLINE_CTRL_REG	0x130
+#define  SDHC_DLINE_PU			BIT(0)
+#define  SDHC_RX_DLINE_CODE_MASK	GENMASK(23, 16)
+#define  SDHC_TX_DLINE_CODE_MASK	GENMASK(31, 24)
+
+#define SPACEMIT_SDHC_DLINE_CFG_REG	0x134
+#define  SDHC_RX_DLINE_REG_MASK		GENMASK(7, 0)
+#define  SDHC_RX_DLINE_GAIN		BIT(8)
+#define  SDHC_TX_DLINE_REG_MASK		GENMASK(23, 16)
+
+#define SPACEMIT_RX_DLINE_REG		9
+#define SPACEMIT_RX_TUNE_DELAY_MIN	0x0
+#define SPACEMIT_RX_TUNE_DELAY_MAX	0xFF
+
+#define SPACEMIT_TX_TUNING_DLINE_REG	0x00
+#define SPACEMIT_TX_TUNING_DELAYCODE	127
+
+struct spacemit_sdhci_plat {
+	struct mmc_config cfg;
+	struct mmc mmc;
+	struct reset_ctl_bulk resets;
+	struct clk_bulk clks;
+};
+
+struct spacemit_sdhci_priv {
+	struct sdhci_host host;
+};
+
+/* All helper functions will update clr/set while preserve rest bits */
+static inline void spacemit_sdhci_setbits(struct sdhci_host *host, u32 val,
+					  int reg)
+{
+	sdhci_writel(host, sdhci_readl(host, reg) | val, reg);
+}
+
+static inline void spacemit_sdhci_clrbits(struct sdhci_host *host, u32 val,
+					  int reg)
+{
+	sdhci_writel(host, sdhci_readl(host, reg) & ~val, reg);
+}
+
+static inline void spacemit_sdhci_clrsetbits(struct sdhci_host *host, u32 clr,
+					     u32 set, int reg)
+{
+	u32 val = sdhci_readl(host, reg);
+
+	val = (val & ~clr) | set;
+	sdhci_writel(host, val, reg);
+}
+
+#if CONFIG_IS_ENABLED(MMC_SUPPORTS_TUNING)
+static void spacemit_sdhci_set_rx_delay(struct sdhci_host *host, u8 delay)
+{
+	spacemit_sdhci_clrsetbits(host, SDHC_RX_DLINE_CODE_MASK,
+				  FIELD_PREP(SDHC_RX_DLINE_CODE_MASK, delay),
+				  SPACEMIT_SDHC_DLINE_CTRL_REG);
+}
+
+static void spacemit_sdhci_set_tx_delay(struct sdhci_host *host, u8 delay)
+{
+	spacemit_sdhci_clrsetbits(host, SDHC_TX_DLINE_CODE_MASK,
+				  FIELD_PREP(SDHC_TX_DLINE_CODE_MASK, delay),
+				  SPACEMIT_SDHC_DLINE_CTRL_REG);
+}
+
+static void spacemit_sdhci_set_tx_dline_reg(struct sdhci_host *host,
+					    u8 dline_reg)
+{
+	spacemit_sdhci_clrsetbits(host, SDHC_TX_DLINE_REG_MASK,
+				  FIELD_PREP(SDHC_TX_DLINE_REG_MASK, dline_reg),
+				  SPACEMIT_SDHC_DLINE_CFG_REG);
+}
+
+static void spacemit_sdhci_tx_tuning_prepare(struct sdhci_host *host)
+{
+	spacemit_sdhci_setbits(host, SDHC_TX_MUX_SEL, SPACEMIT_SDHC_TX_CFG_REG);
+	spacemit_sdhci_setbits(host, SDHC_DLINE_PU,
+			       SPACEMIT_SDHC_DLINE_CTRL_REG);
+	udelay(5);
+}
+
+static void spacemit_sdhci_prepare_tuning(struct sdhci_host *host)
+{
+	spacemit_sdhci_clrsetbits(host, SDHC_RX_DLINE_REG_MASK,
+				  FIELD_PREP(SDHC_RX_DLINE_REG_MASK, SPACEMIT_RX_DLINE_REG),
+				  SPACEMIT_SDHC_DLINE_CFG_REG);
+
+	spacemit_sdhci_setbits(host, SDHC_DLINE_PU,
+			       SPACEMIT_SDHC_DLINE_CTRL_REG);
+	udelay(5);
+
+	spacemit_sdhci_clrsetbits(host, SDHC_RX_SDCLK_SEL1_MASK,
+				  SDHC_RX_SDCLK_SEL1,
+				  SPACEMIT_SDHC_RX_CFG_REG);
+
+	if (host->mmc->selected_mode == MMC_HS_200)
+		spacemit_sdhci_setbits(host, SDHC_HS200_USE_RFIFO,
+				       SPACEMIT_SDHC_PHY_FUNC_REG);
+}
+#endif /* MMC_SUPPORTS_TUNING */
+
+/*
+ * Reference: PMU_SDH0_CLK_RES_CTRL (0x054), SDH0_CLK_SEL=0x0,
+ * SDH0_CLK_DIV=0x1. The default clock source is 204.8 MHz
+ * (pll1_d6_409p6Mhz / 2).
+ *
+ * During start-up, use a 200 kHz frequency.
+ */
+#define SDHC_MIN_CLOCK (200 * 1000)
+
+static void spacemit_sdhci_phy_init(struct udevice *dev,
+				    struct sdhci_host *host)
+{
+	u32 reg = 0;
+
+	if (dev_read_bool(dev, "no-sd") && dev_read_bool(dev, "no-sdio")) {
+		/* MMC card mode */
+		reg = sdhci_readl(host, SPACEMIT_SDHC_MMC_CTRL_REG);
+		reg |= SDHC_MMC_CARD_MODE;
+		sdhci_writel(host, reg, SPACEMIT_SDHC_MMC_CTRL_REG);
+
+		/* Use PHY functional mode */
+		reg = sdhci_readl(host, SPACEMIT_SDHC_PHY_CTRL_REG);
+		reg |= (SDHC_PHY_FUNC_EN | SDHC_PHY_PLL_LOCK);
+		sdhci_writel(host, reg, SPACEMIT_SDHC_PHY_CTRL_REG);
+
+		reg = sdhci_readl(host, SPACEMIT_SDHC_PHY_PADCFG_REG);
+		reg |= SDHC_RX_BIAS_CTRL;
+		sdhci_writel(host, reg, SPACEMIT_SDHC_PHY_PADCFG_REG);
+	} else {
+		reg = sdhci_readl(host, SPACEMIT_SDHC_TX_CFG_REG);
+		reg |= SDHC_TX_INT_CLK_SEL;
+		sdhci_writel(host, reg, SPACEMIT_SDHC_TX_CFG_REG);
+	}
+
+	reg = sdhci_readl(host, SPACEMIT_SDHC_MMC_CTRL_REG);
+	reg &= ~SDHC_ENHANCE_STROBE_EN;
+	sdhci_writel(host, reg, SPACEMIT_SDHC_MMC_CTRL_REG);
+}
+
+static int spacemit_sdhci_set_vqmmc_voltage(struct mmc *mmc, int voltage)
+{
+#if CONFIG_IS_ENABLED(DM_REGULATOR)
+	int ret;
+
+	if (!mmc->vqmmc_supply)
+		return 0;
+
+	ret = regulator_set_value(mmc->vqmmc_supply, voltage);
+	if (ret)
+		return ret;
+	ret = regulator_set_enable_if_allowed(mmc->vqmmc_supply, true);
+	if (ret)
+		return ret;
+#endif
+	return 0;
+}
+
+static void spacemit_sdhci_set_voltage(struct sdhci_host *host)
+{
+	if (IS_ENABLED(CONFIG_MMC_IO_VOLTAGE)) {
+		struct mmc *mmc = host->mmc;
+		u32 ctrl;
+
+		ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
+
+		switch (mmc->signal_voltage) {
+		case MMC_SIGNAL_VOLTAGE_330:
+		case MMC_SIGNAL_VOLTAGE_180: {
+			bool to_180 = mmc->signal_voltage ==
+				      MMC_SIGNAL_VOLTAGE_180;
+			bool ok;
+			int voltage_mv = to_180 ? 1800000 : 3300000;
+
+			if (spacemit_sdhci_set_vqmmc_voltage(mmc, voltage_mv))
+				return;
+			if (!IS_SD(mmc))
+				return;
+			if (to_180)
+				ctrl |= SDHCI_CTRL_VDD_180;
+			else
+				ctrl &= ~SDHCI_CTRL_VDD_180;
+			sdhci_writew(host, ctrl, SDHCI_HOST_CONTROL2);
+
+			mdelay(5);
+
+			ctrl = sdhci_readw(host, SDHCI_HOST_CONTROL2);
+			ok = !!(ctrl & SDHCI_CTRL_VDD_180) == to_180;
+			if (ok)
+				return;
+
+			log_err("%d.%dV regulator output not stable\n",
+				voltage_mv / 1000000,
+				(voltage_mv / 100000) % 10);
+			break;
+		}
+		default:
+			/* No signal voltage switch required */
+			return;
+		}
+	}
+}
+
+static void spacemit_sdhci_set_clk_gate(struct sdhci_host *host, int auto_gate)
+{
+	u32 reg;
+
+	reg = sdhci_readl(host, SPACEMIT_SDHC_OP_EXT_REG);
+	if (auto_gate)
+		reg &= ~(SDHC_OVRRD_CLK_OEN | SDHC_FORCE_CLK_ON);
+	else
+		reg |= (SDHC_OVRRD_CLK_OEN | SDHC_FORCE_CLK_ON);
+	sdhci_writel(host, reg, SPACEMIT_SDHC_OP_EXT_REG);
+}
+
+static bool spacemit_sdhci_is_voltage_switch_cmd(struct sdhci_host *host)
+{
+	struct mmc *mmc = host->mmc;
+	u32 cmd;
+
+	if (!IS_SD(mmc))
+		return false;
+
+	cmd = SDHCI_GET_CMD(sdhci_readw(host, SDHCI_COMMAND));
+	return cmd == SD_CMD_SWITCH_UHS18V &&
+	       mmc->signal_voltage == MMC_SIGNAL_VOLTAGE_180;
+}
+
+static int spacemit_sdhci_wait_dat0(struct udevice *dev, int state,
+				    int timeout_us)
+{
+	struct mmc *mmc = mmc_get_mmc_dev(dev);
+	struct sdhci_host *host = mmc->priv;
+	u32 tmp;
+	int ret;
+
+	ret = read_poll_timeout(sdhci_readl, tmp,
+				!!(tmp & SDHCI_DATA_0_LVL_MASK) == !!state,
+				0, timeout_us, host, SDHCI_PRESENT_STATE);
+	if (ret)
+		return ret;
+
+	if (spacemit_sdhci_is_voltage_switch_cmd(host))
+		spacemit_sdhci_set_clk_gate(host, 1);
+	return 0;
+}
+
+static int spacemit_sdhci_get_b_max(struct udevice *dev, void *dst,
+				    lbaint_t blkcnt)
+{
+	struct mmc *mmc = mmc_get_mmc_dev(dev);
+
+	if (IS_ENABLED(CONFIG_SPL_BUILD) && mmc && IS_SD(mmc))
+		return 1;
+	return mmc->cfg->b_max;
+}
+
+static void spacemit_sdhci_set_control_reg(struct sdhci_host *host)
+{
+	struct mmc *mmc = host->mmc;
+	u32 reg;
+
+	spacemit_sdhci_set_voltage(host);
+
+	if (spacemit_sdhci_is_voltage_switch_cmd(host))
+		spacemit_sdhci_set_clk_gate(host, 0);
+
+	/*
+	 * Set TX_INT_CLK_SEL to guarantee hold time at default speed,
+	 * HS, SDR12/SDR25/SDR50 modes. See SDHC_TX_CFG_REG (0x11c).
+	 */
+	reg = sdhci_readl(host, SPACEMIT_SDHC_TX_CFG_REG);
+	if (mmc->selected_mode == MMC_LEGACY ||
+	    mmc->selected_mode == MMC_HS ||
+	    mmc->selected_mode == SD_HS ||
+	    mmc->selected_mode == UHS_SDR12 ||
+	    mmc->selected_mode == UHS_SDR25 ||
+	    mmc->selected_mode == UHS_SDR50) {
+		reg |= SDHC_TX_INT_CLK_SEL;
+	} else {
+		reg &= ~SDHC_TX_INT_CLK_SEL;
+	}
+	sdhci_writel(host, reg, SPACEMIT_SDHC_TX_CFG_REG);
+
+	/* Set pinctrl state based on selected timing mode */
+	if (IS_ENABLED(CONFIG_PINCTRL)) {
+		switch (mmc->selected_mode) {
+		case UHS_SDR12:
+		case UHS_SDR25:
+		case UHS_SDR50:
+		case UHS_SDR104:
+			pinctrl_select_state(mmc->dev, "uhs");
+			break;
+		default:
+			pinctrl_select_state(mmc->dev, "default");
+			break;
+		}
+	}
+
+	if (mmc->selected_mode == MMC_HS_200 ||
+	    mmc->selected_mode == MMC_HS_400 ||
+	    mmc->selected_mode == MMC_HS_400_ES) {
+		reg = sdhci_readw(host, SPACEMIT_SDHC_MMC_CTRL_REG);
+		if (mmc->selected_mode == MMC_HS_200)
+			reg |= SDHC_MMC_HS200;
+		else
+			reg |= SDHC_MMC_HS400;
+		sdhci_writew(host, reg, SPACEMIT_SDHC_MMC_CTRL_REG);
+	} else {
+		reg = sdhci_readw(host, SPACEMIT_SDHC_MMC_CTRL_REG);
+		reg &= ~(SDHC_MMC_HS200 | SDHC_MMC_HS400 | SDHC_ENHANCE_STROBE_EN);
+		sdhci_writew(host, reg, SPACEMIT_SDHC_MMC_CTRL_REG);
+	}
+
+	sdhci_set_uhs_timing(host);
+}
+
+#if CONFIG_IS_ENABLED(MMC_SUPPORTS_TUNING)
+static int spacemit_sdhci_execute_tuning(struct mmc *mmc, u8 opcode)
+{
+	struct sdhci_host *host = mmc->priv;
+	int current_len = 0, current_start = 0;
+	int max_pass_len = 0, max_pass_start = 0;
+	u8 final_delay;
+	int ret = 0;
+	int i;
+
+	/*
+	 * Tuning is required for SDR50/SDR104, HS200/HS400 cards and
+	 * if clock frequency is greater than 100MHz in these modes.
+	 */
+	if (host->clock < 100 * 1000 * 1000 ||
+	    !(mmc->selected_mode == MMC_HS_200 ||
+	      mmc->selected_mode == UHS_SDR50 ||
+	      mmc->selected_mode == UHS_SDR104))
+		return 0;
+
+	if (IS_SD(host->mmc)) {
+		spacemit_sdhci_set_tx_dline_reg(host, SPACEMIT_TX_TUNING_DLINE_REG);
+		spacemit_sdhci_set_tx_delay(host, SPACEMIT_TX_TUNING_DELAYCODE);
+		spacemit_sdhci_tx_tuning_prepare(host);
+
+		log_debug("TX tuning: dline_reg=%d, delaycode=%d\n",
+			  SPACEMIT_TX_TUNING_DLINE_REG, SPACEMIT_TX_TUNING_DELAYCODE);
+	}
+
+	spacemit_sdhci_prepare_tuning(host);
+
+	for (i = SPACEMIT_RX_TUNE_DELAY_MIN; i <= SPACEMIT_RX_TUNE_DELAY_MAX; i++) {
+		spacemit_sdhci_set_rx_delay(host, i);
+		ret = mmc_send_tuning(host->mmc, opcode);
+
+		log_debug("RX delay %d: %s\n",
+			  i, ret == 0 ? "pass" : "fail");
+
+		if (ret == 0) {
+			/* Test passed - extend current window */
+			if (current_len == 0)
+				current_start = i;
+			current_len++;
+		} else {
+			/* Test failed - check if current window is best so far */
+			if (current_len > max_pass_len) {
+				max_pass_len = current_len;
+				max_pass_start = current_start;
+			}
+			current_len = 0;
+		}
+	}
+
+	if (current_len > max_pass_len) {
+		max_pass_len = current_len;
+		max_pass_start = current_start;
+	}
+
+	if (max_pass_len < 3) {
+		log_err("Tuning failed: no stable window found\n");
+		return -EIO;
+	}
+
+	final_delay = max_pass_start + max_pass_len / 2;
+	spacemit_sdhci_set_rx_delay(host, final_delay);
+	ret = mmc_send_tuning(host->mmc, opcode);
+	if (ret) {
+		u8 retry_delays[] = {
+			max_pass_start + max_pass_len / 4,
+			max_pass_start + (3 * max_pass_len) / 4,
+			max_pass_start,
+			max_pass_start + max_pass_len - 1
+		};
+		int retry_count = ARRAY_SIZE(retry_delays);
+
+		log_warning("Primary delay %d failed, trying alternatives\n",
+			    final_delay);
+
+		for (i = 0; i < retry_count; i++) {
+			if (retry_delays[i] >= SPACEMIT_RX_TUNE_DELAY_MIN &&
+			    retry_delays[i] <= SPACEMIT_RX_TUNE_DELAY_MAX) {
+				spacemit_sdhci_set_rx_delay(host, retry_delays[i]);
+				ret = mmc_send_tuning(host->mmc, opcode);
+				if (!ret) {
+					final_delay = retry_delays[i];
+					log_info("Retry successful with delay %d\n",
+						 final_delay);
+					break;
+				}
+			}
+		}
+
+		if (ret) {
+			log_err("All retry attempts failed\n");
+			return -EIO;
+		}
+	}
+
+	log_debug("Tuning successful: window %d-%d, using delay %d\n",
+		  max_pass_start, max_pass_start + max_pass_len - 1, final_delay);
+
+	return 0;
+}
+#endif /* MMC_SUPPORTS_TUNING */
+
+#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT)
+static int spacemit_sdhci_phy_dll_init(struct sdhci_host *host)
+{
+	u32 reg, val;
+	int ret;
+
+	/* Configure DLL predly, fulldly, and vreg */
+	spacemit_sdhci_clrsetbits(host, SDHC_DLL_PREDLY_NUM |
+				  SDHC_DLL_FULLDLY_RANGE |
+				  SDHC_DLL_VREG_CTRL,
+				  FIELD_PREP(SDHC_DLL_PREDLY_NUM, 1) |
+				  FIELD_PREP(SDHC_DLL_FULLDLY_RANGE, 1) |
+				  FIELD_PREP(SDHC_DLL_VREG_CTRL, 1),
+				  SPACEMIT_SDHC_PHY_DLLCFG);
+
+	reg = sdhci_readl(host, SPACEMIT_SDHC_PHY_DLLCFG1);
+	reg |= FIELD_PREP(SDHC_DLL_REG1_CTRL, SDHC_DLL_REG1_HS400_VAL);
+	sdhci_writel(host, reg, SPACEMIT_SDHC_PHY_DLLCFG1);
+
+	/* Enable DLL */
+	reg = sdhci_readl(host, SPACEMIT_SDHC_PHY_DLLCFG);
+	reg |= SDHC_DLL_ENABLE;
+	sdhci_writel(host, reg, SPACEMIT_SDHC_PHY_DLLCFG);
+
+	/* Wait for DLL lock */
+	ret = read_poll_timeout(sdhci_readl, val, val & SDHC_DLL_LOCK_STATE,
+				10, 1000, host, SPACEMIT_SDHC_PHY_DLLSTS);
+	if (ret) {
+		log_err("%s: phy dll lock timeout\n", host->name);
+		return -ETIMEDOUT;
+	}
+
+	return 0;
+}
+
+static int spacemit_sdhci_hs400_enhanced_strobe(struct sdhci_host *host)
+{
+	u32 reg;
+
+	reg = sdhci_readl(host, SPACEMIT_SDHC_MMC_CTRL_REG);
+	reg |= SDHC_ENHANCE_STROBE_EN;
+	sdhci_writel(host, reg, SPACEMIT_SDHC_MMC_CTRL_REG);
+
+	return spacemit_sdhci_phy_dll_init(host);
+}
+#endif
+
+const struct sdhci_ops spacemit_sdhci_ops = {
+	.set_control_reg		= spacemit_sdhci_set_control_reg,
+#if CONFIG_IS_ENABLED(MMC_SUPPORTS_TUNING)
+	.platform_execute_tuning	= spacemit_sdhci_execute_tuning,
+#endif
+#if CONFIG_IS_ENABLED(MMC_HS400_ES_SUPPORT)
+	.set_enhanced_strobe		= spacemit_sdhci_hs400_enhanced_strobe,
+#endif
+};
+
+static struct dm_mmc_ops spacemit_mmc_ops;
+
+static int spacemit_sdhci_probe(struct udevice *dev)
+{
+	struct mmc_uclass_priv *upriv = dev_get_uclass_priv(dev);
+	struct spacemit_sdhci_priv *priv = dev_get_priv(dev);
+	struct spacemit_sdhci_plat *plat = dev_get_plat(dev);
+	struct sdhci_host *host = &priv->host;
+	struct clk clk;
+	int ret = 0;
+
+	host->mmc = &plat->mmc;
+	host->mmc->priv = host;
+	host->mmc->dev = dev;
+	upriv->mmc = host->mmc;
+
+	spacemit_mmc_ops = sdhci_ops;
+	spacemit_mmc_ops.wait_dat0 = spacemit_sdhci_wait_dat0;
+	spacemit_mmc_ops.get_b_max = spacemit_sdhci_get_b_max;
+
+	ret = clk_get_bulk(dev, &plat->clks);
+	if (ret) {
+		log_err("Can't get clk: %d\n", ret);
+		return ret;
+	}
+
+	ret = clk_enable_bulk(&plat->clks);
+	if (ret) {
+		log_err("Failed to enable clk: %d\n", ret);
+		goto err_clk;
+	}
+
+	ret = reset_get_bulk(dev, &plat->resets);
+	if (ret) {
+		log_err("Can't get reset: %d\n", ret);
+		goto err_clk;
+	}
+
+	ret = reset_deassert_bulk(&plat->resets);
+	if (ret) {
+		log_err("Failed to reset: %d\n", ret);
+		goto err_reset;
+	}
+
+	ret = clk_get_by_index(dev, 1, &clk);
+	if (ret) {
+		log_err("Can't get io clk: %d\n", ret);
+		goto err_reset;
+	}
+
+	ret = clk_set_rate(&clk, plat->cfg.f_max);
+	if (ret) {
+		log_err("Failed to set io clk: %d\n", ret);
+		goto err_reset;
+	}
+
+	/* Set quirks */
+	host->quirks = SDHCI_QUIRK_WAIT_SEND_CMD |
+		       SDHCI_QUIRK_32BIT_DMA_ADDR;
+	host->host_caps = MMC_MODE_HS | MMC_MODE_HS_52MHz;
+	host->max_clk = plat->cfg.f_max;
+
+	plat->cfg.f_min = SDHC_MIN_CLOCK;
+	host->ops = &spacemit_sdhci_ops;
+
+	ret = sdhci_setup_cfg(&plat->cfg, host, plat->cfg.f_max,
+			      SDHC_MIN_CLOCK);
+	if (ret)
+		goto err_reset;
+
+	ret = sdhci_probe(dev);
+	if (ret)
+		goto err_reset;
+
+	spacemit_sdhci_phy_init(dev, host);
+	return 0;
+
+err_reset:
+	reset_release_bulk(&plat->resets);
+err_clk:
+	clk_release_bulk(&plat->clks);
+	return ret;
+}
+
+static int spacemit_sdhci_of_to_plat(struct udevice *dev)
+{
+	struct spacemit_sdhci_plat *plat = dev_get_plat(dev);
+	struct spacemit_sdhci_priv *priv = dev_get_priv(dev);
+	struct sdhci_host *host = &priv->host;
+	int ret = 0;
+
+	host->name = dev->name;
+	host->ioaddr = (void *)dev_read_addr(dev);
+
+	ret = mmc_of_parse(dev, &plat->cfg);
+
+	return ret;
+}
+
+static int spacemit_sdhci_bind(struct udevice *dev)
+{
+	struct spacemit_sdhci_plat *drv_data;
+	struct spacemit_sdhci_plat *plat = dev_get_plat(dev);
+
+	drv_data = (struct spacemit_sdhci_plat *)dev_get_driver_data(dev);
+	if (drv_data)
+		memcpy(plat, drv_data, sizeof(struct spacemit_sdhci_plat));
+	return sdhci_bind(dev, &plat->mmc, &plat->cfg);
+}
+
+static const struct udevice_id spacemit_sdhci_ids[] = {
+	{ .compatible = "spacemit,k1-sdhci" },
+	{ }
+};
+
+U_BOOT_DRIVER(spacemit_sdhci_drv) = {
+	.name		= "spacemit_sdhci",
+	.id		= UCLASS_MMC,
+	.of_match	= spacemit_sdhci_ids,
+	.of_to_plat	= spacemit_sdhci_of_to_plat,
+	.ops		= &spacemit_mmc_ops,
+	.bind		= spacemit_sdhci_bind,
+	.probe		= spacemit_sdhci_probe,
+	.priv_auto	= sizeof(struct spacemit_sdhci_priv),
+	.plat_auto	= sizeof(struct spacemit_sdhci_plat),
+};

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 05/19] riscv: dts: spacemit: define a SPI controller node
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (3 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 04/19] mmc: k1: add sdhci platform driver Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 06/19] riscv: dts: spacemit: k1: add SD card controller and pinctrl support Eric Chung
                   ` (15 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Alex Elder,
	Yixun Lan, Yixun Lan

From: Alex Elder <elder@riscstar.com>

Define a node for the fourth SoC SPI controller (number 3) on the
SpacemiT K1 SoC.

Enable it on the Banana Pi BPI-F3 board, which exposes this feature
via its GPIO block:
  GPIO PIN 19:  MOSI
  GPIO PIN 21:  MISO
  GPIO PIN 23:  SCLK
  GPIO PIN 24:  SS (inverted)

Define pincontrol configurations for the pins as used on that board.

(This was tested using a GigaDevice GD25Q64E SPI NOR chip.)

Reviewed-by: Yixun Lan <dlan@gentoo.org>
Signed-off-by: Alex Elder <elder@riscstar.com>
Signed-off-by: Guodong Xu <guodong@riscstar.com>
Link: https://lore.kernel.org/r/20260502-spi-spacemit-k1-v10-3-f412e1ae8a34@riscstar.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: c580774185426ea316396b1dc3f1737a3ad3800a ]

(cherry picked from commit 2eec5923556990fcd34c88c549dd11a5843d7fce)
---
 dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts |  7 +++++++
 dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi    | 20 ++++++++++++++++++++
 dts/upstream/src/riscv/spacemit/k1.dtsi            | 15 +++++++++++++++
 3 files changed, 42 insertions(+)

diff --git a/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts b/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts
index 5790d927b93d..9429189354d6 100644
--- a/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts
@@ -14,6 +14,7 @@
 		ethernet0 = &eth0;
 		ethernet1 = &eth1;
 		serial0 = &uart0;
+		spi3 = &spi3;
 		i2c2 = &i2c2;
 		i2c8 = &i2c8;
 	};
@@ -335,6 +336,12 @@
 	status = "okay";
 };
 
+&spi3 {
+	pinctrl-0 = <&ssp3_0_cfg>;
+	pinctrl-names = "default";
+	status = "okay";
+};
+
 &uart0 {
 	pinctrl-names = "default";
 	pinctrl-0 = <&uart0_2_cfg>;
diff --git a/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi b/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi
index b13dcb10f4d6..34d88334e95e 100644
--- a/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi
+++ b/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi
@@ -570,4 +570,24 @@
 			drive-strength = <32>;
 		};
 	};
+
+	ssp3_0_cfg: ssp3-0-cfg {
+		ssp3-0-pins {
+			pinmux = <K1_PADCONF(75, 2)>,	/* SCLK */
+				 <K1_PADCONF(77, 2)>,	/* MOSI  */
+				 <K1_PADCONF(78, 2)>;	/* MISO */
+
+			bias-disable;
+			drive-strength = <19>;
+			power-source = <3300>;
+		};
+
+		ssp3-0-frm-pins {
+			pinmux = <K1_PADCONF(76, 2)>;	/* FRM (frame) */
+
+			bias-pull-up = <0>;
+			drive-strength = <19>;
+			power-source = <3300>;
+		};
+	};
 };
diff --git a/dts/upstream/src/riscv/spacemit/k1.dtsi b/dts/upstream/src/riscv/spacemit/k1.dtsi
index f0bad6855c97..f8747190d2e1 100644
--- a/dts/upstream/src/riscv/spacemit/k1.dtsi
+++ b/dts/upstream/src/riscv/spacemit/k1.dtsi
@@ -983,6 +983,21 @@
 				status = "disabled";
 			};
 
+			spi3: spi@d401c000 {
+				compatible = "spacemit,k1-spi";
+				reg = <0x0 0xd401c000 0x0 0x30>;
+				#address-cells = <1>;
+				#size-cells = <0>;
+				clocks = <&syscon_apbc CLK_SSP3>,
+					 <&syscon_apbc CLK_SSP3_BUS>;
+				clock-names = "core", "bus";
+				resets = <&syscon_apbc RESET_SSP3>;
+				interrupts = <55>;
+				dmas = <&pdma 20>, <&pdma 19>;
+				dma-names = "rx", "tx";
+				status = "disabled";
+			};
+
 			/* sec_uart1: 0xf0612000, not available from Linux */
 		};
 

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 06/19] riscv: dts: spacemit: k1: add SD card controller and pinctrl support
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (4 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 05/19] riscv: dts: spacemit: define a SPI controller node Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 07/19] riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes Eric Chung
                   ` (14 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Iker Pedrosa,
	Anand Moon, Trevor Gamblin, Vincent Legoll, Troy Mitchell,
	Yixun Lan

From: Iker Pedrosa <ikerpedrosam@gmail.com>

Add SD card controller infrastructure for SpacemiT K1 SoC with complete
pinctrl support for both standard and UHS modes.

- Add sdhci0 controller definition with clocks, resets and interrupts
- Add mmc1_cfg pinctrl for 3.3V standard SD operation
- Add mmc1_uhs_cfg pinctrl for 1.8V UHS high-speed operation
- Configure appropriate drive strength and power-source properties

This provides complete SD card infrastructure that K1-based boards can
enable.

Tested-by: Anand Moon <linux.amoon@gmail.com>
Tested-by: Trevor Gamblin <tgamblin@baylibre.com>
Tested-by: Vincent Legoll <legoll@online.fr>
Reviewed-by: Troy Mitchell <troy.mitchell@linux.dev>
Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com>
Link: https://patch.msgid.link/20260515-orangepi-sd-card-uhs-v10-1-094af27e310d@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: 2d77e577109967ef65f269c1fc1d6a659d4260fb ]

(cherry picked from commit 785af36511c3d3664204be1427c5cade3ce9765d)
---
 dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi | 40 +++++++++++++++++++++++++
 dts/upstream/src/riscv/spacemit/k1.dtsi         | 13 ++++++++
 2 files changed, 53 insertions(+)

diff --git a/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi b/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi
index 34d88334e95e..4e9a62d0e85b 100644
--- a/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi
+++ b/dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi
@@ -590,4 +590,44 @@
 			power-source = <3300>;
 		};
 	};
+
+	mmc1_cfg: mmc1-cfg {
+		mmc1-data-cmd-pins {
+			pinmux = <K1_PADCONF(104, 0)>,   /* mmc1_d3 */
+				 <K1_PADCONF(105, 0)>,   /* mmc1_d2 */
+				 <K1_PADCONF(106, 0)>,   /* mmc1_d1 */
+				 <K1_PADCONF(107, 0)>,   /* mmc1_d0 */
+				 <K1_PADCONF(108, 0)>;   /* mmc1_cmd */
+			bias-pull-up = <1>;
+			drive-strength = <19>;
+			power-source = <3300>;
+		};
+
+		mmc1-clk-pins {
+			pinmux = <K1_PADCONF(109, 0)>;   /* mmc1_clk */
+			bias-pull-down = <1>;
+			drive-strength = <19>;
+			power-source = <3300>;
+		};
+	};
+
+	mmc1_uhs_cfg: mmc1-uhs-cfg {
+		mmc1-data-cmd-pins {
+			pinmux = <K1_PADCONF(104, 0)>,   /* mmc1_d3 */
+				 <K1_PADCONF(105, 0)>,   /* mmc1_d2 */
+				 <K1_PADCONF(106, 0)>,   /* mmc1_d1 */
+				 <K1_PADCONF(107, 0)>,   /* mmc1_d0 */
+				 <K1_PADCONF(108, 0)>;   /* mmc1_cmd */
+			bias-pull-up = <1>;
+			drive-strength = <42>;
+			power-source = <1800>;
+		};
+
+		mmc1-clk-pins {
+			pinmux = <K1_PADCONF(109, 0)>;   /* mmc1_clk */
+			bias-pull-down = <1>;
+			drive-strength = <42>;
+			power-source = <1800>;
+		};
+	};
 };
diff --git a/dts/upstream/src/riscv/spacemit/k1.dtsi b/dts/upstream/src/riscv/spacemit/k1.dtsi
index f8747190d2e1..acb608ee7b53 100644
--- a/dts/upstream/src/riscv/spacemit/k1.dtsi
+++ b/dts/upstream/src/riscv/spacemit/k1.dtsi
@@ -1214,6 +1214,19 @@
 				status = "disabled";
 			};
 
+			sdhci0: mmc@d4280000 {
+				compatible = "spacemit,k1-sdhci";
+				reg = <0x0 0xd4280000 0x0 0x200>;
+				clocks = <&syscon_apmu CLK_SDH_AXI>,
+					 <&syscon_apmu CLK_SDH0>;
+				clock-names = "core", "io";
+				resets = <&syscon_apmu RESET_SDH_AXI>,
+					 <&syscon_apmu RESET_SDH0>;
+				reset-names = "axi", "sdh";
+				interrupts = <99>;
+				status = "disabled";
+			};
+
 			emmc: mmc@d4281000 {
 				compatible = "spacemit,k1-sdhci";
 				reg = <0x0 0xd4281000 0x0 0x200>;

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 07/19] riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (5 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 06/19] riscv: dts: spacemit: k1: add SD card controller and pinctrl support Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 08/19] riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure Eric Chung
                   ` (13 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Iker Pedrosa,
	Anand Moon, Margherita Milani, Aurelien Jarno, Yixun Lan

From: Iker Pedrosa <ikerpedrosam@gmail.com>

Add complete SD card controller support with UHS high-speed modes.

- Enable sdhci0 controller with 4-bit bus width
- Configure card detect GPIO with GPIO_ACTIVE_LOW and internal pull-up
  support
- Connect vmmc-supply to buck4 for 3.3V card power
- Connect vqmmc-supply to aldo1 for 1.8V/3.3V I/O switching
- Add dual pinctrl states for voltage-dependent pin configuration
- Support UHS-I SDR25, SDR50, and SDR104 modes
- Add stable MMC device aliases (mmc0 = eMMC, mmc1 = SD card)

This enables full SD card functionality including high-speed UHS modes
for improved performance.

Suggested-by: Anand Moon <linux.amoon@gmail.com>
Tested-by: Anand Moon <linux.amoon@gmail.com>
Tested-by: Margherita Milani <margherita.milani@amarulasolutions.com>
Tested-by: Aurelien Jarno <aurelien@aurel32.net>
Reviewed-by: Aurelien Jarno <aurelien@aurel32.net>
Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com>
Link: https://patch.msgid.link/20260515-orangepi-sd-card-uhs-v10-3-094af27e310d@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: c76e2f058cbcab84e4a703f26857a58bdf6a0042 ]

(cherry picked from commit 3efd965004f1604c204001dcead9a44f729d5d58)
---
 dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts | 24 ++++++++++++++++++++--
 1 file changed, 22 insertions(+), 2 deletions(-)

diff --git a/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts b/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts
index 9429189354d6..9beb8947f12c 100644
--- a/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts
@@ -17,6 +17,8 @@
 		spi3 = &spi3;
 		i2c2 = &i2c2;
 		i2c8 = &i2c8;
+		mmc0 = &emmc;
+		mmc1 = &sdhci0;
 	};
 
 	chosen {
@@ -221,7 +223,7 @@
 				regulator-always-on;
 			};
 
-			buck4 {
+			buck4: buck4 {
 				regulator-min-microvolt = <500000>;
 				regulator-max-microvolt = <3300000>;
 				regulator-ramp-delay = <5000>;
@@ -242,7 +244,7 @@
 				regulator-always-on;
 			};
 
-			aldo1 {
+			aldo1: aldo1 {
 				regulator-min-microvolt = <500000>;
 				regulator-max-microvolt = <3400000>;
 				regulator-boot-on;
@@ -374,3 +376,21 @@
 		reset-gpios = <&gpio K1_GPIO(124) GPIO_ACTIVE_LOW>;
 	};
 };
+
+&sdhci0 {
+	pinctrl-names = "default", "uhs";
+	pinctrl-0 = <&mmc1_cfg>;
+	pinctrl-1 = <&mmc1_uhs_cfg>;
+	bus-width = <4>;
+	cd-gpios = <&gpio K1_GPIO(80) (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+	no-mmc;
+	no-sdio;
+	disable-wp;
+	cap-sd-highspeed;
+	vmmc-supply = <&buck4>;
+	vqmmc-supply = <&aldo1>;
+	sd-uhs-sdr25;
+	sd-uhs-sdr50;
+	sd-uhs-sdr104;
+	status = "okay";
+};

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 08/19] riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (6 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 07/19] riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 09/19] riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom Eric Chung
                   ` (12 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Andre Heider,
	Yixun Lan

From: Andre Heider <a.heider@gmail.com>

Enable i2c8 and add the connected SpacemiT P1 PMIC with its related
regulators for the board's power infrastructure and voltage regulation
support.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://patch.msgid.link/20260513071958.29574-2-a.heider@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: e2dac7c7a3a8970feeeb758f782ce86b89625ebd ]

(cherry picked from commit 2fe09049336c15cc0fdddd900c846dcce99cb62e)
---
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts | 134 ++++++++++++++++++++++
 1 file changed, 134 insertions(+)

diff --git a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
index 29e333b670cf..653e5a1bf41b 100644
--- a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
@@ -17,6 +17,7 @@
 	aliases {
 		ethernet0 = &eth0;
 		serial0 = &uart0;
+		i2c8 = &i2c8;
 	};
 
 	chosen {
@@ -33,6 +34,15 @@
 			default-state = "on";
 		};
 	};
+
+	reg_vcc_4v: regulator-vcc-4v {
+		compatible = "regulator-fixed";
+		regulator-name = "VCC4V0";
+		regulator-min-microvolt = <4000000>;
+		regulator-max-microvolt = <4000000>;
+		regulator-boot-on;
+		regulator-always-on;
+	};
 };
 
 &emmc {
@@ -72,6 +82,130 @@
 	status = "okay";
 };
 
+&i2c8 {
+	pinctrl-0 = <&i2c8_cfg>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	pmic@41 {
+		compatible = "spacemit,p1";
+		reg = <0x41>;
+		interrupts = <64>;
+		vin1-supply = <&reg_vcc_4v>;
+		vin2-supply = <&reg_vcc_4v>;
+		vin3-supply = <&reg_vcc_4v>;
+		vin4-supply = <&reg_vcc_4v>;
+		vin5-supply = <&reg_vcc_4v>;
+		vin6-supply = <&reg_vcc_4v>;
+		aldoin-supply = <&reg_vcc_4v>;
+		dldoin1-supply = <&buck5>;
+		dldoin2-supply = <&buck5>;
+
+		regulators {
+			buck1 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck2 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck3_1v8: buck3 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <1800000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck4_3v3: buck4 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3300000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck5: buck5 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			buck6 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3450000>;
+				regulator-ramp-delay = <5000>;
+				regulator-always-on;
+			};
+
+			aldo1 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-boot-on;
+			};
+
+			aldo2 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+
+			aldo3 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+
+			aldo4 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+
+			dldo1 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-boot-on;
+			};
+
+			dldo2 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+
+			dldo3 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+
+			dldo4 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-always-on;
+			};
+
+			dldo5 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+
+			dldo6 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+				regulator-always-on;
+			};
+
+			dldo7 {
+				regulator-min-microvolt = <500000>;
+				regulator-max-microvolt = <3400000>;
+			};
+		};
+	};
+};
+
 &uart0 {
 	pinctrl-0 = <&uart0_2_cfg>;
 	pinctrl-names = "default";

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 09/19] riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (7 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 08/19] riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 10/19] riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR Eric Chung
                   ` (11 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Andre Heider,
	Yixun Lan

From: Andre Heider <a.heider@gmail.com>

Enable i2c2 and add the connected GT24C02B EEPROM.

It contains an ONIE TLV table:
=> tlv_eeprom
TLV: 0
[  12.162] TlvInfo Header:
[  12.162]    Id String:    TlvInfo
[  12.165]    Version:      1
[  12.168]    Total Length: 58
[  12.171] TLV Name             Code Len Value
[  12.175] -------------------- ---- --- -----
[  12.179] Product Name         0x21  16 k1-x_MUSE-Pi-Pro
[  12.184] Serial Number        0x23  17 BPMIMXXXXXXXXXXXX
[  12.189] Unknown              0x41   1  0x02
[  12.194] Base MAC Address     0x24   6 FE:FE:FE:XX:XX:XX
[  12.199] MAC Addresses        0x2A   2 2
[  12.203] CRC-32               0xFE   4 0x395ECD34
[  12.207] Checksum is valid.

(With 0x41 as TLV_CODE_DDR_CSNUM)

Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://patch.msgid.link/20260513071958.29574-3-a.heider@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: 6bc75cfa56e885c2eab80e215f0a610075505846 ]

(cherry picked from commit 53114539cb9edac100d8804ba4386ea8a8b37ced)
---
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts | 33 +++++++++++++++++++++++
 1 file changed, 33 insertions(+)

diff --git a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
index 653e5a1bf41b..b8e73eed8e62 100644
--- a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
@@ -17,6 +17,7 @@
 	aliases {
 		ethernet0 = &eth0;
 		serial0 = &uart0;
+		i2c2 = &i2c2;
 		i2c8 = &i2c8;
 	};
 
@@ -82,6 +83,38 @@
 	status = "okay";
 };
 
+&i2c2 {
+	pinctrl-0 = <&i2c2_0_cfg>;
+	pinctrl-names = "default";
+	status = "okay";
+
+	eeprom@50 {
+		compatible = "atmel,24c02";
+		reg = <0x50>;
+		vcc-supply = <&buck3_1v8>; /* EEPROM_VCC1V8 */
+		pagesize = <8>;
+		read-only;
+		size = <256>;
+
+		nvmem-layout {
+			compatible = "onie,tlv-layout";
+
+			product-name {
+			};
+
+			serial-number {
+			};
+
+			mac-address {
+				#nvmem-cell-cells = <1>;
+			};
+
+			num-macs {
+			};
+		};
+	};
+};
+
 &i2c8 {
 	pinctrl-0 = <&i2c8_cfg>;
 	pinctrl-names = "default";

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 10/19] riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (8 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 09/19] riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 11/19] riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports Eric Chung
                   ` (10 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Andre Heider,
	Yixun Lan

From: Andre Heider <a.heider@gmail.com>

Add the QSPI controller node and describe the attached SPI NOR flash
(Winbond W25Q64FWSSAQ).

Add a corresponding vendor flash partition layout.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://patch.msgid.link/20260513071958.29574-4-a.heider@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: 735b1b205d07bf7bfa55b1f50f5485b9cc42a251 ]

(cherry picked from commit 30ccfd225cc1aa971a0748faefa14e735e49807c)
---
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts | 50 +++++++++++++++++++++++
 1 file changed, 50 insertions(+)

diff --git a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
index b8e73eed8e62..74841cffd5f5 100644
--- a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
@@ -44,6 +44,15 @@
 		regulator-boot-on;
 		regulator-always-on;
 	};
+
+	reg_qspi_vcc1v833: regulator-qspi-vcc1v833 {
+		compatible = "regulator-fixed";
+		regulator-name = "QSPI_VCC1833";
+		regulator-min-microvolt = <1833000>;
+		regulator-max-microvolt = <1833000>;
+		regulator-always-on;
+		vin-supply = <&buck4_3v3>;
+	};
 };
 
 &emmc {
@@ -239,6 +248,47 @@
 	};
 };
 
+&qspi {
+	pinctrl-names = "default";
+	pinctrl-0 = <&qspi_cfg>;
+	status = "okay";
+
+	flash@0 {
+		compatible = "jedec,spi-nor";
+		reg = <0>;
+		spi-max-frequency = <26500000>;
+		spi-rx-bus-width = <4>;
+		spi-tx-bus-width = <4>;
+		vcc-supply = <&reg_qspi_vcc1v833>;
+		m25p,fast-read;
+
+		partitions {
+			compatible = "fixed-partitions";
+			#address-cells = <1>;
+			#size-cells = <1>;
+
+			bootinfo@0 {
+				reg = <0x0 0x10000>;
+			};
+			private@10000 {
+				reg = <0x10000 0x10000>;
+			};
+			fsbl@20000 {
+				reg = <0x20000 0x40000>;
+			};
+			env@60000 {
+				reg = <0x60000 0x10000>;
+			};
+			opensbi@70000 {
+				reg = <0x70000 0x30000>;
+			};
+			uboot@a0000 {
+				reg = <0xa0000 0x760000>;
+			};
+		};
+	};
+};
+
 &uart0 {
 	pinctrl-0 = <&uart0_2_cfg>;
 	pinctrl-names = "default";

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 11/19] riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (9 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 10/19] riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 12/19] riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports Eric Chung
                   ` (9 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Andre Heider,
	Yixun Lan

From: Andre Heider <a.heider@gmail.com>

Enable the DWC3 USB 3.0 controller, its associated combo_phy (USB 3 PHY)
and usbphy2 (USB 2 PHY) on the MusePi Pro board.

The board uses a VLI VL817 hub, providing four ports.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://patch.msgid.link/20260513071958.29574-5-a.heider@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: 83c658c7a82304a2bc944cdd4a5b4f98d19322f0 ]

(cherry picked from commit 73f4ea03fac73bdeeaf3ed5c84de7f38ecea1c36)
---
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts | 52 +++++++++++++++++++++++
 1 file changed, 52 insertions(+)

diff --git a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
index 74841cffd5f5..b284bf416880 100644
--- a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
@@ -53,6 +53,26 @@
 		regulator-always-on;
 		vin-supply = <&buck4_3v3>;
 	};
+
+	reg_5v_vbus: regulator-5v-vbus {
+		compatible = "regulator-fixed";
+		regulator-name = "5V_VBUS";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+		gpio = <&gpio K1_GPIO(79) GPIO_ACTIVE_HIGH>; /* USB3_PWREN */
+		enable-active-high;
+	};
+
+	reg_vcc5v_hub: regulator-vcc5v-hub {
+		compatible = "regulator-fixed";
+		regulator-name = "VCC5V0_HUB";
+		regulator-min-microvolt = <5000000>;
+		regulator-max-microvolt = <5000000>;
+		regulator-always-on;
+		gpio = <&gpio K1_GPIO(127) GPIO_ACTIVE_HIGH>; /* HUB_PWREN */
+		enable-active-high;
+	};
 };
 
 &emmc {
@@ -65,6 +85,10 @@
 	status = "okay";
 };
 
+&combo_phy {
+	status = "okay";
+};
+
 &eth0 {
 	phy-handle = <&rgmii0>;
 	phy-mode = "rgmii-id";
@@ -294,3 +318,31 @@
 	pinctrl-names = "default";
 	status = "okay";
 };
+
+&usbphy2 {
+	status = "okay";
+};
+
+&usb_dwc3 {
+	dr_mode = "host";
+	#address-cells = <1>;
+	#size-cells = <0>;
+	vbus-supply = <&reg_5v_vbus>;
+	status = "okay";
+
+	hub_2_0: hub@1 {
+		compatible = "usb2109,2817";
+		reg = <0x1>;
+		vdd-supply = <&reg_vcc5v_hub>;
+		peer-hub = <&hub_3_0>;
+		reset-gpios = <&gpio K1_GPIO(123) GPIO_ACTIVE_LOW>; /* HUB_RST */
+	};
+
+	hub_3_0: hub@2 {
+		compatible = "usb2109,817";
+		reg = <0x2>;
+		vdd-supply = <&reg_vcc5v_hub>;
+		peer-hub = <&hub_2_0>;
+		reset-gpios = <&gpio K1_GPIO(123) GPIO_ACTIVE_LOW>; /* HUB_RST */
+	};
+};

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 12/19] riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (10 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 11/19] riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 13/19] riscv: dts: spacemit: k1-musepi-pro: set default console baud rate Eric Chung
                   ` (8 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Andre Heider,
	Yixun Lan

From: Andre Heider <a.heider@gmail.com>

Enable the two PCIe controllers along with their associated PHYs. They
are routed to the M.2 M-key connector and to the PCIe slot.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://patch.msgid.link/20260513071958.29574-6-a.heider@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: d9ab0a855ba13f1db3ae16539348714c74010a22 ]

(cherry picked from commit b526ec8833b7e7a646cdb7ebc7b8f0af14dd154d)
---
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts | 38 +++++++++++++++++++++++
 1 file changed, 38 insertions(+)

diff --git a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
index b284bf416880..898b537ba0bc 100644
--- a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
@@ -36,6 +36,14 @@
 		};
 	};
 
+	reg_pcie_vcc_3v3: regulator-pcie-vcc3v3 {
+		compatible = "regulator-fixed";
+		regulator-name = "PCIE_VCC3V3";
+		regulator-min-microvolt = <3300000>;
+		regulator-max-microvolt = <3300000>;
+		regulator-always-on;
+	};
+
 	reg_vcc_4v: regulator-vcc-4v {
 		compatible = "regulator-fixed";
 		regulator-name = "VCC4V0";
@@ -272,6 +280,36 @@
 	};
 };
 
+&pcie1_phy {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie1_3_cfg>;
+	status = "okay";
+};
+
+&pcie1_port {
+	phys = <&pcie1_phy>;
+	vpcie3v3-supply = <&reg_pcie_vcc_3v3>;
+};
+
+&pcie1 {
+	status = "okay";
+};
+
+&pcie2_phy {
+	pinctrl-names = "default";
+	pinctrl-0 = <&pcie2_4_cfg>;
+	status = "okay";
+};
+
+&pcie2_port {
+	phys = <&pcie2_phy>;
+	vpcie3v3-supply = <&reg_pcie_vcc_3v3>;
+};
+
+&pcie2 {
+	status = "okay";
+};
+
 &qspi {
 	pinctrl-names = "default";
 	pinctrl-0 = <&qspi_cfg>;

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 13/19] riscv: dts: spacemit: k1-musepi-pro: set default console baud rate
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (11 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 12/19] riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 14/19] riscv: dts: spacemit: k1-musepi-pro: add SD card support with UHS modes Eric Chung
                   ` (7 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Andre Heider,
	Yixun Lan

From: Andre Heider <a.heider@gmail.com>

Allow serial output with the same uboot/opensbi settings so the
console works without providing a cmdline.

Signed-off-by: Andre Heider <a.heider@gmail.com>
Reviewed-by: Yixun Lan <dlan@kernel.org>
Link: https://patch.msgid.link/20260513071958.29574-7-a.heider@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: f125c6085fd775f09a316f61cc89a0ae86826895 ]

(cherry picked from commit 5a2fd40a11e3de8b4308b739971ab1dd4ed9ae5d)
---
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts | 2 +-
 1 file changed, 1 insertion(+), 1 deletion(-)

diff --git a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
index 898b537ba0bc..4aef287353ca 100644
--- a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
@@ -22,7 +22,7 @@
 	};
 
 	chosen {
-		stdout-path = "serial0";
+		stdout-path = "serial0:115200n8";
 	};
 
 	leds {

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 14/19] riscv: dts: spacemit: k1-musepi-pro: add SD card support with UHS modes
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (12 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 13/19] riscv: dts: spacemit: k1-musepi-pro: set default console baud rate Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 15/19] dts: k1: enable mmc devices in SPL Eric Chung
                   ` (6 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung, Trevor Gamblin,
	Andre Heider, Iker Pedrosa, Yixun Lan

From: Trevor Gamblin <tgamblin@baylibre.com>

Update the Muse Pi Pro devicetree with SD card support to match what
was done for the OrangePi RV2 in [1]. More precisely:

- Enable sdhci0 controller with 4-bit bus width
- Configure card detect GPIO with internal pull-up support
- Connect vmmc-supply to buck4 for 3.3V card power
- Connect vqmmc-supply to aldo1 for 1.8V/3.3V I/O switching
- Add dual pinctrl states for voltage-dependent pin configuration
- Support UHS-I SDR25, SDR50, and SDR104 modes
- Add stable MMC device aliases (mmc0 = eMMC, mmc1 = SD card)

[1] https://lore.kernel.org/linux-riscv/20260316-orangepi-sd-card-uhs-v3-0-aefd3b7832df@gmail.com/T/#

Tested-by: Andre Heider <a.heider@gmail.com>
Signed-off-by: Trevor Gamblin <tgamblin@baylibre.com>
Signed-off-by: Iker Pedrosa <ikerpedrosam@gmail.com>
Signed-off-by: Andre Heider <a.heider@gmail.com>
Link: https://lore.kernel.org/linux-riscv/20260316-orangepi-sd-card-uhs-v3-0-aefd3b7832df@gmail.com/T/#
Link: https://patch.msgid.link/20260520130624.1763487-1-a.heider@gmail.com
Signed-off-by: Yixun Lan <dlan@kernel.org>

[ upstream commit: 85e4c5733cd7efa39f10d7200095c016ce4a2815 ]

(cherry picked from commit 9f9e7116bf6057433905f05a6ea06dd17a4b41c4)
---
 dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts | 22 +++++++++++++++++++++-
 1 file changed, 21 insertions(+), 1 deletion(-)

diff --git a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
index 4aef287353ca..0d809e4ad3b1 100644
--- a/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
+++ b/dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts
@@ -19,6 +19,8 @@
 		serial0 = &uart0;
 		i2c2 = &i2c2;
 		i2c8 = &i2c8;
+		mmc0 = &emmc;
+		mmc1 = &sdhci0;
 	};
 
 	chosen {
@@ -218,7 +220,7 @@
 				regulator-always-on;
 			};
 
-			aldo1 {
+			aldo1: aldo1 {
 				regulator-min-microvolt = <500000>;
 				regulator-max-microvolt = <3400000>;
 				regulator-boot-on;
@@ -384,3 +386,21 @@
 		reset-gpios = <&gpio K1_GPIO(123) GPIO_ACTIVE_LOW>; /* HUB_RST */
 	};
 };
+
+&sdhci0 {
+	pinctrl-names = "default", "uhs";
+	pinctrl-0 = <&mmc1_cfg>;
+	pinctrl-1 = <&mmc1_uhs_cfg>;
+	bus-width = <4>;
+	cd-gpios = <&gpio K1_GPIO(80) (GPIO_ACTIVE_HIGH | GPIO_PULL_UP)>;
+	no-mmc;
+	no-sdio;
+	disable-wp;
+	cap-sd-highspeed;
+	vmmc-supply = <&buck4_3v3>;
+	vqmmc-supply = <&aldo1>;
+	sd-uhs-sdr25;
+	sd-uhs-sdr50;
+	sd-uhs-sdr104;
+	status = "okay";
+};

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 15/19] dts: k1: enable mmc devices in SPL
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (13 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 14/19] riscv: dts: spacemit: k1-musepi-pro: add SD card support with UHS modes Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 16/19] configs: k1: enable SD and eMMC support Eric Chung
                   ` (5 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung

Enable eMMC and SD device nodes in SPL stage. And set the
bus frequency for mmc device nodes.

Remove the redundant device nodes that are delcared in upstream
DTS files.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>
---
 arch/riscv/dts/k1-bananapi-f3-u-boot.dtsi |  12 ++-
 arch/riscv/dts/k1-musepi-pro-u-boot.dtsi  | 136 +++---------------------------
 2 files changed, 21 insertions(+), 127 deletions(-)

diff --git a/arch/riscv/dts/k1-bananapi-f3-u-boot.dtsi b/arch/riscv/dts/k1-bananapi-f3-u-boot.dtsi
index 7f9443d69510..3077cdee55d7 100644
--- a/arch/riscv/dts/k1-bananapi-f3-u-boot.dtsi
+++ b/arch/riscv/dts/k1-bananapi-f3-u-boot.dtsi
@@ -50,7 +50,6 @@
 
 &i2c2 {
 	bootph-pre-ram;
-	resets = <&syscon_apbc RESET_TWSI2>;
 
 	eeprom@50 {
 		bootph-pre-ram;
@@ -65,7 +64,6 @@
  */
 &i2c8 {
 	bootph-pre-ram;
-	resets = <&syscon_apbc RESET_TWSI8>;
 
 	pmic@41 {
 		bootph-pre-ram;
@@ -89,6 +87,16 @@
 	};
 };
 
+&emmc {
+	bootph-pre-ram;
+	max-frequency = <204800000>;
+};
+
+&sdhci0 {
+	bootph-pre-ram;
+	max-frequency = <204800000>;
+};
+
 &binman {
 	u-boot-spl-ddr {
 		type = "section";
diff --git a/arch/riscv/dts/k1-musepi-pro-u-boot.dtsi b/arch/riscv/dts/k1-musepi-pro-u-boot.dtsi
index 8a9a2a09de99..d6299c96949d 100644
--- a/arch/riscv/dts/k1-musepi-pro-u-boot.dtsi
+++ b/arch/riscv/dts/k1-musepi-pro-u-boot.dtsi
@@ -76,42 +76,15 @@
 
 &i2c2 {
 	bootph-pre-ram;
-	status = "okay";
-	pinctrl-0 = <&i2c2_0_cfg>;
-	pinctrl-names = "default";
-	resets = <&syscon_apbc RESET_TWSI2>;
 
 	eeprom@50 {
 		bootph-pre-ram;
 		status = "okay";
-		compatible = "atmel,24c02";
-		reg = <0x50>;
-		vcc-supply = <&buck3_1v8>; /* EEPROM_VCC1V8 */
-		pagesize = <16>;
-		read-only;
-		size = <256>;
-
-		nvmem-layout {
-			compatible = "onie,tlv-layout";
-
-			mac-address {
-				#nvmem-cell-cells = <1>;
-			};
-
-			num-macs {
-			};
-
-			serial-number {
-			};
-		};
 	};
 };
 
 &i2c8 {
 	bootph-pre-ram;
-	pinctrl-0 = <&i2c8_cfg>;
-	pinctrl-names = "default";
-	resets = <&syscon_apbc RESET_TWSI8>;
 	status = "okay";
 
 	pmic@41 {
@@ -125,130 +98,43 @@
 			buck1 {
 				bootph-pre-ram;
 				regulator-name = "vdd_core";
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3450000>;
-				regulator-ramp-delay = <5000>;
-				regulator-always-on;
-			};
-
-			buck2 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3450000>;
-				regulator-ramp-delay = <5000>;
-				regulator-always-on;
 			};
 
 			buck3_1v8: buck3 {
 				bootph-pre-ram;
 				regulator-name = "vdd_1v8";
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <1800000>;
-				regulator-ramp-delay = <5000>;
-				regulator-always-on;
-			};
-
-			buck4 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3300000>;
-				regulator-ramp-delay = <5000>;
-				regulator-always-on;
-			};
-
-			buck5 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3450000>;
-				regulator-ramp-delay = <5000>;
-				regulator-always-on;
-			};
-
-			buck6 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3450000>;
-				regulator-ramp-delay = <5000>;
-				regulator-always-on;
 			};
 
 			aldo1 {
 				bootph-pre-ram;
 				regulator-name = "vdd_1v8_mmc";
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-				regulator-boot-on;
-			};
-
-			aldo2 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-			};
-
-			aldo3 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
 			};
 
-			aldo4 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-			};
-
-			dldo1 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-				regulator-boot-on;
-			};
-
-			dldo2 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-			};
-
-			dldo3 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-			};
-
-			dldo4 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-				regulator-always-on;
-			};
-
-			dldo5 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-			};
-
-			dldo6 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-				regulator-always-on;
-			};
-
-			dldo7 {
-				regulator-min-microvolt = <500000>;
-				regulator-max-microvolt = <3400000>;
-			};
 		};
 	};
 };
 
 &qspi {
 	bootph-pre-ram;
-	pinctrl-names = "default";
-	pinctrl-0 = <&qspi_cfg>;
 	status = "okay";
 
 	flash@0 {
 		bootph-pre-ram;
-		compatible = "jedec,spi-nor";
-		reg = <0>;
-		spi-max-frequency = <26500000>;
-		m25p,fast-read;
-		broken-flash-reset;
 		status = "okay";
 	};
 };
 
+&emmc {
+	bootph-pre-ram;
+	max-frequency = <204800000>;
+};
+
+&sdhci0 {
+	bootph-pre-ram;
+	cd-gpios = <&gpio K1_GPIO(80) (GPIO_ACTIVE_LOW | GPIO_PULL_UP)>;
+	max-frequency = <204800000>;
+};
+
 &binman {
 	u-boot-spl-ddr {
 		type = "section";

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 16/19] configs: k1: enable SD and eMMC support
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (14 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 15/19] dts: k1: enable mmc devices in SPL Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:54 ` [PATCH v9 17/19] MAINTAINER: update Spacemit K1 entry Eric Chung
                   ` (4 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung

Enable high-speed MMC modes.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>

---
v7:
- Remove the change on MAINTAINERS.
- Force DM to use alias by CONFIG_DM_SEQ_ALIAS. Since the sequence
  of mmc devices in DTS are inverted by alias.
v5:
- Remove ADMA support since it depends on CMD23 support.
- Enable PINCONF support for related power source setting.
v2:
- Enable ADMA support.
- Enable SYSCON support.
---
 configs/spacemit_k1_defconfig | 22 ++++++++++++++++++++++
 1 file changed, 22 insertions(+)

diff --git a/configs/spacemit_k1_defconfig b/configs/spacemit_k1_defconfig
index 0604c2feefc1..5f9923c7f470 100644
--- a/configs/spacemit_k1_defconfig
+++ b/configs/spacemit_k1_defconfig
@@ -23,6 +23,7 @@ CONFIG_DEBUG_UART_BASE=0xd4017000
 CONFIG_DEBUG_UART_CLOCK=14700000
 CONFIG_TARGET_SPACEMIT_K1=y
 CONFIG_ARCH_RV64I=y
+CONFIG_RISCV_ISA_ZICBOM=y
 CONFIG_RISCV_SMODE=y
 CONFIG_SPL_RISCV_MMODE=y
 # CONFIG_SPL_SMP is not set
@@ -48,6 +49,7 @@ CONFIG_SPL_CMD_TLV_EEPROM=y
 CONFIG_OF_UPSTREAM=y
 CONFIG_ENV_OVERWRITE=y
 CONFIG_SPL_REGMAP=y
+CONFIG_SYSCON=y
 CONFIG_SPL_SYSCON=y
 CONFIG_CLK=y
 CONFIG_CLK_CCF=y
@@ -61,6 +63,7 @@ CONFIG_MISC=y
 CONFIG_I2C_EEPROM=y
 CONFIG_SPL_I2C_EEPROM=y
 CONFIG_PINCTRL=y
+CONFIG_PINCONF=y
 CONFIG_PINCTRL_SPACEMIT_K1=y
 CONFIG_GPIO=y
 CONFIG_DM_GPIO=y
@@ -87,9 +90,28 @@ CONFIG_SPI_FLASH_WINBOND=y
 CONFIG_SPI_MEM=y
 CONFIG_SYS_SPI_U_BOOT_OFFS=0x000a0000
 CONFIG_CMD_SPI=y
+CONFIG_DM_SEQ_ALIAS=y
+CONFIG_MMC=y
+CONFIG_MMC_SDHCI=y
+CONFIG_MMC_SDHCI_SPACEMIT=y
+CONFIG_MMC_IO_VOLTAGE=y
+CONFIG_MMC_HS200_SUPPORT=y
+CONFIG_MMC_HS400_SUPPORT=y
+CONFIG_MMC_HS400_ES_SUPPORT=y
+CONFIG_SUPPORT_EMMC_BOOT=y
+CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_USE_PARTITION=y
+CONFIG_SYS_MMCSD_RAW_MODE_U_BOOT_PARTITION=0x4
+CONFIG_CMD_MMC=y
+CONFIG_CMD_MEMINFO=y
+CONFIG_CMD_MEMINFO_MAP=y
+CONFIG_EFI_PARTITION=y
 CONFIG_SPL_SPI=y
 CONFIG_SPL_DM_SPI=y
 CONFIG_SPL_DM_SPI_FLASH=y
 CONFIG_SPL_SPI_LOAD=y
 CONFIG_SPL_SPI_FLASH_TINY=y
 CONFIG_SPL_SPI_FLASH_SUPPORT=y
+CONFIG_SPL_BOARD_INIT=y
+CONFIG_SPL_DM_SEQ_ALIAS=y
+CONFIG_SPL_MMC=y
+CONFIG_SPL_SYS_MMCSD_RAW_MODE=y

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 17/19] MAINTAINER: update Spacemit K1 entry
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (15 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 16/19] configs: k1: enable SD and eMMC support Eric Chung
@ 2026-08-19  3:54 ` Eric Chung
  2026-08-19  3:55 ` [PATCH v9 18/19] doc: spacemit: flash on K1 SoC based boards Eric Chung
                   ` (3 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:54 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung

Update the maintainer for Spacemit K1 from Guodong to Eric.

Add mmc driver to maintained files.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>

---
v7:
- Add mmc driver to maintained files.
v4:
- Update the maintainer.
---
 board/spacemit/k1/MAINTAINERS | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)

diff --git a/board/spacemit/k1/MAINTAINERS b/board/spacemit/k1/MAINTAINERS
index 32d47ecc8f1e..4b2bc4ecfc10 100644
--- a/board/spacemit/k1/MAINTAINERS
+++ b/board/spacemit/k1/MAINTAINERS
@@ -1,6 +1,6 @@
 BananaPi F3
 M:	Huan Zhou <pericycle.cc@gmail.com>
-M:	Guodong Xu <guodong.xu@riscstar.com>
+M:	Eric Chung <eric.chung@riscstar.com>
 L:	u-boot-spacemit@groups.io
 S:	Maintained
 F:	arch/riscv/dts/k1-*-u-boot.dtsi
@@ -9,6 +9,7 @@ F:	configs/spacemit_k1_defconfig
 F:	doc/board/spacemit/bananapi-f3.rst
 F:	drivers/gpio/spacemit_gpio.c
 F:	drivers/i2c/k1_i2c.c
+F:	drivers/mmc/spacemit_sdhci.c
 F:	drivers/pinctrl/spacemit/
 F:	drivers/power/pmic/pmic_spacemit_p1.c
 F:	drivers/power/regulator/spacemit_p1_regulator.c

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 18/19] doc: spacemit: flash on K1 SoC based boards
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (16 preceding siblings ...)
  2026-08-19  3:54 ` [PATCH v9 17/19] MAINTAINER: update Spacemit K1 entry Eric Chung
@ 2026-08-19  3:55 ` Eric Chung
  2026-08-19  3:55 ` [PATCH v9 19/19] spacemit: k1: fix product name detection and DTB matching in SPL Eric Chung
                   ` (2 subsequent siblings)
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:55 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung

Add document on how to flash images into eMMC of K1 SoC based boards.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>

---
v9:
- Add to generate the partition table of SD card.
v3:
- Add document on how to flash images into SD card.
---
 board/spacemit/k1/MAINTAINERS |   2 +-
 doc/board/spacemit/index.rst  |   1 +
 doc/board/spacemit/k1-mmc.rst | 271 ++++++++++++++++++++++++++++++++++++++++++
 3 files changed, 273 insertions(+), 1 deletion(-)

diff --git a/board/spacemit/k1/MAINTAINERS b/board/spacemit/k1/MAINTAINERS
index 4b2bc4ecfc10..e12288a206e0 100644
--- a/board/spacemit/k1/MAINTAINERS
+++ b/board/spacemit/k1/MAINTAINERS
@@ -6,7 +6,7 @@ S:	Maintained
 F:	arch/riscv/dts/k1-*-u-boot.dtsi
 F:	board/spacemit/k1/
 F:	configs/spacemit_k1_defconfig
-F:	doc/board/spacemit/bananapi-f3.rst
+F:	doc/board/spacemit/
 F:	drivers/gpio/spacemit_gpio.c
 F:	drivers/i2c/k1_i2c.c
 F:	drivers/mmc/spacemit_sdhci.c
diff --git a/doc/board/spacemit/index.rst b/doc/board/spacemit/index.rst
index a5e35ee12ab6..71854e5735bd 100644
--- a/doc/board/spacemit/index.rst
+++ b/doc/board/spacemit/index.rst
@@ -6,5 +6,6 @@ SpacemiT
    :maxdepth: 1
 
    bananapi-f3
+   k1-mmc
    k1-spl
 
diff --git a/doc/board/spacemit/k1-mmc.rst b/doc/board/spacemit/k1-mmc.rst
new file mode 100644
index 000000000000..0be5d5fa1c39
--- /dev/null
+++ b/doc/board/spacemit/k1-mmc.rst
@@ -0,0 +1,271 @@
+.. SPDX-License-Identifier: GPL-2.0-or-later
+
+SpacemiT K1 eMMC and SD Card Boot Guide
+=======================================
+
+This guide covers two separate methods for booting and flashing U-Boot on
+SpacemiT K1 based boards:
+
+1. **eMMC Flash**: Flashing U-Boot and SPL images to eMMC via USB fastboot.
+2. **SD Card Boot**: Creating a bootable Bianbu SD card and optionally
+   replacing U-Boot on the card.
+
+Tested boards: Banana Pi BPI-F3, MusePi Pro.
+
+
+Chapter 1: eMMC Flash (U-Boot via USB Fastboot)
+===============================================
+
+SpacemiT K1 U-Boot Flash Guide
+==============================
+
+This guide explains how to flash U-Boot on SpacemiT K1 based boards. It covers
+flashing images via USB fastboot.
+
+.. note::
+
+   This procedure flashes images to eMMC over USB fastboot. The fastboot
+   function is not enabled in our SPL yet, so the download stage runs the
+   SpacemiT released SPL; our built FSBL.bin and fit.itb are the images
+   written to eMMC and used on the next normal boot.
+
+Prerequisites
+~~~~~~~~~~~~~
+
+- A SpacemiT K1 board with USB Type-C and UART access
+- USB-to-UART adapter (3.3V TTL)
+- ``minicom`` or equivalent serial terminal, configured at 115200 8N1
+- ``fastboot`` and ``flashserver`` tool on the host
+
+Hardware Setup
+~~~~~~~~~~~~~~
+
+Refer to k1-spl.rst.
+
+Flash images on eMMC
+~~~~~~~~~~~~~~~~~~~~
+
+**1. Obtain the release images**
+
+Get the release package from Spacemit website. It contains SPL image, and so on.
+
+https://archive.spacemit.com/image/k1/version/bianbu/v2.3.3/Bianbu-Minimal-K1-V2.3.3-20260128183217.zip
+
+Unzip images and store them into a directory.
+
+**2. Obtain flashserver tool**
+
+Get ``flashserver`` from Spacemit website.
+
+.. code-block:: bash
+
+    $wget https://cdn-resource.spacemit.com/file/flash/flashserver
+    $chmod +x flashserver
+    $mv flashserver {flash image path}/
+
+**3. Copy built SPL and U-Boot images**
+
+Build U-Boot as mentioned in k1-spl.rst. Create a new directory to save.
+The official u-boot.itb is used to download images. So the built U-Boot should
+not replace the official one.
+
+.. code-block:: bash
+
+    $mkdir {flash image path}/build
+    $cd {flash image path}
+    $ln -sf {path to FSBL.bin} ./build/
+    $ln -sf {path to u-boot.itb} ./build/fit.itb
+
+``{path to FSBL.bin}`` is the signed FSBL produced by ``fsbl.sh`` in
+k1-spl.rst, e.g. ``~/uboot-2022.10/spl_bin/FSBL.bin``.
+``{path to u-boot.itb}`` is the U-Boot build output, e.g.
+``~/u-boot/u-boot.itb``.
+
+**4. Update configuration files**
+
+The ``partition_2M.json`` and ``partition_universal.json`` files come from
+the release package. Patch the ``fsbl`` and ``uboot`` entries to point at
+the images staged under ``build/`` (pick the layout that matches your eMMC):
+
+.. code-block:: diff
+
+   diff -puNr bianbu-25/partition_2M.json clean/partition_2M.json
+   --- bianbu-25/partition_2M.json	2026-03-02 11:55:58.631116807 +0800
+   +++ clean/partition_2M.json	2026-05-20 11:25:21.683801401 +0800
+   @@ -13,7 +13,7 @@
+          "name": "fsbl",
+          "offset": "128K",
+          "size": "256K",
+   -      "image": "factory/FSBL.bin"
+   +      "image": "build/FSBL.bin"
+        },
+        {
+          "name": "env",
+   @@ -31,7 +31,7 @@
+          "name": "uboot",
+          "offset": "640K",
+          "size": "-",
+   -      "image": "u-boot.itb"
+   +      "image": "build/fit.itb"
+        }
+      ]
+    }
+   diff -puNr bianbu-25/partition_universal.json clean/partition_universal.json
+   --- bianbu-25/partition_universal.json	2026-03-02 11:55:58.642116862 +0800
+   +++ clean/partition_universal.json	2026-05-20 11:26:23.932581853 +0800
+   @@ -14,7 +14,7 @@
+               "name": "fsbl",
+               "offset": "128K",
+               "size": "256K",
+   -            "image": "factory/FSBL.bin"
+   +            "image": "build/FSBL.bin"
+           },
+           {
+               "name": "env",
+   @@ -32,7 +32,7 @@
+               "name": "uboot",
+               "offset": "2M",
+               "size": "2M",
+   -            "image": "u-boot.itb"
+   +            "image": "build/fit.itb"
+           },
+           {
+               "name": "bootfs",
+
+Deploying via USB Fastboot
+~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+To enter BootROM fastboot mode:
+
+1. Power off the board by unplugging its power supply.
+2. **Press and hold** the FDL button (called "Boot Key" on some boards;
+   see the board layout above for the BPI-F3).
+3. While holding the button, use a USB cable to connect the OTG port to
+   your host. This cable is also used by fastboot to upload the firmware.
+4. Release the button.
+
+On the host, ``fastboot devices`` should list the board::
+
+    dfu-device     DFU download
+
+The serial console shows the BootROM's USB download handler trace,
+including a line like::
+
+    usb2d_initialize : enter
+
+This indicates the board is ready to accept an image via USB.
+
+.. tip::
+
+   If you are worried about insufficient USB power, you can first plug
+   in the power, then release the button, and then plug in the USB
+   cable.
+
+On the host:
+
+.. code-block:: console
+
+    $sudo ./flashserver
+
+When ``flashserver`` is running, it lists the detected fastboot devices.
+Enter the corresponding number to select one.
+
+
+Chapter 2: SD Card Boot
+=======================
+
+
+SpacemiT K1 Bianbu SD Card Image Flashing and U-Boot Update Guide
+==================================================================
+
+This guide explains how to prepare a bootable SD card with Bianbu OS for
+SpacemiT K1 based boards and how to replace the U-Boot binary on the SD
+card with a custom build.
+
+Prerequisites
+~~~~~~~~~~~~~
+
+- A SpacemiT K1 based development board
+- A microSD card (at least 4GB capacity recommended)
+- A card reader for your host computer
+- A Linux host system (for ``dd``, ``sgdisk``, ``lsblk`` commands)
+- The Bianbu release package from
+  <https://archive.spacemit.com/image/k1/version/bianbu/v2.3.3/Bianbu-Minimal-K1-V2.3.3-20260128183217.zip>
+- A custom ``FSBL.bin`` and ``u-boot.itb`` file to be written to the U-Boot
+  partition
+
+Prepare the SD Card & the image
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+**1. Obtain the release images**
+
+Unpack the release package to get the image files. Replace the ``FSBL.bin``
+and ``u-boot.itb`` with your custom builds.
+
+**2. Identify the SD card device**
+
+Insert the microSD card into your card reader, then run:
+
+.. code-block:: console
+
+   $ lsblk
+
+Compare the output before and after inserting the card to identify
+the new device. It will typically appear as ``/dev/sdb``, ``/dev/sdc``,
+or ``/dev/mmcblk0``.
+
+**3. Write the image to the SD card**
+
+Run ``sgdisk`` to generate the partition table, then use ``dd`` to write
+the images to the corresponding partitions.
+
+.. code-block:: console
+
+    $sudo sgdisk -o /dev/sdb
+    $sudo sgdisk -a 128 \
+        -n 1:256:767 -t 1:8300 \
+        -n 2:768:895 -t 2:8300 \
+        -n 3:2048:4095 -t 3:8300 \
+        -n 4:4096:8191 -t 4:8300 \
+        -n 5:8192:532479 -t 5:8300 \
+        -n 6:532480:4726783 -t 6:8300 \
+        /dev/sdb
+    $sudo dd if=FSBL.bin of=/dev/sdb1 bs=512 seek=0 status=progress
+    $sudo dd if=env.bin of=/dev/sdb2 bs=512 seek=0 status=progress
+    $sudo dd if=fw_dynamic.itb of=/dev/sdb3 bs=512 seek=0 status=progress
+    $sudo dd if=u-boot.itb of=/dev/sdb4 bs=512 seek=0 status=progress
+    $sudo dd if=bootfs.img of=/dev/sdb5 bs=1M status=progress
+    $sudo dd if=rootfs.ext4 of=/dev/sdb6 bs=1M status=progress
+
+The SD card is now ready as a bootable system disk.
+
+Understanding the SD Card Partition Layout
+~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+
+The role of each partition:
+
++----------+----------+------------------------------------+
+| Partition| Size     | Purpose                            |
++==========+==========+====================================+
+| ``sdb1`` | 256 KB   | FSBL (First Stage Bootloader)      |
++----------+----------+------------------------------------+
+| ``sdb2`` | 64 KB    | ENV                                |
++----------+----------+------------------------------------+
+| ``sdb3`` | 1 MB     | OpenSBI                            |
++----------+----------+------------------------------------+
+| ``sdb4`` | 2 MB     | U-Boot binary (``u-boot.itb``)     |
++----------+----------+------------------------------------+
+| ``sdb5`` | 256 MB   | Boot partition (kernel)            |
++----------+----------+------------------------------------+
+| ``sdb6`` | 2 GB     | Root filesystem (ext4)             |
++----------+----------+------------------------------------+
+
+
+Booting and Testing
+~~~~~~~~~~~~~~~~~~~
+
+Insert the SD card into the development board, connect the serial
+console (115200 8N1), and power on the board.
+
+- If the board boots successfully, the new device tree or U-Boot image
+  is compatible with your hardware.

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* [PATCH v9 19/19] spacemit: k1: fix product name detection and DTB matching in SPL
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (17 preceding siblings ...)
  2026-08-19  3:55 ` [PATCH v9 18/19] doc: spacemit: flash on K1 SoC based boards Eric Chung
@ 2026-08-19  3:55 ` Eric Chung
  2026-08-19 12:59 ` [PATCH v9 00/19] spacemit mmc driver Iker Pedrosa
  2026-08-21 16:42 ` Yixun Lan
  20 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-19  3:55 UTC (permalink / raw)
  To: u-boot-spacemit, u-boot, u-boot
  Cc: Tom Rini, Tim Ouyang, Leo Liang, Peng Fan, Huan Zhou, Raymond Mao,
	Jaehoon Chung, Bhimeswararao Matsa, Tanmay Kathpalia,
	Kaustabh Chakraborty, Han Xu, Yanir Levin, Christoph Stoidner,
	Balsundar Ponnusamy, Daniel Palmer, Anshul Dalal,
	Bastien Curutchet, Angelo Dureghello, Johan Jonker, Sam Protsenko,
	Guodong Xu, Yao Zi, Rick Chen, Leo, Eric Chung

Use a table to handle DTB matching.

Signed-off-by: Eric Chung <eric.chung@riscstar.com>

---
v7:
- Abandon to load product name from ENV.
v6:
- Rebased onto latest upstream. Cleaned up board_fit_config_name_match()
  to maintain consistentcy with v5.
---
 board/spacemit/k1/spl.c | 50 +++++++++++++++++++++++++++++++------------------
 1 file changed, 32 insertions(+), 18 deletions(-)

diff --git a/board/spacemit/k1/spl.c b/board/spacemit/k1/spl.c
index b70eed14e6ed..93b0b6518c93 100644
--- a/board/spacemit/k1/spl.c
+++ b/board/spacemit/k1/spl.c
@@ -163,6 +163,15 @@ static void i2c_early_init(void)
 	}
 }
 
+static const struct {
+	const char *eeprom_name;
+	const char *fit_name;
+} k1_board_map[] = {
+	{ "k1-x_MUSE-Pi-Pro",   "spacemit/k1-musepi-pro"    },
+	{ "k1-x_deb1",          "spacemit/k1-bananapi-f3"   },
+	{ "k1-x_milkv-jupiter", "spacemit/k1-milkv-jupiter" },
+};
+
 int read_product_name(char *name, int size)
 {
 	u8 eeprom_data[TLV_TOTAL_LEN_MAX], *p;
@@ -196,6 +205,27 @@ int read_product_name(char *name, int size)
 	return -ENOENT;
 }
 
+static void fixup_product_name(void)
+{
+	char fdt_name[I2C_BUF_SIZE];
+	int i;
+
+	for (i = 0; i < ARRAY_SIZE(k1_board_map); i++) {
+		memset(fdt_name, 0, I2C_BUF_SIZE);
+		if (!strncmp(product_name, k1_board_map[i].eeprom_name,
+			     strlen(k1_board_map[i].eeprom_name))) {
+			snprintf(fdt_name, I2C_BUF_SIZE, "%s",
+				 k1_board_map[i].fit_name);
+			break;
+		}
+	}
+	if (fdt_name[0] == '\0') {
+		/* set default board name */
+		sprintf(fdt_name, CONFIG_DEFAULT_DEVICE_TREE);
+	}
+	memcpy(product_name, fdt_name, I2C_BUF_SIZE);
+}
+
 static void clk_early_init(void)
 {
 	struct udevice *dev;
@@ -439,6 +469,7 @@ void board_init_f(ulong dummy)
 		log_info("Fail to detect board:%d\n", ret);
 	else
 		log_info("Get board name:%s\n", product_name);
+	fixup_product_name();
 	pmic_init();
 
 	ddr_early_init();
@@ -456,24 +487,7 @@ void spl_board_init(void)
 
 int board_fit_config_name_match(const char *name)
 {
-	char fdt_name[I2C_BUF_SIZE];
-	int i;
-
-	memset(fdt_name, 0, I2C_BUF_SIZE);
-	if (!strncmp(product_name, "k1-x_", 5)) {
-		snprintf(fdt_name, I2C_BUF_SIZE, "%s-%s", "k1",
-			 &product_name[5]);
-	}
-	if (fdt_name[0] == '\0') {
-		/* set default board name */
-		sprintf(fdt_name, "k1-musepi-pro");
-	}
-	for (i = 0; i < I2C_BUF_SIZE; i++) {
-		if (fdt_name[i] == '\0')
-			break;
-		fdt_name[i] = tolower(fdt_name[i]);
-	}
-	if (!strcmp(name, fdt_name))
+	if (!strcmp(name, product_name))
 		return 0;
 	return -ENOENT;
 }

-- 
2.51.0


^ permalink raw reply related	[flat|nested] 27+ messages in thread

* Re: [PATCH v9 00/19] spacemit mmc driver
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (18 preceding siblings ...)
  2026-08-19  3:55 ` [PATCH v9 19/19] spacemit: k1: fix product name detection and DTB matching in SPL Eric Chung
@ 2026-08-19 12:59 ` Iker Pedrosa
  2026-08-20  2:06   ` Eric Chung
  2026-08-21 16:42 ` Yixun Lan
  20 siblings, 1 reply; 27+ messages in thread
From: Iker Pedrosa @ 2026-08-19 12:59 UTC (permalink / raw)
  To: Eric Chung
  Cc: u-boot-spacemit, u-boot, Tom Rini, Tim Ouyang, Leo Liang,
	Peng Fan, Huan Zhou, Raymond Mao, Jaehoon Chung,
	Bhimeswararao Matsa, Tanmay Kathpalia, Kaustabh Chakraborty,
	Han Xu, Yanir Levin, Christoph Stoidner, Balsundar Ponnusamy,
	Daniel Palmer, Anshul Dalal, Bastien Curutchet, Angelo Dureghello,
	Johan Jonker, Sam Protsenko, Guodong Xu, Yao Zi, Rick Chen, Leo,
	Yixun Lan, Yixun Lan, Alex Elder, Yixun Lan, Anand Moon,
	Trevor Gamblin, Vincent Legoll, Troy Mitchell, Margherita Milani,
	Aurelien Jarno, Andre Heider

El mié, 19 ago 2026 a las 5:55, Eric Chung (<eric.chung@riscstar.com>) escribió:
>
> This series adds MMC support for the SpacemiT K1: an SDHCI platform
> driver, the SD card device-tree overlay, defconfig options, and SPL
> boot-device selection from the SoC strap/config registers. The SDHCI
> driver is usable in both SPL and U-Boot proper.
>
> A flashing guide (doc/board/spacemit/k1-flash.rst) describes how to
> write images to eMMC.
>
> ---
> Changes in v9:
> - spl: Enhance detection on booting from SD.
> - dts: Synched upstream DTS files for K1.
> - doc: Create SD card image from scratch.
> - mmc: Avoid to use CMD18 on SD card in SPL.
> - pinctrl: Drop "fix drive strength configuration".
> - Link to v8: https://patch.msgid.link/20260802-m4-v8-4-e916643205f3@riscstar.com
>
> Changes in v8:
> - doc: Remove SD card.
> - Link to v7: https://patch.msgid.link/20260729-m4-v7-8-2cb04b4fe389@riscstar.com
>
> Changes in v7:
> - env: Drop env support on the mmc series.
> - dts: Sync upstream DTS files for spacemit.
> - pinctrl: Simply clrsetbits_le32() on pull-up/pull-down configuration.
> - spl: Fix DTB matching.
> - Link to v6: https://patch.msgid.link/20260727-m4-v6-0-2f58566d48ca@riscstar.com
>
> Changes in v6:
> - pinctrl: Fix drive strength configuration.
> - pinctrl: Fix pull-up/pull-down configuration.
> - pinctrl: Use dev_read_phandle_with_args() to fetch "spacemit,syscon" instead.
> - spacemit: rebase on latest upstream branch.
> - Link to v5: https://patch.msgid.link/20260722-m4-v5-0-c41a951e5157@riscstar.com
>
> Changes in v5:
> - mmc: Split CMD23 support out.
> - mmc: Use read_poll_timeout().
> - mmc: Set pinctrl state based on selected timing mode.
> - mmc: Remove the condition based on quirks.
> - pinctrl: Fix power source argument.
> - dts: Add missing power source on mmc pins.
> - Link to v4: https://patch.msgid.link/20260707-m4-v4-0-dbd01185f911@riscstar.com
>
> Changes in v4:
> - mmc: Add CMD23 for write.
> - mmc: Fix CMD23 only for CMD18.
> - mmc: Update bulk release operations on reset and clocks for spacemit
>   platform driver.
> - MAINTAINER: update the maintainer of Spacemit K1.
> - Link to v3: https://patch.msgid.link/20260705-m4-v3-0-5a9bc7f25fc5@riscstar.com
>
> Changes in v3:
> - pinctrl: Fix "fast" by "uhs".
> - pinctrl: Add syscon dependency.
> - mmc: Fix quick by capability.
> - doc: Add SD boot support.
> - Link to v2: https://lore.kernel.org/u-boot/20260630-m1-v1-0-83f13347b3ba@riscstar.com/T/#m2aba875a2696a7bb9b704618d22ae2fd7f7f5acc
>
> Changes in v2:
> - cmd: drop patches on eminfo & tlv_eeprom.
> - configs: Enable ADMA and SYSCON support.
> - dts: Use vmmc-supply as vqmmc-supply on the SD card node.
> - mmc: k1: Enable ADMA mode support, use CMD23 for multi-block
>   read/write, correct pinctrl state from "fast" to "uhs".
> - mmc: sdhci: Add new quirk patch to enable CMD23 for multi-block
>   transfers.
> - pinctrl: k1: Add new IO power domain configuration support for
>   dual-voltage GPIO banks.
> - spacemit: k1: Use FIELD_GET() to parse boot strap mode.
> - Link to v1: https://lore.kernel.org/u-boot/20260521-k1-spl-mmc-sdcard-v1-0-1bd14b8c4f9f@riscstar.com/
>
> To: u-boot-spacemit@groups.io
> To: u-boot@lists.denx.de
> To: u-boot@lists.u-boot-project.org
> Cc: Huan Zhou <pericycle.cc@gmail.com>
> Cc: Tom Rini <trini@konsulko.com>
> Cc: Tim Ouyang <tim609@andestech.com>
> Cc: Leo Liang <leo.liang@sifive.com>
> Cc: Raymond Mao <raymond.mao@riscstar.com>
> Cc: Peng Fan <peng.fan@nxp.com>
> Cc: Jaehoon Chung <jh80.chung@samsung.com>
> Cc: Bhimeswararao Matsa <bhimeswararao.matsa@gmail.com>
> Cc: Tanmay Kathpalia <tanmay.kathpalia@altera.com>
> Cc: Kaustabh Chakraborty <kauschluss@disroot.org>
> Cc: Han Xu <han.xu@nxp.com>
> Cc: Yanir Levin <yanir.levin@tandemg.com>
> Cc: Christoph Stoidner <c.stoidner@phytec.de>
> Cc: Balsundar Ponnusamy <balsundar.ponnusamy@altera.com>
> Cc: Daniel Palmer <daniel@thingy.jp>
> Cc: Anshul Dalal <anshuld@ti.com>
> Cc: Bastien Curutchet <bastien.curutchet@bootlin.com>
> Cc: Angelo Dureghello <angelo@kernel-space.org>
> Cc: Johan Jonker <jbx6244@gmail.com>
> Cc: Sam Protsenko <semen.protsenko@linaro.org>
> Cc: Guodong Xu <guodong@riscstar.com>
> Cc: Yao Zi <me@ziyao.cc>
> Cc: Rick Chen <rick@andestech.com>
> Cc: Leo <ycliang@andestech.com>
> Signed-off-by: Eric Chung <eric.chung@riscstar.com>
>
> ---
> Alex Elder (1):
>       riscv: dts: spacemit: define a SPI controller node
>
> Andre Heider (6):
>       riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure
>       riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom
>       riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR
>       riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports
>       riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports
>       riscv: dts: spacemit: k1-musepi-pro: set default console baud rate
>
> Eric Chung (9):
>       spacemit: k1: select boot device via config registers
>       pinctrl: k1: fix pull-up/pull-down configuration
>       pinctrl: k1: add IO power domain configuration support
>       mmc: k1: add sdhci platform driver
>       dts: k1: enable mmc devices in SPL
>       configs: k1: enable SD and eMMC support
>       MAINTAINER: update Spacemit K1 entry
>       doc: spacemit: flash on K1 SoC based boards
>       spacemit: k1: fix product name detection and DTB matching in SPL
>
> Iker Pedrosa (2):
>       riscv: dts: spacemit: k1: add SD card controller and pinctrl support
>       riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes

I am just curious, is there a particular reason why the device-tree
changes for the OrangePi RV2 aren't included in this series?

>
> Trevor Gamblin (1):
>       riscv: dts: spacemit: k1-musepi-pro: add SD card support with UHS modes
>
>  arch/riscv/dts/k1-bananapi-f3-u-boot.dtsi          |  12 +-
>  arch/riscv/dts/k1-musepi-pro-u-boot.dtsi           | 136 +---
>  board/spacemit/k1/MAINTAINERS                      |   5 +-
>  board/spacemit/k1/spl.c                            | 145 ++++-
>  configs/spacemit_k1_defconfig                      |  22 +
>  doc/board/spacemit/index.rst                       |   1 +
>  doc/board/spacemit/k1-mmc.rst                      | 271 ++++++++
>  drivers/mmc/Kconfig                                |   7 +
>  drivers/mmc/Makefile                               |   1 +
>  drivers/mmc/spacemit_sdhci.c                       | 684 +++++++++++++++++++++
>  drivers/pinctrl/spacemit/pinctrl-k1.c              | 104 +++-
>  dts/upstream/src/riscv/spacemit/k1-bananapi-f3.dts |  31 +-
>  dts/upstream/src/riscv/spacemit/k1-musepi-pro.dts  | 329 +++++++++-
>  dts/upstream/src/riscv/spacemit/k1-pinctrl.dtsi    |  60 ++
>  dts/upstream/src/riscv/spacemit/k1.dtsi            |  28 +
>  15 files changed, 1677 insertions(+), 159 deletions(-)
> ---
> base-commit: 527115ef6783cec49e5610c523c124b399011361
> change-id: 20260629-m4-98e01659fefb
>
> Best regards,
> --
> Eric Chung <eric.chung@riscstar.com>
>

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v9 00/19] spacemit mmc driver
  2026-08-19 12:59 ` [PATCH v9 00/19] spacemit mmc driver Iker Pedrosa
@ 2026-08-20  2:06   ` Eric Chung
  2026-08-20  9:27     ` Iker Pedrosa
  0 siblings, 1 reply; 27+ messages in thread
From: Eric Chung @ 2026-08-20  2:06 UTC (permalink / raw)
  To: Iker Pedrosa
  Cc: u-boot-spacemit, u-boot, Tom Rini, Tim Ouyang, Leo Liang,
	Peng Fan, Huan Zhou, Raymond Mao, Jaehoon Chung,
	Bhimeswararao Matsa, Tanmay Kathpalia, Kaustabh Chakraborty,
	Han Xu, Yanir Levin, Christoph Stoidner, Balsundar Ponnusamy,
	Daniel Palmer, Anshul Dalal, Bastien Curutchet, Angelo Dureghello,
	Johan Jonker, Sam Protsenko, Guodong Xu, Yao Zi, Rick Chen, Leo,
	Yixun Lan, Yixun Lan, Alex Elder, Yixun Lan, Anand Moon,
	Trevor Gamblin, Vincent Legoll, Troy Mitchell, Margherita Milani,
	Aurelien Jarno, Andre Heider

On Wed, Aug 19, 2026 at 8:59 PM Iker Pedrosa <ikerpedrosam@gmail.com> wrote:
>
> El mié, 19 ago 2026 a las 5:55, Eric Chung (<eric.chung@riscstar.com>) escribió:
> >
> > This series adds MMC support for the SpacemiT K1: an SDHCI platform
> > driver, the SD card device-tree overlay, defconfig options, and SPL
> > boot-device selection from the SoC strap/config registers. The SDHCI
> > driver is usable in both SPL and U-Boot proper.
> >
> > A flashing guide (doc/board/spacemit/k1-flash.rst) describes how to
> > write images to eMMC.
> >
> > ---
> > Changes in v9:
> > - spl: Enhance detection on booting from SD.
> > - dts: Synched upstream DTS files for K1.
> > - doc: Create SD card image from scratch.
> > - mmc: Avoid to use CMD18 on SD card in SPL.
> > - pinctrl: Drop "fix drive strength configuration".
> > - Link to v8: https://patch.msgid.link/20260802-m4-v8-4-e916643205f3@riscstar.com
> >
> > Changes in v8:
> > - doc: Remove SD card.
> > - Link to v7: https://patch.msgid.link/20260729-m4-v7-8-2cb04b4fe389@riscstar.com
> >
> > Changes in v7:
> > - env: Drop env support on the mmc series.
> > - dts: Sync upstream DTS files for spacemit.
> > - pinctrl: Simply clrsetbits_le32() on pull-up/pull-down configuration.
> > - spl: Fix DTB matching.
> > - Link to v6: https://patch.msgid.link/20260727-m4-v6-0-2f58566d48ca@riscstar.com
> >
> > Changes in v6:
> > - pinctrl: Fix drive strength configuration.
> > - pinctrl: Fix pull-up/pull-down configuration.
> > - pinctrl: Use dev_read_phandle_with_args() to fetch "spacemit,syscon" instead.
> > - spacemit: rebase on latest upstream branch.
> > - Link to v5: https://patch.msgid.link/20260722-m4-v5-0-c41a951e5157@riscstar.com
> >
> > Changes in v5:
> > - mmc: Split CMD23 support out.
> > - mmc: Use read_poll_timeout().
> > - mmc: Set pinctrl state based on selected timing mode.
> > - mmc: Remove the condition based on quirks.
> > - pinctrl: Fix power source argument.
> > - dts: Add missing power source on mmc pins.
> > - Link to v4: https://patch.msgid.link/20260707-m4-v4-0-dbd01185f911@riscstar.com
> >
> > Changes in v4:
> > - mmc: Add CMD23 for write.
> > - mmc: Fix CMD23 only for CMD18.
> > - mmc: Update bulk release operations on reset and clocks for spacemit
> >   platform driver.
> > - MAINTAINER: update the maintainer of Spacemit K1.
> > - Link to v3: https://patch.msgid.link/20260705-m4-v3-0-5a9bc7f25fc5@riscstar.com
> >
> > Changes in v3:
> > - pinctrl: Fix "fast" by "uhs".
> > - pinctrl: Add syscon dependency.
> > - mmc: Fix quick by capability.
> > - doc: Add SD boot support.
> > - Link to v2: https://lore.kernel.org/u-boot/20260630-m1-v1-0-83f13347b3ba@riscstar.com/T/#m2aba875a2696a7bb9b704618d22ae2fd7f7f5acc
> >
> > Changes in v2:
> > - cmd: drop patches on eminfo & tlv_eeprom.
> > - configs: Enable ADMA and SYSCON support.
> > - dts: Use vmmc-supply as vqmmc-supply on the SD card node.
> > - mmc: k1: Enable ADMA mode support, use CMD23 for multi-block
> >   read/write, correct pinctrl state from "fast" to "uhs".
> > - mmc: sdhci: Add new quirk patch to enable CMD23 for multi-block
> >   transfers.
> > - pinctrl: k1: Add new IO power domain configuration support for
> >   dual-voltage GPIO banks.
> > - spacemit: k1: Use FIELD_GET() to parse boot strap mode.
> > - Link to v1: https://lore.kernel.org/u-boot/20260521-k1-spl-mmc-sdcard-v1-0-1bd14b8c4f9f@riscstar.com/
> >
> > To: u-boot-spacemit@groups.io
> > To: u-boot@lists.denx.de
> > To: u-boot@lists.u-boot-project.org
> > Cc: Huan Zhou <pericycle.cc@gmail.com>
> > Cc: Tom Rini <trini@konsulko.com>
> > Cc: Tim Ouyang <tim609@andestech.com>
> > Cc: Leo Liang <leo.liang@sifive.com>
> > Cc: Raymond Mao <raymond.mao@riscstar.com>
> > Cc: Peng Fan <peng.fan@nxp.com>
> > Cc: Jaehoon Chung <jh80.chung@samsung.com>
> > Cc: Bhimeswararao Matsa <bhimeswararao.matsa@gmail.com>
> > Cc: Tanmay Kathpalia <tanmay.kathpalia@altera.com>
> > Cc: Kaustabh Chakraborty <kauschluss@disroot.org>
> > Cc: Han Xu <han.xu@nxp.com>
> > Cc: Yanir Levin <yanir.levin@tandemg.com>
> > Cc: Christoph Stoidner <c.stoidner@phytec.de>
> > Cc: Balsundar Ponnusamy <balsundar.ponnusamy@altera.com>
> > Cc: Daniel Palmer <daniel@thingy.jp>
> > Cc: Anshul Dalal <anshuld@ti.com>
> > Cc: Bastien Curutchet <bastien.curutchet@bootlin.com>
> > Cc: Angelo Dureghello <angelo@kernel-space.org>
> > Cc: Johan Jonker <jbx6244@gmail.com>
> > Cc: Sam Protsenko <semen.protsenko@linaro.org>
> > Cc: Guodong Xu <guodong@riscstar.com>
> > Cc: Yao Zi <me@ziyao.cc>
> > Cc: Rick Chen <rick@andestech.com>
> > Cc: Leo <ycliang@andestech.com>
> > Signed-off-by: Eric Chung <eric.chung@riscstar.com>
> >
> > ---
> > Alex Elder (1):
> >       riscv: dts: spacemit: define a SPI controller node
> >
> > Andre Heider (6):
> >       riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure
> >       riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom
> >       riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR
> >       riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports
> >       riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports
> >       riscv: dts: spacemit: k1-musepi-pro: set default console baud rate
> >
> > Eric Chung (9):
> >       spacemit: k1: select boot device via config registers
> >       pinctrl: k1: fix pull-up/pull-down configuration
> >       pinctrl: k1: add IO power domain configuration support
> >       mmc: k1: add sdhci platform driver
> >       dts: k1: enable mmc devices in SPL
> >       configs: k1: enable SD and eMMC support
> >       MAINTAINER: update Spacemit K1 entry
> >       doc: spacemit: flash on K1 SoC based boards
> >       spacemit: k1: fix product name detection and DTB matching in SPL
> >
> > Iker Pedrosa (2):
> >       riscv: dts: spacemit: k1: add SD card controller and pinctrl support
> >       riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes
>
> I am just curious, is there a particular reason why the device-tree
> changes for the OrangePi RV2 aren't included in this series?
>

I only fetch the patches I could verify, as I only have the musepi pro
and bananpi f3. Other patches I'll leave to the maintainer.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v9 00/19] spacemit mmc driver
  2026-08-20  2:06   ` Eric Chung
@ 2026-08-20  9:27     ` Iker Pedrosa
  0 siblings, 0 replies; 27+ messages in thread
From: Iker Pedrosa @ 2026-08-20  9:27 UTC (permalink / raw)
  To: Eric Chung
  Cc: u-boot-spacemit, u-boot, Tom Rini, Tim Ouyang, Leo Liang,
	Peng Fan, Huan Zhou, Raymond Mao, Jaehoon Chung,
	Bhimeswararao Matsa, Tanmay Kathpalia, Kaustabh Chakraborty,
	Han Xu, Yanir Levin, Christoph Stoidner, Balsundar Ponnusamy,
	Daniel Palmer, Anshul Dalal, Bastien Curutchet, Angelo Dureghello,
	Johan Jonker, Sam Protsenko, Guodong Xu, Yao Zi, Rick Chen, Leo,
	Yixun Lan, Yixun Lan, Alex Elder, Yixun Lan, Anand Moon,
	Trevor Gamblin, Vincent Legoll, Troy Mitchell, Margherita Milani,
	Aurelien Jarno, Andre Heider

El jue, 20 ago 2026 a las 4:06, Eric Chung (<eric.chung@riscstar.com>) escribió:
>
> On Wed, Aug 19, 2026 at 8:59 PM Iker Pedrosa <ikerpedrosam@gmail.com> wrote:
> >
> > El mié, 19 ago 2026 a las 5:55, Eric Chung (<eric.chung@riscstar.com>) escribió:
> > >
> > > This series adds MMC support for the SpacemiT K1: an SDHCI platform
> > > driver, the SD card device-tree overlay, defconfig options, and SPL
> > > boot-device selection from the SoC strap/config registers. The SDHCI
> > > driver is usable in both SPL and U-Boot proper.
> > >
> > > A flashing guide (doc/board/spacemit/k1-flash.rst) describes how to
> > > write images to eMMC.
> > >
> > > ---
> > > Changes in v9:
> > > - spl: Enhance detection on booting from SD.
> > > - dts: Synched upstream DTS files for K1.
> > > - doc: Create SD card image from scratch.
> > > - mmc: Avoid to use CMD18 on SD card in SPL.
> > > - pinctrl: Drop "fix drive strength configuration".
> > > - Link to v8: https://patch.msgid.link/20260802-m4-v8-4-e916643205f3@riscstar.com
> > >
> > > Changes in v8:
> > > - doc: Remove SD card.
> > > - Link to v7: https://patch.msgid.link/20260729-m4-v7-8-2cb04b4fe389@riscstar.com
> > >
> > > Changes in v7:
> > > - env: Drop env support on the mmc series.
> > > - dts: Sync upstream DTS files for spacemit.
> > > - pinctrl: Simply clrsetbits_le32() on pull-up/pull-down configuration.
> > > - spl: Fix DTB matching.
> > > - Link to v6: https://patch.msgid.link/20260727-m4-v6-0-2f58566d48ca@riscstar.com
> > >
> > > Changes in v6:
> > > - pinctrl: Fix drive strength configuration.
> > > - pinctrl: Fix pull-up/pull-down configuration.
> > > - pinctrl: Use dev_read_phandle_with_args() to fetch "spacemit,syscon" instead.
> > > - spacemit: rebase on latest upstream branch.
> > > - Link to v5: https://patch.msgid.link/20260722-m4-v5-0-c41a951e5157@riscstar.com
> > >
> > > Changes in v5:
> > > - mmc: Split CMD23 support out.
> > > - mmc: Use read_poll_timeout().
> > > - mmc: Set pinctrl state based on selected timing mode.
> > > - mmc: Remove the condition based on quirks.
> > > - pinctrl: Fix power source argument.
> > > - dts: Add missing power source on mmc pins.
> > > - Link to v4: https://patch.msgid.link/20260707-m4-v4-0-dbd01185f911@riscstar.com
> > >
> > > Changes in v4:
> > > - mmc: Add CMD23 for write.
> > > - mmc: Fix CMD23 only for CMD18.
> > > - mmc: Update bulk release operations on reset and clocks for spacemit
> > >   platform driver.
> > > - MAINTAINER: update the maintainer of Spacemit K1.
> > > - Link to v3: https://patch.msgid.link/20260705-m4-v3-0-5a9bc7f25fc5@riscstar.com
> > >
> > > Changes in v3:
> > > - pinctrl: Fix "fast" by "uhs".
> > > - pinctrl: Add syscon dependency.
> > > - mmc: Fix quick by capability.
> > > - doc: Add SD boot support.
> > > - Link to v2: https://lore.kernel.org/u-boot/20260630-m1-v1-0-83f13347b3ba@riscstar.com/T/#m2aba875a2696a7bb9b704618d22ae2fd7f7f5acc
> > >
> > > Changes in v2:
> > > - cmd: drop patches on eminfo & tlv_eeprom.
> > > - configs: Enable ADMA and SYSCON support.
> > > - dts: Use vmmc-supply as vqmmc-supply on the SD card node.
> > > - mmc: k1: Enable ADMA mode support, use CMD23 for multi-block
> > >   read/write, correct pinctrl state from "fast" to "uhs".
> > > - mmc: sdhci: Add new quirk patch to enable CMD23 for multi-block
> > >   transfers.
> > > - pinctrl: k1: Add new IO power domain configuration support for
> > >   dual-voltage GPIO banks.
> > > - spacemit: k1: Use FIELD_GET() to parse boot strap mode.
> > > - Link to v1: https://lore.kernel.org/u-boot/20260521-k1-spl-mmc-sdcard-v1-0-1bd14b8c4f9f@riscstar.com/
> > >
> > > To: u-boot-spacemit@groups.io
> > > To: u-boot@lists.denx.de
> > > To: u-boot@lists.u-boot-project.org
> > > Cc: Huan Zhou <pericycle.cc@gmail.com>
> > > Cc: Tom Rini <trini@konsulko.com>
> > > Cc: Tim Ouyang <tim609@andestech.com>
> > > Cc: Leo Liang <leo.liang@sifive.com>
> > > Cc: Raymond Mao <raymond.mao@riscstar.com>
> > > Cc: Peng Fan <peng.fan@nxp.com>
> > > Cc: Jaehoon Chung <jh80.chung@samsung.com>
> > > Cc: Bhimeswararao Matsa <bhimeswararao.matsa@gmail.com>
> > > Cc: Tanmay Kathpalia <tanmay.kathpalia@altera.com>
> > > Cc: Kaustabh Chakraborty <kauschluss@disroot.org>
> > > Cc: Han Xu <han.xu@nxp.com>
> > > Cc: Yanir Levin <yanir.levin@tandemg.com>
> > > Cc: Christoph Stoidner <c.stoidner@phytec.de>
> > > Cc: Balsundar Ponnusamy <balsundar.ponnusamy@altera.com>
> > > Cc: Daniel Palmer <daniel@thingy.jp>
> > > Cc: Anshul Dalal <anshuld@ti.com>
> > > Cc: Bastien Curutchet <bastien.curutchet@bootlin.com>
> > > Cc: Angelo Dureghello <angelo@kernel-space.org>
> > > Cc: Johan Jonker <jbx6244@gmail.com>
> > > Cc: Sam Protsenko <semen.protsenko@linaro.org>
> > > Cc: Guodong Xu <guodong@riscstar.com>
> > > Cc: Yao Zi <me@ziyao.cc>
> > > Cc: Rick Chen <rick@andestech.com>
> > > Cc: Leo <ycliang@andestech.com>
> > > Signed-off-by: Eric Chung <eric.chung@riscstar.com>
> > >
> > > ---
> > > Alex Elder (1):
> > >       riscv: dts: spacemit: define a SPI controller node
> > >
> > > Andre Heider (6):
> > >       riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure
> > >       riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom
> > >       riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR
> > >       riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports
> > >       riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports
> > >       riscv: dts: spacemit: k1-musepi-pro: set default console baud rate
> > >
> > > Eric Chung (9):
> > >       spacemit: k1: select boot device via config registers
> > >       pinctrl: k1: fix pull-up/pull-down configuration
> > >       pinctrl: k1: add IO power domain configuration support
> > >       mmc: k1: add sdhci platform driver
> > >       dts: k1: enable mmc devices in SPL
> > >       configs: k1: enable SD and eMMC support
> > >       MAINTAINER: update Spacemit K1 entry
> > >       doc: spacemit: flash on K1 SoC based boards
> > >       spacemit: k1: fix product name detection and DTB matching in SPL
> > >
> > > Iker Pedrosa (2):
> > >       riscv: dts: spacemit: k1: add SD card controller and pinctrl support
> > >       riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes
> >
> > I am just curious, is there a particular reason why the device-tree
> > changes for the OrangePi RV2 aren't included in this series?
> >
>
> I only fetch the patches I could verify, as I only have the musepi pro
> and bananpi f3. Other patches I'll leave to the maintainer.

Thanks for clarifying! That makes total sense. Hopefully, someone with
an OrangePi RV2 can pick that up once this series gets merged.

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v9 00/19] spacemit mmc driver
  2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
                   ` (19 preceding siblings ...)
  2026-08-19 12:59 ` [PATCH v9 00/19] spacemit mmc driver Iker Pedrosa
@ 2026-08-21 16:42 ` Yixun Lan
  2026-08-22  0:47   ` Eric Chung
  20 siblings, 1 reply; 27+ messages in thread
From: Yixun Lan @ 2026-08-21 16:42 UTC (permalink / raw)
  To: Eric Chung
  Cc: u-boot-spacemit, u-boot, Tom Rini, Tim Ouyang, Leo Liang,
	Peng Fan, Huan Zhou, Raymond Mao, Jaehoon Chung,
	Bhimeswararao Matsa, Tanmay Kathpalia, Kaustabh Chakraborty,
	Han Xu, Yanir Levin, Christoph Stoidner, Balsundar Ponnusamy,
	Daniel Palmer, Anshul Dalal, Bastien Curutchet, Angelo Dureghello,
	Johan Jonker, Sam Protsenko, Guodong Xu, Yao Zi, Rick Chen, Leo,
	Yixun Lan, Alex Elder, Yixun Lan, Iker Pedrosa, Anand Moon,
	Trevor Gamblin, Vincent Legoll, Troy Mitchell, Margherita Milani,
	Aurelien Jarno, Andre Heider

Hi Eric

On 11:54 Wed 19 Aug     , Eric Chung wrote:
> This series adds MMC support for the SpacemiT K1: an SDHCI platform
> driver, the SD card device-tree overlay, defconfig options, and SPL
> boot-device selection from the SoC strap/config registers. The SDHCI
> driver is usable in both SPL and U-Boot proper.
> 
> A flashing guide (doc/board/spacemit/k1-flash.rst) describes how to
> write images to eMMC.
> 
> ---
> Changes in v9:
> - spl: Enhance detection on booting from SD.
> - dts: Synched upstream DTS files for K1.
> - doc: Create SD card image from scratch.
> - mmc: Avoid to use CMD18 on SD card in SPL.
..
> - pinctrl: Drop "fix drive strength configuration".
Could you please explain why this patch is dropped?

It looks valid to me, also it fix a problem that setting drive strength
actually clear out other pin conf bits which lead to serious bug

-               clrsetbits_le32(addr, PAD_DRIVE, ds);
+               clrsetbits_le32(addr, PAD_DRIVE, FIELD_PREP(PAD_DRIVE, ds));

-- 
Yixun Lan (dlan)

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v9 02/19] pinctrl: k1: fix pull-up/pull-down configuration
  2026-08-19  3:54 ` [PATCH v9 02/19] pinctrl: k1: fix pull-up/pull-down configuration Eric Chung
@ 2026-08-21 16:54   ` Yixun Lan
  0 siblings, 0 replies; 27+ messages in thread
From: Yixun Lan @ 2026-08-21 16:54 UTC (permalink / raw)
  To: Eric Chung
  Cc: u-boot-spacemit, u-boot, Tom Rini, Tim Ouyang, Leo Liang,
	Peng Fan, Huan Zhou, Raymond Mao, Jaehoon Chung,
	Bhimeswararao Matsa, Tanmay Kathpalia, Kaustabh Chakraborty,
	Han Xu, Yanir Levin, Christoph Stoidner, Balsundar Ponnusamy,
	Daniel Palmer, Anshul Dalal, Bastien Curutchet, Angelo Dureghello,
	Johan Jonker, Sam Protsenko, Guodong Xu, Yao Zi, Rick Chen, Leo,
	Yixun Lan

Hi Eirc,

On 11:54 Wed 19 Aug     , Eric Chung wrote:
> Fix pull-up/pull-down configuration to honor the argument parameter:
> when argument is non-zero, enable the requested pull direction;
> when argument is zero, clear all pull bits to disable.
> 
> Signed-off-by: Eric Chung <eric.chung@riscstar.com>
..
> Reviewed-by: Yixun Lan <dlan@kenrel.org>
No, I never gave R-B to this patch, and below you still not addressed
my previous concern

Also, I suggest to use tool "b4 trailers" to collect tags instead of
 doing it manually which easily lead to problem..
> 
> ---
> v9:
> - Rebase since drop patch "fix drive strength configuration".
> v7:
> - Simplify pull-up/pull-down configuration by using a single
>   clrsetbits_le32() call.
> v6:
> - Fix pull-up/pull-down configuration.
> ---
>  drivers/pinctrl/spacemit/pinctrl-k1.c | 9 ++++-----
>  1 file changed, 4 insertions(+), 5 deletions(-)
> 
> diff --git a/drivers/pinctrl/spacemit/pinctrl-k1.c b/drivers/pinctrl/spacemit/pinctrl-k1.c
> index a6a22eacac7b..9ca4ef7c771e 100644
> --- a/drivers/pinctrl/spacemit/pinctrl-k1.c
> +++ b/drivers/pinctrl/spacemit/pinctrl-k1.c

..
>  	case PIN_CONFIG_BIAS_PULL_UP:
> -		mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN;
> -		clrsetbits_le32(addr, mask, PAD_PULLUP | PAD_PULL_EN);
> +		clrsetbits_le32(addr, PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN,
> +				argument ? PAD_PULLUP | PAD_PULL_EN : 0);
No, this is still same problem as previous version, please take
a look at the DT documentation from upstream linux kernel

Documentation/devicetree/bindings/pinctrl/spacemit,k1-pinctrl.yaml

1) to disable bias
          bias-disable: true

2) to set as pull down
          bias-pull-down: true

3) to set normal pull up or strong pull up
          bias-pull-up:
              0: normal bias pull up
              1: strong bias pull up

-- 
Yixun Lan (dlan)

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v9 00/19] spacemit mmc driver
  2026-08-21 16:42 ` Yixun Lan
@ 2026-08-22  0:47   ` Eric Chung
  2026-08-22  1:29     ` Eric Chung
  0 siblings, 1 reply; 27+ messages in thread
From: Eric Chung @ 2026-08-22  0:47 UTC (permalink / raw)
  To: Yixun Lan
  Cc: u-boot-spacemit, u-boot, Tom Rini, Tim Ouyang, Leo Liang,
	Peng Fan, Huan Zhou, Raymond Mao, Jaehoon Chung,
	Bhimeswararao Matsa, Tanmay Kathpalia, Kaustabh Chakraborty,
	Han Xu, Yanir Levin, Christoph Stoidner, Balsundar Ponnusamy,
	Daniel Palmer, Anshul Dalal, Bastien Curutchet, Angelo Dureghello,
	Johan Jonker, Sam Protsenko, Guodong Xu, Yao Zi, Rick Chen, Leo,
	Yixun Lan, Alex Elder, Yixun Lan, Iker Pedrosa, Anand Moon,
	Trevor Gamblin, Vincent Legoll, Troy Mitchell, Margherita Milani,
	Aurelien Jarno, Andre Heider

On Sat, Aug 22, 2026 at 12:43 AM Yixun Lan <dlan@kernel.org> wrote:
>
> Hi Eric
>
> On 11:54 Wed 19 Aug     , Eric Chung wrote:
> > This series adds MMC support for the SpacemiT K1: an SDHCI platform
> > driver, the SD card device-tree overlay, defconfig options, and SPL
> > boot-device selection from the SoC strap/config registers. The SDHCI
> > driver is usable in both SPL and U-Boot proper.
> >
> > A flashing guide (doc/board/spacemit/k1-flash.rst) describes how to
> > write images to eMMC.
> >
> > ---
> > Changes in v9:
> > - spl: Enhance detection on booting from SD.
> > - dts: Synched upstream DTS files for K1.
> > - doc: Create SD card image from scratch.
> > - mmc: Avoid to use CMD18 on SD card in SPL.
> ..
> > - pinctrl: Drop "fix drive strength configuration".
> Could you please explain why this patch is dropped?
>
> It looks valid to me, also it fix a problem that setting drive strength
> actually clear out other pin conf bits which lead to serious bug

Ah. I should drop "fix pull-up/pull-down configuration" instead. I
picked the wrong patch.

>
> -               clrsetbits_le32(addr, PAD_DRIVE, ds);
> +               clrsetbits_le32(addr, PAD_DRIVE, FIELD_PREP(PAD_DRIVE, ds));
>
> --
> Yixun Lan (dlan)

^ permalink raw reply	[flat|nested] 27+ messages in thread

* Re: [PATCH v9 00/19] spacemit mmc driver
  2026-08-22  0:47   ` Eric Chung
@ 2026-08-22  1:29     ` Eric Chung
  0 siblings, 0 replies; 27+ messages in thread
From: Eric Chung @ 2026-08-22  1:29 UTC (permalink / raw)
  To: Yixun Lan
  Cc: u-boot-spacemit, u-boot, Tom Rini, Tim Ouyang, Leo Liang,
	Peng Fan, Huan Zhou, Raymond Mao, Jaehoon Chung,
	Bhimeswararao Matsa, Tanmay Kathpalia, Kaustabh Chakraborty,
	Han Xu, Yanir Levin, Christoph Stoidner, Balsundar Ponnusamy,
	Daniel Palmer, Anshul Dalal, Bastien Curutchet, Angelo Dureghello,
	Johan Jonker, Sam Protsenko, Guodong Xu, Yao Zi, Rick Chen, Leo,
	Yixun Lan, Alex Elder, Yixun Lan, Iker Pedrosa, Anand Moon,
	Trevor Gamblin, Vincent Legoll, Troy Mitchell, Margherita Milani,
	Aurelien Jarno, Andre Heider

On Sat, Aug 22, 2026 at 8:47 AM Eric Chung <eric.chung@riscstar.com> wrote:
>
> On Sat, Aug 22, 2026 at 12:43 AM Yixun Lan <dlan@kernel.org> wrote:
> >
> > Hi Eric
> >
> > On 11:54 Wed 19 Aug     , Eric Chung wrote:
> > > This series adds MMC support for the SpacemiT K1: an SDHCI platform
> > > driver, the SD card device-tree overlay, defconfig options, and SPL
> > > boot-device selection from the SoC strap/config registers. The SDHCI
> > > driver is usable in both SPL and U-Boot proper.
> > >
> > > A flashing guide (doc/board/spacemit/k1-flash.rst) describes how to
> > > write images to eMMC.
> > >
> > > ---
> > > Changes in v9:
> > > - spl: Enhance detection on booting from SD.
> > > - dts: Synched upstream DTS files for K1.
> > > - doc: Create SD card image from scratch.
> > > - mmc: Avoid to use CMD18 on SD card in SPL.
> > ..
> > > - pinctrl: Drop "fix drive strength configuration".
> > Could you please explain why this patch is dropped?
> >
> > It looks valid to me, also it fix a problem that setting drive strength
> > actually clear out other pin conf bits which lead to serious bug
>
> Ah. I should drop "fix pull-up/pull-down configuration" instead. I
> picked the wrong patch.
>

And too many people are on the CC list automatically. I'll split out
all pinctrl patches.

> >
> > -               clrsetbits_le32(addr, PAD_DRIVE, ds);
> > +               clrsetbits_le32(addr, PAD_DRIVE, FIELD_PREP(PAD_DRIVE, ds));
> >
> > --
> > Yixun Lan (dlan)

^ permalink raw reply	[flat|nested] 27+ messages in thread

end of thread, other threads:[~2026-08-22  2:43 UTC | newest]

Thread overview: 27+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-08-19  3:54 [PATCH v9 00/19] spacemit mmc driver Eric Chung
2026-08-19  3:54 ` [PATCH v9 01/19] spacemit: k1: select boot device via config registers Eric Chung
2026-08-19  3:54 ` [PATCH v9 02/19] pinctrl: k1: fix pull-up/pull-down configuration Eric Chung
2026-08-21 16:54   ` Yixun Lan
2026-08-19  3:54 ` [PATCH v9 03/19] pinctrl: k1: add IO power domain configuration support Eric Chung
2026-08-19  3:54 ` [PATCH v9 04/19] mmc: k1: add sdhci platform driver Eric Chung
2026-08-19  3:54 ` [PATCH v9 05/19] riscv: dts: spacemit: define a SPI controller node Eric Chung
2026-08-19  3:54 ` [PATCH v9 06/19] riscv: dts: spacemit: k1: add SD card controller and pinctrl support Eric Chung
2026-08-19  3:54 ` [PATCH v9 07/19] riscv: dts: spacemit: k1-bananapi-f3: add SD card support with UHS modes Eric Chung
2026-08-19  3:54 ` [PATCH v9 08/19] riscv: dts: spacemit: k1-musepi-pro: add PMIC and power infrastructure Eric Chung
2026-08-19  3:54 ` [PATCH v9 09/19] riscv: dts: spacemit: k1-musepi-pro: add 24c02 eeprom Eric Chung
2026-08-19  3:54 ` [PATCH v9 10/19] riscv: dts: spacemit: k1-musepi-pro: enable QSPI and add SPI NOR Eric Chung
2026-08-19  3:54 ` [PATCH v9 11/19] riscv: dts: spacemit: k1-musepi-pro: enable USB 3 ports Eric Chung
2026-08-19  3:54 ` [PATCH v9 12/19] riscv: dts: spacemit: k1-musepi-pro: enable PCIe ports Eric Chung
2026-08-19  3:54 ` [PATCH v9 13/19] riscv: dts: spacemit: k1-musepi-pro: set default console baud rate Eric Chung
2026-08-19  3:54 ` [PATCH v9 14/19] riscv: dts: spacemit: k1-musepi-pro: add SD card support with UHS modes Eric Chung
2026-08-19  3:54 ` [PATCH v9 15/19] dts: k1: enable mmc devices in SPL Eric Chung
2026-08-19  3:54 ` [PATCH v9 16/19] configs: k1: enable SD and eMMC support Eric Chung
2026-08-19  3:54 ` [PATCH v9 17/19] MAINTAINER: update Spacemit K1 entry Eric Chung
2026-08-19  3:55 ` [PATCH v9 18/19] doc: spacemit: flash on K1 SoC based boards Eric Chung
2026-08-19  3:55 ` [PATCH v9 19/19] spacemit: k1: fix product name detection and DTB matching in SPL Eric Chung
2026-08-19 12:59 ` [PATCH v9 00/19] spacemit mmc driver Iker Pedrosa
2026-08-20  2:06   ` Eric Chung
2026-08-20  9:27     ` Iker Pedrosa
2026-08-21 16:42 ` Yixun Lan
2026-08-22  0:47   ` Eric Chung
2026-08-22  1:29     ` Eric Chung

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.