[PATCH 10/10] ARM: dts: msm: Add TPDA and TPDM support to DTS for RB5

Tao Zhang quic_taozha at quicinc.com
Wed Nov 3 01:14:25 PDT 2021


On Tue, Nov 02, 2021 at 12:02:39PM -0600, Mathieu Poirier wrote:
> On Thu, Oct 21, 2021 at 03:38:56PM +0800, Tao Zhang wrote:
> > Add TPDA and TPDM support to DTS for RB5 board. This change is a
> > sample for validating. After applying this patch, the new TPDM and
> > TPDA nodes can be observed at the coresight devices path. TPDM and
> > TPDA hardware can be operated by commands.
> > 
> > List the commands for validating this series patches as below.
> > echo 1 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
> > echo 1 > /sys/bus/coresight/devices/tpdm0/enable_source
> > echo 1 > /sys/bus/coresight/devices/tpdm0/integration_test
> > echo 2 > /sys/bus/coresight/devices/tpdm0/integration_test
> > cat /dev/tmc_etf0 > /data/etf-tpdm0.bin
> > echo 0 > /sys/bus/coresight/devices/tpdm0/enable_source
> > echo 0 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
> > echo 1 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
> > echo 1 > /sys/bus/coresight/devices/tpdm1/enable_source
> > echo 1 > /sys/bus/coresight/devices/tpdm1/integration_test
> > echo 2 > /sys/bus/coresight/devices/tpdm1/integration_test
> > cat /dev/tmc_etf0 > /data/etf-tpdm1.bin
> > echo 0 > /sys/bus/coresight/devices/tpdm1/enable_source
> > echo 0 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
> > echo 1 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
> > echo 1 > /sys/bus/coresight/devices/tpdm2/enable_source
> > echo 1 > /sys/bus/coresight/devices/tpdm2/integration_test
> > echo 2 > /sys/bus/coresight/devices/tpdm2/integration_test
> > cat /dev/tmc_etf0 > /data/etf-tpdm2.bin
> > echo 0 > /sys/bus/coresight/devices/tpdm2/enable_source
> > echo 0 > /sys/bus/coresight/devices/tmc_etf0/enable_sink
> > 
> > If the data from TPDMs can be obtained from the ETF, it means
> > that the TPDMs verification is successful. At the same time,
> > since TPDM0, TPDM1 and TPDM2 are all connected to the same
> > funnel "funnel at 6c2d000" and output via different output ports,
> 
> Where is "funnel at 6c2d000" in this patch?
>
Hi Mathieu,

Sorry, the TPDM/TPDA related code in the device tree was omitted in this submission.
We will add them to device tree in the next version.
Paste this funnel configuration below for you review first. 
funnel at 6c2d000 {
    compatible = "arm,coresight-dynamic-funnel", "arm,primecell";

    reg = <0 0x6c2d000 0 0x1000>;
    reg-names = "funnel-base";

    clocks = <&aoss_qmp>;
    clock-names = "apb_pclk";

    out-ports {
        #address-cells = <1>;
        #size-cells = <0>;
        port at 2 {
            reg = <2>;
            tpdm_mm_out_tpda9: endpoint {
                remote-endpoint =
                    <&tpda_9_in_tpdm_mm>;
                label = <&tpdm_mm>;
            };
        };

        port at 3 {
            reg = <3>;
            funnel_dl_center_out_tpda_10: endpoint {
                remote-endpoint =
                    <&tpda_10_in_funnel_dl_center>;
                label = <&tpdm_lpass>;
            };
        };

        port at 7 {
            reg = <7>;
            tpdm_turing_out_tpda14: endpoint {
                remote-endpoint =
                    <&tpda_14_in_tpdm_turing>;
                label = <&tpdm_turing>;
            };
        };
    };

    in-ports {
        #address-cells = <1>;
        #size-cells = <0>;

        port at 15 {
            reg = <2>;
            funnel_dl_center_in_funnel_dl_mm: endpoint {
                slave-mode;
                remote-endpoint =
                <&funnel_dl_mm_out_funnel_dl_center>;
            };
        };

        port at 16 {
            reg = <3>;
            funnel_dl_center_in_funnel_lpass: endpoint {
                slave-mode;
                remote-endpoint =
                <&funnel_lpass_out_funnel_dl_center>;
            };
        };

        port at 18 {
            reg = <5>;
            funnel_dl_center_in_funnel_compute: endpoint {
                slave-mode;
                remote-endpoint =
                <&funnel_compute_out_funnel_dl_center>;
            };
        };
    };
};
> > it also means that the following patches verification is
> > successful.
> > coresight: add support to enable more coresight paths
> > coresight: funnel: add support for multiple output ports
> > 
> > Signed-off-by: Tao Zhang <quic_taozha at quicinc.com>
> > ---
> >  arch/arm64/boot/dts/qcom/qrb5165-rb5.dts | 439 +++++++++++++++++++++++
> >  1 file changed, 439 insertions(+)
> > 
> > diff --git a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> > index 8ac96f8e79d4..bcec8b181e11 100644
> > --- a/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> > +++ b/arch/arm64/boot/dts/qcom/qrb5165-rb5.dts
> > @@ -222,6 +222,445 @@
> >  		regulator-max-microvolt = <1800000>;
> >  		regulator-always-on;
> >  	};
> > +
> > +	stm at 6002000 {
> > +		compatible = "arm,coresight-stm", "arm,primecell";
> > +		reg = <0 0x06002000 0 0x1000>,
> > +		      <0 0x16280000 0 0x180000>;
> > +		reg-names = "stm-base", "stm-stimulus-base";
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		out-ports {
> > +			port {
> > +				stm_out: endpoint {
> > +					remote-endpoint =
> > +					  <&funnel0_in7>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	funnel at 6041000 {
> > +		compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
> > +		reg = <0 0x06041000 0 0x1000>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		out-ports {
> > +			port {
> > +				funnel0_out: endpoint {
> > +					remote-endpoint =
> > +					  <&merge_funnel_in0>;
> > +				};
> > +			};
> > +		};
> > +
> > +		in-ports {
> > +			#address-cells = <1>;
> > +			#size-cells = <0>;
> > +
> > +			port at 7 {
> > +				reg = <7>;
> > +				funnel0_in7: endpoint {
> > +					remote-endpoint = <&stm_out>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	funnel at 6042000 {
> > +		compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
> > +		reg = <0 0x06042000 0 0x1000>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		out-ports {
> > +			port {
> > +				funnel2_out: endpoint {
> > +					remote-endpoint =
> > +					  <&merge_funnel_in2>;
> > +				};
> > +			};
> > +		};
> > +
> > +		in-ports {
> > +			#address-cells = <1>;
> > +			#size-cells = <0>;
> > +
> > +			port at 4 {
> > +				reg = <4>;
> > +				funnel2_in5: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_merge_funnel_out>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	funnel at 6b04000 {
> > +		compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
> > +		arm,primecell-periphid = <0x000bb908>;
> > +
> > +		reg = <0 0x6b04000 0 0x1000>;
> > +		reg-names = "funnel-base";
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		out-ports {
> > +			port {
> > +				merge_funnel_out: endpoint {
> > +					remote-endpoint =
> > +						<&etf_in>;
> > +				};
> > +			};
> > +		};
> > +
> > +		in-ports {
> > +			#address-cells = <1>;
> > +			#size-cells = <0>;
> > +
> > +			port at 7 {
> > +				reg = <7>;
> > +				swao_funnel_in7: endpoint {
> > +					slave-mode;
> > +					remote-endpoint=
> > +						<&merg_funnel_out>;
> > +				};
> > +			};
> > +		};
> > +
> > +	};
> > +
> > +	funnel at 6045000 {
> > +		compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
> > +		reg = <0 0x06045000 0 0x1000>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		out-ports {
> > +			port {
> > +				merg_funnel_out: endpoint {
> > +					remote-endpoint = <&swao_funnel_in7>;
> > +				};
> > +			};
> > +		};
> > +
> > +		in-ports {
> > +			#address-cells = <1>;
> > +			#size-cells = <0>;
> > +
> > +			port at 0 {
> > +				reg = <0>;
> > +				merge_funnel_in0: endpoint {
> > +					remote-endpoint =
> > +					  <&funnel0_out>;
> > +				};
> > +			};
> > +
> > +			port at 1 {
> > +				reg = <1>;
> > +				merge_funnel_in2: endpoint {
> > +					remote-endpoint =
> > +					  <&funnel2_out>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etf at 6b05000 {
> > +		compatible = "arm,coresight-tmc", "arm,primecell";
> > +		reg = <0 0x06b05000 0 0x1000>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		in-ports {
> > +			port {
> > +				etf_in: endpoint {
> > +					remote-endpoint =
> > +					  <&merge_funnel_out>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7040000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07040000 0 0x1000>;
> > +
> > +		cpu = <&CPU0>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm0_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in0>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7140000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07140000 0 0x1000>;
> > +
> > +		cpu = <&CPU1>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm1_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in1>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7240000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07240000 0 0x1000>;
> > +
> > +		cpu = <&CPU2>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm2_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in2>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7340000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07340000 0 0x1000>;
> > +
> > +		cpu = <&CPU3>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm3_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in3>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7440000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07440000 0 0x1000>;
> > +
> > +		cpu = <&CPU4>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm4_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in4>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7540000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07540000 0 0x1000>;
> > +
> > +		cpu = <&CPU5>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm5_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in5>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7640000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07640000 0 0x1000>;
> > +
> > +		cpu = <&CPU6>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm6_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in6>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	etm at 7740000 {
> > +		compatible = "arm,coresight-etm4x", "arm,primecell";
> > +		reg = <0 0x07740000 0 0x1000>;
> > +
> > +		cpu = <&CPU7>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +		arm,coresight-loses-context-with-cpu;
> > +
> > +		out-ports {
> > +			port {
> > +				etm7_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_in7>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	funnel at 7800000 {
> > +		compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
> > +		reg = <0 0x07800000 0 0x1000>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		out-ports {
> > +			port {
> > +				apss_funnel_out: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_merge_funnel_in>;
> > +				};
> > +			};
> > +		};
> > +
> > +		in-ports {
> > +			#address-cells = <1>;
> > +			#size-cells = <0>;
> > +
> > +			port at 0 {
> > +				reg = <0>;
> > +				apss_funnel_in0: endpoint {
> > +					remote-endpoint =
> > +					  <&etm0_out>;
> > +				};
> > +			};
> > +
> > +			port at 1 {
> > +				reg = <1>;
> > +				apss_funnel_in1: endpoint {
> > +					remote-endpoint =
> > +					  <&etm1_out>;
> > +				};
> > +			};
> > +
> > +			port at 2 {
> > +				reg = <2>;
> > +				apss_funnel_in2: endpoint {
> > +					remote-endpoint =
> > +					  <&etm2_out>;
> > +				};
> > +			};
> > +
> > +			port at 3 {
> > +				reg = <3>;
> > +				apss_funnel_in3: endpoint {
> > +					remote-endpoint =
> > +					  <&etm3_out>;
> > +				};
> > +			};
> > +
> > +			port at 4 {
> > +				reg = <4>;
> > +				apss_funnel_in4: endpoint {
> > +					remote-endpoint =
> > +					  <&etm4_out>;
> > +				};
> > +			};
> > +
> > +			port at 5 {
> > +				reg = <5>;
> > +				apss_funnel_in5: endpoint {
> > +					remote-endpoint =
> > +					  <&etm5_out>;
> > +				};
> > +			};
> > +
> > +			port at 6 {
> > +				reg = <6>;
> > +				apss_funnel_in6: endpoint {
> > +					remote-endpoint =
> > +					  <&etm6_out>;
> > +				};
> > +			};
> > +
> > +			port at 7 {
> > +				reg = <7>;
> > +				apss_funnel_in7: endpoint {
> > +					remote-endpoint =
> > +					  <&etm7_out>;
> > +				};
> > +			};
> > +		};
> > +	};
> > +
> > +	funnel at 7810000 {
> > +		compatible = "arm,coresight-dynamic-funnel", "arm,primecell";
> > +		reg = <0 0x07810000 0 0x1000>;
> > +
> > +		clocks = <&aoss_qmp>;
> > +		clock-names = "apb_pclk";
> > +
> > +		out-ports {
> > +			port {
> > +				apss_merge_funnel_out: endpoint {
> > +					remote-endpoint =
> > +					  <&funnel2_in5>;
> > +				};
> > +			};
> > +		};
> > +
> > +		in-ports {
> > +			port {
> > +				apss_merge_funnel_in: endpoint {
> > +					remote-endpoint =
> > +					  <&apss_funnel_out>;
> > +				};
> > +			};
> > +		};
> > +	};
> 
> Which of the above introduces TPDM and TPDA devices?
> 
> More comments to come tomorrow.
> 
> Thanks,
> Mathieu
> 
> >  };
Hi Mathieu,

We will add TPDM/TPDA related code to the device tree in the next verison.

Best,
Tao
> >  
> >  &adsp {
> > -- 
> > 2.17.1
> > 



More information about the linux-arm-kernel mailing list