summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYan He <yanhe@codeaurora.org>2015-10-09 18:25:28 -0700
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-22 11:16:17 -0700
commita5ee9307d8081224a73ac8191d5e3db614984ff8 (patch)
tree4f32663797c7637d6d3bca6f7e60ee18d650de8c
parent980cf128c7db5e2f6ad7f7922bfd9c7c7258958b (diff)
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>
-rw-r--r--Documentation/devicetree/bindings/pci/msm_ep_pcie.txt5
-rw-r--r--drivers/platform/msm/ep_pcie/ep_pcie.c12
-rw-r--r--drivers/platform/msm/ep_pcie/ep_pcie_com.h28
-rw-r--r--drivers/platform/msm/ep_pcie/ep_pcie_core.c281
-rw-r--r--drivers/platform/msm/ep_pcie/ep_pcie_dbg.c98
-rw-r--r--drivers/platform/msm/ep_pcie/ep_pcie_phy.c141
-rw-r--r--drivers/platform/msm/ep_pcie/ep_pcie_phy.h782
-rw-r--r--include/linux/msm_ep_pcie.h35
8 files changed, 833 insertions, 549 deletions
diff --git a/Documentation/devicetree/bindings/pci/msm_ep_pcie.txt b/Documentation/devicetree/bindings/pci/msm_ep_pcie.txt
index 1ae00121771c..a9803fa850c9 100644
--- a/Documentation/devicetree/bindings/pci/msm_ep_pcie.txt
+++ b/Documentation/devicetree/bindings/pci/msm_ep_pcie.txt
@@ -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;
}; \ No newline at end of file
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie.c b/drivers/platform/msm/ep_pcie/ep_pcie.c
index 59d9771ebdc7..b02169f8a33c 100644
--- a/drivers/platform/msm/ep_pcie/ep_pcie.c
+++ b/drivers/platform/msm/ep_pcie/ep_pcie.c
@@ -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);
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_com.h b/drivers/platform/msm/ep_pcie/ep_pcie_com.h
index 6bb268f358aa..c886dd2777dd 100644
--- a/drivers/platform/msm/ep_pcie/ep_pcie_com.h
+++ b/drivers/platform/msm/ep_pcie/ep_pcie_com.h
@@ -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;
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_core.c b/drivers/platform/msm/ep_pcie/ep_pcie_core.c
index a72b0eb4b36c..6e5923742aec 100644
--- a/drivers/platform/msm/ep_pcie/ep_pcie_core.c
+++ b/drivers/platform/msm/ep_pcie/ep_pcie_core.c
@@ -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, 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, msi->end,
+ 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);
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_dbg.c b/drivers/platform/msm/ep_pcie/ep_pcie_dbg.c
index da8dfdbdaeb5..39828882ab66 100644
--- a/drivers/platform/msm/ep_pcie/ep_pcie_dbg.c
+++ b/drivers/platform/msm/ep_pcie/ep_pcie_dbg.c
@@ -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)
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_phy.c b/drivers/platform/msm/ep_pcie/ep_pcie_phy.c
index 015617aaa1c2..633daf1860f4 100644
--- a/drivers/platform/msm/ep_pcie/ep_pcie_phy.c
+++ b/drivers/platform/msm/ep_pcie/ep_pcie_phy.c
@@ -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, 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_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,
- 0x67);
+ 0x77);
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);
+ 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);
- 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, 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, 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)
diff --git a/drivers/platform/msm/ep_pcie/ep_pcie_phy.h b/drivers/platform/msm/ep_pcie/ep_pcie_phy.h
index e0823e408f88..199e0760956a 100644
--- a/drivers/platform/msm/ep_pcie/ep_pcie_phy.h
+++ b/drivers/platform/msm/ep_pcie/ep_pcie_phy.h
@@ -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
diff --git a/include/linux/msm_ep_pcie.h b/include/linux/msm_ep_pcie.h
index 6d02bdb628bc..489020097a69 100644
--- a/include/linux/msm_ep_pcie.h
+++ b/include/linux/msm_ep_pcie.h
@@ -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