]> git.ipfire.org Git - thirdparty/kernel/linux.git/commitdiff
net: ethernet: oa_tc6: add helper function to enable zero align rx frame
authorParthiban Veerasooran <Parthiban.Veerasooran@microchip.com>
Mon, 9 Sep 2024 08:25:12 +0000 (13:55 +0530)
committerJakub Kicinski <kuba@kernel.org>
Thu, 12 Sep 2024 03:53:45 +0000 (20:53 -0700)
Zero align receive frame feature can be enabled to align all receive
ethernet frames data to start at the beginning of any receive data chunk
payload with a start word offset (SWO) of zero. Receive frames may begin
anywhere within the receive data chunk payload when this feature is not
enabled.

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

index d3510dc1927329a84c6e8c095cd0f51e02326a90..f9c0dcd965c2e7f4c877ca98f056b168fb099b35 100644 (file)
@@ -23,6 +23,7 @@
 /* Configuration Register #0 */
 #define OA_TC6_REG_CONFIG0                     0x0004
 #define CONFIG0_SYNC                           BIT(15)
+#define CONFIG0_ZARFE_ENABLE                   BIT(12)
 
 /* Status Register #0 */
 #define OA_TC6_REG_STATUS0                     0x0008
@@ -1163,6 +1164,29 @@ static irqreturn_t oa_tc6_macphy_isr(int irq, void *data)
        return IRQ_HANDLED;
 }
 
+/**
+ * oa_tc6_zero_align_receive_frame_enable - function to enable zero align
+ * receive frame feature.
+ * @tc6: oa_tc6 struct.
+ *
+ * Return: 0 on success otherwise failed.
+ */
+int oa_tc6_zero_align_receive_frame_enable(struct oa_tc6 *tc6)
+{
+       u32 regval;
+       int ret;
+
+       ret = oa_tc6_read_register(tc6, OA_TC6_REG_CONFIG0, &regval);
+       if (ret)
+               return ret;
+
+       /* Set Zero-Align Receive Frame Enable */
+       regval |= CONFIG0_ZARFE_ENABLE;
+
+       return oa_tc6_write_register(tc6, OA_TC6_REG_CONFIG0, regval);
+}
+EXPORT_SYMBOL_GPL(oa_tc6_zero_align_receive_frame_enable);
+
 /**
  * oa_tc6_start_xmit - function for sending the tx skb which consists ethernet
  * frame.
index 5c7811ac9cbea4e0694921a561c1cbbe5600a792..15f58e3c56c740d9faf9469664e455c8417e3a34 100644 (file)
@@ -21,3 +21,4 @@ int oa_tc6_read_register(struct oa_tc6 *tc6, u32 address, u32 *value);
 int oa_tc6_read_registers(struct oa_tc6 *tc6, u32 address, u32 value[],
                          u8 length);
 netdev_tx_t oa_tc6_start_xmit(struct oa_tc6 *tc6, struct sk_buff *skb);
+int oa_tc6_zero_align_receive_frame_enable(struct oa_tc6 *tc6);