2048바이트 이후 직렬 DMA 일시중지

2048바이트 이후 직렬 DMA 일시중지

저는 DMA USART와 함께 Debian jessie(커널 4.1.10)를 실행하는 sama5d36 장치를 가지고 있습니다. DMA USART를 올바르게 출력하려면 ECHO와 ONLCR을 꺼야 했습니다.

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

여러 바이트를 보내는 테스트를 수행하면 2048바이트를 수신하고 다시 시작할 때까지 수신이 중지됩니다.

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

다음은 /proc/tty/driver/atmel_serial의 출력입니다.

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

내 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

atmel_serial의 DMA 버퍼는 512바이트입니다.

어떤 통찰력이 있습니까?

업데이트: 추가 플레이를 통해 시리얼이 2048바이트 이상을 쓸 것이지만 2048바이트 이후에는 멈추고 2048바이트가 쓰여진 후에만 쓸 것이라는 사실이 입증되었습니다. 커널에서 atmel_serial.c를 보면 링 버퍼가 1024로 설정된 것처럼 보입니다. 그래서 2048바이트가 왜 중요한지 여전히 혼란스럽습니다.

답변1

커널을 최신 커널로 업그레이드하세요. 이전 커널에서는 이 드라이버에 문제가 있었습니다.

관련 정보