diff mbox

[U-Boot,2/4] ARM: tegra: configure Ethernet address on Tegra186

Message ID 20160912175115.13198-2-swarren@wwwdotorg.org
State Accepted
Commit 2b950f3
Delegated to: Joe Hershberger
Headers show

Commit Message

Stephen Warren Sept. 12, 2016, 5:51 p.m. UTC
From: Stephen Warren <swarren@nvidia.com>

On Tegra186, the bootloader which runs before U-Boot passes the Ethernet
MAC address to U-Boot using device tree. Extract this value and write it
to the environment, so that the Ethernet uclass picks it up and uses it
for the built-in Ethernet device.

Signed-off-by: Stephen Warren <swarren@nvidia.com>
---
 arch/arm/mach-tegra/tegra186/Makefile        |  1 +
 arch/arm/mach-tegra/tegra186/nvtboot_board.c | 54 ++++++++++++++++++++++++++++
 2 files changed, 55 insertions(+)
 create mode 100644 arch/arm/mach-tegra/tegra186/nvtboot_board.c

Comments

Simon Glass Sept. 19, 2016, 12:58 a.m. UTC | #1
On 12 September 2016 at 11:51, Stephen Warren <swarren@wwwdotorg.org> wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> On Tegra186, the bootloader which runs before U-Boot passes the Ethernet
> MAC address to U-Boot using device tree. Extract this value and write it
> to the environment, so that the Ethernet uclass picks it up and uses it
> for the built-in Ethernet device.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>
> ---
>  arch/arm/mach-tegra/tegra186/Makefile        |  1 +
>  arch/arm/mach-tegra/tegra186/nvtboot_board.c | 54 ++++++++++++++++++++++++++++
>  2 files changed, 55 insertions(+)
>  create mode 100644 arch/arm/mach-tegra/tegra186/nvtboot_board.c

Reviewed-by: Simon Glass <sjg@chromium.org>
Joe Hershberger Nov. 2, 2016, 8:30 p.m. UTC | #2
On Mon, Sep 12, 2016 at 12:51 PM, Stephen Warren <swarren@wwwdotorg.org> wrote:
> From: Stephen Warren <swarren@nvidia.com>
>
> On Tegra186, the bootloader which runs before U-Boot passes the Ethernet
> MAC address to U-Boot using device tree. Extract this value and write it
> to the environment, so that the Ethernet uclass picks it up and uses it
> for the built-in Ethernet device.
>
> Signed-off-by: Stephen Warren <swarren@nvidia.com>

Acked-by: Joe Hershberger <joe.hershberger@ni.com>
Joe Hershberger Nov. 7, 2016, 5:31 p.m. UTC | #3
Hi Stephen,

https://patchwork.ozlabs.org/patch/668911/ was applied to u-boot-net.git.

Thanks!
-Joe
diff mbox

Patch

diff --git a/arch/arm/mach-tegra/tegra186/Makefile b/arch/arm/mach-tegra/tegra186/Makefile
index 033d6005fb44..26bc462930c1 100644
--- a/arch/arm/mach-tegra/tegra186/Makefile
+++ b/arch/arm/mach-tegra/tegra186/Makefile
@@ -3,5 +3,6 @@ 
 # SPDX-License-Identifier: GPL-2.0
 
 obj-y += ../board186.o
+obj-y += nvtboot_board.o
 obj-y += nvtboot_ll.o
 obj-y += nvtboot_mem.o
diff --git a/arch/arm/mach-tegra/tegra186/nvtboot_board.c b/arch/arm/mach-tegra/tegra186/nvtboot_board.c
new file mode 100644
index 000000000000..1d78346f9843
--- /dev/null
+++ b/arch/arm/mach-tegra/tegra186/nvtboot_board.c
@@ -0,0 +1,54 @@ 
+/*
+ * Copyright (c) 2016, NVIDIA CORPORATION.
+ *
+ * SPDX-License-Identifier: GPL-2.0+
+ */
+
+#include <common.h>
+#include <fdt_support.h>
+#include <fdtdec.h>
+#include <asm/arch/tegra.h>
+
+extern unsigned long nvtboot_boot_x0;
+
+/*
+ * Attempt to use /chosen/nvidia,ether-mac in the nvtboot DTB to U-Boot's
+ * ethaddr environment variable if possible.
+ */
+static int set_ethaddr_from_nvtboot(void)
+{
+	const void *nvtboot_blob = (void *)nvtboot_boot_x0;
+	int ret, node, len;
+	const u32 *prop;
+
+	/* Already a valid address in the environment? If so, keep it */
+	if (getenv("ethaddr"))
+		return 0;
+
+	node = fdt_path_offset(nvtboot_blob, "/chosen");
+	if (node < 0) {
+		printf("Can't find /chosen node in nvtboot DTB\n");
+		return node;
+	}
+	prop = fdt_getprop(nvtboot_blob, node, "nvidia,ether-mac", &len);
+	if (!prop) {
+		printf("Can't find nvidia,ether-mac property in nvtboot DTB\n");
+		return -ENOENT;
+	}
+
+	ret = setenv("ethaddr", (void *)prop);
+	if (ret) {
+		printf("Failed to set ethaddr from nvtboot DTB: %d\n", ret);
+		return ret;
+	}
+
+	return 0;
+}
+
+int tegra_soc_board_init_late(void)
+{
+	/* Ignore errors here; not all cases care about Ethernet addresses */
+	set_ethaddr_from_nvtboot();
+
+	return 0;
+}