Merge tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux
Pull arm64 updates from Catalin Marinas:
"No major architecture features this time around, just some new HWCAP
definitions, support for the Ampere SoC PMUs and a few fixes/cleanups.
The bulk of the changes is reworking of the CPU capability checking
code (cpus_have_cap() etc).
- Major refactoring of the CPU capability detection logic resulting
in the removal of the cpus_have_const_cap() function and migrating
the code to "alternative" branches where possible
- Backtrace/kgdb: use IPIs and pseudo-NMI
- Perf and PMU:
- Add support for Ampere SoC PMUs
- Multi-DTC improvements for larger CMN configurations with
multiple Debug & Trace Controllers
- Rework the Arm CoreSight PMU driver to allow separate
registration of vendor backend modules
- Fixes: add missing MODULE_DEVICE_TABLE to the amlogic perf
driver; use device_get_match_data() in the xgene driver; fix
NULL pointer dereference in the hisi driver caused by calling
cpuhp_state_remove_instance(); use-after-free in the hisi driver
- HWCAP updates:
- FEAT_SVE_B16B16 (BFloat16)
- FEAT_LRCPC3 (release consistency model)
- FEAT_LSE128 (128-bit atomic instructions)
- SVE: remove a couple of pseudo registers from the cpufeature code.
There is logic in place already to detect mismatched SVE features
- Miscellaneous:
- Reduce the default swiotlb size (currently 64MB) if no ZONE_DMA
bouncing is needed. The buffer is still required for small
kmalloc() buffers
- Fix module PLT counting with !RANDOMIZE_BASE
- Restrict CPU_BIG_ENDIAN to LLVM IAS 15.x or newer move
synchronisation code out of the set_ptes() loop
- More compact cpufeature displaying enabled cores
- Kselftest updates for the new CPU features"
* tag 'arm64-upstream' of git://git.kernel.org/pub/scm/linux/kernel/git/arm64/linux: (83 commits)
arm64: Restrict CPU_BIG_ENDIAN to GNU as or LLVM IAS 15.x or newer
arm64: module: Fix PLT counting when CONFIG_RANDOMIZE_BASE=n
arm64, irqchip/gic-v3, ACPI: Move MADT GICC enabled check into a helper
perf: hisi: Fix use-after-free when register pmu fails
drivers/perf: hisi_pcie: Initialize event->cpu only on success
drivers/perf: hisi_pcie: Check the type first in pmu::event_init()
arm64: cpufeature: Change DBM to display enabled cores
arm64: cpufeature: Display the set of cores with a feature
perf/arm-cmn: Enable per-DTC counter allocation
perf/arm-cmn: Rework DTC counters (again)
perf/arm-cmn: Fix DTC domain detection
drivers: perf: arm_pmuv3: Drop some unused arguments from armv8_pmu_init()
drivers: perf: arm_pmuv3: Read PMMIR_EL1 unconditionally
drivers/perf: hisi: use cpuhp_state_remove_instance_nocalls() for hisi_hns3_pmu uninit process
clocksource/drivers/arm_arch_timer: limit XGene-1 workaround
arm64: Remove system_uses_lse_atomics()
arm64: Mark the 'addr' argument to set_ptes() and __set_pte_at() as unused
drivers/perf: xgene: Use device_get_match_data()
perf/amlogic: add missing MODULE_DEVICE_TABLE
arm64/mm: Hoist synchronization out of set_ptes() loop
...
This commit is contained in:
@@ -836,8 +836,9 @@ static u64 __arch_timer_check_delta(void)
|
||||
* Note that TVAL is signed, thus has only 31 of its
|
||||
* 32 bits to express magnitude.
|
||||
*/
|
||||
MIDR_ALL_VERSIONS(MIDR_CPU_MODEL(ARM_CPU_IMP_APM,
|
||||
APM_CPU_PART_POTENZA)),
|
||||
MIDR_REV_RANGE(MIDR_CPU_MODEL(ARM_CPU_IMP_APM,
|
||||
APM_CPU_PART_XGENE),
|
||||
APM_CPU_VAR_POTENZA, 0x0, 0xf),
|
||||
{},
|
||||
};
|
||||
|
||||
@@ -917,7 +918,7 @@ static void arch_timer_evtstrm_enable(unsigned int divider)
|
||||
|
||||
#ifdef CONFIG_ARM64
|
||||
/* ECV is likely to require a large divider. Use the EVNTIS flag. */
|
||||
if (cpus_have_const_cap(ARM64_HAS_ECV) && divider > 15) {
|
||||
if (cpus_have_final_cap(ARM64_HAS_ECV) && divider > 15) {
|
||||
cntkctl |= ARCH_TIMER_EVT_INTERVAL_SCALE;
|
||||
divider -= 8;
|
||||
}
|
||||
@@ -955,6 +956,30 @@ static void arch_timer_configure_evtstream(void)
|
||||
arch_timer_evtstrm_enable(max(0, lsb));
|
||||
}
|
||||
|
||||
static int arch_timer_evtstrm_starting_cpu(unsigned int cpu)
|
||||
{
|
||||
arch_timer_configure_evtstream();
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int arch_timer_evtstrm_dying_cpu(unsigned int cpu)
|
||||
{
|
||||
cpumask_clear_cpu(smp_processor_id(), &evtstrm_available);
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int __init arch_timer_evtstrm_register(void)
|
||||
{
|
||||
if (!arch_timer_evt || !evtstrm_enable)
|
||||
return 0;
|
||||
|
||||
return cpuhp_setup_state(CPUHP_AP_ARM_ARCH_TIMER_EVTSTRM_STARTING,
|
||||
"clockevents/arm/arch_timer_evtstrm:starting",
|
||||
arch_timer_evtstrm_starting_cpu,
|
||||
arch_timer_evtstrm_dying_cpu);
|
||||
}
|
||||
core_initcall(arch_timer_evtstrm_register);
|
||||
|
||||
static void arch_counter_set_user_access(void)
|
||||
{
|
||||
u32 cntkctl = arch_timer_get_cntkctl();
|
||||
@@ -1016,8 +1041,6 @@ static int arch_timer_starting_cpu(unsigned int cpu)
|
||||
}
|
||||
|
||||
arch_counter_set_user_access();
|
||||
if (evtstrm_enable)
|
||||
arch_timer_configure_evtstream();
|
||||
|
||||
return 0;
|
||||
}
|
||||
@@ -1164,8 +1187,6 @@ static int arch_timer_dying_cpu(unsigned int cpu)
|
||||
{
|
||||
struct clock_event_device *clk = this_cpu_ptr(arch_timer_evt);
|
||||
|
||||
cpumask_clear_cpu(smp_processor_id(), &evtstrm_available);
|
||||
|
||||
arch_timer_stop(clk);
|
||||
return 0;
|
||||
}
|
||||
@@ -1279,6 +1300,7 @@ out_unreg_notify:
|
||||
|
||||
out_free:
|
||||
free_percpu(arch_timer_evt);
|
||||
arch_timer_evt = NULL;
|
||||
out:
|
||||
return err;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user