Merge branch 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus
Pull MIPS fixes from Ralf Baechle: - Properly setup irq handling for ATH79 platforms - Fix bootmem mapstart calculation for contiguous maps - Handle little endian and older CPUs correct in BPF - Fix console for Fulong 2E systems - Handle FTLB correctly on R6 CPUs - Fixes for CM, GIC and MAAR support code * 'upstream' of git://git.linux-mips.org/pub/scm/ralf/upstream-linus: MIPS: Initialise MAARs on secondary CPUs MIPS: print MAAR configuration during boot MIPS: mm: compile maar_init unconditionally irqchip: mips-gic: Fix pending & mask reads for MIPS64 with 32b GIC. irqchip: mips-gic: Convert CPU numbers to VP IDs. MIPS: CM: Provide a function to map from CPU to VP ID. MIPS: Fix FTLB detection for R6 MIPS: cpu-features: Add cpu_has_ftlb MIPS: ATH79: Add irq chip ar7240-misc-intc MIPS: ATH79: Set missing irq ack handler for ar7100-misc-intc irq chip MIPS: BPF: Fix build on pre-R2 little endian CPUs MIPS: BPF: Avoid unreachable code on little endian MIPS: bootmem: Fix mapstart calculation for contiguous maps MIPS: Fix console output for Fulong2e system
This commit is contained in:
@@ -20,6 +20,9 @@
|
||||
#ifndef cpu_has_tlb
|
||||
#define cpu_has_tlb (cpu_data[0].options & MIPS_CPU_TLB)
|
||||
#endif
|
||||
#ifndef cpu_has_ftlb
|
||||
#define cpu_has_ftlb (cpu_data[0].options & MIPS_CPU_FTLB)
|
||||
#endif
|
||||
#ifndef cpu_has_tlbinv
|
||||
#define cpu_has_tlbinv (cpu_data[0].options & MIPS_CPU_TLBINV)
|
||||
#endif
|
||||
|
||||
@@ -385,6 +385,7 @@ enum cpu_type_enum {
|
||||
#define MIPS_CPU_CDMM 0x4000000000ull /* CPU has Common Device Memory Map */
|
||||
#define MIPS_CPU_BP_GHIST 0x8000000000ull /* R12K+ Branch Prediction Global History */
|
||||
#define MIPS_CPU_SP 0x10000000000ull /* Small (1KB) page support */
|
||||
#define MIPS_CPU_FTLB 0x20000000000ull /* CPU has Fixed-page-size TLB */
|
||||
|
||||
/*
|
||||
* CPU ASE encodings
|
||||
|
||||
@@ -65,6 +65,15 @@ static inline void write_maar_pair(unsigned idx, phys_addr_t lower,
|
||||
back_to_back_c0_hazard();
|
||||
}
|
||||
|
||||
/**
|
||||
* maar_init() - initialise MAARs
|
||||
*
|
||||
* Performs initialisation of MAARs for the current CPU, making use of the
|
||||
* platforms implementation of platform_maar_init where necessary and
|
||||
* duplicating the setup it provides on secondary CPUs.
|
||||
*/
|
||||
extern void maar_init(void);
|
||||
|
||||
/**
|
||||
* struct maar_config - MAAR configuration data
|
||||
* @lower: The lowest address that the MAAR pair will affect. Must be
|
||||
|
||||
@@ -194,6 +194,7 @@ BUILD_CM_RW(reg3_mask, MIPS_CM_GCB_OFS + 0xc8)
|
||||
BUILD_CM_R_(gic_status, MIPS_CM_GCB_OFS + 0xd0)
|
||||
BUILD_CM_R_(cpc_status, MIPS_CM_GCB_OFS + 0xf0)
|
||||
BUILD_CM_RW(l2_config, MIPS_CM_GCB_OFS + 0x130)
|
||||
BUILD_CM_RW(sys_config2, MIPS_CM_GCB_OFS + 0x150)
|
||||
|
||||
/* Core Local & Core Other register accessor functions */
|
||||
BUILD_CM_Cx_RW(reset_release, 0x00)
|
||||
@@ -316,6 +317,10 @@ BUILD_CM_Cx_R_(tcid_8_priority, 0x80)
|
||||
#define CM_GCR_L2_CONFIG_ASSOC_SHF 0
|
||||
#define CM_GCR_L2_CONFIG_ASSOC_MSK (_ULCAST_(0xff) << 0)
|
||||
|
||||
/* GCR_SYS_CONFIG2 register fields */
|
||||
#define CM_GCR_SYS_CONFIG2_MAXVPW_SHF 0
|
||||
#define CM_GCR_SYS_CONFIG2_MAXVPW_MSK (_ULCAST_(0xf) << 0)
|
||||
|
||||
/* GCR_Cx_COHERENCE register fields */
|
||||
#define CM_GCR_Cx_COHERENCE_COHDOMAINEN_SHF 0
|
||||
#define CM_GCR_Cx_COHERENCE_COHDOMAINEN_MSK (_ULCAST_(0xff) << 0)
|
||||
@@ -405,4 +410,38 @@ static inline int mips_cm_revision(void)
|
||||
return read_gcr_rev();
|
||||
}
|
||||
|
||||
/**
|
||||
* mips_cm_max_vp_width() - return the width in bits of VP indices
|
||||
*
|
||||
* Return: the width, in bits, of VP indices in fields that combine core & VP
|
||||
* indices.
|
||||
*/
|
||||
static inline unsigned int mips_cm_max_vp_width(void)
|
||||
{
|
||||
extern int smp_num_siblings;
|
||||
|
||||
if (mips_cm_revision() >= CM_REV_CM3)
|
||||
return read_gcr_sys_config2() & CM_GCR_SYS_CONFIG2_MAXVPW_MSK;
|
||||
|
||||
return smp_num_siblings;
|
||||
}
|
||||
|
||||
/**
|
||||
* mips_cm_vp_id() - calculate the hardware VP ID for a CPU
|
||||
* @cpu: the CPU whose VP ID to calculate
|
||||
*
|
||||
* Hardware such as the GIC uses identifiers for VPs which may not match the
|
||||
* CPU numbers used by Linux. This function calculates the hardware VP
|
||||
* identifier corresponding to a given CPU.
|
||||
*
|
||||
* Return: the VP ID for the CPU.
|
||||
*/
|
||||
static inline unsigned int mips_cm_vp_id(unsigned int cpu)
|
||||
{
|
||||
unsigned int core = cpu_data[cpu].core;
|
||||
unsigned int vp = cpu_vpe_id(&cpu_data[cpu]);
|
||||
|
||||
return (core * mips_cm_max_vp_width()) + vp;
|
||||
}
|
||||
|
||||
#endif /* __MIPS_ASM_MIPS_CM_H__ */
|
||||
|
||||
@@ -487,6 +487,8 @@
|
||||
|
||||
/* Bits specific to the MIPS32/64 PRA. */
|
||||
#define MIPS_CONF_MT (_ULCAST_(7) << 7)
|
||||
#define MIPS_CONF_MT_TLB (_ULCAST_(1) << 7)
|
||||
#define MIPS_CONF_MT_FTLB (_ULCAST_(4) << 7)
|
||||
#define MIPS_CONF_AR (_ULCAST_(7) << 10)
|
||||
#define MIPS_CONF_AT (_ULCAST_(3) << 13)
|
||||
#define MIPS_CONF_M (_ULCAST_(1) << 31)
|
||||
|
||||
Reference in New Issue
Block a user