Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 0beb5878 authored by Linus Torvalds's avatar Linus Torvalds
Browse files
Pull ARM SoC device-tree updates, take 2, from Olof Johansson:
 "This branch contains device-tree updates for the SPEAr platform.  They
  had dependencies on earlier branches from this merge window, which is
  why they were broken out in a separate branch."

* tag 'dt2' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc:
  ARM: SPEAr3xx: Shirq: Move shirq controller out of plat/
  ARM: SPEAr320: DT: Add SPEAr 320 HMI board support
  ARM: SPEAr3xx: DT: add shirq node for interrupt multiplexor
  ARM: SPEAr3xx: shirq: simplify and move the shared irq multiplexor to DT
  ARM: SPEAr1310: Fix AUXDATA for compact flash controller
  ARM: SPEAr13xx: Remove fields not required for ssp controller
  ARM: SPEAr1310: Move 1310 specific misc register into machine specific files
  ARM: SPEAr: DT: Update device nodes
  ARM: SPEAr: DT: add uart state to fix warning
  ARM: SPEAr: DT: Modify DT bindings for STMMAC
  ARM: SPEAr: DT: Fix existing DT support
  ARM: SPEAr: DT: Update partition info for MTD devices
  ARM: SPEAr: DT: Update pinctrl list
  ARM: SPEAr13xx: DT: Add spics gpio controller nodes
parents 6a57d104 eabc5fa5
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
* SPEAr Shared IRQ layer (shirq)

SPEAr3xx architecture includes shared/multiplexed irqs for certain set
of devices. The multiplexor provides a single interrupt to parent
interrupt controller (VIC) on behalf of a group of devices.

There can be multiple groups available on SPEAr3xx variants but not
exceeding 4. The number of devices in a group can differ, further they
may share same set of status/mask registers spanning across different
bit masks. Also in some cases the group may not have enable or other
registers. This makes software little complex.

A single node in the device tree is used to describe the shared
interrupt multiplexor (one node for all groups). A group in the
interrupt controller shares config/control registers with other groups.
For example, a 32-bit interrupt enable/disable config register can
accommodate upto 4 interrupt groups.

Required properties:
  - compatible: should be, either of
     - "st,spear300-shirq"
     - "st,spear310-shirq"
     - "st,spear320-shirq"
  - interrupt-controller: Identifies the node as an interrupt controller.
  - #interrupt-cells: should be <1> which basically contains the offset
    (starting from 0) of interrupts for all the groups.
  - reg: Base address and size of shirq registers.
  - interrupts: The list of interrupts generated by the groups which are
    then connected to a parent interrupt controller. Each group is
    associated with one of the interrupts, hence number of interrupts (to
    parent) is equal to number of groups. The format of the interrupt
    specifier depends in the interrupt parent controller.

  Optional properties:
  - interrupt-parent: pHandle of the parent interrupt controller, if not
    inherited from the parent node.

Example:

The following is an example from the SPEAr320 SoC dtsi file.

shirq: interrupt-controller@0xb3000000 {
	compatible = "st,spear320-shirq";
	reg = <0xb3000000 0x1000>;
	interrupts = <28 29 30 1>;
	#interrupt-cells = <1>;
	interrupt-controller;
};
+2 −1
Original line number Diff line number Diff line
@@ -126,7 +126,8 @@ dtb-$(CONFIG_ARCH_SPEAR13XX) += spear1310-evb.dtb \
	spear1340-evb.dtb
dtb-$(CONFIG_ARCH_SPEAR3XX)+= spear300-evb.dtb \
	spear310-evb.dtb \
	spear320-evb.dtb
	spear320-evb.dtb \
	spear320-hmi.dtb
dtb-$(CONFIG_ARCH_SPEAR6XX)+= spear600-evb.dtb
dtb-$(CONFIG_ARCH_SUNXI) += sun4i-cubieboard.dtb \
	sun5i-olinuxino.dtb
+146 −19
Original line number Diff line number Diff line
@@ -30,10 +30,14 @@
			pinctrl-0 = <&state_default>;

			state_default: pinmux {
				i2c0-pmx {
				i2c0 {
					st,pins = "i2c0_grp";
					st,function = "i2c0";
				};
				i2s0 {
					st,pins = "i2s0_grp";
					st,function = "i2s0";
				};
				i2s1 {
					st,pins = "i2s1_grp";
					st,function = "i2s1";
@@ -42,6 +46,10 @@
					st,pins = "arm_gpio_grp";
					st,function = "arm_gpio";
				};
				clcd {
					st,pins = "clcd_grp" , "clcd_high_res";
					st,function = "clcd";
				};
				eth {
					st,pins = "gmii_grp";
					st,function = "gmii";
@@ -74,11 +82,6 @@
					st,pins = "i2c_1_2_grp";
					st,function = "i2c_1_2";
				};
				pci {
					st,pins = "pcie0_grp","pcie1_grp",
						"pcie2_grp";
					st,function = "pci";
				};
				smii {
					st,pins = "smii_0_1_2_grp";
					st,function = "smii_0_1_2";
@@ -88,6 +91,14 @@
						"nand_16bit_grp";
					st,function = "nand";
				};
				sata {
					st,pins = "sata0_grp";
					st,function = "sata";
				};
				pcie {
					st,pins = "pcie1_grp", "pcie2_grp";
					st,function = "pci_express";
				};
			};
		};

@@ -109,9 +120,49 @@

		fsmc: flash@b0000000 {
			status = "okay";

			partition@0 {
				label = "xloader";
				reg = <0x0 0x80000>;
			};
			partition@80000 {
				label = "u-boot";
				reg = <0x80000 0x140000>;
			};
			partition@1C0000 {
				label = "environment";
				reg = <0x1C0000 0x40000>;
			};
			partition@200000 {
				label = "dtb";
				reg = <0x200000 0x40000>;
			};
			partition@240000 {
				label = "linux";
				reg = <0x240000 0xC00000>;
			};
			partition@E40000 {
				label = "rootfs";
				reg = <0xE40000 0x0>;
			};
		};

		gpio_keys {
			compatible = "gpio-keys";
			#address-cells = <1>;
			#size-cells = <0>;

			button@1 {
				label = "wakeup";
				linux,code = <0x100>;
				gpios = <&gpio0 7 0x4>;
				debounce-interval = <20>;
				gpio-key,wakeup = <1>;
			};
		};

		gmac0: eth@e2000000 {
			phy-mode = "gmii";
			status = "okay";
		};

@@ -135,21 +186,25 @@
				};
				partition@10000 {
					label = "u-boot";
					reg = <0x10000 0x40000>;
					reg = <0x10000 0x50000>;
				};
				partition@60000 {
					label = "environment";
					reg = <0x60000 0x10000>;
				};
				partition@50000 {
				partition@70000 {
					label = "dtb";
					reg = <0x70000 0x10000>;
				};
				partition@80000 {
					label = "linux";
					reg = <0x50000 0x2c0000>;
					reg = <0x80000 0x310000>;
				};
				partition@310000 {
				partition@390000 {
					label = "rootfs";
					reg = <0x310000 0x4f0000>;
				};
					reg = <0x390000 0x0>;
				};
			};

		spi0: spi@e0100000 {
			status = "okay";
		};

		ehci@e4800000 {
@@ -189,10 +244,6 @@
			       status = "okay";
			};

			i2c1: i2c@5cd00000 {
			       status = "okay";
			};

			kbd@e0300000 {
				linux,keymap = < 0x00000001
						 0x00010002
@@ -277,6 +328,7 @@
						 0x08080052 >;
			       autorepeat;
			       st,mode = <0>;
			       suspended_rate = <2000000>;
			       status = "okay";
			};

@@ -286,6 +338,81 @@

			serial@e0000000 {
			       status = "okay";
				pinctrl-names = "default";
				pinctrl-0 = <>;
			};

			spi0: spi@e0100000 {
				status = "okay";
				num-cs = <3>;
				cs-gpios = <&gpio1 7 0>, <&spics 0>, <&spics 1>;

				stmpe610@0 {
					compatible = "st,stmpe610";
					reg = <0>;
					#address-cells = <1>;
					#size-cells = <0>;
					spi-max-frequency = <1000000>;
					spi-cpha;
					pl022,hierarchy = <0>;
					pl022,interface = <0>;
					pl022,slave-tx-disable;
					pl022,com-mode = <0>;
					pl022,rx-level-trig = <0>;
					pl022,tx-level-trig = <0>;
					pl022,ctrl-len = <0x7>;
					pl022,wait-state = <0>;
					pl022,duplex = <0>;
					interrupts = <6 0x4>;
					interrupt-parent = <&gpio1>;
					irq-trigger = <0x2>;

					stmpe_touchscreen {
						compatible = "st,stmpe-ts";
						ts,sample-time = <4>;
						ts,mod-12b = <1>;
						ts,ref-sel = <0>;
						ts,adc-freq = <1>;
						ts,ave-ctrl = <1>;
						ts,touch-det-delay = <2>;
						ts,settling = <2>;
						ts,fraction-z = <7>;
						ts,i-drive = <1>;
					};
				};

				m25p80@1 {
					compatible = "st,m25p80";
					reg = <1>;
					spi-max-frequency = <12000000>;
					spi-cpol;
					spi-cpha;
					pl022,hierarchy = <0>;
					pl022,interface = <0>;
					pl022,slave-tx-disable;
					pl022,com-mode = <0x2>;
					pl022,rx-level-trig = <0>;
					pl022,tx-level-trig = <0>;
					pl022,ctrl-len = <0x11>;
					pl022,wait-state = <0>;
					pl022,duplex = <0>;
				};

				spidev@2 {
					compatible = "spidev";
					reg = <2>;
					spi-max-frequency = <25000000>;
					spi-cpha;
					pl022,hierarchy = <0>;
					pl022,interface = <0>;
					pl022,slave-tx-disable;
					pl022,com-mode = <0x2>;
					pl022,rx-level-trig = <0>;
					pl022,tx-level-trig = <0>;
					pl022,ctrl-len = <0x11>;
					pl022,wait-state = <0>;
					pl022,duplex = <0>;
				};
			};

			wdt@ec800620 {
+25 −7
Original line number Diff line number Diff line
@@ -17,6 +17,18 @@
	compatible = "st,spear1310";

	ahb {
		spics: spics@e0700000{
			compatible = "st,spear-spics-gpio";
			reg = <0xe0700000 0x1000>;
			st-spics,peripcfg-reg = <0x3b0>;
			st-spics,sw-enable-bit = <12>;
			st-spics,cs-value-bit = <11>;
			st-spics,cs-enable-mask = <3>;
			st-spics,cs-enable-shift = <8>;
			gpio-controller;
			#gpio-cells = <2>;
		};

		ahci@b1000000 {
			compatible = "snps,spear-ahci";
			reg = <0xb1000000 0x10000>;
@@ -43,6 +55,7 @@
			reg = <0x5c400000 0x8000>;
			interrupts = <0 95 0x4>;
			interrupt-names = "macirq";
			phy-mode = "mii";
			status = "disabled";
		};

@@ -51,6 +64,7 @@
			reg = <0x5c500000 0x8000>;
			interrupts = <0 96 0x4>;
			interrupt-names = "macirq";
			phy-mode = "mii";
			status = "disabled";
		};

@@ -59,6 +73,7 @@
			reg = <0x5c600000 0x8000>;
			interrupts = <0 97 0x4>;
			interrupt-names = "macirq";
			phy-mode = "rmii";
			status = "disabled";
		};

@@ -67,6 +82,7 @@
			reg = <0x5c700000 0x8000>;
			interrupts = <0 98 0x4>;
			interrupt-names = "macirq";
			phy-mode = "rgmii";
			status = "disabled";
		};

@@ -76,13 +92,6 @@
			#gpio-range-cells = <2>;
		};

		spi1: spi@5d400000 {
			compatible = "arm,pl022", "arm,primecell";
			reg = <0x5d400000 0x1000>;
			interrupts = <0 99 0x4>;
			status = "disabled";
		};

		apb {
			i2c1: i2c@5cd00000 {
				#address-cells = <1>;
@@ -147,6 +156,15 @@
				status = "disabled";
			};

			spi1: spi@5d400000 {
				compatible = "arm,pl022", "arm,primecell";
				reg = <0x5d400000 0x1000>;
				interrupts = <0 99 0x4>;
				#address-cells = <1>;
				#size-cells = <0>;
				status = "disabled";
			};

			serial@5c800000 {
				compatible = "arm,pl011", "arm,primecell";
				reg = <0x5c800000 0x1000>;
+231 −22
Original line number Diff line number Diff line
@@ -38,20 +38,15 @@
					st,pins = "fsmc_8bit_grp";
					st,function = "fsmc";
				};
				kbd {
					st,pins = "keyboard_row_col_grp",
						"keyboard_col5_grp";
					st,function = "keyboard";
				};
				uart0 {
					st,pins = "uart0_grp", "uart0_enh_grp";
					st,pins = "uart0_grp";
					st,function = "uart0";
				};
				i2c0-pmx {
				i2c0 {
					st,pins = "i2c0_grp";
					st,function = "i2c0";
				};
				i2c1-pmx {
				i2c1 {
					st,pins = "i2c1_grp";
					st,function = "i2c1";
				};
@@ -64,14 +59,9 @@
					st,function = "spdif_out";
				};
				ssp0 {
					st,pins = "ssp0_grp", "ssp0_cs1_grp",
						"ssp0_cs3_grp";
					st,pins = "ssp0_grp", "ssp0_cs1_grp", "ssp0_cs2_grp", "ssp0_cs3_grp";
					st,function = "ssp0";
				};
				pwm {
					st,pins = "pwm2_grp", "pwm3_grp";
					st,function = "pwm";
				};
				smi-pmx {
					st,pins = "smi_grp";
					st,function = "smi";
@@ -84,6 +74,18 @@
					st,pins = "gmii_grp", "rgmii_grp";
					st,function = "gmac";
				};
				cam0 {
					st,pins = "cam0_grp";
					st,function = "cam0";
				};
				cam1 {
					st,pins = "cam1_grp";
					st,function = "cam1";
				};
				cam2 {
					st,pins = "cam2_grp";
					st,function = "cam2";
				};
				cam3 {
					st,pins = "cam3_grp";
					st,function = "cam3";
@@ -108,9 +110,18 @@
					st,pins = "sata_grp";
					st,function = "sata";
				};
				pcie {
					st,pins = "pcie_grp";
					st,function = "pcie";
				};

			};
		};

		ahci@b1000000 {
			status = "okay";
		};

		dma@ea800000 {
			status = "okay";
		};
@@ -121,9 +132,35 @@

		fsmc: flash@b0000000 {
			status = "okay";

			partition@0 {
				label = "xloader";
				reg = <0x0 0x200000>;
			};
			partition@200000 {
				label = "u-boot";
				reg = <0x200000 0x200000>;
			};
			partition@400000 {
				label = "environment";
				reg = <0x400000 0x100000>;
			};
			partition@500000 {
				label = "dtb";
				reg = <0x500000 0x100000>;
			};
			partition@600000 {
				label = "linux";
				reg = <0x600000 0xC00000>;
			};
			partition@1200000 {
				label = "rootfs";
				reg = <0x1200000 0x0>;
			};
		};

		gmac0: eth@e2000000 {
			phy-mode = "rgmii";
			status = "okay";
		};

@@ -147,31 +184,62 @@
				};
				partition@10000 {
					label = "u-boot";
					reg = <0x10000 0x40000>;
					reg = <0x10000 0x50000>;
				};
				partition@50000 {
				partition@60000 {
					label = "environment";
					reg = <0x60000 0x10000>;
				};
				partition@70000 {
					label = "dtb";
					reg = <0x70000 0x10000>;
				};
				partition@80000 {
					label = "linux";
					reg = <0x50000 0x2c0000>;
					reg = <0x80000 0x310000>;
				};
				partition@310000 {
				partition@390000 {
					label = "rootfs";
					reg = <0x310000 0x4f0000>;
					reg = <0x390000 0x0>;
				};
			};
		};

		spi0: spi@e0100000 {
		ehci@e4800000 {
			status = "okay";
		};

		ehci@e4800000 {
			status = "okay";
		gpio_keys {
			compatible = "gpio-keys";
			#address-cells = <1>;
			#size-cells = <0>;

			button@1 {
				label = "wakeup";
				linux,code = <0x100>;
				gpios = <&gpio1 1 0x4>;
				debounce-interval = <20>;
				gpio-key,wakeup = <1>;
			};
		};

		ehci@e5800000 {
			status = "okay";
		};

		i2s0: i2s-play@b2400000 {
			status = "okay";
		};

		i2s1: i2s-rec@b2000000 {
			status = "okay";
		};

		incodec: dir-hifi {
			compatible = "dummy,dir-hifi";
			status = "okay";
		};

		ohci@e4000000 {
			status = "okay";
		};
@@ -180,11 +248,43 @@
			status = "okay";
		};

		outcodec: dit-hifi {
			compatible = "dummy,dit-hifi";
			status = "okay";
		};

		sound {
			compatible = "spear,spear-evb";
			audio-controllers = <&spdif0 &spdif1 &i2s0 &i2s1>;
			audio-codecs = <&incodec &outcodec &sta529 &sta529>;
			codec_dai_name = "dir-hifi", "dit-hifi", "sta529-audio", "sta529-audio";
			stream_name = "spdif-cap", "spdif-play", "i2s-play", "i2s-cap";
			dai_name = "spdifin-pcm", "spdifout-pcm", "i2s0-pcm", "i2s1-pcm";
			nr_controllers = <4>;
		        status = "okay";
		};

		spdif0: spdif-in@d0100000 {
			status = "okay";
		};

		spdif1: spdif-out@d0000000 {
			status = "okay";
		};

		apb {
			adc@e0080000 {
				status = "okay";
			};

			i2s-play@b2400000 {
				status = "okay";
			};

			i2s-rec@b2000000 {
				status = "okay";
			};

			gpio0: gpio@e0600000 {
			       status = "okay";
			};
@@ -199,10 +299,36 @@

			i2c0: i2c@e0280000 {
			       status = "okay";

				sta529: sta529@1a {
					compatible = "st,sta529";
					reg = <0x1a>;
				};
			};

			i2c1: i2c@b4000000 {
			       status = "okay";

				eeprom0@56 {
					compatible = "st,eeprom";
					reg = <0x56>;
				};

				stmpe801@41 {
					compatible = "st,stmpe801";
					#address-cells = <1>;
					#size-cells = <0>;
					reg = <0x41>;
					interrupts = <4 0x4>;
					interrupt-parent = <&gpio0>;
					irq-trigger = <0x2>;

					stmpegpio: stmpe_gpio {
						compatible = "st,stmpe-gpio";
						gpio-controller;
						#gpio-cells = <2>;
					};
				};
			};

			kbd@e0300000 {
@@ -289,6 +415,7 @@
						 0x08080052 >;
			       autorepeat;
			       st,mode = <0>;
			       suspended_rate = <2000000>;
			       status = "okay";
			};

@@ -298,10 +425,92 @@

			serial@e0000000 {
			       status = "okay";
				pinctrl-names = "default";
				pinctrl-0 = <>;
			};

			serial@b4100000 {
			       status = "okay";
				pinctrl-names = "default";
				pinctrl-0 = <>;
			};

			spi0: spi@e0100000 {
				status = "okay";
				num-cs = <3>;
				cs-gpios = <&gpiopinctrl 80 0>, <&gpiopinctrl 24 0>,
					   <&gpiopinctrl 85 0>;

				m25p80@0 {
					compatible = "m25p80";
					reg = <0>;
					spi-max-frequency = <12000000>;
					spi-cpol;
					spi-cpha;
					pl022,hierarchy = <0>;
					pl022,interface = <0>;
					pl022,slave-tx-disable;
					pl022,com-mode = <0x2>;
					pl022,rx-level-trig = <0>;
					pl022,tx-level-trig = <0>;
					pl022,ctrl-len = <0x11>;
					pl022,wait-state = <0>;
					pl022,duplex = <0>;
				};

				stmpe610@1 {
					compatible = "st,stmpe610";
					spi-max-frequency = <1000000>;
					spi-cpha;
					reg = <1>;
					pl022,hierarchy = <0>;
					pl022,interface = <0>;
					pl022,slave-tx-disable;
					pl022,com-mode = <0>;
					pl022,rx-level-trig = <0>;
					pl022,tx-level-trig = <0>;
					pl022,ctrl-len = <0x7>;
					pl022,wait-state = <0>;
					pl022,duplex = <0>;
					interrupts = <100 0>;
					interrupt-parent = <&gpiopinctrl>;
					irq-trigger = <0x2>;
					#address-cells = <1>;
					#size-cells = <0>;

					stmpe_touchscreen {
						compatible = "st,stmpe-ts";
						ts,sample-time = <4>;
						ts,mod-12b = <1>;
						ts,ref-sel = <0>;
						ts,adc-freq = <1>;
						ts,ave-ctrl = <1>;
						ts,touch-det-delay = <2>;
						ts,settling = <2>;
						ts,fraction-z = <7>;
						ts,i-drive = <1>;
					};
				};

				spidev@2 {
					compatible = "spidev";
					reg = <2>;
					spi-max-frequency = <25000000>;
					spi-cpha;
					pl022,hierarchy = <0>;
					pl022,interface = <0>;
					pl022,slave-tx-disable;
					pl022,com-mode = <0x2>;
					pl022,rx-level-trig = <0>;
					pl022,tx-level-trig = <0>;
					pl022,ctrl-len = <0x11>;
					pl022,wait-state = <0>;
					pl022,duplex = <0>;
				};
			};

			timer@ec800600 {
				status = "okay";
			};

			wdt@ec800620 {
Loading