diff mbox

[v6,6/8] arm64: dts: add SRAM, MHU mailbox and SCPI support on Juno

Message ID 1438364591-1144-7-git-send-email-sudeep.holla@arm.com (mailing list archive)
State New, archived
Headers show

Commit Message

Sudeep Holla July 31, 2015, 5:43 p.m. UTC
This patch adds support for the MHU mailbox peripheral used on Juno by
application processors to communicate with remote SCP handling most of
the CPU/system power management. It also adds the SRAM reserving the
shared memory and SCPI message protocol using that shared memory.

Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
Cc: Jon Medhurst (Tixy) <tixy@linaro.org>
---
 arch/arm64/boot/dts/arm/juno-base.dtsi | 54 ++++++++++++++++++++++++++++++++++
 1 file changed, 54 insertions(+)

Comments

Liviu Dudau Aug. 3, 2015, 11:23 a.m. UTC | #1
On Fri, Jul 31, 2015 at 06:43:09PM +0100, Sudeep Holla wrote:
> This patch adds support for the MHU mailbox peripheral used on Juno by
> application processors to communicate with remote SCP handling most of
> the CPU/system power management. It also adds the SRAM reserving the
> shared memory and SCPI message protocol using that shared memory.
> 
> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
> Cc: Jon Medhurst (Tixy) <tixy@linaro.org>
> ---
>  arch/arm64/boot/dts/arm/juno-base.dtsi | 54 ++++++++++++++++++++++++++++++++++
>  1 file changed, 54 insertions(+)
> 
> diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
> index e3ee96036eca..c624208edef6 100644
> --- a/arch/arm64/boot/dts/arm/juno-base.dtsi
> +++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
> @@ -17,6 +17,18 @@
>  		};
>  	};
>  
> +	mailbox: mhu@2b1f0000 {
> +		compatible = "arm,mhu", "arm,primecell";
> +		reg = <0x0 0x2b1f0000 0x0 0x1000>;
> +		interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
> +			     <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
> +		interrupt-names = "mhu_lpri_rx",
> +				  "mhu_hpri_rx";
> +		#mbox-cells = <1>;
> +		clocks = <&soc_refclk100mhz>;
> +		clock-names = "apb_pclk";
> +	};
> +
>  	gic: interrupt-controller@2c010000 {
>  		compatible = "arm,gic-400", "arm,cortex-a15-gic";
>  		reg = <0x0 0x2c010000 0 0x1000>,
> @@ -44,6 +56,48 @@
>  			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>;
>  	};
>  
> +	sram: sram@2e000000 {
> +		compatible = "arm,juno-sram-ns", "mmio-sram";
> +		reg = <0x0 0x2e000000 0x0 0x8000>;
> +
> +		#address-cells = <1>;
> +		#size-cells = <1>;
> +		ranges = <0 0x0 0x2e000000 0x8000>;
> +
> +		cpu_scp_lpri: scp-shmem@0 {
> +			compatible = "arm,juno-scp-shmem";
> +			reg = <0x0 0x200>;
> +		};
> +
> +		cpu_scp_hpri: scp-shmem@200 {
> +			compatible = "arm,juno-scp-shmem";
> +			reg = <0x200 0x200>;
> +		};
> +	};
> +
> +	scpi {
> +		compatible = "arm,scpi";
> +		mboxes = <&mailbox 1>;
> +		shmem = <&cpu_scp_hpri>;
> +
> +		clocks {
> +			compatible = "arm,scpi-clocks";
> +
> +			scpi_dvfs: scpi_clocks@0 {
> +				compatible = "arm,scpi-dvfs-clocks";
> +				#clock-cells = <1>;
> +				clock-indices = <0>, <1>, <2>;
> +				clock-output-names = "atlclk", "aplclk","gpuclk";
> +			};
> +			scpi_clk: scpi_clocks@3 {
> +				compatible = "arm,scpi-variable-clocks";
> +				#clock-cells = <1>;
> +				clock-indices = <3>, <4>;
> +				clock-output-names = "pxlclk0", "pxlclk1";
> +			};
> +		};
> +	};
> +

Sorry for noticing this after the ACK, is there any reason why the scpi node is not inside
the juno-clocks.dtsi file?

Best regards,
Liviu

>  	/include/ "juno-clocks.dtsi"
>  
>  	dma@7ff00000 {
> -- 
> 1.9.1
>
Sudeep Holla Aug. 3, 2015, 11:44 a.m. UTC | #2
On 03/08/15 12:23, Liviu Dudau wrote:
> On Fri, Jul 31, 2015 at 06:43:09PM +0100, Sudeep Holla wrote:
>> This patch adds support for the MHU mailbox peripheral used on Juno by
>> application processors to communicate with remote SCP handling most of
>> the CPU/system power management. It also adds the SRAM reserving the
>> shared memory and SCPI message protocol using that shared memory.
>>
>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>> Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
>> Cc: Jon Medhurst (Tixy) <tixy@linaro.org>
>> ---
>>   arch/arm64/boot/dts/arm/juno-base.dtsi | 54 ++++++++++++++++++++++++++++++++++
>>   1 file changed, 54 insertions(+)
>>
>> diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
>> index e3ee96036eca..c624208edef6 100644
>> --- a/arch/arm64/boot/dts/arm/juno-base.dtsi
>> +++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
>> @@ -17,6 +17,18 @@
>>   		};
>>   	};
>>
>> +	mailbox: mhu@2b1f0000 {
>> +		compatible = "arm,mhu", "arm,primecell";
>> +		reg = <0x0 0x2b1f0000 0x0 0x1000>;
>> +		interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
>> +			     <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
>> +		interrupt-names = "mhu_lpri_rx",
>> +				  "mhu_hpri_rx";
>> +		#mbox-cells = <1>;
>> +		clocks = <&soc_refclk100mhz>;
>> +		clock-names = "apb_pclk";
>> +	};
>> +
>>   	gic: interrupt-controller@2c010000 {
>>   		compatible = "arm,gic-400", "arm,cortex-a15-gic";
>>   		reg = <0x0 0x2c010000 0 0x1000>,
>> @@ -44,6 +56,48 @@
>>   			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>;
>>   	};
>>
>> +	sram: sram@2e000000 {
>> +		compatible = "arm,juno-sram-ns", "mmio-sram";
>> +		reg = <0x0 0x2e000000 0x0 0x8000>;
>> +
>> +		#address-cells = <1>;
>> +		#size-cells = <1>;
>> +		ranges = <0 0x0 0x2e000000 0x8000>;
>> +
>> +		cpu_scp_lpri: scp-shmem@0 {
>> +			compatible = "arm,juno-scp-shmem";
>> +			reg = <0x0 0x200>;
>> +		};
>> +
>> +		cpu_scp_hpri: scp-shmem@200 {
>> +			compatible = "arm,juno-scp-shmem";
>> +			reg = <0x200 0x200>;
>> +		};
>> +	};
>> +
>> +	scpi {
>> +		compatible = "arm,scpi";
>> +		mboxes = <&mailbox 1>;
>> +		shmem = <&cpu_scp_hpri>;
>> +
>> +		clocks {
>> +			compatible = "arm,scpi-clocks";
>> +
>> +			scpi_dvfs: scpi_clocks@0 {
>> +				compatible = "arm,scpi-dvfs-clocks";
>> +				#clock-cells = <1>;
>> +				clock-indices = <0>, <1>, <2>;
>> +				clock-output-names = "atlclk", "aplclk","gpuclk";
>> +			};
>> +			scpi_clk: scpi_clocks@3 {
>> +				compatible = "arm,scpi-variable-clocks";
>> +				#clock-cells = <1>;
>> +				clock-indices = <3>, <4>;
>> +				clock-output-names = "pxlclk0", "pxlclk1";
>> +			};
>> +		};
>> +	};
>> +
>
> Sorry for noticing this after the ACK, is there any reason why the scpi node is not inside
> the juno-clocks.dtsi file?
>

Yes, scpi node will have other nodes like sensors/hwmon. So the whole
scpi node can't sit in juno-clocks. Ideally the clocks belongs to
juno-clocks, but I got troubles with the way the DTSI are includes and
could not keep scpi node in base and just update clocks in
juno-clocks.dtsi. It needs some rework the way include file are used.
It's in my todo and I will look at that when I get time.

Regards,
Sudeep
Jon Medhurst (Tixy) Aug. 3, 2015, 11:46 a.m. UTC | #3
On Mon, 2015-08-03 at 12:23 +0100, Liviu Dudau wrote:
> On Fri, Jul 31, 2015 at 06:43:09PM +0100, Sudeep Holla wrote:
> > This patch adds support for the MHU mailbox peripheral used on Juno by
> > application processors to communicate with remote SCP handling most of
> > the CPU/system power management. It also adds the SRAM reserving the
> > shared memory and SCPI message protocol using that shared memory.
> > 
> > Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> > Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
> > Cc: Jon Medhurst (Tixy) <tixy@linaro.org>
> > ---
> >  arch/arm64/boot/dts/arm/juno-base.dtsi | 54 ++++++++++++++++++++++++++++++++++
> >  1 file changed, 54 insertions(+)
> > 
> > diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
> > index e3ee96036eca..c624208edef6 100644
> > --- a/arch/arm64/boot/dts/arm/juno-base.dtsi
> > +++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
[...]
> > +	scpi {
> > +		compatible = "arm,scpi";
> > +		mboxes = <&mailbox 1>;
> > +		shmem = <&cpu_scp_hpri>;
> > +
> > +		clocks {
> > +			compatible = "arm,scpi-clocks";
> > +
> > +			scpi_dvfs: scpi_clocks@0 {
> > +				compatible = "arm,scpi-dvfs-clocks";
> > +				#clock-cells = <1>;
> > +				clock-indices = <0>, <1>, <2>;
> > +				clock-output-names = "atlclk", "aplclk","gpuclk";
> > +			};
> > +			scpi_clk: scpi_clocks@3 {
> > +				compatible = "arm,scpi-variable-clocks";
> > +				#clock-cells = <1>;
> > +				clock-indices = <3>, <4>;
> > +				clock-output-names = "pxlclk0", "pxlclk1";
> > +			};
> > +		};
> > +	};
> > +
> 
> Sorry for noticing this after the ACK, is there any reason why the scpi node is not inside
> the juno-clocks.dtsi file?

Because SCPI is not just about clocks? Just happens that these first
patches are but there's thermal sensors and other things as well.
Sudeep Holla Aug. 3, 2015, 12:43 p.m. UTC | #4
On 03/08/15 12:46, Jon Medhurst (Tixy) wrote:
> On Mon, 2015-08-03 at 12:23 +0100, Liviu Dudau wrote:
>> On Fri, Jul 31, 2015 at 06:43:09PM +0100, Sudeep Holla wrote:
>>> This patch adds support for the MHU mailbox peripheral used on Juno by
>>> application processors to communicate with remote SCP handling most of
>>> the CPU/system power management. It also adds the SRAM reserving the
>>> shared memory and SCPI message protocol using that shared memory.
>>>
>>> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
>>> Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
>>> Cc: Jon Medhurst (Tixy) <tixy@linaro.org>
>>> ---
>>>   arch/arm64/boot/dts/arm/juno-base.dtsi | 54 ++++++++++++++++++++++++++++++++++
>>>   1 file changed, 54 insertions(+)
>>>
>>> diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
>>> index e3ee96036eca..c624208edef6 100644
>>> --- a/arch/arm64/boot/dts/arm/juno-base.dtsi
>>> +++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
> [...]
>>> +	scpi {
>>> +		compatible = "arm,scpi";
>>> +		mboxes = <&mailbox 1>;
>>> +		shmem = <&cpu_scp_hpri>;
>>> +
>>> +		clocks {
>>> +			compatible = "arm,scpi-clocks";
>>> +
>>> +			scpi_dvfs: scpi_clocks@0 {
>>> +				compatible = "arm,scpi-dvfs-clocks";
>>> +				#clock-cells = <1>;
>>> +				clock-indices = <0>, <1>, <2>;
>>> +				clock-output-names = "atlclk", "aplclk","gpuclk";
>>> +			};
>>> +			scpi_clk: scpi_clocks@3 {
>>> +				compatible = "arm,scpi-variable-clocks";
>>> +				#clock-cells = <1>;
>>> +				clock-indices = <3>, <4>;
>>> +				clock-output-names = "pxlclk0", "pxlclk1";
>>> +			};
>>> +		};
>>> +	};
>>> +
>>
>> Sorry for noticing this after the ACK, is there any reason why the scpi node is not inside
>> the juno-clocks.dtsi file?
>
> Because SCPI is not just about clocks? Just happens that these first
> patches are but there's thermal sensors and other things as well.
>

I think we cross posted. Anyways I completely agree with you.
However I wanted the clock nodes to be put in juno-clock.dtsi but got
into horrible issue with the way we include headers. It may need some
reworking to get that working.

The idea was:
/* in juno-base.dtsi */
SCPI: scpi {
	compatible = "arm,scpi";
	mboxes = <&mailbox 1>;
	shmem = <&cpu_scp_hpri>;
	...
};
/* in juno-clock.dtsi */
&SCPI {
         clocks {
                 compatible = "arm,scpi-clocks";
                 scpi_dvfs: scpi_clocks@0 {
                         compatible = "arm,scpi-dvfs-clocks";
                         #clock-cells = <1>;
                         clock-indices = <0>, <1>, <2>;
                         clock-output-names = "atlclk","aplclk","gpuclk";
                 };
};

I will look at that when I get some time. There are many DTS files
already using something similar.

Regards,
Sudeep
Liviu Dudau Aug. 3, 2015, 12:47 p.m. UTC | #5
On Mon, Aug 03, 2015 at 12:44:39PM +0100, Sudeep Holla wrote:
> 
> 
> On 03/08/15 12:23, Liviu Dudau wrote:
> > On Fri, Jul 31, 2015 at 06:43:09PM +0100, Sudeep Holla wrote:
> >> This patch adds support for the MHU mailbox peripheral used on Juno by
> >> application processors to communicate with remote SCP handling most of
> >> the CPU/system power management. It also adds the SRAM reserving the
> >> shared memory and SCPI message protocol using that shared memory.
> >>
> >> Signed-off-by: Sudeep Holla <sudeep.holla@arm.com>
> >> Acked-by: Liviu Dudau <Liviu.Dudau@arm.com>
> >> Cc: Jon Medhurst (Tixy) <tixy@linaro.org>
> >> ---
> >>   arch/arm64/boot/dts/arm/juno-base.dtsi | 54 ++++++++++++++++++++++++++++++++++
> >>   1 file changed, 54 insertions(+)
> >>
> >> diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
> >> index e3ee96036eca..c624208edef6 100644
> >> --- a/arch/arm64/boot/dts/arm/juno-base.dtsi
> >> +++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
> >> @@ -17,6 +17,18 @@
> >>   		};
> >>   	};
> >>
> >> +	mailbox: mhu@2b1f0000 {
> >> +		compatible = "arm,mhu", "arm,primecell";
> >> +		reg = <0x0 0x2b1f0000 0x0 0x1000>;
> >> +		interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
> >> +			     <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
> >> +		interrupt-names = "mhu_lpri_rx",
> >> +				  "mhu_hpri_rx";
> >> +		#mbox-cells = <1>;
> >> +		clocks = <&soc_refclk100mhz>;
> >> +		clock-names = "apb_pclk";
> >> +	};
> >> +
> >>   	gic: interrupt-controller@2c010000 {
> >>   		compatible = "arm,gic-400", "arm,cortex-a15-gic";
> >>   		reg = <0x0 0x2c010000 0 0x1000>,
> >> @@ -44,6 +56,48 @@
> >>   			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>;
> >>   	};
> >>
> >> +	sram: sram@2e000000 {
> >> +		compatible = "arm,juno-sram-ns", "mmio-sram";
> >> +		reg = <0x0 0x2e000000 0x0 0x8000>;
> >> +
> >> +		#address-cells = <1>;
> >> +		#size-cells = <1>;
> >> +		ranges = <0 0x0 0x2e000000 0x8000>;
> >> +
> >> +		cpu_scp_lpri: scp-shmem@0 {
> >> +			compatible = "arm,juno-scp-shmem";
> >> +			reg = <0x0 0x200>;
> >> +		};
> >> +
> >> +		cpu_scp_hpri: scp-shmem@200 {
> >> +			compatible = "arm,juno-scp-shmem";
> >> +			reg = <0x200 0x200>;
> >> +		};
> >> +	};
> >> +
> >> +	scpi {
> >> +		compatible = "arm,scpi";
> >> +		mboxes = <&mailbox 1>;
> >> +		shmem = <&cpu_scp_hpri>;
> >> +
> >> +		clocks {
> >> +			compatible = "arm,scpi-clocks";
> >> +
> >> +			scpi_dvfs: scpi_clocks@0 {
> >> +				compatible = "arm,scpi-dvfs-clocks";
> >> +				#clock-cells = <1>;
> >> +				clock-indices = <0>, <1>, <2>;
> >> +				clock-output-names = "atlclk", "aplclk","gpuclk";
> >> +			};
> >> +			scpi_clk: scpi_clocks@3 {
> >> +				compatible = "arm,scpi-variable-clocks";
> >> +				#clock-cells = <1>;
> >> +				clock-indices = <3>, <4>;
> >> +				clock-output-names = "pxlclk0", "pxlclk1";
> >> +			};
> >> +		};
> >> +	};
> >> +
> >
> > Sorry for noticing this after the ACK, is there any reason why the scpi node is not inside
> > the juno-clocks.dtsi file?
> >
> 
> Yes, scpi node will have other nodes like sensors/hwmon. So the whole
> scpi node can't sit in juno-clocks. Ideally the clocks belongs to
> juno-clocks, but I got troubles with the way the DTSI are includes and
> could not keep scpi node in base and just update clocks in
> juno-clocks.dtsi. It needs some rework the way include file are used.
> It's in my todo and I will look at that when I get time.

OK, it makes sense. I haven't had a chance to go through Punit's series yet,
I've missed the fact that thermal is going to be attached to this node as well.

Best regards,
Liviu

> 
> Regards,
> Sudeep
>
diff mbox

Patch

diff --git a/arch/arm64/boot/dts/arm/juno-base.dtsi b/arch/arm64/boot/dts/arm/juno-base.dtsi
index e3ee96036eca..c624208edef6 100644
--- a/arch/arm64/boot/dts/arm/juno-base.dtsi
+++ b/arch/arm64/boot/dts/arm/juno-base.dtsi
@@ -17,6 +17,18 @@ 
 		};
 	};
 
+	mailbox: mhu@2b1f0000 {
+		compatible = "arm,mhu", "arm,primecell";
+		reg = <0x0 0x2b1f0000 0x0 0x1000>;
+		interrupts = <GIC_SPI 36 IRQ_TYPE_LEVEL_HIGH>,
+			     <GIC_SPI 35 IRQ_TYPE_LEVEL_HIGH>;
+		interrupt-names = "mhu_lpri_rx",
+				  "mhu_hpri_rx";
+		#mbox-cells = <1>;
+		clocks = <&soc_refclk100mhz>;
+		clock-names = "apb_pclk";
+	};
+
 	gic: interrupt-controller@2c010000 {
 		compatible = "arm,gic-400", "arm,cortex-a15-gic";
 		reg = <0x0 0x2c010000 0 0x1000>,
@@ -44,6 +56,48 @@ 
 			     <GIC_PPI 10 (GIC_CPU_MASK_SIMPLE(6) | IRQ_TYPE_LEVEL_LOW)>;
 	};
 
+	sram: sram@2e000000 {
+		compatible = "arm,juno-sram-ns", "mmio-sram";
+		reg = <0x0 0x2e000000 0x0 0x8000>;
+
+		#address-cells = <1>;
+		#size-cells = <1>;
+		ranges = <0 0x0 0x2e000000 0x8000>;
+
+		cpu_scp_lpri: scp-shmem@0 {
+			compatible = "arm,juno-scp-shmem";
+			reg = <0x0 0x200>;
+		};
+
+		cpu_scp_hpri: scp-shmem@200 {
+			compatible = "arm,juno-scp-shmem";
+			reg = <0x200 0x200>;
+		};
+	};
+
+	scpi {
+		compatible = "arm,scpi";
+		mboxes = <&mailbox 1>;
+		shmem = <&cpu_scp_hpri>;
+
+		clocks {
+			compatible = "arm,scpi-clocks";
+
+			scpi_dvfs: scpi_clocks@0 {
+				compatible = "arm,scpi-dvfs-clocks";
+				#clock-cells = <1>;
+				clock-indices = <0>, <1>, <2>;
+				clock-output-names = "atlclk", "aplclk","gpuclk";
+			};
+			scpi_clk: scpi_clocks@3 {
+				compatible = "arm,scpi-variable-clocks";
+				#clock-cells = <1>;
+				clock-indices = <3>, <4>;
+				clock-output-names = "pxlclk0", "pxlclk1";
+			};
+		};
+	};
+
 	/include/ "juno-clocks.dtsi"
 
 	dma@7ff00000 {