public inbox for u-boot@lists.denx.de
 help / color / mirror / Atom feed
From: Hans de Goede <hdegoede@redhat.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:29:49 +0100	[thread overview]
Message-ID: <5669541D.4050204@redhat.com> (raw)
In-Reply-To: <1448902213-16227-2-git-send-email-oliver+list@schinagl.nl>

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.

 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
>

  reply	other threads:[~2015-12-10 10:29 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   ` Hans de Goede [this message]
2015-12-10 10:40     ` [U-Boot] [U-Boot, PATCHv1, " Olliver Schinagl
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=5669541D.4050204@redhat.com \
    --to=hdegoede@redhat.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