|
@@ -847,3 +847,54 @@ static int gpmc_calc_sync_read_timings(struct gpmc_timings *gpmc_t,
|
|
|
gpmc_ticks_to_ps(dev_t->cyc_aavdh_oe));
|
|
|
}
|
|
|
gpmc_t->oe_on = gpmc_round_ps_to_ticks(temp);
|
|
|
+
|
|
|
+ /* access */
|
|
|
+ /* XXX: any scope for improvement ?, by combining oe_on
|
|
|
+ * and clk_activation, need to check whether
|
|
|
+ * access = clk_activation + round to sync clk ?
|
|
|
+ */
|
|
|
+ temp = max_t(u32, dev_t->t_iaa, dev_t->cyc_iaa * gpmc_t->sync_clk);
|
|
|
+ temp += gpmc_t->clk_activation;
|
|
|
+ if (dev_t->cyc_oe)
|
|
|
+ temp = max_t(u32, temp, gpmc_t->oe_on +
|
|
|
+ gpmc_ticks_to_ps(dev_t->cyc_oe));
|
|
|
+ gpmc_t->access = gpmc_round_ps_to_ticks(temp);
|
|
|
+
|
|
|
+ gpmc_t->oe_off = gpmc_t->access + gpmc_ticks_to_ps(1);
|
|
|
+ gpmc_t->cs_rd_off = gpmc_t->oe_off;
|
|
|
+
|
|
|
+ /* rd_cycle */
|
|
|
+ temp = max_t(u32, dev_t->t_cez_r, dev_t->t_oez);
|
|
|
+ temp = gpmc_round_ps_to_sync_clk(temp, gpmc_t->sync_clk) +
|
|
|
+ gpmc_t->access;
|
|
|
+ /* XXX: barter t_ce_rdyz with t_cez_r ? */
|
|
|
+ if (dev_t->t_ce_rdyz)
|
|
|
+ temp = max_t(u32, temp, gpmc_t->cs_rd_off + dev_t->t_ce_rdyz);
|
|
|
+ gpmc_t->rd_cycle = gpmc_round_ps_to_ticks(temp);
|
|
|
+
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+static int gpmc_calc_sync_write_timings(struct gpmc_timings *gpmc_t,
|
|
|
+ struct gpmc_device_timings *dev_t)
|
|
|
+{
|
|
|
+ bool mux = dev_t->mux;
|
|
|
+ u32 temp;
|
|
|
+
|
|
|
+ /* adv_wr_off */
|
|
|
+ temp = dev_t->t_avdp_w;
|
|
|
+ if (mux) {
|
|
|
+ temp = max_t(u32, temp,
|
|
|
+ gpmc_t->clk_activation + dev_t->t_avdh);
|
|
|
+ temp = max_t(u32, gpmc_t->adv_on + gpmc_ticks_to_ps(1), temp);
|
|
|
+ }
|
|
|
+ gpmc_t->adv_wr_off = gpmc_round_ps_to_ticks(temp);
|
|
|
+
|
|
|
+ /* wr_data_mux_bus */
|
|
|
+ temp = max_t(u32, dev_t->t_weasu,
|
|
|
+ gpmc_t->clk_activation + dev_t->t_rdyo);
|
|
|
+ /* XXX: shouldn't mux be kept as a whole for wr_data_mux_bus ?,
|
|
|
+ * and in that case remember to handle we_on properly
|
|
|
+ */
|
|
|
+ if (mux) {
|
|
|
+ temp = max_t(u32, temp,
|