162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci/* 362306a36Sopenharmony_ci * cbe_regs.h 462306a36Sopenharmony_ci * 562306a36Sopenharmony_ci * This file is intended to hold the various register definitions for CBE 662306a36Sopenharmony_ci * on-chip system devices (memory controller, IO controller, etc...) 762306a36Sopenharmony_ci * 862306a36Sopenharmony_ci * (C) Copyright IBM Corporation 2001,2006 962306a36Sopenharmony_ci * 1062306a36Sopenharmony_ci * Authors: Maximino Aguilar (maguilar@us.ibm.com) 1162306a36Sopenharmony_ci * David J. Erb (djerb@us.ibm.com) 1262306a36Sopenharmony_ci * 1362306a36Sopenharmony_ci * (c) 2006 Benjamin Herrenschmidt <benh@kernel.crashing.org>, IBM Corp. 1462306a36Sopenharmony_ci */ 1562306a36Sopenharmony_ci 1662306a36Sopenharmony_ci#ifndef CBE_REGS_H 1762306a36Sopenharmony_ci#define CBE_REGS_H 1862306a36Sopenharmony_ci 1962306a36Sopenharmony_ci#include <asm/cell-pmu.h> 2062306a36Sopenharmony_ci 2162306a36Sopenharmony_ci/* 2262306a36Sopenharmony_ci * 2362306a36Sopenharmony_ci * Some HID register definitions 2462306a36Sopenharmony_ci * 2562306a36Sopenharmony_ci */ 2662306a36Sopenharmony_ci 2762306a36Sopenharmony_ci/* CBE specific HID0 bits */ 2862306a36Sopenharmony_ci#define HID0_CBE_THERM_WAKEUP 0x0000020000000000ul 2962306a36Sopenharmony_ci#define HID0_CBE_SYSERR_WAKEUP 0x0000008000000000ul 3062306a36Sopenharmony_ci#define HID0_CBE_THERM_INT_EN 0x0000000400000000ul 3162306a36Sopenharmony_ci#define HID0_CBE_SYSERR_INT_EN 0x0000000200000000ul 3262306a36Sopenharmony_ci 3362306a36Sopenharmony_ci#define MAX_CBE 2 3462306a36Sopenharmony_ci 3562306a36Sopenharmony_ci/* 3662306a36Sopenharmony_ci * 3762306a36Sopenharmony_ci * Pervasive unit register definitions 3862306a36Sopenharmony_ci * 3962306a36Sopenharmony_ci */ 4062306a36Sopenharmony_ci 4162306a36Sopenharmony_ciunion spe_reg { 4262306a36Sopenharmony_ci u64 val; 4362306a36Sopenharmony_ci u8 spe[8]; 4462306a36Sopenharmony_ci}; 4562306a36Sopenharmony_ci 4662306a36Sopenharmony_ciunion ppe_spe_reg { 4762306a36Sopenharmony_ci u64 val; 4862306a36Sopenharmony_ci struct { 4962306a36Sopenharmony_ci u32 ppe; 5062306a36Sopenharmony_ci u32 spe; 5162306a36Sopenharmony_ci }; 5262306a36Sopenharmony_ci}; 5362306a36Sopenharmony_ci 5462306a36Sopenharmony_ci 5562306a36Sopenharmony_cistruct cbe_pmd_regs { 5662306a36Sopenharmony_ci /* Debug Bus Control */ 5762306a36Sopenharmony_ci u64 pad_0x0000; /* 0x0000 */ 5862306a36Sopenharmony_ci 5962306a36Sopenharmony_ci u64 group_control; /* 0x0008 */ 6062306a36Sopenharmony_ci 6162306a36Sopenharmony_ci u8 pad_0x0010_0x00a8 [0x00a8 - 0x0010]; /* 0x0010 */ 6262306a36Sopenharmony_ci 6362306a36Sopenharmony_ci u64 debug_bus_control; /* 0x00a8 */ 6462306a36Sopenharmony_ci 6562306a36Sopenharmony_ci u8 pad_0x00b0_0x0100 [0x0100 - 0x00b0]; /* 0x00b0 */ 6662306a36Sopenharmony_ci 6762306a36Sopenharmony_ci u64 trace_aux_data; /* 0x0100 */ 6862306a36Sopenharmony_ci u64 trace_buffer_0_63; /* 0x0108 */ 6962306a36Sopenharmony_ci u64 trace_buffer_64_127; /* 0x0110 */ 7062306a36Sopenharmony_ci u64 trace_address; /* 0x0118 */ 7162306a36Sopenharmony_ci u64 ext_tr_timer; /* 0x0120 */ 7262306a36Sopenharmony_ci 7362306a36Sopenharmony_ci u8 pad_0x0128_0x0400 [0x0400 - 0x0128]; /* 0x0128 */ 7462306a36Sopenharmony_ci 7562306a36Sopenharmony_ci /* Performance Monitor */ 7662306a36Sopenharmony_ci u64 pm_status; /* 0x0400 */ 7762306a36Sopenharmony_ci u64 pm_control; /* 0x0408 */ 7862306a36Sopenharmony_ci u64 pm_interval; /* 0x0410 */ 7962306a36Sopenharmony_ci u64 pm_ctr[4]; /* 0x0418 */ 8062306a36Sopenharmony_ci u64 pm_start_stop; /* 0x0438 */ 8162306a36Sopenharmony_ci u64 pm07_control[8]; /* 0x0440 */ 8262306a36Sopenharmony_ci 8362306a36Sopenharmony_ci u8 pad_0x0480_0x0800 [0x0800 - 0x0480]; /* 0x0480 */ 8462306a36Sopenharmony_ci 8562306a36Sopenharmony_ci /* Thermal Sensor Registers */ 8662306a36Sopenharmony_ci union spe_reg ts_ctsr1; /* 0x0800 */ 8762306a36Sopenharmony_ci u64 ts_ctsr2; /* 0x0808 */ 8862306a36Sopenharmony_ci union spe_reg ts_mtsr1; /* 0x0810 */ 8962306a36Sopenharmony_ci u64 ts_mtsr2; /* 0x0818 */ 9062306a36Sopenharmony_ci union spe_reg ts_itr1; /* 0x0820 */ 9162306a36Sopenharmony_ci u64 ts_itr2; /* 0x0828 */ 9262306a36Sopenharmony_ci u64 ts_gitr; /* 0x0830 */ 9362306a36Sopenharmony_ci u64 ts_isr; /* 0x0838 */ 9462306a36Sopenharmony_ci u64 ts_imr; /* 0x0840 */ 9562306a36Sopenharmony_ci union spe_reg tm_cr1; /* 0x0848 */ 9662306a36Sopenharmony_ci u64 tm_cr2; /* 0x0850 */ 9762306a36Sopenharmony_ci u64 tm_simr; /* 0x0858 */ 9862306a36Sopenharmony_ci union ppe_spe_reg tm_tpr; /* 0x0860 */ 9962306a36Sopenharmony_ci union spe_reg tm_str1; /* 0x0868 */ 10062306a36Sopenharmony_ci u64 tm_str2; /* 0x0870 */ 10162306a36Sopenharmony_ci union ppe_spe_reg tm_tsr; /* 0x0878 */ 10262306a36Sopenharmony_ci 10362306a36Sopenharmony_ci /* Power Management */ 10462306a36Sopenharmony_ci u64 pmcr; /* 0x0880 */ 10562306a36Sopenharmony_ci#define CBE_PMD_PAUSE_ZERO_CONTROL 0x10000 10662306a36Sopenharmony_ci u64 pmsr; /* 0x0888 */ 10762306a36Sopenharmony_ci 10862306a36Sopenharmony_ci /* Time Base Register */ 10962306a36Sopenharmony_ci u64 tbr; /* 0x0890 */ 11062306a36Sopenharmony_ci 11162306a36Sopenharmony_ci u8 pad_0x0898_0x0c00 [0x0c00 - 0x0898]; /* 0x0898 */ 11262306a36Sopenharmony_ci 11362306a36Sopenharmony_ci /* Fault Isolation Registers */ 11462306a36Sopenharmony_ci u64 checkstop_fir; /* 0x0c00 */ 11562306a36Sopenharmony_ci u64 recoverable_fir; /* 0x0c08 */ 11662306a36Sopenharmony_ci u64 spec_att_mchk_fir; /* 0x0c10 */ 11762306a36Sopenharmony_ci u32 fir_mode_reg; /* 0x0c18 */ 11862306a36Sopenharmony_ci u8 pad_0x0c1c_0x0c20 [4]; /* 0x0c1c */ 11962306a36Sopenharmony_ci#define CBE_PMD_FIR_MODE_M8 0x00800 12062306a36Sopenharmony_ci u64 fir_enable_mask; /* 0x0c20 */ 12162306a36Sopenharmony_ci 12262306a36Sopenharmony_ci u8 pad_0x0c28_0x0ca8 [0x0ca8 - 0x0c28]; /* 0x0c28 */ 12362306a36Sopenharmony_ci u64 ras_esc_0; /* 0x0ca8 */ 12462306a36Sopenharmony_ci u8 pad_0x0cb0_0x1000 [0x1000 - 0x0cb0]; /* 0x0cb0 */ 12562306a36Sopenharmony_ci}; 12662306a36Sopenharmony_ci 12762306a36Sopenharmony_ciextern struct cbe_pmd_regs __iomem *cbe_get_pmd_regs(struct device_node *np); 12862306a36Sopenharmony_ciextern struct cbe_pmd_regs __iomem *cbe_get_cpu_pmd_regs(int cpu); 12962306a36Sopenharmony_ci 13062306a36Sopenharmony_ci/* 13162306a36Sopenharmony_ci * PMU shadow registers 13262306a36Sopenharmony_ci * 13362306a36Sopenharmony_ci * Many of the registers in the performance monitoring unit are write-only, 13462306a36Sopenharmony_ci * so we need to save a copy of what we write to those registers. 13562306a36Sopenharmony_ci * 13662306a36Sopenharmony_ci * The actual data counters are read/write. However, writing to the counters 13762306a36Sopenharmony_ci * only takes effect if the PMU is enabled. Otherwise the value is stored in 13862306a36Sopenharmony_ci * a hardware latch until the next time the PMU is enabled. So we save a copy 13962306a36Sopenharmony_ci * of the counter values if we need to read them back while the PMU is 14062306a36Sopenharmony_ci * disabled. The counter_value_in_latch field is a bitmap indicating which 14162306a36Sopenharmony_ci * counters currently have a value waiting to be written. 14262306a36Sopenharmony_ci */ 14362306a36Sopenharmony_ci 14462306a36Sopenharmony_cistruct cbe_pmd_shadow_regs { 14562306a36Sopenharmony_ci u32 group_control; 14662306a36Sopenharmony_ci u32 debug_bus_control; 14762306a36Sopenharmony_ci u32 trace_address; 14862306a36Sopenharmony_ci u32 ext_tr_timer; 14962306a36Sopenharmony_ci u32 pm_status; 15062306a36Sopenharmony_ci u32 pm_control; 15162306a36Sopenharmony_ci u32 pm_interval; 15262306a36Sopenharmony_ci u32 pm_start_stop; 15362306a36Sopenharmony_ci u32 pm07_control[NR_CTRS]; 15462306a36Sopenharmony_ci 15562306a36Sopenharmony_ci u32 pm_ctr[NR_PHYS_CTRS]; 15662306a36Sopenharmony_ci u32 counter_value_in_latch; 15762306a36Sopenharmony_ci}; 15862306a36Sopenharmony_ci 15962306a36Sopenharmony_ciextern struct cbe_pmd_shadow_regs *cbe_get_pmd_shadow_regs(struct device_node *np); 16062306a36Sopenharmony_ciextern struct cbe_pmd_shadow_regs *cbe_get_cpu_pmd_shadow_regs(int cpu); 16162306a36Sopenharmony_ci 16262306a36Sopenharmony_ci/* 16362306a36Sopenharmony_ci * 16462306a36Sopenharmony_ci * IIC unit register definitions 16562306a36Sopenharmony_ci * 16662306a36Sopenharmony_ci */ 16762306a36Sopenharmony_ci 16862306a36Sopenharmony_cistruct cbe_iic_pending_bits { 16962306a36Sopenharmony_ci u32 data; 17062306a36Sopenharmony_ci u8 flags; 17162306a36Sopenharmony_ci u8 class; 17262306a36Sopenharmony_ci u8 source; 17362306a36Sopenharmony_ci u8 prio; 17462306a36Sopenharmony_ci}; 17562306a36Sopenharmony_ci 17662306a36Sopenharmony_ci#define CBE_IIC_IRQ_VALID 0x80 17762306a36Sopenharmony_ci#define CBE_IIC_IRQ_IPI 0x40 17862306a36Sopenharmony_ci 17962306a36Sopenharmony_cistruct cbe_iic_thread_regs { 18062306a36Sopenharmony_ci struct cbe_iic_pending_bits pending; 18162306a36Sopenharmony_ci struct cbe_iic_pending_bits pending_destr; 18262306a36Sopenharmony_ci u64 generate; 18362306a36Sopenharmony_ci u64 prio; 18462306a36Sopenharmony_ci}; 18562306a36Sopenharmony_ci 18662306a36Sopenharmony_cistruct cbe_iic_regs { 18762306a36Sopenharmony_ci u8 pad_0x0000_0x0400[0x0400 - 0x0000]; /* 0x0000 */ 18862306a36Sopenharmony_ci 18962306a36Sopenharmony_ci /* IIC interrupt registers */ 19062306a36Sopenharmony_ci struct cbe_iic_thread_regs thread[2]; /* 0x0400 */ 19162306a36Sopenharmony_ci 19262306a36Sopenharmony_ci u64 iic_ir; /* 0x0440 */ 19362306a36Sopenharmony_ci#define CBE_IIC_IR_PRIO(x) (((x) & 0xf) << 12) 19462306a36Sopenharmony_ci#define CBE_IIC_IR_DEST_NODE(x) (((x) & 0xf) << 4) 19562306a36Sopenharmony_ci#define CBE_IIC_IR_DEST_UNIT(x) ((x) & 0xf) 19662306a36Sopenharmony_ci#define CBE_IIC_IR_IOC_0 0x0 19762306a36Sopenharmony_ci#define CBE_IIC_IR_IOC_1S 0xb 19862306a36Sopenharmony_ci#define CBE_IIC_IR_PT_0 0xe 19962306a36Sopenharmony_ci#define CBE_IIC_IR_PT_1 0xf 20062306a36Sopenharmony_ci 20162306a36Sopenharmony_ci u64 iic_is; /* 0x0448 */ 20262306a36Sopenharmony_ci#define CBE_IIC_IS_PMI 0x2 20362306a36Sopenharmony_ci 20462306a36Sopenharmony_ci u8 pad_0x0450_0x0500[0x0500 - 0x0450]; /* 0x0450 */ 20562306a36Sopenharmony_ci 20662306a36Sopenharmony_ci /* IOC FIR */ 20762306a36Sopenharmony_ci u64 ioc_fir_reset; /* 0x0500 */ 20862306a36Sopenharmony_ci u64 ioc_fir_set; /* 0x0508 */ 20962306a36Sopenharmony_ci u64 ioc_checkstop_enable; /* 0x0510 */ 21062306a36Sopenharmony_ci u64 ioc_fir_error_mask; /* 0x0518 */ 21162306a36Sopenharmony_ci u64 ioc_syserr_enable; /* 0x0520 */ 21262306a36Sopenharmony_ci u64 ioc_fir; /* 0x0528 */ 21362306a36Sopenharmony_ci 21462306a36Sopenharmony_ci u8 pad_0x0530_0x1000[0x1000 - 0x0530]; /* 0x0530 */ 21562306a36Sopenharmony_ci}; 21662306a36Sopenharmony_ci 21762306a36Sopenharmony_ciextern struct cbe_iic_regs __iomem *cbe_get_iic_regs(struct device_node *np); 21862306a36Sopenharmony_ciextern struct cbe_iic_regs __iomem *cbe_get_cpu_iic_regs(int cpu); 21962306a36Sopenharmony_ci 22062306a36Sopenharmony_ci 22162306a36Sopenharmony_cistruct cbe_mic_tm_regs { 22262306a36Sopenharmony_ci u8 pad_0x0000_0x0040[0x0040 - 0x0000]; /* 0x0000 */ 22362306a36Sopenharmony_ci 22462306a36Sopenharmony_ci u64 mic_ctl_cnfg2; /* 0x0040 */ 22562306a36Sopenharmony_ci#define CBE_MIC_ENABLE_AUX_TRC 0x8000000000000000LL 22662306a36Sopenharmony_ci#define CBE_MIC_DISABLE_PWR_SAV_2 0x0200000000000000LL 22762306a36Sopenharmony_ci#define CBE_MIC_DISABLE_AUX_TRC_WRAP 0x0100000000000000LL 22862306a36Sopenharmony_ci#define CBE_MIC_ENABLE_AUX_TRC_INT 0x0080000000000000LL 22962306a36Sopenharmony_ci 23062306a36Sopenharmony_ci u64 pad_0x0048; /* 0x0048 */ 23162306a36Sopenharmony_ci 23262306a36Sopenharmony_ci u64 mic_aux_trc_base; /* 0x0050 */ 23362306a36Sopenharmony_ci u64 mic_aux_trc_max_addr; /* 0x0058 */ 23462306a36Sopenharmony_ci u64 mic_aux_trc_cur_addr; /* 0x0060 */ 23562306a36Sopenharmony_ci u64 mic_aux_trc_grf_addr; /* 0x0068 */ 23662306a36Sopenharmony_ci u64 mic_aux_trc_grf_data; /* 0x0070 */ 23762306a36Sopenharmony_ci 23862306a36Sopenharmony_ci u64 pad_0x0078; /* 0x0078 */ 23962306a36Sopenharmony_ci 24062306a36Sopenharmony_ci u64 mic_ctl_cnfg_0; /* 0x0080 */ 24162306a36Sopenharmony_ci#define CBE_MIC_DISABLE_PWR_SAV_0 0x8000000000000000LL 24262306a36Sopenharmony_ci 24362306a36Sopenharmony_ci u64 pad_0x0088; /* 0x0088 */ 24462306a36Sopenharmony_ci 24562306a36Sopenharmony_ci u64 slow_fast_timer_0; /* 0x0090 */ 24662306a36Sopenharmony_ci u64 slow_next_timer_0; /* 0x0098 */ 24762306a36Sopenharmony_ci 24862306a36Sopenharmony_ci u8 pad_0x00a0_0x00f8[0x00f8 - 0x00a0]; /* 0x00a0 */ 24962306a36Sopenharmony_ci u64 mic_df_ecc_address_0; /* 0x00f8 */ 25062306a36Sopenharmony_ci 25162306a36Sopenharmony_ci u8 pad_0x0100_0x01b8[0x01b8 - 0x0100]; /* 0x0100 */ 25262306a36Sopenharmony_ci u64 mic_df_ecc_address_1; /* 0x01b8 */ 25362306a36Sopenharmony_ci 25462306a36Sopenharmony_ci u64 mic_ctl_cnfg_1; /* 0x01c0 */ 25562306a36Sopenharmony_ci#define CBE_MIC_DISABLE_PWR_SAV_1 0x8000000000000000LL 25662306a36Sopenharmony_ci 25762306a36Sopenharmony_ci u64 pad_0x01c8; /* 0x01c8 */ 25862306a36Sopenharmony_ci 25962306a36Sopenharmony_ci u64 slow_fast_timer_1; /* 0x01d0 */ 26062306a36Sopenharmony_ci u64 slow_next_timer_1; /* 0x01d8 */ 26162306a36Sopenharmony_ci 26262306a36Sopenharmony_ci u8 pad_0x01e0_0x0208[0x0208 - 0x01e0]; /* 0x01e0 */ 26362306a36Sopenharmony_ci u64 mic_exc; /* 0x0208 */ 26462306a36Sopenharmony_ci#define CBE_MIC_EXC_BLOCK_SCRUB 0x0800000000000000ULL 26562306a36Sopenharmony_ci#define CBE_MIC_EXC_FAST_SCRUB 0x0100000000000000ULL 26662306a36Sopenharmony_ci 26762306a36Sopenharmony_ci u64 mic_mnt_cfg; /* 0x0210 */ 26862306a36Sopenharmony_ci#define CBE_MIC_MNT_CFG_CHAN_0_POP 0x0002000000000000ULL 26962306a36Sopenharmony_ci#define CBE_MIC_MNT_CFG_CHAN_1_POP 0x0004000000000000ULL 27062306a36Sopenharmony_ci 27162306a36Sopenharmony_ci u64 mic_df_config; /* 0x0218 */ 27262306a36Sopenharmony_ci#define CBE_MIC_ECC_DISABLE_0 0x4000000000000000ULL 27362306a36Sopenharmony_ci#define CBE_MIC_ECC_REP_SINGLE_0 0x2000000000000000ULL 27462306a36Sopenharmony_ci#define CBE_MIC_ECC_DISABLE_1 0x0080000000000000ULL 27562306a36Sopenharmony_ci#define CBE_MIC_ECC_REP_SINGLE_1 0x0040000000000000ULL 27662306a36Sopenharmony_ci 27762306a36Sopenharmony_ci u8 pad_0x0220_0x0230[0x0230 - 0x0220]; /* 0x0220 */ 27862306a36Sopenharmony_ci u64 mic_fir; /* 0x0230 */ 27962306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_0_ERR 0x0200000000000000ULL 28062306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_0_ERR 0x0100000000000000ULL 28162306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_1_ERR 0x0080000000000000ULL 28262306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_1_ERR 0x0040000000000000ULL 28362306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_ERR_MASK 0xffff000000000000ULL 28462306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_0_CTE 0x0000020000000000ULL 28562306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_0_CTE 0x0000010000000000ULL 28662306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_1_CTE 0x0000008000000000ULL 28762306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_1_CTE 0x0000004000000000ULL 28862306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_CTE_MASK 0x0000ffff00000000ULL 28962306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_0_RESET 0x0000000002000000ULL 29062306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_0_RESET 0x0000000001000000ULL 29162306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_1_RESET 0x0000000000800000ULL 29262306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_1_RESET 0x0000000000400000ULL 29362306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_RESET_MASK 0x00000000ffff0000ULL 29462306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_0_SET 0x0000000000000200ULL 29562306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_0_SET 0x0000000000000100ULL 29662306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SINGLE_1_SET 0x0000000000000080ULL 29762306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_MULTI_1_SET 0x0000000000000040ULL 29862306a36Sopenharmony_ci#define CBE_MIC_FIR_ECC_SET_MASK 0x000000000000ffffULL 29962306a36Sopenharmony_ci u64 mic_fir_debug; /* 0x0238 */ 30062306a36Sopenharmony_ci 30162306a36Sopenharmony_ci u8 pad_0x0240_0x1000[0x1000 - 0x0240]; /* 0x0240 */ 30262306a36Sopenharmony_ci}; 30362306a36Sopenharmony_ci 30462306a36Sopenharmony_ciextern struct cbe_mic_tm_regs __iomem *cbe_get_mic_tm_regs(struct device_node *np); 30562306a36Sopenharmony_ciextern struct cbe_mic_tm_regs __iomem *cbe_get_cpu_mic_tm_regs(int cpu); 30662306a36Sopenharmony_ci 30762306a36Sopenharmony_ci 30862306a36Sopenharmony_ci/* Cell page table entries */ 30962306a36Sopenharmony_ci#define CBE_IOPTE_PP_W 0x8000000000000000ul /* protection: write */ 31062306a36Sopenharmony_ci#define CBE_IOPTE_PP_R 0x4000000000000000ul /* protection: read */ 31162306a36Sopenharmony_ci#define CBE_IOPTE_M 0x2000000000000000ul /* coherency required */ 31262306a36Sopenharmony_ci#define CBE_IOPTE_SO_R 0x1000000000000000ul /* ordering: writes */ 31362306a36Sopenharmony_ci#define CBE_IOPTE_SO_RW 0x1800000000000000ul /* ordering: r & w */ 31462306a36Sopenharmony_ci#define CBE_IOPTE_RPN_Mask 0x07fffffffffff000ul /* RPN */ 31562306a36Sopenharmony_ci#define CBE_IOPTE_H 0x0000000000000800ul /* cache hint */ 31662306a36Sopenharmony_ci#define CBE_IOPTE_IOID_Mask 0x00000000000007fful /* ioid */ 31762306a36Sopenharmony_ci 31862306a36Sopenharmony_ci/* some utility functions to deal with SMT */ 31962306a36Sopenharmony_ciextern u32 cbe_get_hw_thread_id(int cpu); 32062306a36Sopenharmony_ciextern u32 cbe_cpu_to_node(int cpu); 32162306a36Sopenharmony_ciextern u32 cbe_node_to_cpu(int node); 32262306a36Sopenharmony_ci 32362306a36Sopenharmony_ci/* Init this module early */ 32462306a36Sopenharmony_ciextern void cbe_regs_init(void); 32562306a36Sopenharmony_ci 32662306a36Sopenharmony_ci 32762306a36Sopenharmony_ci#endif /* CBE_REGS_H */ 328