net: phy: add support for TI DP83561-SP phy

Add support for the TI DP83561-SP Gigabit ethernet phy device.

The dp83561-sp is a radiation hardened space grade gigabit ethernet
PHY. It has been tested for single event latch upto 121 MeV, the
critical reliability parameter for space designs. It interfaces directly to
twisted pair media through an external transformer. And the device also
interfaces directly to the MAC layer through Reduced GMII (RGMII) and MII.

DP83867, DP83869 and DP83561-SP, all these parts support 1000Base-T/
100Base-TX/ and 10Base-Te standards and have similar register map for
the core functionality.

The data sheet for this part is at https://www.ti.com/product/DP83561-SP

Signed-off-by: Hari Nagalla <hnagalla@ti.com>
Signed-off-by: Geet Modi <geet.modi@ti.com>
Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Link: https://lore.kernel.org/r/20211118102532.9835-1-hnagalla@ti.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
Hari Nagalla 2021-11-18 04:25:32 -06:00 committed by Jakub Kicinski
parent d9f31aeaa1
commit 1388d4ad9d
1 changed files with 23 additions and 21 deletions

View File

@ -16,6 +16,7 @@
#include <dt-bindings/net/ti-dp83869.h>
#define DP83869_PHY_ID 0x2000a0f1
#define DP83561_PHY_ID 0x2000a1a4
#define DP83869_DEVADDR 0x1f
#define MII_DP83869_PHYCTRL 0x10
@ -878,34 +879,35 @@ static int dp83869_phy_reset(struct phy_device *phydev)
return dp83869_config_init(phydev);
}
#define DP83869_PHY_DRIVER(_id, _name) \
{ \
PHY_ID_MATCH_MODEL(_id), \
.name = (_name), \
.probe = dp83869_probe, \
.config_init = dp83869_config_init, \
.soft_reset = dp83869_phy_reset, \
.config_intr = dp83869_config_intr, \
.handle_interrupt = dp83869_handle_interrupt, \
.read_status = dp83869_read_status, \
.get_tunable = dp83869_get_tunable, \
.set_tunable = dp83869_set_tunable, \
.get_wol = dp83869_get_wol, \
.set_wol = dp83869_set_wol, \
.suspend = genphy_suspend, \
.resume = genphy_resume, \
}
static struct phy_driver dp83869_driver[] = {
{
PHY_ID_MATCH_MODEL(DP83869_PHY_ID),
.name = "TI DP83869",
DP83869_PHY_DRIVER(DP83869_PHY_ID, "TI DP83869"),
DP83869_PHY_DRIVER(DP83561_PHY_ID, "TI DP83561-SP"),
.probe = dp83869_probe,
.config_init = dp83869_config_init,
.soft_reset = dp83869_phy_reset,
/* IRQ related */
.config_intr = dp83869_config_intr,
.handle_interrupt = dp83869_handle_interrupt,
.read_status = dp83869_read_status,
.get_tunable = dp83869_get_tunable,
.set_tunable = dp83869_set_tunable,
.get_wol = dp83869_get_wol,
.set_wol = dp83869_set_wol,
.suspend = genphy_suspend,
.resume = genphy_resume,
},
};
module_phy_driver(dp83869_driver);
static struct mdio_device_id __maybe_unused dp83869_tbl[] = {
{ PHY_ID_MATCH_MODEL(DP83869_PHY_ID) },
{ PHY_ID_MATCH_MODEL(DP83561_PHY_ID) },
{ }
};
MODULE_DEVICE_TABLE(mdio, dp83869_tbl);