All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Alex G." <mr.nuke.me@gmail.com>
To: Sean Anderson <sean.anderson@seco.com>, u-boot@lists.denx.de
Cc: patrick.delaunay@foss.st.com, marex@denx.de
Subject: Re: [PATCH 04/10] fdt_support: Implement fdt_ethernet_set_macaddr()
Date: Thu, 26 Aug 2021 18:50:19 -0500	[thread overview]
Message-ID: <0ab95129-d3bf-39f1-1281-b9c8b71def1f@gmail.com> (raw)
In-Reply-To: <c430d103-7d87-4600-23bb-fc717ab9fecd@seco.com>

Hi Sean,

On 8/26/21 6:35 PM, Sean Anderson wrote:
> 
> 
> On 8/26/21 5:42 PM, Alexandru Gagniuc wrote:
>> Oftentimes we have MAC address information stored in a ROM or OTP. The
>> way to add that to the FDT would be through the u-boot environment,
>> and then fdt_fixup_ethernet(). This is not very useful in SPL.
>>
>> It would be more helpful to be able to "set interface x to MAC y".
>> This is where fdt_ethernet_set_macaddr() comes in. It is similar in
>> function to fdt_fixup_ethernet(), but only updates one interface,
>> without using the u-boot env, and without string processing.
> 
> Have you considered adopting the nvmem-cells property for ethernet
> controllers (added in Linux commit 0e839df92cf3 ("net: ethernet: provide
> nvmem_get_mac_address()"))?

Obviously I haven't. It sounds like a great idea. Thank you for pointing 
me to it.

Alex

> --Sean
> 
>> Signed-off-by: Alexandru Gagniuc <mr.nuke.me@gmail.com>
>> ---
>>   common/fdt_support.c  | 30 ++++++++++++++++++++++++++++++
>>   include/fdt_support.h | 17 +++++++++++++++++
>>   2 files changed, 47 insertions(+)
>>
>> diff --git a/common/fdt_support.c b/common/fdt_support.c
>> index 4341d84bd5..c4cbd4060e 100644
>> --- a/common/fdt_support.c
>> +++ b/common/fdt_support.c
>> @@ -592,6 +592,36 @@ void fdt_fixup_ethernet(void *fdt)
>>       }
>>   }
>>
>> +int fdt_ethernet_set_macaddr(void *fdt, int ethnum, const uint8_t 
>> *mac_addr)
>> +{
>> +    const char *path, *name;
>> +    int prop, aliases_node;
>> +    char eth_name[16] = "ethernet";
>> +
>> +    aliases_node = fdt_path_offset(fdt, "/aliases");
>> +    if (aliases_node < 0)
>> +        return aliases_node;
>> +
>> +    if (ethnum >= 0)
>> +        sprintf(eth_name, "ethernet%d", ethnum);
>> +
>> +    fdt_for_each_property_offset(prop, fdt, aliases_node) {
>> +        path = fdt_getprop_by_offset(fdt, prop, &name, NULL);
>> +        if (!strcmp(name, eth_name))
>> +            break;
>> +
>> +        path = NULL;
>> +    }
>> +
>> +    if (!path)
>> +        return -FDT_ERR_NOTFOUND;
>> +
>> +    do_fixup_by_path(fdt, path, "mac-address", mac_addr, 6, 0);
>> +    do_fixup_by_path(fdt, path, "local-mac-address", mac_addr, 6, 1);
>> +
>> +    return 0;
>> +}
>> +
>>   int fdt_record_loadable(void *blob, u32 index, const char *name,
>>               uintptr_t load_addr, u32 size, uintptr_t entry_point,
>>               const char *type, const char *os, const char *arch)
>> diff --git a/include/fdt_support.h b/include/fdt_support.h
>> index f6f46bb8e9..3f0bcb5a00 100644
>> --- a/include/fdt_support.h
>> +++ b/include/fdt_support.h
>> @@ -119,6 +119,23 @@ static inline int fdt_fixup_memory_banks(void 
>> *blob, u64 start[], u64 size[],
>>   #endif
>>
>>   void fdt_fixup_ethernet(void *fdt);
>> +
>> +/**
>> + * Set the "mac-address" and "local-mac-address" of ethernet node
>> + * The ethernet node is located from the "/aliases" section of the 
>> fdt. When
>> + * 'ethnum' is positive, then the name is matched exactly, e.g 
>> "ethernet0".
>> + * When ethnum is negative, the first ethernet alias is updated.
>> + * Unlike fdt_fixup_ethernet(), this function only updates one 
>> ethernet node,
>> + * and soes not use the "ethaddr" from the u-boot environment. This 
>> is useful,
>> + * for example, in SPL, when the environment is not initialized or 
>> available.
>> + *
>> + * @param fdt        FDT blob to update
>> + * @param ethnum    Ethernet device index, or negative for any ethernet
>> + * @param mac_addr    Pointer to 6-byte array containing the MAC address
>> + *
>> + * @return 0 if ok, or -FDT_ERR_... on error
>> + */
>> +int fdt_ethernet_set_macaddr(void *fdt, int ethnum, const uint8_t 
>> *mac_addr);
>>   int fdt_find_and_setprop(void *fdt, const char *node, const char *prop,
>>                const void *val, int len, int create);
>>   void fdt_fixup_qe_firmware(void *fdt);
>>

  reply	other threads:[~2021-08-26 23:50 UTC|newest]

Thread overview: 26+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2021-08-26 21:41 [PATCH 00/10] stm32mp1: Support falcon mode with OP-TEE payloads Alexandru Gagniuc
2021-08-26 21:42 ` [PATCH 01/10] stm32mp1: Add support for baudrates higher than 115200 Alexandru Gagniuc
2021-08-31 16:05   ` Patrick DELAUNAY
2021-08-26 21:42 ` [PATCH 02/10] stm32mp1: Add support for falcon mode boot from SD card Alexandru Gagniuc
2021-08-31 16:30   ` Patrick DELAUNAY
2021-08-26 21:42 ` [PATCH 03/10] board: stm32mp1: Implement board_fit_config_name_match() for SPL Alexandru Gagniuc
2021-08-31 16:39   ` Patrick DELAUNAY
2021-08-26 21:42 ` [PATCH 04/10] fdt_support: Implement fdt_ethernet_set_macaddr() Alexandru Gagniuc
2021-08-26 23:35   ` Sean Anderson
2021-08-26 23:50     ` Alex G. [this message]
2021-08-26 21:42 ` [PATCH 05/10] arm: stm32mp: bsec: Do not skip .probe() for SPL Alexandru Gagniuc
2021-08-31 16:54   ` Patrick DELAUNAY
2021-08-26 21:42 ` [PATCH 06/10] arm: stm32mp: Factor out reading MAC address from OTP Alexandru Gagniuc
2021-08-26 21:42 ` [PATCH 07/10] stm32mp1: spl: Configure MAC address when booting OP-TEE Alexandru Gagniuc
2021-08-31 17:10   ` Patrick DELAUNAY
2021-08-31 19:13     ` Alex G.
2021-08-26 21:42 ` [PATCH 08/10] lib: Makefile: Make optee library available in SPL Alexandru Gagniuc
2021-08-31 17:16   ` Patrick DELAUNAY
2021-08-26 21:42 ` [PATCH 09/10] ARM: dts: stm32mp: Add OP-TEE "/firmware" node to SPL dtb Alexandru Gagniuc
2021-08-31 17:27   ` Patrick DELAUNAY
2021-08-26 21:42 ` [PATCH 10/10] stm32mp1: spl: Copy optee nodes to target FDT for OP-TEE payloads Alexandru Gagniuc
2021-08-31 17:24   ` Patrick DELAUNAY
2021-09-01 15:10     ` Alex G.
2021-09-02 17:34       ` Alex G.
2021-09-03  9:51         ` Patrick DELAUNAY
2021-09-02 21:45       ` Etienne Carriere

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=0ab95129-d3bf-39f1-1281-b9c8b71def1f@gmail.com \
    --to=mr.nuke.me@gmail.com \
    --cc=marex@denx.de \
    --cc=patrick.delaunay@foss.st.com \
    --cc=sean.anderson@seco.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 an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.