Marvell 88E8040

Технические обсуждения

Marvell 88E8040

Сообщение AdUser » 04 сен 2010 12:01

leen, нужен твой квалифицированный совет.

Вчера, когда собирал custom-ядро под свой нетбук, обнаружил интересную вещь:
Чип моего сетевого адаптера физически держит гигабит, но определяется как 100Mbit'ный.
Судя по воплям в интернете я не один такой счастливчик, в Dellовских ноутбуках с аналогичным чипом, у некоторых гигабит работает, у некоторых нет, в зависимости от региона продажи.

Собссно вопрос, можно ли как-то это обойти?

Подозреваю, что дело в прошивке, и вижу 2 варианта возможных решений:
1. Ковырять саму прошивку. ИМХО - дохлый номер, даже если удасться ее сдампить, на чип ее обратно - не зальешь без помощи программатора и физического выпаивания чипа.
2. Ковырять ядро на стадии определения скорости адаптера в конкретном драйвере. Более реальный вариант, как мне кажется, если посмотреть из каких регистров берутся скорости и своевременно подправить пару битов...
AdUser
Sr. Member
Sr. Member
 
Сообщения: 277
Зарегистрирован: 15 июн 2009 08:42
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение leen » 06 сен 2010 20:05

Так, немного порыскал по сети - нашел краткое описание контроллера Yukon FE+ 88E8040. В нем сказато, в том числе, что оный оснащен энергонезависимой внутренней памятью, в которой можно хранить мак и прочие настройки. Подробного мана пока не наше, если кто найдет - плиз ссылку.
кратко на английском. Возникает предположение, что ифлаг ограничения скорости засунут туда же. Главное, чтобы память и писалась (читается-то она скорее всего, логично ж?).
Upd: Почитал модуль driver/net/sky2.c.
Не знаю, как действуют гуру, но я бы сначала проверил, есть ли у железа флаг гигабит. У меня под рукой ядро 2.6.33.6, соответственно, читаю его.
В функции sky2_phy_init есть строки
Код: Выделить всё
if (hw->flags & SKY2_HW_GIGABIT)
сделать чего-то
. Так перед ифом предлагаю дописать нечто вроде
Код: Выделить всё
printk(KERN_INFO "Marvell hw flags 0x%04hx\n", hw->flags);

То есть должно получиться:
Код: Выделить всё
printk(KERN_INFO "Marvell hw flags 0x%04hx\n", (unsigned short) hw->flags);
if (hw->flags & SKY2_HW_GIGABIT)
сделать чего-то
.
Расшифровка флагов - в хидере с тем же именем, в структуре sky2_hw.
А потом собрать, всунуть и перевоткнуть модуль в системе, предварительно переключив kernel warn level как минимум на 6 (KERN_INFO это то ли 6 то ли 7).
Переключение echo 6 > /proc/sys/kernel/printk (с рута ессно). А потом думать дальше, или почему хардварь не держит 1Гб, или где дальше что. В общем, отладка принтэфами как она есть.
Осень - мертвые дожди,
Осень - юные морозы,
Задубевшие березы
Ковыляют по Руси
leen
Advanced Newbie
Advanced Newbie
 
Сообщения: 46
Зарегистрирован: 29 апр 2009 12:20

Re: Marvell 88E8040

Сообщение AdUser » 06 сен 2010 20:50

Ок, сейчас сделаю, запощу сюда.
AdUser
Sr. Member
Sr. Member
 
Сообщения: 277
Зарегистрирован: 15 июн 2009 08:42
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение AdUser » 07 сен 2010 11:26

В общем, пока результаты по нулям.
Я нашел как заставить ядро думать, что там есть гигабит (патчик в комплекте)
sky2.patch.gz
(497 байт) Скачиваний: 337
, но похоже железо его физически не держит: логи dmesg'а и выполняемых команд ниже:
Код: Выделить всё
# modprobe sky2 debug=16
# dmesg -c
sky2: driver version 1.28
sky2 0000:09:00.0: PCI INT A -> GSI 18 (level, low) -> IRQ 18
sky2 0000:09:00.0: setting latency timer to 64
sky2 0000:09:00.0: Yukon-2 FE+ chip revision 0
sky2 0000:09:00.0: irq 46 for MSI/MSI-X
sky2 0000:09:00.0: eth0: addr 00:24:54:6b:f5:b9
Marvell hw flags 0x00ed
Marvell ct1000: 0x0000000000000300
sky2 0000:09:00.0: eth0: enabling interface
sky2 0000:09:00.0: eth0: phy interrupt status 0x5c40 0x7c40
sky2 0000:09:00.0: eth0: Link is up at 100 Mbps, full duplex, flow control both
# ethtool eth0
Settings for eth0:
   Supported ports: [ TP ]
   Supported link modes:   10baseT/Half 10baseT/Full
                           100baseT/Half 100baseT/Full
                           1000baseT/Half 1000baseT/Full
   Supports auto-negotiation: Yes
   Advertised link modes:  10baseT/Half 10baseT/Full
                           100baseT/Half 100baseT/Full
                           1000baseT/Half 1000baseT/Full
   Advertised auto-negotiation: Yes
   Speed: 100Mb/s
   Duplex: Full
   Port: Twisted Pair
   PHYAD: 0
   Transceiver: internal
   Auto-negotiation: on
   Supports Wake-on: pg
   Wake-on: d
   Current message level: 0x0000ffff (65535)
   Link detected: yes
# ethtool -s eth0 speed 1000
# dmesg -c
Marvell hw flags 0x00ed
Marvell ct1000: 0x0000000000000300
sky2 0000:09:00.0: eth0: phy interrupt status 0x400 0x40
sky2 0000:09:00.0: eth0: Link is down
Marvell hw flags 0x00ed
Marvell ct1000: 0x0000000000000300
sky2 0000:09:00.0: eth0: phy interrupt status 0x1c40 0x7c40
sky2 0000:09:00.0: eth0: Link is up at 100 Mbps, full duplex, flow control both
# ethtool eth0
Settings for eth0:
   Supported ports: [ TP ]
   Supported link modes:   10baseT/Half 10baseT/Full
                           100baseT/Half 100baseT/Full
                           1000baseT/Half 1000baseT/Full
   Supports auto-negotiation: Yes
   Advertised link modes:  10baseT/Half 10baseT/Full
                           100baseT/Half 100baseT/Full
                           1000baseT/Half 1000baseT/Full
   Advertised auto-negotiation: Yes
   Speed: 100Mb/s
   Duplex: Full
   Port: Twisted Pair
   PHYAD: 0
   Transceiver: internal
   Auto-negotiation: on
   Supports Wake-on: pg
   Wake-on: d
   Current message level: 0x0000ffff (65535)
   Link detected: yes
# ifconfig eth0 up
# dmesg
# ethtool -s eth0 speed 1000
# dmesg
Marvell hw flags 0x00ed
Marvell ct1000: 0x0000000000000300
sky2 0000:09:00.0: eth0: phy interrupt status 0x400 0x40
sky2 0000:09:00.0: eth0: Link is down
Marvell hw flags 0x00ed
Marvell ct1000: 0x0000000000000300
sky2 0000:09:00.0: eth0: disabling interface
Marvell hw flags 0x00ed
Marvell ct1000: 0x0000000000000300
sky2 0000:09:00.0: eth0: enabling interface
sky2 0000:09:00.0: eth0: disabling interface
Marvell hw flags 0x00ed
Marvell ct1000: 0x0000000000000300
sky2 0000:09:00.0: eth0: enabling interface
sky2 0000:09:00.0: eth0: phy interrupt status 0x5c40 0x7c40
sky2 0000:09:00.0: eth0: Link is up at 100 Mbps, full duplex, flow control both
sky2 0000:09:00.0: eth0: rx slot 0 status 0xf30300 len 243

Кроме интересующих тебя флагов, добавил вывод переменной ct1000 (u16)

также, нашел пару интересных функций:
4156: sky2_get_eeprom
4170: sky2_set_eeprom

Мне кажется, без физического ковыряния чипа мы ничего не добьемся, в приведенной спеке есть следующее:
> QFN is pin compatible with 88E805x and 88E807x Gigabit Ethernet controller devices and
> enables flexible board designs that can be populated with either Gigabit or Fast Ethernet LOM
и ещё
> The Yukon FE+ integrates on-chip non-volatile memory that eliminates the need for an external EEPROM
т.е. прошивка уже зашита в чип намертво. Забота о пользователе, #$%^.
AdUser
Sr. Member
Sr. Member
 
Сообщения: 277
Зарегистрирован: 15 июн 2009 08:42
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение leen » 07 сен 2010 12:03

AdUser писал(а):но похоже железо его физически не держит:
Marvell hw flags 0x00ed

Ну почему же не держит? 0x00ed = 0b0000_0000_1110_1101 (разделил по тетрадам для удобства),
Код: Выделить всё
#define SKY2_HW_USE_MSI      0x00000001
#define SKY2_HW_FIBRE_PHY   0x00000002
#define SKY2_HW_GIGABIT      0x00000004
#define SKY2_HW_NEWER_PHY   0x00000008
#define SKY2_HW_RAM_BUFFER   0x00000010
#define SKY2_HW_NEW_LE      0x00000020   /* new LSOv2 format */
#define SKY2_HW_AUTO_TX_SUM   0x00000040   /* new IP decode for Tx */
#define SKY2_HW_ADV_POWER_CTL   0x00000080   /* additional PHY power regs */
 

Т.е. из приведенных флагов равны нулю SKY2_HW_FIBRE_PHY и SKY2_HW_RAM_BUFFER. Т.о. гигабит он держит. Опа. Интересно, а может чип работать на гиге, если у него нет внутреннего буфера?? И в самом деле его нет? Чет не верится, чтоб марвел навыпускал кучу вариантов с памятью и без. Поэтому предлагаю раскурить, где у него внутренний буфер и как ему это указать. Плюс - наличие "additional power regs" и без внутреннего буфера? Не, че-то не вяжется. Ну а насчет FIBRE понятно, думаю.
Короче, предлагаю копать в сторону где у чипа внутри буфер и как сказать об этом чипу и драйверу.
Осень - мертвые дожди,
Осень - юные морозы,
Задубевшие березы
Ковыляют по Руси
leen
Advanced Newbie
Advanced Newbie
 
Сообщения: 46
Зарегистрирован: 29 апр 2009 12:20

Re: Marvell 88E8040

Сообщение AdUser » 07 сен 2010 12:11

Посмотри патчик, этот гигабитный флаг я сам же и выставил. По умолчанию там идет 0 третьим битом.

Просто я подумал "а вдруг все дело в одним бите?", но похоже ошибся.
AdUser
Sr. Member
Sr. Member
 
Сообщения: 277
Зарегистрирован: 15 июн 2009 08:42
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение Лимон » 07 сен 2010 12:51

AdUser писал(а):Чип моего сетевого адаптера физически держит гигабит, но определяется как 100Mbit'ный.

А адаптер гигабит держит? Модель бука скажи.
Лимон
Full Member
Full Member
 
Сообщения: 140
Зарегистрирован: 26 июн 2009 15:11
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение AdUser » 07 сен 2010 13:06

Лимон писал(а):А адаптер гигабит держит?

Это мы сейчас и выясняем.
Модель бука скажи.
AdUser
Sr. Member
Sr. Member
 
Сообщения: 277
Зарегистрирован: 15 июн 2009 08:42
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение leen » 07 сен 2010 13:21

А ты не пробовал брать дрова с марвелловского сайта? они на глаз весьма непохожи на ванильные.
install_v10.85.8.3.tar.bz2
марвелловские дрова
(415.16 КБ) Скачиваний: 334

Upd: где были мои глаза вчера, когда я читал ман?? Цитата из даташита на чип: the single-chip PCI-Express based Yukon FE+ device integrates the Marvell 10/100 PHY with кучей всяких вкусностей. Вот.
Так что нихрена он не держит (на уровне приемо-передатчика, он же PHY) 1Гб/с. А жаль.
Осень - мертвые дожди,
Осень - юные морозы,
Задубевшие березы
Ковыляют по Руси
leen
Advanced Newbie
Advanced Newbie
 
Сообщения: 46
Зарегистрирован: 29 апр 2009 12:20

Re: Marvell 88E8040

Сообщение AdUser » 07 сен 2010 13:43

leen писал(а):Так что нихрена он не держит (на уровне приемо-передатчика, он же PHY) 1Гб/с. А жаль.

Печально, блин. Тогда остается академический вопрос, почему народ с гигабитными чипами по ссылке, решил, что там именно 88E8040. М.б. глюки винды в части определения железа?

UPD: Допускаю, что чувак, писавший модуль для ядра не стал разбивать его на части из-за одного урезанного чипа, а запихнул целиком в категорию гигабитов...
Последний раз редактировалось AdUser 07 сен 2010 13:48, всего редактировалось 1 раз.
AdUser
Sr. Member
Sr. Member
 
Сообщения: 277
Зарегистрирован: 15 июн 2009 08:42
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение Лимон » 07 сен 2010 13:45

Спецификация - http://www.samsung.com/kz_ru/consumer/computers-peripherals/notebooks/n-series/NP-N150-JA01KZ/index.idx?pagetype=prd_detail&tab=specification
10/100 - доктор (samsung) сказал!
Прежде чем ковырять чип, посмотри его обвязку - сколько пар разведено. 1000BASE-T использует все четыре пары кабеля.
Лимон
Full Member
Full Member
 
Сообщения: 140
Зарегистрирован: 26 июн 2009 15:11
Откуда: Владивосток

Re: Marvell 88E8040

Сообщение AdUser » 07 сен 2010 13:54

Всем спасибо за помощь, думаю тему можно закрывать.
AdUser
Sr. Member
Sr. Member
 
Сообщения: 277
Зарегистрирован: 15 июн 2009 08:42
Откуда: Владивосток


Вернуться в Linux tech talks

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

cron