mmc: renesas-sdhi: Handle 16bit IP
authorMarek Vasut <marek.vasut+renesas@gmail.com>
Sun, 8 Apr 2018 16:14:22 +0000 (18:14 +0200)
committerMarek Vasut <marek.vasut+renesas@gmail.com>
Wed, 11 Apr 2018 21:11:57 +0000 (23:11 +0200)
The Renesas RCar Gen2 chips have a mix of 32bit and 16bit variants
of the IP. There is no DT property which allows discerning those,
so what Linux does is it checks the size of the register area and
if it is 0x100, the IP is 16bit, otherwise the IP is 32bit. Handle
the distinction the same way.

Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com>
Cc: Jaehoon Chung <jh80.chung@samsung.com>
Cc: Masahiro Yamada <yamada.masahiro@socionext.com>
drivers/mmc/renesas-sdhi.c

index d6b3bfbadc707a431bcaa53740dc75ee5864747a..521574387bb80cf7e9de1f47a7c6bf2c71a72627 100644 (file)
@@ -41,6 +41,19 @@ static const struct udevice_id renesas_sdhi_match[] = {
 static int renesas_sdhi_probe(struct udevice *dev)
 {
        u32 quirks = dev_get_driver_data(dev);
+       struct fdt_resource reg_res;
+       DECLARE_GLOBAL_DATA_PTR;
+       int ret;
+
+       ret = fdt_get_resource(gd->fdt_blob, dev_of_offset(dev), "reg",
+                              0, &reg_res);
+       if (ret < 0) {
+               dev_err(dev, "\"reg\" resource not found, ret=%i\n", ret);
+               return ret;
+       }
+
+       if (quirks == 0 && fdt_resource_size(&reg_res) == 0x100)
+               quirks = MATSU_SD_CAP_16BIT;
 
        return matsu_sd_probe(dev, quirks);
 }