mtd: nand/fsmc: Use dev_err to report error scenario
authorVipin Kumar <vipin.kumar@st.com>
Wed, 14 Mar 2012 06:17:16 +0000 (11:47 +0530)
committerDavid Woodhouse <David.Woodhouse@intel.com>
Mon, 26 Mar 2012 23:59:49 +0000 (00:59 +0100)
fsmc controller takes time to calculate the bch8 codes and the error offsets.
The calculate logic checks for completion upto a timeout. This patch adds a
error print when this timer expires and the ecc or error offsets are not yet
calculated.

Signed-off-by: Vipin Kumar <vipin.kumar@st.com>
Reviewed-by: Viresh Kumar <viresh.kumar@st.com>
Signed-off-by: Artem Bityutskiy <artem.bityutskiy@linux.intel.com>
Signed-off-by: David Woodhouse <David.Woodhouse@intel.com>
drivers/mtd/nand/fsmc_nand.c

index 56b66197212228e764a1ba6e116aca78a8c930dc..c41f45faa09ee61420cb8d49a1bcae006c95748b 100644 (file)
@@ -296,6 +296,7 @@ struct fsmc_nand_data {
 
        struct fsmc_eccplace    *ecc_place;
        unsigned int            bank;
+       struct device           *dev;
        struct clk              *clk;
 
        struct fsmc_nand_timings *dev_timings;
@@ -457,6 +458,11 @@ static int fsmc_read_hwecc_ecc4(struct mtd_info *mtd, const uint8_t *data,
                        cond_resched();
        } while (!time_after_eq(jiffies, deadline));
 
+       if (time_after_eq(jiffies, deadline)) {
+               dev_err(host->dev, "calculate ecc timed out\n");
+               return -ETIMEDOUT;
+       }
+
        ecc_tmp = readl(&regs->bank_regs[bank].ecc1);
        ecc[0] = (uint8_t) (ecc_tmp >> 0);
        ecc[1] = (uint8_t) (ecc_tmp >> 8);
@@ -793,6 +799,7 @@ static int __init fsmc_nand_probe(struct platform_device *pdev)
        host->select_chip = pdata->select_bank;
        host->partitions = pdata->partitions;
        host->nr_partitions = pdata->nr_partitions;
+       host->dev = &pdev->dev;
        host->dev_timings = pdata->nand_timings;
        regs = host->regs_va;