Patch Detail
get:
Show a patch.
patch:
Update a patch.
put:
Update a patch.
GET /api/patches/2216429/?format=api
{ "id": 2216429, "url": "http://patchwork.ozlabs.org/api/patches/2216429/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/patch/46f9b46210436e73d17a866424a00529439ce1ba.1774526652.git.dan.carpenter@linaro.org/", "project": { "id": 18, "url": "http://patchwork.ozlabs.org/api/projects/18/?format=api", "name": "U-Boot", "link_name": "uboot", "list_id": "u-boot.lists.denx.de", "list_email": "u-boot@lists.denx.de", "web_url": null, "scm_url": null, "webscm_url": null, "list_archive_url": "", "list_archive_url_format": "", "commit_url_format": "" }, "msgid": "<46f9b46210436e73d17a866424a00529439ce1ba.1774526652.git.dan.carpenter@linaro.org>", "list_archive_url": null, "date": "2026-03-26T12:08:25", "name": "[2/2] pinctrl: scmi: Use standard device tree pin muxing format", "commit_ref": null, "pull_url": null, "state": "new", "archived": false, "hash": "87bb592025fc0303a4e747a780ea81898a11090c", "submitter": { "id": 86261, "url": "http://patchwork.ozlabs.org/api/people/86261/?format=api", "name": "Dan Carpenter", "email": "dan.carpenter@linaro.org" }, "delegate": { "id": 55230, "url": "http://patchwork.ozlabs.org/api/users/55230/?format=api", "username": "freenix", "first_name": "Peng", "last_name": "Fan", "email": "van.freenix@gmail.com" }, "mbox": "http://patchwork.ozlabs.org/project/uboot/patch/46f9b46210436e73d17a866424a00529439ce1ba.1774526652.git.dan.carpenter@linaro.org/mbox/", "series": [ { "id": 497581, "url": "http://patchwork.ozlabs.org/api/series/497581/?format=api", "web_url": "http://patchwork.ozlabs.org/project/uboot/list/?series=497581", "date": "2026-03-26T12:08:12", "name": "u-boot: pinctrl: scmi: Use standard pin muxing format", "version": 1, "mbox": "http://patchwork.ozlabs.org/series/497581/mbox/" } ], "comments": "http://patchwork.ozlabs.org/api/patches/2216429/comments/", "check": "pending", "checks": "http://patchwork.ozlabs.org/api/patches/2216429/checks/", "tags": {}, "related": [], "headers": { "Return-Path": "<u-boot-bounces@lists.denx.de>", "X-Original-To": "incoming@patchwork.ozlabs.org", "Delivered-To": "patchwork-incoming@legolas.ozlabs.org", "Authentication-Results": [ "legolas.ozlabs.org;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.a=rsa-sha256\n header.s=google header.b=EdjafmLs;\n\tdkim-atps=neutral", "legolas.ozlabs.org;\n spf=pass (sender SPF authorized) smtp.mailfrom=lists.denx.de\n (client-ip=85.214.62.61; helo=phobos.denx.de;\n envelope-from=u-boot-bounces@lists.denx.de; receiver=patchwork.ozlabs.org)", "phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=linaro.org", "phobos.denx.de;\n spf=pass smtp.mailfrom=u-boot-bounces@lists.denx.de", "phobos.denx.de;\n\tdkim=pass (2048-bit key;\n unprotected) header.d=linaro.org header.i=@linaro.org header.b=\"EdjafmLs\";\n\tdkim-atps=neutral", "phobos.denx.de;\n dmarc=pass (p=none dis=none) header.from=linaro.org", "phobos.denx.de;\n spf=pass smtp.mailfrom=dan.carpenter@linaro.org" ], "Received": [ "from phobos.denx.de (phobos.denx.de [85.214.62.61])\n\t(using TLSv1.3 with cipher TLS_AES_256_GCM_SHA384 (256/256 bits)\n\t key-exchange x25519)\n\t(No client certificate requested)\n\tby legolas.ozlabs.org (Postfix) with ESMTPS id 4fhMxk4G2Gz1y1G\n\tfor <incoming@patchwork.ozlabs.org>; Thu, 26 Mar 2026 23:08:42 +1100 (AEDT)", "from h2850616.stratoserver.net (localhost [IPv6:::1])\n\tby phobos.denx.de (Postfix) with ESMTP id 24D3583FD3;\n\tThu, 26 Mar 2026 13:08:33 +0100 (CET)", "by phobos.denx.de (Postfix, from userid 109)\n id AACE0838BB; Thu, 26 Mar 2026 13:08:31 +0100 (CET)", "from mail-wm1-x32b.google.com (mail-wm1-x32b.google.com\n [IPv6:2a00:1450:4864:20::32b])\n (using TLSv1.3 with cipher TLS_AES_128_GCM_SHA256 (128/128 bits))\n (No client certificate requested)\n by phobos.denx.de (Postfix) with ESMTPS id A767983FAF\n for <u-boot@lists.denx.de>; Thu, 26 Mar 2026 13:08:29 +0100 (CET)", "by mail-wm1-x32b.google.com with SMTP id\n 5b1f17b1804b1-4870206f73bso5109965e9.3\n for <u-boot@lists.denx.de>; Thu, 26 Mar 2026 05:08:29 -0700 (PDT)", "from localhost ([196.207.164.177]) by smtp.gmail.com with ESMTPSA id\n 5b1f17b1804b1-48722ca344dsm22710405e9.12.2026.03.26.05.08.27\n (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256);\n Thu, 26 Mar 2026 05:08:28 -0700 (PDT)" ], "X-Spam-Checker-Version": "SpamAssassin 3.4.2 (2018-09-13) on phobos.denx.de", "X-Spam-Level": "", "X-Spam-Status": "No, score=-2.1 required=5.0 tests=BAYES_00,DKIM_SIGNED,\n DKIM_VALID,DKIM_VALID_AU,DKIM_VALID_EF,RCVD_IN_DNSWL_BLOCKED,\n SPF_HELO_NONE,SPF_PASS autolearn=ham autolearn_force=no version=3.4.2", "DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=linaro.org; s=google; t=1774526909; x=1775131709; darn=lists.denx.de;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:from:to:cc:subject:date:message-id:reply-to;\n bh=G/PAU7Ix1+nnfYVd+6n5LSymV23ji6LbgTx1i6i6WXQ=;\n b=EdjafmLskcXoL+shhN8MBPO6bnZ0f/O/tQA2rMs+AKe6EyvOyYTQHgAr9WMXgihkcT\n PAitVStCOEMwwsIc+drHHKQH4+I1knrJbK2JZcK+a+RFSlpkxy9j3v53z0ZD5etH0nKd\n Fke5rz+eXdDQ2O7vVp17G8dvkzYNipln4y8Cg/IwaAAyvrG/g9dftCI7v4ZNwVdSNoQd\n CTWHmDaephzomkeBhfrh6Im+fiKSdbYXCaBS9NZfesg18u6X5vwcRsmUjGa9VBm8s+4y\n bAcZIzAyLcnb9X9ccAIIMx5h5dIvV+87e817GfNY69M+Z4+vyYPlWn6G0BMFKdvHwoSl\n otnQ==", "X-Google-DKIM-Signature": "v=1; a=rsa-sha256; c=relaxed/relaxed;\n d=1e100.net; s=20251104; t=1774526909; x=1775131709;\n h=in-reply-to:content-disposition:mime-version:references:message-id\n :subject:cc:to:from:date:x-gm-gg:x-gm-message-state:from:to:cc\n :subject:date:message-id:reply-to;\n bh=G/PAU7Ix1+nnfYVd+6n5LSymV23ji6LbgTx1i6i6WXQ=;\n b=DUeMXRBDwMXE//ppWLPOQ2CeIanY5dhhlBG9zROTmVYIW1nDtWrJ+SDN6UsNDQDpzc\n y2hjO/XZOhUSnlHcNGD1J47Q1lw5WLqT5OEpK6ak2rsSIE8YLlVrmp/b9ET45Hc3sLW1\n eqQKyq2T8yEk09aFFhRPK6R7gR+yebI+3pI+TkojmiBj8Eh/Blz/G1Zmjg7B1Rn04drA\n Z/YK6W0XREvtJ/NgorpFKqAVwE3xsczqiFYYawKSkHFhrJWPSxP+Sh8S5cVDi6wib/RS\n NULUIOlpsYTJ6+ZzlSNsGVntaN/zhMlRiX4oMTQ9WTB7PFiHkuIrA8HswUIJ2SccqEJq\n FKgQ==", "X-Forwarded-Encrypted": "i=1;\n AJvYcCUn5ywuPyYH8OsxvifvPycrqOJjOWh/m++0xokrcQ6tsHXzi25kAIet1x4OeQmxMSLEfCgjV/I=@lists.denx.de", "X-Gm-Message-State": "AOJu0YwsT2TRhy6847+erGjQdfSS9Ri3f3R8AXweRV79qFPY8pSInEzE\n aD/TZXWFQUkftb1THwvy46dsqkKK4tU/JxBajxckmBe09aSK8Rvr1+fUWHxrXeJ9EK0=", "X-Gm-Gg": "ATEYQzzkokxCHBDDTwXdtmjFF2OyHKghUBuX7MNlGC7E5CWyI3zi4gDv0hryxTrG6Ki\n sZVsLI3FpXUY20oZKUyinZXxWz6zmubNYOQTyPc4f9FDqzxiavrQcZdhqDnqvIuVI88fdLtzqBB\n srqqnSfddnUIQ7RFSPxcV5xSp/kqkWzyhAoBOx+CcD8p8a0XhYcl/SM9Fn66+J4KEHlvwHt6hQv\n 8iVsSSPEIXvG39GXnRT1gU37usVZQsESCssQGGkKQGehCu0U6gl/Io8t/FBcOwOePHMq629Y2pr\n d9QAdhFllAyChudHA68oJ+Ba961m08SAs9FuA/Tp5pRaHJH2IGWp4OpVjBvMAqreYH0UdwsNIWx\n lxfEX3OFH2A2ldeZZzz0OwMKZAqUmuq0wFSeGIHbdzy7fAu1RVRA3ENuR7Lm6pmDZqJbdvn4CdJ\n uptIs9Qhh/wwqmkey2Mi8PPMLMg9Oa", "X-Received": "by 2002:a05:600c:3b12:b0:47e:e2eb:bc22 with SMTP id\n 5b1f17b1804b1-48715fc3677mr108318935e9.5.1774526908928;\n Thu, 26 Mar 2026 05:08:28 -0700 (PDT)", "Date": "Thu, 26 Mar 2026 15:08:25 +0300", "From": "Dan Carpenter <dan.carpenter@linaro.org>", "To": "Peng Fan <peng.fan@nxp.com>", "Cc": "Tom Rini <trini@konsulko.com>, u-boot@lists.denx.de,\n Vincent Guittot <vincent.guittot@linaro.org>,\n Michal Simek <michal.simek@amd.com>, arm-scmi@vger.kernel.org,\n Linus Walleij <linusw@kernel.org>", "Subject": "[PATCH 2/2] pinctrl: scmi: Use standard device tree pin muxing format", "Message-ID": "\n <46f9b46210436e73d17a866424a00529439ce1ba.1774526652.git.dan.carpenter@linaro.org>", "References": "<cover.1774526652.git.dan.carpenter@linaro.org>", "MIME-Version": "1.0", "Content-Type": "text/plain; charset=us-ascii", "Content-Disposition": "inline", "In-Reply-To": "<cover.1774526652.git.dan.carpenter@linaro.org>", "X-BeenThere": "u-boot@lists.denx.de", "X-Mailman-Version": "2.1.39", "Precedence": "list", "List-Id": "U-Boot discussion <u-boot.lists.denx.de>", "List-Unsubscribe": "<https://lists.denx.de/options/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=unsubscribe>", "List-Archive": "<https://lists.denx.de/pipermail/u-boot/>", "List-Post": "<mailto:u-boot@lists.denx.de>", "List-Help": "<mailto:u-boot-request@lists.denx.de?subject=help>", "List-Subscribe": "<https://lists.denx.de/listinfo/u-boot>,\n <mailto:u-boot-request@lists.denx.de?subject=subscribe>", "Errors-To": "u-boot-bounces@lists.denx.de", "Sender": "\"U-Boot\" <u-boot-bounces@lists.denx.de>", "X-Virus-Scanned": "clamav-milter 0.103.8 at phobos.denx.de", "X-Virus-Status": "Clean" }, "content": "In the original code, I wrote a custom pin muxing parser but the\nupstream device trees wouldn't accept something like that so it would\nhave complicated mergine the device tree files.\n\nUse the standard device tree format with function and groups:\n\n\tpinmux1: pinmux1 {\n\t\tfunction = \"f_gpio1\";\n\t\tgroups = \"grp_1\", \"grp_3\";\n\t};\n\nSigned-off-by: Dan Carpenter <dan.carpenter@linaro.org>\n---\n drivers/pinctrl/pinctrl-scmi.c | 151 ++++++++++++---------------------\n 1 file changed, 54 insertions(+), 97 deletions(-)", "diff": "diff --git a/drivers/pinctrl/pinctrl-scmi.c b/drivers/pinctrl/pinctrl-scmi.c\nindex 63d4f8ffeb54..fa31b573f31e 100644\n--- a/drivers/pinctrl/pinctrl-scmi.c\n+++ b/drivers/pinctrl/pinctrl-scmi.c\n@@ -33,20 +33,6 @@ static const struct pinconf_param pinctrl_scmi_conf_params[] = {\n \t/* The SCMI spec also include \"default\", \"pull-mode\" and \"input-value */\n };\n \n-static bool valid_selector(struct udevice *dev, enum select_type select_type, u32 selector)\n-{\n-\tstruct pinctrl_scmi_priv *priv = dev_get_priv(dev);\n-\n-\tif (select_type == SCMI_PIN)\n-\t\treturn selector < priv->num_pins;\n-\tif (select_type == SCMI_GROUP)\n-\t\treturn selector < priv->num_groups;\n-\tif (select_type == SCMI_FUNCTION)\n-\t\treturn selector < priv->num_functions;\n-\n-\treturn false;\n-}\n-\n static int pinctrl_scmi_get_pins_count(struct udevice *dev)\n {\n \tstruct pinctrl_scmi_priv *priv = dev_get_priv(dev);\n@@ -98,6 +84,38 @@ static const char *pinctrl_scmi_get_function_name(struct udevice *dev, unsigned\n \treturn (const char *)priv->function_info[selector].name;\n }\n \n+static int pinctrl_scmi_get_function_id(struct udevice *dev, const char *function)\n+{\n+\tstruct pinctrl_scmi_priv *priv = dev_get_priv(dev);\n+\tint i;\n+\n+\tif (!function)\n+\t\treturn -EINVAL;\n+\n+\tfor (i = 0; i < priv->num_functions; i++) {\n+\t\tif (strcmp(priv->function_info[i].name, function) == 0)\n+\t\t\treturn i;\n+\t}\n+\n+\treturn -EINVAL;\n+}\n+\n+static int pinctrl_scmi_get_group_id(struct udevice *dev, const char *group)\n+{\n+\tstruct pinctrl_scmi_priv *priv = dev_get_priv(dev);\n+\tint i;\n+\n+\tif (!group)\n+\t\treturn -EINVAL;\n+\n+\tfor (i = 0; i < priv->num_groups; i++) {\n+\t\tif (strcmp(priv->group_info[i].name, group) == 0)\n+\t\t\treturn i;\n+\t}\n+\n+\treturn -EINVAL;\n+}\n+\n static int pinctrl_scmi_pinmux_set(struct udevice *dev, u32 pin, u32 function)\n {\n \tstruct pinctrl_scmi_priv *priv = dev_get_priv(dev);\n@@ -120,96 +138,35 @@ static int pinctrl_scmi_pinmux_group_set(struct udevice *dev, u32 group, u32 fun\n \n static int pinctrl_scmi_set_state(struct udevice *dev, struct udevice *config)\n {\n-\tstruct pinctrl_scmi_priv *priv = dev_get_priv(dev);\n-\t/* batch the setup into 20 lines at a go (there are 5 u32s in a config) */\n-\tconst int batch_count = 20 * 5;\n-\tu32 prev_type = -1u;\n-\tu32 prev_selector;\n-\tu32 *configs;\n-\tconst u32 *prop;\n-\tint offset, cnt, len;\n-\tint ret = 0;\n-\n-\tprop = dev_read_prop(config, \"pinmux\", &len);\n-\tif (!prop)\n-\t\treturn 0;\n-\n-\tif (len % sizeof(u32) * 5) {\n-\t\tdev_err(dev, \"invalid pin configuration: len=%d\\n\", len);\n-\t\treturn -FDT_ERR_BADSTRUCTURE;\n-\t}\n-\n-\tconfigs = kcalloc(batch_count, sizeof(u32), GFP_KERNEL);\n-\tif (!configs)\n-\t\treturn -ENOMEM;\n-\n-\toffset = 0;\n-\tcnt = 0;\n-\twhile (offset + 4 < len / sizeof(u32)) {\n-\t\tu32 select_type = fdt32_to_cpu(prop[offset]);\n-\t\tu32 selector = fdt32_to_cpu(prop[offset + 1]);\n-\t\tu32 function = fdt32_to_cpu(prop[offset + 2]);\n-\t\tu32 config_type = fdt32_to_cpu(prop[offset + 3]);\n-\t\tu32 config_value = fdt32_to_cpu(prop[offset + 4]);\n-\n-\t\tif (select_type > SCMI_GROUP ||\n-\t\t !valid_selector(dev, select_type, selector) ||\n-\t\t (function != SCMI_PINCTRL_FUNCTION_NONE &&\n-\t\t function > priv->num_functions)) {\n-\t\t\tdev_err(dev, \"invalid pinctrl data (%u %u %u %u %u)\\n\",\n-\t\t\t\tselect_type, selector, function, config_type,\n-\t\t\t\tconfig_value);\n-\t\t\tret = -EINVAL;\n-\t\t\tgoto free;\n-\t\t}\n+\tint function_id, group_id;\n+\tconst char *function;\n+\tconst char **groups;\n+\tint group_count;\n+\tint ret;\n+\tint i;\n \n-\t\tif (function != SCMI_PINCTRL_FUNCTION_NONE) {\n-\t\t\tif (cnt) {\n-\t\t\t\tret = scmi_pinctrl_settings_configure(dev,\n-\t\t\t\t\t\t\t\t prev_type,\n-\t\t\t\t\t\t\t\t prev_selector,\n-\t\t\t\t\t\t\t\t cnt / 2, configs);\n-\t\t\t\tif (ret)\n-\t\t\t\t\tgoto free;\n-\t\t\t\tprev_type = -1u;\n-\t\t\t\tcnt = 0;\n-\t\t\t}\n-\t\t\tscmi_pinctrl_set_function(dev, select_type, selector, function);\n-\t\t\toffset += 5;\n-\t\t\tcontinue;\n-\t\t}\n+\tret = dev_read_string_index(config, \"function\", 0, &function);\n+\tif (ret)\n+\t\treturn ret;\n \n-\t\tif (cnt == batch_count)\n-\t\t\tgoto set;\n+\tfunction_id = pinctrl_scmi_get_function_id(dev, function);\n+\tif (function_id < 0)\n+\t\treturn function_id;\n \n-\t\tif (prev_type == -1u)\n-\t\t\tgoto store;\n+\tgroup_count = dev_read_string_list(config, \"groups\", &groups);\n+\tif (group_count < 0)\n+\t\treturn group_count;\n \n-\t\tif (select_type == prev_type && selector == prev_selector)\n-\t\t\tgoto store;\n-set:\n-\t\tret = scmi_pinctrl_settings_configure(dev, prev_type, prev_selector,\n-\t\t\t\t\t\t cnt / 2, configs);\n+\tfor (i = 0; i < group_count; i++) {\n+\t\tgroup_id = pinctrl_scmi_get_group_id(dev, groups[i]);\n+\t\tif (group_id < 0)\n+\t\t\treturn group_id;\n+\t\tret = pinctrl_scmi_pinmux_group_set(dev, group_id, function_id);\n \t\tif (ret)\n-\t\t\tgoto free;\n-\t\tcnt = 0;\n-store:\n-\t\tprev_type = select_type;\n-\t\tprev_selector = selector;\n-\t\tconfigs[cnt++] = config_type;\n-\t\tconfigs[cnt++] = config_value;\n-\t\toffset += 5;\n+\t\t\treturn ret;\n \t}\n \n-\tif (cnt)\n-\t\tret = scmi_pinctrl_settings_configure(dev, prev_type, prev_selector,\n-\t\t\t\t\t\t cnt / 2, configs);\n-free:\n-\tkfree(configs);\n-\tif (ret)\n-\t\tdev_err(dev, \"set_state() failed: %d\\n\", ret);\n-\n-\treturn ret;\n+\treturn 0;\n }\n \n static int get_pin_muxing(struct udevice *dev, unsigned int selector,\n", "prefixes": [ "2/2" ] }