diff options
Diffstat (limited to 'sys')
-rw-r--r-- | sys/mips/nlm/hal/sys.h | 13 | ||||
-rw-r--r-- | sys/mips/nlm/xlp_machdep.c | 21 |
2 files changed, 31 insertions, 3 deletions
diff --git a/sys/mips/nlm/hal/sys.h b/sys/mips/nlm/hal/sys.h index adfd8a8..2092d37 100644 --- a/sys/mips/nlm/hal/sys.h +++ b/sys/mips/nlm/hal/sys.h @@ -140,5 +140,18 @@ enum { INVALID_DFS_DEVICE = 0xFF }; +static __inline +void nlm_sys_enable_block(uint64_t sys_base, int block) +{ + uint32_t dfsdis, mask; + + mask = 1 << block; + dfsdis = nlm_read_sys_reg(sys_base, SYS_DFS_DIS_CTRL); + if ((dfsdis & mask) == 0) + return; /* already enabled, nothing to do */ + dfsdis &= ~mask; + nlm_write_sys_reg(sys_base, SYS_DFS_DIS_CTRL, dfsdis); +} + #endif #endif diff --git a/sys/mips/nlm/xlp_machdep.c b/sys/mips/nlm/xlp_machdep.c index a4ffc73..f95592e 100644 --- a/sys/mips/nlm/xlp_machdep.c +++ b/sys/mips/nlm/xlp_machdep.c @@ -157,6 +157,20 @@ xlp_setup_mmu(void) } static void +xlp_enable_blocks(void) +{ + uint64_t sysbase; + int i; + + for (i = 0; i < XLP_MAX_NODES; i++) { + if (!nlm_dev_exists(XLP_IO_SYS_OFFSET(i))) + continue; + sysbase = nlm_get_sys_regbase(i); + nlm_sys_enable_block(sysbase, DFS_DEVICE_RSA); + } +} + +static void xlp_parse_mmu_options(void) { uint64_t sysbase; @@ -420,9 +434,8 @@ xlp_pic_init(void) #define XLP_MEM_LIM 0xfffff000UL #endif static vm_paddr_t xlp_mem_excl[] = { - 0, 0, /* entry for kernel image, set by xlp_mem_init*/ - 0x0c000000, 0x0d000000, /* uboot mess */ - 0x10000000, 0x14000000, /* cms queue and other stuff */ + 0, 0, /* for kernel image region, see xlp_mem_init */ + 0x0c000000, 0x14000000, /* uboot area, cms queue and other stuff */ 0x1fc00000, 0x1fd00000, /* reset vec */ 0x1e000000, 0x1e200000, /* poe buffers */ }; @@ -559,6 +572,8 @@ platform_start(__register_t a0 __unused, /* setup for the startup core */ xlp_setup_mmu(); + xlp_enable_blocks(); + /* Read/Guess/setup board information */ nlm_board_info_setup(); |