All of lore.kernel.org
 help / color / mirror / Atom feed
* [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
@ 2012-09-27 16:25 Andrey Nechypurenko
  2012-09-27 18:11 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 12+ messages in thread
From: Andrey Nechypurenko @ 2012-09-27 16:25 UTC (permalink / raw)
  To: xenomai

Hi,

I am currently working on simple RTDM driver for quadrature encoder
and want to register the handler for interrupt from GPIO pin using
rtdm_irq_request(). My platform is BeagleBoard xM (TI DM3730 ARM CPU),
3.2.21 Linux kernel with Xenomai-2.6.1.

When insmod-ing the driver for the very first time, I am getting the
following error message. However, after rmmod-ing and inserting the
driver again, the error message is not appearing any more. All
subsequent insertions and removals also do not generate any errors.

[  109.244410] I-pipe: Detected stalled head domain, probably caused by a bug.
[  109.244417]         A critical section may have been left unterminated.
[  109.258596] [<c001250c>] (unwind_backtrace+0x0/0xe0) from
[<c0075ba4>] (ipipe_request_irq+0x1c/0)
[  109.269958] [<c0075ba4>] (ipipe_request_irq+0x1c/0xd0) from
[<c007ca30>] (rthal_irq_request+0x34)
[  109.281951] [<c007ca30>] (rthal_irq_request+0x34/0x3c) from
[<c007ed48>] (xnintr_attach+0x54/0x1)
[  109.292274] [<c007ed48>] (xnintr_attach+0x54/0x100) from
[<c00b7c20>] (rtdm_irq_request+0x34/0x5)
[  109.302221] [<c00b7c20>] (rtdm_irq_request+0x34/0x5c) from
[<bf826890>] (initializeEncoders+0xa4)
[  109.313102] [<bf826890>] (initializeEncoders+0xa4/0xe0 [tb6612fng])
from [<bf826708>] (initpwm+0)
[  109.324364] [<bf826708>] (initpwm+0x130/0x1a4 [tb6612fng]) from
[<bf829094>] (init_module+0x94/0)
[  109.334984] [<bf829094>] (init_module+0x94/0xf0 [tb6612fng]) from
[<c0008748>] (do_one_initcall+)
[  109.345146] [<c0008748>] (do_one_initcall+0x94/0x174) from
[<c00653cc>] (sys_init_module+0x161c/)
[  109.354948] [<c00653cc>] (sys_init_module+0x161c/0x17f4) from
[<c000dbc0>] (ret_fast_syscall+0x0)
[  109.364657] ------------[ cut here ]------------
[  109.369472] WARNING: at include/linux/ipipe_debug.h:88
xnintr_attach+0xb0/0x100()
[  109.377267] Modules linked in: tb6612fng(O+) sdmak(O)
lpm_omap3530(O) dsplinkk(O) cmemk(O) easycn
[  109.391566] [<c001250c>] (unwind_backtrace+0x0/0xe0) from
[<c0036028>] (warn_slowpath_common+0x4)
[  109.401362] [<c0036028>] (warn_slowpath_common+0x4c/0x64) from
[<c0036058>] (warn_slowpath_null+)
[  109.411430] [<c0036058>] (warn_slowpath_null+0x18/0x1c) from
[<c007eda4>] (xnintr_attach+0xb0/0x)
[  109.423816] [<c007eda4>] (xnintr_attach+0xb0/0x100) from
[<c00b7c20>] (rtdm_irq_request+0x34/0x5)
[  109.434047] [<c00b7c20>] (rtdm_irq_request+0x34/0x5c) from
[<bf826890>] (initializeEncoders+0xa4)
[  109.444919] [<bf826890>] (initializeEncoders+0xa4/0xe0 [tb6612fng])
from [<bf826708>] (initpwm+0)
[  109.456206] [<bf826708>] (initpwm+0x130/0x1a4 [tb6612fng]) from
[<bf829094>] (init_module+0x94/0)
[  109.466824] [<bf829094>] (init_module+0x94/0xf0 [tb6612fng]) from
[<c0008748>] (do_one_initcall+)
[  109.478492] [<c0008748>] (do_one_initcall+0x94/0x174) from
[<c00653cc>] (sys_init_module+0x161c/)
[  109.489746] [<c00653cc>] (sys_init_module+0x161c/0x17f4) from
[<c000dbc0>] (ret_fast_syscall+0x0)
[  109.500334] ---[ end trace c1c770f3aa0b8c03 ]---

I am stuck searching for possible reasons for this error message and
would appreciate any help or hints.

Thank you,
Andrey.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 16:25 [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM) Andrey Nechypurenko
@ 2012-09-27 18:11 ` Gilles Chanteperdrix
  2012-09-27 21:05   ` Andrey Nechypurenko
  0 siblings, 1 reply; 12+ messages in thread
From: Gilles Chanteperdrix @ 2012-09-27 18:11 UTC (permalink / raw)
  To: Andrey Nechypurenko; +Cc: xenomai

On 09/27/2012 06:25 PM, Andrey Nechypurenko wrote:

> Hi,
> 
> I am currently working on simple RTDM driver for quadrature encoder
> and want to register the handler for interrupt from GPIO pin using
> rtdm_irq_request(). My platform is BeagleBoard xM (TI DM3730 ARM CPU),
> 3.2.21 Linux kernel with Xenomai-2.6.1.
> 
> When insmod-ing the driver for the very first time, I am getting the
> following error message. However, after rmmod-ing and inserting the
> driver again, the error message is not appearing any more. All
> subsequent insertions and removals also do not generate any errors.
> 
> [  109.244410] I-pipe: Detected stalled head domain, probably caused by a bug.
> [  109.244417]         A critical section may have been left unterminated.
> [  109.258596] [<c001250c>] (unwind_backtrace+0x0/0xe0) from
> [<c0075ba4>] (ipipe_request_irq+0x1c/0)
> [  109.269958] [<c0075ba4>] (ipipe_request_irq+0x1c/0xd0) from
> [<c007ca30>] (rthal_irq_request+0x34)
> [  109.281951] [<c007ca30>] (rthal_irq_request+0x34/0x3c) from
> [<c007ed48>] (xnintr_attach+0x54/0x1)
> [  109.292274] [<c007ed48>] (xnintr_attach+0x54/0x100) from
> [<c00b7c20>] (rtdm_irq_request+0x34/0x5)
> [  109.302221] [<c00b7c20>] (rtdm_irq_request+0x34/0x5c) from
> [<bf826890>] (initializeEncoders+0xa4)
> [  109.313102] [<bf826890>] (initializeEncoders+0xa4/0xe0 [tb6612fng])
> from [<bf826708>] (initpwm+0)
> [  109.324364] [<bf826708>] (initpwm+0x130/0x1a4 [tb6612fng]) from
> [<bf829094>] (init_module+0x94/0)
> [  109.334984] [<bf829094>] (init_module+0x94/0xf0 [tb6612fng]) from
> [<c0008748>] (do_one_initcall+)
> [  109.345146] [<c0008748>] (do_one_initcall+0x94/0x174) from
> [<c00653cc>] (sys_init_module+0x161c/)
> [  109.354948] [<c00653cc>] (sys_init_module+0x161c/0x17f4) from
> [<c000dbc0>] (ret_fast_syscall+0x0)
> [  109.364657] ------------[ cut here ]------------
> [  109.369472] WARNING: at include/linux/ipipe_debug.h:88
> xnintr_attach+0xb0/0x100()
> [  109.377267] Modules linked in: tb6612fng(O+) sdmak(O)
> lpm_omap3530(O) dsplinkk(O) cmemk(O) easycn
> [  109.391566] [<c001250c>] (unwind_backtrace+0x0/0xe0) from
> [<c0036028>] (warn_slowpath_common+0x4)
> [  109.401362] [<c0036028>] (warn_slowpath_common+0x4c/0x64) from
> [<c0036058>] (warn_slowpath_null+)
> [  109.411430] [<c0036058>] (warn_slowpath_null+0x18/0x1c) from
> [<c007eda4>] (xnintr_attach+0xb0/0x)
> [  109.423816] [<c007eda4>] (xnintr_attach+0xb0/0x100) from
> [<c00b7c20>] (rtdm_irq_request+0x34/0x5)
> [  109.434047] [<c00b7c20>] (rtdm_irq_request+0x34/0x5c) from
> [<bf826890>] (initializeEncoders+0xa4)
> [  109.444919] [<bf826890>] (initializeEncoders+0xa4/0xe0 [tb6612fng])
> from [<bf826708>] (initpwm+0)
> [  109.456206] [<bf826708>] (initpwm+0x130/0x1a4 [tb6612fng]) from
> [<bf829094>] (init_module+0x94/0)
> [  109.466824] [<bf829094>] (init_module+0x94/0xf0 [tb6612fng]) from
> [<c0008748>] (do_one_initcall+)
> [  109.478492] [<c0008748>] (do_one_initcall+0x94/0x174) from
> [<c00653cc>] (sys_init_module+0x161c/)
> [  109.489746] [<c00653cc>] (sys_init_module+0x161c/0x17f4) from
> [<c000dbc0>] (ret_fast_syscall+0x0)
> [  109.500334] ---[ end trace c1c770f3aa0b8c03 ]---
> 
> I am stuck searching for possible reasons for this error message and
> would appreciate any help or hints.


The message is likely a false positive. Could you post the init_module code?

-- 
                                                                Gilles.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 18:11 ` Gilles Chanteperdrix
@ 2012-09-27 21:05   ` Andrey Nechypurenko
  2012-09-27 21:06     ` Gilles Chanteperdrix
  0 siblings, 1 reply; 12+ messages in thread
From: Andrey Nechypurenko @ 2012-09-27 21:05 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

> The message is likely a false positive. Could you post the init_module code?

Sure, here it is. I removed some simple array initializations and
error handling code which is not invoked in this scenario to make
functions shorter. Two relevant places are marked with <<<

static struct rtdm_device device = {
  .struct_version = RTDM_DEVICE_STRUCT_VER,

  .device_flags = RTDM_NAMED_DEVICE,
  .context_size = sizeof(context_t),
  .device_name = DEVICE_NAME,

  .open_nrt = pwm_rtdm_open_nrt,

  .ops = {
    .close_nrt = pwm_rtdm_close_nrt,
    .read_nrt = pwm_rtdm_read_nrt,
    .write_nrt = pwm_rtdm_write_nrt,
  },

  .device_class = RTDM_CLASS_EXPERIMENTAL,
  .device_sub_class = SOME_SUB_CLASS,
  .profile_version = 1,
  .driver_name = "TB6612FNG-CTL",
  .driver_version = RTDM_DRIVER_VER(0, 1, 2),
  .peripheral_name = "TB6612FNG dual motor driver",
  .provider_name = "Andrey Nechypurenko",
  .proc_name = device.device_name,
};

int __init pwm_rtdm_init(void)
{
  int res;

  res = rtdm_dev_register(&device);
  if(res == 0)
    rtdm_printk("TB6612FNG: driver registered without errors\n");
  else
    {
          ... error handling
   }

  res = initpwm();
  return res;
}

int
initpwm(void)
{
  int i;
  int retval;

  // Set GPIO mode and configuration
  retval = InitGPIO(channels, sizeof(channels) / sizeof(channels[0]));
  rtdm_printk("TB6612FNG: Starting PWM generation timers.\n");
  retval = rtdm_timer_init(&up_timer, pwm_up, "up timer");

  for(i = 0; i < RC_NUM; i++)
    {
      retval = rtdm_timer_init(&down_timer[i], pwm_down, "down timer");
    }

  retval = rtdm_timer_start(&up_timer,
                            PERIOD, // we will use periodic timer
                            PERIOD, // PERIOD period
                            RTDM_TIMERMODE_RELATIVE);

  rtdm_printk("TB6612FNG: initializing encoder handlers\n");
  retval = initializeEncoders(); // <<<< this is the function where
irq is requested and warning is printed

  return 0;
}

int
initializeEncoders(void)
{
  void __iomem *confmem = NULL;
  int res = 0;
  const int irq = gpio_to_irq(143);
  rtdm_printk("IRQ for GPIO 143: %i\n", irq); // 303 for 143

  // Enable interrupts for rotary encoders
  confmem = ioremap(0x48200000, 0x05cc);

  iowrite32(0, confmem + 0x0010); // sysconfig
  iowrite32(1, confmem + 0x0050); // idle
  iowrite32(0, confmem + 0x0174); // ILRm
  // 15 = (gpio)143 - 128
  iowrite32(1 << 15, confmem + 0x0088); // clear MIRn (INTCPS_MIR_CLEARn)

  iounmap(confmem);

  res = rtdm_irq_request(&irq_handles[0],
                         irq, //303 - something happens,
                         encoderIrqHandler,
                         RTDM_IRQTYPE_EDGE,
                         "wheel-encoder1",
                         NULL);   <<<<<< This call causing the WARNING message
  return res;
}

int
encoderIrqHandler(rtdm_irq_t *irq_handle)
{
  ++irq_count;
  return RTDM_IRQ_HANDLED;
}


Thank you,
Andrey.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 21:05   ` Andrey Nechypurenko
@ 2012-09-27 21:06     ` Gilles Chanteperdrix
  2012-09-27 21:08       ` Andrey Nechypurenko
  2012-09-27 21:10       ` Andrey Nechypurenko
  0 siblings, 2 replies; 12+ messages in thread
From: Gilles Chanteperdrix @ 2012-09-27 21:06 UTC (permalink / raw)
  To: Andrey Nechypurenko; +Cc: xenomai

On 09/27/2012 11:05 PM, Andrey Nechypurenko wrote:

>   retval = InitGPIO(channels, sizeof(channels) / sizeof(channels[0]));


The code for this funtion is missing.

-- 
                                                                Gilles.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 21:06     ` Gilles Chanteperdrix
@ 2012-09-27 21:08       ` Andrey Nechypurenko
  2012-09-27 21:14         ` Gilles Chanteperdrix
  2012-09-27 21:10       ` Andrey Nechypurenko
  1 sibling, 1 reply; 12+ messages in thread
From: Andrey Nechypurenko @ 2012-09-27 21:08 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

On 27 September 2012 23:06, Gilles Chanteperdrix
<gilles.chanteperdrix@xenomai.org> wrote:
> On 09/27/2012 11:05 PM, Andrey Nechypurenko wrote:
>
>>   retval = InitGPIO(channels, sizeof(channels) / sizeof(channels[0]));
>
>
> The code for this funtion is missing.
>
> --
>                                                                 Gilles.
static void __iomem *confmem = NULL;


int
InitGPIO(ChannelConfig *channels, size_t ch_count)
{
  const u16 mode_value = (EN | PTD | M4);
  const u32 conf_val = ((1<<5)|(1<<2)|(1<<4)|(1<<3)|(1<<8)|(1<<6)|(1<<7));
  size_t i;
  u32 cur_val;

  rtdm_printk("TB6612FNG: configuring I/O pins mode\n");
  confmem = ioremap(0x48000000, 0x05cc);

  // STBY GPIO 133 - Bank 5, base addr 0x4905 6000
  iowrite16(mode_value, confmem + 0x215C + 2);
  // PWMA GPIO 130
  iowrite16(mode_value, confmem + 0x2158);
  // AIN1 GPIO 132
  iowrite16(mode_value, confmem + 0x215C);
  // AIN2 GPIO 131
  iowrite16(mode_value, confmem + 0x2158 + 2);
  // PWMB GPIO 136
  iowrite16(mode_value, confmem + 0x2164);
  // BIN1 GPIO 134
  iowrite16(mode_value, confmem + 0x2160);
  // BIN2 GPIO 135
  iowrite16(mode_value, confmem + 0x2160 + 2);

  // ENC1 GPIO 143
  iowrite16(IEN | mode_value, confmem + 0x2170 + 2);


  iounmap(confmem);
  confmem = NULL;
  confmem = ioremap(0x49050000, 0x05cc);
  if(!confmem)
    {
      rtdm_printk("TB6612FNG: GPIO bank mapping failed\n");
      return 2;
    }
  else
    rtdm_printk("TB6612FNG: GPIO bank mapped to address %p\n", confmem);

  // GPIO_OE - config pins as output
  cur_val = ioread32(confmem + 0x6034);
  iowrite32(cur_val & (~conf_val), confmem + 0x6034);
  // Disable the wakeupenable and irqenable intertupts
  cur_val = ioread32(confmem + 0x6080);
  iowrite32(cur_val | conf_val, confmem + 0x6080);
  // GPIO clear_irqenable1
  cur_val = ioread32(confmem + 0x6060);
  iowrite32(cur_val | conf_val, confmem + 0x6060);
  // GPIO clear_irqenable2 is offset
  cur_val = ioread32(confmem + 0x6070);
  iowrite32(cur_val | conf_val, confmem + 0x6070);

  // Enable interrupts for rotary encoders
  // 15 = (gpio)143 - 128
  // GPIO_OE - config pins as input
  cur_val = ioread32(confmem + 0x6034);
  iowrite32(cur_val | (1 << 15), confmem + 0x6034);
  // GPIO_RISINGDETECT
  iowrite32(1 << 15, confmem + 0x6048);
  //GPIO_FALLINGDETECT
  iowrite32(1 << 15, confmem + 0x604C);
  // GPIO_SETIRQENABLE1
  iowrite32(1 << 15, confmem + 0x6064);
  // GPIO_IRQENABLE1
  cur_val = ioread32(confmem + 0x601C);
  iowrite32(cur_val | (1 << 15), confmem + 0x601C);
  // GPIO_IRQSTATUS1
  iowrite32(1 << 15, confmem + 0x6018);
  return 0;
}


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 21:06     ` Gilles Chanteperdrix
  2012-09-27 21:08       ` Andrey Nechypurenko
@ 2012-09-27 21:10       ` Andrey Nechypurenko
  1 sibling, 0 replies; 12+ messages in thread
From: Andrey Nechypurenko @ 2012-09-27 21:10 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

> On 09/27/2012 11:05 PM, Andrey Nechypurenko wrote:
>
>>   retval = InitGPIO(channels, sizeof(channels) / sizeof(channels[0]));
>
>
> The code for this funtion is missing.

Actually, if it would be helpful, I can send the complete compilable
code (is not much more then what is already posted).


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 21:08       ` Andrey Nechypurenko
@ 2012-09-27 21:14         ` Gilles Chanteperdrix
  2012-09-27 21:24           ` Andrey Nechypurenko
  0 siblings, 1 reply; 12+ messages in thread
From: Gilles Chanteperdrix @ 2012-09-27 21:14 UTC (permalink / raw)
  To: Andrey Nechypurenko; +Cc: xenomai

On 09/27/2012 11:08 PM, Andrey Nechypurenko wrote:

> On 27 September 2012 23:06, Gilles Chanteperdrix
> <gilles.chanteperdrix@xenomai.org> wrote:
>> On 09/27/2012 11:05 PM, Andrey Nechypurenko wrote:
>>
>>>   retval = InitGPIO(channels, sizeof(channels) / sizeof(channels[0]));
>>
>>
>> The code for this funtion is missing.
>>
>> --
>>                                                                 Gilles.
> static void __iomem *confmem = NULL;
> 
> 
> int
> InitGPIO(ChannelConfig *channels, size_t ch_count)
> {
>   const u16 mode_value = (EN | PTD | M4);
>   const u32 conf_val = ((1<<5)|(1<<2)|(1<<4)|(1<<3)|(1<<8)|(1<<6)|(1<<7));
>   size_t i;
>   u32 cur_val;
> 
>   rtdm_printk("TB6612FNG: configuring I/O pins mode\n");
>   confmem = ioremap(0x48000000, 0x05cc);
> 
>   // STBY GPIO 133 - Bank 5, base addr 0x4905 6000
>   iowrite16(mode_value, confmem + 0x215C + 2);
>   // PWMA GPIO 130
>   iowrite16(mode_value, confmem + 0x2158);
>   // AIN1 GPIO 132
>   iowrite16(mode_value, confmem + 0x215C);
>   // AIN2 GPIO 131
>   iowrite16(mode_value, confmem + 0x2158 + 2);
>   // PWMB GPIO 136
>   iowrite16(mode_value, confmem + 0x2164);
>   // BIN1 GPIO 134
>   iowrite16(mode_value, confmem + 0x2160);
>   // BIN2 GPIO 135
>   iowrite16(mode_value, confmem + 0x2160 + 2);
> 
>   // ENC1 GPIO 143
>   iowrite16(IEN | mode_value, confmem + 0x2170 + 2);
> 
> 
>   iounmap(confmem);
>   confmem = NULL;
>   confmem = ioremap(0x49050000, 0x05cc);
>   if(!confmem)
>     {
>       rtdm_printk("TB6612FNG: GPIO bank mapping failed\n");
>       return 2;
>     }
>   else
>     rtdm_printk("TB6612FNG: GPIO bank mapped to address %p\n", confmem);
> 
>   // GPIO_OE - config pins as output
>   cur_val = ioread32(confmem + 0x6034);
>   iowrite32(cur_val & (~conf_val), confmem + 0x6034);
>   // Disable the wakeupenable and irqenable intertupts
>   cur_val = ioread32(confmem + 0x6080);
>   iowrite32(cur_val | conf_val, confmem + 0x6080);
>   // GPIO clear_irqenable1
>   cur_val = ioread32(confmem + 0x6060);
>   iowrite32(cur_val | conf_val, confmem + 0x6060);
>   // GPIO clear_irqenable2 is offset
>   cur_val = ioread32(confmem + 0x6070);
>   iowrite32(cur_val | conf_val, confmem + 0x6070);
> 
>   // Enable interrupts for rotary encoders
>   // 15 = (gpio)143 - 128
>   // GPIO_OE - config pins as input
>   cur_val = ioread32(confmem + 0x6034);
>   iowrite32(cur_val | (1 << 15), confmem + 0x6034);
>   // GPIO_RISINGDETECT
>   iowrite32(1 << 15, confmem + 0x6048);
>   //GPIO_FALLINGDETECT
>   iowrite32(1 << 15, confmem + 0x604C);
>   // GPIO_SETIRQENABLE1
>   iowrite32(1 << 15, confmem + 0x6064);
>   // GPIO_IRQENABLE1
>   cur_val = ioread32(confmem + 0x601C);
>   iowrite32(cur_val | (1 << 15), confmem + 0x601C);
>   // GPIO_IRQSTATUS1
>   iowrite32(1 << 15, confmem + 0x6018);
>   return 0;
> }
> 

You are really supposed to use the kernel API for these things, and not
touch the registers directly. But I agree that it is not the issue. No
sign of interrupt disabling. I think Jan already talked about the issue
you have:

http://www.xenomai.org/pipermail/xenomai/2012-September/026267.html

It is a false positive, you can safely ignore the warning or remove the
check from the code.

-- 
                                                                Gilles.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 21:14         ` Gilles Chanteperdrix
@ 2012-09-27 21:24           ` Andrey Nechypurenko
  2012-09-27 21:26             ` Andrey Nechypurenko
  2012-09-27 22:01             ` Gilles Chanteperdrix
  0 siblings, 2 replies; 12+ messages in thread
From: Andrey Nechypurenko @ 2012-09-27 21:24 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

> You are really supposed to use the kernel API for these things, and not
> touch the registers directly.

You are right and I will definitely change the pin configuration code.
It was just a very first quick prototype and I was unfamiliar with
corresponding kernel API.

Is it also "safe" to use kernel GPIO API to toggle GPIO from RT
context such as timer handler? With safe I mean if it can influence
real-time performance in some negative way?

Thank you,
Andrey.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 21:24           ` Andrey Nechypurenko
@ 2012-09-27 21:26             ` Andrey Nechypurenko
  2012-09-27 22:01             ` Gilles Chanteperdrix
  1 sibling, 0 replies; 12+ messages in thread
From: Andrey Nechypurenko @ 2012-09-27 21:26 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

> It is a false positive, you can safely ignore the warning or remove the
> check from the code.

Sounds good :-) . Thank you very much Gilles for such quick response
and explanations!


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 21:24           ` Andrey Nechypurenko
  2012-09-27 21:26             ` Andrey Nechypurenko
@ 2012-09-27 22:01             ` Gilles Chanteperdrix
  2012-09-28  8:52               ` Andrey Nechypurenko
  1 sibling, 1 reply; 12+ messages in thread
From: Gilles Chanteperdrix @ 2012-09-27 22:01 UTC (permalink / raw)
  To: Andrey Nechypurenko; +Cc: xenomai

On 09/27/2012 11:24 PM, Andrey Nechypurenko wrote:

>> You are really supposed to use the kernel API for these things, and not
>> touch the registers directly.
> 
> You are right and I will definitely change the pin configuration code.
> It was just a very first quick prototype and I was unfamiliar with
> corresponding kernel API.
> 
> Is it also "safe" to use kernel GPIO API to toggle GPIO from RT
> context such as timer handler? With safe I mean if it can influence
> real-time performance in some negative way?


Yes, it is supposed to be possible.

-- 
                                                                Gilles.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-27 22:01             ` Gilles Chanteperdrix
@ 2012-09-28  8:52               ` Andrey Nechypurenko
  2012-09-28 10:17                 ` Gilles Chanteperdrix
  0 siblings, 1 reply; 12+ messages in thread
From: Andrey Nechypurenko @ 2012-09-28  8:52 UTC (permalink / raw)
  To: Gilles Chanteperdrix; +Cc: xenomai

>> Is it also "safe" to use kernel GPIO API to toggle GPIO from RT
>> context such as timer handler? With safe I mean if it can influence
>> real-time performance in some negative way?
>
> Yes, it is supposed to be possible.

Here I hope you meant possible and safe to use and not that it can
possibly influence the real-time performance? Right?

Thank you,
Andrey.


^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM)
  2012-09-28  8:52               ` Andrey Nechypurenko
@ 2012-09-28 10:17                 ` Gilles Chanteperdrix
  0 siblings, 0 replies; 12+ messages in thread
From: Gilles Chanteperdrix @ 2012-09-28 10:17 UTC (permalink / raw)
  To: Andrey Nechypurenko; +Cc: xenomai

On 09/28/2012 10:52 AM, Andrey Nechypurenko wrote:
>>> Is it also "safe" to use kernel GPIO API to toggle GPIO from RT
>>> context such as timer handler? With safe I mean if it can influence
>>> real-time performance in some negative way?
>>
>> Yes, it is supposed to be possible.
> 
> Here I hope you meant possible and safe to use and not that it can
> possibly influence the real-time performance? Right?

See:
http://www.xenomai.org/index.php/I-pipe-core:ArmPorting#GPIOs

-- 
					    Gilles.


^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2012-09-28 10:17 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2012-09-27 16:25 [Xenomai] Error requesting IRQ on DM3730 (BeagleBoard xM) Andrey Nechypurenko
2012-09-27 18:11 ` Gilles Chanteperdrix
2012-09-27 21:05   ` Andrey Nechypurenko
2012-09-27 21:06     ` Gilles Chanteperdrix
2012-09-27 21:08       ` Andrey Nechypurenko
2012-09-27 21:14         ` Gilles Chanteperdrix
2012-09-27 21:24           ` Andrey Nechypurenko
2012-09-27 21:26             ` Andrey Nechypurenko
2012-09-27 22:01             ` Gilles Chanteperdrix
2012-09-28  8:52               ` Andrey Nechypurenko
2012-09-28 10:17                 ` Gilles Chanteperdrix
2012-09-27 21:10       ` Andrey Nechypurenko

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.