AM335X-PRU-RPROC-4-9-TI-00A0 cannot boot any firmware

Hi,
I’m running latest debian image ‘Linux beaglebone 4.9.82-ti-r102 #1 SMP PREEMPT Thu Feb 22 01:16:12 UTC 2018 armv7l GNU/Linux’ on a BBB rev A5C.
I modified /boot/uEnv.txt to include:

  • uboot_overlay_addr4=/lib/firmware/BB-UART4-00A0.dtbo
  • uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-9-TI-00A0.dtbo
    UART4 is working fine.
    I have big troubles running GPIO Toggle example on pru (tested on pru0).

First of all:
I compiled the example onboard and I managed to get the binary .out file.

kernel does not seem to boot the firmware that I copied in ‘/lib/firmware/am335x-pru0-fw’
Looking at dmesg I have:

[ 28.341503] ti-pruss 4a300000.pruss: creating PRU cores and other child platform devices
[ 28.468932] remoteproc remoteproc1: 4a334000.pru0 is available
[ 28.469056] pru-rproc 4a334000.pru0: PRU rproc node /ocp/pruss_soc_bus@4a326000/pruss@4a300000/pru@4a334000 probed successfully
[ 28.508772] remoteproc remoteproc2: 4a338000.pru1 is available
[ 28.508896] pru-rproc 4a338000.pru1: PRU rproc node /ocp/pruss_soc_bus@4a326000/pruss@4a300000/pru@4a338000 probed successfully

and anything about ‘Booting…’
Also I have:

lsmod | grep pru
pruss_soc_bus 4788 0
pru_rproc 14966 0
pruss_intc 9092 1 pru_rproc
pruss 10889 1 pru_rproc

Second:
I tried to config pin P9.29 to prout according to 0x0F toggle on R30 and I get:

debian@beaglebone:~$ config-pin P9.29 pruout
P9_29 pinmux file not found!
sudo: no askpass program specified, try setting SUDO_ASKPASS
Cannot write pinmux file: /sys/devices/platform/ocp/ocp*P9_29_pinmux/state

Third:
The only effect of commenting out BB-UART4-00A0 is that most of the GPIO return to be exported as they were by default in vanilla installation.
pru firmware still does not get booted.

I’m stuck at this problem.
Please give me some advice.
Thanks in advance
Best regards
Filippo

I still cannot make it run
My confinguration is:

debian@beaglebone:~$ sudo /opt/scripts/tools/version.sh
[sudo] password for debian:
git:/opt/scripts/:[5935e83ecaedfd4fd88a4b870ffe5af33ded0617]
eeprom:[A335BNLT0A5C3313BBBK2454]
model:[TI_AM335x_BeagleBone_Black]
dogtag:[BeagleBoard.org Debian Image 2018-03-05]
bootloader:[microSD-(push-button)]:[/dev/mmcblk0]:[U-Boot 2018.01-00002-ge9ff418fb8]:[location: dd MBR]
bootloader:[eMMC-(default)]:[/dev/mmcblk1]:[U-Boot 2018.01-00002-ge9ff418fb8]:[location: dd MBR]
kernel:[4.9.82-ti-r102]
nodejs:[v6.13.0]
uboot_overlay_options:[enable_uboot_overlays=1]
uboot_overlay_options:[uboot_overlay_addr4=/lib/firmware/BB-UART4-00A0.dtbo]
uboot_overlay_options:[uboot_overlay_addr5=/lib/firmware/BB-I2C1-00A0.dtbo]
uboot_overlay_options:[uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-9-TI-00A0.dtbo]
uboot_overlay_options:[enable_uboot_cape_universal=1]
pkg:[bb-cape-overlays]:[4.4.20180305.0-0rcnee0~stretch+20180305]
pkg:[bb-wl18xx-firmware]:[1.20170829-0rcnee2~stretch+20180104]
pkg:[firmware-ti-connectivity]:[20170823-1rcnee0~stretch+20170830]
groups:[debian : debian adm kmem dialout cdrom floppy audio dip video plugdev users systemd-journal i2c bluetooth netdev cloud9ide gpio pwm eqep admin spi tisdk weston-launch xenomai]
cmdline:[console=ttyO0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 quiet]
dmesg | grep pinctrl-single
[ 1.391496] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
dmesg | grep gpio-of-helper
[ 1.392591] gpio-of-helper ocp:cape-universal: ready
END

  1. Tried to issue:
    sudo update-initramfs -uk uname -r
    as suggested in a previous post
    No changes.

  2. tried to uncomment

#disable_uboot_overlay_video=1
#disable_uboot_overlay_audio=1
that resulted in new error:
[ 27.142188] ti-pruss 4a300000.pruss: creating PRU cores and other child platform devices
[ 27.231329] PM: bootloader does not support rtc-only!
[ 27.269060] remoteproc remoteproc1: 4a334000.pru0 is available
[ 27.269188] pru-rproc 4a334000.pru0: PRU rproc node /ocp/pruss_soc_bus@4a326000/pruss@4a300000/pru@4a334000 probed successfully
[ 27.308335] remoteproc remoteproc2: 4a338000.pru1 is available
[ 27.308460] pru-rproc 4a338000.pru1: PRU rproc node /ocp/pruss_soc_bus@4a326000/pruss@4a300000/pru@4a338000 probed successfully

  1. Tried to use:
    uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo
    that show a new conflict

What I’m missing?
BR

Hi Filippo
How are you trying to toggles the PRUs? I do not have a BBB with me this weekend but I’ll have a look at it on Monday.

BTW, I have struggled with PRU too so I’ve wrote this memo: hhttps://github.com/PierrickRauby/PRU-RPMsg-Setup-BeagleBoneBlack , hope it can help you

Thanks
Pierrick

I still cannot make it run
My confinguration is:

    kernel:[4.9.82-ti-r102]

3) Tried to use:
uboot_overlay_pru=/lib/firmware/AM335X-PRU-UIO-00A0.dtbo
that show a new conflict

This kernel is too old for that pru option:

cd /opt/scripts/tools/
git pull
sudo ./update_kernel.sh --ti-channel --lts-4_9
sudo reboot

    pkg:[bb-cape-overlays]:[4.4.20180305.0-0rcnee0~stretch+20180305]

This pkg also needs to be updated:

sudo apt update
sudo apt install --only-upgrade bb-cape-overlays
sudo reboot

Regards,

Thank you Pierrick,
your valuable job did the trick.

What I missed was that PRUs need to be explicity started and stopped.
I assumed that they just should have been automatically started by kernel.

So:
sudo sh -c “echo ‘start’ > /sys/class/remoteproc/remoteproc1/state”
[ 91.626880] remoteproc remoteproc1: powering up 4a334000.pru0
[ 91.636173] remoteproc remoteproc1: Booting fw image am335x-pru0-fw, size 32772
[ 91.636250] remoteproc remoteproc1: remote processor 4a334000.pru0 is now up

sudo sh -c “echo ‘stop’ > /sys/class/remoteproc/remoteproc1/state”
[ 100.781202] ti-pruss 4a300000.pruss: unconfigured system_events = 0xffffffffffffffff host_intr = 0x00000001
[ 100.781230] remoteproc remoteproc1: stopped remote processor 4a334000.pru0

This solve the question but I’m not able to confirm that pin toggle example is working because I still need to set pinmux.
I think also that your work about data acquisition will be very helpful to me because I have to solve similar problem.

Thank you again.
Filippo

Thank you RoberCNelson,

I did both updates as suggested even if I think not to use UIO method that I tried as a workaround.
I greatly prefer RMPROC method for obvious reasons. And previous post put me on the right path to boot the PRUs firmware using RMPROC.

By the way,
now the kernel complains about:
[ 27.116011] pvrsrvkm: loading out-of-tree module taints kernel.
[ 27.667847] [drm] Initialized pvr 1.14.3699939 20110701 on minor 0

and I still have following errors when I enable I2C and UART overlays and uncomment the HDMI and AUDIO disable.
[ 26.911821] PM: bootloader does not support rtc-only!

I2C and UART are working fine.

Here’s my updated config:

[sudo] password for debian:
git:/opt/scripts/:[92d9c6bcdf437a3a1b3933e9a415496398d9b16c]
eeprom:[A335BNLT0A5C3313BBBK2454]
model:[TI_AM335x_BeagleBone_Black]
dogtag:[BeagleBoard.org Debian Image 2018-03-05]
bootloader:[microSD-(push-button)]:[/dev/mmcblk0]:[U-Boot 2018.01-00002-ge9ff418fb8]:[location: dd MBR]
bootloader:[eMMC-(default)]:[/dev/mmcblk1]:[U-Boot 2018.01-00002-ge9ff418fb8]:[location: dd MBR]
kernel:[4.9.88-ti-r111]
nodejs:[v6.13.0]
uboot_overlay_options:[enable_uboot_overlays=1]
uboot_overlay_options:[uboot_overlay_addr4=/lib/firmware/BB-UART4-00A0.dtbo]
uboot_overlay_options:[uboot_overlay_addr5=/lib/firmware/BB-I2C1-00A0.dtbo]
uboot_overlay_options:[disable_uboot_overlay_video=1]
uboot_overlay_options:[disable_uboot_overlay_audio=1]
uboot_overlay_options:[uboot_overlay_pru=/lib/firmware/AM335X-PRU-RPROC-4-9-TI-00A0.dtbo]
pkg:[bb-cape-overlays]:[4.4.20180424.0-0rcnee0~stretch+20180424]
pkg:[bb-wl18xx-firmware]:[1.20170829-0rcnee2~stretch+20180104]
pkg:[firmware-ti-connectivity]:[20170823-1rcnee0~stretch+20170830]
groups:[debian : debian adm kmem dialout cdrom floppy audio dip video plugdev users systemd-journal i2c bluetooth netdev cloud9ide gpio pwm eqep admin spi tisdk weston-launch xenomai]
cmdline:[console=ttyO0,115200n8 bone_capemgr.uboot_capemgr_enabled=1 root=/dev/mmcblk0p1 ro rootfstype=ext4 rootwait coherent_pool=1M net.ifnames=0 quiet]
dmesg | grep pinctrl-single
[ 1.407398] pinctrl-single 44e10800.pinmux: 142 pins at pa f9e10800 size 568
dmesg | grep gpio-of-helper
[ 1.408469] gpio-of-helper ocp:cape-universal: ready
END

Thanks and regards
Filippo

Both are safe to ignore.

Regards,

That’s fine.
Thank you

I am glad it works, i finally did not used the PRU for the data acquisition I am using the Industrial IO driver :

https://groups.google.com/forum/#!topic/beagleboard/Inl778gYuhg
Thanks
Pierrick