Merge branch 'mvpp2-phylink-conversion'
Antoine Tenart says: ==================== net: mvpp2: phylink conversion This series convert the Marvell PPv2 driver to phylink (models the MAC to PHY link). One important point is the PPv2 driver supports two probe modes: device tree and ACPI. This series only brings phylink support for the device tree mode, as the ACPI one will need further work. Still, the driver should be working as before when using ACPI. This split should be temporary, and was discussed with Marcin (in Cc.) who added ACPI support to the driver. Also as the SFP cages on both DB boards can be considered as non-wired. We thus chose not to describe those SFP cages and we use fixed-link. The rest of the series uses phylink to add support for 1000BaseX and 2500BaseX modes in the PPv2 driver. To do this, two patches are needed in the common PHY framework (patches 3 and 4). The last 4 patches modify the device tree to use the new PPv2 functionalities. The series has been tested for the device tree mode on the 7040-db, 8040-db and 8040-mcbin boards, to ensure all the interface where working as expected. @Dave: patches 7 to 10 should go through the mvebu tree (Gregory in Cc.) to avoid any conflict with the other mvebu dt patches taken during this cycle. The series is based on today's net-next. Since v2: - Removed the SFP description from the DB boards, as their SFP cages are wired properly. We now use fixed-link. - Because of this rework, split the series in two, so that the SFP part is reviewed separately. - Small fixes in the phylink patch. - Rebased on the latest net-next branch. Since v1: - Chose a different approach to the SFP changes, as the previous ones weren't valid and reworked both BD boards device trees. - Misc fixes. - Added Kishon's acked-by on one patch. - Rebaed on latest net-next branch. ==================== Signed-off-by: David S. Miller <davem@davemloft.net>
This commit is contained in:
commit
808e2fc3b0
|
@ -86,6 +86,7 @@ config MVPP2
|
|||
depends on ARCH_MVEBU || COMPILE_TEST
|
||||
depends on HAS_DMA
|
||||
select MVMDIO
|
||||
select PHYLINK
|
||||
---help---
|
||||
This driver supports the network interface units in the
|
||||
Marvell ARMADA 375, 7K and 8K SoCs.
|
||||
|
|
File diff suppressed because it is too large
Load Diff
|
@ -135,19 +135,25 @@ struct mvebu_comhy_conf {
|
|||
static const struct mvebu_comhy_conf mvebu_comphy_cp110_modes[] = {
|
||||
/* lane 0 */
|
||||
MVEBU_COMPHY_CONF(0, 1, PHY_MODE_SGMII, 0x1),
|
||||
MVEBU_COMPHY_CONF(0, 1, PHY_MODE_2500SGMII, 0x1),
|
||||
/* lane 1 */
|
||||
MVEBU_COMPHY_CONF(1, 2, PHY_MODE_SGMII, 0x1),
|
||||
MVEBU_COMPHY_CONF(1, 2, PHY_MODE_2500SGMII, 0x1),
|
||||
/* lane 2 */
|
||||
MVEBU_COMPHY_CONF(2, 0, PHY_MODE_SGMII, 0x1),
|
||||
MVEBU_COMPHY_CONF(2, 0, PHY_MODE_2500SGMII, 0x1),
|
||||
MVEBU_COMPHY_CONF(2, 0, PHY_MODE_10GKR, 0x1),
|
||||
/* lane 3 */
|
||||
MVEBU_COMPHY_CONF(3, 1, PHY_MODE_SGMII, 0x2),
|
||||
MVEBU_COMPHY_CONF(3, 1, PHY_MODE_2500SGMII, 0x2),
|
||||
/* lane 4 */
|
||||
MVEBU_COMPHY_CONF(4, 0, PHY_MODE_SGMII, 0x2),
|
||||
MVEBU_COMPHY_CONF(4, 0, PHY_MODE_2500SGMII, 0x2),
|
||||
MVEBU_COMPHY_CONF(4, 0, PHY_MODE_10GKR, 0x2),
|
||||
MVEBU_COMPHY_CONF(4, 1, PHY_MODE_SGMII, 0x1),
|
||||
/* lane 5 */
|
||||
MVEBU_COMPHY_CONF(5, 2, PHY_MODE_SGMII, 0x1),
|
||||
MVEBU_COMPHY_CONF(5, 2, PHY_MODE_2500SGMII, 0x1),
|
||||
};
|
||||
|
||||
struct mvebu_comphy_priv {
|
||||
|
@ -206,6 +212,10 @@ static void mvebu_comphy_ethernet_init_reset(struct mvebu_comphy_lane *lane,
|
|||
if (mode == PHY_MODE_10GKR)
|
||||
val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX(0xe) |
|
||||
MVEBU_COMPHY_SERDES_CFG0_GEN_TX(0xe);
|
||||
else if (mode == PHY_MODE_2500SGMII)
|
||||
val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX(0x8) |
|
||||
MVEBU_COMPHY_SERDES_CFG0_GEN_TX(0x8) |
|
||||
MVEBU_COMPHY_SERDES_CFG0_HALF_BUS;
|
||||
else if (mode == PHY_MODE_SGMII)
|
||||
val |= MVEBU_COMPHY_SERDES_CFG0_GEN_RX(0x6) |
|
||||
MVEBU_COMPHY_SERDES_CFG0_GEN_TX(0x6) |
|
||||
|
@ -296,13 +306,13 @@ static int mvebu_comphy_init_plls(struct mvebu_comphy_lane *lane,
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int mvebu_comphy_set_mode_sgmii(struct phy *phy)
|
||||
static int mvebu_comphy_set_mode_sgmii(struct phy *phy, enum phy_mode mode)
|
||||
{
|
||||
struct mvebu_comphy_lane *lane = phy_get_drvdata(phy);
|
||||
struct mvebu_comphy_priv *priv = lane->priv;
|
||||
u32 val;
|
||||
|
||||
mvebu_comphy_ethernet_init_reset(lane, PHY_MODE_SGMII);
|
||||
mvebu_comphy_ethernet_init_reset(lane, mode);
|
||||
|
||||
val = readl(priv->base + MVEBU_COMPHY_RX_CTRL1(lane->id));
|
||||
val &= ~MVEBU_COMPHY_RX_CTRL1_CLK8T_EN;
|
||||
|
@ -487,7 +497,8 @@ static int mvebu_comphy_power_on(struct phy *phy)
|
|||
|
||||
switch (lane->mode) {
|
||||
case PHY_MODE_SGMII:
|
||||
ret = mvebu_comphy_set_mode_sgmii(phy);
|
||||
case PHY_MODE_2500SGMII:
|
||||
ret = mvebu_comphy_set_mode_sgmii(phy, lane->mode);
|
||||
break;
|
||||
case PHY_MODE_10GKR:
|
||||
ret = mvebu_comphy_set_mode_10gkr(phy);
|
||||
|
|
|
@ -36,6 +36,7 @@ enum phy_mode {
|
|||
PHY_MODE_USB_DEVICE_SS,
|
||||
PHY_MODE_USB_OTG,
|
||||
PHY_MODE_SGMII,
|
||||
PHY_MODE_2500SGMII,
|
||||
PHY_MODE_10GKR,
|
||||
PHY_MODE_UFS_HS_A,
|
||||
PHY_MODE_UFS_HS_B,
|
||||
|
|
Loading…
Reference in New Issue