2014-01-14 2 views
1

Я пытался активировать драйвер Linux phyless Ethernet. В сети нет большой информации. Я использую ядро ​​Linux на базе ARM. SOC подключается к порту 1GPS RGMII обратно, не имея реального PHY. Пришло время узнать, что Linux имеет фиксированную поддержку phy. В некоторых файлах используется функция fixed_phy_add. Но все еще не понятно, как активировать. Любая помощь или указатель действительно помогут здесь.Как активировать драйвер phyless linux Ethernet

ответ

1

Да. Я только что сделал это для нашего совета. Что меня действительно смутило, так это то, что вам нужно добавить фиксированный phy до того, как будет активирована фиксированная шина mdio. Поэтому либо вам нужно добавить его на раннем этапе вашего кода инициализации платформы, либо взломать его в фиксированный код mdio, как я сделал (просто для того, чтобы все работает, конечно). Этот патч сделал это для меня.

diff --git a/drivers/net/phy/fixed.c b/drivers/net/phy/fixed.c 
index ba55adf..7013ef0 100644 
--- a/drivers/net/phy/fixed.c 
+++ b/drivers/net/phy/fixed.c 
@@ -203,11 +203,24 @@ err_regs: 
} 
EXPORT_SYMBOL_GPL(fixed_phy_add); 

+static struct fixed_phy_status fixed_phy_status = { 
+  .link   = 1, 
+  .speed   = 100, 
+  .duplex   = 0, 
+}; 
+ 
static int __init fixed_mdio_bus_init(void) 
{ 
     struct fixed_mdio_bus *fmb = &platform_fmb; 
     int ret; 

+  ret = fixed_phy_add(PHY_POLL, 0, &fixed_phy_status); 
+  if (ret < 0) 
+  { 
+   pr_err("could not add fixed phy.\n"); 
+   return ret; 
+  } 
+ 
     pdev = platform_device_register_simple("Fixed MDIO bus", 0, NULL, 0); 
     if (IS_ERR(pdev)) { 
       ret = PTR_ERR(pdev); 

Следующий шаг заключается в использовании этого PHY в драйвере, оно должно быть достаточно, чтобы использовать имя неподвижного-0: 00 в качестве имени фи, когда вы смотрите его вверх (: 00 является фиксированной PHY идентификатора 0 в fixed_phy_add выше)

snprintf(phy_id, sizeof(slave_data->phy_id), PHY_ID_FMT, "fixed-0", 0); 

Тогда phy_connect драйвер уже должен найти неподвижную PHY и он должен работать до тех пор, как фиксированная конфигурация соответствует другой стороне (переключатель в нашем случае):

phy_connect(ndev, phy_id, &_adjust_link, phy_if); 

Должен быть способ, чтобы все это работало с деревом устройств, но никто еще не получил там AFAICS.

Удачи.

+0

Исправлено_mdio_bus_init - это не лучшее место для добавления фиксированного phy в систему. Предполагается, что это код для конкретной платы. Добавленные строки действительно должны быть помещены в вашу инициализацию платы. Посмотрите на /arch/m68k/platform/coldfire/m5272.c для примера. – spearson

+0

Я знаю. Но мой совет использует devicetree и нет никакой поддержки для фиксированного физического. Даже если это нужно было добавить раньше, потому что физическое существо должно существовать до того, как вызывается стандартная процедура phy init, их нельзя добавить после этого. Самый простой способ сделать это - добавить его явно в файл fixed_mdio_bus_init. Теперь, когда я думаю об этом, почему бы просто не добавить параметр конфигурации для числа исправленных физически необходимых вместо того, чтобы помещать этот материал в файлы доски? – slobobaby

Смежные вопросы