The OpenNET Project / Index page

[ новости /+++ | форум | wiki | теги | ]

Решение проблемы с IRQ на nForce2 материнках в Linux. (linux hardware irq video trouble)


<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>
Ключевые слова: linux, hardware, irq, video, trouble,  (найти похожие документы)
From: McMCC <mcmcc@mail.ru> Newsgroups: mcmcc.bat.ru Date: Mon, 3 Oct 2003 14:31:37 +0000 (UTC) Subject: Решение проблемы с IRQ на nForce2 материнках в Linux. Оригинал: http://www.mcmcc.bat.ru/acpi_nforce2/ Решение проблемы с IRQ на nForce2 материнках в Linux'е. В последнее время, после выхода большого количества материнских плат на базе микросхем Nvidia nForce2 от разных производителей, в интернете появилось масса статей связанных с использованием таких материнок под Linux'ом. Основной упор этих статей делался на железячные проблемы и драйвера, одна из таких статей, на мой взгляд довольно интересная, находится на сайте Johannes Deisenhofer http://home.t-online.de/home/Johannes.Deisenhofer/nforce2linux.html , автор статьи описывает некоторые нюансы с имеющейся у него материнской платой Asus A7N8X Deluxe и как он пытался подружить эту материнку с Linux'ом. Сегодня эту статью можно считать сильно устаревшей, так как с выходом ядра 2.4.21 и патча для этого ядра от Алана Кокса 2.4.21-ac4, многие проблемы связанных с драйверами решены: 1. Появилась полноценная поддержка onboard IDE контроллера 2. Появился драйвер AGPGART, теперь можно использовать видеокарты не от Nvidia(2.4.21-ac4) 3. Появились драйвера для контроллеров SATA 4. Исправлены глюки в драйвере IEEE1394 (firewire) 5. Улучшена поддержка USB v.2.0 Всех изменений не перечислишь, однако есть еще драйвера от самой Nvidia для nForce2 под Linux. Их драйвера содержат полноценную поддержку встроенной Nvidia Ethernet и Audio. Загрузить их можно с официального сайта Nvidia http://www.nvidia.com из секции Download. Если звуковой драйвер полностью открытый, то для ethernet закрытый, на что многие пользователи Linux относятся отрицательно и требуют (http://www.petitiononline.com/nforce2/petition.html) открыть исходники на это устройство. Если с драйверами ситуация понятная, то вот с поддержкой ACPI очень и очень туманная. Что такое ACPI? ACPI (Advanced Configuration & Power Interface) - это расширенный интерфейс конфигурирования компьютера и управления питанием. ACPI представляет собой весьма объемный стандарт, описывающий правила распределения линий IRQ и каналов DMA для устройств на шинах AGP и PCI, наблюдения за системными событиями, управление статусом компьютера и отдельных устройств и т.д. Все знают, что можно прекрасно прожить без ACPI, так как большенство этих функций спокойно берет на себя сам биос, а функции Power Management(PM) доступны через APM. Но время идет, если до не давнего времени биос спокойно справлялся с раздачей IRQ и DMA для используемых в системе PCI и AGP устройств, то с принятием ACPI v.2.0 все изменилось, теперь биос ограничен в своих правах и эта возможность почти полностью в распоряжении ACPI. Полноценная поддержка ACPI существует только в OC Windows 2000 и XP, но после того как один из разработчиков ACPI, компания Intel http://www.intel.com/ , открыла спецификацию на ACPI и даже открыла целый проект http://developer.intel.com/technology/iapc/acpi/ для разработчиков, разместив на своем сайте исходные коды и утилиты, то процесс по внедрению поддержки ACPI в другие ОС пошел полным ходом. Страничка поддержки ACPI в Linux'е находится по адресу http://acpi.sourceforge.net. Не смотря на то, что проекту уже больше года, полноценная поддержка ACPI в Linux'е еще не завершена. Не многие материнские платы работают с линуксовым ACPI. Материнские платы на nForce/nForce2 заявлены как не поддерживающие линуксовый ACPI, об этом официально заявляет Nvidia и ACPI4Linux Team. Если функции PM этих материнок считаются как бы работающими, то функция распределения линий IRQ и каналов DMA - нет. Зачем это надо? Дело в том, что некоторые устройства на этих материнках отказываются работать, так как IRQ для них не определено и биос ничего не может с этим сделать, получается что эти устройства как бы присутствуют, но не работают. У меня эта проблема возникла с одним из 3х USB хабом и SMBus(System Management Bus), которым требуется для нормальной работы прерывания. Больше месяца я бился с этой проблемой, читал списки рассылки по kernel и ACPI, оказалось, что проблема с IRQ routing'ом на материнках с nForce2 давно известна, но вот решений по этому поводу никаких нет, Nvidia тоже не пытается решать эту проблему. После многочисленных попыток заставить работать линуксовый ACPI драйвер с моей Epox EP-8RDA+, мои попытки увенчались успехом. Проблема оказалась в использовании дополнительной таблицы прерываний, с IRQ 16 по IRQ 23, причем ACPI пыталась честно назначить прерывания из этого диапазона всем существующим устройствам PCI и AGP, оставляя при этом основную таблицу прерываний от 0 до 15 всем этим же устройствам, видимо из-за этого подвисала загрузка линукса на первом же драйвере, который пытался определить используемое устройством прерывание. Это примерно выглядело так: ACPI: Interpreter enabled ACPI: Using PIC for interrupt routing ACPI: System [ACPI] (supports S0 S1 S4 S5) ACPI: PCI Root Bridge [PCI0] (00:00) PCI: Probing PCI hardware (bus 00) ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 5 6 7 10 *11 12 14 15) ACPI: PCI Interrupt Link [LNK2] (IRQs 3 4 5 6 7 10 11 12 14 15,disabled) .... ACPI: PCI Interrupt Link [LIDE] (IRQs 3 4 5 6 7 10 11 12 14 15,disabled) ACPI: PCI Interrupt Link [APC1] (IRQs *16) ACPI: PCI Interrupt Link [APC2] (IRQs 17, disabled) .... ACPI: PCI Interrupt Link [APCZ] (IRQs 20 21 22, disabled) PCI: Probing PCI hardware ACPI: PCI Interrupt Link [LNK2] enabled at IRQ 10 ACPI: PCI Interrupt Link [LNK3] enabled at IRQ 10 ACPI: PCI Interrupt Link [LNK5] enabled at IRQ 10 ACPI: PCI Interrupt Link [LUBA] enabled at IRQ 5 ACPI: PCI Interrupt Link [LMCI] enabled at IRQ 11 ACPI: PCI Interrupt Link [LSMB] enabled at IRQ 10 ACPI: PCI Interrupt Link [L3CM] enabled at IRQ 5 ACPI: PCI Interrupt Link [LIDE] enabled at IRQ 11 ACPI: PCI Interrupt Link [APC2] enabled at IRQ 17 ACPI: PCI Interrupt Link [APC3] enabled at IRQ 18 ACPI: PCI Interrupt Link [APC5] enabled at IRQ 16 ACPI: PCI Interrupt Link [APCF] enabled at IRQ 20 ACPI: PCI Interrupt Link [APCG] enabled at IRQ 22 ACPI: PCI Interrupt Link [APCH] enabled at IRQ 21 ACPI: PCI Interrupt Link [APCI] enabled at IRQ 20 ACPI: PCI Interrupt Link [APCJ] enabled at IRQ 22 ACPI: PCI Interrupt Link [APCK] enabled at IRQ 21 ACPI: PCI Interrupt Link [APCS] enabled at IRQ 23 ACPI: PCI Interrupt Link [APCL] enabled at IRQ 20 ACPI: PCI Interrupt Link [APCM] enabled at IRQ 22 ACPI: PCI Interrupt Link [AP3C] enabled at IRQ 21 ACPI: PCI Interrupt Link [APCZ] enabled at IRQ 20 PCI: Using ACPI for IRQ routing PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off' .... Видно, что основная таблица прерываний состоит из 8-ми линков, когда как дополнительная из ACPI почти в 2-а раза больше. Похоже, что ACPI драйвер не совсем корректно делает назначения дополнительных прерываний, грубо говоря - просто бредит! Радует одно, что есть такая возможность, как использование DSDT(Differentiated System Description Table), суть в ее использования заключается в том, что мы сами можем определить правила для работы ACPI. Как работать с DSDT, можно узнать по ссылке http://acpi.sourceforge.net/wiki/index.php, если коротко, то мы в начале считываем программу управления ACPI из биоса, дизассемблируем ее http://www.mcmcc.bat.ru/acpi_nforce2/downloads/dsdt.dsl имеющимися у нас утилитами от Intel, делаем необходимые исправления http://www.mcmcc.bat.ru/acpi_nforce2/downloads/1-dsdt.dsl или добавления, переводим все в hex формат и интегрируем http://www.mcmcc.bat.ru/acpi_nforce2/downloads/1-dsdt.hex http://www.mcmcc.bat.ru/acpi_nforce2/downloads/linux-2.4.21-acpi_nforce2_dsdt_mc1.patch эту полученную новую DSDT в наш ACPI драйвер. Именно этим способом мне удалось запустить работу ACPI IRQ роутинга, после того, как я выкинул из DSDT таблицы все, что было связано с дополнительной таблицей прерываний и на ее место прописал основную стандартную. При этом все устройства на материнской плате были найдены и им были присвоены все необходимые прерывания. Теперь у меня работают все USB порты, а так же стал определяться SMBus, с которым, по идее, должен нормально работать Lm_sensors, правда проверить эту возможность у меня пока небыло времени. Вот как сейчас выглядит лог при загрузки Linux'а по части ACPI: ACPI: Interpreter enabled ACPI: Using PIC for interrupt routing ACPI: System [ACPI] (supports S0 S1 S4 S5) ACPI: PCI Root Bridge [PCI0] (00:00) PCI: Probing PCI hardware (bus 00) ACPI: PCI Interrupt Link [LNK1] (IRQs 3 4 5 6 7 10 *11 12 14 15) ACPI: PCI Interrupt Link [LNK2] (IRQs 3 4 5 6 7 10 11 12 14 15, disabled) .... ACPI: PCI Interrupt Link [LIDE] (IRQs 3 4 5 6 7 10 11 12 14 15, disabled) PCI: Probing PCI hardware ACPI: PCI Interrupt Link [LNK2] enabled at IRQ 10 ACPI: PCI Interrupt Link [LNK3] enabled at IRQ 10 ACPI: PCI Interrupt Link [LNK5] enabled at IRQ 10 ACPI: PCI Interrupt Link [LUBA] enabled at IRQ 5 ACPI: PCI Interrupt Link [LMCI] enabled at IRQ 11 ACPI: PCI Interrupt Link [LSMB] enabled at IRQ 10 ACPI: PCI Interrupt Link [L3CM] enabled at IRQ 5 ACPI: PCI Interrupt Link [LIDE] enabled at IRQ 11 PCI: Using ACPI for IRQ routing PCI: if you experience problems, try using option 'pci=noacpi' or even 'acpi=off' .... Все эти эксперименты я проделывал с материнской платой Epox EP-8RDA+, скорее всего моя подправленная таблица DSDT должна подойти к другим http://www.mcmcc.bat.ru/acpi_nforce2/downloads/1-dsdt.hex материнским платам выполненных на базе микросхем nForce2, если нет, то мы можем создать специальную базу подправленных DSDT таблиц для разных материнских плат на базе nForce2 и выложить их на этом сайте. Что бы вы сам смогли сделать исправления в DSDT для своей материнки, я сделал специальный diff файлик, где наглядно видно какие нужно делать изменения http://www.mcmcc.bat.ru/acpi_nforce2/downloads/diff_dsdt.diff Так как я в основном работаю с дистрибутивами от RedHat, то мною за время этих экспериментов было собрано ядро на основе патчей от RedHat и своих собственных. Если кому интересно, то вы можете взять собранное мною ядро специально для nForce2 и оптимизированное под Athlon, правда это ядро предназначено для работы в RedHat 7.x и 8.0, для RH9 я еще этим не занимался, ядра для RH9 имеют некоторые особенности и поэтому ряд патчей входящих в мое ядро прикрутить не так просто, если у меня будет свободное время, то я постараюсь собрать ядро со своими патчами для 9-ки. Данное ядро основано на последней официальной версии 2.4.21, http://kernel.org/pub/linux/kernel/v2.4/patch-2.4.21.bz2 патчами от Алана Кокса 2.4.21-ac4, некоторыми специфичными патчами от RedHat'а и немного своими http://kernel.org/pub/linux/kernel/people/alan/linux-2.4/2.4.21/patch-2.4.21-ac4.bz2 Список собранных RPM пакетов: kernel-2.4.21-1.w4l.athlon.rpm(собран gcc-3.2) http://www.mcmcc.bat.ru/acpi_nforce2/downloads/kernel-2.4.21-1.w4l.athlon.rpm kernel-doc-2.4.21-1.w4l.athlon.rpm http://www.mcmcc.bat.ru/acpi_nforce2/downloads/kernel-doc-2.4.21-1.w4l.athlon.rpm kernel-source-2.4.21-1.w4l.athlon.rpm http://www.mcmcc.bat.ru/acpi_nforce2/downloads/kernel-source-2.4.21-1.w4l.athlon.rpm Основные особенности: - Поддержка Win4Lin - ACPI IRQ routing для nForce2(Epox EP-8RDA+) - AGPGART для nForce2 - Все последние драйвера от Nvidia, включая модуль для видео - Поддержка ZIV1 и других устройств на базе контроллера USS-725 - Все дополнения, которые входят в состав RedHat'овского ядра (lm_sensors, tux и т.д.) Тем кому интересно собрать это ядро самостоятельно, то вы можете взять tar архив http://www.mcmcc.bat.ru/acpi_nforce2/downloads/patches_kernel-2.4.21-1.w4l.tar.bz2 со всеми патчами и спек файлами, отсутствует только исходники самого ядра 2.4.21 и патча 2.4.21-ac4 от Алана, это сделано специально, что бы уменьшить размер и не тянуть лишний раз одно и тоже... 30.06.03 McMCC (mcmcc@mail.ru)

<< Предыдущая ИНДЕКС Поиск в статьях src Установить закладку Перейти на закладку Следующая >>

 Добавить комментарий
Имя:
E-Mail:
Заголовок:
Текст:




Спонсоры:
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

Закладки на сайте
Проследить за страницей
Created 1996-2020 by Maxim Chirkov
Добавить, Поддержать, Вебмастеру