diff options
author | Mike Frysinger <michael.frysinger@analog.com> | 2007-10-10 12:22:35 -0400 |
---|---|---|
committer | Bryan Wu <bryan.wu@analog.com> | 2007-10-10 12:22:35 -0400 |
commit | 168f1212c098727f2509fe0f66bd30d7209a8159 (patch) | |
tree | e749898e8ab56131a12d8fc489081321abb3ff2f /arch/blackfin/kernel | |
parent | 27d875f2c134c4b26860ccdd03b4c52cce4efc2c (diff) |
Blackfin arch: rewrite our reboot code in C
rewrite our reboot code in C rather than assembly to be like
other architectures and to allow board maintainers to define
custom behavior
Signed-off-by: Mike Frysinger <michael.frysinger@analog.com>
Signed-off-by: Bryan Wu <bryan.wu@analog.com>
Diffstat (limited to 'arch/blackfin/kernel')
-rw-r--r-- | arch/blackfin/kernel/Makefile | 2 | ||||
-rw-r--r-- | arch/blackfin/kernel/bfin_gpio.c | 18 | ||||
-rw-r--r-- | arch/blackfin/kernel/process.c | 25 |
3 files changed, 19 insertions, 26 deletions
diff --git a/arch/blackfin/kernel/Makefile b/arch/blackfin/kernel/Makefile index f429ebc3a961..ae0a2203c3da 100644 --- a/arch/blackfin/kernel/Makefile +++ b/arch/blackfin/kernel/Makefile | |||
@@ -7,7 +7,7 @@ extra-y := init_task.o vmlinux.lds | |||
7 | obj-y := \ | 7 | obj-y := \ |
8 | entry.o process.o bfin_ksyms.o ptrace.o setup.o signal.o \ | 8 | entry.o process.o bfin_ksyms.o ptrace.o setup.o signal.o \ |
9 | sys_bfin.o time.o traps.o irqchip.o dma-mapping.o flat.o \ | 9 | sys_bfin.o time.o traps.o irqchip.o dma-mapping.o flat.o \ |
10 | fixed_code.o cplbinit.o cacheinit.o | 10 | fixed_code.o cplbinit.o cacheinit.o reboot.o |
11 | 11 | ||
12 | obj-$(CONFIG_BF53x) += bfin_gpio.o | 12 | obj-$(CONFIG_BF53x) += bfin_gpio.o |
13 | obj-$(CONFIG_BF561) += bfin_gpio.o | 13 | obj-$(CONFIG_BF561) += bfin_gpio.o |
diff --git a/arch/blackfin/kernel/bfin_gpio.c b/arch/blackfin/kernel/bfin_gpio.c index 0182ce1fc4fb..d9284d7dc9fc 100644 --- a/arch/blackfin/kernel/bfin_gpio.c +++ b/arch/blackfin/kernel/bfin_gpio.c | |||
@@ -80,6 +80,7 @@ | |||
80 | * GPIO_47 PH15 PF47 | 80 | * GPIO_47 PH15 PF47 |
81 | */ | 81 | */ |
82 | 82 | ||
83 | #include <linux/delay.h> | ||
83 | #include <linux/module.h> | 84 | #include <linux/module.h> |
84 | #include <linux/err.h> | 85 | #include <linux/err.h> |
85 | #include <asm/blackfin.h> | 86 | #include <asm/blackfin.h> |
@@ -888,3 +889,20 @@ void gpio_direction_output(unsigned short gpio) | |||
888 | local_irq_restore(flags); | 889 | local_irq_restore(flags); |
889 | } | 890 | } |
890 | EXPORT_SYMBOL(gpio_direction_output); | 891 | EXPORT_SYMBOL(gpio_direction_output); |
892 | |||
893 | /* If we are booting from SPI and our board lacks a strong enough pull up, | ||
894 | * the core can reset and execute the bootrom faster than the resistor can | ||
895 | * pull the signal logically high. To work around this (common) error in | ||
896 | * board design, we explicitly set the pin back to GPIO mode, force /CS | ||
897 | * high, and wait for the electrons to do their thing. | ||
898 | * | ||
899 | * This function only makes sense to be called from reset code, but it | ||
900 | * lives here as we need to force all the GPIO states w/out going through | ||
901 | * BUG() checks and such. | ||
902 | */ | ||
903 | void bfin_gpio_reset_spi0_ssel1(void) | ||
904 | { | ||
905 | port_setup(P_SPI0_SSEL1, GPIO_USAGE); | ||
906 | gpio_bankb[gpio_bank(P_SPI0_SSEL1)]->data_set = gpio_bit(P_SPI0_SSEL1); | ||
907 | udelay(1); | ||
908 | } | ||
diff --git a/arch/blackfin/kernel/process.c b/arch/blackfin/kernel/process.c index 22e790419868..de7d048bd4ee 100644 --- a/arch/blackfin/kernel/process.c +++ b/arch/blackfin/kernel/process.c | |||
@@ -134,31 +134,6 @@ void cpu_idle(void) | |||
134 | } | 134 | } |
135 | } | 135 | } |
136 | 136 | ||
137 | void machine_restart(char *__unused) | ||
138 | { | ||
139 | #if defined(CONFIG_BFIN_ICACHE) | ||
140 | bfin_write_IMEM_CONTROL(0x01); | ||
141 | SSYNC(); | ||
142 | #endif | ||
143 | bfin_reset(); | ||
144 | /* Dont do anything till the reset occurs */ | ||
145 | while (1) { | ||
146 | SSYNC(); | ||
147 | } | ||
148 | } | ||
149 | |||
150 | void machine_halt(void) | ||
151 | { | ||
152 | for (;;) | ||
153 | asm volatile ("idle"); | ||
154 | } | ||
155 | |||
156 | void machine_power_off(void) | ||
157 | { | ||
158 | for (;;) | ||
159 | asm volatile ("idle"); | ||
160 | } | ||
161 | |||
162 | void show_regs(struct pt_regs *regs) | 137 | void show_regs(struct pt_regs *regs) |
163 | { | 138 | { |
164 | printk(KERN_NOTICE "\n"); | 139 | printk(KERN_NOTICE "\n"); |