USB-RS232 adapter problem in 3.14.xx

Hi,

I have a simple C program which writes something to a serial port and then reads an answer, every 5 ms or so. I’m using an FTDI USB-to-RS232 adapter connected to BBB at 115200 bps. In 3.8.13-bone63 this works fine, but there are some reasons I need to use a later kernel. I upgraded to the 3.14.22-ti-r31 kernel, where my program freezes the user space completely after a couple of seconds. Unplugging the USB adapter makes everything run again (but of course my program closes since the serial port is no longer there). Nothing special in dmesg. I then upgraded to 3.14.26-ti-r43, where the problem is slightly different, appearing after several minutes to an hour or so, and not freezing completely, making everything just incredibly slow (softirq’s use about 70 % of CPU time according to top). Closing my program brings everything back to normal. Then I tried 3.18.2-bone1, where it works again correctly.

I see that bone-kernels have DMA disabled in USB, but I also tried use_dma=0 module parameter with 3.14.26-ti-r43 and it didn’t help. I’d use 3.18.2, but unfortunately dtb-rebuilder doesn’t have a branch for that kernel, and I need to modify the GPIO’s a little. The .dtb-file for 3.14.26 doesn’t boot with 3.18.2.

So,

  1. Is there something I could try to make it work on 3.14-ti kernels?
  2. Is there an easy way to create a custom dtb for the 3.18-bone kernels?

Thanks,
Matti

Hi,

I have a simple C program which writes something to a serial port and then
reads an answer, every 5 ms or so. I'm using an FTDI USB-to-RS232 adapter
connected to BBB at 115200 bps. In 3.8.13-bone63 this works fine, but there
are some reasons I need to use a later kernel. I upgraded to the
3.14.22-ti-r31 kernel, where my program freezes the user space completely
after a couple of seconds. Unplugging the USB adapter makes everything run
again (but of course my program closes since the serial port is no longer
there). Nothing special in dmesg. I then upgraded to 3.14.26-ti-r43, where
the problem is slightly different, appearing after several minutes to an
hour or so, and not freezing completely, making everything just incredibly
slow (softirq's use about 70 % of CPU time according to top). Closing my
program brings everything back to normal. Then I tried 3.18.2-bone1, where
it works again correctly.

I see that bone-kernels have DMA disabled in USB, but I also tried use_dma=0
module parameter with 3.14.26-ti-r43 and it didn't help. I'd use 3.18.2, but
unfortunately dtb-rebuilder doesn't have a branch for that kernel, and I
need to modify the GPIO's a little. The .dtb-file for 3.14.26 doesn't boot
with 3.18.2.

So,
1) Is there something I could try to make it work on 3.14-ti kernels?

Disable:
CONFIG_USB_TI_CPPI41_DMA

Enable:
CONFIG_MUSB_PIO_ONLY

2) Is there an easy way to create a custom dtb for the 3.18-bone kernels?

Use the v3.19.x branch:

https://github.com/RobertCNelson/dtb-rebuilder/tree/3.19.x

Regards,

Hi,

I have a simple C program which writes something to a serial port and then
reads an answer, every 5 ms or so. I’m using an FTDI USB-to-RS232 adapter
connected to BBB at 115200 bps. In 3.8.13-bone63 this works fine, but there
are some reasons I need to use a later kernel. I upgraded to the
3.14.22-ti-r31 kernel, where my program freezes the user space completely
after a couple of seconds. Unplugging the USB adapter makes everything run
again (but of course my program closes since the serial port is no longer
there). Nothing special in dmesg. I then upgraded to 3.14.26-ti-r43, where
the problem is slightly different, appearing after several minutes to an
hour or so, and not freezing completely, making everything just incredibly
slow (softirq’s use about 70 % of CPU time according to top). Closing my
program brings everything back to normal. Then I tried 3.18.2-bone1, where
it works again correctly.

I see that bone-kernels have DMA disabled in USB, but I also tried use_dma=0
module parameter with 3.14.26-ti-r43 and it didn’t help. I’d use 3.18.2, but
unfortunately dtb-rebuilder doesn’t have a branch for that kernel, and I
need to modify the GPIO’s a little. The .dtb-file for 3.14.26 doesn’t boot
with 3.18.2.

So,

  1. Is there something I could try to make it work on 3.14-ti kernels?

Disable:
CONFIG_USB_TI_CPPI41_DMA

Enable:
CONFIG_MUSB_PIO_ONLY

I’ll try these if I have the need to go back to 3.14-series.

  1. Is there an easy way to create a custom dtb for the 3.18-bone kernels?

Use the v3.19.x branch:

https://github.com/RobertCNelson/dtb-rebuilder/tree/3.19.x

Thanks, this helped! Now I’m running happily with 3.18.2-bone1.

Matti