* [PATCH v1 0/2] soundwire: qcom: add support for EE-aware register layout @ 2026-06-08 17:53 Mohammad Rafi Shaik 2026-06-08 17:53 ` [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property Mohammad Rafi Shaik 2026-06-08 17:53 ` [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection Mohammad Rafi Shaik 0 siblings, 2 replies; 7+ messages in thread From: Mohammad Rafi Shaik @ 2026-06-08 17:53 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Srinivas Kandagatla, Vinod Koul, Bard Liao, Rao Mandadapu Cc: Pierre-Louis Bossart, linux-arm-msm, devicetree, linux-kernel, linux-sound This series adds support for execution environment (EE) aware register layouts in the Qualcomm SoundWire master controller driver. On SoundWire v2.0+ hardware, some controllers bank the interrupt, FIFO, and status registers in EE-specific windows separated by a stride of 0x1000. Typically, the driver assumes EE1, but platforms like Shikra have the controller routed on EE0. To support platforms with varying EEs, we: 1. Introduce the `qcom,swr-master-ee-val` DT property to configure the target execution environment. 2. Add remapping logic to adjust the register layout offsets by the EE window stride on v2.0+ hardware. The first patch adds DT binding documentation for the new property, and the second implements the EE-aware layout selection in the soundwire driver. Mohammad Rafi Shaik (2): dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property soundwire: qcom: add EE-aware register layout and cpu selection .../bindings/soundwire/qcom,soundwire.yaml | 6 ++ drivers/soundwire/qcom.c | 78 +++++++++++++++---- 2 files changed, 71 insertions(+), 13 deletions(-) -- 2.34.1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property 2026-06-08 17:53 [PATCH v1 0/2] soundwire: qcom: add support for EE-aware register layout Mohammad Rafi Shaik @ 2026-06-08 17:53 ` Mohammad Rafi Shaik 2026-06-08 18:01 ` sashiko-bot 2026-06-08 19:46 ` Krzysztof Kozlowski 2026-06-08 17:53 ` [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection Mohammad Rafi Shaik 1 sibling, 2 replies; 7+ messages in thread From: Mohammad Rafi Shaik @ 2026-06-08 17:53 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Srinivas Kandagatla, Vinod Koul, Bard Liao, Rao Mandadapu Cc: Pierre-Louis Bossart, linux-arm-msm, devicetree, linux-kernel, linux-sound Add documentation for the qcom,swr-master-ee-val Device Tree property used by Qualcomm SoundWire masters to describe the execution-environment value for interrupt routing. This property allows platform DTs to specify the EE value used to direct SoundWire master interrupts to the appropriate CPU target. Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com> --- .../devicetree/bindings/soundwire/qcom,soundwire.yaml | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml index 9447a2f37..5b06cc1a5 100644 --- a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml +++ b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml @@ -215,6 +215,12 @@ properties: maximum: 4 - const: 0xff + qcom,swr-master-ee-val: + $ref: /schemas/types.yaml#/definitions/uint8-array + description: + Execution-environment value used to route SoundWire master + interrupts to CPU0 or CPU1. + label: maxItems: 1 -- 2.34.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property 2026-06-08 17:53 ` [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property Mohammad Rafi Shaik @ 2026-06-08 18:01 ` sashiko-bot 2026-06-08 19:46 ` Krzysztof Kozlowski 1 sibling, 0 replies; 7+ messages in thread From: sashiko-bot @ 2026-06-08 18:01 UTC (permalink / raw) To: Mohammad Rafi Shaik; +Cc: robh, conor+dt, devicetree Thank you for your contribution! Sashiko AI review found 1 potential issue(s) to consider: - [Medium] Type mismatch for `qcom,swr-master-ee-val` between DT schema and driver implementation. -- commit 7965a5220d8aca5065e58f8f961b8e06d1246a70 Author: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com> dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property This commit adds documentation for the qcom,swr-master-ee-val Device Tree property used by Qualcomm SoundWire masters to describe the execution environment value for interrupt routing. > diff --git a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml > index 9447a2f371b56..5b06cc1a5f781 100644 > --- a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml > +++ b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml > @@ -215,6 +215,12 @@ properties: > maximum: 4 > - const: 0xff > > + qcom,swr-master-ee-val: > + $ref: /schemas/types.yaml#/definitions/uint8-array [Severity: Medium] Should this property be defined as a uint32 type rather than a uint8-array? In the qcom SoundWire driver, this property is read using of_property_read_u32(): drivers/soundwire/qcom.c:qcom_swrm_probe() { ... ret = of_property_read_u32(dev->of_node, "qcom,swr-master-ee-val", &ctrl->ee); ... } If a device tree strictly follows the schema and specifies a byte array such as /bits/ 8 <1>;, will the driver fail to parse it with of_property_read_u32() due to the length being less than 4 bytes? This might cause the driver to silently ignore the property and fall back to incorrect execution environment defaults, potentially breaking SoundWire functionality. Conversely, if a device tree specifies a 32-bit integer like <1> to work at runtime, won't it fail dtbs_check validation? > + description: > + Execution-environment value used to route SoundWire master > + interrupts to CPU0 or CPU1. > + > label: > maxItems: 1 -- Sashiko AI review · https://sashiko.dev/#/patchset/20260608175345.3118060-1-mohammad.rafi.shaik@oss.qualcomm.com?part=1 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property 2026-06-08 17:53 ` [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property Mohammad Rafi Shaik 2026-06-08 18:01 ` sashiko-bot @ 2026-06-08 19:46 ` Krzysztof Kozlowski 1 sibling, 0 replies; 7+ messages in thread From: Krzysztof Kozlowski @ 2026-06-08 19:46 UTC (permalink / raw) To: Mohammad Rafi Shaik, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Srinivas Kandagatla, Vinod Koul, Bard Liao, Rao Mandadapu Cc: Pierre-Louis Bossart, linux-arm-msm, devicetree, linux-kernel, linux-sound On 08/06/2026 19:53, Mohammad Rafi Shaik wrote: > Add documentation for the qcom,swr-master-ee-val Device Tree property > used by Qualcomm SoundWire masters to describe the execution-environment > value for interrupt routing. > > This property allows platform DTs to specify the EE value used to direct Please describe more what this EE value is for. > SoundWire master interrupts to the appropriate CPU target. Interrupt affinity defines where the interrupts are routed. Not custom properties. > > Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com> > --- > .../devicetree/bindings/soundwire/qcom,soundwire.yaml | 6 ++++++ > 1 file changed, 6 insertions(+) > > diff --git a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml > index 9447a2f37..5b06cc1a5 100644 > --- a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml > +++ b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml > @@ -215,6 +215,12 @@ properties: > maximum: 4 > - const: 0xff > > + qcom,swr-master-ee-val: Aren't there existing properties for execution context? I think Qualcomm has something, so you should not come with a new property. Assuming this stays in the first place... > + $ref: /schemas/types.yaml#/definitions/uint8-array Missing constraints. > + description: > + Execution-environment value used to route SoundWire master > + interrupts to CPU0 or CPU1. > + > label: > maxItems: 1 > Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
* [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection 2026-06-08 17:53 [PATCH v1 0/2] soundwire: qcom: add support for EE-aware register layout Mohammad Rafi Shaik 2026-06-08 17:53 ` [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property Mohammad Rafi Shaik @ 2026-06-08 17:53 ` Mohammad Rafi Shaik 2026-06-08 18:12 ` sashiko-bot 2026-06-08 19:48 ` Krzysztof Kozlowski 1 sibling, 2 replies; 7+ messages in thread From: Mohammad Rafi Shaik @ 2026-06-08 17:53 UTC (permalink / raw) To: Rob Herring, Krzysztof Kozlowski, Conor Dooley, Srinivas Kandagatla, Vinod Koul, Bard Liao, Rao Mandadapu Cc: Pierre-Louis Bossart, linux-arm-msm, devicetree, linux-kernel, linux-sound Some Qualcomm SoundWire masters expose interrupt, FIFO and status registers in EE-specific register windows on v2.0 and newer hardware. Add support for selecting the SoundWire execution environment from DT and use it to program the correct register window for the active EE. The driver now reads the EE value from the new qcom,swr-master-ee-val property, with qcom,ee as a fallback for backward compatibility. For v2.0+ hardware, the IRQ/FIFO/status register layout is adjusted by the EE window stride so the driver programs the correct bank for the selected EE. The interrupt enable path is also updated to always use the selected EE window. This change allows SoundWire interrupt routing and register accesses to work correctly on platforms where the master is not mapped to the default EE1 window. In Shikra, the soundwire execution environment is set to 0 unlike other Qualcomm boards. Signed-off-by: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com> --- drivers/soundwire/qcom.c | 78 +++++++++++++++++++++++++++++++++------- 1 file changed, 65 insertions(+), 13 deletions(-) diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index 3d8f5a81e..f4b8ff77b 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -26,6 +26,7 @@ #define SWRM_COMP_STATUS 0x014 #define SWRM_LINK_MANAGER_EE 0x018 #define SWRM_EE_CPU 1 +#define SWRM_MAX_EE 1 #define SWRM_FRM_GEN_ENABLED BIT(0) #define SWRM_VERSION_1_3_0 0x01030000 #define SWRM_VERSION_1_5_1 0x01050001 @@ -118,6 +119,7 @@ #define SWRM_V2_0_CLK_CTRL 0x5060 #define SWRM_V2_0_CLK_CTRL_CLK_START BIT(0) #define SWRM_V2_0_LINK_STATUS 0x5064 +#define SWRM_V2_REG_EE_STRIDE 0x1000 #define SWRM_DP_PORT_CTRL_EN_CHAN_SHFT 0x18 #define SWRM_DP_PORT_CTRL_OFFSET2_SHFT 0x10 @@ -202,6 +204,7 @@ struct qcom_swrm_ctrl { struct mutex port_lock; struct clk *hclk; int irq; + u32 ee; unsigned int version; int wake_irq; int num_din_ports; @@ -222,6 +225,7 @@ struct qcom_swrm_ctrl { u32 slave_status; u32 wr_fifo_depth; bool clock_stop_not_supported; + unsigned int reg_layout_local[SWRM_OFFSET_DP_SAMPLECTRL2_BANK + 1]; }; struct qcom_swrm_data { @@ -328,6 +332,36 @@ static const struct qcom_swrm_data swrm_v3_0_data = { }; #define to_qcom_sdw(b) container_of(b, struct qcom_swrm_ctrl, bus) +static void qcom_swrm_set_ee_register_layout(struct qcom_swrm_ctrl *ctrl, + const struct qcom_swrm_data *data) +{ + int ee_offset; + + memcpy(ctrl->reg_layout_local, data->reg_layout, + sizeof(ctrl->reg_layout_local)); + ctrl->reg_layout = ctrl->reg_layout_local; + + if (ctrl->version < SWRM_VERSION_2_0_0) + return; + + /* + * Current register constants map EE1. For EE0, use the EE register + * window stride to access status/IRQ/FIFO registers. + */ + ee_offset = ((int)ctrl->ee - SWRM_EE_CPU) * SWRM_V2_REG_EE_STRIDE; + if (!ee_offset) + return; + + ctrl->reg_layout_local[SWRM_REG_FRAME_GEN_ENABLED] += ee_offset; + ctrl->reg_layout_local[SWRM_REG_INTERRUPT_STATUS] += ee_offset; + ctrl->reg_layout_local[SWRM_REG_INTERRUPT_CLEAR] += ee_offset; + ctrl->reg_layout_local[SWRM_REG_INTERRUPT_CPU_EN] += ee_offset; + ctrl->reg_layout_local[SWRM_REG_CMD_FIFO_WR_CMD] += ee_offset; + ctrl->reg_layout_local[SWRM_REG_CMD_FIFO_RD_CMD] += ee_offset; + ctrl->reg_layout_local[SWRM_REG_CMD_FIFO_STATUS] += ee_offset; + ctrl->reg_layout_local[SWRM_REG_CMD_FIFO_RD_FIFO_ADDR] += ee_offset; +} + static int qcom_swrm_ahb_reg_read(struct qcom_swrm_ctrl *ctrl, int reg, u32 *val) { @@ -904,12 +938,13 @@ static int qcom_swrm_init(struct qcom_swrm_ctrl *ctrl) ctrl->reg_write(ctrl, SWRM_MCP_CFG_ADDR, val); if (ctrl->version == SWRM_VERSION_1_7_0) { - ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); + ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, ctrl->ee); ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, - SWRM_MCP_BUS_CLK_START << SWRM_EE_CPU); + SWRM_MCP_BUS_CLK_START << ctrl->ee); } else if (ctrl->version >= SWRM_VERSION_2_0_0) { - ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); - ctrl->reg_write(ctrl, SWRM_V2_0_CLK_CTRL, + ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, ctrl->ee); + ctrl->reg_write(ctrl, SWRM_V2_0_CLK_CTRL + + ((int)ctrl->ee - SWRM_EE_CPU) * SWRM_V2_REG_EE_STRIDE, SWRM_V2_0_CLK_CTRL_CLK_START); } else { ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, SWRM_MCP_BUS_CLK_START); @@ -935,11 +970,9 @@ static int qcom_swrm_init(struct qcom_swrm_ctrl *ctrl) ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_CLEAR], 0xFFFFFFFF); - /* enable CPU IRQs */ - if (ctrl->mmio) { - ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_CPU_EN], - SWRM_INTERRUPT_STATUS_RMSK); - } + /* enable CPU IRQs for the selected EE window */ + ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_CPU_EN], + SWRM_INTERRUPT_STATUS_RMSK); /* Set IRQ to PULSE */ ctrl->reg_write(ctrl, SWRM_COMP_CFG_ADDR, @@ -1545,7 +1578,22 @@ static int qcom_swrm_probe(struct platform_device *pdev) return -ENOMEM; data = of_device_get_match_data(dev); + ctrl->ee = SWRM_EE_CPU; + ret = of_property_read_u32(dev->of_node, "qcom,swr-master-ee-val", &ctrl->ee); + if (ret) + ret = of_property_read_u32(dev->of_node, "qcom,ee", &ctrl->ee); + if (ret) + ctrl->ee = SWRM_EE_CPU; + if (ctrl->ee > SWRM_MAX_EE) { + dev_warn(dev, "invalid SoundWire EE %u, using EE%u\n", + ctrl->ee, SWRM_EE_CPU); + ctrl->ee = SWRM_EE_CPU; + } ctrl->max_reg = data->max_reg; + /* + * Defer EE register window selection until HW version is known. + * For v2.0+ the IRQ/FIFO window is EE-banked. + */ ctrl->reg_layout = data->reg_layout; ctrl->rows_index = sdw_find_row_index(data->default_rows); ctrl->cols_index = sdw_find_col_index(data->default_cols); @@ -1623,6 +1671,7 @@ static int qcom_swrm_probe(struct platform_device *pdev) prop->default_row = data->default_rows; ctrl->reg_read(ctrl, SWRM_COMP_HW_VERSION, &ctrl->version); + qcom_swrm_set_ee_register_layout(ctrl, data); ret = devm_request_threaded_irq(dev, ctrl->irq, NULL, qcom_swrm_irq_handler, @@ -1733,16 +1782,19 @@ static int __maybe_unused swrm_runtime_resume(struct device *dev) reset_control_reset(ctrl->audio_cgcr); if (ctrl->version == SWRM_VERSION_1_7_0) { - ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); + ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, ctrl->ee); ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, - SWRM_MCP_BUS_CLK_START << SWRM_EE_CPU); + SWRM_MCP_BUS_CLK_START << ctrl->ee); } else if (ctrl->version >= SWRM_VERSION_2_0_0) { - ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); - ctrl->reg_write(ctrl, SWRM_V2_0_CLK_CTRL, + ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, ctrl->ee); + ctrl->reg_write(ctrl, SWRM_V2_0_CLK_CTRL + + ((int)ctrl->ee - SWRM_EE_CPU) * + SWRM_V2_REG_EE_STRIDE, SWRM_V2_0_CLK_CTRL_CLK_START); } else { ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, SWRM_MCP_BUS_CLK_START); } + ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_CLEAR], SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET); -- 2.34.1 ^ permalink raw reply related [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection 2026-06-08 17:53 ` [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection Mohammad Rafi Shaik @ 2026-06-08 18:12 ` sashiko-bot 2026-06-08 19:48 ` Krzysztof Kozlowski 1 sibling, 0 replies; 7+ messages in thread From: sashiko-bot @ 2026-06-08 18:12 UTC (permalink / raw) To: Mohammad Rafi Shaik; +Cc: devicetree, conor+dt, robh Thank you for your contribution! Sashiko AI review found 2 potential issue(s) to consider: Pre-existing issues: - [High] Data race on `ctrl->intr_mask` between threaded interrupt handler and PM runtime callbacks. - [High] Missing NULL pointer validation for `data` from `of_device_get_match_data()`, leading to a NULL pointer dereference crash. -- commit 2b9927d4b6910f9c0442ddebd7fb189132946df1 Author: Mohammad Rafi Shaik <mohammad.rafi.shaik@oss.qualcomm.com> soundwire: qcom: add EE-aware register layout and cpu selection This commit adds support for selecting the SoundWire execution environment from the device tree and adjusts register windows based on the EE value. For v2.0+ hardware, the IRQ, FIFO, and status register layout is offset by the EE window stride. > diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c > index 3d8f5a81eff19..f4b8ff77bc2f8 100644 > --- a/drivers/soundwire/qcom.c > +++ b/drivers/soundwire/qcom.c [ ... ] > @@ -1545,7 +1578,22 @@ static int qcom_swrm_probe(struct platform_device *pdev) > return -ENOMEM; > > data = of_device_get_match_data(dev); > + ctrl->ee = SWRM_EE_CPU; > + ret = of_property_read_u32(dev->of_node, "qcom,swr-master-ee-val", &ctrl->ee); > + if (ret) > + ret = of_property_read_u32(dev->of_node, "qcom,ee", &ctrl->ee); > + if (ret) > + ctrl->ee = SWRM_EE_CPU; > + if (ctrl->ee > SWRM_MAX_EE) { > + dev_warn(dev, "invalid SoundWire EE %u, using EE%u\n", > + ctrl->ee, SWRM_EE_CPU); > + ctrl->ee = SWRM_EE_CPU; > + } > ctrl->max_reg = data->max_reg; [Severity: High] This isn't a bug introduced by this patch, but could this dereference of data->max_reg cause a NULL pointer crash? If the device is bound to the driver manually via sysfs (e.g., by writing to driver_override), the platform bus falls back to matching by name rather than the device tree. In this case, dev->of_node is missing, and of_device_get_match_data() returns NULL. Does this data pointer need to be validated before being dereferenced? > + /* > + * Defer EE register window selection until HW version is known. > + * For v2.0+ the IRQ/FIFO window is EE-banked. > + */ > ctrl->reg_layout = data->reg_layout; [ ... ] > @@ -1733,16 +1782,19 @@ static int __maybe_unused swrm_runtime_resume(struct device *dev) > reset_control_reset(ctrl->audio_cgcr); > > if (ctrl->version == SWRM_VERSION_1_7_0) { > - ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); > + ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, ctrl->ee); > ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, > - SWRM_MCP_BUS_CLK_START << SWRM_EE_CPU); > + SWRM_MCP_BUS_CLK_START << ctrl->ee); > } else if (ctrl->version >= SWRM_VERSION_2_0_0) { > - ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); > - ctrl->reg_write(ctrl, SWRM_V2_0_CLK_CTRL, > + ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, ctrl->ee); > + ctrl->reg_write(ctrl, SWRM_V2_0_CLK_CTRL + > + ((int)ctrl->ee - SWRM_EE_CPU) * > + SWRM_V2_REG_EE_STRIDE, > SWRM_V2_0_CLK_CTRL_CLK_START); > } else { > ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, SWRM_MCP_BUS_CLK_START); > } > + > ctrl->reg_write(ctrl, ctrl->reg_layout[SWRM_REG_INTERRUPT_CLEAR], > SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET); > [Severity: High] This is a pre-existing issue, but could there be a data race on ctrl->intr_mask between the threaded interrupt handler and PM runtime callbacks? Just below this code in swrm_runtime_resume(), ctrl->intr_mask is modified locklessly: ctrl->intr_mask |= SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET; At the same time, the threaded IRQ handler performs its own lockless read-modify-write on ctrl->intr_mask: drivers/soundwire/qcom.c:qcom_swrm_irq_handler() { ... ctrl->intr_mask &= ~SWRM_INTERRUPT_STATUS_MASTER_CLASH_DET; ... } Both execute in process context without synchronization, and the PM runtime worker can be scheduled via wake_irq independently. If these run concurrently on different CPUs, could this result in a read-modify-write race where an update is lost? If an update is lost, could an interrupt be unintentionally left unmasked, potentially causing a persistent IRQ storm? -- Sashiko AI review · https://sashiko.dev/#/patchset/20260608175345.3118060-1-mohammad.rafi.shaik@oss.qualcomm.com?part=2 ^ permalink raw reply [flat|nested] 7+ messages in thread
* Re: [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection 2026-06-08 17:53 ` [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection Mohammad Rafi Shaik 2026-06-08 18:12 ` sashiko-bot @ 2026-06-08 19:48 ` Krzysztof Kozlowski 1 sibling, 0 replies; 7+ messages in thread From: Krzysztof Kozlowski @ 2026-06-08 19:48 UTC (permalink / raw) To: Mohammad Rafi Shaik, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Srinivas Kandagatla, Vinod Koul, Bard Liao, Rao Mandadapu Cc: Pierre-Louis Bossart, linux-arm-msm, devicetree, linux-kernel, linux-sound On 08/06/2026 19:53, Mohammad Rafi Shaik wrote: > Some Qualcomm SoundWire masters expose interrupt, FIFO and status > registers in EE-specific register windows on v2.0 and newer hardware. > > Add support for selecting the SoundWire execution environment from DT > and use it to program the correct register window for the active EE. > The driver now reads the EE value from the new No, it does not. "now" means before the commit, you are making the changes - see submitting patches. > qcom,swr-master-ee-val property, with qcom,ee as a fallback for > backward compatibility. And where did you document qcom,ee and why do you need fallback in the first place? For downstream DTS? We do not support anything from downstream here. Best regards, Krzysztof ^ permalink raw reply [flat|nested] 7+ messages in thread
end of thread, other threads:[~2026-06-08 19:48 UTC | newest] Thread overview: 7+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2026-06-08 17:53 [PATCH v1 0/2] soundwire: qcom: add support for EE-aware register layout Mohammad Rafi Shaik 2026-06-08 17:53 ` [PATCH v1 1/2] dt-bindings: soundwire: qcom: add qcom,swr-master-ee-val property Mohammad Rafi Shaik 2026-06-08 18:01 ` sashiko-bot 2026-06-08 19:46 ` Krzysztof Kozlowski 2026-06-08 17:53 ` [PATCH v1 2/2] soundwire: qcom: add EE-aware register layout and cpu selection Mohammad Rafi Shaik 2026-06-08 18:12 ` sashiko-bot 2026-06-08 19:48 ` Krzysztof Kozlowski
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox