ulong get_timer_masked(void) { /* Check for timer wrap */ if (ks8695_read(KS8695_INT_STATUS) & KS8695_INTMASK_TIMERINT1) { /* Clear interrupt condition */ ks8695_write(KS8695_INT_STATUS, KS8695_INTMASK_TIMERINT1); timer_ticks++; } return timer_ticks; }
void reset_cpu (ulong ignored) { ulong tc; /* Set timer0 to watchdog, and let it timeout */ tc = ks8695_read(KS8695_TIMER_CTRL) & 0x2; ks8695_write(KS8695_TIMER_CTRL, tc); ks8695_write(KS8695_TIMER0, ((10 << 8) | 0xff)); ks8695_write(KS8695_TIMER_CTRL, (tc | 0x1)); /* Should only wait here till watchdog resets */ for (;;) ; }
/* * Miscelaneous platform dependent initialisations */ int env_flash_cmdline (void) { unsigned char *sp = (unsigned char *) 0x0201c020; unsigned char *ep; int len; /* Check if "erase" push button is depressed */ if ((ks8695_read(KS8695_GPIO_DATA) & 0x8) == 0) { printf("### Entering network recovery mode...\n"); setenv("bootargs", "console=ttyAM0,115200 mem=16M initrd=0x400000,6M root=/dev/ram0"); setenv("bootcmd", "bootp 0x400000; gofsk 0x400000"); setenv("bootdelay", "2"); return 0; } /* Check for flash based kernel boot args to use as default */ for (ep = sp, len = 0; ((len < 1024) && (*ep != 0)); ep++, len++) ; if ((len > 0) && (len <1024)) setenv("bootargs", sp); return 0; }