lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [day] [month] [year] [list]
Date:   Mon, 3 Jul 2023 16:49:30 +0200
From:   Geert Uytterhoeven <geert@...ux-m68k.org>
To:     Linus Walleij <linus.walleij@...aro.org>,
        Fabrizio Castro <fabrizio.castro.jz@...esas.com>
Cc:     Rob Herring <robh+dt@...nel.org>,
        Krzysztof Kozlowski <krzysztof.kozlowski+dt@...aro.org>,
        Conor Dooley <conor+dt@...nel.org>,
        Magnus Damm <magnus.damm@...il.com>,
        linux-renesas-soc@...r.kernel.org, devicetree@...r.kernel.org,
        linux-kernel@...r.kernel.org,
        Chris Paterson <Chris.Paterson2@...esas.com>,
        Biju Das <biju.das@...renesas.com>,
        Lad Prabhakar <prabhakar.mahadev-lad.rj@...renesas.com>,
        "open list:GPIO SUBSYSTEM" <linux-gpio@...r.kernel.org>
Subject: Re: [PATCH] arm64: dts: renesas: rzv2mevk2: Fix eMMC/SDHI pinctrl names

Hi Linus, Fabrizio,

On Sat, Jun 24, 2023 at 9:12 PM Linus Walleij <linus.walleij@...aro.org> wrote:
> On Fri, Jun 23, 2023 at 10:40 AM Geert Uytterhoeven
> <geert@...ux-m68k.org> wrote:
> > On Fri, Jun 23, 2023 at 10:01 AM Fabrizio Castro
> > <fabrizio.castro.jz@...esas.com> wrote:
> > > pinctrl-rzv2m b6250000.pinctrl: pin P8_2 already requested by 85000000.mmc; cannot claim for 85020000.mmc
> > > pinctrl-rzv2m b6250000.pinctrl: pin-130 (85020000.mmc) status -22
> > > renesas_sdhi_internal_dmac 85020000.mmc: Error applying setting, reverse things back

I managed to reproduce the issue[*], and devised a fix, which I will
send shortly.

> > To me, that sounds like a bug in the pinctrl core.
> > Or am I missing something?
>
> The pin control core tracks on a per-pin basis, it has no clue about
> the name of certain dt nodes.
>
> This bug would be in the DT parsing code for the different states
> I think, and rzv2m is not using the core helpers for this but
> rather rzv2m_dt_subnode_to_map() etc.

Indeed, there's an issue in rzv2m_dt_subnode_to_map(): it registers
groups and functions using just the subnode names, which may not
be unique.  When this happens, they are ignored silently.

      $ cat /sys/kernel/debug/pinctrl/b6250000.pinctrl/pingroups
      registered pin groups:
      group: data
      pin 130 (P8_2)
      pin 131 (P8_3)
      pin 132 (P8_4)
      pin 133 (P8_5)

      group: ctrl
      pin 128 (P8_0)
      pin 129 (P8_1)

      group: cd
      pin 135 (P8_7)

      $ cat /sys/kernel/debug/pinctrl/b6250000.pinctrl/pinmux-functions
      function 0: data, groups = [ data ]
      function 1: ctrl, groups = [ ctrl ]
      function 2: cd, groups = [ cd ]

You can see this by adding checks in the pin control core:

--- a/drivers/pinctrl/core.c
+++ b/drivers/pinctrl/core.c
@@ -639,8 +639,10 @@ int pinctrl_generic_add_group(struct pinctrl_dev
*pctldev, const char *name,
                return -EINVAL;

        selector = pinctrl_generic_group_name_to_selector(pctldev, name);
-       if (selector >= 0)
+       if (selector >= 0) {
+               pr_err("Duplicate group name %s (selector %d)\n",
name, selector);
                return selector;
+       }

        selector = pctldev->num_groups;

--- a/drivers/pinctrl/pinmux.c
+++ b/drivers/pinctrl/pinmux.c
@@ -878,8 +878,10 @@ int pinmux_generic_add_function(struct
pinctrl_dev *pctldev,
                return -EINVAL;

        selector = pinmux_func_name_to_selector(pctldev, name);
-       if (selector >= 0)
+       if (selector >= 0) {
+pr_err("Duplicate function name %s (selector %d)\n", name, selector);
                return selector;
+       }

        selector = pctldev->num_functions;

Is there any special reason why such duplicates are just ignored,
and not flagged as an error?

The RZ/G2L and RZ/N1 pin control drivers have the same issue, but it
is not triggered on these platforms (yet), as their DTS files either
do not use subnodes, or use unique subnode names.

The RZ/A1 and RZ/A2 pin control drivers are not affected, as they do
not support subnodes.

The StarFive JH7100 pin control driver does it right, by constructing
group/function names from both the node and the subnode names.

[*] As I do not have an RZ/V2M board, I added pin control, eMMC, and
    SDHI snippets from RZ/V2M to the Koelsch DTS, and modified the
    drivers to not touch the non-existing hardware.




Gr{oetje,eeting}s,

                        Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@...ux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
                                -- Linus Torvalds

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ