From: Thierry Reding <thierry.reding@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v5 24/27] p2771-0000: Add support for framebuffer carveouts
Date: Mon, 15 Apr 2019 11:32:36 +0200 [thread overview]
Message-ID: <20190415093239.27509-25-thierry.reding@gmail.com> (raw)
In-Reply-To: <20190415093239.27509-1-thierry.reding@gmail.com>
From: Thierry Reding <treding@nvidia.com>
If early firmware initialized the display hardware and the display
controllers are scanning out a framebuffer (e.g. a splash screen), make
sure to pass information about the memory location of that framebuffer
to the kernel before booting to avoid the kernel from using that memory
for the buddy allocator.
This same mechanism can also be used in the kernel to set up early SMMU
mappings and avoid SMMU faults caused by the display controller reading
from memory for which it has no mapping.
Reviewed-by: Simon Glass <sjg@chromium.org>
Signed-off-by: Thierry Reding <treding@nvidia.com>
---
Changes in v4:
- add reviewed-by from Simon
board/nvidia/p2771-0000/p2771-0000.c | 66 ++++++++++++++++++++++++++--
1 file changed, 62 insertions(+), 4 deletions(-)
diff --git a/board/nvidia/p2771-0000/p2771-0000.c b/board/nvidia/p2771-0000/p2771-0000.c
index fe22067f6571..d294c7ae0136 100644
--- a/board/nvidia/p2771-0000/p2771-0000.c
+++ b/board/nvidia/p2771-0000/p2771-0000.c
@@ -5,6 +5,7 @@
#include <common.h>
#include <environment.h>
+#include <fdtdec.h>
#include <i2c.h>
#include <linux/libfdt.h>
#include <asm/arch-tegra/cboot.h>
@@ -56,7 +57,7 @@ int tegra_pcie_board_init(void)
}
#endif
-int ft_board_setup(void *fdt, bd_t *bd)
+static void ft_mac_address_setup(void *fdt)
{
const void *cboot_fdt = (const void *)cboot_boot_x0;
uint8_t mac[ETH_ALEN], local_mac[ETH_ALEN];
@@ -69,13 +70,15 @@ int ft_board_setup(void *fdt, bd_t *bd)
path = fdt_get_alias(fdt, "ethernet");
if (!path)
- return 0;
+ return;
debug("ethernet alias found: %s\n", path);
offset = fdt_path_offset(fdt, path);
- if (offset < 0)
- return 0;
+ if (offset < 0) {
+ printf("ethernet alias points to absent node %s\n", path);
+ return;
+ }
if (is_valid_ethaddr(local_mac)) {
err = fdt_setprop(fdt, offset, "local-mac-address", local_mac,
@@ -92,6 +95,61 @@ int ft_board_setup(void *fdt, bd_t *bd)
debug("MAC address set: %pM\n", mac);
}
}
+}
+
+static int ft_copy_carveout(void *dst, const void *src, const char *node)
+{
+ struct fdt_memory fb;
+ int err;
+
+ err = fdtdec_get_carveout(src, node, "memory-region", 0, &fb);
+ if (err < 0) {
+ if (err != -FDT_ERR_NOTFOUND)
+ printf("failed to get carveout for %s: %d\n", node,
+ err);
+
+ return err;
+ }
+
+ err = fdtdec_set_carveout(dst, node, "memory-region", 0, "framebuffer",
+ &fb);
+ if (err < 0) {
+ printf("failed to set carveout for %s: %d\n", node, err);
+ return err;
+ }
+
+ return 0;
+}
+
+static void ft_carveout_setup(void *fdt)
+{
+ const void *cboot_fdt = (const void *)cboot_boot_x0;
+ static const char * const nodes[] = {
+ "/host1x at 13e00000/display-hub at 15200000/display at 15200000",
+ "/host1x at 13e00000/display-hub at 15200000/display at 15210000",
+ "/host1x at 13e00000/display-hub at 15200000/display@15220000",
+ };
+ unsigned int i;
+ int err;
+
+ for (i = 0; i < ARRAY_SIZE(nodes); i++) {
+ printf("copying carveout for %s...\n", nodes[i]);
+
+ err = ft_copy_carveout(fdt, cboot_fdt, nodes[i]);
+ if (err < 0) {
+ if (err != -FDT_ERR_NOTFOUND)
+ printf("failed to copy carveout for %s: %d\n",
+ nodes[i], err);
+
+ continue;
+ }
+ }
+}
+
+int ft_board_setup(void *fdt, bd_t *bd)
+{
+ ft_mac_address_setup(fdt);
+ ft_carveout_setup(fdt);
return 0;
}
--
2.21.0
next prev parent reply other threads:[~2019-04-15 9:32 UTC|newest]
Thread overview: 29+ messages / expand[flat|nested] mbox.gz Atom feed top
2019-04-15 9:32 [U-Boot] [PATCH v5 00/27] ARM: tegra: Miscalleneous improvements Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 01/27] fdtdec: Add fdtdec_set_ethernet_mac_address() Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 02/27] lib: Implement strndup() Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 03/27] ARM: tegra: Fix mux type for disp1 and disp2 clocks on Tegra210 Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 04/27] ARM: tegra: Remove disp1 clock initialization " Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 05/27] ARM: tegra: Use common header for PMU declarations Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 06/27] ARM: tegra: Guard clock code with a Kconfig symbol Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 07/27] ARM: tegra: Guard GP pad control " Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 08/27] ARM: tegra: Guard memory controller " Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 09/27] ARM: tegra: Guard pin " Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 10/27] ARM: tegra: Guard powergate " Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 11/27] ARM: tegra: Fix save_boot_params() prototype Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 12/27] ARM: tegra: Allow boards to override boot target devices Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 13/27] ARM: tegra: Support TZ-only access to PMC Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 14/27] ARM: tegra: Workaround UDC boot issues only if necessary Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 15/27] ARM: tegra: Restore DRAM bank count Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 16/27] ARM: tegra: Unify Tegra186 builds Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 17/27] ARM: tegra: Implement cboot_save_boot_params() in C Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 18/27] ARM: tegra: Implement cboot_get_ethaddr() Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 19/27] ARM: tegra: Import cbootargs value from cboot DTB Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 20/27] ARM: tegra: Enable position independent build for 64-bit Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 21/27] p2371-2180: Pass Ethernet MAC to the kernel Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 22/27] p2771-0000: " Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 23/27] p2371-2180: Add support for framebuffer carveouts Thierry Reding
2019-04-15 9:32 ` Thierry Reding [this message]
2019-04-15 9:32 ` [U-Boot] [PATCH v5 25/27] ARM: tegra: Rename pcie-controller to pcie Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 26/27] ARM: tegra: Mark built-in Ethernet as default on Jetson TX2 Thierry Reding
2019-04-15 9:32 ` [U-Boot] [PATCH v5 27/27] ARM: tegra: Add NVIDIA Jetson Nano Developer Kit support Thierry Reding
2019-04-15 20:26 ` [U-Boot] [PATCH v5 00/27] ARM: tegra: Miscalleneous improvements Tom Warren
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=20190415093239.27509-25-thierry.reding@gmail.com \
--to=thierry.reding@gmail.com \
--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