Skip to content

Commit

Permalink
Merge branch 'rpmsg-ti-linux-4.1.y' of git://git.ti.com/rpmsg/rpmsg i…
Browse files Browse the repository at this point in the history
…nto ti-linux-4.1.y

TI-Feature: rpmsg
TI-Tree: git://git.ti.com/rpmsg/rpmsg.git
TI-Branch: rpmsg-ti-linux-4.1.y

* 'rpmsg-ti-linux-4.1.y' of git://git.ti.com/rpmsg/rpmsg: (37 commits)
  net/rpmsg: unblock reader threads operating on errored sockets
  net/rpmsg: return ENOLINK upon Rx on errored sockets
  net/rpmsg: return ESHUTDOWN upon Tx on errored sockets
  net/rpmsg: set error status on open sockets after recovery
  net/rpmsg: store remote processor id in rpmsg_socket
  net/rpmsg: use a list to track all connected sockets
  net/rpmsg: add a check to not support multiple published channels
  net/rpmsg: fix memory leak of vrp_channels radix tree
  net/rpmsg: add support for new rpmsg sockets
  rpmsg: add api for creating and deleting rpmsg channels
  TEMP: remoteproc: add legacy support to handle internal memories
  ARM: dts: beagle-x15: Enable PRU-ICSS and the child PRU nodes
  ARM: DRA7: hwmod_data: Add PRU-ICSS data for AM57xx variants
  ARM: dts: beagle-x15: Add mailboxes to the PRU nodes
  ARM: dts: DRA7: Add the PRU-ICSS nodes
  remoteproc/pruss: add support for PRU-ICSS subsystems on AM57xx SoCs
  remoteproc/pruss: add support for PRU-ICSS1 on AM437x SoCs
  ARM: OMAP2+: extend pruss pdata-quirks to AM4372
  ARM: dts: AM4372: Add the PRU-ICSS1 DT node
  remoteproc/pruss: add pru-specific debugfs support
  ...

Signed-off-by: Dan Murphy <DMurphy@ti.com>

Conflicts:
	arch/arm/boot/dts/am57xx-beagle-x15.dts
	arch/arm/mach-omap2/omap_hwmod_7xx_data.c
	arch/arm/mach-omap2/pdata-quirks.c
  • Loading branch information
Dan Murphy authored and Dan Murphy committed Aug 29, 2015
2 parents f0fbb30 + 1f57c0d commit 72719bd
Show file tree
Hide file tree
Showing 25 changed files with 3,218 additions and 66 deletions.
128 changes: 128 additions & 0 deletions Documentation/devicetree/bindings/remoteproc/ti,pruss-remoteproc.txt
@@ -0,0 +1,128 @@
PRU-ICSS on TI SoCs
===================

The Programmable Real-Time Unit and Industrial Communication Subsystem
(PRU-ICSS) is present on various TI SoCs such as AM335x or AM437x. A
PRUSS consists of dual 32-bit RISC cores (Programmable Real-Time Units,
or PRUs), shared, data and instruction memories, some internal peripheral
modules, and an interrupt controller. The programmable nature of the
PRUs provide flexibility to implement custom peripheral interfaces,
fast real-time responses, or specialized data handling.

A PRU-ICSS subsystem can have upto three shared data memories. A PRU core
acts on a primary Data RAM (there are usually 2 Data RAMs) at its address
0x0, but also has access to a secondary Data RAM (primary to the other PRU
core). A shared Data RAM, if present, can be accessed by both the PRU cores.
The Interrupt Controller (INTC) and a CFG module are common to both the
PRU cores. Each PRU core also has a private instruction RAM, and specific
register spaces for Control and Debug functionalities.


PRU-ICSS Parent Node
=====================
Each PRU-ICSS subsystem instance is represented as a node with the
individual PRU processor cores represented as child nodes within the
parent PRUSS node.

Required Properties:
--------------------
- compatible : should be one of,
"ti,am3352-pruss" for AM335x family of SoCs
"ti,am4372-pruss" for AM437x family of SoCs
"ti,am5728-pruss" for AM572x family of SoCs
- ti,hwmods : name of the hwmod associated with the PRUSS instance
- reg : base address and size for each of the sub-modules as
mentioned in reg-names, and in the same order as the
reg-names
- reg-names : should contain a string from among the following names,
each representing a specific sub-module. A PRU-ICSS may
not have all of the Data RAMs. The binding is agnostic
of the order of these reg-names
"dram0" for Data RAM0,
"dram1" for Data RAM1,
"shrdram2" for Shared Data RAM,
"intc" for INTC sub-module,
"cfg" for CFG sub-module,
- interrupts : all the interrupts generated towards the main host processor
in the SoC. The interrupts should be specified in ascending
order. The format depends on the interrupt specifier for the
particular SoC's host interrupt controller
- #address-cells : should be 1
- #size-cells : should be 1
- ranges : no specific range translations required, child nodes have the
same address view as the parent, so should be mentioned without
any value for the property

Optional Properties:
--------------------
- pinctrl-0 : pin control group for pins that are handled directly by the
PRU-ICSS subsystem
- pinctrl-names : if present, must contain only a "default" entry


PRU Child Node
===============
Each PRUSS has dual PRU cores, so at most there can be 2 active child nodes.
Each node can optionally be rendered inactive by using the standard DT string
property, "status".

Required Properties:
--------------------
- compatible : should be
"ti,am3352-pru-rproc" for AM335x family of SoCs
"ti,am4372-pru-rproc" for AM437x family of SoCs
"ti,am5728-pru-rproc" for AM572x family of SoCs
- reg : base address and size for each of the 3 sub-module address
spaces as mentioned in reg-names, and in the same order as
the reg-names
- reg-names : should contain each of the following 3 names, with the "iram"
entry being the first one
"iram" for Instruction RAM,
"control" for the CTRL sub-module registers,
"debug" for the Debug sub-module registers,

Optional Properties:
--------------------
- mboxes : OMAP Mailbox specifier denoting the sub-mailbox, if using a
mailbox for IPC signalling between host and a PRU core. The
specifier format is as per the bindings,
Documentation/devicetree/bindings/mailbox/omap-mailbox.txt
This property should match with the sub-mailbox node used in
the firmware image.


Example:
========
/* AM33xx PRU-ICSS */
pruss: pruss@4a300000 {
compatible = "ti,am3352-pruss";
ti,hwmods = "pruss";
reg = <0x4a300000 0x2000>,
<0x4a302000 0x2000>,
<0x4a310000 0x3000>,
<0x4a320000 0x2000>,
<0x4a326000 0x2000>;
reg-names = "dram0", "dram1", "shrdram2", "intc", "cfg";
interrupts = <20 21 22 23 24 25 26 27>;
#address-cells = <1>;
#size-cells = <1>;
ranges;

pru0: pru@4a334000 {
compatible = "ti,am3352-pru-rproc";
reg = <0x4a334000 0x2000>,
<0x4a322000 0x400>,
<0x4a322400 0x100>;
reg-names = "iram", "control", "debug";
mboxes = <&mailbox &mbox_pru0>;
};

pru1: pru@4a338000 {
compatible = "ti,am3352-pru-rproc";
reg = <0x4a338000 0x2000>,
<0x4a324000 0x400>,
<0x4a324400 0x100>;
reg-names = "iram", "control", "debug";
mboxes = <&mailbox &mbox_pru1>;
};
};
41 changes: 41 additions & 0 deletions arch/arm/boot/dts/am33xx.dtsi
Expand Up @@ -398,6 +398,14 @@
ti,mbox-tx = <0 0 0>;
ti,mbox-rx = <0 0 3>;
};
mbox_pru0: mbox_pru0 {
ti,mbox-tx = <2 0 0>;
ti,mbox-rx = <3 0 0>;
};
mbox_pru1: mbox_pru1 {
ti,mbox-tx = <4 0 0>;
ti,mbox-rx = <5 0 0>;
};
};

timer1: timer@44e31000 {
Expand Down Expand Up @@ -776,6 +784,39 @@
map-exec;
};

pruss: pruss@4a300000 {
compatible = "ti,am3352-pruss";
ti,hwmods = "pruss";
reg = <0x4a300000 0x2000>,
<0x4a302000 0x2000>,
<0x4a310000 0x3000>,
<0x4a320000 0x2000>,
<0x4a326000 0x2000>;
reg-names = "dram0", "dram1", "shrdram2", "intc", "cfg";
interrupts = <20 21 22 23 24 25 26 27>;
#address-cells = <1>;
#size-cells = <1>;
ranges;

pru0: pru@4a334000 {
compatible = "ti,am3352-pru-rproc";
reg = <0x4a334000 0x2000>,
<0x4a322000 0x400>,
<0x4a322400 0x100>;
reg-names = "iram", "control", "debug";
mboxes = <&mailbox &mbox_pru0>;
};

pru1: pru@4a338000 {
compatible = "ti,am3352-pru-rproc";
reg = <0x4a338000 0x2000>,
<0x4a324000 0x400>,
<0x4a324400 0x100>;
reg-names = "iram", "control", "debug";
mboxes = <&mailbox &mbox_pru1>;
};
};

elm: elm@48080000 {
compatible = "ti,am3352-elm";
reg = <0x48080000 0x2000>;
Expand Down
47 changes: 47 additions & 0 deletions arch/arm/boot/dts/am4372.dtsi
Expand Up @@ -246,6 +246,14 @@
ti,mbox-tx = <0 0 0>;
ti,mbox-rx = <0 0 3>;
};
mbox_pru1_0: mbox_pru1_0 {
ti,mbox-tx = <2 0 0>;
ti,mbox-rx = <3 0 0>;
};
mbox_pru1_1: mbox_pru1_1 {
ti,mbox-tx = <4 0 0>;
ti,mbox-rx = <5 0 0>;
};
};

timer1: timer@44e31000 {
Expand Down Expand Up @@ -796,6 +804,45 @@
interrupts = <GIC_SPI 111 IRQ_TYPE_LEVEL_HIGH>;
};

pruss1: pruss@54400000 {
compatible = "ti,am4372-pruss";
ti,hwmods = "pruss";
reg = <0x54400000 0x2000>,
<0x54402000 0x2000>,
<0x54410000 0x8000>,
<0x54420000 0x2000>,
<0x54426000 0x2000>;
reg-names = "dram0", "dram1", "shrdram2", "intc", "cfg";
interrupts = <GIC_SPI 20 IRQ_TYPE_LEVEL_HIGH
GIC_SPI 21 IRQ_TYPE_LEVEL_HIGH
GIC_SPI 22 IRQ_TYPE_LEVEL_HIGH
GIC_SPI 23 IRQ_TYPE_LEVEL_HIGH
GIC_SPI 24 IRQ_TYPE_LEVEL_HIGH
GIC_SPI 26 IRQ_TYPE_LEVEL_HIGH
GIC_SPI 27 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <1>;
ranges;

pru1_0: pru@54434000 {
compatible = "ti,am4372-pru-rproc";
reg = <0x54434000 0x3000>,
<0x54422000 0x400>,
<0x54422400 0x100>;
reg-names = "iram", "control", "debug";
mboxes = <&mailbox &mbox_pru1_0>;
};

pru1_1: pru@54438000 {
compatible = "ti,am4372-pru-rproc";
reg = <0x54438000 0x3000>,
<0x54424000 0x400>,
<0x54424400 0x100>;
reg-names = "iram", "control", "debug";
mboxes = <&mailbox &mbox_pru1_1>;
};
};

mcasp0: mcasp@48038000 {
compatible = "ti,am33xx-mcasp-audio";
ti,hwmods = "mcasp0";
Expand Down
46 changes: 46 additions & 0 deletions arch/arm/boot/dts/am57xx-beagle-x15.dts
Expand Up @@ -753,6 +753,26 @@
rx-num-evt = <8>;
};

&mailbox3 {
status = "okay";
mbox_pru1_0: mbox_pru1_0 {
status = "okay";
};
mbox_pru1_1: mbox_pru1_1 {
status = "okay";
};
};

&mailbox4 {
status = "okay";
mbox_pru2_0: mbox_pru2_0 {
status = "okay";
};
mbox_pru2_1: mbox_pru2_1 {
status = "okay";
};
};

&mailbox5 {
status = "okay";
mbox_ipu1_ipc3x: mbox_ipu1_ipc3x {
Expand Down Expand Up @@ -825,3 +845,29 @@
mboxes = <&mailbox6 &mbox_dsp2_ipc3x>;
timers = <&timer6>;
};

&pruss1 {
status = "okay";
pru1_0: pru@4b234000 {
mboxes = <&mailbox3 &mbox_pru1_0>;
status = "okay";
};

pru1_1: pru@4b238000 {
mboxes = <&mailbox3 &mbox_pru1_1>;
status = "okay";
};
};

&pruss2 {
status = "okay";
pru2_0: pru@4b2b4000 {
mboxes = <&mailbox4 &mbox_pru2_0>;
status = "okay";
};

pru2_1: pru@4b2b8000 {
mboxes = <&mailbox4 &mbox_pru2_1>;
status = "okay";
};
};
82 changes: 82 additions & 0 deletions arch/arm/boot/dts/dra7.dtsi
Expand Up @@ -1034,6 +1034,88 @@
status = "disabled";
};

pruss1: pruss@4b200000 {
compatible = "ti,am5728-pruss";
ti,hwmods = "pruss1";
reg = <0x4b200000 0x2000>,
<0x4b202000 0x2000>,
<0x4b210000 0x8000>,
<0x4b220000 0x2000>,
<0x4b226000 0x2000>;
reg-names = "dram0", "dram1", "shrdram2", "intc", "cfg";
interrupts = <GIC_SPI 186 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 187 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 188 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 189 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 190 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 191 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 192 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 193 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <1>;
ranges;
status = "disabled";

pru1_0: pru@4b234000 {
compatible = "ti,am5728-pru-rproc";
reg = <0x4b234000 0x3000>,
<0x4b222000 0x400>,
<0x4b222400 0x100>;
reg-names = "iram", "control", "debug";
status = "disabled";
};

pru1_1: pru@4b238000 {
compatible = "ti,am5728-pru-rproc";
reg = <0x4b238000 0x3000>,
<0x4b224000 0x400>,
<0x4b224400 0x100>;
reg-names = "iram", "control", "debug";
status = "disabled";
};
};

pruss2: pruss@4b280000 {
compatible = "ti,am5728-pruss";
ti,hwmods = "pruss2";
reg = <0x4b280000 0x2000>,
<0x4b282000 0x2000>,
<0x4b290000 0x8000>,
<0x4b2a0000 0x2000>,
<0x4b2a6000 0x2000>;
reg-names = "dram0", "dram1", "shrdram2", "intc", "cfg";
interrupts = <GIC_SPI 196 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 197 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 198 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 199 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 200 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 201 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 202 IRQ_TYPE_LEVEL_HIGH>,
<GIC_SPI 203 IRQ_TYPE_LEVEL_HIGH>;
#address-cells = <1>;
#size-cells = <1>;
ranges;
status = "disabled";

pru2_0: pru@4b2b4000 {
compatible = "ti,am5728-pru-rproc";
reg = <0x4b2b4000 0x3000>,
<0x4b2a2000 0x400>,
<0x4b2a2400 0x100>;
reg-names = "iram", "control", "debug";
status = "disabled";
};

pru2_1: pru@4b2b8000 {
compatible = "ti,am5728-pru-rproc";
reg = <0x4b2b8000 0x3000>,
<0x4b2a4000 0x400>,
<0x4b2a4400 0x100>;
reg-names = "iram", "control", "debug";
status = "disabled";
};
};

abb_mpu: regulator-abb-mpu {
compatible = "ti,abb-v3";
regulator-name = "abb_mpu";
Expand Down

0 comments on commit 72719bd

Please sign in to comment.