diff options
Diffstat (limited to '')
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen5200/include/bsp.h | 26 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen5200/include/mpc5200.h | 3 | ||||
-rw-r--r-- | c/src/lib/libbsp/powerpc/gen5200/include/tm27.h | 59 |
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 |