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

Commit d4ef467a authored by Arnd Bergmann's avatar Arnd Bergmann
Browse files

Merge branch 'ux500/dt' into next/dt2



* ux500/dt:
  ARM: ux500: Provide local timer support for Device Tree
  ARM: ux500: Enable PL022 SSP Controller in Device Tree
  ARM: ux500: Enable PL310 Level 2 Cache Controller in Device Tree
  ARM: ux500: Enable PL011 AMBA UART Controller for Device Tree
  ARM: ux500: Enable Cortex-A9 GIC (Generic Interrupt Controller) in Device Tree
  ARM: ux500: db8500: list most devices in the snowball device tree
  ARM: ux500: split dts file for snowball into generic part
  ARM: ux500: combine the board init functions for DT boot
  ARM: ux500: Initial Device Tree support for Snowball
  ARM: ux500: CONFIG: Enable Device Tree support for future endeavours
  ARM: ux500: fix compilation after local timer rework

(adds dependency on localtimer branch, irqdomain branch and ux500/soc
branch)

Conflicts:
	arch/arm/mach-ux500/devices-common.c

This adds patches from Lee Jones, Niklas Hernaeus and myself to provide
initial device tree support on the ux500 platform. The pull request from
Lee contained some other changes, so I rebased the patches on top of
the branches that are actually dependencies for this.

Signed-off-by: default avatarArnd Bergmann <arnd@arndb.de>
parents 4acf1823 71de5c46
Loading
Loading
Loading
Loading
+58 −0
Original line number Diff line number Diff line
What:		/sys/devices/socX
Date:		January 2012
contact:	Lee Jones <lee.jones@linaro.org>
Description:
		The /sys/devices/ directory contains a sub-directory for each
		System-on-Chip (SoC) device on a running platform. Information
		regarding each SoC can be obtained by reading sysfs files. This
		functionality is only available if implemented by the platform.

		The directory created for each SoC will also house information
		about devices which are commonly contained in /sys/devices/platform.
		It has been agreed that if an SoC device exists, its supported
		devices would be better suited to appear as children of that SoC.

What:		/sys/devices/socX/machine
Date:		January 2012
contact:	Lee Jones <lee.jones@linaro.org>
Description:
		Read-only attribute common to all SoCs. Contains the SoC machine
		name (e.g. Ux500).

What:		/sys/devices/socX/family
Date:		January 2012
contact:	Lee Jones <lee.jones@linaro.org>
Description:
		Read-only attribute common to all SoCs. Contains SoC family name
		(e.g. DB8500).

What:		/sys/devices/socX/soc_id
Date:		January 2012
contact:	Lee Jones <lee.jones@linaro.org>
Description:
		Read-only attribute supported by most SoCs. In the case of
		ST-Ericsson's chips this contains the SoC serial number.

What:		/sys/devices/socX/revision
Date:		January 2012
contact:	Lee Jones <lee.jones@linaro.org>
Description:
		Read-only attribute supported by most SoCs. Contains the SoC's
		manufacturing revision number.

What:		/sys/devices/socX/process
Date:		January 2012
contact:	Lee Jones <lee.jones@linaro.org>
Description:
		Read-only attribute supported ST-Ericsson's silicon. Contains the
		the process by which the silicon chip was manufactured.

What:		/sys/bus/soc
Date:		January 2012
contact:	Lee Jones <lee.jones@linaro.org>
Description:
		The /sys/bus/soc/ directory contains the usual sub-folders
		expected under most buses. /sys/bus/soc/devices is of particular
		interest, as it contains a symlink for each SoC device found on
		the system. Each symlink points back into the aforementioned
		/sys/devices/socX devices.
+48 −0
Original line number Diff line number Diff line
* ARM Timer Watchdog

ARM 11MP, Cortex-A5 and Cortex-A9 are often associated with a per-core
Timer-Watchdog (aka TWD), which provides both a per-cpu local timer
and watchdog.

The TWD is usually attached to a GIC to deliver its two per-processor
interrupts.

** Timer node required properties:

- compatible : Should be one of:
	"arm,cortex-a9-twd-timer"
	"arm,cortex-a5-twd-timer"
	"arm,arm11mp-twd-timer"

- interrupts : One interrupt to each core

- reg : Specify the base address and the size of the TWD timer
	register window.

Example:

	twd-timer@2c000600 {
		compatible = "arm,arm11mp-twd-timer"";
		reg = <0x2c000600 0x20>;
		interrupts = <1 13 0xf01>;
	};

** Watchdog node properties:

- compatible : Should be one of:
	"arm,cortex-a9-twd-wdt"
	"arm,cortex-a5-twd-wdt"
	"arm,arm11mp-twd-wdt"

- interrupts : One interrupt to each core

- reg : Specify the base address and the size of the TWD watchdog
	register window.

Example:

	twd-watchdog@2c000620 {
		compatible = "arm,arm11mp-twd-wdt";
		reg = <0x2c000620 0x20>;
		interrupts = <1 14 0xf01>;
	};
+12 −18
Original line number Diff line number Diff line
@@ -12,7 +12,7 @@ dynamically enabled per-callsite.
Dynamic debug has even more useful features:

 * Simple query language allows turning on and off debugging statements by
   matching any combination of:
   matching any combination of 0 or 1 of:

   - source filename
   - function name
@@ -79,31 +79,24 @@ Command Language Reference
==========================

At the lexical level, a command comprises a sequence of words separated
by whitespace characters.  Note that newlines are treated as word
separators and do *not* end a command or allow multiple commands to
be done together.  So these are all equivalent:
by spaces or tabs.  So these are all equivalent:

nullarbor:~ # echo -c 'file svcsock.c line 1603 +p' >
				<debugfs>/dynamic_debug/control
nullarbor:~ # echo -c '  file   svcsock.c     line  1603 +p  ' >
				<debugfs>/dynamic_debug/control
nullarbor:~ # echo -c 'file svcsock.c\nline 1603 +p' >
				<debugfs>/dynamic_debug/control
nullarbor:~ # echo -n 'file svcsock.c line 1603 +p' >
				<debugfs>/dynamic_debug/control

Commands are bounded by a write() system call.  If you want to do
multiple commands you need to do a separate "echo" for each, like:
Command submissions are bounded by a write() system call.
Multiple commands can be written together, separated by ';' or '\n'.

nullarbor:~ # echo 'file svcsock.c line 1603 +p' > /proc/dprintk ;\
> echo 'file svcsock.c line 1563 +p' > /proc/dprintk
  ~# echo "func pnpacpi_get_resources +p; func pnp_assign_mem +p" \
     > <debugfs>/dynamic_debug/control

or even like:
If your query set is big, you can batch them too:

nullarbor:~ # (
> echo 'file svcsock.c line 1603 +p' ;\
> echo 'file svcsock.c line 1563 +p' ;\
> ) > /proc/dprintk
  ~# cat query-batch-file > <debugfs>/dynamic_debug/control

At the syntactical level, a command comprises a sequence of match
specifications, followed by a flags change specification.
@@ -144,11 +137,12 @@ func
    func svc_tcp_accept

file
    The given string is compared against either the full
    pathname or the basename of the source file of each
    callsite.  Examples:
    The given string is compared against either the full pathname, the
    src-root relative pathname, or the basename of the source file of
    each callsite.  Examples:

    file svcsock.c
    file kernel/freezer.c
    file /usr/src/packages/BUILD/sgi-enhancednfs-1.4/default/net/sunrpc/svcsock.c

module
+4 −1
Original line number Diff line number Diff line
@@ -15,6 +15,9 @@ Debugfs is typically mounted with a command like:
    mount -t debugfs none /sys/kernel/debug

(Or an equivalent /etc/fstab line).
The debugfs root directory is accessible by anyone by default. To
restrict access to the tree the "uid", "gid" and "mode" mount
options can be used.

Note that the debugfs API is exported GPL-only to modules.

+275 −0
Original line number Diff line number Diff line
/*
 * Copyright 2012 Linaro Ltd
 *
 * The code contained herein is licensed under the GNU General Public
 * License. You may obtain a copy of the GNU General Public License
 * Version 2 or later at the following locations:
 *
 * http://www.opensource.org/licenses/gpl-license.html
 * http://www.gnu.org/copyleft/gpl.html
 */

/include/ "skeleton.dtsi"

/ {
	soc-u9500 {
		#address-cells = <1>;
		#size-cells = <1>;
		compatible = "stericsson,db8500";
		interrupt-parent = <&intc>;
		ranges;

		intc: interrupt-controller@a0411000 {
			compatible = "arm,cortex-a9-gic";
			#interrupt-cells = <3>;
			#address-cells = <1>;
			interrupt-controller;
			interrupt-parent;
			reg = <0xa0411000 0x1000>,
			      <0xa0410100 0x100>;
		};

		L2: l2-cache {
			compatible = "arm,pl310-cache";
			reg = <0xa0412000 0x1000>;
			interrupts = <0 13 4>;
			cache-unified;
			cache-level = <2>;
		};

		pmu {
			compatible = "arm,cortex-a9-pmu";
			interrupts = <0 7 0x4>;
		};

		timer@a0410600 {
			compatible = "arm,cortex-a9-twd-timer";
			reg = <0xa0410600 0x20>;
			interrupts = <1 13 0x304>;
		};

		rtc@80154000 {
			compatible = "stericsson,db8500-rtc";
			reg = <0x80154000 0x1000>;
			interrupts = <0 18 0x4>;
		};

		gpio0: gpio@8012e000 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8012e000 0x80>;
			interrupts = <0 119 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio1: gpio@8012e080 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8012e080 0x80>;
			interrupts = <0 120 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio2: gpio@8000e000 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8000e000 0x80>;
			interrupts = <0 121 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio3: gpio@8000e080 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8000e080 0x80>;
			interrupts = <0 122 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio4: gpio@8000e100 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8000e100 0x80>;
			interrupts = <0 123 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio5: gpio@8000e180 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8000e180 0x80>;
			interrupts = <0 124 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio6: gpio@8011e000 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8011e000 0x80>;
			interrupts = <0 125 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio7: gpio@8011e080 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0x8011e080 0x80>;
			interrupts = <0 126 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		gpio8: gpio@a03fe000 {
			compatible = "stericsson,db8500-gpio",
				"stmicroelectronics,nomadik-gpio";
			reg =  <0xa03fe000 0x80>;
			interrupts = <0 127 0x4>;
			supports-sleepmode;
			gpio-controller;
		};

		usb@a03e0000 {
			compatible = "stericsson,db8500-musb",
				"mentor,musb";
			reg = <0xa03e0000 0x10000>;
			interrupts = <0 23 0x4>;
		};

		dma-controller@801C0000 {
			compatible = "stericsson,db8500-dma40",
					"stericsson,dma40";
			reg = <0x801C0000 0x1000 0x40010000 0x800>;
			interrupts = <0 25 0x4>;
		};

		prcmu@80157000 {
			compatible = "stericsson,db8500-prcmu";
			reg = <0x80157000 0x1000>;
			interrupts = <46 47>;
			#address-cells = <1>;
			#size-cells = <0>;

			ab8500@5 {
				compatible = "stericsson,ab8500";
				reg = <5>; /* mailbox 5 is i2c */
				interrupts = <0 40 0x4>;
			};
		};

		i2c@80004000 {
			compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
			reg = <0x80004000 0x1000>;
			interrupts = <0 21 0x4>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i2c@80122000 {
			compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
			reg = <0x80122000 0x1000>;
			interrupts = <0 22 0x4>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i2c@80128000 {
			compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
			reg = <0x80128000 0x1000>;
			interrupts = <0 55 0x4>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i2c@80110000 {
			compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
			reg = <0x80110000 0x1000>;
			interrupts = <0 12 0x4>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		i2c@8012a000 {
			compatible = "stericsson,db8500-i2c", "stmicroelectronics,nomadik-i2c";
			reg = <0x8012a000 0x1000>;
			interrupts = <0 51 0x4>;
			#address-cells = <1>;
			#size-cells = <0>;
		};

		ssp@80002000 {
			compatible = "arm,pl022", "arm,primecell";
			reg = <80002000 0x1000>;
			interrupts = <0 14 0x4>;
			#address-cells = <1>;
			#size-cells = <0>;
			status = "disabled";

			// Add one of these for each child device
			cs-gpios = <&gpio0 31 &gpio4 14 &gpio4 16 &gpio6 22 &gpio7 0>;

		};

		uart@80120000 {
			compatible = "arm,pl011", "arm,primecell";
			reg = <0x80120000 0x1000>;
			interrupts = <0 11 0x4>;
			status = "disabled";
		};
		uart@80121000 {
			compatible = "arm,pl011", "arm,primecell";
			reg = <0x80121000 0x1000>;
			interrupts = <0 19 0x4>;
			status = "disabled";
		};
		uart@80007000 {
			compatible = "arm,pl011", "arm,primecell";
			reg = <0x80007000 0x1000>;
			interrupts = <0 26 0x4>;
			status = "disabled";
		};

		sdi@80126000 {
			compatible = "arm,pl18x", "arm,primecell";
			reg = <0x80126000 0x1000>;
			interrupts = <0 60 0x4>;
			status = "disabled";
		};
		sdi@80118000 {
			compatible = "arm,pl18x", "arm,primecell";
			reg = <0x80118000 0x1000>;
			interrupts = <0 50 0x4>;
			status = "disabled";
		};
		sdi@80005000 {
			compatible = "arm,pl18x", "arm,primecell";
			reg = <0x80005000 0x1000>;
			interrupts = <0 41 0x4>;
			status = "disabled";
		};
		sdi@80119000 {
			compatible = "arm,pl18x", "arm,primecell";
			reg = <0x80119000 0x1000>;
			interrupts = <0 59 0x4>;
			status = "disabled";
		};
		sdi@80114000 {
			compatible = "arm,pl18x", "arm,primecell";
			reg = <0x80114000 0x1000>;
			interrupts = <0 99 0x4>;
			status = "disabled";
		};
		sdi@80008000 {
			compatible = "arm,pl18x", "arm,primecell";
			reg = <0x80114000 0x1000>;
			interrupts = <0 100 0x4>;
			status = "disabled";
		};
	};
};
Loading