lkml.org 
[lkml]   [2021]   [Oct]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[net-next PATCH v5 08/14] net: dsa: qca8k: add explicit SGMII PLL enable
    Date
    Support enabling PLL on the SGMII CPU port. Some device require this
    special configuration or no traffic is transmitted and the switch
    doesn't work at all. A dedicated binding is added to the CPU node
    port to apply the correct reg on mac config.
    Fail to correctly configure sgmii with qca8327 switch and warn if pll is
    used on qca8337 with a revision greater than 1.

    Signed-off-by: Ansuel Smith <ansuelsmth@gmail.com>
    ---
    drivers/net/dsa/qca8k.c | 19 +++++++++++++++++--
    drivers/net/dsa/qca8k.h | 1 +
    2 files changed, 18 insertions(+), 2 deletions(-)

    diff --git a/drivers/net/dsa/qca8k.c b/drivers/net/dsa/qca8k.c
    index b1ce625e9324..c5aee1aee550 100644
    --- a/drivers/net/dsa/qca8k.c
    +++ b/drivers/net/dsa/qca8k.c
    @@ -996,6 +996,18 @@ qca8k_parse_port_config(struct qca8k_priv *priv)
    if (of_property_read_bool(port_dn, "qca,sgmii-rxclk-falling-edge"))
    priv->sgmii_rx_clk_falling_edge = true;

    + if (of_property_read_bool(port_dn, "qca,sgmii-enable-pll")) {
    + priv->sgmii_enable_pll = true;
    +
    + if (priv->switch_id == QCA8K_ID_QCA8327) {
    + dev_err(priv->dev, "SGMII PLL should NOT be enabled for qca8327. Aborting enabling");
    + priv->sgmii_enable_pll = false;
    + }
    +
    + if (priv->switch_revision < 2)
    + dev_warn(priv->dev, "SGMII PLL should NOT be enabled for qca8337 with revision 2 or more.");
    + }
    +
    break;
    default:
    }
    @@ -1306,8 +1318,11 @@ qca8k_phylink_mac_config(struct dsa_switch *ds, int port, unsigned int mode,
    if (ret)
    return;

    - val |= QCA8K_SGMII_EN_PLL | QCA8K_SGMII_EN_RX |
    - QCA8K_SGMII_EN_TX | QCA8K_SGMII_EN_SD;
    + val |= QCA8K_SGMII_EN_SD;
    +
    + if (priv->sgmii_enable_pll)
    + val |= QCA8K_SGMII_EN_PLL | QCA8K_SGMII_EN_RX |
    + QCA8K_SGMII_EN_TX;

    if (dsa_is_cpu_port(ds, port)) {
    /* CPU port, we're talking to the CPU MAC, be a PHY */
    diff --git a/drivers/net/dsa/qca8k.h b/drivers/net/dsa/qca8k.h
    index 5eb0c890dfe4..77b1677edafa 100644
    --- a/drivers/net/dsa/qca8k.h
    +++ b/drivers/net/dsa/qca8k.h
    @@ -266,6 +266,7 @@ struct qca8k_priv {
    u8 switch_revision;
    bool sgmii_rx_clk_falling_edge;
    bool sgmii_tx_clk_falling_edge;
    + bool sgmii_enable_pll;
    u8 rgmii_rx_delay[QCA8K_NUM_CPU_PORTS]; /* 0: CPU port0, 1: CPU port6 */
    u8 rgmii_tx_delay[QCA8K_NUM_CPU_PORTS]; /* 0: CPU port0, 1: CPU port6 */
    bool legacy_phy_port_mapping;
    --
    2.32.0
    \
     
     \ /
      Last update: 2021-10-11 03:32    [W:3.373 / U:0.292 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site