All of lore.kernel.org
 help / color / mirror / Atom feed
From: Olliver Schinagl <o.schinagl@ultimaker.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [U-Boot, PATCHv1, 1/3] net: Add ability to set MAC address via EEPROM to Kconfig
Date: Thu, 10 Dec 2015 11:40:47 +0100	[thread overview]
Message-ID: <566956AF.40803@ultimaker.com> (raw)
In-Reply-To: <5669541D.4050204@redhat.com>

Hans, Joe,


On 10-12-15 11:29, Hans de Goede wrote:
> Hi Olliver and Joe,
>
> On 11/30/2015 05:50 PM, Oliver Schinagl wrote:
>> From: Olliver Schinagl <o.schinagl@ultimaker.com>
>>
>> This patch allows Kconfig to enable and set parameters to make it
>> possible to read the MAC address from an EEPROM. This patch only sets up
>> some environment variables, it is up to the specific boards to actually
>> use these defines.
>>
>> Besides the various tuneables as to how to access the eeprom (bus,
>> address, addressing mode/length, 2 configurable that are EEPROM generic
>> (e.g. SPI or some other form of access) which are:
>>
>> NET_ETHADDR_EEPROM_OFFSET, indicating where in the EEPROM the start of
>> the MAC address is. The default is 8 allowing for 8 bytes before the MAC
>> for other purposes (header MAGIC for example).
>>
>> NET_ETHADDR_EEPROM_CRC8, indicating the MAC is appended with a CRC8-CCIT
>> checksum that should be verified.
>>
>> Currently only I2C eeproms have been tested and thus only those options
>> are available, but shouldn't be a limit. NET_ETHADDR_EEPROM_SPI can be
>> just as created.
>>
>> Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
>
> Thanks, from a sunxi pov this and the other 2 patches look good.
>
> Joe can we have your ack for this one please and/or can you merge this
> one through your tree? Either way I will take care of the other 2
> patches in this set.
I do intend to make a v2 and one of the things I hoped would bring up 
some discussion is wether to do the CRC with or without the interface 
ID. In this patch I calculate the CRC on 7 bytes, MAC + id, but I kinda 
went back on that and do a mac + crc + id.

Since nobody commented before, I haven't sent the v2 just yet (which 
will include a generator tool).

Any thoughts before merging this on that subject?

Olliver
>
> From my pov this is fine as v2016.01 material, but if you would
> rather postpone this to v2016.04 that is fine too.
>
> Thanks & Regards,
>
> Hans
>
>
>> ---
>>   doc/README.enetaddr | 36 +++++++++++++++++++++++++++++++++
>>   net/Kconfig         | 58 
>> +++++++++++++++++++++++++++++++++++++++++++++++++++++
>>   2 files changed, 94 insertions(+)
>>
>> diff --git a/doc/README.enetaddr b/doc/README.enetaddr
>> index 50e4899..c53b455 100644
>> --- a/doc/README.enetaddr
>> +++ b/doc/README.enetaddr
>> @@ -47,6 +47,42 @@ Correct flow of setting up the MAC address 
>> (summarized):
>>   Previous behavior had the MAC address always being programmed into 
>> hardware
>>   in the device's init() function.
>>
>> +--------
>> + EEPROM
>> +--------
>> +
>> +When there is an EEPROM available on a board, but the EEPROM is not 
>> large enough
>> +to store the whole environment, it may be desired to store a MAC 
>> address in the
>> +onboard EEPROM. Using CONFIG_NET_ETHADDR_EEPROM enables this 
>> feature. Depending
>> +on the board, the EEPROM may be connected on various methods, but 
>> currently,
>> +only the I2C bus is available via CONFIG_NET_ETHADDR_EEPROM_I2C.
>> +CONFIG_NET_ETHADDR_EEPROM_I2C_BUS I2C bus on which the eeprom is 
>> present and
>> +CONFIG_NET_ETHADDR_EEPROM_I2C_ADDR set the address of the EEPROM, which
>> +defaults to the very common 0x50. Small size EEPROM's generally use 
>> single byte
>> +addressing but larger EEPROM's may use double byte addressing, which 
>> can be
>> +configured using CONFIG_NET_ETHADDR_EEPROM_ADDRLEN.
>> +
>> +Within the EEPROM, the MAC address can be stored on any arbitrary 
>> offset,
>> +CONFIG_NET_ETHADDR_EEPROM_OFFSET sets this to 8 as a default 
>> however, allowing
>> +the first 8 bytes to be used for some header magic for example.
>> +
>> +After the 6 bytes used for the MAC address, there is an 8 byte field 
>> to indicate
>> +the ID of the network interface this MAC address is for. 0xff here 
>> means 'for
>> +the first available interface' and 0x00 means the first network 
>> interface, 0x01
>> +the second, etc. It is up to the platform however to enforce this.
>> +
>> +Appending the 6 MAC bytes and the 7th interface byte is a CRC8 byte 
>> over the
>> +previous 7 bytes. Whether to check this CRC8 or not is dependent on
>> +CONFIG_NET_ETHADDR_EEPROM_CRC8.
>> +
>> +Layout example:
>> +
>> +00000000  21 4d 61 67 69 63 2e 21  01 23 45 67 89 ab ff c0 
>> |!Magic.!.#Eg....|
>> +
>> +where the Header magic (!Magic.!) is spread over the first 8 bytes, 
>> and the MAC
>> +address '01-23-45-67-89-ab' for the first interface (0xff) with the 
>> CRC8
>> +checksum 0xc0.
>> +
>>   -------
>>    Usage
>>   -------
>> diff --git a/net/Kconfig b/net/Kconfig
>> index a44a783..aced51e 100644
>> --- a/net/Kconfig
>> +++ b/net/Kconfig
>> @@ -7,6 +7,64 @@ menuconfig NET
>>
>>   if NET
>>
>> +config NET_ETHADDR_EEPROM
>> +    bool "Get ethaddr from eeprom"
>> +    help
>> +      Selecting this will try to get the Ethernet address from an 
>> onboard
>> +      EEPROM and set into the environment if and only if the 
>> environment
>> +      does currently not already hold a MAC address. For more 
>> information
>> +      see doc/README.enetaddr.
>> +
>> +config NET_ETHADDR_EEPROM_I2C
>> +    depends on NET_ETHADDR_EEPROM
>> +    bool "EEPROM on I2C bus"
>> +    help
>> +      This switch enables checks for an EEPROM on the I2C bus. 
>> Naturally
>> +      this will only work if there is an actual EEPROM connected on the
>> +      I2C bus and the bus and device are properly configured via the
>> +      options below.
>> +
>> +config NET_ETHADDR_EEPROM_I2C_BUS
>> +    depends on NET_ETHADDR_EEPROM_I2C
>> +    int "I2C bus"
>> +    default 0
>> +    help
>> +      Select the bus on which the EEPROM is present, defaults to bus 0.
>> +
>> +config NET_ETHADDR_EEPROM_I2C_ADDR
>> +    depends on NET_ETHADDR_EEPROM_I2C
>> +    hex "eeprom address"
>> +    default 0x50
>> +    help
>> +      Select the address of the eeprom, defaults to address 0x50.
>> +
>> +config NET_ETHADDR_EEPROM_I2C_ADDRLEN
>> +    depends on NET_ETHADDR_EEPROM_I2C
>> +    int "eeprom address length"
>> +    default 1
>> +    help
>> +      Number of bytes to be used for the I2C address length. 
>> Typically 1,
>> +      2 for large memories, 0 for register type devices with only one
>> +      register.
>> +
>> +config NET_ETHADDR_EEPROM_OFFSET
>> +    depends on NET_ETHADDR_EEPROM
>> +    int "EEPROM offset"
>> +    default 8
>> +    help
>> +      Select the byte offset of the MAC address within the page,
>> +      defaults to byte 8.
>> +
>> +config NET_ETHADDR_EEPROM_CRC8
>> +    depends on NET_ETHADDR_EEPROM
>> +    bool "Check CRC8 of MAC"
>> +    default y
>> +    help
>> +      Optionally, it is possible to run a CRC-8-CCITT check on the MAC
>> +      address. To do so, the MAC address is stored with a CRC8 byte 
>> append.
>> +      This option enables the CRC check of the MAC address against 
>> the CRC
>> +      byte.
>> +
>>   config NET_RANDOM_ETHADDR
>>       bool "Random ethaddr if unset"
>>       select LIB_RAND
>>

-- 
Met vriendelijke groeten, Kind regards, ??????

Olliver Schinagl
Software Engineer
Research & Development
Ultimaker B.V.

  reply	other threads:[~2015-12-10 10:40 UTC|newest]

Thread overview: 11+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2015-11-30 16:50 [U-Boot] [PATCHv1 0/3] Retrieve MAC address from EEPROM Olliver Schinagl
2015-11-30 16:50 ` [U-Boot] [PATCHv1 1/3] net: Add ability to set MAC address via EEPROM to Kconfig Olliver Schinagl
2015-12-10 10:29   ` [U-Boot] [U-Boot, PATCHv1, " Hans de Goede
2015-12-10 10:40     ` Olliver Schinagl [this message]
2015-12-10 20:25       ` Joe Hershberger
2015-12-14 12:15         ` Olliver Schinagl
2015-12-10 20:26     ` Joe Hershberger
2015-12-11  8:38       ` Hans de Goede
2015-12-10 20:27   ` [U-Boot] [PATCHv1 " Joe Hershberger
2015-11-30 16:50 ` [U-Boot] [PATCHv1 2/3] sunxi: net: Allow the sunxi to set the MAC from an EEPROM Olliver Schinagl
2015-11-30 16:50 ` [U-Boot] [PATCHv1 3/3] sunxi: net: Enable eeprom on OLinuXino Lime2 boards Olliver Schinagl

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=566956AF.40803@ultimaker.com \
    --to=o.schinagl@ultimaker.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.