LINUX.ORG.RU

Драйвера

 ,


0

1

Здравствуйте! Есть ли на Linux драйвера под LAN8742 ? Сейчас пытаюсь наладить ethernet на OSD3358-512M-ICB (RMII). Linux подтягивает драйвера под Microchip LAN88xx, но Ethernet не поднимается, судя по ifconfig

eth0: flags=-28669<UP,BROADCAST,MULTICAST,DYNAMIC>  mtu 1500  
        inet 192.168.1.200  netmask 255.255.255.0  broadcast 192.168.1.255  
        ether 98:84:e3:80:b4:fa  txqueuelen 1000  (Ethernet)  
        RX packets 0  bytes 0 (0.0 B)  
        RX errors 0  dropped 0  overruns 0  frame 0  
        TX packets 0  bytes 0 (0.0 B)  
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0  
        device interrupt 55

Вот, что выдаёт dmesg:

[   18.768358] Microchip LAN88xx 4a101000.mdio:00: attached PHY driver [Microchip LAN88xx] (mii_bus:phy_addr=4a101000.mdio:00, irq=POLL)


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

но Ethernet не поднимается, судя по ifconfig

Судя по ifconfig, сеть вполне поднимается. link в состоянии UP, адрес интерфейсу назначен (192.168.1.200).

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

Забыл указать, что светодиоды на самом LAN гаснут в момент поднятия ядра. А адрес я записал в /etc/network/intefaces
auto eth0 allow-hotplug eth0
iface eth0 inet static
address 192.168.1.200
netmask 255.255.255.0

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

Здравствуйте! Есть ли на Linux драйвера под LAN8742 ?

даже если и нет, для LAN8742 он не нужен - это generic PHY

https://www.microchip.com/wwwproducts/en/LAN8742#datasheet-toggle

Сейчас пытаюсь наладить ethernet на OSD3358-512M-ICB (RMII)

процессор там техасовский AM3358 его доки к референсам и надо смотреть - как подключать и что в ядре править. Cудя по логу интерфейс поднялся, если пинги не ходят - что-то с физическим подключением RMII или что-то в ядре не прописано. MDIO работает - ядро видит и определяет PHY.

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

WARNING: Your ‘console=ttyO0’ has been replaced by ‘ttyS0’. This ensures that you still see kernel messages. Please update your kernel commandline. Но это к сети не относится.

Посмотри https://www.oryx-embedded.com/doc/lan8742__driver_8c.html

Но я даже близко не специалист (надеялся, что в dmesg явная ошибка будет, но нет), поэтому запросто могу ошибаться.

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

если пинги не ходят - что-то с физическим подключением RMII или что-то в ядре не прописано

попробую предположить что DTS не исправленый, а в референсе прописан RGMII

https://github.com/octavosystems/OSD335x-Device-Tree/blob/master/OSD3358-SM-R...

попробуй тут

	phy-mode = "rmii";
anonymous
()
Ответ на: комментарий от jockerface

Может, недоправил…

пины переключены на RMII (MUX_MODE1 вроде) ? на референсе они на RGMII включены (MUX_MODE2)

https://github.com/octavosystems/OSD335x-Device-Tree/blob/master/OSD3358-SM-RED/osd3358-bsm-refdesign.dts#L224

кроме этого у процессора есть errata по поводу RMII

https://e2e.ti.com/support/processors/f/processors-forum/360903/am335x-rgmii-in-rmii-mode

тут тоже трахаются с RMII

https://e2e.ti.com/support/processors/f/processors-forum/292923/am335x-with-lan8710a-rmii-mode-packet-loss

но по своему опыту могу сказать - надо доки на процессор смотреть, если в ТП написали что может работать - значит всё расписано

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

Референсный клок 50 МГц с процессора или с phy сделан (есть ли у phy свой кварц) ? Чувак из техаса говорит что с процессора тактирование не будет работать

1-) clock 50MHZ sourced from AM335x :

The answer to both of your questions can be found in AM335X Errata Rev.E, Advisory 1.0.16. The first case will simply not work

я к тому что именно так все обычно и делают чтобы сэконмить да и кварцы дохнут при ультразвуковой промывке от флюса

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

The first case will simply not work

https://www.ti.com/lit/er/sprz360i/sprz360i.pdf?ts=1619171725242&ref_url=https%253A%252F%252Fwww.google.com%252F#%5B%7B%22num%22%3A64%2C%22gen%22%3A0%7D%2C%7B%22name%22%3A%22XYZ%22%7D%2C0%2C411.6%2C0%5D

если внешний ref clock используется по заветам эрраты надо ref clk на вход переключить не забыть

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

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

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

net eth0: initializing cpsw version 1.12 (0) (это ссылка) - Common Platform Ethernet Switch (CPSW) is a three port switch (one CPU port and two external ports). The CPSW or Ethernet Switch driver follows the standard Linux network interface architecture.

далее у тебя идут ошибки чтения и размещения драйвера, я думаю тебе надо собрать заново драйвер используя эти изменения.

Сам я этим не пользовался, это просто анализ твоего дампа.

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

далее у тебя идут ошибки чтения и размещения драйвера, я думаю тебе надо собрать заново драйвер используя эти изменения

этот драйвер надо просто удалить или заблэклистить чтобы не мешался и использовался generic phy

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

Драйвер внёс в blacklist. lsmod теперь такой:

Module                  Size  Used by
pm33xx                 16384  0
wkup_m3_ipc            16384  1 pm33xx
wkup_m3_rproc          16384  1
remoteproc             57344  2 wkup_m3_rproc,wkup_m3_ipc
virtio                 16384  1 remoteproc
virtio_ring            28672  1 remoteproc
usb_f_acm              16384  2
u_serial               20480  3 usb_f_acm
usb_f_ecm              20480  2
uio_pdrv_genirq        16384  0
usb_f_mass_storage     53248  2
uio                    20480  1 uio_pdrv_genirq
usb_f_rndis            32768  4
u_ether                20480  2 usb_f_ecm,usb_f_rndis
libcomposite           65536  18 usb_f_ecm,usb_f_acm,usb_f_mass_storage,usb_f_rndis
spidev                 20480  0
Но ifconfig выдаёт
eth0: flags=-28669<UP,BROADCAST,MULTICAST,DYNAMIC>  mtu 1500
        inet 192.168.37.42  netmask 255.255.255.0  broadcast 192.168.37.254
        ether 98:84:e3:80:b4:fa  txqueuelen 1000  (Ethernet)
        RX packets 0  bytes 0 (0.0 B)
        RX errors 0  dropped 0  overruns 0  frame 0
        TX packets 0  bytes 0 (0.0 B)
        TX errors 0  dropped 0 overruns 0  carrier 0  collisions 0
        device interrupt 54

Ну и светодиоды гаснут так же.

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

Драйвер внёс в blacklist. lsmod теперь такой

тут больше схема интересна, скорей всего там не всё в порядке, скинь часть схемы соединения PHY с процессором. А драйвер PHY тут просто несущесвенный нюанс - для конкретного PHY он в лучшем случае может помочь незначительный аппаратный баг обойти, а вообще это универсальные стандартизованные устройтва

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

Вот ссылка на куски схемы
https://cloud.mail.ru/public/HrqC/NJv6sVEux

судя по схемме ETH.png у тебя ошибка в конфигурации PHY

Используется внешний REF_CLOCK, на схеме его нет

используется выход RMII_REF_CLK (14 nINT/REFCLKO pin) с PHY и он нарисован на схеме, но PHY по умолчанию использует этот выход как запрос на прерывание, его конфиг задается через ногу 2 (nINTSEL: nINT/REFCLKO Configuration)

By default, nINTSEL is configured for nINT mode via the internal pull-up resistor

тебе надо припаять на 2 вывод PHY (nINTSEL) внешний резистор pull down на землю чтобы там был 0 при подаче питания

см page 38

3.7.4 nINTSEL: nINT/REFCLKO Configuration

https://ww1.microchip.com/downloads/en/DeviceDoc/8742a.pdf#G7.2215466

PHY защелкивает конфиг при подаче питания (POR) и если там 0 будет работать по схеме

Figure 3.8 Sourcing REF_CLK from a 25 MHz Crystal

см. таблицу

Table 3.6 nINTSEL Configuration

nINTSEL=0 | REF_CLK Out Mode | nINT/REFCLKO is the source of REF_CLK.

3.7.4.2 REF_CLK Out Mode

To reduce BOM cost, the device includes a feature to generate the RMII REF_CLK signal from a low-cost, 25 MHz fundamental crystal. This type of crystal is inexpensive in comparison to 3rd overtonecrystals that would normally be required for 50 MHz. The MAC must be capable of operating with anexternal clock to take advantage of this feature as shown in Figure 3.8.

In order to optimize package size and cost, the REFCLKO pin is multiplexed with the nINT pin. InREF_CLK Out mode, the nINT functionality is disabled to accommodate usage of REFCLKO as a50 MHz clock to the MAC.

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

Блин, не заметил - есть pull down 10 кОм внизу схемы, подписан ETH_LED2, оригинально его так пририсовали что хрен найдёшь. В любом случае - проверь на ввсякий случай осцилом что есть REF_CLK 50 МГц.

PS а схема вообще от твоего устройства, а то я теперь засомневался правильно я понял смысл твоих слов «Используется внешний REF_CLOCK, на схеме его нет», т.е. если так как ты говоришь то и конфиг нужно менять, изначально я подумал что ты ошибся и ориентировался на то что нарисовано в схеме

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

Устройство моё, касаемо ПО. Схему разрабатывал не я. Коллега говорит, что внешний кварц заведён на 25МГц, через PLL.

jockerface
() автор топика
Ответ на: комментарий от spbob
		cpsw_default {
			pinctrl-single,pins = <
				/* Slave 1 */
				AM33XX_IOPAD(0x90c, PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_crs.rmii1_crs_dv */
				AM33XX_IOPAD(0x910, PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_rxerr.rmii1_rxerr */
				AM33XX_IOPAD(0x914, PIN_OUTPUT | MUX_MODE1)		/* mii1_txen.rmii1_txen */
				AM33XX_IOPAD(0x924, PIN_OUTPUT | MUX_MODE1)		/* mii1_txd1.rmii1_txd1 */
				AM33XX_IOPAD(0x928, PIN_OUTPUT | MUX_MODE1)		/* mii1_txd0.rmii1_txd0 */
				AM33XX_IOPAD(0x93c, PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_rxd1.rmii1_rxd1 */
				AM33XX_IOPAD(0x940, PIN_INPUT_PULLDOWN | MUX_MODE1)	/* mii1_rxd0.rmii1_rxd0 */
				AM33XX_IOPAD(0x944, PIN_INPUT_PULLDOWN | MUX_MODE0)	/* rmii1_refclk.rmii1_refclk */
			>;
		};

		cpsw_sleep {
			pinctrl-single,pins = <
				/* Slave 1 */
				AM33XX_IOPAD(0x90c, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* mii1_crs.rmii1_crs_dv */
				AM33XX_IOPAD(0x910, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* mii1_rxerr.rmii1_rxerr */
				AM33XX_IOPAD(0x914, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* mii1_txen.rmii1_txen */
				AM33XX_IOPAD(0x924, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* mii1_txd1.rmii1_txd1 */
				AM33XX_IOPAD(0x928, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* mii1_txd0.rmii1_txd0 */
				AM33XX_IOPAD(0x93c, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* mii1_rxd1.rmii1_rxd1 */
				AM33XX_IOPAD(0x940, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* mii1_rxd0.rmii1_rxd0 */
				AM33XX_IOPAD(0x944, PIN_INPUT_PULLDOWN | MUX_MODE7)	/* rmii1_refclk.rmii1_refclk */
			>;
		};
jockerface
() автор топика
Ответ на: комментарий от jockerface

Не знаю как в оверлей правильно дописать - попробуй добавить

&phy_sel {
        rmii-clock-ext;
};

https://github.com/beagleboard/linux/blob/4.19/arch/arm/boot/dts/am335x-igep0...

https://github.com/beagleboard/linux/blob/4.19/Documentation/devicetree/bindi...

spbob
()
Последнее исправление: spbob (всего исправлений: 1)
Ответ на: комментарий от jockerface

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

https://github.com/beagleboard/linux/blob/4.19/drivers/net/ethernet/ti/cpsw-p...

	if (of_find_property(pdev->dev.of_node, "rmii-clock-ext", NULL))
		priv->rmii_clock_external = true;

этот ключ ничего не меняет кроме того что драйвер битик дополнительно установит

	if (priv->rmii_clock_external) {
		if (slave == 0)
			mode |= AM33XX_GMII_SEL_RMII1_IO_CLK_EN;
		else
			mode |= AM33XX_GMII_SEL_RMII2_IO_CLK_EN;
	}

https://github.com/beagleboard/linux/blob/4.19/drivers/net/ethernet/ti/cpsw-p...

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

В общем, сделал так: 1. Взял dts для osd3358 (osd3358-bsm-refdesign.dts + osd335x-csip.dtsi + osd335x-sm.dtsi). 2. Изменил в osd335x-sm.dtsi секцию «mac - phy_sel», где прописал

                phy_sel: cpsw-phy-sel@44e10650 {
                    compatible = "ti,am3352-cpsw-phy-sel";
                    reg= <0x44e10650 0x4>;
                    reg-names = "gmii-sel";
		    rmii-clock-ext;
                };

Не заработало... Правда, и ошибки Null device нет. Да, и ещё заметил - светодиоды на eth перестают гореть и загораются только после перезагрузки по питанию. После обычного reboot они не загораются обратно.

jockerface
() автор топика
Последнее исправление: jockerface (всего исправлений: 1)
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.