Merge "net: stmmac: Enable Serdes driver"

This commit is contained in:
qctecmdr 2023-09-24 20:18:03 -07:00 committed by Gerrit - the friendly Code Review server
commit 581f100f7d
7 changed files with 2425 additions and 11 deletions

View File

@ -254,6 +254,38 @@ config DWMAC_VISCONTI
help
Support for ethernet controller on Visconti SoCs.
config DWXGMAC_QCOM_4K
bool "Support for 4K Virtualization of XGMAC registers"
depends on (ARCH_SDXPINN || ARCH_SA525)
default y
help
This selects 4K virtualization of DMA and MTL offsets for the
stmmac device driver. With this config different base addresses
for various MTL and DMA registers are selected. This config is
only applicable for XGMAC2 HW version.
config ETHQOS_QCOM_VER4
bool "Emac ethqos support for HW version 4"
depends on (ARCH_SDXPINN || ARCH_SA525)
default y
help
Support for the EMAC ETHQOS core 4.
This selects proper registers and corresponding bit mapping
for the configuration of IO Macro block. This config is
only applicable for EMAC version 4.
config ETHQOS_QCOM_SERDES
bool "Enable Serdes driver"
depends on STMMAC_ETH
default n
help
SerDes is to provide data transmission over a single line or
a differential pair in order to minimize the number of I/O pins
and interconnects.
Serdes driver by default comes up on 1Gbps mode in SGMII and USXGMII
due to h/w limitation.
endif
config DWMAC_INTEL

View File

@ -22,6 +22,7 @@ obj-$(CONFIG_DWMAC_MESON) += dwmac-meson.o dwmac-meson8b.o
obj-$(CONFIG_DWMAC_OXNAS) += dwmac-oxnas.o
obj-$(CONFIG_DWMAC_QCOM_ETHQOS) += dwmac-qcom-eth.o
dwmac-qcom-eth-objs := dwmac-qcom-ethqos.o dwmac-qcom-gpio.o
obj-$(CONFIG_ETHQOS_QCOM_SERDES) += dwmac-qcom-serdes.o
obj-$(CONFIG_DWMAC_ROCKCHIP) += dwmac-rk.o
obj-$(CONFIG_DWMAC_SOCFPGA) += dwmac-altr-socfpga.o
obj-$(CONFIG_DWMAC_STI) += dwmac-sti.o

View File

@ -25,6 +25,7 @@
#include "dwmac-qcom-ethqos.h"
#include "stmmac_ptp.h"
#include "dwmac-qcom-serdes.h"
#define RGMII_IO_MACRO_DEBUG1 0x20
#define EMAC_SYSTEM_LOW_POWER_DEBUG 0x28
@ -33,9 +34,15 @@
#define RGMII_CONFIG_FUNC_CLK_EN BIT(30)
#define RGMII_CONFIG_POS_NEG_DATA_SEL BIT(23)
#define RGMII_CONFIG_GPIO_CFG_RX_INT GENMASK(21, 20)
#define RGMII_CONFIG_GPIO_CFG_TX_INT GENMASK(19, 17)
#define RGMII_CONFIG_MAX_SPD_PRG_9 GENMASK(16, 8)
#define RGMII_CONFIG_MAX_SPD_PRG_2 GENMASK(7, 6)
#if IS_ENABLED(CONFIG_DWXGMAC_QCOM_VER4)
#define RGMII_CONFIG_GPIO_CFG_TX_INT GENMASK(21, 19)
#define RGMII_CONFIG_MAX_SPD_PRG_9 GENMASK(18, 10)
#define RGMII_CONFIG_MAX_SPD_PRG_2 GENMASK(9, 6)
#else
#define RGMII_CONFIG_GPIO_CFG_TX_INT GENMASK(19, 17)
#define RGMII_CONFIG_MAX_SPD_PRG_9 GENMASK(16, 8)
#define RGMII_CONFIG_MAX_SPD_PRG_2 GENMASK(7, 6)
#endif
#define RGMII_CONFIG_INTF_SEL GENMASK(5, 4)
#define RGMII_CONFIG_BYPASS_TX_ID_EN BIT(3)
#define RGMII_CONFIG_LOOPBACK_EN BIT(2)
@ -85,7 +92,13 @@
#define SDC4_STATUS_DLL_LOCK BIT(7)
/* RGMII_IO_MACRO_CONFIG2 fields */
#define RGMII_CONFIG2_RSVD_CONFIG15 GENMASK(31, 17)
#if IS_ENABLED(CONFIG_DWXGMAC_QCOM_VER4)
#define RGMII_CONFIG2_RSVD_CONFIG15 GENMASK(31, 24)
#else
#define RGMII_CONFIG2_RSVD_CONFIG15 GENMASK(31, 17)
#endif
#define RGMII_CONFIG2_MODE_EN_VIA_GMII BIT(21)
#define RGMII_CONFIG2_MAX_SPD_PRG_3 GENMASK(20, 17)
#define RGMII_CONFIG2_RGMII_CLK_SEL_CFG BIT(16)
#define RGMII_CONFIG2_TX_TO_RX_LOOPBACK_EN BIT(13)
#define RGMII_CONFIG2_CLK_DIVIDE_SEL BIT(12)
@ -93,6 +106,26 @@
#define RGMII_CONFIG2_DATA_DIVIDE_CLK_SEL BIT(6)
#define RGMII_CONFIG2_TX_CLK_PHASE_SHIFT_EN BIT(5)
/* EMAC_WRAPPER_SGMII_PHY_CNTRL0 fields */
#define SGMII_PHY_CNTRL0_2P5G_1G_CLK_SEL GENMASK(6, 5)
/* EMAC_WRAPPER_SGMII_PHY_CNTRL1 fields */
#define SGMII_PHY_CNTRL1_RGMII_SGMII_CLK_MUX_SEL BIT(0)
#define SGMII_PHY_CNTRL1_USXGMII_GMII_MASTER_CLK_MUX_SEL BIT(4)
#define SGMII_PHY_CNTRL1_SGMII_TX_TO_RX_LOOPBACK_EN BIT(3)
/* EMAC_WRAPPER_USXGMII_MUX_SEL fields */
#define USXGMII_CLK_BLK_GMII_CLK_BLK_SEL BIT(1)
#define USXGMII_CLK_BLK_CLK_EN BIT(0)
/* RGMII_IO_MACRO_SCRATCH_2 fields */
#define RGMII_SCRATCH2_MAX_SPD_PRG_4 GENMASK(5, 2)
#define RGMII_SCRATCH2_MAX_SPD_PRG_5 GENMASK(9, 6)
#define RGMII_SCRATCH2_MAX_SPD_PRG_6 GENMASK(13, 10)
/*RGMIII_IO_MACRO_BYPASS fields */
#define RGMII_BYPASS_EN BIT(0)
#define EMAC_I0_EMAC_CORE_HW_VERSION_RGOFFADDR 0x00000070
#define EMAC_HW_v2_3_2_RG 0x20030002
@ -124,6 +157,14 @@
#define AUTONEG_STATE_MASK 0x20
#define MICREL_LINK_UP_INTR_STATUS BIT(0)
#define GMAC_CONFIG_PS BIT(15)
#define GMAC_CONFIG_FES BIT(14)
#define GMAC_AN_CTRL_RAN BIT(9)
#define GMAC_AN_CTRL_ANE BIT(12)
#define DWMAC4_PCS_BASE 0x000000e0
#define RGMII_CONFIG_10M_CLK_DVD GENMASK(18, 10)
struct emac_emb_smmu_cb_ctx emac_emb_smmu_ctx = {0};
struct plat_stmmacenet_data *plat_dat;
@ -596,11 +637,81 @@ static int ethqos_rgmii_macro_init_v3(struct qcom_ethqos *ethqos)
return 0;
}
int ethqos_configure_sgmii_v3_1(struct qcom_ethqos *ethqos)
{
u32 value = 0;
struct stmmac_priv *priv = qcom_ethqos_get_priv(ethqos);
value = readl(priv->ioaddr + MAC_CTRL_REG);
switch (ethqos->speed) {
case SPEED_2500:
value &= ~GMAC_CONFIG_PS;
writel(value, priv->ioaddr + MAC_CTRL_REG);
rgmii_updatel(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_CONFIG2_RGMII_CLK_SEL_CFG, RGMII_IO_MACRO_CONFIG2);
value = readl(priv->ioaddr + DWMAC4_PCS_BASE);
value &= ~GMAC_AN_CTRL_ANE;
writel(value, priv->ioaddr + DWMAC4_PCS_BASE);
break;
case SPEED_1000:
value &= ~GMAC_CONFIG_PS;
writel(value, priv->ioaddr + MAC_CTRL_REG);
rgmii_updatel(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_CONFIG2_RGMII_CLK_SEL_CFG, RGMII_IO_MACRO_CONFIG2);
value = readl(priv->ioaddr + DWMAC4_PCS_BASE);
value |= GMAC_AN_CTRL_RAN | GMAC_AN_CTRL_ANE;
writel(value, priv->ioaddr + DWMAC4_PCS_BASE);
break;
case SPEED_100:
value |= GMAC_CONFIG_PS | GMAC_CONFIG_FES;
writel(value, priv->ioaddr + MAC_CTRL_REG);
value = readl(priv->ioaddr + DWMAC4_PCS_BASE);
value |= GMAC_AN_CTRL_RAN | GMAC_AN_CTRL_ANE;
writel(value, priv->ioaddr + DWMAC4_PCS_BASE);
break;
case SPEED_10:
value |= GMAC_CONFIG_PS;
value &= ~GMAC_CONFIG_FES;
writel(value, priv->ioaddr + MAC_CTRL_REG);
rgmii_updatel(ethqos, RGMII_CONFIG_10M_CLK_DVD, BIT(10) |
GENMASK(15, 14), RGMII_IO_MACRO_CONFIG);
value = readl(priv->ioaddr + DWMAC4_PCS_BASE);
value |= GMAC_AN_CTRL_RAN | GMAC_AN_CTRL_ANE;
writel(value, priv->ioaddr + DWMAC4_PCS_BASE);
break;
default:
dev_err(&ethqos->pdev->dev,
"Invalid speed %d\n", ethqos->speed);
return -EINVAL;
}
return 0;
}
static int ethqos_configure_mac_v3_1(struct qcom_ethqos *ethqos)
{
struct stmmac_priv *priv = qcom_ethqos_get_priv(ethqos);
int ret = 0;
switch (priv->plat->interface) {
case PHY_INTERFACE_MODE_SGMII:
ret = ethqos_configure_sgmii_v3_1(ethqos);
qcom_ethqos_serdes_update(ethqos, ethqos->speed, priv->plat->interface);
break;
}
return ret;
}
static int ethqos_configure(struct qcom_ethqos *ethqos)
{
volatile unsigned int dll_lock;
unsigned int i, retry = 1000;
if (ethqos->emac_ver == EMAC_HW_v3_1_0)
return ethqos_configure_mac_v3_1(ethqos);
/* Reset to POR values and enable clk */
for (i = 0; i < ethqos->num_por; i++)
rgmii_writel(ethqos, ethqos->por[i].value,
@ -763,16 +874,231 @@ static int ethqos_configure_mac_v3(struct qcom_ethqos *ethqos)
return ret;
}
static int ethqos_serdes_power_up(struct net_device *ndev, void *priv)
{
struct qcom_ethqos *ethqos = priv;
struct net_device *dev = ndev;
struct stmmac_priv *s_priv = netdev_priv(dev);
ETHQOSINFO("%s : speed = %d interface = %d",
__func__,
ethqos->speed,
s_priv->plat->interface);
return qcom_ethqos_serdes_update(ethqos, ethqos->speed,
s_priv->plat->interface);
}
static int ethqos_configure_rgmii_v4(struct qcom_ethqos *ethqos)
{
unsigned int dll_lock;
unsigned int i, retry = 1000;
/* Reset to POR values and enable clk */
for (i = 0; i < ethqos->num_por; i++)
rgmii_writel(ethqos, ethqos->por[i].value,
ethqos->por[i].offset);
ethqos_set_func_clk_en(ethqos);
/* Initialize the DLL first */
/* Set DLL_RST */
rgmii_updatel(ethqos, SDCC_DLL_CONFIG_DLL_RST,
SDCC_DLL_CONFIG_DLL_RST, SDCC_HC_REG_DLL_CONFIG);
/* Set PDN */
rgmii_updatel(ethqos, SDCC_DLL_CONFIG_PDN,
SDCC_DLL_CONFIG_PDN, SDCC_HC_REG_DLL_CONFIG);
/* Clear DLL_RST */
rgmii_updatel(ethqos, SDCC_DLL_CONFIG_DLL_RST, 0,
SDCC_HC_REG_DLL_CONFIG);
/* Clear PDN */
rgmii_updatel(ethqos, SDCC_DLL_CONFIG_PDN, 0,
SDCC_HC_REG_DLL_CONFIG);
if (ethqos->speed != SPEED_100 && ethqos->speed != SPEED_10) {
/* Set DLL_EN */
rgmii_updatel(ethqos, SDCC_DLL_CONFIG_DLL_EN,
SDCC_DLL_CONFIG_DLL_EN, SDCC_HC_REG_DLL_CONFIG);
/* Set CK_OUT_EN */
rgmii_updatel(ethqos, SDCC_DLL_CONFIG_CK_OUT_EN,
SDCC_DLL_CONFIG_CK_OUT_EN,
SDCC_HC_REG_DLL_CONFIG);
/* Set USR_CTL bit 26 with mask of 3 bits */
rgmii_updatel(ethqos, GENMASK(26, 24), BIT(26), SDCC_USR_CTL);
/* wait for DLL LOCK */
do {
mdelay(1);
dll_lock = rgmii_readl(ethqos, SDC4_STATUS);
if (dll_lock & SDC4_STATUS_DLL_LOCK)
break;
retry--;
} while (retry > 0);
if (!retry)
dev_err(&ethqos->pdev->dev,
"Timeout while waiting for DLL lock\n");
}
if (ethqos->speed == SPEED_1000)
ethqos_dll_configure(ethqos);
ethqos_rgmii_macro_init(ethqos);
return 0;
}
static int ethqos_configure_sgmii_v4(struct qcom_ethqos *ethqos)
{
rgmii_updatel(ethqos, RGMII_BYPASS_EN, RGMII_BYPASS_EN, RGMII_IO_MACRO_BYPASS);
rgmii_updatel(ethqos, RGMII_CONFIG2_MODE_EN_VIA_GMII, 0, RGMII_IO_MACRO_CONFIG2);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL1_RGMII_SGMII_CLK_MUX_SEL, 0,
EMAC_WRAPPER_SGMII_PHY_CNTRL1);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL1_USXGMII_GMII_MASTER_CLK_MUX_SEL,
SGMII_PHY_CNTRL1_USXGMII_GMII_MASTER_CLK_MUX_SEL,
EMAC_WRAPPER_SGMII_PHY_CNTRL1);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL1_SGMII_TX_TO_RX_LOOPBACK_EN, 0,
EMAC_WRAPPER_SGMII_PHY_CNTRL1);
rgmii_updatel(ethqos, USXGMII_CLK_BLK_GMII_CLK_BLK_SEL, 0, EMAC_WRAPPER_USXGMII_MUX_SEL);
rgmii_updatel(ethqos, USXGMII_CLK_BLK_CLK_EN, 0, EMAC_WRAPPER_USXGMII_MUX_SEL);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL0_2P5G_1G_CLK_SEL, 0, EMAC_WRAPPER_SGMII_PHY_CNTRL0);
rgmii_updatel(ethqos, RGMII_CONFIG_MAX_SPD_PRG_2, (BIT(6) | BIT(9)), RGMII_IO_MACRO_CONFIG);
rgmii_updatel(ethqos, RGMII_CONFIG_MAX_SPD_PRG_9, (BIT(10) | BIT(14) | BIT(15)),
RGMII_IO_MACRO_CONFIG);
rgmii_updatel(ethqos, RGMII_CONFIG2_MAX_SPD_PRG_3, (BIT(17) | BIT(20)),
RGMII_IO_MACRO_CONFIG2);
rgmii_updatel(ethqos, RGMII_SCRATCH2_MAX_SPD_PRG_4, BIT(2), RGMII_IO_MACRO_SCRATCH_2);
rgmii_updatel(ethqos, RGMII_SCRATCH2_MAX_SPD_PRG_5, BIT(6) | BIT(7),
RGMII_IO_MACRO_SCRATCH_2);
rgmii_updatel(ethqos, RGMII_SCRATCH2_MAX_SPD_PRG_6, 0, RGMII_IO_MACRO_SCRATCH_2);
rgmii_updatel(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_IO_MACRO_CONFIG2);
return 0;
}
static int ethqos_configure_usxgmii_v4(struct qcom_ethqos *ethqos)
{
rgmii_updatel(ethqos, RGMII_CONFIG2_MODE_EN_VIA_GMII, 0, RGMII_IO_MACRO_CONFIG2);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL0_2P5G_1G_CLK_SEL, BIT(5),
EMAC_WRAPPER_SGMII_PHY_CNTRL0);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL1_RGMII_SGMII_CLK_MUX_SEL, 0,
EMAC_WRAPPER_SGMII_PHY_CNTRL1);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL1_USXGMII_GMII_MASTER_CLK_MUX_SEL,
SGMII_PHY_CNTRL1_USXGMII_GMII_MASTER_CLK_MUX_SEL,
EMAC_WRAPPER_SGMII_PHY_CNTRL1);
rgmii_updatel(ethqos, SGMII_PHY_CNTRL1_SGMII_TX_TO_RX_LOOPBACK_EN, 0,
EMAC_WRAPPER_SGMII_PHY_CNTRL1);
rgmii_updatel(ethqos, USXGMII_CLK_BLK_GMII_CLK_BLK_SEL, 0, EMAC_WRAPPER_USXGMII_MUX_SEL);
rgmii_updatel(ethqos, USXGMII_CLK_BLK_CLK_EN, 0, EMAC_WRAPPER_USXGMII_MUX_SEL);
switch (ethqos->speed) {
case SPEED_10000:
rgmii_updatel(ethqos, USXGMII_CLK_BLK_GMII_CLK_BLK_SEL,
USXGMII_CLK_BLK_GMII_CLK_BLK_SEL,
EMAC_WRAPPER_USXGMII_MUX_SEL);
break;
case SPEED_5000:
rgmii_updatel(ethqos, SGMII_PHY_CNTRL0_2P5G_1G_CLK_SEL, 0,
EMAC_WRAPPER_SGMII_PHY_CNTRL0);
rgmii_updatel(ethqos, RGMII_CONFIG_MAX_SPD_PRG_2, (BIT(6) | BIT(7)),
RGMII_IO_MACRO_CONFIG);
rgmii_updatel(ethqos, RGMII_CONFIG2_MAX_SPD_PRG_3, (BIT(17) | BIT(18)),
RGMII_IO_MACRO_CONFIG2);
break;
case SPEED_2500:
rgmii_updatel(ethqos, SGMII_PHY_CNTRL0_2P5G_1G_CLK_SEL, 0,
EMAC_WRAPPER_SGMII_PHY_CNTRL0);
rgmii_updatel(ethqos, RGMII_CONFIG_MAX_SPD_PRG_9, (BIT(10) | BIT(11)),
RGMII_IO_MACRO_CONFIG);
rgmii_updatel(ethqos, RGMII_SCRATCH2_MAX_SPD_PRG_4, (BIT(2) | BIT(3)),
RGMII_IO_MACRO_SCRATCH_2);
rgmii_updatel(ethqos, RGMII_SCRATCH2_MAX_SPD_PRG_5, 0,
RGMII_IO_MACRO_SCRATCH_2);
break;
case SPEED_1000:
rgmii_updatel(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_IO_MACRO_CONFIG2);
break;
case SPEED_100:
rgmii_updatel(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_IO_MACRO_CONFIG2);
rgmii_updatel(ethqos, RGMII_CONFIG_MAX_SPD_PRG_2, BIT(9),
RGMII_IO_MACRO_CONFIG);
rgmii_updatel(ethqos, RGMII_CONFIG2_MAX_SPD_PRG_3, BIT(20),
RGMII_IO_MACRO_CONFIG2);
rgmii_updatel(ethqos, RGMII_SCRATCH2_MAX_SPD_PRG_6, BIT(1),
RGMII_IO_MACRO_SCRATCH_2);
break;
case SPEED_10:
rgmii_updatel(ethqos, RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_CONFIG2_RGMII_CLK_SEL_CFG,
RGMII_IO_MACRO_CONFIG2);
break;
default:
dev_err(&ethqos->pdev->dev,
"Invalid speed %d\n", ethqos->speed);
return -EINVAL;
}
return 0;
}
static int ethqos_configure_mac_v4(struct qcom_ethqos *ethqos)
{
struct stmmac_priv *priv = qcom_ethqos_get_priv(ethqos);
int ret = 0;
switch (priv->plat->interface) {
case PHY_INTERFACE_MODE_RGMII:
case PHY_INTERFACE_MODE_RGMII_ID:
case PHY_INTERFACE_MODE_RGMII_RXID:
case PHY_INTERFACE_MODE_RGMII_TXID:
ret = ethqos_configure_rgmii_v4(ethqos);
qcom_ethqos_serdes_update(ethqos, ethqos->speed, priv->plat->interface);
break;
case PHY_INTERFACE_MODE_SGMII:
ret = ethqos_configure_sgmii_v4(ethqos);
qcom_ethqos_serdes_update(ethqos, ethqos->speed, priv->plat->interface);
break;
case PHY_INTERFACE_MODE_USXGMII:
ret = ethqos_configure_usxgmii_v4(ethqos);
break;
}
return ret;
}
static void ethqos_fix_mac_speed(void *priv, unsigned int speed)
{
struct qcom_ethqos *ethqos = priv;
int ret = 0;
ethqos->speed = speed;
if (ethqos->emac_ver == EMAC_HW_v3_0_0_RG)
ret = ethqos_configure_mac_v3(ethqos);
else if (ethqos->emac_ver == EMAC_HW_v4_0_0)
ret = ethqos_configure_mac_v4(ethqos);
else
ethqos_configure(ethqos);
ret = ethqos_configure(ethqos);
if (ret != 0)
ETHQOSERR("HSR configuration has failed\n");
}
@ -1007,8 +1333,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
ethqos_init_reqgulators(ethqos);
ret = ethqos_init_gpio(ethqos);
if (ret)
if (ethqos_init_gpio(ethqos))
ETHQOSDBG("ethqos_init_gpio failed");
plat_dat = stmmac_probe_config_dt(pdev, stmmac_res.mac);
@ -1035,6 +1360,10 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
if (ret)
goto err_mem;
if (plat_dat->interface == PHY_INTERFACE_MODE_SGMII ||
plat_dat->interface == PHY_INTERFACE_MODE_USXGMII)
qcom_ethqos_serdes_configure_dt(ethqos);
ethqos->speed = SPEED_10;
ethqos_update_rgmii_clk(ethqos, SPEED_10);
ethqos_set_func_clk_en(ethqos);
@ -1043,6 +1372,10 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
plat_dat->fix_mac_speed = ethqos_fix_mac_speed;
plat_dat->dump_debug_regs = rgmii_dump;
plat_dat->has_gmac4 = 1;
if (plat_dat->interface == PHY_INTERFACE_MODE_SGMII ||
plat_dat->interface == PHY_INTERFACE_MODE_USXGMII)
plat_dat->serdes_powerup = ethqos_serdes_power_up;
/* Set mdio phy addr probe capability to c22 .
* If c22_c45 is set then multiple phy is getting detected.
*/
@ -1091,8 +1424,7 @@ static int qcom_ethqos_probe(struct platform_device *pdev)
goto err_clk;
if (!ethqos_phy_intr_config(ethqos)) {
ret = ethqos_phy_intr_enable(ethqos);
if (ret)
if (ethqos_phy_intr_enable(ethqos))
ETHQOSERR("ethqos_phy_intr_enable failed");
} else {
ETHQOSERR("Phy interrupt configuration failed");

View File

@ -19,12 +19,20 @@
#define SDC4_STATUS 0x14
#define SDCC_USR_CTL 0x18
#define RGMII_IO_MACRO_CONFIG2 0x1C
#define EMAC_WRAPPER_SGMII_PHY_CNTRL0 0x170
#define EMAC_WRAPPER_SGMII_PHY_CNTRL1 0x174
#define EMAC_WRAPPER_USXGMII_MUX_SEL 0x1D0
#define RGMII_IO_MACRO_SCRATCH_2 0x44
#define RGMII_IO_MACRO_BYPASS 0x16C
#define EMAC_HW_NONE 0
#define EMAC_HW_v2_1_1 0x20010001
#define EMAC_HW_v2_1_2 0x20010002
#define EMAC_HW_v2_3_0 0x20030000
#define EMAC_HW_v2_3_1 0x20030001
#define EMAC_HW_v3_0_0_RG 0x30000000
#define EMAC_HW_v3_1_0 0x30010000
#define EMAC_HW_v4_0_0 0x40000000
#define EMAC_HW_vMAX 9
struct ethqos_emac_por {
@ -40,9 +48,13 @@ struct ethqos_emac_driver_data {
struct qcom_ethqos {
struct platform_device *pdev;
void __iomem *rgmii_base;
void __iomem *sgmii_base;
void __iomem *ioaddr;
unsigned int rgmii_clk_rate;
struct clk *rgmii_clk;
struct clk *phyaux_clk;
struct clk *sgmiref_clk;
unsigned int speed;
int gpio_phy_intr_redirect;
@ -58,6 +70,8 @@ struct qcom_ethqos {
struct regulator *reg_rgmii;
struct regulator *reg_emac_phy;
struct regulator *reg_rgmii_io_pads;
int curr_serdes_speed;
};
int ethqos_init_reqgulators(struct qcom_ethqos *ethqos);

File diff suppressed because it is too large Load Diff

View File

@ -0,0 +1,882 @@
/* SPDX-License-Identifier: GPL-2.0-only */
/* Copyright (c) 2023 Qualcomm Innovation Center, Inc. All rights reserved. */
#ifndef _DWMAC_QCOM_SERDES_H
#define _DWMAC_QCOM_SERDES_H
#include <linux/ipc_logging.h>
#include <net/addrconf.h>
#include <linux/uaccess.h>
#include "stmmac.h"
#include "dwmac-qcom-ethqos.h"
#define QSERDES_QMP_PLL 0x0
#define QSERDES_COM_ATB_SEL1 (QSERDES_QMP_PLL + 0x0)
#define QSERDES_COM_ATB_SEL2 (QSERDES_QMP_PLL + 0x4)
#define QSERDES_COM_BIAS_EN_CLKBUFLR_EN (QSERDES_QMP_PLL + 0x44)
#define QSERDES_COM_BIAS_EN_CTRL_BY_PSM (QSERDES_QMP_PLL + 0x90)
#define SGMII_PHY_0_QSERDES_COM_BG_TIMER (QSERDES_QMP_PLL + 0xBC)
#define QSERDES_COM_BIN_VCOCAL_CMP_CODE1_MODE0 (QSERDES_QMP_PLL + 0x58)
#define QSERDES_COM_BIN_VCOCAL_CMP_CODE1_MODE1 (QSERDES_QMP_PLL + 0x1B4)
#define QSERDES_COM_BIN_VCOCAL_CMP_CODE2_MODE0 (QSERDES_QMP_PLL + 0x5C)
#define QSERDES_COM_BIN_VCOCAL_CMP_CODE2_MODE1 (QSERDES_QMP_PLL + 0x1B8)
#define QSERDES_COM_BIN_VCOCAL_HSCLK_SEL_1 (QSERDES_QMP_PLL + 0x19C)
#define QSERDES_COM_C_READY_STATUS (QSERDES_QMP_PLL + 0x1F8)
#define QSERDES_COM_CLK_ENABLE1 (QSERDES_QMP_PLL + 0x48)
#define QSERDES_COM_CLK_EP_DIV_MODE0 (QSERDES_QMP_PLL + 0x6C)
#define QSERDES_COM_CLK_EP_DIV_MODE1 (QSERDES_QMP_PLL + 0x70)
#define QSERDES_COM_CLK_SELECT (QSERDES_QMP_PLL + 0x154)
#define QSERDES_COM_CML_SYSCLK_SEL (QSERDES_QMP_PLL + 0x98)
#define QSERDES_COM_CMN_CONFIG_1 (QSERDES_QMP_PLL + 0x174)
#define QSERDES_COM_CMN_IETRIM (QSERDES_QMP_PLL + 0x5C)
#define QSERDES_COM_CMN_IPTRIM (QSERDES_QMP_PLL + 0x60)
#define QSERDES_COM_CMN_MISC1 (QSERDES_QMP_PLL + 0x19C)
#define QSERDES_COM_CMN_MODE (QSERDES_QMP_PLL + 0x1A0)
#define QSERDES_COM_CMN_MODE_CONTD (QSERDES_QMP_PLL + 0x1A4)
#define QSERDES_COM_CMN_RATE_OVERRIDE (QSERDES_QMP_PLL + 0x180)
#define QSERDES_COM_CMN_STATUS (QSERDES_QMP_PLL + 0x1D0)
#define QSERDES_COM_CORE_CLK_EN (QSERDES_QMP_PLL + 0x170)
#define QSERDES_COM_CORECLK_DIV_MODE0 (QSERDES_QMP_PLL + 0x07C)
#define QSERDES_COM_CORECLK_DIV_MODE1 (QSERDES_QMP_PLL + 0x16C)
#define QSERDES_COM_CP_CTRL_MODE0 (QSERDES_QMP_PLL + 0x70)
#define QSERDES_COM_CP_CTRL_MODE1 (QSERDES_QMP_PLL + 0x78)
#define QSERDES_COM_DEBUG_BUS0 (QSERDES_QMP_PLL + 0x188)
#define QSERDES_COM_DEBUG_BUS1 (QSERDES_QMP_PLL + 0x18C)
#define QSERDES_COM_DEBUG_BUS2 (QSERDES_QMP_PLL + 0x190)
#define QSERDES_COM_DEBUG_BUS3 (QSERDES_QMP_PLL + 0x194)
#define QSERDES_COM_DEBUG_BUS_SEL (QSERDES_QMP_PLL + 0x198)
#define QSERDES_COM_DEC_START_MODE0 (QSERDES_QMP_PLL + 0x88)
#define QSERDES_COM_DEC_START_MODE1 (QSERDES_QMP_PLL + 0xC4)
#define QSERDES_COM_DEC_START_MSB_MODE0 (QSERDES_QMP_PLL + 0xC0)
#define QSERDES_COM_DEC_START_MSB_MODE1 (QSERDES_QMP_PLL + 0xC8)
#define QSERDES_COM_DIV_FRAC_START1_MODE0 (QSERDES_QMP_PLL + 0x90)
#define QSERDES_COM_DIV_FRAC_START1_MODE1 (QSERDES_QMP_PLL + 0xD8)
#define QSERDES_COM_DIV_FRAC_START2_MODE0 (QSERDES_QMP_PLL + 0x94)
#define QSERDES_COM_DIV_FRAC_START2_MODE1 (QSERDES_QMP_PLL + 0xDC)
#define QSERDES_COM_DIV_FRAC_START3_MODE0 (QSERDES_QMP_PLL + 0x98)
#define QSERDES_COM_DIV_FRAC_START3_MODE1 (QSERDES_QMP_PLL + 0xE0)
#define QSERDES_COM_EP_CLOCK_DETECT_CTRL (QSERDES_QMP_PLL + 0x64)
#define QSERDES_COM_FREQ_UPDATE (QSERDES_QMP_PLL + 0x8)
#define QSERDES_COM_HSCLK_SEL_1 (QSERDES_QMP_PLL + 0x3C)
#define QSERDES_COM_HSCLK_HS_SWITCH_SEL_1 (QSERDES_QMP_PLL + 0x9C)
#define QSERDES_COM_INTEGLOOP_BINCODE_STATUS (QSERDES_QMP_PLL + 0x160)
#define QSERDES_COM_INTEGLOOP_EN (QSERDES_QMP_PLL + 0xE8)
#define QSERDES_COM_INTEGLOOP_GAIN0_MODE0 (QSERDES_QMP_PLL + 0xEC)
#define QSERDES_COM_INTEGLOOP_GAIN0_MODE1 (QSERDES_QMP_PLL + 0xF4)
#define QSERDES_COM_INTEGLOOP_GAIN1_MODE0 (QSERDES_QMP_PLL + 0xF0)
#define QSERDES_COM_INTEGLOOP_GAIN1_MODE1 (QSERDES_QMP_PLL + 0xF8)
#define QSERDES_COM_INTEGLOOP_INITVAL (QSERDES_QMP_PLL + 0xE4)
#define QSERDES_COM_INTEGLOOP_P_PATH_GAIN0 (QSERDES_QMP_PLL + 0xFC)
#define QSERDES_COM_INTEGLOOP_P_PATH_GAIN1 (QSERDES_QMP_PLL + 0x100)
#define QSERDES_COM_LOCK_CMP1_MODE0 (QSERDES_QMP_PLL + 0x80)
#define QSERDES_COM_LOCK_CMP1_MODE1 (QSERDES_QMP_PLL + 0xB4)
#define QSERDES_COM_LOCK_CMP2_MODE0 (QSERDES_QMP_PLL + 0x84)
#define QSERDES_COM_LOCK_CMP2_MODE1 (QSERDES_QMP_PLL + 0xB8)
#define QSERDES_COM_LOCK_CMP_CFG (QSERDES_QMP_PLL + 0xA8)
#define QSERDES_COM_LOCK_CMP_EN (QSERDES_QMP_PLL + 0xA4)
#define QSERDES_COM_MODE_OPERATION_STATUS (QSERDES_QMP_PLL + 0x1C4)
#define QSERDES_COM_PLL_ANALOG (QSERDES_QMP_PLL + 0x164)
#define QSERDES_COM_PLL_CCTRL_MODE0 (QSERDES_QMP_PLL + 0x78)
#define QSERDES_COM_PLL_CCTRL_MODE1 (QSERDES_QMP_PLL + 0x88)
#define QSERDES_COM_PLL_CNTRL (QSERDES_QMP_PLL + 0x8C)
#define QSERDES_COM_PLL_EN (QSERDES_QMP_PLL + 0x54)
#define SGMII_PHY_0_QSERDES_COM_PLL_IVCO (QSERDES_QMP_PLL + 0xF4)
#define QSERDES_COM_PLL_RCTRL_MODE0 (QSERDES_QMP_PLL + 0x74)
#define QSERDES_COM_PLL_RCTRL_MODE1 (QSERDES_QMP_PLL + 0x80)
#define QSERDES_COM_PLLCAL_CODE1_STATUS (QSERDES_QMP_PLL + 0x14C)
#define QSERDES_COM_PLLCAL_CODE2_STATUS (QSERDES_QMP_PLL + 0x150)
#define QSERDES_COM_POST_DIV (QSERDES_QMP_PLL + 0x3C)
#define QSERDES_COM_POST_DIV_MUX (QSERDES_QMP_PLL + 0x40)
#define QSERDES_COM_RESERVED_1 (QSERDES_QMP_PLL + 0x1C0)
#define QSERDES_COM_RESET_SM_STATUS (QSERDES_QMP_PLL + 0x144)
#define QSERDES_COM_RESETSM_CNTRL (QSERDES_QMP_PLL + 0x9C)
#define QSERDES_COM_RESETSM_CNTRL2 (QSERDES_QMP_PLL + 0xA0)
#define QSERDES_COM_RESTRIM_CODE_STATUS (QSERDES_QMP_PLL + 0x148)
#define QSERDES_COM_SSC_ADJ_PER1 (QSERDES_QMP_PLL + 0x14)
#define QSERDES_COM_SSC_ADJ_PER2 (QSERDES_QMP_PLL + 0x18)
#define QSERDES_COM_SSC_EN_CENTER (QSERDES_QMP_PLL + 0x10)
#define QSERDES_COM_SSC_PER1 (QSERDES_QMP_PLL + 0x1C)
#define QSERDES_COM_SSC_PER2 (QSERDES_QMP_PLL + 0x20)
#define QSERDES_COM_SSC_STEP_SIZE1_MODE0 (QSERDES_QMP_PLL + 0x24)
#define QSERDES_COM_SSC_STEP_SIZE1_MODE1 (QSERDES_QMP_PLL + 0x30)
#define QSERDES_COM_SSC_STEP_SIZE2_MODE0 (QSERDES_QMP_PLL + 0x28)
#define QSERDES_COM_SSC_STEP_SIZE2_MODE1 (QSERDES_QMP_PLL + 0x34)
#define QSERDES_COM_SSC_STEP_SIZE3_MODE0 (QSERDES_QMP_PLL + 0x2C)
#define QSERDES_COM_SSC_STEP_SIZE3_MODE1 (QSERDES_QMP_PLL + 0x38)
#define QSERDES_COM_SVS_MODE_CLK_SEL (QSERDES_QMP_PLL + 0x184)
#define QSERDES_COM_SW_RESET (QSERDES_QMP_PLL + 0x170)
#define QSERDES_COM_SYS_CLK_CTRL (QSERDES_QMP_PLL + 0x4C)
#define QSERDES_COM_SYSCLK_BUF_ENABLE (QSERDES_QMP_PLL + 0x50)
#define QSERDES_COM_SYSCLK_DET_COMP_STATUS (QSERDES_QMP_PLL + 0x68)
#define QSERDES_COM_SYSCLK_EN_SEL (QSERDES_QMP_PLL + 0x110)
#define QSERDES_COM_VCO_DC_LEVEL_CTRL (QSERDES_QMP_PLL + 0x1A8)
#define QSERDES_COM_VCO_TUNE1_MODE0 (QSERDES_QMP_PLL + 0xA8)
#define QSERDES_COM_VCO_TUNE1_MODE1 (QSERDES_QMP_PLL + 0x118)
#define QSERDES_COM_VCO_TUNE2_MODE0 (QSERDES_QMP_PLL + 0xAC)
#define QSERDES_COM_VCO_TUNE2_MODE1 (QSERDES_QMP_PLL + 0x11C)
#define QSERDES_COM_VCO_TUNE_CTRL (QSERDES_QMP_PLL + 0x108)
#define QSERDES_COM_VCO_TUNE_INITVAL1 (QSERDES_QMP_PLL + 0x120)
#define QSERDES_COM_VCO_TUNE_INITVAL2 (QSERDES_QMP_PLL + 0x148)
#define QSERDES_COM_VCO_TUNE_MAP (QSERDES_QMP_PLL + 0x10C)
#define QSERDES_COM_VCO_TUNE_MAXVAL1 (QSERDES_QMP_PLL + 0x130)
#define QSERDES_COM_VCO_TUNE_MAXVAL2 (QSERDES_QMP_PLL + 0x134)
#define QSERDES_COM_VCO_TUNE_MINVAL1 (QSERDES_QMP_PLL + 0x128)
#define QSERDES_COM_VCO_TUNE_MINVAL2 (QSERDES_QMP_PLL + 0x12C)
#define QSERDES_COM_VCO_TUNE_TIMER1 (QSERDES_QMP_PLL + 0x138)
#define QSERDES_COM_VCO_TUNE_TIMER2 (QSERDES_QMP_PLL + 0x13C)
#define QSERDES_COM_VCOCAL_DEADMAN_CTRL (QSERDES_QMP_PLL + 0x104)
#define QSERDES_RX 0x600
#define QSERDES_RX_UCDR_FO_GAIN_HALF (QSERDES_RX + 0x0)
#define QSERDES_RX_UCDR_FO_GAIN_QUARTER (QSERDES_RX + 0x4)
#define QSERDES_RX0_UCDR_FO_GAIN (QSERDES_RX + 0x08)
#define QSERDES_RX_UCDR_SO_GAIN_HALF (QSERDES_RX + 0xC)
#define QSERDES_RX_UCDR_SO_GAIN_QUARTER (QSERDES_RX + 0x10)
#define QSERDES_RX0_UCDR_SO_GAIN (QSERDES_RX + 0x14)
#define QSERDES_RX_UCDR_SVS_FO_GAIN_HALF (QSERDES_RX + 0x18)
#define QSERDES_RX_UCDR_SVS_FO_GAIN_QUARTER (QSERDES_RX + 0x1C)
#define QSERDES_RX_UCDR_SVS_FO_GAIN (QSERDES_RX + 0x20)
#define QSERDES_RX_UCDR_SVS_SO_GAIN_HALF (QSERDES_RX + 0x24)
#define QSERDES_RX_UCDR_SVS_SO_GAIN_QUARTER (QSERDES_RX + 0x28)
#define QSERDES_RX_UCDR_SVS_SO_GAIN (QSERDES_RX + 0x2C)
#define QSERDES_RX0_UCDR_FASTLOCK_FO_GAIN (QSERDES_RX + 0x30)
#define QSERDES_RX0_UCDR_SO_SATURATION_AND_ENABLE (QSERDES_RX + 0x34)
#define QSERDES_RX_UCDR_FO_TO_SO_DELAY (QSERDES_RX + 0x38)
#define QSERDES_RX0_UCDR_FASTLOCK_COUNT_LOW (QSERDES_RX + 0x3C)
#define QSERDES_RX0_UCDR_FASTLOCK_COUNT_HIGH (QSERDES_RX + 0x40)
#define QSERDES_RX0_UCDR_PI_CONTROLS (QSERDES_RX + 0x44)
#define QSERDES_RX0_UCDR_PI_CTRL2 (QSERDES_RX + 0x48)
#define QSERDES_RX_UCDR_SB2_THRESH1 (QSERDES_RX + 0x4C)
#define QSERDES_RX_UCDR_SB2_THRESH2 (QSERDES_RX + 0x50)
#define QSERDES_RX_UCDR_SB2_GAIN1 (QSERDES_RX + 0x54)
#define QSERDES_RX_UCDR_SB2_GAIN2 (QSERDES_RX + 0x58)
#define QSERDES_RX_AUX_CONTROL (QSERDES_RX + 0x5C)
#define QSERDES_RX_AUX_DATA_TCOARSE_TFINE (QSERDES_RX + 0x60)
#define QSERDES_RX_RCLK_AUXDATA_SEL (QSERDES_RX + 0x64)
#define QSERDES_RX_AC_JTAG_ENABLE (QSERDES_RX + 0x68)
#define QSERDES_RX_AC_JTAG_INITP (QSERDES_RX + 0x6C)
#define QSERDES_RX_AC_JTAG_INITN (QSERDES_RX + 0x70)
#define QSERDES_RX_AC_JTAG_LVL (QSERDES_RX + 0x74)
#define QSERDES_RX_AC_JTAG_MODE (QSERDES_RX + 0x78)
#define QSERDES_RX_AC_JTAG_RESET (QSERDES_RX + 0x7C)
#define QSERDES_RX0_RX_TERM_BW (QSERDES_RX + 0x80)
#define QSERDES_RX_RX_RCVR_IQ_EN (QSERDES_RX + 0x84)
#define QSERDES_RX_RX_IDAC_I_DC_OFFSETS (QSERDES_RX + 0x88)
#define QSERDES_RX_RX_IDAC_IBAR_DC_OFFSETS (QSERDES_RX + 0x8C)
#define QSERDES_RX_RX_IDAC_Q_DC_OFFSETS (QSERDES_RX + 0x90)
#define QSERDES_RX_RX_IDAC_QBAR_DC_OFFSETS (QSERDES_RX + 0x94)
#define QSERDES_RX_RX_IDAC_A_DC_OFFSETS (QSERDES_RX + 0x98)
#define QSERDES_RX_RX_IDAC_ABAR_DC_OFFSETS (QSERDES_RX + 0x9C)
#define QSERDES_RX_RX_IDAC_EN (QSERDES_RX + 0xA0)
#define QSERDES_RX_RX_IDAC_ENABLES (QSERDES_RX + 0xA4)
#define QSERDES_RX_RX_IDAC_SIGN (QSERDES_RX + 0xA8)
#define QSERDES_RX_RX_HIGHZ_HIGHRATE (QSERDES_RX + 0xAC)
#define QSERDES_RX_RX_TERM_AC_BYPASS_DC_COUPLE_OFFSET (QSERDES_RX + 0xB0)
#define QSERDES_RX_DFE_1 (QSERDES_RX + 0xB4)
#define QSERDES_RX_DFE_2 (QSERDES_RX + 0xB8)
#define QSERDES_RX_DFE_3 (QSERDES_RX + 0xBC)
#define QSERDES_RX_DFE_4 (QSERDES_RX + 0xC0)
#define QSERDES_RX_TX_ADAPT_PRE_THRESH1 (QSERDES_RX + 0xC4)
#define QSERDES_RX_TX_ADAPT_PRE_THRESH2 (QSERDES_RX + 0xC8)
#define QSERDES_RX_TX_ADAPT_POST_THRESH (QSERDES_RX + 0xCC)
#define QSERDES_RX_TX_ADAPT_MAIN_THRESH (QSERDES_RX + 0xD0)
#define QSERDES_RX_VGA_CAL_CNTRL1 (QSERDES_RX + 0xD4)
#define QSERDES_RX0_VGA_CAL_CNTRL2 (QSERDES_RX + 0xD8)
#define QSERDES_RX0_GM_CAL (QSERDES_RX + 0xDC)
#define QSERDES_RX_RX_VGA_GAIN2_LSB (QSERDES_RX + 0xE0)
#define QSERDES_RX_RX_VGA_GAIN2_MSB (QSERDES_RX + 0xE4)
#define QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL1 (QSERDES_RX + 0xE8)
#define QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL2 (QSERDES_RX + 0xEC)
#define QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL3 (QSERDES_RX + 0xF0)
#define QSERDES_RX0_RX_EQU_ADAPTOR_CNTRL4 (QSERDES_RX + 0xF4)
#define QSERDES_RX0_RX_IDAC_TSETTLE_LOW (QSERDES_RX + 0xF8)
#define QSERDES_RX0_RX_IDAC_TSETTLE_HIGH (QSERDES_RX + 0xFC)
#define QSERDES_RX0_RX_IDAC_MEASURE_TIME (QSERDES_RX + 0x100)
#define QSERDES_RX_RX_IDAC_ACCUMULATOR (QSERDES_RX + 0x104)
#define QSERDES_RX_RX_EQ_OFFSET_LSB (QSERDES_RX + 0x108)
#define QSERDES_RX_RX_EQ_OFFSET_MSB (QSERDES_RX + 0x10C)
#define QSERDES_RX0_RX_EQ_OFFSET_ADAPTOR_CNTRL1 (QSERDES_RX + 0x110)
#define QSERDES_RX0_RX_OFFSET_ADAPTOR_CNTRL2 (QSERDES_RX + 0x114)
#define QSERDES_RX_SIGDET_ENABLES (QSERDES_RX + 0x118)
#define QSERDES_RX0_SIGDET_CNTRL (QSERDES_RX + 0x11C)
#define QSERDES_RX0_SIGDET_CAL_CTRL1 (QSERDES_RX + 0x1E4)
#define QSERDES_RX_SIGDET_LVL (QSERDES_RX + 0x120)
#define QSERDES_RX0_SIGDET_DEGLITCH_CNTRL (QSERDES_RX + 0x124)
#define QSERDES_RX0_RX_BAND (QSERDES_RX + 0x128)
#define QSERDES_RX_CDR_FREEZE_UP_DN (QSERDES_RX + 0x12C)
#define QSERDES_RX_CDR_RESET_OVERRIDE (QSERDES_RX + 0x130)
#define QSERDES_RX_RX_INTERFACE_MODE (QSERDES_RX + 0x134)
#define QSERDES_RX_JITTER_GEN_MODE (QSERDES_RX + 0x138)
#define QSERDES_RX_SJ_AMP1 (QSERDES_RX + 0x13C)
#define QSERDES_RX_SJ_AMP2 (QSERDES_RX + 0x140)
#define QSERDES_RX_SJ_PER1 (QSERDES_RX + 0x144)
#define QSERDES_RX_SJ_PER2 (QSERDES_RX + 0x148)
#define QSERDES_RX_PPM_OFFSET1 (QSERDES_RX + 0x14C)
#define QSERDES_RX_PPM_OFFSET2 (QSERDES_RX + 0x150)
#define QSERDES_RX_SIGN_PPM_PERIOD1 (QSERDES_RX + 0x154)
#define QSERDES_RX_SIGN_PPM_PERIOD2 (QSERDES_RX + 0x158)
#define QSERDES_RX0_RX_MODE_00_LOW (QSERDES_RX + 0x15C)
#define QSERDES_RX0_RX_MODE_00_HIGH (QSERDES_RX + 0x160)
#define QSERDES_RX0_RX_MODE_00_HIGH2 (QSERDES_RX + 0x164)
#define QSERDES_RX0_RX_MODE_00_HIGH3 (QSERDES_RX + 0x168)
#define QSERDES_RX0_RX_MODE_00_HIGH4 (QSERDES_RX + 0x16C)
#define QSERDES_RX0_RX_MODE_01_LOW (QSERDES_RX + 0x170)
#define QSERDES_RX0_RX_MODE_01_HIGH (QSERDES_RX + 0x174)
#define QSERDES_RX0_RX_MODE_01_HIGH2 (QSERDES_RX + 0x178)
#define QSERDES_RX0_RX_MODE_01_HIGH3 (QSERDES_RX + 0x17C)
#define QSERDES_RX0_RX_MODE_01_HIGH4 (QSERDES_RX + 0x180)
#define QSERDES_RX0_RX_MODE_10_LOW (QSERDES_RX + 0x184)
#define QSERDES_RX0_RX_MODE_10_HIGH (QSERDES_RX + 0x188)
#define QSERDES_RX0_RX_MODE_10_HIGH2 (QSERDES_RX + 0x18C)
#define QSERDES_RX0_RX_MODE_10_HIGH3 (QSERDES_RX + 0x190)
#define QSERDES_RX0_RX_MODE_10_HIGH4 (QSERDES_RX + 0x194)
#define QSERDES_RX_PHPRE_CTRL (QSERDES_RX + 0x198)
#define QSERDES_RX_PHPRE_INITVAL (QSERDES_RX + 0x19C)
#define QSERDES_RX_DFE_EN_TIMER (QSERDES_RX + 0x1A0)
#define QSERDES_RX_DFE_CTLE_POST_CAL_OFFSET (QSERDES_RX + 0x1A4)
#define QSERDES_RX0_DCC_CTRL1 (QSERDES_RX + 0x1A8)
#define QSERDES_RX_DCC_CTRL2 (QSERDES_RX + 0x1AC)
#define QSERDES_RX_VTH_CODE (QSERDES_RX + 0x1B0)
#define QSERDES_RX_VTH_MIN_THRESH (QSERDES_RX + 0x1B4)
#define QSERDES_RX_VTH_MAX_THRESH (QSERDES_RX + 0x1B8)
#define QSERDES_RX_ALOG_OBSV_BUS_CTRL_1 (QSERDES_RX + 0x1BC)
#define QSERDES_RX_PI_CTRL1 (QSERDES_RX + 0x1C0)
#define QSERDES_RX_PI_CTRL2 (QSERDES_RX + 0x1C4)
#define QSERDES_RX_PI_QUAD (QSERDES_RX + 0x1C8)
#define QSERDES_RX_IDATA1 (QSERDES_RX + 0x1CC)
#define QSERDES_RX_IDATA2 (QSERDES_RX + 0x1D0)
#define QSERDES_RX_AUX_DATA1 (QSERDES_RX + 0x1D4)
#define QSERDES_RX_AUX_DATA2 (QSERDES_RX + 0x1D8)
#define QSERDES_RX_AC_JTAG_OUTP (QSERDES_RX + 0x1DC)
#define QSERDES_RX_AC_JTAG_OUTN (QSERDES_RX + 0x1E0)
#define QSERDES_RX_RX_SIGDET (QSERDES_RX + 0x1E4)
#define QSERDES_RX_ALOG_OBSV_BUS_STATUS_1 (QSERDES_RX + 0x1E0)
#define QSERDES_RX0_SIGDET_CAL_CTRL2_AND_CDR_LOCK_EDGE (QSERDES_RX + 0x1E8)
#define QSERDES_TX 0x400
#define QSERDES_TX_BIST_MODE_LANENO (QSERDES_TX + 0x0)
#define QSERDES_TX_BIST_INVERT (QSERDES_TX + 0x4)
#define QSERDES_TX_CLKBUF_ENABLE (QSERDES_TX + 0x8)
#define QSERDES_TX_TX_EMP_POST1_LVL (QSERDES_TX + 0xC)
#define QSERDES_TX_TX_IDLE_LVL_LARGE_AMP (QSERDES_TX + 0x10)
#define QSERDES_TX_TX_DRV_LVL (QSERDES_TX + 0x14)
#define QSERDES_TX_TX_DRV_LVL_OFFSET (QSERDES_TX + 0x18)
#define QSERDES_TX_RESET_TSYNC_EN (QSERDES_TX + 0x1C)
#define QSERDES_TX_PRE_STALL_LDO_BOOST_EN (QSERDES_TX + 0x20)
#define QSERDES_TX0_TX_BAND (QSERDES_TX + 0x24)
#define QSERDES_TX0_SLEW_CNTL (QSERDES_TX + 0x28)
#define QSERDES_TX_INTERFACE_SELECT (QSERDES_TX + 0x2C)
#define QSERDES_TX_LPB_EN (QSERDES_TX + 0x30)
#define QSERDES_TX_RES_CODE_LANE_TX (QSERDES_TX + 0x34)
#define QSERDES_TX_RES_CODE_LANE_RX (QSERDES_TX + 0x38)
#define QSERDES_TX0_RES_CODE_LANE_OFFSET_TX (QSERDES_TX + 0x3C)
#define QSERDES_TX0_RES_CODE_LANE_OFFSET_RX (QSERDES_TX + 0x40)
#define QSERDES_TX_PERL_LENGTH1 (QSERDES_TX + 0x44)
#define QSERDES_TX_PERL_LENGTH2 (QSERDES_TX + 0x48)
#define QSERDES_TX_SERDES_BYP_EN_OUT (QSERDES_TX + 0x4C)
#define QSERDES_TX_DEBUG_BUS_SEL (QSERDES_TX + 0x50)
#define QSERDES_TX_TRANSCEIVER_BIAS_EN (QSERDES_TX + 0x54)
#define QSERDES_TX_HIGHZ_DRVR_EN (QSERDES_TX + 0x58)
#define QSERDES_TX_TX_POL_INV (QSERDES_TX + 0x5C)
#define QSERDES_TX_PARRATE_REC_DETECT_IDLE_EN (QSERDES_TX + 0x60)
#define QSERDES_TX_BIST_PATTERN1 (QSERDES_TX + 0x64)
#define QSERDES_TX_BIST_PATTERN2 (QSERDES_TX + 0x68)
#define QSERDES_TX_BIST_PATTERN3 (QSERDES_TX + 0x6C)
#define QSERDES_TX_BIST_PATTERN4 (QSERDES_TX + 0x70)
#define QSERDES_TX_BIST_PATTERN5 (QSERDES_TX + 0x74)
#define QSERDES_TX_BIST_PATTERN6 (QSERDES_TX + 0x78)
#define QSERDES_TX_BIST_PATTERN7 (QSERDES_TX + 0x7C)
#define QSERDES_TX_BIST_PATTERN8 (QSERDES_TX + 0x80)
#define QSERDES_TX0_LANE_MODE_1 (QSERDES_TX + 0x84)
#define QSERDES_TX0_LANE_MODE_2 (QSERDES_TX + 0x88)
#define QSERDES_TX0_LANE_MODE_3 (QSERDES_TX + 0x8C)
#define QSERDES_TX_LANE_MODE_4 (QSERDES_TX + 0x90)
#define QSERDES_TX_LANE_MODE_5 (QSERDES_TX + 0x94)
#define QSERDES_TX_ATB_SEL1 (QSERDES_TX + 0x98)
#define QSERDES_TX_ATB_SEL2 (QSERDES_TX + 0x9C)
#define QSERDES_TX_RCV_DETECT_LVL (QSERDES_TX + 0xA0)
#define QSERDES_TX0_RCV_DETECT_LVL_2 (QSERDES_TX + 0xA4)
#define QSERDES_TX_PRBS_SEED1 (QSERDES_TX + 0xA8)
#define QSERDES_TX_PRBS_SEED2 (QSERDES_TX + 0xAC)
#define QSERDES_TX_PRBS_SEED3 (QSERDES_TX + 0xB0)
#define QSERDES_TX_PRBS_SEED4 (QSERDES_TX + 0xB4)
#define QSERDES_TX_RESET_GEN (QSERDES_TX + 0xB8)
#define QSERDES_TX_RESET_GEN_MUXES (QSERDES_TX + 0xBC)
#define QSERDES_TX0_TRAN_DRVR_EMP_EN (QSERDES_TX + 0xC0)
#define QSERDES_TX_TX_INTERFACE_MODE (QSERDES_TX + 0xC4)
#define QSERDES_TX_VMODE_CTRL1 (QSERDES_TX + 0xC8)
#define QSERDES_TX_ALOG_OBSV_BUS_CTRL_1 (QSERDES_TX + 0xCC)
#define QSERDES_TX_BIST_STATUS (QSERDES_TX + 0xD0)
#define QSERDES_TX_BIST_ERROR_COUNT1 (QSERDES_TX + 0xD4)
#define QSERDES_TX_BIST_ERROR_COUNT2 (QSERDES_TX + 0xD8)
#define QSERDES_TX_ALOG_OBSV_BUS_STATUS_1 (QSERDES_TX + 0xDC)
#define QSERDES_TX_LANE_DIG_CONFIG (QSERDES_TX + 0xE0)
#define QSERDES_TX_PI_QEC_CTRL (QSERDES_TX + 0xE4)
#define QSERDES_TX_PRE_EMPH (QSERDES_TX + 0xE8)
#define QSERDES_TX_SW_RESET (QSERDES_TX + 0xEC)
#define QSERDES_TX_DCC_OFFSET (QSERDES_TX + 0xF0)
#define QSERDES_TX_DCC_CMUX_POSTCAL_OFFSET (QSERDES_TX + 0xF4)
#define QSERDES_TX_DCC_CMUX_CAL_CTRL1 (QSERDES_TX + 0xF8)
#define QSERDES_TX_DCC_CMUX_CAL_CTRL2 (QSERDES_TX + 0xFC)
#define QSERDES_TX_DIG_BKUP_CTRL (QSERDES_TX + 0x100)
#define QSERDES_TX_DEBUG_BUS0 (QSERDES_TX + 0x104)
#define QSERDES_TX_DEBUG_BUS1 (QSERDES_TX + 0x108)
#define QSERDES_TX_DEBUG_BUS2 (QSERDES_TX + 0x10C)
#define QSERDES_TX_DEBUG_BUS3 (QSERDES_TX + 0x110)
#define QSERDES_TX_READ_EQCODE (QSERDES_TX + 0x114)
#define QSERDES_TX_READ_OFFSETCODE (QSERDES_TX + 0x118)
#define QSERDES_TX_IA_ERROR_COUNTER_LOW (QSERDES_TX + 0x11C)
#define QSERDES_TX_IA_ERROR_COUNTER_HIGH (QSERDES_TX + 0x120)
#define QSERDES_TX_VGA_READ_CODE (QSERDES_TX + 0x124)
#define QSERDES_TX_VTH_READ_CODE (QSERDES_TX + 0x128)
#define QSERDES_TX_DFE_TAP1_READ_CODE (QSERDES_TX + 0x12C)
#define QSERDES_TX_DFE_TAP2_READ_CODE (QSERDES_TX + 0x130)
#define QSERDES_TX_IDAC_STATUS_I (QSERDES_TX + 0x134)
#define QSERDES_TX_IDAC_STATUS_IBAR (QSERDES_TX + 0x138)
#define QSERDES_TX_IDAC_STATUS_Q (QSERDES_TX + 0x13C)
#define QSERDES_TX_IDAC_STATUS_QBAR (QSERDES_TX + 0x140)
#define QSERDES_TX_IDAC_STATUS_A (QSERDES_TX + 0x144)
#define QSERDES_TX_IDAC_STATUS_ABAR (QSERDES_TX + 0x148)
#define QSERDES_TX_IDAC_STATUS_SM_ON (QSERDES_TX + 0x14C)
#define QSERDES_TX_IDAC_STATUS_CAL_DONE (QSERDES_TX + 0x150)
#define QSERDES_TX_IDAC_STATUS_SIGNERROR (QSERDES_TX + 0x154)
#define QSERDES_TX_DCC_CAL_STATUS (QSERDES_TX + 0x158)
#define QSERDES_TX_DCC_READ_CODE_STATUS (QSERDES_TX + 0x15C)
#define QSERDES_PCS 0xC00
#define SGMII_PHY_PCS_PHY_START (QSERDES_PCS + 0x0)
#define SGMII_PHY_PCS_POWER_DOWN_CONTROL (QSERDES_PCS + 0x4)
#define SGMII_PHY_PCS_SW_RESET (QSERDES_PCS + 0x8)
#define SGMII_PHY_PCS_LINE_RESET_TIME (QSERDES_PCS + 0xC)
#define QSERDES_PCS_PCS_CTRL1 (QSERDES_PCS + 0x10)
#define QSERDES_PCS_TSYNC_RSYNC_CNTL (QSERDES_PCS + 0x14)
#define QSERDES_PCS_RETIME_BUFFER_EN (QSERDES_PCS + 0x18)
#define QSERDES_PCS_PLL_CNTL (QSERDES_PCS + 0x1C)
#define SGMII_PHY_PCS_TX_LARGE_AMP_DRV_LVL (QSERDES_PCS + 0x20)
#define QSERDES_PCS_TX_LARGE_AMP_POST_EMP_LVL (QSERDES_PCS + 0x24)
#define SGMII_PHY_PCS_TX_SMALL_AMP_DRV_LVL (QSERDES_PCS + 0x28)
#define QSERDES_PCS_TX_SMALL_AMP_POST_EMP_LVL (QSERDES_PCS + 0x2C)
#define QSERDES_PCS_RX_SYNC_WAIT_TIME (QSERDES_PCS + 0x30)
#define QSERDES_PCS_L0_BIST_CTRL (QSERDES_PCS + 0x34)
#define QSERDES_PCS_MISC_BIST_CTRL (QSERDES_PCS + 0x38)
#define QSERDES_PCS_BIST_PRBS_POLY0 (QSERDES_PCS + 0x3C)
#define QSERDES_PCS_BIST_PRBS_POLY1 (QSERDES_PCS + 0x40)
#define QSERDES_PCS_BIST_PRBS_SEED0 (QSERDES_PCS + 0x44)
#define QSERDES_PCS_BIST_PRBS_SEED1 (QSERDES_PCS + 0x48)
#define QSERDES_PCS_BIST_PRBS_SEED2 (QSERDES_PCS + 0x4C)
#define QSERDES_PCS_BIST_NUM_IPG (QSERDES_PCS + 0x50)
#define QSERDES_PCS_RX_HS_EQUALIZER_SETTING_CAPABILITY (QSERDES_PCS + 0x54)
#define QSERDES_PCS_RX_HS_ADAPT_LENGTH_REFRESH_CAPABILITY (QSERDES_PCS + 0x58)
#define QSERDES_PCS_RX_HS_ADAPT_LENGTH_INITIAL_CAPABILITY (QSERDES_PCS + 0x5C)
#define QSERDES_PCS_DEBUG_BUS_CLKSEL (QSERDES_PCS + 0x60)
#define QSERDES_PCS_DEBUG_BUS_0_CTRL (QSERDES_PCS + 0x64)
#define QSERDES_PCS_DEBUG_BUS_1_CTRL (QSERDES_PCS + 0x68)
#define QSERDES_PCS_DEBUG_BUS_2_CTRL (QSERDES_PCS + 0x6C)
#define QSERDES_PCS_DEBUG_BUS_3_CTRL (QSERDES_PCS + 0x70)
#define QSERDES_PCS_DEBUG_BUS_0_STATUS_CHK (QSERDES_PCS + 0x74)
#define QSERDES_PCS_DEBUG_BUS_1_STATUS_CHK (QSERDES_PCS + 0x78)
#define QSERDES_PCS_DEBUG_BUS_2_STATUS_CHK (QSERDES_PCS + 0x7C)
#define QSERDES_PCS_DEBUG_BUS_3_STATUS_CHK (QSERDES_PCS + 0x80)
#define QSERDES_PCS_RX_MIN_HIBERN8_TIME (QSERDES_PCS + 0x84)
#define QSERDES_PCS_RX_SIGDET_CTRL1 (QSERDES_PCS + 0x88)
#define QSERDES_PCS_RX_SIGDET_CTRL2 (QSERDES_PCS + 0x8C)
#define QSERDES_PCS_TCLK_SYM_CNTR_INITVAL (QSERDES_PCS + 0x90)
#define SGMII_PHY_PCS_READY_STATUS (QSERDES_PCS + 0x94)
#define QSERDES_PCS_PCS_MISC_STATUS (QSERDES_PCS + 0x98)
#define QSERDES_PCS_L0_BIST_CHK_ERR_CNT_L_STATUS (QSERDES_PCS + 0x9C)
#define QSERDES_PCS_L0_BIST_CHK_ERR_CNT_H_STATUS (QSERDES_PCS + 0xA0)
#define QSERDES_PCS_L0_BIST_CHK_STATUS (QSERDES_PCS + 0xA4)
#define QSERDES_PCS_DEBUG_BUS_0_STATUS (QSERDES_PCS + 0xA8)
#define QSERDES_PCS_DEBUG_BUS_1_STATUS (QSERDES_PCS + 0xAC)
#define QSERDES_PCS_DEBUG_BUS_2_STATUS (QSERDES_PCS + 0xB0)
#define QSERDES_PCS_DEBUG_BUS_3_STATUS (QSERDES_PCS + 0xB4)
#define QSERDES_PCS_REVISION_ID0 (QSERDES_PCS + 0xB8)
#define QSERDES_PCS_REVISION_ID1 (QSERDES_PCS + 0xBC)
#define QSERDES_PCS_REVISION_ID2 (QSERDES_PCS + 0xC0)
#define QSERDES_PCS_REVISION_ID3 (QSERDES_PCS + 0xC4)
#define QSERDES_PCS_SYSCLK_EN_COUNT_CTRL (QSERDES_PCS + 0xC8)
#define QSERDES_PCS_PLL_SHUTDOWN_CTRL (QSERDES_PCS + 0xCC)
#define QSERDES_PCS_TIMER_20US_CORECLK_STEPS_MSB (QSERDES_PCS + 0xD0)
#define QSERDES_PCS_TIMER_20US_CORECLK_STEPS_LSB (QSERDES_PCS + 0xD4)
#define SGMII_PHY_PCS_TX_MID_TERM_CTRL1 (QSERDES_PCS + 0xD8)
#define SGMII_PHY_PCS_TX_MID_TERM_CTRL2 (QSERDES_PCS + 0xDC)
#define QSERDES_PCS_MULTI_LANE_CTRL1 (QSERDES_PCS + 0xE0)
#define QSERDES_PCS_L1_BIST_CTRL (QSERDES_PCS + 0xE4)
#define QSERDES_PCS_L1_BIST_CHK_ERR_CNT_L_STATUS (QSERDES_PCS + 0xE8)
#define QSERDES_PCS_L1_BIST_CHK_ERR_CNT_H_STATUS (QSERDES_PCS + 0xEC)
#define QSERDES_PCS_L1_BIST_CHK_STATUS (QSERDES_PCS + 0xF0)
#define QSERDES_PCS_STATUS_CLEAR (QSERDES_PCS + 0xF4)
#define QSERDES_PCS_RX_HSG4_SYNC_WAIT_TIME (QSERDES_PCS + 0xF8)
#define QSERDES_PCS_SGMII_MISC_CTRL1 (QSERDES_PCS + 0xFC)
#define QSERDES_PCS_SGMII_MISC_CTRL2 (QSERDES_PCS + 0x100)
#define QSERDES_PCS_SGMII_MISC_CTRL3 (QSERDES_PCS + 0x104)
#define QSERDES_PCS_SGMII_MISC_CTRL4 (QSERDES_PCS + 0x108)
#define QSERDES_PCS_SGMII_MISC_CTRL5 (QSERDES_PCS + 0x10C)
#define QSERDES_PCS_SGMII_MISC_CTRL6 (QSERDES_PCS + 0x110)
#define QSERDES_PCS_SGMII_INTERRUPT_STATUS (QSERDES_PCS + 0x11C)
#define QSERDES_PCS_SGMII_IRQ_CLEAR (QSERDES_PCS + 0x120)
#define QSERDES_PCS_SGMII_IRQ_MASK (QSERDES_PCS + 0x124)
#define SGMII_PHY_PCS_SGMII_MISC_CTRL7 (QSERDES_PCS + 0x114)
#define SGMII_PHY_PCS_SGMII_MISC_CTRL8 (QSERDES_PCS + 0x118)
#define QSERDES_PCS_2 0x200
#define QSERDES_PCS2_PCS_CMN_STATUS (QSERDES_PCS_2 + 0x0)
#define QSERDES_PCS2_TCLK_CTRL_STATUS (QSERDES_PCS_2 + 0x4)
#define QSERDES_PCS2_TX_LANE0_0_STATUS (QSERDES_PCS_2 + 0x8)
#define QSERDES_PCS2_TX_LANE0_1_STATUS (QSERDES_PCS_2 + 0xC)
#define QSERDES_PCS2_TX_LANE0_2_STATUS (QSERDES_PCS_2 + 0x10)
#define QSERDES_PCS2_RX_LANE0_0_STATUS (QSERDES_PCS_2 + 0x14)
#define QSERDES_PCS2_RX_LANE0_1_STATUS (QSERDES_PCS_2 + 0x18)
#define QSERDES_PCS2_RX_LANE0_3_STATUS (QSERDES_PCS_2 + 0x1C)
#define QSERDES_PCS2_TX_LANE1_0_STATUS (QSERDES_PCS_2 + 0x20)
#define QSERDES_PCS2_TX_LANE1_1_STATUS (QSERDES_PCS_2 + 0x24)
#define QSERDES_PCS2_TX_LANE1_2_STATUS (QSERDES_PCS_2 + 0x28)
#define QSERDES_PCS2_RX_LANE1_0_STATUS (QSERDES_PCS_2 + 0x2C)
#define QSERDES_PCS2_RX_LANE1_1_STATUS (QSERDES_PCS_2 + 0x30)
#define QSERDES_PCS2_RX_LANE1_3_STATUS (QSERDES_PCS_2 + 0x34)
#define QSERDES3_QMP_PLL 0x0
#define QSERDES3_COM_ATB_SEL1 (QSERDES3_QMP_PLL + 0x0)
#define QSERDES3_COM_ATB_SEL2 (QSERDES3_QMP_PLL + 0x4)
#define QSERDES3_COM_BG_TIMER (QSERDES3_QMP_PLL + 0xC)
#define QSERDES3_COM_BIAS_EN_CLKBUFLR_EN (QSERDES3_QMP_PLL + 0x44)
#define QSERDES3_COM_BIAS_EN_CTRL_BY_PSM (QSERDES3_QMP_PLL + 0x90)
#define QSERDES3_COM_BIN_VCOCAL_CMP_CODE1_MODE0 (QSERDES3_QMP_PLL + 0x1AC)
#define QSERDES3_COM_BIN_VCOCAL_CMP_CODE1_MODE1 (QSERDES3_QMP_PLL + 0x1B4)
#define QSERDES3_COM_BIN_VCOCAL_CMP_CODE2_MODE0 (QSERDES3_QMP_PLL + 0x1B0)
#define QSERDES3_COM_BIN_VCOCAL_CMP_CODE2_MODE1 (QSERDES3_QMP_PLL + 0x1B8)
#define QSERDES3_COM_BIN_VCOCAL_HSCLK_SEL (QSERDES3_QMP_PLL + 0x1BC)
#define QSERDES3_COM_C_READY_STATUS (QSERDES3_QMP_PLL + 0x178)
#define QSERDES3_COM_CLK_ENABLE1 (QSERDES3_QMP_PLL + 0x48)
#define QSERDES3_COM_CLK_EP_DIV_MODE0 (QSERDES3_QMP_PLL + 0x6C)
#define QSERDES3_COM_CLK_EP_DIV_MODE1 (QSERDES3_QMP_PLL + 0x70)
#define QSERDES3_COM_CLK_SELECT (QSERDES3_QMP_PLL + 0x154)
#define QSERDES3_COM_CML_SYSCLK_SEL (QSERDES3_QMP_PLL + 0x98)
#define QSERDES3_COM_CMN_CONFIG (QSERDES3_QMP_PLL + 0x17C)
#define QSERDES3_COM_CMN_IETRIM (QSERDES3_QMP_PLL + 0x5C)
#define QSERDES3_COM_CMN_IPTRIM (QSERDES3_QMP_PLL + 0x60)
#define QSERDES3_COM_CMN_MISC1 (QSERDES3_QMP_PLL + 0x19C)
#define QSERDES3_COM_CMN_MODE (QSERDES3_QMP_PLL + 0x1A0)
#define QSERDES3_COM_CMN_MODE_CONTD (QSERDES3_QMP_PLL + 0x1A4)
#define QSERDES3_COM_CMN_RATE_OVERRIDE (QSERDES3_QMP_PLL + 0x180)
#define QSERDES3_COM_CMN_STATUS (QSERDES3_QMP_PLL + 0x140)
#define QSERDES3_COM_CORE_CLK_EN (QSERDES3_QMP_PLL + 0x174)
#define QSERDES3_COM_CORECLK_DIV_MODE0 (QSERDES3_QMP_PLL + 0x168)
#define QSERDES3_COM_CORECLK_DIV_MODE1 (QSERDES3_QMP_PLL + 0x16C)
#define QSERDES3_COM_CP_CTRL_MODE0 (QSERDES3_QMP_PLL + 0x74)
#define QSERDES3_COM_CP_CTRL_MODE1 (QSERDES3_QMP_PLL + 0x78)
#define QSERDES3_COM_DEBUG_BUS0 (QSERDES3_QMP_PLL + 0x188)
#define QSERDES3_COM_DEBUG_BUS1 (QSERDES3_QMP_PLL + 0x18C)
#define QSERDES3_COM_DEBUG_BUS2 (QSERDES3_QMP_PLL + 0x190)
#define QSERDES3_COM_DEBUG_BUS3 (QSERDES3_QMP_PLL + 0x194)
#define QSERDES3_COM_DEBUG_BUS_SEL (QSERDES3_QMP_PLL + 0x198)
#define QSERDES3_COM_DEC_START_MODE0 (QSERDES3_QMP_PLL + 0xBC)
#define QSERDES3_COM_DEC_START_MODE1 (QSERDES3_QMP_PLL + 0xC4)
#define QSERDES3_COM_DEC_START_MSB_MODE0 (QSERDES3_QMP_PLL + 0xC0)
#define QSERDES3_COM_DEC_START_MSB_MODE1 (QSERDES3_QMP_PLL + 0xC8)
#define QSERDES3_COM_DIV_FRAC_START1_MODE0 (QSERDES3_QMP_PLL + 0xCC)
#define QSERDES3_COM_DIV_FRAC_START1_MODE1 (QSERDES3_QMP_PLL + 0xD8)
#define QSERDES3_COM_DIV_FRAC_START2_MODE0 (QSERDES3_QMP_PLL + 0xD0)
#define QSERDES3_COM_DIV_FRAC_START2_MODE1 (QSERDES3_QMP_PLL + 0xDC)
#define QSERDES3_COM_DIV_FRAC_START3_MODE0 (QSERDES3_QMP_PLL + 0xD4)
#define QSERDES3_COM_DIV_FRAC_START3_MODE1 (QSERDES3_QMP_PLL + 0xE0)
#define QSERDES3_COM_EP_CLOCK_DETECT_CTRL (QSERDES3_QMP_PLL + 0x64)
#define QSERDES3_COM_FREQ_UPDATE (QSERDES3_QMP_PLL + 0x8)
#define QSERDES3_COM_HSCLK_HS_SWITCH_SEL (QSERDES3_QMP_PLL + 0x15C)
#define QSERDES3_COM_HSCLK_SEL (QSERDES3_QMP_PLL + 0x158)
#define QSERDES3_COM_INTEGLOOP_BINCODE_STATUS (QSERDES3_QMP_PLL + 0x160)
#define QSERDES3_COM_INTEGLOOP_EN (QSERDES3_QMP_PLL + 0xE8)
#define QSERDES3_COM_INTEGLOOP_GAIN0_MODE0 (QSERDES3_QMP_PLL + 0xEC)
#define QSERDES3_COM_INTEGLOOP_GAIN0_MODE1 (QSERDES3_QMP_PLL + 0xF4)
#define QSERDES3_COM_INTEGLOOP_GAIN1_MODE0 (QSERDES3_QMP_PLL + 0xF0)
#define QSERDES3_COM_INTEGLOOP_GAIN1_MODE1 (QSERDES3_QMP_PLL + 0xF8)
#define QSERDES3_COM_INTEGLOOP_INITVAL (QSERDES3_QMP_PLL + 0xE4)
#define QSERDES3_COM_INTEGLOOP_P_PATH_GAIN0 (QSERDES3_QMP_PLL + 0xFC)
#define QSERDES3_COM_INTEGLOOP_P_PATH_GAIN1 (QSERDES3_QMP_PLL + 0x100)
#define QSERDES3_COM_LOCK_CMP1_MODE0 (QSERDES3_QMP_PLL + 0xAC)
#define QSERDES3_COM_LOCK_CMP1_MODE1 (QSERDES3_QMP_PLL + 0xB4)
#define QSERDES3_COM_LOCK_CMP2_MODE0 (QSERDES3_QMP_PLL + 0xB0)
#define QSERDES3_COM_LOCK_CMP2_MODE1 (QSERDES3_QMP_PLL + 0xB8)
#define QSERDES3_COM_LOCK_CMP_CFG (QSERDES3_QMP_PLL + 0xA8)
#define QSERDES3_COM_LOCK_CMP_EN (QSERDES3_QMP_PLL + 0xA4)
#define QSERDES3_COM_MODE_OPERATION_STATUS (QSERDES3_QMP_PLL + 0x1C4)
#define QSERDES3_COM_PLL_ANALOG (QSERDES3_QMP_PLL + 0x164)
#define QSERDES3_COM_PLL_CCTRL_MODE0 (QSERDES3_QMP_PLL + 0x84)
#define QSERDES3_COM_PLL_CCTRL_MODE1 (QSERDES3_QMP_PLL + 0x88)
#define QSERDES3_COM_PLL_CNTRL (QSERDES3_QMP_PLL + 0x8C)
#define QSERDES3_COM_PLL_EN (QSERDES3_QMP_PLL + 0x54)
#define QSERDES3_COM_PLL_IVCO (QSERDES3_QMP_PLL + 0x58)
#define QSERDES3_COM_PLL_RCTRL_MODE0 (QSERDES3_QMP_PLL + 0x7C)
#define QSERDES3_COM_PLL_RCTRL_MODE1 (QSERDES3_QMP_PLL + 0x80)
#define QSERDES3_COM_PLLCAL_CODE1_STATUS (QSERDES3_QMP_PLL + 0x14C)
#define QSERDES3_COM_PLLCAL_CODE2_STATUS (QSERDES3_QMP_PLL + 0x150)
#define QSERDES3_COM_POST_DIV (QSERDES3_QMP_PLL + 0x3C)
#define QSERDES3_COM_POST_DIV_MUX (QSERDES3_QMP_PLL + 0x40)
#define QSERDES3_COM_RESERVED_1 (QSERDES3_QMP_PLL + 0x1C0)
#define QSERDES3_COM_RESET_SM_STATUS (QSERDES3_QMP_PLL + 0x144)
#define QSERDES3_COM_RESETSM_CNTRL (QSERDES3_QMP_PLL + 0x9C)
#define QSERDES3_COM_RESETSM_CNTRL2 (QSERDES3_QMP_PLL + 0xA0)
#define QSERDES3_COM_RESTRIM_CODE_STATUS (QSERDES3_QMP_PLL + 0x148)
#define QSERDES3_COM_SSC_ADJ_PER1 (QSERDES3_QMP_PLL + 0x14)
#define QSERDES3_COM_SSC_ADJ_PER2 (QSERDES3_QMP_PLL + 0x18)
#define QSERDES3_COM_SSC_EN_CENTER (QSERDES3_QMP_PLL + 0x10)
#define QSERDES3_COM_SSC_PER1 (QSERDES3_QMP_PLL + 0x1C)
#define QSERDES3_COM_SSC_PER2 (QSERDES3_QMP_PLL + 0x20)
#define QSERDES3_COM_SSC_STEP_SIZE1_MODE0 (QSERDES3_QMP_PLL + 0x24)
#define QSERDES3_COM_SSC_STEP_SIZE1_MODE1 (QSERDES3_QMP_PLL + 0x30)
#define QSERDES3_COM_SSC_STEP_SIZE2_MODE0 (QSERDES3_QMP_PLL + 0x28)
#define QSERDES3_COM_SSC_STEP_SIZE2_MODE1 (QSERDES3_QMP_PLL + 0x34)
#define QSERDES3_COM_SSC_STEP_SIZE3_MODE0 (QSERDES3_QMP_PLL + 0x2C)
#define QSERDES3_COM_SSC_STEP_SIZE3_MODE1 (QSERDES3_QMP_PLL + 0x38)
#define QSERDES3_COM_SVS_MODE_CLK_SEL (QSERDES3_QMP_PLL + 0x184)
#define QSERDES3_COM_SW_RESET (QSERDES3_QMP_PLL + 0x170)
#define QSERDES3_COM_SYS_CLK_CTRL (QSERDES3_QMP_PLL + 0x4C)
#define QSERDES3_COM_SYSCLK_BUF_ENABLE (QSERDES3_QMP_PLL + 0x50)
#define QSERDES3_COM_SYSCLK_DET_COMP_STATUS (QSERDES3_QMP_PLL + 0x68)
#define QSERDES3_COM_SYSCLK_EN_SEL (QSERDES3_QMP_PLL + 0x94)
#define QSERDES3_COM_VCO_DC_LEVEL_CTRL (QSERDES3_QMP_PLL + 0x1A8)
#define QSERDES3_COM_VCO_TUNE1_MODE0 (QSERDES3_QMP_PLL + 0x110)
#define QSERDES3_COM_VCO_TUNE1_MODE1 (QSERDES3_QMP_PLL + 0x118)
#define QSERDES3_COM_VCO_TUNE2_MODE0 (QSERDES3_QMP_PLL + 0x114)
#define QSERDES3_COM_VCO_TUNE2_MODE1 (QSERDES3_QMP_PLL + 0x11C)
#define QSERDES3_COM_VCO_TUNE_CTRL (QSERDES3_QMP_PLL + 0x108)
#define QSERDES3_COM_VCO_TUNE_INITVAL1 (QSERDES3_QMP_PLL + 0x120)
#define QSERDES3_COM_VCO_TUNE_INITVAL2 (QSERDES3_QMP_PLL + 0x124)
#define QSERDES3_COM_VCO_TUNE_MAP (QSERDES3_QMP_PLL + 0x10C)
#define QSERDES3_COM_VCO_TUNE_MAXVAL1 (QSERDES3_QMP_PLL + 0x130)
#define QSERDES3_COM_VCO_TUNE_MAXVAL2 (QSERDES3_QMP_PLL + 0x134)
#define QSERDES3_COM_VCO_TUNE_MINVAL1 (QSERDES3_QMP_PLL + 0x128)
#define QSERDES3_COM_VCO_TUNE_MINVAL2 (QSERDES3_QMP_PLL + 0x12C)
#define QSERDES3_COM_VCO_TUNE_TIMER1 (QSERDES3_QMP_PLL + 0x138)
#define QSERDES3_COM_VCO_TUNE_TIMER2 (QSERDES3_QMP_PLL + 0x13C)
#define QSERDES3_COM_VCOCAL_DEADMAN_CTRL (QSERDES3_QMP_PLL + 0x104)
#define QSERDES3_RX 0x600
#define QSERDES3_RX_UCDR_FO_GAIN_HALF (QSERDES3_RX + 0x0)
#define QSERDES3_RX_UCDR_FO_GAIN_QUARTER (QSERDES3_RX + 0x4)
#define QSERDES3_RX_UCDR_FO_GAIN (QSERDES3_RX + 0x8)
#define QSERDES3_RX_UCDR_SO_GAIN_HALF (QSERDES3_RX + 0xC)
#define QSERDES3_RX_UCDR_SO_GAIN_QUARTER (QSERDES3_RX + 0x10)
#define QSERDES3_RX_UCDR_SO_GAIN (QSERDES3_RX + 0x14)
#define QSERDES3_RX_UCDR_SVS_FO_GAIN_HALF (QSERDES3_RX + 0x18)
#define QSERDES3_RX_UCDR_SVS_FO_GAIN_QUARTER (QSERDES3_RX + 0x1C)
#define QSERDES3_RX_UCDR_SVS_FO_GAIN (QSERDES3_RX + 0x20)
#define QSERDES3_RX_UCDR_SVS_SO_GAIN_HALF (QSERDES3_RX + 0x24)
#define QSERDES3_RX_UCDR_SVS_SO_GAIN_QUARTER (QSERDES3_RX + 0x28)
#define QSERDES3_RX_UCDR_SVS_SO_GAIN (QSERDES3_RX + 0x2C)
#define QSERDES3_RX_UCDR_FASTLOCK_FO_GAIN (QSERDES3_RX + 0x30)
#define QSERDES3_RX_UCDR_SO_SATURATION_AND_ENABLE (QSERDES3_RX + 0x34)
#define QSERDES3_RX_UCDR_FO_TO_SO_DELAY (QSERDES3_RX + 0x38)
#define QSERDES3_RX_UCDR_FASTLOCK_COUNT_LOW (QSERDES3_RX + 0x3C)
#define QSERDES3_RX_UCDR_FASTLOCK_COUNT_HIGH (QSERDES3_RX + 0x40)
#define QSERDES3_RX_UCDR_PI_CONTROLS (QSERDES3_RX + 0x44)
#define QSERDES3_RX_UCDR_PI_CTRL2 (QSERDES3_RX + 0x48)
#define QSERDES3_RX_UCDR_SB2_THRESH1 (QSERDES3_RX + 0x4C)
#define QSERDES3_RX_UCDR_SB2_THRESH2 (QSERDES3_RX + 0x50)
#define QSERDES3_RX_UCDR_SB2_GAIN1 (QSERDES3_RX + 0x54)
#define QSERDES3_RX_UCDR_SB2_GAIN2 (QSERDES3_RX + 0x58)
#define QSERDES3_RX_AUX_CONTROL (QSERDES3_RX + 0x5C)
#define QSERDES3_RX_AUX_DATA_TCOARSE_TFINE (QSERDES3_RX + 0x60)
#define QSERDES3_RX_RCLK_AUXDATA_SEL (QSERDES3_RX + 0x64)
#define QSERDES3_RX_AC_JTAG_ENABLE (QSERDES3_RX + 0x68)
#define QSERDES3_RX_AC_JTAG_INITP (QSERDES3_RX + 0x6C)
#define QSERDES3_RX_AC_JTAG_INITN (QSERDES3_RX + 0x70)
#define QSERDES3_RX_AC_JTAG_LVL (QSERDES3_RX + 0x74)
#define QSERDES3_RX_AC_JTAG_MODE (QSERDES3_RX + 0x78)
#define QSERDES3_RX_AC_JTAG_RESET (QSERDES3_RX + 0x7C)
#define QSERDES3_RX_RX_TERM_BW (QSERDES3_RX + 0x80)
#define QSERDES3_RX_RX_RCVR_IQ_EN (QSERDES3_RX + 0x84)
#define QSERDES3_RX_RX_IDAC_I_DC_OFFSETS (QSERDES3_RX + 0x88)
#define QSERDES3_RX_RX_IDAC_IBAR_DC_OFFSETS (QSERDES3_RX + 0x8C)
#define QSERDES3_RX_RX_IDAC_Q_DC_OFFSETS (QSERDES3_RX + 0x90)
#define QSERDES3_RX_RX_IDAC_QBAR_DC_OFFSETS (QSERDES3_RX + 0x94)
#define QSERDES3_RX_RX_IDAC_A_DC_OFFSETS (QSERDES3_RX + 0x98)
#define QSERDES3_RX_RX_IDAC_ABAR_DC_OFFSETS (QSERDES3_RX + 0x9C)
#define QSERDES3_RX_RX_IDAC_EN (QSERDES3_RX + 0xA0)
#define QSERDES3_RX_RX_IDAC_ENABLES (QSERDES3_RX + 0xA4)
#define QSERDES3_RX_RX_IDAC_SIGN (QSERDES3_RX + 0xA8)
#define QSERDES3_RX_RX_HIGHZ_HIGHRATE (QSERDES3_RX + 0xAC)
#define QSERDES3_RX_RX_TERM_AC_BYPASS_DC_COUPLE_OFFSET (QSERDES3_RX + 0xB0)
#define QSERDES3_RX_DFE_1 (QSERDES3_RX + 0xB4)
#define QSERDES3_RX_DFE_2 (QSERDES3_RX + 0xB8)
#define QSERDES3_RX_DFE_3 (QSERDES3_RX + 0xBC)
#define QSERDES3_RX_DFE_4 (QSERDES3_RX + 0xC0)
#define QSERDES3_RX_TX_ADAPT_PRE_THRESH1 (QSERDES3_RX + 0xC4)
#define QSERDES3_RX_TX_ADAPT_PRE_THRESH2 (QSERDES3_RX + 0xC8)
#define QSERDES3_RX_TX_ADAPT_POST_THRESH (QSERDES3_RX + 0xCC)
#define QSERDES3_RX_TX_ADAPT_MAIN_THRESH (QSERDES3_RX + 0xD0)
#define QSERDES3_RX_VGA_CAL_CNTRL1 (QSERDES3_RX + 0xD4)
#define QSERDES3_RX_VGA_CAL_CNTRL2 (QSERDES3_RX + 0xD8)
#define QSERDES3_RX_GM_CAL (QSERDES3_RX + 0xDC)
#define QSERDES3_RX_RX_VGA_GAIN2_LSB (QSERDES3_RX + 0xE0)
#define QSERDES3_RX_RX_VGA_GAIN2_MSB (QSERDES3_RX + 0xE4)
#define QSERDES3_RX_RX_EQU_ADAPTOR_CNTRL1 (QSERDES3_RX + 0xE8)
#define QSERDES3_RX_RX_EQU_ADAPTOR_CNTRL2 (QSERDES3_RX + 0xEC)
#define QSERDES3_RX_RX_EQU_ADAPTOR_CNTRL3 (QSERDES3_RX + 0xF0)
#define QSERDES3_RX_RX_EQU_ADAPTOR_CNTRL4 (QSERDES3_RX + 0xF4)
#define QSERDES3_RX_RX_IDAC_TSETTLE_LOW (QSERDES3_RX + 0xF8)
#define QSERDES3_RX_RX_IDAC_TSETTLE_HIGH (QSERDES3_RX + 0xFC)
#define QSERDES3_RX_RX_IDAC_MEASURE_TIME (QSERDES3_RX + 0x100)
#define QSERDES3_RX_RX_IDAC_ACCUMULATOR (QSERDES3_RX + 0x104)
#define QSERDES3_RX_RX_EQ_OFFSET_LSB (QSERDES3_RX + 0x108)
#define QSERDES3_RX_RX_EQ_OFFSET_MSB (QSERDES3_RX + 0x10C)
#define QSERDES3_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1 (QSERDES3_RX + 0x110)
#define QSERDES3_RX_RX_OFFSET_ADAPTOR_CNTRL2 (QSERDES3_RX + 0x114)
#define QSERDES3_RX_SIGDET_ENABLES (QSERDES3_RX + 0x118)
#define QSERDES3_RX_SIGDET_CNTRL (QSERDES3_RX + 0x11C)
#define QSERDES3_RX_SIGDET_LVL (QSERDES3_RX + 0x120)
#define QSERDES3_RX_SIGDET_DEGLITCH_CNTRL (QSERDES3_RX + 0x124)
#define QSERDES3_RX_RX_BAND (QSERDES3_RX + 0x128)
#define QSERDES3_RX_CDR_FREEZE_UP_DN (QSERDES3_RX + 0x12C)
#define QSERDES3_RX_CDR_RESET_OVERRIDE (QSERDES3_RX + 0x130)
#define QSERDES3_RX_RX_INTERFACE_MODE (QSERDES3_RX + 0x134)
#define QSERDES3_RX_JITTER_GEN_MODE (QSERDES3_RX + 0x138)
#define QSERDES3_RX_SJ_AMP1 (QSERDES3_RX + 0x13C)
#define QSERDES3_RX_SJ_AMP2 (QSERDES3_RX + 0x140)
#define QSERDES3_RX_SJ_PER1 (QSERDES3_RX + 0x144)
#define QSERDES3_RX_SJ_PER2 (QSERDES3_RX + 0x148)
#define QSERDES3_RX_PPM_OFFSET1 (QSERDES3_RX + 0x14C)
#define QSERDES3_RX_PPM_OFFSET2 (QSERDES3_RX + 0x150)
#define QSERDES3_RX_SIGN_PPM_PERIOD1 (QSERDES3_RX + 0x154)
#define QSERDES3_RX_SIGN_PPM_PERIOD2 (QSERDES3_RX + 0x158)
#define QSERDES3_RX_RX_MODE_00_LOW (QSERDES3_RX + 0x15C)
#define QSERDES3_RX_RX_MODE_00_HIGH (QSERDES3_RX + 0x160)
#define QSERDES3_RX_RX_MODE_00_HIGH2 (QSERDES3_RX + 0x164)
#define QSERDES3_RX_RX_MODE_00_HIGH3 (QSERDES3_RX + 0x168)
#define QSERDES3_RX_RX_MODE_00_HIGH4 (QSERDES3_RX + 0x16C)
#define QSERDES3_RX_RX_MODE_01_LOW (QSERDES3_RX + 0x170)
#define QSERDES3_RX_RX_MODE_01_HIGH (QSERDES3_RX + 0x174)
#define QSERDES3_RX_RX_MODE_01_HIGH2 (QSERDES3_RX + 0x178)
#define QSERDES3_RX_RX_MODE_01_HIGH3 (QSERDES3_RX + 0x17C)
#define QSERDES3_RX_RX_MODE_01_HIGH4 (QSERDES3_RX + 0x180)
#define QSERDES3_RX_RX_MODE_10_LOW (QSERDES3_RX + 0x184)
#define QSERDES3_RX_RX_MODE_10_HIGH (QSERDES3_RX + 0x188)
#define QSERDES3_RX_RX_MODE_10_HIGH2 (QSERDES3_RX + 0x18C)
#define QSERDES3_RX_RX_MODE_10_HIGH3 (QSERDES3_RX + 0x190)
#define QSERDES3_RX_RX_MODE_10_HIGH4 (QSERDES3_RX + 0x194)
#define QSERDES3_RX_PHPRE_CTRL (QSERDES3_RX + 0x198)
#define QSERDES3_RX_PHPRE_INITVAL (QSERDES3_RX + 0x19C)
#define QSERDES3_RX_DFE_EN_TIMER (QSERDES3_RX + 0x1A0)
#define QSERDES3_RX_DFE_CTLE_POST_CAL_OFFSET (QSERDES3_RX + 0x1A4)
#define QSERDES3_RX_DCC_CTRL1 (QSERDES3_RX + 0x1A8)
#define QSERDES3_RX_DCC_CTRL2 (QSERDES3_RX + 0x1AC)
#define QSERDES3_RX_VTH_CODE (QSERDES3_RX + 0x1B0)
#define QSERDES3_RX_VTH_MIN_THRESH (QSERDES3_RX + 0x1B4)
#define QSERDES3_RX_VTH_MAX_THRESH (QSERDES3_RX + 0x1B8)
#define QSERDES3_RX_ALOG_OBSV_BUS_CTRL_1 (QSERDES3_RX + 0x1BC)
#define QSERDES3_RX_PI_CTRL1 (QSERDES3_RX + 0x1C0)
#define QSERDES3_RX_PI_CTRL2 (QSERDES3_RX + 0x1C4)
#define QSERDES3_RX_PI_QUAD (QSERDES3_RX + 0x1C8)
#define QSERDES3_RX_IDATA1 (QSERDES3_RX + 0x1CC)
#define QSERDES3_RX_IDATA2 (QSERDES3_RX + 0x1D0)
#define QSERDES3_RX_AUX_DATA1 (QSERDES3_RX + 0x1D4)
#define QSERDES3_RX_AUX_DATA2 (QSERDES3_RX + 0x1D8)
#define QSERDES3_RX_AC_JTAG_OUTP (QSERDES3_RX + 0x1DC)
#define QSERDES3_RX_AC_JTAG_OUTN (QSERDES3_RX + 0x1E0)
#define QSERDES3_RX_RX_SIGDET (QSERDES3_RX + 0x1E4)
#define QSERDES3_RX_ALOG_OBSV_BUS_STATUS_1 (QSERDES3_RX + 0x1E8)
#define QSERDES3_TX 0x400
#define QSERDES3_TX_BIST_MODE_LANENO (QSERDES3_TX + 0x0)
#define QSERDES3_TX_BIST_INVERT (QSERDES3_TX + 0x4)
#define QSERDES3_TX_CLKBUF_ENABLE (QSERDES3_TX + 0x8)
#define QSERDES3_TX_TX_EMP_POST1_LVL (QSERDES3_TX + 0xC)
#define QSERDES3_TX_TX_IDLE_LVL_LARGE_AMP (QSERDES3_TX + 0x10)
#define QSERDES3_TX_TX_DRV_LVL (QSERDES3_TX + 0x14)
#define QSERDES3_TX_TX_DRV_LVL_OFFSET (QSERDES3_TX + 0x18)
#define QSERDES3_TX_RESET_TSYNC_EN (QSERDES3_TX + 0x1C)
#define QSERDES3_TX_PRE_STALL_LDO_BOOST_EN (QSERDES3_TX + 0x20)
#define QSERDES3_TX_TX_BAND (QSERDES3_TX + 0x24)
#define QSERDES3_TX_SLEW_CNTL (QSERDES3_TX + 0x28)
#define QSERDES3_TX_INTERFACE_SELECT (QSERDES3_TX + 0x2C)
#define QSERDES3_TX_LPB_EN (QSERDES3_TX + 0x30)
#define QSERDES3_TX_RES_CODE_LANE_TX (QSERDES3_TX + 0x34)
#define QSERDES3_TX_RES_CODE_LANE_RX (QSERDES3_TX + 0x38)
#define QSERDES3_TX_RES_CODE_LANE_OFFSET_TX (QSERDES3_TX + 0x3C)
#define QSERDES3_TX_RES_CODE_LANE_OFFSET_RX (QSERDES3_TX + 0x40)
#define QSERDES3_TX_PERL_LENGTH1 (QSERDES3_TX + 0x44)
#define QSERDES3_TX_PERL_LENGTH2 (QSERDES3_TX + 0x48)
#define QSERDES3_TX_SERDES_BYP_EN_OUT (QSERDES3_TX + 0x4C)
#define QSERDES3_TX_DEBUG_BUS_SEL (QSERDES3_TX + 0x50)
#define QSERDES3_TX_TRANSCEIVER_BIAS_EN (QSERDES3_TX + 0x54)
#define QSERDES3_TX_HIGHZ_DRVR_EN (QSERDES3_TX + 0x58)
#define QSERDES3_TX_TX_POL_INV (QSERDES3_TX + 0x5C)
#define QSERDES3_TX_PARRATE_REC_DETECT_IDLE_EN (QSERDES3_TX + 0x60)
#define QSERDES3_TX_BIST_PATTERN1 (QSERDES3_TX + 0x64)
#define QSERDES3_TX_BIST_PATTERN2 (QSERDES3_TX + 0x68)
#define QSERDES3_TX_BIST_PATTERN3 (QSERDES3_TX + 0x6C)
#define QSERDES3_TX_BIST_PATTERN4 (QSERDES3_TX + 0x70)
#define QSERDES3_TX_BIST_PATTERN5 (QSERDES3_TX + 0x74)
#define QSERDES3_TX_BIST_PATTERN6 (QSERDES3_TX + 0x78)
#define QSERDES3_TX_BIST_PATTERN7 (QSERDES3_TX + 0x7C)
#define QSERDES3_TX_BIST_PATTERN8 (QSERDES3_TX + 0x80)
#define QSERDES3_TX_LANE_MODE_1 (QSERDES3_TX + 0x84)
#define QSERDES3_TX_LANE_MODE_2 (QSERDES3_TX + 0x88)
#define QSERDES3_TX_LANE_MODE_3 (QSERDES3_TX + 0x8C)
#define QSERDES3_TX_LANE_MODE_4 (QSERDES3_TX + 0x90)
#define QSERDES3_TX_LANE_MODE_5 (QSERDES3_TX + 0x94)
#define QSERDES3_TX_ATB_SEL1 (QSERDES3_TX + 0x98)
#define QSERDES3_TX_ATB_SEL2 (QSERDES3_TX + 0x9C)
#define QSERDES3_TX_RCV_DETECT_LVL (QSERDES3_TX + 0xA0)
#define QSERDES3_TX_RCV_DETECT_LVL_2 (QSERDES3_TX + 0xA4)
#define QSERDES3_TX_PRBS_SEED1 (QSERDES3_TX + 0xA8)
#define QSERDES3_TX_PRBS_SEED2 (QSERDES3_TX + 0xAC)
#define QSERDES3_TX_PRBS_SEED3 (QSERDES3_TX + 0xB0)
#define QSERDES3_TX_PRBS_SEED4 (QSERDES3_TX + 0xB4)
#define QSERDES3_TX_RESET_GEN (QSERDES3_TX + 0xB8)
#define QSERDES3_TX_RESET_GEN_MUXES (QSERDES3_TX + 0xBC)
#define QSERDES3_TX_TRAN_DRVR_EMP_EN (QSERDES3_TX + 0xC0)
#define QSERDES3_TX_TX_INTERFACE_MODE (QSERDES3_TX + 0xC4)
#define QSERDES3_TX_VMODE_CTRL1 (QSERDES3_TX + 0xC8)
#define QSERDES3_TX_ALOG_OBSV_BUS_CTRL_1 (QSERDES3_TX + 0xCC)
#define QSERDES3_TX_BIST_STATUS (QSERDES3_TX + 0xD0)
#define QSERDES3_TX_BIST_ERROR_COUNT1 (QSERDES3_TX + 0xD4)
#define QSERDES3_TX_BIST_ERROR_COUNT2 (QSERDES3_TX + 0xD8)
#define QSERDES3_TX_ALOG_OBSV_BUS_STATUS_1 (QSERDES3_TX + 0xDC)
#define QSERDES3_TX_LANE_DIG_CONFIG (QSERDES3_TX + 0xE0)
#define QSERDES3_TX_PI_QEC_CTRL (QSERDES3_TX + 0xE4)
#define QSERDES3_TX_PRE_EMPH (QSERDES3_TX + 0xE8)
#define QSERDES3_TX_SW_RESET (QSERDES3_TX + 0xEC)
#define QSERDES3_TX_DCC_OFFSET (QSERDES3_TX + 0xF0)
#define QSERDES3_TX_DCC_CMUX_POSTCAL_OFFSET (QSERDES3_TX + 0xF4)
#define QSERDES3_TX_DCC_CMUX_CAL_CTRL1 (QSERDES3_TX + 0xF8)
#define QSERDES3_TX_DCC_CMUX_CAL_CTRL2 (QSERDES3_TX + 0xFC)
#define QSERDES3_TX_DIG_BKUP_CTRL (QSERDES3_TX + 0x100)
#define QSERDES3_TX_DEBUG_BUS0 (QSERDES3_TX + 0x104)
#define QSERDES3_TX_DEBUG_BUS1 (QSERDES3_TX + 0x108)
#define QSERDES3_TX_DEBUG_BUS2 (QSERDES3_TX + 0x10C)
#define QSERDES3_TX_DEBUG_BUS3 (QSERDES3_TX + 0x110)
#define QSERDES3_TX_READ_EQCODE (QSERDES3_TX + 0x114)
#define QSERDES3_TX_READ_OFFSETCODE (QSERDES3_TX + 0x118)
#define QSERDES3_TX_IA_ERROR_COUNTER_LOW (QSERDES3_TX + 0x11C)
#define QSERDES3_TX_IA_ERROR_COUNTER_HIGH (QSERDES3_TX + 0x120)
#define QSERDES3_TX_VGA_READ_CODE (QSERDES3_TX + 0x124)
#define QSERDES3_TX_VTH_READ_CODE (QSERDES3_TX + 0x128)
#define QSERDES3_TX_DFE_TAP1_READ_CODE (QSERDES3_TX + 0x12C)
#define QSERDES3_TX_DFE_TAP2_READ_CODE (QSERDES3_TX + 0x130)
#define QSERDES3_TX_IDAC_STATUS_I (QSERDES3_TX + 0x134)
#define QSERDES3_TX_IDAC_STATUS_IBAR (QSERDES3_TX + 0x138)
#define QSERDES3_TX_IDAC_STATUS_Q (QSERDES3_TX + 0x13C)
#define QSERDES3_TX_IDAC_STATUS_QBAR (QSERDES3_TX + 0x140)
#define QSERDES3_TX_IDAC_STATUS_A (QSERDES3_TX + 0x144)
#define QSERDES3_TX_IDAC_STATUS_ABAR (QSERDES3_TX + 0x148)
#define QSERDES3_TX_IDAC_STATUS_SM_ON (QSERDES3_TX + 0x14C)
#define QSERDES3_TX_IDAC_STATUS_CAL_DONE (QSERDES3_TX + 0x150)
#define QSERDES3_TX_IDAC_STATUS_SIGNERROR (QSERDES3_TX + 0x154)
#define QSERDES3_TX_DCC_CAL_STATUS (QSERDES3_TX + 0x158)
#define QSERDES3_TX_DCC_READ_CODE_STATUS (QSERDES3_TX + 0x15C)
#define QSERDES3_PCS 0xC00
#define QSERDES3_PCS_PHY_START (QSERDES3_PCS + 0x0)
#define QSERDES3_PCS_POWER_DOWN_CONTROL (QSERDES3_PCS + 0x4)
#define QSERDES3_PCS_SW_RESET (QSERDES3_PCS + 0x8)
#define QSERDES3_PCS_LINE_RESET_TIME (QSERDES3_PCS + 0xC)
#define QSERDES3_PCS_PCS_CTRL1 (QSERDES3_PCS + 0x10)
#define QSERDES3_PCS_TSYNC_RSYNC_CNTL (QSERDES3_PCS + 0x14)
#define QSERDES3_PCS_RETIME_BUFFER_EN (QSERDES3_PCS + 0x18)
#define QSERDES3_PCS_PLL_CNTL (QSERDES3_PCS + 0x1C)
#define QSERDES3_PCS_TX_LARGE_AMP_DRV_LVL (QSERDES3_PCS + 0x20)
#define QSERDES3_PCS_TX_LARGE_AMP_POST_EMP_LVL (QSERDES3_PCS + 0x24)
#define QSERDES3_PCS_TX_SMALL_AMP_DRV_LVL (QSERDES3_PCS + 0x28)
#define QSERDES3_PCS_TX_SMALL_AMP_POST_EMP_LVL (QSERDES3_PCS + 0x2C)
#define QSERDES3_PCS_RX_SYNC_WAIT_TIME (QSERDES3_PCS + 0x30)
#define QSERDES3_PCS_L0_BIST_CTRL (QSERDES3_PCS + 0x34)
#define QSERDES3_PCS_MISC_BIST_CTRL (QSERDES3_PCS + 0x38)
#define QSERDES3_PCS_BIST_PRBS_POLY0 (QSERDES3_PCS + 0x3C)
#define QSERDES3_PCS_BIST_PRBS_POLY1 (QSERDES3_PCS + 0x40)
#define QSERDES3_PCS_BIST_PRBS_SEED0 (QSERDES3_PCS + 0x44)
#define QSERDES3_PCS_BIST_PRBS_SEED1 (QSERDES3_PCS + 0x48)
#define QSERDES3_PCS_BIST_PRBS_SEED2 (QSERDES3_PCS + 0x4C)
#define QSERDES3_PCS_BIST_NUM_IPG (QSERDES3_PCS + 0x50)
#define QSERDES3_PCS_RX_HS_EQUALIZER_SETTING_CAPABILITY (QSERDES3_PCS + 0x54)
#define QSERDES3_PCS_RX_HS_ADAPT_LENGTH_REFRESH_CAPABILITY (QSERDES3_PCS + 0x58)
#define QSERDES3_PCS_RX_HS_ADAPT_LENGTH_INITIAL_CAPABILITY (QSERDES3_PCS + 0x5C)
#define QSERDES3_PCS_DEBUG_BUS_CLKSEL (QSERDES3_PCS + 0x60)
#define QSERDES3_PCS_DEBUG_BUS_0_CTRL (QSERDES3_PCS + 0x64)
#define QSERDES3_PCS_DEBUG_BUS_1_CTRL (QSERDES3_PCS + 0x68)
#define QSERDES3_PCS_DEBUG_BUS_2_CTRL (QSERDES3_PCS + 0x6C)
#define QSERDES3_PCS_DEBUG_BUS_3_CTRL (QSERDES3_PCS + 0x70)
#define QSERDES3_PCS_DEBUG_BUS_0_STATUS_CHK (QSERDES3_PCS + 0x74)
#define QSERDES3_PCS_DEBUG_BUS_1_STATUS_CHK (QSERDES3_PCS + 0x78)
#define QSERDES3_PCS_DEBUG_BUS_2_STATUS_CHK (QSERDES3_PCS + 0x7C)
#define QSERDES3_PCS_DEBUG_BUS_3_STATUS_CHK (QSERDES3_PCS + 0x80)
#define QSERDES3_PCS_RX_MIN_HIBERN8_TIME (QSERDES3_PCS + 0x84)
#define QSERDES3_PCS_RX_SIGDET_CTRL1 (QSERDES3_PCS + 0x88)
#define QSERDES3_PCS_RX_SIGDET_CTRL2 (QSERDES3_PCS + 0x8C)
#define QSERDES3_PCS_TCLK_SYM_CNTR_INITVAL (QSERDES3_PCS + 0x90)
#define QSERDES3_PCS_PCS_READY_STATUS (QSERDES3_PCS + 0x94)
#define QSERDES3_PCS_PCS_MISC_STATUS (QSERDES3_PCS + 0x98)
#define QSERDES3_PCS_L0_BIST_CHK_ERR_CNT_L_STATUS (QSERDES3_PCS + 0x9C)
#define QSERDES3_PCS_L0_BIST_CHK_ERR_CNT_H_STATUS (QSERDES3_PCS + 0xA0)
#define QSERDES3_PCS_L0_BIST_CHK_STATUS (QSERDES3_PCS + 0xA4)
#define QSERDES3_PCS_DEBUG_BUS_0_STATUS (QSERDES3_PCS + 0xA8)
#define QSERDES3_PCS_DEBUG_BUS_1_STATUS (QSERDES3_PCS + 0xAC)
#define QSERDES3_PCS_DEBUG_BUS_2_STATUS (QSERDES3_PCS + 0xB0)
#define QSERDES3_PCS_DEBUG_BUS_3_STATUS (QSERDES3_PCS + 0xB4)
#define QSERDES3_PCS_REVISION_ID0 (QSERDES3_PCS + 0xB8)
#define QSERDES3_PCS_REVISION_ID1 (QSERDES3_PCS + 0xBC)
#define QSERDES3_PCS_REVISION_ID2 (QSERDES3_PCS + 0xC0)
#define QSERDES3_PCS_REVISION_ID3 (QSERDES3_PCS + 0xC4)
#define QSERDES3_PCS_SYSCLK_EN_COUNT_CTRL (QSERDES3_PCS + 0xC8)
#define QSERDES3_PCS_PLL_SHUTDOWN_CTRL (QSERDES3_PCS + 0xCC)
#define QSERDES3_PCS_TIMER_20US_CORECLK_STEPS_MSB (QSERDES3_PCS + 0xD0)
#define QSERDES3_PCS_TIMER_20US_CORECLK_STEPS_LSB (QSERDES3_PCS + 0xD4)
#define QSERDES3_PCS_TX_MID_TERM_CTRL1 (QSERDES3_PCS + 0xD8)
#define QSERDES3_PCS_TX_MID_TERM_CTRL2 (QSERDES3_PCS + 0xDC)
#define QSERDES3_PCS_MULTI_LANE_CTRL1 (QSERDES3_PCS + 0xE0)
#define QSERDES3_PCS_L1_BIST_CTRL (QSERDES3_PCS + 0xE4)
#define QSERDES3_PCS_L1_BIST_CHK_ERR_CNT_L_STATUS (QSERDES3_PCS + 0xE8)
#define QSERDES3_PCS_L1_BIST_CHK_ERR_CNT_H_STATUS (QSERDES3_PCS + 0xEC)
#define QSERDES3_PCS_L1_BIST_CHK_STATUS (QSERDES3_PCS + 0xF0)
#define QSERDES3_PCS_STATUS_CLEAR (QSERDES3_PCS + 0xF4)
#define QSERDES3_PCS_RX_HSG4_SYNC_WAIT_TIME (QSERDES3_PCS + 0xF8)
#define QSERDES3_PCS_SGMII_MISC_CTRL1 (QSERDES3_PCS + 0xFC)
#define QSERDES3_PCS_SGMII_MISC_CTRL2 (QSERDES3_PCS + 0x100)
#define QSERDES3_PCS_SGMII_MISC_CTRL3 (QSERDES3_PCS + 0x104)
#define QSERDES3_PCS_SGMII_MISC_CTRL4 (QSERDES3_PCS + 0x108)
#define QSERDES3_PCS_SGMII_MISC_CTRL5 (QSERDES3_PCS + 0x10C)
#define QSERDES3_PCS_SGMII_MISC_CTRL6 (QSERDES3_PCS + 0x110)
#define QSERDES3_PCS_SGMII_MISC_CTRL7 (QSERDES3_PCS + 0x114)
#define QSERDES3_PCS_SGMII_MISC_CTRL8 (QSERDES3_PCS + 0x118)
#define QSERDES3_PCS_SGMII_INTERRUPT_STATUS (QSERDES3_PCS + 0x11C)
#define QSERDES3_PCS_SGMII_IRQ_CLEAR (QSERDES3_PCS + 0x120)
#define QSERDES3_PCS_SGMII_IRQ_MASK (QSERDES3_PCS + 0x124)
#define QSERDES3_PCS_2 0x200
#define QSERDES3_PCS2_PCS_CMN_STATUS (QSERDES3_PCS_2 + 0x0)
#define QSERDES3_PCS2_TCLK_CTRL_STATUS (QSERDES3_PCS_2 + 0x4)
#define QSERDES3_PCS2_TX_LANE0_0_STATUS (QSERDES3_PCS_2 + 0x8)
#define QSERDES3_PCS2_TX_LANE0_1_STATUS (QSERDES3_PCS_2 + 0xC)
#define QSERDES3_PCS2_TX_LANE0_2_STATUS (QSERDES3_PCS_2 + 0x10)
#define QSERDES3_PCS2_RX_LANE0_0_STATUS (QSERDES3_PCS_2 + 0x14)
#define QSERDES3_PCS2_RX_LANE0_1_STATUS (QSERDES3_PCS_2 + 0x18)
#define QSERDES3_PCS2_RX_LANE0_3_STATUS (QSERDES3_PCS_2 + 0x1C)
#define QSERDES3_PCS2_TX_LANE1_0_STATUS (QSERDES3_PCS_2 + 0x20)
#define QSERDES3_PCS2_TX_LANE1_1_STATUS (QSERDES3_PCS_2 + 0x24)
#define QSERDES3_PCS2_TX_LANE1_2_STATUS (QSERDES3_PCS_2 + 0x28)
#define QSERDES3_PCS2_RX_LANE1_0_STATUS (QSERDES3_PCS_2 + 0x2C)
#define QSERDES3_PCS2_RX_LANE1_1_STATUS (QSERDES3_PCS_2 + 0x30)
#define QSERDES3_PCS2_RX_LANE1_3_STATUS (QSERDES3_PCS_2 + 0x34)
#if IS_ENABLED(CONFIG_ETHQOS_QCOM_SERDES)
int qcom_ethqos_serdes_configure_dt(struct qcom_ethqos *ethqos);
int qcom_ethqos_serdes_update(struct qcom_ethqos *ethqos,
int speed,
int interface);
#else
static inline int qcom_ethqos_serdes_configure_dt(struct qcom_ethqos *ethqos)
{
return 0;
}
static inline int qcom_ethqos_serdes_update(struct qcom_ethqos *ethqos,
int speed,
int interface)
{
return 0;
}
#endif
#endif /*_DWMAC_QCOM_SERDES_H*/

View File

@ -5772,7 +5772,7 @@ static void stmmac_common_interrupt(struct stmmac_priv *priv)
}
/* PCS link status */
if (priv->hw->pcs) {
if (priv->hw->pcs && !priv->plat->has_gmac4) {
if (priv->xstats.pcs_link)
netif_carrier_on(priv->dev);
else