From: Olliver Schinagl <o.schinagl@ultimaker.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v2 2/5] sunxi: net: Allow the sunxi to set the MAC from an EEPROM
Date: Tue, 26 Jan 2016 17:10:33 +0100 [thread overview]
Message-ID: <56A79A79.4040508@ultimaker.com> (raw)
In-Reply-To: <CANr=Z=Z_w06tZPpAOWXMx90HWHMXZn-OGoh=D84h8-QyA951aA@mail.gmail.com>
Hey Joe
On 26-01-16 01:32, Joe Hershberger wrote:
> On Mon, Dec 14, 2015 at 6:41 AM, Olliver Schinagl
> <o.schinagl@ultimaker.com> wrote:
>> This patch uses the newly introduced Kconfig options to set the MAC
>> address from an EEPROM, this will be especially useful for the Olimex
>> OLinuXino series of sunxi boards as they all have an 2k i2c eeprom chip.
>>
>> The MAC address is in the eeprom is ignored if there is already a MAC
> "The MAC address in the eeprom is ignored..."
oops :) fixed for v3
>
>> address in the environment or (if enabled) the CRC8 check fails.
>>
>> Signed-off-by: Olliver Schinagl <o.schinagl@ultimaker.com>
>> ---
>> board/sunxi/Kconfig | 4 ++++
>> board/sunxi/board.c | 36 ++++++++++++++++++++++++++++++++++++
>> net/Kconfig | 1 +
>> 3 files changed, 41 insertions(+)
>>
>> diff --git a/board/sunxi/Kconfig b/board/sunxi/Kconfig
>> index 2dd9d3b..a2da3a6 100644
>> --- a/board/sunxi/Kconfig
>> +++ b/board/sunxi/Kconfig
>> @@ -339,18 +339,21 @@ config I2C0_ENABLE
>>
>> config I2C1_ENABLE
>> bool "Enable I2C/TWI controller 1"
>> + default y if (NET_ETHADDR_EEPROM_I2C_BUS = 1)
>> default n
>> ---help---
>> See I2C0_ENABLE help text.
>>
>> config I2C2_ENABLE
>> bool "Enable I2C/TWI controller 2"
>> + default y if NET_ETHADDR_EEPROM_I2C_BUS = 2
>> default n
>> ---help---
>> See I2C0_ENABLE help text.
>>
>> if MACH_SUN6I || MACH_SUN7I
>> config I2C3_ENABLE
>> + default y if NET_ETHADDR_EEPROM_I2C_BUS = 3
>> bool "Enable I2C/TWI controller 3"
>> default n
>> ---help---
>> @@ -359,6 +362,7 @@ endif
>>
>> if MACH_SUN7I
>> config I2C4_ENABLE
>> + default y if NET_ETHADDR_EEPROM_I2C_BUS = 4
>> bool "Enable I2C/TWI controller 4"
>> default n
>> ---help---
>> diff --git a/board/sunxi/board.c b/board/sunxi/board.c
>> index 6ac398c..28310a2 100644
>> --- a/board/sunxi/board.c
>> +++ b/board/sunxi/board.c
>> @@ -12,6 +12,7 @@
>> */
>>
>> #include <common.h>
>> +#include <i2c.h>
>> #include <mmc.h>
>> #include <axp_pmic.h>
>> #include <asm/arch/clock.h>
>> @@ -23,6 +24,7 @@
>> #include <asm/arch/usb_phy.h>
>> #include <asm/gpio.h>
>> #include <asm/io.h>
>> +#include <linux/crc8.h>
>> #include <nand.h>
>> #include <net.h>
>>
>> @@ -510,6 +512,37 @@ void get_board_serial(struct tag_serialnr *serialnr)
>> }
>> #endif
>>
>> +#if defined(CONFIG_NET_ETHADDR_EEPROM) && defined(CONFIG_NET_ETHADDR_EEPROM_I2C)
>> +static int read_mac_from_eeprom(uint8_t *mac_addr)
>> +{
>> + uint8_t eeprom[7];
>> + int old_i2c_bus;
>> +
>> + old_i2c_bus = i2c_get_bus_num();
>> + i2c_set_bus_num(CONFIG_NET_ETHADDR_EEPROM_I2C_BUS);
>> + if (i2c_read(CONFIG_NET_ETHADDR_EEPROM_I2C_ADDR,
>> + CONFIG_NET_ETHADDR_EEPROM_OFFSET,
>> + CONFIG_NET_ETHADDR_EEPROM_I2C_ADDRLEN,
>> + eeprom, 7)) {
>> + i2c_set_bus_num(old_i2c_bus);
>> + puts("Could not read the EEPROM; EEPROM missing?\n");
>> + return -1;
>> + }
>> + i2c_set_bus_num(old_i2c_bus);
>> +#ifdef CONFIG_NET_ETHADDR_EEPROM_CRC8
>> + if (crc8(eeprom, 6) != eeprom[6]) {
>> + puts("CRC error on MAC address from EEPROM.\n");
>> + return -1;
>> + }
>> +#endif
>> + memcpy(mac_addr, eeprom, 6);
>> +
>> + return 0;
>> +}
>> +#else
>> +static int read_mac_from_eeprom(uint8_t *mac_addr) { return -1; }
>> +#endif
>> +
>> #if !defined(CONFIG_SPL_BUILD)
>> #include <asm/arch/spl.h>
>>
>> @@ -553,6 +586,9 @@ int misc_init_r(void)
>> }
>> #endif
>>
>> + if ((!getenv("ethaddr")) && (!read_mac_from_eeprom(mac_addr)))
>> + eth_setenv_enetaddr("ethaddr", mac_addr);
> It seems a bit odd to actually write this to the environment instead
> of it being a read_rom_hwaddr operation for the Ethernet driver that
> this board uses.
>
> Do we need a different board-level ROM callback? Maybe the drivers
> used in such situations can be the only ones to support it.
I'm hoping your thinking out-loud, as I'm not too familiar with all the
backing code. But if I understand you correctly, you suggest to
implement a new callback for ethernet drivers to get mac's from eeprom?
Anyhow, I just followed suit with how the address gets set in case of
when it is not in the environment and we need to generate a random one.
I was reading the u-boot documentation and though the assumed method was
to use the environment and to only use other methods (such as the eeprom
method) where it is absolutely a must. In this case the eeprom is not
directly related to the ethernet, it's a generic eeprom.
But then again, I am new to this stuff so I can be gladly very wrong here :)
>
>> +
>> ret = sunxi_get_sid(sid);
>> if (ret == 0 && sid[0] != 0 && sid[3] != 0) {
>> if (!getenv("ethaddr")) {
>> diff --git a/net/Kconfig b/net/Kconfig
>> index aced51e..0f4cc5a 100644
>> --- a/net/Kconfig
>> +++ b/net/Kconfig
>> @@ -8,6 +8,7 @@ menuconfig NET
>> if NET
>>
>> config NET_ETHADDR_EEPROM
>> + depends on ARCH_SUNXI
>> bool "Get ethaddr from eeprom"
>> help
>> Selecting this will try to get the Ethernet address from an onboard
>> --
>> 2.6.2
>>
>> _______________________________________________
>> U-Boot mailing list
>> U-Boot at lists.denx.de
>> http://lists.denx.de/mailman/listinfo/u-boot
--
Met vriendelijke groeten, Kind regards, ??????
Olliver Schinagl
Software Engineer
Research & Development
Ultimaker B.V.
next prev parent reply other threads:[~2016-01-26 16:10 UTC|newest]
Thread overview: 24+ messages / expand[flat|nested] mbox.gz Atom feed top
2015-12-14 12:41 [U-Boot] [PATCH v2 0/5] Retrieve MAC address from EEPROM Olliver Schinagl
2015-12-14 12:41 ` [U-Boot] [PATCH v2 1/5] net: Add ability to set MAC address via EEPROM to Kconfig Olliver Schinagl
2016-01-25 22:59 ` Joe Hershberger
2015-12-14 12:41 ` [U-Boot] [PATCH v2 2/5] sunxi: net: Allow the sunxi to set the MAC from an EEPROM Olliver Schinagl
2016-01-26 0:32 ` Joe Hershberger
2016-01-26 16:10 ` Olliver Schinagl [this message]
2016-01-26 16:23 ` Joe Hershberger
2016-01-26 16:35 ` Olliver Schinagl
2016-01-26 17:57 ` Joe Hershberger
2015-12-14 12:41 ` [U-Boot] [PATCH v2 3/5] sunxi: net: Enable eeprom on OLinuXino Lime2 boards Olliver Schinagl
2016-01-26 0:34 ` Joe Hershberger
2016-01-26 16:11 ` Olliver Schinagl
2015-12-14 12:41 ` [U-Boot] [PATCH v2 4/5] tools: Allow crc8 to be used Olliver Schinagl
2016-01-26 0:36 ` Joe Hershberger
2015-12-14 12:41 ` [U-Boot] [PATCH v2 5/5] tools: Add tool to add crc8 to a mac address Olliver Schinagl
2016-01-26 0:45 ` Joe Hershberger
2016-01-26 13:15 ` Albert ARIBAUD
2016-01-26 14:56 ` Joe Hershberger
2016-01-26 16:31 ` Olliver Schinagl
2016-01-26 18:01 ` Joe Hershberger
2016-01-26 16:27 ` Olliver Schinagl
2016-01-26 16:31 ` Joe Hershberger
2016-01-26 16:36 ` Olliver Schinagl
2016-01-26 17:58 ` Joe Hershberger
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=56A79A79.4040508@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.