| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 1 | /* | 
|  | 2 | * cbe_regs.h | 
|  | 3 | * | 
|  | 4 | * This file is intended to hold the various register definitions for CBE | 
|  | 5 | * on-chip system devices (memory controller, IO controller, etc...) | 
|  | 6 | * | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 7 | * (C) Copyright IBM Corporation 2001,2006 | 
|  | 8 | * | 
|  | 9 | * Authors: Maximino Aguilar (maguilar@us.ibm.com) | 
|  | 10 | *          David J. Erb (djerb@us.ibm.com) | 
|  | 11 | * | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 12 | * (c) 2006 Benjamin Herrenschmidt <benh@kernel.crashing.org>, IBM Corp. | 
|  | 13 | */ | 
|  | 14 |  | 
|  | 15 | #ifndef CBE_REGS_H | 
|  | 16 | #define CBE_REGS_H | 
|  | 17 |  | 
| Kevin Corry | e4f6948 | 2006-11-20 18:45:14 +0100 | [diff] [blame] | 18 | #include <asm/cell-pmu.h> | 
|  | 19 |  | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 20 | /* | 
|  | 21 | * | 
|  | 22 | * Some HID register definitions | 
|  | 23 | * | 
|  | 24 | */ | 
|  | 25 |  | 
|  | 26 | /* CBE specific HID0 bits */ | 
|  | 27 | #define HID0_CBE_THERM_WAKEUP	0x0000020000000000ul | 
|  | 28 | #define HID0_CBE_SYSERR_WAKEUP	0x0000008000000000ul | 
|  | 29 | #define HID0_CBE_THERM_INT_EN	0x0000000400000000ul | 
|  | 30 | #define HID0_CBE_SYSERR_INT_EN	0x0000000200000000ul | 
|  | 31 |  | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 32 | #define MAX_CBE		2 | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 33 |  | 
|  | 34 | /* | 
|  | 35 | * | 
|  | 36 | * Pervasive unit register definitions | 
|  | 37 | * | 
|  | 38 | */ | 
|  | 39 |  | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 40 | union spe_reg { | 
|  | 41 | u64 val; | 
|  | 42 | u8 spe[8]; | 
|  | 43 | }; | 
|  | 44 |  | 
|  | 45 | union ppe_spe_reg { | 
|  | 46 | u64 val; | 
|  | 47 | struct { | 
|  | 48 | u32 ppe; | 
|  | 49 | u32 spe; | 
|  | 50 | }; | 
|  | 51 | }; | 
|  | 52 |  | 
|  | 53 |  | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 54 | struct cbe_pmd_regs { | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 55 | /* Debug Bus Control */ | 
|  | 56 | u64	pad_0x0000;					/* 0x0000 */ | 
|  | 57 |  | 
|  | 58 | u64	group_control;					/* 0x0008 */ | 
|  | 59 |  | 
|  | 60 | u8	pad_0x0010_0x00a8 [0x00a8 - 0x0010];		/* 0x0010 */ | 
|  | 61 |  | 
|  | 62 | u64	debug_bus_control;				/* 0x00a8 */ | 
|  | 63 |  | 
|  | 64 | u8	pad_0x00b0_0x0100 [0x0100 - 0x00b0];		/* 0x00b0 */ | 
|  | 65 |  | 
|  | 66 | u64	trace_aux_data;					/* 0x0100 */ | 
|  | 67 | u64	trace_buffer_0_63;				/* 0x0108 */ | 
|  | 68 | u64	trace_buffer_64_127;				/* 0x0110 */ | 
|  | 69 | u64	trace_address;					/* 0x0118 */ | 
|  | 70 | u64	ext_tr_timer;					/* 0x0120 */ | 
|  | 71 |  | 
|  | 72 | u8	pad_0x0128_0x0400 [0x0400 - 0x0128];		/* 0x0128 */ | 
|  | 73 |  | 
|  | 74 | /* Performance Monitor */ | 
|  | 75 | u64	pm_status;					/* 0x0400 */ | 
|  | 76 | u64	pm_control;					/* 0x0408 */ | 
|  | 77 | u64	pm_interval;					/* 0x0410 */ | 
|  | 78 | u64	pm_ctr[4];					/* 0x0418 */ | 
|  | 79 | u64	pm_start_stop;					/* 0x0438 */ | 
|  | 80 | u64	pm07_control[8];				/* 0x0440 */ | 
|  | 81 |  | 
|  | 82 | u8	pad_0x0480_0x0800 [0x0800 - 0x0480];		/* 0x0480 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 83 |  | 
|  | 84 | /* Thermal Sensor Registers */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 85 | union	spe_reg	ts_ctsr1;				/* 0x0800 */ | 
|  | 86 | u64	ts_ctsr2;					/* 0x0808 */ | 
|  | 87 | union	spe_reg	ts_mtsr1;				/* 0x0810 */ | 
|  | 88 | u64	ts_mtsr2;					/* 0x0818 */ | 
|  | 89 | union	spe_reg	ts_itr1;				/* 0x0820 */ | 
|  | 90 | u64	ts_itr2;					/* 0x0828 */ | 
|  | 91 | u64	ts_gitr;					/* 0x0830 */ | 
|  | 92 | u64	ts_isr;						/* 0x0838 */ | 
|  | 93 | u64	ts_imr;						/* 0x0840 */ | 
|  | 94 | union	spe_reg	tm_cr1;					/* 0x0848 */ | 
|  | 95 | u64	tm_cr2;						/* 0x0850 */ | 
|  | 96 | u64	tm_simr;					/* 0x0858 */ | 
|  | 97 | union	ppe_spe_reg tm_tpr;				/* 0x0860 */ | 
|  | 98 | union	spe_reg	tm_str1;				/* 0x0868 */ | 
|  | 99 | u64	tm_str2;					/* 0x0870 */ | 
|  | 100 | union	ppe_spe_reg tm_tsr;				/* 0x0878 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 101 |  | 
|  | 102 | /* Power Management */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 103 | u64	pmcr;						/* 0x0880 */ | 
|  | 104 | #define CBE_PMD_PAUSE_ZERO_CONTROL	0x10000 | 
|  | 105 | u64	pmsr;						/* 0x0888 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 106 |  | 
|  | 107 | /* Time Base Register */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 108 | u64	tbr;						/* 0x0890 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 109 |  | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 110 | u8	pad_0x0898_0x0c00 [0x0c00 - 0x0898];		/* 0x0898 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 111 |  | 
|  | 112 | /* Fault Isolation Registers */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 113 | u64	checkstop_fir;					/* 0x0c00 */ | 
|  | 114 | u64	recoverable_fir;				/* 0x0c08 */ | 
|  | 115 | u64	spec_att_mchk_fir;				/* 0x0c10 */ | 
| Arnd Bergmann | 3addf55 | 2007-08-23 03:01:26 +1000 | [diff] [blame] | 116 | u32	fir_mode_reg;					/* 0x0c18 */ | 
|  | 117 | u8	pad_0x0c1c_0x0c20 [4];				/* 0x0c1c */ | 
|  | 118 | #define CBE_PMD_FIR_MODE_M8		0x00800 | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 119 | u64	fir_enable_mask;				/* 0x0c20 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 120 |  | 
| Arnd Bergmann | 3addf55 | 2007-08-23 03:01:26 +1000 | [diff] [blame] | 121 | u8	pad_0x0c28_0x0ca8 [0x0ca8 - 0x0c28];		/* 0x0c28 */ | 
|  | 122 | u64	ras_esc_0;					/* 0x0ca8 */ | 
|  | 123 | u8	pad_0x0cb0_0x1000 [0x1000 - 0x0cb0];		/* 0x0cb0 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 124 | }; | 
|  | 125 |  | 
|  | 126 | extern struct cbe_pmd_regs __iomem *cbe_get_pmd_regs(struct device_node *np); | 
|  | 127 | extern struct cbe_pmd_regs __iomem *cbe_get_cpu_pmd_regs(int cpu); | 
|  | 128 |  | 
|  | 129 | /* | 
| Kevin Corry | bffd492 | 2006-10-24 18:31:21 +0200 | [diff] [blame] | 130 | * PMU shadow registers | 
|  | 131 | * | 
|  | 132 | * Many of the registers in the performance monitoring unit are write-only, | 
|  | 133 | * so we need to save a copy of what we write to those registers. | 
|  | 134 | * | 
|  | 135 | * The actual data counters are read/write. However, writing to the counters | 
|  | 136 | * only takes effect if the PMU is enabled. Otherwise the value is stored in | 
|  | 137 | * a hardware latch until the next time the PMU is enabled. So we save a copy | 
|  | 138 | * of the counter values if we need to read them back while the PMU is | 
|  | 139 | * disabled. The counter_value_in_latch field is a bitmap indicating which | 
|  | 140 | * counters currently have a value waiting to be written. | 
|  | 141 | */ | 
|  | 142 |  | 
| Kevin Corry | bffd492 | 2006-10-24 18:31:21 +0200 | [diff] [blame] | 143 | struct cbe_pmd_shadow_regs { | 
|  | 144 | u32 group_control; | 
|  | 145 | u32 debug_bus_control; | 
|  | 146 | u32 trace_address; | 
|  | 147 | u32 ext_tr_timer; | 
|  | 148 | u32 pm_status; | 
|  | 149 | u32 pm_control; | 
|  | 150 | u32 pm_interval; | 
|  | 151 | u32 pm_start_stop; | 
|  | 152 | u32 pm07_control[NR_CTRS]; | 
|  | 153 |  | 
|  | 154 | u32 pm_ctr[NR_PHYS_CTRS]; | 
|  | 155 | u32 counter_value_in_latch; | 
|  | 156 | }; | 
|  | 157 |  | 
|  | 158 | extern struct cbe_pmd_shadow_regs *cbe_get_pmd_shadow_regs(struct device_node *np); | 
|  | 159 | extern struct cbe_pmd_shadow_regs *cbe_get_cpu_pmd_shadow_regs(int cpu); | 
|  | 160 |  | 
|  | 161 | /* | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 162 | * | 
|  | 163 | * IIC unit register definitions | 
|  | 164 | * | 
|  | 165 | */ | 
|  | 166 |  | 
|  | 167 | struct cbe_iic_pending_bits { | 
|  | 168 | u32 data; | 
|  | 169 | u8 flags; | 
|  | 170 | u8 class; | 
|  | 171 | u8 source; | 
|  | 172 | u8 prio; | 
|  | 173 | }; | 
|  | 174 |  | 
|  | 175 | #define CBE_IIC_IRQ_VALID	0x80 | 
|  | 176 | #define CBE_IIC_IRQ_IPI		0x40 | 
|  | 177 |  | 
|  | 178 | struct cbe_iic_thread_regs { | 
|  | 179 | struct cbe_iic_pending_bits pending; | 
|  | 180 | struct cbe_iic_pending_bits pending_destr; | 
|  | 181 | u64 generate; | 
|  | 182 | u64 prio; | 
|  | 183 | }; | 
|  | 184 |  | 
|  | 185 | struct cbe_iic_regs { | 
|  | 186 | u8	pad_0x0000_0x0400[0x0400 - 0x0000];		/* 0x0000 */ | 
|  | 187 |  | 
|  | 188 | /* IIC interrupt registers */ | 
|  | 189 | struct	cbe_iic_thread_regs thread[2];			/* 0x0400 */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 190 |  | 
|  | 191 | u64	iic_ir;						/* 0x0440 */ | 
| Kevin Corry | 0443bbd | 2006-11-20 18:45:15 +0100 | [diff] [blame] | 192 | #define CBE_IIC_IR_PRIO(x)      (((x) & 0xf) << 12) | 
|  | 193 | #define CBE_IIC_IR_DEST_NODE(x) (((x) & 0xf) << 4) | 
|  | 194 | #define CBE_IIC_IR_DEST_UNIT(x) ((x) & 0xf) | 
|  | 195 | #define CBE_IIC_IR_IOC_0        0x0 | 
|  | 196 | #define CBE_IIC_IR_IOC_1S       0xb | 
|  | 197 | #define CBE_IIC_IR_PT_0         0xe | 
|  | 198 | #define CBE_IIC_IR_PT_1         0xf | 
|  | 199 |  | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 200 | u64	iic_is;						/* 0x0448 */ | 
|  | 201 | #define CBE_IIC_IS_PMI		0x2 | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 202 |  | 
|  | 203 | u8	pad_0x0450_0x0500[0x0500 - 0x0450];		/* 0x0450 */ | 
|  | 204 |  | 
|  | 205 | /* IOC FIR */ | 
|  | 206 | u64	ioc_fir_reset;					/* 0x0500 */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 207 | u64	ioc_fir_set;					/* 0x0508 */ | 
|  | 208 | u64	ioc_checkstop_enable;				/* 0x0510 */ | 
|  | 209 | u64	ioc_fir_error_mask;				/* 0x0518 */ | 
|  | 210 | u64	ioc_syserr_enable;				/* 0x0520 */ | 
|  | 211 | u64	ioc_fir;					/* 0x0528 */ | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 212 |  | 
|  | 213 | u8	pad_0x0530_0x1000[0x1000 - 0x0530];		/* 0x0530 */ | 
|  | 214 | }; | 
|  | 215 |  | 
|  | 216 | extern struct cbe_iic_regs __iomem *cbe_get_iic_regs(struct device_node *np); | 
|  | 217 | extern struct cbe_iic_regs __iomem *cbe_get_cpu_iic_regs(int cpu); | 
|  | 218 |  | 
|  | 219 |  | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 220 | struct cbe_mic_tm_regs { | 
|  | 221 | u8	pad_0x0000_0x0040[0x0040 - 0x0000];		/* 0x0000 */ | 
|  | 222 |  | 
|  | 223 | u64	mic_ctl_cnfg2;					/* 0x0040 */ | 
|  | 224 | #define CBE_MIC_ENABLE_AUX_TRC		0x8000000000000000LL | 
|  | 225 | #define CBE_MIC_DISABLE_PWR_SAV_2	0x0200000000000000LL | 
|  | 226 | #define CBE_MIC_DISABLE_AUX_TRC_WRAP	0x0100000000000000LL | 
|  | 227 | #define CBE_MIC_ENABLE_AUX_TRC_INT	0x0080000000000000LL | 
|  | 228 |  | 
|  | 229 | u64	pad_0x0048;					/* 0x0048 */ | 
|  | 230 |  | 
|  | 231 | u64	mic_aux_trc_base;				/* 0x0050 */ | 
|  | 232 | u64	mic_aux_trc_max_addr;				/* 0x0058 */ | 
|  | 233 | u64	mic_aux_trc_cur_addr;				/* 0x0060 */ | 
|  | 234 | u64	mic_aux_trc_grf_addr;				/* 0x0068 */ | 
|  | 235 | u64	mic_aux_trc_grf_data;				/* 0x0070 */ | 
|  | 236 |  | 
|  | 237 | u64	pad_0x0078;					/* 0x0078 */ | 
|  | 238 |  | 
|  | 239 | u64	mic_ctl_cnfg_0;					/* 0x0080 */ | 
|  | 240 | #define CBE_MIC_DISABLE_PWR_SAV_0	0x8000000000000000LL | 
|  | 241 |  | 
|  | 242 | u64	pad_0x0088;					/* 0x0088 */ | 
|  | 243 |  | 
|  | 244 | u64	slow_fast_timer_0;				/* 0x0090 */ | 
|  | 245 | u64	slow_next_timer_0;				/* 0x0098 */ | 
|  | 246 |  | 
| Benjamin Herrenschmidt | d767efe | 2007-10-04 15:40:43 +1000 | [diff] [blame] | 247 | u8	pad_0x00a0_0x00f8[0x00f8 - 0x00a0];		/* 0x00a0 */ | 
|  | 248 | u64    	mic_df_ecc_address_0;				/* 0x00f8 */ | 
|  | 249 |  | 
|  | 250 | u8	pad_0x0100_0x01b8[0x01b8 - 0x0100];		/* 0x0100 */ | 
|  | 251 | u64    	mic_df_ecc_address_1;				/* 0x01b8 */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 252 |  | 
|  | 253 | u64	mic_ctl_cnfg_1;					/* 0x01c0 */ | 
|  | 254 | #define CBE_MIC_DISABLE_PWR_SAV_1	0x8000000000000000LL | 
| Benjamin Herrenschmidt | d767efe | 2007-10-04 15:40:43 +1000 | [diff] [blame] | 255 |  | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 256 | u64	pad_0x01c8;					/* 0x01c8 */ | 
|  | 257 |  | 
|  | 258 | u64	slow_fast_timer_1;				/* 0x01d0 */ | 
|  | 259 | u64	slow_next_timer_1;				/* 0x01d8 */ | 
|  | 260 |  | 
| Benjamin Herrenschmidt | d767efe | 2007-10-04 15:40:43 +1000 | [diff] [blame] | 261 | u8	pad_0x01e0_0x0208[0x0208 - 0x01e0];		/* 0x01e0 */ | 
|  | 262 | u64	mic_exc;					/* 0x0208 */ | 
|  | 263 | #define CBE_MIC_EXC_BLOCK_SCRUB		0x0800000000000000ULL | 
|  | 264 | #define CBE_MIC_EXC_FAST_SCRUB		0x0100000000000000ULL | 
|  | 265 |  | 
|  | 266 | u64	mic_mnt_cfg;					/* 0x0210 */ | 
|  | 267 | #define CBE_MIC_MNT_CFG_CHAN_0_POP	0x0002000000000000ULL | 
|  | 268 | #define CBE_MIC_MNT_CFG_CHAN_1_POP	0x0004000000000000ULL | 
|  | 269 |  | 
|  | 270 | u64	mic_df_config;					/* 0x0218 */ | 
|  | 271 | #define CBE_MIC_ECC_DISABLE_0		0x4000000000000000ULL | 
|  | 272 | #define CBE_MIC_ECC_REP_SINGLE_0	0x2000000000000000ULL | 
|  | 273 | #define CBE_MIC_ECC_DISABLE_1		0x0080000000000000ULL | 
|  | 274 | #define CBE_MIC_ECC_REP_SINGLE_1	0x0040000000000000ULL | 
|  | 275 |  | 
|  | 276 | u8	pad_0x0220_0x0230[0x0230 - 0x0220];		/* 0x0220 */ | 
|  | 277 | u64	mic_fir;					/* 0x0230 */ | 
|  | 278 | #define CBE_MIC_FIR_ECC_SINGLE_0_ERR	0x0200000000000000ULL | 
|  | 279 | #define CBE_MIC_FIR_ECC_MULTI_0_ERR	0x0100000000000000ULL | 
|  | 280 | #define CBE_MIC_FIR_ECC_SINGLE_1_ERR	0x0080000000000000ULL | 
|  | 281 | #define CBE_MIC_FIR_ECC_MULTI_1_ERR	0x0040000000000000ULL | 
|  | 282 | #define CBE_MIC_FIR_ECC_ERR_MASK	0xffff000000000000ULL | 
|  | 283 | #define CBE_MIC_FIR_ECC_SINGLE_0_CTE	0x0000020000000000ULL | 
|  | 284 | #define CBE_MIC_FIR_ECC_MULTI_0_CTE	0x0000010000000000ULL | 
|  | 285 | #define CBE_MIC_FIR_ECC_SINGLE_1_CTE	0x0000008000000000ULL | 
|  | 286 | #define CBE_MIC_FIR_ECC_MULTI_1_CTE	0x0000004000000000ULL | 
|  | 287 | #define CBE_MIC_FIR_ECC_CTE_MASK	0x0000ffff00000000ULL | 
|  | 288 | #define CBE_MIC_FIR_ECC_SINGLE_0_RESET	0x0000000002000000ULL | 
|  | 289 | #define CBE_MIC_FIR_ECC_MULTI_0_RESET	0x0000000001000000ULL | 
|  | 290 | #define CBE_MIC_FIR_ECC_SINGLE_1_RESET	0x0000000000800000ULL | 
|  | 291 | #define CBE_MIC_FIR_ECC_MULTI_1_RESET	0x0000000000400000ULL | 
|  | 292 | #define CBE_MIC_FIR_ECC_RESET_MASK	0x00000000ffff0000ULL | 
|  | 293 | #define CBE_MIC_FIR_ECC_SINGLE_0_SET	0x0000000000000200ULL | 
|  | 294 | #define CBE_MIC_FIR_ECC_MULTI_0_SET	0x0000000000000100ULL | 
|  | 295 | #define CBE_MIC_FIR_ECC_SINGLE_1_SET	0x0000000000000080ULL | 
|  | 296 | #define CBE_MIC_FIR_ECC_MULTI_1_SET	0x0000000000000040ULL | 
|  | 297 | #define CBE_MIC_FIR_ECC_SET_MASK	0x000000000000ffffULL | 
|  | 298 | u64	mic_fir_debug;					/* 0x0238 */ | 
|  | 299 |  | 
|  | 300 | u8	pad_0x0240_0x1000[0x1000 - 0x0240];		/* 0x0240 */ | 
| David Erb | 22b8c9f | 2006-10-24 18:31:20 +0200 | [diff] [blame] | 301 | }; | 
|  | 302 |  | 
|  | 303 | extern struct cbe_mic_tm_regs __iomem *cbe_get_mic_tm_regs(struct device_node *np); | 
|  | 304 | extern struct cbe_mic_tm_regs __iomem *cbe_get_cpu_mic_tm_regs(int cpu); | 
|  | 305 |  | 
| Christian Krafft | 91a69c9 | 2007-04-23 21:35:39 +0200 | [diff] [blame] | 306 | /* some utility functions to deal with SMT */ | 
|  | 307 | extern u32 cbe_get_hw_thread_id(int cpu); | 
|  | 308 | extern u32 cbe_cpu_to_node(int cpu); | 
|  | 309 | extern u32 cbe_node_to_cpu(int node); | 
|  | 310 |  | 
| Benjamin Herrenschmidt | acf7d76 | 2006-06-19 20:33:16 +0200 | [diff] [blame] | 311 | /* Init this module early */ | 
|  | 312 | extern void cbe_regs_init(void); | 
|  | 313 |  | 
|  | 314 |  | 
|  | 315 | #endif /* CBE_REGS_H */ |