* [v2 PATCH] RISC-V: Place DTB at 3GB boundary instead of 4GB
@ 2021-01-07 9:11 Atish Patra
2021-01-07 17:13 ` Alistair Francis
0 siblings, 1 reply; 2+ messages in thread
From: Atish Patra @ 2021-01-07 9:11 UTC (permalink / raw)
To: qemu-devel
Cc: qemu-riscv, Sagar Karandikar, Bastian Koppelmann, Bin Meng,
Atish Patra, Alistair Francis, Palmer Dabbelt, Bin Meng
Currently, we place the DTB at 2MB from 4GB or end of DRAM which ever is
lesser. However, Linux kernel can address only 1GB of memory for RV32.
Thus, it can not map anything beyond 3GB (assuming 2GB is the starting address).
As a result, it can not process DT and panic if opensbi dynamic firmware
is used. While at it, place the DTB further away to avoid in memory placement
issues in future.
Fix this by placing the DTB at 16MB from 3GB or end of DRAM whichever is lower.
Fixes: 66b1205bc5ab ("RISC-V: Copy the fdt in dram instead of ROM")
Reviewed-by: Bin Meng <bin.meng@windriver.com>
Tested-by: Bin Meng <bin.meng@windriver.com>
Signed-off-by: Atish Patra <atish.patra@wdc.com>
---
Changes from v2->v1
1. Added the fixes tag and updated aligned down address to 16MB.
---
hw/riscv/boot.c | 8 ++++----
1 file changed, 4 insertions(+), 4 deletions(-)
diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
index d62f3dc7581e..2ed23c7e9849 100644
--- a/hw/riscv/boot.c
+++ b/hw/riscv/boot.c
@@ -202,11 +202,11 @@ uint32_t riscv_load_fdt(hwaddr dram_base, uint64_t mem_size, void *fdt)
/*
* We should put fdt as far as possible to avoid kernel/initrd overwriting
* its content. But it should be addressable by 32 bit system as well.
- * Thus, put it at an aligned address that less than fdt size from end of
- * dram or 4GB whichever is lesser.
+ * Thus, put it at an 16MB aligned address that less than fdt size from the
+ * end of dram or 3GB whichever is lesser.
*/
- temp = MIN(dram_end, 4096 * MiB);
- fdt_addr = QEMU_ALIGN_DOWN(temp - fdtsize, 2 * MiB);
+ temp = MIN(dram_end, 3072 * MiB);
+ fdt_addr = QEMU_ALIGN_DOWN(temp - fdtsize, 16 * MiB);
fdt_pack(fdt);
/* copy in the device tree */
--
2.25.1
^ permalink raw reply related [flat|nested] 2+ messages in thread
* Re: [v2 PATCH] RISC-V: Place DTB at 3GB boundary instead of 4GB
2021-01-07 9:11 [v2 PATCH] RISC-V: Place DTB at 3GB boundary instead of 4GB Atish Patra
@ 2021-01-07 17:13 ` Alistair Francis
0 siblings, 0 replies; 2+ messages in thread
From: Alistair Francis @ 2021-01-07 17:13 UTC (permalink / raw)
To: Atish Patra
Cc: open list:RISC-V, Sagar Karandikar, Bastian Koppelmann, Bin Meng,
qemu-devel@nongnu.org Developers, Alistair Francis,
Palmer Dabbelt, Bin Meng
On Thu, Jan 7, 2021 at 1:11 AM Atish Patra <atish.patra@wdc.com> wrote:
>
> Currently, we place the DTB at 2MB from 4GB or end of DRAM which ever is
> lesser. However, Linux kernel can address only 1GB of memory for RV32.
> Thus, it can not map anything beyond 3GB (assuming 2GB is the starting address).
> As a result, it can not process DT and panic if opensbi dynamic firmware
> is used. While at it, place the DTB further away to avoid in memory placement
> issues in future.
>
> Fix this by placing the DTB at 16MB from 3GB or end of DRAM whichever is lower.
>
> Fixes: 66b1205bc5ab ("RISC-V: Copy the fdt in dram instead of ROM")
>
> Reviewed-by: Bin Meng <bin.meng@windriver.com>
> Tested-by: Bin Meng <bin.meng@windriver.com>
> Signed-off-by: Atish Patra <atish.patra@wdc.com>
Thanks!
Applied to riscv-to-apply.next
Alistair
> ---
> Changes from v2->v1
> 1. Added the fixes tag and updated aligned down address to 16MB.
> ---
> hw/riscv/boot.c | 8 ++++----
> 1 file changed, 4 insertions(+), 4 deletions(-)
>
> diff --git a/hw/riscv/boot.c b/hw/riscv/boot.c
> index d62f3dc7581e..2ed23c7e9849 100644
> --- a/hw/riscv/boot.c
> +++ b/hw/riscv/boot.c
> @@ -202,11 +202,11 @@ uint32_t riscv_load_fdt(hwaddr dram_base, uint64_t mem_size, void *fdt)
> /*
> * We should put fdt as far as possible to avoid kernel/initrd overwriting
> * its content. But it should be addressable by 32 bit system as well.
> - * Thus, put it at an aligned address that less than fdt size from end of
> - * dram or 4GB whichever is lesser.
> + * Thus, put it at an 16MB aligned address that less than fdt size from the
> + * end of dram or 3GB whichever is lesser.
> */
> - temp = MIN(dram_end, 4096 * MiB);
> - fdt_addr = QEMU_ALIGN_DOWN(temp - fdtsize, 2 * MiB);
> + temp = MIN(dram_end, 3072 * MiB);
> + fdt_addr = QEMU_ALIGN_DOWN(temp - fdtsize, 16 * MiB);
>
> fdt_pack(fdt);
> /* copy in the device tree */
> --
> 2.25.1
>
>
^ permalink raw reply [flat|nested] 2+ messages in thread
end of thread, other threads:[~2021-01-07 17:18 UTC | newest]
Thread overview: 2+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2021-01-07 9:11 [v2 PATCH] RISC-V: Place DTB at 3GB boundary instead of 4GB Atish Patra
2021-01-07 17:13 ` Alistair Francis
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).