net: mtk_eth_soc: provide mtk_sgmii_config()
Provide mtk_sgmii_config() to wrap up the decisions about which SGMII configuration will be called. Signed-off-by: Russell King (Oracle) <rmk+kernel@armlinux.org.uk> Signed-off-by: Jakub Kicinski <kuba@kernel.org>
This commit is contained in:
parent
4ce5a0bd39
commit
1ec619ee4a
3 changed files with 20 additions and 12 deletions
|
|
@ -388,12 +388,7 @@ static void mtk_mac_config(struct phylink_config *config, unsigned int mode,
|
|||
0 : mac->id;
|
||||
|
||||
/* Setup SGMIISYS with the determined property */
|
||||
if (state->interface != PHY_INTERFACE_MODE_SGMII)
|
||||
err = mtk_sgmii_setup_mode_force(eth->sgmii, sid,
|
||||
state->interface);
|
||||
else if (phylink_autoneg_inband(mode))
|
||||
err = mtk_sgmii_setup_mode_an(eth->sgmii, sid);
|
||||
|
||||
err = mtk_sgmii_config(eth->sgmii, sid, mode, state->interface);
|
||||
if (err)
|
||||
goto init_err;
|
||||
|
||||
|
|
|
|||
|
|
@ -1014,9 +1014,8 @@ u32 mtk_r32(struct mtk_eth *eth, unsigned reg);
|
|||
|
||||
int mtk_sgmii_init(struct mtk_sgmii *ss, struct device_node *np,
|
||||
u32 ana_rgc3);
|
||||
int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id);
|
||||
int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
|
||||
phy_interface_t interface);
|
||||
int mtk_sgmii_config(struct mtk_sgmii *ss, int id, unsigned int mode,
|
||||
phy_interface_t interface);
|
||||
void mtk_sgmii_link_up(struct mtk_sgmii *ss, int id, int speed, int duplex);
|
||||
void mtk_sgmii_restart_an(struct mtk_eth *eth, int mac_id);
|
||||
|
||||
|
|
|
|||
|
|
@ -35,7 +35,7 @@ int mtk_sgmii_init(struct mtk_sgmii *ss, struct device_node *r, u32 ana_rgc3)
|
|||
}
|
||||
|
||||
/* For SGMII interface mode */
|
||||
int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id)
|
||||
static int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
|
|
@ -64,8 +64,8 @@ int mtk_sgmii_setup_mode_an(struct mtk_sgmii *ss, int id)
|
|||
/* For 1000BASE-X and 2500BASE-X interface modes, which operate at a
|
||||
* fixed speed.
|
||||
*/
|
||||
int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
|
||||
phy_interface_t interface)
|
||||
static int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
unsigned int val;
|
||||
|
||||
|
|
@ -97,6 +97,20 @@ int mtk_sgmii_setup_mode_force(struct mtk_sgmii *ss, int id,
|
|||
return 0;
|
||||
}
|
||||
|
||||
int mtk_sgmii_config(struct mtk_sgmii *ss, int id, unsigned int mode,
|
||||
phy_interface_t interface)
|
||||
{
|
||||
int err = 0;
|
||||
|
||||
/* Setup SGMIISYS with the determined property */
|
||||
if (interface != PHY_INTERFACE_MODE_SGMII)
|
||||
err = mtk_sgmii_setup_mode_force(ss, id, interface);
|
||||
else if (phylink_autoneg_inband(mode))
|
||||
err = mtk_sgmii_setup_mode_an(ss, id);
|
||||
|
||||
return err;
|
||||
}
|
||||
|
||||
/* For 1000BASE-X and 2500BASE-X interface modes */
|
||||
void mtk_sgmii_link_up(struct mtk_sgmii *ss, int id, int speed, int duplex)
|
||||
{
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue