Deleted Added
full compact
sb_scd.c (205675) sb_scd.c (210911)
1/*-
2 * Copyright (c) 2009 Neelkanth Natu
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
1/*-
2 * Copyright (c) 2009 Neelkanth Natu
3 * All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright

--- 11 unchanged lines hidden (view full) ---

20 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24 * SUCH DAMAGE.
25 */
26
27#include <sys/cdefs.h>
28__FBSDID("$FreeBSD: head/sys/mips/sibyte/sb_scd.c 205675 2010-03-26 07:15:27Z neel $");
28__FBSDID("$FreeBSD: head/sys/mips/sibyte/sb_scd.c 210911 2010-08-06 05:30:55Z neel $");
29
30#include <sys/param.h>
31#include <sys/kernel.h>
32#include <sys/systm.h>
33#include <sys/module.h>
34#include <sys/bus.h>
35
36#include <machine/resource.h>
37#include <machine/hwfunc.h>
38
39#include "sb_scd.h"
40
41/*
42 * We compile a 32-bit kernel to run on the SB-1 processor which is a 64-bit
43 * processor. It has some registers that must be accessed using 64-bit load
44 * and store instructions.
45 *
46 * We use the mips_ld() and mips_sd() functions to do this for us.
47 */
29
30#include <sys/param.h>
31#include <sys/kernel.h>
32#include <sys/systm.h>
33#include <sys/module.h>
34#include <sys/bus.h>
35
36#include <machine/resource.h>
37#include <machine/hwfunc.h>
38
39#include "sb_scd.h"
40
41/*
42 * We compile a 32-bit kernel to run on the SB-1 processor which is a 64-bit
43 * processor. It has some registers that must be accessed using 64-bit load
44 * and store instructions.
45 *
46 * We use the mips_ld() and mips_sd() functions to do this for us.
47 */
48#define sb_store64(addr, val) mips3_sd((uint64_t *)(addr), (val))
49#define sb_load64(addr) mips3_ld((uint64_t *)(addr))
48#define sb_store64(addr, val) mips3_sd((uint64_t *)(uintptr_t)(addr), (val))
49#define sb_load64(addr) mips3_ld((uint64_t *)(uintptr_t)(addr))
50
51/*
52 * System Control and Debug (SCD) unit on the Sibyte ZBbus.
53 */
54
55/*
56 * Extract the value starting at bit position 'b' for 'n' bits from 'x'.
57 */

--- 68 unchanged lines hidden (view full) ---

126 syscfg &= ~SOFT_RESET;
127 syscfg |= SYSTEM_RESET | EXT_RESET;
128 sb_write_syscfg(syscfg);
129}
130
131void
132sb_disable_intsrc(int cpu, int src)
133{
50
51/*
52 * System Control and Debug (SCD) unit on the Sibyte ZBbus.
53 */
54
55/*
56 * Extract the value starting at bit position 'b' for 'n' bits from 'x'.
57 */

--- 68 unchanged lines hidden (view full) ---

126 syscfg &= ~SOFT_RESET;
127 syscfg |= SYSTEM_RESET | EXT_RESET;
128 sb_write_syscfg(syscfg);
129}
130
131void
132sb_disable_intsrc(int cpu, int src)
133{
134 uint32_t regaddr;
134 int regaddr;
135 uint64_t val;
136
137 regaddr = INTSRC_MASK_ADDR(cpu);
138
139 val = sb_load64(regaddr);
140 val |= 1ULL << src;
141 sb_store64(regaddr, val);
142}
143
144void
145sb_enable_intsrc(int cpu, int src)
146{
135 uint64_t val;
136
137 regaddr = INTSRC_MASK_ADDR(cpu);
138
139 val = sb_load64(regaddr);
140 val |= 1ULL << src;
141 sb_store64(regaddr, val);
142}
143
144void
145sb_enable_intsrc(int cpu, int src)
146{
147 uint32_t regaddr;
147 int regaddr;
148 uint64_t val;
149
150 regaddr = INTSRC_MASK_ADDR(cpu);
151
152 val = sb_load64(regaddr);
153 val &= ~(1ULL << src);
154 sb_store64(regaddr, val);
155}
156
157void
158sb_write_intsrc_mask(int cpu, uint64_t val)
159{
148 uint64_t val;
149
150 regaddr = INTSRC_MASK_ADDR(cpu);
151
152 val = sb_load64(regaddr);
153 val &= ~(1ULL << src);
154 sb_store64(regaddr, val);
155}
156
157void
158sb_write_intsrc_mask(int cpu, uint64_t val)
159{
160 uint32_t regaddr;
160 int regaddr;
161
162 regaddr = INTSRC_MASK_ADDR(cpu);
163 sb_store64(regaddr, val);
164}
165
166uint64_t
167sb_read_intsrc_mask(int cpu)
168{
161
162 regaddr = INTSRC_MASK_ADDR(cpu);
163 sb_store64(regaddr, val);
164}
165
166uint64_t
167sb_read_intsrc_mask(int cpu)
168{
169 uint32_t regaddr;
169 int regaddr;
170 uint64_t val;
171
172 regaddr = INTSRC_MASK_ADDR(cpu);
173 val = sb_load64(regaddr);
174
175 return (val);
176}
177
178void
179sb_write_intmap(int cpu, int intsrc, int intrnum)
180{
170 uint64_t val;
171
172 regaddr = INTSRC_MASK_ADDR(cpu);
173 val = sb_load64(regaddr);
174
175 return (val);
176}
177
178void
179sb_write_intmap(int cpu, int intsrc, int intrnum)
180{
181 uint32_t regaddr;
181 int regaddr;
182
183 regaddr = INTSRC_MAP_ADDR(cpu, intsrc);
184 sb_store64(regaddr, intrnum);
185}
186
187int
188sb_read_intmap(int cpu, int intsrc)
189{
182
183 regaddr = INTSRC_MAP_ADDR(cpu, intsrc);
184 sb_store64(regaddr, intrnum);
185}
186
187int
188sb_read_intmap(int cpu, int intsrc)
189{
190 uint32_t regaddr;
190 int regaddr;
191
192 regaddr = INTSRC_MAP_ADDR(cpu, intsrc);
193 return (sb_load64(regaddr) & 0x7);
194}
195
196int
197sb_route_intsrc(int intsrc)
198{

--- 23 unchanged lines hidden (view full) ---

222{
223
224 return (sb_load64(SYSREV_ADDR));
225}
226
227void
228sb_set_mailbox(int cpu, uint64_t val)
229{
191
192 regaddr = INTSRC_MAP_ADDR(cpu, intsrc);
193 return (sb_load64(regaddr) & 0x7);
194}
195
196int
197sb_route_intsrc(int intsrc)
198{

--- 23 unchanged lines hidden (view full) ---

222{
223
224 return (sb_load64(SYSREV_ADDR));
225}
226
227void
228sb_set_mailbox(int cpu, uint64_t val)
229{
230 uint32_t regaddr;
230 int regaddr;
231
232 regaddr = MAILBOX_SET_ADDR(cpu);
233 sb_store64(regaddr, val);
234}
235
236void
237sb_clear_mailbox(int cpu, uint64_t val)
238{
231
232 regaddr = MAILBOX_SET_ADDR(cpu);
233 sb_store64(regaddr, val);
234}
235
236void
237sb_clear_mailbox(int cpu, uint64_t val)
238{
239 uint32_t regaddr;
239 int regaddr;
240
241 regaddr = MAILBOX_CLEAR_ADDR(cpu);
242 sb_store64(regaddr, val);
243}
244
245int
246platform_num_processors(void)
247{

--- 54 unchanged lines hidden ---
240
241 regaddr = MAILBOX_CLEAR_ADDR(cpu);
242 sb_store64(regaddr, val);
243}
244
245int
246platform_num_processors(void)
247{

--- 54 unchanged lines hidden ---