LINUX.ORG.RU
ФорумAdmin

Помогите починить dsdt

 ,


7

3

Помогите собрать dsdt без ошибок. Сам уже замучился разбираться в этом asl, жутко странный язык, на русском ничего по нему не нашел, а по-английски не готов читать. Ошибки какие-то не типичные. Также не понятно, как asus собрал dsdt интеловским компилятором 2012 года, если у меня он выдает 5 ошибок (может декомпилируется с ошибками?).

aml: http://rgho.st/8ZqBGGyLn

asl: http://rgho.st/8jJbgdf9Y

Декомпиляция:

Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20160212-64
Copyright (c) 2000 - 2016 Intel Corporation

Input file dsdt.dat, Length 0x161BD (90557) bytes
ACPI: DSDT 0x0000000000000000 0161BD (v02 _ASUS_ Notebook 00000012 INTL 20120711)
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed

Found 18 external control methods, reparsing with new information
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed
Disassembly completed
ASL Output:    dsdt.dsl - 750692 bytes
Обратная компиляция:
Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20160212-64
Copyright (c) 2000 - 2016 Intel Corporation

Compiler aborting due to parser-detected syntax error(s)
dsdt.dsl   2399:                 Zero
Error    6126 -                    ^ syntax error, unexpected PARSEOP_ZERO

dsdt.dsl   2483:                         Zero
Error    6126 -                            ^ syntax error, unexpected PARSEOP_ZERO

dsdt.dsl  12338:         }
Error    6126 -         ^ syntax error, unexpected '}'

dsdt.dsl  21771:                 Local1 = (0x0A - Local0)
Error    6126 -                      ^ syntax error, unexpected PARSEOP_LOCAL1

dsdt.dsl  24058: 
Error    6126 - syntax error, unexpected $end and premature End-Of-File

ASL Input:     dsdt.dsl - 24058 lines, 750692 bytes, 11855 keywords
Hex Dump:      dsdt.hex - 203 bytes

Compilation complete. 5 Errors, 0 Warnings, 0 Remarks, 0 Optimizations
Ноутбук asus x555ld. Кто в этом разбирается гляньте пожалуйста.


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

Не особо они помогают. Вы не в курсе ssdt тоже нужно править для исправления проблем (пытаюсь решить проблемы с гибернацией и предупреждениями в dmesg)?

Simarc
() автор топика

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

anonymous
()
Ответ на: комментарий от Simarc

нет, ssdt править (для заявленных проблем) — не нужно.

slon
()
Ответ на: комментарий от Simarc

пытаюсь решить проблемы с гибернацией и предупреждениями в dmesg

Если всё остальное работает, то предупреждения просто игнорируй.

Гибернация же унылое ненужно говно. Просто научись выключать свой ноут. С сегодняшними SSD загрузка к полностью работоспособному окружению проходит очень оперативно. И при этом не нужно юзать недоработанное поделие и еще и свопа ему выделять.

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

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

Тупица открой для себя эпичнейшие баги dsdt у apple! Некоторые модели есть так асус будет героем на фоне яббла.

Мало того в данном вопросе производитель и/или цена изделия не играет никакой роли ибо чаще как повезет.

Всегда твой, С любовью - капитан Очевидность.

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

юзеры апла заморочились и создали приложение для фикса типичных багов dsdt ;)

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

См. изъяснения init6.

init6? Что или кто это?

Гибернация же унылое ненужно говно.

Не согласен. Лично для меня удобная и нужная (особенно с hdd). Предлагаю больше не спорить на эту тему.

Написал в поддержку асуса с просьбой обновить биос и исправить ошибки в dsdt. Как думаете что ответят?

нет, ssdt править (для заявленных проблем) — не нужно.

Учту.

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

init6? Что или кто это?

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

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

Дааа... Эти ошибки кое-как убрал появилось 3 новых (которые тоже исправил) и 109 warnings, 205 Remarks, 196 Optimizations, 8 Constants Folded. Предупреждения от dmesg никуда не делись.

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

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

т.к. это его кастанет, а ему тоже лень разбираться в чужих проблемах

в результате меня всё-равно кастануло но по тэгу.

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

опиши для начала свои проблемы по пунктам, чтоб два раза не перечитывать
типо
* жму кнопку такую-то и не уходит в сон
* и т.д.
(ну т.е. я счтаю что передал тебя в руки мастера, если только он спать не ушел)

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

Главная проблема одна: гибернация работает не стабильно. Когда система относительно свежая (перезагрузка была недавно, много программ не запускал) система может восстановиться после гибернации нормально, но если я открываю смотреть фильм, копаюсь в файловом менеджере и открываю браузер с десяткой вкладок, то зависание при восстановлении обеспечено. После добавления к параметрам ядра

ignore_loglevel initcall_debug no_console_suspend
могу видеть, что зависает на строчке
PM: Calling lapic_suspend+0x0/0x1b0
(http://rgho.st/89CqVPwCB.view)

Dmesg при штатной загрузке показывает несколько конфликтов в озу, связанных с apic. (было на 4 больше, пока не отключил дискретную видеокарту).

kern  :warn  : [    0.433924] pmd_set_huge: Cannot satisfy [mem 0xf8000000-0xf8200000] with a huge-page mapping due to MTRR override.
kern  :warn  : [    8.400507] ACPI Warning: SystemIO range 0x000000000000F040-0x000000000000F05F conflicts with OpRegion 0x000000000000F040-0x000000000000F04F (\SMB0) (20160108/utaddress-255)
kern  :warn  : [    8.402984] ACPI Warning: SystemIO range 0x000000000000F040-0x000000000000F05F conflicts with OpRegion 0x000000000000F040-0x000000000000F04F (\_SB.PCI0.SBUS.SMBI) (20160108/utaddress-255)
kern  :warn  : [    9.223984] [Firmware Bug]: ACPI(PEGP) defines _DOD but not _DOS
kern  :warn  : [    9.513969] r8169 0000:02:00.0: can't disable ASPM; OS doesn't have ASPM control
Вот я и думаю может в нем проблема? dmesg https://gist.github.com/anonymous/7494135ca6db2d3eea216cff69d779f6 . Система archlinux. Моя первая тема по этой проблеме Arch не выходит из гибернации . Есть идеи?

Simarc
() автор топика

Simarc

Итак:

  • Если хочешь чтоб починили/помогли починить dsdt/ssdt отдавай dsdt.dat полученный из cat /sys/firmware/acpi/tables/DSDT > dsdt.dat либо cat /proc/acpi/dsdt > dsdt.dat
  • Всегда пользуйся самым свежим доступным софтом.

Так вот а с тем что ты дал:

> iasl -v

Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20150717-64
Copyright (c) 2000 - 2015 Intel Corporation


> iasl -tc dsdt.dsl 

Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20150717-64
Copyright (c) 2000 - 2015 Intel Corporation


Maximum error count (200) exceeded

dsdt.dsl   7157: 
Error    6126 - syntax error, unexpected PARSEOP_INTEGER and premature End-Of-File

(CUT)

Maximum error count (200) exceeded
ASL Input:     dsdt.dsl - 7157 lines, 750692 bytes, 2668 keywords
Hex Dump:      dsdt.hex - 203 bytes

Compilation complete. 201 Errors, 0 Warnings, 0 Remarks, 0 Optimizations

А это ^ говорит о том что либо dsdt снят криво, либо asus таки полный asnus и dsdt настолько упорот что... в общем ну ты понял.

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

Продолжаем... продолжать... Как это делается по уму. Сперва делаем небольшой файлик:

> cat refs.txt 
External(MDBG, MethodObj, 1)
External(_GPE.MMTB, MethodObj, 0)
External(_SB_.PCI0.LPCB.H_EC.ECWT, MethodObj, 2)
External(_SB_.PCI0.LPCB.H_EC.ECRD, MethodObj, 1)
External(_SB_.PCI0.PEG0.PEGP.SGPO, MethodObj, 2)
External(_SB.PCI0.GFX0.DD02._BCM, MethodObj, 1)
External(_SB.PCI0.SAT0.SDSM, MethodObj, 4)
External(_SB.PCI0.SAT1.SDSM, MethodObj, 4)
External(_GPE.VHOV, MethodObj, 3)

Затем повторяем декомпиляцию но уже из *.dat:

> iasl -da -dl -fe refs.txt dsdt.dat 

Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20150717-64
Copyright (c) 2000 - 2015 Intel Corporation

Reading ACPI table from file   dsdt.dat - Length 00090557 (0x0161BD)
ACPI: DSDT 0x0000000000000000 0161BD (v02 _ASUS_ Notebook 00000012 INTL 20120711)
Acpi table [DSDT] successfully installed and loaded
refs.txt: Importing method external (1 arguments) MDBG
refs.txt: Importing method external (0 arguments) _GPE.MMTB
refs.txt: Importing method external (2 arguments) _SB_.PCI0.LPCB.H_EC.ECWT
refs.txt: Importing method external (1 arguments) _SB_.PCI0.LPCB.H_EC.ECRD
refs.txt: Importing method external (2 arguments) _SB_.PCI0.PEG0.PEGP.SGPO
refs.txt: Importing method external (1 arguments) _SB.PCI0.GFX0.DD02._BCM
refs.txt: Importing method external (4 arguments) _SB.PCI0.SAT0.SDSM
refs.txt: Importing method external (4 arguments) _SB.PCI0.SAT1.SDSM
refs.txt: Imported 9 external method definitions
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed

Found 27 external control methods, reparsing with new information
Pass 1 parse of [DSDT]
Pass 2 parse of [DSDT]
Parsing Deferred Opcodes (Methods/Buffers/Packages/Regions)

Parsing completed
Disassembly completed
ASL Output:    dsdt.dsl - 843905 bytes

iASL Warning: There were 27 external control methods found during
disassembly, but only 9 were resolved (18 unresolved). Additional
ACPI tables may be required to properly disassemble the code. The
resulting disassembler output file may not compile because the
disassembler did not know how many arguments to assign to the
unresolved methods. Note: SSDTs can be dynamically loaded at
runtime and may or may not be available via the host OS.

If necessary, the -fe option can be used to specify a file containing
control method external declarations with the associated method
argument counts. Each line of the file must be of the form:
    External (<method pathname>, MethodObj, <argument count>)
Invocation:
    iasl -fe refs.txt -d dsdt.aml

Переводить не буду. Но в паре слов - радостный iasl сообщил нам что он смог решить 9 из 27 внешних контрольных методов.

Штука в том что вон ^ там выше где было Compilation complete. 201 Errors, 0 Warnings, 0 Remarks, 0 Optimizations так вот эта строчка намекает на то DSDT неполный.

Теперь об этом предупреждает и сам iasl собственно вон там Additional ACPI tables may be required to properly disassemble the code. The resulting disassembler output file may not compile because the disassembler did not know how many arguments to assign to the unresolved methods.

Скорее всего нужн{а/ы} ssdt. Живут они там же /sys/firmware/acpi/tables/SSDT и их количество тоже может быть разное от одной до нескольких. И и они могут быть либо статическими, как и dsdt, либо динамическими, и в этом случае все еще хуже.

В любом случае чтоб что-то сказать нужны все ssdt потому-что они могут отличатся.

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

Исправил только dsdt.dsl

> iasl -tc dsdt.dsl 

Intel ACPI Component Architecture
ASL+ Optimizing Compiler version 20150717-64
Copyright (c) 2000 - 2015 Intel Corporation

(CUT)

ASL Input:     dsdt.dsl - 24577 lines, 842446 bytes, 11842 keywords
AML Output:    dsdt.aml - 90466 bytes, 2522 named objects, 9320 executable opcodes
Hex Dump:      dsdt.hex - 848481 bytes

Compilation complete. 0 Errors, 106 Warnings, 205 Remarks, 196 Optimizations, 8 Constants Folded

Забирать там

Дальше неплохо бы исправлять ssdt*.dsl там тоже ад.

Simarc как заберешь отпишись.

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

Спасибо за старания, но не помогло. Гибернация не работает, конфликты, ошибки, предупреждения висят в dmesg. Новый dmesg http://pastebin.com/YJXzFNPM . По строчке ACPI: Override [DSDT-Notebook], this is unsafe: tainting kernel видно, что dsdt переопредилилась.

Недавно появилась тема http://archlinux.org.ru/forum/topic/16311 с точно такой же проблемой как у меня, тоже asus (но другой очень похожий), тоже нет гибернации, dmesg ошибки, конфликты... Причем ошибки похожи вплоть до адресов конфликтов.

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

Кстати, обратился в поддержку асуса с просьбой обновить bios (описал проблемы) - послали использовать окна. Сказали: «К сожалению, у нас нет данных по Linux, поскольку мы не поддерживаем эту систему. Для Windows нужно было бы переустанавливать драйверы АТК, ВТ и Wi-Fi. Но для Linux у нас их нет.»

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

У твоей железки образцово показательное уг в acpi причем не только в dsdt но и в ssdt. К то-же еще и в зависимости от того как именно снимать dsdt и результат, как ты мог сам убедится, тоже будет разный.

На твоём месте я бы добил до конца ещё и все ssdt. Зачем? Ну во первых ошибок в ssdt у тебя там не меньше и решать их надо таким же макаром как и в случае dsdt а как быть дальше вон почитай к примеру там и всё поймешь. Во вторых точнее вычисляй и локализуй свои проблемы так можно быстрее найти именно тот баг который за это ответственен. Как это сделать?

./get_methods dsdt.dat ssdt1.dat ssdt2.dat ssdt3.dat ssdt4.dat ssdt5.dat ssdt6.dat ssdt7.dat ssdt8.dat ssdt9.dat ssdt10.dat ssdt11.dat ssdt12.dat ssdt13.dat | ./methods_tree > out.html

Скрипты там Ими можно сгенерировать дерево методов по твоим таблицам. Дальше тупо в спецификации acpi есть описание каждого элемента. Ну к примеру _PR_ это проц. Так вот вспоминаешь что конкретно у тебя не работает либо работает не так как обязано. По спекам acpi находишь как оно обзывается в dsdt/ssdt ищешь этот элемент в дереве методов. И вот ты локализовал место поисков в тоннах текстов dsdt/ssdt.

Как исправлять?

Это самое забавное. Чаще гораздо проще найти работающий кусок и разобраться как же оно должно быть на самом деле.

И да вообще acpi в linux тот ещё лагодром. Так что не жди что вот так просто сразу всё исправится и станет просто хорошо. В acpi есть костыли на разных уровнях от BIOS/EFI, ядра до юзерспейса и глючить может в разных местах. И баги соответственно тоже могут быть от абсолютно разного да и ещё и от сочетаний этого разного в разных местах.

В общем успехов!

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

В общем всё очень сложно) Сомневаюсь, что когда-то этим займусь, т.к. времени и сил уйдет на это немерено. Поживу как-нибудь без гибернации и буду ждать обновлений ядра (вдруг прикрутят какой-нибудь исправляющий asus-ы костыль, всё таки на баг трекерах кое какая движуха идет по этому поводу). На будующее: не знаете производителей ноутов которые делают норальные bios-ы? И спасибо за помощь.

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

Жаль.

Есть относительно неплохие модели у тех или иных производителей.

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

А предпочтение нужно отдавать железу с coreboot это чуть менее чем все ноуты chromebook-и. Coreboot как бы открытый bios так что если где-то дела и обстоят получше то только там. Хотя учитывая «эффективный маркетинг» там тоже могут наделать говна.

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