* [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: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
* 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
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.