emmc: clean the coverity errors for emmc module.
authorQiang Li <qiang.li@amlogic.com>
Wed, 18 Jul 2018 05:35:48 +0000 (13:35 +0800)
committerJianxin Pan <jianxin.pan@amlogic.com>
Fri, 31 Aug 2018 03:28:23 +0000 (20:28 -0700)
PD#170176: code defects in emmc part.

Change-Id: I2fbdb03d20bb1ea8087453398a3bc3731b30b466
Signed-off-by: Qiang Li <qiang.li@amlogic.com>
drivers/amlogic/mmc/aml_sd_emmc.c
drivers/amlogic/mmc/aml_sd_emmc_v3.c
drivers/amlogic/mmc/amlsd.c
drivers/amlogic/mmc/emmc_partitions.c
include/linux/mmc/card.h

index e627357..146b3e0 100644 (file)
@@ -1298,10 +1298,10 @@ int aml_emmc_clktree_init(struct amlsd_host *host)
                snprintf(name, sizeof(name), "clkin%d", i);
                host->mux_parent[i] = devm_clk_get(host->dev, name);
                if (IS_ERR(host->mux_parent[i])) {
-                       ret = PTR_ERR(host->mux_parent[i]);
                        if (PTR_ERR(host->mux_parent[i]) != -EPROBE_DEFER)
                                dev_err(host->dev, "Missing clock %s\n", name);
                        host->mux_parent[i] = NULL;
+                       ret = PTR_ERR(host->mux_parent[i]);
                        return ret;
                }
                host->mux_parent_rate[i] = clk_get_rate(host->mux_parent[i]);
@@ -1572,7 +1572,6 @@ static u32 aml_sd_emmc_pre_pio(struct amlsd_host *host,
        struct mmc_data *data = NULL;
        u8 direction = 0, data_rw = 0, block_mode, data_num = 0;
        u32 data_size, data_len, ret = 0;
-       u32 desc_cnt = 0;
        u32 bl_len;
        struct sd_emmc_desc_info *desc_cur = NULL;
        struct cmd_cfg *des_cmd_cur = NULL;
@@ -1614,10 +1613,6 @@ static u32 aml_sd_emmc_pre_pio(struct amlsd_host *host,
 
        desc_cur = desc;
        des_cmd_cur = (struct cmd_cfg *)&(desc_cur->cmd_info);
-       if (desc_cnt != 0) { /* for first desc, */
-               des_cmd_cur->no_resp = 1;
-               des_cmd_cur->no_cmd = 1;
-       }
        des_cmd_cur->data_io = 1;
        des_cmd_cur->owner = 1;
        des_cmd_cur->timeout = 0xc;
@@ -2579,8 +2574,10 @@ static irqreturn_t meson_mmc_irq(int irq, void *dev_id)
                        host->xfer_step = XFER_IRQ_TASKLET_BUSY;
                else
                        host->xfer_step = XFER_IRQ_OCCUR;
+       } else {
+               spin_unlock_irqrestore(&host->mrq_lock, flags);
+               return IRQ_NONE;
        }
-
        /* ack all (enabled) interrupts */
        writel(0x7fff, host->base + SD_EMMC_STATUS);
        spin_unlock_irqrestore(&host->mrq_lock, flags);
@@ -2707,12 +2704,9 @@ static irqreturn_t meson_mmc_irq_thread(int irq, void *dev_id)
 
        if (!mrq) {
                pr_err("%s: !mrq xfer_step %d\n",
-                               mmc_hostname(host->mmc), xfer_step);
-               if (xfer_step == XFER_FINISHED ||
-                       xfer_step == XFER_TIMER_TIMEOUT){
-                       spin_unlock_irqrestore(&host->mrq_lock, flags);
-                       return IRQ_HANDLED;
-               }
+               mmc_hostname(host->mmc), xfer_step);
+               spin_unlock_irqrestore(&host->mrq_lock, flags);
+               return IRQ_HANDLED;
 /*             aml_sd_emmc_print_err(host);*/
        }
 
@@ -3040,8 +3034,7 @@ static int meson_mmc_probe(struct platform_device *pdev)
 
        host = kzalloc(sizeof(struct amlsd_host), GFP_KERNEL);
        if (!host)
-               ret = -ENODEV;
-
+               return  -ENODEV;
        host->pdev = pdev;
        host->dev = &pdev->dev;
        dev_set_drvdata(&pdev->dev, host);
@@ -3050,6 +3043,7 @@ static int meson_mmc_probe(struct platform_device *pdev)
                of_device_get_match_data(&pdev->dev);
        if (!host->data) {
                ret = -EINVAL;
+               pr_err("%s() fail!\n", __func__);
                goto fail_init_host;
        }
        if (host->data->chip_type >= MMC_CHIP_TXLX)
index 5955c4e..627b707 100644 (file)
@@ -376,11 +376,8 @@ irqreturn_t meson_mmc_irq_thread_v3(int irq, void *dev_id)
        if (!mrq) {
                pr_err("%s: !mrq xfer_step %d\n",
                                mmc_hostname(host->mmc), xfer_step);
-               if (xfer_step == XFER_FINISHED ||
-                       xfer_step == XFER_TIMER_TIMEOUT){
                        spin_unlock_irqrestore(&host->mrq_lock, flags);
                        return IRQ_HANDLED;
-               }
                /* aml_sd_emmc_print_err(host); */
        }
        /* process stop cmd we sent on porpos */
index 7efce0b..83c98fa 100644 (file)
@@ -894,7 +894,7 @@ int aml_sd_uart_detect(struct amlsd_platform *pdata)
                aml_sd_voltage_switch(mmc,
                                MMC_SIGNAL_VOLTAGE_330);
 
-               if (pdata->caps & MMC_CAP_4_BIT_DATA)
+               if (pdata->caps & MMC_CAP_4_BIT_DATA && mmc)
                        mmc->caps |= MMC_CAP_4_BIT_DATA;
        }
        return 0;
index 2f522d0..44ef1ba 100644 (file)
@@ -253,8 +253,8 @@ int amlmmc_dtb_write(struct mmc_card *mmc,
                        pr_info("timestamp are not same %d:%d\n",
                                info->stamp[0], info->stamp[1]);
                        dtb->timestamp = 1 +
-                               stamp_after(info->stamp[1], info->stamp[0]) ?
-                               info->stamp[1]:info->stamp[0];
+                               (stamp_after(info->stamp[1], info->stamp[0]) ?
+                               info->stamp[1]:info->stamp[0]);
                } else
                        dtb->timestamp = 1 + info->stamp[0];
        }
@@ -293,10 +293,6 @@ int amlmmc_dtb_read(struct mmc_card *card,
        memset(buf, 0x0, len);
 
        start_blk = MMC_DTB_PART_OFFSET;
-       if (start_blk < 0) {
-               ret = -EINVAL;
-               return ret;
-       }
 
        pgcnt = PAGE_ALIGN(CONFIG_DTB_SIZE) >> PAGE_SHIFT;
 
@@ -988,7 +984,7 @@ static int add_emmc_partition(struct gendisk *disk,
                        pr_info("[%s] %s: partition exceeds device capacity:\n",
                                        __func__, disk->disk_name);
 
-                       pr_info("\%20s  offset 0x%012llx, size 0x%012llx\n",
+                       pr_info("%20s   offset 0x%012llx, size 0x%012llx\n",
                                        pp->name, offset<<9, size<<9);
 
                        break;
@@ -1233,7 +1229,10 @@ int aml_emmc_partition_ops(struct mmc_card *card, struct gendisk *disk)
 
        if (ret == 0) /* ok */
                ret = emmc_key_init(card);
-
+       if (ret) {
+               kfree(pt_fmt);
+               goto out;
+       }
        amlmmc_dtb_init(card);
 
        aml_store_class = class_create(THIS_MODULE, "aml_store");
index 510a73a..a61b5b2 100644 (file)
@@ -229,7 +229,7 @@ enum mmc_blk_status {
 #define MMC_NUM_BOOT_PARTITION 2
 #define MMC_NUM_GP_PARTITION   4
 #define MMC_NUM_PHY_PARTITION  7
-#define MAX_MMC_PART_NAME_LEN  20
+#define MAX_MMC_PART_NAME_LEN  16
 
 /*
  * MMC Physical partitions