005-mcfv4e_kernel_mods.patch 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571
  1. From 823ad3e6e88353226ec28f48183a467181887a1b Mon Sep 17 00:00:00 2001
  2. From: Kurt Mahan <[email protected]>
  3. Date: Wed, 31 Oct 2007 16:56:09 -0600
  4. Subject: [PATCH] Core Coldfire/MCF54455 kernel changes.
  5. LTIBName: mcfv4e-kernel-mods
  6. Signed-off-by: Kurt Mahan <[email protected]>
  7. ---
  8. arch/m68k/Kconfig | 65 ++++++++++++++++++++++++++++++++++++++-
  9. arch/m68k/Kconfig.debug | 9 +++++
  10. arch/m68k/Makefile | 14 ++++++++
  11. arch/m68k/kernel/Makefile | 15 ++++++---
  12. arch/m68k/kernel/asm-offsets.c | 7 ++++
  13. arch/m68k/kernel/dma.c | 17 ++++++++++
  14. arch/m68k/kernel/process.c | 57 +++++++++++++++++++++++++++++++++++
  15. arch/m68k/kernel/setup.c | 49 ++++++++++++++++++++++++++----
  16. arch/m68k/kernel/time.c | 5 +++
  17. arch/m68k/kernel/vmlinux.lds.S | 2 +
  18. 10 files changed, 227 insertions(+), 13 deletions(-)
  19. --- a/arch/m68k/Kconfig
  20. +++ b/arch/m68k/Kconfig
  21. @@ -119,6 +119,20 @@ config SUN3
  22. If you don't want to compile a kernel exclusively for a Sun 3, say N.
  23. +config COLDFIRE
  24. + bool "ColdFire V4e support"
  25. + default y
  26. + select CFV4E
  27. + help
  28. + Say Y if you want to build a kernel to run on one of the ColdFire
  29. + V4e boards.
  30. +
  31. +config CFV4E
  32. + bool
  33. + depends on COLDFIRE
  34. + select MMU_CFV4E if MMU
  35. + default y
  36. +
  37. config AMIGA
  38. bool "Amiga support"
  39. depends on !MMU_SUN3
  40. @@ -294,14 +308,53 @@ config M68060
  41. If you anticipate running this kernel on a computer with a MC68060
  42. processor, say Y. Otherwise, say N.
  43. +config M54455
  44. + bool "MCF54455 support"
  45. + depends on COLDFIRE
  46. + default y
  47. + help
  48. + This option will add support for the MCF54455 processor with mmu.
  49. +
  50. +config MCFCLK
  51. + int "M54455EVB System Clock"
  52. + depends on M54455
  53. + default 266666666
  54. + help
  55. + System clock for EVB. Usually 266MHz for u-boot and 200MHz for dBUG.
  56. +
  57. +config MCF_USER_HALT
  58. + bool "Coldfire User Halt Enable"
  59. + depends on M54455
  60. + default n
  61. + help
  62. + Enables the HALT instruction in User Mode.
  63. +
  64. config MMU_MOTOROLA
  65. bool
  66. - depends on MMU && !MMU_SUN3
  67. + depends on MMU && !MMU_SUN3 && !COLDFIRE
  68. default y
  69. config MMU_SUN3
  70. bool
  71. +config MMU_CFV4E
  72. + bool
  73. +
  74. +config SDRAM_BASE
  75. + hex
  76. + depends on M54455
  77. + default 0x40000000
  78. +
  79. +config SDRAM_SIZE
  80. + hex
  81. + depends on M54455
  82. + default 0x0FFFFFFF
  83. +
  84. +config NOR_FLASH_BASE
  85. + hex "NOR Flash Base Address"
  86. + depends on M54455
  87. + default 0x00000000
  88. +
  89. config M68KFPU_EMU
  90. bool "Math emulation support (EXPERIMENTAL)"
  91. depends on EXPERIMENTAL
  92. @@ -468,6 +521,14 @@ config ZONE_DMA
  93. source "drivers/pci/Kconfig"
  94. source "drivers/zorro/Kconfig"
  95. +endmenu
  96. +
  97. +menu "Power management options"
  98. +
  99. +config PM
  100. + bool "Power Management support"
  101. + help
  102. + Support processor power management modes
  103. endmenu
  104. @@ -647,7 +708,7 @@ config DN_SERIAL
  105. config SERIAL_CONSOLE
  106. bool "Support for serial port console"
  107. - depends on (AMIGA || ATARI || MAC || SUN3 || SUN3X || VME || APOLLO) && (ATARI_MFPSER=y || ATARI_SCC=y || ATARI_MIDI=y || MAC_SCC=y || AMIGA_BUILTIN_SERIAL=y || GVPIOEXT=y || MULTIFACE_III_TTY=y || SERIAL=y || MVME147_SCC || SERIAL167 || MVME162_SCC || BVME6000_SCC || DN_SERIAL)
  108. + depends on (AMIGA || ATARI || MAC || SUN3 || SUN3X || VME || APOLLO || COLDFIRE) && (ATARI_MFPSER=y || ATARI_SCC=y || ATARI_MIDI=y || MAC_SCC=y || AMIGA_BUILTIN_SERIAL=y || GVPIOEXT=y || MULTIFACE_III_TTY=y || SERIAL=y || MVME147_SCC || SERIAL167 || MVME162_SCC || BVME6000_SCC || DN_SERIAL || SERIAL_COLDFIRE)
  109. ---help---
  110. If you say Y here, it will be possible to use a serial port as the
  111. system console (the system console is the device which receives all
  112. --- a/arch/m68k/Kconfig.debug
  113. +++ b/arch/m68k/Kconfig.debug
  114. @@ -2,4 +2,13 @@ menu "Kernel hacking"
  115. source "lib/Kconfig.debug"
  116. +config BOOTPARAM
  117. + bool 'Compiled-in Kernel Boot Parameter'
  118. + depends on COLDFIRE
  119. +
  120. +config BOOTPARAM_STRING
  121. + string 'Kernel Boot Parameter'
  122. + default 'console=ttyS0,115200'
  123. + depends on BOOTPARAM
  124. +
  125. endmenu
  126. --- a/arch/m68k/Makefile
  127. +++ b/arch/m68k/Makefile
  128. @@ -16,7 +16,9 @@
  129. KBUILD_DEFCONFIG := amiga_defconfig
  130. # override top level makefile
  131. +ifndef CONFIG_COLDFIRE
  132. AS += -m68020
  133. +endif
  134. LDFLAGS := -m m68kelf
  135. LDFLAGS_MODULE += -T $(srctree)/arch/m68k/kernel/module.lds
  136. ifneq ($(SUBARCH),$(ARCH))
  137. @@ -36,6 +38,7 @@ CHECKFLAGS += -D__mc68000__
  138. KBUILD_CFLAGS += -pipe -fno-strength-reduce -ffixed-a2
  139. # enable processor switch if compiled only for a single cpu
  140. +ifndef CONFIG_COLDFIRE
  141. ifndef CONFIG_M68020
  142. ifndef CONFIG_M68030
  143. @@ -49,6 +52,12 @@ endif
  144. endif
  145. endif
  146. +endif
  147. +
  148. +ifdef CONFIG_M54455
  149. +CFLAGS := $(CFLAGS) -march=isac -mcpu=54455 -msoft-float -g
  150. +AFLAGS := $(AFLAGS) -march=isac -mcpu=54455 -msoft-float
  151. +endif
  152. ifdef CONFIG_KGDB
  153. # If configured for kgdb support, include debugging infos and keep the
  154. @@ -57,8 +66,12 @@ KBUILD_CFLAGS := $(subst -fomit-frame-po
  155. endif
  156. ifndef CONFIG_SUN3
  157. +ifndef CONFIG_COLDFIRE
  158. head-y := arch/m68k/kernel/head.o
  159. else
  160. +head-y := arch/m68k/coldfire/head.o
  161. +endif
  162. +else
  163. head-y := arch/m68k/kernel/sun3-head.o
  164. endif
  165. @@ -79,6 +92,7 @@ core-$(CONFIG_SUN3) += arch/m68k/sun3/
  166. core-$(CONFIG_M68040) += arch/m68k/fpsp040/
  167. core-$(CONFIG_M68060) += arch/m68k/ifpsp060/
  168. core-$(CONFIG_M68KFPU_EMU) += arch/m68k/math-emu/
  169. +core-$(CONFIG_COLDFIRE) += arch/m68k/coldfire/
  170. all: zImage
  171. --- a/arch/m68k/kernel/Makefile
  172. +++ b/arch/m68k/kernel/Makefile
  173. @@ -2,14 +2,19 @@
  174. # Makefile for the linux kernel.
  175. #
  176. -ifndef CONFIG_SUN3
  177. - extra-y := head.o
  178. +ifdef CONFIG_SUN3
  179. + extra-y := sun3-head.o vmlinux.lds
  180. + obj-y := entry.o signal.o ints.o
  181. else
  182. - extra-y := sun3-head.o
  183. +ifndef CONFIG_COLDFIRE
  184. + extra-y := head.o vmlinux.lds
  185. + obj-y := entry.o signal.o traps.o ints.o
  186. +else # CONFIG_COLDFIRE
  187. + extra-y := ../coldfire/head.o vmlinux.lds
  188. +endif
  189. endif
  190. -extra-y += vmlinux.lds
  191. -obj-y := entry.o process.o traps.o ints.o signal.o ptrace.o module.o \
  192. +obj-y += process.o ptrace.o module.o \
  193. sys_m68k.o time.o semaphore.o setup.o m68k_ksyms.o devres.o
  194. devres-y = ../../../kernel/irq/devres.o
  195. --- a/arch/m68k/kernel/asm-offsets.c
  196. +++ b/arch/m68k/kernel/asm-offsets.c
  197. @@ -58,8 +58,15 @@ int main(void)
  198. DEFINE(PT_A2, offsetof(struct pt_regs, a2));
  199. DEFINE(PT_PC, offsetof(struct pt_regs, pc));
  200. DEFINE(PT_SR, offsetof(struct pt_regs, sr));
  201. +#ifdef CONFIG_COLDFIRE
  202. + /* Need to get the context out of struct mm for ASID setting */
  203. + DEFINE(MM_CONTEXT, offsetof(struct mm_struct, context));
  204. + /* Coldfire exception frame has vector *before* pc */
  205. + DEFINE(PT_VECTOR, offsetof(struct pt_regs, pc) - 4);
  206. +#else
  207. /* bitfields are a bit difficult */
  208. DEFINE(PT_VECTOR, offsetof(struct pt_regs, pc) + 4);
  209. +#endif
  210. /* offsets into the irq_handler struct */
  211. DEFINE(IRQ_HANDLER, offsetof(struct irq_node, handler));
  212. --- a/arch/m68k/kernel/dma.c
  213. +++ b/arch/m68k/kernel/dma.c
  214. @@ -17,6 +17,7 @@
  215. void *dma_alloc_coherent(struct device *dev, size_t size,
  216. dma_addr_t *handle, gfp_t flag)
  217. {
  218. +#ifndef CONFIG_M54455
  219. struct page *page, **map;
  220. pgprot_t pgprot;
  221. void *addr;
  222. @@ -55,6 +56,18 @@ void *dma_alloc_coherent(struct device *
  223. kfree(map);
  224. return addr;
  225. +#else
  226. + /*
  227. + * On the M5445x platform the memory allocated with GFP_DMA
  228. + * is guaranteed to be DMA'able.
  229. + */
  230. + void *addr;
  231. +
  232. + size = PAGE_ALIGN(size);
  233. + addr = kmalloc(size, GFP_DMA);
  234. + *handle = virt_to_phys(addr);
  235. + return addr;
  236. +#endif
  237. }
  238. EXPORT_SYMBOL(dma_alloc_coherent);
  239. @@ -62,7 +75,11 @@ void dma_free_coherent(struct device *de
  240. void *addr, dma_addr_t handle)
  241. {
  242. pr_debug("dma_free_coherent: %p, %x\n", addr, handle);
  243. +#ifndef CONFIG_M54455
  244. vfree(addr);
  245. +#else
  246. + kfree(addr);
  247. +#endif
  248. }
  249. EXPORT_SYMBOL(dma_free_coherent);
  250. --- a/arch/m68k/kernel/process.c
  251. +++ b/arch/m68k/kernel/process.c
  252. @@ -191,6 +191,7 @@ EXPORT_SYMBOL(kernel_thread);
  253. void flush_thread(void)
  254. {
  255. +#if !defined(CONFIG_COLDFIRE)
  256. unsigned long zero = 0;
  257. set_fs(USER_DS);
  258. current->thread.fs = __USER_DS;
  259. @@ -198,6 +199,14 @@ void flush_thread(void)
  260. asm volatile (".chip 68k/68881\n\t"
  261. "frestore %0@\n\t"
  262. ".chip 68k" : : "a" (&zero));
  263. +#else
  264. + set_fs(USER_DS);
  265. + current->thread.fs = USER_DS;
  266. +#if defined(CONFIG_FPU)
  267. + if (!FPU_IS_EMU)
  268. + asm volatile ("frestore %0@\n\t" : : "a" (&zero));
  269. +#endif
  270. +#endif
  271. }
  272. /*
  273. @@ -261,6 +270,7 @@ int copy_thread(int nr, unsigned long cl
  274. * Must save the current SFC/DFC value, NOT the value when
  275. * the parent was last descheduled - RGH 10-08-96
  276. */
  277. +#if !defined(CONFIG_COLDFIRE)
  278. p->thread.fs = get_fs().seg;
  279. if (!FPU_IS_EMU) {
  280. @@ -272,9 +282,34 @@ int copy_thread(int nr, unsigned long cl
  281. "fmoveml %/fpiar/%/fpcr/%/fpsr,%1"
  282. : : "m" (p->thread.fp[0]), "m" (p->thread.fpcntl[0])
  283. : "memory");
  284. +#else
  285. + p->thread.fs = get_fs();
  286. +
  287. +#if defined(CONFIG_FPU)
  288. + if (!FPU_IS_EMU) {
  289. + /* Copy the current fpu state */
  290. + asm volatile ("fsave %0" : : "m" (p->thread.fpstate[0])
  291. + : "memory");
  292. +
  293. + if (p->thread.fpstate[0]) {
  294. + asm volatile ("fmovemd %/fp0-%/fp7,%0"
  295. + : : "m" (p->thread.fp[0])
  296. + : "memory");
  297. + asm volatile ("fmovel %/fpiar,%0"
  298. + : : "m" (p->thread.fpcntl[0])
  299. + : "memory");
  300. + asm volatile ("fmovel %/fpcr,%0"
  301. + : : "m" (p->thread.fpcntl[1])
  302. + : "memory");
  303. + asm volatile ("fmovel %/fpsr,%0"
  304. + : : "m" (p->thread.fpcntl[2])
  305. + : "memory");
  306. + }
  307. /* Restore the state in case the fpu was busy */
  308. asm volatile ("frestore %0" : : "m" (p->thread.fpstate[0]));
  309. }
  310. +#endif
  311. +#endif
  312. return 0;
  313. }
  314. @@ -283,7 +318,9 @@ int copy_thread(int nr, unsigned long cl
  315. int dump_fpu (struct pt_regs *regs, struct user_m68kfp_struct *fpu)
  316. {
  317. +#if !defined(CONFIG_COLDFIRE) || defined(CONFIG_FPU)
  318. char fpustate[216];
  319. +#endif
  320. if (FPU_IS_EMU) {
  321. int i;
  322. @@ -300,6 +337,7 @@ int dump_fpu (struct pt_regs *regs, stru
  323. }
  324. /* First dump the fpu context to avoid protocol violation. */
  325. +#if !defined(CONFIG_COLDFIRE)
  326. asm volatile ("fsave %0" :: "m" (fpustate[0]) : "memory");
  327. if (!CPU_IS_060 ? !fpustate[0] : !fpustate[2])
  328. return 0;
  329. @@ -310,6 +348,25 @@ int dump_fpu (struct pt_regs *regs, stru
  330. asm volatile ("fmovemx %/fp0-%/fp7,%0"
  331. :: "m" (fpu->fpregs[0])
  332. : "memory");
  333. +#elif defined(CONFIG_FPU)
  334. + asm volatile ("fsave %0" :: "m" (fpustate[0]) : "memory");
  335. + if (!CPU_IS_060 ? !fpustate[0] : !fpustate[2])
  336. + return 0;
  337. +
  338. + asm volatile ("fmovel %/fpiar,%0"
  339. + : : "m" (fpu->fpcntl[0])
  340. + : "memory");
  341. + asm volatile ("fmovel %/fpcr,%0"
  342. + : : "m" (fpu->fpcntl[1])
  343. + : "memory");
  344. + asm volatile ("fmovel %/fpsr,%0"
  345. + : : "m" (fpu->fpcntl[2])
  346. + : "memory");
  347. + asm volatile ("fmovemd %/fp0-%/fp7,%0"
  348. + : : "m" (fpu->fpregs[0])
  349. + : "memory");
  350. +#endif
  351. +
  352. return 1;
  353. }
  354. EXPORT_SYMBOL(dump_fpu);
  355. --- a/arch/m68k/kernel/setup.c
  356. +++ b/arch/m68k/kernel/setup.c
  357. @@ -67,13 +67,22 @@ EXPORT_SYMBOL(m68k_memory);
  358. struct mem_info m68k_ramdisk;
  359. +#if !defined(CONFIG_COLDFIRE)
  360. static char m68k_command_line[CL_SIZE];
  361. +#else
  362. +char m68k_command_line[CL_SIZE];
  363. +unsigned long uboot_info_stk;
  364. +EXPORT_SYMBOL(uboot_info_stk);
  365. +#endif
  366. void (*mach_sched_init) (irq_handler_t handler) __initdata = NULL;
  367. /* machine dependent irq functions */
  368. void (*mach_init_IRQ) (void) __initdata = NULL;
  369. void (*mach_get_model) (char *model);
  370. int (*mach_get_hardware_list) (char *buffer);
  371. +#ifdef CONFIG_COLDFIRE
  372. +void (*mach_tick)(void);
  373. +#endif
  374. /* machine dependent timer functions */
  375. unsigned long (*mach_gettimeoffset) (void);
  376. int (*mach_hwclk) (int, struct rtc_time*);
  377. @@ -128,13 +137,17 @@ extern void config_hp300(void);
  378. extern void config_q40(void);
  379. extern void config_sun3x(void);
  380. +#ifdef CONFIG_COLDFIRE
  381. +void coldfire_sort_memrec(void);
  382. +#endif
  383. +
  384. #define MASK_256K 0xfffc0000
  385. extern void paging_init(void);
  386. static void __init m68k_parse_bootinfo(const struct bi_record *record)
  387. {
  388. - while (record->tag != BI_LAST) {
  389. + while ((record->tag != BI_LAST) && !(CONFIG_COLDFIRE)) {
  390. int unknown = 0;
  391. const unsigned long *data = record->data;
  392. @@ -192,7 +205,11 @@ static void __init m68k_parse_bootinfo(c
  393. record->size);
  394. }
  395. - m68k_realnum_memory = m68k_num_memory;
  396. +#ifdef CONFIG_COLDFIRE
  397. + coldfire_sort_memrec();
  398. +#endif
  399. +
  400. + m68k_realnum_memory = m68k_num_memory;
  401. #ifdef CONFIG_SINGLE_MEMORY_CHUNK
  402. if (m68k_num_memory > 1) {
  403. printk("Ignoring last %i chunks of physical memory\n",
  404. @@ -205,7 +222,9 @@ static void __init m68k_parse_bootinfo(c
  405. void __init setup_arch(char **cmdline_p)
  406. {
  407. extern int _etext, _edata, _end;
  408. +#if !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE)
  409. int i;
  410. +#endif
  411. /* The bootinfo is located right after the kernel bss */
  412. m68k_parse_bootinfo((const struct bi_record *)&_end);
  413. @@ -220,9 +239,10 @@ void __init setup_arch(char **cmdline_p)
  414. * We should really do our own FPU check at startup.
  415. * [what do we do with buggy 68LC040s? if we have problems
  416. * with them, we should add a test to check_bugs() below] */
  417. -#ifndef CONFIG_M68KFPU_EMU_ONLY
  418. +#if !defined(CONFIG_M68KFPU_EMU_ONLY) && defined(CONFIG_FPU)
  419. /* clear the fpu if we have one */
  420. - if (m68k_fputype & (FPU_68881|FPU_68882|FPU_68040|FPU_68060)) {
  421. + if (m68k_fputype & (FPU_68881|FPU_68882|FPU_68040|FPU_68060|
  422. + FPU_CFV4E)) {
  423. volatile int zero = 0;
  424. asm volatile ("frestore %0" : : "m" (zero));
  425. }
  426. @@ -310,13 +330,18 @@ void __init setup_arch(char **cmdline_p)
  427. config_sun3x();
  428. break;
  429. #endif
  430. +#ifdef CONFIG_COLDFIRE
  431. + case MACH_CFMMU:
  432. + config_coldfire();
  433. + break;
  434. +#endif
  435. default:
  436. panic("No configuration setup");
  437. }
  438. paging_init();
  439. -#ifndef CONFIG_SUN3
  440. +#if !defined(CONFIG_SUN3) && !defined(CONFIG_COLDFIRE)
  441. for (i = 1; i < m68k_num_memory; i++)
  442. free_bootmem_node(NODE_DATA(i), m68k_memory[i].addr,
  443. m68k_memory[i].size);
  444. @@ -343,6 +368,10 @@ void __init setup_arch(char **cmdline_p)
  445. #endif /* !CONFIG_SUN3 */
  446. +#ifdef CONFIG_COLDFIRE
  447. + mmu_context_init();
  448. +#endif
  449. +
  450. /* set ISA defs early as possible */
  451. #if defined(CONFIG_ISA) && defined(MULTI_ISA)
  452. #if defined(CONFIG_Q40)
  453. @@ -373,6 +402,7 @@ static int show_cpuinfo(struct seq_file
  454. #define LOOP_CYCLES_68030 (8)
  455. #define LOOP_CYCLES_68040 (3)
  456. #define LOOP_CYCLES_68060 (1)
  457. +#define LOOP_CYCLES_COLDFIRE (2)
  458. if (CPU_IS_020) {
  459. cpu = "68020";
  460. @@ -386,6 +416,9 @@ static int show_cpuinfo(struct seq_file
  461. } else if (CPU_IS_060) {
  462. cpu = "68060";
  463. clockfactor = LOOP_CYCLES_68060;
  464. + } else if (CPU_IS_CFV4E) {
  465. + cpu = "ColdFire V4e";
  466. + clockfactor = LOOP_CYCLES_COLDFIRE;
  467. } else {
  468. cpu = "680x0";
  469. clockfactor = 0;
  470. @@ -404,6 +437,8 @@ static int show_cpuinfo(struct seq_file
  471. fpu = "68060";
  472. else if (m68k_fputype & FPU_SUNFPA)
  473. fpu = "Sun FPA";
  474. + else if (m68k_fputype & FPU_CFV4E)
  475. + fpu = "ColdFire V4e";
  476. else
  477. fpu = "none";
  478. #endif
  479. @@ -420,6 +455,8 @@ static int show_cpuinfo(struct seq_file
  480. mmu = "Sun-3";
  481. else if (m68k_mmutype & MMU_APOLLO)
  482. mmu = "Apollo";
  483. + else if (m68k_mmutype & MMU_CFV4E)
  484. + mmu = "ColdFire";
  485. else
  486. mmu = "unknown";
  487. @@ -482,7 +519,7 @@ int get_hardware_list(char *buffer)
  488. void check_bugs(void)
  489. {
  490. -#ifndef CONFIG_M68KFPU_EMU
  491. +#if !defined(CONFIG_M68KFPU_EMU) && !defined(CONFIG_M54455)
  492. if (m68k_fputype == 0) {
  493. printk(KERN_EMERG "*** YOU DO NOT HAVE A FLOATING POINT UNIT, "
  494. "WHICH IS REQUIRED BY LINUX/M68K ***\n");
  495. --- a/arch/m68k/kernel/time.c
  496. +++ b/arch/m68k/kernel/time.c
  497. @@ -40,6 +40,11 @@ static inline int set_rtc_mmss(unsigned
  498. */
  499. static irqreturn_t timer_interrupt(int irq, void *dummy)
  500. {
  501. +#ifdef CONFIG_COLDFIRE
  502. + /* kick hardware timer if necessary */
  503. + if (mach_tick)
  504. + mach_tick();
  505. +#endif
  506. do_timer(1);
  507. #ifndef CONFIG_SMP
  508. update_process_times(user_mode(get_irq_regs()));
  509. --- a/arch/m68k/kernel/vmlinux.lds.S
  510. +++ b/arch/m68k/kernel/vmlinux.lds.S
  511. @@ -5,6 +5,8 @@ PHDRS
  512. }
  513. #ifdef CONFIG_SUN3
  514. #include "vmlinux-sun3.lds"
  515. +#elif CONFIG_COLDFIRE
  516. +#include "../coldfire/vmlinux-cf.lds"
  517. #else
  518. #include "vmlinux-std.lds"
  519. #endif