59 lines
1.5 KiB
C
59 lines
1.5 KiB
C
|
/* $FreeBSD$ */
|
||
|
|
||
|
#ifndef _MIPS32_SENTRY5_SENTRY5REG_H_
|
||
|
#define _MIPS32_SENTRY5_SENTRY5REG_H_
|
||
|
|
||
|
#define SENTRY5_UART0ADR 0x18000300
|
||
|
#define SENTRY5_UART1ADR 0x18000400
|
||
|
|
||
|
/* Reset register implemented here in a PLD device. */
|
||
|
#define SENTRY5_EXTIFADR 0x1F000000
|
||
|
#define SENTRY5_DORESET 0x80
|
||
|
|
||
|
/*
|
||
|
* Custom CP0 register macros.
|
||
|
* XXX: This really needs the mips cpuregs.h file for the barrier.
|
||
|
*/
|
||
|
#define S5_RDRW32_C0P0_CUST22(n,r) \
|
||
|
static __inline u_int32_t \
|
||
|
s5_rd_ ## n (void) \
|
||
|
{ \
|
||
|
int v0; \
|
||
|
__asm __volatile ("mfc0 %[v0], $22, "__XSTRING(r)" ;" \
|
||
|
: [v0] "=&r"(v0)); \
|
||
|
/*mips_barrier();*/ \
|
||
|
return (v0); \
|
||
|
} \
|
||
|
static __inline void \
|
||
|
s5_wr_ ## n (u_int32_t a0) \
|
||
|
{ \
|
||
|
__asm __volatile ("mtc0 %[a0], $22, "__XSTRING(r)" ;" \
|
||
|
__XSTRING(COP0_SYNC)";" \
|
||
|
"nop;" \
|
||
|
"nop;" \
|
||
|
: \
|
||
|
: [a0] "r"(a0)); \
|
||
|
/*mips_barrier();*/ \
|
||
|
} struct __hack
|
||
|
|
||
|
/*
|
||
|
* All 5 of these sub-registers are used by Linux.
|
||
|
* There is a further custom register at 25 which is not used.
|
||
|
*/
|
||
|
#define S5_CP0_DIAG 0
|
||
|
#define S5_CP0_CLKCFG1 1
|
||
|
#define S5_CP0_CLKCFG2 2
|
||
|
#define S5_CP0_SYNC 3
|
||
|
#define S5_CP0_CLKCFG3 4
|
||
|
#define S5_CP0_RESET 5
|
||
|
|
||
|
/* s5_[rd|wr]_xxx() */
|
||
|
S5_RDRW32_C0P0_CUST22(diag, S5_CP0_DIAG);
|
||
|
S5_RDRW32_C0P0_CUST22(clkcfg1, S5_CP0_CLKCFG1);
|
||
|
S5_RDRW32_C0P0_CUST22(clkcfg2, S5_CP0_CLKCFG2);
|
||
|
S5_RDRW32_C0P0_CUST22(sync, S5_CP0_SYNC);
|
||
|
S5_RDRW32_C0P0_CUST22(clkcfg3, S5_CP0_CLKCFG3);
|
||
|
S5_RDRW32_C0P0_CUST22(reset, S5_CP0_RESET);
|
||
|
|
||
|
#endif /* _MIPS32_SENTRY5_SENTRY5REG_H_ */
|