|
@@ -1100,6 +1100,7 @@ static int sunxi_nand_chip_set_timings(struct sunxi_nand_chip *chip,
|
|
struct sunxi_nfc *nfc = to_sunxi_nfc(chip->nand.controller);
|
|
struct sunxi_nfc *nfc = to_sunxi_nfc(chip->nand.controller);
|
|
u32 min_clk_period = 0;
|
|
u32 min_clk_period = 0;
|
|
s32 tWB, tADL, tWHR, tRHW, tCAD;
|
|
s32 tWB, tADL, tWHR, tRHW, tCAD;
|
|
|
|
+ long real_clk_rate;
|
|
|
|
|
|
/* T1 <=> tCLS */
|
|
/* T1 <=> tCLS */
|
|
if (timings->tCLS_min > min_clk_period)
|
|
if (timings->tCLS_min > min_clk_period)
|
|
@@ -1197,13 +1198,6 @@ static int sunxi_nand_chip_set_timings(struct sunxi_nand_chip *chip,
|
|
/* TODO: A83 has some more bits for CDQSS, CS, CLHZ, CCS, WC */
|
|
/* TODO: A83 has some more bits for CDQSS, CS, CLHZ, CCS, WC */
|
|
chip->timing_cfg = NFC_TIMING_CFG(tWB, tADL, tWHR, tRHW, tCAD);
|
|
chip->timing_cfg = NFC_TIMING_CFG(tWB, tADL, tWHR, tRHW, tCAD);
|
|
|
|
|
|
- /*
|
|
|
|
- * ONFI specification 3.1, paragraph 4.15.2 dictates that EDO data
|
|
|
|
- * output cycle timings shall be used if the host drives tRC less than
|
|
|
|
- * 30 ns.
|
|
|
|
- */
|
|
|
|
- chip->timing_ctl = (timings->tRC_min < 30000) ? NFC_TIMING_CTL_EDO : 0;
|
|
|
|
-
|
|
|
|
/* Convert min_clk_period from picoseconds to nanoseconds */
|
|
/* Convert min_clk_period from picoseconds to nanoseconds */
|
|
min_clk_period = DIV_ROUND_UP(min_clk_period, 1000);
|
|
min_clk_period = DIV_ROUND_UP(min_clk_period, 1000);
|
|
|
|
|
|
@@ -1214,6 +1208,16 @@ static int sunxi_nand_chip_set_timings(struct sunxi_nand_chip *chip,
|
|
* Allwinner engineers.
|
|
* Allwinner engineers.
|
|
*/
|
|
*/
|
|
chip->clk_rate = NSEC_PER_SEC / min_clk_period;
|
|
chip->clk_rate = NSEC_PER_SEC / min_clk_period;
|
|
|
|
+ real_clk_rate = clk_round_rate(nfc->mod_clk, chip->clk_rate);
|
|
|
|
+
|
|
|
|
+ /*
|
|
|
|
+ * ONFI specification 3.1, paragraph 4.15.2 dictates that EDO data
|
|
|
|
+ * output cycle timings shall be used if the host drives tRC less than
|
|
|
|
+ * 30 ns.
|
|
|
|
+ */
|
|
|
|
+ min_clk_period = NSEC_PER_SEC / real_clk_rate;
|
|
|
|
+ chip->timing_ctl = ((min_clk_period * 2) < 30) ?
|
|
|
|
+ NFC_TIMING_CTL_EDO : 0;
|
|
|
|
|
|
return 0;
|
|
return 0;
|
|
}
|
|
}
|