Message ID | 20160912175115.13198-2-swarren@wwwdotorg.org |
---|---|
State | Accepted |
Commit | 2b950f3 |
Delegated to: | Joe Hershberger |
Headers | show |
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>
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>
Hi Stephen, https://patchwork.ozlabs.org/patch/668911/ was applied to u-boot-net.git. Thanks! -Joe
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; +}