From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: Received: from mail-wm0-f53.google.com ([74.125.82.53]:33301 "EHLO mail-wm0-f53.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751282AbcC2JJA (ORCPT ); Tue, 29 Mar 2016 05:09:00 -0400 Received: by mail-wm0-f53.google.com with SMTP id r72so47747938wmg.0 for ; Tue, 29 Mar 2016 02:09:00 -0700 (PDT) Date: Tue, 29 Mar 2016 10:08:56 +0100 From: Lee Jones To: Krzysztof Kozlowski Cc: Sangbeom Kim , Liam Girdwood , Mark Brown , linux-kernel@vger.kernel.org, linux-samsung-soc@vger.kernel.org, linux-mmc@vger.kernel.org, Javier Martinez Canillas , Ivaylo Dimitrov , stable@vger.kernel.org Subject: Re: [PATCH] regulator: s2mps11: Fix invalid minimal selector for buck9 supplying SD card Message-ID: <20160329090856.GB8659@x1> References: <1459126489-18311-1-git-send-email-k.kozlowski@samsung.com> MIME-Version: 1.0 Content-Type: text/plain; charset=utf-8 Content-Disposition: inline Content-Transfer-Encoding: 8bit In-Reply-To: <1459126489-18311-1-git-send-email-k.kozlowski@samsung.com> Sender: stable-owner@vger.kernel.org List-ID: On Mon, 28 Mar 2016, Krzysztof Kozlowski wrote: > The buck9 regulator of S2MPS11 PMIC lacked minimal selector for linear > mapping. The mapping starts from 0x40 (3 V). > > This buck9 provides power to other regulators, including LDO13 and LDO19 > which supply the MMC2 (SD card). > > Bootloader initializes the regulator with value of 0xff (5 V) which is > outside of supported voltage range. When (during boot) constraints to > buck9 were applied, the driver wrote value counting from 0x00, not 0x40. > Effectively driver set lower voltage than required leading to SD card > detection errors on Odroid XU3/XU4: > mmc1: card never left busy state > mmc1: error -110 whilst initialising SD card > > Fixes: cb74685ecb39 ("regulator: s2mps11: Add samsung s2mps11 regulator driver") > Cc: > Signed-off-by: Krzysztof Kozlowski > > --- > > The issue can be reproduced on next-20160324 with > bae4fdc88d7f7dda1 (regulator: core: Ensure we are at least in bounds > for our constraints). > --- > drivers/regulator/s2mps11.c | 19 ++++++++++++++++++- > include/linux/mfd/samsung/s2mps11.h | 9 +++++++++ > 2 files changed, 27 insertions(+), 1 deletion(-) [...] > diff --git a/include/linux/mfd/samsung/s2mps11.h b/include/linux/mfd/samsung/s2mps11.h > index b288965e8101..3937a932bfe0 100644 > --- a/include/linux/mfd/samsung/s2mps11.h > +++ b/include/linux/mfd/samsung/s2mps11.h > @@ -173,10 +173,19 @@ enum s2mps11_regulators { > > #define S2MPS11_LDO_VSEL_MASK 0x3F > #define S2MPS11_BUCK_VSEL_MASK 0xFF > +#define S2MPS11_BUCK9_MIN_VSEL 0x40 > #define S2MPS11_ENABLE_MASK (0x03 << S2MPS11_ENABLE_SHIFT) > #define S2MPS11_ENABLE_SHIFT 0x06 > #define S2MPS11_LDO_N_VOLTAGES (S2MPS11_LDO_VSEL_MASK + 1) > #define S2MPS11_BUCK_N_VOLTAGES (S2MPS11_BUCK_VSEL_MASK + 1) > +/* > + * Buck9 supports only 32 voltages (values from 0x40 to 0x5F) but bootloader > + * initializes the register with value of 0xff so when probing this would > + * cause a failure (Odroid XU3): > + * vdd_2.8v_ldo: failed to get the current voltage(-22) > + * Instead pretend we support up to 0xff (5 V). > + */ > +#define S2MPS11_BUCK9_N_VOLTAGES 192 Err... NACK. Please go and fix the bootloader instead of hacking the kernel. > #define S2MPS11_RAMP_DELAY 25000 /* uV/us */ > > #define S2MPS11_CTRL1_PWRHOLD_MASK BIT(4) -- Lee Jones Linaro STMicroelectronics Landing Team Lead Linaro.org │ Open source software for ARM SoCs Follow Linaro: Facebook | Twitter | Blog