{"id":2230985,"url":"http://patchwork.ozlabs.org/api/1.1/patches/2230985/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20260430093422.74812-4-biju.das.jz@bp.renesas.com/","project":{"id":42,"url":"http://patchwork.ozlabs.org/api/1.1/projects/42/?format=json","name":"Linux GPIO development","link_name":"linux-gpio","list_id":"linux-gpio.vger.kernel.org","list_email":"linux-gpio@vger.kernel.org","web_url":"","scm_url":"","webscm_url":""},"msgid":"<20260430093422.74812-4-biju.das.jz@bp.renesas.com>","date":"2026-04-30T09:34:08","name":"[v4,3/7] pinctrl: renesas: rzg2l: Add support for selecting power source for {WDT,AWO,ISO}","commit_ref":null,"pull_url":null,"state":"new","archived":false,"hash":"f626629b059eecd20d35f3b11db406b1f2c3fe5f","submitter":{"id":87968,"url":"http://patchwork.ozlabs.org/api/1.1/people/87968/?format=json","name":"Biju","email":"biju.das.au@gmail.com"},"delegate":null,"mbox":"http://patchwork.ozlabs.org/project/linux-gpio/patch/20260430093422.74812-4-biju.das.jz@bp.renesas.com/mbox/","series":[{"id":502254,"url":"http://patchwork.ozlabs.org/api/1.1/series/502254/?format=json","web_url":"http://patchwork.ozlabs.org/project/linux-gpio/list/?series=502254","date":"2026-04-30T09:34:06","name":"Add Renesas RZ/G3L PINCONTROL support","version":4,"mbox":"http://patchwork.ozlabs.org/series/502254/mbox/"}],"comments":"http://patchwork.ozlabs.org/api/patches/2230985/comments/","check":"pending","checks":"http://patchwork.ozlabs.org/api/patches/2230985/checks/","tags":{},"headers":{"Return-Path":"\n <linux-gpio+bounces-35851-incoming=patchwork.ozlabs.org@vger.kernel.org>","X-Original-To":["incoming@patchwork.ozlabs.org","linux-gpio@vger.kernel.org"],"Delivered-To":"patchwork-incoming@legolas.ozlabs.org","Authentication-Results":["legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=gmail.com header.i=@gmail.com header.a=rsa-sha256\n header.s=20251104 header.b=CVZ0T1kU;\n\tdkim-atps=neutral","legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=vger.kernel.org\n (client-ip=2600:3c15:e001:75::12fc:5321; helo=sin.lore.kernel.org;\n envelope-from=linux-gpio+bounces-35851-incoming=patchwork.ozlabs.org@vger.kernel.org;\n receiver=patchwork.ozlabs.org)","smtp.subspace.kernel.org;\n\tdkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=\"CVZ0T1kU\"","smtp.subspace.kernel.org;\n arc=none smtp.client-ip=209.85.221.54","smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com","smtp.subspace.kernel.org;\n spf=pass smtp.mailfrom=gmail.com"],"Received":["from sin.lore.kernel.org (sin.lore.kernel.org\n [IPv6:2600:3c15:e001:75::12fc:5321])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519 server-signature ECDSA (secp384r1) server-digest SHA384)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4g5pt517vGz1yHZ\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 19:34:53 +1000 (AEST)","from smtp.subspace.kernel.org (conduit.subspace.kernel.org\n [100.90.174.1])\n\tby sin.lore.kernel.org (Postfix) with ESMTP id 165C230080B3\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 30 Apr 2026 09:34:36 +0000 (UTC)","from localhost.localdomain (localhost.localdomain [127.0.0.1])\n\tby smtp.subspace.kernel.org (Postfix) with ESMTP id 7DBBD3A0EB8;\n\tThu, 30 Apr 2026 09:34:33 +0000 (UTC)","from mail-wr1-f54.google.com (mail-wr1-f54.google.com\n [209.85.221.54])\n\t(using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits))\n\t(No client certificate requested)\n\tby smtp.subspace.kernel.org (Postfix) with ESMTPS id B564A3A5E81\n\tfor <linux-gpio@vger.kernel.org>; Thu, 30 Apr 2026 09:34:30 +0000 (UTC)","by mail-wr1-f54.google.com with SMTP id\n ffacd0b85a97d-43cfce3a195so372171f8f.2\n        for <linux-gpio@vger.kernel.org>;\n Thu, 30 Apr 2026 02:34:30 -0700 (PDT)","from localhost.localdomain ([2a00:23c4:a758:8a01:342:901:e785:f7d2])\n        by smtp.gmail.com with ESMTPSA id\n ffacd0b85a97d-447b76e5c22sm11953913f8f.28.2026.04.30.02.34.28\n        (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n        Thu, 30 Apr 2026 02:34:28 -0700 (PDT)"],"ARC-Seal":"i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116;\n\tt=1777541673; cv=none;\n b=m8455UvnFN2bJfXTZfIQGk/RlBMoBXiVeG6NbqBokbmDxa/jfZ1L7Kd5Mm2f34uJC0HokxfKrdG5MAD4CyIw0fbYH8Y0V9yCWwRQJobKnyxPTJY8nxnu2ey2LsJszWkomSpWn56/ZM36bYbQkm5U4ByUKA0a9U1QY2ULdNqWYuA=","ARC-Message-Signature":"i=1; a=rsa-sha256; d=subspace.kernel.org;\n\ts=arc-20240116; t=1777541673; c=relaxed/simple;\n\tbh=L2M4Vqp9RfqgGtk1NVtU80uZ/o8rWFC6KgMYLqkjKRQ=;\n\th=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References:\n\t MIME-Version;\n b=VEP+vejpMrGyHxy788vsOPyG0nhfiT06D3pv/9w4wgEOzugH2HwghqVRet/+AorMr/cqjhjM/5+00DBiTlJ1M4ZSJkrjUH6LOjy6+c6YPkKL+cUNETX2GS7W696O6XMio/dMvMlKUFZxnEKTQGIOC1m6BMNdn0/yT9B0Y/0xGrc=","ARC-Authentication-Results":"i=1; smtp.subspace.kernel.org;\n dmarc=pass (p=none dis=none) header.from=gmail.com;\n spf=pass smtp.mailfrom=gmail.com;\n dkim=pass (2048-bit key) header.d=gmail.com header.i=@gmail.com\n header.b=CVZ0T1kU; arc=none smtp.client-ip=209.85.221.54","DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=gmail.com; s=20251104; t=1777541669; x=1778146469;\n darn=vger.kernel.org;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:from:to:cc:subject:date\n         :message-id:reply-to;\n        bh=Z3rCYOpWHkYf3cWmjVv7h50il+B2+zlhmGM/eE2K0hU=;\n        b=CVZ0T1kUz/qtXrtZ6JMq8HzyOS3Ls6W+2ZY8yUyl2syO8VXDyjxnY4x5JRXloPmkDs\n         pL+ccJvmDUO0H0CzyHPc4/mdWa6M3F9oUa1PLqMZaPpCoFYv16+FhIB/PlLu41WhVY9K\n         7JZHwqCLjevdl5cwEqXlRbPr2K2fChLzMFpV79q4DrdYMfKP7n5HjfPoeOcxyxdqge/J\n         BGtip0sQWsbOIS0/2fYkqLTtFToawfSM8ee6Ve15p9tvQoWmYxrocF4wfxxYw3uWz+HJ\n         JFEa+f/PXNfeUudMSorrTFNj5djXSz25Lj6An+md2hPbmnOHKpXP1FSdbx63ljsIsqfF\n         et4g==","X-Google-DKIM-Signature":"v=1; a=rsa-sha256; c=relaxed/relaxed;\n        d=1e100.net; s=20251104; t=1777541669; x=1778146469;\n        h=content-transfer-encoding:mime-version:references:in-reply-to\n         :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from\n         :to:cc:subject:date:message-id:reply-to;\n        bh=Z3rCYOpWHkYf3cWmjVv7h50il+B2+zlhmGM/eE2K0hU=;\n        b=UJB1DDvdMnVLE0/8sG1A0qD04HPquVDhewAYMNV99Fa1mWNfePc8Zh5pdmouZBOZh0\n         Ny3eUgkdz8JgNVKflCP7+0kUZDj5BZ5qKRabZB65tLBqjNlrT+9Z6wPwt9lXiHi37HGi\n         VLn6rUxujn202f7WHgljFwio2LpSwghQNbpKYVXJ4Ttj35qeYF+GtU+MUbWuXlMD3eeX\n         3EVeLgXOFDGiDs9xzteqPR75uhHQfDM7VyVGISd2NWcnCMXNi7I+5P2tH1umM9uCb7Ib\n         QyWqr6iyu22V34zCF/CezDSOM6EygHSq2o6JoW3CnoRgo4D2VsbBkXnJ6/yAd/FMS57D\n         PUAQ==","X-Forwarded-Encrypted":"i=1;\n AFNElJ/55i1UIR4wq/QlC8J8i2mSl2OS44v+qEntiHCUjEoqbpkZxedynJzL5XGYBenxD3IKbXSjcDo3Lvyk@vger.kernel.org","X-Gm-Message-State":"AOJu0Yzkh/MGesQkpoZi0tEKDPx63p3j8A/NlSA1IAMAy7XNZWdONyie\n\t2cJUBZH6qYoYaXqLkhfQein9QcOBAkHU4cBDIo0rwRD8dq07PqnS+J/IHuTFxg==","X-Gm-Gg":"AeBDiesR/+yTj7nAmLyJ0hgu8fXCka6d0DVFmvG4i553gtQ++JLPgBV+CIMk/OTmhzJ\n\t4e5zM0qx4AqcBouVg6/DMyYZQz+9G543OBzs+qpCzPbwk/FQf4YdMOvBwczaga1sc9pq3+NDCY2\n\tB4o1k+ssWhBMtGvEsdP9nMhLd0MwBqkar56kJzEuuMTnTx2rRE93/lWhI9lh5PKjYfAPhB5oRqe\n\tbGuLSOvhEzqxtKIw3qkvcdBdO05aUn2kMcXnidevW1WXisRG8yXFibclu4e6vcy8LWHfLkxhc9b\n\tN6VZCkAxdYe+8OXnwC4Xx8lCNqxfEXVNSwjfhKnaw0+PCwj/qJg8KYY7v0FJmlzefu9f7hCBI1p\n\txNJTgCKltPWhI4A9jsMuUrpqvEvSATfLFTRn75XW/x+MnyuRUlTOEe4VaZeG8j4fMp9Zi5tZ47U\n\tz1H1MTQQHSh8Q9md2a0yEcgOU20tJlooDJQNKLtNV7P7yEAHjEik3FSYyH","X-Received":"by 2002:a05:6000:26c8:b0:43f:e22f:606 with SMTP id\n ffacd0b85a97d-4493dbdb55dmr3077275f8f.2.1777541668897;\n        Thu, 30 Apr 2026 02:34:28 -0700 (PDT)","From":"Biju <biju.das.au@gmail.com>","X-Google-Original-From":"Biju <biju.das.jz@bp.renesas.com>","To":"Geert Uytterhoeven <geert+renesas@glider.be>,\n\tLinus Walleij <linusw@kernel.org>","Cc":"Biju Das <biju.das.jz@bp.renesas.com>,\n\tlinux-renesas-soc@vger.kernel.org,\n\tlinux-gpio@vger.kernel.org,\n\tlinux-kernel@vger.kernel.org,\n\tPrabhakar Mahadev Lad <prabhakar.mahadev-lad.rj@bp.renesas.com>,\n\tBiju Das <biju.das.au@gmail.com>","Subject":"[PATCH v4 3/7] pinctrl: renesas: rzg2l: Add support for selecting\n power source for {WDT,AWO,ISO}","Date":"Thu, 30 Apr 2026 10:34:08 +0100","Message-ID":"<20260430093422.74812-4-biju.das.jz@bp.renesas.com>","X-Mailer":"git-send-email 2.43.0","In-Reply-To":"<20260430093422.74812-1-biju.das.jz@bp.renesas.com>","References":"<20260430093422.74812-1-biju.das.jz@bp.renesas.com>","Precedence":"bulk","X-Mailing-List":"linux-gpio@vger.kernel.org","List-Id":"<linux-gpio.vger.kernel.org>","List-Subscribe":"<mailto:linux-gpio+subscribe@vger.kernel.org>","List-Unsubscribe":"<mailto:linux-gpio+unsubscribe@vger.kernel.org>","MIME-Version":"1.0","Content-Transfer-Encoding":"8bit"},"content":"From: Biju Das <biju.das.jz@bp.renesas.com>\n\nThe RZ/G3L SoC has support for setting power source that are not\ncontrolled by the following voltage control registers:\n  - SD_CH{0,1,2}_POC, XSPI_POC, ETH{0,1}_POC, I3C_SET.POC\n\nAdd support for selecting voltages using OTHER_POC register for\nsetting I/O domain voltage for WDT, ISO and AWO by extending\nrzg2l_caps_to_pwr_reg() with a mask output parameter so that callers\ncallers can identify which bit(s) within OTHER_POC correspond to the\nrequested domain. Update rzg2l_get_power_source() to extract the\nrelevant bit field via field_get() when reading OTHER_POC, and update\nrzg2l_set_power_source() to perform a read-modify-write under the\nspinlock when writing to OTHER_POC, since multiple domains share the\nsame register.\n\nSigned-off-by: Biju Das <biju.das.jz@bp.renesas.com>\n---\nv3->v4:\n * Updated commit description.\n * Updated rzg2l_caps_to_pwr_reg() to return mask in addition to register\n   offset.\n * Dropped ffs(), using field_get() instead to get PoC offset in\n   rzg2l_get_power_source().\n * Simplified rzg2l_set_power_source() by using mask from\n   rzg2l_caps_to_pwr_reg().\n * Added scoped_guard() for RMW operation in rzg2l_set_power_source().\nv2->v3:\n * No change\nv1->v2:\n * No change\n---\n drivers/pinctrl/renesas/pinctrl-rzg2l.c | 53 ++++++++++++++++++++-----\n 1 file changed, 44 insertions(+), 9 deletions(-)","diff":"diff --git a/drivers/pinctrl/renesas/pinctrl-rzg2l.c b/drivers/pinctrl/renesas/pinctrl-rzg2l.c\nindex ca9d4a3ec737..7b1bb66d4ff6 100644\n--- a/drivers/pinctrl/renesas/pinctrl-rzg2l.c\n+++ b/drivers/pinctrl/renesas/pinctrl-rzg2l.c\n@@ -63,10 +63,18 @@\n #define PIN_CFG_SMT\t\t\tBIT(16)\t/* Schmitt-trigger input control */\n #define PIN_CFG_ELC\t\t\tBIT(17)\n #define PIN_CFG_IOLH_RZV2H\t\tBIT(18)\n+#define PIN_CFG_PVDD1833_OTH_AWO_POC\tBIT(19) /* known on RZ/G3L only */\n+#define PIN_CFG_PVDD1833_OTH_ISO_POC\tBIT(20) /* known on RZ/G3L only */\n+#define PIN_CFG_WDTOVF_N_POC\t\tBIT(21) /* known on RZ/G3L only */\n \n #define RZG2L_SINGLE_PIN\t\tBIT_ULL(63)\t/* Dedicated pin */\n #define RZG2L_VARIABLE_CFG\t\tBIT_ULL(62)\t/* Variable cfg for port pins */\n \n+#define PIN_CFG_OTHER_POC_MASK\t\\\n+\t\t\t\t\t(PIN_CFG_PVDD1833_OTH_AWO_POC | \\\n+\t\t\t\t\t PIN_CFG_PVDD1833_OTH_ISO_POC | \\\n+\t\t\t\t\t PIN_CFG_WDTOVF_N_POC)\n+\n #define RZG2L_MPXED_COMMON_PIN_FUNCS(group) \\\n \t\t\t\t\t(PIN_CFG_IOLH_##group | \\\n \t\t\t\t\t PIN_CFG_PUPD | \\\n@@ -146,6 +154,7 @@\n #define SD_CH(off, ch)\t\t((off) + (ch) * 4)\n #define ETH_POC(off, ch)\t((off) + (ch) * 4)\n #define QSPI\t\t\t(0x3008) /* known on RZ/{G2L,G2LC,G2UL,Five} only */\n+#define OTHER_POC\t\t(0x3028) /* known on RZ/G3L only */\n \n #define PVDD_2500\t\t2\t/* I/O domain voltage 2.5V */\n #define PVDD_1800\t\t1\t/* I/O domain voltage <= 1.8V */\n@@ -900,7 +909,8 @@ static void rzg2l_rmw_pin_config(struct rzg2l_pinctrl *pctrl, u32 offset,\n \traw_spin_unlock_irqrestore(&pctrl->lock, flags);\n }\n \n-static int rzg2l_caps_to_pwr_reg(const struct rzg2l_register_offsets *regs, u32 caps)\n+static int rzg2l_caps_to_pwr_reg(const struct rzg2l_register_offsets *regs,\n+\t\t\t\t u32 caps, u8 *mask)\n {\n \tif (caps & PIN_CFG_IO_VMC_SD0)\n \t\treturn SD_CH(regs->sd_ch, 0);\n@@ -912,6 +922,16 @@ static int rzg2l_caps_to_pwr_reg(const struct rzg2l_register_offsets *regs, u32\n \t\treturn ETH_POC(regs->eth_poc, 1);\n \tif (caps & PIN_CFG_IO_VMC_QSPI)\n \t\treturn QSPI;\n+\tif (caps & PIN_CFG_OTHER_POC_MASK) {\n+\t\tif (caps & PIN_CFG_PVDD1833_OTH_AWO_POC)\n+\t\t\t*mask = BIT(0);\n+\t\telse if (caps & PIN_CFG_PVDD1833_OTH_ISO_POC)\n+\t\t\t*mask = BIT(1);\n+\t\telse\n+\t\t\t*mask = BIT(2);\n+\n+\t\treturn OTHER_POC;\n+\t}\n \n \treturn -EINVAL;\n }\n@@ -920,17 +940,20 @@ static int rzg2l_get_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps\n {\n \tconst struct rzg2l_hwcfg *hwcfg = pctrl->data->hwcfg;\n \tconst struct rzg2l_register_offsets *regs = &hwcfg->regs;\n+\tu8 val, mask;\n \tint pwr_reg;\n-\tu8 val;\n \n \tif (caps & PIN_CFG_SOFT_PS)\n \t\treturn pctrl->settings[pin].power_source;\n \n-\tpwr_reg = rzg2l_caps_to_pwr_reg(regs, caps);\n+\tpwr_reg = rzg2l_caps_to_pwr_reg(regs, caps, &mask);\n \tif (pwr_reg < 0)\n \t\treturn pwr_reg;\n \n \tval = readb(pctrl->base + pwr_reg);\n+\tif (pwr_reg == OTHER_POC)\n+\t\tval = field_get(mask, val);\n+\n \tswitch (val) {\n \tcase PVDD_1800:\n \t\treturn 1800;\n@@ -948,8 +971,8 @@ static int rzg2l_set_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps\n {\n \tconst struct rzg2l_hwcfg *hwcfg = pctrl->data->hwcfg;\n \tconst struct rzg2l_register_offsets *regs = &hwcfg->regs;\n+\tu8 poc_val, val, mask;\n \tint pwr_reg;\n-\tu8 val;\n \n \tif (caps & PIN_CFG_SOFT_PS) {\n \t\tpctrl->settings[pin].power_source = ps;\n@@ -958,25 +981,37 @@ static int rzg2l_set_power_source(struct rzg2l_pinctrl *pctrl, u32 pin, u32 caps\n \n \tswitch (ps) {\n \tcase 1800:\n-\t\tval = PVDD_1800;\n+\t\tpoc_val = PVDD_1800;\n \t\tbreak;\n \tcase 2500:\n \t\tif (!(caps & (PIN_CFG_IO_VMC_ETH0 | PIN_CFG_IO_VMC_ETH1)))\n \t\t\treturn -EINVAL;\n-\t\tval = PVDD_2500;\n+\t\tpoc_val = PVDD_2500;\n \t\tbreak;\n \tcase 3300:\n-\t\tval = PVDD_3300;\n+\t\tpoc_val = PVDD_3300;\n \t\tbreak;\n \tdefault:\n \t\treturn -EINVAL;\n \t}\n \n-\tpwr_reg = rzg2l_caps_to_pwr_reg(regs, caps);\n+\tpwr_reg = rzg2l_caps_to_pwr_reg(regs, caps, &mask);\n \tif (pwr_reg < 0)\n \t\treturn pwr_reg;\n \n-\twriteb(val, pctrl->base + pwr_reg);\n+\tif (pwr_reg == OTHER_POC) {\n+\t\tscoped_guard(raw_spinlock, &pctrl->lock) {\n+\t\t\tval = readb(pctrl->base + pwr_reg);\n+\t\t\tif (poc_val)\n+\t\t\t\tval |= mask;\n+\t\t\telse\n+\t\t\t\tval &= ~mask;\n+\t\t\twriteb(val, pctrl->base + pwr_reg);\n+\t\t}\n+\t} else {\n+\t\twriteb(poc_val, pctrl->base + pwr_reg);\n+\t}\n+\n \tpctrl->settings[pin].power_source = ps;\n \n \treturn 0;\n","prefixes":["v4","3/7"]}