From mboxrd@z Thu Jan 1 00:00:00 1970 Return-Path: X-Spam-Checker-Version: SpamAssassin 3.4.0 (2014-02-07) on aws-us-west-2-korg-lkml-1.web.codeaurora.org X-Spam-Level: X-Spam-Status: No, score=-10.5 required=3.0 tests=BAYES_00,DKIMWL_WL_HIGH, DKIM_SIGNED,DKIM_VALID,HEADER_FROM_DIFFERENT_DOMAINS,INCLUDES_PATCH, MAILING_LIST_MULTI,SIGNED_OFF_BY,SPF_HELO_NONE,SPF_PASS,URIBL_BLOCKED autolearn=ham autolearn_force=no version=3.4.0 Received: from mail.kernel.org (mail.kernel.org [198.145.29.99]) by smtp.lore.kernel.org (Postfix) with ESMTP id 423A4C41604 for ; Wed, 7 Oct 2020 15:30:18 +0000 (UTC) Received: from merlin.infradead.org (merlin.infradead.org [205.233.59.134]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by mail.kernel.org (Postfix) with ESMTPS id 963CE21582 for ; Wed, 7 Oct 2020 15:30:17 +0000 (UTC) Authentication-Results: mail.kernel.org; dkim=pass (2048-bit key) header.d=lists.infradead.org header.i=@lists.infradead.org header.b="Wf4SHoVL"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=pobox.com header.i=@pobox.com header.b="Dzgsh/o+"; dkim=fail reason="signature verification failed" (1024-bit key) header.d=fluxnic.net header.i=@fluxnic.net header.b="NvVE9eZm" DMARC-Filter: OpenDMARC Filter v1.3.2 mail.kernel.org 963CE21582 Authentication-Results: mail.kernel.org; dmarc=none (p=none dis=none) header.from=fluxnic.net Authentication-Results: mail.kernel.org; spf=none smtp.mailfrom=linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=merlin.20170209; h=Sender:Content-Transfer-Encoding: Content-Type:Cc:List-Subscribe:List-Help:List-Post:List-Archive: List-Unsubscribe:List-Id:MIME-Version:References:Message-ID:In-Reply-To: Subject:To:From:Date:Reply-To:Content-ID:Content-Description:Resent-Date: Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID:List-Owner; bh=FwDR8U+QElaHc0XuXju03m6z84MbvfZ04F/eSzZDlUM=; b=Wf4SHoVLOmn82XdWcGPu3JhkW S/MEkiYauuQQ2bAHT6WwKkNzvBPQER3T3fJZxZvH7xintxtXP1xL8ccjQC6hNiKeF3ER435cezhBe VsLcshb7g33JEGJW8Onh6koT6c5tU+QmASzvcvElKspac7yDDaQeO7TlUc8BZnaQmwKVBthyeX3in UkpZHbS8bszqxfrk7u0jth1EZSg2fTLmqgjfnDAO8uJPoJiORk7ZY30jEip1DZkdp8oUL+T6IjHen pGhLxGzOGNu6FclA/caN7nnx7rxzc+TjrHPQxcaGEjwKlYMa20seUV9ejewuAzxuPrWxvmEJjHcya 8XtnAycqw==; Received: from localhost ([::1] helo=merlin.infradead.org) by merlin.infradead.org with esmtp (Exim 4.92.3 #3 (Red Hat Linux)) id 1kQBNA-0003jY-Q9; Wed, 07 Oct 2020 15:28:56 +0000 Received: from pb-smtp1.pobox.com ([64.147.108.70]) by merlin.infradead.org with esmtps (Exim 4.92.3 #3 (Red Hat Linux)) id 1kQBN8-0003ib-5N for linux-arm-kernel@lists.infradead.org; Wed, 07 Oct 2020 15:28:55 +0000 Received: from pb-smtp1.pobox.com (unknown [127.0.0.1]) by pb-smtp1.pobox.com (Postfix) with ESMTP id 08F3E7D27A; Wed, 7 Oct 2020 11:28:48 -0400 (EDT) (envelope-from nico@fluxnic.net) DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=pobox.com; h=date:from:to :cc:subject:in-reply-to:message-id:references:mime-version :content-type; s=sasl; bh=0/WKBYNTHVYrTOzhiF4SBsnT1YY=; b=Dzgsh/ o+IGUSfoeLQDueBqd03nr89Vq2DA3AqteL7NGWqXV4TIH3HbvVOBfjTDz5ei1QIV 4xwz/Dh4wYSia7eeO/qtIdY9CRr7iX5AQhUO9IuGHZbL6fm1SSPt4xvRVSgVR9lk 28NFPrGjbjxer3Vphka3+nNvF8In8wqTJ7sEg= Received: from pb-smtp1.nyi.icgroup.com (unknown [127.0.0.1]) by pb-smtp1.pobox.com (Postfix) with ESMTP id F264E7D279; Wed, 7 Oct 2020 11:28:47 -0400 (EDT) (envelope-from nico@fluxnic.net) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed; d=fluxnic.net; h=date:from:to:cc:subject:in-reply-to:message-id:references:mime-version:content-type; s=2016-12.pbsmtp; bh=eEAXszX2eFWnSyleMyW3ThFCZcVw1XXW5L+/31wp44k=; b=NvVE9eZm+bpdrADoXv+jhPc6AC0swCUSZ2cKsQYchmRGIy0xEPrlsnTqMcLYdbWw+gl1WFI9fdTCvoUcvL/F/ggxE7yq7fIlEqNv0P0a3SdExc1bSTiheHgUL5fQcQcIM6xuUNUe6c+WAcKVswnx6VL1Q10sW+qFG/ahDe3fTGE= Received: from yoda.home (unknown [24.203.50.76]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by pb-smtp1.pobox.com (Postfix) with ESMTPSA id 6E2797D278; Wed, 7 Oct 2020 11:28:47 -0400 (EDT) (envelope-from nico@fluxnic.net) Received: from xanadu.home (xanadu.home [192.168.2.2]) by yoda.home (Postfix) with ESMTPSA id 999C22DA0A99; Wed, 7 Oct 2020 11:28:46 -0400 (EDT) Date: Wed, 7 Oct 2020 11:28:46 -0400 (EDT) From: Nicolas Pitre To: Ard Biesheuvel Subject: Re: [PATCH v2 1/2] ARM: centralize phys-to-virt conversion of DT/ATAGS address In-Reply-To: <20201007083944.27910-2-ardb@kernel.org> Message-ID: References: <20201007083944.27910-1-ardb@kernel.org> <20201007083944.27910-2-ardb@kernel.org> MIME-Version: 1.0 X-Pobox-Relay-ID: CB1A49CA-08B1-11EB-981A-D152C8D8090B-78420484!pb-smtp1.pobox.com X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20201007_112854_274390_6109A941 X-CRM114-Status: GOOD ( 27.70 ) X-BeenThere: linux-arm-kernel@lists.infradead.org X-Mailman-Version: 2.1.29 Precedence: list List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , Cc: Rob Herring , Linus Walleij , Florian Fainelli , Russell King , linux-arm-kernel@lists.infradead.org Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "linux-arm-kernel" Errors-To: linux-arm-kernel-bounces+linux-arm-kernel=archiver.kernel.org@lists.infradead.org On Wed, 7 Oct 2020, Ard Biesheuvel wrote: > Before moving the DT mapping out of the linear region, let's prepare > for this change by removing all the phys-to-virt translations of the > __atags_pointer variable, and perform this translation only once at > setup time. > > Tested-by: Linus Walleij > Reviewed-by: Linus Walleij > Signed-off-by: Ard Biesheuvel Acked-by: Nicolas Pitre > --- > arch/arm/include/asm/prom.h | 4 ++-- > arch/arm/kernel/atags.h | 4 ++-- > arch/arm/kernel/atags_parse.c | 6 +++--- > arch/arm/kernel/devtree.c | 6 +++--- > arch/arm/kernel/setup.c | 14 +++++++++----- > arch/arm/mm/mmu.c | 4 ++-- > 6 files changed, 21 insertions(+), 17 deletions(-) > > diff --git a/arch/arm/include/asm/prom.h b/arch/arm/include/asm/prom.h > index 1e36c40533c1..402e3f34c7ed 100644 > --- a/arch/arm/include/asm/prom.h > +++ b/arch/arm/include/asm/prom.h > @@ -9,12 +9,12 @@ > > #ifdef CONFIG_OF > > -extern const struct machine_desc *setup_machine_fdt(unsigned int dt_phys); > +extern const struct machine_desc *setup_machine_fdt(void *dt_virt); > extern void __init arm_dt_init_cpu_maps(void); > > #else /* CONFIG_OF */ > > -static inline const struct machine_desc *setup_machine_fdt(unsigned int dt_phys) > +static inline const struct machine_desc *setup_machine_fdt(void *dt_virt) > { > return NULL; > } > diff --git a/arch/arm/kernel/atags.h b/arch/arm/kernel/atags.h > index 067e12edc341..f2819c25b602 100644 > --- a/arch/arm/kernel/atags.h > +++ b/arch/arm/kernel/atags.h > @@ -2,11 +2,11 @@ > void convert_to_tag_list(struct tag *tags); > > #ifdef CONFIG_ATAGS > -const struct machine_desc *setup_machine_tags(phys_addr_t __atags_pointer, > +const struct machine_desc *setup_machine_tags(void *__atags_vaddr, > unsigned int machine_nr); > #else > static inline const struct machine_desc * __init __noreturn > -setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr) > +setup_machine_tags(void *__atags_vaddr, unsigned int machine_nr) > { > early_print("no ATAGS support: can't continue\n"); > while (true); > diff --git a/arch/arm/kernel/atags_parse.c b/arch/arm/kernel/atags_parse.c > index 6c12d9fe694e..373b61f9a4f0 100644 > --- a/arch/arm/kernel/atags_parse.c > +++ b/arch/arm/kernel/atags_parse.c > @@ -174,7 +174,7 @@ static void __init squash_mem_tags(struct tag *tag) > } > > const struct machine_desc * __init > -setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr) > +setup_machine_tags(void *atags_vaddr, unsigned int machine_nr) > { > struct tag *tags = (struct tag *)&default_tags; > const struct machine_desc *mdesc = NULL, *p; > @@ -195,8 +195,8 @@ setup_machine_tags(phys_addr_t __atags_pointer, unsigned int machine_nr) > if (!mdesc) > return NULL; > > - if (__atags_pointer) > - tags = phys_to_virt(__atags_pointer); > + if (atags_vaddr) > + tags = atags_vaddr; > else if (mdesc->atag_offset) > tags = (void *)(PAGE_OFFSET + mdesc->atag_offset); > > diff --git a/arch/arm/kernel/devtree.c b/arch/arm/kernel/devtree.c > index 39c978698406..4e09883c276d 100644 > --- a/arch/arm/kernel/devtree.c > +++ b/arch/arm/kernel/devtree.c > @@ -203,12 +203,12 @@ static const void * __init arch_get_next_mach(const char *const **match) > > /** > * setup_machine_fdt - Machine setup when an dtb was passed to the kernel > - * @dt_phys: physical address of dt blob > + * @dt_virt: virtual address of dt blob > * > * If a dtb was passed to the kernel in r2, then use it to choose the > * correct machine_desc and to setup the system. > */ > -const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) > +const struct machine_desc * __init setup_machine_fdt(void *dt_virt) > { > const struct machine_desc *mdesc, *mdesc_best = NULL; > > @@ -221,7 +221,7 @@ const struct machine_desc * __init setup_machine_fdt(unsigned int dt_phys) > mdesc_best = &__mach_desc_GENERIC_DT; > #endif > > - if (!dt_phys || !early_init_dt_verify(phys_to_virt(dt_phys))) > + if (!dt_virt || !early_init_dt_verify(dt_virt)) > return NULL; > > mdesc = of_flat_dt_match_machine(mdesc_best, arch_get_next_mach); > diff --git a/arch/arm/kernel/setup.c b/arch/arm/kernel/setup.c > index 5b1dcf1ad042..58e56e23a19a 100644 > --- a/arch/arm/kernel/setup.c > +++ b/arch/arm/kernel/setup.c > @@ -90,6 +90,7 @@ unsigned int cacheid __read_mostly; > EXPORT_SYMBOL(cacheid); > > unsigned int __atags_pointer __initdata; > +void *atags_vaddr __initdata; > > unsigned int system_rev; > EXPORT_SYMBOL(system_rev); > @@ -1076,19 +1077,22 @@ void __init hyp_mode_check(void) > > void __init setup_arch(char **cmdline_p) > { > - const struct machine_desc *mdesc; > + const struct machine_desc *mdesc = NULL; > + > + if (__atags_pointer) > + atags_vaddr = phys_to_virt(__atags_pointer); > > setup_processor(); > - mdesc = setup_machine_fdt(__atags_pointer); > + if (atags_vaddr) > + mdesc = setup_machine_fdt(atags_vaddr); > if (!mdesc) > - mdesc = setup_machine_tags(__atags_pointer, __machine_arch_type); > + mdesc = setup_machine_tags(atags_vaddr, __machine_arch_type); > if (!mdesc) { > early_print("\nError: invalid dtb and unrecognized/unsupported machine ID\n"); > early_print(" r1=0x%08x, r2=0x%08x\n", __machine_arch_type, > __atags_pointer); > if (__atags_pointer) > - early_print(" r2[]=%*ph\n", 16, > - phys_to_virt(__atags_pointer)); > + early_print(" r2[]=%*ph\n", 16, atags_vaddr); > dump_machine_table(); > } > > diff --git a/arch/arm/mm/mmu.c b/arch/arm/mm/mmu.c > index c36f977b2ccb..0665a0dbd040 100644 > --- a/arch/arm/mm/mmu.c > +++ b/arch/arm/mm/mmu.c > @@ -1503,7 +1503,7 @@ static void __init map_lowmem(void) > } > > #ifdef CONFIG_ARM_PV_FIXUP > -extern unsigned long __atags_pointer; > +extern void *atags_vaddr; > typedef void pgtables_remap(long long offset, unsigned long pgd, void *bdata); > pgtables_remap lpae_pgtables_remap_asm; > > @@ -1534,7 +1534,7 @@ static void __init early_paging_init(const struct machine_desc *mdesc) > */ > lpae_pgtables_remap = (pgtables_remap *)(unsigned long)__pa(lpae_pgtables_remap_asm); > pa_pgd = __pa(swapper_pg_dir); > - boot_data = __va(__atags_pointer); > + boot_data = atags_vaddr; > barrier(); > > pr_info("Switching physical address space to 0x%08llx\n", > -- > 2.17.1 > > _______________________________________________ linux-arm-kernel mailing list linux-arm-kernel@lists.infradead.org http://lists.infradead.org/mailman/listinfo/linux-arm-kernel