Jump to content

    

MAC + PHY

Добрый день.

Пытаюсь подключить к Raspberry Pi CM3+ (Linux raspberrypi 4.19.75-v7+) через USB HUB (USB2514) платы с USB-MAC (LAN7801) и PHY (88E1512) подключенные к выводам MDIO USB-MAC. 

2020-01-14_11-09-03.thumb.png.b031d9735d3aea5f4dc7070676e2f987.png

При подаче питания сетевое соединение появляется но на этом все хорошие новости заканчиваются. Согласно ethtool сетевое соединение поддерживает только 1000baseT/Full и сменить его не дает. После перезагрузки сетевое соединение вообще не появляется в устройствах.

В dmseg касательно phy и lan7801 имеются следующие строки:

Quote

[    0.303370] libphy: Fixed MDIO Bus: probed

[    0.305879] usbcore: registered new interface driver lan78xx

[    3.123764] libphy: lan78xx-mdiobus: probed

[    3.130829] lan78xx 1-1.1:1.0 (unnamed net_device) (uninitialized): int urb period 64[

 

При сборке ядра, драйвера Marvell для PHY подключал в ядро и в модули, разницы не заметил.

Может кто подсказать что делать? Поможет ли конфигурация Device Tree и как это сделать для моего случая?

 

Для проверки PHY подключался к его ножкам MDIO и считывал информацию с регистров, работает корректно. 

Edited by Bear_ku

Share this post


Link to post
Share on other sites
48 минут назад, Bear_ku сказал:

При подаче питания сетевое соединение появляется но на этом все хорошие новости заканчиваются. Согласно ethtool сетевое соединение поддерживает только 1000baseT/Full и сменить его не дает. После перезагрузки сетевое соединение вообще не появляется в устройствах.

В dmseg касательно phy и lan7801 имеются следующие строки:

после включения что показывает "lsusb"?

что видно после "cat /proc/net/dev"?

соберите драйвер lan78xx.c модулем и смотрите где валится функция lan78xx_probe через отладку или обычными printk

как вариант - не хватает питания на usb порту, попробуйте (если я правильно понял вашу конструкцию) в комп включить. если заведется, то ищите хаб с внешним питанием и пробуйте через него..

 

Share this post


Link to post
Share on other sites

Результат "lsusb":

Bus 001 Device 003: ID 0424:7801 Standard Microsystems Corp.
Bus 001 Device 002: ID 0424:2512 Standard Microsystems Corp. USB 2.0 Hub
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub

Результат "cat /proc/net/dev"

Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0:    2402      27    0    2    0     0          0         0     9897     131    0    0    0     0       0          0
    lo:    6270      66    0    0    0     0          0         0     6270      66    0    0    0     0       0          0

За совет спасибо, буду смотреть что делает драйвер lan78xx. 

С питанием проблем не должно быть, все подключено к лабораторному ИП и его возможности на порядок превышают требуемые.

К ПК подключить не могу, плата с сетевыми интерфейсами сделана нашлепкой на базовую плату и стандартного разъема USB у нее нет. 

А вот результат команды "ethtool eth0":

Settings for eth0:
        Supported ports: [ TP AUI BNC MII FIBRE ]
        Supported link modes:   1000baseT/Full
        Supported pause frame use: Symmetric Receive-only
        Supports auto-negotiation: Yes
        Supported FEC modes: Not reported
        Advertised link modes:  1000baseT/Full
        Advertised pause frame use: Symmetric
        Advertised auto-negotiation: No
        Advertised FEC modes: Not reported
        Speed: 1000Mb/s
        Duplex: Full
        Port: MII
        PHYAD: 0
        Transceiver: internal
        Auto-negotiation: off
Cannot get wake-on-lan settings: Operation not permitted
        Current message level: 0x00000007 (7)
                               drv probe link
        Link detected: yes

Может подскажете почему lan7801 может так себя вести? откуда взялся эти 1000baseT и почему в списке нет меньших скоростей?

Share this post


Link to post
Share on other sites
1 час назад, Bear_ku сказал:

Результат "cat /proc/net/dev"


Inter-|   Receive                                                |  Transmit
 face |bytes    packets errs drop fifo frame compressed multicast|bytes    packets errs drop fifo colls carrier compressed
  eth0:    2402      27    0    2    0     0          0         0     9897     131    0    0    0     0       0          0
    lo:    6270      66    0    0    0     0          0         0     6270      66    0    0    0     0       0          0

За совет спасибо, буду смотреть что делает драйвер lan78xx. 

Может подскажете почему lan7801 может так себя вести? откуда взялся эти 1000baseT и почему в списке нет меньших скоростей?

судя по строке:

eth0: 2402 27 0 2 0 0 0 0 9897 131 0 0 0 0 0 0

интерфейс поднимается и что-то получает/отправляет, а что выводит команда "ifconfig"?

и если ничего, то "ifconfig eth0 addr up" где addr свободный адрес в сети вашего компьютера и еще раз "ifconfig"

решение usb-ethernet обычно прожорливо и чувствительно к питанию 5В и там характерны жалобы как в вашем логе "int urb period 64"

ethtool может не работать, т.к. он запрашивает инфу и функции из драйвера, а там может быть не прописан нужный функционал

Share this post


Link to post
Share on other sites

Проверил питание. На плате стоит преобразователь 5В в 3.3В, 1.8В и т.д., все уровни в норме. 

Результат "ifconfig eth0":

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet 169.254.224.86  netmask 255.255.0.0  broadcast 169.254.255.255
        inet6 fe80::9ebf:84d3:f9d9:3a78  prefixlen 64  scopeid 0x20<link>
        ether 36:47:d6:da:be:d5  txqueuelen 1000  (Ethernet)
        RX packets 33  bytes 5290 (5.1 KiB)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 197  bytes 13050 (12.7 KiB)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0

Но работает не стабильно (например при подключении к свичу теряется до 80% пакетов)  и до первой перезагрузки. После этого вываливаются ошибки:

[    9.750190] lan78xx 1-1.1:1.0 eth0: no PHY driver found
[    9.750203] lan78xx 1-1.1:1.0 eth0: lan7801: PHY Init Failed

Сейчас ищу способ подружить LAN7801 с 88E1512.

А, да, еще есть такой момент. Для LAN7801 при включении вообще не важен PHY. А если убрать связь по MDIO с PHY, сетевое соединение не отваливается и при перезагрузке.

Share this post


Link to post
Share on other sites
On 1/14/2020 at 1:28 AM, Bear_ku said:

Добрый день.

Пытаюсь подключить к Raspberry Pi CM3+ (Linux raspberrypi 4.19.75-v7+) через USB HUB (USB2514) платы с USB-MAC (LAN7801) и PHY (88E1512) подключенные к выводам MDIO USB-MAC. 

 

Расскажу с чего бы я начал проверку.

Сначала немного простой теории.

Чтобы в Линуксе заработало устройство надо зарегистрировать само устройство (это происходит если правильно определить в дереве устройств) и драйвер.

зарегистрированные устройства и драйверы создают псевдо файлы здесь:

ls /sys/bus/usb/
devices  drivers  drivers_autoprobe  drivers_probe  uevent

устройства

/sys/bus/usb/devices  

драйверы
/sys/bus/usb/drivers

 

в вашем устройстве по меньшей два типа устройств PHY и USB. Я не знаю куда попадет PHY, но USB точно попадет куда я сказал. Могут быть еще устройства.

Попробуйте сравнить какие драйверы появляются если набрать команду lsmod до того как вставили USB. 

На каждый драйвер должно быть по меньшей мере одно устройство (а может и несколько одинаковых).

Поищите псевдофайлы устройств и драйверов. в директории /sys/

Share this post


Link to post
Share on other sites
21 hours ago, Bear_ku said:

Для LAN7801 при включении вообще не важен PHY. А если убрать связь по MDIO с PHY, сетевое соединение не отваливается и при перезагрузке

 

Драйвер lan7801 не находит PHY и срабатывает ветка для fixed phy

https://elixir.bootlin.com/linux/v4.19.96/source/drivers/net/usb/lan78xx.c#L2070

поэтому и ethtool показывает фиксированные параметры - что-то у вас не так со схемой подключения. Я бы начал проверку с VDDO_SEL pin


 

Quote

88E1512/88E1514 VDDO can operate at 1.8V/2.5V/3.3V supplies depending on the VDDO_SEL pin selection.

 

https://www.marvell.com/documents/eoxwrbluvwybgxvagkkf/

 

потом RESETn, CONFIG - много мест где можно накосячить, маловероятно что  софтовая проблема

Edited by sasamy

Share this post


Link to post
Share on other sites

Плату делал другой человек. Я сейчас перепроверяю за ним, каких-либо критических ошибок не нашел.  

VDDO_SEL подтянут к земле, т.е. выбраны уровни 2.5-3.3В, что соответствует уровням на плате 3.3В.

CONFIG на одной плате подключил к земле, на другой к питанию, т.е. адреса PHY 0 и 1. Оба не грузятся. 

PHY_RESET_N c LAN7801 подключен напрямую к RESETn 88E1512.

 

Ориентируясь на Device Tree от Raspberry Pi 3 добавил свой кусок:

/dts-v1/;
/plugin/;
 
/{
    compatible = "brcm,bcm2837";

    fragment@0 {
        target = <&usb>;

        __overlay__ {
            usb2512b@1 {
                compatible = "microchip,usb2512b";
                reg = <0x2c>;
                #address-cells = < 0x01 >;
                #size-cells = < 0x00 >;

                ethernet1: usbether@1 {
                    compatible = "usb424,7800";
                    reg = <1>;
                    local-mac-address = [ 00 11 22 33 44 55 ];

                    mdio {
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        eth_phy1: ethernet-phy@1 {
                            compatible = "marvell,88e1510";
                            device_type = "ethernet-phy";
                            reg = <0>;
                        };
                    };
                };

                ethernet2: usbether@2 {
                    compatible = "usb424,7800";
                    reg = <1>;
                    local-mac-address = [ 00 10 20 30 40 50 ];

                    mdio {
                        #address-cells = <0x1>;
                        #size-cells = <0x0>;
                        eth_phy2: ethernet-phy@2 {
                            compatible = "marvell,88e1510";
                            device_type = "ethernet-phy";
                            reg = <0>;
                        };
                    };
                };
            };
        };
    };
};

Но изменений нет, даже МАС адреса не изменяются. Все таки надеюсь что разгадка кроется где-то тут )

 

Дальше уже полезу кромсать плату и заводить MDIO на ноги RPi, минуя USB-MAC.

Edited by Bear_ku

Share this post


Link to post
Share on other sites

Кусок не выглядит правдоподобным. Конкретику надо в драйвере 7800 смотреть.

Share this post


Link to post
Share on other sites

А что именно вас тут смущает? И может подскажете как посмотреть, что реально из этого загружается?

Вот пример из Devicetree на lan78xx

&usb {
	usb-port@1 {
		compatible = "usb424,2514";
		reg = <1>;
		#address-cells = <1>;
		#size-cells = <0>;

		usb-port@1 {
			compatible = "usb424,2514";
			reg = <1>;
			#address-cells = <1>;
			#size-cells = <0>;

			ethernet: ethernet@1 {
				compatible = "usb424,7800";
				reg = <1>;
				local-mac-address = [ 00 11 22 33 44 55 ];

				mdio {
					#address-cells = <0x1>;
					#size-cells = <0x0>;
					eth_phy: ethernet-phy@1 {
						reg = <1>;
						microchip,led-modes = <
							LAN78XX_LINK_1000_ACTIVITY
							LAN78XX_LINK_10_100_ACTIVITY
						>;
					};
				};
			};
		};
	};
};

 

Share this post


Link to post
Share on other sites
24 минуты назад, Bear_ku сказал:

Но изменений нет, даже МАС адреса не изменяются. Все таки надеюсь что разгадка кроется где-то тут )

compatible = "marvell,88e1510";

так это.. id у 1510 и 1512 различаются и детект phy завершится ошибкой, а там колбеки для подстройки..

и 1512 достаточно требователен к выходной части в сторону меди

Share this post


Link to post
Share on other sites
25 minutes ago, Jury093 said:

детект phy завершится ошибкой

Нет. compatible у phy - это так, пережитки прошлого, определение идет исключительно по ID. Меня больше смущает выделение mdio как таковой...

Share this post


Link to post
Share on other sites
40 minutes ago, Jury093 said:

так это.. id у 1510 и 1512 различаются и детект phy завершится ошибкой, а там колбеки для подстройки..

и 1512 достаточно требователен к выходной части в сторону меди

Настройку 88E1512 брал отсюда:

https://forums.xilinx.com/t5/Embedded-Linux/Dual-Marvell-88e1512-PHY-Ethernet-problem-Xilinx-LInux/m-p/731207#M17356

Там используются два варианта настроек для "compatible":

compatible = "marvell,88e1510";
  и
compatible = "marvell";

Оба варианта не дали никакого результата.

 

13 minutes ago, gosha-z said:

Нет. compatible у phy - это так, пережитки прошлого, определение идет исключительно по ID. Меня больше смущает выделение mdio как таковой...

Я выше добавил пример из документации, там делается так. Не знаю как по другому указать, что MDIO от PHY подключен именно к LAN7801 и как еще задать адрес.

 

В ходе загрузки получается что модуль с драйвером marvell не грузится. На шине MDIO адрес при включении платы "0", после перезагрузки "1". Вообщем живет своей жизнью. Осциллографом успеваю поймать только одно обращение по шине. Вскоре приедет логический анализатор и может он хоть что-то даст.

 

Ну и как написал выше, МАС адрес из Devicetree на сетевое устройство не подключается. Т.е. там может ерунда написана, но может его еще кто-то правит.

Edited by Bear_ku

Share this post


Link to post
Share on other sites
1 hour ago, Bear_ku said:

Ориентируясь на Device Tree от Raspberry Pi 3 добавил свой кусок:

 

42 minutes ago, Bear_ku said:

ethernet: ethernet@1 { compatible = "usb424,7800";

почему 7800 если у вас 7801 с внешним PHY, да и сомневаюсь что прописав PHY в DT это что-то изменит - PHY должен автоматом определяться. Осцилом не пробовали смотреть обмен по mdio ?

 

1 hour ago, Bear_ku said:

Дальше уже полезу кромсать плату и заводить MDIO на ноги RPi, минуя USB-MAC

 

для начала отладочные сообщения включите в драйвере

Share this post


Link to post
Share on other sites

А с чего вы вообще взяли, что для 7801 должен быть такой compatible?

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now