msm: ep_pcie: add the support of PCIe EP mode for mdmcalifornium

Add the support of PCIe Endpoint (EP) mode for mdmcalifornium.

Change-Id: I55c85813e674810d865b444b7e19ce4157cea479
Signed-off-by: Yan He <yanhe@codeaurora.org>
This commit is contained in:
Yan He 2015-10-09 18:25:28 -07:00 committed by David Keitel
parent 980cf128c7
commit a5ee9307d8
8 changed files with 836 additions and 552 deletions

View file

@ -42,6 +42,9 @@ Optional Properties:
- qcom,pcie-phy-ver: version of PCIe PHY.
- qcom,pcie-link-speed: generation of PCIe link speed. The value could be
1, 2 or 3.
- qcom,pcie-active-config: boolean type; active configuration of PCIe
addressing.
- qcom,pcie-aggregated-irq: boolean type; interrupts are aggregated.
- Refer to "Documentation/devicetree/bindings/arm/msm/msm_bus.txt" for
below optional properties:
- qcom,msm-bus,name
@ -103,4 +106,6 @@ Example:
<45 512 500 800>;
qcom,pcie-link-speed = <1>;
qcom,pcie-active-config;
qcom,pcie-aggregated-irq;
};

View file

@ -230,3 +230,15 @@ int ep_pcie_disable_endpoint(struct ep_pcie_hw *phandle)
}
}
EXPORT_SYMBOL(ep_pcie_disable_endpoint);
int ep_pcie_mask_irq_event(struct ep_pcie_hw *phandle,
enum ep_pcie_irq_event event,
bool enable)
{
if (phandle)
return phandle->mask_irq_event(event, enable);
pr_err("ep_pcie:%s: the input driver handle is NULL.", __func__);
return -EINVAL;
}
EXPORT_SYMBOL(ep_pcie_mask_irq_event);

View file

@ -31,8 +31,6 @@
#define PCIE20_PARF_PHY_REFCLK 0x4C
#define PCIE20_PARF_CONFIG_BITS 0x50
#define PCIE20_PARF_TEST_BUS 0xE4
#define PCIE20_PARF_DBI_BASE_ADDR 0x168
#define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x16C
#define PCIE20_PARF_MHI_BASE_ADDR_LOWER 0x178
#define PCIE20_PARF_MHI_BASE_ADDR_UPPER 0x17c
#define PCIE20_PARF_DEBUG_INT_EN 0x190
@ -43,6 +41,15 @@
#define PCIE20_PARF_AXI_MSTR_WR_ADDR_HALT 0x1A8
#define PCIE20_PARF_Q2A_FLUSH 0x1AC
#define PCIE20_PARF_LTSSM 0x1B0
#define PCIE20_PARF_LTR_MSI_EXIT_L1SS 0x214
#define PCIE20_PARF_INT_ALL_STATUS 0x224
#define PCIE20_PARF_INT_ALL_CLEAR 0x228
#define PCIE20_PARF_INT_ALL_MASK 0x22C
#define PCIE20_PARF_SLV_ADDR_MSB_CTRL 0x2C0
#define PCIE20_PARF_DBI_BASE_ADDR 0x350
#define PCIE20_PARF_DBI_BASE_ADDR_HI 0x354
#define PCIE20_PARF_SLV_ADDR_SPACE_SIZE 0x358
#define PCIE20_PARF_SLV_ADDR_SPACE_SIZE_HI 0x35C
#define PCIE20_PARF_DEVICE_TYPE 0x1000
#define PCIE20_ELBI_VERSION 0x00
@ -62,6 +69,7 @@
#define PCIE20_MSI_LOWER 0x54
#define PCIE20_MSI_UPPER 0x58
#define PCIE20_MSI_DATA 0x5C
#define PCIE20_MSI_MASK 0x60
#define PCIE20_DEVICE_CAPABILITIES 0x74
#define PCIE20_MASK_EP_L1_ACCPT_LATENCY 0xE00
#define PCIE20_MASK_EP_L0S_ACCPT_LATENCY 0x1C0
@ -87,6 +95,8 @@
#define PCIE20_PLR_IATU_LTAR 0x918
#define PCIE20_PLR_IATU_UTAR 0x91c
#define PCIE20_AUX_CLK_FREQ_REG 0xB40
#define PERST_TIMEOUT_US_MIN 1000
#define PERST_TIMEOUT_US_MAX 1000
#define PERST_CHECK_MAX_COUNT 30000
@ -101,6 +111,8 @@
#define REFCLK_STABILIZATION_DELAY_US_MIN 1000
#define REFCLK_STABILIZATION_DELAY_US_MAX 1000
#define PHY_READY_TIMEOUT_COUNT 30000
#define MSI_EXIT_L1SS_WAIT 10
#define MSI_EXIT_L1SS_WAIT_MAX_COUNT 100
#define XMLH_LINK_UP 0x400
#define MAX_PROP_SIZE 32
@ -120,6 +132,8 @@
#define EP_PCIE_OATU_INDEX_CTRL 2
#define EP_PCIE_OATU_INDEX_DATA 3
#define EP_PCIE_OATU_UPPER 0x100
#define EP_PCIE_GEN_DBG(x...) do { \
if (ep_pcie_get_debug_mask()) \
pr_alert(x); \
@ -128,9 +142,6 @@
} while (0)
#define EP_PCIE_DBG(dev, fmt, arg...) do { \
if ((dev)->ipc_log_sel) \
ipc_log_string((dev)->ipc_log_sel, \
"DBG1:%s: " fmt, __func__, arg); \
if ((dev)->ipc_log_ful) \
ipc_log_string((dev)->ipc_log_ful, "%s: " fmt, __func__, arg); \
if (ep_pcie_get_debug_mask()) \
@ -138,6 +149,9 @@
} while (0)
#define EP_PCIE_DBG2(dev, fmt, arg...) do { \
if ((dev)->ipc_log_sel) \
ipc_log_string((dev)->ipc_log_sel, \
"DBG1:%s: " fmt, __func__, arg); \
if ((dev)->ipc_log_ful) \
ipc_log_string((dev)->ipc_log_ful, \
"DBG2:%s: " fmt, __func__, arg); \
@ -190,6 +204,7 @@ enum ep_pcie_irq {
EP_PCIE_INT_LINK_UP,
EP_PCIE_INT_LINK_DOWN,
EP_PCIE_INT_BRIDGE_FLUSH_N,
EP_PCIE_INT_GLOBAL,
EP_PCIE_MAX_IRQ,
};
@ -256,6 +271,8 @@ struct ep_pcie_dev_t {
struct msm_bus_scale_pdata *bus_scale_table;
u32 bus_client;
u32 link_speed;
bool active_config;
bool aggregated_irq;
u32 rev;
u32 phy_rev;
@ -278,6 +295,7 @@ struct ep_pcie_dev_t {
ulong perst_deast_counter;
ulong wake_counter;
ulong msi_counter;
ulong global_irq_counter;
bool dump_conf;

View file

@ -32,10 +32,6 @@
#include <linux/msm-bus-board.h>
#include <linux/interrupt.h>
#include <linux/irq.h>
#include <mach/irqs.h>
#include <mach/gpiomux.h>
#include <mach/hardware.h>
#include <mach/msm_iomap.h>
#include "ep_pcie_com.h"
@ -90,7 +86,8 @@ static const struct ep_pcie_irq_info_t ep_pcie_irq_info[EP_PCIE_MAX_IRQ] = {
{"int_l1sub_timeout", 0},
{"int_link_up", 0},
{"int_link_down", 0},
{"int_bridge_flush_n", 0}
{"int_bridge_flush_n", 0},
{"int_global", 0}
};
int ep_pcie_get_debug_mask(void)
@ -559,6 +556,23 @@ static void ep_pcie_core_init(struct ep_pcie_dev_t *dev)
/* Configure BARs */
ep_pcie_bar_init(dev);
/* Configure IRQ events */
if (dev->aggregated_irq) {
ep_pcie_write_reg(dev->parf, PCIE20_PARF_INT_ALL_MASK, 0);
ep_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_MASK, 0,
BIT(EP_PCIE_INT_EVT_LINK_DOWN) |
BIT(EP_PCIE_INT_EVT_BME) |
BIT(EP_PCIE_INT_EVT_PM_TURNOFF) |
BIT(EP_PCIE_INT_EVT_MHI_A7) |
BIT(EP_PCIE_INT_EVT_DSTATE_CHANGE) |
BIT(EP_PCIE_INT_EVT_LINK_UP));
EP_PCIE_DBG(dev, "PCIe V%d: PCIE20_PARF_INT_ALL_MASK:0x%x\n",
dev->rev,
readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_MASK));
}
ep_pcie_write_reg(dev->dm_core, PCIE20_AUX_CLK_FREQ_REG, 0x14);
}
static void ep_pcie_config_inbound_iatu(struct ep_pcie_dev_t *dev)
@ -600,7 +614,7 @@ static void ep_pcie_config_inbound_iatu(struct ep_pcie_dev_t *dev)
}
static void ep_pcie_config_outbound_iatu_entry(struct ep_pcie_dev_t *dev,
u32 region, u32 lower,
u32 region, u32 lower, u32 upper,
u32 limit, u32 tgt_lower, u32 tgt_upper)
{
EP_PCIE_DBG(dev,
@ -613,7 +627,7 @@ static void ep_pcie_config_outbound_iatu_entry(struct ep_pcie_dev_t *dev,
ep_pcie_write_reg(dev->dm_core, PCIE20_PLR_IATU_CTRL1, 0x0);
/* setup source address registers */
ep_pcie_write_reg(dev->dm_core, PCIE20_PLR_IATU_LBAR, lower);
ep_pcie_write_reg(dev->dm_core, PCIE20_PLR_IATU_UBAR, 0x0);
ep_pcie_write_reg(dev->dm_core, PCIE20_PLR_IATU_UBAR, upper);
ep_pcie_write_reg(dev->dm_core, PCIE20_PLR_IATU_LAR, limit);
/* setup target address registers */
ep_pcie_write_reg(dev->dm_core, PCIE20_PLR_IATU_LTAR, tgt_lower);
@ -711,7 +725,7 @@ static int ep_pcie_get_resources(struct ep_pcie_dev_t *dev,
if (IS_ERR(vreg_info->hdl)) {
if (vreg_info->required) {
EP_PCIE_DBG(dev, "Vreg %s doesn't exist\n",
EP_PCIE_ERR(dev, "Vreg %s doesn't exist\n",
vreg_info->name);
ret = PTR_ERR(vreg_info->hdl);
goto out;
@ -772,7 +786,7 @@ static int ep_pcie_get_resources(struct ep_pcie_dev_t *dev,
if (IS_ERR(clk_info->hdl)) {
if (clk_info->required) {
EP_PCIE_DBG(dev,
EP_PCIE_ERR(dev,
"Clock %s isn't available:%ld\n",
clk_info->name, PTR_ERR(clk_info->hdl));
ret = PTR_ERR(clk_info->hdl);
@ -799,7 +813,7 @@ static int ep_pcie_get_resources(struct ep_pcie_dev_t *dev,
if (IS_ERR(clk_info->hdl)) {
if (clk_info->required) {
EP_PCIE_DBG(dev,
EP_PCIE_ERR(dev,
"Clock %s isn't available:%ld\n",
clk_info->name, PTR_ERR(clk_info->hdl));
ret = PTR_ERR(clk_info->hdl);
@ -871,18 +885,11 @@ static int ep_pcie_get_resources(struct ep_pcie_dev_t *dev,
irq_info->name);
if (!res) {
int j;
for (j = 0; j < EP_PCIE_MAX_RES; j++) {
iounmap(dev->res[j].base);
dev->res[j].base = NULL;
}
EP_PCIE_ERR(dev, "PCIe V%d: can't find IRQ # for %s\n",
EP_PCIE_DBG2(dev, "PCIe V%d: can't find IRQ # for %s\n",
dev->rev, irq_info->name);
ret = -ENODEV;
goto out;
} else {
irq_info->num = res->start;
EP_PCIE_DBG(dev, "IRQ # for %s is %d.\n",
EP_PCIE_DBG2(dev, "IRQ # for %s is %d.\n",
irq_info->name, irq_info->num);
}
}
@ -1098,6 +1105,19 @@ int ep_pcie_core_enable_endpoint(enum ep_pcie_options opt)
dev->rev);
}
if (dev->active_config) {
ep_pcie_write_mask(dev->parf + PCIE20_PARF_SLV_ADDR_MSB_CTRL,
0, BIT(0));
ep_pcie_write_reg(dev->parf, PCIE20_PARF_SLV_ADDR_SPACE_SIZE_HI,
0x200);
ep_pcie_write_reg(dev->parf, PCIE20_PARF_SLV_ADDR_SPACE_SIZE,
0x0);
ep_pcie_write_reg(dev->parf, PCIE20_PARF_DBI_BASE_ADDR_HI,
0x100);
ep_pcie_write_reg(dev->parf, PCIE20_PARF_DBI_BASE_ADDR,
0x7FFFE000);
}
/* Wait for up to 1000ms for BME to be set */
retries = 0;
bme = readl_relaxed(dev->dm_core +
@ -1177,6 +1197,50 @@ out:
return rc;
}
int ep_pcie_core_mask_irq_event(enum ep_pcie_irq_event event,
bool enable)
{
int rc = 0;
struct ep_pcie_dev_t *dev = &ep_pcie_dev;
unsigned long irqsave_flags;
u32 mask = 0;
EP_PCIE_DUMP(dev,
"PCIe V%d: Client askes to %s IRQ event 0x%x.\n",
dev->rev,
enable ? "enable" : "disable",
event);
spin_lock_irqsave(&dev->ext_lock, irqsave_flags);
if (dev->aggregated_irq) {
mask = readl_relaxed(dev->dm_core + PCIE20_PARF_INT_ALL_MASK);
EP_PCIE_DUMP(dev,
"PCIe V%d: current PCIE20_PARF_INT_ALL_MASK:0x%x\n",
dev->rev, mask);
if (enable)
ep_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_MASK,
0, BIT(event));
else
ep_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_MASK,
BIT(event), 0);
EP_PCIE_DUMP(dev,
"PCIe V%d: new PCIE20_PARF_INT_ALL_MASK:0x%x\n",
dev->rev,
readl_relaxed(dev->dm_core + PCIE20_PARF_INT_ALL_MASK));
} else {
EP_PCIE_ERR(dev,
"PCIe V%d: Client askes to %s IRQ event 0x%x when aggregated IRQ is not supported.\n",
dev->rev,
enable ? "enable" : "disable",
event);
rc = EP_PCIE_ERROR;
}
spin_unlock_irqrestore(&dev->ext_lock, irqsave_flags);
return rc;
}
static irqreturn_t ep_pcie_handle_linkdown_irq(int irq, void *data)
{
struct ep_pcie_dev_t *dev = data;
@ -1328,6 +1392,71 @@ out:
return IRQ_HANDLED;
}
static irqreturn_t ep_pcie_handle_global_irq(int irq, void *data)
{
struct ep_pcie_dev_t *dev = data;
int i;
u32 status = readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_STATUS);
u32 mask = readl_relaxed(dev->parf + PCIE20_PARF_INT_ALL_MASK);
ep_pcie_write_mask(dev->parf + PCIE20_PARF_INT_ALL_CLEAR, 0, status);
dev->global_irq_counter++;
EP_PCIE_DUMP(dev,
"PCIe V%d: No. %ld Global IRQ %d received; status:0x%x; mask:0x%x.\n",
dev->rev, dev->global_irq_counter, irq, status, mask);
status &= mask;
for (i = 1; i <= EP_PCIE_INT_EVT_MAX; i++) {
if (status & BIT(i)) {
switch (i) {
case EP_PCIE_INT_EVT_LINK_DOWN:
EP_PCIE_DUMP(dev,
"PCIe V%d: handle linkdown event.\n",
dev->rev);
ep_pcie_handle_linkdown_irq(irq, data);
break;
case EP_PCIE_INT_EVT_BME:
EP_PCIE_DUMP(dev,
"PCIe V%d: handle BME event.\n",
dev->rev);
dev->link_status = EP_PCIE_LINK_ENABLED;
break;
case EP_PCIE_INT_EVT_PM_TURNOFF:
EP_PCIE_DUMP(dev,
"PCIe V%d: handle PM Turn-off event.\n",
dev->rev);
ep_pcie_handle_pm_turnoff_irq(irq, data);
break;
case EP_PCIE_INT_EVT_MHI_A7:
EP_PCIE_DUMP(dev,
"PCIe V%d: handle MHI A7 event.\n",
dev->rev);
ep_pcie_notify_event(dev, EP_PCIE_EVENT_MHI_A7);
break;
case EP_PCIE_INT_EVT_DSTATE_CHANGE:
EP_PCIE_DUMP(dev,
"PCIe V%d: handle D state chagge event.\n",
dev->rev);
ep_pcie_handle_dstate_change_irq(irq, data);
break;
case EP_PCIE_INT_EVT_LINK_UP:
EP_PCIE_DUMP(dev,
"PCIe V%d: handle linkup event.\n",
dev->rev);
ep_pcie_handle_linkup_irq(irq, data);
break;
default:
EP_PCIE_ERR(dev,
"PCIe V%d: Unexpected event %d is caught!\n",
dev->rev, i);
}
}
}
return IRQ_HANDLED;
}
int32_t ep_pcie_irq_init(struct ep_pcie_dev_t *dev)
{
int ret;
@ -1336,6 +1465,25 @@ int32_t ep_pcie_irq_init(struct ep_pcie_dev_t *dev)
EP_PCIE_DBG(dev, "PCIe V%d\n", dev->rev);
if (dev->aggregated_irq) {
ret = devm_request_irq(pdev,
dev->irq[EP_PCIE_INT_GLOBAL].num,
ep_pcie_handle_global_irq,
IRQF_TRIGGER_HIGH, dev->irq[EP_PCIE_INT_GLOBAL].name,
dev);
if (ret) {
EP_PCIE_ERR(dev,
"PCIe V%d: Unable to request global interrupt %d\n",
dev->rev, dev->irq[EP_PCIE_INT_GLOBAL].num);
return ret;
}
EP_PCIE_DBG(dev,
"PCIe V%d: request global interrupt %d\n",
dev->rev, dev->irq[EP_PCIE_INT_GLOBAL].num);
goto perst_irq;
}
/* register handler for linkdown interrupt */
ret = devm_request_irq(pdev,
dev->irq[EP_PCIE_INT_LINK_DOWN].num,
@ -1387,6 +1535,7 @@ int32_t ep_pcie_irq_init(struct ep_pcie_dev_t *dev)
return ret;
}
perst_irq:
/* register handler for PERST interrupt */
perst_irq = gpio_to_irq(dev->gpio[EP_PCIE_GPIO_PERST].num);
ret = devm_request_irq(pdev, perst_irq,
@ -1496,6 +1645,18 @@ int ep_pcie_core_config_outbound_iatu(struct ep_pcie_iatu entries[],
u32 ctrl_end = 0;
u32 ctrl_tgt_lower = 0;
u32 ctrl_tgt_upper = 0;
u32 upper = 0;
bool once = true;
if (ep_pcie_dev.active_config) {
upper = EP_PCIE_OATU_UPPER;
if (once) {
once = false;
EP_PCIE_DBG2(&ep_pcie_dev,
"PCIe V%d: No outbound iATU config is needed since active config is enabled.\n",
ep_pcie_dev.rev);
}
}
if ((num_entries > MAX_IATU_ENTRY_NUM) || !num_entries) {
EP_PCIE_ERR(&ep_pcie_dev,
@ -1529,11 +1690,11 @@ int ep_pcie_core_config_outbound_iatu(struct ep_pcie_iatu entries[],
ep_pcie_dev.rev);
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_DATA,
data_start, data_end,
data_start, upper, data_end,
data_tgt_lower, data_tgt_upper);
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_CTRL,
ctrl_start, ctrl_end,
ctrl_start, upper, ctrl_end,
ctrl_tgt_lower, ctrl_tgt_upper);
} else if ((data_start <= ctrl_start) && (ctrl_end <= data_end)) {
EP_PCIE_DBG(&ep_pcie_dev,
@ -1541,7 +1702,7 @@ int ep_pcie_core_config_outbound_iatu(struct ep_pcie_iatu entries[],
ep_pcie_dev.rev);
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_DATA,
data_start, data_end,
data_start, upper, data_end,
data_tgt_lower, data_tgt_upper);
} else {
EP_PCIE_DBG(&ep_pcie_dev,
@ -1549,11 +1710,11 @@ int ep_pcie_core_config_outbound_iatu(struct ep_pcie_iatu entries[],
ep_pcie_dev.rev);
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_CTRL,
ctrl_start, ctrl_end,
ctrl_start, upper, ctrl_end,
ctrl_tgt_lower, ctrl_tgt_upper);
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_DATA,
data_start, data_end,
data_start, upper, data_end,
data_tgt_lower, data_tgt_upper);
}
@ -1596,10 +1757,17 @@ int ep_pcie_core_get_msi_config(struct ep_pcie_msi_config *cfg)
if (ctrl_reg & BIT(16)) {
struct resource *msi =
ep_pcie_dev.res[EP_PCIE_RES_MSI].resource;
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
if (ep_pcie_dev.active_config)
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_MSI,
msi->start, msi->end,
msi->start, EP_PCIE_OATU_UPPER,
msi->end, lower, upper);
else
ep_pcie_config_outbound_iatu_entry(&ep_pcie_dev,
EP_PCIE_OATU_INDEX_MSI,
msi->start, 0, msi->end,
lower, upper);
cfg->lower = msi->start + (lower & 0xfff);
cfg->upper = 0;
cfg->data = data;
@ -1635,6 +1803,7 @@ int ep_pcie_core_get_msi_config(struct ep_pcie_msi_config *cfg)
int ep_pcie_core_trigger_msi(u32 idx)
{
u32 addr, data, ctrl_reg;
int max_poll = MSI_EXIT_L1SS_WAIT_MAX_COUNT;
if (ep_pcie_dev.link_status == EP_PCIE_LINK_DISABLED) {
EP_PCIE_ERR(&ep_pcie_dev,
@ -1651,14 +1820,44 @@ int ep_pcie_core_trigger_msi(u32 idx)
if (ctrl_reg & BIT(16)) {
ep_pcie_dev.msi_counter++;
EP_PCIE_DUMP(&ep_pcie_dev,
"PCIe V%d: No. %ld MSI fired for IRQ %d; index from client:%d\n",
"PCIe V%d: No. %ld MSI fired for IRQ %d; index from client:%d; active-config is %s enabled.\n",
ep_pcie_dev.rev, ep_pcie_dev.msi_counter,
data + idx, idx);
ep_pcie_write_reg(ep_pcie_dev.msi, addr & 0xfff, data + idx);
data + idx, idx,
ep_pcie_dev.active_config ? "" : "not");
if (ep_pcie_dev.active_config) {
u32 status;
ep_pcie_write_reg(ep_pcie_dev.dm_core,
PCIE20_MSI_MASK, idx);
status = readl_relaxed(ep_pcie_dev.parf +
PCIE20_PARF_LTR_MSI_EXIT_L1SS);
while ((status & BIT(1)) && (max_poll-- > 0)) {
udelay(MSI_EXIT_L1SS_WAIT);
status = readl_relaxed(ep_pcie_dev.parf +
PCIE20_PARF_LTR_MSI_EXIT_L1SS);
}
if (max_poll == 0)
EP_PCIE_DBG2(&ep_pcie_dev,
"PCIe V%d: MSI_EXIT_L1SS is not cleared yet.\n",
ep_pcie_dev.rev);
else
EP_PCIE_DBG2(&ep_pcie_dev,
"PCIe V%d: MSI_EXIT_L1SS has been cleared.\n",
ep_pcie_dev.rev);
EP_PCIE_DBG2(&ep_pcie_dev,
"PCIe V%d: try to trigger MSI by direct address write as well.\n",
ep_pcie_dev.rev);
ep_pcie_write_reg(ep_pcie_dev.msi, addr & 0xfff, data
+ idx);
} else {
ep_pcie_write_reg(ep_pcie_dev.msi, addr & 0xfff, data
+ idx);
}
return 0;
} else {
EP_PCIE_ERR(&ep_pcie_dev,
"PCIe V%d: Wrong MSI info found. MSI addr:0x%x; data:0x%x; index from client:%d.\n",
"PCIe V%d: MSI is not enabled yet. MSI addr:0x%x; data:0x%x; index from client:%d.\n",
ep_pcie_dev.rev, addr, data, idx);
return EP_PCIE_ERROR;
}
@ -1721,6 +1920,7 @@ struct ep_pcie_hw hw_drv = {
.config_db_routing = ep_pcie_core_config_db_routing,
.enable_endpoint = ep_pcie_core_enable_endpoint,
.disable_endpoint = ep_pcie_core_disable_endpoint,
.mask_irq_event = ep_pcie_core_mask_irq_event,
};
static int ep_pcie_probe(struct platform_device *pdev)
@ -1753,7 +1953,20 @@ static int ep_pcie_probe(struct platform_device *pdev)
EP_PCIE_DBG(&ep_pcie_dev, "PCIe V%d: pcie-phy-ver:%d.\n",
ep_pcie_dev.rev, ep_pcie_dev.phy_rev);
ep_pcie_dev.rev = 1503191;
ep_pcie_dev.active_config = of_property_read_bool((&pdev->dev)->of_node,
"qcom,pcie-active-config");
EP_PCIE_DBG(&ep_pcie_dev,
"PCIe V%d: active config is %s enabled.\n",
ep_pcie_dev.rev, ep_pcie_dev.active_config ? "" : "not");
ep_pcie_dev.aggregated_irq =
of_property_read_bool((&pdev->dev)->of_node,
"qcom,pcie-aggregated-irq");
EP_PCIE_DBG(&ep_pcie_dev,
"PCIe V%d: aggregated IRQ is %s enabled.\n",
ep_pcie_dev.rev, ep_pcie_dev.aggregated_irq ? "" : "not");
ep_pcie_dev.rev = 1511053;
ep_pcie_dev.pdev = pdev;
memcpy(ep_pcie_dev.vreg, ep_pcie_vreg_info,
sizeof(ep_pcie_vreg_info));
@ -1878,7 +2091,7 @@ static int __init ep_pcie_init(void)
snprintf(logname, MAX_NAME_LEN, "ep-pcie-long");
ep_pcie_dev.ipc_log_sel =
ipc_log_context_create(EP_PCIE_LOG_PAGES, logname);
ipc_log_context_create(EP_PCIE_LOG_PAGES, logname, 0);
if (ep_pcie_dev.ipc_log_sel == NULL)
pr_err("%s: unable to create IPC selected log for %s\n",
__func__, logname);
@ -1889,7 +2102,7 @@ static int __init ep_pcie_init(void)
snprintf(logname, MAX_NAME_LEN, "ep-pcie-short");
ep_pcie_dev.ipc_log_ful =
ipc_log_context_create(EP_PCIE_LOG_PAGES * 2, logname);
ipc_log_context_create(EP_PCIE_LOG_PAGES * 2, logname, 0);
if (ep_pcie_dev.ipc_log_ful == NULL)
pr_err("%s: unable to create IPC detailed log for %s\n",
__func__, logname);
@ -1900,7 +2113,7 @@ static int __init ep_pcie_init(void)
snprintf(logname, MAX_NAME_LEN, "ep-pcie-dump");
ep_pcie_dev.ipc_log_dump =
ipc_log_context_create(EP_PCIE_LOG_PAGES, logname);
ipc_log_context_create(EP_PCIE_LOG_PAGES, logname, 0);
if (ep_pcie_dev.ipc_log_dump == NULL)
pr_err("%s: unable to create IPC dump log for %s\n",
__func__, logname);

View file

@ -95,104 +95,6 @@ static void ep_pcie_phy_dump(struct ep_pcie_dev_t *dev)
EP_PCIE_DUMP(dev, "PCIe V%d: PHY register dump\n", dev->rev);
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_COM_PLL_VCO_HIGH: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_COM_PLL_VCO_HIGH));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_COM_RESET_SM: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_COM_RESET_SM));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_COM_MUXVAL: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_COM_MUXVAL));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_PI_CTRL1: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_PI_CTRL1));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_PI_CTRL2: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_PI_CTRL2));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_PI_QUAD: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_PI_QUAD));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_IDATA1: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_IDATA1));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_IDATA2: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_IDATA2));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_AUX_DATA1: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_AUX_DATA1));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_AUX_DATA2: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_AUX_DATA2));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_AC_JTAG_OUTP: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_AC_JTAG_OUTP));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_AC_JTAG_OUTN: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_AC_JTAG_OUTN));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_RX_SIGDET: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_RX_SIGDET));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_RX_VDCOFF: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_RX_VDCOFF));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_IDAC_CAL_ON: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_IDAC_CAL_ON));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_IDAC_STATUS_I: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_IDAC_STATUS_I));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_IDAC_STATUS_Q: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_IDAC_STATUS_Q));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_IDAC_STATUS_A: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_IDAC_STATUS_A));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_CALST_STATUS_I: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_CALST_STATUS_I));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_CALST_STATUS_Q: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_CALST_STATUS_Q));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_CALST_STATUS_A: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_CALST_STATUS_A));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS0: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS0));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS1: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS1));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS2: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS2));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS3: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS3));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS4: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS4));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS5: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS5));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS6: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS6));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS7: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS7));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS8: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS8));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_EOM_STATUS9: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_EOM_STATUS9));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_RX_ALOG_INTF_OBSV: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_RX_ALOG_INTF_OBSV));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_READ_EQCODE: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_READ_EQCODE));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_RX_READ_OFFSETCODE: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_RX_READ_OFFSETCODE));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_TX_BIST_STATUS: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_TX_BIST_STATUS));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_TX_BIST_ERROR_COUNT1: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_TX_BIST_ERROR_COUNT1));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_TX_BIST_ERROR_COUNT2: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_TX_BIST_ERROR_COUNT2));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_TX_TX_ALOG_INTF_OBSV: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_TX_TX_ALOG_INTF_OBSV));
EP_PCIE_DUMP(dev, "PCIe V%d: QSERDES_TX_PWM_DEC_STATUS: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + QSERDES_TX_PWM_DEC_STATUS));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_BIST_CHK_ERR_CNT_L: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_BIST_CHK_ERR_CNT_L));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_BIST_CHK_ERR_CNT_H: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_BIST_CHK_ERR_CNT_H));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_BIST_CHK_STATUS: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_BIST_CHK_STATUS));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_LFPS_RXTERM_IRQ_SOURCE: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_LFPS_RXTERM_IRQ_SOURCE));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_PCS_STATUS: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_PCS_STATUS));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_PCS_STATUS2: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_PCS_STATUS2));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_REVISION_ID0: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_REVISION_ID0));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_REVISION_ID1: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_REVISION_ID1));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_REVISION_ID2: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_REVISION_ID2));
EP_PCIE_DUMP(dev, "PCIe V%d: PCIE_PHY_REVISION_ID3: 0x%x\n",
dev->rev, readl_relaxed(dev->phy + PCIE_PHY_REVISION_ID3));
}
void ep_pcie_reg_dump(struct ep_pcie_dev_t *dev, u32 sel, bool linkdown)

View file

@ -17,95 +17,82 @@
#include "ep_pcie_com.h"
#include "ep_pcie_phy.h"
static u32 qserdes_com_oft;
void ep_pcie_phy_init(struct ep_pcie_dev_t *dev)
{
EP_PCIE_DBG(dev,
"PCIe V%d: PHY V%d: Initializing 20nm QMP phy - 100MHz\n",
"PCIe V%d: PHY V%d: Initializing 14nm QMP phy - 100MHz\n",
dev->rev, dev->phy_rev);
switch (dev->phy_rev) {
case 3:
qserdes_com_oft = 8;
break;
default:
qserdes_com_oft = 0;
}
ep_pcie_write_reg(dev->phy, PCIE_PHY_SW_RESET, 0x01);
ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_DOWN_CONTROL, 0x01);
ep_pcie_write_reg(dev->phy, QSERDES_COM_SYS_CLK_CTRL, 0x1E);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CP_SETI, 0x11);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IP_SETP, 0x3F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CP_SETP, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IP_SETI, 0x3F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_IP_TRIM, 0x0F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL, 0x90);
ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_CAL_CSR
+ qserdes_com_oft, 0x77);
ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_TRIM_CONTROL
+ qserdes_com_oft, 0x15);
ep_pcie_write_reg(dev->phy, QSERDES_TX_RCV_DETECT_LVL, 0x03);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN1_LSB, 0xFF);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN2_LSB, 0xFF);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN2_MSB, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_ENABLES, 0x40);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_CNTRL, 0x70);
ep_pcie_write_reg(dev->phy, PCIE_PHY_PWRUP_RESET_DLY_TIME_SYSCLK, 0xC8);
ep_pcie_write_reg(dev->phy, QSERDES_COM_SYSCLK_EN_SEL, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_COM_BIAS_EN_CLKBUFLR_EN, 0x18);
ep_pcie_write_reg(dev->phy, QSERDES_COM_CLK_SELECT, 0x30);
ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL, 0x20);
ep_pcie_write_reg(dev->phy, QSERDES_COM_CMN_CONFIG, 0x06);
ep_pcie_write_reg(dev->phy, QSERDES_COM_DEC_START_MODE0, 0x19);
ep_pcie_write_reg(dev->phy, QSERDES_COM_CP_CTRL_MODE0, 0x3F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_RCTRL_MODE0, 0x1A);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CCTRL_MODE0, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_COM_INTEGLOOP_GAIN1_MODE0, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_COM_INTEGLOOP_GAIN0_MODE0, 0xFF);
ep_pcie_write_reg(dev->phy, QSERDES_COM_SVS_MODE_CLK_SEL, 0x01);
ep_pcie_write_reg(dev->phy, QSERDES_COM_CORE_CLK_EN, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP2_MODE0, 0x04);
ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP1_MODE0, 0xFF);
ep_pcie_write_reg(dev->phy, QSERDES_COM_LOCK_CMP_EN, 0x42);
ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_MAP, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_TIMER2, 0x3F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_VCO_TUNE_TIMER1, 0xFF);
ep_pcie_write_reg(dev->phy, QSERDES_COM_BG_TIMER, 0x01);
ep_pcie_write_reg(dev->phy, QSERDES_COM_BG_TRIM, 0x0F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IVCO, 0x0F);
ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE,
0x4B);
ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_FO_GAIN, 0x0A);
ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_FO_GAIN_HALF, 0x0A);
ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN, 0x04);
ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN_HALF, 0x04);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x01);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3, 0x00);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4, 0xDB);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1,
0x77);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_ENABLES, 0x1C);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_CNTRL, 0x03);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x14);
ep_pcie_write_reg(dev->phy, QSERDES_TX_RES_CODE_LANE_OFFSET, 0x02);
ep_pcie_write_reg(dev->phy, QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN,
0x45);
ep_pcie_write_reg(dev->phy, QSERDES_TX_RCV_DETECT_LVL_2, 0x12);
ep_pcie_write_reg(dev->phy, QSERDES_TX_LANE_MODE, 0x06);
ep_pcie_write_reg(dev->phy, PCIE_PHY_OSC_DTCT_ACTIONS, 0x0A);
ep_pcie_write_reg(dev->phy, PCIE_PHY_RX_IDLE_DTCT_CNTRL, 0x4C);
ep_pcie_write_reg(dev->phy, PCIE_PHY_TXDEEMPH_M3P5DB_V0, 0x0F);
ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_STATE_CONFIG1, 0xA3);
ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_STATE_CONFIG2, 0x1B);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_VCOTAIL_EN, 0xE1);
ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL2, 0x07);
ep_pcie_write_reg(dev->phy, QSERDES_COM_IE_TRIM, 0x3F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CNTRL, 0x46);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLLLOCK_CMP2
+ qserdes_com_oft, 0x05);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLLLOCK_CMP_EN
+ qserdes_com_oft, 0x03);
ep_pcie_write_reg(dev->phy, QSERDES_COM_DEC_START1
+ qserdes_com_oft, 0x99);
ep_pcie_write_reg(dev->phy, QSERDES_RX_CDR_CONTROL1, 0xF5);
ep_pcie_write_reg(dev->phy, QSERDES_RX_CDR_CONTROL_HALF, 0x2C);
ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_START_SEG1
+ qserdes_com_oft, 0x24);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN1_MSB, 0x07);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2, 0x1E);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1,
0x67);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2, 0x80);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_DEGLITCH_CNTRL, 0x0C);
ep_pcie_write_reg(dev->phy, PCIE_PHY_PWRUP_RESET_DLY_TIME_AUXCLK, 0x80);
ep_pcie_write_reg(dev->phy, PCIE_PHY_RX_IDLE_DTCT_CNTRL, 0x4D);
if (dev->phy_rev == 1) {
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_RCVR_IQ_EN, 0x31);
ep_pcie_write_reg(dev->phy, QSERDES_COM_RESETSM_CNTRL2, 0x5);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_VCOTAIL_EN, 0x1);
} else if (dev->phy_rev == 3) {
ep_pcie_write_reg(dev->phy, QSERDES_COM_RES_CODE_START_SEG1
+ qserdes_com_oft, 0x20);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CP_SETI, 0x3F);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_IP_SETP, 0x34);
ep_pcie_write_reg(dev->phy, QSERDES_COM_IE_TRIM, 0x0F);
ep_pcie_write_reg(dev->phy, QSERDES_RX_CDR_CONTROL1, 0xF4);
ep_pcie_write_reg(dev->phy, QSERDES_RX_RX_EQ_GAIN1_MSB, 0x1F);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_CNTRL, 0x90);
ep_pcie_write_reg(dev->phy, QSERDES_RX_SIGDET_DEGLITCH_CNTRL,
0x06);
ep_pcie_write_reg(dev->phy, QSERDES_COM_PLL_CRCTRL
+ qserdes_com_oft, 0x09);
ep_pcie_write_reg(dev->phy,
QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE, 0x49);
ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_FO_GAIN, 0x09);
ep_pcie_write_reg(dev->phy, QSERDES_RX_UCDR_SO_GAIN, 0x04);
}
ep_pcie_write_reg(dev->phy, PCIE_PHY_POWER_STATE_CONFIG4, 0x00);
ep_pcie_write_reg(dev->phy, PCIE_PHY_RCVR_DTCT_DLY_P1U2_L, 0xF1);
ep_pcie_write_reg(dev->phy, PCIE_PHY_RCVR_DTCT_DLY_P1U2_H, 0x01);
ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG1, 0x80);
ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG2, 0x02);
ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG3, 0x40);
ep_pcie_write_reg(dev->phy, PCIE_PHY_LOCK_DETECT_CONFIG4, 0x07);
ep_pcie_write_reg(dev->phy, PCIE_PHY_PWRUP_RESET_DLY_TIME_AUXCLK, 0x40);
ep_pcie_write_reg(dev->phy, PCIE_PHY_LP_WAKEUP_DLY_TIME_AUXCLK, 0x40);
ep_pcie_write_reg(dev->phy, PCIE_PHY_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB,
0x40);
ep_pcie_write_reg(dev->phy, PCIE_PHY_PLL_LOCK_CHK_DLY_TIME, 0x73);
ep_pcie_write_reg(dev->phy, PCIE_PHY_ELECIDLE_DLY_SEL, 0x01);
ep_pcie_write_reg(dev->phy, PCIE_PHY_SIGDET_CNTRL, 0x0F);
ep_pcie_write_reg(dev->phy, PCIE_PHY_RX_SIGDET_LVL, 0x77);
ep_pcie_write_reg(dev->phy, PCIE_PHY_SW_RESET, 0x00);
ep_pcie_write_reg(dev->phy, PCIE_PHY_START, 0x03);
ep_pcie_write_reg(dev->phy, PCIE_PHY_START_CONTROL, 0x03);
}
bool ep_pcie_phy_is_ready(struct ep_pcie_dev_t *dev)

View file

@ -13,339 +13,451 @@
#ifndef __EP_PCIE_PHY_H
#define __EP_PCIE_PHY_H
#define QSERDES_COM_SYS_CLK_CTRL 0x0
#define QSERDES_COM_PLL_VCOTAIL_EN 0x4
#define QSERDES_COM_CMN_MODE 0x8
#define QSERDES_COM_IE_TRIM 0xC
#define QSERDES_COM_IP_TRIM 0x10
#define QSERDES_COM_PLL_CNTRL 0x14
#define QSERDES_COM_PLL_PHSEL_CONTROL 0x18
#define QSERDES_COM_IPTAT_TRIM_VCCA_TX_SEL 0x1C
#define QSERDES_COM_PLL_PHSEL_DC 0x20
#define QSERDES_COM_PLL_IP_SETI 0x24
#define QSERDES_COM_CORE_CLK_IN_SYNC_SEL 0x28
#define QSERDES_COM_PLL_BKG_KVCO_CAL_EN 0x2C
#define QSERDES_COM_BIAS_EN_CLKBUFLR_EN 0x30
#define QSERDES_COM_PLL_CP_SETI 0x34
#define QSERDES_COM_PLL_IP_SETP 0x38
#define QSERDES_COM_PLL_CP_SETP 0x3C
#define QSERDES_COM_ATB_SEL1 0x40
#define QSERDES_COM_ATB_SEL2 0x44
#define QSERDES_COM_SYSCLK_EN_SEL_TXBAND 0x48
#define QSERDES_COM_RESETSM_CNTRL 0x4C
#define QSERDES_COM_RESETSM_CNTRL2 0x50
#define QSERDES_COM_RESETSM_CNTRL3 0x54
#define QSERDES_COM_DIV_REF1 0x58
#define QSERDES_COM_DIV_REF2 0x5C
#define QSERDES_COM_KVCO_COUNT1 0x60
#define QSERDES_COM_KVCO_COUNT2 0x64
#define QSERDES_COM_KVCO_CAL_CNTRL 0x68
#define QSERDES_COM_KVCO_CODE 0x6C
#define QSERDES_COM_VREF_CFG1 0x70
#define QSERDES_COM_VREF_CFG2 0x74
#define QSERDES_COM_VREF_CFG3 0x78
#define QSERDES_COM_VREF_CFG4 0x7C
#define QSERDES_COM_VREF_CFG5 0x80
#define QSERDES_COM_VREF_CFG6 0x84
#define QSERDES_COM_PLLLOCK_CMP1 0x88
#define QSERDES_COM_PLLLOCK_CMP2 0x8C
#define QSERDES_COM_PLLLOCK_CMP3 0x90
#define QSERDES_COM_PLLLOCK_CMP_EN 0x94
#define QSERDES_COM_BGTC 0x98
#define QSERDES_COM_PLL_TEST_UPDN 0x9C
#define QSERDES_COM_PLL_VCO_TUNE 0xA0
#define QSERDES_COM_DEC_START1 0xA4
#define QSERDES_COM_PLL_AMP_OS 0xA8
#define QSERDES_COM_SSC_EN_CENTER 0xAC
#define QSERDES_COM_SSC_ADJ_PER1 0xB0
#define QSERDES_COM_SSC_ADJ_PER2 0xB4
#define QSERDES_COM_SSC_PER1 0xB8
#define QSERDES_COM_SSC_PER2 0xBC
#define QSERDES_COM_SSC_STEP_SIZE1 0xC0
#define QSERDES_COM_SSC_STEP_SIZE2 0xC4
#define QSERDES_COM_RES_CODE_UP 0xC8
#define QSERDES_COM_RES_CODE_DN 0xCC
#define QSERDES_COM_RES_CODE_UP_OFFSET 0xD0
#define QSERDES_COM_RES_CODE_DN_OFFSET 0xD4
#define QSERDES_COM_RES_CODE_START_SEG1 0xD8
#define QSERDES_COM_RES_CODE_START_SEG2 0xDC
#define QSERDES_COM_RES_CODE_CAL_CSR 0xE0
#define QSERDES_COM_RES_CODE 0xE4
#define QSERDES_COM_RES_TRIM_CONTROL 0xE8
#define QSERDES_COM_RES_TRIM_CONTROL2 0xEC
#define QSERDES_COM_RES_TRIM_EN_VCOCALDONE 0xF0
#define QSERDES_COM_FAUX_EN 0xF4
#define QSERDES_COM_DIV_FRAC_START1 0xF8
#define QSERDES_COM_DIV_FRAC_START2 0xFC
#define QSERDES_COM_DIV_FRAC_START3 0x100
#define QSERDES_COM_DEC_START2 0x104
#define QSERDES_COM_PLL_RXTXEPCLK_EN 0x108
#define QSERDES_COM_PLL_CRCTRL 0x10C
#define QSERDES_COM_PLL_CLKEPDIV 0x110
#define QSERDES_COM_PLL_FREQUPDATE 0x114
#define QSERDES_COM_PLL_BKGCAL_TRIM_UP 0x118
#define QSERDES_COM_PLL_BKGCAL_TRIM_DN 0x11C
#define QSERDES_COM_PLL_BKGCAL_TRIM_MUX 0x120
#define QSERDES_COM_PLL_BKGCAL_VREF_CFG 0x124
#define QSERDES_COM_PLL_BKGCAL_DIV_REF1 0x128
#define QSERDES_COM_PLL_BKGCAL_DIV_REF2 0x12C
#define QSERDES_COM_MUXADDR 0x130
#define QSERDES_COM_LOW_POWER_RO_CONTROL 0x134
#define QSERDES_COM_POST_DIVIDER_CONTROL 0x138
#define QSERDES_COM_HR_OCLK2_DIVIDER 0x13C
#define QSERDES_COM_HR_OCLK3_DIVIDER 0x140
#define QSERDES_COM_PLL_VCO_HIGH 0x144
#define QSERDES_COM_RESET_SM 0x148
#define QSERDES_COM_MUXVAL 0x14C
#define QSERDES_TX_BIST_MODE_LANENO 0x200
#define QSERDES_TX_CLKBUF_ENABLE 0x204
#define QSERDES_TX_TX_EMP_POST1_LVL 0x208
#define QSERDES_TX_TX_DRV_LVL 0x20C
#define QSERDES_TX_RESET_TSYNC_EN 0x210
#define QSERDES_TX_LPB_EN 0x214
#define QSERDES_TX_RES_CODE_UP 0x218
#define QSERDES_TX_RES_CODE_DN 0x21C
#define QSERDES_TX_PERL_LENGTH1 0x220
#define QSERDES_TX_PERL_LENGTH2 0x224
#define QSERDES_TX_SERDES_BYP_EN_OUT 0x228
#define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN 0x22C
#define QSERDES_TX_PARRATE_REC_DETECT_IDLE_EN 0x230
#define QSERDES_TX_BIST_PATTERN1 0x234
#define QSERDES_TX_BIST_PATTERN2 0x238
#define QSERDES_TX_BIST_PATTERN3 0x23C
#define QSERDES_TX_BIST_PATTERN4 0x240
#define QSERDES_TX_BIST_PATTERN5 0x244
#define QSERDES_TX_BIST_PATTERN6 0x248
#define QSERDES_TX_BIST_PATTERN7 0x24C
#define QSERDES_TX_BIST_PATTERN8 0x250
#define QSERDES_TX_LANE_MODE 0x254
#define QSERDES_TX_IDAC_CAL_LANE_MODE 0x258
#define QSERDES_TX_IDAC_CAL_LANE_MODE_CONFIGURATION 0x25C
#define QSERDES_TX_ATB_SEL1 0x260
#define QSERDES_TX_ATB_SEL2 0x264
#define QSERDES_TX_RCV_DETECT_LVL 0x268
#define QSERDES_TX_PRBS_SEED1 0x26C
#define QSERDES_TX_PRBS_SEED2 0x270
#define QSERDES_TX_PRBS_SEED3 0x274
#define QSERDES_TX_PRBS_SEED4 0x278
#define QSERDES_TX_RESET_GEN 0x27C
#define QSERDES_TX_TRAN_DRVR_EMP_EN 0x280
#define QSERDES_TX_TX_INTERFACE_MODE 0x284
#define QSERDES_TX_PWM_CTRL 0x288
#define QSERDES_TX_PWM_DATA 0x28C
#define QSERDES_TX_PWM_ENC_DIV_CTRL 0x290
#define QSERDES_TX_VMODE_CTRL1 0x294
#define QSERDES_TX_VMODE_CTRL2 0x298
#define QSERDES_TX_VMODE_CTRL3 0x29C
#define QSERDES_TX_VMODE_CTRL4 0x2A0
#define QSERDES_TX_VMODE_CTRL5 0x2A4
#define QSERDES_TX_VMODE_CTRL6 0x2A8
#define QSERDES_TX_VMODE_CTRL7 0x2AC
#define QSERDES_TX_TX_ALOG_INTF_OBSV_CNTL 0x2B0
#define QSERDES_TX_BIST_STATUS 0x2B4
#define QSERDES_TX_BIST_ERROR_COUNT1 0x2B8
#define QSERDES_TX_BIST_ERROR_COUNT2 0x2BC
#define QSERDES_TX_TX_ALOG_INTF_OBSV 0x2C0
#define QSERDES_TX_PWM_DEC_STATUS 0x2C4
#define QSERDES_RX_CDR_CONTROL1 0x400
#define QSERDES_RX_CDR_CONTROL2 0x404
#define QSERDES_RX_CDR_CONTROL_HALF 0x408
#define QSERDES_RX_CDR_CONTROL_QUARTER 0x40C
#define QSERDES_RX_CDR_CONTROL_EIGHTH 0x410
#define QSERDES_RX_UCDR_FO_GAIN 0x414
#define QSERDES_RX_UCDR_SO_GAIN 0x418
#define QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE 0x41C
#define QSERDES_RX_UCDR_FO_TO_SO_DELAY 0x420
#define QSERDES_RX_AUX_CONTROL 0x424
#define QSERDES_RX_AUX_DATA_TCOARSE 0x428
#define QSERDES_RX_AUX_DATA_TFINE_LSB 0x42C
#define QSERDES_RX_AUX_DATA_TFINE_MSB 0x430
#define QSERDES_RX_RCLK_AUXDATA_SEL 0x434
#define QSERDES_RX_AC_JTAG_ENABLE 0x438
#define QSERDES_RX_AC_JTAG_INITP 0x43C
#define QSERDES_RX_AC_JTAG_INITN 0x440
#define QSERDES_RX_AC_JTAG_LVL 0x444
#define QSERDES_RX_AC_JTAG_MODE 0x448
#define QSERDES_RX_AC_JTAG_RESET 0x44C
#define QSERDES_RX_RX_RCVR_IQ_EN 0x450
#define QSERDES_RX_RX_IDAC_I_DC_OFFSETS 0x454
#define QSERDES_RX_RX_IDAC_Q_DC_OFFSETS 0x458
#define QSERDES_RX_RX_IDAC_A_DC_OFFSETS 0x45C
#define QSERDES_RX_RX_IDAC_EN 0x460
#define QSERDES_RX_RX_IDAC_CTRL0 0x464
#define QSERDES_RX_RX_IDAC_CTRL1 0x468
#define QSERDES_RX_RX_EOM_EN 0x46C
#define QSERDES_RX_RX_EOM_CTRL0 0x470
#define QSERDES_RX_RX_EOM_CTRL1 0x474
#define QSERDES_RX_RX_EOM_CTRL2 0x478
#define QSERDES_RX_RX_EOM_CTRL3 0x47C
#define QSERDES_RX_RX_EOM_CTRL4 0x480
#define QSERDES_RX_RX_EOM_CTRL5 0x484
#define QSERDES_RX_RX_EOM_CTRL6 0x488
#define QSERDES_RX_RX_EOM_CTRL7 0x48C
#define QSERDES_RX_RX_EOM_CTRL8 0x490
#define QSERDES_RX_RX_EOM_CTRL9 0x494
#define QSERDES_RX_RX_EOM_CTRL10 0x498
#define QSERDES_RX_RX_EOM_CTRL11 0x49C
#define QSERDES_RX_RX_HIGHZ_HIGHRATE 0x4A0
#define QSERDES_RX_RX_TERM_AC_BYPASS_DC_COUPLE_OFFSET 0x4A4
#define QSERDES_RX_RX_EQ_GAIN1_LSB 0x4A8
#define QSERDES_RX_RX_EQ_GAIN1_MSB 0x4AC
#define QSERDES_RX_RX_EQ_GAIN2_LSB 0x4B0
#define QSERDES_RX_RX_EQ_GAIN2_MSB 0x4B4
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL1 0x4B8
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2 0x4BC
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3 0x4C0
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4 0x4C4
#define QSERDES_RX_RX_IDAC_CAL_CONFIGURATION 0x4C8
#define QSERDES_RX_RX_IDAC_CAL_CONFIGURATION_2 0x4CC
#define QSERDES_RX_RX_IDAC_TSETTLE_LOW 0x4D0
#define QSERDES_RX_RX_IDAC_TSETTLE_HIGH 0x4D4
#define QSERDES_RX_RX_IDAC_ENDSAMP_LOW 0x4D8
#define QSERDES_RX_RX_IDAC_ENDSAMP_HIGH 0x4DC
#define QSERDES_RX_RX_IDAC_MIDPOINT_LOW 0x4E0
#define QSERDES_RX_RX_IDAC_MIDPOINT_HIGH 0x4E4
#define QSERDES_RX_RX_EQ_OFFSET_LSB 0x4E8
#define QSERDES_RX_RX_EQ_OFFSET_MSB 0x4EC
#define QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1 0x4F0
#define QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2 0x4F4
#define QSERDES_RX_SIGDET_ENABLES 0x4F8
#define QSERDES_RX_SIGDET_ENABLES_2 0x4FC
#define QSERDES_RX_SIGDET_CNTRL 0x500
#define QSERDES_RX_SIGDET_DEGLITCH_CNTRL 0x504
#define QSERDES_RX_SIGDET_TIMER_LIMIT 0x508
#define QSERDES_RX_RX_BAND 0x50C
#define QSERDES_RX_CDR_FREEZE_UP_DN 0x510
#define QSERDES_RX_RX_INTERFACE_MODE 0x514
#define QSERDES_RX_JITTER_GEN_MODE 0x518
#define QSERDES_RX_BUJ_AMP 0x51C
#define QSERDES_RX_SJ_AMP1 0x520
#define QSERDES_RX_SJ_AMP2 0x524
#define QSERDES_RX_SJ_PER1 0x528
#define QSERDES_RX_SJ_PER2 0x52C
#define QSERDES_RX_BUJ_STEP_FREQ1 0x530
#define QSERDES_RX_BUJ_STEP_FREQ2 0x534
#define QSERDES_RX_PPM_OFFSET1 0x538
#define QSERDES_RX_PPM_OFFSET2 0x53C
#define QSERDES_RX_SIGN_PPM_PERIOD1 0x540
#define QSERDES_RX_SIGN_PPM_PERIOD2 0x544
#define QSERDES_RX_SSC_CTRL 0x548
#define QSERDES_RX_SSC_COUNT1 0x54C
#define QSERDES_RX_SSC_COUNT2 0x550
#define QSERDES_RX_RX_ALOG_INTF_OBSV_CNTL 0x554
#define QSERDES_RX_PI_CTRL1 0x558
#define QSERDES_RX_PI_CTRL2 0x55C
#define QSERDES_RX_PI_QUAD 0x560
#define QSERDES_RX_IDATA1 0x564
#define QSERDES_RX_IDATA2 0x568
#define QSERDES_RX_AUX_DATA1 0x56C
#define QSERDES_RX_AUX_DATA2 0x570
#define QSERDES_RX_AC_JTAG_OUTP 0x574
#define QSERDES_RX_AC_JTAG_OUTN 0x578
#define QSERDES_RX_RX_SIGDET 0x57C
#define QSERDES_RX_RX_VDCOFF 0x580
#define QSERDES_RX_IDAC_CAL_ON 0x584
#define QSERDES_RX_IDAC_STATUS_I 0x588
#define QSERDES_RX_IDAC_STATUS_Q 0x58C
#define QSERDES_RX_IDAC_STATUS_A 0x590
#define QSERDES_RX_CALST_STATUS_I 0x594
#define QSERDES_RX_CALST_STATUS_Q 0x598
#define QSERDES_RX_CALST_STATUS_A 0x59C
#define QSERDES_RX_EOM_STATUS0 0x5A0
#define QSERDES_RX_EOM_STATUS1 0x5A4
#define QSERDES_RX_EOM_STATUS2 0x5A8
#define QSERDES_RX_EOM_STATUS3 0x5AC
#define QSERDES_RX_EOM_STATUS4 0x5B0
#define QSERDES_RX_EOM_STATUS5 0x5B4
#define QSERDES_RX_EOM_STATUS6 0x5B8
#define QSERDES_RX_EOM_STATUS7 0x5BC
#define QSERDES_RX_EOM_STATUS8 0x5C0
#define QSERDES_RX_EOM_STATUS9 0x5C4
#define QSERDES_RX_RX_ALOG_INTF_OBSV 0x5C8
#define QSERDES_RX_READ_EQCODE 0x5CC
#define QSERDES_RX_READ_OFFSETCODE 0x5D0
#define PCIE_PHY_SW_RESET 0x600
#define PCIE_PHY_POWER_DOWN_CONTROL 0x604
#define PCIE_PHY_START 0x608
#define PCIE_PHY_TXMGN_V1_V0 0x60C
#define PCIE_PHY_TXMGN_V3_V2 0x610
#define PCIE_PHY_TXMGN_LS_V4 0x614
#define PCIE_PHY_TXDEEMPH_M6DB_V0 0x618
#define PCIE_PHY_TXDEEMPH_M3P5DB_V0 0x61C
#define PCIE_PHY_TXDEEMPH_M6DB_V1 0x620
#define PCIE_PHY_TXDEEMPH_M3P5DB_V1 0x624
#define PCIE_PHY_TXDEEMPH_M6DB_V2 0x628
#define PCIE_PHY_TXDEEMPH_M3P5DB_V2 0x62C
#define PCIE_PHY_TXDEEMPH_M6DB_V3 0x630
#define PCIE_PHY_TXDEEMPH_M3P5DB_V3 0x634
#define PCIE_PHY_TXDEEMPH_M6DB_V4 0x638
#define PCIE_PHY_TXDEEMPH_M3P5DB_V4 0x63C
#define PCIE_PHY_TXDEEMPH_M6DB_LS 0x640
#define PCIE_PHY_TXDEEMPH_M3P5DB_LS 0x644
#define PCIE_PHY_ENDPOINT_REFCLK_DRIVE 0x648
#define PCIE_PHY_RX_IDLE_DTCT_CNTRL 0x64C
#define PCIE_PHY_POWER_STATE_CONFIG1 0x650
#define PCIE_PHY_POWER_STATE_CONFIG2 0x654
#define PCIE_PHY_POWER_STATE_CONFIG3 0x658
#define PCIE_PHY_RCVR_DTCT_DLY_P1U2_L 0x65C
#define PCIE_PHY_RCVR_DTCT_DLY_P1U2_H 0x660
#define PCIE_PHY_RCVR_DTCT_DLY_U3_L 0x664
#define PCIE_PHY_RCVR_DTCT_DLY_U3_H 0x668
#define PCIE_PHY_LOCK_DETECT_CONFIG1 0x66C
#define PCIE_PHY_LOCK_DETECT_CONFIG2 0x670
#define PCIE_PHY_LOCK_DETECT_CONFIG3 0x674
#define PCIE_PHY_TSYNC_RSYNC_TIME 0x678
#define PCIE_PHY_SIGDET_LOW_2_IDLE_TIME 0x67C
#define PCIE_PHY_BEACON_2_IDLE_TIME_L 0x680
#define PCIE_PHY_BEACON_2_IDLE_TIME_H 0x684
#define PCIE_PHY_PWRUP_RESET_DLY_TIME_SYSCLK 0x688
#define PCIE_PHY_PWRUP_RESET_DLY_TIME_AUXCLK 0x68C
#define PCIE_PHY_LFPS_DET_HIGH_COUNT_VAL 0x690
#define PCIE_PHY_LFPS_TX_ECSTART_EQTLOCK 0x694
#define PCIE_PHY_LFPS_TX_END_CNT_P2U3_START 0x698
#define PCIE_PHY_RXEQTRAINING_WAIT_TIME 0x69C
#define PCIE_PHY_RXEQTRAINING_RUN_TIME 0x6A0
#define PCIE_PHY_TXONESZEROS_RUN_LENGTH 0x6A4
#define PCIE_PHY_FLL_CNTRL1 0x6A8
#define PCIE_PHY_FLL_CNTRL2 0x6AC
#define PCIE_PHY_FLL_CNT_VAL_L 0x6B0
#define PCIE_PHY_FLL_CNT_VAL_H_TOL 0x6B4
#define PCIE_PHY_FLL_MAN_CODE 0x6B8
#define PCIE_PHY_AUTONOMOUS_MODE_CTRL 0x6BC
#define PCIE_PHY_LFPS_RXTERM_IRQ_CLEAR 0x6C0
#define PCIE_PHY_ARCVR_DTCT_EN_PERIOD 0x6C4
#define PCIE_PHY_ARCVR_DTCT_CM_DLY 0x6C8
#define PCIE_PHY_ALFPS_DEGLITCH_VAL 0x6CC
#define PCIE_PHY_INSIG_SW_CTRL1 0x6D0
#define PCIE_PHY_INSIG_SW_CTRL2 0x6D4
#define PCIE_PHY_INSIG_SW_CTRL3 0x6D8
#define PCIE_PHY_INSIG_MX_CTRL1 0x6DC
#define PCIE_PHY_INSIG_MX_CTRL2 0x6E0
#define PCIE_PHY_INSIG_MX_CTRL3 0x6E4
#define PCIE_PHY_TEST_CONTROL 0x6E8
#define PCIE_PHY_BIST_CTRL 0x6EC
#define PCIE_PHY_PRBS_POLY0 0x6F0
#define PCIE_PHY_PRBS_POLY1 0x6F4
#define PCIE_PHY_PRBS_SEED0 0x6F8
#define PCIE_PHY_PRBS_SEED1 0x6FC
#define PCIE_PHY_FIXED_PAT_CTRL 0x700
#define PCIE_PHY_FIXED_PAT0 0x704
#define PCIE_PHY_FIXED_PAT1 0x708
#define PCIE_PHY_FIXED_PAT2 0x70C
#define PCIE_PHY_FIXED_PAT3 0x710
#define PCIE_PHY_SPARE1 0x714
#define PCIE_PHY_BIST_CHK_ERR_CNT_L 0x718
#define PCIE_PHY_BIST_CHK_ERR_CNT_H 0x71C
#define PCIE_PHY_BIST_CHK_STATUS 0x720
#define PCIE_PHY_LFPS_RXTERM_IRQ_SOURCE 0x724
#define PCIE_PHY_PCS_STATUS 0x728
#define PCIE_PHY_PCS_STATUS2 0x72C
#define PCIE_PHY_REVISION_ID0 0x730
#define PCIE_PHY_REVISION_ID1 0x734
#define PCIE_PHY_REVISION_ID2 0x738
#define PCIE_PHY_REVISION_ID3 0x73C
#define PCIE_PHY_DEBUG_BUS_0_STATUS 0x740
#define PCIE_PHY_DEBUG_BUS_1_STATUS 0x744
#define PCIE_PHY_DEBUG_BUS_2_STATUS 0x748
#define PCIE_PHY_DEBUG_BUS_3_STATUS 0x74C
#define QSERDES_COM_ATB_SEL1 0x000
#define QSERDES_COM_ATB_SEL2 0x004
#define QSERDES_COM_FREQ_UPDATE 0x008
#define QSERDES_COM_BG_TIMER 0x00C
#define QSERDES_COM_SSC_EN_CENTER 0x010
#define QSERDES_COM_SSC_ADJ_PER1 0x014
#define QSERDES_COM_SSC_ADJ_PER2 0x018
#define QSERDES_COM_SSC_PER1 0x01C
#define QSERDES_COM_SSC_PER2 0x020
#define QSERDES_COM_SSC_STEP_SIZE1 0x024
#define QSERDES_COM_SSC_STEP_SIZE2 0x028
#define QSERDES_COM_POST_DIV 0x02C
#define QSERDES_COM_POST_DIV_MUX 0x030
#define QSERDES_COM_BIAS_EN_CLKBUFLR_EN 0x034
#define QSERDES_COM_CLK_ENABLE1 0x038
#define QSERDES_COM_SYS_CLK_CTRL 0x03C
#define QSERDES_COM_SYSCLK_BUF_ENABLE 0x040
#define QSERDES_COM_PLL_EN 0x044
#define QSERDES_COM_PLL_IVCO 0x048
#define QSERDES_COM_LOCK_CMP1_MODE0 0x04C
#define QSERDES_COM_LOCK_CMP2_MODE0 0x050
#define QSERDES_COM_LOCK_CMP3_MODE0 0x054
#define QSERDES_COM_LOCK_CMP1_MODE1 0x058
#define QSERDES_COM_LOCK_CMP2_MODE1 0x05C
#define QSERDES_COM_LOCK_CMP3_MODE1 0x060
#define QSERDES_COM_CMN_RSVD0 0x064
#define QSERDES_COM_EP_CLOCK_DETECT_CTRL 0x068
#define QSERDES_COM_SYSCLK_DET_COMP_STATUS 0x06C
#define QSERDES_COM_BG_TRIM 0x070
#define QSERDES_COM_CLK_EP_DIV 0x074
#define QSERDES_COM_CP_CTRL_MODE0 0x078
#define QSERDES_COM_CP_CTRL_MODE1 0x07C
#define QSERDES_COM_CMN_RSVD1 0x080
#define QSERDES_COM_PLL_RCTRL_MODE0 0x084
#define QSERDES_COM_PLL_RCTRL_MODE1 0x088
#define QSERDES_COM_CMN_RSVD2 0x08C
#define QSERDES_COM_PLL_CCTRL_MODE0 0x090
#define QSERDES_COM_PLL_CCTRL_MODE1 0x094
#define QSERDES_COM_CMN_RSVD3 0x098
#define QSERDES_COM_PLL_CNTRL 0x09C
#define QSERDES_COM_PHASE_SEL_CTRL 0x0A0
#define QSERDES_COM_PHASE_SEL_DC 0x0A4
#define QSERDES_COM_BIAS_EN_CTRL_BY_PSM 0x0A8
#define QSERDES_COM_SYSCLK_EN_SEL 0x0AC
#define QSERDES_COM_CML_SYSCLK_SEL 0x0B0
#define QSERDES_COM_RESETSM_CNTRL 0x0B4
#define QSERDES_COM_RESETSM_CNTRL2 0x0B8
#define QSERDES_COM_RESTRIM_CTRL 0x0BC
#define QSERDES_COM_RESTRIM_CTRL2 0x0C0
#define QSERDES_COM_RESCODE_DIV_NUM 0x0C4
#define QSERDES_COM_LOCK_CMP_EN 0x0C8
#define QSERDES_COM_LOCK_CMP_CFG 0x0CC
#define QSERDES_COM_DEC_START_MODE0 0x0D0
#define QSERDES_COM_DEC_START_MODE1 0x0D4
#define QSERDES_COM_VCOCAL_DEADMAN_CTRL 0x0D8
#define QSERDES_COM_DIV_FRAC_START1_MODE0 0x0DC
#define QSERDES_COM_DIV_FRAC_START2_MODE0 0x0E0
#define QSERDES_COM_DIV_FRAC_START3_MODE0 0x0E4
#define QSERDES_COM_DIV_FRAC_START1_MODE1 0x0E8
#define QSERDES_COM_DIV_FRAC_START2_MODE1 0x0EC
#define QSERDES_COM_DIV_FRAC_START3_MODE1 0x0F0
#define QSERDES_COM_VCO_TUNE_MINVAL1 0x0F4
#define QSERDES_COM_VCO_TUNE_MINVAL2 0x0F8
#define QSERDES_COM_CMN_RSVD4 0x0FC
#define QSERDES_COM_INTEGLOOP_INITVAL 0x100
#define QSERDES_COM_INTEGLOOP_EN 0x104
#define QSERDES_COM_INTEGLOOP_GAIN0_MODE0 0x108
#define QSERDES_COM_INTEGLOOP_GAIN1_MODE0 0x10C
#define QSERDES_COM_INTEGLOOP_GAIN0_MODE1 0x110
#define QSERDES_COM_INTEGLOOP_GAIN1_MODE1 0x114
#define QSERDES_COM_VCO_TUNE_MAXVAL1 0x118
#define QSERDES_COM_VCO_TUNE_MAXVAL2 0x11C
#define QSERDES_COM_RES_TRIM_CONTROL2 0x120
#define QSERDES_COM_VCO_TUNE_CTRL 0x124
#define QSERDES_COM_VCO_TUNE_MAP 0x128
#define QSERDES_COM_VCO_TUNE1_MODE0 0x12C
#define QSERDES_COM_VCO_TUNE2_MODE0 0x130
#define QSERDES_COM_VCO_TUNE1_MODE1 0x134
#define QSERDES_COM_VCO_TUNE2_MODE1 0x138
#define QSERDES_COM_VCO_TUNE_INITVAL1 0x13C
#define QSERDES_COM_VCO_TUNE_INITVAL2 0x140
#define QSERDES_COM_VCO_TUNE_TIMER1 0x144
#define QSERDES_COM_VCO_TUNE_TIMER2 0x148
#define QSERDES_COM_SAR 0x14C
#define QSERDES_COM_SAR_CLK 0x150
#define QSERDES_COM_SAR_CODE_OUT_STATUS 0x154
#define QSERDES_COM_SAR_CODE_READY_STATUS 0x158
#define QSERDES_COM_CMN_STATUS 0x15C
#define QSERDES_COM_RESET_SM_STATUS 0x160
#define QSERDES_COM_RESTRIM_CODE_STATUS 0x164
#define QSERDES_COM_PLLCAL_CODE1_STATUS 0x168
#define QSERDES_COM_PLLCAL_CODE2_STATUS 0x16C
#define QSERDES_COM_BG_CTRL 0x170
#define QSERDES_COM_CLK_SELECT 0x174
#define QSERDES_COM_HSCLK_SEL 0x178
#define QSERDES_COM_PLL_ANALOG 0x180
#define QSERDES_COM_CORECLK_DIV 0x184
#define QSERDES_COM_SW_RESET 0x188
#define QSERDES_COM_CORE_CLK_EN 0x18C
#define QSERDES_COM_C_READY_STATUS 0x190
#define QSERDES_COM_CMN_CONFIG 0x194
#define QSERDES_COM_CMN_RATE_OVERRIDE 0x198
#define QSERDES_COM_SVS_MODE_CLK_SEL 0x19C
#define QSERDES_COM_DEBUG_BUS0 0x1A0
#define QSERDES_COM_DEBUG_BUS1 0x1A4
#define QSERDES_COM_DEBUG_BUS2 0x1A8
#define QSERDES_COM_DEBUG_BUS3 0x1AC
#define QSERDES_COM_DEBUG_BUS_SEL 0x1B0
#define QSERDES_COM_CMN_MISC1 0x1B4
#define QSERDES_COM_CMN_MISC2 0x1B8
#define QSERDES_COM_CORECLK_DIV_MODE1 0x1BC
#define QSERDES_COM_CMN_RSVD5 0x1C0
#define QSERDES_TX_BIST_MODE_LANENO 0x200
#define QSERDES_TX_BIST_INVERT 0x204
#define QSERDES_TX_CLKBUF_ENABLE 0x208
#define QSERDES_TX_CMN_CONTROL_ONE 0x20C
#define QSERDES_TX_CMN_CONTROL_TWO 0x210
#define QSERDES_TX_CMN_CONTROL_THREE 0x214
#define QSERDES_TX_TX_EMP_POST1_LVL 0x218
#define QSERDES_TX_TX_POST2_EMPH 0x21C
#define QSERDES_TX_TX_BOOST_LVL_UP_DN 0x220
#define QSERDES_TX_HP_PD_ENABLES 0x224
#define QSERDES_TX_TX_IDLE_LVL_LARGE_AMP 0x228
#define QSERDES_TX_TX_DRV_LVL 0x22C
#define QSERDES_TX_TX_DRV_LVL_OFFSET 0x230
#define QSERDES_TX_RESET_TSYNC_EN 0x234
#define QSERDES_TX_PRE_STALL_LDO_BOOST_EN 0x238
#define QSERDES_TX_TX_BAND 0x23C
#define QSERDES_TX_SLEW_CNTL 0x240
#define QSERDES_TX_INTERFACE_SELECT 0x244
#define QSERDES_TX_LPB_EN 0x248
#define QSERDES_TX_RES_CODE_LANE_TX 0x24C
#define QSERDES_TX_RES_CODE_LANE_RX 0x250
#define QSERDES_TX_RES_CODE_LANE_OFFSET 0x254
#define QSERDES_TX_PERL_LENGTH1 0x258
#define QSERDES_TX_PERL_LENGTH2 0x25C
#define QSERDES_TX_SERDES_BYP_EN_OUT 0x260
#define QSERDES_TX_DEBUG_BUS_SEL 0x264
#define QSERDES_TX_HIGHZ_TRANSCEIVEREN_BIAS_DRVR_EN 0x268
#define QSERDES_TX_TX_POL_INV 0x26C
#define QSERDES_TX_PARRATE_REC_DETECT_IDLE_EN 0x270
#define QSERDES_TX_BIST_PATTERN1 0x274
#define QSERDES_TX_BIST_PATTERN2 0x278
#define QSERDES_TX_BIST_PATTERN3 0x27C
#define QSERDES_TX_BIST_PATTERN4 0x280
#define QSERDES_TX_BIST_PATTERN5 0x284
#define QSERDES_TX_BIST_PATTERN6 0x288
#define QSERDES_TX_BIST_PATTERN7 0x28C
#define QSERDES_TX_BIST_PATTERN8 0x290
#define QSERDES_TX_LANE_MODE 0x294
#define QSERDES_TX_IDAC_CAL_LANE_MODE 0x298
#define QSERDES_TX_IDAC_CAL_LANE_MODE_CONFIGURATION 0x29C
#define QSERDES_TX_ATB_SEL1 0x2A0
#define QSERDES_TX_ATB_SEL2 0x2A4
#define QSERDES_TX_RCV_DETECT_LVL 0x2A8
#define QSERDES_TX_RCV_DETECT_LVL_2 0x2AC
#define QSERDES_TX_PRBS_SEED1 0x2B0
#define QSERDES_TX_PRBS_SEED2 0x2B4
#define QSERDES_TX_PRBS_SEED3 0x2B8
#define QSERDES_TX_PRBS_SEED4 0x2BC
#define QSERDES_TX_RESET_GEN 0x2C0
#define QSERDES_TX_RESET_GEN_MUXES 0x2C4
#define QSERDES_TX_TRAN_DRVR_EMP_EN 0x2C8
#define QSERDES_TX_TX_INTERFACE_MODE 0x2CC
#define QSERDES_TX_PWM_CTRL 0x2D0
#define QSERDES_TX_PWM_ENCODED_OR_DATA 0x2D4
#define QSERDES_TX_PWM_GEAR_1_DIVIDER_BAND2 0x2D8
#define QSERDES_TX_PWM_GEAR_2_DIVIDER_BAND2 0x2DC
#define QSERDES_TX_PWM_GEAR_3_DIVIDER_BAND2 0x2E0
#define QSERDES_TX_PWM_GEAR_4_DIVIDER_BAND2 0x2E4
#define QSERDES_TX_PWM_GEAR_1_DIVIDER_BAND0_1 0x2E8
#define QSERDES_TX_PWM_GEAR_2_DIVIDER_BAND0_1 0x2EC
#define QSERDES_TX_PWM_GEAR_3_DIVIDER_BAND0_1 0x2F0
#define QSERDES_TX_PWM_GEAR_4_DIVIDER_BAND0_1 0x2F4
#define QSERDES_TX_VMODE_CTRL1 0x2F8
#define QSERDES_TX_VMODE_CTRL2 0x2FC
#define QSERDES_TX_TX_ALOG_INTF_OBSV_CNTL 0x300
#define QSERDES_TX_BIST_STATUS 0x304
#define QSERDES_TX_BIST_ERROR_COUNT1 0x308
#define QSERDES_TX_BIST_ERROR_COUNT2 0x30C
#define QSERDES_TX_TX_ALOG_INTF_OBSV 0x310
#define QSERDES_RX_UCDR_FO_GAIN_HALF 0x400
#define QSERDES_RX_UCDR_FO_GAIN_QUARTER 0x404
#define QSERDES_RX_UCDR_FO_GAIN_EIGHTH 0x408
#define QSERDES_RX_UCDR_FO_GAIN 0x40C
#define QSERDES_RX_UCDR_SO_GAIN_HALF 0x410
#define QSERDES_RX_UCDR_SO_GAIN_QUARTER 0x414
#define QSERDES_RX_UCDR_SO_GAIN_EIGHTH 0x418
#define QSERDES_RX_UCDR_SO_GAIN 0x41C
#define QSERDES_RX_UCDR_SVS_FO_GAIN_HALF 0x420
#define QSERDES_RX_UCDR_SVS_FO_GAIN_QUARTER 0x424
#define QSERDES_RX_UCDR_SVS_FO_GAIN_EIGHTH 0x428
#define QSERDES_RX_UCDR_SVS_FO_GAIN 0x42C
#define QSERDES_RX_UCDR_SVS_SO_GAIN_HALF 0x430
#define QSERDES_RX_UCDR_SVS_SO_GAIN_QUARTER 0x434
#define QSERDES_RX_UCDR_SVS_SO_GAIN_EIGHTH 0x438
#define QSERDES_RX_UCDR_SVS_SO_GAIN 0x43C
#define QSERDES_RX_UCDR_FASTLOCK_FO_GAIN 0x440
#define QSERDES_RX_UCDR_FD_GAIN 0x444
#define QSERDES_RX_UCDR_SO_SATURATION_AND_ENABLE 0x448
#define QSERDES_RX_UCDR_FO_TO_SO_DELAY 0x44C
#define QSERDES_RX_UCDR_FASTLOCK_COUNT_LOW 0x450
#define QSERDES_RX_UCDR_FASTLOCK_COUNT_HIGH 0x454
#define QSERDES_RX_UCDR_MODULATE 0x458
#define QSERDES_RX_UCDR_PI_CONTROLS 0x45C
#define QSERDES_RX_RBIST_CONTROL 0x460
#define QSERDES_RX_AUX_CONTROL 0x464
#define QSERDES_RX_AUX_DATA_TCOARSE 0x468
#define QSERDES_RX_AUX_DATA_TFINE_LSB 0x46C
#define QSERDES_RX_AUX_DATA_TFINE_MSB 0x470
#define QSERDES_RX_RCLK_AUXDATA_SEL 0x474
#define QSERDES_RX_AC_JTAG_ENABLE 0x478
#define QSERDES_RX_AC_JTAG_INITP 0x47C
#define QSERDES_RX_AC_JTAG_INITN 0x480
#define QSERDES_RX_AC_JTAG_LVL 0x484
#define QSERDES_RX_AC_JTAG_MODE 0x488
#define QSERDES_RX_AC_JTAG_RESET 0x48C
#define QSERDES_RX_RX_TERM_BW 0x490
#define QSERDES_RX_RX_RCVR_IQ_EN 0x494
#define QSERDES_RX_RX_IDAC_I_DC_OFFSETS 0x498
#define QSERDES_RX_RX_IDAC_IBAR_DC_OFFSETS 0x49C
#define QSERDES_RX_RX_IDAC_Q_DC_OFFSETS 0x4A0
#define QSERDES_RX_RX_IDAC_QBAR_DC_OFFSETS 0x4A4
#define QSERDES_RX_RX_IDAC_A_DC_OFFSETS 0x4A8
#define QSERDES_RX_RX_IDAC_ABAR_DC_OFFSETS 0x4AC
#define QSERDES_RX_RX_IDAC_EN 0x4B0
#define QSERDES_RX_RX_IDAC_ENABLES 0x4B4
#define QSERDES_RX_RX_IDAC_SIGN 0x4B8
#define QSERDES_RX_RX_HIGHZ_HIGHRATE 0x4BC
#define QSERDES_RX_RX_TERM_AC_BYPASS_DC_COUPLE_OFFSET 0x4C0
#define QSERDES_RX_RX_EQ_GAIN1_LSB 0x4C4
#define QSERDES_RX_RX_EQ_GAIN1_MSB 0x4C8
#define QSERDES_RX_RX_EQ_GAIN2_LSB 0x4CC
#define QSERDES_RX_RX_EQ_GAIN2_MSB 0x4D0
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL1 0x4D4
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL2 0x4D8
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL3 0x4DC
#define QSERDES_RX_RX_EQU_ADAPTOR_CNTRL4 0x4E0
#define QSERDES_RX_RX_IDAC_CAL_CONFIGURATION 0x4E4
#define QSERDES_RX_RX_IDAC_TSETTLE_LOW 0x4E8
#define QSERDES_RX_RX_IDAC_TSETTLE_HIGH 0x4EC
#define QSERDES_RX_RX_IDAC_ENDSAMP_LOW 0x4F0
#define QSERDES_RX_RX_IDAC_ENDSAMP_HIGH 0x4F4
#define QSERDES_RX_RX_IDAC_MIDPOINT_LOW 0x4F8
#define QSERDES_RX_RX_IDAC_MIDPOINT_HIGH 0x4FC
#define QSERDES_RX_RX_EQ_OFFSET_LSB 0x500
#define QSERDES_RX_RX_EQ_OFFSET_MSB 0x504
#define QSERDES_RX_RX_EQ_OFFSET_ADAPTOR_CNTRL1 0x508
#define QSERDES_RX_RX_OFFSET_ADAPTOR_CNTRL2 0x50C
#define QSERDES_RX_SIGDET_ENABLES 0x510
#define QSERDES_RX_SIGDET_CNTRL 0x514
#define QSERDES_RX_SIGDET_LVL 0x518
#define QSERDES_RX_SIGDET_DEGLITCH_CNTRL 0x51C
#define QSERDES_RX_RX_BAND 0x520
#define QSERDES_RX_CDR_FREEZE_UP_DN 0x524
#define QSERDES_RX_CDR_RESET_OVERRIDE 0x528
#define QSERDES_RX_RX_INTERFACE_MODE 0x52C
#define QSERDES_RX_JITTER_GEN_MODE 0x530
#define QSERDES_RX_BUJ_AMP 0x534
#define QSERDES_RX_SJ_AMP1 0x538
#define QSERDES_RX_SJ_AMP2 0x53C
#define QSERDES_RX_SJ_PER1 0x540
#define QSERDES_RX_SJ_PER2 0x544
#define QSERDES_RX_BUJ_STEP_FREQ1 0x548
#define QSERDES_RX_BUJ_STEP_FREQ2 0x54C
#define QSERDES_RX_PPM_OFFSET1 0x550
#define QSERDES_RX_PPM_OFFSET2 0x554
#define QSERDES_RX_SIGN_PPM_PERIOD1 0x558
#define QSERDES_RX_SIGN_PPM_PERIOD2 0x55C
#define QSERDES_RX_SSC_CTRL 0x560
#define QSERDES_RX_SSC_COUNT1 0x564
#define QSERDES_RX_SSC_COUNT2 0x568
#define QSERDES_RX_RX_ALOG_INTF_OBSV_CNTL 0x56C
#define QSERDES_RX_RX_PWM_ENABLE_AND_DATA 0x570
#define QSERDES_RX_RX_PWM_GEAR1_TIMEOUT_COUNT 0x574
#define QSERDES_RX_RX_PWM_GEAR2_TIMEOUT_COUNT 0x578
#define QSERDES_RX_RX_PWM_GEAR3_TIMEOUT_COUNT 0x57C
#define QSERDES_RX_RX_PWM_GEAR4_TIMEOUT_COUNT 0x580
#define QSERDES_RX_PI_CTRL1 0x584
#define QSERDES_RX_PI_CTRL2 0x588
#define QSERDES_RX_PI_QUAD 0x58C
#define QSERDES_RX_IDATA1 0x590
#define QSERDES_RX_IDATA2 0x594
#define QSERDES_RX_AUX_DATA1 0x598
#define QSERDES_RX_AUX_DATA2 0x59C
#define QSERDES_RX_AC_JTAG_OUTP 0x5A0
#define QSERDES_RX_AC_JTAG_OUTN 0x5A4
#define QSERDES_RX_RX_SIGDET 0x5A8
#define QSERDES_RX_RX_VDCOFF 0x5AC
#define QSERDES_RX_IDAC_CAL_ON 0x5B0
#define QSERDES_RX_IDAC_STATUS_I 0x5B4
#define QSERDES_RX_IDAC_STATUS_IBAR 0x5B8
#define QSERDES_RX_IDAC_STATUS_Q 0x5BC
#define QSERDES_RX_IDAC_STATUS_QBAR 0x5C0
#define QSERDES_RX_IDAC_STATUS_A 0x5C4
#define QSERDES_RX_IDAC_STATUS_ABAR 0x5C8
#define QSERDES_RX_CALST_STATUS_I 0x5CC
#define QSERDES_RX_CALST_STATUS_Q 0x5D0
#define QSERDES_RX_CALST_STATUS_A 0x5D4
#define QSERDES_RX_RX_ALOG_INTF_OBSV 0x5D8
#define QSERDES_RX_READ_EQCODE 0x5DC
#define QSERDES_RX_READ_OFFSETCODE 0x5E0
#define QSERDES_RX_IA_ERROR_COUNTER_LOW 0x5E4
#define QSERDES_RX_IA_ERROR_COUNTER_HIGH 0x5E8
#define PCIE_PHY_MISC_DEBUG_BUS_BYTE0_INDEX 0x600
#define PCIE_PHY_MISC_DEBUG_BUS_BYTE1_INDEX 0x604
#define PCIE_PHY_MISC_DEBUG_BUS_BYTE2_INDEX 0x608
#define PCIE_PHY_MISC_DEBUG_BUS_BYTE3_INDEX 0x60C
#define PCIE_PHY_MISC_PLACEHOLDER_STATUS 0x610
#define PCIE_PHY_MISC_DEBUG_BUS_0_STATUS 0x614
#define PCIE_PHY_MISC_DEBUG_BUS_1_STATUS 0x618
#define PCIE_PHY_MISC_DEBUG_BUS_2_STATUS 0x61C
#define PCIE_PHY_MISC_DEBUG_BUS_3_STATUS 0x620
#define PCIE_PHY_MISC_OSC_DTCT_STATUS 0x624
#define PCIE_PHY_MISC_OSC_DTCT_CONFIG1 0x628
#define PCIE_PHY_MISC_OSC_DTCT_CONFIG2 0x62C
#define PCIE_PHY_MISC_OSC_DTCT_CONFIG3 0x630
#define PCIE_PHY_MISC_OSC_DTCT_CONFIG4 0x634
#define PCIE_PHY_MISC_OSC_DTCT_CONFIG5 0x638
#define PCIE_PHY_MISC_OSC_DTCT_CONFIG6 0x63C
#define PCIE_PHY_MISC_OSC_DTCT_CONFIG7 0x640
#define PCIE_PHY_SW_RESET 0x800
#define PCIE_PHY_POWER_DOWN_CONTROL 0x804
#define PCIE_PHY_START_CONTROL 0x808
#define PCIE_PHY_TXMGN_V0 0x80C
#define PCIE_PHY_TXMGN_V1 0x810
#define PCIE_PHY_TXMGN_V2 0x814
#define PCIE_PHY_TXMGN_V3 0x818
#define PCIE_PHY_TXMGN_V4 0x81C
#define PCIE_PHY_TXMGN_LS 0x820
#define PCIE_PHY_TXDEEMPH_M6DB_V0 0x824
#define PCIE_PHY_TXDEEMPH_M3P5DB_V0 0x828
#define PCIE_PHY_TXDEEMPH_M6DB_V1 0x82C
#define PCIE_PHY_TXDEEMPH_M3P5DB_V1 0x830
#define PCIE_PHY_TXDEEMPH_M6DB_V2 0x834
#define PCIE_PHY_TXDEEMPH_M3P5DB_V2 0x838
#define PCIE_PHY_TXDEEMPH_M6DB_V3 0x83C
#define PCIE_PHY_TXDEEMPH_M3P5DB_V3 0x840
#define PCIE_PHY_TXDEEMPH_M6DB_V4 0x844
#define PCIE_PHY_TXDEEMPH_M3P5DB_V4 0x848
#define PCIE_PHY_TXDEEMPH_M6DB_LS 0x84C
#define PCIE_PHY_TXDEEMPH_M3P5DB_LS 0x850
#define PCIE_PHY_ENDPOINT_REFCLK_DRIVE 0x854
#define PCIE_PHY_RX_IDLE_DTCT_CNTRL 0x858
#define PCIE_PHY_RATE_SLEW_CNTRL 0x85C
#define PCIE_PHY_POWER_STATE_CONFIG1 0x860
#define PCIE_PHY_POWER_STATE_CONFIG2 0x864
#define PCIE_PHY_POWER_STATE_CONFIG3 0x868
#define PCIE_PHY_POWER_STATE_CONFIG4 0x86C
#define PCIE_PHY_RCVR_DTCT_DLY_P1U2_L 0x870
#define PCIE_PHY_RCVR_DTCT_DLY_P1U2_H 0x874
#define PCIE_PHY_RCVR_DTCT_DLY_U3_L 0x878
#define PCIE_PHY_RCVR_DTCT_DLY_U3_H 0x87C
#define PCIE_PHY_LOCK_DETECT_CONFIG1 0x880
#define PCIE_PHY_LOCK_DETECT_CONFIG2 0x884
#define PCIE_PHY_LOCK_DETECT_CONFIG3 0x888
#define PCIE_PHY_TSYNC_RSYNC_TIME 0x88C
#define PCIE_PHY_SIGDET_LOW_2_IDLE_TIME 0x890
#define PCIE_PHY_BEACON_2_IDLE_TIME_L 0x894
#define PCIE_PHY_BEACON_2_IDLE_TIME_H 0x898
#define PCIE_PHY_PWRUP_RESET_DLY_TIME_SYSCLK 0x89C
#define PCIE_PHY_PWRUP_RESET_DLY_TIME_AUXCLK 0x8A0
#define PCIE_PHY_LP_WAKEUP_DLY_TIME_AUXCLK 0x8A4
#define PCIE_PHY_PLL_LOCK_CHK_DLY_TIME 0x8A8
#define PCIE_PHY_LFPS_DET_HIGH_COUNT_VAL 0x8AC
#define PCIE_PHY_LFPS_TX_ECSTART_EQTLOCK 0x8B0
#define PCIE_PHY_LFPS_TX_END_CNT_P2U3_START 0x8B4
#define PCIE_PHY_RXEQTRAINING_WAIT_TIME 0x8B8
#define PCIE_PHY_RXEQTRAINING_RUN_TIME 0x8BC
#define PCIE_PHY_TXONESZEROS_RUN_LENGTH 0x8C0
#define PCIE_PHY_FLL_CNTRL1 0x8C4
#define PCIE_PHY_FLL_CNTRL2 0x8C8
#define PCIE_PHY_FLL_CNT_VAL_L 0x8CC
#define PCIE_PHY_FLL_CNT_VAL_H_TOL 0x8D0
#define PCIE_PHY_FLL_MAN_CODE 0x8D4
#define PCIE_PHY_AUTONOMOUS_MODE_CTRL 0x8D8
#define PCIE_PHY_LFPS_RXTERM_IRQ_CLEAR 0x8DC
#define PCIE_PHY_ARCVR_DTCT_EN_PERIOD 0x8E0
#define PCIE_PHY_ARCVR_DTCT_CM_DLY 0x8E4
#define PCIE_PHY_ALFPS_DEGLITCH_VAL 0x8E8
#define PCIE_PHY_INSIG_SW_CTRL1 0x8EC
#define PCIE_PHY_INSIG_SW_CTRL2 0x8F0
#define PCIE_PHY_INSIG_SW_CTRL3 0x8F4
#define PCIE_PHY_INSIG_MX_CTRL1 0x8F8
#define PCIE_PHY_INSIG_MX_CTRL2 0x8FC
#define PCIE_PHY_INSIG_MX_CTRL3 0x900
#define PCIE_PHY_OUTSIG_SW_CTRL1 0x904
#define PCIE_PHY_OUTSIG_MX_CTRL1 0x908
#define PCIE_PHY_CLK_DEBUG_BYPASS_CTRL 0x90C
#define PCIE_PHY_TEST_CONTROL 0x910
#define PCIE_PHY_TEST_CONTROL2 0x914
#define PCIE_PHY_TEST_CONTROL3 0x918
#define PCIE_PHY_TEST_CONTROL4 0x91C
#define PCIE_PHY_TEST_CONTROL5 0x920
#define PCIE_PHY_TEST_CONTROL6 0x924
#define PCIE_PHY_TEST_CONTROL7 0x928
#define PCIE_PHY_COM_RESET_CONTROL 0x92C
#define PCIE_PHY_BIST_CTRL 0x930
#define PCIE_PHY_PRBS_POLY0 0x934
#define PCIE_PHY_PRBS_POLY1 0x938
#define PCIE_PHY_PRBS_SEED0 0x93C
#define PCIE_PHY_PRBS_SEED1 0x940
#define PCIE_PHY_FIXED_PAT_CTRL 0x944
#define PCIE_PHY_FIXED_PAT0 0x948
#define PCIE_PHY_FIXED_PAT1 0x94C
#define PCIE_PHY_FIXED_PAT2 0x950
#define PCIE_PHY_FIXED_PAT3 0x954
#define PCIE_PHY_COM_CLK_SWITCH_CTRL 0x958
#define PCIE_PHY_ELECIDLE_DLY_SEL 0x95C
#define PCIE_PHY_SPARE1 0x960
#define PCIE_PHY_BIST_CHK_ERR_CNT_L_STATUS 0x964
#define PCIE_PHY_BIST_CHK_ERR_CNT_H_STATUS 0x968
#define PCIE_PHY_BIST_CHK_STATUS 0x96C
#define PCIE_PHY_LFPS_RXTERM_IRQ_SOURCE_STATUS 0x970
#define PCIE_PHY_PCS_STATUS 0x974
#define PCIE_PHY_PCS_STATUS2 0x978
#define PCIE_PHY_PCS_STATUS3 0x97C
#define PCIE_PHY_COM_RESET_STATUS 0x980
#define PCIE_PHY_OSC_DTCT_STATUS 0x984
#define PCIE_PHY_REVISION_ID0 0x988
#define PCIE_PHY_REVISION_ID1 0x98C
#define PCIE_PHY_REVISION_ID2 0x990
#define PCIE_PHY_REVISION_ID3 0x994
#define PCIE_PHY_DEBUG_BUS_0_STATUS 0x998
#define PCIE_PHY_DEBUG_BUS_1_STATUS 0x99C
#define PCIE_PHY_DEBUG_BUS_2_STATUS 0x9A0
#define PCIE_PHY_DEBUG_BUS_3_STATUS 0x9A4
#define PCIE_PHY_LP_WAKEUP_DLY_TIME_AUXCLK_MSB 0x9A8
#define PCIE_PHY_OSC_DTCT_ACTIONS 0x9AC
#define PCIE_PHY_SIGDET_CNTRL 0x9B0
#define PCIE_PHY_IDAC_CAL_CNTRL 0x9B4
#define PCIE_PHY_CMN_ACK_OUT_SEL 0x9B8
#define PCIE_PHY_PLL_LOCK_CHK_DLY_TIME_SYSCLK 0x9BC
#define PCIE_PHY_AUTONOMOUS_MODE_STATUS 0x9C0
#define PCIE_PHY_ENDPOINT_REFCLK_CNTRL 0x9C4
#define PCIE_PHY_EPCLK_PRE_PLL_LOCK_DLY_SYSCLK 0x9C8
#define PCIE_PHY_EPCLK_PRE_PLL_LOCK_DLY_AUXCLK 0x9CC
#define PCIE_PHY_EPCLK_DLY_COUNT_VAL_L 0x9D0
#define PCIE_PHY_EPCLK_DLY_COUNT_VAL_H 0x9D4
#define PCIE_PHY_RX_SIGDET_LVL 0x9D8
#define PCIE_PHY_L1SS_WAKEUP_DLY_TIME_AUXCLK_LSB 0x9DC
#define PCIE_PHY_L1SS_WAKEUP_DLY_TIME_AUXCLK_MSB 0x9E0
#define PCIE_PHY_AUTONOMOUS_MODE_CTRL2 0x9E4
#define PCIE_PHY_RXTERMINATION_DLY_SEL 0x9E8
#define PCIE_PHY_LFPS_PER_TIMER_VAL 0x9EC
#define PCIE_PHY_SIGDET_STARTUP_TIMER_VAL 0x9F0
#define PCIE_PHY_LOCK_DETECT_CONFIG4 0x9F4
#endif

View file

@ -29,6 +29,25 @@ enum ep_pcie_event {
EP_PCIE_EVENT_PM_RST_DEAST = 0x8,
EP_PCIE_EVENT_LINKDOWN = 0x10,
EP_PCIE_EVENT_LINKUP = 0x20,
EP_PCIE_EVENT_MHI_A7 = 0x40,
EP_PCIE_EVENT_MMIO_WRITE = 0x80,
};
enum ep_pcie_irq_event {
EP_PCIE_INT_EVT_LINK_DOWN = 1,
EP_PCIE_INT_EVT_BME,
EP_PCIE_INT_EVT_PM_TURNOFF,
EP_PCIE_INT_EVT_DEBUG,
EP_PCIE_INT_EVT_LTR,
EP_PCIE_INT_EVT_MHI_Q6,
EP_PCIE_INT_EVT_MHI_A7,
EP_PCIE_INT_EVT_DSTATE_CHANGE,
EP_PCIE_INT_EVT_L1SUB_TIMEOUT,
EP_PCIE_INT_EVT_MMIO_WRITE,
EP_PCIE_INT_EVT_CFG_WRITE,
EP_PCIE_INT_EVT_BRIDGE_FLUSH_N,
EP_PCIE_INT_EVT_LINK_UP,
EP_PCIE_INT_EVT_MAX = 13,
};
enum ep_pcie_trigger {
@ -97,6 +116,8 @@ struct ep_pcie_hw {
int (*disable_endpoint)(void);
int (*config_db_routing)(struct ep_pcie_db_config chdb_cfg,
struct ep_pcie_db_config erdb_cfg);
int (*mask_irq_event)(enum ep_pcie_irq_event event,
bool enable);
};
/*
@ -251,4 +272,18 @@ int ep_pcie_disable_endpoint(struct ep_pcie_hw *phandle);
int ep_pcie_config_db_routing(struct ep_pcie_hw *phandle,
struct ep_pcie_db_config chdb_cfg,
struct ep_pcie_db_config erdb_cfg);
/*
* ep_pcie_mask_irq_event - enable and disable IRQ event.
* @phandle: PCIe endpoint HW driver handle
* @event: IRQ event
* @enable: true to enable that IRQ event and false to disable
*
* This function is to enable and disable IRQ event.
*
* Return: 0 on success, negative value on error
*/
int ep_pcie_mask_irq_event(struct ep_pcie_hw *phandle,
enum ep_pcie_irq_event event,
bool enable);
#endif