Commit 947240eb authored by Fugang Duan's avatar Fugang Duan Committed by David S. Miller

net: fec: add imx8mq and imx8qm new versions support

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: default avatarFugang Duan <fugang.duan@nxp.com>
Signed-off-by: default avatarJoakim Zhang <qiangqing.zhang@nxp.com>
Signed-off-by: default avatarDavid S. Miller <davem@davemloft.net>
parent df11b807
...@@ -472,6 +472,19 @@ struct bufdesc_ex { ...@@ -472,6 +472,19 @@ struct bufdesc_ex {
*/ */
#define FEC_QUIRK_HAS_MULTI_QUEUES (1 << 19) #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 { struct bufdesc_prop {
int qid; int qid;
/* Address of Rx and Tx buffers */ /* Address of Rx and Tx buffers */
......
...@@ -135,6 +135,26 @@ static const struct fec_devinfo fec_imx6ul_info = { ...@@ -135,6 +135,26 @@ static const struct fec_devinfo fec_imx6ul_info = {
FEC_QUIRK_HAS_COALESCE | FEC_QUIRK_CLEAR_SETUP_MII, 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[] = { static struct platform_device_id fec_devtype[] = {
{ {
/* keep it for coldfire */ /* keep it for coldfire */
...@@ -161,6 +181,12 @@ static struct platform_device_id fec_devtype[] = { ...@@ -161,6 +181,12 @@ static struct platform_device_id fec_devtype[] = {
}, { }, {
.name = "imx6ul-fec", .name = "imx6ul-fec",
.driver_data = (kernel_ulong_t)&fec_imx6ul_info, .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 */ /* sentinel */
} }
...@@ -175,6 +201,8 @@ enum imx_fec_type { ...@@ -175,6 +201,8 @@ enum imx_fec_type {
MVF600_FEC, MVF600_FEC,
IMX6SX_FEC, IMX6SX_FEC,
IMX6UL_FEC, IMX6UL_FEC,
IMX8MQ_FEC,
IMX8QM_FEC,
}; };
static const struct of_device_id fec_dt_ids[] = { static const struct of_device_id fec_dt_ids[] = {
...@@ -185,6 +213,8 @@ 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,mvf600-fec", .data = &fec_devtype[MVF600_FEC], },
{ .compatible = "fsl,imx6sx-fec", .data = &fec_devtype[IMX6SX_FEC], }, { .compatible = "fsl,imx6sx-fec", .data = &fec_devtype[IMX6SX_FEC], },
{ .compatible = "fsl,imx6ul-fec", .data = &fec_devtype[IMX6UL_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 */ } { /* sentinel */ }
}; };
MODULE_DEVICE_TABLE(of, fec_dt_ids); MODULE_DEVICE_TABLE(of, fec_dt_ids);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment