]> www.infradead.org Git - users/hch/configfs.git/commitdiff
net: ti: icssg-prueth: Adjust IPG configuration for SR1.0
authorDiogo Ivo <diogo.ivo@siemens.com>
Wed, 3 Apr 2024 10:48:16 +0000 (11:48 +0100)
committerPaolo Abeni <pabeni@redhat.com>
Tue, 9 Apr 2024 07:47:29 +0000 (09:47 +0200)
Correctly adjust the IPG based on the Silicon Revision.

Based on the work of Roger Quadros, Vignesh Raghavendra
and Grygorii Strashko in TI's 5.10 SDK [1].

[1]: https://git.ti.com/cgit/ti-linux-kernel/ti-linux-kernel/tree/?h=ti-linux-5.10.y

Co-developed-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Jan Kiszka <jan.kiszka@siemens.com>
Signed-off-by: Diogo Ivo <diogo.ivo@siemens.com>
Reviewed-by: Roger Quadros <rogerq@kernel.org>
Reviewed-by: MD Danish Anwar <danishanwar@ti.com>
Signed-off-by: Paolo Abeni <pabeni@redhat.com>
drivers/net/ethernet/ti/icssg/icssg_config.c

index 99de8a40ed60a91410ed842ad926e66f766b33a5..15f2235bf90fad6481e70029eef8e9ebd084e4e6 100644 (file)
@@ -20,6 +20,8 @@
 /* IPG is in core_clk cycles */
 #define MII_RT_TX_IPG_100M     0x17
 #define MII_RT_TX_IPG_1G       0xb
+#define MII_RT_TX_IPG_100M_SR1 0x166
+#define MII_RT_TX_IPG_1G_SR1   0x1a
 
 #define        ICSSG_QUEUES_MAX                64
 #define        ICSSG_QUEUE_OFFSET              0xd00
@@ -202,23 +204,29 @@ void icssg_config_ipg(struct prueth_emac *emac)
 {
        struct prueth *prueth = emac->prueth;
        int slice = prueth_emac_slice(emac);
+       u32 ipg;
 
        switch (emac->speed) {
        case SPEED_1000:
-               icssg_mii_update_ipg(prueth->mii_rt, slice, MII_RT_TX_IPG_1G);
+               ipg = emac->is_sr1 ? MII_RT_TX_IPG_1G_SR1 : MII_RT_TX_IPG_1G;
                break;
        case SPEED_100:
-               icssg_mii_update_ipg(prueth->mii_rt, slice, MII_RT_TX_IPG_100M);
+               ipg = emac->is_sr1 ? MII_RT_TX_IPG_100M_SR1 : MII_RT_TX_IPG_100M;
                break;
        case SPEED_10:
+               /* Firmware hardcodes IPG for SR1.0 */
+               if (emac->is_sr1)
+                       return;
                /* IPG for 10M is same as 100M */
-               icssg_mii_update_ipg(prueth->mii_rt, slice, MII_RT_TX_IPG_100M);
+               ipg = MII_RT_TX_IPG_100M;
                break;
        default:
                /* Other links speeds not supported */
                netdev_err(emac->ndev, "Unsupported link speed\n");
                return;
        }
+
+       icssg_mii_update_ipg(prueth->mii_rt, slice, ipg);
 }
 
 static void emac_r30_cmd_init(struct prueth_emac *emac)