RE: [PATCH 2/4] firmware: arm_scmi: bus: Bypass setting fwnode for pinctrl
From: Peng Fan
Date: Tue Jan 14 2025 - 03:31:15 EST
Hi Cristian, Sudeep
> Subject: Re: [PATCH 2/4] firmware: arm_scmi: bus: Bypass setting
> fwnode for pinctrl
>
[...]
> >> fix here) than this change.
> >
> >...or indeed this is another possibility
>
> I am doing a patch as below, how to do you think?
Do you have any comments on below ideas?
I am thinking to send out new patchset based on
below ideas in this week.
>
> With below patch, we could resolve the devlink issue and also support
> mutitple vendor drivers built in, with each vendor driver has a
> machine_allowlist.
>
> diff --git a/drivers/firmware/arm_scmi/bus.c
> b/drivers/firmware/arm_scmi/bus.c index
> 1d2aedfcfdb4..c1c45b545480 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
> 688466a0e816..e1b822d3522f 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;
> };
Thanks,
Peng.
>
> struct scmi_driver {
>
> Thanks,
> Peng
> >
> >Thanks,
> >Cristian