Hi,
I am having a problem trying to launch remoteproc for PRU on Beaglebone Black. I have it working, but only using debian (4.4.88-ti-r125) and what I need is to set this up using my own Yocto build (processor-sdk-linux-04.02.00 commit: a75d8e93056181d512f6c818e8627bd4554aaf92)
The device tree I have on debian (working example) was created using capemanager, so after launching I have used dtc to decompile the device tree from directory using "--in-format fs" option to get final form.
Device trees:
This node is in /ocp:
pruss@4a300000 {
reg = <0x4a300000 0x2000 0x4a302000 0x2000 0x4a310000 0x3000 0x4a326000 0x2000 0x4a32e000 0x31c 0x4a332000 0x58>;
reg-names = "dram0", "dram1", "shrdram2", "cfg", "iep", "mii_rt";
compatible = "ti,am3352-pruss";
ranges;
status = "okay";
#address-cells = <0x1>;
ti,hwmods = "pruss";
phandle = <0x23d>;
#size-cells = <0x1>;
linux,phandle = <0x23d>;
mdio@4a332400 {
reg = <0x4a332400 0x90>;
compatible = "ti,davinci_mdio";
clock-names = "fck";
clocks = <0x12>;
status = "disabled";
#address-cells = <0x1>;
bus_freq = <0xf4240>;
phandle = <0xd5>;
#size-cells = <0x0>;
linux,phandle = <0xd5>;
};
intc@4a320000 {
reg = <0x4a320000 0x2000>;
interrupts = <0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>;
reg-names = "intc";
compatible = "ti,am3352-pruss-intc";
interrupt-names = "host2", "host3", "host4", "host5", "host6", "host7", "host8", "host9";
#interrupt-cells = <0x1>;
phandle = <0xd1>;
interrupt-controller;
linux,phandle = <0xd1>;
};
pru0@4a334000 {
reg = <0x4a334000 0x2000 0x4a322000 0x400 0x4a322400 0x100>;
interrupts = <0x10 0x11>;
reg-names = "iram", "control", "debug";
compatible = "ti,am3352-pru";
interrupt-names = "vring", "kick";
phandle = <0xd3>;
linux,phandle = <0xd3>;
interrupt-parent = <0xd1>;
};
pru1@4a338000 {
reg = <0x4a338000 0x2000 0x4a324000 0x400 0x4a324400 0x100>;
interrupts = <0x12 0x13>;
reg-names = "iram", "control", "debug";
compatible = "ti,am3352-pru";
interrupt-names = "vring", "kick";
phandle = <0xd4>;
linux,phandle = <0xd4>;
interrupt-parent = <0xd1>;
};
};
on the other hand the device tree I'm getting from my build looks like this (decompiled dtb file):
pruss_soc_bus@4a326000 {
compatible = "ti,am3356-pruss-soc-bus";
reg = <0x4a326000 0x2000>;
ti,hwmods = "pruss";
#address-cells = <0x1>;
#size-cells = <0x1>;
ranges;
status = "okay";
pruss@4a300000 {
compatible = "ti,am3356-pruss";
reg = <0x4a300000 0x2000 0x4a302000 0x2000 0x4a310000 0x3000 0x4a326000 0x2000 0x4a32e000 0x31c 0x4a332000 0x58>;
reg-names = "dram0", "dram1", "shrdram2", "cfg", "iep", "mii_rt";
#address-cells = <0x1>;
#size-cells = <0x1>;
ranges;
status = "okay";
pinctrl-names = "default";
pinctrl-0 = <0x4f>;
ti,hwmods = "pruss";
intc@4a320000 {
compatible = "ti,am3356-pruss-intc";
reg = <0x4a320000 0x2000>;
reg-names = "intc";
interrupts = <0x14 0x15 0x16 0x17 0x18 0x19 0x1a 0x1b>;
interrupt-names = "host2", "host3", "host4", "host5", "host6", "host7", "host8", "host9";
interrupt-controller;
#interrupt-cells = <0x1>;
linux,phandle = <0x50>;
phandle = <0x50>;
};
pru@4a334000 {
compatible = "ti,am3356-pru";
reg = <0x4a334000 0x2000 0x4a322000 0x400 0x4a322400 0x100>;
reg-names = "iram", "control", "debug";
label = "pru0";
interrupt-parent = <0x50>;
interrupts = <0x10 0x11>;
interrupt-names = "vring", "kick";
status = "okay";
};
pru@4a338000 {
compatible = "ti,am3356-pru";
reg = <0x4a338000 0x2000 0x4a324000 0x400 0x4a324400 0x100>;
reg-names = "iram", "control", "debug";
label = "pru1";
interrupt-parent = <0x50>;
interrupts = <0x12 0x13>;
interrupt-names = "vring", "kick";
status = "okay";
};
mdio@4a332400 {
compatible = "ti,davinci_mdio";
reg = <0x4a332400 0x90>;
clocks = <0x13>;
clock-names = "fck";
bus_freq = <0xf4240>;
#address-cells = <0x1>;
#size-cells = <0x0>;
status = "disabled";
};
};
};
How it behave:
When I'm loading the pru-rproc kernel module on debian the device is being created in /sys/class/remoteproc/ and there are appropriate messages in dmesg and there are two more modules loaded (pruss and pruss-intc). In lsmod output the pru_rproc is used by 2.
On other hand on ma yocto build when I load this module the only thing that is like on debian are the two modules that loads - there is nothing in dmesg nor in /sys/class/remoteproc. In lsmod "used by" shows 0 for pru_rproc.
My questions are:
1) "pruss_soc_bus@4a326000" is added in my version - I understand it's just something that came with newer kernel version?
2) I suspect that missing phandle (and linux,phandle) could be the problem. How can I find out why they are not created?
3) I have defined only one pin for pinmux - could it be causing the problem?
Kind regards,
Marek Slomiany