diff options
author | Tom Rini <trini@konsulko.com> | 2016-11-07 13:16:00 -0500 |
---|---|---|
committer | Tom Rini <trini@konsulko.com> | 2016-11-07 13:16:00 -0500 |
commit | d8c4eb60f8d1af74116eaee4f53adc937e618d6f (patch) | |
tree | ccdab4ffc0c3c32a1d788f33674f9f092830b7d0 /arch/arm | |
parent | dac09fc10b71045ac261a9b8a05d34029ebec2ae (diff) | |
parent | aa555fe9f07a21b3bbdab15aea594f3869e5ab22 (diff) |
Merge branch 'master' of git://git.denx.de/u-boot-net
Diffstat (limited to 'arch/arm')
-rw-r--r-- | arch/arm/dts/tegra186-p2771-0000.dtsi | 5 | ||||
-rw-r--r-- | arch/arm/dts/tegra186.dtsi | 20 | ||||
-rw-r--r-- | arch/arm/mach-tegra/board186.c | 7 | ||||
-rw-r--r-- | arch/arm/mach-tegra/tegra186/Makefile | 1 | ||||
-rw-r--r-- | arch/arm/mach-tegra/tegra186/nvtboot_board.c | 54 |
5 files changed, 86 insertions, 1 deletions
diff --git a/arch/arm/dts/tegra186-p2771-0000.dtsi b/arch/arm/dts/tegra186-p2771-0000.dtsi index 6e071082f9..54b2539ff4 100644 --- a/arch/arm/dts/tegra186-p2771-0000.dtsi +++ b/arch/arm/dts/tegra186-p2771-0000.dtsi @@ -25,6 +25,11 @@ reg = <0x0 0x80000000 0x0 0x60000000>; }; + ethernet@2490000 { + status = "okay"; + phy-reset-gpios = <&gpio_main TEGRA_MAIN_GPIO(M, 4) GPIO_ACTIVE_LOW>; + }; + i2c@3160000 { status = "okay"; }; diff --git a/arch/arm/dts/tegra186.dtsi b/arch/arm/dts/tegra186.dtsi index f878b65325..dd9e3b869d 100644 --- a/arch/arm/dts/tegra186.dtsi +++ b/arch/arm/dts/tegra186.dtsi @@ -31,6 +31,26 @@ #interrupt-cells = <2>; }; + ethernet@2490000 { + compatible = "nvidia,tegra186-eqos", "snps,dwc-qos-ethernet-4.10"; + reg = <0x0 0x02490000 0x0 0x10000>; + interrupts = <GIC_SPI 194 IRQ_TYPE_LEVEL_HIGH>; + clocks = <&bpmp TEGRA186_CLK_AXI_CBB>, + <&bpmp TEGRA186_CLK_EQOS_AXI>, + <&bpmp TEGRA186_CLK_EQOS_RX>, + <&bpmp TEGRA186_CLK_EQOS_PTP_REF>, + <&bpmp TEGRA186_CLK_EQOS_TX>; + clock-names = "slave_bus", + "master_bus", + "rx", + "ptp_ref", + "tx"; + resets = <&bpmp TEGRA186_RESET_EQOS>; + reset-names = "eqos"; + phy-mode = "rgmii"; + status = "disabled"; + }; + uarta: serial@3100000 { compatible = "nvidia,tegra186-uart", "nvidia,tegra20-uart"; reg = <0x0 0x03100000 0x0 0x10000>; diff --git a/arch/arm/mach-tegra/board186.c b/arch/arm/mach-tegra/board186.c index a071758afe..691c3fd98d 100644 --- a/arch/arm/mach-tegra/board186.c +++ b/arch/arm/mach-tegra/board186.c @@ -24,7 +24,12 @@ int board_init(void) return tegra_board_init(); } -int board_late_init(void) +__weak int tegra_soc_board_init_late(void) { return 0; } + +int board_late_init(void) +{ + return tegra_soc_board_init_late(); +} diff --git a/arch/arm/mach-tegra/tegra186/Makefile b/arch/arm/mach-tegra/tegra186/Makefile index 7f46a057bc..56f3378ece 100644 --- a/arch/arm/mach-tegra/tegra186/Makefile +++ b/arch/arm/mach-tegra/tegra186/Makefile @@ -4,5 +4,6 @@ obj-y += ../board186.o obj-y += cache.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 0000000000..1d78346f98 --- /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; +} |