lkml.org 
[lkml]   [2021]   [Mar]   [10]   [last100]   RSS Feed
Views: [wrap][no wrap]   [headers]  [forward] 
 
Messages in this thread
    Patch in this message
    /
    From
    Subject[PATCH 3/3] net: dsa: mt7530: setup core clock even in TRGMII mode
    Date
    3f9ef7785a9c ("MIPS: ralink: manage low reset lines") made it so mt7530
    actually resets the switch on platforms such as mt7621 (where bit 2 is
    the reset line for the switch). That exposed an issue where the switch
    would not function properly in TRGMII mode after a reset.

    Reconfigure core clock in TRGMII mode to fix the issue.

    Also, disable both core and TRGMII Tx clocks prior to reconfiguring.
    Previously, only the core clock was disabled, but not TRGMII Tx clock.

    Tested on Ubiquity ER-X (MT7621) with TRGMII mode enabled.

    Signed-off-by: Ilya Lipnitskiy <ilya.lipnitskiy@gmail.com>
    ---
    drivers/net/dsa/mt7530.c | 44 ++++++++++++++++++++--------------------
    1 file changed, 22 insertions(+), 22 deletions(-)

    diff --git a/drivers/net/dsa/mt7530.c b/drivers/net/dsa/mt7530.c
    index b106ea816778..7ef5e7c23e05 100644
    --- a/drivers/net/dsa/mt7530.c
    +++ b/drivers/net/dsa/mt7530.c
    @@ -435,30 +435,30 @@ mt7530_pad_clk_setup(struct dsa_switch *ds, phy_interface_t interface)
    mt7530_write(priv, MT7530_TRGMII_TD_ODT(i),
    TD_DM_DRVP(8) | TD_DM_DRVN(8));

    - /* Setup core clock for MT7530 */
    - if (!trgint) {
    - /* Disable MT7530 core clock */
    - core_clear(priv, CORE_TRGMII_GSW_CLK_CG, REG_GSWCK_EN);
    -
    - /* Disable PLL, since phy_device has not yet been created
    - * provided for phy_[read,write]_mmd_indirect is called, we
    - * provide our own core_write_mmd_indirect to complete this
    - * function.
    - */
    - core_write(priv, CORE_GSWPLL_GRP1, 0);
    -
    - /* Set core clock into 500Mhz */
    - core_write(priv, CORE_GSWPLL_GRP2,
    - RG_GSWPLL_POSDIV_500M(1) |
    - RG_GSWPLL_FBKDIV_500M(25));
    + /* Since phy_device has not yet been created and
    + * phy_[read,write]_mmd_indirect is not available, we provide our own
    + * core_write_mmd_indirect with core_{clear,write,set} wrappers to
    + * complete this function.
    + */

    - /* Enable PLL */
    - core_write(priv, CORE_GSWPLL_GRP1,
    - RG_GSWPLL_EN_PRE |
    - RG_GSWPLL_POSDIV_200M(2) |
    - RG_GSWPLL_FBKDIV_200M(32));
    + /* Disable MT7530 core and TRGMII Tx clocks */
    + core_clear(priv, CORE_TRGMII_GSW_CLK_CG,
    + REG_GSWCK_EN | REG_TRGMIICK_EN);

    - }
    + /* Setup core clock for MT7530 */
    + /* Disable PLL */
    + core_write(priv, CORE_GSWPLL_GRP1, 0);
    +
    + /* Set core clock into 500Mhz */
    + core_write(priv, CORE_GSWPLL_GRP2,
    + RG_GSWPLL_POSDIV_500M(1) |
    + RG_GSWPLL_FBKDIV_500M(25));
    +
    + /* Enable PLL */
    + core_write(priv, CORE_GSWPLL_GRP1,
    + RG_GSWPLL_EN_PRE |
    + RG_GSWPLL_POSDIV_200M(2) |
    + RG_GSWPLL_FBKDIV_200M(32));

    /* Setup the MT7530 TRGMII Tx Clock */
    core_write(priv, CORE_PLL_GROUP5, RG_LCDDS_PCW_NCPO1(ncpo1));
    --
    2.30.1
    \
     
     \ /
      Last update: 2021-03-10 22:16    [W:2.557 / U:0.696 seconds]
    ©2003-2020 Jasper Spaans|hosted at Digital Ocean and TransIP|Read the blog|Advertise on this site