From mboxrd@z Thu Jan 1 00:00:00 1970 From: Jeremy Linton Subject: Re: [PATCH V10 2/6] arm: arm64: Add routine to determine cpuid of other cpus Date: Tue, 29 Nov 2016 12:25:43 -0600 Message-ID: <67b08fa0-cff4-4d74-b72c-fa66e927f201@arm.com> References: <1478734793-6341-1-git-send-email-jeremy.linton@arm.com> <1478734793-6341-3-git-send-email-jeremy.linton@arm.com> <20161129103112.GC30283@arm.com> <20161129104617.GV14217@n2100.armlinux.org.uk> Mime-Version: 1.0 Content-Type: text/plain; charset=windows-1252; format=flowed Content-Transfer-Encoding: 7bit Return-path: Received: from foss.arm.com ([217.140.101.70]:54456 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S934029AbcK2SZr (ORCPT ); Tue, 29 Nov 2016 13:25:47 -0500 In-Reply-To: <20161129104617.GV14217@n2100.armlinux.org.uk> Sender: linux-acpi-owner@vger.kernel.org List-Id: linux-acpi@vger.kernel.org To: Russell King - ARM Linux , Will Deacon Cc: linux-arm-kernel@lists.infradead.org, mark.rutland@arm.com, steve.capper@arm.com, mlangsdorf@redhat.com, punit.agrawal@arm.com, linux-acpi@vger.kernel.org, msalter@redhat.com Hi, On 11/29/2016 04:46 AM, Russell King - ARM Linux wrote: > On Tue, Nov 29, 2016 at 10:31:12AM +0000, Will Deacon wrote: >> [adding Russell] >> >> On Wed, Nov 09, 2016 at 05:39:49PM -0600, Jeremy Linton wrote: >>> It is helpful if we can read the cpuid/midr of other CPUs >>> in the system independent of arm/arm64. >>> >>> Signed-off-by: Jeremy Linton >>> --- >>> arch/arm/include/asm/cputype.h | 2 ++ >>> arch/arm64/include/asm/cputype.h | 3 +++ >>> 2 files changed, 5 insertions(+) >>> >>> diff --git a/arch/arm/include/asm/cputype.h b/arch/arm/include/asm/cputype.h >>> index 522b5fe..31fb273 100644 >>> --- a/arch/arm/include/asm/cputype.h >>> +++ b/arch/arm/include/asm/cputype.h >>> @@ -235,6 +235,8 @@ static inline unsigned int __attribute_const__ read_cpuid_mpidr(void) >>> #define cpu_is_sa1100() (read_cpuid_part() == ARM_CPU_PART_SA1100) >>> #define cpu_is_sa1110() (read_cpuid_part() == ARM_CPU_PART_SA1110) >>> >>> +#define read_specific_cpuid(cpu_num) per_cpu_ptr(&cpu_data, cpu_num)->cpuid >>> + >>> /* >>> * Intel's XScale3 core supports some v6 features (supersections, L2) >>> * but advertises itself as v5 as it does not support the v6 ISA. For >> >> Russell -- are you ok with adding this macro to arch/arm/? It will get used >> by the CPU PMU driver, which needs a portable (i.e. between arm and arm64) >> way to convert a logical CPU ID into the MIDR register for that CPU. > > No, because we don't set the cpuid member in uniprocessor configurations, > so it's going to be a fragile macro - it'll return zero for kernels > configured without SMP support. By itself is easy enough to fix, it could be tweaked to do the same thing as c_show() #define read_specific_cpuid(cpu_num) is_smp() ? per_cpu(&cpu_data, cpu_num)->cpuid : read_cpuid_id() c_show could then be updated to use read_specific_cpuid(). > > I'd ideally like cpuid for the boot CPU to be set early, so that we can > get rid of many ifdefs in this area, but haven't convinced myself that > it's safe to do so in all configurations with the percpu stuff not being > up and running in setup_arch(). As the above change is a little ugly... It seems something like smp_prepare_boot_cpu() call would be perfect if it were available for !SMP. Although this is getting a little off base for the PMU changes. The alternative to all this, is yet another #ifdef in the pmu code, which is IMHO the worse choice. Suggestions?