On 05/23/2013 12:10 AM, CF wrote:

> Hello,
> 
> Despite my munerous reading, i'm locked in how to perform a basic RTDM
> for a simple ppc board.
> 
> This is a simple pin level setting. The linux kernel module i developped
> follow theses steps:
> -reading DTS for IOCTL et GPIOCTL base adress registers
> - out_be32(addr, value) at theses register to set line as an output and
> then set the logical level with setbits32(addr, bit) or clrbits32(addr,bit)
> 
> Basically, it works but in NRT  ops modes, so i'm unable (or at least i
> lack indication) to do this in RT ops mode (i don't think it is
> important, but i use ioctl to make my changes). I based my work on
> tut01/tut02 drivers, except i end up in using ioctl instead or
> read/write in the RTDM driver.
> 
> I guess i still could read the DTS in nrt mode (because it is done at
> rtdm_dev_register() time and won't interfere with RT task), but how can
> i drive the hardware directly in RT op mode ?


Hi,

I am not sure I understand the problem you have. If the board you use
uses gpiolib (I do not know if gpiolib is customary on ppc), you simply
have to check that the gpiolib callbacks do not use any Linux services
which can not be called from RT mode (if it uses a spinlock, the usual
method is to turn the spinlock into an I-pipe spinlock, see:
http://www.xenomai.org/index.php/I-pipe-core:ArmPorting#GPIOs_in_real-time_drivers)

If you are accessing directly the GPIO controller registers, and need a
"read-modify-write" operation, which what you posted seem to suggest,
you probably want to put a spinlock around these operations, but apart
from that, you can do this from an RT driver ioctl callback.

Regards.

-- 
                                                                Gilles.

_______________________________________________
Xenomai mailing list
[email protected]
http://www.xenomai.org/mailman/listinfo/xenomai

Reply via email to