LINUX.ORG.RU

Готов платить. yocto, u-boot, i.MX6UL, LAN8720A - не заводится ethernet.

 , , , ,


1

3

Всем шалом.

SOM - i.MX6UL Схема по части ethernet взята под копирку с i.MX6UL Starter (Express, если быть точным). Ethernet PHY - LAN8720A Сборка в yocto dey.

Передо мной встала задача пропатчить u-boot для поддержки различной периферии, чего нет в стоковом образе на борде под управлением i.MX6UL. Конкретно - нужен работающий ethernet для загрузки образов через tftp.

Стоковый u-boot я успешно стер, поэтому сейчас ковыряюсь только в собранных образах. До момента, когда я его стер, я успешно мог вычитывать регистры из LAN8270A. Зачем я его вообще стер, если работало ? Стер непреднамеренно, и в любом случае, рано или поздно, пришлось бы переезжать на патченный.

Как я сказал выше, моя кастомная борда полностью повторяет референсную по части изирнета (собираю я для ccimx6ulstarter), и, соответственно , используя нетронутые исходники dts и настройку iomux, FEC0 почему-то не заводится. В логах пишет ‘board_eth_init failed’, причем, если врубить дебаг, то до этого ругается на ненайденные атрибуты ‘compatible’ в fdt, хотя я знаю, что они есть как есть в самом .dtsi, так и в исходнике драйвера fec_mxc.c

bind node ethernet@02188000
   - attempt to match compatible string 'fsl,imx6ul-fec'
   - attempt to match compatible string 'fsl,imx6q-fec'
No match for node 'ethernet@02188000'

Однако, если к конфиге указать

#define CONFIG_FEC_ENET_DEV 1

, то есть поменять изернет с первого на второй, то при загрузке логов об ошибке больше нет и в u-boot можно даже повызывать команды mii без ошибки. Понятно, что одни нули там вычитываются, потому что LAN8720 подключен к первому. Это к сведению, вдруг поможет.

ЧЯДНТ ? Помогите разобраться, куда смотреть, что делать.



Последнее исправление: f77e (всего исправлений: 1)

Немного не понял, Ethernet не работает в Linux или на стадии u-boot (нужен tftp)?

Может даже по драйверу не совсем помогу, но в другом пригожусь

На самом деле я делал Ethernet врукопашную на FPGA, но настройки регистров (наверное не «команды mii» а команды SMI) и прочее - это дело общее для любого железа

I-Love-Microsoft ★★★★★
()

хотя я знаю, что они есть как есть в самом .dtsi

status = «disabled»;

В самой-то dts прописано status = "okay"; ?

arson ★★★★★
()
Ответ на: комментарий от I-Love-Microsoft

Да, объяснил немного спутанно. Речь только о u-boot.

На самом деле я делал Ethernet врукопашную на FPGA, но настройки регистров (наверное не «команды mii» а команды SMI) и прочее - это дело общее для любого железа

Ахах та оно-то понятно ) Спасибо.

f77e
() автор топика
Ответ на: комментарий от Dark_SavanT

Не забыл, проверял. Пичкал драйвер дебажными

printf("%s %s %d\n", __FILE__, __func__, __LINE__);

и все сходилось

f77e
() автор топика
Ответ на: комментарий от arson

Да.

Во всех dtsi он идет по дефолту «disabled» для всех девайсов, но в самом dts, в который уже разворачиваются по итогу все dtsi, статусы меняются на «okay». Собственно и в моем случае, он «okay».

f77e
() автор топика

Друзья мои, я прилично затянул проект и сейчас любая помощь будет кстати. Если кто-то готов не за бесплатно сделать добро - прошу связаться - haloperidoled@gmail.com

По оплате договоримся.

f77e
() автор топика

Стоковый u-boot я успешно стер, поэтому сейчас ковыряюсь только в собранных образах. До момента, когда я его стер, я успешно мог вычитывать регистры из LAN8270A. Зачем я его вообще стер, если работало ?

А почему не взять стоковый u-boot у кого-то, у кого такая же железка есть?

Как я сказал выше, моя кастомная борда полностью повторяет референсную по части изирнета

Можно у производителя стоковой борды еще запросить бинарник и исходник дефолтного u-boot.

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от SZT

Баалин, чеж я сразу не допер ! (это не сарказм).

Вобщем прошил бинари для референсной борды и история та же - эзернет не инициализируется.

Net:   FEC0 MXC: board_eth_init:failed
No ethernet found.

Куда копать ?

f77e
() автор топика
Ответ на: комментарий от f77e

А на самой борде ничего не сгорело? Разводка эзернета такая же? Если из u-boot загрузить какую-то ОС, в ней эзернет работает нормально?

Можно логическим анализатором потыкать в те линии, которые от основного процессора идут к чипу LAN8720A

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от SZT

А на самой борде ничего не сгорело? Разводка эзернета такая же?

Визуально - все в порядке, ничего не греется, да вроде и причин не было. Питался всегда только от USB ноута. Разводка такая же точно.

Да, с логическим анализатором хорошая идея. Как попробую - отпишусь.

f77e
() автор топика
Ответ на: комментарий от f77e

Net: FEC0 MXC: board_eth_init:failed

Вот нашел жалобы с аналогичной ошибкой

https://www.digi.com/support/forum/74223/usb-connection-error-imx6ull

https://community.nxp.com/thread/447585

советуют потыкать осциллографом и что это может наводки/шумы какие-то, взять экранированный кабель покороче

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 1)

Много неясного - у тебя в конфиге не включена поддержка модели драйверов Linux для ethernet (нет CONFIG_DM_ETH=y)

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/configs/ccimx6ulstarter_defconfig

и используется устаревший метод инициализации через board-файл, т.е. вместо инита из описания в device tree инит прописан вручную, поэтому вызывается устаревший board_eth_init. Я не уверен что он вообще должен работать, потому что даже на старом убуте 2017.03 в релизах NXP его не использовали

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/board/digi/ccimx6ulstarter/ccimx6ulstarter.c#L262

тут же помоему и ошибка - поиск и сброс PHY

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/board/digi/ccimx6ulstarter/ccimx6ulstarter.c#L273

до того как включено его тактирование

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/board/digi/ccimx6ulstarter/ccimx6ulstarter.c#L296

если кратко - попробуй закоментировать в конфиге

CONFIG_PHYLIB=y

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/configs/ccimx6ulstarter_defconfig#L31

по крайней мере драйвер не будет искать PHY а будет использовать адрес из конфига

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/drivers/net/fec_mxc.c#L1189

хотя сброс все равно кривой будет, но сеть должна заработать

anonymous
()
Ответ на: комментарий от SZT

Повтыкался логическим анализатором. При ресете с прошитым бинарником u-boot, скачанном с digi, сигналы MDIO и MCK действительно есть, Saleae даже распарсил их. То есть дело в программной части.

Наводок на припаянный USB не увидел даже на 0.1В.

Но за гуглеж спасибо.

f77e
() автор топика
Ответ на: комментарий от anonymous

Очень дельное замечание.

Сейчас, пока собирал, еще и сборку сломал )) Я хз, где я так нагрешил.

@I-Love-Microsoft, я знаю, ты вроде шаришь в Yocto, поэтому глянь плз.

После

devtool modify u-boot-dey

я вызываю

bitbake u-boot-dey

и получаю следующее

bb.data_smart.ExpansionError: Failure expanding variable SRCPV, expression was ${@bb.fetch2.get_srcrev(d)} which triggered exception FetchError: Fetcher failure: SRCREV was used yet no valid SCM was found in SRC_URI

В гугле пытался искать, но не нашел случая, применимого к моей ошибке.

f77e
() автор топика
Ответ на: комментарий от f77e

При ресете с прошитым бинарником u-boot, скачанном с digi, сигналы MDIO и MCK действительно есть, Saleae даже распарсил их. То есть дело в программной части.

Если раньше там был точно такой же бинарник u-boot и всё работало, а теперь не работает - каким образом дело может быть в программной части? Или бинарник не 100% такой же? Можешь ли ты найти такой конкретный бинарник, с которым оно работает?

SZT ★★★★★
()
Последнее исправление: SZT (всего исправлений: 2)
Ответ на: комментарий от anonymous

Если убрать CONFIG_PHYLIB, не включая CONFIG_DM_ETH, то FEC инициализируется. Данных на MDIO при инициализации нет. При вызове mii dump, вижу попытки прочитать регистры LAN8720.

Если при этом включить CONFIG_DM_ETH=y (который кстати требует CONFIG_DM_ETH и CONFIG_DM_REGULATOR), то сборка просто фейлится с ошибкой, что неудивительно, потому что определения эти взаимоисключающие, например в этом случае:

https://github.com/digi-embedded/u-boot/blob/v2017.03/maint/drivers/net/fec_mxc.c#L195

https://github.com/digi-embedded/u-boot/blob/v2017.03/maint/include/net.h#L169

Есть мысли, что можно еще попробовать ?

f77e
() автор топика
Ответ на: комментарий от f77e

Есть мысли, что можно еще попробовать ?

не зная твоей схемы сложно что-то сказать, в бордфайле есть несколько мест где нужно знать схему и проверять

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/board/digi/ccimx6ulstarter/ccimx6ulstarter.c#L284

местами у digi в коде просто какой-то трэш

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/board/digi/ccimx6ulstarter/ccimx6ulstarter.c#L284

ошибку я тебе описал ранее - инит FEC и PHY до того как включено их тактирование. По идее надо вызвать

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/board/digi/ccimx6ulstarter/ccimx6ulstarter.c#L435

вот тут

https://github.com/digi-embedded/u-boot/blob/v2018.03/maint/board/digi/ccimx6ulstarter/ccimx6ulstarter.c#L267

т.е. после переключения мультиплексора пинов FEC и PHY reset и перед инициализацией fecmxc_initialize_multi. Тогда можно и PHYLIB оставить - адрес PHY должен определиться автоматически на MDIO. Но тут есть нюанс если ты используешь два изернета - интерфеса два а шина MDIO одна из-за конфликта пинов MDIO/MDC у этих интерфейсов, т.е. второй интерфейс ты скорей всего не сможешь использовать - MDIO будет находить первый попавшийся PHY (с адресом 0) а он подключен к первому интерфейсу если схема как у их референса.

anonymous
()
Ответ на: комментарий от anonymous

Есть мысли, что можно еще попробовать ?

не зная твоей схемы сложно что-то сказать, в бордфайле есть несколько мест где нужно знать схему и проверять

Схема взята со starter’а.

Проверил на всякий случай по части эзернета - все сходится.

http://ftp1.digi.com/support/documentation/55001889-02-ENG_1P.pdf

f77e
() автор топика
Ответ на: комментарий от anonymous

т.е. после переключения мультиплексора пинов FEC и PHY reset и перед инициализацией fecmxc_initialize_multi. Тогда можно и PHYLIB оставить - адрес PHY должен определиться автоматически на MDIO. Но тут есть нюанс если ты используешь два изернета - интерфеса два а шина MDIO одна из-за конфликта пинов MDIO/MDC у этих интерфейсов, т.е. второй интерфейс ты скорей всего не сможешь использовать - MDIO будет находить первый попавшийся PHY (с адресом 0) а он подключен к первому интерфейсу если схема как у их референса.

Попробовал, все так же. Эзернет один, поэтому конфликта никакого нет.

f77e
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.