Received: by 2002:a25:1506:0:0:0:0:0 with SMTP id 6csp5328454ybv; Tue, 11 Feb 2020 13:36:44 -0800 (PST) X-Google-Smtp-Source: APXvYqxHm2UDrfZRI6laEjZoM5pD7UpYiOBiiLAWdhIe+KrdO1t2aXXlh51b4PjUVihymGENuy+d X-Received: by 2002:aca:db56:: with SMTP id s83mr4255298oig.171.1581457004034; Tue, 11 Feb 2020 13:36:44 -0800 (PST) ARC-Seal: i=1; a=rsa-sha256; t=1581457004; cv=none; d=google.com; s=arc-20160816; b=NE/FMW+B7LeUM8dklmxP2KBVNVrS4C291/2ZyIWG7Tm75P1upB4fTlFE2pHycuq+pt zkvRhSGvZ4IgqBgsTisSr/LjogkfvK1nlOKWhFHuhjQXDzxKMdRl/DrILwP29kv9ZYNO oZcvpsZmnahmMtU9bsjta+T9q0UTqFS9Egul3qEQ+c47nyuOUPxhBMMwnJtfzPrvmhy0 nf+tTNoLxTg3iR7bYUyWIZ1fuFP/K1VivD81TqsoDTqq3ky1XX+vHT60t70lcIZ1Mq0c huPxz7W37Qr3leVhvw8Aeha9ZndDqfBb+HSK8AtD9rCVTye1gFmsY5kYWckZgvMCbb7Y UF3w== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:references:in-reply-to:message-id:date :subject:cc:to:from; bh=b5lE5Yj93kSGASDf6t8O1q6YVBb8Wgoi/+8jPVEjoT8=; b=H8/mPh/pHL/2qHWTg43MNfpZ5sThwHdDI1SdyEIAG7csBEdhKEA3/YImPXFISGJJx0 WjjBb5OENw6ZfrVyvd9j47WBA1QDeOe/MfCZsEMD40WH6ShI2ZPtpmTdTcrdPD6Kcni+ 73GBQ6UxJahW5IicUSVCobVGeFfMk4MbPYtLVWmok40B//BpAoL9aspS20sh296BLblz c2N9rnc305cA+uSwHb3YCojNmdHw8gVOTS8YcQ1eMNL0Txvl0Q2xHjGILSJ5+Hx+MrO4 Cr/RxYdlACoWzQaEQ6//AsLymjpg5cz/cB0fG98VN9XdHQC1YQbTDwLpIlwgezCzWL1a S1tQ== ARC-Authentication-Results: i=1; mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Return-Path: Received: from vger.kernel.org (vger.kernel.org. [209.132.180.67]) by mx.google.com with ESMTP id 13si2286450oiy.28.2020.02.11.13.36.31; Tue, 11 Feb 2020 13:36:44 -0800 (PST) Received-SPF: pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) client-ip=209.132.180.67; Authentication-Results: mx.google.com; spf=pass (google.com: best guess record for domain of linux-kernel-owner@vger.kernel.org designates 209.132.180.67 as permitted sender) smtp.mailfrom=linux-kernel-owner@vger.kernel.org Received: (majordomo@vger.kernel.org) by vger.kernel.org via listexpand id S1731471AbgBKSqX (ORCPT + 99 others); Tue, 11 Feb 2020 13:46:23 -0500 Received: from foss.arm.com ([217.140.110.172]:52328 "EHLO foss.arm.com" rhost-flags-OK-OK-OK-OK) by vger.kernel.org with ESMTP id S1729445AbgBKSqX (ORCPT ); Tue, 11 Feb 2020 13:46:23 -0500 Received: from usa-sjc-imap-foss1.foss.arm.com (unknown [10.121.207.14]) by usa-sjc-mx-foss1.foss.arm.com (Postfix) with ESMTP id 904F71FB; Tue, 11 Feb 2020 10:46:22 -0800 (PST) Received: from e108754-lin.cambridge.arm.com (e108754-lin.cambridge.arm.com [10.1.198.52]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 464C23F68F; Tue, 11 Feb 2020 10:46:20 -0800 (PST) From: Ionela Voinescu To: catalin.marinas@arm.com, will@kernel.org, mark.rutland@arm.com, maz@kernel.org, suzuki.poulose@arm.com, sudeep.holla@arm.com, lukasz.luba@arm.com, valentin.schneider@arm.com, rjw@rjwysocki.net, ionela.voinescu@arm.com Cc: peterz@infradead.org, mingo@redhat.com, vincent.guittot@linaro.org, viresh.kumar@linaro.org, linux-arm-kernel@lists.infradead.org, linux-doc@vger.kernel.org, linux-kernel@vger.kernel.org, linux-pm@vger.kernel.org, Steve Capper Subject: [PATCH v3 2/7] arm64: trap to EL1 accesses to AMU counters from EL0 Date: Tue, 11 Feb 2020 18:45:37 +0000 Message-Id: <20200211184542.29585-3-ionela.voinescu@arm.com> X-Mailer: git-send-email 2.17.1 In-Reply-To: <20200211184542.29585-1-ionela.voinescu@arm.com> References: <20200211184542.29585-1-ionela.voinescu@arm.com> Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org The activity monitors extension is an optional extension introduced by the ARMv8.4 CPU architecture. In order to access the activity monitors counters safely, if desired, the kernel should detect the presence of the extension through the feature register, and mediate the access. Therefore, disable direct accesses to activity monitors counters from EL0 (userspace) and trap them to EL1 (kernel). To be noted that the ARM64_AMU_EXTN kernel config and the disable_amu kernel parameter do not have an effect on this code. Given that the amuserenr_el0 resets to an UNKNOWN value, setting the trap of EL0 accesses to EL1 is always attempted for safety and security considerations. Therefore firmware should still ensure accesses to AMU registers are not trapped in EL2/EL3 as this code cannot be bypassed if the CPU implements the Activity Monitors Unit. Signed-off-by: Ionela Voinescu Cc: Catalin Marinas Cc: Will Deacon Cc: Mark Rutland Cc: Steve Capper --- arch/arm64/include/asm/assembler.h | 10 ++++++++++ arch/arm64/mm/proc.S | 3 +++ 2 files changed, 13 insertions(+) diff --git a/arch/arm64/include/asm/assembler.h b/arch/arm64/include/asm/assembler.h index 2cc0dd8bd9f7..2dc6d7b19831 100644 --- a/arch/arm64/include/asm/assembler.h +++ b/arch/arm64/include/asm/assembler.h @@ -443,6 +443,16 @@ USER(\label, ic ivau, \tmp2) // invalidate I line PoU 9000: .endm +/* + * reset_amuserenr_el0 - reset AMUSERENR_EL0 if AMUv1 present + */ + .macro reset_amuserenr_el0, tmpreg + mrs \tmpreg, id_aa64pfr0_el1 // Check ID_AA64PFR0_EL1 + ubfx \tmpreg, \tmpreg, #ID_AA64PFR0_AMU_SHIFT, #4 + cbz \tmpreg, .Lskip_\@ // Skip if no AMU present + msr_s SYS_AMUSERENR_EL0, xzr // Disable AMU access from EL0 +.Lskip_\@: + .endm /* * copy_page - copy src to dest using temp registers t1-t8 */ diff --git a/arch/arm64/mm/proc.S b/arch/arm64/mm/proc.S index a1e0592d1fbc..d8aae1152c08 100644 --- a/arch/arm64/mm/proc.S +++ b/arch/arm64/mm/proc.S @@ -124,6 +124,7 @@ alternative_endif ubfx x11, x11, #1, #1 msr oslar_el1, x11 reset_pmuserenr_el0 x0 // Disable PMU access from EL0 + reset_amuserenr_el0 x0 // Disable AMU access from EL0 alternative_if ARM64_HAS_RAS_EXTN msr_s SYS_DISR_EL1, xzr @@ -415,6 +416,8 @@ ENTRY(__cpu_setup) isb // Unmask debug exceptions now, enable_dbg // since this is per-cpu reset_pmuserenr_el0 x0 // Disable PMU access from EL0 + reset_amuserenr_el0 x0 // Disable AMU access from EL0 + /* * Memory region attributes for LPAE: * -- 2.17.1