From nobody Sat Jul 25 05:59:52 2026 Received: from mail-wm1-f43.google.com (mail-wm1-f43.google.com [209.85.128.43]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 201C93BBFA9 for ; Fri, 17 Jul 2026 07:59:39 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.43 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784275183; cv=none; b=ac/qutREUvC6RKJECv1Ft8Tf1xoy7ZxOoy8rAzP+JBOSvtYxJr0ptZ2cnU2yUm8W6pR8sKx4JRX25p0kyRyKY3IqyaqLlIPiCuh4WxU5Fq4LN4XQAkI/UwDCqy7SuS0gosLLY1oHlKfLpyF597bMctd6io0qlrPeTa9v/mpkfeM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784275183; c=relaxed/simple; bh=rZOmbgFf4ozi62Otz7lhmFLdZvRCtMNSmJamThzyCB4=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=KdRzlS9Y4UF0jIDaOj5triSsZPP3FcqTpLVSS5sS8rZKp0NFAZvyEI/WFke6TwatlOc4Dno0hS4nJEK593GAeGaxOVWOa61htOILwYl4VXOTDLhbauxXT13XJUUTO+cf9VaKbUrE/LDJCd4uSLzRjQJJXLnykMc1x7pFySd2Z8A= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ahdrone.com; spf=pass smtp.mailfrom=ahdrone.com; dkim=pass (2048-bit key) header.d=ahdrone.com header.i=@ahdrone.com header.b=EuTfwhVv; arc=none smtp.client-ip=209.85.128.43 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ahdrone.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ahdrone.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ahdrone.com header.i=@ahdrone.com header.b="EuTfwhVv" Received: by mail-wm1-f43.google.com with SMTP id 5b1f17b1804b1-493b966dd74so30288975e9.3 for ; Fri, 17 Jul 2026 00:59:39 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ahdrone.com; s=google; t=1784275178; x=1784879978; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=vDUk8y/EEhZBBu0L9bqDdy+tbB8EaRNIICnHcrc2lYI=; b=EuTfwhVv7n2/LA3Y3i1AIpTCDn23zKh2YPfpq+pxD/x7YE4hGA1h+vhzftc8+03L42 LYG/FV3c/tHtVb9lLVptzoVUc2QohPSJLAehZlOnvReVapkAvGyhl1hAUymeb+lRsk37 BmrQLuK2zu5RRuWey95dGF0BgvIKngAa6we2pVce7ZyROcxAIoSOxY0ZPFbLao/DWPOi HhvjbNO8zeRDGp/zPZ9lUhlhTc8Av2flu+wqmIlBXOzBPUr36NwhGZdOmRnHX91BWF21 coPWsxy+w2jDIAMElElubFZlvB8bB4Nw0OL+qHsvs2qnZixURE8ILIZYTex01CgctdyZ zm5g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784275178; x=1784879978; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=vDUk8y/EEhZBBu0L9bqDdy+tbB8EaRNIICnHcrc2lYI=; b=QOHidnoWaClxmhs8u0UeVdqy5QukyXg+O+vnf+PasdhT1jUnTNiSOtcuyCEL710FLQ Av10kyDaCybWYQRmksjvoNnVO/OWEWhILj5QoOHxiuhQoUzaoarOo2bj9W6XUCIbLSzk G2PkYGKRUVZTj23rLK+4qaNbPl4JwckX+V6JrYQ8N46khlD2QFeYTrvOUMSzVgJIU4a3 rkb3E8hvu+p1je2eJIF40MMLh7FIREkO5tqKbM2OHvXzgj4KML85jWq/6+zvhsqsIV0h KXoLtL/HwvCMXByoblbUBT+px8m7MVZ2+8+HxhOW5ZYsl5V53QvxIdpK0YkVd74LIL7/ cA7w== X-Forwarded-Encrypted: i=1; AHgh+RqoejT9h/wNxqNyUEwVBY0Y+ZK2857imVUNpMKMBcr4gXI7xvr+TD2OdSHuuvktLiS/2ETzF+FjN5iTWAY=@vger.kernel.org X-Gm-Message-State: AOJu0YwUOuY/s7TtP6KVaHwwZ8iFh44mHbCY/8UHoJ4+neBrbxavGbJI bLM81kfMktY6QtyuQyFCJSjcbidLiM70RE6zRgKA/c7EcANKUDxhuDkxtejuIbXkFw== X-Gm-Gg: AfdE7clSC+TmT+yfY+GQgFvd6qVs3K1/e+CFcZgtz2IN3hjn+gZ4Ki0zSM8Cg2JOllp yZEP1HHss8JaeQVzZUeVS6n845thyJSc3/zjxUmd6kcEly7XzE0j5qJeYuJKb3mocqwhoYcNkAQ dKRkRQZe8Tg0h4eDAVCUN9ps8Q5hsWlPVkhz3s3C5Eit57JPEr8KX+Q9U4hXRTHDDoNcdfDXl5k XCm2M4ZCtxkkKBnogvIbURzwLqoBPN4dx1xHSgk5dv7HuO37RoDlqfX7lnQWyrOKLAkaQga0Tx0 8NEK4eKQS3fNC5AR+4Ri8L8XHhjviw1OMumnVZ/6y13tOQ01AS89RVIYr1WSfY/j8CME2RAK12e jou2rzHptdj1yOvr9UArg60pE+h0C8wiNhWGM9OyE06XXPZ4UQ6GSXYUsh1P6DYsv4cZEUwq7Jq FEacpePGHUaIkMb7UNsaXzfidXcWAkLOMQMScy X-Received: by 2002:a05:600c:3b8e:b0:495:4bf3:2150 with SMTP id 5b1f17b1804b1-4954bf3216amr5291465e9.8.1784275178234; Fri, 17 Jul 2026 00:59:38 -0700 (PDT) Received: from rikus ([2a01:e0a:edb:6330:cc2f:bd70:58a:fcfb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549a3e2a9sm31709045e9.4.2026.07.17.00.59.37 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 00:59:37 -0700 (PDT) From: Hugo VALTIER To: Linus Walleij , Heiko Stuebner Cc: Hugo VALTIER , linux-gpio@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Dmitry Yashin , Luca Ceresoli , Jonas Karlman Subject: [PATCH 1/3] pinctrl: rockchip: constify mux recalced and route data arrays Date: Fri, 17 Jul 2026 09:59:14 +0200 Message-ID: <20260717075918.1869879-2-hugo@ahdrone.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260717075918.1869879-1-hugo@ahdrone.com> References: <20260717075918.1869879-1-hugo@ahdrone.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The mux_recalced_data and mux_route_data arrays are never modified after initialization. Mark them const so they can be placed in read-only memory. Also constify the corresponding struct fields in rockchip_pin_ctrl and local pointer variables. This is inspired by review comments on Dmitry Yashin's earlier RK3308B series [1]. [1] https://lore.kernel.org/all/20240515121634.23945-1-dmt.yashin@gmail.com/ Signed-off-by: Hugo VALTIER --- drivers/pinctrl/pinctrl-rockchip.c | 34 +++++++++++++++--------------- drivers/pinctrl/pinctrl-rockchip.h | 4 ++-- 2 files changed, 19 insertions(+), 19 deletions(-) diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-r= ockchip.c index 7e0fcd45fd26..849e72f1832c 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -483,7 +483,7 @@ static struct rockchip_mux_recalced_data rv1103b_mux_re= calced_data[] =3D { }, }; =20 -static struct rockchip_mux_recalced_data rv1108_mux_recalced_data[] =3D { +static const struct rockchip_mux_recalced_data rv1108_mux_recalced_data[] = =3D { { .num =3D 1, .pin =3D 0, @@ -547,7 +547,7 @@ static struct rockchip_mux_recalced_data rv1108_mux_rec= alced_data[] =3D { }, }; =20 -static struct rockchip_mux_recalced_data rv1126_mux_recalced_data[] =3D { +static const struct rockchip_mux_recalced_data rv1126_mux_recalced_data[] = =3D { { .num =3D 0, .pin =3D 20, @@ -578,7 +578,7 @@ static struct rockchip_mux_recalced_data rv1126_mux_rec= alced_data[] =3D { }, }; =20 -static struct rockchip_mux_recalced_data rk3128_mux_recalced_data[] =3D { +static const struct rockchip_mux_recalced_data rk3128_mux_recalced_data[] = =3D { { .num =3D 2, .pin =3D 20, @@ -612,7 +612,7 @@ static struct rockchip_mux_recalced_data rk3128_mux_re= calced_data[] =3D { }, }; =20 -static struct rockchip_mux_recalced_data rk3308_mux_recalced_data[] =3D { +static const struct rockchip_mux_recalced_data rk3308_mux_recalced_data[] = =3D { { /* gpio1b6_sel */ .num =3D 1, @@ -721,7 +721,7 @@ static struct rockchip_mux_recalced_data rk3308_mux_rec= alced_data[] =3D { }, }; =20 -static struct rockchip_mux_recalced_data rk3328_mux_recalced_data[] =3D { +static const struct rockchip_mux_recalced_data rk3328_mux_recalced_data[] = =3D { { /* gpio2_b7_sel */ .num =3D 2, @@ -793,7 +793,7 @@ static void rockchip_get_recalced_mux(struct rockchip_p= in_bank *bank, int pin, { struct rockchip_pinctrl *info =3D bank->drvdata; struct rockchip_pin_ctrl *ctrl =3D info->ctrl; - struct rockchip_mux_recalced_data *data; + const struct rockchip_mux_recalced_data *data; int i; =20 for (i =3D 0; i < ctrl->niomux_recalced; i++) { @@ -811,7 +811,7 @@ static void rockchip_get_recalced_mux(struct rockchip_p= in_bank *bank, int pin, *bit =3D data->bit; } =20 -static struct rockchip_mux_route_data px30_mux_route_data[] =3D { +static const struct rockchip_mux_route_data px30_mux_route_data[] =3D { RK_MUXROUTE_SAME(2, RK_PB4, 1, 0x184, BIT(16 + 7)), /* cif-d0m0 */ RK_MUXROUTE_SAME(3, RK_PA1, 3, 0x184, BIT(16 + 7) | BIT(7)), /* cif-d0m1 = */ RK_MUXROUTE_SAME(2, RK_PB6, 1, 0x184, BIT(16 + 7)), /* cif-d1m0 */ @@ -862,7 +862,7 @@ static struct rockchip_mux_route_data px30_mux_route_da= ta[] =3D { RK_MUXROUTE_SAME(1, RK_PB5, 2, 0x184, BIT(16 + 9) | BIT(9)), /* uart3-rts= m1 */ }; =20 -static struct rockchip_mux_route_data rv1126_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rv1126_mux_route_data[] =3D { RK_MUXROUTE_GRF(3, RK_PD2, 1, 0x10260, WRITE_MASK_VAL(0, 0, 0)), /* I2S0_= MCLK_M0 */ RK_MUXROUTE_GRF(3, RK_PB0, 3, 0x10260, WRITE_MASK_VAL(0, 0, 1)), /* I2S0_= MCLK_M1 */ =20 @@ -959,7 +959,7 @@ static struct rockchip_mux_route_data rv1126_mux_route_= data[] =3D { RK_MUXROUTE_PMU(1, RK_PD0, 5, 0x0118, WRITE_MASK_VAL(2, 2, 1)), /* UART1_= TX_M1 */ }; =20 -static struct rockchip_mux_route_data rk3128_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3128_mux_route_data[] =3D { RK_MUXROUTE_SAME(1, RK_PB2, 1, 0x144, BIT(16 + 3) | BIT(16 + 4)), /* spi-= 0 */ RK_MUXROUTE_SAME(1, RK_PD3, 3, 0x144, BIT(16 + 3) | BIT(16 + 4) | BIT(3))= , /* spi-1 */ RK_MUXROUTE_SAME(0, RK_PB5, 2, 0x144, BIT(16 + 3) | BIT(16 + 4) | BIT(4))= , /* spi-2 */ @@ -969,12 +969,12 @@ static struct rockchip_mux_route_data rk3128_mux_rout= e_data[] =3D { RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x144, BIT(16 + 6) | BIT(6)), /* emmc-1 */ }; =20 -static struct rockchip_mux_route_data rk3188_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3188_mux_route_data[] =3D { RK_MUXROUTE_SAME(0, RK_PD0, 1, 0xa0, BIT(16 + 11)), /* non-iomuxed emmc/f= lash pins on flash-dqs */ RK_MUXROUTE_SAME(0, RK_PD0, 2, 0xa0, BIT(16 + 11) | BIT(11)), /* non-iomu= xed emmc/flash pins on emmc-clk */ }; =20 -static struct rockchip_mux_route_data rk3228_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3228_mux_route_data[] =3D { RK_MUXROUTE_SAME(0, RK_PD2, 1, 0x50, BIT(16)), /* pwm0-0 */ RK_MUXROUTE_SAME(3, RK_PC5, 1, 0x50, BIT(16) | BIT(0)), /* pwm0-1 */ RK_MUXROUTE_SAME(0, RK_PD3, 1, 0x50, BIT(16 + 1)), /* pwm1-0 */ @@ -995,12 +995,12 @@ static struct rockchip_mux_route_data rk3228_mux_rout= e_data[] =3D { RK_MUXROUTE_SAME(3, RK_PB5, 1, 0x50, BIT(16 + 11) | BIT(11)), /* uart1-1_= rx */ }; =20 -static struct rockchip_mux_route_data rk3288_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3288_mux_route_data[] =3D { RK_MUXROUTE_SAME(7, RK_PC0, 2, 0x264, BIT(16 + 12) | BIT(12)), /* edphdmi= _cecinoutt1 */ RK_MUXROUTE_SAME(7, RK_PC7, 4, 0x264, BIT(16 + 12)), /* edphdmi_cecinout = */ }; =20 -static struct rockchip_mux_route_data rk3308_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3308_mux_route_data[] =3D { RK_MUXROUTE_SAME(0, RK_PC3, 1, 0x314, BIT(16 + 0) | BIT(0)), /* rtc_clk */ RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x314, BIT(16 + 2) | BIT(16 + 3)), /* uart= 2_rxm0 */ RK_MUXROUTE_SAME(4, RK_PD2, 2, 0x314, BIT(16 + 2) | BIT(16 + 3) | BIT(2))= , /* uart2_rxm1 */ @@ -1016,7 +1016,7 @@ static struct rockchip_mux_route_data rk3308_mux_rout= e_data[] =3D { RK_MUXROUTE_SAME(2, RK_PA4, 3, 0x600, BIT(16 + 2) | BIT(2)), /* pdm-clkm-= m2 */ }; =20 -static struct rockchip_mux_route_data rk3328_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3328_mux_route_data[] =3D { RK_MUXROUTE_SAME(1, RK_PA1, 2, 0x50, BIT(16) | BIT(16 + 1)), /* uart2dbg_= rxm0 */ RK_MUXROUTE_SAME(2, RK_PA1, 1, 0x50, BIT(16) | BIT(16 + 1) | BIT(0)), /* = uart2dbg_rxm1 */ RK_MUXROUTE_SAME(1, RK_PB3, 2, 0x50, BIT(16 + 2) | BIT(2)), /* gmac-m1_rx= d0 */ @@ -1031,7 +1031,7 @@ static struct rockchip_mux_route_data rk3328_mux_rout= e_data[] =3D { RK_MUXROUTE_SAME(2, RK_PC0, 4, 0x50, BIT(16 + 9) | BIT(9)), /* cif_data5m= 1 */ }; =20 -static struct rockchip_mux_route_data rk3399_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3399_mux_route_data[] =3D { RK_MUXROUTE_SAME(4, RK_PB0, 2, 0xe21c, BIT(16 + 10) | BIT(16 + 11)), /* u= art2dbga_rx */ RK_MUXROUTE_SAME(4, RK_PC0, 2, 0xe21c, BIT(16 + 10) | BIT(16 + 11) | BIT(= 10)), /* uart2dbgb_rx */ RK_MUXROUTE_SAME(4, RK_PC3, 1, 0xe21c, BIT(16 + 10) | BIT(16 + 11) | BIT(= 11)), /* uart2dbgc_rx */ @@ -1039,7 +1039,7 @@ static struct rockchip_mux_route_data rk3399_mux_rout= e_data[] =3D { RK_MUXROUTE_SAME(4, RK_PD0, 1, 0xe21c, BIT(16 + 14) | BIT(14)), /* pcie_c= lkreqnb */ }; =20 -static struct rockchip_mux_route_data rk3568_mux_route_data[] =3D { +static const struct rockchip_mux_route_data rk3568_mux_route_data[] =3D { RK_MUXROUTE_PMU(0, RK_PB7, 1, 0x0110, WRITE_MASK_VAL(1, 0, 0)), /* PWM0 I= O mux M0 */ RK_MUXROUTE_PMU(0, RK_PC7, 2, 0x0110, WRITE_MASK_VAL(1, 0, 1)), /* PWM0 I= O mux M1 */ RK_MUXROUTE_PMU(0, RK_PC0, 1, 0x0110, WRITE_MASK_VAL(3, 2, 0)), /* PWM1 I= O mux M0 */ @@ -1140,7 +1140,7 @@ static bool rockchip_get_mux_route(struct rockchip_pi= n_bank *bank, int pin, { struct rockchip_pinctrl *info =3D bank->drvdata; struct rockchip_pin_ctrl *ctrl =3D info->ctrl; - struct rockchip_mux_route_data *data; + const struct rockchip_mux_route_data *data; int i; =20 for (i =3D 0; i < ctrl->niomux_routes; i++) { diff --git a/drivers/pinctrl/pinctrl-rockchip.h b/drivers/pinctrl/pinctrl-r= ockchip.h index bb0e803e3b8a..dd07a16f615c 100644 --- a/drivers/pinctrl/pinctrl-rockchip.h +++ b/drivers/pinctrl/pinctrl-rockchip.h @@ -400,9 +400,9 @@ struct rockchip_pin_ctrl { int pmu_mux_offset; int grf_drv_offset; int pmu_drv_offset; - struct rockchip_mux_recalced_data *iomux_recalced; + const struct rockchip_mux_recalced_data *iomux_recalced; u32 niomux_recalced; - struct rockchip_mux_route_data *iomux_routes; + const struct rockchip_mux_route_data *iomux_routes; u32 niomux_routes; =20 int (*pull_calc_reg)(struct rockchip_pin_bank *bank, --=20 2.55.0 From nobody Sat Jul 25 05:59:52 2026 Received: from mail-wm1-f54.google.com (mail-wm1-f54.google.com [209.85.128.54]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 2AD6832B118 for ; Fri, 17 Jul 2026 07:59:40 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.54 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784275183; cv=none; b=RspRW0YN+DnZ7EQbQePfrS65zl8YCmiFCdJ6SenumtdyT4zs07/KrGK1UfpvtHZKsO9mHxn9tlTQYvZ0C++qQCkb8KK9/6FVZ086BvBAYj/Ij4x/lXqJeh7oGiiBCQtOBY4dGNfeRs17IKYl+tYEQamj14ZZuGA9xDUP8c7vRxM= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784275183; c=relaxed/simple; bh=tY5LtCog3bBSuxWmg/ghDO/sg4Hm8rhLygYbFqsWMNw=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=L/r1uNqH1hZFteqfLM4IQ2o7shT80gZgrGy4Kp3odVC0wWomk8gryXkZwkdzJERVX+t44cHsu3v7esPDSt8inrVA+Pw1f42uuxeqdpBYnIPak+eVsOG3B1hImvTsiFTgOJ1y+tx3V3xirj4ncu7ycPElj4j5HRex31Zqm3Mj4r0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ahdrone.com; spf=pass smtp.mailfrom=ahdrone.com; dkim=pass (2048-bit key) header.d=ahdrone.com header.i=@ahdrone.com header.b=Hv/WGoJf; arc=none smtp.client-ip=209.85.128.54 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ahdrone.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ahdrone.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ahdrone.com header.i=@ahdrone.com header.b="Hv/WGoJf" Received: by mail-wm1-f54.google.com with SMTP id 5b1f17b1804b1-493b1710405so42184585e9.2 for ; Fri, 17 Jul 2026 00:59:40 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ahdrone.com; s=google; t=1784275179; x=1784879979; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=yyWkM6zopcr2MMl5SvPrurm7WiNsCcjkD9OPElmEF7w=; b=Hv/WGoJfmq6RaFSqbBca3GnvwRAS4bkPSYQ2K2PcAzb+R2EwL8JXt+sDMD1Z8B+2qT 3f3/21CJ+JaSSWPBPApiXQGQTzrAgD257jKNbLx5O9UWhD/gYC9qZVV7Hm7IMd5W9BLt 8nctvq5u8uJ0oMnNl71PMCBceIhXTgmXs4mtKV6IeGFRbbeVQtTkByiWIu9YYDXIRE4R i+c2daRrIAsalIQp0eir1wcbKxXNlsJQ6nwPF1AWOVWix+Buirv5SG9OEZmoIqa6VCpC uVc/c44hnlWIlhPIn+ETud9/l9oB4C7hJsY3gm+BMgDgwM1RjnQwmEuDMozUjJudeTQu h25g== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784275179; x=1784879979; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=yyWkM6zopcr2MMl5SvPrurm7WiNsCcjkD9OPElmEF7w=; b=A/mgyj08Mv379rv68HrVDoF6lsjr4ndZECx+7EmpluFgFRbDp+tJe7ahCSS5Nc7oEI fA1a8qqphcvhvXzxsG2ITgCxbZ8zcRYvslWYsZH0UDQMjZmQwfA/NGpsQ1VzSITrbpJf B1KDz9SgFMEdbvl9+s7dFdvpl4IzO+hZK1LEzp+Y+6qThfJfS0r0iN+kST49+D1U6M/D /617W1ylv93mEvwTaoFQaKqsGswFCumgw+6r0Jp2pcqxUIOZ3cN+lAePf872ZMuprFgl iKH8qYmbdff2Q3HDu6LbS7riQ3yGUyk0z03oHVEgjpu06OPrOxQ8LD7yUN/qdwsOVA/B e5kQ== X-Forwarded-Encrypted: i=1; AHgh+RrRirJEDAxVWly/y6+JGUUWtujV1BEWGFKk2Y0HDcJHebyaN7FaYilbxTtPhdAH1tchYuKkrS+nnqw0Nec=@vger.kernel.org X-Gm-Message-State: AOJu0YwkKSk0l/l/WWjNo+3sGGbplkSXhZwq7Nidk+S5+Fcfh0cDyqvj TK2+aL5gWdu8ErWOevO7V8FE3lIKkI3qg/0p+uu/HlsNEPLSFkx+2XO2tk2icZA4BQ== X-Gm-Gg: AfdE7cnr1Lbah8EVpg1varuWEHEbw56KXcrZhGaBQiuEMVfAzch4gPoNEcoHoe05KxP Mnf/y0HaMcJsb2v4vqZqyjmNQrEeS6YFTSP5dufZQtnW/EkEMRCyscjDG+9zSQYra7AIkmXlaFP AoF8tbDDSO58RuSkcBIyF8wRUD6PBWo3u2EDEdPwlQjWaexuPIcem0vFc2nrmZ0oZaCf4PXHhCM 0XsNKUMdcE29VMBz9eGwaSZg2cDDFzJnljQzyDzM4JZ2i9w5E6UDT1NeonToiXf/wdfDilTEC10 GZEtTvSVYYbvj/FpK41kESnZRAPutE8dTBb9hmOGnthQ+EhMweImlMAtp9f8TSIEadWrndQZF63 xU/Gy7sKRrCR/q1nugQe73Esu92EwerYZm/ZXaT0+EtG6gANNjITs7DTwiFLosxlirpVxiU6RPI zNAW3qv3nGHnOuD8iynhv/ine2sA== X-Received: by 2002:a05:600c:705:b0:495:3b8a:bf11 with SMTP id 5b1f17b1804b1-4954a515217mr10032355e9.26.1784275179062; Fri, 17 Jul 2026 00:59:39 -0700 (PDT) Received: from rikus ([2a01:e0a:edb:6330:cc2f:bd70:58a:fcfb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549a3e2a9sm31709045e9.4.2026.07.17.00.59.38 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 00:59:38 -0700 (PDT) From: Hugo VALTIER To: Linus Walleij , Heiko Stuebner Cc: Hugo VALTIER , linux-gpio@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Dmitry Yashin , Luca Ceresoli , Jonas Karlman Subject: [PATCH 2/3] pinctrl: rockchip: extract iomux_recalced_routes_init() Date: Fri, 17 Jul 2026 09:59:15 +0200 Message-ID: <20260717075918.1869879-3-hugo@ahdrone.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260717075918.1869879-1-hugo@ahdrone.com> References: <20260717075918.1869879-1-hugo@ahdrone.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" Extract the per-bank recalced_mask and route_mask computation out of rockchip_pinctrl_get_soc_data() into a separate function and call it from rockchip_pinctrl_probe(). This allows SoC-specific init code to swap the mux tables before the masks are computed. No functional change intended. Signed-off-by: Hugo VALTIER --- drivers/pinctrl/pinctrl-rockchip.c | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-r= ockchip.c index 849e72f1832c..549834501e7f 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -4370,7 +4370,18 @@ static struct rockchip_pin_ctrl *rockchip_pinctrl_ge= t_soc_data( =20 bank_pins +=3D 8; } + } + + return ctrl; +} + +static void iomux_recalced_routes_init(struct rockchip_pinctrl *info) +{ + struct rockchip_pin_ctrl *ctrl =3D info->ctrl; + struct rockchip_pin_bank *bank =3D ctrl->pin_banks; + int i, j; =20 + for (i =3D 0; i < ctrl->nr_banks; ++i, ++bank) { /* calculate the per-bank recalced_mask */ for (j =3D 0; j < ctrl->niomux_recalced; j++) { int pin =3D 0; @@ -4391,8 +4402,6 @@ static struct rockchip_pin_ctrl *rockchip_pinctrl_get= _soc_data( } } } - - return ctrl; } =20 #define RK3288_GRF_GPIO6C_IOMUX 0x64 @@ -4505,6 +4514,8 @@ static int rockchip_pinctrl_probe(struct platform_dev= ice *pdev) /* try to find the optional reference to the ioc1 syscon */ info->regmap_ioc1 =3D syscon_regmap_lookup_by_phandle_optional(np, "rockc= hip,ioc1"); =20 + iomux_recalced_routes_init(info); + ret =3D rockchip_pinctrl_register(pdev, info); if (ret) return ret; --=20 2.55.0 From nobody Sat Jul 25 05:59:52 2026 Received: from mail-wm1-f41.google.com (mail-wm1-f41.google.com [209.85.128.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id E60D13C1097 for ; Fri, 17 Jul 2026 07:59:41 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784275183; cv=none; b=hJzkQPQTP/VSYggA2wE+AEj+Kk0Z891n+sN+qe9YgsWhjCdA6R9MuZ7elcHM2duhrOAEMKErxgc86uww7KaLKTLMLL6OlJGtn7ww2gxCVLUZslocYLUcCdqRHqvmU4sz5ewf9aBy9m9Gy3ZMmthrv0isO7vMN1pvA3aK/hyoWNA= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1784275183; c=relaxed/simple; bh=ik4c/G4uy86LAlzRuTt2UPv2rP2AsEKlzQYBlmNQJL8=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=ZGTjvdytViBgoVbfSUj7Vl0H26DQbeif2oHbDM5LN5jek9m3Duvi6wzxYS5BMEx+JtVGgIIPAdIMgOPBdWQhPqj73VIcBbhb9L1ifuwChbbOuMSV4biaEQKmFec6doyP8Z+MGs9yYzuJ8o4jFTFsVs1E043x5HHBQYXc75f3Zyw= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ahdrone.com; spf=pass smtp.mailfrom=ahdrone.com; dkim=pass (2048-bit key) header.d=ahdrone.com header.i=@ahdrone.com header.b=by3MGExB; arc=none smtp.client-ip=209.85.128.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=none (p=none dis=none) header.from=ahdrone.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=ahdrone.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=ahdrone.com header.i=@ahdrone.com header.b="by3MGExB" Received: by mail-wm1-f41.google.com with SMTP id 5b1f17b1804b1-4954a752718so2817995e9.0 for ; Fri, 17 Jul 2026 00:59:41 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=ahdrone.com; s=google; t=1784275180; x=1784879980; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=HU+wBqy9NvGV22Z3snIreAVAlGAyOtwT2/uB1OzQT2E=; b=by3MGExBKCwRg2W3/fg4Jif/Xb5wOKUZQVkWigh6YhAlbWfcyPwLFWuZC4qTuUcBGl 9lKT1yDBBwFPO3osgtiaJqIv1pwKTDakT6ZkvSiMDVPHpqlwb6KcN99ZkuEotblji3Vo 5xgl1BtJPwx8XXO39yDKdlGroIO66jF4tqMQdJar6PYqhDzb/G2FJaxZb7lLZBzgNXVU 7+LI81zN9W5VVvpMAzprUgHQJnzWUbrnV5cwIhR+N8xHpTrCnUeMiGxQkhNDmGNpcnm0 X6abHWGVTBlCam4DvVWfJ+bjaKpbBkj+GL4ITYHWhhqpkpA72BiRGE90Dy8UHvK5BIO0 kVzg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1784275180; x=1784879980; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=HU+wBqy9NvGV22Z3snIreAVAlGAyOtwT2/uB1OzQT2E=; b=ayNQOg+lInUTTfktdwd+5Gff3TmEyXBmCr5qkscSA23KH9Nk3s4ULlI5h1zy7Ayz9f JfTw+64aUw9GsJbBUqK/0T30Ohrlhmhme+EespFKL6eppngNN0aAjDAEA0Tzl7rEs+y+ DBJZ0oQkGxpoKsmlxs47xfj7hjTqMrQ39SBwJ3oRfekUVSKlbmIn39ZyFFUIvqdoLg9N xytS8DxAyNTVEGWX98xzGMcxjoi29Js7qbH1tmDHnF/0VtFz4NCtmZrahpZrp+54+vnX Uutw7VT7Je53vVuZTIBA181MxK9xk45kSiQR1/JgCKqmSAlXc7Cy3gNefJb6slLVvR6/ S9bw== X-Forwarded-Encrypted: i=1; AHgh+RqyRQW/AyTsm+UevAoQAnjjMf5NFTHbuGNWwH80CI0mNXqX6v3snVOv5qgvi1mm6SKn0/RLQRI6JsRxGao=@vger.kernel.org X-Gm-Message-State: AOJu0YwRqnzLrzRPE6s95O+aYNYoq2+lyxt9Fg0D7ALPMQyTLjBLfQM0 HHI0fNj4rYwHS93J1NJRzI4S7vE2gToz3UU1fXjpjhs2zWJi0zUgKEgImVoGPndgVg== X-Gm-Gg: AfdE7clb9fREb9WCjvOB2uZU4TmwuhtLWdWCW6vvggXyOuTCrjhFBBcf6FMYtYRr/+A x63DNzd4jh1D+/fC6wuk49NIXISXdfGjkmPN6NgbMc1NYsn2iVA3dp5XDUpJHxiT1aYHnwiiypz ODk+tQk9kh4qXd7QKpI9XEmAgAF7W5AeII2APShNE8vHAsRYyyl+HlZxNtkxOjImMcxGSTZpobt 9pTriO5/VSaPRywGebTv71+uhNooJGEFHG9o0Hwx/DDkPU5eYYwkf+8UlogmhpD51S+uNrWRg8u 2CdbzJY9rsDQLoQhtXH0GUsQ97uD0SxhL/Bb+TChqVkxWF/UZLiJ4dLQCLZ5rfO2TApsIYFLOqG tbD5udTrNrvf2DqHyEq9al+hUC7BAk3WYnCaBmr2F9ot6Of4aqYdI+XWvazLUNQZcc6Dbv7gjjD mewypbscE98sfzg1UikwjdA59C9337Fn4TZpGu X-Received: by 2002:a05:600c:a0a:b0:493:ee2b:c876 with SMTP id 5b1f17b1804b1-4954a41302fmr18541995e9.35.1784275179941; Fri, 17 Jul 2026 00:59:39 -0700 (PDT) Received: from rikus ([2a01:e0a:edb:6330:cc2f:bd70:58a:fcfb]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-49549a3e2a9sm31709045e9.4.2026.07.17.00.59.39 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 17 Jul 2026 00:59:39 -0700 (PDT) From: Hugo VALTIER To: Linus Walleij , Heiko Stuebner Cc: Hugo VALTIER , linux-gpio@vger.kernel.org, linux-rockchip@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, Dmitry Yashin , Luca Ceresoli , Jonas Karlman Subject: [PATCH 3/3] pinctrl: rockchip: add support for RK3308B SoC Date: Fri, 17 Jul 2026 09:59:16 +0200 Message-ID: <20260717075918.1869879-4-hugo@ahdrone.com> X-Mailer: git-send-email 2.55.0 In-Reply-To: <20260717075918.1869879-1-hugo@ahdrone.com> References: <20260717075918.1869879-1-hugo@ahdrone.com> Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable Content-Type: text/plain; charset="utf-8" The RK3308B is a revision of the RK3308 including different iomux register layout. Several pins (GPIO2_A2, GPIO2_A3, GPIO2_C0, GPIO3_B2, GPIO3_B3) have 3-bit mux fields in new GRF registers (SOC_CON13 at 0x608 and SOC_CON15 at 0x610) that override the standard 2-bit fields. I believe the bootloader sets the sel_src_ctrl bits to activate these new registers, which causes the kernel's writes to the old 2-bit iomux registers to be silently ignored. Without this patch, SPI1, I2C3, and other peripherals that depend on these pins are completely non-functional on my RK3308B boards. Detect the SoC variant at runtime by reading the chip_id register at GRF offset 0x800 (0xcea =3D RK3308, 0x3308/0x3308c =3D RK3308B), as requested by reviewers of the earlier series. When RK3308B is detected, swap in the correct mux_recalced and mux_route tables and write the sel_src_ctrl bits to ensure the 3-bit mux registers are active. This is a rework of Dmitry Yashin's series [1] which used a separate device tree compatible string ("rockchip,rk3308b-pinctrl") to distinguish the variants. Reviewers Luca Ceresoli and Heiko Stuebner agreed that runtime detection was preferable since boards are manufactured with both RK3308 and RK3308B using the same device tree. Jonas Karlman implemented runtime detection based on the GRF_CHIP_ID register [2]. Reviewers asked for more changes (constifying some arrays), but the series was never resubmitted and was dropped. I run this patch on my Rock Pi S boards, the newer ones I've got in 2024 use the RK3308B. And thanks to runtime detection we should still be compatible with older devices (but I couldn't test on RK3308 as I don't have any). [1] https://lore.kernel.org/all/20240515121634.23945-1-dmt.yashin@gmail.com/ [2] https://lore.kernel.org/all/20240604141020.21725-1-dmt.yashin@gmail.com/ Signed-off-by: Hugo VALTIER Tested-by: Dmitry Yashin --- drivers/pinctrl/pinctrl-rockchip.c | 217 +++++++++++++++++++++++++++++ drivers/pinctrl/pinctrl-rockchip.h | 1 + 2 files changed, 218 insertions(+) diff --git a/drivers/pinctrl/pinctrl-rockchip.c b/drivers/pinctrl/pinctrl-r= ockchip.c index 549834501e7f..e90e13c5d7f2 100644 --- a/drivers/pinctrl/pinctrl-rockchip.c +++ b/drivers/pinctrl/pinctrl-rockchip.c @@ -721,6 +721,115 @@ static const struct rockchip_mux_recalced_data rk3308= _mux_recalced_data[] =3D { }, }; =20 +static const struct rockchip_mux_recalced_data rk3308b_mux_recalced_data[]= =3D { + { + /* gpio1b6_sel */ + .num =3D 1, + .pin =3D 14, + .reg =3D 0x28, + .bit =3D 12, + .mask =3D 0xf + }, { + /* gpio1b7_sel */ + .num =3D 1, + .pin =3D 15, + .reg =3D 0x2c, + .bit =3D 0, + .mask =3D 0x3 + }, { + /* gpio1c2_sel */ + .num =3D 1, + .pin =3D 18, + .reg =3D 0x30, + .bit =3D 4, + .mask =3D 0xf + }, { + /* gpio1c3_sel */ + .num =3D 1, + .pin =3D 19, + .reg =3D 0x30, + .bit =3D 8, + .mask =3D 0xf + }, { + /* gpio1c4_sel */ + .num =3D 1, + .pin =3D 20, + .reg =3D 0x30, + .bit =3D 12, + .mask =3D 0xf + }, { + /* gpio1c5_sel */ + .num =3D 1, + .pin =3D 21, + .reg =3D 0x34, + .bit =3D 0, + .mask =3D 0xf + }, { + /* gpio1c6_sel */ + .num =3D 1, + .pin =3D 22, + .reg =3D 0x34, + .bit =3D 4, + .mask =3D 0xf + }, { + /* gpio1c7_sel */ + .num =3D 1, + .pin =3D 23, + .reg =3D 0x34, + .bit =3D 8, + .mask =3D 0xf + }, { + /* gpio2a2_sel_plus */ + .num =3D 2, + .pin =3D 2, + .reg =3D 0x608, + .bit =3D 0, + .mask =3D 0x7 + }, { + /* gpio2a3_sel_plus */ + .num =3D 2, + .pin =3D 3, + .reg =3D 0x608, + .bit =3D 4, + .mask =3D 0x7 + }, { + /* gpio2c0_sel_plus */ + .num =3D 2, + .pin =3D 16, + .reg =3D 0x610, + .bit =3D 8, + .mask =3D 0x7 + }, { + /* gpio3b2_sel_plus */ + .num =3D 3, + .pin =3D 10, + .reg =3D 0x610, + .bit =3D 0, + .mask =3D 0x7 + }, { + /* gpio3b3_sel_plus */ + .num =3D 3, + .pin =3D 11, + .reg =3D 0x610, + .bit =3D 4, + .mask =3D 0x7 + }, { + /* gpio3b4_sel */ + .num =3D 3, + .pin =3D 12, + .reg =3D 0x68, + .bit =3D 8, + .mask =3D 0xf + }, { + /* gpio3b5_sel */ + .num =3D 3, + .pin =3D 13, + .reg =3D 0x68, + .bit =3D 12, + .mask =3D 0xf + }, +}; + static const struct rockchip_mux_recalced_data rk3328_mux_recalced_data[] = =3D { { /* gpio2_b7_sel */ @@ -1016,6 +1125,35 @@ static const struct rockchip_mux_route_data rk3308_m= ux_route_data[] =3D { RK_MUXROUTE_SAME(2, RK_PA4, 3, 0x600, BIT(16 + 2) | BIT(2)), /* pdm-clkm-= m2 */ }; =20 +static const struct rockchip_mux_route_data rk3308b_mux_route_data[] =3D { + RK_MUXROUTE_SAME(0, RK_PC3, 1, 0x314, BIT(16 + 0) | BIT(0)), /* rtc_clk */ + RK_MUXROUTE_SAME(1, RK_PC6, 2, 0x314, BIT(16 + 2) | BIT(16 + 3)), /* uart= 2_rxm0 */ + RK_MUXROUTE_SAME(4, RK_PD2, 2, 0x314, BIT(16 + 2) | BIT(16 + 3) | BIT(2))= , /* uart2_rxm1 */ + RK_MUXROUTE_SAME(0, RK_PB7, 2, 0x608, BIT(16 + 8) | BIT(16 + 9)), /* i2c3= _sdam0 */ + RK_MUXROUTE_SAME(3, RK_PB4, 2, 0x608, BIT(16 + 8) | BIT(16 + 9) | BIT(8))= , /* i2c3_sdam1 */ + RK_MUXROUTE_SAME(2, RK_PA0, 3, 0x608, BIT(16 + 8) | BIT(16 + 9) | BIT(9))= , /* i2c3_sdam2 */ + RK_MUXROUTE_SAME(1, RK_PA3, 2, 0x308, BIT(16 + 3)), /* i2s-8ch-1-sclktxm0= */ + RK_MUXROUTE_SAME(1, RK_PA4, 2, 0x308, BIT(16 + 3)), /* i2s-8ch-1-sclkrxm0= */ + RK_MUXROUTE_SAME(1, RK_PB5, 2, 0x308, BIT(16 + 3) | BIT(3)), /* i2s-8ch-1= -sclktxm1 */ + RK_MUXROUTE_SAME(1, RK_PB6, 2, 0x308, BIT(16 + 3) | BIT(3)), /* i2s-8ch-1= -sclkrxm1 */ + RK_MUXROUTE_SAME(1, RK_PA4, 3, 0x308, BIT(16 + 12) | BIT(16 + 13)), /* pd= m-clkm0 */ + RK_MUXROUTE_SAME(1, RK_PB6, 4, 0x308, BIT(16 + 12) | BIT(16 + 13) | BIT(1= 2)), /* pdm-clkm1 */ + RK_MUXROUTE_SAME(2, RK_PA6, 2, 0x308, BIT(16 + 12) | BIT(16 + 13) | BIT(1= 3)), /* pdm-clkm2 */ + RK_MUXROUTE_SAME(2, RK_PA4, 3, 0x600, BIT(16 + 2) | BIT(2)), /* pdm-clkm-= m2 */ + RK_MUXROUTE_SAME(3, RK_PB2, 3, 0x314, BIT(16 + 9)), /* spi1_miso */ + RK_MUXROUTE_SAME(2, RK_PA4, 2, 0x314, BIT(16 + 9) | BIT(9)), /* spi1_miso= _m1 */ + RK_MUXROUTE_SAME(0, RK_PB3, 3, 0x314, BIT(16 + 10) | BIT(16 + 11)), /* ow= ire_m0 */ + RK_MUXROUTE_SAME(1, RK_PC6, 7, 0x314, BIT(16 + 10) | BIT(16 + 11) | BIT(1= 0)), /* owire_m1 */ + RK_MUXROUTE_SAME(2, RK_PA2, 5, 0x314, BIT(16 + 10) | BIT(16 + 11) | BIT(1= 1)), /* owire_m2 */ + RK_MUXROUTE_SAME(0, RK_PB3, 2, 0x314, BIT(16 + 12) | BIT(16 + 13)), /* ca= n_rxd_m0 */ + RK_MUXROUTE_SAME(1, RK_PC6, 5, 0x314, BIT(16 + 12) | BIT(16 + 13) | BIT(1= 2)), /* can_rxd_m1 */ + RK_MUXROUTE_SAME(2, RK_PA2, 4, 0x314, BIT(16 + 12) | BIT(16 + 13) | BIT(1= 3)), /* can_rxd_m2 */ + RK_MUXROUTE_SAME(1, RK_PC4, 3, 0x314, BIT(16 + 14)), /* mac_rxd0_m0 */ + RK_MUXROUTE_SAME(4, RK_PA2, 2, 0x314, BIT(16 + 14) | BIT(14)), /* mac_rxd= 0_m1 */ + RK_MUXROUTE_SAME(3, RK_PB4, 4, 0x314, BIT(16 + 15)), /* uart3_rx */ + RK_MUXROUTE_SAME(0, RK_PC1, 3, 0x314, BIT(16 + 15) | BIT(15)), /* uart3_r= x_m1 */ +}; + static const struct rockchip_mux_route_data rk3328_mux_route_data[] =3D { RK_MUXROUTE_SAME(1, RK_PA1, 2, 0x50, BIT(16) | BIT(16 + 1)), /* uart2dbg_= rxm0 */ RK_MUXROUTE_SAME(2, RK_PA1, 1, 0x50, BIT(16) | BIT(16 + 1) | BIT(0)), /* = uart2dbg_rxm1 */ @@ -3486,6 +3624,7 @@ static int rockchip_get_pull(struct rockchip_pin_bank= *bank, int pin_num) case RK3188: case RK3288: case RK3308: + case RK3308B: case RK3328: case RK3368: case RK3399: @@ -3552,6 +3691,7 @@ static int rockchip_set_pull(struct rockchip_pin_bank= *bank, case RK3188: case RK3288: case RK3308: + case RK3308B: case RK3328: case RK3368: case RK3399: @@ -3848,6 +3988,7 @@ static bool rockchip_pinconf_pull_valid(struct rockch= ip_pin_ctrl *ctrl, case RK3188: case RK3288: case RK3308: + case RK3308B: case RK3328: case RK3368: case RK3399: @@ -4452,6 +4593,76 @@ static int __maybe_unused rockchip_pinctrl_resume(st= ruct device *dev) static SIMPLE_DEV_PM_OPS(rockchip_pinctrl_dev_pm_ops, rockchip_pinctrl_sus= pend, rockchip_pinctrl_resume); =20 +#define RK3308B_GRF_SOC_CON13 0x608 +#define RK3308B_GRF_SOC_CON15 0x610 + +/* RK3308B_GRF_SOC_CON13 */ +#define RK3308B_GRF_I2C3_IOFUNC_SRC_CTRL (BIT(16 + 10) | BIT(10)) +#define RK3308B_GRF_GPIO2A3_SEL_SRC_CTRL (BIT(16 + 7) | BIT(7)) +#define RK3308B_GRF_GPIO2A2_SEL_SRC_CTRL (BIT(16 + 3) | BIT(3)) + +/* RK3308B_GRF_SOC_CON15 */ +#define RK3308B_GRF_GPIO2C0_SEL_SRC_CTRL (BIT(16 + 11) | BIT(11)) +#define RK3308B_GRF_GPIO3B3_SEL_SRC_CTRL (BIT(16 + 7) | BIT(7)) +#define RK3308B_GRF_GPIO3B2_SEL_SRC_CTRL (BIT(16 + 3) | BIT(3)) + +/* + * RK3308B has 3-bit gpio##_sel_plus iomuxes over some 2-bit old ones. + * Enable them by setting the gpio##_sel_src_ctrl registers. + */ +static int rk3308b_soc_sel_src_init(struct rockchip_pinctrl *info) +{ + int ret; + + ret =3D regmap_write(info->regmap_base, RK3308B_GRF_SOC_CON13, + RK3308B_GRF_I2C3_IOFUNC_SRC_CTRL | + RK3308B_GRF_GPIO2A3_SEL_SRC_CTRL | + RK3308B_GRF_GPIO2A2_SEL_SRC_CTRL); + if (ret) + return ret; + + return regmap_write(info->regmap_base, RK3308B_GRF_SOC_CON15, + RK3308B_GRF_GPIO2C0_SEL_SRC_CTRL | + RK3308B_GRF_GPIO3B3_SEL_SRC_CTRL | + RK3308B_GRF_GPIO3B2_SEL_SRC_CTRL); +} + +#define RK3308_GRF_CHIP_ID 0x800 + +static int rk3308_soc_data_init(struct rockchip_pinctrl *info) +{ + struct rockchip_pin_ctrl *ctrl =3D info->ctrl; + unsigned int chip_id; + int ret; + + ret =3D regmap_read(info->regmap_base, RK3308_GRF_CHIP_ID, &chip_id); + if (ret) + return ret; + + switch (chip_id) { + case 0xcea: + /* Original RK3308, no changes needed */ + break; + case 0x3308: + case 0x3308c: + ctrl->type =3D RK3308B; + ctrl->iomux_recalced =3D rk3308b_mux_recalced_data; + ctrl->niomux_recalced =3D ARRAY_SIZE(rk3308b_mux_recalced_data); + ctrl->iomux_routes =3D rk3308b_mux_route_data; + ctrl->niomux_routes =3D ARRAY_SIZE(rk3308b_mux_route_data); + + ret =3D rk3308b_soc_sel_src_init(info); + if (ret) + return ret; + break; + default: + return dev_err_probe(info->dev, -EINVAL, + "Unknown RK3308 chip_id: 0x%x\n", chip_id); + } + + return 0; +} + static int rockchip_pinctrl_probe(struct platform_device *pdev) { struct rockchip_pinctrl *info; @@ -4514,6 +4725,12 @@ static int rockchip_pinctrl_probe(struct platform_de= vice *pdev) /* try to find the optional reference to the ioc1 syscon */ info->regmap_ioc1 =3D syscon_regmap_lookup_by_phandle_optional(np, "rockc= hip,ioc1"); =20 + if (ctrl->type =3D=3D RK3308) { + ret =3D rk3308_soc_data_init(info); + if (ret) + return ret; + } + iomux_recalced_routes_init(info); =20 ret =3D rockchip_pinctrl_register(pdev, info); diff --git a/drivers/pinctrl/pinctrl-rockchip.h b/drivers/pinctrl/pinctrl-r= ockchip.h index dd07a16f615c..914582c87dd8 100644 --- a/drivers/pinctrl/pinctrl-rockchip.h +++ b/drivers/pinctrl/pinctrl-rockchip.h @@ -194,6 +194,7 @@ enum rockchip_pinctrl_type { RK3188, RK3288, RK3308, + RK3308B, RK3328, RK3368, RK3399, --=20 2.55.0