Страница 1 из 1
Marvell 88E8040
Добавлено: 04 сен 2010 12:01
AdUser
leen, нужен твой квалифицированный совет.
Вчера, когда собирал custom-ядро под свой нетбук, обнаружил интересную вещь:
Чип моего сетевого адаптера физически держит гигабит, но определяется как 100Mbit'ный.
Судя по воплям в интернете я не один такой счастливчик, в Dellовских ноутбуках с аналогичным чипом, у некоторых гигабит работает, у некоторых нет, в зависимости от региона продажи.
Собссно вопрос, можно ли как-то это обойти?
Подозреваю, что дело в прошивке, и вижу 2 варианта возможных решений:
1. Ковырять саму прошивку. ИМХО - дохлый номер, даже если удасться ее сдампить, на чип ее обратно - не зальешь без помощи программатора и физического выпаивания чипа.
2. Ковырять ядро на стадии определения скорости адаптера в конкретном драйвере. Более реальный вариант, как мне кажется, если посмотреть из каких регистров берутся скорости и своевременно подправить пару битов...
Re: Marvell 88E8040
Добавлено: 06 сен 2010 20:05
leen
Так, немного порыскал по сети - нашел краткое описание контроллера 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Гб, или где дальше что. В общем, отладка принтэфами как она есть.
Re: Marvell 88E8040
Добавлено: 06 сен 2010 20:50
AdUser
Ок, сейчас сделаю, запощу сюда.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 11:26
AdUser
В общем, пока результаты по нулям.
Я нашел как заставить ядро думать, что там есть гигабит (патчик в комплекте)
, но похоже железо его физически не держит: логи 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
т.е. прошивка уже зашита в чип намертво. Забота о пользователе, #$%^.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 12:03
leen
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 понятно, думаю.
Короче, предлагаю копать в сторону где у чипа внутри буфер и как сказать об этом чипу и драйверу.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 12:11
AdUser
Посмотри патчик, этот гигабитный флаг я сам же и выставил. По умолчанию там идет 0 третьим битом.
Просто я подумал "а вдруг все дело в одним бите?", но похоже ошибся.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 12:51
Лимон
AdUser писал(а):
Чип моего сетевого адаптера физически держит гигабит, но определяется как 100Mbit'ный.
А адаптер гигабит держит? Модель бука скажи.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 13:06
AdUser
Лимон писал(а):А адаптер гигабит держит?
Это мы сейчас и выясняем.
Модель бука скажи.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 13:21
leen
А ты не пробовал брать дрова с марвелловского сайта? они на глаз весьма непохожи на ванильные.
Upd: где были мои глаза вчера, когда я читал ман?? Цитата из даташита на чип: the single-chip PCI-Express based Yukon FE+ device integrates the Marvell
10/100 PHY with кучей всяких вкусностей. Вот.
Так что нихрена он не держит (на уровне приемо-передатчика, он же PHY) 1Гб/с. А жаль.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 13:43
AdUser
leen писал(а):Так что нихрена он не держит (на уровне приемо-передатчика, он же PHY) 1Гб/с. А жаль.
Печально, блин. Тогда остается академический вопрос, почему народ с гигабитными чипами по ссылке, решил, что там именно 88E8040. М.б. глюки винды в части определения железа?
UPD: Допускаю, что чувак, писавший модуль для ядра не стал разбивать его на части из-за одного урезанного чипа, а запихнул целиком в категорию гигабитов...
Re: Marvell 88E8040
Добавлено: 07 сен 2010 13:45
Лимон
Спецификация -
http://www.samsung.com/kz_ru/consumer/c ... cification
10/100 - доктор (samsung) сказал!
Прежде чем ковырять чип, посмотри его обвязку - сколько пар разведено. 1000BASE-T использует все четыре пары кабеля.
Re: Marvell 88E8040
Добавлено: 07 сен 2010 13:54
AdUser
Всем спасибо за помощь, думаю тему можно закрывать.