From patchwork Wed May 20 10:45:45 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240778 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=jReVQP+e; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqYb0z3pz1xpM for ; Wed, 20 May 2026 08:47:15 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id DD53084862; Wed, 20 May 2026 00:47:12 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="jReVQP+e"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 4C69584862; Wed, 20 May 2026 00:47:12 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x1036.google.com (mail-pj1-x1036.google.com [IPv6:2607:f8b0:4864:20::1036]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 1C28A84869 for ; Wed, 20 May 2026 00:47:10 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x1036.google.com with SMTP id 98e67ed59e1d1-3660ab73adbso2916681a91.1 for ; Tue, 19 May 2026 15:47:10 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230828; x=1779835628; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=WWwwVxI+wOS9RPHNfMvTgXJhOpM69kSfgnO0REWSuLs=; b=jReVQP+eay01hu4q/4uFf8QqJnaukVeuL3IkTN4no9GL7AtiSn/Dg0CmIUEiKE51mL 77mgojTdXkj0Imj6D65JdZ+0McO2/UAuH2XnckBPG7hzBs/y6OCyfawJF2QzntPyuLoW R6tHMTAl4AHsdxWgmI8yDGPTYDAatXFD6i618t3xqLilwaVpBPKU2VdEtOp7lsK2TcZj SLwld3RAP1SuXCW50q1m0d95M+Ec8IAHMLrumbvI+Lx9ixUqOQlL09Q9N32P3Tke9/RT s+q2kDy62d9BLxzXYMhbqtkZQ8TmB5mjOGlCNjoM1jZ9v4Sf3oVRWnnBtkKKO7WA7kBu XKyg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230828; x=1779835628; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=WWwwVxI+wOS9RPHNfMvTgXJhOpM69kSfgnO0REWSuLs=; b=VJ6nXoVDg40RhCNY7Un8H7A9k/BDwpxR818b6DlOzeMj8zbVwST+Y0Gf78h5WFz5G8 p1wwB6YB74zTC0wo0/55FNOw/vYvGYFPmwP+M6nck6ys/8T4WHi6aBKcgOXs+FfJnn12 b9YbTYFQNCtWbuHfe/y1Mk7kNabaVyql4toIQhUAwaQmnLnu9LT6Dh2xc85TCN7et6DF C668M5wdoXGPJjUThDMCD/RkDPq/6brUpnF+JDTz8CLa43xzw/1g7SPeScYrhAZHjRPu gq+C+upQJlidrPFPUFX5RodaY0eUUQYiz6CrQ5ThYf5lMvG9zvlaQBesFEJRh47D/IW3 ySOg== X-Forwarded-Encrypted: i=1; AFNElJ/sGVTCTaA6qJ8R8a5gBJjWz916gKKEf65DzrAS9ruLLuZyZ1pSwUOw9fQlCxZHJ1PY/KZ2tVM=@lists.denx.de X-Gm-Message-State: AOJu0Yz9dNBF4AbQ9lyLh51+Pi1e/3LA/sNY7K9xRnPVkdxR1Sm9jja4 0AP7yhhQFjvxWJgTfjpe4vXBbJWY5T/Uh7YLCd7ImByOsixjjpo8fULo7Q+o7oPG21Q= X-Gm-Gg: Acq92OEsUXJdnwbyYeBRywg6deNwlfby9IvFzSrt0cgxxK841/V64qITyKcVqe6aWCi iLaVeK+w37V8LZtykGOzD3h7E1LzeROJiSjua1BDs7ck7MLnssf3yhjgIapnvtRuePfc8Zmdveq Ca7IZujzaWIy0OfRPoPmI3mh4eDAvhtUGED+3yY+TJP+laPyNGmmF335hKl09v9uiaBdN41ptTx 0+PqhMjLIt+g0kY8VZWHuBUDPy+2eEhQYxxCZJuO67QcBWosjV4zQEuOJtNXjDmlhuSu3n5y1Wr UhEgPGNIYxf1U0H9MMQ14+CtooXt3G4FpIA/pO+oZemAPdfu4OhH5A5NTtFu85IvQ/adxX1AOMp k2ClqxmuAYWmrn+Veq6qMiqRPVtXZ8GkQlkWBBxyH9lRM4oWd7MgllUZcpAEdLbdOcYVBEclrVc WbKfKKaNufvjdtrbWn83ZJuY9ELa5S6HFhwX8wNB0X7TzwGP/XdHNUqw== X-Received: by 2002:a17:90b:1c90:b0:35f:c6bf:2bba with SMTP id 98e67ed59e1d1-369235ff7edmr21181760a91.11.1779230828584; Tue, 19 May 2026 15:47:08 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.46.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:47:08 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:45 -0400 Subject: [PATCH v2 1/9] mtd: spi: select SPL_SPI_FLASH_TINY in SPL stage MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-1-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Raymond Mao Fix to select CONFIG_SPL_SPI_FLASH_TINY in SPL_BUILD stage. Signed-off-by: Raymond Mao Signed-off-by: Guodong Xu Acked-by: Tanmay Kathpalia --- v2: - No change. --- drivers/mtd/spi/Makefile | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi/Makefile b/drivers/mtd/spi/Makefile index 44e67cd913a..9a96be11e6d 100644 --- a/drivers/mtd/spi/Makefile +++ b/drivers/mtd/spi/Makefile @@ -8,14 +8,13 @@ spi-nor-y := sf_probe.o spi-nor-ids.o ifdef CONFIG_XPL_BUILD obj-$(CONFIG_SPL_SPI_BOOT) += fsl_espi_spl.o +endif + ifeq ($(CONFIG_$(PHASE_)SPI_FLASH_TINY),y) spi-nor-y += spi-nor-tiny.o else spi-nor-y += spi-nor-core.o endif -else -spi-nor-y += spi-nor-core.o -endif obj-$(CONFIG_SPI_FLASH) += spi-nor.o obj-$(CONFIG_SPI_FLASH_DATAFLASH) += sf_dataflash.o From patchwork Wed May 20 10:45:46 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240779 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=u737cf55; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqZ52pNMz1xpM for ; Wed, 20 May 2026 08:47:41 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 3BB4A84859; Wed, 20 May 2026 00:47:39 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="u737cf55"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 17FF484852; Wed, 20 May 2026 00:47:38 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x1034.google.com (mail-pj1-x1034.google.com [IPv6:2607:f8b0:4864:20::1034]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 91AA2846A5 for ; Wed, 20 May 2026 00:47:35 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x1034.google.com with SMTP id 98e67ed59e1d1-36931e4f5e8so3529885a91.2 for ; Tue, 19 May 2026 15:47:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230854; x=1779835654; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=i3CvLAocAUIKMHeAkQNIzHH74BBbAjBOu9vFN3wCn1w=; b=u737cf555z9jvmkbBHPewGgPRqmJQ6fJKPFJ/hfmYrH17LYyDH5DFVB7gV3OoCv7xJ JLvkPyjyBNI6f8bgMe9fSuPWwADDr9iGWBLW/U48VcPb6P+WxrHclcL1ewChGyYZysdS S9S1V/CrjrRXAJa3tbaFi5CBcfGaMfvdSNy/jvs9OnfjIkuwtdT79yIhKTM17pevGADx iPAdMziJEedbr3jU2yNPWdB2ugyksJkXsfBnjs8VY73Mw6C65TyyK6uCkAGG3s6Q2JiA A6iCSqTr2BECOZHXaxO3KlsZGXsoxxzstp0pImqpMgxX8O60W4IGgwzj3x1bReRi23YE gldQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230854; x=1779835654; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=i3CvLAocAUIKMHeAkQNIzHH74BBbAjBOu9vFN3wCn1w=; b=UihoRovMSS01JNc4E29ST8e8Ui9A7PIzSai6tYMfAP+mbQsZVuzFYyIFIloW4XZ9yz fYxhirrQKLpoqH+woMRBFSCBjR55G+X3+32R9naJtfllV+khPswpbPxSzRmzCia7+rnm J8nV7OB6fXXUqIY31X4+au7mVBf2VAMLbEzdJkyGmWXfrqJC4WU+jMCf809kbwQGQVeZ dC5gUKBiTGsGi/t2AyNWJcZrwaJjF8lxjef0efDsCFEtzUwgIP0YSXwxTOhlgpSdHXWD LKAfv/SFfrf8esMwnMIhreMzw189rq9De3WfKganXxKlnaN4BEoC6qJX7gvpl342Xb7U Mm2A== X-Forwarded-Encrypted: i=1; AFNElJ9wBlxU4kyibtpqTgZJ5y/AUlGLZG2qp03DUsjCJ6OfepY2rCA5yA9jxr0n/Vh6uTwQOb0/loI=@lists.denx.de X-Gm-Message-State: AOJu0Yz0WeG8f6gvgoTozMjjidUhBy137QSCDNIEECbNwdZCXvlKLpvl ssksASOIsm3tDExk8otCb18pPAeYIgWES8SwNe6m828M8PAE+G7VZaagrFa+KtDIBFQ= X-Gm-Gg: Acq92OFK9UbQI2w6zU6wB5IyFdNnPDQ0KXpeTZYJX6ZMi3SeaEvN7PerzfDiPuzj9Pw Tg7u8spCz4BLaKdsfkpIIuiAYchVSjzBQwdq10ySlECoPHCkckPrjPwrgJUPeWvfg2lJ/ItWVvL OnWmGobDXEocBksCIksWnImF23iVwNGb+IsBhhSALvjpKsm9FaxXvRpUdWBO2H28XcrfTMyApFn H1l5zlSldsz7Y7q5++pdkMfJo4i4cFYFsxDIz3zwikp+jXFUqyYM501+tpmzH1ZB+4xuxp4cMvP Ra+fu+no27pz1F0piQKX3DHYGvTe5xcFcRepp5uTQomwph7gxdTx+hhZrqTVNVZOLXZ9imgCswM xxMdrwXdLyHRmZ7eJr4XOEIGC5ufoIOPmqE2q2EZNYke2LU77bdjRYRdtBiY8PzUv2giXNe2iKs jHI0pYGfTmycrUTcoSP1mPoJVnAeNb638cyYAbdFYy5bU= X-Received: by 2002:a17:90b:1b05:b0:369:223a:cb5a with SMTP id 98e67ed59e1d1-369519af834mr19626948a91.5.1779230854090; Tue, 19 May 2026 15:47:34 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.47.09 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:47:33 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:46 -0400 Subject: [PATCH v2 2/9] mtd: spi: enable spi_nor_remove() in soft reset config MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-2-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Raymond Mao spi_nor_remove() is only implemented in spi-nor-core.o, not spi-nor-tiny.o. So make spi_nor_remove() only valid for CONFIG_SPI_FLASH_SOFT_RESET. Signed-off-by: Raymond Mao Signed-off-by: Guodong Xu --- v2: - No change. --- drivers/mtd/spi/sf_probe.c | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/drivers/mtd/spi/sf_probe.c b/drivers/mtd/spi/sf_probe.c index 7100b64bf22..dee03662d45 100644 --- a/drivers/mtd/spi/sf_probe.c +++ b/drivers/mtd/spi/sf_probe.c @@ -229,9 +229,11 @@ static int spi_flash_std_remove(struct udevice *dev) spi_mem_dirmap_destroy(flash->dirmap.rdesc); } - ret = spi_nor_remove(flash); - if (ret) - return ret; + if (CONFIG_IS_ENABLED(SPI_FLASH_SOFT_RESET)) { + ret = spi_nor_remove(flash); + if (ret) + return ret; + } if (CONFIG_IS_ENABLED(SPI_FLASH_MTD)) spi_flash_mtd_unregister(flash); From patchwork Wed May 20 10:45:47 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240780 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=gSU5IXam; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqZc56z3z1xpM for ; Wed, 20 May 2026 08:48:08 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 8D48D84707; Wed, 20 May 2026 00:48:06 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="gSU5IXam"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 35CD184852; Wed, 20 May 2026 00:48:05 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x1032.google.com (mail-pj1-x1032.google.com [IPv6:2607:f8b0:4864:20::1032]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 91AA2846EC for ; Wed, 20 May 2026 00:48:01 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x1032.google.com with SMTP id 98e67ed59e1d1-36608b2f2dcso2460531a91.2 for ; Tue, 19 May 2026 15:48:01 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230880; x=1779835680; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=P75McgSA3JkXVyYilmjW/tXmGi2z/dzntTcBL3lZvjM=; b=gSU5IXamwwtuulHU9MaZBGhnu5JdXGj4MWJkW+kBwp4F1nXsXniiTEbb+Loj3pGGj+ NbeOJDQl06VKvQfAdHiPQZ14Xe7A9dBxkcJQleOQBJ5j/MGFSJJFa+kjRBCQFmn81Ff8 j0gbohydShhHHDiISyMZZOPexz25Cs5SO0zirOvJUf3bulvSqp6/wKBKr2TYdaYnm8yN +rrPAV9t+TH2iDqr9YiWQ/16qFxs+W92CJOexPvgyXXkjwXUI91e8pE+xAEvUOxxvH21 81QO83z3SuCDC/XLBQuZ4TAeC3wFjj9K8v6R2OXjBFmN57YKGkxE/TdDUf+132/615v0 qBvA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230880; x=1779835680; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=P75McgSA3JkXVyYilmjW/tXmGi2z/dzntTcBL3lZvjM=; b=HxVctQXxXryceJaehRb1OfsLussK1wF54ltv+JVJ5R/ql2TNZb2wMJzFN/IeScVUJ5 RycamltQ9LBDbPhrhY0Yi4TwVgvTMsbZahZFZtQrTHnGJSDfFrP83+7pbcfYjSzOUctH zc0ixRFc8gZ5GzkVb90mbzPiy99arogYb1lHd5Dg4WGcGDkXNu3tBwk5UxDiB4Xxt43A NgHrgTlPVhpCVbNmf7Oqecr6+O+NJbNlv54S5KIuqwPTikSbY4HCB3X3/mnNTczTtXWl uRWaWTDJiPrlXUWv6sB493XBgmjATzHSE3+f2fHWgi+7IvXi2vNUw3I6MKLjnqNzDVtn Ag3g== X-Forwarded-Encrypted: i=1; AFNElJ/mAaYGxo6obbGM8JzUBjjND4LaScVvR2ntCE+Vd09LRmOG6l3PnRE+207Wi4sE+7P9M1bVNvE=@lists.denx.de X-Gm-Message-State: AOJu0YxQB7SUvtbCFiRZoEwZqv5EfTOK1HQNaSE9LNcA2u6I4whsSiAz b3t/nS6eS19gm+NgtstSlNL0HfpfkQJMv6O3UNKi+CizecDQoWM7Z8XokXf4yYrQT7g= X-Gm-Gg: Acq92OEdTwuKOrwqUQU2IITXjNvT3hS/fzuB13T3VMh9r7/tstUJdJPxIPxjSewEqF1 92Z5LuTMerdYvHsoeUr20S+B5bMEpw9Hyz0nsYiWRuMm1vvSuVZFjm/oOzy9X/vtVfYmKuMfSUn kH5CLzWXOEK/KnpKFC9IpZd4VxU6+q3LRhKPLAveZ7gFz3T2AIJGB6/G/R4HFdaDIA+nUioNdoO q6xLpjBh7nIT1GUmvJYQZzB1sO0rFGy7HO7TpJrN3jCGDlwZ3zb7lWfBoRRMRpp1wYBVfrJI/VA UE6V6WZ8vQcBvZzSx0qLX6zXUFP4s9+Ya+Z9FzcFUYkAFMnismMd33mPWu8C/1fks1WzG6/r9So 3vD7d46u2N/Yh5nAxCQq3ZMT6pmZAwHtMwQrSTBDfi9ceUo+pOFJBmr7eOdawiMs75RFA5rNgR1 SUaxiAuhAuoeaW8ARB/XGVsf4BZnhSebmVYLcRDXIU3vceGZFd0AGF381ZWYuo26MJ X-Received: by 2002:a17:90b:1c0f:b0:366:4782:139a with SMTP id 98e67ed59e1d1-36951a6c339mr20312280a91.17.1779230879995; Tue, 19 May 2026 15:47:59 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.47.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:47:59 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:47 -0400 Subject: [PATCH v2 3/9] spi: fsl: add support for Spacemit K1 SoC MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-3-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Raymond Mao Make FSL QSPI driver supporting Spacemit K1 SoC. Signed-off-by: Raymond Mao Signed-off-by: Guodong Xu --- v2: - No change. --- drivers/spi/fsl_qspi.c | 9 +++++++++ 1 file changed, 9 insertions(+) diff --git a/drivers/spi/fsl_qspi.c b/drivers/spi/fsl_qspi.c index 65ab3e306d7..5692510a558 100644 --- a/drivers/spi/fsl_qspi.c +++ b/drivers/spi/fsl_qspi.c @@ -267,6 +267,14 @@ static const struct fsl_qspi_devtype_data ls2080a_data = { .little_endian = true, }; +static const struct fsl_qspi_devtype_data spacemit_k1_data = { + .rxfifo = SZ_128, + .txfifo = SZ_256, + .ahb_buf_size = SZ_128, + .quirks = QUADSPI_QUIRK_TKT253890, + .little_endian = true, +}; + struct fsl_qspi { struct udevice *dev; void __iomem *iobase; @@ -870,6 +878,7 @@ static const struct udevice_id fsl_qspi_ids[] = { { .compatible = "fsl,ls1021a-qspi", .data = (ulong)&ls1021a_data, }, { .compatible = "fsl,ls1088a-qspi", .data = (ulong)&ls2080a_data, }, { .compatible = "fsl,ls2080a-qspi", .data = (ulong)&ls2080a_data, }, + { .compatible = "spacemit,k1-qspi", .data = (ulong)&spacemit_k1_data, }, { } }; From patchwork Wed May 20 10:45:48 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240781 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=Hl9AX9FK; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqb70MsXz1xpM for ; Wed, 20 May 2026 08:48:35 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id E256184869; Wed, 20 May 2026 00:48:32 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="Hl9AX9FK"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id D99E184876; Wed, 20 May 2026 00:48:31 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x102f.google.com (mail-pj1-x102f.google.com [IPv6:2607:f8b0:4864:20::102f]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 4E88E846A5 for ; Wed, 20 May 2026 00:48:29 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x102f.google.com with SMTP id 98e67ed59e1d1-3697421c2a8so2171576a91.1 for ; Tue, 19 May 2026 15:48:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230908; x=1779835708; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=Db/VGc9IUBpS7LIjAl99nwiI1J9Tf62emGYHpWES4o4=; b=Hl9AX9FKwC2E39bnqMkXtwmR/CES1HWayYwXdCb1wc1D1PoYzwwnyddeFOYv/hicXT gXxjru6rIEH+En/SqL6lCKVlkPExNVMjCyWzTTZr0gxwhzTvEaG/3R6IvA36BZ+0sdQV 6FxjviqDJtX6z1Ycl9StgoK2t7vRkM7A9e0sirDDW6X2scZ4prRHfguMzqEUwuaYE8Dj T/T6NinHBKj7D6mE7/KvkzAd5cEP4P1D9TRSWTobgAKVun2u42CFsOaohTJCiNkkvc3V Fz0MVxdXG/iphxmCx5JsMgIyEhbUhkDaVYGWzXt2dxXI12yyAg2/DswHAKjq9J/mWyvg u6xw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230908; x=1779835708; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=Db/VGc9IUBpS7LIjAl99nwiI1J9Tf62emGYHpWES4o4=; b=sr1B2b4a7k+cffPXngEeyoewgwlv+k9jTxgXCajqychq83pX1VvReG9QNsiRlDR6Kq XGlkm4vRZaemZatQAQfsw5U59PcAjYTqBaVGOfaYM9U7Jhu8vB9MgUKr/H6nSIzlnElp 5qOXXnIHF+JzxKJu5YD5BSTXt13OEs/kJACt1gR8hUFJGWeySHITQTCUqQ5jyLZwoQ99 4eb0PN2OQn/9BuvvILbQTEVr+9Xi0Xrp4qwztffRcxd0571tsKPsst+Wx3xOvUKGuOZ7 JL+NTiCxlwcee3/bk/Y0iiG7c1/fyK3CdyohIyuOH+PmOXaxnXp+FiqBB2ROG3CE/Ihf gxYw== X-Forwarded-Encrypted: i=1; AFNElJ9WIgy84vOCbekLv1sOa02RWR1pCWoclYzRjuBw6ScNWN7+54NjZhi5MSwDqVbfoWt5Mo/LEvs=@lists.denx.de X-Gm-Message-State: AOJu0YzYlZzjexj50Dfxqso5r95sDc077PTSyiaEfMCkuz0VJB9B3VCQ Xd5cTComYvjSAxi8iOy9M4ipXkRudjJfJE8l9F+e63XswhI7kZp+O2AKGh2GNDe9SEg= X-Gm-Gg: Acq92OEGzJGTSyzVMvlJBXV9uIynmSZbF7DR4pUpMPaDYmXnLbOmhLv7QomWkS7RAq8 zWH6Hy/LfS0LNbhSlGWPcUv7eKxLrK9XTvSlvSdf6LKMNV0YaIJEtYcYEokcRQCUo9l85vE2kwh 5R/SgqC9kF5ICAMRwRkbIgZKEGLVytzOD0iGa437FrW+Fy4Wxy2A5ZsT27ulec/3c9OkrwrEgaU vRIS2osTfkW6UL07CrGLim6QWg5dz6fmpXvMlrgxKR5M2M4hB+2rI4n6G3bt235gcLX9rJCEVWj iDDJ1ujGJJrutQ5g6ja5FFYULRoxr9th+wgA+9tz/JS+5QNmCbEAIK1U9d1ithe52eFlZOt5sWZ sj7RIsXkz0NKRrQcfctFOoOd3tQky/4fqrjhl09dBGN/Uj2/ohUizu8aO6UfvRq2SZEhW95aWU9 0oN7gfs6wUicsc4V0EIdQvWZcR4CZ6DA5JKXK7pDZJgVs= X-Received: by 2002:a17:90a:d08:b0:369:7421:75cf with SMTP id 98e67ed59e1d1-3697421c71fmr9290436a91.16.1779230907353; Tue, 19 May 2026 15:48:27 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.48.00 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:48:27 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:48 -0400 Subject: [PATCH v2 4/9] spl: k1: enable SPI NOR flash detection and boot MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-4-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Add nor_early_init() to probe the QSPI controller and SPI NOR flash in SPL. Switch spl_boot_device() to BOOT_DEVICE_SPI so the board boots from SPI flash. Change the default device tree to k1-musepi-pro, whose u-boot overlay already defines the QSPI controller and flash node with bootph-pre-ram markers. Enable the required SPI driver model and flash config options. Signed-off-by: Guodong Xu --- v2: - Renamed and reworked from v1 11/16 "board: k1: enable SPI NOR flash in SPL". - New k1-musepi-pro-u-boot.dtsi overlay; default DT switched to it. - SPL probes SPI NOR in early init and loads next stage from it. --- arch/riscv/dts/k1-musepi-pro-u-boot.dtsi | 273 +++++++++++++++++++++++++++++++ board/spacemit/k1/spl.c | 24 ++- configs/spacemit_k1_defconfig | 25 ++- 3 files changed, 319 insertions(+), 3 deletions(-) diff --git a/arch/riscv/dts/k1-musepi-pro-u-boot.dtsi b/arch/riscv/dts/k1-musepi-pro-u-boot.dtsi new file mode 100644 index 00000000000..8a9a2a09de9 --- /dev/null +++ b/arch/riscv/dts/k1-musepi-pro-u-boot.dtsi @@ -0,0 +1,273 @@ +// SPDX-License-Identifier: GPL-2.0+ OR MIT +/* + * Copyright (C) 2026 RISCstar Ltd. + */ + +#include +#include "binman.dtsi" + +/ { + aliases { + console = &uart0; + serial0 = &uart0; + }; + + chosen { + stdout-path = "serial0:115200n8"; + }; + + memory@0 { + device_type = "memory"; + reg = <0x00000000 0x00000000 0x00000000 0x80000000>; + }; +}; + +&syscon_mpmu { + clocks = <&osc_32k>, <&vctcxo_1m>, <&vctcxo_3m>, <&vctcxo_24m>, + <&pll CLK_PLL1_D4>; + clock-names = "osc", "vctcxo_1m", "vctcxo_3m", "vctcxo_24m", + "pll1_d4"; +}; + +&syscon_apbc { + clocks = <&osc_32k>, <&vctcxo_1m>, <&vctcxo_3m>, <&vctcxo_24m>, + <&pll CLK_PLL1_D4>, + <&syscon_mpmu CLK_PLL1_31P5>, + <&syscon_apmu CLK_PMUA_ACLK>; + clock-names = "osc", "vctcxo_1m", "vctcxo_3m", "vctcxo_24m", + "pll1_d4", "pll1_d78_31p5", "pmua_aclk"; +}; + +&uart0 { + bootph-pre-ram; +}; + +&osc_32k { + bootph-pre-ram; +}; + +&vctcxo_1m { + bootph-pre-ram; +}; + +&vctcxo_3m { + bootph-pre-ram; +}; + +&vctcxo_24m { + bootph-pre-ram; +}; + +&syscon_mpmu { + bootph-pre-ram; +}; + +&pll { + bootph-pre-ram; +}; + +&syscon_apmu { + bootph-pre-ram; +}; + +&syscon_apbc { + bootph-pre-ram; +}; + +&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 { + bootph-pre-ram; + compatible = "spacemit,p1"; + reg = <0x41>; + interrupts = <64>; + status = "okay"; + + regulators { + 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"; + }; +}; + +&binman { + u-boot-spl-ddr { + type = "section"; + filename = "u-boot-spl-ddr.bin"; + pad-byte = <0xff>; + + u-boot-spl { + }; + + ddr-fw { + type = "blob"; + filename = "ddr_fw.bin"; + align = <64>; + }; + + u-boot-any { + type = "section"; + size = <0>; + offset = <0>; + }; + }; +}; diff --git a/board/spacemit/k1/spl.c b/board/spacemit/k1/spl.c index 2afabc72a3f..da4169fbc8c 100644 --- a/board/spacemit/k1/spl.c +++ b/board/spacemit/k1/spl.c @@ -16,6 +16,7 @@ #include #include #include +#include #include #include #include "tlv_codes.h" @@ -306,6 +307,26 @@ void ddr_early_init(void) log_info("DDR is not ready\n"); } +void nor_early_init(void) +{ + struct udevice *dev; + int ret; + + ret = uclass_get_device(UCLASS_SPI, 0, &dev); + if (ret) + panic("Fail to detect spi controller.\n"); + udelay(10); + ret = uclass_get_device(UCLASS_SPI_FLASH, 0, &dev); + if (ret) + log_info("Fail to detect spi nor flash.\n"); + udelay(10); +} + +void *board_spl_fit_buffer_addr(ulong fit_size, int sectors, int bl_len) +{ + return (void *)CONFIG_SPL_LOAD_FIT_ADDRESS; +} + void board_init_f(ulong dummy) { u8 i2c_buf[I2C_BUF_SIZE] = { 0 }; @@ -331,11 +352,12 @@ void board_init_f(ulong dummy) pmic_init(); ddr_early_init(); + nor_early_init(); } u32 spl_boot_device(void) { - return BOOT_DEVICE_NOR; + return BOOT_DEVICE_SPI; } void spl_board_init(void) diff --git a/configs/spacemit_k1_defconfig b/configs/spacemit_k1_defconfig index e71c079bef2..64c724c62a5 100644 --- a/configs/spacemit_k1_defconfig +++ b/configs/spacemit_k1_defconfig @@ -1,15 +1,19 @@ CONFIG_RISCV=y CONFIG_SYS_MALLOC_LEN=0x1000000 -CONFIG_SYS_MALLOC_F_LEN=0x5000 +CONFIG_SYS_MALLOC_F_LEN=0x10000 CONFIG_NR_DRAM_BANKS=2 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x1000000 -CONFIG_DEFAULT_DEVICE_TREE="spacemit/k1-bananapi-f3" +CONFIG_DEFAULT_DEVICE_TREE="spacemit/k1-musepi-pro" CONFIG_SPL_SYS_MALLOC_F_LEN=0x4000 CONFIG_SPL_STACK=0xc083fb00 CONFIG_SPL_TEXT_BASE=0xc0801000 CONFIG_SPL_BSS_START_ADDR=0xc083fc00 CONFIG_SPL_BSS_MAX_SIZE=0x400 +CONFIG_SPL_STACK_R=y +CONFIG_SPL_STACK_R_ADDR=0xc00000 +CONFIG_SPL_SYS_MALLOC_SIMPLE=y +CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x100000 CONFIG_SYS_BOOTM_LEN=0xa000000 CONFIG_SYS_LOAD_ADDR=0x200000 CONFIG_SPL_SIZE_LIMIT=0x31000 @@ -23,6 +27,8 @@ CONFIG_SPL_RISCV_MMODE=y # CONFIG_SPL_SMP is not set CONFIG_STACK_SIZE=0x100000 CONFIG_FIT=y +CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y +CONFIG_SPL_LOAD_FIT_ADDRESS=0x08000000 CONFIG_SUPPORT_RAW_INITRD=y CONFIG_OF_BOARD_SETUP=y CONFIG_SYS_CBSIZE=256 @@ -64,3 +70,18 @@ CONFIG_SYS_NS16550=y CONFIG_SYS_NS16550_MEM32=y CONFIG_TIMER_EARLY=y CONFIG_SPL_LIB_RATIONAL=y +CONFIG_SPI=y +CONFIG_DM_SPI=y +CONFIG_DM_SPI_FLASH=y +CONFIG_FSL_QSPI=y +CONFIG_SPI_FLASH=y +CONFIG_SPI_FLASH_WINBOND=y +CONFIG_SPI_MEM=y +CONFIG_SYS_SPI_U_BOOT_OFFS=0x000a0000 +CONFIG_CMD_SPI=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 From patchwork Wed May 20 10:45:49 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240782 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=XbzdO2wY; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=85.214.62.61; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [85.214.62.61]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqbh4jftz1xpM for ; Wed, 20 May 2026 08:49:04 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 75123847FD; Wed, 20 May 2026 00:49:02 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="XbzdO2wY"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 86EDD84873; Wed, 20 May 2026 00:49:01 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 075398056B for ; Wed, 20 May 2026 00:48:59 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-36931e4f5e8so3530461a91.2 for ; Tue, 19 May 2026 15:48:58 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230937; x=1779835737; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=r1JAFCIHt7MDnbg8N3jhQVa6uYcIohu0l8vHY9CFkj8=; b=XbzdO2wYFJux5ZMs9LbWZeaB1dWtGVEGQSGPmb/gu/pjPxO3/A12GTktgkIMvzcWGa 4kFm83fuehKJ4GCrQMSxqVrwgHBCVxTYJVpWWheMU7PTVVBTGjzUTQw0ekI2ImVlR1jQ X98pA+iz6+3ikldFD/GNQqfBR87uVFl4Ss5jSov49604iTIjKl9DEXauRCUvLbuSkVQ/ 5lFSBAIqnAArQdDjsnerS0iomrEE+kLahkYZlD4Yv5Obsi/PBjaFhcrGBzj5GHxU6uZm R9bBqy1JXLyRwTZtIldGve6H0NzaW7b1tAZsnyBoENRTEZ6/bfbrbvges5Kk09s1NKlR AJ4A== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230937; x=1779835737; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=r1JAFCIHt7MDnbg8N3jhQVa6uYcIohu0l8vHY9CFkj8=; b=gkxMoV8lV8MtmOACI30mkxOD5K2xV6r7XVro5ChNMT5BkFdz65+5tRlqJTAk+lk3KJ By8Ui7uwCbbmduuHXVLcs4EMVG/KAQqxG5xGjCqvlRwL/hpCW/W0/enBUgX7F+y3CqtM Aw15PbCtY1acbwNrDrpbLPVr72+vEAWOzlO00HPz1sIM7Fq00kBjLc4USK5CbE3ZMLsF WbHk/fWLg6YTghdTod7de/q45r1hUicSDpcV/MOpVJRJ8I+oL3J1wAblen54N+r4Eyll bnezUNbvniFEO5CAfF2kpuU1nZ9/mbck66ZkH8RuFqnaXQW6yeTW+aYoJuc4kg9HEpwf 105w== X-Forwarded-Encrypted: i=1; AFNElJ+yT0+Ispryjp+yItOTpGhVdbC2Of71CNAF2Jo+0mJrmbJofd3z3XO1y5Q4Ni9BviJR76+aPIQ=@lists.denx.de X-Gm-Message-State: AOJu0YxJ3nm/6KLQgOpGQwjSIcXBU5XLMx6EeFxE5gZay8L+Zj6W1fk4 LS6Xr9n9ne5JTbhfHhkOYrudMhBToZoTTACS0B3RRENh+AKDYXwp1QlvevlZZ9kv6TM= X-Gm-Gg: Acq92OGZnQwNqWNoAqleiCBnkg27hzK2Zq+FvAny8WimGMyXUy3HB6aPSJ0ABS+DHR3 ENsL0ptCYKEPgI2FdO1zFlp1YVSX8mgnGyTZVGs6A81DC2x0FHhQR4WrHL2/b1U+jqtkrSJ96pz Mw15TC9q6aIgKcp0xisv2eM4ttW4VP9EG3BlOqYy94enK0r05XFaGpKcFZU6wcrj8U1qZ+kRWxK r/YkpZOdh+1AeepoZg4z7FNfVesWniT5Bmb1gIK/QfvpH/vW8W0BA8wrY5sPrww+wN0D0bAsPfa T7YObtDfRrboUZJovolvvx6GfN2WG9xEuoQgexSkBBC4mdhSp7EXsVQASq2d6Z4CX1z3XQfjMu0 ujRPx/uQXolCi4TJBffv7fD1TYl2UE9mQNgU8q4qZLMPl3I50tcennWqnJ7KV+vEz9OT4i+rCsc Lr88d5ipNkt+cxgtodi15oR0DA9GUBKmPibs/y63wqGWo= X-Received: by 2002:a17:90b:2fc4:b0:367:bf59:6f99 with SMTP id 98e67ed59e1d1-36951cb8825mr21716942a91.26.1779230937522; Tue, 19 May 2026 15:48:57 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.48.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:48:57 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:49 -0400 Subject: [PATCH v2 5/9] riscv: binman: Always set default configuration in FIT image MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-5-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Raymond Mao When CONFIG_MULTI_DTB_FIT is enabled, the FIT image contains multiple device tree configurations for different boards. The default configuration must be explicitly set to ensure the FIT framework traverses all available configurations instead of falling back to CONFIG_DEFAULT_DEVICE_TREE. Without this default property, fit_find_config_node() will use CONFIG_DEFAULT_DEVICE_TREE as the configuration name to match. This prevents the SPL from correctly selecting the appropriate DTB based on runtime board detection (e.g., from EEPROM). Remove the conditional guard so that "default = conf-1" is always present in the FIT image, regardless of CONFIG_MULTI_DTB_FIT. Signed-off-by: Raymond Mao Signed-off-by: Guodong Xu --- v2: - No change. --- arch/riscv/dts/binman.dtsi | 2 -- 1 file changed, 2 deletions(-) diff --git a/arch/riscv/dts/binman.dtsi b/arch/riscv/dts/binman.dtsi index b518560bb94..84c261c6849 100644 --- a/arch/riscv/dts/binman.dtsi +++ b/arch/riscv/dts/binman.dtsi @@ -93,9 +93,7 @@ configurations { -#ifndef CONFIG_MULTI_DTB_FIT default = "conf-1"; -#endif #if !defined(CONFIG_OF_BOARD) || defined(CONFIG_MULTI_DTB_FIT) @conf-SEQ { From patchwork Wed May 20 10:45:50 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240783 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=XSBfWC2q; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqbw6Zm8z1xpM for ; Wed, 20 May 2026 08:49:16 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id C6ABB84895; Wed, 20 May 2026 00:49:14 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="XSBfWC2q"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id 0FA4284895; Wed, 20 May 2026 00:49:14 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x102b.google.com (mail-pj1-x102b.google.com [IPv6:2607:f8b0:4864:20::102b]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 3297284894 for ; Wed, 20 May 2026 00:49:11 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x102b.google.com with SMTP id 98e67ed59e1d1-36974217d4eso2471022a91.2 for ; Tue, 19 May 2026 15:49:11 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230950; x=1779835750; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=QMFkn0acHSnxyDPtR3R9pRnMCZNqg9C0QTu6Tytv/OM=; b=XSBfWC2qsfcAp6Q3eco3u2icYFrJYI8kx+zFaN7AaO4ARMtn1/o7CS9QG7M4RaWVCu TX6AhDxWXOy1kVUlo9WZ15LKG90kZqfEhL1YmS4sQt+eZAfcRO+ZvY9PCnWxWo0f6yk7 I+VkC5mJKcw6Ekh7wkHhs4k6ILo05XO9+KC6h2FTjQEHa5lRNLnNcdxo9ZaaWKeADA9d 8RlRSGP6GFeTodTl0f4iYgS09iN9ZzgNbNyuNVlbgv+ViJ4P/GPAWsjnU8x+3sH1gvZl F5OXep7U9hLEEjhe8pSyZgPM9GGNJY+nO1VKsaFOOW6uCE2iU9fK6f8Inkc8/4zFa3L4 pNoA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230950; x=1779835750; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=QMFkn0acHSnxyDPtR3R9pRnMCZNqg9C0QTu6Tytv/OM=; b=d3lKn6itre4P13mgVaUUerATdYFTYer6wxIwzB8dHCWOsICXPCchDM5q0tmeGucQU4 /DhpoE/SRaN85fQC9CC/yUDacoaEEl6nkcV7PzNb8yIDufRNJ5MeiUhZwCQNrGaCq9/i 1miDjLVNnE2ywqhmjRafk2+xAejej42dJewbO/75QZymBD8m/aSu/190Txv+Qc9Yy+mv iS2n0tslDkc9Tmet9vUJo+ZDml96xHwDgSj/eXme5Lg9Nhnia7Pd1wSEkU5qmKhdNmT9 d84yKUJuRVJiSDERuDVrehsHb44bhq+lZzKMqYUHjivHzkwRcar+YUZv3NXKA0M4DG2Z iP4w== X-Forwarded-Encrypted: i=1; AFNElJ/26ICJOgO5JmRVrvwo0FZt/iURnrNU2DRLBr6sFwZW6tq5rg2ygDXAcSwwEADpocEzsdI6OLY=@lists.denx.de X-Gm-Message-State: AOJu0YxemhWmVbOeekQv3EL3vKEheXjSikvzo5lBtPux0p+u9O3fNpRw y1g2gtsyy+xuXF/3ycgNnyXfKIpnGwmMIhF92vwa1BRJfojdfYCJRj2ijsZNbAXbNH0= X-Gm-Gg: Acq92OGxGAUhFTayuicNHfs0dWYz2PcDE6EHtinloDcBlZbHOhpZiKNqlmK2AksJo+h QDPNgz+9G177Gny47ztMRkr1GNwEzavRVa+ZM7gF3CSIX1ogPugucIqrKLU2zZTcNtNTBNjft4A KD9/39YnBNffVIpexwowpMtGFgVfxMZIy9dsVYLwAXXZppcOVHL3+e/7LiTFYhsp/svcuVB9FuE 1JqJboGzBL7lm/Z2bqi1b/9zVB8fdHNVfw6m3duqd7KQTM1AIDHXjtk6I6U59uKS+vUT9pUU5CW vb4BgqD5yvB+idSsHQTwGThO255uMs3XxOUYr+NXSYUGKlv+PX0N2feMORiSbHw6QJ4Sq/YuSXb Q6/XWCCgWaMuxHOq+jY2DV67geYeTg0XobfEhudCW1zoB1OLnBOs3eT1tEAUMfuL+rpg3nvAPpN arI/sl81xy3XC3DDsbPHZsnR2XgrxWuKmMoCT/yJeXOhE= X-Received: by 2002:a17:90b:3904:b0:369:e1fa:962b with SMTP id 98e67ed59e1d1-369e1fa98f6mr7703861a91.26.1779230949678; Tue, 19 May 2026 15:49:09 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.48.57 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:49:09 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:50 -0400 Subject: [PATCH v2 6/9] spacemit: k1: Add multiple device tree support MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-6-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Enable multiple DTB support in the FIT image for the Spacemit K1 SoC, allowing a single U-Boot binary to support different board variants. The SPL reads the board type from EEPROM and selects the corresponding device tree at runtime via board_fit_config_name_match(), ensuring the correct hardware description is passed to U-Boot proper. Signed-off-by: Guodong Xu --- v2: - Reworked. Drop the v1 approach (new local k1-muse-pi-pro.dts, enlarge SYS_MALLOC_F_LEN, MMODE switch). - Use binman --fit-multi-config so u-boot.itb packs multiple board DTs from the upstream tree. --- board/spacemit/k1/spl.c | 42 ++++++++++++++++++++++++++++++++++-------- configs/spacemit_k1_defconfig | 2 ++ 2 files changed, 36 insertions(+), 8 deletions(-) diff --git a/board/spacemit/k1/spl.c b/board/spacemit/k1/spl.c index da4169fbc8c..d749e21a2d5 100644 --- a/board/spacemit/k1/spl.c +++ b/board/spacemit/k1/spl.c @@ -13,6 +13,7 @@ #include #include #include +#include #include #include #include @@ -55,6 +56,8 @@ struct ddr_cfg { binman_sym_declare(ulong, ddr_fw, image_pos); binman_sym_declare(ulong, ddr_fw, size); +char product_name[I2C_BUF_SIZE] = "k1"; + static void i2c_early_init(void) { struct udevice *bus; @@ -322,14 +325,8 @@ void nor_early_init(void) udelay(10); } -void *board_spl_fit_buffer_addr(ulong fit_size, int sectors, int bl_len) -{ - return (void *)CONFIG_SPL_LOAD_FIT_ADDRESS; -} - void board_init_f(ulong dummy) { - u8 i2c_buf[I2C_BUF_SIZE] = { 0 }; int ret; ret = spl_early_init(); @@ -344,11 +341,11 @@ void board_init_f(ulong dummy) preloader_console_init(); i2c_early_init(); - ret = read_product_name(i2c_buf, I2C_BUF_SIZE); + ret = read_product_name(product_name, I2C_BUF_SIZE); if (ret) log_info("Fail to detect board:%d\n", ret); else - log_info("Get board name:%s\n", (char *)i2c_buf); + log_info("Get board name:%s\n", product_name); pmic_init(); ddr_early_init(); @@ -363,3 +360,32 @@ u32 spl_boot_device(void) 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)) + return 0; + return -ENOENT; +} + +void *board_spl_fit_buffer_addr(ulong fit_size, int sectors, int bl_len) +{ + return (void *)CONFIG_SPL_LOAD_FIT_ADDRESS; +} diff --git a/configs/spacemit_k1_defconfig b/configs/spacemit_k1_defconfig index 64c724c62a5..465788cc2e5 100644 --- a/configs/spacemit_k1_defconfig +++ b/configs/spacemit_k1_defconfig @@ -5,6 +5,7 @@ CONFIG_NR_DRAM_BANKS=2 CONFIG_HAS_CUSTOM_SYS_INIT_SP_ADDR=y CONFIG_CUSTOM_SYS_INIT_SP_ADDR=0x1000000 CONFIG_DEFAULT_DEVICE_TREE="spacemit/k1-musepi-pro" +CONFIG_OF_LIST="spacemit/k1-bananapi-f3 spacemit/k1-musepi-pro" CONFIG_SPL_SYS_MALLOC_F_LEN=0x4000 CONFIG_SPL_STACK=0xc083fb00 CONFIG_SPL_TEXT_BASE=0xc0801000 @@ -27,6 +28,7 @@ CONFIG_SPL_RISCV_MMODE=y # CONFIG_SPL_SMP is not set CONFIG_STACK_SIZE=0x100000 CONFIG_FIT=y +CONFIG_MULTI_DTB_FIT=y CONFIG_SPL_HAS_LOAD_FIT_ADDRESS=y CONFIG_SPL_LOAD_FIT_ADDRESS=0x08000000 CONFIG_SUPPORT_RAW_INITRD=y From patchwork Wed May 20 10:45:51 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240784 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=D6lp7K5R; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqcP1mBmz1xpM for ; Wed, 20 May 2026 08:49:41 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 292B5848A1; Wed, 20 May 2026 00:49:39 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="D6lp7K5R"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id BB6D284877; Wed, 20 May 2026 00:49:37 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x102e.google.com (mail-pj1-x102e.google.com [IPv6:2607:f8b0:4864:20::102e]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id EA03C8489E for ; Wed, 20 May 2026 00:49:34 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x102e.google.com with SMTP id 98e67ed59e1d1-369002b26f4so2177818a91.3 for ; Tue, 19 May 2026 15:49:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230973; x=1779835773; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=9r4mhuU7tIybmyMdiGgqofwd594XEeDwtHjo/rSszvA=; b=D6lp7K5RaRyMBnMNbLLMr9VzKH988O3w/sjPkb++a1iGGlK6G/mvncJ3vn/1Dvyj4e Tir8ErcxeX4PZ46nABx9KTqkkoZ+FZMmhEQI8AyOxP/Edvd8e3kuTIfN1io7Pjap9zk1 RNOl1qWATp7JZN8f51HedT+E6jlKy8ERcKpDTsd8CLsqVOlr2BOro9IXr3ceE3HegxZD SM33KtHfisUyq6kKOC9xD5E7vo0xXWP1GQddMho0Vy1TUQcEKQb60VLynor7GdMi2ZFG uBES/8lBK8lIvXDVrS5CgRHSlI3J/ImYR4Nj3bqBmwnWtEv9/JPrGG0kxO9iJrI7m5L1 cAhw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230973; x=1779835773; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=9r4mhuU7tIybmyMdiGgqofwd594XEeDwtHjo/rSszvA=; b=rksEm80gcg2rv/F6+2A9EhCtrqUBkR9Z8r1L7qS+P1bntUorU8KcOhYKgV/L3cRzqY hTaSAoUmxCnbIqOMo4SW59HPrEfwhWIIatJHc/ZURpqvo9xLttO3EMXE8bTJ5mJbh2xm MqqYdiWyq7nFCyGgnB/2CTQc4OlOHnqN9qA59W1GUhRkSnpuunJW9RT0fOuWSHIiZGJe LFCW7UiG7sKOXg9qIyBn91S61m/5UgXWIo615o3+8zLXrSdZfTKNyVxDxxyif8K6n39Y i9ee1LVcpZQYB9W4CWK9KJl4+Lev+5Czbv8dv2fjpHSFXPFmPvU3hMO3MqbtG8DL+B2S 2Clw== X-Forwarded-Encrypted: i=1; AFNElJ+ei1wBFcXmQQ0zjYvruiqLRhmgg6F/oTnDjxntbM+XFRKijJA3vlkMoFZ8maYQy/qa7kFO+8A=@lists.denx.de X-Gm-Message-State: AOJu0YwD6ksqCkArzg8yicKci9a7yUSwfTN69XTNG8Gb6As+U/wXWvnr b3Kjrghc/Wp5g7k9XFGInRmSmk06HzECgNnFcVHdPDjXg5WyW/Xc49wU+WcauwuLNhA= X-Gm-Gg: Acq92OHqzJ9T0NlYtyN7oPUdRpUUaCsK9Y1A+1c0I+464fI/14HiAoZwARVgdGpw7L8 Jeaqwzc39fomD1RjzDGVGylRJa02kot65MP/TrzUZm7otPM6IQZKiAxyV9RwwUD7tiTBzrIldd9 CZpepLyiQCUywWKnGmC0dEe/78ZgvfYwSJt6X8DhzK7vMM0Io5sMGR3iA5nDD7UG7DFFzt11eRZ CR25tAeLB88OhN3upoF3F5zlJHkFCEkRS+t7HIfo+FEqkYll5qAw0d4+IUet7o6n7Bte8kQZxPu k0JOupooU9hn+4m9APfgSYG/o6srY3ig8EEl3bWtC0weXg7ErXsgEKl7LsY97k4Jbm+3XMkSVJr eRHvjwmBw5PXF735YSdC/5inTKGAoXrN4UEfkK0PDwgUM2l3PViBdbJlnAkPLq9iRSvyJhpheVL J+/Sq+Noc0TkV7PF/MDgCVdAaKtQgvb7HY2Xkiqpa+wEs= X-Received: by 2002:a17:90b:1c11:b0:368:a297:bd3d with SMTP id 98e67ed59e1d1-36951895b57mr19080559a91.3.1779230973328; Tue, 19 May 2026 15:49:33 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.49.10 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:49:32 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:51 -0400 Subject: [PATCH v2 7/9] pinctrl: add pinctrl driver for Spacemit K1 SoC MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-7-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Raymond Mao Add pinctrl driver for Spacemit K1 SoC. Signed-off-by: Raymond Mao Signed-off-by: Guodong Xu --- v2: - No change. --- drivers/pinctrl/Kconfig | 1 + drivers/pinctrl/Makefile | 1 + drivers/pinctrl/spacemit/Kconfig | 9 + drivers/pinctrl/spacemit/Makefile | 2 + drivers/pinctrl/spacemit/pinctrl-k1.c | 550 ++++++++++++++++++++++++++++++++++ 5 files changed, 563 insertions(+) diff --git a/drivers/pinctrl/Kconfig b/drivers/pinctrl/Kconfig index 578edbf8168..a3abe0ea04d 100644 --- a/drivers/pinctrl/Kconfig +++ b/drivers/pinctrl/Kconfig @@ -419,6 +419,7 @@ source "drivers/pinctrl/nxp/Kconfig" source "drivers/pinctrl/qcom/Kconfig" source "drivers/pinctrl/renesas/Kconfig" source "drivers/pinctrl/rockchip/Kconfig" +source "drivers/pinctrl/spacemit/Kconfig" source "drivers/pinctrl/sunxi/Kconfig" source "drivers/pinctrl/tegra/Kconfig" source "drivers/pinctrl/uniphier/Kconfig" diff --git a/drivers/pinctrl/Makefile b/drivers/pinctrl/Makefile index 29fb9b484d0..ece7a57767c 100644 --- a/drivers/pinctrl/Makefile +++ b/drivers/pinctrl/Makefile @@ -33,6 +33,7 @@ obj-$(CONFIG_PINCTRL_SCMI) += pinctrl-scmi.o obj-$(CONFIG_PINCTRL_SINGLE) += pinctrl-single.o obj-$(CONFIG_PINCTRL_STI) += pinctrl-sti.o obj-$(CONFIG_PINCTRL_STM32) += pinctrl_stm32.o +obj-$(CONFIG_$(PHASE_)PINCTRL_SPACEMIT_K1) += spacemit/ obj-$(CONFIG_$(PHASE_)PINCTRL_SX150X) += pinctrl-sx150x.o obj-$(CONFIG_$(PHASE_)PINCTRL_STMFX) += pinctrl-stmfx.o obj-$(CONFIG_PINCTRL_TH1520) += pinctrl-th1520.o diff --git a/drivers/pinctrl/spacemit/Kconfig b/drivers/pinctrl/spacemit/Kconfig new file mode 100644 index 00000000000..6aab89e160c --- /dev/null +++ b/drivers/pinctrl/spacemit/Kconfig @@ -0,0 +1,9 @@ +config PINCTRL_SPACEMIT_K1 + bool "Spacemit K1 SoC pinctrl driver" + depends on PINCTRL_GENERIC && DM + help + Supports pin multiplexing control on Spacemit K1 SoCs. + + The driver is controlled by a device tree node which contains both + the GPIO definitions and pin control functions for each available + multiplex function. diff --git a/drivers/pinctrl/spacemit/Makefile b/drivers/pinctrl/spacemit/Makefile new file mode 100644 index 00000000000..0dc43c72cb1 --- /dev/null +++ b/drivers/pinctrl/spacemit/Makefile @@ -0,0 +1,2 @@ +# SPDX-License-Identifier: GPL-2.0 +obj-y += pinctrl-k1.o diff --git a/drivers/pinctrl/spacemit/pinctrl-k1.c b/drivers/pinctrl/spacemit/pinctrl-k1.c new file mode 100644 index 00000000000..a6a22eacac7 --- /dev/null +++ b/drivers/pinctrl/spacemit/pinctrl-k1.c @@ -0,0 +1,550 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2024 Yixun Lan + * Copyright (c) 2025-2026 RISCstar Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +/* + * +---------+----------+-----------+--------+--------+----------+--------+ + * | pull | drive | schmitter | slew | edge | strong | mux | + * | up/down | strength | trigger | rate | detect | pull | mode | + * +---------+----------+-----------+--------+--------+----------+--------+ + * 3 bits 3 bits 2 bits 1 bit 3 bits 1 bit 3 bits + */ + +#define PAD_MUX GENMASK(2, 0) +#define PAD_STRONG_PULL BIT(3) +#define PAD_EDGE_RISE BIT(4) +#define PAD_EDGE_FALL BIT(5) +#define PAD_EDGE_CLEAR BIT(6) +#define PAD_SLEW_RATE GENMASK(12, 11) +#define PAD_SLEW_RATE_EN BIT(7) +#define PAD_SCHMITT GENMASK(9, 8) +#define PAD_DRIVE GENMASK(12, 10) +#define PAD_PULLDOWN BIT(13) +#define PAD_PULLUP BIT(14) +#define PAD_PULL_EN BIT(15) + +#define PIN_POWER_STATE_1V8 1800 +#define PIN_POWER_STATE_3V3 3300 + +enum spacemit_pin_io_type { + IO_TYPE_NONE = 0, + IO_TYPE_1V8, + IO_TYPE_3V3, + IO_TYPE_EXTERNAL, +}; + +struct spacemit_pin_io { + unsigned int pin : 12; // 0~4095 + unsigned int io_type : 4; // 0~15 + unsigned int ds : 8; // 0~255 + unsigned int reserved : 8; +}; + +struct spacemit_pinctrl_data { + struct spacemit_pin_io *io_pins; + int nr_io_pins; + + void __iomem * (*pin_to_reg)(struct udevice *dev, unsigned int pin); + int (*get_gpio_mux)(struct udevice *dev, unsigned int pin); + int (*get_pins)(struct udevice *dev); + int (*get_functions)(struct udevice *dev); + int (*get_io_type)(struct udevice *dev, unsigned int pin); +}; + +struct spacemit_pinctrl_priv { + void __iomem *regs; + struct spacemit_pin_io *io_pins; + int nr_io_pins; +}; + +struct spacemit_pin_mux_config { + const struct spacemit_pin *pin; + u32 config; +}; + +struct spacemit_pin_drv_strength { + unsigned int val : 8; + unsigned int ma : 16; + unsigned int reserved : 8; +}; + +static char pin_name[PINNAME_SIZE]; + +/* External: IO voltage via external source, can be 1.8V or 3.3V */ +static struct spacemit_pin_io k1_io_pins[] = { + { 47, IO_TYPE_EXTERNAL, 0, }, + { 48, IO_TYPE_EXTERNAL, 0, }, + { 49, IO_TYPE_EXTERNAL, 0, }, + { 50, IO_TYPE_EXTERNAL, 0, }, + { 51, IO_TYPE_EXTERNAL, 0, }, + { 52, IO_TYPE_EXTERNAL, 0, }, + { 75, IO_TYPE_EXTERNAL, 0, }, + { 76, IO_TYPE_EXTERNAL, 0, }, + { 77, IO_TYPE_EXTERNAL, 0, }, + { 78, IO_TYPE_EXTERNAL, 0, }, + { 79, IO_TYPE_EXTERNAL, 0, }, + { 80, IO_TYPE_EXTERNAL, 0, }, + { 98, IO_TYPE_EXTERNAL, 0, }, + { 99, IO_TYPE_EXTERNAL, 0, }, + { 100, IO_TYPE_EXTERNAL, 0, }, + { 101, IO_TYPE_EXTERNAL, 0, }, + { 102, IO_TYPE_EXTERNAL, 0, }, + { 103, IO_TYPE_EXTERNAL, 0, }, + { 104, IO_TYPE_EXTERNAL, 0, }, + { 105, IO_TYPE_EXTERNAL, 0, }, + { 106, IO_TYPE_EXTERNAL, 0, }, + { 107, IO_TYPE_EXTERNAL, 0, }, + { 108, IO_TYPE_EXTERNAL, 0, }, + { 109, IO_TYPE_EXTERNAL, 0, }, +}; + +static inline int k1_get_pins(struct udevice *dev) +{ + return 128; +} + +static inline int k1_get_functions(struct udevice *dev) +{ + return 7; +} + +// The pin number equals to the gpio number. +static void __iomem *k1_pin_to_reg(struct udevice *dev, unsigned int pin) +{ + struct spacemit_pinctrl_priv *priv = dev_get_priv(dev); + unsigned int offset = 1; + + if (pin < 86) { + offset += pin; + } else if (pin < 93) { + offset += pin + 36; + } else if (pin < 98) { + offset += pin + 23; + } else if (pin == 98) { // QSPI_DAT3 + offset += 92; + } else if (pin == 99) { // QSPI_DAT2 + offset += 91; + } else if (pin == 100) { // QSPI_DAT1 + offset += 90; + } else if (pin == 101) { // QSPI_DAT0 + offset += 89; + } else if (pin == 102) { // QSPI_CLK + offset += 94; + } else if (pin == 103) { // QSPI_CS1 + offset += 93; + } else if (pin < 111) { + offset += pin + 5; + } else if (pin < 128) { + offset += pin + 19; + } else { + dev_err(dev, "Invalid pin (%u)\n", pin); + return NULL; + } + return priv->regs + (offset << 2); +} + +static int k1_get_gpio_mux(struct udevice *dev, unsigned int selector) +{ + u32 mux = 0; + + if (selector < 70) { + mux = 0; + } else if (selector < 74) { + mux = 1; + } else if (selector < 93) { + mux = 0; + } else if (selector < 104) { + mux = 1; + } else if (selector < 110) { + mux = 4; + } else if (selector < 128) { + mux = 0; + } else { + dev_err(dev, "Invalid pin (%u)\n", selector); + return -EINVAL; + } + return mux; +} + +static int k1_get_io_type(struct udevice *dev, unsigned int selector) +{ + if (selector < 47) + return IO_TYPE_1V8; + else if (selector < 53) + return IO_TYPE_EXTERNAL; + else if (selector < 75) + return IO_TYPE_1V8; + else if (selector < 81) + return IO_TYPE_EXTERNAL; + else if (selector < 98) + return IO_TYPE_1V8; + else if (selector < 110) + return IO_TYPE_EXTERNAL; + else if (selector < 128) + return IO_TYPE_1V8; + return -EINVAL; +} + +/* use IO high level output current as the table */ +static struct spacemit_pin_drv_strength spacemit_ds_1v8_tbl[4] = { + { 0, 11 }, + { 2, 21 }, + { 4, 32 }, + { 6, 42 }, +}; + +static struct spacemit_pin_drv_strength spacemit_ds_3v3_tbl[8] = { + { 0, 7 }, + { 2, 10 }, + { 4, 13 }, + { 6, 16 }, + { 1, 19 }, + { 3, 23 }, + { 5, 26 }, + { 7, 29 }, +}; + +static inline u8 spacemit_get_ds_value(struct spacemit_pin_drv_strength *tbl, + u32 num, u32 ma) +{ + int i; + + for (i = 0; i < num; i++) + if (ma <= tbl[i].ma) + return tbl[i].val; + + return tbl[num - 1].val; +} + +static inline u32 spacemit_get_ds_ma(struct spacemit_pin_drv_strength *tbl, + u32 num, u32 val) +{ + int i; + + for (i = 0; i < num; i++) + if (val == tbl[i].val) + return tbl[i].ma; + + return 0; +} + +static inline u8 spacemit_get_drive_strength(enum spacemit_pin_io_type type, + u32 ma) +{ + switch (type) { + case IO_TYPE_1V8: + return spacemit_get_ds_value(spacemit_ds_1v8_tbl, + ARRAY_SIZE(spacemit_ds_1v8_tbl), + ma); + case IO_TYPE_3V3: + return spacemit_get_ds_value(spacemit_ds_3v3_tbl, + ARRAY_SIZE(spacemit_ds_3v3_tbl), + ma); + default: + return 0; + } +} + +static inline u32 spacemit_get_drive_strength_ma(enum spacemit_pin_io_type type, + u32 value) +{ + switch (type) { + case IO_TYPE_1V8: + return spacemit_get_ds_ma(spacemit_ds_1v8_tbl, + ARRAY_SIZE(spacemit_ds_1v8_tbl), + value & 0x6); + case IO_TYPE_3V3: + return spacemit_get_ds_ma(spacemit_ds_3v3_tbl, + ARRAY_SIZE(spacemit_ds_3v3_tbl), + value); + default: + return 0; + } +} + +static inline u16 spacemit_dt_get_pin(u32 value) +{ + return value >> 16; +} + +static inline u16 spacemit_dt_get_pin_mux(u32 value) +{ + return value & GENMASK(15, 0); +} + +static int spacemit_get_pins_count(struct udevice *dev) +{ + struct spacemit_pinctrl_data *data; + + data = (struct spacemit_pinctrl_data *)dev_get_driver_data(dev); + if (!data || !data->get_pins) + return -EINVAL; + return data->get_pins(dev); +} + +static const char *spacemit_get_pin_name(struct udevice *dev, + unsigned int selector) +{ + struct spacemit_pinctrl_data *data; + unsigned int npins; + + data = (struct spacemit_pinctrl_data *)dev_get_driver_data(dev); + if (!data || !data->get_pins) + return NULL; + npins = data->get_pins(dev); + + if (selector >= npins) + snprintf(pin_name, PINNAME_SIZE, "Error"); + else + snprintf(pin_name, PINNAME_SIZE, "PIN%u", selector); + + return pin_name; +} + +static int spacemit_get_functions_count(struct udevice *dev) +{ + struct spacemit_pinctrl_data *data; + + data = (struct spacemit_pinctrl_data *)dev_get_driver_data(dev); + if (!data || !data->get_functions) + return -EINVAL; + return data->get_functions(dev); +} + +static int spacemit_get_pin_muxing(struct udevice *dev, unsigned int pin, + char *buf, int size) +{ + struct spacemit_pinctrl_data *data; + void __iomem *addr; + u32 mux, val; + + 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); + if (!addr) + return -EINVAL; + + val = readl(addr); + mux = val & PAD_MUX; + snprintf(buf, size, "[%p] 0x%08x MUX%d", addr, val, mux); + return 0; +} + +static int spacemit_pinctrl_request_gpio(struct udevice *dev, + unsigned int selector) +{ + struct spacemit_pinctrl_data *data; + void __iomem *addr; + int mux; + + data = (struct spacemit_pinctrl_data *)dev_get_driver_data(dev); + if (!data || !data->pin_to_reg || !data->get_gpio_mux) + return -EINVAL; + addr = data->pin_to_reg(dev, selector); + mux = data->get_gpio_mux(dev, selector); + if (mux < 0) { + dev_err(dev, "Invalid pin (%d)\n", selector); + return -EINVAL; + } + clrsetbits_le32(addr, PAD_MUX, mux & PAD_MUX); + return 0; +} + +static int spacemit_pinctrl_free_gpio(struct udevice *dev, + unsigned int selector) +{ + return 0; +} + +static int spacemit_pinmux_set(struct udevice *dev, unsigned int pin, + unsigned int mux) +{ + struct spacemit_pinctrl_data *data; + void __iomem *addr; + + 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); + clrsetbits_le32(addr, PAD_MUX, mux & PAD_MUX); + return 0; +} + +static int spacemit_pinmux_property_set(struct udevice *dev, u32 pinmux_group) +{ + u32 pin, mux; + + pin = spacemit_dt_get_pin(pinmux_group); + mux = spacemit_dt_get_pin_mux(pinmux_group); + return spacemit_pinmux_set(dev, pin, mux); +} + +static const struct pinconf_param spacemit_pinconf_params[] = { + { "bias-disable", PIN_CONFIG_BIAS_DISABLE, 0 }, + { "bias-pull-down", PIN_CONFIG_BIAS_PULL_DOWN, 1 }, + { "bias-pull-up", PIN_CONFIG_BIAS_PULL_UP, 1 }, + { "drive-strength", PIN_CONFIG_DRIVE_STRENGTH, U32_MAX }, + { "power-source", PIN_CONFIG_POWER_SOURCE, U32_MAX }, +}; + +static int spacemit_pinconf_set(struct udevice *dev, unsigned int pin_selector, + unsigned int param, unsigned int argument) +{ + 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; + int i; + + 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: + 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); + break; + case PIN_CONFIG_BIAS_PULL_UP: + mask = PAD_PULLDOWN | PAD_PULLUP | PAD_PULL_EN; + clrsetbits_le32(addr, mask, PAD_PULLUP | PAD_PULL_EN); + break; + case PIN_CONFIG_DRIVE_STRENGTH: + io_type = IO_TYPE_1V8; + for (i = 0; i < priv->nr_io_pins; i++) { + if (priv->io_pins[i].pin != pin_selector) + continue; + io_type = priv->io_pins[i].io_type; + break; + } + if (io_type != IO_TYPE_3V3 && io_type != IO_TYPE_1V8) { + dev_err(dev, "Invalid IO type (%d)\n", io_type); + return -EINVAL; + } + ds = spacemit_get_drive_strength(io_type, argument); + clrsetbits_le32(addr, PAD_DRIVE, ds); + break; + case PIN_CONFIG_POWER_SOURCE: + for (i = 0, found = false; i < priv->nr_io_pins; i++) { + if (priv->io_pins[i].pin != pin_selector) + continue; + if (argument == PIN_POWER_STATE_3V3) { + priv->io_pins[i].io_type = IO_TYPE_3V3; + found = true; + } else if (argument == PIN_POWER_STATE_1V8) { + priv->io_pins[i].io_type = IO_TYPE_1V8; + found = true; + } + break; + } + if (!found && argument != PIN_POWER_STATE_1V8) { + dev_err(dev, "Invalid power source (%d)\n", argument); + return -EINVAL; + } + break; + default: + return -EOPNOTSUPP; + } + return 0; +} + +static int spacemit_pinctrl_probe(struct udevice *dev) +{ + struct spacemit_pinctrl_data *data; + struct spacemit_pinctrl_priv *priv; + struct clk_bulk clks; + size_t size; + int ret; + + data = (struct spacemit_pinctrl_data *)dev_get_driver_data(dev); + priv = dev_get_priv(dev); + priv->regs = dev_read_addr_ptr(dev); + if (!priv->regs) { + dev_err(dev, "Fail to get base address\n"); + return -EINVAL; + } + priv->nr_io_pins = data->nr_io_pins; + size = priv->nr_io_pins * sizeof(struct spacemit_pin_io); + priv->io_pins = (struct spacemit_pin_io *)memdup(data->io_pins, size); + if (!priv->io_pins) { + dev_err(dev, "Fail to allocate memory\n"); + return -ENOMEM; + } + + ret = clk_get_bulk(dev, &clks); + if (ret) { + dev_err(dev, "Fail to get bulk clks\n"); + goto out_get_clk; + } + ret = clk_enable_bulk(&clks); + if (ret) { + dev_err(dev, "Fail to enable bulk clks\n"); + goto out_clks; + } + return 0; +out_clks: + clk_release_bulk(&clks); +out_get_clk: + free(priv->io_pins); + return ret; +} + +static const struct spacemit_pinctrl_data k1_pinctrl_data = { + .io_pins = k1_io_pins, + .nr_io_pins = ARRAY_SIZE(k1_io_pins), + .pin_to_reg = k1_pin_to_reg, + .get_gpio_mux = k1_get_gpio_mux, + .get_pins = k1_get_pins, + .get_functions = k1_get_functions, + .get_io_type = k1_get_io_type, +}; + +static const struct udevice_id spacemit_pinctrl_ids[] = { + { + .compatible = "spacemit,k1-pinctrl", + .data = (uintptr_t)&k1_pinctrl_data, + }, { /* sentinel */ } +}; + +static const struct pinctrl_ops spacemit_pinctrl_ops = { + .get_pins_count = spacemit_get_pins_count, + .get_pin_name = spacemit_get_pin_name, + .get_functions_count = spacemit_get_functions_count, + .get_pin_muxing = spacemit_get_pin_muxing, + .set_state = pinctrl_generic_set_state, + .gpio_request_enable = spacemit_pinctrl_request_gpio, + .gpio_disable_free = spacemit_pinctrl_free_gpio, + .pinmux_set = spacemit_pinmux_set, + .pinmux_property_set = spacemit_pinmux_property_set, + .pinconf_num_params = ARRAY_SIZE(spacemit_pinconf_params), + .pinconf_params = spacemit_pinconf_params, + .pinconf_set = spacemit_pinconf_set, +}; + +U_BOOT_DRIVER(spacemit_pinctrl) = { + .name = "spacemit_pinctrl", + .id = UCLASS_PINCTRL, + .of_match = spacemit_pinctrl_ids, + .ops = &spacemit_pinctrl_ops, + .priv_auto = sizeof(struct spacemit_pinctrl_priv), + .probe = spacemit_pinctrl_probe, +}; From patchwork Wed May 20 10:45:52 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240785 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=qlPwWdCP; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqcx4HTvz1yDb for ; Wed, 20 May 2026 08:50:09 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id 7E0D484859; Wed, 20 May 2026 00:50:07 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="qlPwWdCP"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id CDC9284862; Wed, 20 May 2026 00:50:04 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x1031.google.com (mail-pj1-x1031.google.com [IPv6:2607:f8b0:4864:20::1031]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id D7ABD8056B for ; Wed, 20 May 2026 00:49:59 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x1031.google.com with SMTP id 98e67ed59e1d1-36974217d4eso2471304a91.2 for ; Tue, 19 May 2026 15:49:59 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779230998; x=1779835798; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=utRsetnkywN+y5gL4pk4qW9TYxjQSaT3p9kSqlyEX9Q=; b=qlPwWdCPo3P43XZfIb9X4LSaXKId5GF2CHcA9bw/qBMqgIYCqUhDiqdnJQ527WMhT4 YM7kXUz9KH7v8DSDI12YpDVdaHmKpTUqLkJRMQNqIhevohrdCwTi122Il6CAb3+Zu+2K 1lLelJZjhhqM/ZZSiY6EdAI6ZGZmZyVYsUHwc8oLrWaF7gSbD433lhGA2kMIsOmEwqQt avGTkPCoxREXXIA6I2y9WS1oguvOOaCb+Upo+2CtW4iSxQYVBsYAS2dhNnQo/t9EGzr6 rRhS2HbP+UuOPTTTK9OrV4paSw2vVylZqJDxaHPQDzIztuj1asUO5qJqSQg6E9okcqM8 C4lw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779230998; x=1779835798; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=utRsetnkywN+y5gL4pk4qW9TYxjQSaT3p9kSqlyEX9Q=; b=lCZ+kHKU+WVTB4Bi/y1mA2JYm5fVu4mtfeU1KAklCIPIm0dRhE7vl2vd6JeSqGCIZC YVoGfFbmj3ecKZQ34moa+rJgtizuU5vBe2bNwm1y3fQhRDgI1/82xVmj4lX0XyDuR1LP wIMpArfG/PkpaYlN6DPD11Xrq3Soc66QDydtddD2hy9UlLQ/AGvwqO485NvgxOi10AFo cfQurMFtujvHU/mBDbodtMJMmwEJO8ctOi2QTsPjQqGcS+5qbIVV/UjBVeo00lpklvgN /NBmCjWbXMM+frTxbxnuCMrTZxnZ4X9bHPpXlQTL91omSj2R1UDkJm36DhFyyJvKmuIL NfCw== X-Forwarded-Encrypted: i=1; AFNElJ+xp5OgXjQrftURt9Q5lCtPUShALHxZ7x43nd/zkAD/q6PPmtbsiKDZU0BbwrIyP4dIH5huMVM=@lists.denx.de X-Gm-Message-State: AOJu0YwO4w15oMNii15aZD07hKqk15WOhi3loU48ooyURpMI3R4nrKEL laJx20UQ2f7y/4tm6BbY+lFSZEwHA+kKD5sWZ1hmjtSqHAjbV1DwbGkx8klJLQDBz+w= X-Gm-Gg: Acq92OH2Gq8ZjooTHERIe6VOnnr+TE7TD2uKJEBa+tSj3Pn6JKrMHnQC4mwYRRrRjLd 7Bdc3boZhqdFfB34fy5l966gCVL7AvuepzG42u555zzsqj613wKCODcMTQkoJktCwfIRX4O4qpI nvnXxyJbX4SMoeQBRx5trvtddLPdvFgcpKHF2eargyYppL1qYVLgvtrfdHHQIIldcg/DwVa18NE 4koNbp7TtfWM2IwkfwSv0+tXDquoY0w8XVpm6abVPPkoUfT+0nI3+P/xN1jL6AyXYo2N8AopxN5 Mg1AgacV4t4RcfkkkMx5U72GtwWcxKSEt1Ox29UP3HWYYvreJPMLaDOtQHzqOsLctIsXn91wBUy 07ztN8ZPZ6SVNoWO+0YaC8eChAsnnjWBOp6uNpuPGaGaTJm7a5I+HW11elBXVoxAc3C9KzmEJ8x ZAaQZg02+yL5KpVYERjSpKy7P0J42+ONAPv7PKFEXLz+8= X-Received: by 2002:a17:90b:2f0c:b0:369:c5f4:9681 with SMTP id 98e67ed59e1d1-369c5f4a117mr9055456a91.22.1779230998340; Tue, 19 May 2026 15:49:58 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.49.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:49:57 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:52 -0400 Subject: [PATCH v2 8/9] gpio: add gpio driver for Spacemit K1 SoC MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-8-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean From: Raymond Mao Enable gpio driver for Spacemit K1 SoC. Signed-off-by: Raymond Mao Signed-off-by: Guodong Xu --- v2: - Add .request and .rfree ops: delegate to pinctrl's gpio_request_enable / gpio_disable_free. - xlate(): use gpio_flags_xlate() instead of raw flags. --- drivers/gpio/Kconfig | 8 ++ drivers/gpio/Makefile | 1 + drivers/gpio/spacemit_gpio.c | 253 +++++++++++++++++++++++++++++++++++++++++++ 3 files changed, 262 insertions(+) diff --git a/drivers/gpio/Kconfig b/drivers/gpio/Kconfig index 0b5466b39b8..fe6379f0e01 100644 --- a/drivers/gpio/Kconfig +++ b/drivers/gpio/Kconfig @@ -449,6 +449,14 @@ config SANDBOX_GPIO_COUNT of 'anonymous' GPIOs that do not belong to any device or bank. Select a suitable value depending on your needs. +config SPACEMIT_GPIO + bool "Spacemit K1 GPIO driver" + depends on DM_GPIO && TARGET_SPACEMIT_K1 + help + Support the GPIO device in Spacemit SoCs. The GPIOs are arranged + into a number of banks (different for each SoC type) each with 32 + GPIOs. + config SUNXI_GPIO bool "Allwinner GPIO driver" depends on ARCH_SUNXI diff --git a/drivers/gpio/Makefile b/drivers/gpio/Makefile index 863557e45ce..020e23c7252 100644 --- a/drivers/gpio/Makefile +++ b/drivers/gpio/Makefile @@ -66,6 +66,7 @@ obj-$(CONFIG_MVEBU_GPIO) += mvebu_gpio.o obj-$(CONFIG_MSM_GPIO) += msm_gpio.o obj-$(CONFIG_$(PHASE_)PCF8575_GPIO) += pcf8575_gpio.o obj-$(CONFIG_$(PHASE_)QCOM_PMIC_GPIO) += qcom_pmic_gpio.o qcom_spmi_gpio.o +obj-$(CONFIG_$(PHASE_)SPACEMIT_GPIO) += spacemit_gpio.o obj-$(CONFIG_MT7620_GPIO) += mt7620_gpio.o obj-$(CONFIG_MT7621_GPIO) += mt7621_gpio.o obj-$(CONFIG_MSCC_SGPIO) += mscc_sgpio.o diff --git a/drivers/gpio/spacemit_gpio.c b/drivers/gpio/spacemit_gpio.c new file mode 100644 index 00000000000..de71880df15 --- /dev/null +++ b/drivers/gpio/spacemit_gpio.c @@ -0,0 +1,253 @@ +// SPDX-License-Identifier: GPL-2.0 +/* + * Copyright (c) 2025-2026 RISCstar Ltd. + */ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define GPIO_BANK_SIZE 32 +#define GPIO_TO_BANK(pin) ((pin) / GPIO_BANK_SIZE) +#define GPIO_TO_BIT(pin) ((pin) % GPIO_BANK_SIZE) + +static inline int gpio_to_reg_offset(unsigned int pin) +{ + unsigned int bank = GPIO_TO_BANK(pin); + + if (bank == 0) + return 0; + else if (bank == 1) + return 4; + else if (bank == 2) + return 8; + else if (bank == 3) + return 0x100; + log_warning("Use default GPIO bank for an invalid GPIO[%d].\n", pin); + return 0; +} + +#define REG_PLR(pin) (0x00 + gpio_to_reg_offset(pin)) +#define REG_PDR(pin) (0x0c + gpio_to_reg_offset(pin)) +#define REG_PSR(pin) (0x18 + gpio_to_reg_offset(pin)) +#define REG_PCR(pin) (0x24 + gpio_to_reg_offset(pin)) +#define REG_SDR(pin) (0x54 + gpio_to_reg_offset(pin)) +#define REG_CDR(pin) (0x60 + gpio_to_reg_offset(pin)) + +struct spacemit_gpio_data { + u16 gpio_base; + u16 gpio_count; + u8 num_banks; +}; + +struct spacemit_gpio_priv { + void __iomem *regs; +}; + +static int spacemit_gpio_xlate(struct udevice *dev, struct gpio_desc *desc, + struct ofnode_phandle_args *args) +{ + struct spacemit_gpio_data *data; + u32 bank, offset, flags; + + data = (struct spacemit_gpio_data *)dev_get_driver_data(dev); + if (args->args_count < 3) { + dev_err(dev, "Invalid args count: %d, expected 3\n", + args->args_count); + return -EINVAL; + } + bank = args->args[0]; + offset = args->args[1]; + flags = args->args[2]; + + if (bank >= data->num_banks) { + dev_err(dev, "Invalid gpio bank: %u (max %u)\n", + bank, data->num_banks - 1); + return -EINVAL; + } + if (offset >= GPIO_BANK_SIZE) { + dev_err(dev, "Invalid offset: %u (max 31)\n", offset); + return -EINVAL; + } + desc->offset = bank * GPIO_BANK_SIZE + offset; + desc->flags = gpio_flags_xlate(flags); + return 0; +} + +static int spacemit_gpio_get_value(struct udevice *dev, unsigned int offset) +{ + struct spacemit_gpio_priv *priv = dev_get_priv(dev); + void __iomem *addr; + u32 value, mask; + + addr = priv->regs + REG_PLR(offset); + value = readl(addr); + mask = 1 << GPIO_TO_BIT(offset); + return !!(value & mask); +} + +static int spacemit_gpio_get_function(struct udevice *dev, unsigned int offset) +{ + struct spacemit_gpio_priv *priv = dev_get_priv(dev); + void __iomem *addr; + u32 value, mask; + + addr = priv->regs + REG_PDR(offset); + value = readl(addr); + mask = 1 << GPIO_TO_BIT(offset); + if (value & mask) + return GPIOF_OUTPUT; + return GPIOF_INPUT; +} + +static int spacemit_gpio_get_flags(struct udevice *dev, unsigned int offset, + ulong *flagsp) +{ + ulong flags = 0; + u32 dir; + + dir = spacemit_gpio_get_function(dev, offset); + if (dir) { + flags |= GPIOD_IS_OUT; + if (spacemit_gpio_get_value(dev, offset)) + flags |= GPIOD_IS_OUT_ACTIVE; + } else { + flags |= GPIOD_IS_IN; + } + *flagsp = flags; + return 0; +} + +static int spacemit_gpio_set_flags(struct udevice *dev, unsigned int offset, + ulong flags) +{ + struct spacemit_gpio_priv *priv = dev_get_priv(dev); + void __iomem *addr; + int value; + + value = (flags & GPIOD_IS_OUT_ACTIVE) ? 1 : 0; + if (flags & GPIOD_IS_IN) { + addr = priv->regs + REG_CDR(offset); + writel(1 << GPIO_TO_BIT(offset), addr); + } + if (flags & GPIOD_IS_OUT) { + if (value) { + addr = priv->regs + REG_PSR(offset); + writel(1 << GPIO_TO_BIT(offset), addr); + } else { + addr = priv->regs + REG_PCR(offset); + writel(1 << GPIO_TO_BIT(offset), addr); + } + addr = priv->regs + REG_SDR(offset); + writel(1 << GPIO_TO_BIT(offset), addr); + } + return 0; +} + +static int spacemit_gpio_request(struct udevice *dev, unsigned int offset, + const char *label) +{ + const struct pinctrl_ops *ops; + struct udevice *pctldev; + int ret; + + ret = uclass_first_device_err(UCLASS_PINCTRL, &pctldev); + if (ret) + return ret; + + ops = pinctrl_get_ops(pctldev); + if (!ops->gpio_request_enable) + return -ENOSYS; + + return ops->gpio_request_enable(pctldev, offset); +} + +static int spacemit_gpio_rfree(struct udevice *dev, unsigned int offset) +{ + const struct pinctrl_ops *ops; + struct udevice *pctldev; + int ret; + + ret = uclass_first_device_err(UCLASS_PINCTRL, &pctldev); + if (ret) + return ret; + + ops = pinctrl_get_ops(pctldev); + if (!ops->gpio_disable_free) + return -ENOSYS; + + return ops->gpio_disable_free(pctldev, offset); +} + +static const struct dm_gpio_ops spacemit_gpio_ops = { + .request = spacemit_gpio_request, + .rfree = spacemit_gpio_rfree, + .xlate = spacemit_gpio_xlate, + .get_value = spacemit_gpio_get_value, + .get_function = spacemit_gpio_get_function, + .get_flags = spacemit_gpio_get_flags, + .set_flags = spacemit_gpio_set_flags, +}; + +static int spacemit_gpio_probe(struct udevice *dev) +{ + struct spacemit_gpio_priv *priv; + struct spacemit_gpio_data *data; + struct gpio_dev_priv *uc_priv = dev_get_uclass_priv(dev); + struct clk_bulk clks; + int ret; + + data = (struct spacemit_gpio_data *)dev_get_driver_data(dev); + priv = dev_get_priv(dev); + priv->regs = dev_read_addr_ptr(dev); + if (!priv->regs) { + dev_err(dev, "Fail to get base address\n"); + return -EINVAL; + } + uc_priv->bank_name = "GPIO"; + uc_priv->gpio_count = data->gpio_count; + uc_priv->gpio_base = data->gpio_base; + + ret = clk_get_bulk(dev, &clks); + if (ret) { + dev_err(dev, "Fail to get bulk clks\n"); + return ret; + } + ret = clk_enable_bulk(&clks); + if (ret) { + dev_err(dev, "Fail to enable bulk clks\n"); + goto out; + } + return 0; +out: + clk_release_bulk(&clks); + return ret; +} + +static const struct spacemit_gpio_data k1_gpio_data = { + .num_banks = 4, + .gpio_count = 128, + .gpio_base = 0, +}; + +static const struct udevice_id spacemit_gpio_ids[] = { + { .compatible = "spacemit,k1-gpio", .data = (uintptr_t)&k1_gpio_data, }, + { /* sentinel */ } +}; + +U_BOOT_DRIVER(k1_gpio) = { + .name = "spacemit_k1_gpio", + .id = UCLASS_GPIO, + .of_match = spacemit_gpio_ids, + .ops = &spacemit_gpio_ops, + .priv_auto = sizeof(struct spacemit_gpio_priv), + .probe = spacemit_gpio_probe, +}; From patchwork Wed May 20 10:45:53 2026 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guodong Xu X-Patchwork-Id: 2240786 X-Patchwork-Delegate: tim609@andestech.com Return-Path: X-Original-To: incoming@patchwork.ozlabs.org Delivered-To: patchwork-incoming@legolas.ozlabs.org Authentication-Results: legolas.ozlabs.org; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.a=rsa-sha256 header.s=20251104 header.b=rK2ozr6c; dkim-atps=neutral Authentication-Results: legolas.ozlabs.org; spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de (client-ip=2a01:238:438b:c500:173d:9f52:ddab:ee01; helo=phobos.denx.de; envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org) Received: from phobos.denx.de (phobos.denx.de [IPv6:2a01:238:438b:c500:173d:9f52:ddab:ee01]) (using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits) key-exchange x25519) (No client certificate requested) by legolas.ozlabs.org (Postfix) with ESMTPS id 4gKqdQ0CPSz1yDb for ; Wed, 20 May 2026 08:50:34 +1000 (AEST) Received: from h2850616.stratoserver.net (localhost [IPv6:::1]) by phobos.denx.de (Postfix) with ESMTP id D16A984895; Wed, 20 May 2026 00:50:31 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de Authentication-Results: phobos.denx.de; dkim=pass (2048-bit key; unprotected) header.d=riscstar-com.20251104.gappssmtp.com header.i=@riscstar-com.20251104.gappssmtp.com header.b="rK2ozr6c"; dkim-atps=neutral Received: by phobos.denx.de (Postfix, from userid 109) id C92E78489C; Wed, 20 May 2026 00:50:30 +0200 (CEST) X-Spam-Checker-Version: SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de X-Spam-Level: X-Spam-Status: No, score=0.0 required=5.0 tests=BAYES_00, DATE_IN_FUTURE_06_12, DKIM_SIGNED,DKIM_VALID,RCVD_IN_DNSWL_BLOCKED,SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2 Received: from mail-pj1-x102a.google.com (mail-pj1-x102a.google.com [IPv6:2607:f8b0:4864:20::102a]) (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits)) (No client certificate requested) by phobos.denx.de (Postfix) with ESMTPS id 7E04D846A5 for ; Wed, 20 May 2026 00:50:28 +0200 (CEST) Authentication-Results: phobos.denx.de; dmarc=fail (p=none dis=none) header.from=riscstar.com Authentication-Results: phobos.denx.de; spf=pass smtp.mailfrom=guodong@riscstar.com Received: by mail-pj1-x102a.google.com with SMTP id 98e67ed59e1d1-36974220e45so1652822a91.0 for ; Tue, 19 May 2026 15:50:28 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=riscstar-com.20251104.gappssmtp.com; s=20251104; t=1779231026; x=1779835826; darn=lists.denx.de; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=rys0EgrKnVrUGXjmMI9wK+LqZWSyvwEQT6JziotZhaU=; b=rK2ozr6cCG6FQtDdoL/eEeTU8K87bVdAwnLjpf1f6cKlhtz6v6QSKoKUbpvuUannzQ rG4i83vqms5L9KFKh1EEM/ZYVV695wUNHYFXWwYICpXuxuAhCpBPBgeLKnut2OaENG8P ViLBxHxaCADWnENR+hqqmRkozK64pOA9FX7DZbrdJicVUzMYNBb6YeOMbhcY/UO91J1S 6RVLnoPfZI8zFFT271U6J+yxP+NYUb4Kt49I6gT5e3LF99ePws7mQBgdJdCcXItNk9fS vtnGBFH/nO/YbjKSfsUX3KR2yJkgVyLBOVamYGoOkIpTT3twkBf4HsJZH2vaCsQRD02g OdKg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1779231026; x=1779835826; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-gg:x-gm-message-state:from:to :cc:subject:date:message-id:reply-to; bh=rys0EgrKnVrUGXjmMI9wK+LqZWSyvwEQT6JziotZhaU=; b=c7GGltu9PhX1EVSDn7YQ2xjPURhubBgT8+Bt0Dfnn/DuE/HHgnRhbO3yIC1/gJ1oET FM23pbvuipGPPSIOiWkMiLzIJeGGolgWKJXpi0lzzQkK2eU0Vg65U+zIZBUTvf0m72gd vXM/LdB2eK89wx+aRZ0pPhme8zbNUdax1Fzmo66eTCrAqYXhhUTQfH5rYcZb44HRuMyG 30MSqzKBIo+bHSJCcKLCyc4AWlfIZ0hHc0VWA/zQYZRodjwTaWE7DiUIi9ttvcoHFtRm dCzk39qEGuCx7lj0yNoLnWLXnPMy5rUCQWpyhWGCzmzHp24CUsHt1MsYfCfymdko7gBE ccVQ== X-Forwarded-Encrypted: i=1; AFNElJ/VhHqnfi8SPQ+6U3zmpn7gKkHwHoLliCifz+6Iiej2cu2srSS1081k3L/0BgRExLDmNWyEwXY=@lists.denx.de X-Gm-Message-State: AOJu0YygAx+W3CuIH/jPJ264ffaNXhgVP4iK8Sf+gD0wPNp0RKTeE95O jvJk6AT6AbK7UQwwz5ggqaKOo+6o7pMYwQ0qsyswgK+TckrRQUw5AAMXzIsHQj6BdNw= X-Gm-Gg: Acq92OFJlHrOliUg1Ui2v3Ea6UVdfs9QMdFCw3iy8wkWZ9rOVQW7eCbLho1d/BbAhCn 6hECeKKTP3jhMLIqrR6Pw2ZJPQxKa0FwnQyY+RDLa9yJ1kmRZg9oIFRNm1nnTyQqGXQI4QpmRm/ lKSuq3OU0Is+3K1fmvns3mEPpqbUmt1VYj+uZ6luezGi9O7WppC/MNgjjrYPafgQsBO7L6aIdI4 gD7n88h4BK6OONGElZVn9+c0VN89j+yKtnllszzhDigtuhMZR5h4JxKbSZDGMbneSC18Qdfi7YC TEU8t4vRtllqy7KmhCvvLFDB/+ySEvL2JsEW0vewENlrd92/3jUXYoa5FyvanrdcUXgSoAhVvLn n4IqyN+j8cSKAG1x7P3Z6EAejnKH6Pt6WSQZDXdetlOkwLDE7NCUhjIeWjhTOoLi1PfCYOHWaBU faEfDpUZqLB6kCNe/A/EIdRlJa5xn9/Ed7DZqjti5Gt7f4JmOLfniNjw== X-Received: by 2002:a17:90b:1c0d:b0:369:e9a2:6b with SMTP id 98e67ed59e1d1-369e9a202d6mr5467523a91.13.1779231026316; Tue, 19 May 2026 15:50:26 -0700 (PDT) Received: from [127.0.1.1] ([2a12:a305:4::4073]) by smtp.gmail.com with ESMTPSA id 98e67ed59e1d1-3695a0e93e0sm5720707a91.10.2026.05.19.15.49.58 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Tue, 19 May 2026 15:50:25 -0700 (PDT) From: Guodong Xu Date: Wed, 20 May 2026 06:45:53 -0400 Subject: [PATCH v2 9/9] configs: k1: enable pinctrl and gpio MIME-Version: 1.0 Message-Id: <20260520-b4-k1-spl-pinctrl-spinor-v2-9-8d25db98ac8e@riscstar.com> References: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> In-Reply-To: <20260520-b4-k1-spl-pinctrl-spinor-v2-0-8d25db98ac8e@riscstar.com> To: Takahiro Kuwano , u-boot@lists.denx.de, u-boot-spacemit@groups.io Cc: Vignesh R , Tom Rini , Raymond Mao , Rick Chen , Leo , Huan Zhou , Peng Fan , Sam Protsenko , Mayuresh Chitale , Yao Zi , Anis Chali , Dan Carpenter , Sean Anderson , Heiko Schocher , Rasmus Villemoes , Philip Molloy , Michal Simek , Yegor Yefremov , Eoin Dickson , Tanmay Kathpalia , Sumit Garg , Casey Connolly , Neil Armstrong , Guodong Xu , Rui Miguel Silva , Guodong Xu X-Mailer: b4 0.15.1 X-BeenThere: u-boot@lists.denx.de X-Mailman-Version: 2.1.39 Precedence: list List-Id: U-Boot discussion List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Errors-To: u-boot-bounces@lists.denx.de Sender: "U-Boot" X-Virus-Scanned: clamav-milter 0.103.8 at phobos.denx.de X-Virus-Status: Clean Enable pinctrl and gpio configurations for Spacemit K1 SoC. Signed-off-by: Raymond Mao Signed-off-by: Guodong Xu --- v2: - Also enable CONFIG_CLK and CONFIG_CLK_CCF (U-Boot proper). --- board/spacemit/k1/MAINTAINERS | 3 +++ configs/spacemit_k1_defconfig | 8 +++++++- 2 files changed, 10 insertions(+), 1 deletion(-) diff --git a/board/spacemit/k1/MAINTAINERS b/board/spacemit/k1/MAINTAINERS index 8976c575dff..32d47ecc8f1 100644 --- a/board/spacemit/k1/MAINTAINERS +++ b/board/spacemit/k1/MAINTAINERS @@ -3,9 +3,12 @@ M: Huan Zhou M: Guodong Xu L: u-boot-spacemit@groups.io 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: drivers/gpio/spacemit_gpio.c F: drivers/i2c/k1_i2c.c +F: drivers/pinctrl/spacemit/ F: drivers/power/pmic/pmic_spacemit_p1.c F: drivers/power/regulator/spacemit_p1_regulator.c diff --git a/configs/spacemit_k1_defconfig b/configs/spacemit_k1_defconfig index 465788cc2e5..0604c2feefc 100644 --- a/configs/spacemit_k1_defconfig +++ b/configs/spacemit_k1_defconfig @@ -49,6 +49,8 @@ CONFIG_OF_UPSTREAM=y CONFIG_ENV_OVERWRITE=y CONFIG_SPL_REGMAP=y CONFIG_SPL_SYSCON=y +CONFIG_CLK=y +CONFIG_CLK_CCF=y CONFIG_SPL_CLK=y CONFIG_SPL_CLK_CCF=y CONFIG_CLK_SPACEMIT=y @@ -59,7 +61,11 @@ CONFIG_MISC=y CONFIG_I2C_EEPROM=y CONFIG_SPL_I2C_EEPROM=y CONFIG_PINCTRL=y -CONFIG_PINCTRL_SINGLE=y +CONFIG_PINCTRL_SPACEMIT_K1=y +CONFIG_GPIO=y +CONFIG_DM_GPIO=y +CONFIG_CMD_GPIO=y +CONFIG_SPACEMIT_GPIO=y CONFIG_DM_PMIC=y CONFIG_PMIC_SPACEMIT_P1=y CONFIG_DM_REGULATOR=y