From patchwork Thu Aug 22 10:14:37 2024 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Mark Rutland X-Patchwork-Id: 13773182 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org Received: from bombadil.infradead.org (bombadil.infradead.org [198.137.202.133]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.lore.kernel.org (Postfix) with ESMTPS id 4BB71C3DA4A for ; Thu, 22 Aug 2024 10:17:27 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender:List-Subscribe:List-Help :List-Post:List-Archive:List-Unsubscribe:List-Id:Content-Transfer-Encoding: MIME-Version:References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From: Reply-To:Content-Type:Content-ID:Content-Description:Resent-Date:Resent-From: Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=8fUKKZTyOs2vaAB1+pr27469uz9rarC2xHlJ+WNGF5Y=; b=L8nb6oPAqSQBJfS3ADpBpgBBmk P1RVy3n61S5vgFYv9fU5pxsLJJSFAj6u7eZ8WlEPSpkix1LU6n6eImcrM/+K/mYMePAOmFnU4Pci3 Ado3cH7Fdo825Jb66vju1Uy7DSCHNYqXvxTyHeJHv5S2lM2nGJvtHc2j+NVlbA+8mkiLb+IQkJdfq QfS6ZHWAC9B8t3R68PnZdWAHAixT0RL3AJVw+cDPMdW9tBbuSnm8O+ZHLKjmy8vEMwn5MpEEOZGmw MRjIFoHo8M8f7maPzw7YIJ0PiWwB8EYoaWnvxRiTxucVhe4SHkiiOLHqI4am8SL0ekd0xopY+jheh APvvB2AA==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sh4sW-0000000COZB-2sTm; Thu, 22 Aug 2024 10:17:16 +0000 Received: from desiato.infradead.org ([2001:8b0:10b:1:d65d:64ff:fe57:4e05]) by bombadil.infradead.org with esmtps (Exim 4.97.1 #2 (Red Hat Linux)) id 1sh4qg-0000000COJR-4A80 for linux-arm-kernel@bombadil.infradead.org; Thu, 22 Aug 2024 10:15:23 +0000 DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=infradead.org; s=desiato.20200630; h=Content-Transfer-Encoding:MIME-Version :References:In-Reply-To:Message-Id:Date:Subject:Cc:To:From:Sender:Reply-To: Content-Type:Content-ID:Content-Description; bh=8fUKKZTyOs2vaAB1+pr27469uz9rarC2xHlJ+WNGF5Y=; b=Vq8QU0ghvS8CgVoNwT/N9ZE7Z6 WS/9Y1cx5NwqxMJxxzQv4M3ss/sF5UlkDf1ApfGF0f+IUdu3Z90rTJZl5AqQ+uJ5jWRvOypnhIAE3 QRA+bSoWdM6b+E6Hzc5Q7qlLi9RjbRIzgRNzwMwil1W/X9qQNrgeKzE1roJcmYS5bOXRJ5vHpI1FG 0md23uzqsCdW+iXdZ0eGohBFqLT0uIDTbFaR8/sxr5TaOlAHlMIrQHzpRzoQEwJUUKaHdCQe5CMjU LMAe+5JpKQykwASJYbhi+m9SVTCDtID7fMZF9XvwWx5Ud8eZV2Jn+l/fRnFYKgSu+ESxqb+YWFiLr xJ0S/Lyg==; Received: from foss.arm.com ([217.140.110.172]) by desiato.infradead.org with esmtp (Exim 4.97.1 #2 (Red Hat Linux)) id 1sh4qb-00000009u5i-0N3R for linux-arm-kernel@lists.infradead.org; Thu, 22 Aug 2024 10:15:20 +0000 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 F08C21570; Thu, 22 Aug 2024 03:15:38 -0700 (PDT) Received: from lakrids.cambridge.arm.com (usa-sjc-imap-foss1.foss.arm.com [10.121.207.14]) by usa-sjc-imap-foss1.foss.arm.com (Postfix) with ESMTPA id 81C5B3F66E; Thu, 22 Aug 2024 03:15:11 -0700 (PDT) From: Mark Rutland To: linux-arm-kernel@lists.infradead.org Cc: akos.denke@arm.com, andre.przywara@arm.com, luca.fancellu@arm.com, mark.rutland@arm.com, maz@kernel.org Subject: [BOOT-WRAPPER v3 06/10] aarch32: Always enter kernel via exception return Date: Thu, 22 Aug 2024 11:14:37 +0100 Message-Id: <20240822101441.251184-7-mark.rutland@arm.com> X-Mailer: git-send-email 2.30.2 In-Reply-To: <20240822101441.251184-1-mark.rutland@arm.com> References: <20240822101441.251184-1-mark.rutland@arm.com> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20240822_111517_631460_A851865E X-CRM114-Status: GOOD ( 11.72 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.34 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org When the boot-wrapper is entered at Secure PL1 it will enter the kernel via an exception return, and when entered at Hyp it will branch to the kernel directly. This is an artifact of the way the boot-wrapper was originally written in assembly, and it would be preferable to always enter the kernel via an exception return so that PSTATE is always initialized to a known-good value. Rework jump_kernel() to always enter the kernel via an exception return, matching the style of the AArch64 version of jump_kernel() Signed-off-by: Mark Rutland Acked-by: Marc Zyngier Cc: Akos Denke Cc: Andre Przywara Cc: Luca Fancellu Reviewed-by: Andre Przywara --- arch/aarch32/boot.S | 48 +++++++++++++++++++++++---------------------- 1 file changed, 25 insertions(+), 23 deletions(-) diff --git a/arch/aarch32/boot.S b/arch/aarch32/boot.S index f21f89a..e79aa06 100644 --- a/arch/aarch32/boot.S +++ b/arch/aarch32/boot.S @@ -76,10 +76,6 @@ reset_at_hyp: bl setup_stack - mov r0, #1 - ldr r1, =flag_no_el3 - str r0, [r1] - bl cpu_init_bootwrapper bl cpu_init_arch @@ -96,9 +92,10 @@ err_invalid_id: * r1-r3, sp[0]: kernel arguments */ ASM_FUNC(jump_kernel) - sub sp, #4 @ Ignore fourth argument - push {r0 - r3} - mov r5, sp + mov r4, r0 + mov r5, r1 + mov r6, r2 + mov r7, r3 ldr r0, =HSCTLR_KERNEL mcr p15, 4, r0, c1, c0, 0 @ HSCTLR @@ -111,23 +108,28 @@ ASM_FUNC(jump_kernel) bl find_logical_id bl setup_stack - ldr lr, [r5], #4 - ldm r5, {r0 - r2} - - ldr r4, =flag_no_el3 - ldr r4, [r4] - cmp r4, #1 - bxeq lr @ no EL3 + mov r0, r5 + mov r1, r6 + mov r2, r7 + ldr r3, =SPSR_KERNEL - ldr r4, =SPSR_KERNEL /* Return in thumb2 mode when bit 0 of address is 1 */ - tst lr, #1 - orrne r4, #PSR_T + tst r4, #1 + orrne r3, #PSR_T + + mrs r5, cpsr + and r5, #PSR_MODE_MASK + cmp r5, #PSR_MON + beq eret_at_mon + cmp r5, #PSR_HYP + beq eret_at_hyp + b . - msr spsr_cxf, r4 +eret_at_mon: + mov lr, r4 + msr spsr_mon, r3 movs pc, lr - - .section .data - .align 2 -flag_no_el3: - .long 0 +eret_at_hyp: + msr elr_hyp, r4 + msr spsr_hyp, r3 + eret