Received: by 2002:a25:b323:0:0:0:0:0 with SMTP id l35csp1522533ybj; Fri, 20 Sep 2019 11:52:10 -0700 (PDT) X-Google-Smtp-Source: APXvYqzJgZ7smWCU+3NPwtbvaJheasg8/PSSjl91hKxrvbix+MKp1xCCI53NvqzCekaaDAv+nyCW X-Received: by 2002:a17:906:409b:: with SMTP id u27mr20626899ejj.295.1569005530571; Fri, 20 Sep 2019 11:52:10 -0700 (PDT) ARC-Seal: i=1; a=rsa-sha256; t=1569005530; cv=none; d=google.com; s=arc-20160816; b=AX+4uRUF9WhLAYNRTaVXo/XumyfdqolixwdrCwX2TgWF4BWg2A2j+YgXbk8NnVIaqy +q5kOtTFRV0ke/JZ2xwohTpD75hCxho1S4ZqcULGAvftODsBWOo8ELsL86gCMKO8A1YC teQCzS1R+1gSSXxQDN+KphhoZvMVvEX6wTP1yiSXICw02v12+GJTV5MuW/sxn10ouuvv 9Cgf703OUXzdrsO701y2UUD2LYiXKWDTgvvVlDa4VNRynXxqp7Th6NZYcZRJLDaV3G/B JhYax9V7fz/SEvdfqBdkWfmTO239VD79QlJZ4QBu0sGKCkejNfWaihV//VI63xeM+vJC hMtw== ARC-Message-Signature: i=1; a=rsa-sha256; c=relaxed/relaxed; d=google.com; s=arc-20160816; h=list-id:precedence:sender:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from; bh=NVaJxmrWHFyo0exDBdBAztlQHRAEi1kB2GRW9dkFsqI=; b=KVOBJyEAjlZxC+6/ccXEtWUPAo1vDXV8GOFxbpt3j0EUW6v5pV8DawoAHx8zzzQwFE QVh7UYTlpJDcnObIGSAoOR9iJFMP+rtj54u3LqtbSHn4X/XhSoDhVNEZS2FH5ZwBxWbX HgXcfwmMVCqHT9E0hbTVvxLccQfzMQ5E8jiybwD/wkvHcauanrDuBgpDNgRdSxtyZt1k DQgujN+WiWnhxHpm3X8uqU3b7NLNNUpNuyzm7VrcLVEn5yXUYQKA4SbnWaDhyhLw1jpL x0mJxo9NfjQV0CRqOC3ZarEgesvWAH1tCRxENldv6JwIDxJ46BtbDMiLxs+C1BBeKO5T E5zw== 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 q16si1505175ejm.267.2019.09.20.11.51.45; Fri, 20 Sep 2019 11:52:10 -0700 (PDT) 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 S2408534AbfITJZr (ORCPT + 99 others); Fri, 20 Sep 2019 05:25:47 -0400 Received: from szxga05-in.huawei.com ([45.249.212.191]:2751 "EHLO huawei.com" rhost-flags-OK-OK-OK-FAIL) by vger.kernel.org with ESMTP id S2408487AbfITJZb (ORCPT ); Fri, 20 Sep 2019 05:25:31 -0400 Received: from DGGEMS406-HUB.china.huawei.com (unknown [172.30.72.59]) by Forcepoint Email with ESMTP id 4BA4FA66B25612500C7D; Fri, 20 Sep 2019 17:25:29 +0800 (CST) Received: from huawei.com (10.175.124.28) by DGGEMS406-HUB.china.huawei.com (10.3.19.206) with Microsoft SMTP Server id 14.3.439.0; Fri, 20 Sep 2019 17:25:21 +0800 From: Jason Yan To: , , , , , , , , CC: , , , , , , , Jason Yan Subject: [PATCH v7 05/12] powerpc/fsl_booke/32: introduce reloc_kernel_entry() helper Date: Fri, 20 Sep 2019 17:45:39 +0800 Message-ID: <20190920094546.44948-6-yanaijie@huawei.com> X-Mailer: git-send-email 2.17.2 In-Reply-To: <20190920094546.44948-1-yanaijie@huawei.com> References: <20190920094546.44948-1-yanaijie@huawei.com> MIME-Version: 1.0 Content-Type: text/plain X-Originating-IP: [10.175.124.28] X-CFilter-Loop: Reflected Sender: linux-kernel-owner@vger.kernel.org Precedence: bulk List-ID: X-Mailing-List: linux-kernel@vger.kernel.org Add a new helper reloc_kernel_entry() to jump back to the start of the new kernel. After we put the new kernel in a randomized place we can use this new helper to enter the kernel and begin to relocate again. Signed-off-by: Jason Yan Cc: Diana Craciun Cc: Michael Ellerman Cc: Christophe Leroy Cc: Benjamin Herrenschmidt Cc: Paul Mackerras Cc: Nicholas Piggin Cc: Kees Cook Reviewed-by: Christophe Leroy Reviewed-by: Diana Craciun Tested-by: Diana Craciun --- arch/powerpc/kernel/head_fsl_booke.S | 13 +++++++++++++ arch/powerpc/mm/mmu_decl.h | 1 + 2 files changed, 14 insertions(+) diff --git a/arch/powerpc/kernel/head_fsl_booke.S b/arch/powerpc/kernel/head_fsl_booke.S index 8c1928176ffe..d9f599b01ff1 100644 --- a/arch/powerpc/kernel/head_fsl_booke.S +++ b/arch/powerpc/kernel/head_fsl_booke.S @@ -1149,6 +1149,19 @@ _GLOBAL(create_kaslr_tlb_entry) sync blr +/* + * Return to the start of the relocated kernel and run again + * r3 - virtual address of fdt + * r4 - entry of the kernel + */ +_GLOBAL(reloc_kernel_entry) + mfmsr r7 + rlwinm r7, r7, 0, ~(MSR_IS | MSR_DS) + + mtspr SPRN_SRR0,r4 + mtspr SPRN_SRR1,r7 + rfi + /* * Create a tlb entry with the same effective and physical address as * the tlb entry used by the current running code. But set the TS to 1. diff --git a/arch/powerpc/mm/mmu_decl.h b/arch/powerpc/mm/mmu_decl.h index a492ece08f64..55e86a0bf562 100644 --- a/arch/powerpc/mm/mmu_decl.h +++ b/arch/powerpc/mm/mmu_decl.h @@ -143,6 +143,7 @@ extern void adjust_total_lowmem(void); extern int switch_to_as1(void); extern void restore_to_as0(int esel, int offset, void *dt_ptr, int bootcpu); void create_kaslr_tlb_entry(int entry, unsigned long virt, phys_addr_t phys); +void reloc_kernel_entry(void *fdt, int addr); #endif extern void loadcam_entry(unsigned int index); extern void loadcam_multi(int first_idx, int num, int tmp_idx); -- 2.17.2