From: Thierry Reding <thierry.reding@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v5 01/27] fdtdec: Add fdtdec_set_ethernet_mac_address()
Date: Mon, 15 Apr 2019 11:32:13 +0200 [thread overview]
Message-ID: <20190415093239.27509-2-thierry.reding@gmail.com> (raw)
In-Reply-To: <20190415093239.27509-1-thierry.reding@gmail.com>
From: Thierry Reding <treding@nvidia.com>
This function can be used to set the local MAC address for the default
Ethernet interface in its device tree node. The default interface is
identified by the "ethernet" alias.
One case where this is useful is for devices that store their MAC
address in a custom location. Once extracted, board code can store the
MAC address in U-Boot's control DTB so that it will automatically be
used by the Ethernet uclass.
Signed-off-by: Thierry Reding <treding@nvidia.com>
---
include/fdtdec.h | 24 ++++++++++++++++++++++++
lib/fdtdec.c | 29 +++++++++++++++++++++++++++++
2 files changed, 53 insertions(+)
diff --git a/include/fdtdec.h b/include/fdtdec.h
index fa8e34f6f960..e6c22dd5cd5c 100644
--- a/include/fdtdec.h
+++ b/include/fdtdec.h
@@ -996,6 +996,30 @@ int fdtdec_setup_memory_banksize_fdt(const void *blob);
*/
int fdtdec_setup_memory_banksize(void);
+/**
+ * fdtdec_set_ethernet_mac_address() - set MAC address for default interface
+ *
+ * Looks up the default interface via the "ethernet" alias (in the /aliases
+ * node) and stores the given MAC in its "local-mac-address" property. This
+ * is useful on platforms that store the MAC address in a custom location.
+ * Board code can call this in the late init stage to make sure that the
+ * interface device tree node has the right MAC address configured for the
+ * Ethernet uclass to pick it up.
+ *
+ * Typically the FDT passed into this function will be U-Boot's control DTB.
+ * Given that a lot of code may be holding offsets to various nodes in that
+ * tree, this code will only set the "local-mac-address" property in-place,
+ * which means that it needs to exist and have space for the 6-byte address.
+ * This ensures that the operation is non-destructive and does not invalidate
+ * offsets that other drivers may be using.
+ *
+ * @param fdt FDT blob
+ * @param mac buffer containing the MAC address to set
+ * @param size size of MAC address
+ * @return 0 on success or a negative error code on failure
+ */
+int fdtdec_set_ethernet_mac_address(void *fdt, const u8 *mac, size_t size);
+
/**
* fdtdec_set_phandle() - sets the phandle of a given node
*
diff --git a/lib/fdtdec.c b/lib/fdtdec.c
index d0ba88897335..3ee786b57940 100644
--- a/lib/fdtdec.c
+++ b/lib/fdtdec.c
@@ -1261,6 +1261,35 @@ __weak void *board_fdt_blob_setup(void)
}
#endif
+int fdtdec_set_ethernet_mac_address(void *fdt, const u8 *mac, size_t size)
+{
+ const char *path;
+ int offset, err;
+
+ if (!is_valid_ethaddr(mac))
+ return -EINVAL;
+
+ path = fdt_get_alias(fdt, "ethernet");
+ if (!path)
+ return 0;
+
+ debug("ethernet alias found: %s\n", path);
+
+ offset = fdt_path_offset(fdt, path);
+ if (offset < 0) {
+ debug("ethernet alias points to absent node %s\n", path);
+ return -ENOENT;
+ }
+
+ err = fdt_setprop_inplace(fdt, offset, "local-mac-address", mac, size);
+ if (err < 0)
+ return err;
+
+ debug("MAC address: %pM\n", mac);
+
+ return 0;
+}
+
static int fdtdec_init_reserved_memory(void *blob)
{
int na, ns, node, err;
--
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 ` Thierry Reding [this message]
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 ` [U-Boot] [PATCH v5 24/27] p2771-0000: " Thierry Reding
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-2-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