All of lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711
@ 2022-02-15  5:52 Lukas Wunner
  2022-02-15 12:00 ` Stefan Wahren
  0 siblings, 1 reply; 6+ messages in thread
From: Lukas Wunner @ 2022-02-15  5:52 UTC (permalink / raw)
  To: Linus Walleij, Nicolas Saenz Julienne
  Cc: Florian Fainelli, Ray Jui, Scott Branden,
	bcm-kernel-feedback-list, linux-gpio, Stefan Wahren,
	Lino Sanfilippo, Philipp Rosenberger, linux-rpi-kernel

Commit b1d84a3d0a26 ("pinctrl: bcm2835: Add support for all GPIOs on
BCM2711") used a different label for the bcm2711 gpio_chip vis-à-vis
the bcm2835.

That breaks compatibility for GPIO_LOOKUP_IDX() and GPIO_HOG() clauses
when porting from older Raspberry Pi Compute Modules to the CM4 or CM4S.

The name change seems unwarranted given it's essentially the same
hardware, so use the old name instead.

For consistency, modify the pinctrl_desc and pinctrl_gpio_range names
as well.  (It looks like they're only used by debugfs.)

Signed-off-by: Lukas Wunner <lukas@wunner.de>
Cc: Stefan Wahren <stefan.wahren@i2se.com>
---
 drivers/pinctrl/bcm/pinctrl-bcm2835.c | 6 +++---
 1 file changed, 3 insertions(+), 3 deletions(-)

diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
index 47e433e09c5c..41d0f32b9d66 100644
--- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
+++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
@@ -375,7 +375,7 @@ static const struct gpio_chip bcm2835_gpio_chip = {
 };
 
 static const struct gpio_chip bcm2711_gpio_chip = {
-	.label = "pinctrl-bcm2711",
+	.label = MODULE_NAME,
 	.owner = THIS_MODULE,
 	.request = gpiochip_generic_request,
 	.free = gpiochip_generic_free,
@@ -1134,7 +1134,7 @@ static const struct pinctrl_desc bcm2835_pinctrl_desc = {
 };
 
 static const struct pinctrl_desc bcm2711_pinctrl_desc = {
-	.name = "pinctrl-bcm2711",
+	.name = MODULE_NAME,
 	.pins = bcm2835_gpio_pins,
 	.npins = BCM2711_NUM_GPIOS,
 	.pctlops = &bcm2835_pctl_ops,
@@ -1149,7 +1149,7 @@ static const struct pinctrl_gpio_range bcm2835_pinctrl_gpio_range = {
 };
 
 static const struct pinctrl_gpio_range bcm2711_pinctrl_gpio_range = {
-	.name = "pinctrl-bcm2711",
+	.name = MODULE_NAME,
 	.npins = BCM2711_NUM_GPIOS,
 };
 
-- 
2.34.1


^ permalink raw reply related	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711
  2022-02-15  5:52 [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711 Lukas Wunner
@ 2022-02-15 12:00 ` Stefan Wahren
  2022-02-15 14:44   ` Lukas Wunner
  0 siblings, 1 reply; 6+ messages in thread
From: Stefan Wahren @ 2022-02-15 12:00 UTC (permalink / raw)
  To: Lukas Wunner, Linus Walleij, Nicolas Saenz Julienne
  Cc: Florian Fainelli, Ray Jui, Scott Branden,
	bcm-kernel-feedback-list, linux-gpio, Lino Sanfilippo,
	Philipp Rosenberger, linux-rpi-kernel

Hi Lukas,

Am 15.02.22 um 06:52 schrieb Lukas Wunner:
> Commit b1d84a3d0a26 ("pinctrl: bcm2835: Add support for all GPIOs on
> BCM2711") used a different label for the bcm2711 gpio_chip vis-à-vis
> the bcm2835.
>
> That breaks compatibility for GPIO_LOOKUP_IDX() and GPIO_HOG() clauses
> when porting from older Raspberry Pi Compute Modules to the CM4 or CM4S.

i've some questions:

could you explain the breakage more in detail, is it kernel or user space?

A little bit off topic, but what is this CM4S? Is it special version of
the CM4? Can you provide a link or something?

>
> The name change seems unwarranted given it's essentially the same
> hardware, so use the old name instead.

I disagree at this point. The pinctrl of bcm2835 and bcm2711 are
different. For example the bcm2835 has only 54 GPIOs while the bcm2711
has 58.

Best regards

>
> For consistency, modify the pinctrl_desc and pinctrl_gpio_range names
> as well.  (It looks like they're only used by debugfs.)
>
> Signed-off-by: Lukas Wunner <lukas@wunner.de>
> Cc: Stefan Wahren <stefan.wahren@i2se.com>
> ---
>  drivers/pinctrl/bcm/pinctrl-bcm2835.c | 6 +++---
>  1 file changed, 3 insertions(+), 3 deletions(-)
>
> diff --git a/drivers/pinctrl/bcm/pinctrl-bcm2835.c b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
> index 47e433e09c5c..41d0f32b9d66 100644
> --- a/drivers/pinctrl/bcm/pinctrl-bcm2835.c
> +++ b/drivers/pinctrl/bcm/pinctrl-bcm2835.c
> @@ -375,7 +375,7 @@ static const struct gpio_chip bcm2835_gpio_chip = {
>  };
>  
>  static const struct gpio_chip bcm2711_gpio_chip = {
> -	.label = "pinctrl-bcm2711",
> +	.label = MODULE_NAME,
>  	.owner = THIS_MODULE,
>  	.request = gpiochip_generic_request,
>  	.free = gpiochip_generic_free,
> @@ -1134,7 +1134,7 @@ static const struct pinctrl_desc bcm2835_pinctrl_desc = {
>  };
>  
>  static const struct pinctrl_desc bcm2711_pinctrl_desc = {
> -	.name = "pinctrl-bcm2711",
> +	.name = MODULE_NAME,
>  	.pins = bcm2835_gpio_pins,
>  	.npins = BCM2711_NUM_GPIOS,
>  	.pctlops = &bcm2835_pctl_ops,
> @@ -1149,7 +1149,7 @@ static const struct pinctrl_gpio_range bcm2835_pinctrl_gpio_range = {
>  };
>  
>  static const struct pinctrl_gpio_range bcm2711_pinctrl_gpio_range = {
> -	.name = "pinctrl-bcm2711",
> +	.name = MODULE_NAME,
>  	.npins = BCM2711_NUM_GPIOS,
>  };
>  


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711
  2022-02-15 12:00 ` Stefan Wahren
@ 2022-02-15 14:44   ` Lukas Wunner
  2022-02-15 16:56     ` Stefan Wahren
  0 siblings, 1 reply; 6+ messages in thread
From: Lukas Wunner @ 2022-02-15 14:44 UTC (permalink / raw)
  To: Stefan Wahren
  Cc: Linus Walleij, Nicolas Saenz Julienne, Florian Fainelli, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-gpio,
	Lino Sanfilippo, Philipp Rosenberger, linux-rpi-kernel

On Tue, Feb 15, 2022 at 01:00:47PM +0100, Stefan Wahren wrote:
> Am 15.02.22 um 06:52 schrieb Lukas Wunner:
> > Commit b1d84a3d0a26 ("pinctrl: bcm2835: Add support for all GPIOs on
> > BCM2711") used a different label for the bcm2711 gpio_chip vis-à-vis
> > the bcm2835.
> >
> > That breaks compatibility for GPIO_LOOKUP_IDX() and GPIO_HOG() clauses
> > when porting from older Raspberry Pi Compute Modules to the CM4 or CM4S.
> 
> could you explain the breakage more in detail, is it kernel or user space?

This kernel module (which is sought to be upstreamed mid-term)
requests GPIOs at runtime for a chardev:

https://github.com/RevolutionPi/piControl/blob/master/revpi_core.c#L50

That fails on BCM2711 because a different label name was used,
even though the pin-controller is otherwise compatible to BCM2835.


> A little bit off topic, but what is this CM4S? Is it special version of
> the CM4? Can you provide a link or something?

BCM2711 in a CM1/CM3-compatible form factor.  There is no public
documentation at this point besides the device-tree overlay and
what's being discussed in the forums and on GitHub:

https://github.com/raspberrypi/linux/blob/rpi-5.15.y/arch/arm/boot/dts/bcm2711-rpi-cm4s.dts
https://forums.raspberrypi.com/viewtopic.php?t=325975
https://github.com/search?q=cm4s&type=commits


> > The name change seems unwarranted given it's essentially the same
> > hardware, so use the old name instead.
> 
> I disagree at this point. The pinctrl of bcm2835 and bcm2711 are
> different. For example the bcm2835 has only 54 GPIOs while the bcm2711
> has 58.

Four additional GPIOs don't justify a different label name given the
pin-controller otherwise behaves the same.  We also had minimal
differences in pin assignment on BCM2835/6/7 and that didn't
justify a different label name either.

Thanks,

Lukas

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711
  2022-02-15 14:44   ` Lukas Wunner
@ 2022-02-15 16:56     ` Stefan Wahren
  2022-02-15 17:17       ` Florian Fainelli
  0 siblings, 1 reply; 6+ messages in thread
From: Stefan Wahren @ 2022-02-15 16:56 UTC (permalink / raw)
  To: Lukas Wunner
  Cc: Linus Walleij, Nicolas Saenz Julienne, Florian Fainelli, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-gpio,
	Lino Sanfilippo, Philipp Rosenberger, linux-rpi-kernel

Hi,

Am 15.02.22 um 15:44 schrieb Lukas Wunner:

> On Tue, Feb 15, 2022 at 01:00:47PM +0100, Stefan Wahren wrote:
>> Am 15.02.22 um 06:52 schrieb Lukas Wunner:
>>> Commit b1d84a3d0a26 ("pinctrl: bcm2835: Add support for all GPIOs on
>>> BCM2711") used a different label for the bcm2711 gpio_chip vis-à-vis
>>> the bcm2835.
>>>
>>> That breaks compatibility for GPIO_LOOKUP_IDX() and GPIO_HOG() clauses
>>> when porting from older Raspberry Pi Compute Modules to the CM4 or CM4S.
>> could you explain the breakage more in detail, is it kernel or user space?
> This kernel module (which is sought to be upstreamed mid-term)
> requests GPIOs at runtime for a chardev:
>
> https://github.com/RevolutionPi/piControl/blob/master/revpi_core.c#L50
>
> That fails on BCM2711 because a different label name was used,
> even though the pin-controller is otherwise compatible to BCM2835.

sorry, but you cannot blame the mainline kernel for assumptions in out
of tree drivers. What happens if another driver relies on the existing
labeling?

How about detecting the platform via devicetree functions in your driver?

>
>
>> A little bit off topic, but what is this CM4S? Is it special version of
>> the CM4? Can you provide a link or something?
> BCM2711 in a CM1/CM3-compatible form factor.  There is no public
> documentation at this point besides the device-tree overlay and
> what's being discussed in the forums and on GitHub:
>
> https://github.com/raspberrypi/linux/blob/rpi-5.15.y/arch/arm/boot/dts/bcm2711-rpi-cm4s.dts
> https://forums.raspberrypi.com/viewtopic.php?t=325975
> https://github.com/search?q=cm4s&type=commits
Thanks a lot.
>
>>> The name change seems unwarranted given it's essentially the same
>>> hardware, so use the old name instead.
>> I disagree at this point. The pinctrl of bcm2835 and bcm2711 are
>> different. For example the bcm2835 has only 54 GPIOs while the bcm2711
>> has 58.
> Four additional GPIOs don't justify a different label name given the
> pin-controller otherwise behaves the same.  We also had minimal
> differences in pin assignment on BCM2835/6/7 and that didn't
> justify a different label name either.

No, the GPIO pins of BCM2835/6/7 SoC are always identical from driver
point of view, because they use the same devicetree compatible. It's the
Raspberry Pi board which connect the GPIOs differently, that was one of
the reasons for introduction of GPIO line names via devicetree.

I understand your pain, but i cannot give an Ack to this change.

Best regards

>
> Thanks,
>
> Lukas


^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711
  2022-02-15 16:56     ` Stefan Wahren
@ 2022-02-15 17:17       ` Florian Fainelli
  2022-02-16 10:05         ` Lukas Wunner
  0 siblings, 1 reply; 6+ messages in thread
From: Florian Fainelli @ 2022-02-15 17:17 UTC (permalink / raw)
  To: Stefan Wahren, Lukas Wunner
  Cc: Linus Walleij, Nicolas Saenz Julienne, Florian Fainelli, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-gpio,
	Lino Sanfilippo, Philipp Rosenberger, linux-rpi-kernel

On 2/15/22 8:56 AM, Stefan Wahren wrote:
> Hi,
> 
> Am 15.02.22 um 15:44 schrieb Lukas Wunner:
> 
>> On Tue, Feb 15, 2022 at 01:00:47PM +0100, Stefan Wahren wrote:
>>> Am 15.02.22 um 06:52 schrieb Lukas Wunner:
>>>> Commit b1d84a3d0a26 ("pinctrl: bcm2835: Add support for all GPIOs on
>>>> BCM2711") used a different label for the bcm2711 gpio_chip vis-à-vis
>>>> the bcm2835.
>>>>
>>>> That breaks compatibility for GPIO_LOOKUP_IDX() and GPIO_HOG() clauses
>>>> when porting from older Raspberry Pi Compute Modules to the CM4 or CM4S.
>>> could you explain the breakage more in detail, is it kernel or user space?
>> This kernel module (which is sought to be upstreamed mid-term)
>> requests GPIOs at runtime for a chardev:
>>
>> https://github.com/RevolutionPi/piControl/blob/master/revpi_core.c#L50
>>
>> That fails on BCM2711 because a different label name was used,
>> even though the pin-controller is otherwise compatible to BCM2835.
> 
> sorry, but you cannot blame the mainline kernel for assumptions in out
> of tree drivers. What happens if another driver relies on the existing
> labeling?
> 
> How about detecting the platform via devicetree functions in your driver?
> 
>>
>>
>>> A little bit off topic, but what is this CM4S? Is it special version of
>>> the CM4? Can you provide a link or something?
>> BCM2711 in a CM1/CM3-compatible form factor.  There is no public
>> documentation at this point besides the device-tree overlay and
>> what's being discussed in the forums and on GitHub:
>>
>> https://github.com/raspberrypi/linux/blob/rpi-5.15.y/arch/arm/boot/dts/bcm2711-rpi-cm4s.dts
>> https://forums.raspberrypi.com/viewtopic.php?t=325975
>> https://github.com/search?q=cm4s&type=commits
> Thanks a lot.
>>
>>>> The name change seems unwarranted given it's essentially the same
>>>> hardware, so use the old name instead.
>>> I disagree at this point. The pinctrl of bcm2835 and bcm2711 are
>>> different. For example the bcm2835 has only 54 GPIOs while the bcm2711
>>> has 58.
>> Four additional GPIOs don't justify a different label name given the
>> pin-controller otherwise behaves the same.  We also had minimal
>> differences in pin assignment on BCM2835/6/7 and that didn't
>> justify a different label name either.
> 
> No, the GPIO pins of BCM2835/6/7 SoC are always identical from driver
> point of view, because they use the same devicetree compatible. It's the
> Raspberry Pi board which connect the GPIOs differently, that was one of
> the reasons for introduction of GPIO line names via devicetree.
> 
> I understand your pain, but i cannot give an Ack to this change.

I agree with Stefan here, besides changing the driver name now would
mean potentially breaking user-space since the driver name is visible in
a variety of places. Seems to me like this is too late, we should have
caught this during the introduction of 2711.
--
Florian

^ permalink raw reply	[flat|nested] 6+ messages in thread

* Re: [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711
  2022-02-15 17:17       ` Florian Fainelli
@ 2022-02-16 10:05         ` Lukas Wunner
  0 siblings, 0 replies; 6+ messages in thread
From: Lukas Wunner @ 2022-02-16 10:05 UTC (permalink / raw)
  To: Florian Fainelli
  Cc: Stefan Wahren, Linus Walleij, Nicolas Saenz Julienne, Ray Jui,
	Scott Branden, bcm-kernel-feedback-list, linux-gpio,
	Lino Sanfilippo, Philipp Rosenberger, linux-rpi-kernel

On Tue, Feb 15, 2022 at 09:17:49AM -0800, Florian Fainelli wrote:
> >>> Am 15.02.22 um 06:52 schrieb Lukas Wunner:
> >>>> Commit b1d84a3d0a26 ("pinctrl: bcm2835: Add support for all GPIOs on
> >>>> BCM2711") used a different label for the bcm2711 gpio_chip vis-à-vis
> >>>> the bcm2835.
[...]
> I agree with Stefan here, besides changing the driver name now would
> mean potentially breaking user-space since the driver name is visible in
> a variety of places. Seems to me like this is too late, we should have
> caught this during the introduction of 2711.

This isn't about the driver name but the gpio_chip label.

The .name attribute of bcm2711_pinctrl_desc and bcm2711_pinctrl_gpio_range
is only visible in debugfs, which doesn't count as user-space ABI.

The .label attribute of bcm2711_gpio_chip is indeed visible in sysfs
and could in theory be used by udev rules, though I doubt it.

It definitely was a mistake not to use the same label as pinctrl-bcm2835.
Using a different label hinges on the notion that it's a different chip,
and while that may apply for the 4B+ and CM4, the assumption falls apart
with the CM4S which seeks to be a drop-in replacement for CM1/CM3,
but really is not because of mistakes like this one.  We're likely
not the only ones bitten by this, just the first to report.

Thanks,

Lukas

^ permalink raw reply	[flat|nested] 6+ messages in thread

end of thread, other threads:[~2022-02-16 10:14 UTC | newest]

Thread overview: 6+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2022-02-15  5:52 [PATCH] pinctrl: bcm2835: Use bcm2835 gpio_chip label for bcm2711 Lukas Wunner
2022-02-15 12:00 ` Stefan Wahren
2022-02-15 14:44   ` Lukas Wunner
2022-02-15 16:56     ` Stefan Wahren
2022-02-15 17:17       ` Florian Fainelli
2022-02-16 10:05         ` Lukas Wunner

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.