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 for Android: free password hash cracker in your pocket
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:	Tue, 29 Mar 2016 20:05:34 +0200
From:	Geert Uytterhoeven <geert@...ux-m68k.org>
To:	Mark Brown <broonie@...nel.org>
Cc:	Bjorn Andersson <bjorn@...o.se>,
	Krzysztof Kozlowski <k.kozlowski@...sung.com>,
	Ivaylo Dimitrov <ivo.g.dimitrov.75@...il.com>,
	Liam Girdwood <lgirdwood@...il.com>,
	"linux-kernel@...r.kernel.org" <linux-kernel@...r.kernel.org>,
	Ulf Hansson <ulf.hansson@...aro.org>,
	linux-mmc <linux-mmc@...r.kernel.org>,
	linux-samsung-soc <linux-samsung-soc@...r.kernel.org>,
	Javier Martinez Canillas <javier@....samsung.com>,
	Marek Szyprowski <m.szyprowski@...sung.com>,
	linux-renesas-soc@...r.kernel.org
Subject: Re: [PATCH 2/2] regulator: core: Ensure we are at least in bounds for
 our constraints

On Tue, Mar 29, 2016 at 4:58 PM, Mark Brown <broonie@...nel.org> wrote:
> On Tue, Mar 29, 2016 at 02:00:52PM +0200, Geert Uytterhoeven wrote:
>> On Sun, Mar 27, 2016 at 11:08 AM, Mark Brown <broonie@...nel.org> wrote:
>
>> > The existing check in the patch should be an || not an ==, or possibly
>> > we should just not bother looking for min_uV at all.  I just pushed out
>> > a version of that, let's see how that goes.
>
>> Has the fix really been pushed out?
>
> Yes.
>
>> WARNING: CPU: 1 PID: 31 at drivers/regulator/core.c:2223
>> _regulator_disable+0x2c/0x128
>> unbalanced disables for SDHI0 VccQ
>
>> when booting on r8a7791/koelsch.
>
> This seems like a bug somewhere else in your code, we're looking at
> changes in the voltage setting code but this is an unbalanced disable.
>
>> I'm a bit confused by the discussion of "&&" vs. "||" vs. "==", but the
>> warnings do go away when using "!=", cfr. the whitespace-damaged patch below.
>
>>         /* Voltage change possible? */
>> -       if (constraints->min_uV && constraints->max_uV) {
>> +       if (constraints->min_uV != constraints->max_uV) {
>
> Do you have constraints that specify a maximum voltage but no minimum
> (which I'd say are broken), or constraints that are just plain wrong but
> are now being applied like specifying the entire range of the regulator?
> The above might be some follow on error handling from something that
> happened the change in handling of the constraints.  You need to look at
> what the relevant regulator constraints are...
>
> Previously both voltages needed to be non-zero and equal for anything to
> happen, now they only need to both be non-zero.

There are 3 regulators with equal constraints:

/regulator@0: constraints->min_uV = 3300000, constraints->max_uV = 3300000
/regulator@2: constraints->min_uV = 3300000, constraints->max_uV = 3300000
/regulator@4: constraints->min_uV = 3300000, constraints->max_uV = 3300000

and 3 with different constraints:

/regulator@1: constraints->min_uV = 1800000, constraints->max_uV = 3300000
/regulator@3: constraints->min_uV = 1800000, constraints->max_uV = 3300000
/regulator@5: constraints->min_uV = 1800000, constraints->max_uV = 3300000

For the first SDHI channel, these come from:

        vcc_sdhi0: regulator@0 {
                compatible = "regulator-fixed";

                regulator-name = "SDHI0 Vcc";
                regulator-min-microvolt = <3300000>;
                regulator-max-microvolt = <3300000>;

                gpio = <&gpio7 17 GPIO_ACTIVE_HIGH>;
                enable-active-high;
        };

        vccq_sdhi0: regulator@1 {
                compatible = "regulator-gpio";

                regulator-name = "SDHI0 VccQ";
                regulator-min-microvolt = <1800000>;
                regulator-max-microvolt = <3300000>;

                gpios = <&gpio2 12 GPIO_ACTIVE_HIGH>;
                gpios-states = <1>;
                states = <3300000 1
                          1800000 0>;
        };

        &sdhi0 {
                pinctrl-0 = <&sdhi0_pins>;
                pinctrl-names = "default";

                vmmc-supply = <&vcc_sdhi0>;
                vqmmc-supply = <&vccq_sdhi0>;
                cd-gpios = <&gpio6 6 GPIO_ACTIVE_LOW>;
                wp-gpios = <&gpio6 7 GPIO_ACTIVE_HIGH>;
                status = "okay";
        };

giving:

        sh_mobile_sdhi ee100000.sd: GPIO lookup for consumer cd
        sh_mobile_sdhi ee100000.sd: using device tree for GPIO lookup
        of_get_named_gpiod_flags: parsed 'cd-gpios' property of node
'/sd@...00000[0]' - status (0)
        sh_mobile_sdhi ee100000.sd: Got CD GPIO
        sh_mobile_sdhi ee100000.sd: GPIO lookup for consumer wp
        sh_mobile_sdhi ee100000.sd: using device tree for GPIO lookup
        of_get_named_gpiod_flags: parsed 'wp-gpios' property of node
'/sd@...00000[0]' - status (0)
        sh_mobile_sdhi ee100000.sd: Got WP GPIO
======> sh_mobile_sdhi ee100000.sd: could not set regulator OCR (-22)
        gpio_rcar e6055400.gpio: sense irq = 6, type = 3
        sh_mobile_sdhi ee100000.sd: mmc0 base at 0xee100000 clock rate 97 MHz

The line marked with the arrow is introduced by the changed check, and looks
to be the origin of the failure.

Later, the "unbalanced disables for SDHI0 VccQ" warning is triggered.
Probably the error path always disables the second regulator, even if it was
never enabled due an the earlier failure.

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