]> www.infradead.org Git - linux.git/commitdiff
net: ethernet: oa_tc6: enable open alliance tc6 data communication
authorParthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
Mon, 9 Sep 2024 08:25:08 +0000 (13:55 +0530)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Sep 2024 03:53:44 +0000 (20:53 -0700)
Enabling Configuration Synchronization bit (SYNC) in the Configuration
Register #0 enables data communication in the MAC-PHY. The state of this
bit is reflected in the data footer SYNC bit.

Reviewed-by: Andrew Lunn <andrew@lunn.ch>
Signed-off-by: Parthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
Link: https://patch.msgid.link/20240909082514.262942-9-Parthiban.Veerasooran@microchip.com
Signed-off-by: Jakub Kicinski <kuba@kernel.org>
drivers/net/ethernet/oa_tc6.c

index fc276d881dc9d27b1c3295aef55b479d8ffe636c..8958af863b6e094715800749d2aa77d402f219da 100644 (file)
 #define OA_TC6_REG_RESET                       0x0003
 #define RESET_SWRESET                          BIT(0)  /* Software Reset */
 
+/* Configuration Register #0 */
+#define OA_TC6_REG_CONFIG0                     0x0004
+#define CONFIG0_SYNC                           BIT(15)
+
 /* Status Register #0 */
 #define OA_TC6_REG_STATUS0                     0x0008
 #define STATUS0_RESETC                         BIT(6)  /* Reset Complete */
@@ -559,6 +563,21 @@ static int oa_tc6_unmask_macphy_error_interrupts(struct oa_tc6 *tc6)
        return oa_tc6_write_register(tc6, OA_TC6_REG_INT_MASK0, regval);
 }
 
+static int oa_tc6_enable_data_transfer(struct oa_tc6 *tc6)
+{
+       u32 value;
+       int ret;
+
+       ret = oa_tc6_read_register(tc6, OA_TC6_REG_CONFIG0, &value);
+       if (ret)
+               return ret;
+
+       /* Enable configuration synchronization for data transfer */
+       value |= CONFIG0_SYNC;
+
+       return oa_tc6_write_register(tc6, OA_TC6_REG_CONFIG0, value);
+}
+
 /**
  * oa_tc6_init - allocates and initializes oa_tc6 structure.
  * @spi: device with which data will be exchanged.
@@ -618,7 +637,18 @@ struct oa_tc6 *oa_tc6_init(struct spi_device *spi, struct net_device *netdev)
                return NULL;
        }
 
+       ret = oa_tc6_enable_data_transfer(tc6);
+       if (ret) {
+               dev_err(&tc6->spi->dev, "Failed to enable data transfer: %d\n",
+                       ret);
+               goto phy_exit;
+       }
+
        return tc6;
+
+phy_exit:
+       oa_tc6_phy_exit(tc6);
+       return NULL;
 }
 EXPORT_SYMBOL_GPL(oa_tc6_init);