DMA serial en pausa después de 2048 bytes

DMA serial en pausa después de 2048 bytes

Tengo un dispositivo sama5d36 que ejecuta Debian jessie (kernel 4.1.10) con DMA USART. Para que DMA USART emitiera correctamente, tuve que desactivar ECHO y ONLCR.

stty -F /dev/ttyS2 -echo -onlcr speed 115200

Si hago una prueba en la que envío un montón de bytes, recibiré 2048 bytes y luego dejará de recibir hasta que reinicie.

cat testLines > /dev/ttyS2
cat < /dev/ttyS2

Aquí está el resultado de /proc/tty/driver/atmel_serial

2: uart:ATMEL_SERIAL mmio:0xF0020000 irq:31 tx:2185 rx:2048 DSR|CD|RI

Aquí está mi salida stty (stty -F /dev/ttyS2 -a):

atmel_usart f0020000.serial: using dma0chan4 for rx DMA transfers
atmel_usart f0020000.serial: using dma0chan5 for tx DMA transfers
speed 115200 baud; rows 0; columns 0; line = 0;
intr = ^C; quit = ^\; erase = ^?; kill = ^U; eof = ^D; eol = <undef>;
eol2 = <undef>; swtch = <undef>; start = ^Q; stop = ^S; susp = ^Z; rprnt = ^R;
werase = ^W; lnext = ^V; flush = ^O; min = 1; time = 0;
-parenb -parodd -cmspar cs8 hupcl -cstopb cread clocal -crtscts
-ignbrk -brkint -ignpar -parmrk -inpck -istrip -inlcr -igncr icrnl ixon -ixoff
-iuclc -ixany -imaxbel -iutf8
opost -olcuc -ocrnl -onlcr -onocr -onlret -ofill -ofdel nl0 cr0 tab0 bs0 vt0 ff0
isig icanon iexten -echo echoe echok -echonl -noflsh -xcase -tostop -echoprt
echoctl echoke

El búfer DMA para atmel_serial es de 512 bytes.

¿Alguna idea?

Actualización: seguir jugando ha demostrado que la serie escribirá más de 2048 bytes, pero se congela después de 2048 bytes y luego solo escribirá una vez que se hayan escrito 2048 bytes. Al mirar atmel_serial.c en el kernel, parece que el búfer de anillo está configurado para 1024. Así que todavía estoy confundido por qué 2048 bytes son significativos.

Respuesta1

Actualice su kernel a un kernel más nuevo. Hubo problemas con este controlador en los núcleos anteriores.

información relacionada