* [PATCH 0/3] Provide ability to enable PSL traces on card probe
@ 2018-02-09 4:25 Vaibhav Jain
2018-02-09 4:25 ` [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays Vaibhav Jain
` (2 more replies)
0 siblings, 3 replies; 11+ messages in thread
From: Vaibhav Jain @ 2018-02-09 4:25 UTC (permalink / raw)
To: linuxppc-dev, Frederic Barrat
Cc: Vaibhav Jain, Andrew Donnellan, Christophe Lombard,
Philippe Bergheaud, Alastair D'Silva
This patch-set updates the cxl adapter probe procedure to selectively enable
PSL-traces at the end of a successful probe for a PSL9 based adapter. This would
let implementors of AFUs that use in-kernel apis to interact with the CXL
adapter get early debug data.
This feature is controlled via a new module parameter named 'enable_psltrace'
which is enabled by default. During adapter probe is this parameter is set
cxl will start PSL-traces on the adapter via PSL_TRACECFG register. The needed
sequence values written to the register was provided by the PSL h/w team.
This patch set is based on an earlier patch titled
"cxl: Remove function write_timebase_ctrl_psl9() for PSL9" available at [1].
Ref: [1] http://patchwork.ozlabs.org/patch/871199/
Vaibhav Jain (3):
cxl: Introduce various enums/defines for PSL9 trace arrays
cxl: Introduce module parameter 'enable_psltrace'
cxl: Provide implementation for sl_ops.start_psltrace on PSL9
drivers/misc/cxl/cxl.h | 31 ++++++++++++++--
drivers/misc/cxl/main.c | 4 +++
drivers/misc/cxl/native.c | 8 ++---
drivers/misc/cxl/pci.c | 91 ++++++++++++++++++++++++++++++++++++++++++-----
4 files changed, 119 insertions(+), 15 deletions(-)
--
2.14.3
^ permalink raw reply [flat|nested] 11+ messages in thread
* [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays
2018-02-09 4:25 [PATCH 0/3] Provide ability to enable PSL traces on card probe Vaibhav Jain
@ 2018-02-09 4:25 ` Vaibhav Jain
2018-02-09 13:08 ` christophe lombard
2018-02-09 4:25 ` [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace' Vaibhav Jain
2018-02-09 4:25 ` [PATCH 3/3] cxl: Provide implementation for sl_ops.start_psltrace on PSL9 Vaibhav Jain
2 siblings, 1 reply; 11+ messages in thread
From: Vaibhav Jain @ 2018-02-09 4:25 UTC (permalink / raw)
To: linuxppc-dev, Frederic Barrat
Cc: Vaibhav Jain, Andrew Donnellan, Christophe Lombard,
Philippe Bergheaud, Alastair D'Silva
We introduce a new enum named cxl_psl9_traceid that represents
individual trace-arrays available on PSL9. In addition a set of new
defines named s CXL_PSL9_TRACESTATE_XXX are introduced that represent
various states a trace-array can be in. Value of each define is the
value reported by PSL_CTCCFG register for the corresponding state of
trace-array. Also a new macro named CXL_PSL9_TRACE_STATE() is
introduced that makes it convenient to evaluate state of a trace-array
from the PSL_CTCCFG register.
The patch re-factors cxl_stop_trace_psl9() to use these new
enums/defines and renames 'cxl_service_layer_ops.debugfs_stoptrace'
function pointer to 'cxl_service_layer_ops.stop_psltrace'.
This patch shouldn't cause any behavioral changes.
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
---
drivers/misc/cxl/cxl.h | 29 ++++++++++++++++++++++++++---
drivers/misc/cxl/native.c | 8 ++++----
drivers/misc/cxl/pci.c | 15 +++++++--------
3 files changed, 37 insertions(+), 15 deletions(-)
diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
index 4f015da78f28..81da307b60c0 100644
--- a/drivers/misc/cxl/cxl.h
+++ b/drivers/misc/cxl/cxl.h
@@ -418,8 +418,31 @@ static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0};
#define CXL_CARD_MINOR(adapter) (adapter->adapter_num * CXL_DEV_MINORS)
#define CXL_DEVT_ADAPTER(dev) (MINOR(dev) / CXL_DEV_MINORS)
-#define CXL_PSL9_TRACEID_MAX 0xAU
-#define CXL_PSL9_TRACESTATE_FIN 0x3U
+/* Various trace arrays available on PSL9 */
+enum cxl_psl9_traceid {
+ CXL_PSL9_TRACEID_RX0 = 0,
+ CXL_PSL9_TRACEID_RX1, /* 1 */
+ CXL_PSL9_TRACEID_XSL, /* 2 */
+ CXL_PSL9_TRACEID_CT0, /* 3 */
+ CXL_PSL9_TRACEID_CT1, /* 4 */
+ CXL_PSL9_TRACEID_LA0, /* 5 */
+ CXL_PSL9_TRACEID_LA1, /* 6 */
+ CXL_PSL9_TRACEID_JM0, /* 7 */
+ CXL_PSL9_TRACEID_DMA0, /* 8 */
+ CXL_PSL9_TRACEID_DMA1, /* 9 */
+ CXL_PSL9_TRACEID_REOA, /* 10 */
+ CXL_PSL9_TRACEID_MAX
+};
+
+/* State of tracearray as reported in PSL9_CTCCFG */
+#define CXL_PSL9_TRACESTATE_IDLE 0x0U
+#define CXL_PSL9_TRACESTATE_INIT 0x1U
+#define CXL_PSL9_TRACESTATE_WFT 0x2U
+#define CXL_PSL9_TRACESTATE_FIN 0x3U
+
+/* Find the Trace Array state from PSL9_CTCCFG Reg */
+#define CXL_PSL9_TRACE_STATE(STATE, TRACE_ID) \
+ ((STATE) >> (62 - (TRACE_ID) * 2) & 0x3)
enum cxl_context_status {
CLOSED,
@@ -654,7 +677,7 @@ struct cxl_service_layer_ops {
void (*debugfs_add_afu_regs)(struct cxl_afu *afu, struct dentry *dir);
void (*psl_irq_dump_registers)(struct cxl_context *ctx);
void (*err_irq_dump_registers)(struct cxl *adapter);
- void (*debugfs_stop_trace)(struct cxl *adapter);
+ void (*stop_psltrace)(struct cxl *adapter);
void (*write_timebase_ctrl)(struct cxl *adapter);
u64 (*timebase_read)(struct cxl *adapter);
int capi_mode;
diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
index 1b3d7c65ea3f..bba9e1bb8b4d 100644
--- a/drivers/misc/cxl/native.c
+++ b/drivers/misc/cxl/native.c
@@ -1135,9 +1135,9 @@ static irqreturn_t native_handle_psl_slice_error(struct cxl_context *ctx,
if (ctx->afu->adapter->native->sl_ops->psl_irq_dump_registers)
ctx->afu->adapter->native->sl_ops->psl_irq_dump_registers(ctx);
- if (ctx->afu->adapter->native->sl_ops->debugfs_stop_trace) {
+ if (ctx->afu->adapter->native->sl_ops->stop_psltrace) {
dev_crit(&ctx->afu->dev, "STOPPING CXL TRACE\n");
- ctx->afu->adapter->native->sl_ops->debugfs_stop_trace(ctx->afu->adapter);
+ ctx->afu->adapter->native->sl_ops->stop_psltrace(ctx->afu->adapter);
}
return cxl_ops->ack_irq(ctx, 0, errstat);
@@ -1303,9 +1303,9 @@ static irqreturn_t native_irq_err(int irq, void *data)
err_ivte = cxl_p1_read(adapter, CXL_PSL_ErrIVTE);
dev_crit(&adapter->dev, "PSL_ErrIVTE: 0x%016llx\n", err_ivte);
- if (adapter->native->sl_ops->debugfs_stop_trace) {
+ if (adapter->native->sl_ops->stop_psltrace) {
dev_crit(&adapter->dev, "STOPPING CXL TRACE\n");
- adapter->native->sl_ops->debugfs_stop_trace(adapter);
+ adapter->native->sl_ops->stop_psltrace(adapter);
}
if (adapter->native->sl_ops->err_irq_dump_registers)
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 9bc30c20b66b..926b13973b73 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -1747,15 +1747,14 @@ static void cxl_deconfigure_adapter(struct cxl *adapter)
static void cxl_stop_trace_psl9(struct cxl *adapter)
{
int traceid;
- u64 trace_state, trace_mask;
+ u64 trace_cfg, trace_state;
struct pci_dev *dev = to_pci_dev(adapter->dev.parent);
+ trace_cfg = cxl_p1_read(adapter, CXL_PSL9_CTCCFG);
/* read each tracearray state and issue mmio to stop them is needed */
- for (traceid = 0; traceid <= CXL_PSL9_TRACEID_MAX; ++traceid) {
- trace_state = cxl_p1_read(adapter, CXL_PSL9_CTCCFG);
- trace_mask = (0x3ULL << (62 - traceid * 2));
- trace_state = (trace_state & trace_mask) >> (62 - traceid * 2);
- dev_dbg(&dev->dev, "cxl: Traceid-%d trace_state=0x%0llX\n",
+ for (traceid = 0; traceid < CXL_PSL9_TRACEID_MAX; ++traceid) {
+ trace_state = CXL_PSL9_TRACE_STATE(trace_cfg, traceid);
+ dev_dbg(&dev->dev, "Traceid-%d trace_state=0x%0llX\n",
traceid, trace_state);
/* issue mmio if the trace array isn't in FIN state */
@@ -1799,7 +1798,7 @@ static const struct cxl_service_layer_ops psl9_ops = {
.debugfs_add_afu_regs = cxl_debugfs_add_afu_regs_psl9,
.psl_irq_dump_registers = cxl_native_irq_dump_regs_psl9,
.err_irq_dump_registers = cxl_native_err_irq_dump_regs_psl9,
- .debugfs_stop_trace = cxl_stop_trace_psl9,
+ .stop_psltrace = cxl_stop_trace_psl9,
.timebase_read = timebase_read_psl9,
.capi_mode = OPAL_PHB_CAPI_MODE_CAPI,
.needs_reset_before_disable = true,
@@ -1822,7 +1821,7 @@ static const struct cxl_service_layer_ops psl8_ops = {
.debugfs_add_afu_regs = cxl_debugfs_add_afu_regs_psl8,
.psl_irq_dump_registers = cxl_native_irq_dump_regs_psl8,
.err_irq_dump_registers = cxl_native_err_irq_dump_regs_psl8,
- .debugfs_stop_trace = cxl_stop_trace_psl8,
+ .stop_psltrace = cxl_stop_trace_psl8,
.write_timebase_ctrl = write_timebase_ctrl_psl8,
.timebase_read = timebase_read_psl8,
.capi_mode = OPAL_PHB_CAPI_MODE_CAPI,
--
2.14.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace'
2018-02-09 4:25 [PATCH 0/3] Provide ability to enable PSL traces on card probe Vaibhav Jain
2018-02-09 4:25 ` [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays Vaibhav Jain
@ 2018-02-09 4:25 ` Vaibhav Jain
2018-02-09 13:14 ` christophe lombard
2018-02-09 4:25 ` [PATCH 3/3] cxl: Provide implementation for sl_ops.start_psltrace on PSL9 Vaibhav Jain
2 siblings, 1 reply; 11+ messages in thread
From: Vaibhav Jain @ 2018-02-09 4:25 UTC (permalink / raw)
To: linuxppc-dev, Frederic Barrat
Cc: Vaibhav Jain, Andrew Donnellan, Christophe Lombard,
Philippe Bergheaud, Alastair D'Silva
We introduce a new module parameter named 'enable_psltrace' which asks cxl
to start(by default) psl-traces on an adapter as soon as its probe is
finished. In case this default behavior is not needed then this
module parameter can be set to '0'.
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
---
drivers/misc/cxl/cxl.h | 2 ++
drivers/misc/cxl/main.c | 4 ++++
drivers/misc/cxl/pci.c | 3 +++
3 files changed, 9 insertions(+)
diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
index 81da307b60c0..1af66451cbb4 100644
--- a/drivers/misc/cxl/cxl.h
+++ b/drivers/misc/cxl/cxl.h
@@ -28,6 +28,7 @@
#include <uapi/misc/cxl.h>
extern uint cxl_verbose;
+extern bool cxl_enable_psltrace;
#define CXL_TIMEOUT 5
@@ -678,6 +679,7 @@ struct cxl_service_layer_ops {
void (*psl_irq_dump_registers)(struct cxl_context *ctx);
void (*err_irq_dump_registers)(struct cxl *adapter);
void (*stop_psltrace)(struct cxl *adapter);
+ void (*start_psltrace)(struct cxl *adapter);
void (*write_timebase_ctrl)(struct cxl *adapter);
u64 (*timebase_read)(struct cxl *adapter);
int capi_mode;
diff --git a/drivers/misc/cxl/main.c b/drivers/misc/cxl/main.c
index c1ba0d42cbc8..593f2cdba3d8 100644
--- a/drivers/misc/cxl/main.c
+++ b/drivers/misc/cxl/main.c
@@ -34,6 +34,10 @@ uint cxl_verbose;
module_param_named(verbose, cxl_verbose, uint, 0600);
MODULE_PARM_DESC(verbose, "Enable verbose dmesg output");
+bool cxl_enable_psltrace = true;
+module_param_named(enable_psltrace, cxl_enable_psltrace, bool, 0600);
+MODULE_PARM_DESC(enable_psltrace, "Set PSL traces on probe. default: on");
+
const struct cxl_backend_ops *cxl_ops;
int cxl_afu_slbia(struct cxl_afu *afu)
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 926b13973b73..9e8b8525534c 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -1726,6 +1726,9 @@ static int cxl_configure_adapter(struct cxl *adapter, struct pci_dev *dev)
if ((rc = cxl_native_register_psl_err_irq(adapter)))
goto err;
+ if (cxl_enable_psltrace && adapter->native->sl_ops->start_psltrace)
+ adapter->native->sl_ops->start_psltrace(adapter);
+
return 0;
err:
--
2.14.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* [PATCH 3/3] cxl: Provide implementation for sl_ops.start_psltrace on PSL9
2018-02-09 4:25 [PATCH 0/3] Provide ability to enable PSL traces on card probe Vaibhav Jain
2018-02-09 4:25 ` [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays Vaibhav Jain
2018-02-09 4:25 ` [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace' Vaibhav Jain
@ 2018-02-09 4:25 ` Vaibhav Jain
2 siblings, 0 replies; 11+ messages in thread
From: Vaibhav Jain @ 2018-02-09 4:25 UTC (permalink / raw)
To: linuxppc-dev, Frederic Barrat
Cc: Vaibhav Jain, Andrew Donnellan, Christophe Lombard,
Philippe Bergheaud, Alastair D'Silva
We introduce a new function named cxl_start_trace_psl9() that starts
the various trace-arrays available on PSL9. The implementation
configures trace-array-units(TAU) via multiple writes to the
PSL_TRACECFG register and uses the defaults (data-bus, trigger-bus &
trigger-masks) provided by the h/w team for each trace-array. These
defaults are defined in array cxl_psl_trace_mask.
The implementation takes care of not re-initializing a trace-array in
case its already in 'FIN' or 'WFT' or 'INIT' state so as to not reset
the existing trace data. After moving the individual trace-arrays to
'INIT' state we poll the PSL_CTCCFG register to ensure the all
configured TAUs to move to WFT/FIN state so that no traces/triggers
are missed.
Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
---
drivers/misc/cxl/pci.c | 73 ++++++++++++++++++++++++++++++++++++++++++++++++++
1 file changed, 73 insertions(+)
diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
index 9e8b8525534c..44b1843c5b7a 100644
--- a/drivers/misc/cxl/pci.c
+++ b/drivers/misc/cxl/pci.c
@@ -1767,6 +1767,78 @@ static void cxl_stop_trace_psl9(struct cxl *adapter)
}
}
+/* Default enable mask for various trace arrays */
+static const uint64_t cxl_psl_trace_mask[] = {
+ [CXL_PSL9_TRACEID_RX0] = 0x8200000000000000ULL,
+ [CXL_PSL9_TRACEID_RX1] = 0xAA00000000000001UL,
+ [CXL_PSL9_TRACEID_XSL] = 0x0,
+ [CXL_PSL9_TRACEID_CT0] = 0xA2B8000000000003UL,
+ [CXL_PSL9_TRACEID_CT1] = 0x0,
+ [CXL_PSL9_TRACEID_LA0] = 0x83FFC00000000005ULL,
+ [CXL_PSL9_TRACEID_LA1] = 0x83FFC00000000006ULL,
+ [CXL_PSL9_TRACEID_JM0] = 0x8200000000000007ULL,
+ [CXL_PSL9_TRACEID_DMA0] = 0x8200000000000008UL,
+ [CXL_PSL9_TRACEID_DMA1] = 0x8200000000000009UL,
+ [CXL_PSL9_TRACEID_REOA] = 0x0,
+};
+
+static void cxl_start_trace_psl9(struct cxl *adapter)
+{
+ int traceid;
+ unsigned long timeout;
+ struct pci_dev *dev = to_pci_dev(adapter->dev.parent);
+ uint64_t trace_mask, trace_cfg = cxl_p1_read(adapter, CXL_PSL9_CTCCFG);
+
+ dev_dbg(&dev->dev, "Enabling traces. PSL_CTCCFG=0x%016llx\n",
+ trace_cfg);
+
+ for (trace_mask = traceid = 0;
+ traceid < CXL_PSL9_TRACEID_MAX; ++traceid) {
+
+ if (cxl_psl_trace_mask[traceid] == 0)
+ continue;
+
+ if (CXL_PSL9_TRACE_STATE(trace_cfg, traceid) ==
+ CXL_PSL9_TRACESTATE_IDLE) {
+ dev_dbg(&dev->dev, "Traceid-%d Initializing\n",
+ traceid);
+ cxl_p1_write(adapter, CXL_PSL9_TRACECFG,
+ cxl_psl_trace_mask[traceid]);
+
+ /* filter out tlbie-response */
+ if (traceid == CXL_PSL9_TRACEID_LA0) {
+ cxl_p1_write(adapter, CXL_PSL9_TRACECFG,
+ 0x81FF400000000005ULL);
+ }
+
+ /* Mask so that we can poll for exit from INIT state */
+ trace_mask |= CXL_PSL9_TRACESTATE_WFT <<
+ (62 - traceid * 2);
+ } else {
+ dev_dbg(&dev->dev, "Traceid-%d already init.\n",
+ traceid);
+ }
+ }
+
+ /* poll until all the enabled arrays are out of INIT state */
+ timeout = jiffies + (HZ * CXL_TIMEOUT);
+ while (time_before(jiffies, timeout)) {
+ trace_cfg = cxl_p1_read(adapter, CXL_PSL9_CTCCFG);
+ if ((trace_cfg & trace_mask) == trace_mask)
+ break;
+ schedule();
+ }
+
+ if ((trace_cfg & trace_mask) != trace_mask) {
+ dev_warn(&dev->dev, "Trace init timeout."
+ "Some trace events may be missed.\n");
+ dev_dbg(&dev->dev, "cxl:CTCCFG=0x%016llx\n", trace_cfg);
+
+ } else {
+ dev_info(&dev->dev, "Traces enabled\n");
+ }
+}
+
static void cxl_stop_trace_psl8(struct cxl *adapter)
{
int slice;
@@ -1802,6 +1874,7 @@ static const struct cxl_service_layer_ops psl9_ops = {
.psl_irq_dump_registers = cxl_native_irq_dump_regs_psl9,
.err_irq_dump_registers = cxl_native_err_irq_dump_regs_psl9,
.stop_psltrace = cxl_stop_trace_psl9,
+ .start_psltrace = cxl_start_trace_psl9,
.timebase_read = timebase_read_psl9,
.capi_mode = OPAL_PHB_CAPI_MODE_CAPI,
.needs_reset_before_disable = true,
--
2.14.3
^ permalink raw reply related [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays
2018-02-09 4:25 ` [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays Vaibhav Jain
@ 2018-02-09 13:08 ` christophe lombard
2018-02-11 16:46 ` Vaibhav Jain
0 siblings, 1 reply; 11+ messages in thread
From: christophe lombard @ 2018-02-09 13:08 UTC (permalink / raw)
To: Vaibhav Jain, linuxppc-dev, Frederic Barrat
Cc: Philippe Bergheaud, Alastair D'Silva, Andrew Donnellan,
Christophe Lombard
Le 09/02/2018 à 05:25, Vaibhav Jain a écrit :
> We introduce a new enum named cxl_psl9_traceid that represents
> individual trace-arrays available on PSL9. In addition a set of new
> defines named s CXL_PSL9_TRACESTATE_XXX are introduced that represent
> various states a trace-array can be in. Value of each define is the
> value reported by PSL_CTCCFG register for the corresponding state of
> trace-array. Also a new macro named CXL_PSL9_TRACE_STATE() is
> introduced that makes it convenient to evaluate state of a trace-array
> from the PSL_CTCCFG register.
>
> The patch re-factors cxl_stop_trace_psl9() to use these new
> enums/defines and renames 'cxl_service_layer_ops.debugfs_stoptrace'
> function pointer to 'cxl_service_layer_ops.stop_psltrace'.
>
> This patch shouldn't cause any behavioral changes.
>
> Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
> ---
> drivers/misc/cxl/cxl.h | 29 ++++++++++++++++++++++++++---
> drivers/misc/cxl/native.c | 8 ++++----
> drivers/misc/cxl/pci.c | 15 +++++++--------
> 3 files changed, 37 insertions(+), 15 deletions(-)
>
> diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
> index 4f015da78f28..81da307b60c0 100644
> --- a/drivers/misc/cxl/cxl.h
> +++ b/drivers/misc/cxl/cxl.h
> @@ -418,8 +418,31 @@ static const cxl_p2n_reg_t CXL_PSL_WED_An = {0x0A0};
> #define CXL_CARD_MINOR(adapter) (adapter->adapter_num * CXL_DEV_MINORS)
> #define CXL_DEVT_ADAPTER(dev) (MINOR(dev) / CXL_DEV_MINORS)
>
> -#define CXL_PSL9_TRACEID_MAX 0xAU
> -#define CXL_PSL9_TRACESTATE_FIN 0x3U
> +/* Various trace arrays available on PSL9 */
> +enum cxl_psl9_traceid {
> + CXL_PSL9_TRACEID_RX0 = 0,
> + CXL_PSL9_TRACEID_RX1, /* 1 */
> + CXL_PSL9_TRACEID_XSL, /* 2 */
> + CXL_PSL9_TRACEID_CT0, /* 3 */
> + CXL_PSL9_TRACEID_CT1, /* 4 */
> + CXL_PSL9_TRACEID_LA0, /* 5 */
> + CXL_PSL9_TRACEID_LA1, /* 6 */
> + CXL_PSL9_TRACEID_JM0, /* 7 */
> + CXL_PSL9_TRACEID_DMA0, /* 8 */
> + CXL_PSL9_TRACEID_DMA1, /* 9 */
> + CXL_PSL9_TRACEID_REOA, /* 10 */
> + CXL_PSL9_TRACEID_MAX
> +};
> +
> +/* State of tracearray as reported in PSL9_CTCCFG */
> +#define CXL_PSL9_TRACESTATE_IDLE 0x0U
> +#define CXL_PSL9_TRACESTATE_INIT 0x1U
> +#define CXL_PSL9_TRACESTATE_WFT 0x2U
> +#define CXL_PSL9_TRACESTATE_FIN 0x3U
> +
> +/* Find the Trace Array state from PSL9_CTCCFG Reg */
> +#define CXL_PSL9_TRACE_STATE(STATE, TRACE_ID) \
> + ((STATE) >> (62 - (TRACE_ID) * 2) & 0x3)
>
> enum cxl_context_status {
> CLOSED,
> @@ -654,7 +677,7 @@ struct cxl_service_layer_ops {
> void (*debugfs_add_afu_regs)(struct cxl_afu *afu, struct dentry *dir);
> void (*psl_irq_dump_registers)(struct cxl_context *ctx);
> void (*err_irq_dump_registers)(struct cxl *adapter);
> - void (*debugfs_stop_trace)(struct cxl *adapter);
> + void (*stop_psltrace)(struct cxl *adapter);
> void (*write_timebase_ctrl)(struct cxl *adapter);
> u64 (*timebase_read)(struct cxl *adapter);
> int capi_mode;
> diff --git a/drivers/misc/cxl/native.c b/drivers/misc/cxl/native.c
> index 1b3d7c65ea3f..bba9e1bb8b4d 100644
> --- a/drivers/misc/cxl/native.c
> +++ b/drivers/misc/cxl/native.c
> @@ -1135,9 +1135,9 @@ static irqreturn_t native_handle_psl_slice_error(struct cxl_context *ctx,
> if (ctx->afu->adapter->native->sl_ops->psl_irq_dump_registers)
> ctx->afu->adapter->native->sl_ops->psl_irq_dump_registers(ctx);
>
> - if (ctx->afu->adapter->native->sl_ops->debugfs_stop_trace) {
> + if (ctx->afu->adapter->native->sl_ops->stop_psltrace) {
> dev_crit(&ctx->afu->dev, "STOPPING CXL TRACE\n");
> - ctx->afu->adapter->native->sl_ops->debugfs_stop_trace(ctx->afu->adapter);
> + ctx->afu->adapter->native->sl_ops->stop_psltrace(ctx->afu->adapter);
> }
>
> return cxl_ops->ack_irq(ctx, 0, errstat);
> @@ -1303,9 +1303,9 @@ static irqreturn_t native_irq_err(int irq, void *data)
> err_ivte = cxl_p1_read(adapter, CXL_PSL_ErrIVTE);
> dev_crit(&adapter->dev, "PSL_ErrIVTE: 0x%016llx\n", err_ivte);
>
> - if (adapter->native->sl_ops->debugfs_stop_trace) {
> + if (adapter->native->sl_ops->stop_psltrace) {
> dev_crit(&adapter->dev, "STOPPING CXL TRACE\n");
> - adapter->native->sl_ops->debugfs_stop_trace(adapter);
> + adapter->native->sl_ops->stop_psltrace(adapter);
> }
>
> if (adapter->native->sl_ops->err_irq_dump_registers)
> diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
> index 9bc30c20b66b..926b13973b73 100644
> --- a/drivers/misc/cxl/pci.c
> +++ b/drivers/misc/cxl/pci.c
> @@ -1747,15 +1747,14 @@ static void cxl_deconfigure_adapter(struct cxl *adapter)
> static void cxl_stop_trace_psl9(struct cxl *adapter)
> {
> int traceid;
> - u64 trace_state, trace_mask;
> + u64 trace_cfg, trace_state;
> struct pci_dev *dev = to_pci_dev(adapter->dev.parent);
>
> + trace_cfg = cxl_p1_read(adapter, CXL_PSL9_CTCCFG);
> /* read each tracearray state and issue mmio to stop them is needed */
> - for (traceid = 0; traceid <= CXL_PSL9_TRACEID_MAX; ++traceid) {
> - trace_state = cxl_p1_read(adapter, CXL_PSL9_CTCCFG);
> - trace_mask = (0x3ULL << (62 - traceid * 2));
> - trace_state = (trace_state & trace_mask) >> (62 - traceid * 2);
> - dev_dbg(&dev->dev, "cxl: Traceid-%d trace_state=0x%0llX\n",
> + for (traceid = 0; traceid < CXL_PSL9_TRACEID_MAX; ++traceid) {
> + trace_state = CXL_PSL9_TRACE_STATE(trace_cfg, traceid);
> + dev_dbg(&dev->dev, "Traceid-%d trace_state=0x%0llX\n",
> traceid, trace_state);
>
any reason to use dev_dbg instead of pr_devel ?
> /* issue mmio if the trace array isn't in FIN state */
> @@ -1799,7 +1798,7 @@ static const struct cxl_service_layer_ops psl9_ops = {
> .debugfs_add_afu_regs = cxl_debugfs_add_afu_regs_psl9,
> .psl_irq_dump_registers = cxl_native_irq_dump_regs_psl9,
> .err_irq_dump_registers = cxl_native_err_irq_dump_regs_psl9,
> - .debugfs_stop_trace = cxl_stop_trace_psl9,
> + .stop_psltrace = cxl_stop_trace_psl9,
> .timebase_read = timebase_read_psl9,
> .capi_mode = OPAL_PHB_CAPI_MODE_CAPI,
> .needs_reset_before_disable = true,
> @@ -1822,7 +1821,7 @@ static const struct cxl_service_layer_ops psl8_ops = {
> .debugfs_add_afu_regs = cxl_debugfs_add_afu_regs_psl8,
> .psl_irq_dump_registers = cxl_native_irq_dump_regs_psl8,
> .err_irq_dump_registers = cxl_native_err_irq_dump_regs_psl8,
> - .debugfs_stop_trace = cxl_stop_trace_psl8,
> + .stop_psltrace = cxl_stop_trace_psl8,
> .write_timebase_ctrl = write_timebase_ctrl_psl8,
> .timebase_read = timebase_read_psl8,
> .capi_mode = OPAL_PHB_CAPI_MODE_CAPI,
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace'
2018-02-09 4:25 ` [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace' Vaibhav Jain
@ 2018-02-09 13:14 ` christophe lombard
2018-02-11 17:10 ` Vaibhav Jain
0 siblings, 1 reply; 11+ messages in thread
From: christophe lombard @ 2018-02-09 13:14 UTC (permalink / raw)
To: Vaibhav Jain, linuxppc-dev, Frederic Barrat
Cc: Philippe Bergheaud, Alastair D'Silva, Andrew Donnellan,
Christophe Lombard
Le 09/02/2018 à 05:25, Vaibhav Jain a écrit :
> We introduce a new module parameter named 'enable_psltrace' which asks cxl
> to start(by default) psl-traces on an adapter as soon as its probe is
> finished. In case this default behavior is not needed then this
> module parameter can be set to '0'.
>
> Signed-off-by: Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
> ---
> drivers/misc/cxl/cxl.h | 2 ++
> drivers/misc/cxl/main.c | 4 ++++
> drivers/misc/cxl/pci.c | 3 +++
> 3 files changed, 9 insertions(+)
>
> diff --git a/drivers/misc/cxl/cxl.h b/drivers/misc/cxl/cxl.h
> index 81da307b60c0..1af66451cbb4 100644
> --- a/drivers/misc/cxl/cxl.h
> +++ b/drivers/misc/cxl/cxl.h
> @@ -28,6 +28,7 @@
> #include <uapi/misc/cxl.h>
>
> extern uint cxl_verbose;
> +extern bool cxl_enable_psltrace;
>
> #define CXL_TIMEOUT 5
>
> @@ -678,6 +679,7 @@ struct cxl_service_layer_ops {
> void (*psl_irq_dump_registers)(struct cxl_context *ctx);
> void (*err_irq_dump_registers)(struct cxl *adapter);
> void (*stop_psltrace)(struct cxl *adapter);
> + void (*start_psltrace)(struct cxl *adapter);
> void (*write_timebase_ctrl)(struct cxl *adapter);
> u64 (*timebase_read)(struct cxl *adapter);
> int capi_mode;
> diff --git a/drivers/misc/cxl/main.c b/drivers/misc/cxl/main.c
> index c1ba0d42cbc8..593f2cdba3d8 100644
> --- a/drivers/misc/cxl/main.c
> +++ b/drivers/misc/cxl/main.c
> @@ -34,6 +34,10 @@ uint cxl_verbose;
> module_param_named(verbose, cxl_verbose, uint, 0600);
> MODULE_PARM_DESC(verbose, "Enable verbose dmesg output");
>
> +bool cxl_enable_psltrace = true;
> +module_param_named(enable_psltrace, cxl_enable_psltrace, bool, 0600);
> +MODULE_PARM_DESC(enable_psltrace, "Set PSL traces on probe. default: on");
> +
I am not too agree to add a new parameter. This can cause doubts.
PSL team has confirmed that enabling traces has no impact.
Do you see any reason to disable the traces ?
> const struct cxl_backend_ops *cxl_ops;
>
> int cxl_afu_slbia(struct cxl_afu *afu)
> diff --git a/drivers/misc/cxl/pci.c b/drivers/misc/cxl/pci.c
> index 926b13973b73..9e8b8525534c 100644
> --- a/drivers/misc/cxl/pci.c
> +++ b/drivers/misc/cxl/pci.c
> @@ -1726,6 +1726,9 @@ static int cxl_configure_adapter(struct cxl *adapter, struct pci_dev *dev)
> if ((rc = cxl_native_register_psl_err_irq(adapter)))
> goto err;
>
> + if (cxl_enable_psltrace && adapter->native->sl_ops->start_psltrace)
> + adapter->native->sl_ops->start_psltrace(adapter);
> +
> return 0;
>
> err:
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays
2018-02-09 13:08 ` christophe lombard
@ 2018-02-11 16:46 ` Vaibhav Jain
0 siblings, 0 replies; 11+ messages in thread
From: Vaibhav Jain @ 2018-02-11 16:46 UTC (permalink / raw)
To: christophe lombard, linuxppc-dev, Frederic Barrat
Cc: Philippe Bergheaud, Alastair D'Silva, Andrew Donnellan,
Christophe Lombard
Thanks for reviewing the patch Christophe,
christophe lombard <clombard@linux.vnet.ibm.com> writes:
>> + for (traceid = 0; traceid < CXL_PSL9_TRACEID_MAX; ++traceid) {
>> + trace_state = CXL_PSL9_TRACE_STATE(trace_cfg, traceid);
>> + dev_dbg(&dev->dev, "Traceid-%d trace_state=0x%0llX\n",
>> traceid, trace_state);
>>
> any reason to use dev_dbg instead of pr_devel ?
Wanted to distinguish among multiple cxl cards in the system.
--
Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Linux Technology Center, IBM India Pvt. Ltd.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace'
2018-02-09 13:14 ` christophe lombard
@ 2018-02-11 17:10 ` Vaibhav Jain
2018-02-12 10:46 ` christophe lombard
2018-02-12 13:54 ` Frederic Barrat
0 siblings, 2 replies; 11+ messages in thread
From: Vaibhav Jain @ 2018-02-11 17:10 UTC (permalink / raw)
To: christophe lombard, linuxppc-dev, Frederic Barrat
Cc: Philippe Bergheaud, Alastair D'Silva, Christophe Lombard,
Andrew Donnellan
Thanks for reviewing the patch Christophe,
christophe lombard <clombard@linux.vnet.ibm.com> writes:
>> +bool cxl_enable_psltrace = true;
>> +module_param_named(enable_psltrace, cxl_enable_psltrace, bool, 0600);
>> +MODULE_PARM_DESC(enable_psltrace, "Set PSL traces on probe. default: on");
>> +
> I am not too agree to add a new parameter. This can cause doubts.
> PSL team has confirmed that enabling traces has no impact.
> Do you see any reason to disable the traces ?
Traces on PSL follow a 'set and fetch' model. So once the trace buffer for
a specific array is full it will stop and switch to 'FIN' state and at
that point we need to fetch the trace-data and reinit the array to
re-arm it.
There might be some circumstances where this model may lead to confusion
specifically when AFU developers assume that the trace arrays are
already armed and dont re-arm it causing miss of trace data.
So this module param is a compromise to keep the old behaviour of traces
array intact where in the arming/disarming of the trace arrays is
controlled completely by userspace tooling and not by cxl.
--
Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Linux Technology Center, IBM India Pvt. Ltd.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace'
2018-02-11 17:10 ` Vaibhav Jain
@ 2018-02-12 10:46 ` christophe lombard
2018-02-12 13:54 ` Frederic Barrat
1 sibling, 0 replies; 11+ messages in thread
From: christophe lombard @ 2018-02-12 10:46 UTC (permalink / raw)
To: Vaibhav Jain, linuxppc-dev, Frederic Barrat
Cc: Philippe Bergheaud, Alastair D'Silva, Christophe Lombard,
Andrew Donnellan
Le 11/02/2018 à 18:10, Vaibhav Jain a écrit :
> Thanks for reviewing the patch Christophe,
>
> christophe lombard <clombard@linux.vnet.ibm.com> writes:
>>> +bool cxl_enable_psltrace = true;
>>> +module_param_named(enable_psltrace, cxl_enable_psltrace, bool, 0600);
>>> +MODULE_PARM_DESC(enable_psltrace, "Set PSL traces on probe. default: on");
>>> +
>> I am not too agree to add a new parameter. This can cause doubts.
>> PSL team has confirmed that enabling traces has no impact.
>> Do you see any reason to disable the traces ?
>
> Traces on PSL follow a 'set and fetch' model. So once the trace buffer for
> a specific array is full it will stop and switch to 'FIN' state and at
> that point we need to fetch the trace-data and reinit the array to
> re-arm it.
>
> There might be some circumstances where this model may lead to confusion
> specifically when AFU developers assume that the trace arrays are
> already armed and dont re-arm it causing miss of trace data.
>
> So this module param is a compromise to keep the old behaviour of traces
> array intact where in the arming/disarming of the trace arrays is
> controlled completely by userspace tooling and not by cxl.
>
and about P8 ? This new parameter is only useful for P9. It will be
confusing.
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace'
2018-02-11 17:10 ` Vaibhav Jain
2018-02-12 10:46 ` christophe lombard
@ 2018-02-12 13:54 ` Frederic Barrat
2018-02-13 11:07 ` Vaibhav Jain
1 sibling, 1 reply; 11+ messages in thread
From: Frederic Barrat @ 2018-02-12 13:54 UTC (permalink / raw)
To: Vaibhav Jain, christophe lombard, linuxppc-dev
Cc: Philippe Bergheaud, Alastair D'Silva, Christophe Lombard,
Andrew Donnellan
Le 11/02/2018 à 18:10, Vaibhav Jain a écrit :
> Thanks for reviewing the patch Christophe,
>
> christophe lombard <clombard@linux.vnet.ibm.com> writes:
>>> +bool cxl_enable_psltrace = true;
>>> +module_param_named(enable_psltrace, cxl_enable_psltrace, bool, 0600);
>>> +MODULE_PARM_DESC(enable_psltrace, "Set PSL traces on probe. default: on");
>>> +
>> I am not too agree to add a new parameter. This can cause doubts.
>> PSL team has confirmed that enabling traces has no impact.
>> Do you see any reason to disable the traces ?
>
> Traces on PSL follow a 'set and fetch' model. So once the trace buffer for
> a specific array is full it will stop and switch to 'FIN' state and at
> that point we need to fetch the trace-data and reinit the array to
> re-arm it.
If the PSL trace arrays don't wrap, is there anything to gain by
enabling tracing by default instead of letting the developer handle it
through sysfs? I was under the (now wrong) impression that the PSL would
wrap.
I'm not a big fan of the module parameter. It seems we're giving a
second way of activating traces on top of sysfs, more cumbersome and
limited.
Fred
> There might be some circumstances where this model may lead to confusion
> specifically when AFU developers assume that the trace arrays are
> already armed and dont re-arm it causing miss of trace data.
>
> So this module param is a compromise to keep the old behaviour of traces
> array intact where in the arming/disarming of the trace arrays is
> controlled completely by userspace tooling and not by cxl.
>
^ permalink raw reply [flat|nested] 11+ messages in thread
* Re: [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace'
2018-02-12 13:54 ` Frederic Barrat
@ 2018-02-13 11:07 ` Vaibhav Jain
0 siblings, 0 replies; 11+ messages in thread
From: Vaibhav Jain @ 2018-02-13 11:07 UTC (permalink / raw)
To: Frederic Barrat, christophe lombard, linuxppc-dev
Cc: Philippe Bergheaud, Alastair D'Silva, Christophe Lombard,
Andrew Donnellan
Frederic Barrat <fbarrat@linux.vnet.ibm.com> writes:
> Le 11/02/2018 =C3=A0 18:10, Vaibhav Jain a =C3=A9crit=C2=A0:
>> Thanks for reviewing the patch Christophe,
>>=20
>> christophe lombard <clombard@linux.vnet.ibm.com> writes:
>>>> +bool cxl_enable_psltrace =3D true;
>>>> +module_param_named(enable_psltrace, cxl_enable_psltrace, bool, 0600);
>>>> +MODULE_PARM_DESC(enable_psltrace, "Set PSL traces on probe. default: =
on");
>>>> +
>>> I am not too agree to add a new parameter. This can cause doubts.
>>> PSL team has confirmed that enabling traces has no impact.
>>> Do you see any reason to disable the traces ?
>>=20
>> Traces on PSL follow a 'set and fetch' model. So once the trace buffer f=
or
>> a specific array is full it will stop and switch to 'FIN' state and at
>> that point we need to fetch the trace-data and reinit the array to
>> re-arm it.
>
> If the PSL trace arrays don't wrap, is there anything to gain by=20
> enabling tracing by default instead of letting the developer handle it=20
> through sysfs? I was under the (now wrong) impression that the PSL would=
=20
> wrap.
Enabling the traces quickly enough should let AFU developers debug init
issues. Specifically AFU's that rely on cxl kernel-apis.
> I'm not a big fan of the module parameter. It seems we're giving a=20
> second way of activating traces on top of sysfs, more cumbersome and=20
> limited.
Yes, this indeed is providing a second way of activating traces on top
of sysfs. The way I see this that there are two ways PSL traces are
managed:
1. Let userspace handle state machine of the traces entirely via sysfs.
2. PSL trace machine is handled via cxl. It starts it when a card is
probed and stops it when the card is reset.
--=20
Vaibhav Jain <vaibhav@linux.vnet.ibm.com>
Linux Technology Center, IBM India Pvt. Ltd.
^ permalink raw reply [flat|nested] 11+ messages in thread
end of thread, other threads:[~2018-02-13 11:07 UTC | newest]
Thread overview: 11+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2018-02-09 4:25 [PATCH 0/3] Provide ability to enable PSL traces on card probe Vaibhav Jain
2018-02-09 4:25 ` [PATCH 1/3] cxl: Introduce various enums/defines for PSL9 trace arrays Vaibhav Jain
2018-02-09 13:08 ` christophe lombard
2018-02-11 16:46 ` Vaibhav Jain
2018-02-09 4:25 ` [PATCH 2/3] cxl: Introduce module parameter 'enable_psltrace' Vaibhav Jain
2018-02-09 13:14 ` christophe lombard
2018-02-11 17:10 ` Vaibhav Jain
2018-02-12 10:46 ` christophe lombard
2018-02-12 13:54 ` Frederic Barrat
2018-02-13 11:07 ` Vaibhav Jain
2018-02-09 4:25 ` [PATCH 3/3] cxl: Provide implementation for sl_ops.start_psltrace on PSL9 Vaibhav Jain
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).