From nobody Fri Sep 25 14:31:03 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 844D6455623 for ; Fri, 11 Sep 2026 08:21:35 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789114897; cv=none; b=g0AyllJzeiUuzP1AyD/3ndZsD3AnbdVB4xdpijEfPTRXqkZuKUS0sMJ6f/PktTFS1QhWszYAtuRx7UETYnWE/nsS+AJFfhsDOr+UQnwa8NtE4YeyioFYHnGswwGlBq16LWTb5v0aBQYhFXpvXhfUOnNNtqfXZEgxpK4AjZ7ntak= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789114897; c=relaxed/simple; bh=mwkLRTFPxbfx/aCfkpcg51GVVHCgt7ycr1rCcEhiNDo=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=IbXPQh5r9VC+glP7jeSogpkbR+mDKHY7PmO+r5+d/551wEPBfpJUsHS1u8SIBgy6DsOXWnhg8CuEmDkNRcmBwTTRgy1yln36wKbTuX1istz3D6iuAXVCSL+MgJ5Z5JXa+MtaTHkH251ihc3fAJR7W4fC63uaFDUjjsL/LxrBCmk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=W/XxxEJN; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=PDK4Rhbo; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="W/XxxEJN"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="PDK4Rhbo" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68B7kjID3366326 for ; Fri, 11 Sep 2026 08:21:34 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=Oy4TzhqSJ/D vWDw+eqBd+EceR40UC6PEjoMrpbwGDes=; b=W/XxxEJNoAeJNvZ337GB9TlInf8 wA54YGHHFFC/Os0G7DNNqCb7dDQUVhOfGdm82SXtwu0vdxNOq1+BRGVamzPMkBnW UaRa6tAMPREMP88s3qqwatRTI6ltF54mfCjvJi8y3EgUmhZdkXqs0Dcb2Pf4wq0V +8h85WAUUR2l9AYdmySD1tAszdCTNz+vEjKl1gcXn6+3epbP6TKZxQabzPj6p51B xWfFmKs5VaS1EL5HXdf7aYrcR/17QCCwcN79kyQLp3TcbOGvTwnLHRARnEKWE+7z 0YwkNzNGuieKkVMs242oINfp4G55WGCgFzfC9VopUpKD/Agn/p8kXAFcDJA== Received: from mail-qk1-f197.google.com (mail-qk1-f197.google.com [209.85.222.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gm1k2au8n-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 11 Sep 2026 08:21:34 +0000 (GMT) Received: by mail-qk1-f197.google.com with SMTP id af79cd13be357-936e393061dso86731485a.2 for ; Fri, 11 Sep 2026 01:21:34 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1789114894; x=1789719694; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=Oy4TzhqSJ/DvWDw+eqBd+EceR40UC6PEjoMrpbwGDes=; b=PDK4RhbopmZaWYmwaezKiuC/uoPckGoa8vF7MuNwN5PhhrrJv8NOjq0xvTVdembAf5 V1ukbiOCZeY1gArp4V7Ztyr2FqCZ+hFZMQTEvXBTyLicmA4qvMF1Cg8DiHe7/zA48J2Z ZAYOefqE1NcoKouq+D2xZvDIFZVXDJcbJ1M0Pc9YXSB6nRbS4AG77a9Y57ePYLFEGYQe 1DQMRcocMEUOx3O8jWg07QpnsbmpNBTAOgYHgI9oS8Xck5n5GXN86ZbiCQdOIa1iDQTG aiInkzMadU3J5gv7kZwRoXTe9KQAev8aQStWUoVkptD/X2eDpVpDWC343TU3OmUd/BAu 7KGA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789114894; x=1789719694; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=Oy4TzhqSJ/DvWDw+eqBd+EceR40UC6PEjoMrpbwGDes=; b=IRkARCe9rNtTESYdXhaomiEIMZcEvHNxLBKJyeAEpO86YQHx7H01f7q+duTOe63q/4 ldtvU5w6aq++hGE0lL17bv2Wk9OPDpF4oQxk0rmuWn8MgP0/nwIJUSTWQqtgC7F5TQ65 e1j2RFN4jloSKfhsScVyoe4SJuuSGkFitYB81n9/BHMFTRMu/gBz925UOjf+EAvDQOcn GVbqoG580Ues8BRFXk4ZTYNW7XILSevX1SX8E26+bYvqjXuSk9e89zmKmLZt9U6qQLzm uGV8zO2U7UrTFSqmurGFnBA0dxslXzAu2hLaYZK1+kEqsqozt7Ttnu8GovvhgSU8bAzL /Axw== X-Forwarded-Encrypted: i=1; AKwUvBy2giSsFV7XtbmHuGgoDYBQEVVdVyas7KLbXxiT5Y6UgrQr1ptiI3KNfN8Sm3kgm98SeSmfwU21vECyjZc=@vger.kernel.org X-Gm-Message-State: AFuF++kOmvlFasLbZP9vgI1mw+dpphkNVAA1Kqlq2gL52W7ImUM9K1m/ Xb9DCxH/9GFbfIJuW5aZBgNH5FPuJyjieAAVZpRcgRQBhXvQ5joYJYN5VVzTzL52yVAiWV/pjMG iml/egz+kCti8MlIKnb6ZgDwgHk+gmnY+lH+qhKoM90RsAg78gjYKJRMtoN7GkCpAF8I= X-Gm-Gg: AYBFou2moDu+ku40tXKRyx0Qv1pw8uRNa+Y0qOTsDCXF+7UJExRRq8z2y19y+dtMcwf K5jVFZ3Vl4Z2PoACj622oDK+cyZc6IbiG9zTFWt/KW//zv+2ffRk5bHZNyz50480Hwvo6icT0r7 q+uFKhksAkVh2/tUUefaNSJQZPI7rYyNPVPgK3BuDp9KXrk3BEfKug/mdEH+Egc3xQ9UyXbDYVl aRIV7rk7xcdlZwtfVBAqkaVn92EMHRA2in/xyK4zoaIDk6HohlrpEHeHppe8dI7uibVnhrtPt+g 1fhuNhRmNi0DBxPbWJP/tc5hZKh/HKz1R4ZzzO0nyWvH/8RltgM/+s4i1N9FEmugl0v+vZnF0fW I2SdkAhZc1buw4w== X-Received: by 2002:a05:620a:19a4:b0:939:d459:4810 with SMTP id af79cd13be357-939ea13c59bmr382467085a.26.1789114893498; Fri, 11 Sep 2026 01:21:33 -0700 (PDT) X-Received: by 2002:a05:620a:19a4:b0:939:d459:4810 with SMTP id af79cd13be357-939ea13c59bmr382462785a.26.1789114893005; Fri, 11 Sep 2026 01:21:33 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-486eb34e608sm4488880f8f.23.2026.09.11.01.21.31 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Sep 2026 01:21:32 -0700 (PDT) From: Srinivas Kandagatla To: robh@kernel.org, vkoul@kernel.org Cc: krzk+dt@kernel.org, conor+dt@kernel.org, srini@kernel.org, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, prasad.kumpatla@oss.qualcomm.com, jingyi.wang@oss.qualcomm.com, sibi.sankar@oss.qualcomm.com, quic_srivasam@quicinc.com, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH 1/3] dt-bindings: soundwire: qcom: describe multi-master Date: Fri, 11 Sep 2026 09:21:09 +0100 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=cM11IVeN c=1 sm=1 tr=0 ts=6aa3ba0e cx=c_pps a=50t2pK5VMbmlHzFWWp8p/g==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=Na-TPb6K_91XsI5DB0sA:9 a=IoWCM6iH3mJn3m4BftBB:22 X-Proofpoint-GUID: 6NExnaA8ErUWPUU31shx0bmck2_SX6k2 X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDExNiBTYWx0ZWRfX9EppyE4P6KfR AeJcG5dkredD2BNJfedRC7dtGIfGDLMo7PecIMY4w18FJMilwuGS8O0+Cnaz+je9UdwWlS+S4rK Of1ESlFOVzQtG095Lx+Nwz+RiUjLuQY= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDExNiBTYWx0ZWRfX2voIIqZSwH4V 0TdCe7HXyMlc1vJorvJXxMRDiZ7OCHe4EmKPjBNY9LTL+IauPF7X2WMZv2xiEiYmBcstd2oXnPv vt6AlHpDVRBh45FEQ49fBA2JEwVX0YRQKpjhPM4QyI9JUm2L/62nCo2cG9mJVBcM1LBBK2lWdDN xP58AaV6VwtJbuEJnVT6Ee03kg4OsSFqfgBnCX97SkI0O/A+j8v1zrnw2gTGrjyNu90KNf50YIt rgup6ncnrWawwCYZHijUtT6Y9A2SLWf+z8Oka4xMpPhOXbDmolBhGAiQJfNop/iCci54zuuaQKH Ma0hoe9OBnrYno/ukMxXPsU7Dj5lbxUqR2o9YxqUCLIGPz/SwgZ6BSXkCyLRlyXH5TS+ti48/MI cX5XLp08hN56qx+LADYG/iHO7JONnBZftwtpe36rPxORMUs/sKt5qSdoO3A7dQ6IOMaRqXvPbng SP6YiTaWxXrFkfn24uQ== X-Proofpoint-ORIG-GUID: 6NExnaA8ErUWPUU31shx0bmck2_SX6k2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-11_03,2026-09-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609110116 Content-Type: text/plain; charset="utf-8" v3.1.0+ Qualcomm SoundWire IPs can be paired to expose one logical bus with more than two DATA lanes. Add the two properties that describe such a pair: qcom,multi-master-mode role in the pair ("primary" or "dependent") qcom,multi-master-peer to the other IP Both nodes carry both properties. Signed-off-by: Srinivas Kandagatla Reviewed-by: Krzysztof Kozlowski --- .../bindings/soundwire/qcom,soundwire.yaml | 109 ++++++++++++++++-- 1 file changed, 100 insertions(+), 9 deletions(-) diff --git a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yam= l b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml index 8e6973fa229c..6cf3285ded92 100644 --- a/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml +++ b/Documentation/devicetree/bindings/soundwire/qcom,soundwire.yaml @@ -215,6 +215,36 @@ properties: maximum: 4 - const: 0xff =20 + qcom,multi-master-mode: + description: + Role in v3.1.0+ multi-master mode. Both nodes set this; the + primary owns SWR_CLK, the dependent contributes DATA lanes + only. + $ref: /schemas/types.yaml#/definitions/string + enum: [ primary, dependent ] + + qcom,multi-master-peer: + description: + Peers in multi-master mode. Each entry is a + pair. Peer N's DPn slots + 1, 2, 3, ... occupy bus ports (offset+1), (offset+2), ... + $ref: /schemas/types.yaml#/definitions/phandle-array + items: + items: + - description: peer phandle + - description: bus port offset (last primary-local port) + minItems: 1 + + num-lanes: + description: + Number of DATA lanes this IP exposes locally. Required in + multi-master mode; on the primary it defines the boundary + between local bus lanes (0..num-lanes-1) and lanes contributed + by the dependent. + $ref: /schemas/types.yaml#/definitions/uint32 + minimum: 1 + maximum: 8 + label: maxItems: 1 =20 @@ -224,21 +254,82 @@ required: - interrupts - clocks - clock-names - - '#sound-dai-cells' - '#address-cells' - '#size-cells' - - qcom,ports-offset1 - - qcom,ports-offset2 - -oneOf: - - required: - - qcom,ports-sinterval-low - - required: - - qcom,ports-sinterval =20 allOf: - $ref: soundwire-controller.yaml# =20 + # Single-master (no qcom,multi-master-mode): needs port config. + - if: + not: + required: + - qcom,multi-master-mode + then: + required: + - '#sound-dai-cells' + - qcom,ports-offset1 + - qcom,ports-offset2 + oneOf: + - required: + - qcom,ports-sinterval-low + - required: + - qcom,ports-sinterval + + # Multi-master primary: drives the bus, needs port config + MM props. + - if: + properties: + qcom,multi-master-mode: + const: primary + required: + - qcom,multi-master-mode + then: + properties: + compatible: + contains: + const: qcom,soundwire-v3.1.0 + required: + - '#sound-dai-cells' + - qcom,ports-offset1 + - qcom,ports-offset2 + - qcom,multi-master-peer + - num-lanes + oneOf: + - required: + - qcom,ports-sinterval-low + - required: + - qcom,ports-sinterval + + # Multi-master dependent: contributes DATA lanes + - if: + properties: + qcom,multi-master-mode: + const: dependent + required: + - qcom,multi-master-mode + then: + properties: + compatible: + contains: + const: qcom,soundwire-v3.1.0 + '#sound-dai-cells': false + qcom,din-ports: false + qcom,dout-ports: false + qcom,ports-word-length: false + qcom,ports-sinterval-low: false + qcom,ports-sinterval: false + qcom,ports-offset1: false + qcom,ports-offset2: false + qcom,ports-lane-control: false + qcom,ports-block-pack-mode: false + qcom,ports-hstart: false + qcom,ports-hstop: false + qcom,ports-block-group-count: false + qcom,ports-ch-mask: false + required: + - qcom,multi-master-peer + - num-lanes + unevaluatedProperties: false =20 examples: --=20 2.53.0 From nobody Fri Sep 25 14:31:03 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id BD8BD453A25 for ; Fri, 11 Sep 2026 08:21:37 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789114900; cv=none; b=XR1g85ioYoKxkmxZM912gflEIM2yFPflHIupQmeH6P01KsLzNdAOCbcYMtB4mWTOtGneEgbH8mEXyixPm703fmOtcD+let2MJxcGJJHmxzAkBPWDp72EHuKZ4Ip9gXzl5Td5nGD8nr2DXS4WxGSRAxz9cSrKE8BhwootvVoi/pU= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789114900; c=relaxed/simple; bh=S0rWZDARH6A1f4Yo6/zewaAb9gLUICVR2PxF4pgM+Ww=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=CTj2bU4fKyOSRtb9BSPsHuK2pD+Nw6Q5tHy/f0h8hIZEcAu5Yk0Vd3EIFLJGlNC1FvL4hfElJQLjmvINtKawdhIsd1lia4fv6YjuEELJGzyvoSUvgs/JCkM4vHagj2M4jfhu3LPPtcYk1thvgSD9RvsBpz/xVR7qHDVAxBR4nE4= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=P3IiZRKA; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=OeCIjQc2; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="P3IiZRKA"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="OeCIjQc2" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68B7kqlv3464050 for ; Fri, 11 Sep 2026 08:21:36 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=YEnFPv3tEtq VcjX1osqRVFpmPtecUfxnyLtGwHnmdzQ=; b=P3IiZRKAUJQYIq1wX7rdgMbippD bCKhTR9U1id+U4YiTWpF1M/x/wuk79pnByaMhnmRBCX2ySNNrkMJVYrtP+s3f6P6 AVDAa8aOwlSLtxlK3PkRFLC2AR0ugK3p6zXijOi098/G58g1R6ghz3vXS99cMRpD Vsu4Y6gbm+dQquI+s24ayu8WuJVl32tyXF8AexT0tl5BGZtPvVv5/nENzcMZmUbh jwIHkO8BobydW8QDlYaIBnZfWzJwWph30BosltSTuky7xm3TC6CRldyuW3V3Yvm4 BbMZuUXjAT3Nzljos9P/rRqJYF7ievOxrsWXy7+7COPl35jsgNF36Z3CMHQ== Received: from mail-qk1-f199.google.com (mail-qk1-f199.google.com [209.85.222.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gmbdr8nn3-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 11 Sep 2026 08:21:35 +0000 (GMT) Received: by mail-qk1-f199.google.com with SMTP id af79cd13be357-939a00c45easo100814185a.2 for ; Fri, 11 Sep 2026 01:21:35 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1789114895; x=1789719695; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=YEnFPv3tEtqVcjX1osqRVFpmPtecUfxnyLtGwHnmdzQ=; b=OeCIjQc20TGIvEN1MvUay3iNyaiYcfdcpitJpl5HNz2aHcLpB3HPeLE7imnYBXXNNf sAkeXiIAGnbcmujFBexdDy/D6cypkgRnqHKC9RHT/1iQU046xPPwkdn/hecOvjYQ4a76 S+ZNcXMbH5/Z8ZBKYdToH4x8i22HSS1WHhfSRz8snwOl+m51KLyGDDHKBLMVwitUyf9r eJTh+EJB7oVfmPfVRHLjVeadngSswCQ+tP3xL8a1ChqTZofJMAlM+01+814kxQpWjU/t y4UKgwsFJdmNH3EDSvungFxpWfMcD7YJp2dW78VY3GfIfbKlQnJUyLFgXSy9OXE+1EEC WojA== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789114895; x=1789719695; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=YEnFPv3tEtqVcjX1osqRVFpmPtecUfxnyLtGwHnmdzQ=; b=avFDr9AEfy0Gy3jomvjYji/SsVOjuKf8C4cWZQAhWB1VAfjRTvEZzoJuXzGrEspTnW irvyyzxY4H3Jn1yuL723VC4pS9kIrG4PITz6y2W5gJeTPn6DtsAPCOHoSYRWERGiEzvr kqcOjvSCB33p7BsQXQ/zCjK0P1fYXsXOOGhjnBmwq6FNZUgVcRt3wboUzmVBIXATSdQE U4E1nX/H9Jvb6gukZgAOX9Ej4qKBLy1rfvOVtkSpZrH6S8s7gfbVVWdy1FxUVWm5mb91 VDwjaTVd8gxwbNH2+IiUgNroyup9z8Ec7L5jPcG8j9jiiXo4SSQ3he2Pz+TGw1IyqAPj RTzg== X-Forwarded-Encrypted: i=1; AKwUvBxToPAKVHCc9fg7GN0hNCBhJHJeKAEEB/HKhktI9keCyDqmZBgo/YuQSgEbljOmDoTKx7D038i3Zzn+F8E=@vger.kernel.org X-Gm-Message-State: AFuF++k4LPh3qSpU2/zbW5X8rFG6bcEUWd0ZcvzGjUutFFuoOHI1xiFV yacyYjsPhpwjPrXGQWWq8qILNxvnBvePah2+4odmRi9FNaiwjpotVpkFqZSv20P/bwClCtJwDU2 Y0jzRJlhgpkLb0jfwK6SGnJEKkO8+deMkO8H50Z51l6OhiHNo8L6oob7Kf657GIJjtic= X-Gm-Gg: AYBFou3pbty3Yv3FE2TF3zMRQUO8KXrifXYyeZJNHpgnklff8WC6o5m4zcHgeFXpZdz 3BWo9a5cplujNECfMJewzFbGJqaKRTE9IAq6onibfwrMzHGlXX4TfLAu2sc/LTxCL8Ev8n/YTSJ iXghhO3/Kd7b/HqMrR67dNdi675vVrJKl0KGOm5fftsL/C6uck7zcCXwkUYBlxLdN76+P1J3QjC 8lgLDwGpBNJN9P51jsKYR9F5rEYWvXgziqFncmRUmaZ7Syc7z9+cGR4QCf0+Jv6QEQXUVDVo+Gz 7qqV3SW8F1tACwG38qK6/uO0xrTvdhLycUApUeb/bJSEFe+pZa/dRe8gCJwM8+Uvam12GIfB9QS hGB2fDi5R5QWLsg== X-Received: by 2002:a05:620a:462b:b0:92e:7533:ef63 with SMTP id af79cd13be357-939ea13c7b0mr376866785a.13.1789114894922; Fri, 11 Sep 2026 01:21:34 -0700 (PDT) X-Received: by 2002:a05:620a:462b:b0:92e:7533:ef63 with SMTP id af79cd13be357-939ea13c7b0mr376862785a.13.1789114894435; Fri, 11 Sep 2026 01:21:34 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-486eb34e608sm4488880f8f.23.2026.09.11.01.21.33 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Sep 2026 01:21:33 -0700 (PDT) From: Srinivas Kandagatla To: robh@kernel.org, vkoul@kernel.org Cc: krzk+dt@kernel.org, conor+dt@kernel.org, srini@kernel.org, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, prasad.kumpatla@oss.qualcomm.com, jingyi.wang@oss.qualcomm.com, sibi.sankar@oss.qualcomm.com, quic_srivasam@quicinc.com, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH 2/3] soundwire: qcom: add multi-master support Date: Fri, 11 Sep 2026 09:21:10 +0100 Message-ID: <0097b59e2b96d692b9fb542e207ee43f9dd44a7f.1789114385.git.srinivas.kandagatla@oss.qualcomm.com> X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Proofpoint-GUID: UR7HDF-SJQ3SnCFj5MKkSXLr3k6sJ04H X-Authority-Analysis: v=2.4 cv=PLmaavqC c=1 sm=1 tr=0 ts=6aa3ba0f cx=c_pps a=HLyN3IcIa5EE8TELMZ618Q==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=rJkE3RaqiGZ5pbrm-msn:22 a=EUspDBNiAAAA:8 a=YIMJjSul5AlPl1THYWsA:9 a=bTQJ7kPSJx9SKPbeHEYW:22 X-Proofpoint-ORIG-GUID: UR7HDF-SJQ3SnCFj5MKkSXLr3k6sJ04H X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDExNiBTYWx0ZWRfX+4xhvrKHGjDw dGvOsNXpBjAM8xobcSrQvPYBwq7DZlN/0/ogWWcS1vZEGDVN9wcyVW1zzlddX+oq7ximXSpmnBC DnTnxSXIgcCoAC/OECVWgmmqupFFY24= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDExNiBTYWx0ZWRfX4DuRCc95mfbC uoHXIKhz05YIn2secgFnvkqasODeB03f8B8UG5No56fcpWGty7tZTrpyDBoRzU+5xnCn8BmlJ/U Rd7xwZR6byavidG7kldQaB/S+IEFuhVgeXWxNIpQVQBeM/ie3ZzrKGj83Z1b6GhU5Gku2ArpOki 7OOCfi/QX9fQ9d4YVECmaV56Mx3OE+RicbCZaHTTxdO1wlg+ieHEfuckrbsrfmU/PFfN4DxTnYE LB8vtC650ifA7iaZZ6jJiJyrenDkkQdOyXTeKHJirpbCgRlC4D9zZ+3cery0Cu6RF45F94WsLsU G8ISBDQTxYxlNJXhPG9ZzR+gfozY/toYOC98UX/6kop5qlIBs7BUzgYHljnSY2fG+VuvEluTiSo 6msYXPehewZqGaGgh3AqOjXgcLuRKX7hzocaztRkNCUSfFx+DbHbOwiMipKrGsr8KQ1EIePXLn2 tAOKUfUhblB/YsUQP6g== X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-11_03,2026-09-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 bulkscore=0 suspectscore=0 spamscore=0 phishscore=0 adultscore=0 malwarescore=0 clxscore=1015 priorityscore=1501 impostorscore=0 lowpriorityscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609110116 Content-Type: text/plain; charset="utf-8" v3.1.0+ Qualcomm SoundWire IPs can be paired to expose one logical bus with more than two DATA lanes. One IP owns SWR_CLK and drives the bus; the other contributes DATA lanes only. Support this pairing on the driver side. A device link between the two IPs enforces correct unbind ordering and keeps the peer resumed while the primary is active. Single-master deployments (no qcom,multi-master-mode in DT) are unaffected. Signed-off-by: Srinivas Kandagatla --- drivers/soundwire/qcom.c | 171 +++++++++++++++++++++++++++++++++++---- 1 file changed, 156 insertions(+), 15 deletions(-) diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index 35ffffd541bd..a5f39868161a 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -10,6 +10,7 @@ #include #include #include +#include #include #include #include @@ -111,6 +112,7 @@ #define SWRM_DPn_PORT_HCTRL_BANK(offset, n, m) (offset + 0x100 * (n - 1) = + 0x40 * m) #define SWRM_DPn_BLOCK_CTRL3_BANK(offset, n, m) (offset + 0x100 * (n - 1) = + 0x40 * m) #define SWRM_DPn_SAMPLECTRL2_BANK(offset, n, m) (offset + 0x100 * (n - 1) = + 0x40 * m) +#define SWRM_DPn_SLOT_STRIDE 0x100 =20 #define SWR_V1_3_MSTR_MAX_REG_ADDR 0x1740 #define SWR_V2_0_MSTR_MAX_REG_ADDR 0x50ac @@ -192,6 +194,13 @@ struct qcom_swrm_ctrl { const unsigned int *reg_layout; void __iomem *mmio; struct reset_control *audio_cgcr; + u8 num_lanes; + bool is_dependent; + struct qcom_swrm_ctrl *peer_ctrl; + u8 peer_first_lane; + u8 num_peer_lanes; + bool is_primary; + u32 peer_dpn_offset; #ifdef CONFIG_DEBUG_FS struct dentry *debugfs; #endif @@ -1040,9 +1049,41 @@ static int qcom_swrm_pre_bank_switch(struct sdw_bus = *bus) u32p_replace_bits(&val, ctrl->cols_index, SWRM_MCP_FRAME_CTRL_BANK_COL_CT= RL_BMSK); u32p_replace_bits(&val, ctrl->rows_index, SWRM_MCP_FRAME_CTRL_BANK_ROW_CT= RL_BMSK); =20 + if (ctrl->peer_ctrl) + ctrl->peer_ctrl->reg_write(ctrl->peer_ctrl, reg, val); + return ctrl->reg_write(ctrl, reg, val); } =20 +static struct qcom_swrm_ctrl * +qcom_swrm_port_target(struct qcom_swrm_ctrl *ctrl, u8 port_num, u32 *reg) +{ + u8 lane =3D ctrl->pconfig[port_num].lane_control; + + if (ctrl->peer_ctrl && lane >=3D ctrl->peer_first_lane && + lane < ctrl->peer_first_lane + ctrl->num_peer_lanes) { + *reg -=3D ctrl->peer_dpn_offset; + return ctrl->peer_ctrl; + } + return ctrl; +} + +static int qcom_swrm_port_reg_write(struct qcom_swrm_ctrl *ctrl, u8 port_n= um, + u32 reg, u32 val) +{ + struct qcom_swrm_ctrl *tgt =3D qcom_swrm_port_target(ctrl, port_num, ®= ); + + return tgt->reg_write(tgt, reg, val); +} + +static int qcom_swrm_port_reg_read(struct qcom_swrm_ctrl *ctrl, u8 port_nu= m, + u32 reg, u32 *val) +{ + struct qcom_swrm_ctrl *tgt =3D qcom_swrm_port_target(ctrl, port_num, ®= ); + + return tgt->reg_read(tgt, reg, val); +} + static int qcom_swrm_port_params(struct sdw_bus *bus, struct sdw_port_params *p_params, unsigned int bank) @@ -1050,8 +1091,9 @@ static int qcom_swrm_port_params(struct sdw_bus *bus, struct qcom_swrm_ctrl *ctrl =3D to_qcom_sdw(bus); u32 offset =3D ctrl->reg_layout[SWRM_OFFSET_DP_BLOCK_CTRL_1]; =20 - return ctrl->reg_write(ctrl, SWRM_DPn_BLOCK_CTRL_1(offset, p_params->num), - p_params->bps - 1); + return qcom_swrm_port_reg_write(ctrl, p_params->num, + SWRM_DPn_BLOCK_CTRL_1(offset, p_params->num), + p_params->bps - 1); } =20 static int qcom_swrm_transport_params(struct sdw_bus *bus, @@ -1072,7 +1114,7 @@ static int qcom_swrm_transport_params(struct sdw_bus = *bus, value |=3D pcfg->off2 << SWRM_DP_PORT_CTRL_OFFSET2_SHFT; value |=3D pcfg->si & 0xff; =20 - ret =3D ctrl->reg_write(ctrl, reg, value); + ret =3D qcom_swrm_port_reg_write(ctrl, params->port_num, reg, value); if (ret) goto err; =20 @@ -1081,7 +1123,7 @@ static int qcom_swrm_transport_params(struct sdw_bus = *bus, value =3D (pcfg->si >> 8) & 0xff; reg =3D SWRM_DPn_SAMPLECTRL2_BANK(offset, params->port_num, bank); =20 - ret =3D ctrl->reg_write(ctrl, reg, value); + ret =3D qcom_swrm_port_reg_write(ctrl, params->port_num, reg, value); if (ret) goto err; } @@ -1091,7 +1133,10 @@ static int qcom_swrm_transport_params(struct sdw_bus= *bus, reg =3D SWRM_DPn_PORT_CTRL_2_BANK(offset, params->port_num, bank); =20 value =3D pcfg->lane_control; - ret =3D ctrl->reg_write(ctrl, reg, value); + if (ctrl->peer_ctrl && value >=3D ctrl->peer_first_lane && + value < ctrl->peer_first_lane + ctrl->num_peer_lanes) + value -=3D ctrl->peer_first_lane; + ret =3D qcom_swrm_port_reg_write(ctrl, params->port_num, reg, value); if (ret) goto err; } @@ -1102,7 +1147,7 @@ static int qcom_swrm_transport_params(struct sdw_bus = *bus, reg =3D SWRM_DPn_BLOCK_CTRL2_BANK(offset, params->port_num, bank); =20 value =3D pcfg->blk_group_count; - ret =3D ctrl->reg_write(ctrl, reg, value); + ret =3D qcom_swrm_port_reg_write(ctrl, params->port_num, reg, value); if (ret) goto err; } @@ -1112,10 +1157,10 @@ static int qcom_swrm_transport_params(struct sdw_bu= s *bus, =20 if (pcfg->hstart !=3D SWR_INVALID_PARAM && pcfg->hstop !=3D SWR_INVALID_P= ARAM) { value =3D (pcfg->hstop << 4) | pcfg->hstart; - ret =3D ctrl->reg_write(ctrl, reg, value); + ret =3D qcom_swrm_port_reg_write(ctrl, params->port_num, reg, value); } else { value =3D (SWR_HSTOP_MAX_VAL << 4) | SWR_HSTART_MIN_VAL; - ret =3D ctrl->reg_write(ctrl, reg, value); + ret =3D qcom_swrm_port_reg_write(ctrl, params->port_num, reg, value); } =20 if (ret) @@ -1124,7 +1169,8 @@ static int qcom_swrm_transport_params(struct sdw_bus = *bus, if (pcfg->bp_mode !=3D SWR_INVALID_PARAM) { offset =3D ctrl->reg_layout[SWRM_OFFSET_DP_BLOCK_CTRL3_BANK]; reg =3D SWRM_DPn_BLOCK_CTRL3_BANK(offset, params->port_num, bank); - ret =3D ctrl->reg_write(ctrl, reg, pcfg->bp_mode); + ret =3D qcom_swrm_port_reg_write(ctrl, params->port_num, reg, + pcfg->bp_mode); } =20 err: @@ -1142,14 +1188,14 @@ static int qcom_swrm_port_enable(struct sdw_bus *bu= s, =20 reg =3D SWRM_DPn_PORT_CTRL_BANK(offset, enable_ch->port_num, bank); =20 - ctrl->reg_read(ctrl, reg, &val); + qcom_swrm_port_reg_read(ctrl, enable_ch->port_num, reg, &val); =20 if (enable_ch->enable) val |=3D (enable_ch->ch_mask << SWRM_DP_PORT_CTRL_EN_CHAN_SHFT); else val &=3D ~(0xff << SWRM_DP_PORT_CTRL_EN_CHAN_SHFT); =20 - return ctrl->reg_write(ctrl, reg, val); + return qcom_swrm_port_reg_write(ctrl, enable_ch->port_num, reg, val); } =20 static const struct sdw_master_port_ops qcom_swrm_port_ops =3D { @@ -1562,6 +1608,68 @@ static int swrm_reg_show(struct seq_file *s_file, vo= id *data) DEFINE_SHOW_ATTRIBUTE(swrm_reg); #endif =20 +static int qcom_swrm_multi_master_setup(struct qcom_swrm_ctrl *ctrl) +{ + struct of_phandle_args args; + struct qcom_swrm_ctrl *peer; + struct platform_device *pdev; + u32 offset; + int ret; + + ret =3D of_parse_phandle_with_fixed_args(ctrl->dev->of_node, + "qcom,multi-master-peer", + 1, 0, &args); + if (ret) + return -EINVAL; + + pdev =3D of_find_device_by_node(args.np); + of_node_put(args.np); + if (!pdev) + return -EPROBE_DEFER; + + if (pdev->dev.driver !=3D ctrl->dev->driver) { + ret =3D -EINVAL; + goto out; + } + + peer =3D platform_get_drvdata(pdev); + if (!peer || !peer->is_dependent) { + ret =3D -EPROBE_DEFER; + goto out; + } + + if (!ctrl->num_lanes || !peer->num_lanes || + ctrl->num_lanes + peer->num_lanes > SDW_MAX_LANES) { + ret =3D -EINVAL; + goto out; + } + + offset =3D args.args[0]; + if (offset < ctrl->num_lanes) { + dev_err(ctrl->dev, "qcom,multi-master-peer: offset %u < num-lanes %u\n", + offset, ctrl->num_lanes); + ret =3D -EINVAL; + goto out; + } + + if (!device_link_add(ctrl->dev, &pdev->dev, + DL_FLAG_AUTOREMOVE_CONSUMER | DL_FLAG_PM_RUNTIME)) { + ret =3D -EINVAL; + goto out; + } + + ctrl->peer_ctrl =3D peer; + peer->peer_ctrl =3D ctrl; + ctrl->peer_first_lane =3D ctrl->num_lanes; + ctrl->num_peer_lanes =3D peer->num_lanes; + ctrl->peer_dpn_offset =3D offset * SWRM_DPn_SLOT_STRIDE; + + ret =3D 0; +out: + put_device(&pdev->dev); + return ret; +} + static int qcom_swrm_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; @@ -1576,6 +1684,9 @@ static int qcom_swrm_probe(struct platform_device *pd= ev) if (!ctrl) return -ENOMEM; =20 + if (!of_property_read_u32(dev->of_node, "num-lanes", &val)) + ctrl->num_lanes =3D val; + memset(ctrl->page1_cache, 0xff, sizeof(ctrl->page1_cache)); memset(ctrl->page2_cache, 0xff, sizeof(ctrl->page2_cache)); =20 @@ -1636,9 +1747,19 @@ static int qcom_swrm_probe(struct platform_device *p= dev) ctrl->bus.compute_params =3D &qcom_swrm_compute_params; ctrl->bus.clk_stop_timeout =3D 300; =20 - ret =3D qcom_swrm_get_port_config(ctrl); - if (ret) - goto err_clk; + if (of_property_match_string(dev->of_node, "qcom,multi-master-mode", + "dependent") < 0) { + ret =3D qcom_swrm_get_port_config(ctrl); + if (ret) + goto err_clk; + } + + if (of_property_match_string(dev->of_node, "qcom,multi-master-mode", "pri= mary") >=3D 0) { + ret =3D qcom_swrm_multi_master_setup(ctrl); + if (ret) + goto err_clk; + ctrl->is_primary =3D true; + } =20 params =3D &ctrl->bus.params; params->max_dr_freq =3D DEFAULT_CLK_FREQ; @@ -1689,6 +1810,16 @@ static int qcom_swrm_probe(struct platform_device *p= dev) ctrl->bus.controller_id =3D val; } =20 + if (of_property_match_string(dev->of_node, "qcom,multi-master-mode", "dep= endent") >=3D 0) { + ctrl->is_dependent =3D true; + dev_dbg(dev, + "Qualcomm SoundWire multi-master dependent v%x.%x.%x registered (%u lan= es)\n", + (ctrl->version >> 24) & 0xff, + (ctrl->version >> 16) & 0xff, + ctrl->version & 0xffff, ctrl->num_lanes); + return 0; + } + ret =3D sdw_bus_master_add(&ctrl->bus, dev, dev->fwnode); if (ret) { dev_err(dev, "Failed to register Soundwire controller (%d)\n", @@ -1696,7 +1827,11 @@ static int qcom_swrm_probe(struct platform_device *p= dev) goto err_clk; } =20 + if (ctrl->is_primary && ctrl->peer_ctrl) + qcom_swrm_init(ctrl->peer_ctrl); + qcom_swrm_init(ctrl); + wait_for_completion_timeout(&ctrl->enumeration, msecs_to_jiffies(TIMEOUT_MS)); ret =3D qcom_swrm_register_dais(ctrl); @@ -1733,7 +1868,13 @@ static void qcom_swrm_remove(struct platform_device = *pdev) { struct qcom_swrm_ctrl *ctrl =3D dev_get_drvdata(&pdev->dev); =20 - sdw_bus_master_delete(&ctrl->bus); + if (ctrl->is_primary && ctrl->peer_ctrl) { + ctrl->peer_ctrl->peer_ctrl =3D NULL; + ctrl->peer_ctrl =3D NULL; + } + + if (!ctrl->is_dependent) + sdw_bus_master_delete(&ctrl->bus); clk_disable_unprepare(ctrl->hclk); } =20 --=20 2.53.0 From nobody Fri Sep 25 14:31:03 2026 Received: from mx0b-0031df01.pphosted.com (mx0b-0031df01.pphosted.com [205.220.180.131]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id B315141A91B for ; Fri, 11 Sep 2026 08:21:38 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.180.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789114900; cv=none; b=sSzooXjMe9mr30NUtr4ATJGY5HUOj+9WndjH4obKnGLIGpLB2blHDlwvk5HXhFiSoLpXpjdyQJxJ3y657eh9ryjQZIemqp2zkZwKarTxXN+f/iTCYLWhX4aqpBur1R2GudSmQfQnXMiF+1mYaWjlxUe2pGEP0h1H2DJNH+7m2jw= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1789114900; c=relaxed/simple; bh=l7ErUg/Gg3Aom3MSmnZqch9BtbQc58QP4+xqEKE3pq0=; h=From:To:Cc:Subject:Date:Message-ID:In-Reply-To:References: MIME-Version; b=EMH78bWT31hOnjo9Pi1pWKoV504wRIawUVjVf2zHuV12iIGLUWZc+hIDcdCvQjvQdy0Pi5FTFgM6vvwm5mmM/vlqjWtzNKgHwfkXzeyLLl35w0mf04ix0P9zyj9tXbeP7Z6qMVI2nj2ntpKSWToYI9OVcOd/rDMO4Is8g8JDYr0= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com; spf=pass smtp.mailfrom=oss.qualcomm.com; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b=dyjGTbHz; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b=j43epbP6; arc=none smtp.client-ip=205.220.180.131 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=reject dis=none) header.from=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=oss.qualcomm.com Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=qualcomm.com header.i=@qualcomm.com header.b="dyjGTbHz"; dkim=pass (2048-bit key) header.d=oss.qualcomm.com header.i=@oss.qualcomm.com header.b="j43epbP6" Received: from pps.filterd (m0279868.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.11/8.18.1.11) with ESMTP id 68B7kqGn3366446 for ; Fri, 11 Sep 2026 08:21:37 GMT DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=qualcomm.com; h= cc:content-transfer-encoding:date:from:in-reply-to:message-id :mime-version:references:subject:to; s=qcppdkim1; bh=cF5pcE97r6I aBJP5DTSwQbf09nAuH6aMv0U0j9AZomc=; b=dyjGTbHzcwqlsFv9z2EfSSJG6Op nE7ku81E4gvgOdCSGrUPvs4a1+3R0IuC9qRh2I5jb3fuAl46zOMHYs19WM1PLmcC 8VYgfvfvyNhNVjwoe4EABNqTWV3SeKaPNsc0FYEu5EVwp6sDktwJmk5uGBJlZEPa JF6XSN2P/YPBZJXmbB2erjqQmkam/2LNScziLOyPqtVqpYD0ZsyCEGB520MJ77p7 vDC1icCu0X6mMPlfDjMsuPxc4sl/fc0CqDT1/fRNkU+juvj4K7wpHZDqNfkyc2j2 2iJA29G+2rcHCr/BtMI9DFCXTLnDpeyG17JxrOkfRVqzEzOxKOz70zzKUdA== Received: from mail-qv1-f69.google.com (mail-qv1-f69.google.com [209.85.219.69]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 4gm1k2au8u-1 (version=TLSv1.3 cipher=TLS_AES_128_GCM_SHA256 bits=128 verify=NOT) for ; Fri, 11 Sep 2026 08:21:36 +0000 (GMT) Received: by mail-qv1-f69.google.com with SMTP id 6a1803df08f44-91043af01d9so12037166d6.2 for ; Fri, 11 Sep 2026 01:21:36 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=oss.qualcomm.com; s=google; t=1789114896; x=1789719696; darn=vger.kernel.org; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:from:to:cc:subject:date :message-id:reply-to:content-type; bh=cF5pcE97r6IaBJP5DTSwQbf09nAuH6aMv0U0j9AZomc=; b=j43epbP62vx5tT7c3ybGGPI7pijKU2V+InUbeKjXFJbkXc/GB9B49nwNNt+FOrqSwR LkzuZtMb4GTy/oiUcMw7hvtAohvvSWe2DiusDw5+DTYbqAlbtNfJJ7HZJVxC9QMPzj/K YT/DIUsPOpMyxBazVzMSokFx1HfqKBxoGQoxVUM4BdBVISd+kf+PZs1rTKFz3d/yay2k 2ul5xf34IzTZZmHAVcD5lQOYJX89eg7udiYnd26W1kl84v3E+Ol6fFKmEGgI3Vb6GlBn DAGOvtyFw4g8q+ExyhVW9wOHr93xtHq0mw915L1OywUJGmVmedc3Bv9zmdyMWHNOd8mM WQPg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20251104; t=1789114896; x=1789719696; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-gg:x-gm-message-state:from :to:cc:subject:date:message-id:reply-to:content-type; bh=cF5pcE97r6IaBJP5DTSwQbf09nAuH6aMv0U0j9AZomc=; b=J51eOHQdbTfT9/Fw9TjjepNjZ24QuPVRA9WrdU0UMlEDrlrkc3EG7ca7SsTxB5ICf6 +Ukbgkka04/DuV1920cypxyuUehfYUea1yEwCDK52NvtOY63l70eJ3f8PkJJznyBEn0k mBISNQYlfIiXmUqqWINFAVNvyG10I0Z+MzI6NQBuLcUiGKFXAspSuCguBYjGXayrAH50 3wD4OBdt/i3bf8ZLFfN9J+cZSxrOVvuqvZPBE7paD0w5eBVBmdonAk+d8InxTJGD2RKk Id2bUPAXNeSkcT1Vxzb8hkLVZNQK1vbtOORDoNBOj8QHGSf753PSS4cs/WfnOI6MgAFV vVVg== X-Forwarded-Encrypted: i=1; AKwUvByOvNttMxa3bts33JDZZbyiDjkeTkepJw8N4PwGdPquk/CgPx6ELUJqoopk9ZYLCqpcErR021DjOrdYy+w=@vger.kernel.org X-Gm-Message-State: AFuF++mxbKsJFhUqHdoocYQxuNLx2dKgivrvkADaf0v5WVQvMi9UcSz0 atJTCIPpxIXKjIApJIJcQTUfIft3xdj6jtIU6uRIeGQfI8i2FZJck6XaACCpMnyLTvLSUzEvAhS ZEFDyo+0w+2weIzuITfihHK7wMDrffIU63r8Oh7zpvU5VAmH12pvDOvUtLXDw7ypEogI= X-Gm-Gg: AYBFou0UZxHlOP3aKme9oimNeQuXVnUIwLF3/8gi+V+Kixthy6J5rezYtixgzIv2uvG b7on9zw61uaAU+/LqKubg2ADztttxO9OXyniN4Im5Hz1WWVLuQvNrO0thEhlxEwxBYV53a5bfK2 qVxgwK1DByp90M/ruG3t/T6ohGMaSNfcmAZUnCMRfvFmFEqK1Qe2mPRw4N1lG+MUTLCDAARBoN5 Wr+6KJZhaBZnRNkkRFKEIvB1G9xC++59k2YJYxiuolnMN8u+vqKu4s00nLwNXs91tUQeRI2lA6S x0aOngTccGW2Wq6zqzVOBhgC7o6BkpHauKj56tmIcb1CVyq8mNiUgNDBufqLppOZPkgfet/K4fJ Ei8cRGSRJWyqbBA== X-Received: by 2002:a05:620a:2705:b0:939:ad19:c5a4 with SMTP id af79cd13be357-939ea2451camr345798885a.39.1789114896269; Fri, 11 Sep 2026 01:21:36 -0700 (PDT) X-Received: by 2002:a05:620a:2705:b0:939:ad19:c5a4 with SMTP id af79cd13be357-939ea2451camr345796385a.39.1789114895857; Fri, 11 Sep 2026 01:21:35 -0700 (PDT) Received: from debian ([5.133.47.210]) by smtp.gmail.com with ESMTPSA id ffacd0b85a97d-486eb34e608sm4488880f8f.23.2026.09.11.01.21.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Fri, 11 Sep 2026 01:21:35 -0700 (PDT) From: Srinivas Kandagatla To: robh@kernel.org, vkoul@kernel.org Cc: krzk+dt@kernel.org, conor+dt@kernel.org, srini@kernel.org, yung-chuan.liao@linux.intel.com, pierre-louis.bossart@linux.dev, prasad.kumpatla@oss.qualcomm.com, jingyi.wang@oss.qualcomm.com, sibi.sankar@oss.qualcomm.com, quic_srivasam@quicinc.com, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-sound@vger.kernel.org, Srinivas Kandagatla Subject: [PATCH 3/3] soundwire: qcom: program MM_SYNC for multi-master Date: Fri, 11 Sep 2026 09:21:11 +0100 Message-ID: X-Mailer: git-send-email 2.53.0 In-Reply-To: References: Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Transfer-Encoding: quoted-printable X-Authority-Analysis: v=2.4 cv=cM11IVeN c=1 sm=1 tr=0 ts=6aa3ba10 cx=c_pps a=wEM5vcRIz55oU/E2lInRtA==:117 a=ZsC4DHZuhs/kKio7QBcDoQ==:17 a=VdqzKS8jKosA:10 a=s4-Qcg_JpJYA:10 a=VkNPw1HP01LnGYTKEx00:22 a=u7WPNUs3qKkmUXheDGA7:22 a=ZpdpYltYx_vBUK5n70dp:22 a=EUspDBNiAAAA:8 a=c7LmfZLfTtV-q45nPo4A:9 a=OIgjcC2v60KrkQgK7BGD:22 X-Proofpoint-GUID: XfAhyNPp3SKkKOtLnX_-C7QxTRmYI9_l X-Proofpoint-Spam-Info: AW1haW4tMjYwOTExMDExNiBTYWx0ZWRfX9/JzCzUNxatY QBs5u2AXB+hKeD0Ese9qJESrnAv9GfVA5Zf3PYvp3a7rinlp9X7vA3g2E4KiSyfUbb3dbyACs/U /sIn7PMuCCYRo7b0PWYtaNiDEpHs7ek= X-Proofpoint-Spam-Details-Enc: AW1haW4tMjYwOTExMDExNiBTYWx0ZWRfX/lVZ5ksVCwNC o9XZKM5Ob+wuBl9xwTfJNevDtQu3/lbM40WN5CFN5tSPa1TWlzOb+GJgqXsnFwUeSPY2qIxS88X 4NoHj81ju98Sri1ZtR48/28A+WoVsa8w3pOls08agkXKKNXcRJh7w2k1adrHiG6NpxDzcCmETZ1 ba2yKfof2kyZ3ASHa3l6qkMMj6bP/wML07llE6+0yugPYjmneRYcblCCRlGZRcKVRV+6V9QKOZ3 tmAGXeDgEd+8KFBXnNA00ZgX1ytQYBzCaBV477y5vm/B9SoN+MgJA6SUI48/xL83OfGWL2Mywk2 Uh6StibKwbYrbNg+PtLIwYWH+srFLzieEyfyyKYbfRJhLIUbe5dw1lkDMVjd5Ih9cXolTB8Up5N sNmrper7ftO/9LSK8iJwAanD5jTMqIbHAh2mRUqHAN/hCf3jMfaV6iOoVVO/BmkNpa21XEbPhdr hWLeYoFDNFSyM0BPxlA== X-Proofpoint-ORIG-GUID: XfAhyNPp3SKkKOtLnX_-C7QxTRmYI9_l X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1176,Hydra:6.1.134,FMLib:17.12.100.49 definitions=2026-09-11_03,2026-09-09_02,2025-10-01_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 phishscore=0 lowpriorityscore=0 clxscore=1015 adultscore=0 bulkscore=0 priorityscore=1501 impostorscore=0 malwarescore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.22.0-2609040000 definitions=main-2609110116 Content-Type: text/plain; charset="utf-8" The primary and dependent frame generators must lock to a single SWR_CLK for the shared bus to run. Program SWRM_V3_MM_SYNC_CONFIG on both sides at init, and re-apply on resume as the register does not survive a clock stop. Signed-off-by: Srinivas Kandagatla --- drivers/soundwire/qcom.c | 47 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) diff --git a/drivers/soundwire/qcom.c b/drivers/soundwire/qcom.c index a5f39868161a..3b9b1a53b082 100644 --- a/drivers/soundwire/qcom.c +++ b/drivers/soundwire/qcom.c @@ -46,6 +46,18 @@ #define SWRM_V3_COMP_PARAMS_RD_FIFO_DEPTH GENMASK(23, 18) =20 #define SWRM_COMP_MASTER_ID 0x104 + +#define SWRM_V3_MM_SYNC_CONFIG 0x108 +#define SWRM_V3_MM_SYNC_CONNECTED_MASTER_MASK GENMASK(15, 0) +#define SWRM_V3_MM_SYNC_IS_DEPENDENT_MASTER BIT(16) +#define SWRM_V3_MM_SYNC_MASK_CONTROL_BITS BIT(17) + +#define SWRM_V3_COMP_FEATURE_CFG 0x10 +#define SWRM_V3_COMP_FEATURE_CFG_BASE 0x00E +#define SWRM_V3_COMP_FEATURE_CFG_FORCE_MODE_EN BIT(9) +#define SWRM_V3_COMP_FEATURE_CFG_CLK_PIN_AVAIL BIT(10) +#define SWRM_V3_COMP_FEATURE_CFG_CLK_STOP_EXEC_ON_CMD_IGNORE BIT(12) + #define SWRM_V1_3_INTERRUPT_STATUS 0x200 #define SWRM_V2_0_INTERRUPT_STATUS 0x5000 #define SWRM_INTERRUPT_STATUS_RMSK GENMASK(16, 0) @@ -892,6 +904,37 @@ static bool swrm_wait_for_frame_gen_enabled(struct qco= m_swrm_ctrl *ctrl) return false; } =20 +static void qcom_swrm_program_mm_sync(struct qcom_swrm_ctrl *ctrl) +{ + struct qcom_swrm_ctrl *peer =3D ctrl->peer_ctrl; + u32 conn_mask; + + if (!peer) + return; + + conn_mask =3D BIT(peer->bus.controller_id - 1) & + SWRM_V3_MM_SYNC_CONNECTED_MASTER_MASK; + + if (ctrl->is_primary) { + ctrl->reg_write(ctrl, SWRM_V3_MM_SYNC_CONFIG, conn_mask); + ctrl->reg_write(ctrl, SWRM_V3_COMP_FEATURE_CFG, + SWRM_V3_COMP_FEATURE_CFG_BASE | + SWRM_V3_COMP_FEATURE_CFG_FORCE_MODE_EN | + SWRM_V3_COMP_FEATURE_CFG_CLK_PIN_AVAIL | + SWRM_V3_COMP_FEATURE_CFG_CLK_STOP_EXEC_ON_CMD_IGNORE); + return; + } + + ctrl->reg_write(ctrl, SWRM_V3_MM_SYNC_CONFIG, + SWRM_V3_MM_SYNC_IS_DEPENDENT_MASTER | + SWRM_V3_MM_SYNC_MASK_CONTROL_BITS | conn_mask); + + ctrl->reg_write(ctrl, SWRM_V3_COMP_FEATURE_CFG, + SWRM_V3_COMP_FEATURE_CFG_BASE | + SWRM_V3_COMP_FEATURE_CFG_FORCE_MODE_EN | + SWRM_V3_COMP_FEATURE_CFG_CLK_STOP_EXEC_ON_CMD_IGNORE); +} + static int qcom_swrm_init(struct qcom_swrm_ctrl *ctrl) { u32 val; @@ -918,6 +961,8 @@ static int qcom_swrm_init(struct qcom_swrm_ctrl *ctrl) u32p_replace_bits(&val, SWRM_DEF_CMD_NO_PINGS, SWRM_MCP_CFG_MAX_NUM_OF_CM= D_NO_PINGS_BMSK); ctrl->reg_write(ctrl, SWRM_MCP_CFG_ADDR, val); =20 + qcom_swrm_program_mm_sync(ctrl); + if (ctrl->version =3D=3D SWRM_VERSION_1_7_0) { ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, @@ -1909,6 +1954,8 @@ static int __maybe_unused swrm_runtime_resume(struct = device *dev) } else { reset_control_reset(ctrl->audio_cgcr); =20 + qcom_swrm_program_mm_sync(ctrl); + if (ctrl->version =3D=3D SWRM_VERSION_1_7_0) { ctrl->reg_write(ctrl, SWRM_LINK_MANAGER_EE, SWRM_EE_CPU); ctrl->reg_write(ctrl, SWRM_MCP_BUS_CTRL, --=20 2.53.0