summaryrefslogtreecommitdiffstats
path: root/libs
diff options
context:
space:
mode:
authorEvan Lojewski <github@meklort.com>2020-11-19 19:23:06 -0700
committerGitHub <noreply@github.com>2020-11-19 19:23:06 -0700
commitd2a90411c94cc8ea175b879d16a30705d206ae84 (patch)
tree8efef70894947fae30970aaa2cbcd63882014c50 /libs
parent5520cf3dff14b3805fafafbfc05853a03aeafcfc (diff)
downloadbcm5719-ortega-d2a90411c94cc8ea175b879d16a30705d206ae84.tar.gz
bcm5719-ortega-d2a90411c94cc8ea175b879d16a30705d206ae84.zip
ape: Reset the network interface any time the APE mode is incorrect. (#173)
In certain situations, such as a driver unload, the APE mode can be reset. This adds APE.mode to the current state change check to enable early recovery from events such as a driver unload.
Diffstat (limited to 'libs')
-rw-r--r--libs/Network/include/Network.h1
-rw-r--r--libs/Network/ports.c17
2 files changed, 18 insertions, 0 deletions
diff --git a/libs/Network/include/Network.h b/libs/Network/include/Network.h
index 0d13a90..ec57a17 100644
--- a/libs/Network/include/Network.h
+++ b/libs/Network/include/Network.h
@@ -111,6 +111,7 @@ void Network_resetRX(NetworkPort_t *port, reload_type_t reset_phy);
void Network_checkPortState(NetworkPort_t *port);
bool Network_updatePortState(NetworkPort_t *port);
+bool Network_checkEnableState(NetworkPort_t *port);
bool Network_isLinkUp(NetworkPort_t *port);
void Network_resetLink(NetworkPort_t *port);
diff --git a/libs/Network/ports.c b/libs/Network/ports.c
index 0e93bf9..460d2d4 100644
--- a/libs/Network/ports.c
+++ b/libs/Network/ports.c
@@ -846,6 +846,23 @@ void Network_resetRX(NetworkPort_t *port, reload_type_t reset_phy)
}
}
+bool Network_checkEnableState(NetworkPort_t *port)
+{
+ // Ensure APE mode is set properly
+ if ((APE.Mode.r32 & port->APEModeEnable.r32) != port->APEModeEnable.r32)
+ {
+ return false;
+ }
+
+ // Ensure APE mode2 is set properly
+ if ((APE.Mode2.r32 & port->APEMode2Enable.r32) != port->APEMode2Enable.r32)
+ {
+ return false;
+ }
+
+ return true;
+}
+
void Network_InitPort(NetworkPort_t *port, reload_type_t reset_phy)
{
RegMIIStatus_t stat;
OpenPOWER on IntegriCloud