static void wait_us(unsigned long us)
{
unsigned long start = OSCR;
- us *= OSCR_CLK_FREQ;
+ us = US_TO_OSCR(us);
while ((OSCR - start) < us) {
/* do nothing */
}
if (!event)
return 0xff000000;
else if (event & (NDSR_CS0_CMDD | NDSR_CS0_BBD))
- timeout = CFG_NAND_PROG_ERASE_TO * OSCR_CLK_FREQ;
+ timeout = US_TO_OSCR(CFG_NAND_PROG_ERASE_TO);
else
- timeout = CFG_NAND_OTHER_TO * OSCR_CLK_FREQ;
+ timeout = US_TO_OSCR(CFG_NAND_OTHER_TO);
while(1) {
ndsr = NDSR;
ldr r0, =ACCR
/* KaRo: do not clear other clock fields, otherwise boards still running in SDRAM will crash here */
- ldr r2, =~(ACCR_XN_MASK | ACCR_XL_MASK)
+ ldr r2, =~(ACCR_SMC_MASK | ACCR_XN_MASK | ACCR_XL_MASK)
ldr r1, [r0]
and r2, r2, r1
- ldr r1, =(((CFG_MONAHANS_TURBO_RUN_MODE_RATIO<<8) & ACCR_XN_MASK) | \
+ ldr r1, =((2 << 23) | ((CFG_MONAHANS_TURBO_RUN_MODE_RATIO << 8) & ACCR_XN_MASK) | \
(CFG_MONAHANS_RUN_MODE_OSC_RATIO & ACCR_XL_MASK))
orr r2, r2, r1
str r2, [r0]
#define OMCR10 __REG(0x40A000D8) /* OS Match Control Register 10 */
#define OMCR11 __REG(0x40A000DC) /* OS Match Control Register 11 */
-#define OSCR_CLK_FREQ 3.250 /* MHz */
+//#define OSCR_CLK_FREQ 3.250 /* MHz */
+#define US_TO_OSCR(u) (((u) * 3250 + 999) / 1000)
#endif /* CONFIG_CPU_MONAHANS */
#define OSSR_M4 (1 << 4) /* Match status channel 4 */