M7350v1_en_gpl

This commit is contained in:
T
2024-09-09 08:52:07 +00:00
commit f9cc65cfda
65988 changed files with 26357421 additions and 0 deletions
@@ -0,0 +1,72 @@
* ARM architected timer
ARM Cortex-A7 and Cortex-A15 have a per-core architected timer, which
provides a per-cpu local timer.
The timer is attached to a GIC to deliver its two per-processor
interrupts (one for the secure mode, one for the non-secure mode).
** CP15 Timer node properties:
- compatible : Should be "arm,armv7-timer"
- interrupts : One or two interrupts for secure and non-secure mode
- clock-frequency : The frequency of the main counter, in Hz. Optional.
Example:
timer {
compatible = "arm,armv7-timer"";
interrupts = <1 13 0xf08 1 14 0xf08>;
clock-frequency = <100000000>;
};
** Memory mapped timer node properties:
- compatible : Should at least contain "arm,armv7-timer-mem".
- clock-frequency : The frequency of the main counter, in Hz. Optional.
- reg : The control frame base address.
Note that #address-cells, #size-cells, and ranges shall be present to ensure
the CPU can address the frame's registers.
Each timer node has up to 8 frame sub-nodes with the following properties:
- frame-number: 0 to 7.
- interrupts : Interrupt list for physical and virtual timers in that order.
The virtual timer interrupt is optional.
- reg : The first and second view base addresses in that order. The second view
base address is optional.
- status : "disabled" indicates the frame is not available for use. Optional.
Example:
timer@f0000000 {
compatible = "arm,armv7-timer-mem";
#address-cells = <1>;
#size-cells = <1>;
ranges;
reg = <0xf0000000 0x1000>;
clock-frequency = <50000000>;
frame0@f0001000 {
frame-number = <0>
interrupts = <0 13 0x8>,
<0 14 0x8>;
reg = <0xf0001000 0x1000>,
<0xf0002000 0x1000>;
};
frame1@f0003000 {
frame-number = <1>
interrupts = <0 15 0x8>;
reg = <0xf0003000 0x1000>;
status = "disabled";
};
};
@@ -0,0 +1,20 @@
ARM Versatile Application and Platform Baseboards
-------------------------------------------------
ARM's development hardware platform with connectors for customizable
core tiles. The hardware configuration of the Versatile boards is
highly customizable.
Required properties (in root node):
compatible = "arm,versatile-ab"; /* Application baseboard */
compatible = "arm,versatile-pb"; /* Platform baseboard */
Interrupt controllers:
- VIC required properties:
compatible = "arm,versatile-vic";
interrupt-controller;
#interrupt-cells = <1>;
- SIC required properties:
compatible = "arm,versatile-sic";
interrupt-controller;
#interrupt-cells = <1>;
@@ -0,0 +1,38 @@
* Advanced Interrupt Controller (AIC)
Required properties:
- compatible: Should be "atmel,<chip>-aic"
- interrupt-controller: Identifies the node as an interrupt controller.
- interrupt-parent: For single AIC system, it is an empty property.
- #interrupt-cells: The number of cells to define the interrupts. It sould be 2.
The first cell is the IRQ number (aka "Peripheral IDentifier" on datasheet).
The second cell is used to specify flags:
bits[3:0] trigger type and level flags:
1 = low-to-high edge triggered.
2 = high-to-low edge triggered.
4 = active high level-sensitive.
8 = active low level-sensitive.
Valid combinations are 1, 2, 3, 4, 8.
Default flag for internal sources should be set to 4 (active high).
- reg: Should contain AIC registers location and length
Examples:
/*
* AIC
*/
aic: interrupt-controller@fffff000 {
compatible = "atmel,at91rm9200-aic";
interrupt-controller;
interrupt-parent;
#interrupt-cells = <2>;
reg = <0xfffff000 0x200>;
};
/*
* An interrupt generating device that is wired to an AIC.
*/
dma: dma-controller@ffffec00 {
compatible = "atmel,at91sam9g45-dma";
reg = <0xffffec00 0x200>;
interrupts = <21 4>;
};
@@ -0,0 +1,92 @@
Atmel AT91 device tree bindings.
================================
PIT Timer required properties:
- compatible: Should be "atmel,at91sam9260-pit"
- reg: Should contain registers location and length
- interrupts: Should contain interrupt for the PIT which is the IRQ line
shared across all System Controller members.
TC/TCLIB Timer required properties:
- compatible: Should be "atmel,<chip>-pit".
<chip> can be "at91rm9200" or "at91sam9x5"
- reg: Should contain registers location and length
- interrupts: Should contain all interrupts for the TC block
Note that you can specify several interrupt cells if the TC
block has one interrupt per channel.
Examples:
One interrupt per TC block:
tcb0: timer@fff7c000 {
compatible = "atmel,at91rm9200-tcb";
reg = <0xfff7c000 0x100>;
interrupts = <18 4>;
};
One interrupt per TC channel in a TC block:
tcb1: timer@fffdc000 {
compatible = "atmel,at91rm9200-tcb";
reg = <0xfffdc000 0x100>;
interrupts = <26 4 27 4 28 4>;
};
RSTC Reset Controller required properties:
- compatible: Should be "atmel,<chip>-rstc".
<chip> can be "at91sam9260" or "at91sam9g45"
- reg: Should contain registers location and length
Example:
rstc@fffffd00 {
compatible = "atmel,at91sam9260-rstc";
reg = <0xfffffd00 0x10>;
};
RAMC SDRAM/DDR Controller required properties:
- compatible: Should be "atmel,at91sam9260-sdramc",
"atmel,at91sam9g45-ddramc",
- reg: Should contain registers location and length
For at91sam9263 and at91sam9g45 you must specify 2 entries.
Examples:
ramc0: ramc@ffffe800 {
compatible = "atmel,at91sam9g45-ddramc";
reg = <0xffffe800 0x200>;
};
ramc0: ramc@ffffe400 {
compatible = "atmel,at91sam9g45-ddramc";
reg = <0xffffe400 0x200
0xffffe600 0x200>;
};
SHDWC Shutdown Controller
required properties:
- compatible: Should be "atmel,<chip>-shdwc".
<chip> can be "at91sam9260", "at91sam9rl" or "at91sam9x5".
- reg: Should contain registers location and length
optional properties:
- atmel,wakeup-mode: String, operation mode of the wakeup mode.
Supported values are: "none", "high", "low", "any".
- atmel,wakeup-counter: Counter on Wake-up 0 (between 0x0 and 0xf).
optional at91sam9260 properties:
- atmel,wakeup-rtt-timer: boolean to enable Real-time Timer Wake-up.
optional at91sam9rl properties:
- atmel,wakeup-rtc-timer: boolean to enable Real-time Clock Wake-up.
- atmel,wakeup-rtt-timer: boolean to enable Real-time Timer Wake-up.
optional at91sam9x5 properties:
- atmel,wakeup-rtc-timer: boolean to enable Real-time Clock Wake-up.
Example:
rstc@fffffd00 {
compatible = "atmel,at91sam9260-rstc";
reg = <0xfffffd00 0x10>;
};
@@ -0,0 +1,11 @@
* Power Management Controller (PMC)
Required properties:
- compatible: Should be "atmel,at91rm9200-pmc"
- reg: Should contain PMC registers location and length
Examples:
pmc: pmc@fffffc00 {
compatible = "atmel,at91rm9200-pmc";
reg = <0xfffffc00 0x100>;
};
@@ -0,0 +1,8 @@
Calxeda Highbank Platforms Device Tree Bindings
-----------------------------------------------
Boards with Calxeda Cortex-A9 based Highbank SOC shall have the following
properties.
Required root node properties:
- compatible = "calxeda,highbank";
@@ -0,0 +1,78 @@
* ARM CPUs binding description
The device tree allows to describe the layout of CPUs in a system through
the "cpus" node, which in turn contains a number of subnodes (ie "cpu")
defining properties for every cpu.
Bindings for CPU nodes follow the ePAPR standard, available from:
http://devicetree.org
For the ARM architecture every CPU node must contain the following properties:
- device_type: must be "cpu"
- reg: property matching the CPU MPIDR[23:0] register bits
reg[31:24] bits must be set to 0
- compatible: should be one of:
"arm,arm1020"
"arm,arm1020e"
"arm,arm1022"
"arm,arm1026"
"arm,arm720"
"arm,arm740"
"arm,arm7tdmi"
"arm,arm920"
"arm,arm922"
"arm,arm925"
"arm,arm926"
"arm,arm940"
"arm,arm946"
"arm,arm9tdmi"
"arm,cortex-a5"
"arm,cortex-a7"
"arm,cortex-a8"
"arm,cortex-a9"
"arm,cortex-a15"
"arm,arm1136"
"arm,arm1156"
"arm,arm1176"
"arm,arm11mpcore"
"faraday,fa526"
"intel,sa110"
"intel,sa1100"
"marvell,feroceon"
"marvell,mohawk"
"marvell,xsc3"
"marvell,xscale"
"qcom,krait"
Example:
cpus {
#size-cells = <0>;
#address-cells = <1>;
CPU0: cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x0>;
};
CPU1: cpu@1 {
device_type = "cpu";
compatible = "arm,cortex-a15";
reg = <0x1>;
};
CPU2: cpu@100 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x100>;
};
CPU3: cpu@101 {
device_type = "cpu";
compatible = "arm,cortex-a7";
reg = <0x101>;
};
};
@@ -0,0 +1,21 @@
* Samsung Exynos Power Domains
Exynos processors include support for multiple power domains which are used
to gate power to one or more peripherals on the processor.
Required Properties:
- compatiable: should be one of the following.
* samsung,exynos4210-pd - for exynos4210 type power domain.
- reg: physical base address of the controller and length of memory mapped
region.
Optional Properties:
- samsung,exynos4210-pd-off: Specifies that the power domain is in turned-off
state during boot and remains to be turned-off until explicitly turned-on.
Example:
lcd0: power-domain-lcd0 {
compatible = "samsung,exynos4210-pd";
reg = <0x10023C00 0x10>;
};
@@ -0,0 +1,52 @@
Freescale i.MX Platforms Device Tree Bindings
-----------------------------------------------
i.MX51 Babbage Board
Required root node properties:
- compatible = "fsl,imx51-babbage", "fsl,imx51";
i.MX53 Automotive Reference Design Board
Required root node properties:
- compatible = "fsl,imx53-ard", "fsl,imx53";
i.MX53 Evaluation Kit
Required root node properties:
- compatible = "fsl,imx53-evk", "fsl,imx53";
i.MX53 Quick Start Board
Required root node properties:
- compatible = "fsl,imx53-qsb", "fsl,imx53";
i.MX53 Smart Mobile Reference Design Board
Required root node properties:
- compatible = "fsl,imx53-smd", "fsl,imx53";
i.MX6 Quad Armadillo2 Board
Required root node properties:
- compatible = "fsl,imx6q-arm2", "fsl,imx6q";
i.MX6 Quad SABRE Lite Board
Required root node properties:
- compatible = "fsl,imx6q-sabrelite", "fsl,imx6q";
Generic i.MX boards
-------------------
No iomux setup is done for these boards, so this must have been configured
by the bootloader for boards to work with the generic bindings.
i.MX27 generic board
Required root node properties:
- compatible = "fsl,imx27";
i.MX51 generic board
Required root node properties:
- compatible = "fsl,imx51";
i.MX53 generic board
Required root node properties:
- compatible = "fsl,imx53";
i.MX6q generic board
Required root node properties:
- compatible = "fsl,imx6q";
@@ -0,0 +1,59 @@
* ARM Generic Interrupt Controller
ARM SMP cores are often associated with a GIC, providing per processor
interrupts (PPI), shared processor interrupts (SPI) and software
generated interrupts (SGI).
Primary GIC is attached directly to the CPU and typically has PPIs and SGIs.
Secondary GICs are cascaded into the upward interrupt controller and do not
have PPIs or SGIs.
Main node required properties:
- compatible : should be one of:
"arm,cortex-a9-gic"
"arm,arm11mp-gic"
- interrupt-controller : Identifies the node as an interrupt controller
- #interrupt-cells : Specifies the number of cells needed to encode an
interrupt source. The type shall be a <u32> and the value shall be 3.
The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI
interrupts.
The 2nd cell contains the interrupt number for the interrupt type.
SPI interrupts are in the range [0-987]. PPI interrupts are in the
range [0-15].
The 3rd cell is the flags, encoded as follows:
bits[3:0] trigger type and level flags.
1 = low-to-high edge triggered
2 = high-to-low edge triggered
4 = active high level-sensitive
8 = active low level-sensitive
bits[15:8] PPI interrupt cpu mask. Each bit corresponds to each of
the 8 possible cpus attached to the GIC. A bit set to '1' indicated
the interrupt is wired to that CPU. Only valid for PPI interrupts.
- reg : Specifies base physical address(s) and size of the GIC registers. The
first region is the GIC distributor register base and size. The 2nd region is
the GIC cpu interface register base and size.
Optional
- interrupts : Interrupt source of the parent interrupt controller. Only
present on secondary GICs.
- cpu-offset : per-cpu offset within the distributor and cpu interface
regions, used when the GIC doesn't have banked registers. The offset is
cpu-offset * cpu-nr.
Example:
intc: interrupt-controller@fff11000 {
compatible = "arm,cortex-a9-gic";
#interrupt-cells = <3>;
#address-cells = <1>;
interrupt-controller;
reg = <0xfff11000 0x1000>,
<0xfff10100 0x100>;
};
@@ -0,0 +1,8 @@
* Insignal's Exynos4210 based Origen evaluation board
Origen low-cost evaluation board is based on Samsung's Exynos4210 SoC.
Required root node properties:
- compatible = should be one or more of the following.
(a) "samsung,smdkv310" - for Samsung's SMDKV310 eval board.
(b) "samsung,exynos4210" - for boards based on Exynos4210 SoC.
@@ -0,0 +1,44 @@
* ARM L2 Cache Controller
ARM cores often have a separate level 2 cache controller. There are various
implementations of the L2 cache controller with compatible programming models.
The ARM L2 cache representation in the device tree should be done as follows:
Required properties:
- compatible : should be one of:
"arm,pl310-cache"
"arm,l220-cache"
"arm,l210-cache"
- cache-unified : Specifies the cache is a unified cache.
- cache-level : Should be set to 2 for a level 2 cache.
- reg : Physical base address and size of cache controller's memory mapped
registers.
Optional properties:
- arm,data-latency : Cycles of latency for Data RAM accesses. Specifies 3 cells of
read, write and setup latencies. Minimum valid values are 1. Controllers
without setup latency control should use a value of 0.
- arm,tag-latency : Cycles of latency for Tag RAM accesses. Specifies 3 cells of
read, write and setup latencies. Controllers without setup latency control
should use 0. Controllers without separate read and write Tag RAM latency
values should only use the first cell.
- arm,dirty-latency : Cycles of latency for Dirty RAMs. This is a single cell.
- arm,filter-ranges : <start length> Starting address and length of window to
filter. Addresses in the filter window are directed to the M1 port. Other
addresses will go to the M0 port.
- interrupts : 1 combined interrupt.
Example:
L2: cache-controller {
compatible = "arm,pl310-cache";
reg = <0xfff12000 0x1000>;
arm,data-latency = <1 1 1>;
arm,tag-latency = <2 2 2>;
arm,filter-latency = <0x80000000 0x8000000>;
cache-unified;
cache-level = <2>;
interrupts = <45>;
};
@@ -0,0 +1,6 @@
Marvell Platforms Device Tree Bindings
----------------------------------------------------
PXA168 Aspenite Board
Required root node properties:
- compatible = "mrvl,pxa168-aspenite", "mrvl,pxa168";
@@ -0,0 +1,22 @@
* Qualcomm Application CPU clock driver
acpuclock-9625 is the application cpu clock driver for MDM9625. It is used for
cpu frequency scaling, voltage scaling and bus bandwidth scaling.
Required properties:
- compatible: "qcom,acpuclk-9625"
- reg: offset and length of the register sets for the acpuclock controller
- reg-names: name of the bases for the above registers. "rcg_base", "pwr_base"
are expected.
- a5_cpu-supply: regulator to supply a5 cpu
- a5_mem-supply: regulator to supply a5 l2 cache
Example:
qcom,acpuclk@f9010000 {
compatible = "qcom,acpuclk-9625";
reg = <0xf9010008 0x10>,
<0xf9008004 0x4>;
reg-names = "rcg_base", "pwr_base";
a5_cpu-supply = <&pm8019_l10_corner_ao>;
a5_mem-supply = <&pm8019_l12_ao>;
};
@@ -0,0 +1,20 @@
* Qualcomm Application CPU clock device
acpuclock-a7 selects the clock source used by the cpus and l2 cache. It
can be configured to divide the clock source by any value in [1, 16] in
half-integer increments.
Required properties:
- compatible: "qcom,acpuclk-a7"
- reg: offset and length of the register sets for the acpuclock controller
- reg-names: name of the bases for the above registers. "rcg_base"
is expected.
- a7_cpu-supply: regulator to supply a7 cpu
Example:
qcom,acpuclk@f9011050 {
compatible = "qcom,acpuclk-a7";
reg = <0xf9011050 0x8>;
reg-names = "rcg_base";
a7_cpu-supply = <&pm8026_s2>;
};
@@ -0,0 +1,20 @@
Qualcomm BAM Data Multiplexer Driver
Required properties:
- compatible : should be "qcom,bam_dmux"
- reg : the location and size of the BAM hardware
- interrupts : the BAM hardware to apps processor interrupt line
Optional properties:
-qcom,satellite-mode: the hardware needs to be configured in satellite mode
-qcom,rx-ring-size: the size of the receive ring buffer pool, default is 32
Example:
qcom,bam_dmux@fc834000 {
compatible = "qcom,bam_dmux";
reg = <0xfc834000 0x7000>;
interrupts = <0 29 1>;
qcom,satellite-mode;
qcom,rx-ring-size = <64>;
};
@@ -0,0 +1,15 @@
* Battery Current Limit
This Battery Current Limit device, provides an interface to detect and notify
interested applications when the SOC is drawing current in excess of the limits
specified.
The device tree parameters for bcl are:
Required parameters:
- compatible: Must be "qcom,bcl"
Example:
qcom,bcl {
compatible = "qcom,bcl";
};
@@ -0,0 +1,24 @@
* MSM Sleep status
MSM Sleep status device is used to check the power collapsed status of a
offlined core. The core that initiates the hotplug would wait on the
sleep status device before CPU_DEAD notifications are sent out. Some hardware
devices require that the offlined core is power collapsed before turning off
the resources that are used by the offlined core.
The required properties of sleep status device are:
- compatible: qcom,cpu-sleep-status
- reg: physical address of the sleep status register for Core 0
- qcom,cpu-alias-addr - On MSM chipset, the each cores registers are at a
fixed offset each other.
- qcom,cpu-sleep-status-mask - The bit mask within the status register that
indicates the Core's sleep state.
Example:
qcom,cpu-sleep-status@f9088008 {
compatible = "qcom,cpu-sleep-status";
reg = <0xf9088008 0x4>;
qcom,cpu-alias-addr = <0x10000>;
qcom,sleep-status-mask= <0x80000>;
};
@@ -0,0 +1,119 @@
Qualcomm CPR (Core Power Reduction) Regulator
CPR regulator device is for Qualcomm RBCPR (RapidBridge CPR) on
application processor core. It takes voltage corner level
as input and converts it to actual voltage based on the
suggestions from factory production process. When CPR is
enabled for application processer core, it will suggest
scaling the voltage up or down for best performance and
power of the core. The scaling based on factory production
process is called PVS (Process Voltage Scaling) with efuse
bits to indicate what bin (and voltage range) a chip is in.
Required properties:
- compatible: Must be "qcom,cpr-regulator"
- reg: Register addresses for RBCPR, RBCPR clock
select, PVS eFuse and CPR eFuse
- reg-names: Register names. Must be "rbcpr", "rbcpr_clk",
"pvs_efuse" and "cpr_efuse"
- regulator-name: A string used to describe the regulator
- interrupts: Interrupt line from RBCPR to interrupt controller.
- regulator-min-microvolt: Minimum corner value as min constraint, which
should be 1 for SVS corner
- regulator-max-microvolt: Maximum corner value as max constraint, which
should be 4 for SUPER_TURBO or 3 for TURBO
- qcom,num-efuse-bits: The number of bits used in efuse memory to
represent total number of PVS bins. It should
not exceed a maximum of 5 for total number of
32 bins.
- qcom,pvs-bin-process: A list of integers whose length is equal to 2 to
the power of qcom,num-efuse-bits. The location or
0-based index of an element in the list corresponds
to the bin number. The value of each integer
corresponds to the PVS process speed of the APC
silicon for a chip with one of these cases:
1 = APC_PVS_SLOW
2 = APC_PVS_NOM
3 = APC_PVS_FAST
0 or other values = No PVS
- qcom,pvs-corner-ceiling-slow: Ceiling voltages of all corners for APC_PVS_SLOW
- qcom,pvs-corner-ceiling-nom: Ceiling voltages of all corners for APC_PVS_NOM
- qcom,pvs-corner-ceiling-fast: Ceiling voltages of all corners for APC_PVS_FAST
The ceiling voltages for each of above three
properties may look like this:
0 (SVS voltage): 1050000 uV
1 (NORMAL voltage): 1150000 uV
2 (TURBO voltage): 1275000 uV
- vdd-apc-supply: Regulator to supply VDD APC power
- qcom,vdd-apc-step-up-limit: Limit of vdd-apc-supply steps for scaling up.
- qcom,vdd-apc-step-down-limit: Limit of vdd-apc-supply steps for scaling down.
- qcom,cpr-ref-clk: The reference clock in kHz.
- qcom,cpr-timer-delay: The delay in microseconds for the timer interval.
- qcom,cpr-timer-cons-up: Consecutive number of timer interval (qcom,cpr-timer-delay)
occurred before issuing UP interrupt.
- qcom,cpr-timer-cons-down: Consecutive number of timer interval (qcom,cpr-timer-delay)
occurred before issuing DOWN interrupt.
- qcom,cpr-irq-line: Internal interrupt route signal of RBCPR, one of 0, 1 or 2.
- qcom,cpr-step-quotient: Number of CPR quotient (RO count) per vdd-apc-supply step
to issue error_steps.
- qcom,cpr-up-threshold: The threshold for CPR to issue interrupt when
error_steps is greater than it when stepping up.
- qcom,cpr-down-threshold: The threshold for CPR to issue interrupt when
error_steps is greater than it when stepping down.
- qcom,cpr-idle-clocks: Idle clock cycles RO can be in.
- qcom,cpr-gcnt-time: The time for gate count in microseconds.
- qcom,cpr-apc-volt-step: The voltage in microvolt per CPR step, such as 5000uV.
Optional properties:
- vdd-mx-supply: Regulator to supply memory power as dependency
of VDD APC.
- qcom,vdd-mx-vmax: The maximum voltage in uV for vdd-mx-supply. This
is required when vdd-mx-supply is present.
- qcom,vdd-mx-vmin-method: The method to determine the minimum voltage for
vdd-mx-supply, which can be one of following
choices compared with VDD APC:
0 => equal to the voltage(vmin) of VDD APC
1 => equal to PVS corner ceiling voltage
2 => equal to slow speed corner ceiling
3 => equal to qcom,vdd-mx-vmax
This is required when vdd-mx-supply is present.
- qcom,cpr-enable: Present: CPR enabled by default.
Not Present: CPR disable by default.
Example:
apc_vreg_corner: regulator@f9018000 {
status = "okay";
compatible = "qcom,cpr-regulator";
reg = <0xf9018000 0x1000>, <0xfc4b80b0 8>, <0xfc4bc450 16>;
reg-names = "rbcpr", "pvs_efuse", "cpr_efuse";
interrupts = <0 15 0>;
regulator-name = "apc_corner";
regulator-min-microvolt = <1>;
regulator-max-microvolt = <3>;
qcom,num-efuse-bits = <5>;
qcom,pvs-bin-process = <0 0 0 0 0 1 1 1 1 1 2 2 2 2 2 2
2 2 2 2 3 3 3 3 3 3 3 3 0 0 0 0>;
qcom,pvs-corner-ceiling-slow = <1050000 1160000 1275000>;
qcom,pvs-corner-ceiling-nom = <975000 1075000 1200000>;
qcom,pvs-corner-ceiling-fast = <900000 1000000 1140000>;
vdd-apc-supply = <&pm8226_s2>;
vdd-mx-supply = <&pm8226_l3_ao>;
qcom,vdd-mx-vmax = <1350000>;
qcom,vdd-mx-vmin-method = <1>;
qcom,vdd-apc-step-up-limit = <1>;
qcom,vdd-apc-step-down-limit = <1>;
qcom,cpr-ref-clk = <19200>;
qcom,cpr-timer-delay = <5000>;
qcom,cpr-timer-cons-up = <1>;
qcom,cpr-timer-cons-down = <2>;
qcom,cpr-irq-line = <0>;
qcom,cpr-step-quotient = <15>;
qcom,cpr-up-threshold = <1>;
qcom,cpr-down-threshold = <2>;
qcom,cpr-idle-clocks = <5>;
qcom,cpr-gcnt-time = <1>;
qcom,cpr-apc-volt-step = <5000>;
};
@@ -0,0 +1,143 @@
DCVS Core Info
This data describes specific DCVS tuning data for a specific core (CPU, GPU,
etc).
Required properties:
- qcom,core-core-type: indicates whether this core is a CPU(0) or a GPU(1)
- qcom,num-cores: The number of cores this entry represents
- qcom,sensors: The vector of sensor ids for the cores
- qcom,algo-disable-pc-threshold: sets highest frequency at which DCVS
will allow the CPU to power collapse.
- qcom,algo-em-win-size-min-us: sets minimum Energy Minimization(EM)
window size.
- qcom,algo-em-win-size-max-us: sets maximum EM window size.
- qcom,algo-em-max-util-pct: sets maximum CPU utilization that will
not be exceeded by any core when
MP-decision decides the number of
online cores.
- qcom,algo-group-id: specifies a group index of a core.
- qcom,algo-max-freq-chg-time-us: shows time taken for the most recent
frequency change.
- qcom,algo-slack-mode-dynamic: specifies if dynamic slack mode is
enabled or not.
- qcom,algo-slack-weight-thresh-pct: sets occurrence percentage of CPU
activity that will make slack timer
triggered.
- qcom,algo-slack-time-min-us: specifies the slack time that slack
timer would be set if the current clock
frequency is zero.
- qcom,algo-slack-time-max-us: sets maximum slack timer value to be
used by slack timer.
- qcom,algo-ss-win-size-min-us: sets minimum steady state window size.
- qcom,algo-ss-win-size-max-us: sets maximum steady state window size.
- qcom,algo-ss-util-pct: sets target CPU utilization during
steady-state.
- qcom,algo-ss-no-corr-below-freq: specifies frequency below which DCVS
will not attempt to correlate busy or
idle information from different CPUs
- qcom,energy-active-coeff-a: sets active power equation coefficient a.
- qcom,energy-active-coeff-b: sets active power equation coefficient b.
- qcom,energy-active-coeff-c: sets active power equation coefficient c.
- qcom,energy-leakage-coeff-a: sets leakage power equation coefficient a.
- qcom,energy-leakage-coeff-b: sets leakage power equation coefficient b.
- qcom,energy-leakage-coeff-c: sets leakage power equation coefficient c.
- qcom,energy-leakage-coeff-d: sets leakage power equation coefficient d.
- qcom,power-current-temp: the current temperature in degCelcius.
- qcom,power-num-freq: the number of freq this core supports.
A number of frequency levels are represented as sub-nodes:
required properties:
- reg: The index of the frequency entry
- qcom,freq The frequency of the DVS entry (in kHZ)
- qcom,is_trans_level This frequency is transient step for DCVS
- qcom,active-energy-offset: The active energy cost of the entry
- qcom,leakage-energy-offset: The leakage energy cost of the entry
Sample:
qcom,kgsl-3d0@fdb00000 {
...
qcom,dcvs-core-info {
#address-cells = <1>;
#size-cells = <0>;
compatible = "qcom,dcvs-core-info";
qcom,num-cores = <1>;
qcom,sensors = <0>;
qcom,core-core-type = <1>;
qcom,algo-disable-pc-threshold = <0>;
qcom,algo-em-win-size-min-us = <100000>;
qcom,algo-em-win-size-max-us = <300000>;
qcom,algo-em-max-util-pct = <97>;
qcom,algo-group-id = <95>;
qcom,algo-max-freq-chg-time-us = <100000>;
qcom,algo-slack-mode-dynamic = <100000>;
qcom,algo-slack-weight-thresh-pct = <0>;
qcom,algo-slack-time-min-us = <39000>;
qcom,algo-slack-time-max-us = <39000>;
qcom,algo-ss-win-size-min-us = <1000000>;
qcom,algo-ss-win-size-max-us = <1000000>;
qcom,algo-ss-util-pct = <95>;
qcom,algo-ss-no-corr-below-freq = <0>;
qcom,energy-active-coeff-a = <2492>;
qcom,energy-active-coeff-b = <0>;
qcom,energy-active-coeff-c = <0>;
qcom,energy-leakage-coeff-a = <11>;
qcom,energy-leakage-coeff-b = <157150>;
qcom,energy-leakage-coeff-c = <0>;
qcom,energy-leakage-coeff-d = <0>;
qcom,power-current-temp = <25>;
qcom,power-num-freq = <4>;
qcom,dcvs-freq@0 {
reg = <0>;
qcom,freq = <0>;
qcom,voltage = <0>;
qcom,is_trans_level = <0>;
qcom,active-energy-offset = <100>;
qcom,leakage-energy-offset = <0>;
};
qcom,dcvs-freq@1 {
reg = <1>;
qcom,freq = <0>;
qcom,voltage = <0>;
qcom,is_trans_level = <0>;
qcom,active-energy-offset = <100>;
qcom,leakage-energy-offset = <0>;
};
qcom,dcvs-freq@2 {
reg = <2>;
qcom,freq = <0>;
qcom,voltage = <0>;
qcom,is_trans_level = <0>;
qcom,active-energy-offset = <100>;
qcom,leakage-energy-offset = <0>;
};
qcom,dcvs-freq@3 {
reg = <3>;
qcom,freq = <0>;
qcom,voltage = <0>;
qcom,is_trans_level = <0>;
qcom,active-energy-offset = <844545>;
qcom,leakage-energy-offset = <0>;
};
};
...
};
@@ -0,0 +1,15 @@
Qualcomm IMEM
IMEM is fast on-chip memory used for various debug features and dma transactions.
Required properties
-compatible: "qcom,msm-imem"
-reg: start address and size of imem memory
Example:
qcom,msm-imem {
compatible = "qcom,msm-imem";
reg = <0xdeadbeef 0x1000>; /* < start_address size > */
};
@@ -0,0 +1,27 @@
Qualcomm Interprocessor Communication Spinlock
--Dedicated Hardware Implementation--
Required properties:
- compatible : should be "qcom,ipc-spinlock-sfpb"
- reg : the location and size of the spinlock hardware
- qcom,num-locks : the number of locks supported
Example:
qcom,ipc-spinlock@fd484000 {
compatible = "qcom,ipc-spinlock-sfpb";
reg = <0xfd484000 0x1000>;
qcom,num-locks = <32>;
};
--LDREX Implementation--
Required properties:
- compatible : should be "qcom,ipc-spinlock-ldrex"
- reg : the location and size of the shared lock memory
Example:
qcom,ipc-spinlock@fa00000 {
compatible = "qcom,ipc-spinlock-ldrex";
reg = <0xfa00000 0x200000>;
};
@@ -0,0 +1,21 @@
* JTAG-MM
The jtag-mm entry specifies the memory mapped addresses for the debug and ETM
registers. The jtag-mm driver uses these to save and restore the registers
using memory mapped access during power collapse so as to retain their state
accross power collapse. This is necessary in case cp14 access to the registers
is not permitted.
Required Properties:
compatible: component name used for driver matching, should be "qcom,jtag-mm"
reg: physical base address and length of the register set
reg-names: should be "etm-base" for etm register set and "debug-base" for debug
register set.
Example:
jtag_mm: jtagmm@fc332000 {
compatible = "qcom,jtag-mm";
reg = <0xfc332000 0x1000>,
<0xfc333000 0x1000>;
reg-names = "etm-base","debug-base";
};
@@ -0,0 +1,73 @@
* Low Power Management Levels
The application processor in MSM can do a variety of C-States for low power
management. These C-States are invoked by the CPUIdle framework when the core
becomes idle. But based on the time available until the next scheduled wakeup,
the system can do a combination of low power modes of different resources -
L2, XO, Vdd Dig and Vdd Mem. The combination is captured in the device tree as
lpm-level. The units for voltage are dependent on the PMIC used on the target
and are in uV.
The required nodes for lpm-levels are:
- compatible: "qcom,lpm-levels"
- reg: The numeric level id
- qcom,mode: The sleep mode of the processor, values for the property are:
"wfi" - Wait for Interrupt
"ramp_down_and_wfi" - Ramp down and wait for interrupt
"standalone_pc" - Standalone power collapse
"pc" - Power Collapse
"retention" - Retention
"pc_suspend" - Suspended Power Collapse
"pc_no_xo_shutdown" - Power Collapse with no XO shutdown
- qcom,xo: The state of XO clock. Values are "xo_on" and "xo_off"
- qcom,l2: The state of L2 cache. Values are:
"l2_cache_pc" - L2 cache in power collapse
"l2_cache_retenetion" - L2 cache in retention
"l2_cache_gdhs" - L2 cache in GDHS
"l2_cache_active" - L2 cache in active mode
- qcom,vdd-mem-upper-bound: The upper bound value of mem voltage in uV
- qcom,vdd-mem-lower-bound: The lower bound value of mem voltage in uV
- qcom,vdd-dig-upper-bound: The upper bound value of dig voltage in uV
or an RBCPR (Rapid Bridge Core Power Reduction)
corner voltage.
- qcom,vdd-dig-lower-bound: The lower bound value of dig voltage in uV
or an RBCPR (Rapid Bridge Core Power Reduction)
corner voltage.
- qcom,latency-us: The latency in handling the interrupt if this level was
chosen, in uSec
- qcom,ss-power: The steady state power expelled when the processor is in this
level in mWatts
- qcom,energy-overhead: The energy used up in entering and exiting this level
in mWatts.uSec
- qcom,time-overhead: The time spent in entering and exiting this level in uS
Optional properties
- qcom,irqs-detectable: The field indicates whether the IRQs are detectable by
the GIC controller when entering a low power mode.
- qcom,gpio-detectable: The field indicates whether the GPIOs can be detected
by the GPIO interrupt controller during a given low
power mode.
- qcom,use-qtimer: Indicates whether the target uses the synchronized QTimer.
Example:
qcom,lpm-levels {
qcom,use-qtimer;
qcom,lpm-level@0 {
reg = <0>;
qcom,mode = "wfi";
qcom,xo = "xo_on";
qcom,l2 = "l2_cache_active";
qcom,vdd-mem-upper-bound = <1150000>; /* MAX */
qcom,vdd-mem-lower-bound = <1050000>; /* ACTIVE */
qcom,vdd-dig-upper-bound = <5>; /* MAX */
qcom,vdd-dig-lower-bound = <3>; /* ACTIVE */
qcom,irqs-detectable;
qcom,gpio-detectable;
qcom,latency-us = <100>;
qcom,ss-power = <650>;
qcom,energy-overhead = <801>;
qcom,time-overhead = <200>;
};
};
@@ -0,0 +1,47 @@
* Low Power Management Resources
The application processor in the MSM can enter several different low power
states depending on the sleep time and on the required system resources. The
MSM cannot enter a given low power state if that state involves turning off
some shared resources which are required by some components of the
system.The lpm-resources device tree node represents the shared resources
that need to be monitored for usage requirement to check if a given low power
state can be entered.Each resource is identified by a combination of the name,
id,type and key which is also used by the RPM to identify a shared resource.
The name and resource-type are required nodes; the type, id and key are
optional nodes which are needed if the resource type is RPM shared resource
(MSM_LPM_RPM_RS_TYPE).
The nodes for lpm-resources are:
Required Nodes:
- compatible: "qcom,lpm-resources"
- reg: The numeric level id
- qcom,name: The name of the low power resource represented
as a string.
- qcom,init-value: Initialization value of the LPM resource represented as
decimal value for vdd-dig and vdd-mem resources and
as string for pxo and l2 resources.
Optional Nodes:
- qcom,type: The type of resource used like smps or pxo
represented as a hex value.
- qcom,id: The id representing a device within a resource type.
- qcom,key: The key is the specific attribute of the resource being
monitored represented as a hex value.
- qcom,local-resource-type: The property exists only for locally managed
resource and is represented as a bool.
Example:
qcom,lpm-resources@0 {
reg = <0x0>;
qcom,name = "vdd-dig";
qcom,type = <0x62706d73>; /* "smpb" */
qcom,id = <0x02>;
qcom,key = <0x6e726f63>; /* "corn" */
qcom,init-value= <5>; /* Active Corner*/
};
@@ -0,0 +1,88 @@
* Memory reservations for MSM targets
Large contiguous allocations (generally sizes greater than 64KB) must be
allocated from a carved out memory pool. The size of the carved out pools
is based on the sizes drivers need. To properly size the pools, devices
must specify the size and type of the memory needed. Any driver wanting to
allocate contiguous memory should indicate this via device tree bindings:
Required parameters:
- qcom,memory-reservation-type: type of memory to be reserved. This is a
string defined in arch/arm/mach-msm/memory.c
- qcom,memory-reservation-size: size of memory to be reserved
Example:
qcom,a-driver {
compatible = "qcom,a-driver";
qcom,memory-reservation-type = "EBI1" /* reserve EBI memory */
qcom,memory-reservation-size = <0x400000>; /* size 4MB */
};
Under some circumstances, it may be necessary to remove a chunk of memory
from the kernel completely using memblock remove. Note this is different
than adjusting the memory tags passed in via the bootloader as the virtual
range is not affected. Any driver needing to remove a block of memory should
add the appropriate binding:
Required parameters:
- qcom,memblock-remove: base and size of block to be removed
qcom,a-driver {
compatible = "qcom,a-driver";
/* Remove 4MB at 0x200000*/
qcom,memblock-remove = <0x200000 0x400000>;
};
In order to ensure memory is only reserved when a driver is actually enabled,
drivers are required to add EXPORT_COMPAT(<name of compatible string>) some
where in the driver. For the examples above, the driver must add
EXPORT_COMPAT("qcom,a-driver") to the driver, similar to EXPORT_SYMBOL.
The EXPORT_COMPAT is to ensure that memory is only carved out if the
driver is actually enabled, otherwise the memory will not be used.
If a reservation is needed that isn't associated directly with any one
driver, the compatible string "qcom,msm-contig-mem" can be used. For
example:
qcom,msm-contig-mem {
compatible = "qcom,msm-contig-mem";
qcom,memory-reservation-type = "EBI1";
qcom,memory-reservation-size = <0x280000>; /* 2.5M EBI1 buffer */
};
In order to specify the size and address of the fixed memory which has
previously been removed the memory-fixed binding can be used. This assumes
that the region has been removed by a separate memblock-remove property
present in the device tree.
Required parameters:
-qcom,memory-fixed: base and size of the fixed memory region
qcom,a-driver {
compatible = "qcom,a-driver";
/* Fixed Memory region of 4MB at 0x200000*/
qcom,memory-fixed = <0x200000 0x400000>;
};
This region is assumed to be a part of a separate hole that has been removed
and this binding specifies the fixed location and size of the region within
that hole.
Some drivers may only wish to reserve memory from the system. Reserved memory
is still tracked internally by the Linux page allocator. The memory is reserved
from the buddy allocator at bootup but may be freed back at a later point in
time with memblock_free and free_bootmem_late.
Required parameters:
-qcom,memblock-reserve: base and size of block to be reserved. Drivers should
call memblock_is_reserved before attempting to use the base address to ensure
the memory was completely reserved.
qcom,a-driver {
compatible = "qcom,a-driver";
/* reserve a 4MB region @ 0x200000 for use later */
qcom,memblock-reserve = <0x200000 0x400000>;
};
@@ -0,0 +1,67 @@
* MSM Sleep Power Manager (mpm-v2)
The MPM acts a sleep power manager to shutdown the clock source and put the
device into a retention mode to save power. The MPM is also responsible for
waking up and bringing up the resources from sleep. The MPM driver configures
interrupts monitored by the MPM hardware before entering sleep through a
RPM interface.
The required nodes for the MPM driver are:
- compatible: "qcom, mpm-v2"
- reg: Specifies the base physical address(s) and the size of the MPM
registers. The MPM driver access two memory regions for confifure the
virtual MPM driver on the RPM. The first region is the memory space
shared with the virtual MPM driver. The second region is the address
to the register that triggers a interrupt to the RPM.
- reg-names: "vmpm" - string to identify the shared memory space region
"ipc" - string to identify the register that triggers a interrupt
- qcom,ipc-bit-offset: The bit to set in the ipc register that triggers a interrupt
to the RPM
- qcom,gic-parent: phandle to the gic interrupt controller
- qcom,gic-map: Provides a mapping of how a GIC interrupt is connect to a MPM. The
mapping is presented in tuples. Each tuple represents a MPM pin and
which GIC interrupt is routed to it. Since MPM monitors interrupts
only during system wide low power mode, system interrupts originating
from other processors can be ignored and assigned an MPM pin mapping
of 0xff.
- qcom,gpio-parent: phandle to the GPIO interrupt controller
- qcom,gpio-map: Provides a mapping of how a GPIO interrupt is connect to a MPM. The
mapping is presented in tuples. Each tuple represents a MPM pin and
which GIC interrupt is routed to it. Since MPM monitors interrupts
only during system wide low power mode, system interrupts originating
from other processors can be ignored and assigned an MPM pin mapping
of 0xff.
Example:
qcom,mpm@fc4281d0 {
compatible = "qcom,mpm-v2";
reg = <0xfc4281d0 0x1000>, /* MSM_RPM_MPM_BASE 4K*/
<0xfa006000 0x1000>; /* MSM_APCS_GCC_BASE 4K*/
reg-names = "vmpm", "ipc"
interrupts = <0 171 1>;
qcom,ipc-bit-offset = <0>;
qcom,gic-parent = <&intc>;
qcom,gic-map = <25 132>,
<27 111>,
<0xff 48>,
<0xff 51>,
<0xff 52>,
<0xff 53>,
<0xff 54>,
<0xff 55>;
qcom,gpio-parent = <&msmgpio>;
qcom,gpio-map = <1 46>,
<2 150>,
<4 103>,
<5 104>,
<6 105>,
<7 106>,
<8 107>,
<53 37>,
<54 24>,
<55 14>;
};
@@ -0,0 +1,19 @@
* MSM MPM sleep counter (mpm-v2)
The MPM provides a timetick that starts when the device is powered up and
is not reset by any of the boot loaders or the HLOS. The MPM timetick counter
driver provides an api to get this value.
The required nodes for the MPM timetick counter driver are:
- compatible: "qcom,mpm2-sleep-counter"
- reg: Specifies the physical address of the timetick count register.
- clock-frequency: the physical counter frequency.
Example:
qcom,mpm2-sleep-counter@fc4a3000 {
compatible = "qcom,mpm2-sleep-counter";
reg = <0xfc4a3000 0x1000>;
clock-frequency = <32768>;
};
@@ -0,0 +1,18 @@
* MSM-ID
The qcom,msm-id entry specifies the MSM chipset, platform and hardware revision.
It can optionally be an array of these to indicate multiple hardware that use
the same device tree. It is expected that the bootloader will use this
information at boot-up to decide which device tree to use when given multiple
device trees, some of which may not be compatible with the actual hardware. It
is the bootloader's responsibility to pass the correct device tree to the kernel.
Format:
It is expected that the qcom,msm-id entry be at the top level of the device
tree structure. The format of the entry is:
qcom,msm-id = <chipset_id, platform_id, rev_id> [, <c2, p2, r2> ...]
Example:
qcom,msm-id = <126 15 0>;
@@ -0,0 +1,237 @@
MSM Bus Devices
The bus devices (fabrics/NoCs) are the interconnects between various
components on chipsets. These devices form the backbone of the chip
topology. Entire topology of the chipset is built using the
device-tree data of these bus devices.
To add the bus devices following properties are required:
compatible: The bus devices need to be compatible with
msm-bus-fabric
cell-id: A 32 bit integer unique per bus per chipset. The IDs
for buses are in multiples of 1024.
label: Bus name
qcom,fabclk-dual: Dual set (active/sleep) bus clock name
qcom,fabclk-active: Active set bus clock name
The following properties are optional as a bus might not support
these features:
qcom,ntieredslaves: Number of tiered slaves on the bus.
qcom,qos-freq: QoS frequency (In Hz)
qcom,hw-sel: A string which decides whether QoS data
should be sent to RPM, set using BIMC or NoCs.
It can be set to "RPM", "NoC" or "BIMC".
qcom,rpm-en: A boolean flag indicating whether RPM transactions are
supported for nodes of the bus.
qcom,ahb: A boolean flag indicating whether the bus is ahb type.
qcom,virt: A boolean property indicating this is a virtual bus.
reg: Register space of the bus device. Not required in case
the bus is virtual.
The following properties are optional as collecting data via coresight might
not be supported for every bus. The documentation for coresight properties
can be found in:
Documentation/devicetree/bindings/coresight/coresight.txt
coreisght-id Unique integer identifier for the bus.
coresight-name Unique descriptive name of the bus.
coresight-nr-inports Number of input ports on the bus.
coresight-outports List of output port numbers on the bus.
coresight-child-list List of phandles pointing to the children of this
component.
coresight-child-ports List of input port numbers of the children.
Any interconnect on the bus is represented as a child node.
A child node can be of type: master, slave or a gateway.
A gateway is an interconnect between buses and can be of both
master and slave type.
The following properties are available to characterize a child node.
The properties can be chosen depending on the type of child node.
cell-id: For a master the ID is between 0 - 512
For a slave the ID is between 512 - 1024
label: Name of the master/slave/gateway
qcom,masterp: Hardware master port number(s)
qcom,tier: The tier to which a master/slave belongs.
Note that tiering might not be supported on
all architectures.
qcom,hw-sel: A string which decides whether QoS data should be sent
to RPM, set using BIMC or NoCs.
It can be set to "RPM", "NoC" or "BIMC".
qcom,mode: Used for masters on NoC/BIMC. Indicates which of the
four modes (Fixed/Limiter/Bypass/Regulator) the master
belongs to.
qcom,perm-mode: Permissible mode switches. Indicates which of the four
modes are supported of the master node. Generally,
modes are set at boot-up and not switched at run-time.
qcom,qport: QoS port number. This can be different from the
master-port number.
qcom,ws: Window size (in Hz), used for NoC/BIMC masters to
calculate saturation values.
qcom,mas-hw-id: A unique hardware ID agreed upon by processors across
the system. This ID is assigned to every master. It can
be used to send master specific data from
Apps/Modem/LPASS to RPM.
qcom,slv-hw-id: A unique hardware ID agreed upon by processors across
the system. This ID is assigned to every slave. It can
be used to send slave specific data from
Apps/Modem/LPASS to RPM.
qcom,gateway: Flag indicating whether a particular node is a gateway.
qcom,slavep: Hardware slave port number(s).
qcom,buswidth: Width of the interconnect between a node and the bus.
(In Bytes).
qcom,prio-rd: Read priority for a BIMC bus master (Can be 0/1/2)
qcom,prio-wr: Write priority for a BIMC bus master (Can be 0/1/2)
qcom,prio0: Priority low signal for a NoC bus master
(Can be 0/1/2).
qcom,prio1: Priority high signal for a NoC bus master
(Can be 0/1/2)
qcom,dual-conf: Indicates whether a BIMC/NoC master can be configured
in multiple modes at run-time. (Boolean)
qcom,mode-thresh: Threshold mode for a BIMC/NoC master. Beyond a certain
threshold frequency, a threshold mode can be used.
(Can be Fixed/Limiter/Bypass/Regulator)
qcom,bimc,bw: Bandwidth limit for a BIMC master using dual modes.
This bandwidth is used to calculate Grant count and
other parameters used in Limiter and Regular mode
for static BKE configuration. It is defined in KBps.
qcom,bimc,gp: Grant Period for configuring a master in limiter
mode. This is an integer value in micro-seconds.
qcom,bimc,thmp: Medium threshold percentage for BIMC masters.
This percentage is used to calculate medium threshold
value for BIMC Masters in Limiter mode for static
configuration. This can be any integer value between
1 and 100.
qcom,thresh: Beyond this threshold frequency, the mode usage is
switched from mode specified by property qcom,mode
to the one specified by qcom,mode-thresh. In case the
requested IB value falls below this threshold, the mode
is switched back to qcom,mode. Frequency is specified in
KBps.
Example:
msm-mmss-noc@fc478000 {
compatible = "msm-bus-fabric";
reg = <0xfc478000 0x00004000>;
cell-id = <2048>;
label = "msm_mmss_noc";
qcom,fabclk-dual = "bus_clk";
qcom,fabclk-active = "bus_a_clk";
qcom,ntieredslaves = <0>;
qcom,qos-freq = <4800>;
qcom,hw-sel = "NoC";
qcom,rpm-en;
mas-gfx3d {
cell-id = <26>;
label = "mas-gfx3d";
qcom,masterp = <2 3>;
qcom,tier = <2>;
qcom,hw-sel = "NoC";
qcom,perm-mode = "Bypass";
qcom,mode = "Bypass";
qcom,ws = <10000>;
qcom,qport = <2 3>;
qcom,mas-hw-id = <6>;
};
mas-jpeg {
cell-id = <62>;
label = "mas-jpeg";
qcom,masterp = <4>;
qcom,tier = <2>;
qcom,hw-sel = "NoC";
qcom,perm-mode = "Bypass";
qcom,mode = "Bypass";
qcom,qport = <0>;
qcom,ws = <10000>;
qcom,mas-hw-id = <7>;
};
};
msm-bimc@0xfc380000 {
compatible = "msm-bus-fabric";
reg = <0xfc380000 0x0006A000>;
cell-id = <0>;
label = "msm_bimc";
qcom,fabclk-dual = "mem_clk";
qcom,fabclk-active = "mem_a_clk";
qcom,ntieredslaves = <0>;
qcom,qos-freq = <19200>;
qcom,hw-sel = "BIMC";
qcom,rpm-en;
coresight-id = <55>;
coresight-name = "coresight-bimc";
coresight-nr-inports = <0>;
coresight-outports = <0>;
coresight-child-list = <&funnel_in1>;
coresight-child-ports = <3>;
mas-ampss-m0 {
cell-id = <1>;
label = "mas-ampss-m0";
qcom,masterp = <0>;
qcom,tier = <2>;
qcom,hw-sel = "BIMC";
qcom,mode = "Limiter";
qcom,qport = <0>;
qcom,ws = <10000>;
qcom,mas-hw-id = <0>;
qcom,prio-rd = <0>;
qcom,prio-wr = <0>;
qcom,mode-thresh = "Fixed";
qcom,thresh = <2000000>;
qcom,dual-conf;
qcom,bimc,bw = <300000>;
qcom,bimc,gp = <5>;
qcom,bimc,thmp = <50>;
};
};
The bus scaling driver also provides the ability to configure
bus performance parameters across the entire chip-set.
Various clients use MSM scaling APIs to request bandwidth
between multiple master-slave pairs. The bus driver then finds
the optimal path between the master and the slave, and aggregates
the bandwidth and clock requests for all master-slave pairs on
that path, and programs hardware accordingly.
The device-tree data required for bus-scaling can be embedded within
the clients' device nodes. The clients can register with the bus driver
using the following properties:
- qcom,msm-bus,name: String representing the client-name
- qcom,msm-bus,num-cases: Total number of usecases
- qcom,msm-bus,active-only: Boolean context flag for requests in active or
dual (active & sleep) contex
- qcom,msm-bus,num-paths: Total number of master-slave pairs
- qcom,msm-bus,vectors-KBps: Arrays of unsigned integers representing:
master-id, slave-id, arbitrated bandwidth
in KBps, instantaneous bandwidth in KBps
Example:
qcom,msm-bus,name = "client-name";
qcom,msm-bus,num-cases = <3>;
qcom,msm-bus,active-only;
qcom,msm-bus,num-paths = <2>;
qcom,msm-bus,vectors =
<22 512 0 0>, <26 512 0 0>,
<22 512 320000 3200000>, <26 512 3200000 3200000>,
<22 512 160000 1600000>, <26 512 1600000 1600000>;
@@ -0,0 +1,50 @@
IOMMU Domains
An IOMMU domain is a collection of IOMMU context banks and an optional
virtual address space that is to be used with the domain. Domains that are
defined will be created at bootup and associated with an iommu group. Clients
can then refer to the iommu group and perform operations on the iommu group
instead of individual devices/contexts.
Required properties
- compatible: "qcom,iommu-domains"
- At least one child that defines a domain is required with the
following properties:
- label: Name of the domain
- qcom,iommu-contexts: List of phandles to context that belongs to
this domain.
Optional properties
- qcom,virtual-addr-pool: List of <start_address size> pairs
that define the virtual address space for this domain.
- qcom,secure-domain: boolean indicating that this is a secure
domain that is to be programmed by Trustzone.
- qcom,l2-redirect: boolean indicating that page tables should
be cached in L2 cache.
Example:
qcom,iommu-domains {
compatible = "qcom,iommu-domains";
qcom,iommu-domain1 {
label = "lpass_secure";
qcom,iommu-contexts = <&lpass_q6_fw>;
qcom,virtual-addr-pool = <0x00000000 0x0FFFFFFF
0xF0000000 0x0FFFFFFF>;
};
qcom,iommu-domain2 {
label = "lpass_audio";
qcom,iommu-contexts = <&lpass_audio_shared>;
qcom,virtual-addr-pool = <0x10000000 0x0FFFFFFF>;
};
qcom,iommu-domain3 {
label = "lpass_video";
qcom,iommu-contexts = <&lpass_video_shared>;
qcom,virtual-addr-pool = <0x20000000 0x0FFFFFFF>;
};
};
@@ -0,0 +1,57 @@
ION Memory Manager (ION)
ION is a memory manager that allows for sharing of buffers between different
processes and between user space and kernel space. ION manages different
memory spaces by separating the memory spaces into "heaps". Depending on the
type of heap ION must reserve memory using the msm specific memory reservation
bindings (see Documentation/devicetree/bindings/arm/msm/memory-reserve.txt).
Required properties for Ion
- compatible: "qcom,msm-ion"
All child nodes of a qcom,msm-ion node are interpreted as Ion heap
configurations.
Required properties for Ion heaps
- reg: The ID of the ION heap.
Optional properties for Ion heaps
- compatible: "qcom,msm-ion-reserve" This is required if memory is to be reserved
as specified by qcom,memory-reservation-size below.
- qcom,heap-align: Alignment of start of the memory in the heap.
- qcom,heap-adjacent: ID of heap this heap needs to be adjacent to.
- qcom,memory-reservation-size: size of reserved memory for the ION heap.
- qcom,memory-reservation-type: type of memory to be reserved
(see memory-reserve.txt for information about memory reservations)
Example:
qcom,ion {
compatible = "qcom,msm-ion";
#address-cells = <1>;
#size-cells = <0>;
qcom,ion-heap@30 { /* SYSTEM HEAP */
reg = <30>;
};
qcom,ion-heap@8 { /* CP_MM HEAP */
compatible = "qcom,msm-ion-reserve";
reg = <8>;
qcom,heap-align = <0x1000>;
qcom,memory-reservation-type = "EBI1"; /* reserve EBI memory */
qcom,memory-reservation-size = <0x7800000>;
};
qcom,ion-heap@29 { /* FIRMWARE HEAP */
compatible = "qcom,msm-ion-reserve";
reg = <29>;
qcom,heap-align = <0x20000>;
qcom,heap-adjacent = <8>;
qcom,memory-reservation-type = "EBI1"; /* reserve EBI memory */
qcom,memory-reservation-size = <0xA00000>;
};
@@ -0,0 +1,20 @@
Memory Hole
The msm_mem_hole module exists for the express purpose of removing
memory via the msm memory-remove mechanism (see
memory-reserve.txt). Compiling this module into a kernel is
essentially the means by which any nodes in the device tree with
compatible = "qcom,msm-mem-hole" will be "activated", thus providing a
convenient mechanism for enabling/disabling memory removal
(qcom,memory-*).
Required properties
- compatible: "qcom,msm-mem-hole"
qcom,msm-mem-hole {
compatible = "qcom,msm-mem-hole";
qcom,memblock-remove = <0x8100000 0x7e00000>; /* Address and Size of Hole */
};
@@ -0,0 +1,21 @@
Register Trace Buffer (RTB)
The RTB is used to log discrete events in the system in an uncached buffer that
can be post processed from RAM dumps. The RTB must reserve memory using
the msm specific memory reservation bindings (see
Documentation/devicetree/bindings/arm/msm/memory-reserve.txt).
Required properties
- compatible: "qcom,msm-rtb"
- qcom,memory-reservation-size: size of reserved memory for the RTB buffer
- qcom,memory-reservation-type: type of memory to be reserved
(see memory-reserve.txt for information about memory reservations)
Example:
qcom,msm-rtb {
compatible = "qcom,msm-rtb";
qcom,memory-reservation-type = "EBI1";
qcom,memory-reservation-size = <0x100000>; /* 1M EBI1 buffer */
};
@@ -0,0 +1,105 @@
MSM thermal driver (MSM_THERMAL)
MSM_THERMAL is a kernel platform driver which regulates thermal conditions
on the device during kernel boot. The goal of MSM_THERMAL is to prevent the
temperature of the system from exceeding a thermal limit at which it cannot
operate. Examples are CPU junction thermal limit, or POP memory thermal limit.
The MSM_THERMAL driver polls the TSENS sensor hardware during boot, and
reduces the maximum CPU frequency allowed in steps, to limit power/thermal
output when a threshold temperature is crossed. It restores the maximum CPU
frequency allowed in the same stepwise fashion when the threshold temperature
(with hysteresis gap) is cleared.
The devicetree representation of the MSM_THERMAL block should be:
Required properties
- compatible: "qcom,msm-thermal"
- qcom,sensor-id: The id of the TSENS sensor polled for temperature.
Typically the sensor closest to CPU0.
- qcom,poll-ms: Sampling interval to read sensor, in ms.
- qcom,limit-temp: Threshold temperature to start stepping CPU down, in degC.
- qcom,temp-hysteresis: Degrees C below threshold temperature to step CPU up.
- qcom,freq-step: Number of frequency steps to take on each CPU mitigation.
Optional properties
- qcom,freq-control-mask: The cpu mask that will be used to determine if a
core can be used for freq control.
- qcom,core-limit-temp: Threshold temperature to start shutting down cores
in degC
- qcom,core-temp-hysterisis: Degrees C below which the cores will be brought
online in sequence.
- qcom,core-control-mask: The cpu mask that will be used to determine if a
core can be controlled or not. A mask of 0 indicates
the feature is disabled.
- qcom,vdd-restriction-temp: When temperature is below this threshold, will
enable vdd restriction which will set higher voltage on
key voltage rails, in degC.
- qcom,vdd-restriction-temp-hysteresis: When temperature is above this threshold
will disable vdd restriction on key rails, in degC.
- qcom,pmic-sw-mode-temp: Threshold temperature to disable auto mode on the
rail, in degC. If this property exists,
qcom,pmic-sw-mode-temp-hysteresis and
qcom,pmic-sw-mode-regs need to exist, otherwise return error.
- qcom,pmic-sw-mode-temp-hysteresis: Degree below threshold temperature to
enable auto mode on the rail, in degC. If this property exists,
qcom,pmic-sw-mode-temp and qcom,pmic-sw-mode-regs need to
exist, otherwise return error.
- qcom,pmic-sw-mode-regs: Array of the regulator names that will want to
disable/enable automode based on the threshold. If this
property exists, qcom,pmic-sw-mode-temp and
qcom,pmic-sw-mode-temp-hysteresis need to exist, otherwise
return error. Also, if this property is defined, will have to
define <consumer_supply_name>-supply = <&phandle_of_regulator>
- <consumer_supply_name>-supply = <&phandle_of_regulator>: consumer_supply_name
is the name that's defined in thermal driver.
phandle_of_regulator is defined by reuglator device tree.
Optional child nodes
- qcom,<vdd restriction child node name>: Define the name of the child node.
If this property exisits, qcom,vdd-rstr-reg, qcom,levels
need to exist. qcom,min-level is optional if qcom,freq-req
exists, otherwise it's required.
- qcom,vdd-rstr-reg: Name of the rail
- qcom,levels: Array of the level values. Unit is corner voltage for voltage request
or kHz for frequency request.
- qcom,min-level: Request this level as minimum level when disabling voltage
restriction. Unit is corner voltage for voltage request.
This will not be required if qcom,freq-req exists.
- qcom,freq-req: Flag to determine if we should restrict frequency on this rail
instead of voltage.
Example:
qcom,msm-thermal {
compatible = "qcom,msm-thermal";
qcom,sensor-id = <0>;
qcom,poll-ms = <250>;
qcom,limit-temp = <60>;
qcom,temp-hysteresis = <10>;
qcom,freq-step = <2>;
qcom,freq-control-mask = <0xf>
qcom,core-limit-temp = <90>;
qcom,core-temp-hysterisis = <10>;
qcom,core-control-mask = <7>;
qcom,pmic-sw-mode-temp = <90>;
qcom,pmic-sw-mode-temp-hysteresis = <80>;
qcom,pmic-sw-mode-regs = "vdd_dig";
qcom,vdd-restriction-temp = <5>;
qcom,vdd-restriction-temp-hysteresis = <10>;
vdd_dig-supply=<&pm8841_s2_floor_corner>
qcom,vdd-dig-rstr{
qcom,vdd-rstr-reg = "vdd_dig";
qcom,levels = <5 7 7>; /* Nominal, Super Turbo, Super Turbo */
qcom,min-level = <1>; /* No Request */
};
qcom,vdd-apps-rstr{
qcom,vdd-rstr-reg = "vdd_apps";
qcom,levels = <1881600 1958400 2265600>;
qcom,freq-req;
};
};
@@ -0,0 +1,95 @@
TSPP Driver
For information on the TSPP driver, please refer to the TSPP driver
documentation: Documentation/arm/msm/tspp.txt.
The devicetree representation of the TSPP block should be:
Required properties:
- compatible: "qcom,msm_tspp"
- cell-index: <0> - represents device ID.
- reg: physical memory base addresses and sizes for the following:
TSIF0, TSIF1, TSPP and TSPP_BAM.
- reg-names: names of the memory regions.
- interrupts: represents IRQ numbers for the following:
TSIF_TSPP_IRQ, TSIF0_IRQ, TSIF1_IRQ, TSIF_BAM_IRQ.
- interrupt-names: TSPP, TSIF and BAM interrupt names.
- qcom,tsif-pclk: interface clock name.
- qcom,tsif-ref-clk: reference clock name.
The driver uses clk_get to get the clocks by name. The clocks
should be defined in the relevant clock file (e.g. clock-8974.c).
- gpios: GPIO numbers for TSIF0 (CLK, EN, DATA and SYNC) and TSIF1 (same).
- qcom,gpio-names: GPIO names - strings describing the GPIO functionality.
- qcom,gpios-func: GPIO functionality according to the GPIO functionality table.
GPIO pins can have more than a single functionality, and the TSPP driver
is responsible for configuring the GPIOs to work in TSIF functionality
based on this parameter.
Note: it is assumed that the functionality value (e.g. 1 in 8974 case)
is applicable to all TSIF GPIOs.
Optional properties:
- vdd_cx-supply: Reference to the regulator that supplies the CX rail.
Some hardware platforms (e.g. 8974-v2) require the voltage of the rail
supplying power to the TSIF hardware block to be elevated before
enabling the TSIF clocks.
- Refer to "Documentation/devicetree/bindings/arm/msm/msm_bus.txt" for
the below optional properties:
- qcom,msm-bus,name
- qcom,msm-bus,num-cases
- qcom,msm-bus,active-only
- qcom,msm-bus,num-paths
- qcom,msm-bus,vectors-KBps
Example (for 8974 platform, avaialble at msm8974.dtsi):
tspp: msm_tspp@f99d8000 {
compatible = "qcom,msm_tspp";
cell-index = <0>;
reg = <0xf99d8000 0x1000>, /* MSM_TSIF0_PHYS */
<0xf99d9000 0x1000>, /* MSM_TSIF1_PHYS */
<0xf99da000 0x1000>, /* MSM_TSPP_PHYS */
<0xf99c4000 0x14000>; /* MSM_TSPP_BAM_PHYS */
reg-names = "MSM_TSIF0_PHYS",
"MSM_TSIF1_PHYS",
"MSM_TSPP_PHYS",
"MSM_TSPP_BAM_PHYS";
interrupts = <0 153 0>, /* TSIF_TSPP_IRQ */
<0 151 0>, /* TSIF0_IRQ */
<0 152 0>, /* TSIF1_IRQ */
<0 154 0>; /* TSIF_BAM_IRQ */
interrupt-names = "TSIF_TSPP_IRQ",
"TSIF0_IRQ",
"TSIF1_IRQ",
"TSIF_BAM_IRQ";
qcom,tsif-pclk = "iface_clk";
qcom,tsif-ref-clk = "ref_clk";
gpios = <&msmgpio 89 0>, /* TSIF0 CLK */
<&msmgpio 90 0>, /* TSIF0 EN */
<&msmgpio 91 0>, /* TSIF0 DATA */
<&msmgpio 92 0>, /* TSIF0 SYNC */
<&msmgpio 93 0>, /* TSIF1 CLK */
<&msmgpio 94 0>, /* TSIF1 EN */
<&msmgpio 95 0>, /* TSIF1 DATA */
<&msmgpio 96 0>; /* TSIF1 SYNC */
qcom,gpio-names = "tsif_clk",
"tsif_en",
"tsif_data",
"tsif_sync",
"tsif_clk",
"tsif_en",
"tsif_data",
"tsif_sync";
qcom,gpios-func = <1>;
qcom,msm-bus,name = "tsif";
qcom,msm-bus,num-cases = <2>;
qcom,msm-bus,active-only = <0>;
qcom,msm-bus,num-paths = <1>;
qcom,msm-bus,vectors-KBps =
<82 512 0 0>, /* No vote */
<82 512 12288 24576>; /* Max. bandwidth, 2xTSIF, each max of 96Mbps */
};
@@ -0,0 +1,36 @@
* Qualcomm MSM Watchdog
Watchdog timer is configured with a bark and a bite time.
if the watchdog is not "pet" at regular intervals, the system
is assumed to have become non responsive and needs to be reset.
A warning in the form of a bark timeout leads to a bark interrupt
and a kernel panic. if the watchdog timer is still not reset,
a bite timeout occurs, which is an interrupt in the secure mode,
which leads to a reset of the SOC via the secure watchdog. The
driver needs the petting time, and the bark timeout to be programmed
into the watchdog, as well as the bark and bite irqs.
The device tree parameters for the watchdog are:
Required properties:
- compatible : "qcom,msm-watchdog"
- reg : offset and length of the register set for the watchdog block.
- interrupts : should contain bark and bite irq numbers
- qcom,pet-time : Non zero time interval at which watchdog should be pet in ms.
- qcom,bark-time : Non zero timeout value for a watchdog bark in ms.
Optional properties:
- qcom,ipi-ping : (boolean) send keep alive ping to other cpus if present
Example:
qcom,wdt@f9017000 {
compatible = "qcom,msm-watchdog";
reg = <0xf9017000 0x1000>;
interrupts = <0 3 0>, <0 4 0>;
qcom,bark-time = <11000>;
qcom,pet-time = <10000>;
qcom,ipi-ping;
};
@@ -0,0 +1,37 @@
* MSM PM-8x60
PM-8x60 is the low power management device for MSM (Snapdragon class) chipsets.
This device sets up different components to do low power modes and registers with
the kernel to be notified of idle and suspend states and when called, follows
through the set of instructions in putting the application cores to the lowest
power mode possible.
The PC debug counter reserves 16 registers in the IMEM memory space which maintains
a count on the state of power collapse on each core. This count will be useful to
debug the power collapse state on each core.
The required properties for PM-8x60 are:
- compatible: "qcom,pm-8x60"
The optional properties are:
- reg: physical IMEM address reserved for PC counters and the size
- qcom,use-sync-timer: Indicates whether the target uses the synchronized QTimer.
- qcom,pc-mode: Indicates the type of power collapse used by the target. The
valid values for this are:
"tz_l2_int" (Power collapse terminates in TZ; integrated L2 cache controller)
"no_tz_l2_ext", (Power collapse doesn't terminate in TZ; external L2 cache controller)
"tz_l2_ext" (Power collapse terminates in TZ; external L2 cache controller)
- qcom,saw-turns-off-pll: Version of SAW2.1 or can turn off the HFPLL, when
doing power collapse and so the core need to switch to Global PLL before
PC.
- qcom,pc-resets-timer: Indicates that the timer gets reset during power collapse.
Example:
qcom,pm-8x60@fe800664 {
compatible = "qcom,pm-8x60";
reg = <0xfe800664 0x40>;
qcom,pc-mode = "tz_l2_int";
qcom,use-sync-timer;
};
@@ -0,0 +1,40 @@
* Power Management boot configuration (pm-boot)
Low power management drivers need to specify the warmboot entry path for the
application processors to resume from sleep/suspend. The boot configuration
can vary if the core does/does not support a secure boot mode. The secure
boot configuration boots the core sets up the core sub system registers and
calls into the kernel entry point. In the absence of a secure boot mode, the
core when powered on from reset will need to be configured with the warmboot
entry pointer. The physical and the virtual address for the entry pointer
need to provided to the driver.
The device tree parameters for pm-boot are:
Required parameters:
- compatible: Must be "qcom,pm-boot"
- qcom,mode: The mode that the target will use for booting
"tz" = MSM_PM_BOOT_CONFIG_TZ,
"reset_vector_phys" = MSM_PM_BOOT_CONFIG_RESET_VECTOR_PHYS,
"reset_vector_virt" = MSM_PM_BOOT_CONFIG_RESET_VECTOR_VIRT,
"remap_boot_addr" = MSM_PM_BOOT_CONFIG_REMAP_BOOT_ADDR,
Optional parameters (based on the mode chosen):
- qcom,phy-addr: The physical address that will be used for warmboot entry if
the processor remap register can be programmed.
Needed for modes = { MSM_PM_BOOT_CONFIG_RESET_VECTOR_PHYS,
MSM_PM_BOOT_CONFIG_REMAP_BOOT_ADDR }
- qcom,virt-addr: The virtual address at which the processor start booting from
Needed for modes = { MSM_PM_BOOT_CONFIG_RESET_VECTOR_VIRT,
MSM_PM_BOOT_CONFIG_REMAP_BOOT_ADDR }
Example:
qcom,pm-boot {
compatible = "qcom,pm-boot";
qcom,mode = "tz"; /* MSM_PM_BOOT_CONFIG_TZ */
};
@@ -0,0 +1,35 @@
* MSM PM SNOC client
MSM PM SNOC client device is used to setup a bus request for 100 Mhz for the
SNOC bus when the Apps cores are active. This bus request helps mitigate the
exit latency from power collapse in cases where there aren't any active bus
requests for SNOC.
This device is dependent on the pm-8x60 device, which configures the low power
mode of respective cores.
The required properties of this device are:
- compatible: qcom,pm-snoc-client
- qcom,msm-bus,name: String representing the client-name
- qcom,msm-bus,num-cases: Total number of usecases
- qcom,msm-bus,active-only: Boolean context flag for requests in active or
dual (active & sleep) contex
- qcom,msm-bus,num-paths: Total number of master-slave pairs
- qcom,msm-bus,vectors-KBps: Arrays of unsigned integers representing:
master-id, slave-id, arbitrated bandwidth
in KBps, instantaneous bandwidth in KBps
Example:
qcom,pm-snoc-client {
compatible = "qcom,pm-snoc-client";
qcom,msm-bus,name = "ocimem_snoc";
qcom,msm-bus,num-cases = <2>;
qcom,msm-bus,active-only;
qcom,msm-bus,num-paths = <1>;
qcom,msm-bus,vectors =
<22 512 0 0>,
<22 512 320000 3200000>;
};
@@ -0,0 +1,40 @@
* Qcom Performance Monitor Units
Qcom cores have several PMUs for counting CPU side, L2 and bus side events.
For the L1CC PMU:
In most cases the L1 cache controller PMU is a per cpu unit. The irq-is-percpu
flag becomes a requirement if this is the case.
Required Properties:
- compatible : Should be "qcom,krait-pmu"
- interrupts : 1 combined interrupt or 1 per core. See the devicetree/bindings/gic.txt for more details on this format.
Optional:
- qcom,irq-is-percpu: Define this if the IRQ of the PMU is a PPI. This will tell perf to use
the per_cpu IRQ API for request and free.
Example:
arm-pmu {
compatible = "qcom,krait-pmu";
qcom,irq-is-percpu;
interrupts = <1 7 0xf00>;
};
For the L2CC PMU:
If the L2 cache controller PMU is available, its DT bindings should be defined as
follows.
Required Properties:
- compatible: Should be "qcom,l2-pmu"
- interrupts : 1 combined interrupt.
Example:
l2-pmu {
compatible = "qcom,l2-pmu";
interrupts = <0 1 0>;
};
@@ -0,0 +1,43 @@
* RPM Log
RPM maintains Ulog in the RPM RAM. A device tree node is added
that will hold the address of the RPM RAM region from where
Ulog is read. The physical address from the RPM RAM region
contains a header where various parameters to read the log are
defined. These parameter's offsets in the header are also stored
as a part of the device tree node.
The required properties for rpm-log are:
- compatible: "qcom,rpm-log"
- reg: Specifies the base physical address and the size of the RPM
registers from where ulog is read.
- qcom,rpm-addr-phys: RPM reads physical address of the RPM RAM region
differently when compared to Apps. Physical address of
the RPM RAM region is at an offset when seen from Apps.
This property specifies the offset which will get added
to the physical address of RPM RAM to make it
accessible to the Apps.
- qcom,offset-version: Offset from the start of the phys_addr_base where version
information is stored.
- qcom,offset-page-buffer-addr: Offset from the start of the phys_addr_base
where raw log start address is stored. Raw log
start address is the start of raw log in the
RPM address space as it should be seen from rpm.
- qcom,offset-log-len: Offset from the start of the phy_addr_base where log
length is stored.
- qcom,offset-log-len-mask: Offset from the start of the phy_addr_base where
log length mask is stored.
- qcom,offset-page-indices: Offset from the start of the phy_addr_base where
index to the writer is stored.
Example:
qcom,rpm-log@fc19dc00 {
compatible = "qcom,rpm-log";
reg = <0xfc19dc00 0x2000>,
qcom,offset-rpm-addr = <0xfc000000>;
qcom,offset-version = <4>;
qcom,offset-page-buffer-addr = <36>;
qcom,offset-log-len = <40>;
qcom,offset-log-len-mask = <44>;
qcom,offset-page-indices = <56>;
};
@@ -0,0 +1,217 @@
Qualcomm RPM Regulators
rpm-regulator-smd is a regulator driver which supports regulators inside of
PMICs which are controlled by the RPM processor. Communication with the RPM
processor takes place over SMD.
Required structure:
- RPM regulators must be described in two levels of devices nodes. The first
level describes the interface with the RPM. The second level describes
properties of one regulator framework interface (of potentially many) to
the regulator.
[First Level Nodes]
Required properties:
- compatible: Must be "qcom,rpm-regulator-smd-resource"
- qcom,resource-name: Resource name string for this regulator to be used in RPM
transactions. Length is 4 characters max.
- qcom,resource-id: Resource instance ID for this regulator to be used in RPM
transactions.
- qcom,regulator-type: Type of this regulator. Supported values are:
0 = LDO
1 = SMPS
2 = VS
3 = NCP
Optional properties:
- qcom,allow-atomic: Flag specifying if atomic access is allowed for this
regulator. Supported values are:
0 or not present = mutex locks used
1 = spinlocks used
- qcom,enable-time: Time in us to delay after enabling the regulator
- qcom,hpm-min-load: Load current in uA which corresponds to the minimum load
which requires the regulator to be in high power mode.
[Second Level Nodes]
Required properties:
- compatible: Must be "qcom,rpm-regulator-smd"
- regulator-name: A string used as a descriptive name for regulator outputs
- qcom,set: Specifies which sets that requests made with this
regulator interface should be sent to. Regulator
requests sent in the active set take effect immediately.
Requests sent in the sleep set take effect when the Apps
processor transitions into RPM assisted power collapse.
Supported values are:
1 = Active set only
2 = Sleep set only
3 = Both active and sleep sets
Optional properties:
- parent-supply: phandle to the parent supply/regulator node
- qcom,system-load: Load in uA present on regulator that is not
captured by any consumer request
- qcom,use-voltage-corner: Flag that signifies if regulator_set_voltage
calls should modify the corner parameter instead
of the voltage parameter. When used, voltages
specified inside of the regulator framework
represent corners that have been incremented by
1. This value shift is necessary to work around
limitations in the regulator framework which
treat 0 uV as an error.
- qcom,use-voltage-floor-corner: Flag that signifies if regulator_set_voltage
calls should modify the floor corner parameter
instead of the voltage parameter. When used,
voltages specified inside of the regulator
framework represent corners that have been
incremented by 1. The properties
qcom,use-voltage-corner and
qcom,use-voltage-floor-corner are mutually
exclusive. Only one may be specified for a
given regulator.
- qcom,always-send-voltage: Flag which indicates that updates to the voltage
or voltage corner set point should always be
sent immediately to the RPM. If this flag is
not specified, then voltage set point updates
are only sent if the given regulator has also
been enabled by a Linux consumer.
- qcom,always-send-current: Flag which indicates that updates to the load
current should always be sent immediately to the
RPM. If this flag is not specified, then load
current updates are only sent if the given
regulator has also been enabled by a Linux
consumer.
The following properties specify initial values for parameters to be sent to the
RPM in regulator requests.
- qcom,init-enable: 0 = regulator disabled
1 = regulator enabled
- qcom,init-voltage: Voltage in uV
- qcom,init-current: Current in mA
- qcom,init-ldo-mode: Operating mode to be used with LDO regulators
Supported values are:
0 = mode determined by current requests
1 = force HPM (NPM)
- qcom,init-smps-mode: Operating mode to be used with SMPS regulators
Supported values are:
0 = auto; hardware determines mode
1 = mode determined by current requests
2 = force HPM (PWM)
- qcom,init-pin-ctrl-enable: Bit mask specifying which hardware pins should be
used to enable the regulator, if any; supported
bits are:
0 = ignore all hardware enable signals
BIT(0) = follow HW0_EN signal
BIT(1) = follow HW1_EN signal
BIT(2) = follow HW2_EN signal
BIT(3) = follow HW3_EN signal
- qcom,init-pin-ctrl-mode: Bit mask specifying which hardware pins should be
used to force the regulator into high power
mode, if any. Supported bits are:
0 = ignore all hardware enable signals
BIT(0) = follow HW0_EN signal
BIT(1) = follow HW1_EN signal
BIT(2) = follow HW2_EN signal
BIT(3) = follow HW3_EN signal
BIT(4) = follow PMIC awake state
- qcom,init-frequency: Switching frequency divisor for SMPS regulators.
Supported values are n = 0 to 31 where
freq = 19.2 MHz / (n + 1).
- qcom,init-head-room: Voltage head room in mV required for the
regulator. This head room value should be used
in situations where the device connected to the
output of the regulator has low noise tolerance.
Note that the RPM independently enforces a
safety head room value for subregulated LDOs
which is sufficient to account for LDO drop-out
voltage.
- qcom,init-quiet-mode: Specify that quiet mode is needed for an SMPS
regulator in order to have lower output noise.
Supported values are:
0 = No quiet mode
1 = Quiet mode
2 = Super quiet mode
- qcom,init-freq-reason: Consumer requiring specified frequency for an
SMPS regulator. Supported values are:
0 = None
1 = Bluetooth
2 = GPS
4 = WLAN
8 = WAN
- qcom,init-voltage-corner: Performance corner to use in order to determine
voltage set point. This value corresponds to
the actual value that will be sent and is not
incremented by 1 like the values used inside of
the regulator framework. The meaning of corner
values is set by the RPM. It is possible that
different regulators on a given platform or
similar regulators on different platforms will
utilize different corner values. These are
corner values supported on MSM8974 for PMIC
PM8841 SMPS 2 (VDD_Dig); nominal voltages for
these corners are also shown:
0 = None (don't care)
1 = Retention (0.5000 V)
2 = SVS Krait (0.7250 V)
3 = SVS SOC (0.8125 V)
4 = Normal (0.9000 V)
5 = Turbo (0.9875 V)
6 = Super Turbo (1.0500 V)
- qcom,init-disallow-bypass: Specify that bypass mode should not be used for a
given LDO regulator. When in bypass mode, an
LDO performs no regulation and acts as a simple
switch. The RPM can utilize this mode for an
LDO that is subregulated from an SMPS when it is
possible to reduce the SMPS voltage to the
desired LDO output level. Bypass mode may be
disallowed if lower LDO output noise is
required. Supported values are:
0 = Allow RPM to utilize LDO bypass mode
if possible
1 = Disallow LDO bypass mode
- qcom,init-voltage-floor-corner: Minimum performance corner to use if any
processor in the system is awake. This property
supports the same values as
qcom,init-voltage-corner.
All properties specified within the core regulator framework can also be used in
second level nodes. These bindings can be found in:
Documentation/devicetree/bindings/regulator/regulator.txt.
Example:
rpm-regulator-smpb1 {
qcom,resource-name = "smpb";
qcom,resource-id = <1>;
qcom,regulator-type = <1>;
qcom,hpm-min-load = <100000>;
compatible = "qcom,rpm-regulator-smd-resource";
status = "disabled";
pm8841_s1: regulator-s1 {
regulator-name = "8841_s1";
qcom,set = <3>;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1150000>;
qcom,init-voltage = <1150000>;
compatible = "qcom,rpm-regulator-smd";
};
pm8841_s1_ao: regulator-s1-ao {
regulator-name = "8841_s1_ao";
qcom,set = <1>;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1150000>;
compatible = "qcom,rpm-regulator-smd";
};
pm8841_s1_corner: regulator-s1-corner {
regulator-name = "8841_s1_corner";
qcom,set = <3>;
regulator-min-microvolt = <1>;
regulator-max-microvolt = <6>;
qcom,init-voltage-corner = <3>;
qcom,use-voltage-corner;
compatible = "qcom,rpm-regulator-smd";
};
};
@@ -0,0 +1,41 @@
Resource Power Manager(RPM)
RPM is a dedicated hardware engine for managing shared SoC resources,
which includes buses, clocks, power rails, etc. The goal of RPM is
to achieve the maximum power savings while satisfying the SoC's
operational and performance requirements. RPM accepts resource
requests from multiple RPM masters. It arbitrates and aggregates the
requests, and configures the shared resources. The RPM masters are
the application processor, the modem processor, as well as hardware
accelerators. The RPM driver communicates with the hardware engine using
SMD.
The devicetree representation of the SPM block should be:
Required properties
- compatible: "qcom,rpm-smd"
- rpm-channel-name: The string corresponding to the channel name of the
peripheral subsystem
- rpm-channel-type: The interal SMD edge for this subsystem found in
<mach/msm_smd.h>
Optional properties
- rpm-standlone: Allow the driver to run in standalone mode. This is a
suggestion to the RPM driver and if the SMD
channel is made available for RPM, the driver
would continue to send requests to RPM processor,
but if the SMD channel is unavailable, driver will
return success even though the data is not sent
to the RPM processor. In the absence of this
option, the driver will fail if the SMD channel
is unavailable.
Example:
qcom,rpm-smd {
compatible = "qcom,rpm-smd"
qcom,rpm-channel-name = "rpm_requests";
qcom,rpm-channel-type = 15; /* SMD_APPS_RPM */
}
}
@@ -0,0 +1,22 @@
* RPM Sleep Stats
RPM maintains sleep data in the RPM RAM. A device tree node is added
that will hold the address of the RPM RAM from where sleep stats are read.
Additionally a version number is added to distinguish the type of data
structure being read from the RAM.
The required properties for rpm-stats are:
- compatible: "qcom,rpm-stats"
- reg: The address on the RPM RAM from where stats are read.
- reg-names: Name given the register holding address.
- qcom,sleep-stats-version: Version number.
Example:
qcom,rpm-stats@fc19dbd0 {
compatible = "qcom,rpm-stats";
reg = <0xfc19dbd0 0x1000>;
reg-names = "phys_addr_base";
qcom,sleep-stats-version = <2>;
};
@@ -0,0 +1,40 @@
Qualcomm Shared Memory TTY Driver (smdtty)
[Root level node]
Required properties:
-compatible : should be "qcom,smdtty"
[Second level nodes]
qcom,smdtty-port-names
Required properties:
-qcom,smdtty-remote: the remote subsystem name
-qcom,smdtty-port-name : the smd channel name
Optional properties:
-qcom,smdtty-dev-name : the smdtty device name
Required alias:
- The index into TTY subsystem is specified via an alias with the following format
'smd{n}' where n is the tty device index.
Example:
aliases {
smd1 = &smdtty_apps_fm;
smd36 = &smdtty_loopback;
};
qcom,smdtty {
compatible = "qcom,smdtty";
smdtty_apps_fm: qcom,smdtty-apps-fm {
qcom,smdtty-remote = "wcnss";
qcom,smdtty-port-name = "APPS_FM";
};
smdtty_loopback: smdtty-loopback {
qcom,smdtty-remote = "modem";
qcom,smdtty-port-name = "LOOPBACK";
qcom,smdtty-dev-name = "LOOPBACK_TTY";
};
};
@@ -0,0 +1,107 @@
Qualcomm Shared Memory
[Root level node]
Required properties:
-compatible : should be "qcom,smem"
-reg : the location and size of smem, the irq register base memory, and
optionally any auxiliary smem areas
-reg-names : "smem" - string to identify the shared memory region
"irq-reg-base" - string to identify the irq register region
"aux-mem1", "aux-mem2", "aux-mem3", ... - optional strings to
identify any auxiliary shared memory regions
[Second level nodes]
qcom,smd
Required properties:
-compatible : should be "qcom,smd"
-qcom,smd-edge : the smd edge
-qcom,smd-irq-offset : the offset into the irq register base memory for sending
interrupts
-qcom,smd-irq-bitmask : the sending irq bitmask
-interrupts : the receiving interrupt line
Optional properties:
-qcom,pil-string : the name to use when loading this edge
-qcom,irq-no-suspend: configure the incoming irq line as active during suspend
qcom,smsm
Required properties:
-compatible : should be "qcom,smsm"
-qcom,smsm-edge : the smsm edge
-qcom,smsm-irq-offset : the offset into the irq register base memory for sending
interrupts
-qcom,smsm-irq-bitmask : the sending irq bitmask
-interrupts : the receiving interrupt line
Example:
qcom,smem@fa00000 {
compatible = "qcom,smem";
reg = <0xfa00000 0x200000>,
<0xfa006000 0x1000>,
<0xfc428000 0x4000>;
reg-names = "smem", "irq-reg-base", "aux-mem1";
qcom,smd-modem {
compatible = "qcom,smd";
qcom,smd-edge = <0>;
qcom,smd-irq-offset = <0x8>;
qcom,smd-irq-bitmask = <0x1000>;
qcom,pil-string = "modem";
interrupts = <0 25 1>;
};
qcom,smsm-modem {
compatible = "qcom,smsm";
qcom,smsm-edge = <0>;
qcom,smsm-irq-offset = <0x8>;
qcom,smsm-irq-bitmask = <0x2000>;
interrupts = <0 26 1>;
};
qcom,smd-adsp {
compatible = "qcom,smd";
qcom,smd-edge = <1>;
qcom,smd-irq-offset = <0x8>;
qcom,smd-irq-bitmask = <0x100>;
qcom,pil-string = "adsp";
interrupts = <0 156 1>;
};
qcom,smsm-adsp {
compatible = "qcom,smsm";
qcom,smsm-edge = <1>;
qcom,smsm-irq-offset = <0x8>;
qcom,smsm-irq-bitmask = <0x200>;
interrupts = <0 157 1>;
};
qcom,smd-wcnss {
compatible = "qcom,smd";
qcom,smd-edge = <6>;
qcom,smd-irq-offset = <0x8>;
qcom,smd-irq-bitmask = <0x20000>;
qcom,pil-string = "wcnss";
interrupts = <0 142 1>;
};
qcom,smsm-wcnss {
compatible = "qcom,smsm";
qcom,smsm-edge = <6>;
qcom,smsm-irq-offset = <0x8>;
qcom,smsm-irq-bitmask = <0x80000>;
interrupts = <0 144 1>;
};
qcom,smd-rpm {
compatible = "qcom,smd";
qcom,smd-edge = <15>;
qcom,smd-irq-offset = <0x8>;
qcom,smd-irq-bitmask = <0x1>;
interrupts = <0 168 1>;
qcom,irq-no-syspend;
};
};
@@ -0,0 +1,18 @@
Qualcomm SMSM Point-to-Point (SMP2P)
Required properties:
-compatible : should be "qcom,smp2p"
-reg : the location of the irq register base memory
-qcom,remote-pid : the SMP2P remote processor ID (see smp2p_private_api.h)
-qcom,irq-bitmask : the sending irq bitmask
-interrupts : the receiving interrupt line
Example:
qcom,smp2p-modem {
compatible = "qcom,smp2p";
reg = <0xf9011008 0x4>;
qcom,remote-pid = <1>;
qcom,irq-bitmask = <0x4000>;
interrupts = <0 27 1>;
};
@@ -0,0 +1,32 @@
Qualcomm SPM Regulators
spm-regulator is a regulator device which supports PMIC processor supply
regulators via the SPM module.
Required properties:
- compatible: Must be "qcom,spm-regulator"
- reg: Specifies the SPMI address and size for this regulator device
- regulator-name: A string used as a descriptive name for the regulator
Required structure:
- A qcom,spm-regulator node must be a child of an SPMI node that has specified
the spmi-slave-container property
All properties specified within the core regulator framework can also be used.
These bindings can be found in regulator.txt.
Example:
qcom,spmi@fc4c0000 {
qcom,pm8226@1 {
spmi-slave-container;
spm-regulator@1700 {
compatible = "qcom,spm-regulator";
regulator-name = "8226_s2";
reg = <0x1700 0x100>;
regulator-min-microvolt = <900000>;
regulator-max-microvolt = <1275000>;
};
};
};
@@ -0,0 +1,68 @@
* MSM Subsystem Power Manager (spm-v2)
S4 generation of MSMs have SPM hardware blocks to control the Application
Processor Sub-System power. These SPM blocks run individual state machine
to determine what the core (L2 or Krait/Scorpion) would do when the WFI
instruction is executed by the core. The SAW hardware block handles SPM and
AVS functionality for the cores.
The devicetree representation of the SPM block should be:
Required properties
- compatible: "qcom,spm-v2"
- reg: The physical address and the size of the SPM's memory mapped registers
- qcom, core-id: The core id the SPM block is attached to.
{0..n} for cores {0..n}
{0xffff} for L2
- qcom,saw2-ver-reg: The location of the version register
- qcom,saw2-cfg: SAW2 configuration register
- qcom,saw2-avs-ctl: The AVS control register
- qcom,saw2-avs-hysterisis: The AVS hysterisis register to delay the AVS
controller requests
- qcom,saw2-spm-dly: Provides the values for the SPM delay command in the SPM
sequence
- qcom,saw2-spm-ctl: The SPM control register
- qcom,saw2-vctl-timeout-us: The timeout value to wait for voltage to change
after sending the voltage command to the PMIC
Optional properties
- qcom,saw2-avs-limit: The AVS limit register
- qcom,saw2-avs-dly: The AVS delay register is used to specify the delay values
between AVS controller requests
- qcom,saw2-pmic-data0..7: Specify the pmic data value and the associated FTS
index to send the PMIC data to
- qcom,saw2-vctl-port: The PVC (PMIC Virtual Channel) port used for changing
voltage
- qcom,saw2-phase-port: The PVC port used for changing the number of phases
- qcom,saw2-pfm-port: The PVC port used for enabling PWM/PFM modes
- qcom,saw2-spm-cmd-wfi: The WFI command sequence
- qcom,saw2-spm-cmd-ret: The Retention command sequence
- qcom,saw2-spm-cmd-spc: The Standalone PC command sequence
- qcom,saw2-spm-cmd-pc: The Power Collapse command sequence
- qcom,saw2-spm-cmd-gdhs: L2 GDHS command sequence
Example:
qcom,spm@f9089000 {
compatible = "qcom,spm-v2";
#address-cells = <1>;
#size-cells = <1>;
reg = <0xf9089000 0x1000>;
qcom,core-id = <0>;
qcom,saw2-ver-reg = <0xfd0>;
qcom,saw2-cfg = <0x1b>;
qcom,saw2-avs-ctl = <0>;
qcom,saw2-avs-hysteresis = <0>;
qcom,saw2-avs-limit = <0>;
qcom,saw2-avs-dly= <0>;
qcom,saw2-spm-dly= <0x20000400>;
qcom,saw2-spm-ctl = <0x1>;
qcom,saw2-spm-cmd-wfi = [03 0b 0f];
qcom,saw2-spm-cmd-spc = [00 20 50 80 60 70 10 92
a0 b0 03 68 70 3b 92 a0 b0
82 2b 50 10 30 02 22 30 0f];
qcom,saw2-spm-cmd-pc = [00 20 10 92 a0 b0 07 3b 92
a0 b0 82 10 30 02 22 30 0f];
};
@@ -0,0 +1,16 @@
* TZLOG (Trust Zone Log)
The tz_log driver is a platform device driver that exposes a debugfs
interface for accessing and displaying diagnostic information
related to secure code (Trustzone/QSEE).
Required properties:
- compatible : Should be "qcom,tz-log"
- reg : Offset and size of the register set for the device
Example:
qcom,tz-log@fe805720 {
compatible = "qcom,tz-log";
reg = <0xfe805720 0x1000>;
};
@@ -0,0 +1,14 @@
* TI - DSP (Digital Signal Processor)
TI DSP included in OMAP SoC
Required properties:
- compatible : Should be "ti,omap3-c64" for OMAP3 & 4
- ti,hwmods: "dsp"
Examples:
dsp {
compatible = "ti,omap3-c64";
ti,hwmods = "dsp";
};
@@ -0,0 +1,27 @@
* OMAP Interrupt Controller
OMAP2/3 are using a TI interrupt controller that can support several
configurable number of interrupts.
Main node required properties:
- compatible : should be:
"ti,omap2-intc"
- interrupt-controller : Identifies the node as an interrupt controller
- #interrupt-cells : Specifies the number of cells needed to encode an
interrupt source. The type shall be a <u32> and the value shall be 1.
The cell contains the interrupt number in the range [0-128].
- ti,intc-size: Number of interrupts handled by the interrupt controller.
- reg: physical base address and size of the intc registers map.
Example:
intc: interrupt-controller@1 {
compatible = "ti,omap2-intc";
interrupt-controller;
#interrupt-cells = <1>;
ti,intc-size = <96>;
reg = <0x48200000 0x1000>;
};
@@ -0,0 +1,19 @@
* TI - IVA (Imaging and Video Accelerator) subsystem
The IVA contain various audio, video or imaging HW accelerator
depending of the version.
Required properties:
- compatible : Should be:
- "ti,ivahd" for OMAP4
- "ti,iva2.2" for OMAP3
- "ti,iva2.1" for OMAP2430
- "ti,iva1" for OMAP2420
- ti,hwmods: "iva"
Examples:
iva {
compatible = "ti,ivahd", "ti,iva";
ti,hwmods = "iva";
};
@@ -0,0 +1,19 @@
* TI - L3 Network On Chip (NoC)
This version is an implementation of the generic NoC IP
provided by Arteris.
Required properties:
- compatible : Should be "ti,omap3-l3-smx" for OMAP3 family
Should be "ti,omap4-l3-noc" for OMAP4 family
- ti,hwmods: "l3_main_1", ... One hwmod for each noc domain.
Examples:
ocp {
compatible = "ti,omap4-l3-noc", "simple-bus";
#address-cells = <1>;
#size-cells = <1>;
ranges;
ti,hwmods = "l3_main_1", "l3_main_2", "l3_main_3";
};
@@ -0,0 +1,27 @@
* TI - MPU (Main Processor Unit) subsystem
The MPU subsystem contain one or several ARM cores
depending of the version.
The MPU contain CPUs, GIC, L2 cache and a local PRCM.
Required properties:
- compatible : Should be "ti,omap3-mpu" for OMAP3
Should be "ti,omap4-mpu" for OMAP4
- ti,hwmods: "mpu"
Examples:
- For an OMAP4 SMP system:
mpu {
compatible = "ti,omap4-mpu";
ti,hwmods = "mpu";
};
- For an OMAP3 monocore system:
mpu {
compatible = "ti,omap3-mpu";
ti,hwmods = "mpu";
};
@@ -0,0 +1,49 @@
* Texas Instruments OMAP
OMAP is currently using a static file per SoC family to describe the
IPs present in the SoC.
On top of that an omap_device is created to extend the platform_device
capabilities and to allow binding with one or several hwmods.
The hwmods will contain all the information to build the device:
address range, irq lines, dma lines, interconnect, PRCM register,
clock domain, input clocks.
For the moment just point to the existing hwmod, the next step will be
to move data from hwmod to device-tree representation.
Required properties:
- compatible: Every devices present in OMAP SoC should be in the
form: "ti,XXX"
- ti,hwmods: list of hwmod names (ascii strings), that comes from the OMAP
HW documentation, attached to a device. Must contain at least
one hwmod.
Optional properties:
- ti,no_idle_on_suspend: When present, it prevents the PM to idle the module
during suspend.
Example:
spinlock@1 {
compatible = "ti,omap4-spinlock";
ti,hwmods = "spinlock";
};
Boards:
- OMAP3 BeagleBoard : Low cost community board
compatible = "ti,omap3-beagle", "ti,omap3"
- OMAP4 SDP : Software Developement Board
compatible = "ti,omap4-sdp", "ti,omap4430"
- OMAP4 PandaBoard : Low cost community board
compatible = "ti,omap4-panda", "ti,omap4430"
- OMAP3 EVM : Software Developement Board for OMAP35x, AM/DM37x
compatible = "ti,omap3-evm", "ti,omap3"
- AM335X EVM : Software Developement Board for AM335x
compatible = "ti,am335x-evm", "ti,am33xx", "ti,omap3"
@@ -0,0 +1,24 @@
Picochip picoXcell device tree bindings.
========================================
Required root node properties:
- compatible:
- "picochip,pc7302-pc3x3" : PC7302 development board with PC3X3 device.
- "picochip,pc7302-pc3x2" : PC7302 development board with PC3X2 device.
- "picochip,pc3x3" : picoXcell PC3X3 device based board.
- "picochip,pc3x2" : picoXcell PC3X2 device based board.
Timers required properties:
- compatible = "picochip,pc3x2-timer"
- interrupts : The single IRQ line for the timer.
- clock-freq : The frequency in HZ of the timer.
- reg : The register bank for the timer.
Note: two timers are required - one for the scheduler clock and one for the
event tick/NOHZ.
VIC required properties:
- compatible = "arm,pl192-vic".
- interrupt-controller.
- reg : The register bank for the device.
- #interrupt-cells : Must be 1.
@@ -0,0 +1,22 @@
* ARM Performance Monitor Units
ARM cores often have a PMU for counting cpu and cache events like cache misses
and hits. The interface to the PMU is part of the ARM ARM. The ARM PMU
representation in the device tree should be done as under:-
Required properties:
- compatible : should be one of
"arm,cortex-a9-pmu"
"arm,cortex-a8-pmu"
"arm,cortex-a7-pmu"
"arm,arm1176-pmu"
"arm,arm1136-pmu"
- interrupts : 1 combined interrupt or 1 per core.
Example:
pmu {
compatible = "arm,cortex-a9-pmu";
interrupts = <100 101>;
};
@@ -0,0 +1,23 @@
* ARM Primecell Peripherals
ARM, Ltd. Primecell peripherals have a standard id register that can be used to
identify the peripheral type, vendor, and revision. This value can be used for
driver matching.
Required properties:
- compatible : should be a specific name for the peripheral and
"arm,primecell". The specific name will match the ARM
engineering name for the logic block in the form: "arm,pl???"
Optional properties:
- arm,primecell-periphid : Value to override the h/w value with
Example:
serial@fff36000 {
compatible = "arm,pl011", "arm,primecell";
arm,primecell-periphid = <0x00341011>;
};
@@ -0,0 +1,8 @@
* Samsung's Exynos4210 based SMDKV310 evaluation board
SMDKV310 evaluation board is based on Samsung's Exynos4210 SoC.
Required root node properties:
- compatible = should be one or more of the following.
(a) "samsung,smdkv310" - for Samsung's SMDKV310 eval board.
(b) "samsung,exynos4210" - for boards based on Exynos4210 SoC.
@@ -0,0 +1,3 @@
prima2 "cb" evaluation board
Required root node properties:
- compatible = "sirf,prima2-cb", "sirf,prima2";
@@ -0,0 +1,8 @@
ST SPEAr Platforms Device Tree Bindings
---------------------------------------
Boards with the ST SPEAr600 SoC shall have the following properties:
Required root node property:
compatible = "st,spear600";
@@ -0,0 +1,14 @@
NVIDIA Tegra device tree bindings
-------------------------------------------
Boards with the tegra20 SoC shall have the following properties:
Required root node property:
compatible = "nvidia,tegra20";
Boards with the tegra30 SoC shall have the following properties:
Required root node property:
compatible = "nvidia,tegra30";
@@ -0,0 +1,100 @@
Embedded Memory Controller
Properties:
- name : Should be emc
- #address-cells : Should be 1
- #size-cells : Should be 0
- compatible : Should contain "nvidia,tegra20-emc".
- reg : Offset and length of the register set for the device
- nvidia,use-ram-code : If present, the sub-nodes will be addressed
and chosen using the ramcode board selector. If omitted, only one
set of tables can be present and said tables will be used
irrespective of ram-code configuration.
Child device nodes describe the memory settings for different configurations and clock rates.
Example:
emc@7000f400 {
#address-cells = < 1 >;
#size-cells = < 0 >;
compatible = "nvidia,tegra20-emc";
reg = <0x7000f4000 0x200>;
}
Embedded Memory Controller ram-code table
If the emc node has the nvidia,use-ram-code property present, then the
next level of nodes below the emc table are used to specify which settings
apply for which ram-code settings.
If the emc node lacks the nvidia,use-ram-code property, this level is omitted
and the tables are stored directly under the emc node (see below).
Properties:
- name : Should be emc-tables
- nvidia,ram-code : the binary representation of the ram-code board strappings
for which this node (and children) are valid.
Embedded Memory Controller configuration table
This is a table containing the EMC register settings for the various
operating speeds of the memory controller. They are always located as
subnodes of the emc controller node.
There are two ways of specifying which tables to use:
* The simplest is if there is just one set of tables in the device tree,
and they will always be used (based on which frequency is used).
This is the preferred method, especially when firmware can fill in
this information based on the specific system information and just
pass it on to the kernel.
* The slightly more complex one is when more than one memory configuration
might exist on the system. The Tegra20 platform handles this during
early boot by selecting one out of possible 4 memory settings based
on a 2-pin "ram code" bootstrap setting on the board. The values of
these strappings can be read through a register in the SoC, and thus
used to select which tables to use.
Properties:
- name : Should be emc-table
- compatible : Should contain "nvidia,tegra20-emc-table".
- reg : either an opaque enumerator to tell different tables apart, or
the valid frequency for which the table should be used (in kHz).
- clock-frequency : the clock frequency for the EMC at which this
table should be used (in kHz).
- nvidia,emc-registers : a 46 word array of EMC registers to be programmed
for operation at the 'clock-frequency' setting.
The order and contents of the registers are:
RC, RFC, RAS, RP, R2W, W2R, R2P, W2P, RD_RCD, WR_RCD, RRD, REXT,
WDV, QUSE, QRST, QSAFE, RDV, REFRESH, BURST_REFRESH_NUM, PDEX2WR,
PDEX2RD, PCHG2PDEN, ACT2PDEN, AR2PDEN, RW2PDEN, TXSR, TCKE, TFAW,
TRPAB, TCLKSTABLE, TCLKSTOP, TREFBW, QUSE_EXTRA, FBIO_CFG6, ODT_WRITE,
ODT_READ, FBIO_CFG5, CFG_DIG_DLL, DLL_XFORM_DQS, DLL_XFORM_QUSE,
ZCAL_REF_CNT, ZCAL_WAIT_CNT, AUTO_CAL_INTERVAL, CFG_CLKTRIM_0,
CFG_CLKTRIM_1, CFG_CLKTRIM_2
emc-table@166000 {
reg = <166000>;
compatible = "nvidia,tegra20-emc-table";
clock-frequency = < 166000 >;
nvidia,emc-registers = < 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 >;
};
emc-table@333000 {
reg = <333000>;
compatible = "nvidia,tegra20-emc-table";
clock-frequency = < 333000 >;
nvidia,emc-registers = < 0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0 0 0 0 0 0
0 0 0 0 >;
};
@@ -0,0 +1,19 @@
NVIDIA Tegra Power Management Controller (PMC)
Properties:
- name : Should be pmc
- compatible : Should contain "nvidia,tegra<chip>-pmc".
- reg : Offset and length of the register set for the device
- nvidia,invert-interrupt : If present, inverts the PMU interrupt signal.
The PMU is an external Power Management Unit, whose interrupt output
signal is fed into the PMC. This signal is optionally inverted, and then
fed into the ARM GIC. The PMC is not involved in the detection or
handling of this interrupt signal, merely its inversion.
Example:
pmc@7000f400 {
compatible = "nvidia,tegra20-pmc";
reg = <0x7000e400 0x400>;
nvidia,invert-interrupt;
};
@@ -0,0 +1,48 @@
* 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>;
};
@@ -0,0 +1,146 @@
ARM Versatile Express boards family
-----------------------------------
ARM's Versatile Express platform consists of a motherboard and one
or more daughterboards (tiles). The motherboard provides a set of
peripherals. Processor and RAM "live" on the tiles.
The motherboard and each core tile should be described by a separate
Device Tree source file, with the tile's description including
the motherboard file using a /include/ directive. As the motherboard
can be initialized in one of two different configurations ("memory
maps"), care must be taken to include the correct one.
Required properties in the root node:
- compatible value:
compatible = "arm,vexpress,<model>", "arm,vexpress";
where <model> is the full tile model name (as used in the tile's
Technical Reference Manual), eg.:
- for Coretile Express A5x2 (V2P-CA5s):
compatible = "arm,vexpress,v2p-ca5s", "arm,vexpress";
- for Coretile Express A9x4 (V2P-CA9):
compatible = "arm,vexpress,v2p-ca9", "arm,vexpress";
If a tile comes in several variants or can be used in more then one
configuration, the compatible value should be:
compatible = "arm,vexpress,<model>,<variant>", \
"arm,vexpress,<model>", "arm,vexpress";
eg:
- Coretile Express A15x2 (V2P-CA15) with Tech Chip 1:
compatible = "arm,vexpress,v2p-ca15,tc1", \
"arm,vexpress,v2p-ca15", "arm,vexpress";
- LogicTile Express 13MG (V2F-2XV6) running Cortex-A7 (3 cores) SMM:
compatible = "arm,vexpress,v2f-2xv6,ca7x3", \
"arm,vexpress,v2f-2xv6", "arm,vexpress";
Optional properties in the root node:
- tile model name (use name from the tile's Technical Reference
Manual, eg. "V2P-CA5s")
model = "<model>";
- tile's HBI number (unique ARM's board model ID, visible on the
PCB's silkscreen) in hexadecimal transcription:
arm,hbi = <0xhbi>
eg:
- for Coretile Express A5x2 (V2P-CA5s) HBI-0191:
arm,hbi = <0x191>;
- Coretile Express A9x4 (V2P-CA9) HBI-0225:
arm,hbi = <0x225>;
Top-level standard "cpus" node is required. It must contain a node
with device_type = "cpu" property for every available core, eg.:
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a5";
reg = <0>;
};
};
The motherboard description file provides a single "motherboard" node
using 2 address cells corresponding to the Static Memory Bus used
between the motherboard and the tile. The first cell defines the Chip
Select (CS) line number, the second cell address offset within the CS.
All interrupt lines between the motherboard and the tile are active
high and are described using single cell.
Optional properties of the "motherboard" node:
- motherboard's memory map variant:
arm,v2m-memory-map = "<name>";
where name is one of:
- "rs1" - for RS1 map (i.a. peripherals on CS3); this map is also
referred to as "ARM Cortex-A Series memory map":
arm,v2m-memory-map = "rs1";
When this property is missing, the motherboard is using the original
memory map (also known as the "Legacy memory map", primarily used
with the original CoreTile Express A9x4) with peripherals on CS7.
Motherboard .dtsi files provide a set of labelled peripherals that
can be used to obtain required phandle in the tile's "aliases" node:
- UARTs, note that the numbers correspond to the physical connectors
on the motherboard's back panel:
v2m_serial0, v2m_serial1, v2m_serial2 and v2m_serial3
- I2C controllers:
v2m_i2c_dvi and v2m_i2c_pcie
- SP804 timers:
v2m_timer01 and v2m_timer23
Current Linux implementation requires a "arm,v2m_timer" alias
pointing at one of the motherboard's SP804 timers, if it is to be
used as the system timer. This alias should be defined in the
motherboard files.
The tile description must define "ranges", "interrupt-map-mask" and
"interrupt-map" properties to translate the motherboard's address
and interrupt space into one used by the tile's processor.
Abbreviated example:
/dts-v1/;
/ {
model = "V2P-CA5s";
arm,hbi = <0x225>;
compatible = "arm,vexpress-v2p-ca5s", "arm,vexpress";
interrupt-parent = <&gic>;
#address-cells = <1>;
#size-cells = <1>;
chosen { };
aliases {
serial0 = &v2m_serial0;
};
cpus {
#address-cells = <1>;
#size-cells = <0>;
cpu@0 {
device_type = "cpu";
compatible = "arm,cortex-a5";
reg = <0>;
};
};
gic: interrupt-controller@2c001000 {
compatible = "arm,cortex-a9-gic";
#interrupt-cells = <3>;
#address-cells = <0>;
interrupt-controller;
reg = <0x2c001000 0x1000>,
<0x2c000100 0x100>;
};
motherboard {
/* CS0 is visible at 0x08000000 */
ranges = <0 0 0x08000000 0x04000000>;
interrupt-map-mask = <0 0 63>;
/* Active high IRQ 0 is connected to GIC's SPI0 */
interrupt-map = <0 0 0 &gic 0 0 4>;
};
};
/include/ "vexpress-v2m-rs1.dtsi"
@@ -0,0 +1,29 @@
* ARM Vectored Interrupt Controller
One or more Vectored Interrupt Controllers (VIC's) can be connected in an ARM
system for interrupt routing. For multiple controllers they can either be
nested or have the outputs wire-OR'd together.
Required properties:
- compatible : should be one of
"arm,pl190-vic"
"arm,pl192-vic"
- interrupt-controller : Identifies the node as an interrupt controller
- #interrupt-cells : The number of cells to define the interrupts. Must be 1 as
the VIC has no configuration options for interrupt sources. The cell is a u32
and defines the interrupt number.
- reg : The register bank for the VIC.
Optional properties:
- interrupts : Interrupt source for parent controllers if the VIC is nested.
Example:
vic0: interrupt-controller@60000 {
compatible = "arm,pl192-vic";
interrupt-controller;
#interrupt-cells = <1>;
reg = <0x60000 0x1000>;
};
@@ -0,0 +1,7 @@
Xilinx Zynq EP107 Emulation Platform board
This board is an emulation platform for the Zynq product which is
based on an ARM Cortex A9 processor.
Required root node properties:
- compatible = "xlnx,zynq-ep107";