diff options
Diffstat (limited to 'arch/mips/sgi-ip27/ip27-init.c')
| -rw-r--r-- | arch/mips/sgi-ip27/ip27-init.c | 50 |
1 files changed, 22 insertions, 28 deletions
diff --git a/arch/mips/sgi-ip27/ip27-init.c b/arch/mips/sgi-ip27/ip27-init.c index 6dcee5c46c74..8651a0e75404 100644 --- a/arch/mips/sgi-ip27/ip27-init.c +++ b/arch/mips/sgi-ip27/ip27-init.c | |||
| @@ -56,12 +56,12 @@ static void __init per_hub_init(cnodeid_t cnode) | |||
| 56 | { | 56 | { |
| 57 | struct hub_data *hub = hub_data(cnode); | 57 | struct hub_data *hub = hub_data(cnode); |
| 58 | nasid_t nasid = COMPACT_TO_NASID_NODEID(cnode); | 58 | nasid_t nasid = COMPACT_TO_NASID_NODEID(cnode); |
| 59 | int i; | ||
| 59 | 60 | ||
| 60 | cpu_set(smp_processor_id(), hub->h_cpus); | 61 | cpu_set(smp_processor_id(), hub->h_cpus); |
| 61 | 62 | ||
| 62 | if (test_and_set_bit(cnode, hub_init_mask)) | 63 | if (test_and_set_bit(cnode, hub_init_mask)) |
| 63 | return; | 64 | return; |
| 64 | |||
| 65 | /* | 65 | /* |
| 66 | * Set CRB timeout at 5ms, (< PI timeout of 10ms) | 66 | * Set CRB timeout at 5ms, (< PI timeout of 10ms) |
| 67 | */ | 67 | */ |
| @@ -88,6 +88,24 @@ static void __init per_hub_init(cnodeid_t cnode) | |||
| 88 | __flush_cache_all(); | 88 | __flush_cache_all(); |
| 89 | } | 89 | } |
| 90 | #endif | 90 | #endif |
| 91 | |||
| 92 | /* | ||
| 93 | * Some interrupts are reserved by hardware or by software convention. | ||
| 94 | * Mark these as reserved right away so they won't be used accidently | ||
| 95 | * later. | ||
| 96 | */ | ||
| 97 | for (i = 0; i <= BASE_PCI_IRQ; i++) { | ||
| 98 | __set_bit(i, hub->irq_alloc_mask); | ||
| 99 | LOCAL_HUB_CLR_INTR(INT_PEND0_BASELVL + i); | ||
| 100 | } | ||
| 101 | |||
| 102 | __set_bit(IP_PEND0_6_63, hub->irq_alloc_mask); | ||
| 103 | LOCAL_HUB_S(PI_INT_PEND_MOD, IP_PEND0_6_63); | ||
| 104 | |||
| 105 | for (i = NI_BRDCAST_ERR_A; i <= MSC_PANIC_INTR; i++) { | ||
| 106 | __set_bit(i, hub->irq_alloc_mask); | ||
| 107 | LOCAL_HUB_CLR_INTR(INT_PEND1_BASELVL + i); | ||
| 108 | } | ||
| 91 | } | 109 | } |
| 92 | 110 | ||
| 93 | void __init per_cpu_init(void) | 111 | void __init per_cpu_init(void) |
| @@ -104,30 +122,12 @@ void __init per_cpu_init(void) | |||
| 104 | 122 | ||
| 105 | clear_c0_status(ST0_IM); | 123 | clear_c0_status(ST0_IM); |
| 106 | 124 | ||
| 125 | per_hub_init(cnode); | ||
| 126 | |||
| 107 | for (i = 0; i < LEVELS_PER_SLICE; i++) | 127 | for (i = 0; i < LEVELS_PER_SLICE; i++) |
| 108 | si->level_to_irq[i] = -1; | 128 | si->level_to_irq[i] = -1; |
| 109 | 129 | ||
| 110 | /* | 130 | /* |
| 111 | * Some interrupts are reserved by hardware or by software convention. | ||
| 112 | * Mark these as reserved right away so they won't be used accidently | ||
| 113 | * later. | ||
| 114 | */ | ||
| 115 | for (i = 0; i <= BASE_PCI_IRQ; i++) { | ||
| 116 | __set_bit(i, si->irq_alloc_mask); | ||
| 117 | LOCAL_HUB_S(PI_INT_PEND_MOD, i); | ||
| 118 | } | ||
| 119 | |||
| 120 | __set_bit(IP_PEND0_6_63, si->irq_alloc_mask); | ||
| 121 | LOCAL_HUB_S(PI_INT_PEND_MOD, IP_PEND0_6_63); | ||
| 122 | |||
| 123 | for (i = NI_BRDCAST_ERR_A; i <= MSC_PANIC_INTR; i++) { | ||
| 124 | __set_bit(i, si->irq_alloc_mask + 1); | ||
| 125 | LOCAL_HUB_S(PI_INT_PEND_MOD, i); | ||
| 126 | } | ||
| 127 | |||
| 128 | LOCAL_HUB_L(PI_INT_PEND0); | ||
| 129 | |||
| 130 | /* | ||
| 131 | * We use this so we can find the local hub's data as fast as only | 131 | * We use this so we can find the local hub's data as fast as only |
| 132 | * possible. | 132 | * possible. |
| 133 | */ | 133 | */ |
| @@ -140,8 +140,6 @@ void __init per_cpu_init(void) | |||
| 140 | install_cpu_nmi_handler(cputoslice(cpu)); | 140 | install_cpu_nmi_handler(cputoslice(cpu)); |
| 141 | 141 | ||
| 142 | set_c0_status(SRB_DEV0 | SRB_DEV1); | 142 | set_c0_status(SRB_DEV0 | SRB_DEV1); |
| 143 | |||
| 144 | per_hub_init(cnode); | ||
| 145 | } | 143 | } |
| 146 | 144 | ||
| 147 | /* | 145 | /* |
| @@ -198,7 +196,7 @@ extern void ip27_setup_console(void); | |||
| 198 | extern void ip27_time_init(void); | 196 | extern void ip27_time_init(void); |
| 199 | extern void ip27_reboot_setup(void); | 197 | extern void ip27_reboot_setup(void); |
| 200 | 198 | ||
| 201 | static int __init ip27_setup(void) | 199 | void __init plat_setup(void) |
| 202 | { | 200 | { |
| 203 | hubreg_t p, e, n_mode; | 201 | hubreg_t p, e, n_mode; |
| 204 | nasid_t nid; | 202 | nasid_t nid; |
| @@ -245,8 +243,4 @@ static int __init ip27_setup(void) | |||
| 245 | set_io_port_base(IO_BASE); | 243 | set_io_port_base(IO_BASE); |
| 246 | 244 | ||
| 247 | board_time_init = ip27_time_init; | 245 | board_time_init = ip27_time_init; |
| 248 | |||
| 249 | return 0; | ||
| 250 | } | 246 | } |
| 251 | |||
| 252 | early_initcall(ip27_setup); | ||
