[U-Boot] [PATCH v2 1/3] mmc: uniphier: add driver for UniPhier SD/MMC host controller

Masahiro Yamada yamada.masahiro at socionext.com
Tue Feb 16 09:18:08 CET 2016


Hi Marek,


2016-02-10 22:45 GMT+09:00 Marek Vasut <marex at denx.de>:
> On 02/10/2016 02:28 PM, Masahiro Yamada wrote:
>> Add a driver for the on-chip SD/eMMC host controller used by
>> UniPhier SoC family.
>>
>> Signed-off-by: Masahiro Yamada <yamada.masahiro at socionext.com>
>
> 前略 山田さん,
>
> [...]
>
>> +#include <common.h>
>> +#include <clk.h>
>> +#include <fdtdec.h>
>> +#include <mapmem.h>
>> +#include <mmc.h>
>> +#include <dm/device.h>
>> +#include <linux/compat.h>
>> +#include <linux/io.h>
>> +#include <asm/unaligned.h>
>> +#include <asm/dma-mapping.h>
>> +
>> +#define pr_err   printf
>> +#define pr_warn  printf
>> +#ifdef DEBUG
>> +#define pr_debug printf
>> +#else
>> +#define pr_debug(...)
>> +#endif
>
> This should go into include/ somewhere, your driver shouldn't be a
> platform abstraction library.

Fixed in v3.



>> +static int uniphier_sd_wait_irq(struct uniphier_sd_priv *priv,
>> +                             unsigned int reg, u32 flag)
>> +{
>> +     long wait = 1000000;
>> +     int ret;
>
> Replace this with wait_for_bit() please .


It cannot check error during the loop.

I want to check the error flags in the loop
because no reason to wait for the time-out
if some error happens.


>> +     while (!(readl(priv->regbase + reg) & flag)) {
>> +             if (wait-- < 0) {
>> +                     pr_err("timeout\n");
>> +                     return -ETIMEDOUT;
>> +             }
>> +
>> +             ret = uniphier_sd_check_error(priv);
>> +             if (ret)
>> +                     return ret;
>> +
>> +             udelay(1);
>> +     }
>> +
>> +     return 0;
>> +}
>
> [...]
>
>> +static void uniphier_sd_dma_start(struct uniphier_sd_priv *priv,
>> +                               dma_addr_t dma_addr)
>> +{
>> +     u32 tmp;
>> +
>> +     writel(0, priv->regbase + UNIPHIER_SD_DMA_INFO1);
>> +     writel(0, priv->regbase + UNIPHIER_SD_DMA_INFO2);
>> +
>> +     /* enable DMA */
>> +     tmp = readl(priv->regbase + UNIPHIER_SD_EXTMODE);
>> +     tmp |= UNIPHIER_SD_EXTMODE_DMA_EN;
>> +     writel(tmp, priv->regbase + UNIPHIER_SD_EXTMODE);
>
> I'd say, use setbits_le32(), but could it be that this driver is kept in
> sync with Linux ?

Yes, I am developing the MMC driver
for Linux as well as U-Boot at the same time.

This is the U-Boot counter-part,
although the Linux one has not been upstreamed yet.

It can save my time to copy-paste code snippets between the two.

I want to sync as much code as possible.




-- 
Best Regards
Masahiro Yamada


More information about the U-Boot mailing list