sc16is7xx problems

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



Dear All,

I have a problem with this (?) driver. I use a microcontroller as a generator
of data sent over uart to sc16is762. The latter is connected to raspberry pi zero
through i2c, and only channel 'A' is used in the chip.

When there is no data coming from the uC, using stty to configure the port works fine.
Once the port is configured I can cat /dev/ttySC0 and then when data start coming,
everything is ok.

But there are some problems:

- sometimes when 'cat' is stopped with ^C while data is still coming, the 'cat'
hangs forever
- very often 'cat' hangs when started while data is coming; strace shows it
hangs on open; but when the stream of data is stopped and started again,
open finally succeeds and cat continues as expected (unless the above happens)
- when any of the above problems happen very often there are many repeated
messages like this:

"sc16is7xx 1-004d: ttySC0: Possible RX FIFO overrun: 64"
 
or, less often, ".... ttySC0: Unexpected interrupt: 8".

To summarize: starting and stopping 'cat' while no data is coming is ok,
but when data is coming then 'cat' tends to hang, stty also often hangs.

Example scenario without problems:
# # no data coming
# stty -F /dev/ttySC0 cs8 -cstopb -ixon raw speed 115200
# cat /dev/ttySC0
# # start transmitting data to sc16is762
ABCDEF...........
# # stop transmitting data
#^C
# # cat stops gracefully

Example scenario with problems:
# # start transmitting data to sc16is762
# stty -F /dev/ttySC0 cs8 -cstopb -ixon raw speed 115200
# cat /dev/ttySC0
# # nothing happens
# # stop transmitting data and start again
ABCDEF...........


It seems that when a problem happens the sc16is7xx_set_termios() is
called and stops at sc16is7xx_port_write() (the first port write
in the function, right after parity, stop bits, read status mask
and ignore mask are computed).

I am stuck with debugging it any further. Can anyone please help?
I am comfortable with applying patches and testing, I can also
add debug printks here and there, but need someone to point me
in the right direction.

I am using kernel 4.9 from raspberry pi's github; it is Linus v4.9 + 114 patches,
but none of them seems to touch the sc16is7xx.

My device tree overlay:

/dts-v1/;
/plugin/;

/ {
	compatible = "brcm,bcm2835", "brcm,bcm2708", "brcm,bcm2709";

	fragment@0 {
		target = <&i2c_arm>;
		__overlay__ {
			#address-cells = <1>;
			#size-cells = <0>;
			status = "okay";

			sc16is752: sc16is752@48 {
				compatible = "nxp,sc16is752";
				reg = <0x48>; /* address */
				clocks = <&sc16is752_clk>;
				interrupt-parent = <&gpio>;
				interrupts = <24 2>; /* IRQ_TYPE_EDGE_FALLING */
				#gpio-cells = <2>;

				sc16is752_clk: sc16is752_clk {
					compatible = "fixed-clock";
					#clock-cells = <0>;
					clock-frequency = <14745600>;
				};
			};
		};
	};


	__overrides__ {
		int_pin = <&sc16is752>,"interrupts:0";
		addr = <&sc16is752>,"reg:0";
	};

};

Regards,

Andrzej

PS. I am not subscribed to the list, co please Cc me when answering.
--
To unsubscribe from this list: send the line "unsubscribe linux-serial" in
the body of a message to majordomo@xxxxxxxxxxxxxxx
More majordomo info at  http://vger.kernel.org/majordomo-info.html



[Index of Archives]     [Kernel Newbies]     [Security]     [Netfilter]     [Bugtraq]     [Linux PPP]     [Linux FS]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Samba]     [Video 4 Linux]     [Linmodem]     [Device Mapper]     [Linux Kernel for ARM]

  Powered by Linux