mirror of
https://github.com/edk2-porting/linux-next.git
synced 2024-12-22 20:23:57 +08:00
amd-xgbe: Add pre/post auto-negotiation phy hooks
Add hooks to the driver auto-negotiation (AN) flow to allow the different phy implementations to perform any steps necessary to improve AN. Signed-off-by: Tom Lendacky <thomas.lendacky@amd.com> Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
parent
a49e2f5d5f
commit
4d945663a6
@ -437,6 +437,9 @@ static void xgbe_an73_disable(struct xgbe_prv_data *pdata)
|
||||
|
||||
static void xgbe_an_restart(struct xgbe_prv_data *pdata)
|
||||
{
|
||||
if (pdata->phy_if.phy_impl.an_pre)
|
||||
pdata->phy_if.phy_impl.an_pre(pdata);
|
||||
|
||||
switch (pdata->an_mode) {
|
||||
case XGBE_AN_MODE_CL73:
|
||||
case XGBE_AN_MODE_CL73_REDRV:
|
||||
@ -453,6 +456,9 @@ static void xgbe_an_restart(struct xgbe_prv_data *pdata)
|
||||
|
||||
static void xgbe_an_disable(struct xgbe_prv_data *pdata)
|
||||
{
|
||||
if (pdata->phy_if.phy_impl.an_post)
|
||||
pdata->phy_if.phy_impl.an_post(pdata);
|
||||
|
||||
switch (pdata->an_mode) {
|
||||
case XGBE_AN_MODE_CL73:
|
||||
case XGBE_AN_MODE_CL73_REDRV:
|
||||
@ -637,11 +643,11 @@ static enum xgbe_an xgbe_an73_incompat_link(struct xgbe_prv_data *pdata)
|
||||
return XGBE_AN_NO_LINK;
|
||||
}
|
||||
|
||||
xgbe_an73_disable(pdata);
|
||||
xgbe_an_disable(pdata);
|
||||
|
||||
xgbe_switch_mode(pdata);
|
||||
|
||||
xgbe_an73_restart(pdata);
|
||||
xgbe_an_restart(pdata);
|
||||
|
||||
return XGBE_AN_INCOMPAT_LINK;
|
||||
}
|
||||
@ -820,6 +826,9 @@ static void xgbe_an37_state_machine(struct xgbe_prv_data *pdata)
|
||||
pdata->an_result = pdata->an_state;
|
||||
pdata->an_state = XGBE_AN_READY;
|
||||
|
||||
if (pdata->phy_if.phy_impl.an_post)
|
||||
pdata->phy_if.phy_impl.an_post(pdata);
|
||||
|
||||
netif_dbg(pdata, link, pdata->netdev, "CL37 AN result: %s\n",
|
||||
xgbe_state_as_string(pdata->an_result));
|
||||
}
|
||||
@ -903,6 +912,9 @@ again:
|
||||
pdata->kx_state = XGBE_RX_BPA;
|
||||
pdata->an_start = 0;
|
||||
|
||||
if (pdata->phy_if.phy_impl.an_post)
|
||||
pdata->phy_if.phy_impl.an_post(pdata);
|
||||
|
||||
netif_dbg(pdata, link, pdata->netdev, "CL73 AN result: %s\n",
|
||||
xgbe_state_as_string(pdata->an_result));
|
||||
}
|
||||
|
@ -833,6 +833,7 @@ struct xgbe_hw_if {
|
||||
/* This structure represents implementation specific routines for an
|
||||
* implementation of a PHY. All routines are required unless noted below.
|
||||
* Optional routines:
|
||||
* an_pre, an_post
|
||||
* kr_training_pre, kr_training_post
|
||||
*/
|
||||
struct xgbe_phy_impl_if {
|
||||
@ -875,6 +876,10 @@ struct xgbe_phy_impl_if {
|
||||
/* Process results of auto-negotiation */
|
||||
enum xgbe_mode (*an_outcome)(struct xgbe_prv_data *);
|
||||
|
||||
/* Pre/Post auto-negotiation support */
|
||||
void (*an_pre)(struct xgbe_prv_data *);
|
||||
void (*an_post)(struct xgbe_prv_data *);
|
||||
|
||||
/* Pre/Post KR training enablement support */
|
||||
void (*kr_training_pre)(struct xgbe_prv_data *);
|
||||
void (*kr_training_post)(struct xgbe_prv_data *);
|
||||
|
Loading…
Reference in New Issue
Block a user