From patchwork Tue Nov 23 01:57:15 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guo Ren X-Patchwork-Id: 12633347 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 3AD27C433EF for ; Tue, 23 Nov 2021 01:57:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=G7Kd8T0MhKelI/d8HcMu5mj+6CVnKtAS6e1FjWqyCCE=; b=aaWmsC2dyEHRpI CYyX/dGVxVUoGILgaQwGWt8oG8/IvpHMdOutP4eKN8KFuXtLeIWJZSwLgxgoV226zS5JjEsxHTYUF r608KrZokVdLwxhNO7zrDUfIz9OF+Os8pFe2sZUKjUrQ9P0hFqA36462Bk5WSVBjZWAIQdhDRwduK DuCJ/Y6FTXFrvXtXaaTdSZclSZLI5Lt30NjVUjG8DapXwctwiEp2YoHj/DmnBQCaDArYFQDLU1dG1 NbeT/k+NJx8laTxo+IKo99XLYdT4cRulrm9zp77gfzyKtRmer8Tle8jbEEpDMplDl94pI+jcqgQRL 9y7qKiJjqvH6oraunfLg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpL41-000bzU-5g; Tue, 23 Nov 2021 01:57:41 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpL3w-000bxd-RQ for linux-riscv@lists.infradead.org; Tue, 23 Nov 2021 01:57:38 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 34D1A61038; Tue, 23 Nov 2021 01:57:33 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1637632656; bh=qDjQ99afxjGsn+nYQ6tdrOeVRsGDzyUxlcwsA2r2rN8=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=YyBW8KwkC3P/Pkr0s1K5J7ovchRYTSlB+Sae9dTyRAGL020LecZfFCv3rhIBuRe+i foALqnM2ZIGHhagFBIebC+GjYnl2ZmWONCPpHKA9HgsUUZ6xjzO9uGwW/UIJjyJeYW njwxqCkfDHYY9Y4QSr+gQUABkYRJ7SpZQxWnkmypUyzj9PNG7/M6vY8l2aA/DE2Hmu n8mpEcXVvgdNg8QOVohzAz1es8zXA86udcqrvLDaczl5zMDvV7aBfPnqowInWo6+kR 2+az07Q5c+k7ZJkK3Uw43L9SA62T4y1cCJUpxIqHPSWVB17s7pI5BHYHVhpTScFXeR +MuG/9LjN2gsA== From: guoren@kernel.org To: guoren@kernel.org, anup@brainfault.org, palmer@dabbelt.com, atishp@rivosinc.com Cc: linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-doc@vger.kernel.org, Guo Ren , Anup Patel Subject: [RFC PATCH 1/3] riscv: Remove 2MB offset in the mm layout Date: Tue, 23 Nov 2021 09:57:15 +0800 Message-Id: <20211123015717.542631-2-guoren@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211123015717.542631-1-guoren@kernel.org> References: <20211123015717.542631-1-guoren@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211122_175736_967192_6D91C7FC X-CRM114-Status: GOOD ( 13.18 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Guo Ren The current RISC-V's mm layout is based on a 2MB offset and wasting memory. Remove 2MB offset and map PAGE_OFFSET at start_of_DRAM. Then we could reduce the memory reserved for opensbi in the next patch. Signed-off-by: Guo Ren Cc: Palmer Dabbelt Cc: Anup Patel Cc: Atish Patra --- arch/riscv/include/asm/page.h | 8 ++++++++ arch/riscv/kernel/head.S | 10 +++------- arch/riscv/kernel/vmlinux.lds.S | 5 ++--- arch/riscv/mm/init.c | 11 ++++++++--- 4 files changed, 21 insertions(+), 13 deletions(-) diff --git a/arch/riscv/include/asm/page.h b/arch/riscv/include/asm/page.h index b3e5ff0125fe..299147c78b4a 100644 --- a/arch/riscv/include/asm/page.h +++ b/arch/riscv/include/asm/page.h @@ -16,6 +16,14 @@ #define PAGE_SIZE (_AC(1, UL) << PAGE_SHIFT) #define PAGE_MASK (~(PAGE_SIZE - 1)) +#if __riscv_xlen == 64 +/* Image load offset(2MB) from start of RAM */ +#define LOAD_OFFSET 0x200000 +#else +/* Image load offset(4MB) from start of RAM */ +#define LOAD_OFFSET 0x400000 +#endif + #ifdef CONFIG_64BIT #define HUGE_MAX_HSTATE 2 #else diff --git a/arch/riscv/kernel/head.S b/arch/riscv/kernel/head.S index f52f01ecbeea..a6ac892d2ccf 100644 --- a/arch/riscv/kernel/head.S +++ b/arch/riscv/kernel/head.S @@ -61,13 +61,7 @@ ENTRY(_start) /* Image load offset (0MB) from start of RAM for M-mode */ .dword 0 #else -#if __riscv_xlen == 64 - /* Image load offset(2MB) from start of RAM */ - .dword 0x200000 -#else - /* Image load offset(4MB) from start of RAM */ - .dword 0x400000 -#endif + .dword LOAD_OFFSET #endif /* Effective size of kernel image */ .dword _end - _start @@ -94,6 +88,8 @@ relocate: la a1, kernel_map XIP_FIXUP_OFFSET a1 REG_L a1, KERNEL_MAP_VIRT_ADDR(a1) + li a2, LOAD_OFFSET + add a1, a1, a2 la a2, _start sub a1, a1, a2 add ra, ra, a1 diff --git a/arch/riscv/kernel/vmlinux.lds.S b/arch/riscv/kernel/vmlinux.lds.S index 5104f3a871e3..75b7c72cd4bd 100644 --- a/arch/riscv/kernel/vmlinux.lds.S +++ b/arch/riscv/kernel/vmlinux.lds.S @@ -11,10 +11,9 @@ #else #include -#define LOAD_OFFSET KERNEL_LINK_ADDR -#include #include +#include #include #include #include @@ -32,7 +31,7 @@ PECOFF_FILE_ALIGNMENT = 0x200; SECTIONS { /* Beginning of code and text segment */ - . = LOAD_OFFSET; + . = LOAD_OFFSET + KERNEL_LINK_ADDR; _start = .; HEAD_TEXT_SECTION . = ALIGN(PAGE_SIZE); diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 24b2b8044602..920e78f8c3e4 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -221,6 +221,11 @@ static void __init setup_bootmem(void) if (!IS_ENABLED(CONFIG_BUILTIN_DTB)) memblock_reserve(dtb_early_pa, fdt_totalsize(dtb_early_va)); + /* + * Reserve OpenSBI region and depends on PMP to deny accesses. + */ + memblock_reserve(__pa(PAGE_OFFSET), LOAD_OFFSET); + early_init_fdt_scan_reserved_mem(); dma_contiguous_reserve(dma32_phys_limit); if (IS_ENABLED(CONFIG_64BIT)) @@ -604,7 +609,7 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa) kernel_map.va_kernel_xip_pa_offset = kernel_map.virt_addr - kernel_map.xiprom; #else - kernel_map.phys_addr = (uintptr_t)(&_start); + kernel_map.phys_addr = (uintptr_t)(&_start) - LOAD_OFFSET; kernel_map.size = (uintptr_t)(&_end) - kernel_map.phys_addr; #endif kernel_map.va_pa_offset = PAGE_OFFSET - kernel_map.phys_addr; @@ -645,8 +650,8 @@ asmlinkage void __init setup_vm(uintptr_t dtb_pa) create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr, kernel_map.xiprom, PMD_SIZE, PAGE_KERNEL_EXEC); #else - create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr, - kernel_map.phys_addr, PMD_SIZE, PAGE_KERNEL_EXEC); + create_pmd_mapping(trampoline_pmd, kernel_map.virt_addr + LOAD_OFFSET, + kernel_map.phys_addr + LOAD_OFFSET, PMD_SIZE, PAGE_KERNEL_EXEC); #endif #else /* Setup trampoline PGD */ From patchwork Tue Nov 23 01:57:16 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guo Ren X-Patchwork-Id: 12633341 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 6A1FDC433FE for ; Tue, 23 Nov 2021 01:57:49 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=h3Uz7JXcnAEj39p+itgVp7fXSGavDTfxQaVh6YzkRyI=; b=sTdEZJdfSvMTNm 6XN3Cee8RVihrLGXYUVC8OJRnLffN/YVxk1cepi3L3uPf2viTqYe85ZD9Yk8r+XHQu0qEKF7c4EGa KrZcRAIF4Wf3SedKv+FQq5KbQ4A6Fii2iXauGY9lDxTBM7U6VNnnk5apGZq3+0MuezK/7Tl57rSbx L/GI2bkYtFR6Y69GWyLYXNDaxdvuHZjn22GK0PZm8c/FnZa/tdNYbTCrROslMP0wnxCmczFp2TVBA 6kNy3Kmgs/Paj440S64UQBsPj8VeN0oIGVA+D9yv01JEOtG2yXMpQyeWl4uLnsovHmV0fDB2mkb3E rlzk18cXyWKtHmIMnVsg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpL42-000c0Q-SM; Tue, 23 Nov 2021 01:57:42 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpL3z-000byk-Np for linux-riscv@lists.infradead.org; Tue, 23 Nov 2021 01:57:41 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 1CCBD6109E; Tue, 23 Nov 2021 01:57:36 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1637632659; bh=ZoaCHZIddZMnMBytdCkniWndd2x5DKoT53jTEzEace0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=d2DWSzhFTZ/nRNq1/+ZNXmqr0Adm3HfxWsPsndo6EMq+kaS32yxy1SH/bIHVNy3fO aOdNG4Av9Z1hevUg5sx1zfWfSxYSQm0r+NPyL/jr7aadcoJ0DxeD++YhuwR7keegdf CE5BjmFz+i3q63wObnTfVSy1WqRH6ZfHxTq9HYRkw7sNFnY0QKPPw9cVKbSA/Odf9l O2F/dh2j6u2g1BHcwBajzqQ7cMpB4Qy3lSJ4+69EiY/qJ87skU8OUTHulVhP9ZxvhU d8PyoznPtKyMPTjU2gSbVTJgqUO2nq2jqRf64Vlb4kVkeMmkwIsLyYqoWtJLJF5BGs iYCAxkvNH0zoQ== From: guoren@kernel.org To: guoren@kernel.org, anup@brainfault.org, palmer@dabbelt.com, atishp@rivosinc.com Cc: linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-doc@vger.kernel.org, Guo Ren , Anup Patel Subject: [RFC PATCH 2/3] riscv: Add early_param to decrease firmware region Date: Tue, 23 Nov 2021 09:57:16 +0800 Message-Id: <20211123015717.542631-3-guoren@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211123015717.542631-1-guoren@kernel.org> References: <20211123015717.542631-1-guoren@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211122_175739_834729_9D42813C X-CRM114-Status: GOOD ( 11.14 ) X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Guo Ren Using riscv.fw_size in cmdline to tell the kernel what the firmware (opensbi) size is. Then reserve the proper size of firmware to save memory instead of the whole 2MB. It's helpful to satisfy a small memory system (D1s/F133 from Allwinner). Signed-off-by: Guo Ren Cc: Palmer Dabbelt Cc: Anup Patel Cc: Atish Patra --- arch/riscv/mm/init.c | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/arch/riscv/mm/init.c b/arch/riscv/mm/init.c index 920e78f8c3e4..f7db6d40213d 100644 --- a/arch/riscv/mm/init.c +++ b/arch/riscv/mm/init.c @@ -159,6 +159,15 @@ static int __init early_mem(char *p) } early_param("mem", early_mem); +static phys_addr_t firmware_size __initdata; +static int __init early_get_firmware_size(char *arg) +{ + firmware_size = memparse(arg, &arg); + + return 0; +} +early_param("riscv.fwsz", early_get_firmware_size); + static void __init setup_bootmem(void) { phys_addr_t vmlinux_end = __pa_symbol(&_end); @@ -224,7 +233,10 @@ static void __init setup_bootmem(void) /* * Reserve OpenSBI region and depends on PMP to deny accesses. */ - memblock_reserve(__pa(PAGE_OFFSET), LOAD_OFFSET); + if (firmware_size > PAGE_SIZE) + memblock_reserve(__pa(PAGE_OFFSET), firmware_size); + else + memblock_reserve(__pa(PAGE_OFFSET), LOAD_OFFSET); early_init_fdt_scan_reserved_mem(); dma_contiguous_reserve(dma32_phys_limit); From patchwork Tue Nov 23 01:57:17 2021 Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit X-Patchwork-Submitter: Guo Ren X-Patchwork-Id: 12633345 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 26D9EC433F5 for ; Tue, 23 Nov 2021 01:57:52 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; q=dns/txt; c=relaxed/relaxed; d=lists.infradead.org; s=bombadil.20210309; h=Sender: Content-Transfer-Encoding:Content-Type:List-Subscribe:List-Help:List-Post: List-Archive:List-Unsubscribe:List-Id:MIME-Version:References:In-Reply-To: Message-Id:Date:Subject:Cc:To:From:Reply-To:Content-ID:Content-Description: Resent-Date:Resent-From:Resent-Sender:Resent-To:Resent-Cc:Resent-Message-ID: List-Owner; bh=v2h6DQxERh7gmbnlnS+Jz0KNTcPRdUdr+Yxwk3X/Ppk=; b=ce/LoYctqCRPp+ 9XSRroHKG858Ra4hzbFgdr/x4oAtJifbVWBknSmdoPWtGhuv5PAwB6Ffuy0tY7sYUJ3oA+d9IVlou zPwRoc8bMbuhXLQGoLNJDtmcGsZ6nlORnjaZHyLYm7r2Z646CHop3A2AyLB76dym82WzJVd3+Wbiq 3txIFdzTOmgEDffFrQFv3PRykx5ktYCNN5f59BviwaUwxR9NhhutT2T9R2ny73JyOVlcaD1kinQOu zZnYGuxggPxNx0HbBYxEjh6TROQ4aH6u+N1DoLo2RwWvvBJT76XEwAIZJrjc7aEGlnOrjYvdqO7eO rLnhVR5+xx/ty0N1Xeyg==; Received: from localhost ([::1] helo=bombadil.infradead.org) by bombadil.infradead.org with esmtp (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpL45-000c1h-Ks; Tue, 23 Nov 2021 01:57:45 +0000 Received: from mail.kernel.org ([198.145.29.99]) by bombadil.infradead.org with esmtps (Exim 4.94.2 #2 (Red Hat Linux)) id 1mpL43-000c0f-7d for linux-riscv@lists.infradead.org; Tue, 23 Nov 2021 01:57:44 +0000 Received: by mail.kernel.org (Postfix) with ESMTPSA id 0034560F45; Tue, 23 Nov 2021 01:57:39 +0000 (UTC) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=kernel.org; s=k20201202; t=1637632662; bh=BdXerXyBKn++TZTW4qxVgfzjOM5davINOBe2TBLOin0=; h=From:To:Cc:Subject:Date:In-Reply-To:References:From; b=fQYZWTvJk3uy/Za1q4jH5+qviOz8pTbZ9dps+9tOZZzxry2+uB0mCaYNr6R55+Mus pgMIMRGpXfQcM7IMnKQkXsOuWRkeuHLSGZ0U7mVZz8g9TFWX6f9WRF7e1FAkMumlDV BJTrQoORbLTsUwpdx/JF66nx8AHj2974HDUcZTfc/vBap6bjeY3Wa2OxDcNKuouv1S RIcCg9ZW+Yug/8jcFYyjx1vbpIcM32r4G8C+xl6Y/Vvi8SC3ivr/JqiUxaW+SgLJmi R2sARQP94ln1HNHEPqI76/8iJlYEYk9A6rDgycS0MLdQsu0Z0DMSOHnAtdtFciZv+U Dz3CHDy8KhImQ== From: guoren@kernel.org To: guoren@kernel.org, anup@brainfault.org, palmer@dabbelt.com, atishp@rivosinc.com Cc: linux-kernel@vger.kernel.org, linux-riscv@lists.infradead.org, linux-doc@vger.kernel.org, Guo Ren , Anup Patel Subject: [RFC PATCH 3/3] riscv: Add riscv.fwsz kernel parameter Date: Tue, 23 Nov 2021 09:57:17 +0800 Message-Id: <20211123015717.542631-4-guoren@kernel.org> X-Mailer: git-send-email 2.25.1 In-Reply-To: <20211123015717.542631-1-guoren@kernel.org> References: <20211123015717.542631-1-guoren@kernel.org> MIME-Version: 1.0 X-CRM114-Version: 20100106-BlameMichelson ( TRE 0.8.0 (BSD) ) MR-646709E3 X-CRM114-CacheID: sfid-20211122_175743_318677_5D0003AB X-CRM114-Status: UNSURE ( 7.51 ) X-CRM114-Notice: Please train this message. X-BeenThere: linux-riscv@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-riscv" Errors-To: linux-riscv-bounces+linux-riscv=archiver.kernel.org@lists.infradead.org From: Guo Ren The firmware of riscv (such as opensbi) occupy 2MB(64bit) / 4MB(32bit) in Linux. It's very wasteful to small memory footprint soc chip such as Allwinner D1s/F133. The kernel parameter gives a chance to users to set the proper size of the firmware and get more than 1.5MB of memory. Signed-off-by: Guo Ren Cc: Palmer Dabbelt Cc: Anup Patel Cc: Atish Patra --- Documentation/admin-guide/kernel-parameters.txt | 3 +++ 1 file changed, 3 insertions(+) diff --git a/Documentation/admin-guide/kernel-parameters.txt b/Documentation/admin-guide/kernel-parameters.txt index 9725c546a0d4..ee505743c8f4 100644 --- a/Documentation/admin-guide/kernel-parameters.txt +++ b/Documentation/admin-guide/kernel-parameters.txt @@ -4964,6 +4964,9 @@ [KNL] Disable ring 3 MONITOR/MWAIT feature on supported CPUs. + riscv.fwsz=nn[KMG] + [RISC-V] Determine firmware size to save memory + ro [KNL] Mount root device read-only on boot rodata= [KNL]