Железячники

Железячники

Никто не сталкивался со случаем, где UART шизеет от некоторого количества мусора
в линии (например due to baud rate mismatch). Перестает чего-либо получать до
реинициализации (закрытия порта всеми процессами).

Конкретно, UART внутри винбондовского super io chip.

--

Sol Windborn

Re: Железячники

Sol Windborn wrote:


Никто не сталкивался со случаем, где UART шизеет от некоторого
количества мусора в линии (например due to baud rate mismatch).
Перестает чего-либо получать до реинициализации (закрытия порта всеми
процессами).

Конкретно, UART внутри винбондовского super io chip.


Сталкивались. И что? Сделать ничего нельзя - только реинициализировать.

Re: Железячники

Zayonc wrote:



Никто не сталкивался со случаем, где UART шизеет от некоторого
количества мусора в линии (например due to baud rate mismatch).
Перестает чего-либо получать до реинициализации (закрытия порта всеми
процессами).

Конкретно, UART внутри винбондовского super io chip.


Сталкивались. И что? Сделать ничего нельзя - только реинициализировать.


Ясно. А подхачить 8250.c? Может уже кто делал?

У меня этот кернел уже похачен для кривого филлипсовского uart на arm'е, вот
теперь еще один, блин, на pc...

--

Sol Windborn

Re: Железячники

Sol Windborn wrote:

Никто не сталкивался со случаем, где UART шизеет от некоторого
количества мусора в линии (например due to baud rate mismatch).
Перестает чего-либо получать до реинициализации (закрытия порта всеми
процессами).


Линукс?


Конкретно, UART внутри винбондовского super io chip.


В UART-ах есть много волшебных багов. Казалось бы, спек страниц на 5,
так нет же, б****. Даже у Интела в чипсетах. Частично из-за уродства
самого спека, конечно...

Re: Железячники

On Mar 27, 7:45 pm, Sol Windborn
<r...@earth.solarsystem.milkyway.universe> wrote:

Никто не сталкивался со случаем, где UART шизеет от некоторого количества мусора
в линии (например due to baud rate mismatch). Перестает чего-либо получать до
реинициализации (закрытия порта всеми процессами).

Конкретно, UART внутри винбондовского super io chip.


А что такое UART?

Иван

Re: Железячники

Cyril Novikov wrote:



Никто не сталкивался со случаем, где UART шизеет от некоторого
количества мусора в линии (например due to baud rate mismatch).
Перестает чего-либо получать до реинициализации (закрытия порта всеми
процессами).


Линукс?


Типа того.



Конкретно, UART внутри винбондовского super io chip.


В UART-ах есть много волшебных багов. Казалось бы, спек страниц на 5,
так нет же, б****. Даже у Интела в чипсетах. Частично из-за уродства
самого спека, конечно...


Да. Оно обязано быть bug to bug compatible с кривым чипом из 80-махрового года с
кривым интерфейсом.

Опыт починки кривых UART'ов с errata в руках есть. Тут, однако, вся периферия в
одном чипе и тишина насчет багов... Рядом, однако, стоит PC с другой mb --
проблем нет. Ненавижу.

--

Sol Windborn

Re: Железячники

Sol Windborn wrote:

Cyril Novikov wrote:



Никто не сталкивался со случаем, где UART шизеет от некоторого
количества мусора в линии (например due to baud rate mismatch).
Перестает чего-либо получать до реинициализации (закрытия порта всеми
процессами).


Линукс?


Типа того.


Тогда тяжело. В линуксе самый железобетонный драйвер 8250, который я видел.
Например, во Фре драйвер неправильный, и он непременно будет виснуть на кривом
железе (потому что доверяет регистру IIR, а один из традиционных багов -
несообщение железом о всех событиях через IIR).




Конкретно, UART внутри винбондовского super io chip.


В UART-ах есть много волшебных багов. Казалось бы, спек страниц на 5,
так нет же, б****. Даже у Интела в чипсетах. Частично из-за уродства
самого спека, конечно...


Да. Оно обязано быть bug to bug compatible с кривым чипом из
80-махрового года с кривым интерфейсом.

Опыт починки кривых UART'ов с errata в руках есть. Тут, однако, вся
периферия в одном чипе и тишина насчет багов... Рядом, однако, стоит PC
с другой mb -- проблем нет. Ненавижу.


Типичная причина затыканий в UART-е - потеря event-driven прерываний. После
этого повторные события того же типа прерывания не вызывают, и в результате
имеем подвисшую передачу или прием данных. Но именно линуксовый драйвер вроде бы
должен с этим хорошо бороться. Если ядро старое, стоит попробовать драйвер из
новых ядер. Если нет, то можно попробовать метод грубой силы: где-нибудь раз в
секунду, по таймеру, вызывать обработчик прерывания от девайса.

Re: Железячники

Cyril Novikov wrote:




Линукс?


Типа того.


Тогда тяжело. В линуксе самый железобетонный драйвер 8250, который я
видел. Например, во Фре драйвер неправильный, и он непременно будет
виснуть на кривом железе (потому что доверяет регистру IIR, а один из
традиционных багов - несообщение железом о всех событиях через IIR).


В Линуксе сидит Расселл Кинг, который похож на Стивена Хокинга и всех посылает
нах. Он очень умный, поэтому я этот mud ball понимать каждый раз заново ненавижу.





Конкретно, UART внутри винбондовского super io chip.


В UART-ах есть много волшебных багов. Казалось бы, спек страниц на 5,
так нет же, б****. Даже у Интела в чипсетах. Частично из-за уродства
самого спека, конечно...


Да. Оно обязано быть bug to bug compatible с кривым чипом из
80-махрового года с кривым интерфейсом.

Опыт починки кривых UART'ов с errata в руках есть. Тут, однако, вся
периферия в одном чипе и тишина насчет багов... Рядом, однако, стоит
PC с другой mb -- проблем нет. Ненавижу.


Типичная причина затыканий в UART-е - потеря event-driven прерываний.
После этого повторные события того же типа прерывания не вызывают, и в
результате имеем подвисшую передачу или прием данных. Но именно
линуксовый драйвер вроде бы должен с этим хорошо бороться. Если ядро
старое, стоит попробовать драйвер из новых ядер. Если нет, то можно
попробовать метод грубой силы: где-нибудь раз в секунду, по таймеру,
вызывать обработчик прерывания от девайса.


Да, именно прерывания и затыкаются... Щаз попробуем таймер. Это лучше, чем
хачить клиентский код.

--

Sol Windborn