mirror of
https://github.com/brain-hackers/u-boot-brain
synced 2024-08-22 01:48:52 +09:00
![Simon Guinot](/assets/img/avatar_default.png)
The command miiphy_read(name, 0xEE, 0xEE, (u16 *) &devadr) always returns 8 for the PHY address. It is the reset value for the PHY Address Register. Obviously, this default value could be incorrect. Moreover, as the PHY address is well known, there is no need to auto-detect it. Now, the PHY address must given as a parameter to the PHY initialization function. Additionally this patch also fixes some aesthetic issues. Signed-off-by: Simon Guinot <simon.guinot@sequanux.org>
79 lines
2.2 KiB
C
79 lines
2.2 KiB
C
/*
|
|
* Copyright (C) 2011 Simon Guinot <sguinot@lacie.com>
|
|
*
|
|
* This program is free software; you can redistribute it and/or
|
|
* modify it under the terms of the GNU General Public License as
|
|
* published by the Free Software Foundation; either version 2 of
|
|
* the License, or (at your option) any later version.
|
|
*/
|
|
|
|
#include <common.h>
|
|
#include <i2c.h>
|
|
#include <miiphy.h>
|
|
|
|
#if defined(CONFIG_CMD_NET) && defined(CONFIG_RESET_PHY_R)
|
|
|
|
#define MV88E1116_LED_FCTRL_REG 10
|
|
#define MV88E1116_CPRSP_CR3_REG 21
|
|
#define MV88E1116_MAC_CTRL_REG 21
|
|
#define MV88E1116_PGADR_REG 22
|
|
#define MV88E1116_RGMII_TXTM_CTRL (1 << 4)
|
|
#define MV88E1116_RGMII_RXTM_CTRL (1 << 5)
|
|
|
|
void mv_phy_88e1116_init(const char *name, u16 phyaddr)
|
|
{
|
|
u16 reg;
|
|
|
|
if (miiphy_set_current_dev(name))
|
|
return;
|
|
|
|
/*
|
|
* Enable RGMII delay on Tx and Rx for CPU port
|
|
* Ref: sec 4.7.2 of chip datasheet
|
|
*/
|
|
miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 2);
|
|
miiphy_read(name, phyaddr, MV88E1116_MAC_CTRL_REG, ®);
|
|
reg |= (MV88E1116_RGMII_RXTM_CTRL | MV88E1116_RGMII_TXTM_CTRL);
|
|
miiphy_write(name, phyaddr, MV88E1116_MAC_CTRL_REG, reg);
|
|
miiphy_write(name, phyaddr, MV88E1116_PGADR_REG, 0);
|
|
|
|
if (miiphy_reset(name, phyaddr) == 0)
|
|
printf("88E1116 Initialized on %s\n", name);
|
|
}
|
|
#endif /* CONFIG_CMD_NET && CONFIG_RESET_PHY_R */
|
|
|
|
#if defined(CONFIG_CMD_I2C) && defined(CONFIG_SYS_I2C_EEPROM_ADDR)
|
|
int lacie_read_mac_address(uchar *mac_addr)
|
|
{
|
|
int ret;
|
|
ushort version;
|
|
|
|
/* I2C-0 for on-board EEPROM */
|
|
i2c_set_bus_num(0);
|
|
|
|
/* Check layout version for EEPROM data */
|
|
ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 0,
|
|
CONFIG_SYS_I2C_EEPROM_ADDR_LEN,
|
|
(uchar *) &version, 2);
|
|
if (ret != 0) {
|
|
printf("Error: failed to read I2C EEPROM @%02x\n",
|
|
CONFIG_SYS_I2C_EEPROM_ADDR);
|
|
return ret;
|
|
}
|
|
version = be16_to_cpu(version);
|
|
if (version < 1 || version > 3) {
|
|
printf("Error: unknown version %d for EEPROM data\n",
|
|
version);
|
|
return -1;
|
|
}
|
|
|
|
/* Read Ethernet MAC address from EEPROM */
|
|
ret = i2c_read(CONFIG_SYS_I2C_EEPROM_ADDR, 2,
|
|
CONFIG_SYS_I2C_EEPROM_ADDR_LEN, mac_addr, 6);
|
|
if (ret != 0)
|
|
printf("Error: failed to read I2C EEPROM @%02x\n",
|
|
CONFIG_SYS_I2C_EEPROM_ADDR);
|
|
return ret;
|
|
}
|
|
#endif /* CONFIG_CMD_I2C && CONFIG_SYS_I2C_EEPROM_ADDR */
|