Ethernet

В: Ethernet не инициализируется, в логах ошибка phy_poll_reset failed: -110 или Cannot attach to PHY (-22 / -110). В чём причина?

О: GMAC на RK3568 получает MAC-адрес из EEPROM по шине I2C. Если EEPROM отсутствует или недоступен — интерфейс не поднимается. Решение: удалить из DTS-узла GMAC свойства nvmem-cells и nvmem-cells-names — MAC-адрес будет назначен случайно, и GMAC запустится.

Пример узла в DTS (barebox, .dtso):

// убрать или закомментировать: // nvmem-cells = <&mac_address>; // nvmem-cell-names = "mac-address";

Ссылка на референс: arch/arm/dts/rk3568-diasom-som-evb-ver1-2-1.dtso, строки 12–13.

В: Как отключить один из каналов Ethernet (GMAC0 или GMAC1) без пересборки образа?

О: В консоли barebox выполните:

of_fixup_status -d /ethernet@fe2a0000 # отключить GMAC0 of_fixup_status -d /ethernet@fe010000 # отключить GMAC1

В: При наличии EEPROM-микросхемы на шине I2C интерфейсы Ethernet исчезают из device tree. Как связаны I2C и GMAC?

О: Та же причина: GMAC читает MAC-адрес из EEPROM через I2C. Если EEPROM появляется на шине (например, от внешнего модуля супервизора) и его содержимое некорректно или недоступно на момент инициализации — GMAC не запускается. Решение аналогичное: убрать nvmem-cells / nvmem-cells-names из узла GMAC.

В: PHY RTL8211F не работает — питания есть, кварц работает, но инициализация не проходит.

О: Проверьте цепь MDIO: в референсной схеме DS-RK3568-EVB MDIO подтянут к плюсу питания, не к земле. Подтяжка к земле блокирует обмен. Также убедитесь в наличии всех питаний (3.3 В и 1 В) и корректной работе кварцевого резонатора.

В: В логах MDIO device at address X is missing — PHY не определяется

О: Адрес PHY в DTS выставлен неверно. Поскольку на каждом MDIO висит только один PHY, можно указать адрес reg = <0> — нулевой адрес работает как броадкаст и ответит единственный PHY:

rgmii_phy0: phy@0 { reg = <0>; ... };

Аналогично для второго PHY в mdio1.

В: Ethernet работает нестабильно, низкая скорость (100–200 Мбит/с вместо гигабита)

О: Проверьте наличие антизвонных резисторов на линиях RX_CLK и TX_CLK. Рекомендуемое значение — 22 Ом (как в референсной схеме EVB). Их отсутствие вызывает отражения сигнала на высоких частотах. Добавление резисторов устраняет зависания и восстанавливает скорость до гигабита.

В: PHY держит RESET в нуле — сигнал не отпускается после включения

О: Причина — отсутствие подтяжки сигнала RESET. Варианты:

  1. Добавить внешние резисторы подтяжки (pull-up) на линии RESET обоих PHY.

  2. Добавить в DTS: pcfg_pull_up для пинов RESET через pinctrl.

Без подтяжки пин фактически находится в неизвестном состоянии. Если PHY не отвечает (нет PHY_ID по MDIO) — драйвер не запускается и не отпускает RESET.

В: Какой драйвер PHY нужен для сторонних микросхем (например, Dapu Telecom, YT8531)?

О: PHY тип определяется автоматически через чтение PHY_ID по MDIO. Свойство compatible в узле mdio прописывать не нужно. Нужен только соответствующий драйвер в ядре. Например, для YT8531 — убедитесь, что собран net/phy/motorcomm. Рекомендуется использовать ядро из официального репозитория: github.com/MacroGroup/linux/tree/macro.