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:
parent
980cf128c7
commit
a5ee9307d8
8 changed files with 836 additions and 552 deletions
|
@ -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;
|
||||
};
|
|
@ -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);
|
||||
|
|
|
@ -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;
|
||||
|
||||
|
|
|
@ -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);
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Add table
Reference in a new issue