Jump to content

    

MAC + PHY

4 minutes ago, Bear_ku said:

На шине MDIO адрес при включении платы "0", после перезагрузки "1".

и вы бодро говорите что с подключением все ОК ?

Quote

The VDDO_LEVEL configuration bit can be overwritten by software. PHYAD cannot be overwritten.

 

Share this post


Link to post
Share on other sites
14 minutes ago, sasamy said:

 

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

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

Тут реально ошибка. Исправил на 7801, изменений нет.

С отладочными сообщениями у меня проблема. Вроде бы и включил их в .config, размер библиотек вырос раза в 3. Но в dmesg новой информации, по крайней мере касательно интересующей темы, не появилось. Если подскажете как правильно сделать и куда смотреть, буду благодарен.

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

11 minutes ago, gosha-z said:

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

Вот цитата из документации:

Required properties:
- compatible: Should be one of "usb424,7800", "usb424,7801" or "usb424,7850".

 

11 minutes ago, sasamy said:

и вы бодро говорите что с подключением все ОК ?

 

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

Share this post


Link to post
Share on other sites

А покажите dmesg при включении LAN8701. И какой адрес выставлен на марвеле?

Share this post


Link to post
Share on other sites
8 minutes ago, Bear_ku said:

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

Адрес PHY устанавливается исключительно аппаратной конфигурацией - я вам даташит процитировал

Quote

2.18.1 Hardware Configuration

After the deassertion of RESETn the device will be hardware configured.

The device is configured through the CONFIG pin

 

не может он скакать с 0 на 1 если CONFIG подключен к VSS

Edited by sasamy

Share this post


Link to post
Share on other sites

Сейчас у меня к базовой плате подключено два одинаковых модуля. На одном адрес PHY "0", на другом "1".

После включения (на пойманном осциллографе сообщении адрес 0, загрузились eth0 и eth1):

[    3.162884] usb 1-1.1: New USB device found, idVendor=0424, idProduct=7801, bcdDevice= 3.00
[    3.177790] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.266887] usb 1-1.2: new high-speed USB device number 4 using dwc_otg
[    3.365955] usb 1-1.2: New USB device found, idVendor=0424, idProduct=7801, bcdDevice= 3.00
[    3.380600] usb 1-1.2: New USB device strings: Mfr=0, Product=0, SerialNumber=0
...
[   10.741131] libphy: lan78xx-mdiobus: probed
[   10.741223] lan78xx 1-1.1:1.0 (unnamed net_device) (uninitialized): int urb period 64
[   10.967083] libphy: lan78xx-mdiobus: probed
[   10.967241] lan78xx 1-1.2:1.0 (unnamed net_device) (uninitialized): int urb period 64
[   10.998643] usbcore: registered new interface driver lan78xx

При перезагрузке (на пойманном осциллографе сообщении адрес 1, загрузился только один eth0):

[    3.170826] usb 1-1.1: New USB device found, idVendor=0424, idProduct=7801, bcdDevice= 3.00
[    3.185233] usb 1-1.1: New USB device strings: Mfr=0, Product=0, SerialNumber=0
[    3.211023] systemd[1]: System time before build time, advancing clock.
[    3.273810] usb 1-1.2: new high-speed USB device number 4 using dwc_otg
[    3.372948] usb 1-1.2: New USB device found, idVendor=0424, idProduct=7801, bcdDevice= 3.00
...
[    9.754045] libphy: lan78xx-mdiobus: probed
[    9.754149] lan78xx 1-1.1:1.0 (unnamed net_device) (uninitialized): int urb period 64
[   10.007435] libphy: lan78xx-mdiobus: probed
[   10.007467] lan78xx 1-1.2:1.0 (unnamed net_device) (uninitialized): int urb period 64
[   10.015888] lan78xx 1-1.2:1.0 eth1: no PHY driver found
[   10.015902] lan78xx 1-1.2:1.0 eth1: lan7801: PHY Init Failed
[   10.055475] lan78xx: probe of 1-1.2:1.0 failed with error -5
[   10.055645] usbcore: registered new interface driver lan78xx  

 

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

Share this post


Link to post
Share on other sites

А PHY подсистема вообще. и марвеловские драйвера в частности, в ядре включены?

Share this post


Link to post
Share on other sites
4 часа назад, gosha-z сказал:

А PHY подсистема вообще. и марвеловские драйвера в частности, в ядре включены?

хороший вопрос! всегда увлекательно распутывать чужие проблемы вытягивая из ТС крупицы информации :)

из достоверно известного - связка запускается и даже отправляет/принимает пакеты, через раз теряется phy - это со слов ТС

схемы, разводки, логов ядра, настроек не видно..

я бы отталкивался, что "phy пропадает", а это для mdc/mdio редкость.. т.е. проблема узловая

- питание/тактирование lan78

- питание/тактирование 1512

встать осциллом на mdc/mdio и посмотреть на происходящее при нормальной работе и "потере" phy

аналогично смотреть все питания при норме/падение

временно чем-нить подменить источник тактовой 1512

это так, веером пальцев в небо..

Share this post


Link to post
Share on other sites

Не разбираясь в вопросе, сложно собрать сразу всю необходимую информацию.

 

PHY вообще не грузится, просто понимает это драйвер LAN7981 только после перезагрузки и тогда сетевое соединение уже не появляется в системе.

При сборке ядра были добавлены модули:

Deivice Drivers --->
	Network device support --->
		PHY Device support and Infrastructure --->
			<M> Marvell PHYs
	USB Network Adapters --->
		<M> Microchip LAN78XX Based USB Ethernet Adapters

Вот модуль драйвера marvell на загруженной системе:

pi@raspberrypi:/lib/modules/4.19.71-rt24-v7+/kernel/drivers/net/phy$ ls
marvell.ko  mdio-bitbang.ko

Список загруженных системой модулей одинаковый при включении и перезагрузке:

Module                  Size  Used by
sha256_generic         20480  0
cfg80211              626688  0
rfkill                 28672  2 cfg80211
8021q                  32768  0
garp                   16384  1 8021q
stp                    16384  1 garp
llc                    16384  2 garp,stp
lan78xx                49152  0
bcm2835_codec          36864  0
snd_bcm2835            24576  1
bcm2835_v4l2           45056  0
v4l2_mem2mem           24576  1 bcm2835_codec
bcm2835_mmal_vchiq     32768  2 bcm2835_codec,bcm2835_v4l2
raspberrypi_hwmon      16384  0
v4l2_common            16384  1 bcm2835_v4l2
hwmon                  16384  1 raspberrypi_hwmon
videobuf2_dma_contig    20480  1 bcm2835_codec
snd_pcm                98304  1 snd_bcm2835
videobuf2_vmalloc      16384  1 bcm2835_v4l2
videobuf2_memops       16384  2 videobuf2_dma_contig,videobuf2_vmalloc
videobuf2_v4l2         24576  3 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem
videobuf2_common       45056  4 bcm2835_codec,bcm2835_v4l2,v4l2_mem2mem,videobuf             2_v4l2
snd_timer              32768  1 snd_pcm
snd                    69632  5 snd_timer,snd_bcm2835,snd_pcm
videodev              184320  6 bcm2835_codec,v4l2_common,videobuf2_common,bcm28             35_v4l2,v4l2_mem2mem,videobuf2_v4l2
media                  36864  3 bcm2835_codec,videodev,v4l2_mem2mem
vc_sm_cma              36864  1 bcm2835_mmal_vchiq
uio_pdrv_genirq        16384  0
uio                    20480  1 uio_pdrv_genirq
fixed                  16384  0
ip_tables              24576  0
x_tables               32768  1 ip_tables
ipv6                  454656  22

Т.е. видно что драйвер marvell даже и не думал грузиться. По крайней мере мне сказали что если модуль был загружен, то вряд ли его кто-то выгружал.

 

Про питание уже писал, оно соответствует ДШ. Тактирование в норме. По отдельности обе микросхемы работают. 

Про MDIO уже выше писал, сигнал с LAN7981 идет, а вот ответа от PHY нет, по крайней в том запросе что ловится осциллографом. При этом если подключиться к этой шине (к выводам RPi), то регистры с PHY считываются без проблем.

В схеме ничего секретного нет ( IM_61850.pdf ). Задавая тут вопрос, не думал что кто-то реально полезет со всем этим разбираться, просто надеялся на имеющийся опыт. А как может повлиять на MDIO разводка, вообще не представляю.

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

И о каких настройках идет речь? В системе все по умолчанию на данный момент, первое что начал делать это device tree, изменения в котором выложил выше.

 

 

 

Edited by Bear_ku

Share this post


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

PHY вообще не грузится, просто понимает это драйвер LAN7981 только после перезагрузки

потому что драйвер MAC его не видит на шине MDIO и все прекрасно поимает - если бы вы включили отладочные сообщения увидели бы сообщения драйвера об этом

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

сейчас он молча предполагает что есть неуправляемый PHY с фиксированными параметрами  - по умолчанию вывод ф-ций *_dbg отключен

 

https://stackoverflow.com/questions/50504516/enable-linux-kernel-driver-dev-dbg-debug-messages

 

3 hours ago, Bear_ku said:

По отдельности обе микросхемы работают. 

 

3 hours ago, Bear_ku said:

А как может повлиять на MDIO разводка, вообще не представляю.

а какие вы ешё можете предложить варианты в такой ситуации ?

 

Quote

первое что начал делать это device tree

через DT максимум что можно изменить - MAC-адрес который и без этого легко меняется из юзерспейс и  поведение лампочек

Edited by sasamy

Share this post


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

PHY вообще не грузится, просто понимает это драйвер LAN7981 только после перезагрузки и тогда сетевое соединение уже не появляется в системе.

Вот модуль драйвера marvell на загруженной системе:

Список загруженных системой модулей одинаковый при включении и перезагрузке:

Т.е. видно что драйвер marvell даже и не думал грузиться. По крайней мере мне сказали что если модуль был загружен, то вряд ли его кто-то выгружал.

 

Про питание уже писал, оно соответствует ДШ. Тактирование в норме. По отдельности обе микросхемы работают. 

Про MDIO уже выше писал, сигнал с LAN7981 идет, а вот ответа от PHY нет, по крайней в том запросе что ловится осциллографом. При этом если подключиться к этой шине (к выводам RPi), то регистры с PHY считываются без проблем.

В схеме ничего секретного нет ( IM_61850.pdf ). Задавая тут вопрос, не думал что кто-то реально полезет со всем этим разбираться, просто надеялся на имеющийся опыт. А как может повлиять на MDIO разводка, вообще не представляю.

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

И о каких настройках идет речь? В системе все по умолчанию на данный момент, первое что начал делать это device tree, изменения в котором выложил выше.

 

 

 

 

посмотрел схему, на вид ничего криминального, пара точек в соединениях отсутствует, но влиять не будут..

вопрос к сигналу reset_n от lan78 к 1512, по докам от LAN минимум прописан 1мкс, а что там по факту? т.к. у 1512 д.б. не менее 10мс, у марвелла с этим строго..

я бы еще Y1 (кварц) попробовал заменить на такой же или другого типа, у вас usb 3.1, а она более требовательна к частотам, чем та же usb 2.0

но более интересно - загрузка marvell.ko, как я ранее писал, с отладкой - детектит ли phy id, вам все равно с этим разбираться при работе с sfp

ЗЫ еррату на lan78 не искали, может там какие косяки исправлены?

Share this post


Link to post
Share on other sites

Драйвера на MAC смотрел, но сильно глубоко не копался. Как раз исходя из них и сделал вывод, что надо где-то указать используемый PHY. 

С включением питания надо разбираться отдельно, но при перезагрузке дело доходит до сообщения:

...
phydev = phy_find_first(dev->mdiobus);
if (!phydev) {
  ...    
} else {
  if (!phydev->drv) {
    netdev_err(dev->net, "no PHY driver found\n");
    return NULL;
  }
}

Т.е. сам МАС "найден", а вот драйверы для него - нет. При этом в структурах сидят следующие значения:

phydev->phy_id = 0
phydev->mdio->addr = 0

Значение в phy_id на сколько я понимаю должно соответствовать 88E1512, что явно далеко до истины.

Вот разводка данной части, сигналы MDIO и MDC снизу, отдельно выделены. Слои TOP - зеленый, BOTTOM - желтый, GND - внутренний слой земли. Единственное что сигналы изначально на схеме были перепутаны и их пришлось перекинуть проводами, но тут не те скорости чтобы это на что-то повлияло. Подтяжка к питанию осталась на MDIO.

 

2020-01-17_13-21-33.png

 

26 minutes ago, Jury093 said:

вопрос к сигналу reset_n от lan78 к 1512, по докам от LAN минимум прописан 1мкс, а что там по факту? т.к. у 1512 д.б. не менее 10мс, у марвелла с этим строго..

я бы еще Y1 (кварц) попробовал заменить на такой же или другого типа, у вас usb 3.1, а она более требовательна к частотам, чем та же usb 2.0

 

Ресет проверю.

А вот usb 3.1 тут по факту не используется, т.к. USB HUB 2.0. Или все равно это может на что-то повлиять?

Edited by Bear_ku

Share this post


Link to post
Share on other sites

А что мешает в конфиге ядра поменять 'M' на '*' на пробу?

Share this post


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

вопрос к сигналу reset_n от lan78 к 1512, по докам от LAN минимум прописан 1мкс, а что там по факту? т.к. у 1512 д.б. не менее 10мс

Если больше ничего в схеме не перепутано это по-моему единственное логическое объяснение.  Можно попробовать разорвать линию RESETn, еше попробовать вручную сделать длитеьный сброс - вставить задержку на пару секунд перед вызовом

phydev = phy_find_first(dev->mdiobus);
 

и кратковременно проводком замкнуть на землю RESETn.

Еще номиналы подтяжек на MDIO проверить - неизвестно что там реально запаяно.

Edited by sasamy

Share this post


Link to post
Share on other sites
50 minutes ago, gosha-z said:

А что мешает в конфиге ядра поменять 'M' на '*' на пробу?

Делал. Никакого отличия. Но в случае модуля я знаю как посмотреть его загрузку, а вот если включить в ядро - нет )

Share this post


Link to post
Share on other sites

Попробуйте следующий вариант DT:

mac0: ethernet@0 {
  phy = <&phy0>;
  phy0: ethernet-phy@0 {
    reg = <0>;
  };
};

 

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