|
DP83848, Поддержка PHY от TI DP83848J |
|
|
|
Oct 28 2013, 07:57
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647

|
Доброго времени суток! Встречал на нашем форуме много тем и сообщений об использовании семейства PHY DP83848. Но не разу не видел чтобы его использовали в сети из под Linux. Поддержка драйвера для данного семейства в последних версиях кернела также замечена не была  Вопрос: использовал ли его кто нибудь в Linux и если да, то какой драйвер прикручивали ? Заранее спасибо за любой ответ/совет
|
|
|
|
2 страниц
1 2 >
|
 |
Ответов
(1 - 17)
|
Oct 30 2013, 07:31
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647

|
Цитата По моим представлениям драйвера для фаев не очень-то и нужны. Настроил нужный режим "подтяжками" чипа и вперёд. Нет? Для некоторых "стандартных" PHY действительно никаких особых опций не нужно, например для SMSC LAN83C185 необходимо только указать опцию в ядре CONFIG_MII, хотя для него есть также отдельная опция CONFIG_SMSC_PHY, которая, как я понимаю, позволяет выполнять более расширенные действия над ним. Практически в такой же аппаратной системе стоит PHY DP83848J с которым данный трюк не прокатывает и отдельной опции в ядре для него также нету  Вот кусок лога загрузки и работы: Загрузка: Код [ 4.391557] xilinx_emaclite 40e00000.ethernet: Device Tree Probing [ 4.398573] libphy: Xilinx Emaclite MDIO: probed [b][ 4.441222] mdio_bus c00e41c4: cannot get PHY at address 0[/b] [ 4.445633] xilinx_emaclite 40e00000.ethernet: MAC address is now 00:0a:35:00:00:00 [ 4.460226] xilinx_emaclite 40e00000.ethernet: Xilinx EmacLite at 0x40E00000 mapped to 0xF0040000, irq=2 [ 4.476092] TCP: cubic registered [ 4.478288] NET: Registered protocol family 17 Работа ifconfig: Код / # ifconfig eth0 192.168.1.89 netmask 255.255.255.0 [ 11.756935] net eth0: of_phy_connect() failed ifconfig: SIOCSIFFLAGS: No such device Вот такие пироги  Цитата Ключевой файл drivers/net/fec.c Данный ключевой файл был ключевым до версии ядра 3.1
|
|
|
|
|
Oct 30 2013, 11:27
|
Местный
  
Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874

|
Цитата(xor.kruger @ Oct 30 2013, 11:31)  Для некоторых "стандартных" PHY действительно никаких особых опций не нужно Не, я так себе представлял что: 1. настроить любой фай можно или программно через MDIO (drivers/net/phy в mainline) или аппаратно подтяжкой выводов чипа или в 0 или к vcc 2. менять настройки фая мало кому нужно, поэтому все делают конфигурацию аппаратно раз и навсегда 3. поскольку все делают конфигурацию аппаратно - в ядре так мало драйверов MDIO Т.е. я где-то ошибся и для DP83848J нужно обязательно что-то делать через MDIO?
Сообщение отредактировал Idle - Oct 30 2013, 11:28
|
|
|
|
|
Oct 30 2013, 11:34
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
К сожалению мне не приходилось подключать PHY для поздних версий  Однако они все должны работать по стандартному интерфейсу. Насколько я помню в протоколе на адресацию устройства отведено 5 бит. драйвер перебирает все 32 устройства, читая идентификацию. Если устройства по этому адресу нет, то читается 0xFFFFFFFF. Как найти код драйвера. Легче всего посмотреть имя драйвера в другой системе с кернелом 3.1 в /sys: $ ls /sys/bus/platform/drivers у меня это fec. Дальше поищите имя в коде драйверов. Находясь в корне кернела исполните команду: grep -rn '"fec"' drivers скорее всего вы ищите строку .name = "fec", Ну а потом добавляя в разные места printk протестируйте, что происходит. Отдельной опции не бывает по двум причинам: 1. Она не нужна, т.к. стандартным драйвером поддерживается целый класс устройств. 2. Код драйвера не добавлен в ядро. Я почти уверен, что у вас первый случай. Вы взяли за прототип какое-то устройство и поменяли PHY на удобный вам? Если так, то есть ли у вас исходное устройство живьём?
Сообщение отредактировал Tarbal - Oct 30 2013, 11:42
|
|
|
|
|
Oct 30 2013, 12:07
|
Знающий
   
Группа: Участник
Сообщений: 783
Регистрация: 22-11-08
Пользователь №: 41 858

|
Цитата(xor.kruger @ Oct 30 2013, 11:31)  Код / # ifconfig eth0 192.168.1.89 netmask 255.255.255.0 [ 11.756935] net eth0: of_phy_connect() failed ifconfig: SIOCSIFFLAGS: No such device А в device tree PHY прописан ? http://lxr.free-electrons.com/source/drive.../of_mdio.c#L191
|
|
|
|
|
Oct 30 2013, 12:15
|
Местный
  
Группа: Участник
Сообщений: 351
Регистрация: 5-04-05
Пользователь №: 3 874

|
Цитата(Idle @ Oct 30 2013, 15:27)  Т.е. я где-то ошибся и для DP83848J нужно обязательно что-то делать через MDIO? А, понял. Связь мака с фаем драйверу мака нужна в любом случае. Просто есть стандартные регистры и расширения для конкретного чипа. Собственно драйвера нужны для расширений. Там где нет прямой связи с фаем используют fixed phy.
|
|
|
|
|
Nov 1 2013, 09:19
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647

|
Цитата А в device tree PHY прописан ? Прописан. По сути весь SoC тот же как и на рабочей системе за отличием PHY. Думаю может написать пробный "базовый" драйвер для данного PHY по аналогии с другими имеющимися в linux-kernel/drivers/net/phy
|
|
|
|
|
Nov 1 2013, 14:57
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647

|
Цитата Отдельной опции не бывает по двум причинам: Цитата 1. Она не нужна, т.к. стандартным драйвером поддерживается целый класс устройств. Это и так понятно, только вот понятие "стандартное тоже достаточно широкое"  , например DP83865DVH (National), вообще не заведется если отдельно поддержку не включить (Стандартный такой себе PHY) Цитата 2. Код драйвера не добавлен в ядро. Что Вы хотели этим сказать ?  НУ а если по теме, то проблема в считывании ID PHY, если в исходниках убрать проверку на йидишник, то дальше регистрация и "создание" устройства проходит нормально. В результате чего теже пинги на плату и с платы проходят нормально. Осталось разобраться почему считываются одни нули
|
|
|
|
|
Nov 4 2013, 06:46
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647

|
Цитата Вы нашли какой драйвер используется? Ну для конкретного данного PHY нету => использую стандартный Framework for finding and configuring PHYs.
|
|
|
|
|
Nov 4 2013, 13:10
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Цитата(xor.kruger @ Nov 4 2013, 09:46)  Ну для конкретного данного PHY нету => использую стандартный Framework for finding and configuring PHYs. Вы так и не сказали что у вас в директориях: /sys/bus/platform/drivers /sys/bus/platform/devices
|
|
|
|
|
Nov 5 2013, 07:36
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647

|
Цитата Вы так и не сказали что у вас в директориях: Это не имеет никакого отношения к решению моей проблемы. Например в каталоге /sys/bus/platform/devices описаны какие устройства зарегистрировались в моей системе; ну и что дальше, с работой периферийных устройств и шин у меня проблем нету  Ну если Вы так настаиваете и может с помощью содержимых каталогов решить данную проблему, то милости просим  Код / # ls -lR /sys/bus/platform/devices /sys/bus/platform/devices: total 0 lrwxrwxrwx 1 0 0 0 Jan 1 00:02 40000000.gpio -> ../../../devices/axi.1/40000000.gpio lrwxrwxrwx 1 0 0 0 Jan 1 00:02 40600000.serial -> ../../../devices/axi.1/40600000.serial lrwxrwxrwx 1 0 0 0 Jan 1 00:02 40e00000.ethernet -> ../../../devices/axi.1/40e00000.ethernet lrwxrwxrwx 1 0 0 0 Jan 1 00:02 41200000.interrupt-controller -> ../../../devices/axi.1/41200000.interrupt-controller lrwxrwxrwx 1 0 0 0 Jan 1 00:02 41c00000.timer -> ../../../devices/axi.1/41c00000.timer lrwxrwxrwx 1 0 0 0 Jan 1 00:02 alarmtimer -> ../../../devices/platform/alarmtimer lrwxrwxrwx 1 0 0 0 Jan 1 00:02 axi.0 -> ../../../devices/axi.0 lrwxrwxrwx 1 0 0 0 Jan 1 00:02 axi.1 -> ../../../devices/axi.1 Код / # ls -lR /sys/bus/platform/drivers /sys/bus/platform/drivers: total 0 drwxr-xr-x 2 0 0 0 Jan 1 00:01 alarmtimer drwxr-xr-x 2 0 0 0 Jan 1 00:01 uartlite drwxr-xr-x 2 0 0 0 Jan 1 00:01 xilinx_emaclite
/sys/bus/platform/drivers/alarmtimer: total 0 lrwxrwxrwx 1 0 0 0 Jan 1 00:06 alarmtimer -> ../../../../devices/platform/alarmtimer --w------- 1 0 0 4096 Jan 1 00:06 bind --w------- 1 0 0 4096 Jan 1 00:06 uevent --w------- 1 0 0 4096 Jan 1 00:06 unbind
/sys/bus/platform/drivers/uartlite: total 0 lrwxrwxrwx 1 0 0 0 Jan 1 00:06 40600000.serial -> ../../../../devices/axi.1/40600000.serial --w------- 1 0 0 4096 Jan 1 00:06 bind --w------- 1 0 0 4096 Jan 1 00:06 uevent --w------- 1 0 0 4096 Jan 1 00:06 unbind
/sys/bus/platform/drivers/xilinx_emaclite: total 0 lrwxrwxrwx 1 0 0 0 Jan 1 00:06 40e00000.ethernet -> ../../../../devices/axi.1/40e00000.ethernet --w------- 1 0 0 4096 Jan 1 00:06 bind --w------- 1 0 0 4096 Jan 1 00:06 uevent --w------- 1 0 0 4096 Jan 1 00:06 unbind / # Реально, по факту, на данный момент проблема локализирована и как я писал выше - это проблема при считывании ID - считываются нули. Если убрать данную проверку то все отлично работает. Но это не спортивно и по свободе нуна будет этот момент добить до конца
|
|
|
|
|
Nov 5 2013, 12:51
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Ага fec поменялся на ethernet. А теперь в корне сорсов кернела такую команду. ethernet в двух кавычках, снаружи одинарные внутри двойные. grep -rn '"ethernet"' drivers Ищем в каких файлах есть строки .name = "ethernet" Цитата(xor.kruger @ Nov 5 2013, 11:36)  Реально, по факту, на данный момент проблема локализирована и как я писал выше - это проблема при считывании ID - считываются нули. Если убрать данную проверку то все отлично работает. Но это не спортивно и по свободе нуна будет этот момент добить до конца  Ну не может ведь все работать и считывать нули при определении идентификации устройства.
|
|
|
|
|
Nov 5 2013, 13:26
|

Местный
  
Группа: Свой
Сообщений: 290
Регистрация: 17-08-08
Из: Чернигов
Пользователь №: 39 647

|
Цитата Ищем в каких файлах есть строки Так мне это и ненужно, я и так знаю какой драйвер используется в моем случае для PHY - это стандартные phy_device.c и phy.c. А то о чем вы говорите, это Ethernet драйвер EmacLite, он тут не при чем  Код Ну не может ведь все работать и считывать нули при определении идентификации устройства. Вполне может быть, просто при регистрации PHY в начальной инициализации есть базовый этап - это проверка на марку производителя, если производителя в списке нету, то работа драйвера завершается ошибкой, вот и всё. Ну а это уже второй вопрос, тут нуна курить даташит на данный фитер и как вариант записать свой айдишник а потом считать и сравнить, вполне может быть что неправильно сконфигурирована шина MDIOBus, в принципе ее можно перевесить на gpio и заюзать драйвер mdio-gpio.c
|
|
|
|
|
Nov 5 2013, 14:37
|
Профессионал
    
Группа: Свой
Сообщений: 1 351
Регистрация: 21-05-10
Пользователь №: 57 439

|
Я хотел пройти по цепочке и добавить чтение регистров PHY через /proc, но если вам все известно, то поставьте printk в эту функцию (get_phy_device), чтобы посмотреть что читается из чипа по всем 32 адресам. Надо напечатать значение phy_id сразу после чтения. http://lxr.free-electrons.com/source/drive...y_device.c#L331Цитата(xor.kruger @ Nov 5 2013, 17:26)  Вполне может быть, просто при регистрации PHY в начальной инициализации есть базовый этап - это проверка на марку производителя, если производителя в списке нету, то работа драйвера завершается ошибкой, вот и всё. Вся проверка в этой же функции: if ((phy_id & 0x1fffffff) == 0x1fffffff) return NULL;
Сообщение отредактировал Tarbal - Nov 5 2013, 14:49
|
|
|
|
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0
|
|
|