Skip to content

Commit 981d947

Browse files
Sneh ShahPaolo Abeni
authored andcommitted
net: stmmac: dwmac-qcom-ethqos: Fix drops in 10M SGMII RX
In 10M SGMII mode all the packets are being dropped due to wrong Rx clock. SGMII 10MBPS mode needs RX clock divider programmed to avoid drops in Rx. Update configure SGMII function with Rx clk divider programming. Fixes: 463120c ("net: stmmac: dwmac-qcom-ethqos: add support for SGMII") Tested-by: Andrew Halaney <ahalaney@redhat.com> Signed-off-by: Sneh Shah <quic_snehshah@quicinc.com> Reviewed-by: Bjorn Andersson <quic_bjorande@quicinc.com> Link: https://lore.kernel.org/r/20231212092208.22393-1-quic_snehshah@quicinc.com Signed-off-by: Paolo Abeni <pabeni@redhat.com>
1 parent 89e0c64 commit 981d947

1 file changed

Lines changed: 10 additions & 0 deletions

File tree

drivers/net/ethernet/stmicro/stmmac/dwmac-qcom-ethqos.c

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@
3434
#define RGMII_CONFIG_LOOPBACK_EN BIT(2)
3535
#define RGMII_CONFIG_PROG_SWAP BIT(1)
3636
#define RGMII_CONFIG_DDR_MODE BIT(0)
37+
#define RGMII_CONFIG_SGMII_CLK_DVDR GENMASK(18, 10)
3738

3839
/* SDCC_HC_REG_DLL_CONFIG fields */
3940
#define SDCC_DLL_CONFIG_DLL_RST BIT(30)
@@ -78,6 +79,8 @@
7879
#define ETHQOS_MAC_CTRL_SPEED_MODE BIT(14)
7980
#define ETHQOS_MAC_CTRL_PORT_SEL BIT(15)
8081

82+
#define SGMII_10M_RX_CLK_DVDR 0x31
83+
8184
struct ethqos_emac_por {
8285
unsigned int offset;
8386
unsigned int value;
@@ -598,6 +601,9 @@ static int ethqos_configure_rgmii(struct qcom_ethqos *ethqos)
598601
return 0;
599602
}
600603

604+
/* On interface toggle MAC registers gets reset.
605+
* Configure MAC block for SGMII on ethernet phy link up
606+
*/
601607
static int ethqos_configure_sgmii(struct qcom_ethqos *ethqos)
602608
{
603609
int val;
@@ -617,6 +623,10 @@ static int ethqos_configure_sgmii(struct qcom_ethqos *ethqos)
617623
case SPEED_10:
618624
val |= ETHQOS_MAC_CTRL_PORT_SEL;
619625
val &= ~ETHQOS_MAC_CTRL_SPEED_MODE;
626+
rgmii_updatel(ethqos, RGMII_CONFIG_SGMII_CLK_DVDR,
627+
FIELD_PREP(RGMII_CONFIG_SGMII_CLK_DVDR,
628+
SGMII_10M_RX_CLK_DVDR),
629+
RGMII_IO_MACRO_CONFIG);
620630
break;
621631
}
622632

0 commit comments

Comments
 (0)