> Subject: Re: [PATCH 2/4] firmware: arm_scmi: bus: Bypass setting > fwnode for pinctrl > > On Tue, Jan 14, 2025 at 08:31:03AM +0000, Peng Fan wrote: > > 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. > > > > Hi Peng, > > sorry for the delay. > > Why both blacklist and allowlist ? Because there is blocklist in pinctrl-scmi.c and allowlist in pinctrl-imx-scmi.c. we need to make sure only one pinctrl device are created when both drivers are built in. So to pinctrl-scmi.c, use blacklist, to pinctrl-imx-scmi.c use allowlist. To vendor protocols, just need allowlist. Regards, Peng. > > Cristian > > > > > > > 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