Return-Path: Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1751156AbdCQQlJ (ORCPT ); Fri, 17 Mar 2017 12:41:09 -0400 Received: from mail-pg0-f67.google.com ([74.125.83.67]:35726 "EHLO mail-pg0-f67.google.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1751049AbdCQQkw (ORCPT ); Fri, 17 Mar 2017 12:40:52 -0400 From: afzal mohammed To: Russell King - ARM Linux Cc: Greg Ungerer , Vladimir Murzin , linux-arm-kernel@lists.infradead.org, linux-kernel@vger.kernel.org, afzal mohammed Subject: [PATCH] ARM: nommu: access ID_PFR1 only if CPUID scheme Date: Fri, 17 Mar 2017 22:10:34 +0530 Message-Id: <20170317164034.4036-1-afzal.mohd.ma@gmail.com> X-Mailer: git-send-email 2.12.0 Sender: linux-kernel-owner@vger.kernel.org List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Content-Length: 1554 Lines: 48 Greg upon trying to boot no-MMU Kernel on ARM926EJ reported boot failure. He root caused it to ID_PFR1 access introduced by the commit mentioned in the fixes tag below. All CP15 processors need not have processor feature registers, only for architectures defined by CPUID scheme would have it. Hence check for it before accessing processor feature register, ID_PFR1. Fixes: f8300a0b5de0 ("ARM: 8647/2: nommu: dynamic exception base address setting") Reported-by: Greg Ungerer Signed-off-by: afzal mohammed --- Hi Russell, It would be good to have the fix go in during -rc, as, 1. Culprit commit went in during the last merge window 2. Though nothing supported in mainline is known to be broken, the original change needs to be modified to be reliable Vladimir, this is being posted as the issue is taken care run time. Regards afzal --- arch/arm/mm/nommu.c | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/arch/arm/mm/nommu.c b/arch/arm/mm/nommu.c index 3b5c7aaf9c76..33a45bd96860 100644 --- a/arch/arm/mm/nommu.c +++ b/arch/arm/mm/nommu.c @@ -303,7 +303,10 @@ static inline void set_vbar(unsigned long val) */ static inline bool security_extensions_enabled(void) { - return !!cpuid_feature_extract(CPUID_EXT_PFR1, 4); + /* Check CPUID Identification Scheme before ID_PFR1 read */ + if ((read_cpuid_id() & 0x000f0000) == 0x000f0000) + return !!cpuid_feature_extract(CPUID_EXT_PFR1, 4); + return 0; } static unsigned long __init setup_vectors_base(void) -- 2.12.0