All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Peng Fan (OSS)" <peng.fan@oss.nxp.com>
To: Sudeep Holla <sudeep.holla@arm.com>,
	 Cristian Marussi <cristian.marussi@arm.com>,
	 Saravana Kannan <saravanak@google.com>,
	 Linus Walleij <linus.walleij@linaro.org>,
	 Dong Aisheng <aisheng.dong@nxp.com>,
	Fabio Estevam <festevam@gmail.com>,
	 Shawn Guo <shawnguo@kernel.org>, Jacky Bai <ping.bai@nxp.com>,
	 Pengutronix Kernel Team <kernel@pengutronix.de>,
	 Sascha Hauer <s.hauer@pengutronix.de>
Cc: arm-scmi@vger.kernel.org, linux-arm-kernel@lists.infradead.org,
	 linux-kernel@vger.kernel.org, linux-gpio@vger.kernel.org,
	 imx@lists.linux.dev, Peng Fan <peng.fan@nxp.com>
Subject: [PATCH v2 2/4] firmware: arm_scmi: Add machine_allowlist and machine_blocklist
Date: Mon, 20 Jan 2025 15:13:30 +0800	[thread overview]
Message-ID: <20250120-scmi-fwdevlink-v2-2-3af2fa37dbac@nxp.com> (raw)
In-Reply-To: <20250120-scmi-fwdevlink-v2-0-3af2fa37dbac@nxp.com>

From: Peng Fan <peng.fan@nxp.com>

There are two cases:
pinctrl-scmi.c and pinctrl-imx-scmi.c, both use SCMI_PROTOCOL_PINCTRL.
If both drivers are built in, and the scmi device with name "pinctrl-imx"
is created earlier, and the fwnode device points to the scmi device,
non-i.MX platforms will never have the pinctrl supplier ready.

Vendor A use 0x80 for feature X, Vendor B use 0x80 for feature Y.
With both drivers built in, two scmi devices will be created, and both
drivers will be probed. On A's patform, feature Y probe may fail, vice
verus.

Introduce machine_allowlist and machine_blocklist to allow or block
the creation of scmi devices to address above issues.

machine_blocklist is non-vendor protocols, but vendor has its own
implementation. Saying need to block pinctrl-scmi.c on i.MX95.
machine_allowlist is for vendor protocols. Saying vendor A drivers only
allow vendor A machine, vendor B machines only allow vendor B machine.

Signed-off-by: Peng Fan <peng.fan@nxp.com>
---
 drivers/firmware/arm_scmi/bus.c | 14 ++++++++++++++
 include/linux/scmi_protocol.h   |  3 +++
 2 files changed, 17 insertions(+)

diff --git a/drivers/firmware/arm_scmi/bus.c b/drivers/firmware/arm_scmi/bus.c
index 7850eb7710f499888d32aebf5d99df63db8bfa26..76a5d946de7a8e16f5d940abc4f542aac5bb2b92 100644
--- a/drivers/firmware/arm_scmi/bus.c
+++ b/drivers/firmware/arm_scmi/bus.c
@@ -55,6 +55,20 @@ static int scmi_protocol_device_request(const struct scmi_device_id *id_table)
 	unsigned int id = 0;
 	struct list_head *head, *phead = NULL;
 	struct scmi_requested_dev *rdev;
+	const char * const *allowlist = id_table->machine_allowlist;
+	const char * const *blocklist = id_table->machine_blocklist;
+
+	if (blocklist && of_machine_compatible_match(blocklist)) {
+		pr_debug("block SCMI device (%s) for protocol %x\n",
+			 id_table->name, id_table->protocol_id);
+		return 0;
+	}
+
+	if (allowlist && !of_machine_compatible_match(allowlist)) {
+		pr_debug("block SCMI device (%s) for protocol %x\n",
+			 id_table->name, id_table->protocol_id);
+		return 0;
+	}
 
 	pr_debug("Requesting SCMI device (%s) for protocol %x\n",
 		 id_table->name, id_table->protocol_id);
diff --git a/include/linux/scmi_protocol.h b/include/linux/scmi_protocol.h
index 688466a0e816247d24704f7ba109667a14226b67..e1b822d3522ff25168f895a4b1ed4c4e9a35bfff 100644
--- a/include/linux/scmi_protocol.h
+++ b/include/linux/scmi_protocol.h
@@ -950,6 +950,9 @@ struct scmi_device {
 struct scmi_device_id {
 	u8 protocol_id;
 	const char *name;
+	/* Optional */
+	const char * const *machine_blocklist;
+	const char * const *machine_allowlist;
 };
 
 struct scmi_driver {

-- 
2.37.1


  parent reply	other threads:[~2025-01-20  7:14 UTC|newest]

Thread overview: 27+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2025-01-20  7:13 [PATCH v2 0/4] scmi: Bypass set fwnode and introduce allow/block list to address devlink issue Peng Fan (OSS)
2025-01-20  7:13 ` [PATCH v2 1/4] firmware: arm_scmi: Bypass setting fwnode for scmi cpufreq Peng Fan (OSS)
2025-02-05 12:45   ` Dan Carpenter
2025-02-06 10:52     ` Peng Fan
2025-02-06 11:31       ` Dan Carpenter
2025-02-06 11:42         ` Cristian Marussi
2025-02-06 11:49           ` Dan Carpenter
2025-02-13  8:17           ` Saravana Kannan
2025-02-13 13:08             ` Cristian Marussi
2025-01-20  7:13 ` Peng Fan (OSS) [this message]
2025-02-06  8:02   ` [PATCH v2 2/4] firmware: arm_scmi: Add machine_allowlist and machine_blocklist Dan Carpenter
2025-02-06 11:05     ` Peng Fan
2025-02-06 11:40       ` Dan Carpenter
2025-02-06 11:46         ` Dan Carpenter
2025-02-06 14:15           ` Peng Fan
2025-02-06 12:06   ` Cristian Marussi
2025-02-06 14:12     ` Peng Fan
2025-02-10 13:19     ` Peng Fan
2025-02-11 15:46       ` Sudeep Holla
2025-02-12  6:25         ` Peng Fan
2025-02-12  6:19           ` Peng Fan
2025-01-20  7:13 ` [PATCH v2 3/4] pinctrl: freescale: scmi: Switch to use machine_allowlist Peng Fan (OSS)
2025-02-13  8:13   ` Saravana Kannan
2025-01-20  7:13 ` [PATCH v2 4/4] pinctrl: scmi: Switch to use machine_blocklist Peng Fan (OSS)
2025-02-13  8:13   ` Saravana Kannan
2025-02-04  3:31 ` [PATCH v2 0/4] scmi: Bypass set fwnode and introduce allow/block list to address devlink issue Peng Fan
2025-02-06  9:07   ` Linus Walleij

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20250120-scmi-fwdevlink-v2-2-3af2fa37dbac@nxp.com \
    --to=peng.fan@oss.nxp.com \
    --cc=aisheng.dong@nxp.com \
    --cc=arm-scmi@vger.kernel.org \
    --cc=cristian.marussi@arm.com \
    --cc=festevam@gmail.com \
    --cc=imx@lists.linux.dev \
    --cc=kernel@pengutronix.de \
    --cc=linus.walleij@linaro.org \
    --cc=linux-arm-kernel@lists.infradead.org \
    --cc=linux-gpio@vger.kernel.org \
    --cc=linux-kernel@vger.kernel.org \
    --cc=peng.fan@nxp.com \
    --cc=ping.bai@nxp.com \
    --cc=s.hauer@pengutronix.de \
    --cc=saravanak@google.com \
    --cc=shawnguo@kernel.org \
    --cc=sudeep.holla@arm.com \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.