Project

General

Profile

How to enable PRU Subsystem on MityDSP-L138F SOM ???

Added by Ngoc Thanh Pham about 6 years ago

Hi everyone!

I'm using MityDSP-L138F SOM + IO Industrial Board and now trying to work with PRU subsystem of OMAP-L138 processor.
I've found some instructions from:
http://processors.wiki.ti.com/index.php/PRU_Linux_Application_Loader ()
and then rebuilt the kernel for SOM successfully (using MDK_2014-01-13 from Criticallink LLC )
However, after load the uImage (via tftp), boot up the board and load uio_pruss module, i can't run any PRU example from pru_sw project.
The error message are:

root@mityomapl138:~# ./PRU_gpioToggle

INFO: Starting PRU_gpioToggle example.
prussdrv_open open failed

I also try some command to verify uio_pruss driver, but my PRU module seem not configured correctly:

1 - I can't see ansy uio0 or uio1,... after "ls /dev" command.

2 - I was check in the file system, but i got a error message like this:

root@mityomapl138:~# cat /sys/class/uio/uio0/maps/map0/addr
cat: can't open '/sys/class/uio/uio0/maps/map0/addr': No such file or directory

Can anyone show me how to configure and run PRU example correctly?

Thanks in advance!

Regard,
Manh BT


Replies (11)

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Michael Williamson about 6 years ago

Hi,

I think we need to add the following patches (from linus tree) to the kernel to instantiate the PRUSS drivers for the L138.

2eb2478d471e45e1d0c8bb3defbf82bf7204e13d uio: uio_pruss: replace private SRAM API with genalloc
8e0d72d2c7a6955692ba0a21bbf5ca86e8061777 ARM: davinci: da8xx: add DA850 PRUSS support
ae41d17a76338ed4cb2ab2c7db2b5de9f9524609 ARM: davinci: da850 evm: register uio_pruss device
cb3771b049b3b554455094a3b06d8ceb07086e06 uio: uio_pruss: Fix potential NULL pointer dereference

We will need one additional patch similar to ae41d17a76338ed4cb2ab2c7db2b5de9f9524609 to register the device for the mitydsp-l138 board file.

I will try to get someone assigned to push the drivers in the MDK kernel. Sorry for the delay.

-Mike

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Ngoc Thanh Pham about 6 years ago

Hi Michael,

Thanks for your information, but where can I get above patches? Is it in Critical Link MDK ?

Regard,
Manh BT

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Bob Duke about 6 years ago

Hello Manh BT,

The patches Mike described are in the mainline Linux kernel (http://kernel.org/). You can search for those commit hashes via Google to see the required changes.

We are in the process of applying and testing these patches in our L138 kernel baseline and once they are ready you will see them on our support site: http://support.criticallink.com/gitweb/?p=linux-davinci.git;a=summary

Thanks,

-Bob

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Ngoc Thanh Pham about 6 years ago

Hi,

Thank you, I'm waiting for your patches. ^^

Regards,
Manh BT

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Jonathan Cormier about 6 years ago

Hi Ngoc,

I have been working on getting this to work. So far i've integrated the patches which i've posted to a test branch until we can confirm its working. Please checkout 'mitydsp-linux-v3.2_pruss_wip' branch. Currently it is creating the uio dev nodes but running some of the TI demos causes seg faults.

Heres my results so far:

Setting up examples, Note need the latest version of the svn repo. Revision 24 requested by the TI guide segfaults right away for the 3.2 kernel driver.

svn co https://gforge.ti.com/svn/pru_sw/trunk pru_sw
cd pru_sw
make CCTOOL_PREFIX=$TARGET_PREFIX libprussdrv
cd example_apps
make CCTOOLS=${TARGET_PREFIX}gcc

root@mityomapl138:~/bin_pru# ./PRU_gpioToggle

INFO: Starting PRU_gpioToggle example.
        INFO: Initializing example.
INFO: Executing pinmux configuration.
File ./pinmux.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
        INFO: Executing example.
File ./PRU_gpioToggle.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
INFO: Example failed.
        INFO: Executing pinmux reset.
File ./pinmux_reset.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.

Example failed..

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Jonathan Cormier about 6 years ago

Running through all the examples, atleast one of them seems to have caused a system segfault as not even reboot was able to run afterwards.

root@mityomapl138:~/bin_pru/bin# ls
PRU_ARMtoPRU_Interrupt        PRU_memAccessL3andDDR.bin
PRU_ARMtoPRU_Interrupt.bin    PRU_memAccessPRUDataRam
PRU_PRU0toPRU1_Interrupt.bin  PRU_memAccessPRUDataRam.bin
PRU_PRU1toPRU0_Interrupt.bin  PRU_memCopy
PRU_PRUtoARM_Interrupt        PRU_memCopy.bin
PRU_PRUtoARM_Interrupt.bin    PRU_miscOperations
PRU_PRUtoPRU_Interrupt        PRU_miscOperations.bin
PRU_access_const_table        PRU_multiply
PRU_access_const_table.bin    PRU_multiply.bin
PRU_edmaConfig.bin            PRU_pscConfig.bin
PRU_edmaInterrupt.bin         PRU_semaphore
PRU_gpioToggle                PRU_semaphore.bin
PRU_gpioToggle.bin            PRU_timer2Interrupt
PRU_mem1DTransfer             PRU_timer2Interrupt.bin
PRU_mem1DTransfer.bin         pinmux.bin
PRU_memAccessL3andDDR         pinmux_reset.bin
root@mityomapl138:~/bin_pru/bin# ./PRU_ARMtoPRU_Interrupt

INFO: Starting PRU_ARMtoPRU_Interrupt example.
        INFO: Initializing example.
File ./PRU_ARMtoPRU_Interrupt.bin open passed
        Generate interrupt
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example completed successfully.
root@mityomapl138:~/bin_pru/bin# ./PRU_PRUtoARM_Interrupt

INFO: Starting PRU_PRUtoARM_Interrupt example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_PRUtoARM_Interrupt.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.

^C
root@mityomapl138:~/bin_pru/bin# ./PRU_PRUtoPRU_Interrupt

INFO: Starting PRU_PRUtoPRU_Interrupt example.
        INFO: Initializing example.
        INFO: Executing example on PRU0.
File ./PRU_PRU0toPRU1_Interrupt.bin open passed
                INFO: Executing example on PRU1.
File ./PRU_PRU1toPRU0_Interrupt.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU0 completed transfer.
                INFO: Waiting for HALT command.
                INFO: PRU1 completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# ./PRU_access_const_table

INFO: Starting PRU_access_const_table example.
        INFO: Initializing example.
        INFO: Executing PSC configuration code .
File ./PRU_pscConfig.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
        INFO: Executing example.
File ./PRU_access_const_table.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# ./PRU_mem1DTransfer

INFO: Starting PRU_mem1DTransfer example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_mem1DTransfer.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# ./PRU_memAccessL3andDDR

INFO: Starting PRU_ARM_memAccessL3andDDR example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_memAccessL3andDDR.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# ./PRU_memAccessPRUDataRam
Segmentation fault
root@mityomapl138:~/bin_pru/bin# ./PRU_memCopy
Segmentation fault
root@mityomapl138:~/bin_pru/bin# ./PRU_multiply
Segmentation fault
root@mityomapl138:~/bin_pru/bin# ./PRU_semaphore
Segmentation fault
root@mityomapl138:~/bin_pru/bin# ./PRU_timer2Interrupt
Segmentation fault
root@mityomapl138:~/bin_pru/bin# ./PRU_ARMtoPRU_Interrupt
Segmentation fault
root@mityomapl138:~/bin_pru/bin# reboot
Segmentation fault

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Jonathan Cormier about 6 years ago

Reran some of the commands to see which fail. The ./PRU_memAccessL3andDDR can cause system segfaults as it appears to use a fixed part of ddr during its test and if a program or linux happens to be residing there then it will be overrided/corrupted.

root@mityomapl138:~/bin_pru/bin# ./PRU_memAccessL3andDDR

INFO: Starting PRU_ARM_memAccessL3andDDR example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_memAccessL3andDDR.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# ls
Segmentation fault

Rebooted

root@mityomapl138:~/bin_pru/bin# ./PRU_memAccessPRUDataRam

INFO: Starting PRU_memAccessPRUDataRam example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_memAccessPRUDataRam.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
INFO: Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# test
root@mityomapl138:~/bin_pru/bin#
root@mityomapl138:~/bin_pru/bin# ./PRU_memCopy

INFO: Starting PRU_memCopy example.
INFO: Initializing aligned example.
        INFO: Executing example.
File ./PRU_memCopy.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
INFO: Initializing same offset example.
        INFO: Executing example.
File ./PRU_memCopy.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
INFO: Initializing different offset example.
        INFO: Executing example.
File ./PRU_memCopy.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# test
root@mityomapl138:~/bin_pru/bin#
root@mityomapl138:~/bin_pru/bin# ./PRU_miscOperations

INFO: Starting PRU_miscOperations example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_miscOperations.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Masking and bit_shift operations were executed succesfully
Bubble sort was executed succesfully
Thresholding functionality was executed succesfully
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# test
root@mityomapl138:~/bin_pru/bin# ./PRU_multiply

INFO: Starting PRU_multiply example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_multiply.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# test
root@mityomapl138:~/bin_pru/bin# ./PRU_semaphore

Starting PRU PRU_semaphore example.
        INFO: Initializing example.
        INFO: Current Transfer size = 4 bytes.
PRU has permission
        INFO: Loading and executing transfer in PRU.
File ./PRU_semaphore.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
        INFO: Current Transfer size = 14 bytes.
ARM has permission
Segmentation fault
root@mityomapl138:~/bin_pru/bin#
root@mityomapl138:~/bin_pru/bin# ./PRU_timer2Interrupt

INFO: Starting PRU_timer2Interrupt example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_timer2Interrupt.bin open passed
        Waiting for HALT command.
        PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# test
root@mityomapl138:~/bin_pru/bin#
root@mityomapl138:~/bin_pru/bin# ./PRU_memAccessL3andDDR

INFO: Starting PRU_ARM_memAccessL3andDDR example.
        INFO: Initializing example.
        INFO: Executing example.
File ./PRU_memAccessL3andDDR.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
Example executed succesfully.
root@mityomapl138:~/bin_pru/bin# test
root@mityomapl138:~/bin_pru/bin# ls
PRU_ARMtoPRU_Interrupt        PRU_memAccessL3andDDR.bin
PRU_ARMtoPRU_Interrupt.bin    PRU_memAccessPRUDataRam
PRU_PRU0toPRU1_Interrupt.bin  PRU_memAccessPRUDataRam.bin
PRU_PRU1toPRU0_Interrupt.bin  PRU_memCopy
PRU_PRUtoARM_Interrupt        PRU_memCopy.bin
PRU_PRUtoARM_Interrupt.bin    PRU_miscOperations
PRU_PRUtoPRU_Interrupt        PRU_miscOperations.bin
PRU_access_const_table        PRU_multiply
PRU_access_const_table.bin    PRU_multiply.bin
PRU_edmaConfig.bin            PRU_pscConfig.bin
PRU_edmaInterrupt.bin         PRU_semaphore
PRU_gpioToggle                PRU_semaphore.bin
PRU_gpioToggle.bin            PRU_timer2Interrupt
PRU_mem1DTransfer             PRU_timer2Interrupt.bin
PRU_mem1DTransfer.bin         pinmux.bin
PRU_memAccessL3andDDR         pinmux_reset.bin

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Jonathan Cormier about 6 years ago

gpioToggle test passed when i just ran it. Not sure why.

root@mityomapl138:~/bin_pru/bin# ./PRU_gpioToggle

INFO: Starting PRU_gpioToggle example.
        INFO: Initializing example.
INFO: Executing pinmux configuration.
File ./pinmux.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
        INFO: Executing example.
File ./PRU_gpioToggle.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.
INFO: Example executed succesfully.
        INFO: Executing pinmux reset.
File ./pinmux_reset.bin open passed
        INFO: Waiting for HALT command.
        INFO: PRU completed transfer.

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Jonathan Cormier about 6 years ago

Ngoc,

Can you confirm that this is working for you and i'll move the changes into our main kernel branch?

I also created a wiki page to help future projects Using PRU

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Ngoc Thanh Pham about 6 years ago

Hi Jonathan,

Thank you for your patches, it's working for me!
I have applied and successfully rebuilt my kernel.
And almost PRU example from TI can run on my board.

Thanks you very much! ^^

_Regard,
Manh BT

RE: How to enable PRU Subsystem on MityDSP-L138F SOM ??? - Added by Jonathan Cormier about 6 years ago

Patches have been merged into linux-mityarm-v3.2 branch.

    (1-11/11)
    Add picture from clipboard (Maximum size: 500 MB)