* [PATCH v4 0/3] Add MSM8953 camss support @ 2024-11-03 9:45 Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 1/3] media: qcom: camss: implement pm domain ops for VFE v4.1 Barnabás Czémán ` (2 more replies) 0 siblings, 3 replies; 14+ messages in thread From: Barnabás Czémán @ 2024-11-03 9:45 UTC (permalink / raw) To: Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Barnabas Czeman Cc: linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak Add camss support for MSM8953/SDM450/SDM632 based devices. This patch series was tested on Redmi Note 4 (mido). Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> --- Changes in v4: - Fix schema commit subject prefix. - Change vfe commit subject prefix. - Link to v3: https://lore.kernel.org/r/20241102-camss-msm8953-v3-0-7041c9fa7a58@mainlining.org Changes in v3: - Fix schema issues addressed by reviews. - Fix commit messages. - Link to v2: https://lore.kernel.org/r/20241102-camss-msm8953-v2-0-837310e4541c@mainlining.org Changes in v2: - Add power-domain-names and pd_name. - Fix style issues and orderings in schema. - Link to v1: https://lore.kernel.org/r/20241101-camss-msm8953-v1-0-4012559fcbc2@mainlining.org --- Barnabás Czémán (2): media: qcom: camss: implement pm domain ops for VFE v4.1 media: dt-bindings: Add qcom,msm8953-camss Vladimir Lypak (1): media: qcom: camss: Add MSM8953 resources .../bindings/media/qcom,msm8953-camss.yaml | 322 +++++++++++++++++++++ drivers/media/platform/qcom/camss/camss-csiphy.c | 1 + drivers/media/platform/qcom/camss/camss-ispif.c | 5 + drivers/media/platform/qcom/camss/camss-vfe-4-1.c | 10 +- drivers/media/platform/qcom/camss/camss-vfe.c | 1 + drivers/media/platform/qcom/camss/camss.c | 170 +++++++++++ drivers/media/platform/qcom/camss/camss.h | 1 + 7 files changed, 508 insertions(+), 2 deletions(-) --- base-commit: f9f24ca362a4d84dd8aeb4b8f3ec28cb6c43dd06 change-id: 20241101-camss-msm8953-3e8a0474e6cd Best regards, -- Barnabás Czémán <barnabas.czeman@mainlining.org> ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v4 1/3] media: qcom: camss: implement pm domain ops for VFE v4.1 2024-11-03 9:45 [PATCH v4 0/3] Add MSM8953 camss support Barnabás Czémán @ 2024-11-03 9:45 ` Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources Barnabás Czémán 2 siblings, 0 replies; 14+ messages in thread From: Barnabás Czémán @ 2024-11-03 9:45 UTC (permalink / raw) To: Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Barnabas Czeman Cc: linux-media, linux-arm-msm, linux-kernel, devicetree MSM8917 and MSM8953 have multiple VFE power-domains they have to be powered on/off explicitly. Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> --- drivers/media/platform/qcom/camss/camss-vfe-4-1.c | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) diff --git a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c b/drivers/media/platform/qcom/camss/camss-vfe-4-1.c index 1bd3a6ef1d04d8610fd1bee0c22cdbc147c98de5..9a9007c3ff33b40f4c88cd30283f0ad42f8e8d00 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe-4-1.c +++ b/drivers/media/platform/qcom/camss/camss-vfe-4-1.c @@ -938,7 +938,10 @@ static irqreturn_t vfe_isr(int irq, void *dev) */ static void vfe_4_1_pm_domain_off(struct vfe_device *vfe) { - /* nop */ + if (!vfe->res->has_pd) + return; + + vfe_pm_domain_off(vfe); } /* @@ -947,7 +950,10 @@ static void vfe_4_1_pm_domain_off(struct vfe_device *vfe) */ static int vfe_4_1_pm_domain_on(struct vfe_device *vfe) { - return 0; + if (!vfe->res->has_pd) + return 0; + + return vfe_pm_domain_on(vfe); } static const struct vfe_hw_ops_gen1 vfe_ops_gen1_4_1 = { -- 2.47.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss 2024-11-03 9:45 [PATCH v4 0/3] Add MSM8953 camss support Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 1/3] media: qcom: camss: implement pm domain ops for VFE v4.1 Barnabás Czémán @ 2024-11-03 9:45 ` Barnabás Czémán 2024-11-03 16:09 ` Krzysztof Kozlowski 2024-11-13 4:47 ` Vladimir Zapolskiy 2024-11-03 9:45 ` [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources Barnabás Czémán 2 siblings, 2 replies; 14+ messages in thread From: Barnabás Czémán @ 2024-11-03 9:45 UTC (permalink / raw) To: Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Barnabas Czeman Cc: linux-media, linux-arm-msm, linux-kernel, devicetree Add bindings for qcom,msm8953-camss in order to support the camera subsystem for MSM8953. Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> --- .../bindings/media/qcom,msm8953-camss.yaml | 322 +++++++++++++++++++++ 1 file changed, 322 insertions(+) diff --git a/Documentation/devicetree/bindings/media/qcom,msm8953-camss.yaml b/Documentation/devicetree/bindings/media/qcom,msm8953-camss.yaml new file mode 100644 index 0000000000000000000000000000000000000000..8856fba385b1123d748199b46c5009c97700ad9b --- /dev/null +++ b/Documentation/devicetree/bindings/media/qcom,msm8953-camss.yaml @@ -0,0 +1,322 @@ +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) +%YAML 1.2 +--- +$id: http://devicetree.org/schemas/media/qcom,msm8953-camss.yaml# +$schema: http://devicetree.org/meta-schemas/core.yaml# + +title: Qualcomm MSM8953 Camera Subsystem (CAMSS) + +maintainers: + - Barnabas Czeman <barnabas.czeman@mainlining.org> + +description: + The CAMSS IP is a CSI decoder and ISP present on Qualcomm platforms + +properties: + compatible: + const: qcom,msm8953-camss + + clocks: + minItems: 30 + maxItems: 30 + + clock-names: + items: + - const: ahb + - const: csi0 + - const: csi0_ahb + - const: csi0_phy + - const: csi0_pix + - const: csi0_rdi + - const: csi1 + - const: csi1_ahb + - const: csi1_phy + - const: csi1_pix + - const: csi1_rdi + - const: csi2 + - const: csi2_ahb + - const: csi2_phy + - const: csi2_pix + - const: csi2_rdi + - const: csi_vfe0 + - const: csi_vfe1 + - const: csiphy0_timer + - const: csiphy1_timer + - const: csiphy2_timer + - const: ispif_ahb + - const: micro_ahb + - const: top_ahb + - const: vfe0 + - const: vfe0_ahb + - const: vfe0_axi + - const: vfe1 + - const: vfe1_ahb + - const: vfe1_axi + + interrupts: + minItems: 9 + maxItems: 9 + + interrupt-names: + items: + - const: csid0 + - const: csid1 + - const: csid2 + - const: csiphy0 + - const: csiphy1 + - const: csiphy2 + - const: ispif + - const: vfe0 + - const: vfe1 + + iommus: + maxItems: 1 + + power-domains: + items: + - description: VFE0 GDSC - Video Front End, Global Distributed Switch Controller. + - description: VFE1 GDSC - Video Front End, Global Distributed Switch Controller. + + power-domain-names: + items: + - const: vfe0 + - const: vfe1 + + ports: + $ref: /schemas/graph.yaml#/properties/ports + + description: + CSI input ports. + + properties: + port@0: + $ref: /schemas/graph.yaml#/$defs/port-base + unevaluatedProperties: false + description: + Input port for receiving CSI data. + + properties: + endpoint: + $ref: video-interfaces.yaml# + unevaluatedProperties: false + + properties: + data-lanes: + description: + An array of physical data lanes indexes. + Position of an entry determines the logical + lane number, while the value of an entry + indicates physical lane index. Lane swapping + is supported. Physical lane indexes; + 0, 2, 3, 4. + minItems: 1 + maxItems: 4 + + required: + - data-lanes + + port@1: + $ref: /schemas/graph.yaml#/$defs/port-base + unevaluatedProperties: false + description: + Input port for receiving CSI data. + + properties: + endpoint: + $ref: video-interfaces.yaml# + unevaluatedProperties: false + + properties: + data-lanes: + minItems: 1 + maxItems: 4 + + required: + - data-lanes + + port@2: + $ref: /schemas/graph.yaml#/$defs/port-base + unevaluatedProperties: false + description: + Input port for receiving CSI data. + + properties: + endpoint: + $ref: video-interfaces.yaml# + unevaluatedProperties: false + + properties: + data-lanes: + minItems: 1 + maxItems: 4 + + required: + - data-lanes + + reg: + minItems: 13 + maxItems: 13 + + reg-names: + items: + - const: csi_clk_mux + - const: csid0 + - const: csid1 + - const: csid2 + - const: csiphy0 + - const: csiphy0_clk_mux + - const: csiphy1 + - const: csiphy1_clk_mux + - const: csiphy2 + - const: csiphy2_clk_mux + - const: ispif + - const: vfe0 + - const: vfe1 + + vdda-supply: + description: + Definition of the regulator used as analog power supply. + +required: + - compatible + - reg + - reg-names + - clocks + - clock-names + - interrupts + - interrupt-names + - iommus + - power-domains + - power-domain-names + - vdda-supply + +additionalProperties: false + +examples: + - | + #include <dt-bindings/interrupt-controller/arm-gic.h> + #include <dt-bindings/clock/qcom,gcc-msm8953.h> + + camss: camss@1b00020 { + compatible = "qcom,msm8953-camss"; + + reg = <0x1b00020 0x10>, + <0x1b30000 0x100>, + <0x1b30400 0x100>, + <0x1b30800 0x100>, + <0x1b34000 0x1000>, + <0x1b00030 0x4>, + <0x1b35000 0x1000>, + <0x1b00038 0x4>, + <0x1b36000 0x1000>, + <0x1b00040 0x4>, + <0x1b31000 0x500>, + <0x1b10000 0x1000>, + <0x1b14000 0x1000>; + reg-names = "csi_clk_mux", + "csid0", + "csid1", + "csid2", + "csiphy0", + "csiphy0_clk_mux", + "csiphy1", + "csiphy1_clk_mux", + "csiphy2", + "csiphy2_clk_mux", + "ispif", + "vfe0", + "vfe1"; + + clocks = <&gcc GCC_CAMSS_AHB_CLK>, + <&gcc GCC_CAMSS_CSI0_CLK>, + <&gcc GCC_CAMSS_CSI0_AHB_CLK>, + <&gcc GCC_CAMSS_CSI0PHY_CLK>, + <&gcc GCC_CAMSS_CSI0PIX_CLK>, + <&gcc GCC_CAMSS_CSI0RDI_CLK>, + <&gcc GCC_CAMSS_CSI1_CLK>, + <&gcc GCC_CAMSS_CSI1_AHB_CLK>, + <&gcc GCC_CAMSS_CSI1PHY_CLK>, + <&gcc GCC_CAMSS_CSI1PIX_CLK>, + <&gcc GCC_CAMSS_CSI1RDI_CLK>, + <&gcc GCC_CAMSS_CSI2_CLK>, + <&gcc GCC_CAMSS_CSI2_AHB_CLK>, + <&gcc GCC_CAMSS_CSI2PHY_CLK>, + <&gcc GCC_CAMSS_CSI2PIX_CLK>, + <&gcc GCC_CAMSS_CSI2RDI_CLK>, + <&gcc GCC_CAMSS_CSI_VFE0_CLK>, + <&gcc GCC_CAMSS_CSI_VFE1_CLK>, + <&gcc GCC_CAMSS_CSI0PHYTIMER_CLK>, + <&gcc GCC_CAMSS_CSI1PHYTIMER_CLK>, + <&gcc GCC_CAMSS_CSI2PHYTIMER_CLK>, + <&gcc GCC_CAMSS_ISPIF_AHB_CLK>, + <&gcc GCC_CAMSS_MICRO_AHB_CLK>, + <&gcc GCC_CAMSS_TOP_AHB_CLK>, + <&gcc GCC_CAMSS_VFE0_CLK>, + <&gcc GCC_CAMSS_VFE0_AHB_CLK>, + <&gcc GCC_CAMSS_VFE0_AXI_CLK>, + <&gcc GCC_CAMSS_VFE1_CLK>, + <&gcc GCC_CAMSS_VFE1_AHB_CLK>, + <&gcc GCC_CAMSS_VFE1_AXI_CLK>; + clock-names = "ahb", + "csi0", + "csi0_ahb", + "csi0_phy", + "csi0_pix", + "csi0_rdi", + "csi1", + "csi1_ahb", + "csi1_phy", + "csi1_pix", + "csi1_rdi", + "csi2", + "csi2_ahb", + "csi2_phy", + "csi2_pix", + "csi2_rdi", + "csi_vfe0", + "csi_vfe1", + "csiphy0_timer", + "csiphy1_timer", + "csiphy2_timer", + "ispif_ahb", + "micro_ahb", + "top_ahb", + "vfe0", + "vfe0_ahb", + "vfe0_axi", + "vfe1", + "vfe1_ahb", + "vfe1_axi"; + + interrupts = <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 52 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 153 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 79 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 315 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 55 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 57 IRQ_TYPE_EDGE_RISING>, + <GIC_SPI 29 IRQ_TYPE_EDGE_RISING>; + interrupt-names = "csid0", + "csid1", + "csid2", + "csiphy0", + "csiphy1", + "csiphy2", + "ispif", + "vfe0", + "vfe1"; + + iommus = <&apps_iommu 0x14>; + + power-domains = <&gcc VFE0_GDSC>, + <&gcc VFE1_GDSC>; + power-domain-names = "vfe0", "vfe1"; + + vdda-supply = <®_2v8>; + + ports { + #address-cells = <1>; + #size-cells = <0>; + }; + }; -- 2.47.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss 2024-11-03 9:45 ` [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss Barnabás Czémán @ 2024-11-03 16:09 ` Krzysztof Kozlowski 2024-11-13 4:47 ` Vladimir Zapolskiy 1 sibling, 0 replies; 14+ messages in thread From: Krzysztof Kozlowski @ 2024-11-03 16:09 UTC (permalink / raw) To: Barnabás Czémán, Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: linux-media, linux-arm-msm, linux-kernel, devicetree On 03/11/2024 10:45, Barnabás Czémán wrote: > Add bindings for qcom,msm8953-camss in order to support the camera > subsystem for MSM8953. > > Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> > Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> > --- > .../bindings/media/qcom,msm8953-camss.yaml | 322 +++++++++++++++++++++ > 1 file changed, 322 insertions(+) > Reviewed-by: Krzysztof Kozlowski <krzysztof.kozlowski@linaro.org> Best regards, Krzysztof ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss 2024-11-03 9:45 ` [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss Barnabás Czémán 2024-11-03 16:09 ` Krzysztof Kozlowski @ 2024-11-13 4:47 ` Vladimir Zapolskiy 1 sibling, 0 replies; 14+ messages in thread From: Vladimir Zapolskiy @ 2024-11-13 4:47 UTC (permalink / raw) To: Barnabás Czémán, Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: linux-media, linux-arm-msm, linux-kernel, devicetree On 11/3/24 11:45, Barnabás Czémán wrote: > Add bindings for qcom,msm8953-camss in order to support the camera > subsystem for MSM8953. > > Reviewed-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> > Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> > --- > .../bindings/media/qcom,msm8953-camss.yaml | 322 +++++++++++++++++++++ > 1 file changed, 322 insertions(+) > > diff --git a/Documentation/devicetree/bindings/media/qcom,msm8953-camss.yaml b/Documentation/devicetree/bindings/media/qcom,msm8953-camss.yaml > new file mode 100644 > index 0000000000000000000000000000000000000000..8856fba385b1123d748199b46c5009c97700ad9b > --- /dev/null > +++ b/Documentation/devicetree/bindings/media/qcom,msm8953-camss.yaml > @@ -0,0 +1,322 @@ > +# SPDX-License-Identifier: (GPL-2.0 OR BSD-2-Clause) > +%YAML 1.2 > +--- > +$id: http://devicetree.org/schemas/media/qcom,msm8953-camss.yaml# > +$schema: http://devicetree.org/meta-schemas/core.yaml# > + > +title: Qualcomm MSM8953 Camera Subsystem (CAMSS) > + > +maintainers: > + - Barnabas Czeman <barnabas.czeman@mainlining.org> > + > +description: > + The CAMSS IP is a CSI decoder and ISP present on Qualcomm platforms > + > +properties: > + compatible: > + const: qcom,msm8953-camss > + > + clocks: > + minItems: 30 > + maxItems: 30 > + > + clock-names: > + items: > + - const: ahb > + - const: csi0 > + - const: csi0_ahb > + - const: csi0_phy > + - const: csi0_pix > + - const: csi0_rdi > + - const: csi1 > + - const: csi1_ahb > + - const: csi1_phy > + - const: csi1_pix > + - const: csi1_rdi > + - const: csi2 > + - const: csi2_ahb > + - const: csi2_phy > + - const: csi2_pix > + - const: csi2_rdi > + - const: csi_vfe0 > + - const: csi_vfe1 > + - const: csiphy0_timer > + - const: csiphy1_timer > + - const: csiphy2_timer > + - const: ispif_ahb > + - const: micro_ahb > + - const: top_ahb > + - const: vfe0 > + - const: vfe0_ahb > + - const: vfe0_axi > + - const: vfe1 > + - const: vfe1_ahb > + - const: vfe1_axi > + > + interrupts: > + minItems: 9 > + maxItems: 9 > + > + interrupt-names: > + items: > + - const: csid0 > + - const: csid1 > + - const: csid2 > + - const: csiphy0 > + - const: csiphy1 > + - const: csiphy2 > + - const: ispif > + - const: vfe0 > + - const: vfe1 > + > + iommus: > + maxItems: 1 > + > + power-domains: > + items: > + - description: VFE0 GDSC - Video Front End, Global Distributed Switch Controller. > + - description: VFE1 GDSC - Video Front End, Global Distributed Switch Controller. > + > + power-domain-names: > + items: > + - const: vfe0 > + - const: vfe1 > + > + ports: > + $ref: /schemas/graph.yaml#/properties/ports > + > + description: > + CSI input ports. > + > + properties: > + port@0: > + $ref: /schemas/graph.yaml#/$defs/port-base > + unevaluatedProperties: false > + description: > + Input port for receiving CSI data. > + > + properties: > + endpoint: > + $ref: video-interfaces.yaml# > + unevaluatedProperties: false > + > + properties: > + data-lanes: > + description: > + An array of physical data lanes indexes. > + Position of an entry determines the logical > + lane number, while the value of an entry > + indicates physical lane index. Lane swapping > + is supported. Physical lane indexes; > + 0, 2, 3, 4. Drop the rewritten description, it's given in the referenced above video-interfaces.yaml And that 0, 2, 3, 4 array is invalid apparently. Lane 4 is the clock lane. > + minItems: 1 > + maxItems: 4 > + > + required: > + - data-lanes > + > + port@1: > + $ref: /schemas/graph.yaml#/$defs/port-base > + unevaluatedProperties: false > + description: > + Input port for receiving CSI data. > + > + properties: > + endpoint: > + $ref: video-interfaces.yaml# > + unevaluatedProperties: false > + > + properties: > + data-lanes: > + minItems: 1 > + maxItems: 4 > + > + required: > + - data-lanes > + > + port@2: > + $ref: /schemas/graph.yaml#/$defs/port-base > + unevaluatedProperties: false > + description: > + Input port for receiving CSI data. > + > + properties: > + endpoint: > + $ref: video-interfaces.yaml# > + unevaluatedProperties: false > + > + properties: > + data-lanes: > + minItems: 1 > + maxItems: 4 > + > + required: > + - data-lanes > + > + reg: > + minItems: 13 > + maxItems: 13 > + > + reg-names: > + items: > + - const: csi_clk_mux > + - const: csid0 > + - const: csid1 > + - const: csid2 > + - const: csiphy0 > + - const: csiphy0_clk_mux > + - const: csiphy1 > + - const: csiphy1_clk_mux > + - const: csiphy2 > + - const: csiphy2_clk_mux > + - const: ispif > + - const: vfe0 > + - const: vfe1 > + > + vdda-supply: > + description: > + Definition of the regulator used as analog power supply. Is there such a thing as "analog power supply" in general, and in connection to CAMSS PHY in particular? I believe it was just wrongly copied from somewhere. Instead please explicitly specify that it's a CAMSS CSIPHY supply and provide its expected voltage level in the description. > + > +required: > + - compatible > + - reg > + - reg-names > + - clocks > + - clock-names > + - interrupts > + - interrupt-names > + - iommus > + - power-domains > + - power-domain-names > + - vdda-supply > + > +additionalProperties: false > + > +examples: > + - | > + #include <dt-bindings/interrupt-controller/arm-gic.h> > + #include <dt-bindings/clock/qcom,gcc-msm8953.h> > + > + camss: camss@1b00020 { > + compatible = "qcom,msm8953-camss"; > + > + reg = <0x1b00020 0x10>, > + <0x1b30000 0x100>, > + <0x1b30400 0x100>, > + <0x1b30800 0x100>, > + <0x1b34000 0x1000>, > + <0x1b00030 0x4>, > + <0x1b35000 0x1000>, > + <0x1b00038 0x4>, > + <0x1b36000 0x1000>, > + <0x1b00040 0x4>, > + <0x1b31000 0x500>, > + <0x1b10000 0x1000>, > + <0x1b14000 0x1000>; > + reg-names = "csi_clk_mux", > + "csid0", > + "csid1", > + "csid2", > + "csiphy0", > + "csiphy0_clk_mux", > + "csiphy1", > + "csiphy1_clk_mux", > + "csiphy2", > + "csiphy2_clk_mux", > + "ispif", > + "vfe0", > + "vfe1"; > + > + clocks = <&gcc GCC_CAMSS_AHB_CLK>, > + <&gcc GCC_CAMSS_CSI0_CLK>, > + <&gcc GCC_CAMSS_CSI0_AHB_CLK>, > + <&gcc GCC_CAMSS_CSI0PHY_CLK>, > + <&gcc GCC_CAMSS_CSI0PIX_CLK>, > + <&gcc GCC_CAMSS_CSI0RDI_CLK>, > + <&gcc GCC_CAMSS_CSI1_CLK>, > + <&gcc GCC_CAMSS_CSI1_AHB_CLK>, > + <&gcc GCC_CAMSS_CSI1PHY_CLK>, > + <&gcc GCC_CAMSS_CSI1PIX_CLK>, > + <&gcc GCC_CAMSS_CSI1RDI_CLK>, > + <&gcc GCC_CAMSS_CSI2_CLK>, > + <&gcc GCC_CAMSS_CSI2_AHB_CLK>, > + <&gcc GCC_CAMSS_CSI2PHY_CLK>, > + <&gcc GCC_CAMSS_CSI2PIX_CLK>, > + <&gcc GCC_CAMSS_CSI2RDI_CLK>, > + <&gcc GCC_CAMSS_CSI_VFE0_CLK>, > + <&gcc GCC_CAMSS_CSI_VFE1_CLK>, > + <&gcc GCC_CAMSS_CSI0PHYTIMER_CLK>, > + <&gcc GCC_CAMSS_CSI1PHYTIMER_CLK>, > + <&gcc GCC_CAMSS_CSI2PHYTIMER_CLK>, > + <&gcc GCC_CAMSS_ISPIF_AHB_CLK>, > + <&gcc GCC_CAMSS_MICRO_AHB_CLK>, > + <&gcc GCC_CAMSS_TOP_AHB_CLK>, > + <&gcc GCC_CAMSS_VFE0_CLK>, > + <&gcc GCC_CAMSS_VFE0_AHB_CLK>, > + <&gcc GCC_CAMSS_VFE0_AXI_CLK>, > + <&gcc GCC_CAMSS_VFE1_CLK>, > + <&gcc GCC_CAMSS_VFE1_AHB_CLK>, > + <&gcc GCC_CAMSS_VFE1_AXI_CLK>; > + clock-names = "ahb", > + "csi0", > + "csi0_ahb", > + "csi0_phy", > + "csi0_pix", > + "csi0_rdi", > + "csi1", > + "csi1_ahb", > + "csi1_phy", > + "csi1_pix", > + "csi1_rdi", > + "csi2", > + "csi2_ahb", > + "csi2_phy", > + "csi2_pix", > + "csi2_rdi", > + "csi_vfe0", > + "csi_vfe1", > + "csiphy0_timer", > + "csiphy1_timer", > + "csiphy2_timer", > + "ispif_ahb", > + "micro_ahb", > + "top_ahb", > + "vfe0", > + "vfe0_ahb", > + "vfe0_axi", > + "vfe1", > + "vfe1_ahb", > + "vfe1_axi"; > + > + interrupts = <GIC_SPI 51 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 52 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 153 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 78 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 79 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 315 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 55 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 57 IRQ_TYPE_EDGE_RISING>, > + <GIC_SPI 29 IRQ_TYPE_EDGE_RISING>; > + interrupt-names = "csid0", > + "csid1", > + "csid2", > + "csiphy0", > + "csiphy1", > + "csiphy2", > + "ispif", > + "vfe0", > + "vfe1"; > + > + iommus = <&apps_iommu 0x14>; > + > + power-domains = <&gcc VFE0_GDSC>, > + <&gcc VFE1_GDSC>; > + power-domain-names = "vfe0", "vfe1"; > + > + vdda-supply = <®_2v8>; > + > + ports { > + #address-cells = <1>; > + #size-cells = <0>; > + }; > + }; > -- Best wishes, Vladimir ^ permalink raw reply [flat|nested] 14+ messages in thread
* [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-03 9:45 [PATCH v4 0/3] Add MSM8953 camss support Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 1/3] media: qcom: camss: implement pm domain ops for VFE v4.1 Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss Barnabás Czémán @ 2024-11-03 9:45 ` Barnabás Czémán 2024-11-13 4:58 ` Vladimir Zapolskiy 2 siblings, 1 reply; 14+ messages in thread From: Barnabás Czémán @ 2024-11-03 9:45 UTC (permalink / raw) To: Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, Barnabas Czeman Cc: linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak From: Vladimir Lypak <vladimir.lypak@gmail.com> This commit describes the hardware layout for the MSM8953 for the following hardware blocks: - 2 x VFE, 3 RDI per VFE - 3 x CSID - 3 x CSI PHY Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> Acked-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> --- drivers/media/platform/qcom/camss/camss-csiphy.c | 1 + drivers/media/platform/qcom/camss/camss-ispif.c | 5 + drivers/media/platform/qcom/camss/camss-vfe.c | 1 + drivers/media/platform/qcom/camss/camss.c | 170 +++++++++++++++++++++++ drivers/media/platform/qcom/camss/camss.h | 1 + 5 files changed, 178 insertions(+) diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c index 68a3ea1ba2a5299cf28289dfdb958cfdff3c91e0..5af2b382a843c2b8857339ba28930fe1682c9412 100644 --- a/drivers/media/platform/qcom/camss/camss-csiphy.c +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c @@ -596,6 +596,7 @@ int msm_csiphy_subdev_init(struct camss *camss, return PTR_ERR(csiphy->base); if (camss->res->version == CAMSS_8x16 || + camss->res->version == CAMSS_8x53 || camss->res->version == CAMSS_8x96) { csiphy->base_clk_mux = devm_platform_ioremap_resource_byname(pdev, res->reg[1]); diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c b/drivers/media/platform/qcom/camss/camss-ispif.c index a12dcc7ff438c55167bc2981fd399dbf178181df..2dc585c6123dd248a5bacd9c7a88cb5375644311 100644 --- a/drivers/media/platform/qcom/camss/camss-ispif.c +++ b/drivers/media/platform/qcom/camss/camss-ispif.c @@ -830,6 +830,7 @@ static int ispif_set_stream(struct v4l2_subdev *sd, int enable) ispif_select_cid(ispif, intf, cid, vfe, 1); ispif_config_irq(ispif, intf, vfe, 1); if (camss->res->version == CAMSS_8x96 || + camss->res->version == CAMSS_8x53 || camss->res->version == CAMSS_660) ispif_config_pack(ispif, line->fmt[MSM_ISPIF_PAD_SINK].code, @@ -848,6 +849,7 @@ static int ispif_set_stream(struct v4l2_subdev *sd, int enable) mutex_lock(&ispif->config_lock); if (camss->res->version == CAMSS_8x96 || + camss->res->version == CAMSS_8x53 || camss->res->version == CAMSS_660) ispif_config_pack(ispif, line->fmt[MSM_ISPIF_PAD_SINK].code, @@ -1111,6 +1113,7 @@ int msm_ispif_subdev_init(struct camss *camss, if (camss->res->version == CAMSS_8x16) ispif->line_num = 2; else if (camss->res->version == CAMSS_8x96 || + camss->res->version == CAMSS_8x53 || camss->res->version == CAMSS_660) ispif->line_num = 4; else @@ -1130,6 +1133,7 @@ int msm_ispif_subdev_init(struct camss *camss, ispif->line[i].nformats = ARRAY_SIZE(ispif_formats_8x16); } else if (camss->res->version == CAMSS_8x96 || + camss->res->version == CAMSS_8x53 || camss->res->version == CAMSS_660) { ispif->line[i].formats = ispif_formats_8x96; ispif->line[i].nformats = @@ -1162,6 +1166,7 @@ int msm_ispif_subdev_init(struct camss *camss, ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x16, IRQF_TRIGGER_RISING, ispif->irq_name, ispif); else if (camss->res->version == CAMSS_8x96 || + camss->res->version == CAMSS_8x53 || camss->res->version == CAMSS_660) ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x96, IRQF_TRIGGER_RISING, ispif->irq_name, ispif); diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c index 83c5a36d071fcc32c4b8a89e4e429dc1820df139..80a62ba11295042802cbaec617fb87c492ea6a55 100644 --- a/drivers/media/platform/qcom/camss/camss-vfe.c +++ b/drivers/media/platform/qcom/camss/camss-vfe.c @@ -285,6 +285,7 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 sink_code, switch (vfe->camss->res->version) { case CAMSS_8x16: + case CAMSS_8x53: switch (sink_code) { case MEDIA_BUS_FMT_YUYV8_1X16: { diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c index fabe034081ed0a7c0e0fcd8bc76c4eb396cb0067..9fb31f4c18adee886cd0bcf84438a8f27635e07f 100644 --- a/drivers/media/platform/qcom/camss/camss.c +++ b/drivers/media/platform/qcom/camss/camss.c @@ -152,6 +152,160 @@ static const struct camss_subdev_resources vfe_res_8x16[] = { } }; +static const struct camss_subdev_resources csid_res_8x53[] = { + /* CSID0 */ + { + .regulators = { "vdda" }, + .clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb", + "csi0", "csi0_phy", "csi0_pix", "csi0_rdi" }, + .clock_rate = { { 0 }, + { 0 }, + { 0 }, + { 0 }, + { 100000000, 200000000, 310000000, + 400000000, 465000000 }, + { 0 }, + { 0 }, + { 0 } }, + .reg = { "csid0" }, + .interrupt = { "csid0" }, + .csid = { + .hw_ops = &csid_ops_4_7, + .parent_dev_ops = &vfe_parent_dev_ops, + .formats = &csid_formats_4_7 + } + }, + + /* CSID1 */ + { + .regulators = { "vdda" }, + .clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb", + "csi1", "csi1_phy", "csi1_pix", "csi1_rdi" }, + .clock_rate = { { 0 }, + { 0 }, + { 0 }, + { 0 }, + { 100000000, 200000000, 310000000, + 400000000, 465000000 }, + { 0 }, + { 0 }, + { 0 } }, + .reg = { "csid1" }, + .interrupt = { "csid1" }, + .csid = { + .hw_ops = &csid_ops_4_7, + .parent_dev_ops = &vfe_parent_dev_ops, + .formats = &csid_formats_4_7 + } + }, + + /* CSID2 */ + { + .regulators = { "vdda" }, + .clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb", + "csi2", "csi2_phy", "csi2_pix", "csi2_rdi" }, + .clock_rate = { { 0 }, + { 0 }, + { 0 }, + { 0 }, + { 100000000, 200000000, 310000000, + 400000000, 465000000 }, + { 0 }, + { 0 }, + { 0 } }, + .reg = { "csid2" }, + .interrupt = { "csid2" }, + .csid = { + .hw_ops = &csid_ops_4_7, + .parent_dev_ops = &vfe_parent_dev_ops, + .formats = &csid_formats_4_7 + } + }, +}; + +static const struct camss_subdev_resources ispif_res_8x53 = { + /* ISPIF */ + .clock = { "top_ahb", "ahb", "ispif_ahb", + "csi0", "csi0_pix", "csi0_rdi", + "csi1", "csi1_pix", "csi1_rdi", + "csi2", "csi2_pix", "csi2_rdi" }, + .clock_for_reset = { "vfe0", "csi_vfe0", "vfe1", "csi_vfe1" }, + .reg = { "ispif", "csi_clk_mux" }, + .interrupt = { "ispif" }, +}; + +static const struct camss_subdev_resources vfe_res_8x53[] = { + /* VFE0 */ + { + .regulators = {}, + .clock = { "top_ahb", "ahb", "ispif_ahb", + "vfe0", "csi_vfe0", "vfe0_ahb", "vfe0_axi" }, + .clock_rate = { { 0 }, + { 0 }, + { 0 }, + { 50000000, 100000000, 133330000, + 160000000, 200000000, 266670000, + 310000000, 400000000, 465000000 }, + { 0 }, + { 0 }, + { 0 } }, + .reg = { "vfe0" }, + .interrupt = { "vfe0" }, + .vfe = { + .line_num = 3, + .has_pd = true, + .pd_name = "vfe0", + .hw_ops = &vfe_ops_4_1, + .formats_rdi = &vfe_formats_rdi_8x16, + .formats_pix = &vfe_formats_pix_8x16 + } + }, + + /* VFE1 */ + { + .regulators = {}, + .clock = { "top_ahb", "ahb", "ispif_ahb", + "vfe1", "csi_vfe1", "vfe1_ahb", "vfe1_axi" }, + .clock_rate = { { 0 }, + { 0 }, + { 0 }, + { 50000000, 100000000, 133330000, + 160000000, 200000000, 266670000, + 310000000, 400000000, 465000000 }, + { 0 }, + { 0 }, + { 0 } }, + .reg = { "vfe1" }, + .interrupt = { "vfe1" }, + .vfe = { + .line_num = 3, + .has_pd = true, + .pd_name = "vfe1", + .hw_ops = &vfe_ops_4_1, + .formats_rdi = &vfe_formats_rdi_8x16, + .formats_pix = &vfe_formats_pix_8x16 + } + } +}; + +static const struct resources_icc icc_res_8x53[] = { + { + .name = "cam_ahb", + .icc_bw_tbl.avg = 38400, + .icc_bw_tbl.peak = 76800, + }, + { + .name = "cam_vfe0_mem", + .icc_bw_tbl.avg = 939524, + .icc_bw_tbl.peak = 1342177, + }, + { + .name = "cam_vfe1_mem", + .icc_bw_tbl.avg = 939524, + .icc_bw_tbl.peak = 1342177, + }, +}; + static const struct camss_subdev_resources csiphy_res_8x96[] = { /* CSIPHY0 */ { @@ -2248,6 +2402,7 @@ static int camss_probe(struct platform_device *pdev) return -ENOMEM; if (camss->res->version == CAMSS_8x16 || + camss->res->version == CAMSS_8x53 || camss->res->version == CAMSS_8x96) { camss->ispif = devm_kcalloc(dev, 1, sizeof(*camss->ispif), GFP_KERNEL); if (!camss->ispif) @@ -2389,6 +2544,20 @@ static const struct camss_resources msm8916_resources = { .link_entities = camss_link_entities }; +static const struct camss_resources msm8953_resources = { + .version = CAMSS_8x53, + .icc_res = icc_res_8x53, + .icc_path_num = ARRAY_SIZE(icc_res_8x53), + .csiphy_res = csiphy_res_8x96, + .csid_res = csid_res_8x53, + .ispif_res = &ispif_res_8x53, + .vfe_res = vfe_res_8x53, + .csiphy_num = ARRAY_SIZE(csiphy_res_8x96), + .csid_num = ARRAY_SIZE(csid_res_8x53), + .vfe_num = ARRAY_SIZE(vfe_res_8x53), + .link_entities = camss_link_entities +}; + static const struct camss_resources msm8996_resources = { .version = CAMSS_8x96, .csiphy_res = csiphy_res_8x96, @@ -2455,6 +2624,7 @@ static const struct camss_resources sc8280xp_resources = { static const struct of_device_id camss_dt_match[] = { { .compatible = "qcom,msm8916-camss", .data = &msm8916_resources }, + { .compatible = "qcom,msm8953-camss", .data = &msm8953_resources }, { .compatible = "qcom,msm8996-camss", .data = &msm8996_resources }, { .compatible = "qcom,sdm660-camss", .data = &sdm660_resources }, { .compatible = "qcom,sdm845-camss", .data = &sdm845_resources }, diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h index 0ce84fcbbd25c7825212beb74073ffd4c70858a8..9da7f48f5dd762d27521d449051892e956693970 100644 --- a/drivers/media/platform/qcom/camss/camss.h +++ b/drivers/media/platform/qcom/camss/camss.h @@ -78,6 +78,7 @@ enum pm_domain { enum camss_version { CAMSS_8x16, + CAMSS_8x53, CAMSS_8x96, CAMSS_660, CAMSS_845, -- 2.47.0 ^ permalink raw reply related [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-03 9:45 ` [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources Barnabás Czémán @ 2024-11-13 4:58 ` Vladimir Zapolskiy 2024-11-13 8:01 ` barnabas.czeman 0 siblings, 1 reply; 14+ messages in thread From: Vladimir Zapolskiy @ 2024-11-13 4:58 UTC (permalink / raw) To: Barnabás Czémán, Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley Cc: linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak On 11/3/24 11:45, Barnabás Czémán wrote: > From: Vladimir Lypak <vladimir.lypak@gmail.com> > > This commit describes the hardware layout for the MSM8953 > for the following hardware blocks: > > - 2 x VFE, 3 RDI per VFE > - 3 x CSID > - 3 x CSI PHY > > Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> > Acked-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> > Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> > --- > drivers/media/platform/qcom/camss/camss-csiphy.c | 1 + > drivers/media/platform/qcom/camss/camss-ispif.c | 5 + > drivers/media/platform/qcom/camss/camss-vfe.c | 1 + > drivers/media/platform/qcom/camss/camss.c | 170 +++++++++++++++++++++++ > drivers/media/platform/qcom/camss/camss.h | 1 + > 5 files changed, 178 insertions(+) > > diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c b/drivers/media/platform/qcom/camss/camss-csiphy.c > index 68a3ea1ba2a5299cf28289dfdb958cfdff3c91e0..5af2b382a843c2b8857339ba28930fe1682c9412 100644 > --- a/drivers/media/platform/qcom/camss/camss-csiphy.c > +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c > @@ -596,6 +596,7 @@ int msm_csiphy_subdev_init(struct camss *camss, > return PTR_ERR(csiphy->base); > > if (camss->res->version == CAMSS_8x16 || > + camss->res->version == CAMSS_8x53 || > camss->res->version == CAMSS_8x96) { > csiphy->base_clk_mux = > devm_platform_ioremap_resource_byname(pdev, res->reg[1]); > diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c b/drivers/media/platform/qcom/camss/camss-ispif.c > index a12dcc7ff438c55167bc2981fd399dbf178181df..2dc585c6123dd248a5bacd9c7a88cb5375644311 100644 > --- a/drivers/media/platform/qcom/camss/camss-ispif.c > +++ b/drivers/media/platform/qcom/camss/camss-ispif.c > @@ -830,6 +830,7 @@ static int ispif_set_stream(struct v4l2_subdev *sd, int enable) > ispif_select_cid(ispif, intf, cid, vfe, 1); > ispif_config_irq(ispif, intf, vfe, 1); > if (camss->res->version == CAMSS_8x96 || > + camss->res->version == CAMSS_8x53 || > camss->res->version == CAMSS_660) > ispif_config_pack(ispif, > line->fmt[MSM_ISPIF_PAD_SINK].code, > @@ -848,6 +849,7 @@ static int ispif_set_stream(struct v4l2_subdev *sd, int enable) > > mutex_lock(&ispif->config_lock); > if (camss->res->version == CAMSS_8x96 || > + camss->res->version == CAMSS_8x53 || > camss->res->version == CAMSS_660) > ispif_config_pack(ispif, > line->fmt[MSM_ISPIF_PAD_SINK].code, > @@ -1111,6 +1113,7 @@ int msm_ispif_subdev_init(struct camss *camss, > if (camss->res->version == CAMSS_8x16) > ispif->line_num = 2; > else if (camss->res->version == CAMSS_8x96 || > + camss->res->version == CAMSS_8x53 || > camss->res->version == CAMSS_660) > ispif->line_num = 4; > else > @@ -1130,6 +1133,7 @@ int msm_ispif_subdev_init(struct camss *camss, > ispif->line[i].nformats = > ARRAY_SIZE(ispif_formats_8x16); > } else if (camss->res->version == CAMSS_8x96 || > + camss->res->version == CAMSS_8x53 || > camss->res->version == CAMSS_660) { > ispif->line[i].formats = ispif_formats_8x96; > ispif->line[i].nformats = > @@ -1162,6 +1166,7 @@ int msm_ispif_subdev_init(struct camss *camss, > ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x16, > IRQF_TRIGGER_RISING, ispif->irq_name, ispif); > else if (camss->res->version == CAMSS_8x96 || > + camss->res->version == CAMSS_8x53 || > camss->res->version == CAMSS_660) > ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x96, > IRQF_TRIGGER_RISING, ispif->irq_name, ispif); > diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c b/drivers/media/platform/qcom/camss/camss-vfe.c > index 83c5a36d071fcc32c4b8a89e4e429dc1820df139..80a62ba11295042802cbaec617fb87c492ea6a55 100644 > --- a/drivers/media/platform/qcom/camss/camss-vfe.c > +++ b/drivers/media/platform/qcom/camss/camss-vfe.c > @@ -285,6 +285,7 @@ static u32 vfe_src_pad_code(struct vfe_line *line, u32 sink_code, > > switch (vfe->camss->res->version) { > case CAMSS_8x16: > + case CAMSS_8x53: > switch (sink_code) { > case MEDIA_BUS_FMT_YUYV8_1X16: > { > diff --git a/drivers/media/platform/qcom/camss/camss.c b/drivers/media/platform/qcom/camss/camss.c > index fabe034081ed0a7c0e0fcd8bc76c4eb396cb0067..9fb31f4c18adee886cd0bcf84438a8f27635e07f 100644 > --- a/drivers/media/platform/qcom/camss/camss.c > +++ b/drivers/media/platform/qcom/camss/camss.c > @@ -152,6 +152,160 @@ static const struct camss_subdev_resources vfe_res_8x16[] = { > } > }; > > +static const struct camss_subdev_resources csid_res_8x53[] = { > + /* CSID0 */ > + { > + .regulators = { "vdda" }, I see that you do reuse csiphy_res_8x16 for this platform support, in this case let me ask you to double check/test that the "vdda" regulator is actually a CSIPHY regulator, and if so, please move the registration of the regulators to csiphy_res_8x16 as a preceding change. In case if my ask is unclear, see commit 0567d0f1cc62 as a reference. > + .clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb", > + "csi0", "csi0_phy", "csi0_pix", "csi0_rdi" }, > + .clock_rate = { { 0 }, > + { 0 }, > + { 0 }, > + { 0 }, > + { 100000000, 200000000, 310000000, > + 400000000, 465000000 }, > + { 0 }, > + { 0 }, > + { 0 } }, > + .reg = { "csid0" }, > + .interrupt = { "csid0" }, > + .csid = { > + .hw_ops = &csid_ops_4_7, > + .parent_dev_ops = &vfe_parent_dev_ops, > + .formats = &csid_formats_4_7 > + } > + }, > + > + /* CSID1 */ > + { > + .regulators = { "vdda" }, > + .clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb", > + "csi1", "csi1_phy", "csi1_pix", "csi1_rdi" }, > + .clock_rate = { { 0 }, > + { 0 }, > + { 0 }, > + { 0 }, > + { 100000000, 200000000, 310000000, > + 400000000, 465000000 }, > + { 0 }, > + { 0 }, > + { 0 } }, > + .reg = { "csid1" }, > + .interrupt = { "csid1" }, > + .csid = { > + .hw_ops = &csid_ops_4_7, > + .parent_dev_ops = &vfe_parent_dev_ops, > + .formats = &csid_formats_4_7 > + } > + }, > + > + /* CSID2 */ > + { > + .regulators = { "vdda" }, > + .clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb", > + "csi2", "csi2_phy", "csi2_pix", "csi2_rdi" }, > + .clock_rate = { { 0 }, > + { 0 }, > + { 0 }, > + { 0 }, > + { 100000000, 200000000, 310000000, > + 400000000, 465000000 }, > + { 0 }, > + { 0 }, > + { 0 } }, > + .reg = { "csid2" }, > + .interrupt = { "csid2" }, > + .csid = { > + .hw_ops = &csid_ops_4_7, > + .parent_dev_ops = &vfe_parent_dev_ops, > + .formats = &csid_formats_4_7 > + } > + }, > +}; > + > +static const struct camss_subdev_resources ispif_res_8x53 = { > + /* ISPIF */ > + .clock = { "top_ahb", "ahb", "ispif_ahb", > + "csi0", "csi0_pix", "csi0_rdi", > + "csi1", "csi1_pix", "csi1_rdi", > + "csi2", "csi2_pix", "csi2_rdi" }, > + .clock_for_reset = { "vfe0", "csi_vfe0", "vfe1", "csi_vfe1" }, > + .reg = { "ispif", "csi_clk_mux" }, > + .interrupt = { "ispif" }, > +}; > + > +static const struct camss_subdev_resources vfe_res_8x53[] = { > + /* VFE0 */ > + { > + .regulators = {}, > + .clock = { "top_ahb", "ahb", "ispif_ahb", > + "vfe0", "csi_vfe0", "vfe0_ahb", "vfe0_axi" }, > + .clock_rate = { { 0 }, > + { 0 }, > + { 0 }, > + { 50000000, 100000000, 133330000, > + 160000000, 200000000, 266670000, > + 310000000, 400000000, 465000000 }, > + { 0 }, > + { 0 }, > + { 0 } }, > + .reg = { "vfe0" }, > + .interrupt = { "vfe0" }, > + .vfe = { > + .line_num = 3, > + .has_pd = true, > + .pd_name = "vfe0", > + .hw_ops = &vfe_ops_4_1, > + .formats_rdi = &vfe_formats_rdi_8x16, > + .formats_pix = &vfe_formats_pix_8x16 > + } > + }, > + > + /* VFE1 */ > + { > + .regulators = {}, > + .clock = { "top_ahb", "ahb", "ispif_ahb", > + "vfe1", "csi_vfe1", "vfe1_ahb", "vfe1_axi" }, > + .clock_rate = { { 0 }, > + { 0 }, > + { 0 }, > + { 50000000, 100000000, 133330000, > + 160000000, 200000000, 266670000, > + 310000000, 400000000, 465000000 }, > + { 0 }, > + { 0 }, > + { 0 } }, > + .reg = { "vfe1" }, > + .interrupt = { "vfe1" }, > + .vfe = { > + .line_num = 3, > + .has_pd = true, > + .pd_name = "vfe1", > + .hw_ops = &vfe_ops_4_1, > + .formats_rdi = &vfe_formats_rdi_8x16, > + .formats_pix = &vfe_formats_pix_8x16 > + } > + } > +}; > + > +static const struct resources_icc icc_res_8x53[] = { > + { > + .name = "cam_ahb", > + .icc_bw_tbl.avg = 38400, > + .icc_bw_tbl.peak = 76800, > + }, > + { > + .name = "cam_vfe0_mem", > + .icc_bw_tbl.avg = 939524, > + .icc_bw_tbl.peak = 1342177, > + }, > + { > + .name = "cam_vfe1_mem", > + .icc_bw_tbl.avg = 939524, > + .icc_bw_tbl.peak = 1342177, > + }, > +}; > + > static const struct camss_subdev_resources csiphy_res_8x96[] = { > /* CSIPHY0 */ > { > @@ -2248,6 +2402,7 @@ static int camss_probe(struct platform_device *pdev) > return -ENOMEM; > > if (camss->res->version == CAMSS_8x16 || > + camss->res->version == CAMSS_8x53 || > camss->res->version == CAMSS_8x96) { > camss->ispif = devm_kcalloc(dev, 1, sizeof(*camss->ispif), GFP_KERNEL); > if (!camss->ispif) > @@ -2389,6 +2544,20 @@ static const struct camss_resources msm8916_resources = { > .link_entities = camss_link_entities > }; > > +static const struct camss_resources msm8953_resources = { > + .version = CAMSS_8x53, > + .icc_res = icc_res_8x53, > + .icc_path_num = ARRAY_SIZE(icc_res_8x53), > + .csiphy_res = csiphy_res_8x96, > + .csid_res = csid_res_8x53, > + .ispif_res = &ispif_res_8x53, > + .vfe_res = vfe_res_8x53, > + .csiphy_num = ARRAY_SIZE(csiphy_res_8x96), > + .csid_num = ARRAY_SIZE(csid_res_8x53), > + .vfe_num = ARRAY_SIZE(vfe_res_8x53), > + .link_entities = camss_link_entities > +}; > + > static const struct camss_resources msm8996_resources = { > .version = CAMSS_8x96, > .csiphy_res = csiphy_res_8x96, > @@ -2455,6 +2624,7 @@ static const struct camss_resources sc8280xp_resources = { > > static const struct of_device_id camss_dt_match[] = { > { .compatible = "qcom,msm8916-camss", .data = &msm8916_resources }, > + { .compatible = "qcom,msm8953-camss", .data = &msm8953_resources }, > { .compatible = "qcom,msm8996-camss", .data = &msm8996_resources }, > { .compatible = "qcom,sdm660-camss", .data = &sdm660_resources }, > { .compatible = "qcom,sdm845-camss", .data = &sdm845_resources }, > diff --git a/drivers/media/platform/qcom/camss/camss.h b/drivers/media/platform/qcom/camss/camss.h > index 0ce84fcbbd25c7825212beb74073ffd4c70858a8..9da7f48f5dd762d27521d449051892e956693970 100644 > --- a/drivers/media/platform/qcom/camss/camss.h > +++ b/drivers/media/platform/qcom/camss/camss.h > @@ -78,6 +78,7 @@ enum pm_domain { > > enum camss_version { > CAMSS_8x16, > + CAMSS_8x53, > CAMSS_8x96, > CAMSS_660, > CAMSS_845, > -- Best wishes, Vladimir ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-13 4:58 ` Vladimir Zapolskiy @ 2024-11-13 8:01 ` barnabas.czeman 2024-11-13 9:53 ` Bryan O'Donoghue 2024-11-13 13:28 ` Vladimir Zapolskiy 0 siblings, 2 replies; 14+ messages in thread From: barnabas.czeman @ 2024-11-13 8:01 UTC (permalink / raw) To: Vladimir Zapolskiy Cc: Robert Foss, Todor Tomov, Bryan O'Donoghue, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak On 2024-11-13 05:58, Vladimir Zapolskiy wrote: > On 11/3/24 11:45, Barnabás Czémán wrote: >> From: Vladimir Lypak <vladimir.lypak@gmail.com> >> >> This commit describes the hardware layout for the MSM8953 >> for the following hardware blocks: >> >> - 2 x VFE, 3 RDI per VFE >> - 3 x CSID >> - 3 x CSI PHY >> >> Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> >> Acked-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> >> Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> >> --- >> drivers/media/platform/qcom/camss/camss-csiphy.c | 1 + >> drivers/media/platform/qcom/camss/camss-ispif.c | 5 + >> drivers/media/platform/qcom/camss/camss-vfe.c | 1 + >> drivers/media/platform/qcom/camss/camss.c | 170 >> +++++++++++++++++++++++ >> drivers/media/platform/qcom/camss/camss.h | 1 + >> 5 files changed, 178 insertions(+) >> >> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c >> b/drivers/media/platform/qcom/camss/camss-csiphy.c >> index >> 68a3ea1ba2a5299cf28289dfdb958cfdff3c91e0..5af2b382a843c2b8857339ba28930fe1682c9412 >> 100644 >> --- a/drivers/media/platform/qcom/camss/camss-csiphy.c >> +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c >> @@ -596,6 +596,7 @@ int msm_csiphy_subdev_init(struct camss *camss, >> return PTR_ERR(csiphy->base); >> if (camss->res->version == CAMSS_8x16 || >> + camss->res->version == CAMSS_8x53 || >> camss->res->version == CAMSS_8x96) { >> csiphy->base_clk_mux = >> devm_platform_ioremap_resource_byname(pdev, res->reg[1]); >> diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c >> b/drivers/media/platform/qcom/camss/camss-ispif.c >> index >> a12dcc7ff438c55167bc2981fd399dbf178181df..2dc585c6123dd248a5bacd9c7a88cb5375644311 >> 100644 >> --- a/drivers/media/platform/qcom/camss/camss-ispif.c >> +++ b/drivers/media/platform/qcom/camss/camss-ispif.c >> @@ -830,6 +830,7 @@ static int ispif_set_stream(struct v4l2_subdev >> *sd, int enable) >> ispif_select_cid(ispif, intf, cid, vfe, 1); >> ispif_config_irq(ispif, intf, vfe, 1); >> if (camss->res->version == CAMSS_8x96 || >> + camss->res->version == CAMSS_8x53 || >> camss->res->version == CAMSS_660) >> ispif_config_pack(ispif, >> line->fmt[MSM_ISPIF_PAD_SINK].code, >> @@ -848,6 +849,7 @@ static int ispif_set_stream(struct v4l2_subdev >> *sd, int enable) >> mutex_lock(&ispif->config_lock); >> if (camss->res->version == CAMSS_8x96 || >> + camss->res->version == CAMSS_8x53 || >> camss->res->version == CAMSS_660) >> ispif_config_pack(ispif, >> line->fmt[MSM_ISPIF_PAD_SINK].code, >> @@ -1111,6 +1113,7 @@ int msm_ispif_subdev_init(struct camss *camss, >> if (camss->res->version == CAMSS_8x16) >> ispif->line_num = 2; >> else if (camss->res->version == CAMSS_8x96 || >> + camss->res->version == CAMSS_8x53 || >> camss->res->version == CAMSS_660) >> ispif->line_num = 4; >> else >> @@ -1130,6 +1133,7 @@ int msm_ispif_subdev_init(struct camss *camss, >> ispif->line[i].nformats = >> ARRAY_SIZE(ispif_formats_8x16); >> } else if (camss->res->version == CAMSS_8x96 || >> + camss->res->version == CAMSS_8x53 || >> camss->res->version == CAMSS_660) { >> ispif->line[i].formats = ispif_formats_8x96; >> ispif->line[i].nformats = >> @@ -1162,6 +1166,7 @@ int msm_ispif_subdev_init(struct camss *camss, >> ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x16, >> IRQF_TRIGGER_RISING, ispif->irq_name, ispif); >> else if (camss->res->version == CAMSS_8x96 || >> + camss->res->version == CAMSS_8x53 || >> camss->res->version == CAMSS_660) >> ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x96, >> IRQF_TRIGGER_RISING, ispif->irq_name, ispif); >> diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c >> b/drivers/media/platform/qcom/camss/camss-vfe.c >> index >> 83c5a36d071fcc32c4b8a89e4e429dc1820df139..80a62ba11295042802cbaec617fb87c492ea6a55 >> 100644 >> --- a/drivers/media/platform/qcom/camss/camss-vfe.c >> +++ b/drivers/media/platform/qcom/camss/camss-vfe.c >> @@ -285,6 +285,7 @@ static u32 vfe_src_pad_code(struct vfe_line *line, >> u32 sink_code, >> switch (vfe->camss->res->version) { >> case CAMSS_8x16: >> + case CAMSS_8x53: >> switch (sink_code) { >> case MEDIA_BUS_FMT_YUYV8_1X16: >> { >> diff --git a/drivers/media/platform/qcom/camss/camss.c >> b/drivers/media/platform/qcom/camss/camss.c >> index >> fabe034081ed0a7c0e0fcd8bc76c4eb396cb0067..9fb31f4c18adee886cd0bcf84438a8f27635e07f >> 100644 >> --- a/drivers/media/platform/qcom/camss/camss.c >> +++ b/drivers/media/platform/qcom/camss/camss.c >> @@ -152,6 +152,160 @@ static const struct camss_subdev_resources >> vfe_res_8x16[] = { >> } >> }; >> +static const struct camss_subdev_resources csid_res_8x53[] = { >> + /* CSID0 */ >> + { >> + .regulators = { "vdda" }, > > I see that you do reuse csiphy_res_8x16 for this platform support, in > this case let me ask you to double check/test that the "vdda" regulator > is actually a CSIPHY regulator, and if so, please move the registration > of the regulators to csiphy_res_8x16 as a preceding change. It is placed in CSID at downstream and this is the documentation of the downstream property: - qcom,mipi-csi-vdd-supply : should contain regulator to be used for this csid core so it should be a csid regulator as i understand. It is also placed at CSIDs in msm8953-camera.dtsi > > In case if my ask is unclear, see commit 0567d0f1cc62 as a reference. > >> + .clock = { "top_ahb", "ispif_ahb", "csi0_ahb", "ahb", >> + "csi0", "csi0_phy", "csi0_pix", "csi0_rdi" }, >> + .clock_rate = { { 0 }, >> + { 0 }, >> + { 0 }, >> + { 0 }, >> + { 100000000, 200000000, 310000000, >> + 400000000, 465000000 }, >> + { 0 }, >> + { 0 }, >> + { 0 } }, >> + .reg = { "csid0" }, >> + .interrupt = { "csid0" }, >> + .csid = { >> + .hw_ops = &csid_ops_4_7, >> + .parent_dev_ops = &vfe_parent_dev_ops, >> + .formats = &csid_formats_4_7 >> + } >> + }, >> + >> + /* CSID1 */ >> + { >> + .regulators = { "vdda" }, >> + .clock = { "top_ahb", "ispif_ahb", "csi1_ahb", "ahb", >> + "csi1", "csi1_phy", "csi1_pix", "csi1_rdi" }, >> + .clock_rate = { { 0 }, >> + { 0 }, >> + { 0 }, >> + { 0 }, >> + { 100000000, 200000000, 310000000, >> + 400000000, 465000000 }, >> + { 0 }, >> + { 0 }, >> + { 0 } }, >> + .reg = { "csid1" }, >> + .interrupt = { "csid1" }, >> + .csid = { >> + .hw_ops = &csid_ops_4_7, >> + .parent_dev_ops = &vfe_parent_dev_ops, >> + .formats = &csid_formats_4_7 >> + } >> + }, >> + >> + /* CSID2 */ >> + { >> + .regulators = { "vdda" }, >> + .clock = { "top_ahb", "ispif_ahb", "csi2_ahb", "ahb", >> + "csi2", "csi2_phy", "csi2_pix", "csi2_rdi" }, >> + .clock_rate = { { 0 }, >> + { 0 }, >> + { 0 }, >> + { 0 }, >> + { 100000000, 200000000, 310000000, >> + 400000000, 465000000 }, >> + { 0 }, >> + { 0 }, >> + { 0 } }, >> + .reg = { "csid2" }, >> + .interrupt = { "csid2" }, >> + .csid = { >> + .hw_ops = &csid_ops_4_7, >> + .parent_dev_ops = &vfe_parent_dev_ops, >> + .formats = &csid_formats_4_7 >> + } >> + }, >> +}; >> + >> +static const struct camss_subdev_resources ispif_res_8x53 = { >> + /* ISPIF */ >> + .clock = { "top_ahb", "ahb", "ispif_ahb", >> + "csi0", "csi0_pix", "csi0_rdi", >> + "csi1", "csi1_pix", "csi1_rdi", >> + "csi2", "csi2_pix", "csi2_rdi" }, >> + .clock_for_reset = { "vfe0", "csi_vfe0", "vfe1", "csi_vfe1" }, >> + .reg = { "ispif", "csi_clk_mux" }, >> + .interrupt = { "ispif" }, >> +}; >> + >> +static const struct camss_subdev_resources vfe_res_8x53[] = { >> + /* VFE0 */ >> + { >> + .regulators = {}, >> + .clock = { "top_ahb", "ahb", "ispif_ahb", >> + "vfe0", "csi_vfe0", "vfe0_ahb", "vfe0_axi" }, >> + .clock_rate = { { 0 }, >> + { 0 }, >> + { 0 }, >> + { 50000000, 100000000, 133330000, >> + 160000000, 200000000, 266670000, >> + 310000000, 400000000, 465000000 }, >> + { 0 }, >> + { 0 }, >> + { 0 } }, >> + .reg = { "vfe0" }, >> + .interrupt = { "vfe0" }, >> + .vfe = { >> + .line_num = 3, >> + .has_pd = true, >> + .pd_name = "vfe0", >> + .hw_ops = &vfe_ops_4_1, >> + .formats_rdi = &vfe_formats_rdi_8x16, >> + .formats_pix = &vfe_formats_pix_8x16 >> + } >> + }, >> + >> + /* VFE1 */ >> + { >> + .regulators = {}, >> + .clock = { "top_ahb", "ahb", "ispif_ahb", >> + "vfe1", "csi_vfe1", "vfe1_ahb", "vfe1_axi" }, >> + .clock_rate = { { 0 }, >> + { 0 }, >> + { 0 }, >> + { 50000000, 100000000, 133330000, >> + 160000000, 200000000, 266670000, >> + 310000000, 400000000, 465000000 }, >> + { 0 }, >> + { 0 }, >> + { 0 } }, >> + .reg = { "vfe1" }, >> + .interrupt = { "vfe1" }, >> + .vfe = { >> + .line_num = 3, >> + .has_pd = true, >> + .pd_name = "vfe1", >> + .hw_ops = &vfe_ops_4_1, >> + .formats_rdi = &vfe_formats_rdi_8x16, >> + .formats_pix = &vfe_formats_pix_8x16 >> + } >> + } >> +}; >> + >> +static const struct resources_icc icc_res_8x53[] = { >> + { >> + .name = "cam_ahb", >> + .icc_bw_tbl.avg = 38400, >> + .icc_bw_tbl.peak = 76800, >> + }, >> + { >> + .name = "cam_vfe0_mem", >> + .icc_bw_tbl.avg = 939524, >> + .icc_bw_tbl.peak = 1342177, >> + }, >> + { >> + .name = "cam_vfe1_mem", >> + .icc_bw_tbl.avg = 939524, >> + .icc_bw_tbl.peak = 1342177, >> + }, >> +}; >> + >> static const struct camss_subdev_resources csiphy_res_8x96[] = { >> /* CSIPHY0 */ >> { >> @@ -2248,6 +2402,7 @@ static int camss_probe(struct platform_device >> *pdev) >> return -ENOMEM; >> if (camss->res->version == CAMSS_8x16 || >> + camss->res->version == CAMSS_8x53 || >> camss->res->version == CAMSS_8x96) { >> camss->ispif = devm_kcalloc(dev, 1, sizeof(*camss->ispif), >> GFP_KERNEL); >> if (!camss->ispif) >> @@ -2389,6 +2544,20 @@ static const struct camss_resources >> msm8916_resources = { >> .link_entities = camss_link_entities >> }; >> +static const struct camss_resources msm8953_resources = { >> + .version = CAMSS_8x53, >> + .icc_res = icc_res_8x53, >> + .icc_path_num = ARRAY_SIZE(icc_res_8x53), >> + .csiphy_res = csiphy_res_8x96, >> + .csid_res = csid_res_8x53, >> + .ispif_res = &ispif_res_8x53, >> + .vfe_res = vfe_res_8x53, >> + .csiphy_num = ARRAY_SIZE(csiphy_res_8x96), >> + .csid_num = ARRAY_SIZE(csid_res_8x53), >> + .vfe_num = ARRAY_SIZE(vfe_res_8x53), >> + .link_entities = camss_link_entities >> +}; >> + >> static const struct camss_resources msm8996_resources = { >> .version = CAMSS_8x96, >> .csiphy_res = csiphy_res_8x96, >> @@ -2455,6 +2624,7 @@ static const struct camss_resources >> sc8280xp_resources = { >> static const struct of_device_id camss_dt_match[] = { >> { .compatible = "qcom,msm8916-camss", .data = &msm8916_resources }, >> + { .compatible = "qcom,msm8953-camss", .data = &msm8953_resources }, >> { .compatible = "qcom,msm8996-camss", .data = &msm8996_resources }, >> { .compatible = "qcom,sdm660-camss", .data = &sdm660_resources }, >> { .compatible = "qcom,sdm845-camss", .data = &sdm845_resources }, >> diff --git a/drivers/media/platform/qcom/camss/camss.h >> b/drivers/media/platform/qcom/camss/camss.h >> index >> 0ce84fcbbd25c7825212beb74073ffd4c70858a8..9da7f48f5dd762d27521d449051892e956693970 >> 100644 >> --- a/drivers/media/platform/qcom/camss/camss.h >> +++ b/drivers/media/platform/qcom/camss/camss.h >> @@ -78,6 +78,7 @@ enum pm_domain { >> enum camss_version { >> CAMSS_8x16, >> + CAMSS_8x53, >> CAMSS_8x96, >> CAMSS_660, >> CAMSS_845, >> > > -- > Best wishes, > Vladimir ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-13 8:01 ` barnabas.czeman @ 2024-11-13 9:53 ` Bryan O'Donoghue 2024-11-13 10:58 ` barnabas.czeman 2024-11-13 13:28 ` Vladimir Zapolskiy 1 sibling, 1 reply; 14+ messages in thread From: Bryan O'Donoghue @ 2024-11-13 9:53 UTC (permalink / raw) To: barnabas.czeman, Vladimir Zapolskiy Cc: Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak On 13/11/2024 08:01, barnabas.czeman@mainlining.org wrote: >> I see that you do reuse csiphy_res_8x16 for this platform support, in >> this case let me ask you to double check/test that the "vdda" regulator >> is actually a CSIPHY regulator, and if so, please move the registration >> of the regulators to csiphy_res_8x16 as a preceding change. > It is placed in CSID at downstream and this is the documentation of > the downstream property: > - qcom,mipi-csi-vdd-supply : should contain regulator to be used for > this csid core > so it should be a csid regulator as i understand. > It is also placed at CSIDs in msm8953-camera.dtsi No, the regulator(s) supply voltage to the PHY. Make sure you have: commit 44fdbb9d1a3892db92b2c9cf5f46e32ca4095d92 Author: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> Date: Fri Sep 27 00:19:56 2024 +0300 media: qcom: camss: add management of supply regulators to CSIPHY and give the change a try. --- bod ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-13 9:53 ` Bryan O'Donoghue @ 2024-11-13 10:58 ` barnabas.czeman 0 siblings, 0 replies; 14+ messages in thread From: barnabas.czeman @ 2024-11-13 10:58 UTC (permalink / raw) To: Bryan O'Donoghue Cc: Vladimir Zapolskiy, Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak On 2024-11-13 10:53, Bryan O'Donoghue wrote: > On 13/11/2024 08:01, barnabas.czeman@mainlining.org wrote: >>> I see that you do reuse csiphy_res_8x16 for this platform support, in >>> this case let me ask you to double check/test that the "vdda" >>> regulator >>> is actually a CSIPHY regulator, and if so, please move the >>> registration >>> of the regulators to csiphy_res_8x16 as a preceding change. >> It is placed in CSID at downstream and this is the documentation of >> the downstream property: >> - qcom,mipi-csi-vdd-supply : should contain regulator to be used for >> this csid core >> so it should be a csid regulator as i understand. >> It is also placed at CSIDs in msm8953-camera.dtsi > > No, the regulator(s) supply voltage to the PHY. On sm8250 it is for csiphy but on older soc like on msm8953, msm8917, msm8916 this regulator is placed in csid nodes. https://git.codelinaro.org/clo/la/kernel/msm-4.9/-/blob/LA.UM.10.6.2.c26-01500-89xx.0/arch/arm64/boot/dts/qcom/msm8953-camera.dtsi#L96 There is no regulator in csiphy nodes only PM domains. I will check later move the regulator to the csiphy. > > Make sure you have: > > commit 44fdbb9d1a3892db92b2c9cf5f46e32ca4095d92 > Author: Vladimir Zapolskiy <vladimir.zapolskiy@linaro.org> > Date: Fri Sep 27 00:19:56 2024 +0300 > > media: qcom: camss: add management of supply regulators to CSIPHY > > and give the change a try. > > --- > bod ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-13 8:01 ` barnabas.czeman 2024-11-13 9:53 ` Bryan O'Donoghue @ 2024-11-13 13:28 ` Vladimir Zapolskiy 2024-11-13 15:23 ` Bryan O'Donoghue 1 sibling, 1 reply; 14+ messages in thread From: Vladimir Zapolskiy @ 2024-11-13 13:28 UTC (permalink / raw) To: barnabas.czeman, Bryan O'Donoghue Cc: Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak Hello Barnabás, Bryan. On 11/13/24 10:01, barnabas.czeman@mainlining.org wrote: > On 2024-11-13 05:58, Vladimir Zapolskiy wrote: >> On 11/3/24 11:45, Barnabás Czémán wrote: >>> From: Vladimir Lypak <vladimir.lypak@gmail.com> >>> >>> This commit describes the hardware layout for the MSM8953 >>> for the following hardware blocks: >>> >>> - 2 x VFE, 3 RDI per VFE >>> - 3 x CSID >>> - 3 x CSI PHY >>> >>> Signed-off-by: Vladimir Lypak <vladimir.lypak@gmail.com> >>> Acked-by: Bryan O'Donoghue <bryan.odonoghue@linaro.org> >>> Signed-off-by: Barnabás Czémán <barnabas.czeman@mainlining.org> >>> --- >>> drivers/media/platform/qcom/camss/camss-csiphy.c | 1 + >>> drivers/media/platform/qcom/camss/camss-ispif.c | 5 + >>> drivers/media/platform/qcom/camss/camss-vfe.c | 1 + >>> drivers/media/platform/qcom/camss/camss.c | 170 >>> +++++++++++++++++++++++ >>> drivers/media/platform/qcom/camss/camss.h | 1 + >>> 5 files changed, 178 insertions(+) >>> >>> diff --git a/drivers/media/platform/qcom/camss/camss-csiphy.c >>> b/drivers/media/platform/qcom/camss/camss-csiphy.c >>> index >>> 68a3ea1ba2a5299cf28289dfdb958cfdff3c91e0..5af2b382a843c2b8857339ba28930fe1682c9412 >>> 100644 >>> --- a/drivers/media/platform/qcom/camss/camss-csiphy.c >>> +++ b/drivers/media/platform/qcom/camss/camss-csiphy.c >>> @@ -596,6 +596,7 @@ int msm_csiphy_subdev_init(struct camss *camss, >>> return PTR_ERR(csiphy->base); >>> if (camss->res->version == CAMSS_8x16 || >>> + camss->res->version == CAMSS_8x53 || >>> camss->res->version == CAMSS_8x96) { >>> csiphy->base_clk_mux = >>> devm_platform_ioremap_resource_byname(pdev, res->reg[1]); >>> diff --git a/drivers/media/platform/qcom/camss/camss-ispif.c >>> b/drivers/media/platform/qcom/camss/camss-ispif.c >>> index >>> a12dcc7ff438c55167bc2981fd399dbf178181df..2dc585c6123dd248a5bacd9c7a88cb5375644311 >>> 100644 >>> --- a/drivers/media/platform/qcom/camss/camss-ispif.c >>> +++ b/drivers/media/platform/qcom/camss/camss-ispif.c >>> @@ -830,6 +830,7 @@ static int ispif_set_stream(struct v4l2_subdev >>> *sd, int enable) >>> ispif_select_cid(ispif, intf, cid, vfe, 1); >>> ispif_config_irq(ispif, intf, vfe, 1); >>> if (camss->res->version == CAMSS_8x96 || >>> + camss->res->version == CAMSS_8x53 || >>> camss->res->version == CAMSS_660) >>> ispif_config_pack(ispif, >>> line->fmt[MSM_ISPIF_PAD_SINK].code, >>> @@ -848,6 +849,7 @@ static int ispif_set_stream(struct v4l2_subdev >>> *sd, int enable) >>> mutex_lock(&ispif->config_lock); >>> if (camss->res->version == CAMSS_8x96 || >>> + camss->res->version == CAMSS_8x53 || >>> camss->res->version == CAMSS_660) >>> ispif_config_pack(ispif, >>> line->fmt[MSM_ISPIF_PAD_SINK].code, >>> @@ -1111,6 +1113,7 @@ int msm_ispif_subdev_init(struct camss *camss, >>> if (camss->res->version == CAMSS_8x16) >>> ispif->line_num = 2; >>> else if (camss->res->version == CAMSS_8x96 || >>> + camss->res->version == CAMSS_8x53 || >>> camss->res->version == CAMSS_660) >>> ispif->line_num = 4; >>> else >>> @@ -1130,6 +1133,7 @@ int msm_ispif_subdev_init(struct camss *camss, >>> ispif->line[i].nformats = >>> ARRAY_SIZE(ispif_formats_8x16); >>> } else if (camss->res->version == CAMSS_8x96 || >>> + camss->res->version == CAMSS_8x53 || >>> camss->res->version == CAMSS_660) { >>> ispif->line[i].formats = ispif_formats_8x96; >>> ispif->line[i].nformats = >>> @@ -1162,6 +1166,7 @@ int msm_ispif_subdev_init(struct camss *camss, >>> ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x16, >>> IRQF_TRIGGER_RISING, ispif->irq_name, ispif); >>> else if (camss->res->version == CAMSS_8x96 || >>> + camss->res->version == CAMSS_8x53 || >>> camss->res->version == CAMSS_660) >>> ret = devm_request_irq(dev, ispif->irq, ispif_isr_8x96, >>> IRQF_TRIGGER_RISING, ispif->irq_name, ispif); >>> diff --git a/drivers/media/platform/qcom/camss/camss-vfe.c >>> b/drivers/media/platform/qcom/camss/camss-vfe.c >>> index >>> 83c5a36d071fcc32c4b8a89e4e429dc1820df139..80a62ba11295042802cbaec617fb87c492ea6a55 >>> 100644 >>> --- a/drivers/media/platform/qcom/camss/camss-vfe.c >>> +++ b/drivers/media/platform/qcom/camss/camss-vfe.c >>> @@ -285,6 +285,7 @@ static u32 vfe_src_pad_code(struct vfe_line *line, >>> u32 sink_code, >>> switch (vfe->camss->res->version) { >>> case CAMSS_8x16: >>> + case CAMSS_8x53: >>> switch (sink_code) { >>> case MEDIA_BUS_FMT_YUYV8_1X16: >>> { >>> diff --git a/drivers/media/platform/qcom/camss/camss.c >>> b/drivers/media/platform/qcom/camss/camss.c >>> index >>> fabe034081ed0a7c0e0fcd8bc76c4eb396cb0067..9fb31f4c18adee886cd0bcf84438a8f27635e07f >>> 100644 >>> --- a/drivers/media/platform/qcom/camss/camss.c >>> +++ b/drivers/media/platform/qcom/camss/camss.c >>> @@ -152,6 +152,160 @@ static const struct camss_subdev_resources >>> vfe_res_8x16[] = { >>> } >>> }; >>> +static const struct camss_subdev_resources csid_res_8x53[] = { >>> + /* CSID0 */ >>> + { >>> + .regulators = { "vdda" }, >> >> I see that you do reuse csiphy_res_8x16 for this platform support, in >> this case let me ask you to double check/test that the "vdda" regulator >> is actually a CSIPHY regulator, and if so, please move the registration >> of the regulators to csiphy_res_8x16 as a preceding change. > It is placed in CSID at downstream and this is the documentation of > the downstream property: > - qcom,mipi-csi-vdd-supply : should contain regulator to be used for > this csid core > so it should be a csid regulator as i understand. > It is also placed at CSIDs in msm8953-camera.dtsi I've opened DB410C board schematics, and CAMSS IP is supplied over VREG_L2_1P2 power lane entering VDDA_MIPI_CSI pad on the APQ8016 SoC. The same voltage regulator also supplies display and SDRAM memory, most probably the latter implies that CAMSS IP and driver cannot be tested at least on this reference board, when the regulator is disabled. So, we have to rely on the documentation here. Bryan, can you please check, if VDDA_MIPI_CSI pad on MSM8916 and/or MSM8953 is related to CSIPHY or CSID power supply? Thank you in advance. -- Best wishes, Vladimir ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-13 13:28 ` Vladimir Zapolskiy @ 2024-11-13 15:23 ` Bryan O'Donoghue 2024-11-13 15:32 ` barnabas.czeman 0 siblings, 1 reply; 14+ messages in thread From: Bryan O'Donoghue @ 2024-11-13 15:23 UTC (permalink / raw) To: Vladimir Zapolskiy, barnabas.czeman Cc: Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak On 13/11/2024 13:28, Vladimir Zapolskiy wrote: > So, we have to rely on the documentation here. Bryan, can you please > check, if VDDA_MIPI_CSI pad on MSM8916 and/or MSM8953 is related to > CSIPHY or CSID power supply? Thank you in advance. No there's really no indication in the documents I have how the input gets routed internally, CSID, CSIPHY, both.. not clear. I think Barnabás is right, the best source of information we have for this one is the downstream dtsi => CSID. --- bod ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-13 15:23 ` Bryan O'Donoghue @ 2024-11-13 15:32 ` barnabas.czeman 2024-11-13 21:14 ` Vladimir Zapolskiy 0 siblings, 1 reply; 14+ messages in thread From: barnabas.czeman @ 2024-11-13 15:32 UTC (permalink / raw) To: Bryan O'Donoghue Cc: Vladimir Zapolskiy, Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak On 2024-11-13 16:23, Bryan O'Donoghue wrote: > On 13/11/2024 13:28, Vladimir Zapolskiy wrote: >> So, we have to rely on the documentation here. Bryan, can you please >> check, if VDDA_MIPI_CSI pad on MSM8916 and/or MSM8953 is related to >> CSIPHY or CSID power supply? Thank you in advance. > > No there's really no indication in the documents I have how the input > gets routed internally, CSID, CSIPHY, both.. not clear. > > I think Barnabás is right, the best source of information we have for > this one is the downstream dtsi => CSID. I have found the regulator also in downstream msm_csid driver i hope it helps a bit. https://git.codelinaro.org/clo/la/kernel/msm-4.9/-/blob/LA.UM.10.6.2.c26-01500-89xx.0/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c#L73 > > --- > bod ^ permalink raw reply [flat|nested] 14+ messages in thread
* Re: [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources 2024-11-13 15:32 ` barnabas.czeman @ 2024-11-13 21:14 ` Vladimir Zapolskiy 0 siblings, 0 replies; 14+ messages in thread From: Vladimir Zapolskiy @ 2024-11-13 21:14 UTC (permalink / raw) To: barnabas.czeman, Bryan O'Donoghue Cc: Robert Foss, Todor Tomov, Mauro Carvalho Chehab, Rob Herring, Krzysztof Kozlowski, Conor Dooley, linux-media, linux-arm-msm, linux-kernel, devicetree, Vladimir Lypak On 11/13/24 17:32, barnabas.czeman@mainlining.org wrote: > On 2024-11-13 16:23, Bryan O'Donoghue wrote: >> On 13/11/2024 13:28, Vladimir Zapolskiy wrote: >>> So, we have to rely on the documentation here. Bryan, can you please >>> check, if VDDA_MIPI_CSI pad on MSM8916 and/or MSM8953 is related to >>> CSIPHY or CSID power supply? Thank you in advance. >> >> No there's really no indication in the documents I have how the input >> gets routed internally, CSID, CSIPHY, both.. not clear. >> >> I think Barnabás is right, the best source of information we have for >> this one is the downstream dtsi => CSID. > I have found the regulator also in downstream msm_csid driver i hope it > helps a bit. > https://git.codelinaro.org/clo/la/kernel/msm-4.9/-/blob/LA.UM.10.6.2.c26-01500-89xx.0/drivers/media/platform/msm/camera_v2/sensor/csid/msm_csid.c#L73 > Agreed, since the documentation is ambiguous about the voltage supply, the best deal is to follow the downstream code here. Please fix the review findings in the dt-bindings, and rebase the driver changes on top of the linux-next, also please consider to add CCI and CAMSS device tree nodes into the msm8953.dtsi file. -- Best wishes, Vladimir ^ permalink raw reply [flat|nested] 14+ messages in thread
end of thread, other threads:[~2024-11-13 21:14 UTC | newest] Thread overview: 14+ messages (download: mbox.gz follow: Atom feed -- links below jump to the message on this page -- 2024-11-03 9:45 [PATCH v4 0/3] Add MSM8953 camss support Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 1/3] media: qcom: camss: implement pm domain ops for VFE v4.1 Barnabás Czémán 2024-11-03 9:45 ` [PATCH v4 2/3] media: dt-bindings: Add qcom,msm8953-camss Barnabás Czémán 2024-11-03 16:09 ` Krzysztof Kozlowski 2024-11-13 4:47 ` Vladimir Zapolskiy 2024-11-03 9:45 ` [PATCH v4 3/3] media: qcom: camss: Add MSM8953 resources Barnabás Czémán 2024-11-13 4:58 ` Vladimir Zapolskiy 2024-11-13 8:01 ` barnabas.czeman 2024-11-13 9:53 ` Bryan O'Donoghue 2024-11-13 10:58 ` barnabas.czeman 2024-11-13 13:28 ` Vladimir Zapolskiy 2024-11-13 15:23 ` Bryan O'Donoghue 2024-11-13 15:32 ` barnabas.czeman 2024-11-13 21:14 ` Vladimir Zapolskiy
This is a public inbox, see mirroring instructions for how to clone and mirror all data and code used for this inbox; as well as URLs for NNTP newsgroup(s).