[U-Boot] [PATCH v2] rockchip: tinker: set ethaddr in late init
Jonas Karlman
jonas at kwiboo.se
Fri Apr 21 17:05:30 UTC 2017
Hi Simon,
On 2017-04-20 23:04, Simon Glass wrote:
> Hi Jonas,
>
> On 20 April 2017 at 12:23, Jonas Karlman <jonas at kwiboo.se> wrote:
>> Set ethernet mac address in late init for Tinker Board,
>> prevents getting a random mac address each boot.
>>
>> Read mac address from eeprom, first 6 bytes from m24c08 at 50.
>> Same as /etc/init.d/rockchip.sh on Tinker OS.
>>
>> Signed-off-by: Jonas Karlman <jonas at kwiboo.se>
>> ---
>>
>> Changes in v2:
>> - Change to use i2c_eeprom device driver
>>
>> arch/arm/dts/rk3288-tinker.dts | 7 ++++++
>> board/rockchip/tinker_rk3288/tinker-rk3288.c | 33 ++++++++++++++++++++++++++++
>> configs/tinker-rk3288_defconfig | 3 +++
>> 3 files changed, 43 insertions(+)
>>
>> diff --git a/arch/arm/dts/rk3288-tinker.dts b/arch/arm/dts/rk3288-tinker.dts
>> index 22881cb785..ea2f715922 100644
>> --- a/arch/arm/dts/rk3288-tinker.dts
>> +++ b/arch/arm/dts/rk3288-tinker.dts
>> @@ -67,3 +67,10 @@
>> &gpio8 {
>> u-boot,dm-pre-reloc;
>> };
>> +
>> +&i2c2 {
>> + m24c08 at 50 {
>> + compatible = "at,24c08", "i2c-eeprom";
>> + reg = <0x50>;
>> + };
>> +};
>> diff --git a/board/rockchip/tinker_rk3288/tinker-rk3288.c b/board/rockchip/tinker_rk3288/tinker-rk3288.c
>> index 79541a3939..e0e8744599 100644
>> --- a/board/rockchip/tinker_rk3288/tinker-rk3288.c
>> +++ b/board/rockchip/tinker_rk3288/tinker-rk3288.c
>> @@ -5,3 +5,36 @@
>> */
>>
>> #include <common.h>
>> +#include <dm.h>
>> +#include <i2c_eeprom.h>
>> +#include <netdev.h>
>> +
>> +static int get_ethaddr_from_eeprom(u8 *addr)
>> +{
>> + int ret;
>> + struct udevice *dev;
>> + const struct i2c_eeprom_ops *ops;
>> +
>> + ret = uclass_get_device_by_name(UCLASS_I2C_EEPROM, "m24c08 at 50", &dev);
>
> Can you use uclass_first_device_err()? There is probably only one I2C
> eeprom on the board.
I will change to use uclass_first_device_err() in v3.
>
>> + if (ret)
>> + return ret;
>> +
>> + ops = device_get_ops(dev);
>> + if (!ops->read)
>> + return -ENOSYS;
>> +
>> + return ops->read(dev, 0x0, addr, 6);
>
> Unfortunately there is no exported i2c_eeprom_read() / write()
> functions, but there should be. Can you please add these to
> i2c_eeprom.c in a separate patch? The functions should call the
> operation, since things outside a uclass should not access the
> operations directly.
>
> The new functions should be declared in the header file too. See pch.h
> for an example of how to do that.
>
> Then you can call that here.
>
> Sorry for the extra work.
No problem, I will add the missing exported i2c_eeprom_read() / write()
functions in v3.
>
>> +}
>> +
>> +int rk_board_late_init(void)
>> +{
>> + u8 ethaddr[6];
>> +
>> + if (get_ethaddr_from_eeprom(ethaddr))
>> + return 0;
>> +
>> + if (is_valid_ethaddr(ethaddr))
>> + eth_setenv_enetaddr("ethaddr", ethaddr);
>> +
>> + return 0;
>> +}
>> diff --git a/configs/tinker-rk3288_defconfig b/configs/tinker-rk3288_defconfig
>> index cec39384b3..dc3699d5c4 100644
>> --- a/configs/tinker-rk3288_defconfig
>> +++ b/configs/tinker-rk3288_defconfig
>> @@ -11,6 +11,7 @@ CONFIG_CONSOLE_MUX=y
>> # CONFIG_DISPLAY_CPUINFO is not set
>> CONFIG_SPL_STACK_R=y
>> CONFIG_SPL_STACK_R_MALLOC_SIMPLE_LEN=0x2000
>> +CONFIG_SPL_I2C_SUPPORT=y
>> # CONFIG_CMD_IMLS is not set
>> CONFIG_CMD_GPT=y
>> CONFIG_CMD_MMC=y
>> @@ -39,6 +40,8 @@ CONFIG_CLK=y
>> CONFIG_SPL_CLK=y
>> CONFIG_ROCKCHIP_GPIO=y
>> CONFIG_SYS_I2C_ROCKCHIP=y
>> +CONFIG_MISC=y
>> +CONFIG_I2C_EEPROM=y
>> CONFIG_MMC_DW=y
>> CONFIG_MMC_DW_ROCKCHIP=y
>> CONFIG_DM_ETH=y
>> --
>> 2.11.0
>>
>
> Regards,
> Simon
>
Regards,
Jonas
More information about the U-Boot
mailing list