* [PATCH v3 0/2] PCI: dwc: Clean up RAS-DES and register field handling
@ 2026-11-02 9:22 Manikanta Maddireddy
2026-11-02 9:22 ` [PATCH v3 1/2] PCI: tegra194: Use FIELD_*() for register fields Manikanta Maddireddy
2026-11-02 9:22 ` [PATCH v3 2/2] PCI: dwc: Consolidate RAS-DES event counter fields Manikanta Maddireddy
0 siblings, 2 replies; 5+ messages in thread
From: Manikanta Maddireddy @ 2026-11-02 9:22 UTC (permalink / raw)
To: jingoohan1, mani, lpieralisi, kwilczynski, bhelgaas, linux-pci
Cc: robh, thierry.reding, jonathanh, vidyas, cassel, linux-kernel,
linux-tegra, mmaddireddy
This series addresses review feedback around register field handling in the
DWC PCIe code and the Tegra194 PCIe driver.
The first patch converts Tegra194 register programming to FIELD_PREP(),
FIELD_MODIFY() and FIELD_GET(). The second patch consolidates the RAS-DES
event counter register offsets, field masks and per-event enable values in
the DWC header and makes the common debugfs code use those definitions.
There should be no functional change intended beyond making the
bitfield programming explicit and keeping the shared RAS-DES definitions in
one place.
Changes in v3:
- Rebase onto PCI main at 17bb0e2f6c80.
- Reduce the series from five patches to two. Commit fd3186c0bbb1
("PCI: dwc: Describe DWC PCIe fields with full masks and FIELD_PREP()")
already supplies the full RAS-DES masks and removes the unused shift
macros. Drop the separate mask-addition, shift-removal and selector-mask
conversion patches, and use the standard selector mask directly in the
retained Tegra194 conversion patch.
- Update the common debugfs consolidation to use the upstream masks
without the temporary selector-mask alias.
- Move EVENT_COUNTER_LANE_SELECT and EVENT_COUNTER_STATUS to the shared
header as well. Move PER_EVENT_ON and PER_EVENT_OFF there and rename them
to EVENT_COUNTER_ENABLE_PER_EVENT and EVENT_COUNTER_DISABLE_PER_EVENT.
- Preserve the original debugfs line wrapping and alignment to avoid
unrelated formatting changes.
Manikanta Maddireddy (2):
PCI: tegra194: Use FIELD_*() for register fields
PCI: dwc: Consolidate RAS-DES event counter fields
.../controller/dwc/pcie-designware-debugfs.c | 40 ++---
drivers/pci/controller/dwc/pcie-designware.h | 4 +
drivers/pci/controller/dwc/pcie-tegra194.c | 137 +++++++++---------
3 files changed, 86 insertions(+), 95 deletions(-)
base-commit: 17bb0e2f6c8043f70a693a5f3797471cbed354c8
--
2.34.1
^ permalink raw reply [flat|nested] 5+ messages in thread
* [PATCH v3 1/2] PCI: tegra194: Use FIELD_*() for register fields
2026-11-02 9:22 [PATCH v3 0/2] PCI: dwc: Clean up RAS-DES and register field handling Manikanta Maddireddy
@ 2026-11-02 9:22 ` Manikanta Maddireddy
2026-11-02 9:27 ` sashiko-bot
2026-11-02 9:22 ` [PATCH v3 2/2] PCI: dwc: Consolidate RAS-DES event counter fields Manikanta Maddireddy
1 sibling, 1 reply; 5+ messages in thread
From: Manikanta Maddireddy @ 2026-11-02 9:22 UTC (permalink / raw)
To: jingoohan1, mani, lpieralisi, kwilczynski, bhelgaas, linux-pci
Cc: robh, thierry.reding, jonathanh, vidyas, cassel, linux-kernel,
linux-tegra, mmaddireddy
Several Tegra194 APPL and DesignWare register fields are programmed
with open-coded shifts, which makes the register programming more
verbose than necessary.
Use FIELD_PREP(), FIELD_MODIFY() and FIELD_GET() at the Tegra call
sites where values are shifted into fields. The LTSSM state constants
are converted from pre-shifted register values to unshifted field
values for FIELD_GET().
Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
Link: https://lore.kernel.org/r/20260515070753.3852840-2-mmaddireddy@nvidia.com
Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
---
drivers/pci/controller/dwc/pcie-tegra194.c | 137 ++++++++++-----------
1 file changed, 67 insertions(+), 70 deletions(-)
diff --git a/drivers/pci/controller/dwc/pcie-tegra194.c b/drivers/pci/controller/dwc/pcie-tegra194.c
index 26e2ac5c5869..62bbfcefe6fe 100644
--- a/drivers/pci/controller/dwc/pcie-tegra194.c
+++ b/drivers/pci/controller/dwc/pcie-tegra194.c
@@ -51,8 +51,7 @@
#define APPL_CTRL_SYS_PRE_DET_STATE BIT(6)
#define APPL_CTRL_LTSSM_EN BIT(7)
#define APPL_CTRL_HW_HOT_RST_EN BIT(20)
-#define APPL_CTRL_HW_HOT_RST_MODE_MASK GENMASK(1, 0)
-#define APPL_CTRL_HW_HOT_RST_MODE_SHIFT 22
+#define APPL_CTRL_HW_HOT_RST_MODE_MASK GENMASK(23, 22)
#define APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST 0x1
#define APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST_LTSSM_EN 0x2
@@ -137,14 +136,13 @@
#define APPL_DEBUG 0xD0
#define APPL_DEBUG_PM_LINKST_IN_L2_LAT BIT(21)
-#define APPL_DEBUG_PM_LINKST_IN_L0 0x11
#define APPL_DEBUG_LTSSM_STATE_MASK GENMASK(8, 3)
-#define APPL_DEBUG_LTSSM_STATE_SHIFT 3
-#define LTSSM_STATE_DETECT_QUIET 0x00
-#define LTSSM_STATE_DETECT_ACT 0x08
-#define LTSSM_STATE_PRE_DETECT_QUIET 0x28
-#define LTSSM_STATE_DETECT_WAIT 0x30
-#define LTSSM_STATE_L2_IDLE 0xa8
+#define LTSSM_STATE_DETECT_QUIET 0x0
+#define LTSSM_STATE_DETECT_ACT 0x1
+#define LTSSM_STATE_PRE_DETECT_QUIET 0x5
+#define LTSSM_STATE_DETECT_WAIT 0x6
+#define LTSSM_STATE_L0 0x11
+#define LTSSM_STATE_L2_IDLE 0x15
#define APPL_RADM_STATUS 0xE4
#define APPL_PM_XMT_TURNOFF_STATE BIT(0)
@@ -163,7 +161,6 @@
#define APPL_CFG_MISC 0x110
#define APPL_CFG_MISC_SLV_EP_MODE BIT(14)
#define APPL_CFG_MISC_ARCACHE_MASK GENMASK(13, 10)
-#define APPL_CFG_MISC_ARCACHE_SHIFT 10
#define APPL_CFG_MISC_ARCACHE_VAL 3
#define APPL_CFG_SLCG_OVERRIDE 0x114
@@ -179,14 +176,14 @@
#define CFG_PREF_MEM_LIMIT_BASE_MEM_LIMIT_DECODE BIT(16)
#define CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF 0x718
-#define CFG_TIMER_CTRL_ACK_NAK_SHIFT (19)
+#define CFG_TIMER_CTRL_ACK_NAK_MASK GENMASK(23, 19)
+#define CFG_TIMER_CTRL_ACK_NAK_VAL 1
#define N_FTS_VAL 52
#define FTS_VAL 52
#define PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT 0x8D0
-#define AMBA_ERROR_RESPONSE_RRS_SHIFT 3
-#define AMBA_ERROR_RESPONSE_RRS_MASK GENMASK(1, 0)
+#define AMBA_ERROR_RESPONSE_RRS_MASK GENMASK(4, 3)
#define AMBA_ERROR_RESPONSE_RRS_OKAY 0
#define AMBA_ERROR_RESPONSE_RRS_OKAY_FFFFFFFF 1
#define AMBA_ERROR_RESPONSE_RRS_OKAY_FFFF0001 2
@@ -203,7 +200,6 @@
#define CAP_SPCIE_CAP_OFF 0x154
#define CAP_SPCIE_CAP_OFF_DSP_TX_PRESET0_MASK GENMASK(3, 0)
#define CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_MASK GENMASK(11, 8)
-#define CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_SHIFT 8
#define LTSSM_DELAY_US 10000 /* 10 ms */
#define LTSSM_TIMEOUT_US 120000 /* 120 ms */
@@ -349,8 +345,8 @@ static void apply_bad_link_workaround(struct dw_pcie_rp *pp)
dev_warn(pci->dev, "PCIe link is bad, width reduced\n");
val = dw_pcie_readw_dbi(pci, pcie->pcie_cap_base +
PCI_EXP_LNKCTL2);
- val &= ~PCI_EXP_LNKCTL2_TLS;
- val |= PCI_EXP_LNKCTL2_TLS_2_5GT;
+ FIELD_MODIFY(PCI_EXP_LNKCTL2_TLS, &val,
+ PCI_EXP_LNKCTL2_TLS_2_5GT);
dw_pcie_writew_dbi(pci, pcie->pcie_cap_base +
PCI_EXP_LNKCTL2, val);
@@ -623,10 +619,9 @@ static inline u32 event_counter_prog(struct tegra_pcie_dw *pcie, u32 event)
val = dw_pcie_readl_dbi(&pcie->pci, pcie->ras_des_cap +
RAS_DES_EVENT_COUNTER_CONTROL);
- val &= ~EVENT_COUNTER_EVENT_SEL_MASK;
- val |= FIELD_PREP(EVENT_COUNTER_GROUP_SEL_MASK, EVENT_COUNTER_GROUP_5);
- val |= FIELD_PREP(EVENT_COUNTER_EVENT_SEL_MASK, event);
- val |= FIELD_PREP(EVENT_COUNTER_ENABLE_MASK, EVENT_COUNTER_ENABLE_ALL);
+ FIELD_MODIFY(EVENT_COUNTER_EVENT_SEL_MASK, &val, event);
+ FIELD_MODIFY(EVENT_COUNTER_GROUP_SEL_MASK, &val, EVENT_COUNTER_GROUP_5);
+ FIELD_MODIFY(EVENT_COUNTER_ENABLE_MASK, &val, EVENT_COUNTER_ENABLE_ALL);
dw_pcie_writel_dbi(&pcie->pci, pcie->ras_des_cap +
RAS_DES_EVENT_COUNTER_CONTROL, val);
val = dw_pcie_readl_dbi(&pcie->pci, pcie->ras_des_cap +
@@ -688,9 +683,8 @@ static void init_host_aspm(struct tegra_pcie_dw *pcie)
/* Program T_cmrt and T_pwr_on values */
val = dw_pcie_readl_dbi(pci, l1ss + PCI_L1SS_CAP);
- val &= ~(PCI_L1SS_CAP_CM_RESTORE_TIME | PCI_L1SS_CAP_P_PWR_ON_VALUE);
- val |= (pcie->aspm_cmrt << 8);
- val |= (pcie->aspm_pwr_on_t << 19);
+ FIELD_MODIFY(PCI_L1SS_CAP_CM_RESTORE_TIME, &val, pcie->aspm_cmrt);
+ FIELD_MODIFY(PCI_L1SS_CAP_P_PWR_ON_VALUE, &val, pcie->aspm_pwr_on_t);
dw_pcie_writel_dbi(pci, l1ss + PCI_L1SS_CAP, val);
if (pcie->supports_clkreq)
@@ -715,10 +709,10 @@ static void init_host_aspm(struct tegra_pcie_dw *pcie)
/* Program L0s and L1 entrance latencies */
val = dw_pcie_readl_dbi(pci, PORT_AFAC);
- val &= ~PORT_AFAC_L0S_ELM;
- val |= FIELD_PREP(PORT_AFAC_L0S_ELM, pcie->aspm_l0s_enter_lat);
- val &= ~PORT_AFAC_L1_ELM;
- val |= FIELD_PREP(PORT_AFAC_L1_ELM, pcie->aspm_l1_enter_lat);
+ FIELD_MODIFY(PORT_AFAC_L0S_ELM, &val,
+ pcie->aspm_l0s_enter_lat);
+ FIELD_MODIFY(PORT_AFAC_L1_ELM, &val,
+ pcie->aspm_l1_enter_lat);
val |= PORT_AFAC_ENTER_ASPM;
dw_pcie_writel_dbi(pci, PORT_AFAC, val);
}
@@ -852,22 +846,20 @@ static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie)
/* Program init preset */
for (i = 0; i < pcie->num_lanes; i++) {
val = dw_pcie_readw_dbi(pci, CAP_SPCIE_CAP_OFF + (i * 2));
- val &= ~CAP_SPCIE_CAP_OFF_DSP_TX_PRESET0_MASK;
- val |= GEN3_GEN4_EQ_PRESET_INIT;
- val &= ~CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_MASK;
- val |= (GEN3_GEN4_EQ_PRESET_INIT <<
- CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_SHIFT);
+ FIELD_MODIFY(CAP_SPCIE_CAP_OFF_DSP_TX_PRESET0_MASK, &val,
+ GEN3_GEN4_EQ_PRESET_INIT);
+ FIELD_MODIFY(CAP_SPCIE_CAP_OFF_USP_TX_PRESET0_MASK, &val,
+ GEN3_GEN4_EQ_PRESET_INIT);
dw_pcie_writew_dbi(pci, CAP_SPCIE_CAP_OFF + (i * 2), val);
offset = dw_pcie_find_ext_capability(pci,
PCI_EXT_CAP_ID_PL_16GT) +
PCI_PL_16GT_LE_CTRL;
val = dw_pcie_readb_dbi(pci, offset + i);
- val &= ~PCI_PL_16GT_LE_CTRL_DSP_TX_PRESET_MASK;
- val |= GEN3_GEN4_EQ_PRESET_INIT;
- val &= ~PCI_PL_16GT_LE_CTRL_USP_TX_PRESET_MASK;
- val |= (GEN3_GEN4_EQ_PRESET_INIT <<
- PCI_PL_16GT_LE_CTRL_USP_TX_PRESET_SHIFT);
+ FIELD_MODIFY(PCI_PL_16GT_LE_CTRL_DSP_TX_PRESET_MASK, &val,
+ GEN3_GEN4_EQ_PRESET_INIT);
+ FIELD_MODIFY(PCI_PL_16GT_LE_CTRL_USP_TX_PRESET_MASK, &val,
+ GEN3_GEN4_EQ_PRESET_INIT);
dw_pcie_writeb_dbi(pci, offset + i, val);
}
@@ -881,8 +873,7 @@ static void config_gen3_gen4_eq_presets(struct tegra_pcie_dw *pcie)
dw_pcie_writel_dbi(pci, GEN3_EQ_CTRL, val);
val = dw_pcie_readl_dbi(pci, GEN3_CTRL);
- val &= ~GEN3_CTRL_RATE_SHADOW_SEL_MASK;
- val |= FIELD_PREP(GEN3_CTRL_RATE_SHADOW_SEL_MASK, 0x1);
+ FIELD_MODIFY(GEN3_CTRL_RATE_SHADOW_SEL_MASK, &val, 0x1);
dw_pcie_writel_dbi(pci, GEN3_CTRL, val);
val = dw_pcie_readl_dbi(pci, GEN3_EQ_CTRL);
@@ -922,9 +913,8 @@ static int tegra_pcie_dw_host_init(struct dw_pcie_rp *pp)
/* Enable as 0xFFFF0001 response for RRS */
val = dw_pcie_readl_dbi(pci, PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT);
- val &= ~(AMBA_ERROR_RESPONSE_RRS_MASK << AMBA_ERROR_RESPONSE_RRS_SHIFT);
- val |= (AMBA_ERROR_RESPONSE_RRS_OKAY_FFFF0001 <<
- AMBA_ERROR_RESPONSE_RRS_SHIFT);
+ FIELD_MODIFY(AMBA_ERROR_RESPONSE_RRS_MASK, &val,
+ AMBA_ERROR_RESPONSE_RRS_OKAY_FFFF0001);
dw_pcie_writel_dbi(pci, PORT_LOGIC_AMBA_ERROR_RESPONSE_DEFAULT, val);
/* Clear Slot Clock Configuration bit if SRNS configuration */
@@ -948,7 +938,8 @@ static int tegra_pcie_dw_host_init(struct dw_pcie_rp *pp)
if (pcie->update_fc_fixup) {
val = dw_pcie_readl_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF);
- val |= 0x1 << CFG_TIMER_CTRL_ACK_NAK_SHIFT;
+ FIELD_MODIFY(CFG_TIMER_CTRL_ACK_NAK_MASK, &val,
+ CFG_TIMER_CTRL_ACK_NAK_VAL);
dw_pcie_writel_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF, val);
}
@@ -1003,11 +994,10 @@ static int tegra_pcie_dw_start_link(struct dw_pcie *pci)
* link up once again with DLF disabled.
*/
val = appl_readl(pcie, APPL_DEBUG);
- val &= APPL_DEBUG_LTSSM_STATE_MASK;
- val >>= APPL_DEBUG_LTSSM_STATE_SHIFT;
+ val = FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, val);
tmp = appl_readl(pcie, APPL_LINK_STATUS);
tmp &= APPL_LINK_STATUS_RDLH_LINK_UP;
- if (!(val == 0x11 && !tmp)) {
+ if (!(val == LTSSM_STATE_L0 && !tmp)) {
/* Link is down for all good reasons */
return 0;
}
@@ -1420,10 +1410,8 @@ static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie,
if (en_hw_hot_rst || pcie->of_data->has_sbr_reset_fix) {
/* Enable HW_HOT_RST mode */
val = appl_readl(pcie, APPL_CTRL);
- val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK <<
- APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
- val |= (APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST_LTSSM_EN <<
- APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
+ FIELD_MODIFY(APPL_CTRL_HW_HOT_RST_MODE_MASK, &val,
+ APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST_LTSSM_EN);
val |= APPL_CTRL_HW_HOT_RST_EN;
appl_writel(pcie, val, APPL_CTRL);
}
@@ -1447,7 +1435,8 @@ static int tegra_pcie_config_controller(struct tegra_pcie_dw *pcie,
appl_writel(pcie, val | APPL_CTRL_SYS_PRE_DET_STATE, APPL_CTRL);
val = appl_readl(pcie, APPL_CFG_MISC);
- val |= (APPL_CFG_MISC_ARCACHE_VAL << APPL_CFG_MISC_ARCACHE_SHIFT);
+ FIELD_MODIFY(APPL_CFG_MISC_ARCACHE_MASK, &val,
+ APPL_CFG_MISC_ARCACHE_VAL);
appl_writel(pcie, val, APPL_CFG_MISC);
if (pcie->enable_srns || pcie->enable_ext_refclk) {
@@ -1606,10 +1595,14 @@ static void tegra_pcie_dw_pme_turnoff(struct tegra_pcie_dw *pcie)
appl_writel(pcie, data, APPL_PINMUX);
err = readl_poll_timeout(pcie->appl_base + APPL_DEBUG, data,
- ((data & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_DETECT_QUIET) ||
- ((data & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_DETECT_ACT) ||
- ((data & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_PRE_DETECT_QUIET) ||
- ((data & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_DETECT_WAIT),
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, data) ==
+ LTSSM_STATE_DETECT_QUIET) ||
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, data) ==
+ LTSSM_STATE_DETECT_ACT) ||
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, data) ==
+ LTSSM_STATE_PRE_DETECT_QUIET) ||
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, data) ==
+ LTSSM_STATE_DETECT_WAIT),
LTSSM_DELAY_US, LTSSM_TIMEOUT_US);
if (err)
dev_info(pcie->dev, "LTSSM state: 0x%x detect timeout: %d\n", data, err);
@@ -1695,11 +1688,16 @@ static void pex_ep_event_pex_rst_assert(struct tegra_pcie_dw *pcie)
return;
ret = readl_poll_timeout(pcie->appl_base + APPL_DEBUG, val,
- ((val & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_DETECT_QUIET) ||
- ((val & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_DETECT_ACT) ||
- ((val & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_PRE_DETECT_QUIET) ||
- ((val & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_DETECT_WAIT) ||
- ((val & APPL_DEBUG_LTSSM_STATE_MASK) == LTSSM_STATE_L2_IDLE),
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, val) ==
+ LTSSM_STATE_DETECT_QUIET) ||
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, val) ==
+ LTSSM_STATE_DETECT_ACT) ||
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, val) ==
+ LTSSM_STATE_PRE_DETECT_QUIET) ||
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, val) ==
+ LTSSM_STATE_DETECT_WAIT) ||
+ (FIELD_GET(APPL_DEBUG_LTSSM_STATE_MASK, val) ==
+ LTSSM_STATE_L2_IDLE),
LTSSM_DELAY_US, LTSSM_TIMEOUT_US);
if (ret)
dev_info(pcie->dev, "LTSSM state: 0x%x detect timeout: %d\n", val, ret);
@@ -1818,13 +1816,14 @@ static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie)
val = appl_readl(pcie, APPL_CTRL);
val |= APPL_CTRL_SYS_PRE_DET_STATE;
val |= APPL_CTRL_HW_HOT_RST_EN;
- val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK << APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
- val |= (APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST_LTSSM_EN << APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
+ FIELD_MODIFY(APPL_CTRL_HW_HOT_RST_MODE_MASK, &val,
+ APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST_LTSSM_EN);
appl_writel(pcie, val, APPL_CTRL);
val = appl_readl(pcie, APPL_CFG_MISC);
val |= APPL_CFG_MISC_SLV_EP_MODE;
- val |= (APPL_CFG_MISC_ARCACHE_VAL << APPL_CFG_MISC_ARCACHE_SHIFT);
+ FIELD_MODIFY(APPL_CFG_MISC_ARCACHE_MASK, &val,
+ APPL_CFG_MISC_ARCACHE_VAL);
appl_writel(pcie, val, APPL_CFG_MISC);
val = appl_readl(pcie, APPL_PINMUX);
@@ -1876,7 +1875,8 @@ static void pex_ep_event_pex_rst_deassert(struct tegra_pcie_dw *pcie)
if (pcie->update_fc_fixup) {
val = dw_pcie_readl_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF);
- val |= 0x1 << CFG_TIMER_CTRL_ACK_NAK_SHIFT;
+ FIELD_MODIFY(CFG_TIMER_CTRL_ACK_NAK_MASK, &val,
+ CFG_TIMER_CTRL_ACK_NAK_VAL);
dw_pcie_writel_dbi(pci, CFG_TIMER_CTRL_MAX_FUNC_NUM_OFF, val);
}
@@ -2391,8 +2391,7 @@ static int tegra_pcie_dw_suspend_late(struct device *dev)
/* Enable HW_HOT_RST mode */
if (!pcie->of_data->has_sbr_reset_fix) {
val = appl_readl(pcie, APPL_CTRL);
- val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK <<
- APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
+ FIELD_MODIFY(APPL_CTRL_HW_HOT_RST_MODE_MASK, &val, 0);
val |= APPL_CTRL_HW_HOT_RST_EN;
appl_writel(pcie, val, APPL_CTRL);
}
@@ -2467,10 +2466,8 @@ static int tegra_pcie_dw_resume_early(struct device *dev)
/* Disable HW_HOT_RST mode */
if (!pcie->of_data->has_sbr_reset_fix) {
val = appl_readl(pcie, APPL_CTRL);
- val &= ~(APPL_CTRL_HW_HOT_RST_MODE_MASK <<
- APPL_CTRL_HW_HOT_RST_MODE_SHIFT);
- val |= APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST <<
- APPL_CTRL_HW_HOT_RST_MODE_SHIFT;
+ FIELD_MODIFY(APPL_CTRL_HW_HOT_RST_MODE_MASK, &val,
+ APPL_CTRL_HW_HOT_RST_MODE_IMDT_RST);
val &= ~APPL_CTRL_HW_HOT_RST_EN;
appl_writel(pcie, val, APPL_CTRL);
}
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* [PATCH v3 2/2] PCI: dwc: Consolidate RAS-DES event counter fields
2026-11-02 9:22 [PATCH v3 0/2] PCI: dwc: Clean up RAS-DES and register field handling Manikanta Maddireddy
2026-11-02 9:22 ` [PATCH v3 1/2] PCI: tegra194: Use FIELD_*() for register fields Manikanta Maddireddy
@ 2026-11-02 9:22 ` Manikanta Maddireddy
2026-11-02 9:27 ` sashiko-bot
1 sibling, 1 reply; 5+ messages in thread
From: Manikanta Maddireddy @ 2026-11-02 9:22 UTC (permalink / raw)
To: jingoohan1, mani, lpieralisi, kwilczynski, bhelgaas, linux-pci
Cc: robh, thierry.reding, jonathanh, vidyas, cassel, linux-kernel,
linux-tegra, mmaddireddy
Use the shared DesignWare RAS-DES event counter register offsets and
field masks in the common debugfs code instead of carrying duplicate
private definitions.
Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
---
.../controller/dwc/pcie-designware-debugfs.c | 40 +++++++------------
drivers/pci/controller/dwc/pcie-designware.h | 4 ++
2 files changed, 19 insertions(+), 25 deletions(-)
diff --git a/drivers/pci/controller/dwc/pcie-designware-debugfs.c b/drivers/pci/controller/dwc/pcie-designware-debugfs.c
index be0b84665c9e..eb899ed7d418 100644
--- a/drivers/pci/controller/dwc/pcie-designware-debugfs.c
+++ b/drivers/pci/controller/dwc/pcie-designware-debugfs.c
@@ -31,16 +31,6 @@
#define ERR_INJ_ENABLE_REG 0x30
-#define RAS_DES_EVENT_COUNTER_DATA_REG 0xc
-
-#define RAS_DES_EVENT_COUNTER_CTRL_REG 0x8
-#define EVENT_COUNTER_GROUP_SELECT GENMASK(27, 24)
-#define EVENT_COUNTER_EVENT_SELECT GENMASK(23, 16)
-#define EVENT_COUNTER_LANE_SELECT GENMASK(11, 8)
-#define EVENT_COUNTER_STATUS BIT(7)
-#define EVENT_COUNTER_ENABLE GENMASK(4, 2)
-#define PER_EVENT_ON 0x3
-#define PER_EVENT_OFF 0x1
#define DWC_DEBUGFS_BUF_MAX 128
@@ -356,11 +346,11 @@ static void set_event_number(struct dwc_pcie_rasdes_priv *pdata,
{
u32 val;
- val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG);
- val &= ~EVENT_COUNTER_ENABLE;
- FIELD_MODIFY(EVENT_COUNTER_GROUP_SELECT, &val, event_list[pdata->idx].group_no);
- FIELD_MODIFY(EVENT_COUNTER_EVENT_SELECT, &val, event_list[pdata->idx].event_no);
- dw_pcie_writel_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG, val);
+ val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL);
+ val &= ~EVENT_COUNTER_ENABLE_MASK;
+ FIELD_MODIFY(EVENT_COUNTER_GROUP_SEL_MASK, &val, event_list[pdata->idx].group_no);
+ FIELD_MODIFY(EVENT_COUNTER_EVENT_SEL_MASK, &val, event_list[pdata->idx].event_no);
+ dw_pcie_writel_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL, val);
}
static ssize_t counter_enable_read(struct file *file, char __user *buf,
@@ -375,7 +365,7 @@ static ssize_t counter_enable_read(struct file *file, char __user *buf,
mutex_lock(&rinfo->reg_event_lock);
set_event_number(pdata, pci, rinfo);
- val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG);
+ val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL);
mutex_unlock(&rinfo->reg_event_lock);
val = FIELD_GET(EVENT_COUNTER_STATUS, val);
if (val)
@@ -401,13 +391,13 @@ static ssize_t counter_enable_write(struct file *file, const char __user *buf,
mutex_lock(&rinfo->reg_event_lock);
set_event_number(pdata, pci, rinfo);
- val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG);
+ val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL);
if (enable)
- val |= FIELD_PREP(EVENT_COUNTER_ENABLE, PER_EVENT_ON);
+ val |= FIELD_PREP(EVENT_COUNTER_ENABLE_MASK, EVENT_COUNTER_ENABLE_PER_EVENT);
else
- val |= FIELD_PREP(EVENT_COUNTER_ENABLE, PER_EVENT_OFF);
+ val |= FIELD_PREP(EVENT_COUNTER_ENABLE_MASK, EVENT_COUNTER_DISABLE_PER_EVENT);
- dw_pcie_writel_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG, val);
+ dw_pcie_writel_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL, val);
/*
* While enabling the counter, always read the status back to check if
@@ -416,7 +406,7 @@ static ssize_t counter_enable_write(struct file *file, const char __user *buf,
*/
if (enable) {
val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset +
- RAS_DES_EVENT_COUNTER_CTRL_REG);
+ RAS_DES_EVENT_COUNTER_CONTROL);
if (!FIELD_GET(EVENT_COUNTER_STATUS, val)) {
mutex_unlock(&rinfo->reg_event_lock);
return -EOPNOTSUPP;
@@ -440,7 +430,7 @@ static ssize_t counter_lane_read(struct file *file, char __user *buf,
mutex_lock(&rinfo->reg_event_lock);
set_event_number(pdata, pci, rinfo);
- val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG);
+ val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL);
mutex_unlock(&rinfo->reg_event_lock);
val = FIELD_GET(EVENT_COUNTER_LANE_SELECT, val);
pos = scnprintf(debugfs_buf, DWC_DEBUGFS_BUF_MAX, "Lane: %d\n", val);
@@ -463,9 +453,9 @@ static ssize_t counter_lane_write(struct file *file, const char __user *buf,
mutex_lock(&rinfo->reg_event_lock);
set_event_number(pdata, pci, rinfo);
- val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG);
+ val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL);
FIELD_MODIFY(EVENT_COUNTER_LANE_SELECT, &val, lane);
- dw_pcie_writel_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CTRL_REG, val);
+ dw_pcie_writel_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_CONTROL, val);
mutex_unlock(&rinfo->reg_event_lock);
return count;
@@ -483,7 +473,7 @@ static ssize_t counter_value_read(struct file *file, char __user *buf,
mutex_lock(&rinfo->reg_event_lock);
set_event_number(pdata, pci, rinfo);
- val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_DATA_REG);
+ val = dw_pcie_readl_dbi(pci, rinfo->ras_cap_offset + RAS_DES_EVENT_COUNTER_DATA);
mutex_unlock(&rinfo->reg_event_lock);
pos = scnprintf(debugfs_buf, DWC_DEBUGFS_BUF_MAX, "Counter value: %d\n", val);
diff --git a/drivers/pci/controller/dwc/pcie-designware.h b/drivers/pci/controller/dwc/pcie-designware.h
index 6d788aa00011..09fb802174ee 100644
--- a/drivers/pci/controller/dwc/pcie-designware.h
+++ b/drivers/pci/controller/dwc/pcie-designware.h
@@ -276,7 +276,11 @@
#define RAS_DES_EVENT_COUNTER_CONTROL 0x8
#define EVENT_COUNTER_ALL_CLEAR 0x3
#define EVENT_COUNTER_ENABLE_ALL 0x7
+#define EVENT_COUNTER_ENABLE_PER_EVENT 0x3
+#define EVENT_COUNTER_DISABLE_PER_EVENT 0x1
#define EVENT_COUNTER_ENABLE_MASK GENMASK(4, 2)
+#define EVENT_COUNTER_STATUS BIT(7)
+#define EVENT_COUNTER_LANE_SELECT GENMASK(11, 8)
#define EVENT_COUNTER_EVENT_SEL_MASK GENMASK(23, 16)
#define EVENT_COUNTER_GROUP_SEL_MASK GENMASK(27, 24)
#define EVENT_COUNTER_EVENT_Tx_L0S 0x2
--
2.34.1
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v3 1/2] PCI: tegra194: Use FIELD_*() for register fields
2026-11-02 9:22 ` [PATCH v3 1/2] PCI: tegra194: Use FIELD_*() for register fields Manikanta Maddireddy
@ 2026-11-02 9:27 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-11-02 9:27 UTC (permalink / raw)
To: Manikanta Maddireddy, linux-pci
> Several Tegra194 APPL and DesignWare register fields are programmed
> with open-coded shifts, which makes the register programming more
> verbose than necessary.
>
> Use FIELD_PREP(), FIELD_MODIFY() and FIELD_GET() at the Tegra call
> sites where values are shifted into fields. The LTSSM state constants
> are converted from pre-shifted register values to unshifted field
> values for FIELD_GET().
>
> Suggested-by: Bjorn Helgaas <bhelgaas@google.com>
> Link: https://lore.kernel.org/r/20260515070753.3852840-2-mmaddireddy@nvidia.com
> Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Sashiko has reviewed this patch and found no issues.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261102092238.3917883-1-mmaddireddy@nvidia.com?part=1
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v3 2/2] PCI: dwc: Consolidate RAS-DES event counter fields
2026-11-02 9:22 ` [PATCH v3 2/2] PCI: dwc: Consolidate RAS-DES event counter fields Manikanta Maddireddy
@ 2026-11-02 9:27 ` sashiko-bot
0 siblings, 0 replies; 5+ messages in thread
From: sashiko-bot @ 2026-11-02 9:27 UTC (permalink / raw)
To: Manikanta Maddireddy, linux-pci
> Use the shared DesignWare RAS-DES event counter register offsets and
> field masks in the common debugfs code instead of carrying duplicate
> private definitions.
>
> Signed-off-by: Manikanta Maddireddy <mmaddireddy@nvidia.com>
Sashiko has reviewed this patch and found no issues.
--
Sashiko AI review · https://sashiko.dev/#/patchset/20261102092238.3917883-1-mmaddireddy@nvidia.com?part=2
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2026-11-02 9:27 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2026-11-02 9:22 [PATCH v3 0/2] PCI: dwc: Clean up RAS-DES and register field handling Manikanta Maddireddy
2026-11-02 9:22 ` [PATCH v3 1/2] PCI: tegra194: Use FIELD_*() for register fields Manikanta Maddireddy
2026-11-02 9:27 ` sashiko-bot
2026-11-02 9:22 ` [PATCH v3 2/2] PCI: dwc: Consolidate RAS-DES event counter fields Manikanta Maddireddy
2026-11-02 9:27 ` sashiko-bot
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox