diff mbox series

[2/2] firmware: arm_scmi: Add compatibility checks for shmem node

Message ID 20210601225125.918225-2-sudeep.holla@arm.com (mailing list archive)
State New, archived
Headers show
Series [1/2] firmware: arm_scpi: Add compatibility checks for shmem node | expand

Commit Message

Sudeep Holla June 1, 2021, 10:51 p.m. UTC
The shared memory node used for communication between the firmware and
the OS should be compatible with "arm,scmi-shmem". Add the check for the
same while parsing the node before fetching the memory regions.

Cc: Cristian Marussi <cristian.marussi@arm.com>
Cc: Florian Fainelli <f.fainelli@gmail.com>
Cc: Jim Quinlan <jim2101024@gmail.com>
Cc: Etienne Carriere <etienne.carriere@linaro.org>
Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
---
 drivers/firmware/arm_scmi/mailbox.c | 3 +++
 drivers/firmware/arm_scmi/smc.c     | 3 +++
 2 files changed, 6 insertions(+)

Comments

Sudeep Holla June 2, 2021, 7:29 a.m. UTC | #1
On Tue, Jun 01, 2021 at 11:51:25PM +0100, Sudeep Holla wrote:
> The shared memory node used for communication between the firmware and
> the OS should be compatible with "arm,scmi-shmem". Add the check for the
> same while parsing the node before fetching the memory regions.
> 

Ignore this patch, sent a wrong version. This breaks build...

> Cc: Cristian Marussi <cristian.marussi@arm.com>
> Cc: Florian Fainelli <f.fainelli@gmail.com>
> Cc: Jim Quinlan <jim2101024@gmail.com>
> Cc: Etienne Carriere <etienne.carriere@linaro.org>
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  drivers/firmware/arm_scmi/mailbox.c | 3 +++
>  drivers/firmware/arm_scmi/smc.c     | 3 +++
>  2 files changed, 6 insertions(+)
> 
> diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> index 4626404be541..e3dcb58314ae 100644
> --- a/drivers/firmware/arm_scmi/mailbox.c
> +++ b/drivers/firmware/arm_scmi/mailbox.c
> @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
>  		return -ENOMEM;
>  
>  	shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> +	if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> +		return -ENXIO;
> +
>  	ret = of_address_to_resource(shmem, 0, &res);
>  	of_node_put(shmem);
>  	if (ret) {
> diff --git a/drivers/firmware/arm_scmi/smc.c b/drivers/firmware/arm_scmi/smc.c
> index fcbe2677f84b..78198ef94438 100644
> --- a/drivers/firmware/arm_scmi/smc.c
> +++ b/drivers/firmware/arm_scmi/smc.c
> @@ -76,6 +76,9 @@ static int smc_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
>  		return -ENOMEM;
>  
>  	np = of_parse_phandle(cdev->of_node, "shmem", 0);
> +	if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))

s/shmem/np/

> +		return -ENXIO;
> +
>  	ret = of_address_to_resource(np, 0, &res);
>  	of_node_put(np);
>  	if (ret) {
> -- 
> 2.25.1
>
Etienne Carriere June 2, 2021, 7:33 a.m. UTC | #2
Hello Sudeep,


On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
>
> The shared memory node used for communication between the firmware and
> the OS should be compatible with "arm,scmi-shmem". Add the check for the
> same while parsing the node before fetching the memory regions.
>
> Cc: Cristian Marussi <cristian.marussi@arm.com>
> Cc: Florian Fainelli <f.fainelli@gmail.com>
> Cc: Jim Quinlan <jim2101024@gmail.com>
> Cc: Etienne Carriere <etienne.carriere@linaro.org>
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> ---
>  drivers/firmware/arm_scmi/mailbox.c | 3 +++
>  drivers/firmware/arm_scmi/smc.c     | 3 +++
>  2 files changed, 6 insertions(+)
>
> diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> index 4626404be541..e3dcb58314ae 100644
> --- a/drivers/firmware/arm_scmi/mailbox.c
> +++ b/drivers/firmware/arm_scmi/mailbox.c
> @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
>                 return -ENOMEM;
>
>         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> +               return -ENXIO;

Before this change, one could use another type of memory node, like "mmio-sram".
Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?

Regards,
Etienne

> +
>         ret = of_address_to_resource(shmem, 0, &res);
>         of_node_put(shmem);
>         if (ret) {
> diff --git a/drivers/firmware/arm_scmi/smc.c b/drivers/firmware/arm_scmi/smc.c
> index fcbe2677f84b..78198ef94438 100644
> --- a/drivers/firmware/arm_scmi/smc.c
> +++ b/drivers/firmware/arm_scmi/smc.c
> @@ -76,6 +76,9 @@ static int smc_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
>                 return -ENOMEM;
>
>         np = of_parse_phandle(cdev->of_node, "shmem", 0);
> +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> +               return -ENXIO;
> +
>         ret = of_address_to_resource(np, 0, &res);
>         of_node_put(np);
>         if (ret) {
> --
> 2.25.1
>
Sudeep Holla June 2, 2021, 7:36 a.m. UTC | #3
On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
> Hello Sudeep,
> 
> 
> On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >
> > The shared memory node used for communication between the firmware and
> > the OS should be compatible with "arm,scmi-shmem". Add the check for the
> > same while parsing the node before fetching the memory regions.
> >
> > Cc: Cristian Marussi <cristian.marussi@arm.com>
> > Cc: Florian Fainelli <f.fainelli@gmail.com>
> > Cc: Jim Quinlan <jim2101024@gmail.com>
> > Cc: Etienne Carriere <etienne.carriere@linaro.org>
> > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > ---
> >  drivers/firmware/arm_scmi/mailbox.c | 3 +++
> >  drivers/firmware/arm_scmi/smc.c     | 3 +++
> >  2 files changed, 6 insertions(+)
> >
> > diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> > index 4626404be541..e3dcb58314ae 100644
> > --- a/drivers/firmware/arm_scmi/mailbox.c
> > +++ b/drivers/firmware/arm_scmi/mailbox.c
> > @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
> >                 return -ENOMEM;
> >
> >         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> > +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> > +               return -ENXIO;
> 
> Before this change, one could use another type of memory node, like "mmio-sram".
> Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
>

No that is for the entire SRAM which still holds and generic on-chip SRAM
driver will take care of that, this is only for the subsections that is
reserved for the scp shmem. The binding has been always there, just the
missing check. When I move to yaml, I realised that and hence the
addition of check.
Etienne Carriere June 2, 2021, 7:44 a.m. UTC | #4
On Wed, 2 Jun 2021 at 09:37, Sudeep Holla <sudeep.holla@arm.com> wrote:
>
> On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
> > Hello Sudeep,
> >
> >
> > On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
> > >
> > > The shared memory node used for communication between the firmware and
> > > the OS should be compatible with "arm,scmi-shmem". Add the check for the
> > > same while parsing the node before fetching the memory regions.
> > >
> > > Cc: Cristian Marussi <cristian.marussi@arm.com>
> > > Cc: Florian Fainelli <f.fainelli@gmail.com>
> > > Cc: Jim Quinlan <jim2101024@gmail.com>
> > > Cc: Etienne Carriere <etienne.carriere@linaro.org>
> > > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > > ---
> > >  drivers/firmware/arm_scmi/mailbox.c | 3 +++
> > >  drivers/firmware/arm_scmi/smc.c     | 3 +++
> > >  2 files changed, 6 insertions(+)
> > >
> > > diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> > > index 4626404be541..e3dcb58314ae 100644
> > > --- a/drivers/firmware/arm_scmi/mailbox.c
> > > +++ b/drivers/firmware/arm_scmi/mailbox.c
> > > @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
> > >                 return -ENOMEM;
> > >
> > >         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> > > +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> > > +               return -ENXIO;
> >
> > Before this change, one could use another type of memory node, like "mmio-sram".
> > Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
> >
>
> No that is for the entire SRAM which still holds and generic on-chip SRAM
> driver will take care of that, this is only for the subsections that is
> reserved for the scp shmem. The binding has been always there, just the
> missing check. When I move to yaml, I realised that and hence the
> addition of check.

Ok, I understand. True the binding was there but only in the DTS
examples snipped.
This constraint on the compatible property of the shmem node should be
clearly stated in the yaml I think.

br,
etienne

>
> --
> Regards,
> Sudeep
Sudeep Holla June 2, 2021, 7:53 a.m. UTC | #5
On Wed, Jun 02, 2021 at 09:44:40AM +0200, Etienne Carriere wrote:
> On Wed, 2 Jun 2021 at 09:37, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >
> > On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
> > > Hello Sudeep,
> > >
> > >
> > > On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
> > > >
> > > > The shared memory node used for communication between the firmware and
> > > > the OS should be compatible with "arm,scmi-shmem". Add the check for the
> > > > same while parsing the node before fetching the memory regions.
> > > >
> > > > Cc: Cristian Marussi <cristian.marussi@arm.com>
> > > > Cc: Florian Fainelli <f.fainelli@gmail.com>
> > > > Cc: Jim Quinlan <jim2101024@gmail.com>
> > > > Cc: Etienne Carriere <etienne.carriere@linaro.org>
> > > > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > > > ---
> > > >  drivers/firmware/arm_scmi/mailbox.c | 3 +++
> > > >  drivers/firmware/arm_scmi/smc.c     | 3 +++
> > > >  2 files changed, 6 insertions(+)
> > > >
> > > > diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> > > > index 4626404be541..e3dcb58314ae 100644
> > > > --- a/drivers/firmware/arm_scmi/mailbox.c
> > > > +++ b/drivers/firmware/arm_scmi/mailbox.c
> > > > @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
> > > >                 return -ENOMEM;
> > > >
> > > >         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> > > > +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> > > > +               return -ENXIO;
> > >
> > > Before this change, one could use another type of memory node, like "mmio-sram".
> > > Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
> > >
> >
> > No that is for the entire SRAM which still holds and generic on-chip SRAM
> > driver will take care of that, this is only for the subsections that is
> > reserved for the scp shmem. The binding has been always there, just the
> > missing check. When I move to yaml, I realised that and hence the
> > addition of check.
> 
> Ok, I understand. True the binding was there but only in the DTS
> examples snipped.
> This constraint on the compatible property of the shmem node should be
> clearly stated in the yaml I think.
> 

Was this missing in your DTS files ? Just curious.
Florian Fainelli June 3, 2021, 5:18 p.m. UTC | #6
On 6/2/21 12:53 AM, Sudeep Holla wrote:
> On Wed, Jun 02, 2021 at 09:44:40AM +0200, Etienne Carriere wrote:
>> On Wed, 2 Jun 2021 at 09:37, Sudeep Holla <sudeep.holla@arm.com> wrote:
>>>
>>> On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
>>>> Hello Sudeep,
>>>>
>>>>
>>>> On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
>>>>>
>>>>> The shared memory node used for communication between the firmware and
>>>>> the OS should be compatible with "arm,scmi-shmem". Add the check for the
>>>>> same while parsing the node before fetching the memory regions.
>>>>>
>>>>> Cc: Cristian Marussi <cristian.marussi@arm.com>
>>>>> Cc: Florian Fainelli <f.fainelli@gmail.com>
>>>>> Cc: Jim Quinlan <jim2101024@gmail.com>
>>>>> Cc: Etienne Carriere <etienne.carriere@linaro.org>
>>>>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>>>>> ---
>>>>>  drivers/firmware/arm_scmi/mailbox.c | 3 +++
>>>>>  drivers/firmware/arm_scmi/smc.c     | 3 +++
>>>>>  2 files changed, 6 insertions(+)
>>>>>
>>>>> diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
>>>>> index 4626404be541..e3dcb58314ae 100644
>>>>> --- a/drivers/firmware/arm_scmi/mailbox.c
>>>>> +++ b/drivers/firmware/arm_scmi/mailbox.c
>>>>> @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
>>>>>                 return -ENOMEM;
>>>>>
>>>>>         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
>>>>> +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
>>>>> +               return -ENXIO;
>>>>
>>>> Before this change, one could use another type of memory node, like "mmio-sram".
>>>> Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
>>>>
>>>
>>> No that is for the entire SRAM which still holds and generic on-chip SRAM
>>> driver will take care of that, this is only for the subsections that is
>>> reserved for the scp shmem. The binding has been always there, just the
>>> missing check. When I move to yaml, I realised that and hence the
>>> addition of check.
>>
>> Ok, I understand. True the binding was there but only in the DTS
>> examples snipped.
>> This constraint on the compatible property of the shmem node should be
>> clearly stated in the yaml I think.
>>
> 
> Was this missing in your DTS files ? Just curious.
> 

FWIW, our legacy DTs would have the following:

	reserved-memory {
                /* This is a placeholder */
                NWMBOX: NWMBOX {
                };
        };

       brcm_scmi: brcm_scmi@0 {
                compatible = "arm,scmi-smc", "arm,scmi";
                mboxes = <&brcm_scmi_mailbox 0>, <&brcm_scmi_mailbox 1>;
                mbox-names = "tx", "rx";
                shmem = <&NWMBOX>;
                status = "disabled";

so while we have since switched to the SMC transport, the shared memory
still does not have an "arm,scmi-shmem" compatible string, and this is a
relatively new thing, so I am not sure we can enforce that just yet?
Florian Fainelli June 3, 2021, 5:20 p.m. UTC | #7
On 6/3/21 10:18 AM, Florian Fainelli wrote:
> On 6/2/21 12:53 AM, Sudeep Holla wrote:
>> On Wed, Jun 02, 2021 at 09:44:40AM +0200, Etienne Carriere wrote:
>>> On Wed, 2 Jun 2021 at 09:37, Sudeep Holla <sudeep.holla@arm.com> wrote:
>>>>
>>>> On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
>>>>> Hello Sudeep,
>>>>>
>>>>>
>>>>> On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
>>>>>>
>>>>>> The shared memory node used for communication between the firmware and
>>>>>> the OS should be compatible with "arm,scmi-shmem". Add the check for the
>>>>>> same while parsing the node before fetching the memory regions.
>>>>>>
>>>>>> Cc: Cristian Marussi <cristian.marussi@arm.com>
>>>>>> Cc: Florian Fainelli <f.fainelli@gmail.com>
>>>>>> Cc: Jim Quinlan <jim2101024@gmail.com>
>>>>>> Cc: Etienne Carriere <etienne.carriere@linaro.org>
>>>>>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>>>>>> ---
>>>>>>  drivers/firmware/arm_scmi/mailbox.c | 3 +++
>>>>>>  drivers/firmware/arm_scmi/smc.c     | 3 +++
>>>>>>  2 files changed, 6 insertions(+)
>>>>>>
>>>>>> diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
>>>>>> index 4626404be541..e3dcb58314ae 100644
>>>>>> --- a/drivers/firmware/arm_scmi/mailbox.c
>>>>>> +++ b/drivers/firmware/arm_scmi/mailbox.c
>>>>>> @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
>>>>>>                 return -ENOMEM;
>>>>>>
>>>>>>         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
>>>>>> +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
>>>>>> +               return -ENXIO;
>>>>>
>>>>> Before this change, one could use another type of memory node, like "mmio-sram".
>>>>> Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
>>>>>
>>>>
>>>> No that is for the entire SRAM which still holds and generic on-chip SRAM
>>>> driver will take care of that, this is only for the subsections that is
>>>> reserved for the scp shmem. The binding has been always there, just the
>>>> missing check. When I move to yaml, I realised that and hence the
>>>> addition of check.
>>>
>>> Ok, I understand. True the binding was there but only in the DTS
>>> examples snipped.
>>> This constraint on the compatible property of the shmem node should be
>>> clearly stated in the yaml I think.
>>>
>>
>> Was this missing in your DTS files ? Just curious.
>>
> 
> FWIW, our legacy DTs would have the following:
> 
> 	reserved-memory {
>                 /* This is a placeholder */
>                 NWMBOX: NWMBOX {
>                 };
>         };
> 
>        brcm_scmi: brcm_scmi@0 {
>                 compatible = "arm,scmi-smc", "arm,scmi";
>                 mboxes = <&brcm_scmi_mailbox 0>, <&brcm_scmi_mailbox 1>;
>                 mbox-names = "tx", "rx";
>                 shmem = <&NWMBOX>;
>                 status = "disabled";
> 
> so while we have since switched to the SMC transport, the shared memory
> still does not have an "arm,scmi-shmem" compatible string, and this is a
> relatively new thing, so I am not sure we can enforce that just yet?

Sorry, I incorrectly browsed the binding history, this is not a new
requirement,  will make sure we fix it at our end, too.
Sudeep Holla June 3, 2021, 5:42 p.m. UTC | #8
(I saw your later reply but had started replying, so sending anyway.)

On Thu, Jun 03, 2021 at 10:18:20AM -0700, Florian Fainelli wrote:
> On 6/2/21 12:53 AM, Sudeep Holla wrote:
> > On Wed, Jun 02, 2021 at 09:44:40AM +0200, Etienne Carriere wrote:
> >> On Wed, 2 Jun 2021 at 09:37, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >>>
> >>> On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
> >>>> Hello Sudeep,
> >>>>
> >>>>
> >>>> On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >>>>>
> >>>>> The shared memory node used for communication between the firmware and
> >>>>> the OS should be compatible with "arm,scmi-shmem". Add the check for the
> >>>>> same while parsing the node before fetching the memory regions.
> >>>>>
> >>>>> Cc: Cristian Marussi <cristian.marussi@arm.com>
> >>>>> Cc: Florian Fainelli <f.fainelli@gmail.com>
> >>>>> Cc: Jim Quinlan <jim2101024@gmail.com>
> >>>>> Cc: Etienne Carriere <etienne.carriere@linaro.org>
> >>>>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> >>>>> ---
> >>>>>  drivers/firmware/arm_scmi/mailbox.c | 3 +++
> >>>>>  drivers/firmware/arm_scmi/smc.c     | 3 +++
> >>>>>  2 files changed, 6 insertions(+)
> >>>>>
> >>>>> diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> >>>>> index 4626404be541..e3dcb58314ae 100644
> >>>>> --- a/drivers/firmware/arm_scmi/mailbox.c
> >>>>> +++ b/drivers/firmware/arm_scmi/mailbox.c
> >>>>> @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
> >>>>>                 return -ENOMEM;
> >>>>>
> >>>>>         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> >>>>> +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> >>>>> +               return -ENXIO;
> >>>>
> >>>> Before this change, one could use another type of memory node, like "mmio-sram".
> >>>> Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
> >>>>
> >>>
> >>> No that is for the entire SRAM which still holds and generic on-chip SRAM
> >>> driver will take care of that, this is only for the subsections that is
> >>> reserved for the scp shmem. The binding has been always there, just the
> >>> missing check. When I move to yaml, I realised that and hence the
> >>> addition of check.
> >>
> >> Ok, I understand. True the binding was there but only in the DTS
> >> examples snipped.
> >> This constraint on the compatible property of the shmem node should be
> >> clearly stated in the yaml I think.
> >>
> > 
> > Was this missing in your DTS files ? Just curious.
> > 
> 
> FWIW, our legacy DTs would have the following:
> 
> 	reserved-memory {
>                 /* This is a placeholder */
>                 NWMBOX: NWMBOX {
>                 };
>         };
> 
>        brcm_scmi: brcm_scmi@0 {
>                 compatible = "arm,scmi-smc", "arm,scmi";
>                 mboxes = <&brcm_scmi_mailbox 0>, <&brcm_scmi_mailbox 1>;
>                 mbox-names = "tx", "rx";
>                 shmem = <&NWMBOX>;
>                 status = "disabled";
> 
> so while we have since switched to the SMC transport, the shared memory
> still does not have an "arm,scmi-shmem" compatible string, and this is a
> relatively new thing, so I am not sure we can enforce that just yet?

Since multiple people got the same doubt, I went and checked, it has been
there since we introduced the bindings in v4.17

https://elixir.bootlin.com/linux/v4.17/source/Documentation/devicetree/bindings/arm/arm,scmi.txt#L88

Converting to yaml made to add this check which was missing. So ideally
it is not any compatibility issues. Just that we were never good at following
the binding before 
Sudeep Holla June 3, 2021, 5:45 p.m. UTC | #9
On Thu, Jun 03, 2021 at 10:20:32AM -0700, Florian Fainelli wrote:
> On 6/3/21 10:18 AM, Florian Fainelli wrote:
> > On 6/2/21 12:53 AM, Sudeep Holla wrote:
> >> On Wed, Jun 02, 2021 at 09:44:40AM +0200, Etienne Carriere wrote:
> >>> On Wed, 2 Jun 2021 at 09:37, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >>>>
> >>>> On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
> >>>>> Hello Sudeep,
> >>>>>
> >>>>>
> >>>>> On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >>>>>>
> >>>>>> The shared memory node used for communication between the firmware and
> >>>>>> the OS should be compatible with "arm,scmi-shmem". Add the check for the
> >>>>>> same while parsing the node before fetching the memory regions.
> >>>>>>
> >>>>>> Cc: Cristian Marussi <cristian.marussi@arm.com>
> >>>>>> Cc: Florian Fainelli <f.fainelli@gmail.com>
> >>>>>> Cc: Jim Quinlan <jim2101024@gmail.com>
> >>>>>> Cc: Etienne Carriere <etienne.carriere@linaro.org>
> >>>>>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> >>>>>> ---
> >>>>>>  drivers/firmware/arm_scmi/mailbox.c | 3 +++
> >>>>>>  drivers/firmware/arm_scmi/smc.c     | 3 +++
> >>>>>>  2 files changed, 6 insertions(+)
> >>>>>>
> >>>>>> diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> >>>>>> index 4626404be541..e3dcb58314ae 100644
> >>>>>> --- a/drivers/firmware/arm_scmi/mailbox.c
> >>>>>> +++ b/drivers/firmware/arm_scmi/mailbox.c
> >>>>>> @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
> >>>>>>                 return -ENOMEM;
> >>>>>>
> >>>>>>         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> >>>>>> +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> >>>>>> +               return -ENXIO;
> >>>>>
> >>>>> Before this change, one could use another type of memory node, like "mmio-sram".
> >>>>> Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
> >>>>>
> >>>>
> >>>> No that is for the entire SRAM which still holds and generic on-chip SRAM
> >>>> driver will take care of that, this is only for the subsections that is
> >>>> reserved for the scp shmem. The binding has been always there, just the
> >>>> missing check. When I move to yaml, I realised that and hence the
> >>>> addition of check.
> >>>
> >>> Ok, I understand. True the binding was there but only in the DTS
> >>> examples snipped.
> >>> This constraint on the compatible property of the shmem node should be
> >>> clearly stated in the yaml I think.
> >>>
> >>
> >> Was this missing in your DTS files ? Just curious.
> >>
> > 
> > FWIW, our legacy DTs would have the following:
> > 
> > 	reserved-memory {
> >                 /* This is a placeholder */
> >                 NWMBOX: NWMBOX {
> >                 };
> >         };
> > 
> >        brcm_scmi: brcm_scmi@0 {
> >                 compatible = "arm,scmi-smc", "arm,scmi";
> >                 mboxes = <&brcm_scmi_mailbox 0>, <&brcm_scmi_mailbox 1>;
> >                 mbox-names = "tx", "rx";
> >                 shmem = <&NWMBOX>;
> >                 status = "disabled";
> > 
> > so while we have since switched to the SMC transport, the shared memory
> > still does not have an "arm,scmi-shmem" compatible string, and this is a
> > relatively new thing, so I am not sure we can enforce that just yet?
> 
> Sorry, I incorrectly browsed the binding history, this is not a new
> requirement,  will make sure we fix it at our end, too.

Indeed, I cross checked that when I hit the issue on Juno yesterday.
Anyways this version has build issues, was sent by mistake. I have resend
the correct ones later[1]
Etienne Carriere June 3, 2021, 6:19 p.m. UTC | #10
On Wed, 2 Jun 2021 at 09:53, Sudeep Holla <sudeep.holla@arm.com> wrote:
>
> On Wed, Jun 02, 2021 at 09:44:40AM +0200, Etienne Carriere wrote:
> > On Wed, 2 Jun 2021 at 09:37, Sudeep Holla <sudeep.holla@arm.com> wrote:
> > >
> > > On Wed, Jun 02, 2021 at 09:33:03AM +0200, Etienne Carriere wrote:
> > > > Hello Sudeep,
> > > >
> > > >
> > > > On Wed, 2 Jun 2021 at 00:51, Sudeep Holla <sudeep.holla@arm.com> wrote:
> > > > >
> > > > > The shared memory node used for communication between the firmware and
> > > > > the OS should be compatible with "arm,scmi-shmem". Add the check for the
> > > > > same while parsing the node before fetching the memory regions.
> > > > >
> > > > > Cc: Cristian Marussi <cristian.marussi@arm.com>
> > > > > Cc: Florian Fainelli <f.fainelli@gmail.com>
> > > > > Cc: Jim Quinlan <jim2101024@gmail.com>
> > > > > Cc: Etienne Carriere <etienne.carriere@linaro.org>
> > > > > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > > > > ---
> > > > >  drivers/firmware/arm_scmi/mailbox.c | 3 +++
> > > > >  drivers/firmware/arm_scmi/smc.c     | 3 +++
> > > > >  2 files changed, 6 insertions(+)
> > > > >
> > > > > diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
> > > > > index 4626404be541..e3dcb58314ae 100644
> > > > > --- a/drivers/firmware/arm_scmi/mailbox.c
> > > > > +++ b/drivers/firmware/arm_scmi/mailbox.c
> > > > > @@ -69,6 +69,9 @@ static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
> > > > >                 return -ENOMEM;
> > > > >
> > > > >         shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
> > > > > +       if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
> > > > > +               return -ENXIO;
> > > >
> > > > Before this change, one could use another type of memory node, like "mmio-sram".
> > > > Is there a strong reason to enforce use of "arm,scmi-shmem" nodes?
> > > >
> > >
> > > No that is for the entire SRAM which still holds and generic on-chip SRAM
> > > driver will take care of that, this is only for the subsections that is
> > > reserved for the scp shmem. The binding has been always there, just the
> > > missing check. When I move to yaml, I realised that and hence the
> > > addition of check.
> >
> > Ok, I understand. True the binding was there but only in the DTS
> > examples snipped.
> > This constraint on the compatible property of the shmem node should be
> > clearly stated in the yaml I think.
> >
>
> Was this missing in your DTS files ? Just curious.

Yes it was :(

>
> --
> Regards,
> Sudeep
Sudeep Holla June 4, 2021, 9:13 a.m. UTC | #11
On Thu, Jun 03, 2021 at 08:19:26PM +0200, Etienne Carriere wrote:
> On Wed, 2 Jun 2021 at 09:53, Sudeep Holla <sudeep.holla@arm.com> wrote:
> >
> > Was this missing in your DTS files ? Just curious.
>
> Yes it was :(
>

Oh well, not a surprise as I missed it too on Juno! Hopefully YAML schema
must catch it in future.

--
Regards,
Sudeep
diff mbox series

Patch

diff --git a/drivers/firmware/arm_scmi/mailbox.c b/drivers/firmware/arm_scmi/mailbox.c
index 4626404be541..e3dcb58314ae 100644
--- a/drivers/firmware/arm_scmi/mailbox.c
+++ b/drivers/firmware/arm_scmi/mailbox.c
@@ -69,6 +69,9 @@  static int mailbox_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
 		return -ENOMEM;
 
 	shmem = of_parse_phandle(cdev->of_node, "shmem", idx);
+	if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
+		return -ENXIO;
+
 	ret = of_address_to_resource(shmem, 0, &res);
 	of_node_put(shmem);
 	if (ret) {
diff --git a/drivers/firmware/arm_scmi/smc.c b/drivers/firmware/arm_scmi/smc.c
index fcbe2677f84b..78198ef94438 100644
--- a/drivers/firmware/arm_scmi/smc.c
+++ b/drivers/firmware/arm_scmi/smc.c
@@ -76,6 +76,9 @@  static int smc_chan_setup(struct scmi_chan_info *cinfo, struct device *dev,
 		return -ENOMEM;
 
 	np = of_parse_phandle(cdev->of_node, "shmem", 0);
+	if (!of_device_is_compatible(shmem, "arm,scmi-shmem"))
+		return -ENXIO;
+
 	ret = of_address_to_resource(np, 0, &res);
 	of_node_put(np);
 	if (ret) {