mmc: read ssr only if MMC write support is enabled
authorJean-Jacques Hiblot <jjhiblot@ti.com>
Thu, 4 Jan 2018 14:23:33 +0000 (15:23 +0100)
committerJaehoon Chung <jh80.chung@samsung.com>
Fri, 12 Jan 2018 09:11:24 +0000 (18:11 +0900)
The content of ssr is useful only for erase operations.
on ARM, removing sd_read_ssr() saves around 300 bytes.

Signed-off-by: Jean-Jacques Hiblot <jjhiblot@ti.com>
drivers/mmc/mmc.c
include/mmc.h

index 5255c0dccfc24ace69592d4014fe7c2e8d6d33db..fd9498708c1e246ee89c69d411648515803365aa 100644 (file)
 #include <div64.h>
 #include "mmc_private.h"
 
-static const unsigned int sd_au_size[] = {
-       0,              SZ_16K / 512,           SZ_32K / 512,
-       SZ_64K / 512,   SZ_128K / 512,          SZ_256K / 512,
-       SZ_512K / 512,  SZ_1M / 512,            SZ_2M / 512,
-       SZ_4M / 512,    SZ_8M / 512,            (SZ_8M + SZ_4M) / 512,
-       SZ_16M / 512,   (SZ_16M + SZ_8M) / 512, SZ_32M / 512,   SZ_64M / 512,
-};
-
 static int mmc_set_signal_voltage(struct mmc *mmc, uint signal_voltage);
 static int mmc_power_cycle(struct mmc *mmc);
 static int mmc_select_mode_and_width(struct mmc *mmc, uint card_caps);
@@ -1376,8 +1368,17 @@ int sd_select_bus_width(struct mmc *mmc, int w)
        return 0;
 }
 
+#if CONFIG_IS_ENABLED(MMC_WRITE)
 static int sd_read_ssr(struct mmc *mmc)
 {
+       static const unsigned int sd_au_size[] = {
+               0,              SZ_16K / 512,           SZ_32K / 512,
+               SZ_64K / 512,   SZ_128K / 512,          SZ_256K / 512,
+               SZ_512K / 512,  SZ_1M / 512,            SZ_2M / 512,
+               SZ_4M / 512,    SZ_8M / 512,            (SZ_8M + SZ_4M) / 512,
+               SZ_16M / 512,   (SZ_16M + SZ_8M) / 512, SZ_32M / 512,
+               SZ_64M / 512,
+       };
        int err, i;
        struct mmc_cmd cmd;
        ALLOC_CACHE_ALIGN_BUFFER(uint, ssr, 16);
@@ -1431,7 +1432,7 @@ retry_ssr:
 
        return 0;
 }
-
+#endif
 /* frequency bases */
 /* divided by 10 to be nice to platforms without floating point */
 static const int fbase[] = {
@@ -1689,12 +1690,14 @@ static int sd_select_mode_and_width(struct mmc *mmc, uint card_caps)
                                }
 #endif
 
+#if CONFIG_IS_ENABLED(MMC_WRITE)
                                err = sd_read_ssr(mmc);
+                               if (!err)
+                                       pr_warn("unable to read ssr\n");
+#endif
                                if (!err)
                                        return 0;
 
-                               pr_warn("bad ssr\n");
-
 error:
                                /* revert to a safer bus speed */
                                mmc_select_mode(mmc, SD_LEGACY);
index e89ba95e5dca1457e45263c10cbe073996f04f73..f50c714428407513cde5673c9b92dd7db267efdb 100644 (file)
@@ -588,7 +588,9 @@ struct mmc {
        uint write_bl_len;
        uint erase_grp_size;    /* in 512-byte sectors */
        uint hc_wp_grp_size;    /* in 512-byte sectors */
+#if CONFIG_IS_ENABLED(MMC_WRITE)
        struct sd_ssr   ssr;    /* SD status register */
+#endif
        u64 capacity;
        u64 capacity_user;
        u64 capacity_boot;