mirror of
https://github.com/AsahiLinux/u-boot
synced 2024-11-24 21:54:01 +00:00
net/phy/cortina: Add support for CS4223 PHY
Add support for Cortina CS4223 10G PHY - As per the CS4223 specs, an EEPROM module is connected to the PHY. At startup the PHY reads the firmware line and tries to load the firmware into the internal memory. - This driver reads the EEPROM status and checks if firmware has been loaded Signed-off-by: Vicentiu Galanopulo <vicentiu.galanopulo@nxp.com> Acked-by: Joe Hershberger <joe.hershberger@ni.com>
This commit is contained in:
parent
6e35686d89
commit
552e7c57d0
3 changed files with 52 additions and 1 deletions
|
@ -284,6 +284,38 @@ int cs4340_startup(struct phy_device *phydev)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int cs4223_phy_init(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
int reg_value;
|
||||||
|
|
||||||
|
reg_value = phy_read(phydev, 0x00, CS4223_EEPROM_STATUS);
|
||||||
|
if (!(reg_value & CS4223_EEPROM_FIRMWARE_LOADDONE)) {
|
||||||
|
printf("%s CS4223 Firmware not present in EERPOM\n", __func__);
|
||||||
|
return -ENOSYS;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cs4223_config(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
return cs4223_phy_init(phydev);
|
||||||
|
}
|
||||||
|
|
||||||
|
int cs4223_probe(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
phydev->flags = PHY_FLAG_BROKEN_RESET;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int cs4223_startup(struct phy_device *phydev)
|
||||||
|
{
|
||||||
|
phydev->link = 1;
|
||||||
|
phydev->speed = SPEED_10000;
|
||||||
|
phydev->duplex = DUPLEX_FULL;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
struct phy_driver cs4340_driver = {
|
struct phy_driver cs4340_driver = {
|
||||||
.name = "Cortina CS4315/CS4340",
|
.name = "Cortina CS4315/CS4340",
|
||||||
.uid = PHY_UID_CS4340,
|
.uid = PHY_UID_CS4340,
|
||||||
|
@ -298,9 +330,23 @@ struct phy_driver cs4340_driver = {
|
||||||
.shutdown = &gen10g_shutdown,
|
.shutdown = &gen10g_shutdown,
|
||||||
};
|
};
|
||||||
|
|
||||||
|
struct phy_driver cs4223_driver = {
|
||||||
|
.name = "Cortina CS4223",
|
||||||
|
.uid = PHY_UID_CS4223,
|
||||||
|
.mask = 0x0ffff00f,
|
||||||
|
.features = PHY_10G_FEATURES,
|
||||||
|
.mmds = (MDIO_DEVS_PMAPMD | MDIO_DEVS_PCS |
|
||||||
|
MDIO_DEVS_AN),
|
||||||
|
.config = &cs4223_config,
|
||||||
|
.probe = &cs4223_probe,
|
||||||
|
.startup = &cs4223_startup,
|
||||||
|
.shutdown = &gen10g_shutdown,
|
||||||
|
};
|
||||||
|
|
||||||
int phy_cortina_init(void)
|
int phy_cortina_init(void)
|
||||||
{
|
{
|
||||||
phy_register(&cs4340_driver);
|
phy_register(&cs4340_driver);
|
||||||
|
phy_register(&cs4223_driver);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -319,7 +365,7 @@ int get_phy_id(struct mii_dev *bus, int addr, int devad, u32 *phy_id)
|
||||||
return -EIO;
|
return -EIO;
|
||||||
*phy_id |= (phy_reg & 0xffff);
|
*phy_id |= (phy_reg & 0xffff);
|
||||||
|
|
||||||
if (*phy_id == PHY_UID_CS4340)
|
if ((*phy_id == PHY_UID_CS4340) || (*phy_id == PHY_UID_CS4223))
|
||||||
return 0;
|
return 0;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
|
|
@ -64,6 +64,10 @@
|
||||||
#define VILLA_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLA 0x427
|
#define VILLA_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLA 0x427
|
||||||
#define VILLA_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLB 0x428
|
#define VILLA_LINE_SDS_COMMON_STX0_TX_OUTPUT_CTRLB 0x428
|
||||||
|
|
||||||
|
/* Cortina CS4223 */
|
||||||
|
#define CS4223_EEPROM_STATUS 0x5001
|
||||||
|
#define CS4223_EEPROM_FIRMWARE_LOADDONE 0x1
|
||||||
|
|
||||||
#define mseq_edc_bist_done (0x1<<0)
|
#define mseq_edc_bist_done (0x1<<0)
|
||||||
#define mseq_edc_bist_fail (0x1<<8)
|
#define mseq_edc_bist_fail (0x1<<8)
|
||||||
|
|
||||||
|
|
|
@ -314,6 +314,7 @@ static inline bool phy_interface_is_sgmii(struct phy_device *phydev)
|
||||||
|
|
||||||
/* PHY UIDs for various PHYs that are referenced in external code */
|
/* PHY UIDs for various PHYs that are referenced in external code */
|
||||||
#define PHY_UID_CS4340 0x13e51002
|
#define PHY_UID_CS4340 0x13e51002
|
||||||
|
#define PHY_UID_CS4223 0x03e57003
|
||||||
#define PHY_UID_TN2020 0x00a19410
|
#define PHY_UID_TN2020 0x00a19410
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
Loading…
Reference in a new issue