LINUX.ORG.RU

Помогите с отладкой DSDT таблицы

 , ,


1

3

Всем привет.

Хочу отремонтировать DSDT таблицы у своего ноутбука. Но никак не могу найти решения двух вопросов:

  1. Как вести отладку
  2. Нужна русская литература

1)

Писать из ACPI в dmesg довольно просто, но не понятно, как получить информацию об ошибках на подобие traceback. Например здесь:

ACPI Exception: AE_NOT_FOUND, While evaluating Sleep State [\_S1_] (20150410/hwxface-580)
Ошибка есть, но как понять почему не найден? Где искал?

Увеличение уровня логов ACPI выводит тонны сообщений, вида:

[   23.213726]   exutils-0136 ex_exit_interpreter   : ----Exit-
[   23.213732]    nseval-0324 ns_evaluate           : ----Exit- AE_OK
[   23.213735]  utobject-0461 ut_get_simple_object_s: ----Entry ffff880000083b88
[   23.213739]  utobject-0564 ut_get_simple_object_s: ----Exit- AE_OK
[   23.213742]    utcopy-0398 ut_copy_iobject_to_eob: ----Entry
[   23.213745]    utcopy-0118 ut_copy_isimple_to_esi: ----Entry
но не понятно где и в каких блоках/методах это всё происходит.

Давно с переменным успехом борюсь с ASPM, уже не на первом ноуте.

\_SB_.PCI0:_OSC invalid UUID
Выводил значения входящих аргументов метода _OSC, возвращаемые значения - появилось ещё больше вопросов: как работают эти методы, почему вызываются только один раз, когда PCIe устройств целая куча: на одних ASPM автоматически включается, на других нет, а сообщения от метода приходят только один раз. При этом спецификация говорит, что «The OS is permitted to evaluate _OSC an arbitrary number of times».

Хочу исправить другие косяки биосаписателей, например:

ACPI Warning: SystemIO range 0x0000000000002000-0x000000000000201F conflicts with OpRegion 0x0000000000002000-0x000000000000200F (\_SB_.PCI0.SBUS.SMBI) (20150410/utaddress-254)
Для всего этого требуется что-то вроде traceback. Или есть хорошие решения для отладки?

2)

ACPI спецификация составлена хорошо, на многие вопросы нашёл ответы, но тем не менее хочется какого-нибудь русскоязычного руководства. В русских интернетах почти все найденые мною блоги и форумы сводятся к решению ошибок компиляции DSDT таблиц для установки проприетарщины, которую я не хочу здесь упоминать. Ничего толкового.

Прошу русское сообщество линуксоводов помочь в решении этих вопросов. Спасибо всем, кто может поделиться знаниями или дать хорошие ссылки.

★★

Хорошие заметки так же есть здесь, где объясняется, например, как пользоваться эмулятором ACPI.

rmu ★★
() автор топика
Ответ на: комментарий от anTaRes

кастани кого-то из отвечавших

Хорошая идея.

init_6, smilessss, подскажите пожалуйста, чем отлаживать ACPI? Был ли сайт sudormrf.wordpress.com куда-нибудь перенесён или от тех статей ничего не осталось?

Для отладки синтаксиса таблиц я использую acpiexec. Эмулятор замечательный, но на реальном железе результаты совсем другие получаются. Для этого случая и хотелось бы узнать хороший способ для отладки.

rmu ★★
() автор топика
Ответ на: комментарий от anTaRes

ну прям не знаешь что делать?

Хм, идея хорошая, но наиболее важной страницы «Le grande dsdt error central» там нет: Wayback Machine doesn't have that page archived.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

наиболее важной страницы «Le grande dsdt error central»

еще одна «Хорошая идея»: в гугле по этому предложению первой же ссылкой
http://init_6.bitbucket.org/content/2011/02/le-grande-dsdt-error-central/

а по тегу там даже предыдущая есть

anTaRes ★★★★
()
Ответ на: комментарий от rmu

Все ошибки в DSDT как правило типичные. Чуть ли не шаблонные. Если и не все, то достаточное количество ошибок я, в свое время, осветил. Дальше нужно только желание и время.

Сайт http://sudormrf.wordpress.com был на убогом, бесплатном водпрессе и эти козлы начали пихать свою рекламу. Меня это вкрай выбесило и я перенес весь бложик на pelican и на bb http://init_6.bitbucket.org Хотя теперь по сути пофиг где висеть простому статическому html.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

А чем ты вёл отладку? Смотрел только dmesg + powertop, acpiexec, или знаешь какой-то хороший инструмент?

У тебя замечательные заметки на сайте, может ты знаком с другими русскоязычными материалами по теме?

rmu ★★
() автор топика
Ответ на: комментарий от anTaRes

еще одна «Хорошая идея»: в гугле по этому предложению первой же ссылкой

Виноват, пропустил. У меня она тоже идёт первой ссылкой в гугле. Может быть тогда я глазами искал слово sudormrf, потому и не заметил. Ссылка туда ведёт всего одна, так что такое возможно. А что косяк есть - не отрицаю.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

А чем ты вёл отладку?

Я делал вот так

http://init_6.bitbucket.org/content/2009/12/acpi-dsdt/

Смотрел только dmesg + powertop, acpiexec, или знаешь какой-то хороший инструмент?

Инструментов кроме iasl больше не нужно никаких.

У тебя замечательные заметки на сайте, может ты знаком с другими русскоязычными материалами по теме?

Нет. Но этой темой страдают хакинтошники и вот их англоязычные ресурсы более полезны.

init_6 ★★★★★
()
Последнее исправление: init_6 (всего исправлений: 1)
Ответ на: комментарий от init_6

Я делал вот так

С этим понятно, я не об ошибках спрашиваю, а о модификации. Вчера благополучно получилось добавить поддержку ASPM ещё на два устройства: убрал в методе _OSC в одном из условий оператор сравнения с переменной, у которой почему-то всегда значение 0, и метод теперь благополучно завершают 3 pcie устройства. Чтобы это вычислить, я целую кучу Debug сообщений настроил, кучу раз перекомпилил ядро. Зато теперь потребление в простое опустилось до 3,10 ватт.

Таким способом довольно трудно отлаживать. Надеюсь, что есть более удобные инструменты отладки.

Сейчас ACPI выдаёт только одно предупреждение:

ACPI Warning: SystemIO range 0x0000000000002000-0x000000000000201F conflicts with OpRegion 0x0000000000002000-0x000000
000000200F (\_SB_.PCI0.SBUS.SMBI) (20150410/utaddress-254)

Ты где-то здесь на форуме писал, что на это можно не обращать внимание. Тем не менее мой ноутбук страдает вот этим багом, то есть время от времени зависает. Я вот думаю: не в конфликте ли памяти проблема? Где-то находил баг-репорт, в котором у человека компьютер сразу выключался после появления обозначенной выше ошибки. И у меня это сложилось в одну картину, так что эту ошибку нужно победить.

Не знаешь как можно этот конфликт разрешить?

rmu ★★
() автор топика
Ответ на: комментарий от rmu

rmu я не влазил в отладку. Меня это вообще не интересовало потому что окончательно решить проблему кривого dsdt можно только его исправлением и последующей заменой на исправленный.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

Спасибо за внимание к моей затее!

rmu ★★
() автор топика
Ответ на: комментарий от init_6

Закончил с DSDT таблицей: три корневых шины, обе сетевые карточки теперь полноценно работают с ASPM, собрал ядро с подменяемой таблицей. По спецификации разобрался с рапределением памяти - конфликт разрешил, так что теперь ни одной ошибки, ни одного предупреждения от ACPI.

К сожалению уже был один фриз из-за этого бага, так что ни решённый конфликт памяти, ни отлаженные ошибки ASPM не влияют на работу c-state процессора.

Сижу, пью кофе, получаю удовольствие от налаженной работы устройств. Спасибо всем за подсказки.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

Сижу, пью кофе, получаю удовольствие от налаженной работы устройств. Спасибо всем за подсказки.

Поздравляю.

Печально что нет статистики по степени говнистоcти DSDT у основных производителей с распределением по моделям. Было бы забавно по крайней мере.

init_6 ★★★★★
()
Ответ на: комментарий от init_6

Судя по кол-ву открытых багов, таких наберётся немало.

rmu ★★
() автор топика
Ответ на: комментарий от rmu

А можешь подробнее написать про настройку памяти? А то у меня несколько плат, которые выдают ошибку наподобие:

ACPI Warning: SystemIO range 0x0000000000000B00-0x0000000000000B07 conflicts with OpRegion 0x0000000000000B00-0x0000000000000B0F (\SOR1) (20160108/utaddress-255)

Khnazile ★★★★★
()
Ответ на: комментарий от Khnazile

Мне нужно твою таблицу посмотреть. Сбрасывай, посмотрю, что у тебя там. Только не сегодня и завтра - сейчас уезжаю в другой город, пока не могу помочь.

Смысл в том, чтобы найти свободное место в одном из динамических пространств памяти, например в PCI_Config, и указать использовать эту область. Это не сложно.

rmu ★★
() автор топика
Ответ на: комментарий от Khnazile

у меня такое было, и я просто в блеклист добавил соотв. конфликтующий модуль (не особо нужен мне)

# IO conflict
blacklist i2c_piix4
есть еще (\HMOR) конфликт, но тут уже наоборот из-за подгрузки сенсоров

пару раз пытался смотреть свои DSDT, но там не типичный адъ в итоге подзабил до следующего раза

з.ы. https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Document...
тут много интересного есть, acpi_osi например

anTaRes ★★★★
()
Ответ на: комментарий от Khnazile

эти варнинги обычно валятся сразу-же после загрузки модуля, ткчто (скорее всего) виновато то что загрузилось строчкой выше

благо у меня десктоп, всякие PMы выпилины/отключены по максимуму, и варнинги с ними связанные могу смело игнорить
но их наличие тоже немного напрягает

$ dmesg | grep -B1 -i -E "[^e]bug|warning|conflict"
[    0.000000] ACPI: FACP 0x00000000C7E90200 000084 (v01 7599MS A7599100 20110304 MSFT 00000097)
[    0.000000] ACPI BIOS Warning (bug): Optional FADT field Pm2ControlBlock has zero address or length: 0x0000000000000000/0x1 (20160108/tbfadt-654)
--
[    0.158606] PCI: MMCONFIG at [mem 0xe0000000-0xefffffff] reserved in ACPI motherboard resources
[    0.158692] PCI: Using host bridge windows from ACPI; if necessary, use «pci=nocrs» and report a bug
--
[    0.162239] acpi PNP0A03:00: _OSC failed (AE_NOT_FOUND); disabling ASPM
[    0.162356] acpi PNP0A03:00: ignoring host bridge window [mem 0x000d0000-0x000dffff window] (conflicts with Adapter ROM [mem 0x000cf000-0x000d0bff])
--
[    0.162926] pci 0000:00:00.0: [1002:5957] type 00 class 0x060000
[    0.162938] pci 0000:00:00.0: [Firmware Bug]: reg 0x1c: invalid BAR (can't size)
--
[    6.940519] f71882fg: Found f71889fg chip at 0x600, revision 21
[    6.940575] ACPI Warning: SystemIO range 0x0000000000000600-0x0000000000000607 conflicts with OpRegion 0x0000000000000605-0x0000000000000606 (\HMOR) (20160108/utaddress-255)
[    6.940589] ACPI: This conflict may cause random problems and system instability

upd: grep c B1 информативнее

anTaRes ★★★★
()
Последнее исправление: anTaRes (всего исправлений: 1)
Ответ на: комментарий от anTaRes

У меня чудеса загадочные с материнской платой творятся, вот и пытаюсь крутится. Один жесткий диск отрубается при запуске оффтопа, перезагрузка из под линукса работает через раз, при установке «быстрых» модулей памяти зависает при попытке зайти в setup. Гигабайт, чтоб его.

А куда можно dsdt скинуть? Ни один сайт не хочет его принимать

Khnazile ★★★★★
()
Ответ на: комментарий от Khnazile

Пожми gzip'ом, хоть файл и небольшой, в таком виде, наверное, файлошара проглотит... Ну или на яндекс-диск/дропбокс положи.

yars068 ★★★★
()
Ответ на: комментарий от yars068

А шар, которые позволяют файло без регистрации лить совсем не осталось в современных интернетах? Все, куда не сунусь, регу требуют.

Khnazile ★★★★★
()
Ответ на: комментарий от Khnazile

Например, этот, требуется только мыло. Но для таких целей у многих есть специально заведенные ящики, можно и ящик с коротким временем жизни завести...

yars068 ★★★★
()

на волне интереса к DSDT решил тоже в очередной раз покопаться в своем acpi
вот только про ошибки вида

dsdt.dsl   3126:                 If (ECEN)
Error    6126 -                  ^ syntax error, unexpected PARSEOP_IF

dsdt.dsl   5010:                 If ((STCL == 0x0101))
Error    6126 -                  ^ syntax error, unexpected PARSEOP_IF
мало что написано, кроме «эти ифы нужно удалять вместе с закр./откр. скобками» или «это должно быть в исполняемом блоке» (типо в методе)
с первым я бы так и сделал, но второй как-то стремно учитывая что в нем описываются какие-то параметры SATA

дальнейшие поиски привели к тому, что можно юзать Include () и вынос всех этих ифов в инклуды уже открывает путь к реальным ошибкам и варнингам
т.е. было:
If (ECEN)
{
...
}
стало:
inc-file-name.dsl:
If (ECEN)
{
...
}
dsdt.dsl:
Include ("inc-file-name.dsl")
после всех фиксов можно успешно скомпилированную таблицу заново перегнать через дисассемблер и опять словить те-же ошибки на ифах ;)

была когда-то тема про такие ошибки, но результат неизвестен
ткчто если router все-еще интересует решение, и init_6 все-еще коллекционирует глюки dsdt - вот вам инфа

з.ы. остальным беспокойным:
Q: Is it important if my DSDT doesn't re-compile
A: Not necessarily. Many static ASL bugs that are rejected by iASL have workarounds present in the Linux kernel. This is because even if you might be able to modify and override your DSDT, most users with a system like yours cannot.

Of course you need to get the DSDT to re-compile if you want to run your modifications.
другими словами : «Работает? - Не трогай!»

anTaRes ★★★★
()

и еще один интересный факт: покопавшись в коде можно найти куски вида

Method (OSYS, 0, NotSerialized)
{
...
    If (_OSI ("Windows 2000"))
    {
        Local0 = 0x12
    }
...
}
и отследив где используется OSYS увидеть куски кода выполняющиеся только для «матерых» виндов, типо _OSI («Windows 2006»)

в общем прикинутся матерыми виндами можно и без перекомпиляции dsdt, просто добавив к параметрам ядра acpi_osi=! acpi_osi="Windows 2006"
скорее всего ничего особенного не произойдет, но мало ли :)

anTaRes ★★★★
()
Ответ на: комментарий от anTaRes

anTaRes это переключение реализует разное поведение железа под разными ОСями. И да ты прав так тоже можно поступать. Вот только ошибки бывают разнообразнее и таким методом их не вылечить.

init_6 ★★★★★
()
Ответ на: комментарий от anTaRes

либо, ещо тупее-

Просто раздел «новости» читать иногда, и на этом сайте, гм.,хм.. тоже!

anonymous
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.