From: Anup Patel <anup@brainfault.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 03/11] riscv: generic: Ensure that U-Boot runs within 4GB for 64bit systems
Date: Thu, 17 Jan 2019 16:33:48 +0530 [thread overview]
Message-ID: <20190117110356.36753-4-anup@brainfault.org> (raw)
In-Reply-To: <20190117110356.36753-1-anup@brainfault.org>
From: Anup Patel <anup.patel@wdc.com>
On 64bit systems, the DRAM top can be easily beyond 4GB and U-Boot
DMA mapping APIs will generate DMA addresses beyond 4GB. This
breaks DMA programming in 32bit DMA capable devices (such as
Cadence MACB ethernet). For example, If DRAM is more then 2GB
on QEMU sifive_u machine then Cadence MACB ethernet stops working
for U-Boot because it is a 32bit DMA capable device.
To handle 32bit DMA capable devices on 64bit systems, we provide
custom implementation of board_get_usable_ram_top() which ensures
that usable ram top is not more then 4GB. This in-turn ensures
that U-Boot always runs within 4GB hence DMA addresses generated
by DMA mapping APIs will be within 4GB too.
Signed-off-by: Anup Patel <anup.patel@wdc.com>
Signed-off-by: Atish Patra <atish.patra@wdc.com>
---
arch/riscv/cpu/generic/dram.c | 22 ++++++++++++++++++++++
1 file changed, 22 insertions(+)
diff --git a/arch/riscv/cpu/generic/dram.c b/arch/riscv/cpu/generic/dram.c
index 84d87d2a7f..dea2d3701d 100644
--- a/arch/riscv/cpu/generic/dram.c
+++ b/arch/riscv/cpu/generic/dram.c
@@ -6,6 +6,8 @@
#include <common.h>
#include <fdtdec.h>
+DECLARE_GLOBAL_DATA_PTR;
+
int dram_init(void)
{
return fdtdec_setup_mem_size_base();
@@ -15,3 +17,23 @@ int dram_init_banksize(void)
{
return fdtdec_setup_memory_banksize();
}
+
+ulong board_get_usable_ram_top(ulong total_size)
+{
+#ifdef CONFIG_64BIT
+ /*
+ * Ensure that we run from first 4GB so that all
+ * addresses used by U-Boot are 32bit addresses.
+ *
+ * This in-turn ensures that 32bit DMA capabale
+ * devices work fine because DMA mapping APIs will
+ * provide 32bit DMA addresses only.
+ */
+ if (gd->ram_top > 0x100000000UL)
+ return 0x100000000UL;
+ else
+ return gd->ram_top;
+#else
+ return gd->ram_top;
+#endif
+}
--
2.17.1
next prev parent reply other threads:[~2019-01-17 11:03 UTC|newest]
Thread overview: 16+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-01-17 11:03 [U-Boot] [PATCH 00/11] SiFive FU540 Support Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 01/11] riscv: Rename cpu/qemu to cpu/generic Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 02/11] riscv: Add asm/dma-mapping.h for DMA mappings Anup Patel
2019-01-17 11:03 ` Anup Patel [this message]
2019-01-17 11:03 ` [U-Boot] [PATCH 04/11] net: macb: Fix clk API usage for RISC-V systems Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 05/11] net: macb: Fix GEM hardware detection Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 06/11] clk: Add SiFive FU540 PRCI clock driver Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 07/11] clk: Add fixed-factor " Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 08/11] drivers: serial_sifive: Fix baud rate calculation Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 09/11] drivers: serial: serial_sifive: Skip baudrate config if no input clock Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 10/11] cpu: Bind timer driver for boot hart Anup Patel
2019-01-17 11:03 ` [U-Boot] [PATCH 11/11] riscv: Add SiFive FU540 board support Anup Patel
2019-01-17 11:06 ` [U-Boot] [PATCH 00/11] SiFive FU540 Support Anup Patel
-- strict thread matches above, loose matches on Subject: below --
2019-01-17 10:38 Anup Patel
2019-01-17 10:38 ` [U-Boot] [PATCH 03/11] riscv: generic: Ensure that U-Boot runs within 4GB for 64bit systems Anup Patel
2019-01-17 18:06 ` Alexander Graf
2019-01-17 10:34 [U-Boot] [PATCH 00/11] SiFive FU540 Support Anup Patel
2019-01-17 10:35 ` [U-Boot] [PATCH 03/11] riscv: generic: Ensure that U-Boot runs within 4GB for 64bit systems Anup Patel
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=20190117110356.36753-4-anup@brainfault.org \
--to=anup@brainfault.org \
--cc=u-boot@lists.denx.de \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox