123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228 |
- From afcfdda960da9d9ad4c4d21c7dd0cc7791cf36c7 Mon Sep 17 00:00:00 2001
- From: Madalin Bucur <madalin.bucur@freescale.com>
- Date: Wed, 4 May 2016 19:24:53 +0300
- Subject: [PATCH 29/70] fmd: SGMII PCS needs to be reprogrammed after sleep
- Signed-off-by: Madalin Bucur <madalin.bucur@freescale.com>
- ---
- drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c | 6 ++
- .../freescale/sdk_fman/Peripherals/FM/MAC/dtsec.c | 1 +
- .../freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.c | 12 ++++
- .../freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.h | 1 +
- .../freescale/sdk_fman/Peripherals/FM/MAC/memac.c | 58 +++++++++++---------
- .../freescale/sdk_fman/Peripherals/FM/MAC/tgec.c | 1 +
- .../sdk_fman/inc/Peripherals/fm_mac_ext.h | 13 +++++
- .../sdk_fman/src/inc/wrapper/lnxwrp_fsl_fman.h | 2 +
- .../freescale/sdk_fman/src/wrapper/lnxwrp_fm.c | 14 +++++
- 9 files changed, 83 insertions(+), 25 deletions(-)
- --- a/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
- +++ b/drivers/net/ethernet/freescale/sdk_dpaa/dpaa_eth.c
- @@ -175,6 +175,12 @@ static int dpaa_resume(struct device *de
- priv = netdev_priv(net_dev);
- mac_dev = priv->mac_dev;
-
- + err = fm_mac_resume(mac_dev->get_mac_handle(mac_dev));
- + if (err) {
- + netdev_err(net_dev, "fm_mac_resume = %d\n", err);
- + goto resume_failed;
- + }
- +
- err = fm_port_resume(mac_dev->port_dev[TX]);
- if (err) {
- netdev_err(net_dev, "fm_port_resume(TX) = %d\n", err);
- --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/dtsec.c
- +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/dtsec.c
- @@ -1371,6 +1371,7 @@ static void InitFmMacControllerDriver(t_
-
- p_FmMacControllerDriver->f_FM_MAC_Enable = DtsecEnable;
- p_FmMacControllerDriver->f_FM_MAC_Disable = DtsecDisable;
- + p_FmMacControllerDriver->f_FM_MAC_Resume = NULL;
-
- p_FmMacControllerDriver->f_FM_MAC_SetException = DtsecSetException;
-
- --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.c
- +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.c
- @@ -299,6 +299,18 @@ t_Error FM_MAC_Disable (t_Handle h_FmMac
- RETURN_ERROR(MINOR, E_NOT_SUPPORTED, NO_MSG);
- }
-
- +t_Error FM_MAC_Resume (t_Handle h_FmMac)
- +{
- + t_FmMacControllerDriver *p_FmMacControllerDriver = (t_FmMacControllerDriver *)h_FmMac;
- +
- + SANITY_CHECK_RETURN_ERROR(p_FmMacControllerDriver, E_INVALID_HANDLE);
- +
- + if (p_FmMacControllerDriver->f_FM_MAC_Resume)
- + return p_FmMacControllerDriver->f_FM_MAC_Resume(h_FmMac);
- +
- + return E_OK;
- +}
- +
- /* ......................................................................... */
-
- t_Error FM_MAC_Enable1588TimeStamp (t_Handle h_FmMac)
- --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.h
- +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/fm_mac.h
- @@ -91,6 +91,7 @@ typedef struct {
-
- t_Error (*f_FM_MAC_Enable) (t_Handle h_FmMac, e_CommMode mode);
- t_Error (*f_FM_MAC_Disable) (t_Handle h_FmMac, e_CommMode mode);
- + t_Error (*f_FM_MAC_Resume) (t_Handle h_FmMac);
- t_Error (*f_FM_MAC_Enable1588TimeStamp) (t_Handle h_FmMac);
- t_Error (*f_FM_MAC_Disable1588TimeStamp) (t_Handle h_FmMac);
- t_Error (*f_FM_MAC_Reset) (t_Handle h_FmMac, bool wait);
- --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/memac.c
- +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/memac.c
- @@ -812,6 +812,37 @@ static uint16_t MemacGetMaxFrameLength(t
- return fman_memac_get_max_frame_len(p_Memac->p_MemMap);
- }
-
- +static t_Error MemacInitInternalPhy(t_Handle h_Memac)
- +{
- + t_Memac *p_Memac = (t_Memac *)h_Memac;
- + uint8_t i, phyAddr;
- +
- + if (ENET_INTERFACE_FROM_MODE(p_Memac->enetMode) == e_ENET_IF_SGMII)
- + {
- + /* Configure internal SGMII PHY */
- + if (p_Memac->enetMode & ENET_IF_SGMII_BASEX)
- + SetupSgmiiInternalPhyBaseX(p_Memac, PHY_MDIO_ADDR);
- + else
- + SetupSgmiiInternalPhy(p_Memac, PHY_MDIO_ADDR);
- + }
- + else if (ENET_INTERFACE_FROM_MODE(p_Memac->enetMode) == e_ENET_IF_QSGMII)
- + {
- + /* Configure 4 internal SGMII PHYs */
- + for (i = 0; i < 4; i++)
- + {
- + /* QSGMII PHY address occupies 3 upper bits of 5-bit
- + phyAddress; the lower 2 bits are used to extend
- + register address space and access each one of 4
- + ports inside QSGMII. */
- + phyAddr = (uint8_t)((PHY_MDIO_ADDR << 2) | i);
- + if (p_Memac->enetMode & ENET_IF_SGMII_BASEX)
- + SetupSgmiiInternalPhyBaseX(p_Memac, phyAddr);
- + else
- + SetupSgmiiInternalPhy(p_Memac, phyAddr);
- + }
- + }
- + return E_OK;
- +}
-
- /*****************************************************************************/
- /* mEMAC Init & Free API */
- @@ -825,7 +856,6 @@ static t_Error MemacInit(t_Handle h_Mema
- struct memac_cfg *p_MemacDriverParam;
- enum enet_interface enet_interface;
- enum enet_speed enet_speed;
- - uint8_t i, phyAddr;
- t_EnetAddr ethAddr;
- e_FmMacType portType;
- t_Error err;
- @@ -887,30 +917,7 @@ static t_Error MemacInit(t_Handle h_Mema
- }
- #endif /* FM_RX_FIFO_CORRUPT_ERRATA_10GMAC_A006320 */
-
- - if (ENET_INTERFACE_FROM_MODE(p_Memac->enetMode) == e_ENET_IF_SGMII)
- - {
- - /* Configure internal SGMII PHY */
- - if (p_Memac->enetMode & ENET_IF_SGMII_BASEX)
- - SetupSgmiiInternalPhyBaseX(p_Memac, PHY_MDIO_ADDR);
- - else
- - SetupSgmiiInternalPhy(p_Memac, PHY_MDIO_ADDR);
- - }
- - else if (ENET_INTERFACE_FROM_MODE(p_Memac->enetMode) == e_ENET_IF_QSGMII)
- - {
- - /* Configure 4 internal SGMII PHYs */
- - for (i = 0; i < 4; i++)
- - {
- - /* QSGMII PHY address occupies 3 upper bits of 5-bit
- - phyAddress; the lower 2 bits are used to extend
- - register address space and access each one of 4
- - ports inside QSGMII. */
- - phyAddr = (uint8_t)((PHY_MDIO_ADDR << 2) | i);
- - if (p_Memac->enetMode & ENET_IF_SGMII_BASEX)
- - SetupSgmiiInternalPhyBaseX(p_Memac, phyAddr);
- - else
- - SetupSgmiiInternalPhy(p_Memac, phyAddr);
- - }
- - }
- + MemacInitInternalPhy(h_Memac);
-
- /* Max Frame Length */
- err = FmSetMacMaxFrame(p_Memac->fmMacControllerDriver.h_Fm,
- @@ -1008,6 +1015,7 @@ static void InitFmMacControllerDriver(t_
-
- p_FmMacControllerDriver->f_FM_MAC_Enable = MemacEnable;
- p_FmMacControllerDriver->f_FM_MAC_Disable = MemacDisable;
- + p_FmMacControllerDriver->f_FM_MAC_Resume = MemacInitInternalPhy;
-
- p_FmMacControllerDriver->f_FM_MAC_SetTxAutoPauseFrames = MemacSetTxAutoPauseFrames;
- p_FmMacControllerDriver->f_FM_MAC_SetTxPauseFrames = MemacSetTxPauseFrames;
- --- a/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/tgec.c
- +++ b/drivers/net/ethernet/freescale/sdk_fman/Peripherals/FM/MAC/tgec.c
- @@ -897,6 +897,7 @@ static void InitFmMacControllerDriver(t_
-
- p_FmMacControllerDriver->f_FM_MAC_Enable = TgecEnable;
- p_FmMacControllerDriver->f_FM_MAC_Disable = TgecDisable;
- + p_FmMacControllerDriver->f_FM_MAC_Resume = NULL;
-
- p_FmMacControllerDriver->f_FM_MAC_SetTxAutoPauseFrames = TgecTxMacPause;
- p_FmMacControllerDriver->f_FM_MAC_SetTxPauseFrames = TgecSetTxPauseFrames;
- --- a/drivers/net/ethernet/freescale/sdk_fman/inc/Peripherals/fm_mac_ext.h
- +++ b/drivers/net/ethernet/freescale/sdk_fman/inc/Peripherals/fm_mac_ext.h
- @@ -467,6 +467,19 @@ t_Error FM_MAC_Enable(t_Handle h_FmMac,
- t_Error FM_MAC_Disable(t_Handle h_FmMac, e_CommMode mode);
-
- /**************************************************************************//**
- + @Function FM_MAC_Resume
- +
- + @Description Re-init the MAC after suspend
- +
- + @Param[in] h_FmMac A handle to a FM MAC Module.
- +
- + @Return E_OK on success; Error code otherwise.
- +
- + @Cautions Allowed only following FM_MAC_Init().
- +*//***************************************************************************/
- +t_Error FM_MAC_Resume(t_Handle h_FmMac);
- +
- +/**************************************************************************//**
- @Function FM_MAC_Enable1588TimeStamp
-
- @Description Enables the TSU operation.
- --- a/drivers/net/ethernet/freescale/sdk_fman/src/inc/wrapper/lnxwrp_fsl_fman.h
- +++ b/drivers/net/ethernet/freescale/sdk_fman/src/inc/wrapper/lnxwrp_fsl_fman.h
- @@ -765,6 +765,8 @@ int fm_mac_enable(struct fm_mac_dev *fm_
-
- int fm_mac_disable(struct fm_mac_dev *fm_mac_dev);
-
- +int fm_mac_resume(struct fm_mac_dev *fm_mac_dev);
- +
- int fm_mac_set_promiscuous(struct fm_mac_dev *fm_mac_dev,
- bool enable);
-
- --- a/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c
- +++ b/drivers/net/ethernet/freescale/sdk_fman/src/wrapper/lnxwrp_fm.c
- @@ -1733,6 +1733,20 @@ int fm_mac_disable(struct fm_mac_dev *fm
- }
- EXPORT_SYMBOL(fm_mac_disable);
-
- +int fm_mac_resume(struct fm_mac_dev *fm_mac_dev)
- +{
- + int _errno;
- + t_Error err;
- +
- + err = FM_MAC_Resume(fm_mac_dev);
- + _errno = -GET_ERROR_TYPE(err);
- + if (unlikely(_errno < 0))
- + pr_err("FM_MAC_Resume() = 0x%08x\n", err);
- +
- + return _errno;
- +}
- +EXPORT_SYMBOL(fm_mac_resume);
- +
- int fm_mac_set_promiscuous(struct fm_mac_dev *fm_mac_dev,
- bool enable)
- {
|