[PATCH] arm64: dts: juno: Add separate SCMI variants

Robin Murphy robin.murphy at arm.com
Thu Feb 17 11:42:20 PST 2022


On 2022-02-17 19:11, Robin Murphy wrote:
> While Juno's SCP firmware initially spoke the SCPI protocol, binary
> releases since 2018, and the newer open-source codebase, only speak SCMI
> and thus aren't particularly compatibile with the DTs we currently have
> upstream. Add a parallel set of variant DTs for boards with up-to-date
> firmware, replacing the SCPI parts with their new SCMI equivalents.

Argh, apologies, there should really be a Co-Developed-by credit for 
Sudeep here as well. I've had this knocking around locally in one form 
or another for long enough that I'd almost forgotten the firmware, 
mailbox and shmem nodes started out as straight copies from Sudeep's 
development patch back before the MHU doorbell support was upstream.

Robin.

> Signed-off-by: Robin Murphy <robin.murphy at arm.com>
> ---
>   arch/arm64/boot/dts/arm/Makefile         |   2 +-
>   arch/arm64/boot/dts/arm/juno-r1-scmi.dts |  23 +++
>   arch/arm64/boot/dts/arm/juno-r2-scmi.dts |  23 +++
>   arch/arm64/boot/dts/arm/juno-scmi.dts    |   9 +
>   arch/arm64/boot/dts/arm/juno-scmi.dtsi   | 199 +++++++++++++++++++++++
>   5 files changed, 255 insertions(+), 1 deletion(-)
>   create mode 100644 arch/arm64/boot/dts/arm/juno-r1-scmi.dts
>   create mode 100644 arch/arm64/boot/dts/arm/juno-r2-scmi.dts
>   create mode 100644 arch/arm64/boot/dts/arm/juno-scmi.dts
>   create mode 100644 arch/arm64/boot/dts/arm/juno-scmi.dtsi
> 
> diff --git a/arch/arm64/boot/dts/arm/Makefile b/arch/arm64/boot/dts/arm/Makefile
> index 800da2e84f3f..4382b73baef5 100644
> --- a/arch/arm64/boot/dts/arm/Makefile
> +++ b/arch/arm64/boot/dts/arm/Makefile
> @@ -2,7 +2,7 @@
>   dtb-$(CONFIG_ARCH_VEXPRESS) += \
>   	foundation-v8.dtb foundation-v8-psci.dtb \
>   	foundation-v8-gicv3.dtb foundation-v8-gicv3-psci.dtb
> -dtb-$(CONFIG_ARCH_VEXPRESS) += juno.dtb juno-r1.dtb juno-r2.dtb
> +dtb-$(CONFIG_ARCH_VEXPRESS) += juno.dtb juno-r1.dtb juno-r2.dtb juno-scmi.dtb juno-r1-scmi.dtb juno-r2-scmi.dtb
>   dtb-$(CONFIG_ARCH_VEXPRESS) += rtsm_ve-aemv8a.dtb
>   dtb-$(CONFIG_ARCH_VEXPRESS) += vexpress-v2f-1xv7-ca53x2.dtb
>   dtb-$(CONFIG_ARCH_VEXPRESS) += fvp-base-revc.dtb
> diff --git a/arch/arm64/boot/dts/arm/juno-r1-scmi.dts b/arch/arm64/boot/dts/arm/juno-r1-scmi.dts
> new file mode 100644
> index 000000000000..190a0fba4ad6
> --- /dev/null
> +++ b/arch/arm64/boot/dts/arm/juno-r1-scmi.dts
> @@ -0,0 +1,23 @@
> +#include "juno-r1.dts"
> +#include "juno-scmi.dtsi"
> +
> +/ {
> +	funnel at 20130000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	etf at 20140000 {
> +		power-domains = <&scmi_devpd 0>;
> +	};
> +
> +	funnel at 20150000 {
> +		power-domains = <&scmi_devpd 0>;
> +	};
> +};
> +
> +&A57_0 {
> +	clocks = <&scmi_dvfs 0>;
> +};
> +&A57_1 {
> +	clocks = <&scmi_dvfs 0>;
> +};
> diff --git a/arch/arm64/boot/dts/arm/juno-r2-scmi.dts b/arch/arm64/boot/dts/arm/juno-r2-scmi.dts
> new file mode 100644
> index 000000000000..dbf13770084f
> --- /dev/null
> +++ b/arch/arm64/boot/dts/arm/juno-r2-scmi.dts
> @@ -0,0 +1,23 @@
> +#include "juno-r2.dts"
> +#include "juno-scmi.dtsi"
> +
> +/ {
> +	funnel at 20130000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	etf at 20140000 {
> +		power-domains = <&scmi_devpd 0>;
> +	};
> +
> +	funnel at 20150000 {
> +		power-domains = <&scmi_devpd 0>;
> +	};
> +};
> +
> +&A72_0 {
> +	clocks = <&scmi_dvfs 0>;
> +};
> +&A72_1 {
> +	clocks = <&scmi_dvfs 0>;
> +};
> diff --git a/arch/arm64/boot/dts/arm/juno-scmi.dts b/arch/arm64/boot/dts/arm/juno-scmi.dts
> new file mode 100644
> index 000000000000..41588fa46d31
> --- /dev/null
> +++ b/arch/arm64/boot/dts/arm/juno-scmi.dts
> @@ -0,0 +1,9 @@
> +#include "juno.dts"
> +#include "juno-scmi.dtsi"
> +
> +&A57_0 {
> +	clocks = <&scmi_dvfs 0>;
> +};
> +&A57_1 {
> +	clocks = <&scmi_dvfs 0>;
> +};
> diff --git a/arch/arm64/boot/dts/arm/juno-scmi.dtsi b/arch/arm64/boot/dts/arm/juno-scmi.dtsi
> new file mode 100644
> index 000000000000..d72dcff9bf06
> --- /dev/null
> +++ b/arch/arm64/boot/dts/arm/juno-scmi.dtsi
> @@ -0,0 +1,199 @@
> +/ {
> +	etf at 20010000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	tpiu at 20030000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	funnel at 20040000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	etr at 20070000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	stm at 20100000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	replicator at 20120000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	funnel at 220c0000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	funnel at 230c0000 {
> +		power-domains = <&scmi_devpd 8>;
> +	};
> +
> +	hdlcd at 7ff50000 {
> +		clocks = <&scmi_clk 3>;
> +	};
> +
> +	hdlcd at 7ff60000 {
> +		clocks = <&scmi_clk 3>;
> +	};
> +
> +	/delete-node/ scpi;
> +
> +	firmware {
> +		scmi {
> +			compatible = "arm,scmi";
> +			mbox-names = "tx", "rx";
> +			mboxes = <&mailbox 0 0 &mailbox 0 1>;
> +			shmem = <&cpu_scp_lpri0 &cpu_scp_lpri1>;
> +			#address-cells = <1>;
> +			#size-cells = <0>;
> +
> +			scmi_devpd: protocol at 11 {
> +				reg = <0x11>;
> +				#power-domain-cells = <1>;
> +			};
> +
> +			scmi_dvfs: protocol at 13 {
> +				reg = <0x13>;
> +				#clock-cells = <1>;
> +				mbox-names = "tx", "rx";
> +				mboxes = <&mailbox 1 0 &mailbox 1 1>;
> +				shmem = <&cpu_scp_hpri0 &cpu_scp_hpri1>;
> +			};
> +
> +			scmi_clk: protocol at 14 {
> +				reg = <0x14>;
> +				#clock-cells = <1>;
> +			};
> +
> +			scmi_sensors0: protocol at 15 {
> +				reg = <0x15>;
> +				#thermal-sensor-cells = <1>;
> +			};
> +		};
> +	};
> +
> +	thermal-zones {
> +		pmic {
> +			thermal-sensors = <&scmi_sensors0 0>;
> +		};
> +
> +		soc {
> +			thermal-sensors = <&scmi_sensors0 3>;
> +		};
> +
> +		big-cluster {
> +			thermal-sensors = <&scmi_sensors0 21>;
> +		};
> +
> +		little-cluster {
> +			thermal-sensors = <&scmi_sensors0 22>;
> +		};
> +
> +		gpu0 {
> +			thermal-sensors = <&scmi_sensors0 23>;
> +		};
> +
> +		gpu1 {
> +			thermal-sensors = <&scmi_sensors0 24>;
> +		};
> +	};
> +
> +};
> +
> +&A53_0 {
> +	clocks = <&scmi_dvfs 1>;
> +};
> +&A53_1 {
> +	clocks = <&scmi_dvfs 1>;
> +};
> +&A53_2 {
> +	clocks = <&scmi_dvfs 1>;
> +};
> +&A53_3 {
> +	clocks = <&scmi_dvfs 1>;
> +};
> +
> +&cpu_debug0 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&cpu_debug1 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&cpu_debug2 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&cpu_debug3 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&cpu_debug4 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&cpu_debug5 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +
> +&etm0 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&etm1 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&etm2 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&etm3 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&etm4 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +&etm5 {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +
> +&gpu {
> +	clocks = <&scmi_dvfs 2>;
> +	power-domains = <&scmi_devpd 9>;
> +};
> +
> +&mailbox {
> +	compatible = "arm,mhu-doorbell", "arm,primecell";
> +	#mbox-cells = <2>;
> +	mbox-name = "ARM-MHU";
> +};
> +
> +&smmu_etr {
> +	power-domains = <&scmi_devpd 8>;
> +};
> +
> +&smmu_gpu {
> +	power-domains = <&scmi_devpd 9>;
> +};
> +
> +&sram {
> +	/delete-node/ scp-sram at 0;
> +	/delete-node/ scp-sram at 200;
> +
> +	cpu_scp_lpri0: scp-sram at 0 {
> +		compatible = "arm,scmi-shmem";
> +		reg = <0x0 0x80>;
> +	};
> +
> +	cpu_scp_lpri1: scp-sram at 80 {
> +		compatible = "arm,scmi-shmem";
> +		reg = <0x80 0x80>;
> +	};
> +
> +	cpu_scp_hpri0: scp-sram at 100 {
> +		compatible = "arm,scmi-shmem";
> +		reg = <0x100 0x80>;
> +	};
> +
> +	cpu_scp_hpri1: scp-sram at 180 {
> +		compatible = "arm,scmi-shmem";
> +		reg = <0x180 0x80>;
> +	};
> +};



More information about the linux-arm-kernel mailing list