|
@@ -154,3 +154,65 @@ static int calc_tacc(unsigned int cyc, int nwait_en,
|
|
|
unsigned long hclk_tns, unsigned long *v)
|
|
|
{
|
|
|
unsigned int div = to_div(cyc, hclk_tns);
|
|
|
+ unsigned long val;
|
|
|
+
|
|
|
+ s3c_freq_iodbg("%s: cyc=%u, nwait=%d, hclk=%lu => div=%u\n",
|
|
|
+ __func__, cyc, nwait_en, hclk_tns, div);
|
|
|
+
|
|
|
+ /* if nWait enabled on an bank, Tacc must be at-least 4 cycles. */
|
|
|
+ if (nwait_en && div < 4)
|
|
|
+ div = 4;
|
|
|
+
|
|
|
+ switch (div) {
|
|
|
+ case 0:
|
|
|
+ val = 0;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 1:
|
|
|
+ case 2:
|
|
|
+ case 3:
|
|
|
+ case 4:
|
|
|
+ val = div - 1;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 5:
|
|
|
+ case 6:
|
|
|
+ val = 4;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 7:
|
|
|
+ case 8:
|
|
|
+ val = 5;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 9:
|
|
|
+ case 10:
|
|
|
+ val = 6;
|
|
|
+ break;
|
|
|
+
|
|
|
+ case 11:
|
|
|
+ case 12:
|
|
|
+ case 13:
|
|
|
+ case 14:
|
|
|
+ val = 7;
|
|
|
+ break;
|
|
|
+
|
|
|
+ default:
|
|
|
+ return -1;
|
|
|
+ }
|
|
|
+
|
|
|
+ *v |= val << 8;
|
|
|
+ return 0;
|
|
|
+}
|
|
|
+
|
|
|
+/**
|
|
|
+ * s3c2410_calc_bank - calculate bank timing infromation
|
|
|
+ * @cfg: The configuration we need to calculate for.
|
|
|
+ * @bt: The bank timing information.
|
|
|
+ *
|
|
|
+ * Given the cycle timine for a bank @bt, calculate the new BANKCON
|
|
|
+ * setting for the @cfg timing. This updates the timing information
|
|
|
+ * ready for the cpu frequency change.
|
|
|
+ */
|
|
|
+static int s3c2410_calc_bank(struct s3c_cpufreq_config *cfg,
|
|
|
+ struct s3c2410_iobank_timing *bt)
|