From nobody Thu Oct 2 20:44:35 2025 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 8E9BE223DCF for ; Thu, 11 Sep 2025 04:33:16 +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=1757565199; cv=none; b=Yw1bhvMr3oKlkss8w6egaGx/xDoTSKjCzY99Y8PBejIrKoJhMeJjBc5OUPnFkefLq5U4SxjSKhD0MoKNA0mR24juNKUlRqQIPTn9EBIY6hM2Ue7RU0XknTqjGaDo9/jFHXX4qlCdxEl1H/aGk0iBLtfUvslNRiDugHGSV/DvDEE= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757565199; c=relaxed/simple; bh=u7L/ieaGhg4FYoxkoZgFlr/WX/CxQuv2qx3g+1jNhws=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Qp/zTuwG9HT7Tz4C2fTK8RZWoPR2L2d7QylNzuhYSub/6up6PCLcf1d1dd4bVJC1hzYKSgiFtbjmXzKaEMX7tIYMv9qTj72LsAVS2iai0iar48+RbcuIu6h9hvR+NRsenTImLtCXhQakZYK9K3cuwDf22dl+W7a4XqIuIF8gP7k= 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=TG60qSEf; 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="TG60qSEf" Received: from pps.filterd (m0279873.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58B2IfCE008244 for ; Thu, 11 Sep 2025 04:33:15 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=DURBzBBWh6H a/g16FF3Bk+BqdvbZOIe8eGRq/1RrkqA=; b=TG60qSEfMGTnbcblhWQlKtVl3w2 Zt863BcUs6nCudlRypR73atLy36H3MyvP56cOJDC+pO0cICzA1g7yI53aKhpM7JP gW0D1ijnB3zyXYMgcxqhVH6vq9ER+ez5uqvS6xPGLtR/+LWvLRYA32SiXS21ds3C 06Ua0T1G1vmkVEYc6e0snyZ3SVi++9rFquwPMuknPD9Laj+l0SPjtzfK4jgRXpAQ wCPjrhL3X7/PrbnoB2VwaeU00y1dF1f5I0RYNcOOA3MFX8Fa9MzVHhgql0dPkgpL 3KT9KQjX1Y1dsngulspklBL5q6Mr2n08HjEXeqmOxX5YViFx4fjgrFEnsGQ== Received: from mail-pg1-f199.google.com (mail-pg1-f199.google.com [209.85.215.199]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 490aapph01-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 11 Sep 2025 04:33:15 +0000 (GMT) Received: by mail-pg1-f199.google.com with SMTP id 41be03b00d2f7-b4e63a34f3fso263680a12.1 for ; Wed, 10 Sep 2025 21:33:15 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757565194; x=1758169994; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DURBzBBWh6Ha/g16FF3Bk+BqdvbZOIe8eGRq/1RrkqA=; b=ZWDLCYQj4osc+vU5InEOOXSezYwQdQEUGtXsu4qcRaXVxmq8ylVn4EOmNhDBIcPjvK hPUPrz1yRCdSdGrnmgc9/bW1vCVPtDloAGGSJbyTzXIC1htQVTV9ifR+4/vjrKIaykhk NnvWxeUyFrhcvfb11KXdk7fXVsoDoofPBLw+NOP53qV7ujpFhzVgzIumgyVWFQba3XGG SuZmRFzR0TyT551y4imSC7hGqXO227Q8sRSNEaszZB7krWbeMA7VKsLoLrf9hMn0DE2+ hMH7J39F9bChmO0Ev2nf8+UFBHPoHAr6091L426T3n/l2enRpNpGXEkm9GowMr9g5zzg dDpg== X-Forwarded-Encrypted: i=1; AJvYcCXSVbHbRn3viR8jy5IG0tS8GMxGVDybCgij8Le53u7PjFtHG1fnmtuzZQyCi3o4r8gSMo3797LVHFWzLmI=@vger.kernel.org X-Gm-Message-State: AOJu0Yws8ds+0V4+uWwU81IMXuQUUTEPLmbxyEZX7HOApAhRVtChSRW/ Z34MhzHrx74XScBR2TgYqhiVryCbNylDJaUH4zc+LSFNfxP/ypntyooNx7AJcp0lzD+hrfEkRfI z7YeD38JAOzAzKdgDGMFh1I9LL21RBn2UCXg/CDD5IPAQWymfvCvb8DKavnFoWtJl9DE= X-Gm-Gg: ASbGncsPlF4Irq9pmetdGXP5mk2prHx+pLuH9SNE0tF04fcoLrMpLEtlyV3QxSfOP7n 9Gmw7sftNFcUnq2f4jJg10TP9i7tDncnftoTMhLEAVRErQH/dnyLrPxkBUp7eW+YhkHrsi1GbHV yCAD2rIfmUDKKuzFsoWmXxsofpQgfunZT4g+knYdT08avEndg6f5hIGRk01aYy+adf2JfJl2KdI iy8LO0m16+4+xbSnKY1zIzmsSqpRZ4YjGWwuoN9Ne75GZ2ysmLyE5Dli6eDqU/WnAn2XjXB565M 40HBDLw64FskoCxWUwfEA7mNDr+meN1WjlCwjukVMuB5x9m3RdGeEHhspOFDS86cqsycF/m1ffO b X-Received: by 2002:a17:903:1a30:b0:24e:2b3d:bb08 with SMTP id d9443c01a7336-2516fbdd4c2mr215944595ad.20.1757565193999; Wed, 10 Sep 2025 21:33:13 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEtCrX3AKAjoCMmmGRU8ktHUd/jdfd6KhBt3qxvC7mXIES1EQNisq1Z7vaS59E64uyx449xpA== X-Received: by 2002:a17:903:1a30:b0:24e:2b3d:bb08 with SMTP id d9443c01a7336-2516fbdd4c2mr215944275ad.20.1757565193511; Wed, 10 Sep 2025 21:33:13 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3a84a46csm4323975ad.91.2025.09.10.21.33.07 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 21:33:13 -0700 (PDT) From: Viken Dadhaniya To: andi.shyti@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, andersson@kernel.org, konradybcio@kernel.org, broonie@kernel.org, johan+linaro@kernel.org, dianders@chromium.org, agross@kernel.org, linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, linux-spi@vger.kernel.org Cc: mukesh.savaliya@oss.qualcomm.com, Viken Dadhaniya , Krzysztof Kozlowski Subject: [PATCH v7 1/6] dt-bindings: qcom: se-common: Add QUP Peripheral-specific properties for I2C, SPI, and SERIAL bus Date: Thu, 11 Sep 2025 10:02:51 +0530 Message-Id: <20250911043256.3523057-2-viken.dadhaniya@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> References: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> 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=eMETjGp1 c=1 sm=1 tr=0 ts=68c2510b cx=c_pps a=Oh5Dbbf/trHjhBongsHeRQ==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=yJojWOMRYYMA:10 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=COk6AnOGAAAA:8 a=gEfo2CItAAAA:8 a=KKAkSRfTAAAA:8 a=M1Du_JTgEIh7wHf307cA:9 a=_Vgx9l1VpLgwpw_dHYaR:22 a=TjNXssC_j7lpFel5tvFf:22 a=sptkURWiP4Gy88Gu7hUp:22 a=cvBusfyB2V15izCimMoJ:22 X-Proofpoint-GUID: Onu_eVWzHh8AFJ42fjp10Wagse8i95ga X-Proofpoint-ORIG-GUID: Onu_eVWzHh8AFJ42fjp10Wagse8i95ga X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTA2MDAwMCBTYWx0ZWRfX6JuaqvWX6d7p QYCtPkxlgbVVY2NdDWxAsDuqu1xieEZ0oJDbCAMVeqp+NOuf0PNh0XiO9+ISdEZAJDfsXBV5itr /lCnsTaLDrAPRpob2pv0DZB6ycO3OvWLtwF8OqGGszxRG3ySabJqsydFerdckmx+nbaDC0lVDvX F+yMDmFOtCKe3nuoQwaSRBeAFQ7WaCtxH8O26UpIWyP5+41YfbVw1gzUEVTxJFyfStBzcSVhLvf pRplyhOTz8FXu8wW0VKEbhzEXYoDNnJJXkK1M3+8hvfFwhGF6xKWu7iD40LF/mAOfWUE/B5skW2 YghoShkEPhKWHcElRRVy5wTVdRpUw1m+tnOnnQ+5+/rF5UtrihJO6b6cT9ezkTqJDaaZxRaSk4R 1NCFfNz2 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-10_04,2025-09-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 priorityscore=1501 malwarescore=0 clxscore=1015 adultscore=0 bulkscore=0 phishscore=0 spamscore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509060000 Content-Type: text/plain; charset="utf-8" Introduce a new YAML schema for QUP-supported peripherals. Define common properties used across QUP-supported peripherals. Add property `qcom,enable-gsi-dma` to configure the Serial Engine (SE) for QCOM GPI DMA mode. Reference the common schema YAML in the GENI I2C, SPI, and SERIAL YAML files. Reviewed-by: Krzysztof Kozlowski Co-developed-by: Mukesh Kumar Savaliya Signed-off-by: Mukesh Kumar Savaliya Signed-off-by: Viken Dadhaniya --- v6 -> v7: - No change. v6 Link: https://lore.kernel.org/all/20250822072651.510027-2-viken.dadhaniy= a@oss.qualcomm.com/ v5 -> v6: - No change. v5 Link: https://lore.kernel.org/linux-i2c/20250624095102.1587580-2-viken.d= adhaniya@oss.qualcomm.com/ v4 -> v5: - Add Reviewed-by tag. - Update the email domain from 'quic' to 'oss'. v4 Link: https://lore.kernel.org/all/20250503111029.3583807-2-quic_vdadhani= @quicinc.com/ v3 -> v4: - Update qcom,gsi-dma-allowed property name to qcom,enable-gsi-dma. - Remove full stop form title. - Add reference of common schema YAML in the I2C, SPI, and SERIAL YAML file= s. v3 Link: https://lore.kernel.org/linux-arm-msm/20250303124349.3474185-3-qui= c_vdadhani@quicinc.com/ --- --- .../bindings/i2c/qcom,i2c-geni-qcom.yaml | 1 + .../serial/qcom,serial-geni-qcom.yaml | 1 + .../soc/qcom/qcom,se-common-props.yaml | 26 +++++++++++++++++++ .../bindings/spi/qcom,spi-geni-qcom.yaml | 1 + 4 files changed, 29 insertions(+) create mode 100644 Documentation/devicetree/bindings/soc/qcom/qcom,se-comm= on-props.yaml diff --git a/Documentation/devicetree/bindings/i2c/qcom,i2c-geni-qcom.yaml = b/Documentation/devicetree/bindings/i2c/qcom,i2c-geni-qcom.yaml index 9f66a3bb1f80..51534953a69c 100644 --- a/Documentation/devicetree/bindings/i2c/qcom,i2c-geni-qcom.yaml +++ b/Documentation/devicetree/bindings/i2c/qcom,i2c-geni-qcom.yaml @@ -75,6 +75,7 @@ required: =20 allOf: - $ref: /schemas/i2c/i2c-controller.yaml# + - $ref: /schemas/soc/qcom/qcom,se-common-props.yaml# - if: properties: compatible: diff --git a/Documentation/devicetree/bindings/serial/qcom,serial-geni-qcom= .yaml b/Documentation/devicetree/bindings/serial/qcom,serial-geni-qcom.yaml index dd33794b3534..ed7b3909d87d 100644 --- a/Documentation/devicetree/bindings/serial/qcom,serial-geni-qcom.yaml +++ b/Documentation/devicetree/bindings/serial/qcom,serial-geni-qcom.yaml @@ -12,6 +12,7 @@ maintainers: =20 allOf: - $ref: /schemas/serial/serial.yaml# + - $ref: /schemas/soc/qcom/qcom,se-common-props.yaml# =20 properties: compatible: diff --git a/Documentation/devicetree/bindings/soc/qcom/qcom,se-common-prop= s.yaml b/Documentation/devicetree/bindings/soc/qcom/qcom,se-common-props.ya= ml new file mode 100644 index 000000000000..6a34f05a07e8 --- /dev/null +++ b/Documentation/devicetree/bindings/soc/qcom/qcom,se-common-props.yaml @@ -0,0 +1,26 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/soc/qcom/qcom,se-common-props.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: QUP Peripheral-specific properties for I2C, SPI and SERIAL bus + +description: + The Generic Interface (GENI) based Qualcomm Universal Peripheral (QUP) is + a programmable module that supports a wide range of serial interfaces + such as UART, SPI, I2C, I3C, etc. This defines the common properties used + across QUP-supported peripherals. + +maintainers: + - Mukesh Kumar Savaliya + - Viken Dadhaniya + +properties: + qcom,enable-gsi-dma: + $ref: /schemas/types.yaml#/definitions/flag + description: + Configure the Serial Engine (SE) to transfer data in QCOM GPI DMA mo= de. + By default, FIFO mode (PIO/CPU DMA) will be selected. + +additionalProperties: true diff --git a/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml = b/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml index 2e20ca313ec1..d12c5a060ed0 100644 --- a/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml +++ b/Documentation/devicetree/bindings/spi/qcom,spi-geni-qcom.yaml @@ -25,6 +25,7 @@ description: =20 allOf: - $ref: /schemas/spi/spi-controller.yaml# + - $ref: /schemas/soc/qcom/qcom,se-common-props.yaml# =20 properties: compatible: --=20 2.34.1 From nobody Thu Oct 2 20:44:35 2025 Received: from mx0a-0031df01.pphosted.com (mx0a-0031df01.pphosted.com [205.220.168.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 3A024247280 for ; Thu, 11 Sep 2025 04:33:23 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=205.220.168.131 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757565204; cv=none; b=LPw3XvUP/36CY2A6yioYiMiKUO90xLUN8yjRYcb60t4K91IAU/3Kt9rV44wxf7z9fE2DdKMufGBoeNnwpHsdU+qkE/5vIIPs+i7lCBXF1Qeo1FUkypX7bYVg6m1vFe3dbaTQAMT+4nGCJsWG1Hd2HhIPYFWgLE2HIGbRPhdGViQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757565204; c=relaxed/simple; bh=xw0q4NcwHHSieNerwzr051tx91leTFsT79dNH6hi6Gk=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Dhx+hbKmDKyZSXrmhApBrG+CKmZdI4gP51HZ+R6ch2/wwBZaNyaZbOygqCEcpTPctfTh/lKrEECqovBIrcvmIp7irjP+eteK0o60vfXnu3dVyH5TkCrpoD7uF2HtjUiH7BA3T+YOYLW7CWJqsVrInZvyQsMvN2WLq//pKB28YXY= 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=ofz02RjW; arc=none smtp.client-ip=205.220.168.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="ofz02RjW" Received: from pps.filterd (m0279866.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58B2J1pw007124 for ; Thu, 11 Sep 2025 04:33:22 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=ejmKrdCNEld h2vZcjwyV0oT0m8cVWo38CkmzCmn2HDo=; b=ofz02RjW3/Zp/XxDwwQwsWRh8A/ SMmjQ45uby2p2n4TTjO+Ix6NIBQGWRNYFOeKfeSvJ98DM0G5dni/aGoTn6+1yGej aWSxJWCcmedhe5arx0mksRCixBTz83mG/FJKX/GmuEZOqq3SqM6+ietIyJlw9Bso lm3wVgDL1W/sD9tDv5kcQACEwA1wC0cNSDf/EiuAMhLVWFLMrTWRWgG/0heJEyLW WloZsjo64syjDmIWx6s4pLplhbzCjpx8jXZQzsmtSCS8XSj50wE8iIl+tXACfRsI z7C7vAOkJZKqFAlhi0+zK2ik21zBeMGYPZICBmB+eiO+25edwnPvDncqDBA== Received: from mail-pg1-f197.google.com (mail-pg1-f197.google.com [209.85.215.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 490e8ae6yy-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 11 Sep 2025 04:33:22 +0000 (GMT) Received: by mail-pg1-f197.google.com with SMTP id 41be03b00d2f7-b5242b0f450so261428a12.0 for ; Wed, 10 Sep 2025 21:33:22 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757565201; x=1758170001; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=ejmKrdCNEldh2vZcjwyV0oT0m8cVWo38CkmzCmn2HDo=; b=mUO+4woIAWjlXaqqI01W5xY2+ZAW39IVEVcB3x5dUlJBgfGtP/zk5lMAAFqioDu6Gl C0Sp5kq0lI+npuqhY4lRJElZJYpPnEkAbf+CXZp972jWh0/qHwgVx8q4WjiAMIqiTdVe ntlWh5nvOxljLcbM9Yq5YdNUJFklHlB9PqFkaRuMg2uFWVZbkWuNmFcsdGl7kmdX3yBP Zq7GNz/FOcRdnpvhAnK6MyGGWXhvKqfV2qFd+zPgEO1EhThIPbJgqNLTMsPv5jFpjjD6 wyyNnwi0UWIO8ZsUET8hIvH/0FkyGyMCINcYLod1i/65ShfaHg274+VN3TQU6IZLyW85 rsmA== X-Forwarded-Encrypted: i=1; AJvYcCU1FNfqoHXIESqakljq1qG4aR1R063MqIvrhlcVbKGpwxmONgWHaP2qZ8veaQvYB3o1ljrmo+Ey+dYNeew=@vger.kernel.org X-Gm-Message-State: AOJu0YweBvSkoqbO20W8Tf/yUSBEVzSoLYOFUiKlsPUngNx51qPrvwQu 9H2aW2sBRo78S3xjLUuO7Y0IxpraCPN4aeLmM+C8/hgYrlQPE/hZw0Tb7sBgL66oCVjdXLYNsae PobHh0iTfzg6T9zaWd1xXjOy+lnmG4i+cBgilSfVzZfgJmRYiMQ41pNMNN4sf/zVeWWQ= X-Gm-Gg: ASbGncsW6q+Ud+Sj7dLQW4Z2nzPV5MYFzxbpCr/D35hNuP0FlMaA7mzMN8PelQQNg80 1R/NNAQ6leW4FtX8o2KoJ3VG9IuePm3cXNR9BccdFq2RpU+kPeTfe6lYF9/tzh3kUW6H42LEnQY OICttXyUzYNF3IofV6bX14Qs9A3QW0ymnXBNxw8Ab+37tZ9uvMc/q/F7YAijAgUaDMQ7Y1Gx/VD mnDFoimngraNSMclbvLEiCjhisKJD+dytBHpWUrju0ZDpsXS3Z1EAvsCVX0YuzOGf62MoIYcnKV 765sBaou0xteFaKoBMoh2Y/wotriT524h+7J5g8msz4C/RD+SDs/1LGQNgsf8Q8haZsDFBfyLle e X-Received: by 2002:a17:902:d60f:b0:248:6d1a:4304 with SMTP id d9443c01a7336-251715f313fmr234729755ad.38.1757565201171; Wed, 10 Sep 2025 21:33:21 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFJ7A0F6WCIjNO2Y/9hW5CAwxfdYIL+kP6hhmDpJXN4sGHF3R8Sfwt9fcXfmuZlD03HByRPUQ== X-Received: by 2002:a17:902:d60f:b0:248:6d1a:4304 with SMTP id d9443c01a7336-251715f313fmr234729435ad.38.1757565200678; Wed, 10 Sep 2025 21:33:20 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3a84a46csm4323975ad.91.2025.09.10.21.33.15 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 21:33:20 -0700 (PDT) From: Viken Dadhaniya To: andi.shyti@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, andersson@kernel.org, konradybcio@kernel.org, broonie@kernel.org, johan+linaro@kernel.org, dianders@chromium.org, agross@kernel.org, linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, linux-spi@vger.kernel.org Cc: mukesh.savaliya@oss.qualcomm.com, Viken Dadhaniya Subject: [PATCH v7 2/6] soc: qcom: geni-se: Cleanup register defines and update copyright Date: Thu, 11 Sep 2025 10:02:52 +0530 Message-Id: <20250911043256.3523057-3-viken.dadhaniya@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> References: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> 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=H7Dbw/Yi c=1 sm=1 tr=0 ts=68c25112 cx=c_pps a=rz3CxIlbcmazkYymdCej/Q==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=yJojWOMRYYMA:10 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=cWaLTDLleWsxmrQceUoA:9 a=bFCP_H2QrGi7Okbo017w:22 X-Proofpoint-GUID: EMw3rGOdX9V6K1E2AhjS6PT6aeDhJfGX X-Proofpoint-ORIG-GUID: EMw3rGOdX9V6K1E2AhjS6PT6aeDhJfGX X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTA2MDAzOSBTYWx0ZWRfX9sBvr2Aebtn6 s2fVxMjpx7EaXZGFyFHmsD/h2ejlMoYe2lssMGNEtXye2/JSvY2cZyP3C/KQhTaOTnwLedtCbUQ jT3DG5vVT7k+sevIqs4RZW9DMSgj0Zh8jkGcv5pL+KGjPspKdXq98MZj0j98740xOmSygnTLO9D mG+uGXOJYdl4i1xgDixXwlw/RkcD7FnZDuSdtdMxn+t+DnQgySG6IymzF1UqGhvbXcMRG9uC/kF f/hEokNw+zCEeOkItlof9NNU4YO/GYvhRkBst0r8SQzIgSXJn2o3IkExqX9ANVSSUqiQptS2wd5 32NBfRJZHTugHAivi46e6tRMKzMudMxoDF1U0OhiiosI02XEWTjH9hng7BRGB6nsIHNyNHmjMzB 72GE65pJ X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-10_04,2025-09-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 malwarescore=0 bulkscore=0 impostorscore=0 adultscore=0 phishscore=0 clxscore=1015 suspectscore=0 priorityscore=1501 spamscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509060039 Content-Type: text/plain; charset="utf-8" Refactor register macros for consistency and clarity and remove redundant definitions and update naming for better alignment. Update copyright to include Qualcomm Technologies, Inc. Signed-off-by: Viken Dadhaniya --- v6 -> v7 - No change. v6 Link: https://lore.kernel.org/all/20250822072651.510027-3-viken.dadhaniy= a@oss.qualcomm.com/ --- --- drivers/soc/qcom/qcom-geni-se.c | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/drivers/soc/qcom/qcom-geni-se.c b/drivers/soc/qcom/qcom-geni-s= e.c index 3c3b796333a6..e8ab2833815e 100644 --- a/drivers/soc/qcom/qcom-geni-se.c +++ b/drivers/soc/qcom/qcom-geni-se.c @@ -1,5 +1,8 @@ // SPDX-License-Identifier: GPL-2.0 -// Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. +/* + * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. + */ =20 /* Disable MMIO tracing to prevent excessive logging of unwanted MMIO trac= es */ #define __DISABLE_TRACE_MMIO__ @@ -110,22 +113,20 @@ struct geni_se_desc { static const char * const icc_path_names[] =3D {"qup-core", "qup-config", "qup-memory"}; =20 -#define QUP_HW_VER_REG 0x4 +/* Common QUPV3 registers */ +#define QUPV3_HW_VER_REG 0x4 =20 /* Common SE registers */ -#define GENI_INIT_CFG_REVISION 0x0 -#define GENI_S_INIT_CFG_REVISION 0x4 -#define GENI_OUTPUT_CTRL 0x24 -#define GENI_CGC_CTRL 0x28 -#define GENI_CLK_CTRL_RO 0x60 -#define GENI_FW_S_REVISION_RO 0x6c +#define SE_GENI_INIT_CFG_REVISION 0x0 +#define SE_GENI_S_INIT_CFG_REVISION 0x4 +#define SE_GENI_CGC_CTRL 0x28 +#define SE_GENI_CLK_CTRL_RO 0x60 +#define SE_GENI_FW_S_REVISION_RO 0x6c #define SE_GENI_BYTE_GRAN 0x254 #define SE_GENI_TX_PACKING_CFG0 0x260 #define SE_GENI_TX_PACKING_CFG1 0x264 #define SE_GENI_RX_PACKING_CFG0 0x284 #define SE_GENI_RX_PACKING_CFG1 0x288 -#define SE_GENI_M_GP_LENGTH 0x910 -#define SE_GENI_S_GP_LENGTH 0x914 #define SE_DMA_TX_PTR_L 0xc30 #define SE_DMA_TX_PTR_H 0xc34 #define SE_DMA_TX_ATTR 0xc38 @@ -142,7 +143,6 @@ static const char * const icc_path_names[] =3D {"qup-co= re", "qup-config", #define SE_DMA_RX_IRQ_EN 0xd48 #define SE_DMA_RX_IRQ_EN_SET 0xd4c #define SE_DMA_RX_IRQ_EN_CLR 0xd50 -#define SE_DMA_RX_LEN_IN 0xd54 #define SE_DMA_RX_MAX_BURST 0xd5c #define SE_DMA_RX_FLUSH 0xd60 #define SE_GSI_EVENT_EN 0xe18 @@ -179,7 +179,7 @@ static const char * const icc_path_names[] =3D {"qup-co= re", "qup-config", /* SE_DMA_GENERAL_CFG */ #define DMA_RX_CLK_CGC_ON BIT(0) #define DMA_TX_CLK_CGC_ON BIT(1) -#define DMA_AHB_SLV_CFG_ON BIT(2) +#define DMA_AHB_SLV_CLK_CGC_ON BIT(2) #define AHB_SEC_SLV_CLK_CGC_ON BIT(3) #define DUMMY_RX_NON_BUFFERABLE BIT(4) #define RX_DMA_ZERO_PADDING_EN BIT(5) @@ -196,7 +196,7 @@ u32 geni_se_get_qup_hw_version(struct geni_se *se) { struct geni_wrapper *wrapper =3D se->wrapper; =20 - return readl_relaxed(wrapper->base + QUP_HW_VER_REG); + return readl_relaxed(wrapper->base + QUPV3_HW_VER_REG); } EXPORT_SYMBOL_GPL(geni_se_get_qup_hw_version); =20 @@ -220,12 +220,12 @@ static void geni_se_io_init(void __iomem *base) { u32 val; =20 - val =3D readl_relaxed(base + GENI_CGC_CTRL); + val =3D readl_relaxed(base + SE_GENI_CGC_CTRL); val |=3D DEFAULT_CGC_EN; - writel_relaxed(val, base + GENI_CGC_CTRL); + writel_relaxed(val, base + SE_GENI_CGC_CTRL); =20 val =3D readl_relaxed(base + SE_DMA_GENERAL_CFG); - val |=3D AHB_SEC_SLV_CLK_CGC_ON | DMA_AHB_SLV_CFG_ON; + val |=3D AHB_SEC_SLV_CLK_CGC_ON | DMA_AHB_SLV_CLK_CGC_ON; val |=3D DMA_TX_CLK_CGC_ON | DMA_RX_CLK_CGC_ON; writel_relaxed(val, base + SE_DMA_GENERAL_CFG); =20 --=20 2.34.1 From nobody Thu Oct 2 20:44:35 2025 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 0098C247280 for ; Thu, 11 Sep 2025 04:33:30 +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=1757565214; cv=none; b=W7mGN1MYfvcLGqsdoXCrXzPt2Ly7ct4tVY8M6mrvRRybof8TVnyQVcbhce/zHz3lZauqC6ZTRVQpJZ+PSMEPpCoIGJWeG7W/ATlnL5Z3/xDyOvMtCMIRkJJILI3hoOmeFlemqK3gZY7omPWq/MvrhjYk8W/cK9U6F/X7GF/tn6A= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757565214; c=relaxed/simple; bh=IuTTTz5P3pT6aIgjEgLPAZ4eCiWbYIdkJr6qIq4sSeU=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=KickEqpnJ/ih0TiLUUkVi9v5bsVTMt80BcKdAsVwi/+9PXC83L7JKJs6XweaPzDNRwYltQYSqymGuZ40u7dUHZ/GZ22QRgJyiBperR/5E0X0YbzOpTxA2ORzLN8zZBtLsb40ae0GwF/TjntWQAZoHe02WpPJQQYsjWxXCti0Rug= 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=FYW/t4EY; 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="FYW/t4EY" Received: from pps.filterd (m0279870.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58B2IbmE005468 for ; Thu, 11 Sep 2025 04:33:30 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=vG8gSd80zTK yqq0gSzZBIRZdPsyehnM9UQ31oy6XLek=; b=FYW/t4EYsNovxMxy8CE4J7jTurc gO9MAVZa9WowG0FShjw2D8F95YdbmerEBlpaM8S+gkXcJGZJms4sJUx2oPW6jKrB jg3IO3zKXHWfpWEAX6OdnroUbXbjrFLxdn7Jm3zetKG/xynaJUu4dpLGGMCEVF5I 5HQWKubmOsPZPyobHL25QR6zB4RG2gHRNzTNN0pOrkLIe/pJbDAZoo8othu4BqkV t2dNKcKhuVAi2mweaUHj2P5iu9OH6CHrFfL1trsvLJOwxLuS6v9U6uzlxzAOFVKT Mb+CtbWA7kf1QcgU6DTPQDYmHnm79LEN6euraGq0eUt43nKkAlK1RPjo+Bg== Received: from mail-pl1-f198.google.com (mail-pl1-f198.google.com [209.85.214.198]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 491vc2a9ts-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 11 Sep 2025 04:33:29 +0000 (GMT) Received: by mail-pl1-f198.google.com with SMTP id d9443c01a7336-24ced7cfa07so3472635ad.1 for ; Wed, 10 Sep 2025 21:33:29 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757565208; x=1758170008; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=vG8gSd80zTKyqq0gSzZBIRZdPsyehnM9UQ31oy6XLek=; b=Idl3sw9PvLn7blxcew5sQdl7zJrauQvTg5ukxeFpTQgKG6VhtyAIjJV6MARrG8E5G9 9KDZIhrVhZ6QkbV+vZlB8J7RyuekyBfKLYCEfxZ9/S6jcBbG4bEX47bBU82N3Rjwh6h4 hOaVI5LqI4jBlSD/Ubo+RwR6t7imFRueWI/H5cTWcNtr7EWE3sQkuVTjTxjwXGjq+w3k XN/h3wmKi6dbxHvoMDIl/UpwyoDnrR3FGs5XpawufU78bf9Hp5mh4mhtHoC57j46X+UK V7i/kaH1rH9lURqvAlqAcDbSyJaRcqg/XJLCSy/Tx2Zwjb8gIJhNbT+pDZW6N3kVQhcd D0eQ== X-Forwarded-Encrypted: i=1; AJvYcCWBVWMf8mo1K/+NAHBYM6vGONH1/qGmRQo08ENdyVKRXCrQQFJKS/l2mRJUJaN217pWFN0ucrBxvualLtc=@vger.kernel.org X-Gm-Message-State: AOJu0YxW/6UeNbXsdcyA/x1d2B2Ab7xsCj9HIGhRcjbx29CtKRCmD65X jzOKt/MxFHzJEZtDOAuoYYc225QUO9670/wVnntwPUI7ChxzPoqVdlG5Yrf0R0CtDa2c7picQ2a 0gVCQWTkTUNR/9hE2V2/8ZQGFDEBbI22igyO4Y+0ymwr6/UbEIFjtuAsYqnH3m4fl8zQ= X-Gm-Gg: ASbGnctEfysCLzlOkJ/qRuw9Xv8HmCnoQD4+3GAn51oHbaw2G5BiwThg54fdZ9YrwW1 0Vz7NkA7hhsJLtz8kfWDuTmfsPH7bRV2ck0UQFj0x0ac/Xa0hrI/lznlHnJbKYn2J5LwuB5ntEJ 4jDLGafKjMlNRTfjCEv4lsh7atWSWzlPMcL5WopRHuooyLjFrMzaLv8QlLxkPMpZKfozySjJrWx lu4xQEpPx0/5XbSpFA5HZcTef3DakB5C6L/mJhwFy/qvuEb4tPPlSCt/MJtg1QBsJApknesY2cm IvR8DuLVhkGR/ZgzGQ22HBTPUgVR3cnRVdySKyTWDwJnG5rjTWm2qUDlD34B0yMSuKFYpVHxilt n X-Received: by 2002:a17:903:32ca:b0:24e:6362:8ca5 with SMTP id d9443c01a7336-2516e88795fmr223604445ad.17.1757565207920; Wed, 10 Sep 2025 21:33:27 -0700 (PDT) X-Google-Smtp-Source: AGHT+IF7cOx79OL11dICcsNYYB9X5Lo9hq+soLcYBnRc5wz9C2Vi1oo1p/1Aoh6nC1uM6ojxTg7OzA== X-Received: by 2002:a17:903:32ca:b0:24e:6362:8ca5 with SMTP id d9443c01a7336-2516e88795fmr223604035ad.17.1757565207181; Wed, 10 Sep 2025 21:33:27 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3a84a46csm4323975ad.91.2025.09.10.21.33.21 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 21:33:26 -0700 (PDT) From: Viken Dadhaniya To: andi.shyti@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, andersson@kernel.org, konradybcio@kernel.org, broonie@kernel.org, johan+linaro@kernel.org, dianders@chromium.org, agross@kernel.org, linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, linux-spi@vger.kernel.org Cc: mukesh.savaliya@oss.qualcomm.com, Viken Dadhaniya Subject: [PATCH v7 3/6] soc: qcom: geni-se: Add support to load QUP SE Firmware via Linux subsystem Date: Thu, 11 Sep 2025 10:02:53 +0530 Message-Id: <20250911043256.3523057-4-viken.dadhaniya@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> References: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> 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=FN4bx/os c=1 sm=1 tr=0 ts=68c25119 cx=c_pps a=MTSHoo12Qbhz2p7MsH1ifg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=yJojWOMRYYMA:10 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=COk6AnOGAAAA:8 a=TIEv9Isvh9-nJ-6Hp_oA:9 a=4X4QlWh5XKUCARAt:21 a=GvdueXVYPmCkWapjIL-Q:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-ORIG-GUID: Xs-ok4BKTb_Z-a6ags4oPnRdwPpuePox X-Proofpoint-GUID: Xs-ok4BKTb_Z-a6ags4oPnRdwPpuePox X-Proofpoint-Spam-Details-Enc: AW1haW4tMjUwOTA4MDA5NCBTYWx0ZWRfX2e9VoXB0vASQ vSN8cyTEZm8aToaBbqMIrM41m0bRLAxF42/b9UjzYvMDsjH8AA46NyICRHXGPAhbJTXy63j+b84 csfLDm+6fB9O9eYk9wD1SCpWeeRzXF/JM7GOQ/Q4rIVeBtFq+bqqdHr/UxCNhZppngFCA53Mcu0 evI//BEkqUzrnQXK8gxJm/uPOXH6RePBYDtyCUXVzO11dEuNMgqFtNGs7j5UZt4F/jJsQda8UTO FVG+qVYnq3+fX8gT04/LZZf8nMznKBp8YN+WWtofezt1WvsCbUXD9ObGX+sjDDNp8g4Z5fsfvhB R5Fx1pTxVkCCf8PdIR9MGOD3IkgqZVAjaP1FptGKt3mpnkehUP9UDc+ZiqjOyCc70RgUKuZpjCD 27R9QQR8 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-10_04,2025-09-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 spamscore=0 priorityscore=1501 clxscore=1015 phishscore=0 adultscore=0 bulkscore=0 impostorscore=0 malwarescore=0 suspectscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509080094 Content-Type: text/plain; charset="utf-8" In Qualcomm SoCs, firmware loading for Serial Engines (SE) within the QUP hardware has traditionally been managed by TrustZone (TZ). This restriction poses a significant challenge for developers, as it limits their ability to enable various protocols on any of the SEs from the Linux side, reducing flexibility. Load the firmware to QUP SE based on the 'firmware-name' property specified in devicetree at bootup time. Co-developed-by: Mukesh Kumar Savaliya Signed-off-by: Mukesh Kumar Savaliya Signed-off-by: Viken Dadhaniya --- v6 -> v7: - Resolve kernel test robot warnings. - Defer the probe if the firmware from the filesystem is not available duri= ng early boot time. v6 Link: https://lore.kernel.org/all/20250822072651.510027-4-viken.dadhaniy= a@oss.qualcomm.com/ v5 -> v6: - Moved contents of qup-fw-load.h into qcom-geni-se.c. - Specified endianness for all members of the se_fw_hdr structure. - Changed the return type and arguments of the geni_read_elf function. - Renamed geni_read_elf to geni_find_protocol_fw for clarity. - Added error logging for corrupt firmware. - Passed SE mode and protocol type explicitly to all relevant functions. - Replaced writel_relaxed with writel for stricter memory ordering. - Renamed variable reg_val to reg for consistency. - Moved firmware length validation logic into geni_find_protocol_fw. - Updated function documentation for clarity and accuracy. - Removed redundant firmware length check. - Inlined the qup_fw_load function and removed its definition. - Removed the MAX_PROTOCOL macro. - Dropped mode and protocol fields from the geni_se structure. - Moved unrelated firmware loading code into a separate patch. v5 Link: https://lore.kernel.org/linux-i2c/20250624095102.1587580-3-viken.d= adhaniya@oss.qualcomm.com/ v4 -> v5: - Resolved kernel test robot error by including the missing bitfield header= file. - Updated the SE firmware ELF structure name for consistency. - Specified _leb4 format for the magic number definition. - Updated the email domain from 'quic' to 'oss'. v4 Link: https://lore.kernel.org/all/20250503111029.3583807-3-quic_vdadhani= @quicinc.com/ v3 -> v4: - Update the commit message. - Resolve kernel test robot warnings. - Add a multiline comment in the Copyright section. - Remove valid_seg_size and geni_config_common_control functions, and add t= he code inline. - Rename read_elf function to geni_read_elf. - Add a firmware size check. - Assign *pelfseg after finding a match. - Break one large condition check into multiple checks to improve code read= ability. - Remove return type documentation for void functions. - Update error messages to be more descriptive. - Correct indentation. - Rename geni_flash_fw_revision function to geni_write_fw_revision. - Remove __func__ from all print statements. - Move resource_on to the appropriate section after parsing the firmware fi= le. - Update variable names and function arguments as suggested. - Use FIELD_GET, FIELD_PREP, and GENMASK. - Use memcpy_toio() instead of memcpy. - Remove duplicate registers and bitmask macros. - Remove rsc struct and add required variables in geni_se struct. v3 Link: https://lore.kernel.org/linux-arm-msm/20250303124349.3474185-7-qui= c_vdadhani@quicinc.com/ v2 -> v3: - Remove code related to the 'qcom,xfer-mode' property. - Add logic to read the boolean property 'qcom,gsi-dma-allowed' and select = the transfer mode. - Hardcode FIFO mode for the serial driver as GSI mode is currently not sup= ported. - Update function descriptions as suggested. - Enhance error handling and remove redundant if conditions. - Drop the ternary operator. v2 Link: https://lore.kernel.org/linux-arm-msm/20250124105309.295769-6-quic= _vdadhani@quicinc.com/ v1 -> v2: - Remove the fixed firmware path and add logic to read the path from the de= vice tree. - Remove code related to the 'qcom,load-firmware' property. - Resolve kernel test robot warnings. - Update the commit message. - Update Copyright year. v1 Link: https://lore.kernel.org/linux-kernel/20241204150326.1470749-5-quic= _vdadhani@quicinc.com/ --- --- drivers/soc/qcom/qcom-geni-se.c | 474 ++++++++++++++++++++++++++++++- include/linux/soc/qcom/geni-se.h | 4 + 2 files changed, 475 insertions(+), 3 deletions(-) diff --git a/drivers/soc/qcom/qcom-geni-se.c b/drivers/soc/qcom/qcom-geni-s= e.c index e8ab2833815e..cd1779b6a91a 100644 --- a/drivers/soc/qcom/qcom-geni-se.c +++ b/drivers/soc/qcom/qcom-geni-se.c @@ -8,7 +8,9 @@ #define __DISABLE_TRACE_MMIO__ =20 #include +#include #include +#include #include #include #include @@ -113,8 +115,80 @@ struct geni_se_desc { static const char * const icc_path_names[] =3D {"qup-core", "qup-config", "qup-memory"}; =20 +static const char * const protocol_name[] =3D { "None", "SPI", "UART", "I2= C", "I3C", "SPI SLAVE" }; + +/** + * struct se_fw_hdr - Serial Engine firmware configuration header + * + * This structure defines the SE firmware header, which together with the + * firmware payload is stored in individual ELF segments. + * + * @magic: Set to 'SEFW'. + * @version: Structure version number. + * @core_version: QUPV3 hardware version. + * @serial_protocol: Encoded in GENI_FW_REVISION. + * @fw_version: Firmware version, from GENI_FW_REVISION. + * @cfg_version: Configuration version, from GENI_INIT_CFG_REVISION. + * @fw_size_in_items: Number of 32-bit words in GENI_FW_RAM. + * @fw_offset: Byte offset to GENI_FW_RAM array. + * @cfg_size_in_items: Number of GENI_FW_CFG index/value pairs. + * @cfg_idx_offset: Byte offset to GENI_FW_CFG index array. + * @cfg_val_offset: Byte offset to GENI_FW_CFG values array. + */ +struct se_fw_hdr { + __le32 magic; + __le32 version; + __le32 core_version; + __le16 serial_protocol; + __le16 fw_version; + __le16 cfg_version; + __le16 fw_size_in_items; + __le16 fw_offset; + __le16 cfg_size_in_items; + __le16 cfg_idx_offset; + __le16 cfg_val_offset; +}; + +/*Magic numbers*/ +#define SE_MAGIC_NUM 0x57464553 + +#define MAX_GENI_CFG_RAMn_CNT 455 + +#define MI_PBT_NON_PAGED_SEGMENT 0x0 +#define MI_PBT_HASH_SEGMENT 0x2 +#define MI_PBT_NOTUSED_SEGMENT 0x3 +#define MI_PBT_SHARED_SEGMENT 0x4 + +#define MI_PBT_FLAG_PAGE_MODE BIT(20) +#define MI_PBT_FLAG_SEGMENT_TYPE GENMASK(26, 24) +#define MI_PBT_FLAG_ACCESS_TYPE GENMASK(23, 21) + +#define MI_PBT_PAGE_MODE_VALUE(x) FIELD_GET(MI_PBT_FLAG_PAGE_MODE, x) + +#define MI_PBT_SEGMENT_TYPE_VALUE(x) FIELD_GET(MI_PBT_FLAG_SEGMENT_TYPE, x) + +#define MI_PBT_ACCESS_TYPE_VALUE(x) FIELD_GET(MI_PBT_FLAG_ACCESS_TYPE, x) + +#define M_COMMON_GENI_M_IRQ_EN (GENMASK(6, 1) | \ + M_IO_DATA_DEASSERT_EN | \ + M_IO_DATA_ASSERT_EN | M_RX_FIFO_RD_ERR_EN | \ + M_RX_FIFO_WR_ERR_EN | M_TX_FIFO_RD_ERR_EN | \ + M_TX_FIFO_WR_ERR_EN) + /* Common QUPV3 registers */ #define QUPV3_HW_VER_REG 0x4 +#define QUPV3_SE_AHB_M_CFG 0x118 +#define QUPV3_COMMON_CFG 0x120 +#define QUPV3_COMMON_CGC_CTRL 0x21c + +/* QUPV3_COMMON_CFG fields */ +#define FAST_SWITCH_TO_HIGH_DISABLE BIT(0) + +/* QUPV3_SE_AHB_M_CFG fields */ +#define AHB_M_CLK_CGC_ON BIT(0) + +/* QUPV3_COMMON_CGC_CTRL fields */ +#define COMMON_CSR_SLV_CLK_CGC_ON BIT(0) =20 /* Common SE registers */ #define SE_GENI_INIT_CFG_REVISION 0x0 @@ -122,11 +196,13 @@ static const char * const icc_path_names[] =3D {"qup-= core", "qup-config", #define SE_GENI_CGC_CTRL 0x28 #define SE_GENI_CLK_CTRL_RO 0x60 #define SE_GENI_FW_S_REVISION_RO 0x6c +#define SE_GENI_CFG_REG0 0x100 #define SE_GENI_BYTE_GRAN 0x254 #define SE_GENI_TX_PACKING_CFG0 0x260 #define SE_GENI_TX_PACKING_CFG1 0x264 #define SE_GENI_RX_PACKING_CFG0 0x284 #define SE_GENI_RX_PACKING_CFG1 0x288 +#define SE_GENI_S_IRQ_ENABLE 0x644 #define SE_DMA_TX_PTR_L 0xc30 #define SE_DMA_TX_PTR_H 0xc34 #define SE_DMA_TX_ATTR 0xc38 @@ -148,6 +224,15 @@ static const char * const icc_path_names[] =3D {"qup-c= ore", "qup-config", #define SE_GSI_EVENT_EN 0xe18 #define SE_IRQ_EN 0xe1c #define SE_DMA_GENERAL_CFG 0xe30 +#define SE_GENI_FW_REVISION 0x1000 +#define SE_GENI_S_FW_REVISION 0x1004 +#define SE_GENI_CFG_RAMN 0x1010 +#define SE_GENI_CLK_CTRL 0x2000 +#define SE_DMA_IF_EN 0x2004 +#define SE_FIFO_IF_DISABLE 0x2008 + +/* GENI_FW_REVISION_RO fields */ +#define FW_REV_VERSION_MSK GENMASK(7, 0) =20 /* GENI_OUTPUT_CTRL fields */ #define DEFAULT_IO_OUTPUT_CTRL_MSK GENMASK(6, 0) @@ -186,6 +271,15 @@ static const char * const icc_path_names[] =3D {"qup-c= ore", "qup-config", #define RX_DMA_IRQ_DELAY_MSK GENMASK(8, 6) #define RX_DMA_IRQ_DELAY_SHFT 6 =20 +/* GENI_CLK_CTRL fields */ +#define SER_CLK_SEL BIT(0) + +/* GENI_DMA_IF_EN fields */ +#define DMA_IF_EN BIT(0) + +#define geni_setbits32(_addr, _v) writel(readl(_addr) | (_v), _addr) +#define geni_clrbits32(_addr, _v) writel(readl(_addr) & ~(_v), _addr) + /** * geni_se_get_qup_hw_version() - Read the QUP wrapper Hardware version * @se: Pointer to the corresponding serial engine. @@ -658,9 +752,12 @@ int geni_se_clk_freq_match(struct geni_se *se, unsigne= d long req_freq, } EXPORT_SYMBOL_GPL(geni_se_clk_freq_match); =20 -#define GENI_SE_DMA_DONE_EN BIT(0) -#define GENI_SE_DMA_EOT_EN BIT(1) -#define GENI_SE_DMA_AHB_ERR_EN BIT(2) +#define GENI_SE_DMA_DONE_EN BIT(0) +#define GENI_SE_DMA_EOT_EN BIT(1) +#define GENI_SE_DMA_AHB_ERR_EN BIT(2) +#define GENI_SE_DMA_RESET_DONE_EN BIT(3) +#define GENI_SE_DMA_FLUSH_DONE BIT(4) + #define GENI_SE_DMA_EOT_BUF BIT(0) =20 /** @@ -891,6 +988,377 @@ int geni_icc_disable(struct geni_se *se) } EXPORT_SYMBOL_GPL(geni_icc_disable); =20 +/** + * geni_find_protocol_fw() - Locate and validate SE firmware for a protoco= l. + * @dev: Pointer to the device structure. + * @fw: Pointer to the firmware image. + * @protocol: Expected serial engine protocol type. + * + * Identifies the appropriate firmware image or configuration required for= a + * specific communication protocol instance running on a Qualcomm GENI + * controller. + * + * Return: pointer to a valid 'struct se_fw_hdr' if found, or NULL otherwi= se. + */ +static struct se_fw_hdr *geni_find_protocol_fw(struct device *dev, const s= truct firmware *fw, + enum geni_se_protocol_type protocol) +{ + const struct elf32_hdr *ehdr; + const struct elf32_phdr *phdrs; + const struct elf32_phdr *phdr; + struct se_fw_hdr *sefw; + u32 fw_end, cfg_idx_end, cfg_val_end; + u16 fw_size; + int i; + + if (!fw || fw->size < sizeof(struct elf32_hdr)) + return NULL; + + ehdr =3D (const struct elf32_hdr *)fw->data; + phdrs =3D (const struct elf32_phdr *)(fw->data + ehdr->e_phoff); + + /* + * The firmware is expected to have at least two program headers (segment= s). + * One for metadata and the other for the actual protocol-specific firmwa= re. + */ + if (ehdr->e_phnum < 2) { + dev_err(dev, "Invalid firmware: less than 2 program headers\n"); + return NULL; + } + + for (i =3D 0; i < ehdr->e_phnum; i++) { + phdr =3D &phdrs[i]; + + if (fw->size < phdr->p_offset + phdr->p_filesz) { + dev_err(dev, "Firmware size (%zu) < expected offset (%u) + size (%u)\n", + fw->size, phdr->p_offset, phdr->p_filesz); + return NULL; + } + + if (phdr->p_type !=3D PT_LOAD || !phdr->p_memsz) + continue; + + if (MI_PBT_PAGE_MODE_VALUE(phdr->p_flags) !=3D MI_PBT_NON_PAGED_SEGMENT = || + MI_PBT_SEGMENT_TYPE_VALUE(phdr->p_flags) =3D=3D MI_PBT_HASH_SEGMENT = || + MI_PBT_ACCESS_TYPE_VALUE(phdr->p_flags) =3D=3D MI_PBT_NOTUSED_SEGMEN= T || + MI_PBT_ACCESS_TYPE_VALUE(phdr->p_flags) =3D=3D MI_PBT_SHARED_SEGMENT) + continue; + + if (phdr->p_filesz < sizeof(struct se_fw_hdr)) + continue; + + sefw =3D (struct se_fw_hdr *)(fw->data + phdr->p_offset); + fw_size =3D le16_to_cpu(sefw->fw_size_in_items); + fw_end =3D le16_to_cpu(sefw->fw_offset) + fw_size * sizeof(u32); + cfg_idx_end =3D le16_to_cpu(sefw->cfg_idx_offset) + + le16_to_cpu(sefw->cfg_size_in_items) * sizeof(u8); + cfg_val_end =3D le16_to_cpu(sefw->cfg_val_offset) + + le16_to_cpu(sefw->cfg_size_in_items) * sizeof(u32); + + if (le32_to_cpu(sefw->magic) !=3D SE_MAGIC_NUM || le32_to_cpu(sefw->vers= ion) !=3D 1) + continue; + + if (le32_to_cpu(sefw->serial_protocol) !=3D protocol) + continue; + + if (fw_size % 2 !=3D 0) { + fw_size++; + sefw->fw_size_in_items =3D cpu_to_le16(fw_size); + } + + if (fw_size >=3D MAX_GENI_CFG_RAMn_CNT) { + dev_err(dev, + "Firmware size (%u) exceeds max allowed RAMn count (%u)\n", + fw_size, MAX_GENI_CFG_RAMn_CNT); + continue; + } + + if (fw_end > phdr->p_filesz || cfg_idx_end > phdr->p_filesz || + cfg_val_end > phdr->p_filesz) { + dev_err(dev, "Truncated or corrupt SE FW segment found at index %d\n", = i); + continue; + } + + return sefw; + } + + dev_err(dev, "Failed to get %s protocol firmware\n", protocol_name[protoc= ol]); + return NULL; +} + +/** + * geni_configure_xfer_mode() - Set the transfer mode. + * @se: Pointer to the concerned serial engine. + * @mode: SE data transfer mode. + * + * Set the transfer mode to either FIFO or DMA according to the mode speci= fied + * by the protocol driver. + * + * Return: 0 if successful, otherwise return an error value. + */ +static int geni_configure_xfer_mode(struct geni_se *se, enum geni_se_xfer_= mode mode) +{ + /* Configure SE FIFO, DMA or GSI mode. */ + switch (mode) { + case GENI_GPI_DMA: + geni_setbits32(se->base + SE_GENI_DMA_MODE_EN, GENI_DMA_MODE_EN); + writel(0x0, se->base + SE_IRQ_EN); + writel(DMA_RX_EVENT_EN | DMA_TX_EVENT_EN | GENI_M_EVENT_EN | GENI_S_EVEN= T_EN, + se->base + SE_GSI_EVENT_EN); + break; + + case GENI_SE_FIFO: + geni_clrbits32(se->base + SE_GENI_DMA_MODE_EN, GENI_DMA_MODE_EN); + writel(DMA_RX_IRQ_EN | DMA_TX_IRQ_EN | GENI_M_IRQ_EN | GENI_S_IRQ_EN, + se->base + SE_IRQ_EN); + writel(0x0, se->base + SE_GSI_EVENT_EN); + break; + + case GENI_SE_DMA: + geni_setbits32(se->base + SE_GENI_DMA_MODE_EN, GENI_DMA_MODE_EN); + writel(DMA_RX_IRQ_EN | DMA_TX_IRQ_EN | GENI_M_IRQ_EN | GENI_S_IRQ_EN, + se->base + SE_IRQ_EN); + writel(0x0, se->base + SE_GSI_EVENT_EN); + break; + + default: + dev_err(se->dev, "Invalid geni-se transfer mode: %d\n", mode); + return -EINVAL; + } + return 0; +} + +/** + * geni_enable_interrupts() - Enable interrupts. + * @se: Pointer to the concerned serial engine. + * + * Enable the required interrupts during the firmware load process. + */ +static void geni_enable_interrupts(struct geni_se *se) +{ + u32 val; + + /* Enable required interrupts. */ + writel(M_COMMON_GENI_M_IRQ_EN, se->base + SE_GENI_M_IRQ_EN); + + val =3D S_CMD_OVERRUN_EN | S_ILLEGAL_CMD_EN | S_CMD_CANCEL_EN | S_CMD_ABO= RT_EN | + S_GP_IRQ_0_EN | S_GP_IRQ_1_EN | S_GP_IRQ_2_EN | S_GP_IRQ_3_EN | + S_RX_FIFO_WR_ERR_EN | S_RX_FIFO_RD_ERR_EN; + writel(val, se->base + SE_GENI_S_IRQ_ENABLE); + + /* DMA mode configuration. */ + val =3D GENI_SE_DMA_RESET_DONE_EN | GENI_SE_DMA_AHB_ERR_EN | GENI_SE_DMA_= DONE_EN; + writel(val, se->base + SE_DMA_TX_IRQ_EN_SET); + val =3D GENI_SE_DMA_FLUSH_DONE | GENI_SE_DMA_RESET_DONE_EN | GENI_SE_DMA_= AHB_ERR_EN | + GENI_SE_DMA_DONE_EN; + writel(val, se->base + SE_DMA_RX_IRQ_EN_SET); +} + +/** + * geni_write_fw_revision() - Write the firmware revision. + * @se: Pointer to the concerned serial engine. + * @serial_protocol: serial protocol type. + * @fw_version: QUP firmware version. + * + * Write the firmware revision and protocol into the respective register. + */ +static void geni_write_fw_revision(struct geni_se *se, u16 serial_protocol= , u16 fw_version) +{ + u32 reg; + + reg =3D FIELD_PREP(FW_REV_PROTOCOL_MSK, serial_protocol); + reg |=3D FIELD_PREP(FW_REV_VERSION_MSK, fw_version); + + writel(reg, se->base + SE_GENI_FW_REVISION); + writel(reg, se->base + SE_GENI_S_FW_REVISION); +} + +/** + * geni_load_se_fw() - Load Serial Engine specific firmware. + * @se: Pointer to the concerned serial engine. + * @fw: Pointer to the firmware structure. + * @mode: SE data transfer mode. + * @protocol: Protocol type to be used with the SE (e.g., UART, SPI, I2C). + * + * Load the protocol firmware into the IRAM of the Serial Engine. + * + * Return: 0 if successful, otherwise return an error value. + */ +static int geni_load_se_fw(struct geni_se *se, const struct firmware *fw, + enum geni_se_xfer_mode mode, enum geni_se_protocol_type protocol) +{ + const u32 *fw_data, *cfg_val_arr; + const u8 *cfg_idx_arr; + u32 i, reg_value; + int ret; + struct se_fw_hdr *hdr; + + hdr =3D geni_find_protocol_fw(se->dev, fw, protocol); + if (!hdr) + return -EINVAL; + + fw_data =3D (const u32 *)((u8 *)hdr + le16_to_cpu(hdr->fw_offset)); + cfg_idx_arr =3D (const u8 *)hdr + le16_to_cpu(hdr->cfg_idx_offset); + cfg_val_arr =3D (const u32 *)((u8 *)hdr + le16_to_cpu(hdr->cfg_val_offset= )); + + ret =3D geni_icc_set_bw(se); + if (ret) + return ret; + + ret =3D geni_icc_enable(se); + if (ret) + return ret; + + ret =3D geni_se_resources_on(se); + if (ret) + goto out_icc_disable; + + /* + * Disable high-priority interrupts until all currently executing + * low-priority interrupts have been fully handled. + */ + geni_setbits32(se->wrapper->base + QUPV3_COMMON_CFG, FAST_SWITCH_TO_HIGH_= DISABLE); + + /* Set AHB_M_CLK_CGC_ON to indicate hardware controls se-wrapper cgc cloc= k. */ + geni_setbits32(se->wrapper->base + QUPV3_SE_AHB_M_CFG, AHB_M_CLK_CGC_ON); + + /* Let hardware to control common cgc. */ + geni_setbits32(se->wrapper->base + QUPV3_COMMON_CGC_CTRL, COMMON_CSR_SLV_= CLK_CGC_ON); + + /* + * Setting individual bits in GENI_OUTPUT_CTRL activates corresponding ou= tput lines, + * allowing the hardware to drive data as configured. + */ + writel(0x0, se->base + GENI_OUTPUT_CTRL); + + /* Set SCLK and HCLK to program RAM */ + geni_setbits32(se->base + SE_GENI_CGC_CTRL, PROG_RAM_SCLK_OFF | PROG_RAM_= HCLK_OFF); + writel(0x0, se->base + SE_GENI_CLK_CTRL); + geni_clrbits32(se->base + SE_GENI_CGC_CTRL, PROG_RAM_SCLK_OFF | PROG_RAM_= HCLK_OFF); + + /* Enable required clocks for DMA CSR, TX and RX. */ + reg_value =3D AHB_SEC_SLV_CLK_CGC_ON | DMA_AHB_SLV_CLK_CGC_ON | + DMA_TX_CLK_CGC_ON | DMA_RX_CLK_CGC_ON; + geni_setbits32(se->base + SE_DMA_GENERAL_CFG, reg_value); + + /* Let hardware control CGC by default. */ + writel(DEFAULT_CGC_EN, se->base + SE_GENI_CGC_CTRL); + + /* Set version of the configuration register part of firmware. */ + writel(le16_to_cpu(hdr->cfg_version), se->base + SE_GENI_INIT_CFG_REVISIO= N); + writel(le16_to_cpu(hdr->cfg_version), se->base + SE_GENI_S_INIT_CFG_REVIS= ION); + + /* Configure GENI primitive table. */ + for (i =3D 0; i < le16_to_cpu(hdr->cfg_size_in_items); i++) + writel(cfg_val_arr[i], + se->base + SE_GENI_CFG_REG0 + (cfg_idx_arr[i] * sizeof(u32))); + + /* Configure condition for assertion of RX_RFR_WATERMARK condition. */ + reg_value =3D geni_se_get_rx_fifo_depth(se); + writel(reg_value - 2, se->base + SE_GENI_RX_RFR_WATERMARK_REG); + + /* Let hardware control CGC */ + geni_setbits32(se->base + GENI_OUTPUT_CTRL, DEFAULT_IO_OUTPUT_CTRL_MSK); + + ret =3D geni_configure_xfer_mode(se, mode); + if (ret) + goto out_resources_off; + + geni_enable_interrupts(se); + + geni_write_fw_revision(se, le16_to_cpu(hdr->serial_protocol), le16_to_cpu= (hdr->fw_version)); + + /* Program RAM address space. */ + memcpy_toio(se->base + SE_GENI_CFG_RAMN, fw_data, + le16_to_cpu(hdr->fw_size_in_items) * sizeof(u32)); + + /* Put default values on GENI's output pads. */ + writel_relaxed(0x1, se->base + GENI_FORCE_DEFAULT_REG); + + /* Toggle SCLK/HCLK from high to low to finalize RAM programming and appl= y config. */ + geni_setbits32(se->base + SE_GENI_CGC_CTRL, PROG_RAM_SCLK_OFF | PROG_RAM_= HCLK_OFF); + geni_setbits32(se->base + SE_GENI_CLK_CTRL, SER_CLK_SEL); + geni_clrbits32(se->base + SE_GENI_CGC_CTRL, PROG_RAM_SCLK_OFF | PROG_RAM_= HCLK_OFF); + + /* Serial engine DMA interface is enabled. */ + geni_setbits32(se->base + SE_DMA_IF_EN, DMA_IF_EN); + + /* Enable or disable FIFO interface of the serial engine. */ + if (mode =3D=3D GENI_SE_FIFO) + geni_clrbits32(se->base + SE_FIFO_IF_DISABLE, FIFO_IF_DISABLE); + else + geni_setbits32(se->base + SE_FIFO_IF_DISABLE, FIFO_IF_DISABLE); + +out_resources_off: + geni_se_resources_off(se); + +out_icc_disable: + geni_icc_disable(se); + return ret; +} + +/** + * geni_load_se_firmware() - Load firmware for SE based on protocol + * @se: Pointer to the concerned serial engine. + * @protocol: Protocol type to be used with the SE (e.g., UART, SPI, I2C). + * + * Retrieves the firmware name from device properties and sets the transfe= r mode + * (FIFO or GSI DMA) based on device tree configuration. Enforces FIFO mod= e for + * UART protocol due to lack of GSI DMA support. Requests the firmware and= loads + * it into the SE. + * + * Return: 0 on success, negative error code on failure. + */ +int geni_load_se_firmware(struct geni_se *se, enum geni_se_protocol_type p= rotocol) +{ + const char *fw_name; + const struct firmware *fw; + enum geni_se_xfer_mode mode =3D GENI_SE_FIFO; + int ret; + + if (protocol >=3D ARRAY_SIZE(protocol_name)) { + dev_err(se->dev, "Invalid geni-se protocol: %d", protocol); + return -EINVAL; + } + + ret =3D device_property_read_string(se->wrapper->dev, "firmware-name", &f= w_name); + if (ret) { + dev_err(se->dev, "Failed to read firmware-name property: %d\n", ret); + return -EINVAL; + } + + if (of_property_read_bool(se->dev->of_node, "qcom,enable-gsi-dma")) + mode =3D GENI_GPI_DMA; + + /* GSI mode is not supported by the UART driver; therefore, setting FIFO = mode */ + if (protocol =3D=3D GENI_SE_UART) + mode =3D GENI_SE_FIFO; + + ret =3D request_firmware(&fw, fw_name, se->dev); + if (ret) { + if (ret =3D=3D -ENOENT) + return -EPROBE_DEFER; + + dev_err(se->dev, "Failed to request firmware '%s' for protocol %d: ret: = %d\n", + fw_name, protocol, ret); + return ret; + } + + ret =3D geni_load_se_fw(se, fw, mode, protocol); + release_firmware(fw); + + if (ret) { + dev_err(se->dev, "Failed to load SE firmware for protocol %d: ret: %d\n", + protocol, ret); + return ret; + } + + dev_dbg(se->dev, "Firmware load for %s protocol is successful for xfer mo= de: %d\n", + protocol_name[protocol], mode); + return 0; +} +EXPORT_SYMBOL_GPL(geni_load_se_firmware); + static int geni_se_probe(struct platform_device *pdev) { struct device *dev =3D &pdev->dev; diff --git a/include/linux/soc/qcom/geni-se.h b/include/linux/soc/qcom/geni= -se.h index 2996a3c28ef3..0a984e2579fe 100644 --- a/include/linux/soc/qcom/geni-se.h +++ b/include/linux/soc/qcom/geni-se.h @@ -1,6 +1,7 @@ /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2017-2018, The Linux Foundation. All rights reserved. + * Copyright (c) Qualcomm Technologies, Inc. and/or its subsidiaries. */ =20 #ifndef _LINUX_QCOM_GENI_SE @@ -36,6 +37,7 @@ enum geni_se_protocol_type { GENI_SE_I2C, GENI_SE_I3C, GENI_SE_SPI_SLAVE, + GENI_SE_INVALID_PROTO =3D 255, }; =20 struct geni_wrapper; @@ -531,5 +533,7 @@ void geni_icc_set_tag(struct geni_se *se, u32 tag); int geni_icc_enable(struct geni_se *se); =20 int geni_icc_disable(struct geni_se *se); + +int geni_load_se_firmware(struct geni_se *se, enum geni_se_protocol_type p= rotocol); #endif #endif --=20 2.34.1 From nobody Thu Oct 2 20:44:35 2025 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 41C8D241CB7 for ; Thu, 11 Sep 2025 04:33:36 +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=1757565219; cv=none; b=pYmbWAQ2cdnzJNAqly9Qb985WO1jSPiYJ/6W+HU+BL/K7tppJcrjB0tg1F3Ie62YRkoZuLR5eshxF9jgqmrZ/Xi04A1UkgI00mEXvoH3mkUXDlf1AECH0cfoHFJ1yPFEwpMxi1r7FZAOexebVrwwoqPtwIZsUFLI+gp2e7o906Y= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757565219; c=relaxed/simple; bh=6Em4YRvhzUdiai6MIke/qRQ6ZKbGJwjjHbIVhAuggC0=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=Cv8j4iYLNiuOWDnMgqDormatqmnARyd5+cy99zWO/FWvWMLBESByCFbrUmxkDYFrPWepuA7ChZQDhy//w+fxanj/yh3fzuw09AqaTVyC82KA77SO3tgtwuE2iKElQOvfQsoWZn8v6Rndjc42TLWRpg8Fmj9b0R5yfMSvHUD6x38= 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=L9l6WgOm; 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="L9l6WgOm" Received: from pps.filterd (m0279869.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58B41kqt002215 for ; Thu, 11 Sep 2025 04:33: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=DOg+t76LDtT Tfe4i4G48ZKjea2te61QR8gT2wG09EKo=; b=L9l6WgOmgm6VnseHYqhBp74pn4d k1mxDB9Pfsaa2pj5E///GeblD+rJEedqBzPkJzbWmC7sZm8PCyJWJk/EouKallZp yP42Lfa2x+ySFSA+F2uFhPi2CHfIp2/jaVA6jzjSF3lhWgoJECCjril9dXS+KAAn 8Sz41nx1aFyOiArHoMYQ1KWzpJtaii3obDMFlWMMZFSDtkGjd60RyBkiBtuSSKKc wrkj0hkiOO1MrhWJr874F/gvanr4GXq7PuISZ/P9MPxXFogZTNGnsVowh8iirrgF /r2cZanOm3WoIbzTRybpWzAnQq3gOYBL9XNfnXQYN/kZB+BFCC3ZWmB/30g== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 493q1cr24k-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 11 Sep 2025 04:33:35 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-24456ebed7bso5032575ad.0 for ; Wed, 10 Sep 2025 21:33:35 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757565214; x=1758170014; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=DOg+t76LDtTTfe4i4G48ZKjea2te61QR8gT2wG09EKo=; b=e6/kjUM1Mh9OVpNqqLGd16aYEcxKRtcrXlGE+XJsf/F7VEXnpHR1rcm9yDpgnZPAiu 7d9aJV18psisDb2ecMDwmH4ZLmLbQSY4P/J8NBmTQ7MTdLao+X81/tPJIasOYnRyMfLG JcR6wBYo68KHFblvvUWFGgEF9Wu8rc6UDMJ98z1tJj+In9knbr61dm61eIKRJpSFJn3c wR3g0vWvAz33SNVJPL0m5OzXYwrTvwLA2Bez5PzVlCOMpokTCVRHYSr2DA8n5df1/yvx BQP5WROfycOCccq6wBsRqmUqZrrrkUkq/nM07bLbxxKmv8mGNPbkwYDjiZJyNBlwn9SO 8gtA== X-Forwarded-Encrypted: i=1; AJvYcCUDggW89UTcrNbuhx44MynFglktY+wtuVBGlnG3w2Zk6l1Dr8AAZRvZii9YpWL65AcCoTTnxxb/qHTAocs=@vger.kernel.org X-Gm-Message-State: AOJu0YwW1jXVTl5LrxkC6dYDXGrDtw/0nIsnc2O6+KrxIIniRDLDAH1d PfFZ4kOIxroINi17PmytPunwt2uYkTfZEW9zqJAUdd+pv1vpN9GYunR5w+sH1SV4uhdd5Ygi6YV kOEEywhtfP4WD1RaesLlRuPEh41Kh7MnJBFHjaAzUMc/mitIMaPWyMJso37uSRaEY+c4= X-Gm-Gg: ASbGnctPck1lFoo819vPYsmkguoXp8aX8v4g0fhx+SY0kIN7IHxA3/MaF0kAlSuKkLB edAzSnjh8nfRVEEZljxYmtwhRZU9z/If9Ny9c6womUwgH8M9P5DkZ0GJtxzte71mkQomjdYsNts TmD+w+hDJnN5inDJJEcrjSifo5NBB/X8K0z+HXziq3dDi/OLYAlZEyD08IGHNTWnXg4HhbInvzf WeFm19n/qCPh/doRHi74Y+MSs37nfD1dZFUt6PWo2Vr/NlPR47GWsZsFejeouf01GC0e+o42kFC pVLksVhJqrJWimIN8hkgJ00TKRIhNiIsKTUhxJO9+hsEJ9rn327QKvzlYE9W3y1FLeKaq+ZH8qM O X-Received: by 2002:a17:902:d4d0:b0:25c:718:103e with SMTP id d9443c01a7336-25c07181344mr11953445ad.14.1757565214202; Wed, 10 Sep 2025 21:33:34 -0700 (PDT) X-Google-Smtp-Source: AGHT+IFPw1//ZVt+iheHquxaZ5YbXEJk3lIzvUDWdJ3kz7+gJhuLOwoAA0GVIuvq2MXtauftFCP+uA== X-Received: by 2002:a17:902:d4d0:b0:25c:718:103e with SMTP id d9443c01a7336-25c07181344mr11953065ad.14.1757565213690; Wed, 10 Sep 2025 21:33:33 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3a84a46csm4323975ad.91.2025.09.10.21.33.28 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 21:33:33 -0700 (PDT) From: Viken Dadhaniya To: andi.shyti@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, andersson@kernel.org, konradybcio@kernel.org, broonie@kernel.org, johan+linaro@kernel.org, dianders@chromium.org, agross@kernel.org, linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, linux-spi@vger.kernel.org Cc: mukesh.savaliya@oss.qualcomm.com, Viken Dadhaniya Subject: [PATCH v7 4/6] i2c: qcom-geni: Load i2c qup Firmware from linux side Date: Thu, 11 Sep 2025 10:02:54 +0530 Message-Id: <20250911043256.3523057-5-viken.dadhaniya@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> References: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> 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-Spam-Details-Enc: AW1haW4tMjUwOTExMDAzMyBTYWx0ZWRfX8zfF2gv346P1 XrxCnyVuXKivn05s4P4IOOCbT5U3IZ4gAvsfGOq+T/bG6J/9qMVTEu5RVAG3qRWII+J+pKZUWh/ FyqlA0psCFGi17A2PFs1JiFF7snpQ2O1SbOYOeuzAcOLX5/Fat0rDlAxob4VtZEHqKSfFPNku3G wHkDuStr3GNHMXeZ9Dk6ngaVHvinHEqOFaY/kgn8UzMmgzlY+ofvx+EYBNTtLFU+Ecrey1WJ8JT j14UbUTQJKlaEyN6yLtPwMZlK+V9kVB3RajuJ5PWBUr8IjIhznA2TkDOv1rYNqgyg+S5FNXwciy P5h5q/QL4zzC8wF5jpJZOId/T7u9pkQf/XDZtLVsc8eavsPJEHFToomaDyFKwG5jPx7hC77zPZ7 oE5zr3XW X-Authority-Analysis: v=2.4 cv=P4c6hjAu c=1 sm=1 tr=0 ts=68c2511f cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=yJojWOMRYYMA:10 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=COk6AnOGAAAA:8 a=9JGZuxy38fRfBSF6gCkA:9 a=1OuFwYUASf3TG4hYMiVC:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-GUID: _lyPJfUeDfEeU9N0X8u6p1KKAeD6z1DV X-Proofpoint-ORIG-GUID: _lyPJfUeDfEeU9N0X8u6p1KKAeD6z1DV X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-10_04,2025-09-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 impostorscore=0 suspectscore=0 malwarescore=0 spamscore=0 bulkscore=0 priorityscore=1501 clxscore=1015 phishscore=0 adultscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509110033 Content-Type: text/plain; charset="utf-8" Add provision to load firmware of Serial engine for I2C protocol from Linux Execution Environment on running on APPS processor. Acked-by: Andi Shyti Co-developed-by: Mukesh Kumar Savaliya Signed-off-by: Mukesh Kumar Savaliya Signed-off-by: Viken Dadhaniya --- Dependencies: This patch depends on patch 3 of this series. v6 -> v7: - No change. v6 Link: https://lore.kernel.org/all/20250822072651.510027-5-viken.dadhaniy= a@oss.qualcomm.com/ v5 -> v6: - Added Acked-by tag. v5 Link: https://lore.kernel.org/linux-i2c/20250624095102.1587580-4-viken.d= adhaniya@oss.qualcomm.com/ v4 -> v5: - Updated the email domain from 'quic' to 'oss'. v4 Link: https://lore.kernel.org/all/20250503111029.3583807-4-quic_vdadhani= @quicinc.com/ v3 - >v4: - Add a patch dependency note. v3 Link: https://lore.kernel.org/linux-arm-msm/20250303124349.3474185-8-qui= c_vdadhani@quicinc.com/ v2 -> v3: - Load firmware only if the protocol is invalid. v2 Link: https://lore.kernel.org/linux-arm-msm/20250124105309.295769-7-quic= _vdadhani@quicinc.com/ v1 -> v2: - No change. v1 Link: https://lore.kernel.org/linux-arm-msm/20241204150326.1470749-6-qui= c_vdadhani@quicinc.com/ --- --- drivers/i2c/busses/i2c-qcom-geni.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/i2c/busses/i2c-qcom-geni.c b/drivers/i2c/busses/i2c-qc= om-geni.c index ff2289b52c84..95a577764d5c 100644 --- a/drivers/i2c/busses/i2c-qcom-geni.c +++ b/drivers/i2c/busses/i2c-qcom-geni.c @@ -870,7 +870,13 @@ static int geni_i2c_probe(struct platform_device *pdev) goto err_clk; } proto =3D geni_se_read_proto(&gi2c->se); - if (proto !=3D GENI_SE_I2C) { + if (proto =3D=3D GENI_SE_INVALID_PROTO) { + ret =3D geni_load_se_firmware(&gi2c->se, GENI_SE_I2C); + if (ret) { + dev_err_probe(dev, ret, "i2c firmware load failed ret: %d\n", ret); + goto err_resources; + } + } else if (proto !=3D GENI_SE_I2C) { ret =3D dev_err_probe(dev, -ENXIO, "Invalid proto %d\n", proto); goto err_resources; } --=20 2.34.1 From nobody Thu Oct 2 20:44:35 2025 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 1615C241CB7 for ; Thu, 11 Sep 2025 04:33:42 +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=1757565224; cv=none; b=FYGDa5eH1+KQ+cw61dWiLsf8S6hZuzeoUVQdjyqIxYD3MLvCp4dxcowgRyrX5XxHNdy95lkWJdrzYNa+7+tOODGTAqzoR97rIjoAInEWhawtVhC9pnTmqFA+ebEk2Pxvf9rzRJCvTVET/7zMeA9fcSR0PnQ11j4JtTmOUjX0x7E= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757565224; c=relaxed/simple; bh=xnmykQAcvyckgw0YxmPQiHFgobP+L6bZcjG7nwsTZ4E=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=mt40PlfC0blIuhXRKRCN4DfYFOvkiK4SJSeHVTyontXgurwRIUAnLTf8GDkpBXRoJDtRGWKstosUckIff/sFewRLY/S7ndvHwpxBVSk8gDKrk/2ZotjysbaK1jxX8LH+VyZQ2bOFCw/UgH5uOC/MGo7Wk+WpbPxeNbCaatnmOOo= 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=oa0oKpGn; 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="oa0oKpGn" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58B2IuXt002518 for ; Thu, 11 Sep 2025 04:33:42 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=TMAgZU7buYT Kdw/GCsn25V+u3dQ6le/rA4xiN+RqdIk=; b=oa0oKpGnm9vX89tSlkKdzpEXM3E hyjU98B2SSu85jS+T0SgRLqZEeDm9X3iq0eI4N56fTtOq3fAY063usGWXh42njtZ fq8OSbj0E51bM+dFq1mhB3ILDIieDjJLYR+m2RjqEnJ3MEInBn0r7AbN6AXtwlIg MEyKCx8AgPfuvbGmSapbAtG+HNt1RtjsZpLB7tfPROGvER/EwnGrERiXYM1yB+UK JM3vD+iZQaKqa2rjMgraI4YyPuPmQS0k2dP9QIEAG0PYLW6hsCADk38/shHkjOj4 l5zYZDZGhsluxXdDTgs3LNGM0nXMzgtFN75cnFoLE/6Hhz+jNf2uwyjVEUQ== Received: from mail-pl1-f197.google.com (mail-pl1-f197.google.com [209.85.214.197]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 490db8p97y-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 11 Sep 2025 04:33:41 +0000 (GMT) Received: by mail-pl1-f197.google.com with SMTP id d9443c01a7336-24cda4063easo4112845ad.2 for ; Wed, 10 Sep 2025 21:33:41 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757565220; x=1758170020; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=TMAgZU7buYTKdw/GCsn25V+u3dQ6le/rA4xiN+RqdIk=; b=HvjZpiOhwvGcDv5Kbcswyanv7wyGLwS+sp+TipMdgwdqzKqJRWmLxalK+qlNtePJt5 yZZMFi6u/FcONbzzsiVCklz/1NwRsyWlac798IY50SyT4yzg3vE8bIC3cumvTfH+zFVv hD0QHptO1fMdi98Z/wMx6EINm1zb9KNYyGijn8VcoAWc4FB4cxIpBgTsi7SjyNeUf7hH pc24rz76bJO4akyr0pbQCKXF+89ZAmnj6fr7ffAtzjwDdDQx5KnKDe6BLZPu+Jo61m95 koQhtQFhbLHTSdsAt+uZWKz51H+8OlpOZpEWupHk6ZdB20DyOIhqyM5enOXAf36Q0pJD XXxw== X-Forwarded-Encrypted: i=1; AJvYcCUKR3nph3j2v0/qrNq0nAiKUeXWXuZQmnwaL1j1jwSYDGrOnHdj5CNmUM97FpA9zdXby4quF3NpveWWHbM=@vger.kernel.org X-Gm-Message-State: AOJu0YyjrYMu5nvkKvwb0mcEK0/ipIF843J+tQ7KBXSFaXolM/EFeG1C ET/1aWsSC6xul8YCTrn24xRwT08Brq2k5ENlL0AiNsc9+XJb1f/dNq6Mhr4NvvMTAvpAdCzbosh 5Tgdsf2KSurZy2ZO9jCRjoez2IUKiO216gAEurB4Tl+Xu0nWYcofidLVgsl8zf8Q8giw= X-Gm-Gg: ASbGncsny9tiNDCi7nmnIl7JXgDi0SoedSIce6DSCiwNbyDB75dee3UQ1FkJtXJ51rC bhra9/6ynAaJI3KantYToAqutJjF+7evCviNjlUA5+L6JlFahslBXpf2+US73wonCJLAFmvjiYN MgwbOlrScRTiy11thz9UVnlFJxBrFNhkq+WDg9U4opibr5viOGa+sZ1O/DfmcXr/4TdKRw/pgQT 3V7wyPPcAbbK+QLlQeo6o2AsJdnlM6oNC3OK9tIn3WuLXMq1LeewgdS98CrBhg8RrTtgI4gp3IU nEtfmvlc14thOFrSDqo6EyRRWPSNVSM0SCrbGOaFZ3zSnZp1oyFl/T6GAqKraQhh1n3WocJghP3 c X-Received: by 2002:a17:902:e843:b0:24c:7f2f:d9e6 with SMTP id d9443c01a7336-2516d81a032mr222003915ad.10.1757565220548; Wed, 10 Sep 2025 21:33:40 -0700 (PDT) X-Google-Smtp-Source: AGHT+IELSjPwhaKp6l0XXdzH3iIcNWUNMNNrVth7UkdZKu33009b6miMEtFPBuSlwEwOyhB4Px9PPA== X-Received: by 2002:a17:902:e843:b0:24c:7f2f:d9e6 with SMTP id d9443c01a7336-2516d81a032mr222003575ad.10.1757565220099; Wed, 10 Sep 2025 21:33:40 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3a84a46csm4323975ad.91.2025.09.10.21.33.34 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 21:33:39 -0700 (PDT) From: Viken Dadhaniya To: andi.shyti@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, andersson@kernel.org, konradybcio@kernel.org, broonie@kernel.org, johan+linaro@kernel.org, dianders@chromium.org, agross@kernel.org, linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, linux-spi@vger.kernel.org Cc: mukesh.savaliya@oss.qualcomm.com, Viken Dadhaniya Subject: [PATCH v7 5/6] spi: geni-qcom: Load spi qup Firmware from linux side Date: Thu, 11 Sep 2025 10:02:55 +0530 Message-Id: <20250911043256.3523057-6-viken.dadhaniya@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> References: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> 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-Spam-Details-Enc: AW1haW4tMjUwOTA2MDAzMSBTYWx0ZWRfXzhwbsBWQdE4X A22S0pFNJk0BZlI6m0bV9yEZfXKx83Srr22ApCpjh6A4WPTnpxhO/E2AIWG4DQhD1h1NHjcwvQ1 HPeOVdc42/3L7jTXmqQcjbVuWW7YQCwZCxA7bled7hv8+zucVtZXnM64Xkbyz4WiePXQHw+dCY8 066FvNGheEhrRD8f7nQo6qaYl6AF/T9LDZtCi5rpil4AYPJIw95uO9bu0gdt8z7SzKrgtRDjA0u r0JKgMmQ++3pwEhRqHDtjBRI9e13cZgVF6efmkWOtv6CRKfuxquUx1nxomfrqoGpBKxiLnWQSpw nKypSpQh29l1DFUjFKEyjgv6uzAW/EfZL1/0ISWOR5ZteHUKK7MXTk4SAJVw3NBN0NmfYipv3xi HiQJEMv4 X-Proofpoint-ORIG-GUID: JxYIwuAzG1DYzUifwuqEfS0FSgFR8Def X-Proofpoint-GUID: JxYIwuAzG1DYzUifwuqEfS0FSgFR8Def X-Authority-Analysis: v=2.4 cv=VIDdn8PX c=1 sm=1 tr=0 ts=68c25125 cx=c_pps a=cmESyDAEBpBGqyK7t0alAg==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=yJojWOMRYYMA:10 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=COk6AnOGAAAA:8 a=zIdmu9zckVospZd7ahEA:9 a=1OuFwYUASf3TG4hYMiVC:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-10_04,2025-09-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 spamscore=0 suspectscore=0 bulkscore=0 phishscore=0 adultscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509060031 Content-Type: text/plain; charset="utf-8" Add provision to load firmware of Serial engine for SPI protocol from Linux Execution Environment on running on APPS processor. Co-developed-by: Mukesh Kumar Savaliya Signed-off-by: Mukesh Kumar Savaliya Signed-off-by: Viken Dadhaniya Acked-by: Mark Brown --- Dependencies: This patch depends on patch 3 of this series. v6 -> v7: - No change. v6 Link: https://lore.kernel.org/all/20250822072651.510027-6-viken.dadhaniy= a@oss.qualcomm.com/ v5 -> v6: - No change. v5 Link: https://lore.kernel.org/linux-i2c/20250624095102.1587580-5-viken.d= adhaniya@oss.qualcomm.com/ v4 -> v5: - Updated the email domain from 'quic' to 'oss'. v4 Link: https://lore.kernel.org/all/20250503111029.3583807-5-quic_vdadhani= @quicinc.com/ v3 -> v4: - Add a patch dependency note. v3 Link: https://lore.kernel.org/linux-arm-msm/20250303124349.3474185-9-qui= c_vdadhani@quicinc.com/ v2 -> v3: - Load firmware only if the protocol is invalid. v2 Link: https://lore.kernel.org/linux-arm-msm/20250124105309.295769-8-quic= _vdadhani@quicinc.com/ v1 -> v2: - No change. v1 Link: https://lore.kernel.org/linux-arm-msm/20241204150326.1470749-7-qui= c_vdadhani@quicinc.com/ --- --- drivers/spi/spi-geni-qcom.c | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/drivers/spi/spi-geni-qcom.c b/drivers/spi/spi-geni-qcom.c index 768d7482102a..a0d8d3425c6c 100644 --- a/drivers/spi/spi-geni-qcom.c +++ b/drivers/spi/spi-geni-qcom.c @@ -671,6 +671,12 @@ static int spi_geni_init(struct spi_geni_master *mas) goto out_pm; } spi_slv_setup(mas); + } else if (proto =3D=3D GENI_SE_INVALID_PROTO) { + ret =3D geni_load_se_firmware(se, GENI_SE_SPI); + if (ret) { + dev_err(mas->dev, "spi master firmware load failed ret: %d\n", ret); + goto out_pm; + } } else if (proto !=3D GENI_SE_SPI) { dev_err(mas->dev, "Invalid proto %d\n", proto); goto out_pm; --=20 2.34.1 From nobody Thu Oct 2 20:44:35 2025 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 C48BD25B1CE for ; Thu, 11 Sep 2025 04:33:49 +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=1757565231; cv=none; b=r6M6BAT6PYfqOtr3etCCr56Kkj89oXUxikfF1Rseas/Mo6oByimbInTbvnjgqvFhU+Acr5cgn3d0qf4t5suYqlUkGmI/K8qn9nr9wk8+keSykrJHMARYrjs1zuwQxjd4+NULF+gsbM4gZIB31TYP6SqU+liIK7xocc0LDTgJ664= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1757565231; c=relaxed/simple; bh=mx4d1AM06bO2S1IONf8a/pO/zrCQyz3bPkPpHgejOOg=; h=From:To:Cc:Subject:Date:Message-Id:In-Reply-To:References: MIME-Version; b=jgjTq5dmHLOUsfdjt4cRxD0elSkEu0zefqamnprDTc4TqevXT/1dfidFsOaSWBbnsPDi20ZoOx3JRppiZzKuwcx1VyviUOaI2klx8e+xe/xwpxOP0sWxWTtO3LjF1LdxGxDboO9PPUz2Pi4NLr5RbyF4QMsgQ4neyFldOcPThRY= 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=U/H6jqJN; 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="U/H6jqJN" Received: from pps.filterd (m0279872.ppops.net [127.0.0.1]) by mx0a-0031df01.pphosted.com (8.18.1.2/8.18.1.2) with ESMTP id 58B2J3bE003255 for ; Thu, 11 Sep 2025 04:33:48 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=kcphrBZS8ap 5SJ3Zmdf0DUuuF1sTIEHZQlGDR6UGNHQ=; b=U/H6jqJNTXVfBG/btaflFrby2c5 7fuRKskqtI9rpIgBmNvsFCtvNfPhQ5mKFn0ba4eTLfDFaRuyh6Ao4AlNw5AZdP0E k3J1uF7NNnGizXcDrZ7q8c8t5j/7C2ySA54Ro6r2jnXz9JYMjFQrS6ORPmJC+w+U f8lK1Uzy0atFuwJ3TnptBSy1bgk8EvFkJeW3tN0oKxxR0Wm+0hOfz2oFpymQCU1p 9rFjxieKXS44b5rmOjzYAgP2GbPpq2+gQV8hLzV2VxaQvIayZfVbnwvBiCLoCsUv Obz3BPq13zNqwh2GtYiuG6WlsyNc/RhmhMx08UXKcWiYBp+2ax0KjfUoQ5w== Received: from mail-pl1-f200.google.com (mail-pl1-f200.google.com [209.85.214.200]) by mx0a-0031df01.pphosted.com (PPS) with ESMTPS id 490db8p989-1 (version=TLSv1.2 cipher=ECDHE-RSA-AES128-GCM-SHA256 bits=128 verify=NOT) for ; Thu, 11 Sep 2025 04:33:48 +0000 (GMT) Received: by mail-pl1-f200.google.com with SMTP id d9443c01a7336-24c99bd543aso5540545ad.3 for ; Wed, 10 Sep 2025 21:33:48 -0700 (PDT) X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1757565227; x=1758170027; h=content-transfer-encoding:mime-version:references:in-reply-to :message-id:date:subject:cc:to:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=kcphrBZS8ap5SJ3Zmdf0DUuuF1sTIEHZQlGDR6UGNHQ=; b=j3Jm6q9zUVIDinLjZGrz2G9Ch8tPFTz6Qmlr2QBXsc8ASTG8RgxFHhpPsPp8u2F/Gv fIWBSKXT0ZdGavIkF0tB18VdDfO526btXkQn8C80YuUE6khRneg7ejYjUh7zu6LqSG/J wHVPEJQ68wOkrObn4S6+jB8wRACIRy7Gcnu2fWm/6IqxoDj2vhCEFjOiFXMUIRHfxbWX xNy4NxtEstryz1DT7us8LJz6e5vqnRZgxF52w4aLdIZ+zNujiqx7jwEx6lBbDX/wlRGS aJvWhfeajTAksr6TrP2n268ilFvGZUAuAjnpOc6Yuj5Qz8GZLqv6ugFVI/XrCqlCbrgU HC/g== X-Forwarded-Encrypted: i=1; AJvYcCXDwiGTMsbcnBB639yGvXzoYk/uzZQKSCCAulGlu1zXbTYZ0oD3bt52LNlRW9TWn2mnZnUj/2Msbf7HjKY=@vger.kernel.org X-Gm-Message-State: AOJu0YxAlfbjqpqhIdtsOBbnHAHXRHd+PnjxmidK8jS5vQPsmR/sDCE5 5+l4leVwQ1ZbEEay8AXmwGcVtXSWCP8dt8G3wi4I0PcTvbCj7aHP9I6DXw1VEOdrHlbNNhFp+kk nDL0Q9BRFnM6blnSX1LjZL5XfhV7y9lGSKCXqZ1dW7caFPPkjxHM1gfZKJDyxbNML4Hs= X-Gm-Gg: ASbGncuGoceNrqeWvYRz+vnhg7PP+8a+JWl4Zw3soXsThIi0HRmYnckz2UTpUVKyCkR SzqYzAISiclZYAwVC9HzTPmhZ4T6yZgKxG8MTItPlh6qfgXt0zwaIjNb5oyHSR9PbDg6IiVVPXh VGimJVt2lsTZjSuzG3617QfxfFa/rBpPKSuGA79hVSp6uwY7MOPT/PsUS6tT+AmdxxHWPxxIhsJ QEIgHYanE+Hd7LopwCZj0eM0IFSJ139D2QqXp4U2Y1A7k1pkuZdP/U3FtNUsv1YFPyrS+08tcjm U0tKA0VAC6NOnOHzBsMKFPxHbQA1zvbgjIbUrQPpjx7Oqy70KNag+RWQ6hF7Vjn0Rr6triVlzvP W X-Received: by 2002:a17:902:db0d:b0:25c:2ed4:fd7f with SMTP id d9443c01a7336-25c2ed50044mr8373355ad.42.1757565227078; Wed, 10 Sep 2025 21:33:47 -0700 (PDT) X-Google-Smtp-Source: AGHT+IEJSDLFBIfEII/dWtZuLvluQE5OM8yus/jL1cVR398t46tsI0mtRTv1Sd8hk0JJ82ColwGboA== X-Received: by 2002:a17:902:db0d:b0:25c:2ed4:fd7f with SMTP id d9443c01a7336-25c2ed50044mr8372875ad.42.1757565226545; Wed, 10 Sep 2025 21:33:46 -0700 (PDT) Received: from hu-vdadhani-hyd.qualcomm.com ([202.46.23.25]) by smtp.gmail.com with ESMTPSA id d9443c01a7336-25c3a84a46csm4323975ad.91.2025.09.10.21.33.41 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Wed, 10 Sep 2025 21:33:46 -0700 (PDT) From: Viken Dadhaniya To: andi.shyti@kernel.org, robh@kernel.org, krzk+dt@kernel.org, conor+dt@kernel.org, gregkh@linuxfoundation.org, jirislaby@kernel.org, andersson@kernel.org, konradybcio@kernel.org, broonie@kernel.org, johan+linaro@kernel.org, dianders@chromium.org, agross@kernel.org, linux-arm-msm@vger.kernel.org, linux-i2c@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org, linux-serial@vger.kernel.org, linux-spi@vger.kernel.org Cc: mukesh.savaliya@oss.qualcomm.com, Viken Dadhaniya Subject: [PATCH v7 6/6] serial: qcom-geni: Load UART qup Firmware from linux side Date: Thu, 11 Sep 2025 10:02:56 +0530 Message-Id: <20250911043256.3523057-7-viken.dadhaniya@oss.qualcomm.com> X-Mailer: git-send-email 2.34.1 In-Reply-To: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> References: <20250911043256.3523057-1-viken.dadhaniya@oss.qualcomm.com> 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-Spam-Details-Enc: AW1haW4tMjUwOTA2MDAzMSBTYWx0ZWRfX48XyYed+o/+G bumGlqwP0DIJVV85OMp04T6713wW7sd80xV1RGKKw0d3FTU2IhRAHkxv8tqstUvWawuVA2C/h+c Ky6fP+mYGXRYnG6ADvVkxFD7bie/C1xgsGf92dfKGYiLbwUL7FR34LfYHcTtyDSyCun5yibOCCi eBoCb06678vVfhfNWk5ezaViC1lDEPEY0qhq4P4pBoKqJ/7Jc48zYzJmY+MPhFb5cwXPFJucYrS UOa5U/0EzypDLJcWCutU5mYkHj/hMVVV7hWIV6PVWlrupMDPiwz2R31x2vbzIv+FOioJ4jki4zQ pGa4aG6Ah++eTNKL0XuwUI4JonfJ15lT0yR0vRnq3sipZbGYdhgwh1y+wSUy11JGwh9NQHTelCh mfEUmgxC X-Proofpoint-ORIG-GUID: SzufCgFJp6Zhevx41kMOB8rIBa53wS8n X-Proofpoint-GUID: SzufCgFJp6Zhevx41kMOB8rIBa53wS8n X-Authority-Analysis: v=2.4 cv=VIDdn8PX c=1 sm=1 tr=0 ts=68c2512c cx=c_pps a=IZJwPbhc+fLeJZngyXXI0A==:117 a=ZePRamnt/+rB5gQjfz0u9A==:17 a=yJojWOMRYYMA:10 a=VwQbUJbxAAAA:8 a=EUspDBNiAAAA:8 a=COk6AnOGAAAA:8 a=9JGZuxy38fRfBSF6gCkA:9 a=uG9DUKGECoFWVXl0Dc02:22 a=TjNXssC_j7lpFel5tvFf:22 X-Proofpoint-Virus-Version: vendor=baseguard engine=ICAP:2.0.293,Aquarius:18.0.1117,Hydra:6.1.9,FMLib:17.12.80.40 definitions=2025-09-10_04,2025-09-10_01,2025-03-28_01 X-Proofpoint-Spam-Details: rule=outbound_notspam policy=outbound score=0 priorityscore=1501 malwarescore=0 spamscore=0 suspectscore=0 bulkscore=0 phishscore=0 adultscore=0 clxscore=1015 impostorscore=0 classifier=typeunknown authscore=0 authtc= authcc= route=outbound adjust=0 reason=mlx scancount=1 engine=8.19.0-2507300000 definitions=main-2509060031 Content-Type: text/plain; charset="utf-8" Add provision to load firmware of Serial engine for UART protocol from Linux Execution Environment on running on APPS processor. Co-developed-by: Mukesh Kumar Savaliya Signed-off-by: Mukesh Kumar Savaliya Signed-off-by: Viken Dadhaniya --- Dependencies: This patch depends on patch 3 of this series. v6 -> v7: - No change. v6 Link: https://lore.kernel.org/all/20250822072651.510027-7-viken.dadhaniy= a@oss.qualcomm.com/ v5 -> v6: - No change. v5 Link: https://lore.kernel.org/linux-i2c/20250624095102.1587580-6-viken.d= adhaniya@oss.qualcomm.com/ v4 -> v5: - Updated the email domain from 'quic' to 'oss'. v4 Link: https://lore.kernel.org/all/20250503111029.3583807-6-quic_vdadhani= @quicinc.com/ v3 -> v4: - Add a patch dependency note. v3 Link: https://lore.kernel.org/linux-arm-msm/20250303124349.3474185-10-qu= ic_vdadhani@quicinc.com/ v2 -> v3: - Load firmware only if the protocol is invalid. v2 Link: https://lore.kernel.org/linux-arm-msm/20250124105309.295769-9-quic= _vdadhani@quicinc.com/ v1 -> v2: - No change. v1 Link: https://lore.kernel.org/linux-arm-msm/20241204150326.1470749-8-qui= c_vdadhani@quicinc.com/ --- --- drivers/tty/serial/qcom_geni_serial.c | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/drivers/tty/serial/qcom_geni_serial.c b/drivers/tty/serial/qco= m_geni_serial.c index 0fdda3a1e70b..ce5cb97d60a7 100644 --- a/drivers/tty/serial/qcom_geni_serial.c +++ b/drivers/tty/serial/qcom_geni_serial.c @@ -1184,7 +1184,13 @@ static int qcom_geni_serial_port_setup(struct uart_p= ort *uport) int ret; =20 proto =3D geni_se_read_proto(&port->se); - if (proto !=3D GENI_SE_UART) { + if (proto =3D=3D GENI_SE_INVALID_PROTO) { + ret =3D geni_load_se_firmware(&port->se, GENI_SE_UART); + if (ret) { + dev_err(uport->dev, "UART firmware load failed ret: %d\n", ret); + return ret; + } + } else if (proto !=3D GENI_SE_UART) { dev_err(uport->dev, "Invalid FW loaded, proto: %d\n", proto); return -ENXIO; } --=20 2.34.1