summaryrefslogtreecommitdiff
path: root/firmware/kernel.c
diff options
context:
space:
mode:
Diffstat (limited to 'firmware/kernel.c')
-rw-r--r--firmware/kernel.c19
1 files changed, 19 insertions, 0 deletions
diff --git a/firmware/kernel.c b/firmware/kernel.c
index 7c5c74c662..1c8bf9dd81 100644
--- a/firmware/kernel.c
+++ b/firmware/kernel.c
@@ -56,6 +56,21 @@ void kernel_init(void)
56 56
57void sleep(int ticks) 57void sleep(int ticks)
58{ 58{
59#if CONFIG_CPU == S3C2440 && defined(BOOTLOADER)
60 int counter;
61 TCON &= ~(1 << 20); // stop timer 4
62 // TODO: this constant depends on dividers settings inherited from
63 // firmware. Set them explicitly somwhere.
64 TCNTB4 = 12193 * ticks / HZ;
65 TCON |= 1 << 21; // set manual bit
66 TCON &= ~(1 << 21); // reset manual bit
67 TCON &= ~(1 << 22); //autoreload Off
68 TCON |= (1 << 20); // start timer 4
69 do {
70 counter = TCNTO4;
71 } while(counter > 0);
72
73#else
59 /* Always sleep at least 1 tick */ 74 /* Always sleep at least 1 tick */
60 int timeout = current_tick + ticks + 1; 75 int timeout = current_tick + ticks + 1;
61 76
@@ -63,12 +78,16 @@ void sleep(int ticks)
63 sleep_thread(); 78 sleep_thread();
64 } 79 }
65 wake_up_thread(); 80 wake_up_thread();
81#endif
66} 82}
67 83
68void yield(void) 84void yield(void)
69{ 85{
86#if CONFIG_CPU == S3C2440 && defined(BOOTLOADER)
87#else
70 switch_thread(); 88 switch_thread();
71 wake_up_thread(); 89 wake_up_thread();
90#endif
72} 91}
73 92
74/**************************************************************************** 93/****************************************************************************