3 * Purpose: Generic high-level routines for generic ColdFire processors
\r
7 * License: All software covered by license agreement in -
\r
8 * docs/Freescale_Software_License.pdf
\r
13 /********************************************************************/
\r
15 #define EXCEPTFMT "%s -- PC = %#08X\n"
\r
17 /********************************************************************/
\r
19 * This is the exception handler for all defined exceptions. Most
\r
20 * exceptions do nothing, but some of the more important ones are
\r
21 * handled to some extent.
\r
23 * Called by asm_exception_handler
\r
26 mcf5xxx_exception_handler (void *framep)
\r
28 switch (MCF5XXX_RD_SF_FORMAT(framep))
\r
36 printf(EXCEPTFMT,"Illegal stack type", MCF5XXX_SF_PC(framep));
\r
40 switch (MCF5XXX_RD_SF_VECTOR(framep))
\r
43 printf(EXCEPTFMT, "Access Error", MCF5XXX_SF_PC(framep));
\r
44 switch (MCF5XXX_RD_SF_FS(framep))
\r
47 printf("Error on instruction fetch\n");
\r
50 printf("Error on operand write\n");
\r
53 printf("Attempted write to write-protected space\n");
\r
56 printf("Error on operand read\n");
\r
59 printf("Reserved Fault Status Encoding\n");
\r
64 printf(EXCEPTFMT, "Address Error", MCF5XXX_SF_PC(framep));
\r
65 switch (MCF5XXX_RD_SF_FS(framep))
\r
68 printf("Error on instruction fetch\n");
\r
71 printf("Error on operand write\n");
\r
74 printf("Attempted write to write-protected space\n");
\r
77 printf("Error on operand read\n");
\r
80 printf("Reserved Fault Status Encoding\n");
\r
85 printf(EXCEPTFMT, "Illegal instruction", MCF5XXX_SF_PC(framep));
\r
88 printf(EXCEPTFMT, "Privilege violation", MCF5XXX_SF_PC(framep));
\r
91 printf(EXCEPTFMT, "Trace Exception", MCF5XXX_SF_PC(framep));
\r
94 printf(EXCEPTFMT, "Unimplemented A-Line Instruction", \
\r
95 MCF5XXX_SF_PC(framep));
\r
98 printf(EXCEPTFMT, "Unimplemented F-Line Instruction", \
\r
99 MCF5XXX_SF_PC(framep));
\r
102 printf(EXCEPTFMT, "Debug Interrupt", MCF5XXX_SF_PC(framep));
\r
105 printf(EXCEPTFMT, "Format Error", MCF5XXX_SF_PC(framep));
\r
108 printf(EXCEPTFMT, "Unitialized Interrupt", MCF5XXX_SF_PC(framep));
\r
111 printf(EXCEPTFMT, "Spurious Interrupt", MCF5XXX_SF_PC(framep));
\r
120 printf("Autovector interrupt level %d\n",
\r
121 MCF5XXX_RD_SF_VECTOR(framep) - 24);
\r
139 printf("TRAP #%d\n", MCF5XXX_RD_SF_VECTOR(framep) - 32);
\r
169 printf("Reserved: #%d\n", MCF5XXX_RD_SF_VECTOR(framep));
\r
172 cpu_handle_interrupt(MCF5XXX_RD_SF_VECTOR(framep));
\r
177 /********************************************************************/
\r
179 * Interpret the reset values of D0 and D1
\r
182 * d0 - the reset value of data register zero
\r
183 * d1 - the reset value of data register one
\r
186 mcf5xxx_interpret_d0d1(int d0, int d1)
\r
189 printf("\nColdFire Core Configuration:\n");
\r
190 printf("----------------------------\n");
\r
191 printf("Processor Family %#02x\n",MCF5XXX_D0_PF(d0));
\r
192 printf("ColdFire Core Version: %d\n",MCF5XXX_D0_VER(d0));
\r
193 printf("Processor Revision: %d\n",MCF5XXX_D0_REV(d1));
\r
194 printf("Bus Width: ");
\r
195 switch (MCF5XXX_D1_BUSW(d1))
\r
198 printf("32-bit\n");
\r
201 printf("Reserved\n");
\r
203 printf("ISA Version: ");
\r
204 switch (MCF5XXX_D0_ISA(d0))
\r
219 printf("Reserved\n");
\r
221 printf("Debug Version: ");
\r
222 switch (MCF5XXX_D0_DEBUG(d0))
\r
243 printf("Reserved\n");
\r
245 printf("MAC: %s\n", MCF5XXX_D0_MAC(d0) ? "Yes" : "No");
\r
246 printf("DIV: %s\n", MCF5XXX_D0_DIV(d0) ? "Yes" : "No");
\r
247 printf("EMAC: %s\n", MCF5XXX_D0_EMAC(d0) ? "Yes" : "No");
\r
248 printf("FPU: %s\n", MCF5XXX_D0_FPU(d0) ? "Yes" : "No");
\r
249 printf("MMU: %s\n", MCF5XXX_D0_MMU(d0) ? "Yes" : "No");
\r
250 printf("RAM Bank 0 Size: ");
\r
251 switch (MCF5XXX_D1_RAM0SIZ(d1))
\r
284 printf("Reserved\n");
\r
286 printf("RAM Bank 1 Size: ");
\r
287 switch (MCF5XXX_D1_RAM1SIZ(d1))
\r
320 printf("Reserved\n");
\r
322 printf("ROM Bank 0 Size: ");
\r
323 switch (MCF5XXX_D1_ROM0SIZ(d1))
\r
349 printf("Reserved\n");
\r
351 printf("ROM Bank 1 Size: ");
\r
352 switch (MCF5XXX_D1_ROM1SIZ(d1))
\r
378 printf("Reserved\n");
\r
380 printf("Cache Line Size: ");
\r
381 switch (MCF5XXX_D1_CL(d1))
\r
384 printf("16-byte\n");
\r
387 printf("Reserved\n");
\r
389 printf("I-Cache Associativity: ");
\r
390 switch (MCF5XXX_D1_ICA(d1))
\r
393 printf("Four-way\n");
\r
396 printf("Direct mapped\n");
\r
399 printf("Reserved\n");
\r
401 printf("D-Cache Associativity: ");
\r
402 switch (MCF5XXX_D1_DCA(d1))
\r
405 printf("Four-way\n");
\r
408 printf("Direct mapped\n");
\r
411 printf("Reserved\n");
\r
413 printf("I-Cache Size: ");
\r
414 switch (MCF5XXX_D1_ICSIZ(d1))
\r
444 printf("Reserved\n");
\r
446 printf("D-Cache Size: ");
\r
447 switch (MCF5XXX_D1_DCSIZ(d1))
\r
477 printf("Reserved\n");
\r
481 /* Remove compiler warnings. */
\r
487 /********************************************************************/
\r
489 mcf5xxx_irq_enable (void)
\r
493 /********************************************************************/
\r
495 mcf5xxx_irq_disable (void)
\r
499 /********************************************************************/
\r
501 * Write new interrupt vector handler into the vector table
\r
502 * Return previous handler address
\r
506 mcf5xxx_set_handler (int vector, ADDRESS new_handler)
\r
508 ADDRESS old_handler;
\r
509 extern uint32 __VECTOR_RAM[];
\r
511 old_handler = (ADDRESS) __VECTOR_RAM[vector];
\r
512 __VECTOR_RAM[vector] = (uint32)new_handler;
\r
513 return old_handler;
\r
516 /********************************************************************/
\r