| 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 */ |