[U-Boot] [PATCH v2 2/4] mmc: s5p_mmc: fixed wrong function argument
Andy Fleming
afleming at gmail.com
Thu Aug 30 23:46:20 CEST 2012
On Thu, Jul 26, 2012 at 7:33 PM, Jaehoon Chung <jh80.chung at samsung.com> wrote:
>
> Useless code is removed, and get buswidth value.
>
> Signed-off-by: Jaehoon Chung <jh80.chung at samsung.com>
> ---
> arch/arm/include/asm/arch-exynos/mmc.h | 4 ++--
> arch/arm/include/asm/arch-s5pc1xx/mmc.h | 4 ++--
> drivers/mmc/s5p_sdhci.c | 9 ++++-----
> 3 files changed, 8 insertions(+), 9 deletions(-)
>
> diff --git a/arch/arm/include/asm/arch-exynos/mmc.h b/arch/arm/include/asm/arch-exynos/mmc.h
>
> static inline unsigned int s5p_mmc_init(int index, int bus_width)
> {
> unsigned int base = samsung_get_base_mmc() + (0x10000 * index);
> - return s5p_sdhci_init(base, 52000000, 400000, index);
> + return s5p_sdhci_init(base, index, bus_width);
> }
> diff --git a/drivers/mmc/s5p_sdhci.c b/drivers/mmc/s5p_sdhci.c
> index 12b28dd..d7e92a4 100644
> --- a/drivers/mmc/s5p_sdhci.c
> +++ b/drivers/mmc/s5p_sdhci.c
> -int s5p_sdhci_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks)
> +int s5p_sdhci_init(u32 regbase, int index, int bus_width)
> {
> struct sdhci_host *host = NULL;
> host = (struct sdhci_host *)malloc(sizeof(struct sdhci_host));
> @@ -80,12 +80,11 @@ int s5p_sdhci_init(u32 regbase, u32 max_clk, u32 min_clk, u32 quirks)
>
> host->name = S5P_NAME;
> host->ioaddr = (void *)regbase;
> - host->quirks = quirks;
I'm very confused by this line. "quirks" is the 4th argument to the
original version of this function, but I see that the original
*caller* of this function passed in "index". This is amazingly broken.
Fortunately, your patch fixes it, but it calls into doubt how it ever
worked with any index but "0".
>
> - host->quirks |= SDHCI_QUIRK_NO_HISPD_BIT | SDHCI_QUIRK_BROKEN_VOLTAGE |
> + host->quirks = SDHCI_QUIRK_NO_HISPD_BIT | SDHCI_QUIRK_BROKEN_VOLTAGE |
> SDHCI_QUIRK_BROKEN_R1B | SDHCI_QUIRK_32BIT_DMA_ADDR;
> host->voltages = MMC_VDD_32_33 | MMC_VDD_33_34 | MMC_VDD_165_195;
> - if (quirks & SDHCI_QUIRK_REG32_RW)
> + if (host->quirks & SDHCI_QUIRK_REG32_RW)
Now that host->quirks is initialized just above, SDHCI_QUIRK_REG32_RW
will never be set, so there's no point in checking for it.
Andy
More information about the U-Boot
mailing list