diff mbox

[V2,1/1] ARM: dts: imx7d: add cortex-a7 coresight component

Message ID 1433192081-1131-1-git-send-email-Frank.Li@freescale.com (mailing list archive)
State New, archived
Headers show

Commit Message

Frank Li June 1, 2015, 8:54 p.m. UTC
From: Frank Li <Frank.Li@freescale.com>

Added etm, etb, funnel and replicator

usage example:

    echo 1 >/sys/bus/coresight/devices/30086000.etr/enable_sink
    echo 1 >/sys/bus/coresight/devices/3007c000.etm/enable_source

        coresight-tmc 30086000.etr: TMC enabled
        coresight-replicator replicator.1: REPLICATOR enabled
        coresight-tmc 30084000.tmc: TMC enabled
        coresight-funnel 30083000.funnel: FUNNEL inport 0 enabled
        coresight-funnel 30041000.funnel: FUNNEL inport 0 enabled
        coresight-etm3x 3007c000.etm: ETM tracing enabled

    etm enable here.
    trace data save at /dev/30086000.etr

    cat /dev/30086000.etr > trace.data

        coresight-tmc 30086000.etr: TMC read start
        coresight-tmc 30086000.etr: TMC read end

    use ptm2human(https://github.com/hwangcc23/ptm2human) to show trace data

    ptm2human -i trace.data

Signed-off-by: Frank Li <Frank.Li@freescale.com>
---
Change from V1 to V2
 - remove "0" after @
 - add comments about unused funnel input port
 - add comments about add  arm,primecell-periphid

 arch/arm/boot/dts/imx7d.dtsi | 202 +++++++++++++++++++++++++++++++++++++++++++
 1 file changed, 202 insertions(+)

Comments

Ivan T. Ivanov June 2, 2015, 9:26 a.m. UTC | #1
Hi, 

On Tue, 2015-06-02 at 04:54 +0800, Frank.Li@freescale.com wrote:
> 
> +
> +       etm@3007d000 {
> +               compatible = "arm,coresight-etm3x", "arm,primecell";
> +               reg = <0x3007d000 0x1000>;
> +
> +               /* System will hang if added nosmp in kernel command line
> +                       * without arm,primecell-periphid because amba bus try to
> +                       * read id and core1 power off at this time.
> +                       */
> +               arm,primecell-periphid =  <0xbb956>;

I do have similar problem, but in my case it is APB clock which is
missing during device creation time. And I don't know how to fix it.

Adding Russell King as he's the maintainer of the arm,primecell bus.

> +               cpu = <&cpu1>;
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";

Regards,
Ivan
Russell King - ARM Linux June 2, 2015, 10:54 a.m. UTC | #2
On Tue, Jun 02, 2015 at 12:26:48PM +0300, Ivan T. Ivanov wrote:
> 
> Hi, 
> 
> On Tue, 2015-06-02 at 04:54 +0800, Frank.Li@freescale.com wrote:
> > 
> > +
> > +       etm@3007d000 {
> > +               compatible = "arm,coresight-etm3x", "arm,primecell";
> > +               reg = <0x3007d000 0x1000>;
> > +
> > +               /* System will hang if added nosmp in kernel command line
> > +                       * without arm,primecell-periphid because amba bus try to
> > +                       * read id and core1 power off at this time.
> > +                       */
> > +               arm,primecell-periphid =  <0xbb956>;
> 
> I do have similar problem, but in my case it is APB clock which is
> missing during device creation time. And I don't know how to fix it.
> 
> Adding Russell King as he's the maintainer of the arm,primecell bus.

If it was possible to postpone reading the ID until probe time, then
that's how I'd suggest to fix this problem, but unfortunately it isn't.
We need to know the device's ID by the time the bus ->match function
is called.

The problem with the match function is that it has two possible
return values: 0 and non-0 meaning "doesn't match" and "does match".
There's no possibility of returning -EPROBE_DEFER here.

So, if we don't have the ID when we're trying to match drivers to the
devices, our only option is to say "doesn't match" which effectively
means it'll never automatically match its driver.

Short of modifying the driver core (which isn't going to be popular)
I don't see an easy solution to this problem.

For Frank's problem, this looks to me like something that PM domains
should be used for - but I guess it runs into the issue that PM domains
aren't up at the time we try to bring secondary CPUs online - and
brings with it a whole host of issues surrounding the time that
resources (PM domains and therefore clocks) are available.

Maybe what we need there is some way of representing the PM domains,
one where drivers can be attached to a PM domain and enquire at load
time whether it's powered up.
Ivan T. Ivanov June 2, 2015, 12:15 p.m. UTC | #3
On Tue, 2015-06-02 at 11:54 +0100, Russell King - ARM Linux wrote:
> On Tue, Jun 02, 2015 at 12:26:48PM +0300, Ivan T. Ivanov wrote:
> > Hi,
> > 
> > On Tue, 2015-06-02 at 04:54 +0800, Frank.Li@freescale.com wrote:
> > > +
> > > +       etm@3007d000 {
> > > +               compatible = "arm,coresight-etm3x", "arm,primecell";
> > > +               reg = <0x3007d000 0x1000>;
> > > +
> > > +               /* System will hang if added nosmp in kernel command line
> > > +                       * without arm,primecell-periphid because amba bus try to
> > > +                       * read id and core1 power off at this time.
> > > +                       */
> > > +               arm,primecell-periphid =  <0xbb956>;
> > 
> > I do have similar problem, but in my case it is APB clock which is
> > missing during device creation time. And I don't know how to fix it.
> > 
> > Adding Russell King as he's the maintainer of the arm,primecell bus.
> 
> If it was possible to postpone reading the ID until probe time, then
> that's how I'd suggest to fix this problem, but unfortunately it isn't.
> We need to know the device's ID by the time the bus ->match function
> is called.

I have tried to read device ID again and again on every bus ->match until
succeed. with hope that driver which provide APB clock will be probed
in between, and this solve problem for me. But as Stephen Boyd point me,
this way uevent used for module auto loading will be broken. So no joy.

> Short of modifying the driver core (which isn't going to be popular)
> I don't see an easy solution to this problem.
> 

Thanks,
Ivan
Mathieu Poirier June 2, 2015, 2:36 p.m. UTC | #4
On 1 June 2015 at 14:54,  <Frank.Li@freescale.com> wrote:
> From: Frank Li <Frank.Li@freescale.com>
>
> Added etm, etb, funnel and replicator
>
> usage example:
>
>     echo 1 >/sys/bus/coresight/devices/30086000.etr/enable_sink
>     echo 1 >/sys/bus/coresight/devices/3007c000.etm/enable_source
>
>         coresight-tmc 30086000.etr: TMC enabled
>         coresight-replicator replicator.1: REPLICATOR enabled
>         coresight-tmc 30084000.tmc: TMC enabled
>         coresight-funnel 30083000.funnel: FUNNEL inport 0 enabled
>         coresight-funnel 30041000.funnel: FUNNEL inport 0 enabled
>         coresight-etm3x 3007c000.etm: ETM tracing enabled
>
>     etm enable here.
>     trace data save at /dev/30086000.etr
>
>     cat /dev/30086000.etr > trace.data
>
>         coresight-tmc 30086000.etr: TMC read start
>         coresight-tmc 30086000.etr: TMC read end
>
>     use ptm2human(https://github.com/hwangcc23/ptm2human) to show trace data
>
>     ptm2human -i trace.data
>
> Signed-off-by: Frank Li <Frank.Li@freescale.com>
> ---
> Change from V1 to V2
>  - remove "0" after @
>  - add comments about unused funnel input port
>  - add comments about add  arm,primecell-periphid
>
>  arch/arm/boot/dts/imx7d.dtsi | 202 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 202 insertions(+)
>
> diff --git a/arch/arm/boot/dts/imx7d.dtsi b/arch/arm/boot/dts/imx7d.dtsi
> index b4cd8fd..d715501 100644
> --- a/arch/arm/boot/dts/imx7d.dtsi
> +++ b/arch/arm/boot/dts/imx7d.dtsi
> @@ -121,6 +121,208 @@
>                 clock-output-names = "osc";
>         };
>
> +       etr@30086000 {
> +               compatible = "arm,coresight-tmc", "arm,primecell";
> +               reg = <0x30086000 0x1000>;
> +
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";
> +
> +               port {
> +                       etr_in_port: endpoint {
> +                               slave-mode;
> +                               remote-endpoint = <&replicator_out_port1>;
> +                       };
> +               };
> +       };
> +
> +       tpiu@30087000 {
> +               compatible = "arm,coresight-tpiu", "arm,primecell";
> +               reg = <0x30087000 0x1000>;
> +
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";
> +               port {
> +                       tpiu_in_port: endpoint@0 {
> +                               slave-mode;
> +                               remote-endpoint = <&replicator_out_port1>;
> +                       };
> +               };
> +       };
> +
> +       replicator {
> +               /* non-configurable replicators don't show up on the
> +                * AMBA bus.  As such no need to add "arm,primecell"
> +                */
> +               compatible = "arm,coresight-replicator";
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       /* replicator output ports */
> +                       port@0 {
> +                               reg = <0>;
> +                               replicator_out_port0: endpoint {
> +                                       remote-endpoint = <&tpiu_in_port>;
> +                               };
> +                       };
> +
> +                       port@1 {
> +                               reg = <1>;
> +                               replicator_out_port1: endpoint {
> +                                       remote-endpoint = <&etr_in_port>;
> +                               };
> +                       };
> +
> +                       /* replicator input port */
> +                       port@2 {
> +                               reg = <0>;
> +                               replicator_in_port0: endpoint {
> +                                       slave-mode;
> +                                       remote-endpoint = <&etf_out_port>;
> +                               };
> +                       };
> +               };
> +       };
> +
> +       etf@30084000 {
> +               compatible = "arm,coresight-tmc", "arm,primecell";
> +               reg = <0x30084000 0x1000>;
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       port@0 {
> +                               reg = <0>;
> +                               etf_in_port: endpoint {
> +                                       slave-mode;
> +                                       remote-endpoint = <&hugo_funnel_out_port0>;
> +                               };
> +                       };
> +
> +                       port@1 {
> +                               reg = <0>;
> +                               etf_out_port: endpoint {
> +                                       remote-endpoint = <&replicator_in_port0>;
> +                               };
> +                       };
> +               };
> +       };
> +
> +       funnel@30083000 {
> +               compatible = "arm,coresight-funnel", "arm,primecell";
> +               reg = <0x30083000 0x1000>;
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       /* funnel input ports */
> +                       port@0 {
> +                               reg = <0>;
> +                               hugo_funnel_in_port0: endpoint {
> +                                       slave-mode;
> +                                       remote-endpoint = <&ca_funnel_out_port0>;
> +                               };
> +                       };
> +
> +                       port@1 {
> +                               reg = <1>;
> +                               hugo_funnel_in_port1: endpoint {
> +                                       slave-mode; /* M4 input */
> +                               };
> +                       };
> +
> +                       port@2 {
> +                               reg = <0>;
> +                               hugo_funnel_out_port0: endpoint {
> +                                       remote-endpoint = <&etf_in_port>;
> +                               };
> +                       };
> +
> +                       /* the other input ports are not connect to anything */
> +               };
> +       };
> +
> +       funnel@30041000 {
> +               compatible = "arm,coresight-funnel", "arm,primecell";
> +               reg = <0x30041000 0x1000>;
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";
> +
> +               ports {
> +                       #address-cells = <1>;
> +                       #size-cells = <0>;
> +
> +                       /* funnel input ports */
> +                       port@0 {
> +                               reg = <0>;
> +                               ca_funnel_in_port0: endpoint {
> +                                       slave-mode;
> +                                       remote-endpoint = <&etm0_out_port>;
> +                               };
> +                       };
> +
> +                       port@1 {
> +                               reg = <1>;
> +                               ca_funnel_in_port1: endpoint {
> +                                       slave-mode;
> +                                       remote-endpoint = <&etm1_out_port>;
> +                               };
> +                       };
> +
> +                       /* funnel output port */
> +                       port@2 {
> +                               reg = <0>;
> +                               ca_funnel_out_port0: endpoint {
> +                                       remote-endpoint = <&hugo_funnel_in_port0>;
> +                               };
> +                       };
> +
> +                       /* the other input ports are not connect to anything */
> +               };
> +       };
> +
> +       etm@3007c000 {
> +               compatible = "arm,coresight-etm3x", "arm,primecell";
> +               reg = <0x3007c000 0x1000>;
> +               cpu = <&cpu0>;
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";
> +
> +               port {
> +                       etm0_out_port: endpoint {
> +                               remote-endpoint = <&ca_funnel_in_port0>;
> +                       };
> +               };
> +       };
> +
> +       etm@3007d000 {
> +               compatible = "arm,coresight-etm3x", "arm,primecell";
> +               reg = <0x3007d000 0x1000>;
> +
> +               /* System will hang if added nosmp in kernel command line
> +                * without arm,primecell-periphid because amba bus try to
> +                * read id and core1 power off at this time.
> +                */
> +               arm,primecell-periphid =  <0xbb956>;
> +               cpu = <&cpu1>;
> +               clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +               clock-names = "apb_pclk";
> +
> +               port {
> +                       etm1_out_port: endpoint {
> +                               remote-endpoint = <&ca_funnel_in_port1>;
> +                       };
> +               };
> +       };
> +
>         soc {
>                 #address-cells = <1>;
>                 #size-cells = <1>;
> --
> 1.9.1
>

I am good with this patch and would take it in my tree but I simply
can't find "imx7d.dtsi" anywhere.  Who is the maintainer, where is the
tree?
Zhi Li June 2, 2015, 3:58 p.m. UTC | #5
On Tue, Jun 2, 2015 at 9:36 AM, Mathieu Poirier
<mathieu.poirier@linaro.org> wrote:
> I am good with this patch and would take it in my tree but I simply
> can't find "imx7d.dtsi" anywhere.  Who is the maintainer, where is the
> tree?

It is in guo shawn's tree.

best regards
Frank Li
Mathieu Poirier June 2, 2015, 6:17 p.m. UTC | #6
On 2 June 2015 at 09:58, Zhi Li <lznuaa@gmail.com> wrote:
> On Tue, Jun 2, 2015 at 9:36 AM, Mathieu Poirier
> <mathieu.poirier@linaro.org> wrote:
>> I am good with this patch and would take it in my tree but I simply
>> can't find "imx7d.dtsi" anywhere.  Who is the maintainer, where is the
>> tree?
>
> It is in guo shawn's tree.
>
> best regards
> Frank Li

That explains things - Shawn, can you take the patch?  Doing so please add:

Acked-by: Mathieu Poirier <mathieu.poirier@linaro.org>
Shawn Guo June 28, 2015, 1:39 p.m. UTC | #7
On Tue, Jun 02, 2015 at 04:54:41AM +0800, Frank.Li@freescale.com wrote:
> From: Frank Li <Frank.Li@freescale.com>
> 
> Added etm, etb, funnel and replicator
> 
> usage example:
> 
>     echo 1 >/sys/bus/coresight/devices/30086000.etr/enable_sink
>     echo 1 >/sys/bus/coresight/devices/3007c000.etm/enable_source
> 
>         coresight-tmc 30086000.etr: TMC enabled
>         coresight-replicator replicator.1: REPLICATOR enabled
>         coresight-tmc 30084000.tmc: TMC enabled
>         coresight-funnel 30083000.funnel: FUNNEL inport 0 enabled
>         coresight-funnel 30041000.funnel: FUNNEL inport 0 enabled
>         coresight-etm3x 3007c000.etm: ETM tracing enabled
> 
>     etm enable here.
>     trace data save at /dev/30086000.etr
> 
>     cat /dev/30086000.etr > trace.data
> 
>         coresight-tmc 30086000.etr: TMC read start
>         coresight-tmc 30086000.etr: TMC read end
> 
>     use ptm2human(https://github.com/hwangcc23/ptm2human) to show trace data
> 
>     ptm2human -i trace.data
> 
> Signed-off-by: Frank Li <Frank.Li@freescale.com>
> ---
> Change from V1 to V2
>  - remove "0" after @
>  - add comments about unused funnel input port
>  - add comments about add  arm,primecell-periphid
> 
>  arch/arm/boot/dts/imx7d.dtsi | 202 +++++++++++++++++++++++++++++++++++++++++++
>  1 file changed, 202 insertions(+)
> 
> diff --git a/arch/arm/boot/dts/imx7d.dtsi b/arch/arm/boot/dts/imx7d.dtsi
> index b4cd8fd..d715501 100644
> --- a/arch/arm/boot/dts/imx7d.dtsi
> +++ b/arch/arm/boot/dts/imx7d.dtsi
> @@ -121,6 +121,208 @@
>  		clock-output-names = "osc";
>  	};
>  
> +	etr@30086000 {
> +		compatible = "arm,coresight-tmc", "arm,primecell";
> +		reg = <0x30086000 0x1000>;
> +

Drop this new line.

> +		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +		clock-names = "apb_pclk";
> +
> +		port {
> +			etr_in_port: endpoint {
> +				slave-mode;
> +				remote-endpoint = <&replicator_out_port1>;
> +			};
> +		};
> +	};
> +
> +	tpiu@30087000 {
> +		compatible = "arm,coresight-tpiu", "arm,primecell";
> +		reg = <0x30087000 0x1000>;
> +

Ditto

> +		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +		clock-names = "apb_pclk";

Have a new line here.

> +		port {
> +			tpiu_in_port: endpoint@0 {

Why do we need a @unit-address here?

> +				slave-mode;
> +				remote-endpoint = <&replicator_out_port1>;
> +			};
> +		};
> +	};
> +
> +	replicator {
> +		/* non-configurable replicators don't show up on the
> +		 * AMBA bus.  As such no need to add "arm,primecell"
> +		 */

		/*
		 * Multiple-line comment
		 */

> +		compatible = "arm,coresight-replicator";
> +
> +		ports {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			/* replicator output ports */
> +			port@0 {
> +				reg = <0>;
> +				replicator_out_port0: endpoint {
> +					remote-endpoint = <&tpiu_in_port>;
> +				};
> +			};
> +
> +			port@1 {
> +				reg = <1>;
> +				replicator_out_port1: endpoint {
> +					remote-endpoint = <&etr_in_port>;
> +				};
> +			};
> +
> +			/* replicator input port */
> +			port@2 {
> +				reg = <0>;
> +				replicator_in_port0: endpoint {
> +					slave-mode;
> +					remote-endpoint = <&etf_out_port>;
> +				};
> +			};
> +		};
> +	};
> +
> +	etf@30084000 {
> +		compatible = "arm,coresight-tmc", "arm,primecell";
> +		reg = <0x30084000 0x1000>;
> +		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +		clock-names = "apb_pclk";
> +
> +		ports {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			port@0 {
> +				reg = <0>;
> +				etf_in_port: endpoint {
> +					slave-mode;
> +					remote-endpoint = <&hugo_funnel_out_port0>;
> +				};
> +			};
> +
> +			port@1 {
> +				reg = <0>;
> +				etf_out_port: endpoint {
> +					remote-endpoint = <&replicator_in_port0>;
> +				};
> +			};
> +		};
> +	};
> +
> +	funnel@30083000 {
> +		compatible = "arm,coresight-funnel", "arm,primecell";
> +		reg = <0x30083000 0x1000>;
> +		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +		clock-names = "apb_pclk";
> +
> +		ports {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			/* funnel input ports */
> +			port@0 {
> +				reg = <0>;
> +				hugo_funnel_in_port0: endpoint {
> +					slave-mode;
> +					remote-endpoint = <&ca_funnel_out_port0>;
> +				};
> +			};
> +
> +			port@1 {
> +				reg = <1>;
> +				hugo_funnel_in_port1: endpoint {
> +					slave-mode; /* M4 input */
> +				};
> +			};
> +
> +			port@2 {
> +				reg = <0>;
> +				hugo_funnel_out_port0: endpoint {
> +					remote-endpoint = <&etf_in_port>;
> +				};
> +			};
> +
> +			/* the other input ports are not connect to anything */
> +		};
> +	};
> +
> +	funnel@30041000 {
> +		compatible = "arm,coresight-funnel", "arm,primecell";
> +		reg = <0x30041000 0x1000>;
> +		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +		clock-names = "apb_pclk";
> +
> +		ports {
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			/* funnel input ports */
> +			port@0 {
> +				reg = <0>;
> +				ca_funnel_in_port0: endpoint {
> +					slave-mode;
> +					remote-endpoint = <&etm0_out_port>;
> +				};
> +			};
> +
> +			port@1 {
> +				reg = <1>;
> +				ca_funnel_in_port1: endpoint {
> +					slave-mode;
> +					remote-endpoint = <&etm1_out_port>;
> +				};
> +			};
> +
> +			/* funnel output port */
> +			port@2 {
> +				reg = <0>;
> +				ca_funnel_out_port0: endpoint {
> +					remote-endpoint = <&hugo_funnel_in_port0>;
> +				};
> +			};
> +
> +			/* the other input ports are not connect to anything */
> +		};
> +	};
> +
> +	etm@3007c000 {
> +		compatible = "arm,coresight-etm3x", "arm,primecell";
> +		reg = <0x3007c000 0x1000>;
> +		cpu = <&cpu0>;
> +		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +		clock-names = "apb_pclk";
> +
> +		port {
> +			etm0_out_port: endpoint {
> +				remote-endpoint = <&ca_funnel_in_port0>;
> +			};
> +		};
> +	};
> +
> +	etm@3007d000 {
> +		compatible = "arm,coresight-etm3x", "arm,primecell";
> +		reg = <0x3007d000 0x1000>;
> +
> +		/* System will hang if added nosmp in kernel command line
> +		 * without arm,primecell-periphid because amba bus try to
> +		 * read id and core1 power off at this time.
> +		 */

		/*
		 * Multiple-line comment
		 */

> +		arm,primecell-periphid =  <0xbb956>;

One space after '='

Shawn

> +		cpu = <&cpu1>;
> +		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
> +		clock-names = "apb_pclk";
> +
> +		port {
> +			etm1_out_port: endpoint {
> +				remote-endpoint = <&ca_funnel_in_port1>;
> +			};
> +		};
> +	};
> +
>  	soc {
>  		#address-cells = <1>;
>  		#size-cells = <1>;
> -- 
> 1.9.1
> 
> 
> _______________________________________________
> linux-arm-kernel mailing list
> linux-arm-kernel@lists.infradead.org
> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
Mathieu Poirier June 29, 2015, 2:36 p.m. UTC | #8
On 28 June 2015 at 07:39, Shawn Guo <shawnguo@kernel.org> wrote:
> On Tue, Jun 02, 2015 at 04:54:41AM +0800, Frank.Li@freescale.com wrote:
>> From: Frank Li <Frank.Li@freescale.com>
>>
>> Added etm, etb, funnel and replicator
>>
>> usage example:
>>
>>     echo 1 >/sys/bus/coresight/devices/30086000.etr/enable_sink
>>     echo 1 >/sys/bus/coresight/devices/3007c000.etm/enable_source
>>
>>         coresight-tmc 30086000.etr: TMC enabled
>>         coresight-replicator replicator.1: REPLICATOR enabled
>>         coresight-tmc 30084000.tmc: TMC enabled
>>         coresight-funnel 30083000.funnel: FUNNEL inport 0 enabled
>>         coresight-funnel 30041000.funnel: FUNNEL inport 0 enabled
>>         coresight-etm3x 3007c000.etm: ETM tracing enabled
>>
>>     etm enable here.
>>     trace data save at /dev/30086000.etr
>>
>>     cat /dev/30086000.etr > trace.data
>>
>>         coresight-tmc 30086000.etr: TMC read start
>>         coresight-tmc 30086000.etr: TMC read end
>>
>>     use ptm2human(https://github.com/hwangcc23/ptm2human) to show trace data
>>
>>     ptm2human -i trace.data
>>
>> Signed-off-by: Frank Li <Frank.Li@freescale.com>
>> ---
>> Change from V1 to V2
>>  - remove "0" after @
>>  - add comments about unused funnel input port
>>  - add comments about add  arm,primecell-periphid
>>
>>  arch/arm/boot/dts/imx7d.dtsi | 202 +++++++++++++++++++++++++++++++++++++++++++
>>  1 file changed, 202 insertions(+)
>>
>> diff --git a/arch/arm/boot/dts/imx7d.dtsi b/arch/arm/boot/dts/imx7d.dtsi
>> index b4cd8fd..d715501 100644
>> --- a/arch/arm/boot/dts/imx7d.dtsi
>> +++ b/arch/arm/boot/dts/imx7d.dtsi
>> @@ -121,6 +121,208 @@
>>               clock-output-names = "osc";
>>       };
>>
>> +     etr@30086000 {
>> +             compatible = "arm,coresight-tmc", "arm,primecell";
>> +             reg = <0x30086000 0x1000>;
>> +
>
> Drop this new line.
>
>> +             clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
>> +             clock-names = "apb_pclk";
>> +
>> +             port {
>> +                     etr_in_port: endpoint {
>> +                             slave-mode;
>> +                             remote-endpoint = <&replicator_out_port1>;
>> +                     };
>> +             };
>> +     };
>> +
>> +     tpiu@30087000 {
>> +             compatible = "arm,coresight-tpiu", "arm,primecell";
>> +             reg = <0x30087000 0x1000>;
>> +
>
> Ditto
>
>> +             clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
>> +             clock-names = "apb_pclk";
>
> Have a new line here.
>
>> +             port {
>> +                     tpiu_in_port: endpoint@0 {
>
> Why do we need a @unit-address here?

Good catch - The "@0" is indeed not required.

>
>> +                             slave-mode;
>> +                             remote-endpoint = <&replicator_out_port1>;
>> +                     };
>> +             };
>> +     };
>> +
>> +     replicator {
>> +             /* non-configurable replicators don't show up on the
>> +              * AMBA bus.  As such no need to add "arm,primecell"
>> +              */
>
>                 /*
>                  * Multiple-line comment
>                  */
>
>> +             compatible = "arm,coresight-replicator";
>> +
>> +             ports {
>> +                     #address-cells = <1>;
>> +                     #size-cells = <0>;
>> +
>> +                     /* replicator output ports */
>> +                     port@0 {
>> +                             reg = <0>;
>> +                             replicator_out_port0: endpoint {
>> +                                     remote-endpoint = <&tpiu_in_port>;
>> +                             };
>> +                     };
>> +
>> +                     port@1 {
>> +                             reg = <1>;
>> +                             replicator_out_port1: endpoint {
>> +                                     remote-endpoint = <&etr_in_port>;
>> +                             };
>> +                     };
>> +
>> +                     /* replicator input port */
>> +                     port@2 {
>> +                             reg = <0>;
>> +                             replicator_in_port0: endpoint {
>> +                                     slave-mode;
>> +                                     remote-endpoint = <&etf_out_port>;
>> +                             };
>> +                     };
>> +             };
>> +     };
>> +
>> +     etf@30084000 {
>> +             compatible = "arm,coresight-tmc", "arm,primecell";
>> +             reg = <0x30084000 0x1000>;
>> +             clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
>> +             clock-names = "apb_pclk";
>> +
>> +             ports {
>> +                     #address-cells = <1>;
>> +                     #size-cells = <0>;
>> +
>> +                     port@0 {
>> +                             reg = <0>;
>> +                             etf_in_port: endpoint {
>> +                                     slave-mode;
>> +                                     remote-endpoint = <&hugo_funnel_out_port0>;
>> +                             };
>> +                     };
>> +
>> +                     port@1 {
>> +                             reg = <0>;
>> +                             etf_out_port: endpoint {
>> +                                     remote-endpoint = <&replicator_in_port0>;
>> +                             };
>> +                     };
>> +             };
>> +     };
>> +
>> +     funnel@30083000 {
>> +             compatible = "arm,coresight-funnel", "arm,primecell";
>> +             reg = <0x30083000 0x1000>;
>> +             clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
>> +             clock-names = "apb_pclk";
>> +
>> +             ports {
>> +                     #address-cells = <1>;
>> +                     #size-cells = <0>;
>> +
>> +                     /* funnel input ports */
>> +                     port@0 {
>> +                             reg = <0>;
>> +                             hugo_funnel_in_port0: endpoint {
>> +                                     slave-mode;
>> +                                     remote-endpoint = <&ca_funnel_out_port0>;
>> +                             };
>> +                     };
>> +
>> +                     port@1 {
>> +                             reg = <1>;
>> +                             hugo_funnel_in_port1: endpoint {
>> +                                     slave-mode; /* M4 input */
>> +                             };
>> +                     };
>> +
>> +                     port@2 {
>> +                             reg = <0>;
>> +                             hugo_funnel_out_port0: endpoint {
>> +                                     remote-endpoint = <&etf_in_port>;
>> +                             };
>> +                     };
>> +
>> +                     /* the other input ports are not connect to anything */
>> +             };
>> +     };
>> +
>> +     funnel@30041000 {
>> +             compatible = "arm,coresight-funnel", "arm,primecell";
>> +             reg = <0x30041000 0x1000>;
>> +             clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
>> +             clock-names = "apb_pclk";
>> +
>> +             ports {
>> +                     #address-cells = <1>;
>> +                     #size-cells = <0>;
>> +
>> +                     /* funnel input ports */
>> +                     port@0 {
>> +                             reg = <0>;
>> +                             ca_funnel_in_port0: endpoint {
>> +                                     slave-mode;
>> +                                     remote-endpoint = <&etm0_out_port>;
>> +                             };
>> +                     };
>> +
>> +                     port@1 {
>> +                             reg = <1>;
>> +                             ca_funnel_in_port1: endpoint {
>> +                                     slave-mode;
>> +                                     remote-endpoint = <&etm1_out_port>;
>> +                             };
>> +                     };
>> +
>> +                     /* funnel output port */
>> +                     port@2 {
>> +                             reg = <0>;
>> +                             ca_funnel_out_port0: endpoint {
>> +                                     remote-endpoint = <&hugo_funnel_in_port0>;
>> +                             };
>> +                     };
>> +
>> +                     /* the other input ports are not connect to anything */
>> +             };
>> +     };
>> +
>> +     etm@3007c000 {
>> +             compatible = "arm,coresight-etm3x", "arm,primecell";
>> +             reg = <0x3007c000 0x1000>;
>> +             cpu = <&cpu0>;
>> +             clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
>> +             clock-names = "apb_pclk";
>> +
>> +             port {
>> +                     etm0_out_port: endpoint {
>> +                             remote-endpoint = <&ca_funnel_in_port0>;
>> +                     };
>> +             };
>> +     };
>> +
>> +     etm@3007d000 {
>> +             compatible = "arm,coresight-etm3x", "arm,primecell";
>> +             reg = <0x3007d000 0x1000>;
>> +
>> +             /* System will hang if added nosmp in kernel command line
>> +              * without arm,primecell-periphid because amba bus try to
>> +              * read id and core1 power off at this time.
>> +              */
>
>                 /*
>                  * Multiple-line comment
>                  */
>
>> +             arm,primecell-periphid =  <0xbb956>;
>
> One space after '='
>
> Shawn
>
>> +             cpu = <&cpu1>;
>> +             clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
>> +             clock-names = "apb_pclk";
>> +
>> +             port {
>> +                     etm1_out_port: endpoint {
>> +                             remote-endpoint = <&ca_funnel_in_port1>;
>> +                     };
>> +             };
>> +     };
>> +
>>       soc {
>>               #address-cells = <1>;
>>               #size-cells = <1>;
>> --
>> 1.9.1
>>
>>
>> _______________________________________________
>> linux-arm-kernel mailing list
>> linux-arm-kernel@lists.infradead.org
>> http://lists.infradead.org/mailman/listinfo/linux-arm-kernel
diff mbox

Patch

diff --git a/arch/arm/boot/dts/imx7d.dtsi b/arch/arm/boot/dts/imx7d.dtsi
index b4cd8fd..d715501 100644
--- a/arch/arm/boot/dts/imx7d.dtsi
+++ b/arch/arm/boot/dts/imx7d.dtsi
@@ -121,6 +121,208 @@ 
 		clock-output-names = "osc";
 	};
 
+	etr@30086000 {
+		compatible = "arm,coresight-tmc", "arm,primecell";
+		reg = <0x30086000 0x1000>;
+
+		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
+		clock-names = "apb_pclk";
+
+		port {
+			etr_in_port: endpoint {
+				slave-mode;
+				remote-endpoint = <&replicator_out_port1>;
+			};
+		};
+	};
+
+	tpiu@30087000 {
+		compatible = "arm,coresight-tpiu", "arm,primecell";
+		reg = <0x30087000 0x1000>;
+
+		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
+		clock-names = "apb_pclk";
+		port {
+			tpiu_in_port: endpoint@0 {
+				slave-mode;
+				remote-endpoint = <&replicator_out_port1>;
+			};
+		};
+	};
+
+	replicator {
+		/* non-configurable replicators don't show up on the
+		 * AMBA bus.  As such no need to add "arm,primecell"
+		 */
+		compatible = "arm,coresight-replicator";
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			/* replicator output ports */
+			port@0 {
+				reg = <0>;
+				replicator_out_port0: endpoint {
+					remote-endpoint = <&tpiu_in_port>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+				replicator_out_port1: endpoint {
+					remote-endpoint = <&etr_in_port>;
+				};
+			};
+
+			/* replicator input port */
+			port@2 {
+				reg = <0>;
+				replicator_in_port0: endpoint {
+					slave-mode;
+					remote-endpoint = <&etf_out_port>;
+				};
+			};
+		};
+	};
+
+	etf@30084000 {
+		compatible = "arm,coresight-tmc", "arm,primecell";
+		reg = <0x30084000 0x1000>;
+		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
+		clock-names = "apb_pclk";
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			port@0 {
+				reg = <0>;
+				etf_in_port: endpoint {
+					slave-mode;
+					remote-endpoint = <&hugo_funnel_out_port0>;
+				};
+			};
+
+			port@1 {
+				reg = <0>;
+				etf_out_port: endpoint {
+					remote-endpoint = <&replicator_in_port0>;
+				};
+			};
+		};
+	};
+
+	funnel@30083000 {
+		compatible = "arm,coresight-funnel", "arm,primecell";
+		reg = <0x30083000 0x1000>;
+		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
+		clock-names = "apb_pclk";
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			/* funnel input ports */
+			port@0 {
+				reg = <0>;
+				hugo_funnel_in_port0: endpoint {
+					slave-mode;
+					remote-endpoint = <&ca_funnel_out_port0>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+				hugo_funnel_in_port1: endpoint {
+					slave-mode; /* M4 input */
+				};
+			};
+
+			port@2 {
+				reg = <0>;
+				hugo_funnel_out_port0: endpoint {
+					remote-endpoint = <&etf_in_port>;
+				};
+			};
+
+			/* the other input ports are not connect to anything */
+		};
+	};
+
+	funnel@30041000 {
+		compatible = "arm,coresight-funnel", "arm,primecell";
+		reg = <0x30041000 0x1000>;
+		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
+		clock-names = "apb_pclk";
+
+		ports {
+			#address-cells = <1>;
+			#size-cells = <0>;
+
+			/* funnel input ports */
+			port@0 {
+				reg = <0>;
+				ca_funnel_in_port0: endpoint {
+					slave-mode;
+					remote-endpoint = <&etm0_out_port>;
+				};
+			};
+
+			port@1 {
+				reg = <1>;
+				ca_funnel_in_port1: endpoint {
+					slave-mode;
+					remote-endpoint = <&etm1_out_port>;
+				};
+			};
+
+			/* funnel output port */
+			port@2 {
+				reg = <0>;
+				ca_funnel_out_port0: endpoint {
+					remote-endpoint = <&hugo_funnel_in_port0>;
+				};
+			};
+
+			/* the other input ports are not connect to anything */
+		};
+	};
+
+	etm@3007c000 {
+		compatible = "arm,coresight-etm3x", "arm,primecell";
+		reg = <0x3007c000 0x1000>;
+		cpu = <&cpu0>;
+		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
+		clock-names = "apb_pclk";
+
+		port {
+			etm0_out_port: endpoint {
+				remote-endpoint = <&ca_funnel_in_port0>;
+			};
+		};
+	};
+
+	etm@3007d000 {
+		compatible = "arm,coresight-etm3x", "arm,primecell";
+		reg = <0x3007d000 0x1000>;
+
+		/* System will hang if added nosmp in kernel command line
+		 * without arm,primecell-periphid because amba bus try to
+		 * read id and core1 power off at this time.
+		 */
+		arm,primecell-periphid =  <0xbb956>;
+		cpu = <&cpu1>;
+		clocks = <&clks IMX7D_MAIN_AXI_ROOT_CLK>;
+		clock-names = "apb_pclk";
+
+		port {
+			etm1_out_port: endpoint {
+				remote-endpoint = <&ca_funnel_in_port1>;
+			};
+		};
+	};
+
 	soc {
 		#address-cells = <1>;
 		#size-cells = <1>;