diff mbox series

[V1,net-next,3/5] net: fec: add imx8mq and imx8qm new versions support

Message ID 20210709081823.18696-4-qiangqing.zhang@nxp.com
State Superseded
Headers show
Series net: fec: add support for i.MX8MQ and i.MX8QM | expand

Commit Message

Joakim Zhang July 9, 2021, 8:18 a.m. UTC
From: Fugang Duan <fugang.duan@nxp.com>

The ENET of imx8mq and imx8qm are basically the same as imx6sx,
but they have new features support based on imx6sx, like:
- imx8mq: supports IEEE 802.3az EEE standard.
- imx8qm: supports RGMII mode delayed clock.

Signed-off-by: Fugang Duan <fugang.duan@nxp.com>
Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>
---
 drivers/net/ethernet/freescale/fec.h      | 13 ++++++++++
 drivers/net/ethernet/freescale/fec_main.c | 30 +++++++++++++++++++++++
 2 files changed, 43 insertions(+)

Comments

Rob Herring July 14, 2021, 11:18 p.m. UTC | #1
On Fri, Jul 09, 2021 at 04:18:21PM +0800, Joakim Zhang wrote:
> From: Fugang Duan <fugang.duan@nxp.com>

> 

> The ENET of imx8mq and imx8qm are basically the same as imx6sx,

> but they have new features support based on imx6sx, like:

> - imx8mq: supports IEEE 802.3az EEE standard.

> - imx8qm: supports RGMII mode delayed clock.

> 

> Signed-off-by: Fugang Duan <fugang.duan@nxp.com>

> Signed-off-by: Joakim Zhang <qiangqing.zhang@nxp.com>

> ---

>  drivers/net/ethernet/freescale/fec.h      | 13 ++++++++++

>  drivers/net/ethernet/freescale/fec_main.c | 30 +++++++++++++++++++++++

>  2 files changed, 43 insertions(+)

> 

> diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h

> index 2e002e4b4b4a..c1f93aa79d63 100644

> --- a/drivers/net/ethernet/freescale/fec.h

> +++ b/drivers/net/ethernet/freescale/fec.h

> @@ -472,6 +472,19 @@ struct bufdesc_ex {

>   */

>  #define FEC_QUIRK_HAS_MULTI_QUEUES	(1 << 19)

>  

> +/* i.MX8MQ ENET IP version add new feature to support IEEE 802.3az EEE

> + * standard. For the transmission, MAC supply two user registers to set

> + * Sleep (TS) and Wake (TW) time.

> + */

> +#define FEC_QUIRK_HAS_EEE		(1 << 20)

> +

> +/* i.MX8QM ENET IP version add new feture to generate delayed TXC/RXC

> + * as an alternative option to make sure it works well with various PHYs.

> + * For the implementation of delayed clock, ENET takes synchronized 250MHz

> + * clocks to generate 2ns delay.

> + */

> +#define FEC_QUIRK_DELAYED_CLKS_SUPPORT	(1 << 21)

> +

>  struct bufdesc_prop {

>  	int qid;

>  	/* Address of Rx and Tx buffers */

> diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c

> index 8aea707a65a7..dd0b8715e84e 100644

> --- a/drivers/net/ethernet/freescale/fec_main.c

> +++ b/drivers/net/ethernet/freescale/fec_main.c

> @@ -135,6 +135,26 @@ static const struct fec_devinfo fec_imx6ul_info = {

>  		  FEC_QUIRK_HAS_COALESCE | FEC_QUIRK_CLEAR_SETUP_MII,

>  };

>  

> +static const struct fec_devinfo fec_imx8mq_info = {

> +	.quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |

> +		  FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |

> +		  FEC_QUIRK_HAS_VLAN | FEC_QUIRK_HAS_AVB |

> +		  FEC_QUIRK_ERR007885 | FEC_QUIRK_BUG_CAPTURE |

> +		  FEC_QUIRK_HAS_RACC | FEC_QUIRK_HAS_COALESCE |

> +		  FEC_QUIRK_CLEAR_SETUP_MII | FEC_QUIRK_HAS_MULTI_QUEUES |

> +		  FEC_QUIRK_HAS_EEE,

> +};

> +

> +static const struct fec_devinfo fec_imx8qm_info = {

> +	.quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |

> +		  FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |

> +		  FEC_QUIRK_HAS_VLAN | FEC_QUIRK_HAS_AVB |

> +		  FEC_QUIRK_ERR007885 | FEC_QUIRK_BUG_CAPTURE |

> +		  FEC_QUIRK_HAS_RACC | FEC_QUIRK_HAS_COALESCE |

> +		  FEC_QUIRK_CLEAR_SETUP_MII | FEC_QUIRK_HAS_MULTI_QUEUES |

> +		  FEC_QUIRK_DELAYED_CLKS_SUPPORT,

> +};

> +

>  static struct platform_device_id fec_devtype[] = {

>  	{

>  		/* keep it for coldfire */

> @@ -161,6 +181,12 @@ static struct platform_device_id fec_devtype[] = {

>  	}, {

>  		.name = "imx6ul-fec",

>  		.driver_data = (kernel_ulong_t)&fec_imx6ul_info,

> +	}, {

> +		.name = "imx8mq-fec",

> +		.driver_data = (kernel_ulong_t)&fec_imx8mq_info,

> +	}, {

> +		.name = "imx8qm-fec",

> +		.driver_data = (kernel_ulong_t)&fec_imx8qm_info,

>  	}, {

>  		/* sentinel */

>  	}

> @@ -175,6 +201,8 @@ enum imx_fec_type {

>  	MVF600_FEC,

>  	IMX6SX_FEC,

>  	IMX6UL_FEC,

> +	IMX8MQ_FEC,

> +	IMX8QM_FEC,

>  };

>  

>  static const struct of_device_id fec_dt_ids[] = {

> @@ -185,6 +213,8 @@ static const struct of_device_id fec_dt_ids[] = {

>  	{ .compatible = "fsl,mvf600-fec", .data = &fec_devtype[MVF600_FEC], },

>  	{ .compatible = "fsl,imx6sx-fec", .data = &fec_devtype[IMX6SX_FEC], },

>  	{ .compatible = "fsl,imx6ul-fec", .data = &fec_devtype[IMX6UL_FEC], },

> +	{ .compatible = "fsl,imx8mq-fec", .data = &fec_devtype[IMX8MQ_FEC], },

> +	{ .compatible = "fsl,imx8qm-fec", .data = &fec_devtype[IMX8QM_FEC], },


I don't think these are documented.

Rob
diff mbox series

Patch

diff --git a/drivers/net/ethernet/freescale/fec.h b/drivers/net/ethernet/freescale/fec.h
index 2e002e4b4b4a..c1f93aa79d63 100644
--- a/drivers/net/ethernet/freescale/fec.h
+++ b/drivers/net/ethernet/freescale/fec.h
@@ -472,6 +472,19 @@  struct bufdesc_ex {
  */
 #define FEC_QUIRK_HAS_MULTI_QUEUES	(1 << 19)
 
+/* i.MX8MQ ENET IP version add new feature to support IEEE 802.3az EEE
+ * standard. For the transmission, MAC supply two user registers to set
+ * Sleep (TS) and Wake (TW) time.
+ */
+#define FEC_QUIRK_HAS_EEE		(1 << 20)
+
+/* i.MX8QM ENET IP version add new feture to generate delayed TXC/RXC
+ * as an alternative option to make sure it works well with various PHYs.
+ * For the implementation of delayed clock, ENET takes synchronized 250MHz
+ * clocks to generate 2ns delay.
+ */
+#define FEC_QUIRK_DELAYED_CLKS_SUPPORT	(1 << 21)
+
 struct bufdesc_prop {
 	int qid;
 	/* Address of Rx and Tx buffers */
diff --git a/drivers/net/ethernet/freescale/fec_main.c b/drivers/net/ethernet/freescale/fec_main.c
index 8aea707a65a7..dd0b8715e84e 100644
--- a/drivers/net/ethernet/freescale/fec_main.c
+++ b/drivers/net/ethernet/freescale/fec_main.c
@@ -135,6 +135,26 @@  static const struct fec_devinfo fec_imx6ul_info = {
 		  FEC_QUIRK_HAS_COALESCE | FEC_QUIRK_CLEAR_SETUP_MII,
 };
 
+static const struct fec_devinfo fec_imx8mq_info = {
+	.quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
+		  FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
+		  FEC_QUIRK_HAS_VLAN | FEC_QUIRK_HAS_AVB |
+		  FEC_QUIRK_ERR007885 | FEC_QUIRK_BUG_CAPTURE |
+		  FEC_QUIRK_HAS_RACC | FEC_QUIRK_HAS_COALESCE |
+		  FEC_QUIRK_CLEAR_SETUP_MII | FEC_QUIRK_HAS_MULTI_QUEUES |
+		  FEC_QUIRK_HAS_EEE,
+};
+
+static const struct fec_devinfo fec_imx8qm_info = {
+	.quirks = FEC_QUIRK_ENET_MAC | FEC_QUIRK_HAS_GBIT |
+		  FEC_QUIRK_HAS_BUFDESC_EX | FEC_QUIRK_HAS_CSUM |
+		  FEC_QUIRK_HAS_VLAN | FEC_QUIRK_HAS_AVB |
+		  FEC_QUIRK_ERR007885 | FEC_QUIRK_BUG_CAPTURE |
+		  FEC_QUIRK_HAS_RACC | FEC_QUIRK_HAS_COALESCE |
+		  FEC_QUIRK_CLEAR_SETUP_MII | FEC_QUIRK_HAS_MULTI_QUEUES |
+		  FEC_QUIRK_DELAYED_CLKS_SUPPORT,
+};
+
 static struct platform_device_id fec_devtype[] = {
 	{
 		/* keep it for coldfire */
@@ -161,6 +181,12 @@  static struct platform_device_id fec_devtype[] = {
 	}, {
 		.name = "imx6ul-fec",
 		.driver_data = (kernel_ulong_t)&fec_imx6ul_info,
+	}, {
+		.name = "imx8mq-fec",
+		.driver_data = (kernel_ulong_t)&fec_imx8mq_info,
+	}, {
+		.name = "imx8qm-fec",
+		.driver_data = (kernel_ulong_t)&fec_imx8qm_info,
 	}, {
 		/* sentinel */
 	}
@@ -175,6 +201,8 @@  enum imx_fec_type {
 	MVF600_FEC,
 	IMX6SX_FEC,
 	IMX6UL_FEC,
+	IMX8MQ_FEC,
+	IMX8QM_FEC,
 };
 
 static const struct of_device_id fec_dt_ids[] = {
@@ -185,6 +213,8 @@  static const struct of_device_id fec_dt_ids[] = {
 	{ .compatible = "fsl,mvf600-fec", .data = &fec_devtype[MVF600_FEC], },
 	{ .compatible = "fsl,imx6sx-fec", .data = &fec_devtype[IMX6SX_FEC], },
 	{ .compatible = "fsl,imx6ul-fec", .data = &fec_devtype[IMX6UL_FEC], },
+	{ .compatible = "fsl,imx8mq-fec", .data = &fec_devtype[IMX8MQ_FEC], },
+	{ .compatible = "fsl,imx8qm-fec", .data = &fec_devtype[IMX8QM_FEC], },
 	{ /* sentinel */ }
 };
 MODULE_DEVICE_TABLE(of, fec_dt_ids);