summaryrefslogtreecommitdiffstats
path: root/c/src/lib/libbsp/powerpc/gen5200/include
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/include/bsp.h26
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h3
-rw-r--r--c/src/lib/libbsp/powerpc/gen5200/include/tm27.h59
3 files changed, 65 insertions, 23 deletions
diff --git a/c/src/lib/libbsp/powerpc/gen5200/include/bsp.h b/c/src/lib/libbsp/powerpc/gen5200/include/bsp.h
index 998349c55f..f106e8b3c2 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/include/bsp.h
+++ b/c/src/lib/libbsp/powerpc/gen5200/include/bsp.h
@@ -61,13 +61,15 @@
*/
/* ROM definitions (2 MB) */
#define ROM_START 0xFFE00000
-#define ROM_END 0xFFFFFFFF
+#define ROM_SIZE 0x00200000
+#define ROM_END (ROM_START+ROM_SIZE-1)
#define BOOT_START ROM_START
#define BOOT_END ROM_END
/* SDRAM definitions (256 MB) */
-#define RAM_START 0x00000000
-#define RAM_END 0x0FFFFFFF
+#define RAM_START 0x00000000
+#define RAM_SIZE 0x10000000
+#define RAM_END (RAM_START+RAM_SIZE-1)
/* DPRAM definitions (64 KB) */
#define DPRAM_START 0xFF000000
@@ -198,7 +200,8 @@ void bsp_cleanup(void);
#define UARTS_USE_TERMIOS_INT 1
/* ata modes */
-#undef ATA_USE_INT
+/* #undef ATA_USE_INT */
+#define ATA_USE_INT
/* clock settings */
#if defined(HAS_UBOOT)
@@ -211,6 +214,21 @@ void bsp_cleanup(void);
#define G2_CLOCK 231000000 /* 231 MHz */
#endif
+/*
+ * Convert decrement value to tenths of microsecnds (used by
+ * shared timer driver).
+ *
+ * + CPU has a XLB_CLOCK bus,
+ * + There are 4 bus cycles per click
+ * + We return value in 1/10 microsecond units.
+ * Modified following equation to integer equation to remove
+ * floating point math.
+ * (int) ((float)(_value) / ((XLB_CLOCK/1000000 * 0.1) / 4.0))
+ */
+
+#define BSP_Convert_decrementer( _value ) \
+ (int) (((_value) * 4000) / (XLB_CLOCK/10000))
+
/* slicetimer settings */
#define USE_SLICETIMER_0 TRUE
#define USE_SLICETIMER_1 FALSE
diff --git a/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h b/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h
index 748eb77d70..adcdc06392 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h
+++ b/c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h
@@ -300,12 +300,15 @@ typedef struct mpc5200_
#define GPT_STATUS_RESET 0x0000000F
#define GPT_STATUS_TEXP (1 << 3)
#define GPT_STATUS_PIN (1 << 8)
+#define GPT_EMSEL_GPIO_DIR (2 << 4)
+#define GPT_EMSEL_GPIO_OUT (1 << 4)
#define GPT_EMSEL_GPIO_OUT_HIGH (3 << 4)
#define GPT_EMSEL_TIMER_MS_GPIO (4 << 0)
#define GPT_EMSEL_GPIO_IN (0 << 0)
#define GPT_EMSEL_CE (1 << 12)
#define GPT_EMSEL_ST_CONT (1 << 10)
#define GPT_EMSEL_INTEN (1 << 8)
+#define GPT_EMSEL_WDEN (1 << 15)
#define GPT0 0
#define GPT1 1
diff --git a/c/src/lib/libbsp/powerpc/gen5200/include/tm27.h b/c/src/lib/libbsp/powerpc/gen5200/include/tm27.h
index d938e07f6e..2c85c3156e 100644
--- a/c/src/lib/libbsp/powerpc/gen5200/include/tm27.h
+++ b/c/src/lib/libbsp/powerpc/gen5200/include/tm27.h
@@ -15,28 +15,49 @@
#ifndef __tm27_h
#define __tm27_h
+#include <bsp/irq.h>
+
/*
* Stuff for Time Test 27
*/
-#define MUST_WAIT_FOR_INTERRUPT 0
-
-#define Install_tm27_vector( handler ) \
- do { \
- static rtems_irq_connect_data scIrqData = { \
- PPC_IRQ_SCALL, \
- (rtems_irq_hdl) handler, \
- NULL, \
- NULL, \
- NULL \
- }; \
- BSP_install_rtems_irq_handler (&scIrqData); \
- } while(0)
-
-#define Cause_tm27_intr() asm volatile ("sc")
-
-#define Clear_tm27_intr() /* empty */
-
-#define Lower_tm27_intr() /* empty */
+#define MUST_WAIT_FOR_INTERRUPT 1
+
+void nullFunc() {}
+
+static rtems_irq_connect_data clockIrqData = {BSP_DECREMENTER,
+ 0,
+ (rtems_irq_enable)nullFunc,
+ (rtems_irq_disable)nullFunc,
+ (rtems_irq_is_enabled) nullFunc};
+void Install_tm27_vector(void (*_handler)())
+{
+ clockIrqData.hdl = _handler;
+ if (!BSP_install_rtems_irq_handler (&clockIrqData)) {
+ printk("Error installing clock interrupt handler!\n");
+ rtems_fatal_error_occurred(1);
+ }
+}
+
+#define Cause_tm27_intr() \
+ do { \
+ uint32_t _clicks = 8; \
+ asm volatile( "mtdec %0" : "=r" ((_clicks)) : "r" ((_clicks)) ); \
+ } while (0)
+
+#define Clear_tm27_intr() \
+ do { \
+ uint32_t _clicks = 0xffffffff; \
+ asm volatile( "mtdec %0" : "=r" ((_clicks)) : "r" ((_clicks)) ); \
+ } while (0)
+
+#define Lower_tm27_intr() \
+ do { \
+ uint32_t _msr = 0; \
+ _ISR_Set_level( 0 ); \
+ asm volatile( "mfmsr %0 ;" : "=r" (_msr) : "r" (_msr) ); \
+ _msr |= 0x8002; \
+ asm volatile( "mtmsr %0 ;" : "=r" (_msr) : "r" (_msr) ); \
+ } while (0)
#endif