From nobody Tue Oct 7 05:33:22 2025 Received: from mail-wm1-f50.google.com (mail-wm1-f50.google.com [209.85.128.50]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 79DDF24DCEF for ; Mon, 14 Jul 2025 13:41:29 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.128.50 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752500492; cv=none; b=oJY0ipkqtv1TSKDNgs5JyLDgGl1mU2oOOLjd8p/S2zgZt0MAcxejN2/MF22L/UttM1IMPXmVWpd6wdZiIE6np0JCcwYlJXgJypE9pOfufcuYlQQNd5o1HjtTS4em4kvto/mpkdsAtOyzPGnwvTIJNAhL+1mrqMh7GkTS0fZ9qOo= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752500492; c=relaxed/simple; bh=N0FiLOa/kCeu/NHGrIPyU79z0X8zCwU1KG+xS+vfyYI=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=qh8cJ1n93AxoRtcpnZwnZRtvSK79mjKdaMxsXdYD+tsl9cxm5UIEUs3rXd7nHMmW3S612lQmuC0AGfjHXIPQq4mTcQ2c0cZQMFNMm5og/n3H8h03XloDEix8xrpW1kWst9h/HEaebOfO1l2ddLpz3BbVouRk+R/Cv+raEhhwFN8= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=QV6u55Wu; arc=none smtp.client-ip=209.85.128.50 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="QV6u55Wu" Received: by mail-wm1-f50.google.com with SMTP id 5b1f17b1804b1-456133b8d47so1379855e9.2 for ; Mon, 14 Jul 2025 06:41:29 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1752500488; x=1753105288; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=N3lTuIh5S1FYvkQ1ZLooc79sNOGjgNo0+8qWLqGThgk=; b=QV6u55Wugnt59OWtvNc9f3gtvm9FCLJL2tiefrBBBe/ozOblVk50Gd5xIly7f2D0Uo GAqJNVuko0Ecj4GB6Q+omTTQNxnh6GLIh5XkuEcvE39sE7loLddbWNbWv7IEAsIWgTFx S51yR4llA2sP959ZBhUTSo46t9WnO6vdDHw8SQ+w5yE+rCsJ26SNgQK3MuxVtLbxxG5E f0uQQd7enmN755gQUzGMhCldCQBdkcTxATgo6kmQ66LeoE9Av+rAcuT6n6lpym2lyXoX VvrP2NZ9fAFexDmJLWlbwaP3YCSn1+A+soFJ5PV1LceQu90oRnwx24Y4jDquUR/DHWq8 W3RQ== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752500488; x=1753105288; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=N3lTuIh5S1FYvkQ1ZLooc79sNOGjgNo0+8qWLqGThgk=; b=LG0Fft8CBTIRr5qrtQyOp7xwy/yu94sDywtk3+RfFuxpxIcxLEO/lo/Lv2D8EXCdyL fhZo0bh0uT9+xG+qkEy1bNDSLBlu3pNOXr44dUDOgkB/j3aGLoOOJWz8IKAA0MWA1cmo K9Nv5UjVOSEbHdVS9MSaPIriC641T68FDleibZwN7glgnTipAgvvitq6zT61toY6MDRy iDKFgfECzOzsu0MAntvbPs/Z6id7ITn4oVriITe1EEryhyVc99yo/VFMjI3Cn76ceeyZ 3mcUH9poV4x0Q9X5TxEpPqOmEze1+hrrotPwYsKmLUjeyQ+/PjqV3N1D/SJTtq78Vv8z Gg/A== X-Forwarded-Encrypted: i=1; AJvYcCWJ4rAsyvjbcZOcvbSd/bPJ2KrptIkp3ibPJhw6SIIfW0E4ZKALRxh5eyoHGhnbXOL0d/NV7dufc8fq4bM=@vger.kernel.org X-Gm-Message-State: AOJu0YyuCacK8UAp6/5RcCQXnOF5oMnckHtlF+HRWWJQQXbqNEKik6EY venqM6DejbiXUkbf+rAhW9MnQyCcBZpe9WhN8XnnwXaVYrw5jS1HGKGVb95ctaVEEnU= X-Gm-Gg: ASbGncvWwpkXChduu8QiJmGY7VLWa+umXlHsl2OP0cQQ7KRc0w3oUzSap/mZsA5QdPS wqSRVNU1X025XxXzHPcOAZTkg+XBdDK0aPt2s93sG1CnykFcgL0XhpHHB7CUlHSawKfhi+nzfOd l0KkparTzQl7q99a69SjirvDW/6Skgy/POdYpclE+3F/us5XB2rNb2XfpLcVqvzj5H2iMauMcht L6whaRwfQSLjZUSGP4dO21QwSeLcV/+rCKP6uIuMx+hGG3d9NFeVCg2E1/Q77ygsjFHvs8fCdUz VP//7WWyX3+JlwWue+HJxPYnD1e65jrWD5DHhxzgexyC1psbo+BX45KnWxw1rLHVjkz55YG2uCB 0s2BjDK9j/v4PIUG2xFZ+V+85dPx3gPWHynhB X-Google-Smtp-Source: AGHT+IH/77wC4xERgT8TAu9P3Ccruj4NUXxcgbWHiYjWBnWtXjpKgbx1wOWS/M5as07m/W20VeF+2g== X-Received: by 2002:a05:600c:a282:b0:43b:c844:a4ba with SMTP id 5b1f17b1804b1-4556f8ab34dmr32154685e9.3.1752500487677; Mon, 14 Jul 2025 06:41:27 -0700 (PDT) Received: from [127.0.1.1] ([178.197.222.89]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4561b176f87sm31371375e9.35.2025.07.14.06.41.26 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Jul 2025 06:41:27 -0700 (PDT) From: Krzysztof Kozlowski Date: Mon, 14 Jul 2025 15:41:16 +0200 Subject: [PATCH 1/3] media: dt-bindings: qcom,sm8550-iris: Add SM8750 video codec Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250714-sm8750-iris-v1-1-3006293a5bc7@linaro.org> References: <20250714-sm8750-iris-v1-0-3006293a5bc7@linaro.org> In-Reply-To: <20250714-sm8750-iris-v1-0-3006293a5bc7@linaro.org> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: Krzysztof Kozlowski , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=6219; i=krzysztof.kozlowski@linaro.org; h=from:subject:message-id; bh=N0FiLOa/kCeu/NHGrIPyU79z0X8zCwU1KG+xS+vfyYI=; b=kA0DAAoBwTdm5oaLg9cByyZiAGh1CQKiOm+mc5Q+Va+s3HmFSNGF5yoCEIUFNlmbMDGhPpsqw IkCMwQAAQoAHRYhBN3SYig9ERsjO264qME3ZuaGi4PXBQJodQkCAAoJEME3ZuaGi4PXbWQQAID+ xZCeBSMm+EMQ8CIDDCSkQ7/DStICm4MCpBI5Iu9fQTTRFH4EIka6D3HSFweyVPmdRrQYy01QMms R35U3A2jMd3AH5wr4aVym1J3Aa6yzfY30Mjm8PiwfhJpKSPdd+o614P5sVrbaaRAcHoIvnyp5Ij 3PT1MbrDwocUa6grgzOBbaBDvssM0xRV+KSWdKdpoKhy0i+RH3k1neyTEBJddJ8DPfjfXSzNyYD cFbRlGScipOCN+Q3PZvAETgbfqmHmxLH/DLrDfQt5WHXLBmYHNNRL4ThKCKhMrPN+pb//cxh5++ JgaQ/KymDH5+ojRCjVjVw2TkXfv8JMEUSLn7Yh82+ryCILJ4y2KqGQjDt8/orBkhB+sCESBexhu 4Dsa2eV+yR4qczGaBzWHSOB3INFvqtJx6l4JxlkTstO+6j47ZtSCNNjn8ungwNm/DrOZ1ftwumV WmXmx1rPo8/HwxBO+wUcicoO4d4Px+t/z4v+Tq6LaGHElfDSRddLJhyB36ZEG+P0AcmAL6ywq4+ /JGiTuOR93nnnCDpayfsnpq6YQcEy35KuRniORJ4YT1sRb15uJz/WOtfRSFFH9+pW42fUfHbATO dpg4IL1O85wjWrNld0YO84pOVJ5Zjn3iExT9Bvqw8zSXuYTf1DOcfOR+FI8g4wDU/JxFAau/4eL frwXp X-Developer-Key: i=krzysztof.kozlowski@linaro.org; a=openpgp; fpr=9BD07E0E0C51F8D59677B7541B93437D3B41629B Add binding for Qualcom SM8750 Iris video codec, which comes with significantly different powering up sequence than previous SM8650, thus different clocks and resets. For consistency keep existing clock and clock-names naming, so the list shares common part. Signed-off-by: Krzysztof Kozlowski Reviewed-by: Rob Herring (Arm) --- .../bindings/media/qcom,sm8750-iris.yaml | 186 +++++++++++++++++= ++++ 1 file changed, 186 insertions(+) diff --git a/Documentation/devicetree/bindings/media/qcom,sm8750-iris.yaml = b/Documentation/devicetree/bindings/media/qcom,sm8750-iris.yaml new file mode 100644 index 0000000000000000000000000000000000000000..e767ebae7c4022d406d61a7bf60= 6b8d878d8632e --- /dev/null +++ b/Documentation/devicetree/bindings/media/qcom,sm8750-iris.yaml @@ -0,0 +1,186 @@ +# SPDX-License-Identifier: (GPL-2.0-only OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/media/qcom,sm8750-iris.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm SM8750 SpC Iris video encoder and decoder + +maintainers: + - Krzysztof Kozlowski + +description: + The Iris video processing unit on Qualcomm SM8750 SoC is a video encode = and + decode accelerator. + +properties: + compatible: + enum: + - qcom,sm8750-iris + + clocks: + maxItems: 6 + + clock-names: + items: + - const: iface # AXI0 + - const: core + - const: vcodec0_core + - const: iface1 # AXI1 + - const: core_freerun + - const: vcodec0_core_freerun + + dma-coherent: true + + interconnects: + maxItems: 2 + + interconnect-names: + items: + - const: cpu-cfg + - const: video-mem + + iommus: + maxItems: 2 + + operating-points-v2: true + opp-table: + type: object + + power-domains: + maxItems: 4 + + power-domain-names: + items: + - const: venus + - const: vcodec0 + - const: mxc + - const: mmcx + + resets: + maxItems: 4 + + reset-names: + items: + - const: bus0 + - const: bus1 + - const: core + - const: vcodec0_core + +required: + - compatible + - dma-coherent + - interconnects + - interconnect-names + - iommus + - power-domain-names + - resets + - reset-names + +allOf: + - $ref: qcom,venus-common.yaml# + +unevaluatedProperties: false + +examples: + - | + #include + #include + #include + #include + #include + #include + #include + + video-codec@aa00000 { + compatible =3D "qcom,sm8750-iris"; + reg =3D <0x0aa00000 0xf0000>; + + clocks =3D <&gcc GCC_VIDEO_AXI0_CLK>, + <&videocc_mvs0c_clk>, + <&videocc_mvs0_clk>, + <&gcc GCC_VIDEO_AXI1_CLK>, + <&videocc_mvs0c_freerun_clk>, + <&videocc_mvs0_freerun_clk>; + clock-names =3D "iface", + "core", + "vcodec0_core", + "iface1", + "core_freerun", + "vcodec0_core_freerun"; + + dma-coherent; + iommus =3D <&apps_smmu 0x1940 0>, + <&apps_smmu 0x1947 0>; + + interconnects =3D <&gem_noc MASTER_APPSS_PROC QCOM_ICC_TAG_ACTIVE_= ONLY + &config_noc SLAVE_VENUS_CFG QCOM_ICC_TAG_ACTIVE_O= NLY>, + <&mmss_noc MASTER_VIDEO_MVP QCOM_ICC_TAG_ALWAYS + &mc_virt SLAVE_EBI1 QCOM_ICC_TAG_ALWAYS>; + interconnect-names =3D "cpu-cfg", + "video-mem"; + + interrupts =3D ; + + operating-points-v2 =3D <&iris_opp_table>; + + memory-region =3D <&video_mem>; + + power-domains =3D <&videocc_mvs0c_gdsc>, + <&videocc_mvs0_gdsc>, + <&rpmhpd RPMHPD_MXC>, + <&rpmhpd RPMHPD_MMCX>; + power-domain-names =3D "venus", + "vcodec0", + "mxc", + "mmcx"; + + resets =3D <&gcc GCC_VIDEO_AXI0_CLK_ARES>, + <&gcc GCC_VIDEO_AXI1_CLK_ARES>, + <&videocc_mvs0c_freerun_clk_ares>, + <&videocc_mvs0_freerun_clk_ares>; + reset-names =3D "bus0", + "bus1", + "core", + "vcodec0_core"; + + iris_opp_table: opp-table { + compatible =3D "operating-points-v2"; + + opp-240000000 { + opp-hz =3D /bits/ 64 <240000000>; + required-opps =3D <&rpmhpd_opp_low_svs_d1>, + <&rpmhpd_opp_low_svs_d1>; + }; + + opp-338000000 { + opp-hz =3D /bits/ 64 <338000000>; + required-opps =3D <&rpmhpd_opp_low_svs>, + <&rpmhpd_opp_low_svs>; + }; + + opp-420000000 { + opp-hz =3D /bits/ 64 <420000000>; + required-opps =3D <&rpmhpd_opp_svs>, + <&rpmhpd_opp_svs>; + }; + + opp-444000000 { + opp-hz =3D /bits/ 64 <444000000>; + required-opps =3D <&rpmhpd_opp_svs_l1>, + <&rpmhpd_opp_svs_l1>; + }; + + opp-533333334 { + opp-hz =3D /bits/ 64 <533333334>; + required-opps =3D <&rpmhpd_opp_nom>, + <&rpmhpd_opp_nom>; + }; + + opp-630000000 { + opp-hz =3D /bits/ 64 <630000000>; + required-opps =3D <&rpmhpd_opp_turbo>, + <&rpmhpd_opp_turbo>; + }; + }; + }; --=20 2.43.0 From nobody Tue Oct 7 05:33:22 2025 Received: from mail-wr1-f45.google.com (mail-wr1-f45.google.com [209.85.221.45]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id D16392512DE for ; Mon, 14 Jul 2025 13:41:30 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.45 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752500492; cv=none; b=FVCqcv5kLph0mZoqap3ycZItw4g+WKGeyv1f/38PcBhlevQK/n7OokgqlA3ICJPVgqEiySRWOitjKM0bvReZ5V0xoej4zvT914crdqwPR+ipN3fp1klHghY5R6G6Kjkg18NsUCJ3W5BdGMz+5SSZtFya+48zgV1kJLYhIuLkuEQ= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752500492; c=relaxed/simple; bh=D+caATHxNjJcUa+12DDZ6SBVbOWstyQMR56LoQYn7/I=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=Phj4npMR7qNinAwwJA+tkc8d0IRnAuUtHL+QzMENzqkz4IlSb6lJJeRa6YuhdlSG3OVnWFyTpjITYnCazO72GnBb8Wx/d0CTCxVPcYkmjVcDQL31xxtXDQuv6+jNno5PPeZ8AHvmr78R/ii3JfFBXZ4ToS0eK8egoo3gxmebNgg= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=ULpqETA3; arc=none smtp.client-ip=209.85.221.45 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="ULpqETA3" Received: by mail-wr1-f45.google.com with SMTP id ffacd0b85a97d-3a4e57d018cso631653f8f.1 for ; Mon, 14 Jul 2025 06:41:30 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1752500489; x=1753105289; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=BvX5sGYsStJ99mq9tR3+dv+q6L2ZISBDS5U+4tgjRDY=; b=ULpqETA3JFOrjiHGbrm4FRszs2XDAtQdn7ZubcVIZx0K0IMxQHS55/p5YNrxaJtenC PD4wfoBSEvuBAqMDluqTMegB+ZKCtJLEGv+N4jtwiiZvG9JJE2ZkGUXTURXYl/myfUFr Doy6qR8cHfWqESnLjYWq8hvn0bf1djEs/wvFIUDsJy8jO4OgnGkSO5Ka1LS8J8E0ibVU A6moJZ5FsPxtxba3DP39eZICeOe3D5YdQUOvKJasUxDOvheQCvzKQzQIPcg28c75BgWA uTGPH2gEuaKk/Ge74D6OL67oBZv0A3XLh2TKRNNqImsiUjFcqfssf23jZtHZBTlE6Vv1 7XHw== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752500489; x=1753105289; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=BvX5sGYsStJ99mq9tR3+dv+q6L2ZISBDS5U+4tgjRDY=; b=C4H+TIwq4+Sy1pBRmwQZa7V+p6P3KoKINqBNtvXeSm5cgwXiVX7CBKxZQEhVjZiL/c VDSxKal+CfdrwRCxBMXx4GVKwDrhkLLCiiSBgMSWpyQ1pjRpw0PNLNyQmpJNoLJuDtC/ COL7H9Vq7nQN7a0bnGT7tKnhOLdpP/5eJilkUu+F2Abd4R0n011UMcpdRHEMOn1ZSYog 1nDkNbr7wfI/lg7IiZcbDiGzNSeF6JK9RpymJwREbLRHg5mbpP7ipnMIm+UQ3KWtjznB 0bPbo7E4qGXzNGWP18l52MFI3oSViUq3/lIJe+lxI6Tbr3HNlQqAln9WilPYQRBiL+q0 mDAw== X-Forwarded-Encrypted: i=1; AJvYcCU+BRY7B1l0IsHmC9WtXrRZiNouBy6gTYo/XUHkerCSQAcsLPREzzWlEsKoMGG+hbESqbLrZZ9LY4aGrL4=@vger.kernel.org X-Gm-Message-State: AOJu0YwM+onD2QaH2m1Jl2NJ/LkHmWBuXXLu5oSrM62tJb1juovF+N76 6y44ka4+Z4n2hHOsxXHCdmnZNEPuHnFjDkwQOY5HThmXGAmW7p52e66Cgva4E06utNM= X-Gm-Gg: ASbGncuxSCNePZmTksY7Qu0SxSGPQ8G/3vyR6W4FKlguErraKydwzSBMAbEUbRKCyFi UPFwSrRdKo09pScvmAId85HlgmQ4iHw/GS6Lka+wOLXAQm5HuQzSLjG9YOlpYMtFVOSF744RQUP 0KizQdS6FxFvBBpp9MFDERHlQQjhHmwUaLwW8g00Z4fbEJTYA7JhUq4borekOWOVHBwNtGFMV0R ou7vsALlXCTD6wizHrXHqLg+BqJatr4ieG4PxSjXhakmPUy42zGVIHbp5jhxXmWmVjhq0xylSvi /vRDULMkq3tk2XLfV8hY+Phi+eSTxgsLjJ8GHRT4DA476ncqED0mFpAgytI4U3zNaDphAWFI41j 9aOHSF0UV/uzJfMI67jRI/qgTVLCwMFDFxKdY X-Google-Smtp-Source: AGHT+IG5JDLxGs3FpRf3HHwsbPTFhUcTCqNBn2LwOBaTUG80TxVUkYfL+vh/J96rPU06tkWbOX5kcg== X-Received: by 2002:a05:6000:24c6:b0:3a4:f744:e019 with SMTP id ffacd0b85a97d-3b5f19000a5mr3630396f8f.16.1752500489048; Mon, 14 Jul 2025 06:41:29 -0700 (PDT) Received: from [127.0.1.1] ([178.197.222.89]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4561b176f87sm31371375e9.35.2025.07.14.06.41.27 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Jul 2025 06:41:28 -0700 (PDT) From: Krzysztof Kozlowski Date: Mon, 14 Jul 2025 15:41:17 +0200 Subject: [PATCH 2/3] media: iris: Split power on per variants Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250714-sm8750-iris-v1-2-3006293a5bc7@linaro.org> References: <20250714-sm8750-iris-v1-0-3006293a5bc7@linaro.org> In-Reply-To: <20250714-sm8750-iris-v1-0-3006293a5bc7@linaro.org> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: Krzysztof Kozlowski , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=4799; i=krzysztof.kozlowski@linaro.org; h=from:subject:message-id; bh=D+caATHxNjJcUa+12DDZ6SBVbOWstyQMR56LoQYn7/I=; b=owEBbQKS/ZANAwAKAcE3ZuaGi4PXAcsmYgBodQkDqcOz40GQwIgJHl/yf6q4gnbJ5utEXxbX8 I8uNKbyqjSJAjMEAAEKAB0WIQTd0mIoPREbIztuuKjBN2bmhouD1wUCaHUJAwAKCRDBN2bmhouD 170MD/9bz/lYcDDzBlpE5wgMlIuFUNsDZV2kgkLlRTS/QE4T78RjD1kS88K2cKr1CL7MQ9PC8ux mMK6WwVyA7wXLL097Us2tjRDh3vDfeAC57fwAgFQZLn+NzHwbqarm8R2aR6VYvK91IofmYnFfWb FuukM/lB56tQDiS6E+L4mE+VouAl3gApvq18WRo01hTI7v6/iuhAPUVftEFdQfqePBus/HgKXhd qOmhgfX6JIGeDHut6gHwzmAEQWkJ3rr6+ix9qQ728qnY/XFRVEWylq5G0jewgj+ujRMkkr8PeiF kf/Gj7TaSEpikHg837V499GXcEGrAd7pTryqFs8Bh/dU78pQG2VD5zVHuGoO8pHcxTsNqJmdjsG Dg1ZJHvK9gXR8sn3IHfm8U/u0nPkHhkDsePEI3jRMroUPdTpsZWn7gWeHgTDjjz6JT9AlclwSyQ WZk+pCy2r63aetkT4dnHn1nKx9lZrKTB6TLAKh5bmwuFrQpdnVl+wddvO/R6NpvE15FJON/7Bx4 QU6e37rtK230O3Kq9WLo4Xdf79SbyZFDe19k71ejpPtGNr3tcQqm74k0rjx4v1f96t5DCQoMfEm WCs694vwKHWZZImFnnESiBb5TrgmgovCmAzN6gZCrakIR12FL2HNvRQ9NbVRToUReg/uSLwHfCH JyFuFivRr6Kpa7Q== X-Developer-Key: i=krzysztof.kozlowski@linaro.org; a=openpgp; fpr=9BD07E0E0C51F8D59677B7541B93437D3B41629B Current devices use same power up sequence, but starting with Qualcomm SM8750 (VPU v3.5) the sequence will grow quite a bit, so allow customizing it. No functional change so far for existing devices. Signed-off-by: Krzysztof Kozlowski --- drivers/media/platform/qcom/iris/iris_vpu2.c | 2 ++ drivers/media/platform/qcom/iris/iris_vpu3x.c | 4 ++++ drivers/media/platform/qcom/iris/iris_vpu_common.c | 8 ++++---- drivers/media/platform/qcom/iris/iris_vpu_common.h | 4 ++++ 4 files changed, 14 insertions(+), 4 deletions(-) diff --git a/drivers/media/platform/qcom/iris/iris_vpu2.c b/drivers/media/p= latform/qcom/iris/iris_vpu2.c index 7cf1bfc352d34b897451061b5c14fbe90276433d..de7d142316d2dc9ab0c4ad9cc81= 61c87ac949b4c 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu2.c +++ b/drivers/media/platform/qcom/iris/iris_vpu2.c @@ -34,6 +34,8 @@ static u64 iris_vpu2_calc_freq(struct iris_inst *inst, si= ze_t data_size) =20 const struct vpu_ops iris_vpu2_ops =3D { .power_off_hw =3D iris_vpu_power_off_hw, + .power_on_hw =3D iris_vpu_power_on_hw, .power_off_controller =3D iris_vpu_power_off_controller, + .power_on_controller =3D iris_vpu_power_on_controller, .calc_freq =3D iris_vpu2_calc_freq, }; diff --git a/drivers/media/platform/qcom/iris/iris_vpu3x.c b/drivers/media/= platform/qcom/iris/iris_vpu3x.c index 9b7c9a1495ee2f51c60b1142b2ed4680ff798f0a..c235112057aa7b7eab199573754= 1b7a8276ff18b 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu3x.c +++ b/drivers/media/platform/qcom/iris/iris_vpu3x.c @@ -264,12 +264,16 @@ static u64 iris_vpu3x_calculate_frequency(struct iris= _inst *inst, size_t data_si =20 const struct vpu_ops iris_vpu3_ops =3D { .power_off_hw =3D iris_vpu3_power_off_hardware, + .power_on_hw =3D iris_vpu_power_on_hw, .power_off_controller =3D iris_vpu_power_off_controller, + .power_on_controller =3D iris_vpu_power_on_controller, .calc_freq =3D iris_vpu3x_calculate_frequency, }; =20 const struct vpu_ops iris_vpu33_ops =3D { .power_off_hw =3D iris_vpu33_power_off_hardware, + .power_on_hw =3D iris_vpu_power_on_hw, .power_off_controller =3D iris_vpu33_power_off_controller, + .power_on_controller =3D iris_vpu_power_on_controller, .calc_freq =3D iris_vpu3x_calculate_frequency, }; diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_common.c index 42a7c53ce48eb56a4210c7e25c707a1b0881a8ce..6c51002f72ab3d9e16d5a2a50ac= 712fac91ae25c 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_common.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.c @@ -271,7 +271,7 @@ void iris_vpu_power_off(struct iris_core *core) disable_irq_nosync(core->irq); } =20 -static int iris_vpu_power_on_controller(struct iris_core *core) +int iris_vpu_power_on_controller(struct iris_core *core) { u32 rst_tbl_size =3D core->iris_platform_data->clk_rst_tbl_size; int ret; @@ -302,7 +302,7 @@ static int iris_vpu_power_on_controller(struct iris_cor= e *core) return ret; } =20 -static int iris_vpu_power_on_hw(struct iris_core *core) +int iris_vpu_power_on_hw(struct iris_core *core) { int ret; =20 @@ -337,11 +337,11 @@ int iris_vpu_power_on(struct iris_core *core) if (ret) goto err; =20 - ret =3D iris_vpu_power_on_controller(core); + ret =3D core->iris_platform_data->vpu_ops->power_on_controller(core); if (ret) goto err_unvote_icc; =20 - ret =3D iris_vpu_power_on_hw(core); + ret =3D core->iris_platform_data->vpu_ops->power_on_hw(core); if (ret) goto err_power_off_ctrl; =20 diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.h b/drivers/m= edia/platform/qcom/iris/iris_vpu_common.h index 93b7fa27be3bfa1cf6a3e83cc192cdb89d63575f..d95b305ca5a89ba8f08aefb6e6a= cd9ea4a721a8b 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_common.h +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.h @@ -14,7 +14,9 @@ extern const struct vpu_ops iris_vpu33_ops; =20 struct vpu_ops { void (*power_off_hw)(struct iris_core *core); + int (*power_on_hw)(struct iris_core *core); int (*power_off_controller)(struct iris_core *core); + int (*power_on_controller)(struct iris_core *core); u64 (*calc_freq)(struct iris_inst *inst, size_t data_size); }; =20 @@ -23,6 +25,8 @@ void iris_vpu_raise_interrupt(struct iris_core *core); void iris_vpu_clear_interrupt(struct iris_core *core); int iris_vpu_watchdog(struct iris_core *core, u32 intr_status); int iris_vpu_prepare_pc(struct iris_core *core); +int iris_vpu_power_on_controller(struct iris_core *core); +int iris_vpu_power_on_hw(struct iris_core *core); int iris_vpu_power_on(struct iris_core *core); int iris_vpu_power_off_controller(struct iris_core *core); void iris_vpu_power_off_hw(struct iris_core *core); --=20 2.43.0 From nobody Tue Oct 7 05:33:22 2025 Received: from mail-wr1-f41.google.com (mail-wr1-f41.google.com [209.85.221.41]) (using TLSv1.2 with cipher ECDHE-RSA-AES128-GCM-SHA256 (128/128 bits)) (No client certificate requested) by smtp.subspace.kernel.org (Postfix) with ESMTPS id 6FFE9253938 for ; Mon, 14 Jul 2025 13:41:32 +0000 (UTC) Authentication-Results: smtp.subspace.kernel.org; arc=none smtp.client-ip=209.85.221.41 ARC-Seal: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752500494; cv=none; b=qJvdZRe7UMkOA1DQmjP4lwzbvsTARla8wkHULd+iC4dMlWQUO85kQn6OCvLYVukRulKXn+PBWLENMHNke+mv72TipBVVwgxI8RFAo3YN9yBgK1AWyetldj6M31Xs0ju2NajarqzCJf2JxpOlbc79vms35wUQzZjPy9aMGCSBmAk= ARC-Message-Signature: i=1; a=rsa-sha256; d=subspace.kernel.org; s=arc-20240116; t=1752500494; c=relaxed/simple; bh=i0K/LlWzYq+vH2Fvviwgj+oRLZM0bLuBlclZyfr9jYk=; h=From:Date:Subject:MIME-Version:Content-Type:Message-Id:References: In-Reply-To:To:Cc; b=aM0Oyj054L7M51LTm5kmyo6cw6w99LPs5zhtbIdXwwlHLdG/YlNhDmwT4fWCOrsWFCQn2jgqrV547UrVeOAgCiWrkHzjJ0wJdRGDlar50OiQRc8chSwdIpzAAdR7lcwWSKN85s2WDKDBOKq3wXnENFVIvGk6pqc/Icpqxp3w5Hk= ARC-Authentication-Results: i=1; smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org; spf=pass smtp.mailfrom=linaro.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b=YQVJ74by; arc=none smtp.client-ip=209.85.221.41 Authentication-Results: smtp.subspace.kernel.org; dmarc=pass (p=none dis=none) header.from=linaro.org Authentication-Results: smtp.subspace.kernel.org; spf=pass smtp.mailfrom=linaro.org Authentication-Results: smtp.subspace.kernel.org; dkim=pass (2048-bit key) header.d=linaro.org header.i=@linaro.org header.b="YQVJ74by" Received: by mail-wr1-f41.google.com with SMTP id ffacd0b85a97d-3b39c46e1cfso536295f8f.3 for ; Mon, 14 Jul 2025 06:41:32 -0700 (PDT) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=linaro.org; s=google; t=1752500491; x=1753105291; darn=vger.kernel.org; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:from:to:cc:subject:date:message-id :reply-to; bh=CJWPqrlQF1baw83/gR8GKPvH1Wc5XQeX24WBznJ/8oY=; b=YQVJ74by2TXU3y66uQGpHnWDCQmaJL24dPHgw6IBt4SBxjLqo7ZPkYGKHIXBBCOWbJ WehKjDQxD2H1b99t8xyq1/2g+l63AvfUdpwOLsDHPZ8fJC56lGWTZPVB+aV/YfliKWCG urgTzBG1NyowMW7sNDNla8pxMT0GM3cxT4+940WM8rML1x+5aKjG8+BzX1IyhNRligRU 1+IctFX9MCIW36JhkcJmDR674dofzOx2Oeu4fcuD04JtDKSKOP33Pb9Rxs77pGtWEeMs symOb6xt/hTyWKIXwpsHlWdQapsw7jZw2hP8uallr4E7HzL5esEO0veqBxSue+0icWd6 CBjg== X-Google-DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=1e100.net; s=20230601; t=1752500491; x=1753105291; h=cc:to:in-reply-to:references:message-id:content-transfer-encoding :mime-version:subject:date:from:x-gm-message-state:from:to:cc :subject:date:message-id:reply-to; bh=CJWPqrlQF1baw83/gR8GKPvH1Wc5XQeX24WBznJ/8oY=; b=QElCGdRufO3l/ypb3/lK+70mIDgAljFK2hmsg6rQ5Qpvkqqf109LRgAdzhEVDM18j9 M202ZmjwqWNifyZn2v5Xo0RJuOeuzBsJWNAdvfDtC8mxx6Q8V4lzk0fJeXuv6m68xGkV vozYvP/rlM0v2WmGpOu2Kb6THvPTzPylv99LjD1V65RlzXpbupuhwC04gvbCdmCBFDY/ xSBBBypL7bG0YgFmzFcHKj3sig3EIhIo95Zi/YVaO1LKeDq3xzjWq8yXovEN4uiLd28W K855itCvgWWmoVx94DBVQlv2wUGDMYdxO5Forkz5AFlcYSi8x5MNZVvNmBX/1hTnY9pJ qQYg== X-Forwarded-Encrypted: i=1; AJvYcCXu0l5jQrRpTtcHie22kqft6yuauFt3X59uQ6/+S0/l/114+xymYQwVPe+dhPZNZYyMvC46RhrSrG91ya8=@vger.kernel.org X-Gm-Message-State: AOJu0YykfcFUq2WvNtT5ocYEfkjvnqePWeABLygtV2imEFad7EQ+ol7O F9Ls3LUUNESLHGo6q5pweDt7AFmVkwvRdK+IxdtDnpJ+zWWgX/eHjmYbX1GcznEDoRs= X-Gm-Gg: ASbGncuf2jfGbXEEJ7dbBWUL+lJ0QxFK9kcnPIJQyigan02HQpcXOMJVfJTvHlTBK9f Xd4wUzBTgbxiU2Fl5lNnH6v3KiaBRirW2fVnXQ5OK0YvYU/jBgVMJuo0Q5pnExxhlNipOQ2nUKE mHAfScud/hXwdd3IuIY5cDmkxugHmoc9MBd/38Rw0ZXp8ZdDJvzLcPgUaZDSTKjS0nv7DPSMzGy qNbTI/6+CaCRp/2q2XG8o4W3uDaqW/ZOFgxKuXh/LqkF53NT1ibGgysE/Sp6u1LeNAsYGU/RpXC eta7eMD9h+202eJ2dA4LAt/2T9rUc5E3lmrDP3T0q9O45rw+r0Zcb41FxcB//6qtsVD71Zr/MnG XWdnsyvo0U3EM3mJHFPyyl9Kc8Y/DOFxPHFwL X-Google-Smtp-Source: AGHT+IGL3IRU7nC0D+p5FvJdd/lbAgg9H5EWw9bOhTNFd2Fb3AkxJURhVh6xEe6Xw2a8YyJIB4t5/A== X-Received: by 2002:a05:600c:a117:b0:456:2137:5662 with SMTP id 5b1f17b1804b1-45621375ademr6087655e9.7.1752500490511; Mon, 14 Jul 2025 06:41:30 -0700 (PDT) Received: from [127.0.1.1] ([178.197.222.89]) by smtp.gmail.com with ESMTPSA id 5b1f17b1804b1-4561b176f87sm31371375e9.35.2025.07.14.06.41.29 (version=TLS1_3 cipher=TLS_AES_256_GCM_SHA384 bits=256/256); Mon, 14 Jul 2025 06:41:29 -0700 (PDT) From: Krzysztof Kozlowski Date: Mon, 14 Jul 2025 15:41:18 +0200 Subject: [PATCH 3/3] media: iris: Add support for SM8750 (VPU v3.5) Precedence: bulk X-Mailing-List: linux-kernel@vger.kernel.org List-Id: List-Subscribe: List-Unsubscribe: MIME-Version: 1.0 Content-Type: text/plain; charset="utf-8" Content-Transfer-Encoding: quoted-printable Message-Id: <20250714-sm8750-iris-v1-3-3006293a5bc7@linaro.org> References: <20250714-sm8750-iris-v1-0-3006293a5bc7@linaro.org> In-Reply-To: <20250714-sm8750-iris-v1-0-3006293a5bc7@linaro.org> To: Vikash Garodia , Dikshita Agarwal , Abhinav Kumar , Bryan O'Donoghue , Mauro Carvalho Chehab , Rob Herring , Krzysztof Kozlowski , Conor Dooley , Philipp Zabel Cc: Krzysztof Kozlowski , linux-media@vger.kernel.org, linux-arm-msm@vger.kernel.org, devicetree@vger.kernel.org, linux-kernel@vger.kernel.org X-Mailer: b4 0.14.2 X-Developer-Signature: v=1; a=openpgp-sha256; l=17400; i=krzysztof.kozlowski@linaro.org; h=from:subject:message-id; bh=i0K/LlWzYq+vH2Fvviwgj+oRLZM0bLuBlclZyfr9jYk=; b=owEBbQKS/ZANAwAKAcE3ZuaGi4PXAcsmYgBodQkEDv0i1qoowT0K1QZkAmbzMVaR1J2VbzEB+ Juk3eMsL+uJAjMEAAEKAB0WIQTd0mIoPREbIztuuKjBN2bmhouD1wUCaHUJBAAKCRDBN2bmhouD 19APD/4ljyzaXgCKSz99SW+bJGBV5Z6Il+IKaC5lI9SMW94Mc0nqjL33B4ajiDQcl6ozNSSYkHQ JsKs51XFs8NNw4ayztejs9q2i5oVIMB1/Od3CrJNWBQAtwNRP2YFm4qiLrfxx0IG+drnzbTnu0D VbQvtZAoUWfBq3IlIF7Cwk9OHRaovSDIzBK/qNYMYgvVSDVBQC295QMbsK5BIvvUC58ZF45l8Ph ZyU6/pvg2wURwGl097JM/Oy1YBzKLJk56vEv+m+8YZcEEI2BzKeWYvo/h/7DXRO50Uqm+qEGZdz YDJGrhatY4SK361ntha/6H6Bw87SF0UGb+l7BqkjkBdef6yplcj0RHqIxE8vEKj3avtVaAfHxPc 9lEi7HliBifUf9Fy/ygWerXuDbe4txzryIIr1Pq/eqgzJ6JMtLg54tzZXB6hozv/C6hiUr0Il8T JedIcfT6UjEpEHrtk9TXUCaHxZawGPg3FlCUHX9FV9P57oOvomShXOpAlGNRd/b2R+EAjBXCSF9 vEP9YZdtf+oWC6zEdHmeOmP+0HWbvUzna+eYTlTS3guUOOzTmdHDkJ/cJWSJugxaV1ls2GlTHaP LI9eigsfUG2mBAMihLl3fZaKTIqtUFPJ+Hs0fn9sU871LBmdKfSlifiSP5Mvp9ZQVbFOvfrS94v 06MPt0oKYrE5NHQ== X-Developer-Key: i=krzysztof.kozlowski@linaro.org; a=openpgp; fpr=9BD07E0E0C51F8D59677B7541B93437D3B41629B Add support for SM8750 Iris codec with major differences against previous generation SM8650: 1. New clocks and new resets, thus new power up and power down sequences, 2. New WRAPPER_IRIS_VCODEC_VPU_WRAPPER_SPARE_0 register programmed during boot-up Signed-off-by: Krzysztof Kozlowski Reviewed-by: Vikash Garodia --- .../platform/qcom/iris/iris_platform_common.h | 6 +- .../media/platform/qcom/iris/iris_platform_gen2.c | 68 +++++++ .../platform/qcom/iris/iris_platform_sm8750.h | 22 +++ drivers/media/platform/qcom/iris/iris_probe.c | 4 + drivers/media/platform/qcom/iris/iris_vpu3x.c | 203 +++++++++++++++++= ++++ drivers/media/platform/qcom/iris/iris_vpu_common.c | 4 + drivers/media/platform/qcom/iris/iris_vpu_common.h | 2 + 7 files changed, 308 insertions(+), 1 deletion(-) diff --git a/drivers/media/platform/qcom/iris/iris_platform_common.h b/driv= ers/media/platform/qcom/iris/iris_platform_common.h index adafdce8a856f9c661aabc5ca28f0faceaa93551..fd5a6e69e01cfd00253f4ffb282= d40112b93073b 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_common.h +++ b/drivers/media/platform/qcom/iris/iris_platform_common.h @@ -38,11 +38,15 @@ extern struct iris_platform_data qcs8300_data; extern struct iris_platform_data sm8250_data; extern struct iris_platform_data sm8550_data; extern struct iris_platform_data sm8650_data; +extern struct iris_platform_data sm8750_data; =20 enum platform_clk_type { - IRIS_AXI_CLK, + IRIS_AXI_CLK, /* AXI0 in case of platforms with multiple AXI clocks */ IRIS_CTRL_CLK, IRIS_HW_CLK, + IRIS_AXI1_CLK, + IRIS_CTRL_FREERUN_CLK, + IRIS_HW_FREERUN_CLK, }; =20 struct platform_clk_data { diff --git a/drivers/media/platform/qcom/iris/iris_platform_gen2.c b/driver= s/media/platform/qcom/iris/iris_platform_gen2.c index d3026b2bcb708c7ec31f134f628df7e57b54af4f..795efe2226228c4d7155ce18ff4= 2ba9cb74b4af2 100644 --- a/drivers/media/platform/qcom/iris/iris_platform_gen2.c +++ b/drivers/media/platform/qcom/iris/iris_platform_gen2.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights res= erved. + * Copyright (c) 2025 Linaro Ltd */ =20 #include "iris_core.h" @@ -12,6 +13,7 @@ =20 #include "iris_platform_qcs8300.h" #include "iris_platform_sm8650.h" +#include "iris_platform_sm8750.h" =20 #define VIDEO_ARCH_LX 1 =20 @@ -463,6 +465,72 @@ struct iris_platform_data sm8650_data =3D { .dec_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), }; =20 +struct iris_platform_data sm8750_data =3D { + .get_instance =3D iris_hfi_gen2_get_instance, + .init_hfi_command_ops =3D iris_hfi_gen2_command_ops_init, + .init_hfi_response_ops =3D iris_hfi_gen2_response_ops_init, + .vpu_ops =3D &iris_vpu35_ops, + .set_preset_registers =3D iris_set_sm8550_preset_registers, + .icc_tbl =3D sm8550_icc_table, + .icc_tbl_size =3D ARRAY_SIZE(sm8550_icc_table), + .clk_rst_tbl =3D sm8750_clk_reset_table, + .clk_rst_tbl_size =3D ARRAY_SIZE(sm8750_clk_reset_table), + .bw_tbl_dec =3D sm8550_bw_table_dec, + .bw_tbl_dec_size =3D ARRAY_SIZE(sm8550_bw_table_dec), + .pmdomain_tbl =3D sm8550_pmdomain_table, + .pmdomain_tbl_size =3D ARRAY_SIZE(sm8550_pmdomain_table), + .opp_pd_tbl =3D sm8550_opp_pd_table, + .opp_pd_tbl_size =3D ARRAY_SIZE(sm8550_opp_pd_table), + .clk_tbl =3D sm8750_clk_table, + .clk_tbl_size =3D ARRAY_SIZE(sm8750_clk_table), + /* Upper bound of DMA address range */ + .dma_mask =3D 0xe0000000 - 1, + .fwname =3D "qcom/vpu/vpu35_4v.mbn", + .pas_id =3D IRIS_PAS_ID, + .inst_caps =3D &platform_inst_cap_sm8550, + .inst_fw_caps =3D inst_fw_cap_sm8550, + .inst_fw_caps_size =3D ARRAY_SIZE(inst_fw_cap_sm8550), + .tz_cp_config_data =3D &tz_cp_config_sm8550, + .core_arch =3D VIDEO_ARCH_LX, + .hw_response_timeout =3D HW_RESPONSE_TIMEOUT_VALUE, + .ubwc_config =3D &ubwc_config_sm8550, + .num_vpp_pipe =3D 4, + .max_session_count =3D 16, + .max_core_mbpf =3D NUM_MBS_8K * 2, + .input_config_params_default =3D + sm8550_vdec_input_config_params_default, + .input_config_params_default_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_params_default), + .input_config_params_hevc =3D + sm8550_vdec_input_config_param_hevc, + .input_config_params_hevc_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_param_hevc), + .input_config_params_vp9 =3D + sm8550_vdec_input_config_param_vp9, + .input_config_params_vp9_size =3D + ARRAY_SIZE(sm8550_vdec_input_config_param_vp9), + .output_config_params =3D + sm8550_vdec_output_config_params, + .output_config_params_size =3D + ARRAY_SIZE(sm8550_vdec_output_config_params), + .dec_input_prop =3D sm8550_vdec_subscribe_input_properties, + .dec_input_prop_size =3D ARRAY_SIZE(sm8550_vdec_subscribe_input_propertie= s), + .dec_output_prop_avc =3D sm8550_vdec_subscribe_output_properties_avc, + .dec_output_prop_avc_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_avc), + .dec_output_prop_hevc =3D sm8550_vdec_subscribe_output_properties_hevc, + .dec_output_prop_hevc_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_hevc), + .dec_output_prop_vp9 =3D sm8550_vdec_subscribe_output_properties_vp9, + .dec_output_prop_vp9_size =3D + ARRAY_SIZE(sm8550_vdec_subscribe_output_properties_vp9), + + .dec_ip_int_buf_tbl =3D sm8550_dec_ip_int_buf_tbl, + .dec_ip_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_dec_ip_int_buf_tbl), + .dec_op_int_buf_tbl =3D sm8550_dec_op_int_buf_tbl, + .dec_op_int_buf_tbl_size =3D ARRAY_SIZE(sm8550_dec_op_int_buf_tbl), +}; + /* * Shares most of SM8550 data except: * - inst_caps to platform_inst_cap_qcs8300 diff --git a/drivers/media/platform/qcom/iris/iris_platform_sm8750.h b/driv= ers/media/platform/qcom/iris/iris_platform_sm8750.h new file mode 100644 index 0000000000000000000000000000000000000000..719056656a5baf48a7bced634d2= 582629333cf5c --- /dev/null +++ b/drivers/media/platform/qcom/iris/iris_platform_sm8750.h @@ -0,0 +1,22 @@ +/* SPDX-License-Identifier: GPL-2.0-only */ +/* + * Copyright (c) 2025 Linaro Ltd + */ + +#ifndef __MEDIA_IRIS_PLATFORM_SM8750_H__ +#define __MEDIA_IRIS_PLATFORM_SM8750_H__ + +static const char * const sm8750_clk_reset_table[] =3D { + "bus0", "bus1", "core", "vcodec0_core" +}; + +static const struct platform_clk_data sm8750_clk_table[] =3D { + {IRIS_AXI_CLK, "iface" }, + {IRIS_CTRL_CLK, "core" }, + {IRIS_HW_CLK, "vcodec0_core" }, + {IRIS_AXI1_CLK, "iface1" }, + {IRIS_CTRL_FREERUN_CLK, "core_freerun" }, + {IRIS_HW_FREERUN_CLK, "vcodec0_core_freerun" }, +}; + +#endif diff --git a/drivers/media/platform/qcom/iris/iris_probe.c b/drivers/media/= platform/qcom/iris/iris_probe.c index 4e6e92357968d7419f114cc0ffa9b571bad19e46..5fb936a04155e72f4298cd6760e= ff6e9d1da6310 100644 --- a/drivers/media/platform/qcom/iris/iris_probe.c +++ b/drivers/media/platform/qcom/iris/iris_probe.c @@ -353,6 +353,10 @@ static const struct of_device_id iris_dt_match[] =3D { .compatible =3D "qcom,sm8650-iris", .data =3D &sm8650_data, }, + { + .compatible =3D "qcom,sm8750-iris", + .data =3D &sm8750_data, + }, { }, }; MODULE_DEVICE_TABLE(of, iris_dt_match); diff --git a/drivers/media/platform/qcom/iris/iris_vpu3x.c b/drivers/media/= platform/qcom/iris/iris_vpu3x.c index c235112057aa7b7eab1995737541b7a8276ff18b..b00702a4d6c23258550a77373eb= 34740e785ef22 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu3x.c +++ b/drivers/media/platform/qcom/iris/iris_vpu3x.c @@ -1,6 +1,7 @@ // SPDX-License-Identifier: GPL-2.0-only /* * Copyright (c) 2022-2024 Qualcomm Innovation Center, Inc. All rights res= erved. + * Copyright (c) 2025 Linaro Ltd */ =20 #include @@ -19,8 +20,11 @@ #define WRAPPER_IRIS_CPU_NOC_LPI_CONTROL (WRAPPER_BASE_OFFS + 0x5C) #define REQ_POWER_DOWN_PREP BIT(0) #define WRAPPER_IRIS_CPU_NOC_LPI_STATUS (WRAPPER_BASE_OFFS + 0x60) +#define WRAPPER_CORE_POWER_CONTROL (WRAPPER_BASE_OFFS + 0x84) #define WRAPPER_CORE_CLOCK_CONFIG (WRAPPER_BASE_OFFS + 0x88) #define CORE_CLK_RUN 0x0 +/* VPU v3.5 */ +#define WRAPPER_IRIS_VCODEC_VPU_WRAPPER_SPARE_0 (WRAPPER_BASE_OFFS + 0x78) =20 #define WRAPPER_TZ_CTL_AXI_CLOCK_CONFIG (WRAPPER_TZ_BASE_OFFS + 0x14) #define CTL_AXI_CLK_HALT BIT(0) @@ -52,6 +56,8 @@ #define AON_WRAPPER_MVP_NOC_CORE_CLK_CONTROL (AON_BASE_OFFS + 0x20) #define NOC_HALT BIT(0) #define AON_WRAPPER_SPARE (AON_BASE_OFFS + 0x28) +#define AON_WRAPPER_MVP_VIDEO_CTL_NOC_LPI_CONTROL (AON_BASE_OFFS + 0x2C) +#define AON_WRAPPER_MVP_VIDEO_CTL_NOC_LPI_STATUS (AON_BASE_OFFS + 0x30) =20 static bool iris_vpu3x_hw_power_collapsed(struct iris_core *core) { @@ -225,6 +231,194 @@ static int iris_vpu33_power_off_controller(struct iri= s_core *core) return 0; } =20 +static int iris_vpu35_power_on_hw(struct iris_core *core) +{ + int ret; + u32 val; + + ret =3D iris_enable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_= HW_POWER_DOMAIN]); + if (ret) + return ret; + + /* Switch GDSC to SW control */ + writel(0x0, core->reg_base + WRAPPER_CORE_POWER_CONTROL); + ret =3D readl_poll_timeout(core->reg_base + WRAPPER_CORE_POWER_STATUS, + val, val & BIT(1), 200, 2000); + if (ret) + goto err_disable_power; + + ret =3D iris_prepare_enable_clock(core, IRIS_AXI_CLK); + if (ret) + goto err_gdsc; + + ret =3D iris_prepare_enable_clock(core, IRIS_HW_FREERUN_CLK); + if (ret) + goto err_disable_axi_clk; + + ret =3D iris_prepare_enable_clock(core, IRIS_HW_CLK); + if (ret) + goto err_disable_hw_free_clk; + + ret =3D dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER= _DOMAIN], true); + if (ret) + goto err_disable_hw_clk; + + return 0; + +err_disable_hw_clk: + iris_disable_unprepare_clock(core, IRIS_HW_CLK); +err_disable_hw_free_clk: + iris_disable_unprepare_clock(core, IRIS_HW_FREERUN_CLK); +err_disable_axi_clk: + iris_disable_unprepare_clock(core, IRIS_AXI_CLK); +err_gdsc: + writel(BIT(0), core->reg_base + WRAPPER_CORE_POWER_CONTROL); +err_disable_power: + iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_HW_POWE= R_DOMAIN]); + + return ret; +} + +static void iris_vpu35_power_off_hw(struct iris_core *core) +{ + u32 val =3D 0, value, i; + int ret; + + if (iris_vpu3x_hw_power_collapsed(core)) + goto disable_power; + + value =3D readl(core->reg_base + WRAPPER_CORE_CLOCK_CONFIG); + if (value) + writel(CORE_CLK_RUN, core->reg_base + WRAPPER_CORE_CLOCK_CONFIG); + + for (i =3D 0; i < core->iris_platform_data->num_vpp_pipe; i++) { + ret =3D readl_poll_timeout(core->reg_base + VCODEC_SS_IDLE_STATUSN + 4 *= i, + val, val & 0x400000, 2000, 20000); + if (ret) + goto disable_power; + } + + ret =3D readl_poll_timeout(core->reg_base + AON_WRAPPER_MVP_NOC_LPI_STATU= S, + val, val & BIT(0), 200, 2000); + if (ret) + goto disable_power; + + /* set MNoC to low power, set PD_NOC_QREQ (bit 0) */ + writel(BIT(0), core->reg_base + AON_WRAPPER_MVP_NOC_LPI_CONTROL); + + writel(CORE_BRIDGE_SW_RESET | CORE_BRIDGE_HW_RESET_DISABLE, + core->reg_base + CPU_CS_AHB_BRIDGE_SYNC_RESET); + writel(CORE_BRIDGE_HW_RESET_DISABLE, core->reg_base + CPU_CS_AHB_BRIDGE_S= YNC_RESET); + writel(0x0, core->reg_base + CPU_CS_AHB_BRIDGE_SYNC_RESET); + +disable_power: + dev_pm_genpd_set_hwmode(core->pmdomain_tbl->pd_devs[IRIS_HW_POWER_DOMAIN]= , false); + iris_disable_unprepare_clock(core, IRIS_HW_CLK); + iris_disable_unprepare_clock(core, IRIS_HW_FREERUN_CLK); + iris_disable_unprepare_clock(core, IRIS_AXI_CLK); + + writel(BIT(0), core->reg_base + WRAPPER_CORE_POWER_CONTROL); + /* + * Do not wait for power-down, because hardware might delay it (it + * always timeouts). + */ + + iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_HW_POWE= R_DOMAIN]); +} + +static int iris_vpu35_power_off_controller(struct iris_core *core) +{ + u32 xo_rst_tbl_size =3D core->iris_platform_data->controller_rst_tbl_size; + u32 clk_rst_tbl_size =3D core->iris_platform_data->clk_rst_tbl_size; + u32 val =3D 0; + int ret; + + writel(MSK_SIGNAL_FROM_TENSILICA | MSK_CORE_POWER_ON, core->reg_base + CP= U_CS_X2RPMH); + + writel(REQ_POWER_DOWN_PREP, core->reg_base + WRAPPER_IRIS_CPU_NOC_LPI_CON= TROL); + + ret =3D readl_poll_timeout(core->reg_base + WRAPPER_IRIS_CPU_NOC_LPI_STAT= US, + val, val & BIT(0), 200, 2000); + if (ret) + goto disable_power; + + writel(0x0, core->reg_base + WRAPPER_IRIS_CPU_NOC_LPI_CONTROL); + + writel(REQ_POWER_DOWN_PREP, core->reg_base + AON_WRAPPER_MVP_VIDEO_CTL_NO= C_LPI_CONTROL); + ret =3D readl_poll_timeout(core->reg_base + AON_WRAPPER_MVP_VIDEO_CTL_NOC= _LPI_STATUS, + val, val & (BIT(0) | BIT(1) | BIT(2)), 15, 1000); + if (ret) + goto disable_power; + + writel(0x0, core->reg_base + AON_WRAPPER_MVP_VIDEO_CTL_NOC_LPI_CONTROL); + + writel(0x0, core->reg_base + WRAPPER_DEBUG_BRIDGE_LPI_CONTROL); + + ret =3D readl_poll_timeout(core->reg_base + WRAPPER_DEBUG_BRIDGE_LPI_STAT= US, + val, val =3D=3D 0, 200, 2000); + if (ret) + goto disable_power; + +disable_power: + iris_disable_unprepare_clock(core, IRIS_CTRL_CLK); + iris_disable_unprepare_clock(core, IRIS_CTRL_FREERUN_CLK); + iris_disable_unprepare_clock(core, IRIS_AXI1_CLK); + + iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_PO= WER_DOMAIN]); + + reset_control_bulk_reset(clk_rst_tbl_size, core->resets); + + reset_control_bulk_assert(xo_rst_tbl_size, core->controller_resets); + + usleep_range(400, 500); + + reset_control_bulk_deassert(xo_rst_tbl_size, core->controller_resets); + + return 0; +} + +static int iris_vpu35_power_on_controller(struct iris_core *core) +{ + u32 rst_tbl_size =3D core->iris_platform_data->clk_rst_tbl_size; + int ret; + + ret =3D iris_enable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_= CTRL_POWER_DOMAIN]); + if (ret) + return ret; + + ret =3D reset_control_bulk_reset(rst_tbl_size, core->resets); + if (ret) + goto err_disable_power; + + ret =3D iris_prepare_enable_clock(core, IRIS_AXI1_CLK); + if (ret) + goto err_disable_power; + + ret =3D iris_prepare_enable_clock(core, IRIS_CTRL_FREERUN_CLK); + if (ret) + goto err_disable_axi1_clk; + + ret =3D iris_prepare_enable_clock(core, IRIS_CTRL_CLK); + if (ret) + goto err_disable_ctrl_free_clk; + + return 0; + +err_disable_ctrl_free_clk: + iris_disable_unprepare_clock(core, IRIS_CTRL_FREERUN_CLK); +err_disable_axi1_clk: + iris_disable_unprepare_clock(core, IRIS_AXI1_CLK); +err_disable_power: + iris_disable_power_domains(core, core->pmdomain_tbl->pd_devs[IRIS_CTRL_PO= WER_DOMAIN]); + + return ret; +} + +static void iris_vpu35_program_bootup_registers(struct iris_core *core) +{ + writel(0x1, core->reg_base + WRAPPER_IRIS_VCODEC_VPU_WRAPPER_SPARE_0); +} + static u64 iris_vpu3x_calculate_frequency(struct iris_inst *inst, size_t d= ata_size) { struct platform_inst_caps *caps =3D inst->core->iris_platform_data->inst_= caps; @@ -277,3 +471,12 @@ const struct vpu_ops iris_vpu33_ops =3D { .power_on_controller =3D iris_vpu_power_on_controller, .calc_freq =3D iris_vpu3x_calculate_frequency, }; + +const struct vpu_ops iris_vpu35_ops =3D { + .power_off_hw =3D iris_vpu35_power_off_hw, + .power_on_hw =3D iris_vpu35_power_on_hw, + .power_off_controller =3D iris_vpu35_power_off_controller, + .power_on_controller =3D iris_vpu35_power_on_controller, + .program_bootup_registers =3D iris_vpu35_program_bootup_registers, + .calc_freq =3D iris_vpu3x_calculate_frequency, +}; diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.c b/drivers/m= edia/platform/qcom/iris/iris_vpu_common.c index 6c51002f72ab3d9e16d5a2a50ac712fac91ae25c..bb98950e018fadf69ac4f41b303= 7f7fd6ac33c5b 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_common.c +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.c @@ -84,6 +84,7 @@ static void iris_vpu_interrupt_init(struct iris_core *cor= e) static void iris_vpu_setup_ucregion_memory_map(struct iris_core *core) { u32 queue_size, value; + const struct vpu_ops *vpu_ops =3D core->iris_platform_data->vpu_ops; =20 /* Iris hardware requires 4K queue alignment */ queue_size =3D ALIGN(sizeof(struct iris_hfi_queue_table_header) + @@ -105,6 +106,9 @@ static void iris_vpu_setup_ucregion_memory_map(struct i= ris_core *core) value =3D (u32)core->sfr_daddr + core->iris_platform_data->core_arch; writel(value, core->reg_base + SFR_ADDR); } + + if (vpu_ops->program_bootup_registers) + vpu_ops->program_bootup_registers(core); } =20 int iris_vpu_boot_firmware(struct iris_core *core) diff --git a/drivers/media/platform/qcom/iris/iris_vpu_common.h b/drivers/m= edia/platform/qcom/iris/iris_vpu_common.h index d95b305ca5a89ba8f08aefb6e6acd9ea4a721a8b..d636e287457adf0c44540af5c85= cfa69decbca8b 100644 --- a/drivers/media/platform/qcom/iris/iris_vpu_common.h +++ b/drivers/media/platform/qcom/iris/iris_vpu_common.h @@ -11,12 +11,14 @@ struct iris_core; extern const struct vpu_ops iris_vpu2_ops; extern const struct vpu_ops iris_vpu3_ops; extern const struct vpu_ops iris_vpu33_ops; +extern const struct vpu_ops iris_vpu35_ops; =20 struct vpu_ops { void (*power_off_hw)(struct iris_core *core); int (*power_on_hw)(struct iris_core *core); int (*power_off_controller)(struct iris_core *core); int (*power_on_controller)(struct iris_core *core); + void (*program_bootup_registers)(struct iris_core *core); u64 (*calc_freq)(struct iris_inst *inst, size_t data_size); }; =20 --=20 2.43.0