LINUX.ORG.RU

disabling ASPM

 , ,


0

2

Подскажите, что изменить в dsdt, чтобы не вылетала следующая ошибка:

$ dmesg | grep ASPM
[    0.784023] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.784079] acpi PNP0A08:00: _OSC failed (AE_NOT_FOUND); disabling ASPM
[    1.224704] r8169 0000:05:00.0: can't disable ASPM; OS doesn't have ASPM control

В dsdt в Scope (_SB.PCI0) есть метод, который, как я понимаю, надо исправить, чтобы заработал ASPM, но не знаю что именно:

Method (_OSC, 4, Serialized)  // _OSC: Operating System Capabilities
            {
                Name (SUPP, Zero)
                Name (CTRL, Zero)
                If ((Arg0 == ToUUID ("33db4d5b-1ff7-401c-9657-7441c03dd766") /* PCI Host Bridge Device */))
                {
                    CreateDWordField (Arg3, Zero, CDW1)
                    CreateDWordField (Arg3, 0x04, CDW2)
                    CreateDWordField (Arg3, 0x08, CDW3)
                    SUPP = CDW2 /* \_SB_.PCI0._OSC.CDW2 */
                    CTRL = CDW3 /* \_SB_.PCI0._OSC.CDW3 */
                    If (((SUPP & 0x16) != 0x16))
                    {
                        (CTRL &= 0x1E)
                    }

                    CTRL &= 0x1D
                    If (~(CDW1 & One))
                    {
                        If ((CTRL & One)) {}
                        If ((CTRL & 0x04))
                        {
                            EPNM = One
                        }
                        Else
                        {
                            EPNM = Zero
                        }

                        If ((CTRL & 0x10)) {}
                    }

                    If ((Arg1 != One))
                    {
                        CDW1 |= 0x08
                    }

                    If ((CDW3 != CTRL))
                    {
                        CDW1 |= 0x10
                    }

                    CDW3 = CTRL /* \_SB_.PCI0._OSC.CTRL */
                    Return (Arg3)
                }
                Else
                {
                    CDW1 |= 0x04
                    Return (Arg3)
                }
            }


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

Воткнул я в dsdt из статьи Method (_OSC, 4, NotSerialized), но выхлоп такой получился:

[    0.778994] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.779079] acpi PNP0A08:00: _OSC failed (AE_NOT_FOUND); disabling ASPM

Андрей, может будет время - посмотри что не так в dsdt . Эта версия до внесения метода из твоей статьи.

И еще вопрос - почему очень разный на количество ошибок дамп dsdt, сделанный из под LiveCD Linux Mint 18.1 и из-под Gentoo 4.9.6, загруженный без кастомного dsdt? В первом случае 4 ошибки, а во втором 28.

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

Воткнул я в dsdt из статьи

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

Ты сам подход то понял? Ругается тебе ядро. Нашёл место проверки нужного тебе условия в сырцах. Посмотрел чего ядро от тебя желает. Дальше долго и упорно ищешь более менее похожую таблицу dsdt с такими кусками/изменениями на отсутствие которых ругается твоё ядро. А дальше тупо метод тыка - применил новую таблицу посмотрел что изменилось.

И еще вопрос - почему очень разный на количество ошибок дамп dsdt

Это особенность таблиц dsdt, ssdt. Самый правильный дамп не из живого биоса а из его бинарного файла обновления. А из живой системы надо снимать вот так и то не факт что получишь то что хочешь. Ах да снимешь из венды получишь третий дамп несовпадающий с твоей парой дампов ;)

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

А что возвращает вот это: ToUUID(«33DB4D5B-1FF7-401C-9657-7441C03DD766») ? Работает ли сравнение Arg0 и этого ToUUID в Linux? Как я понимаю, в этом месте сравнение дает False и все уходит на выполнение Else, где второй бит Arg3 устанавливается в 1 и в итоге имеем ASPM disabling. Как можно получить корректное значение ToUUID(«33DB4D5B-1FF7-401C-9657-7441C03DD766») для моей системы?

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

Подскажите, что изменить в dsdt, чтобы не вылетала следующая ошибка

Что изменить в DSDT — не подскажу, зато подскажу, что можно написать pcie_aspm=force в cmdline ядра :)

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

pcie_aspm=force

Не помогает это:

[    0.000000] Command line: BOOT_IMAGE=/boot/vmlinuz-4.9.6-gentoo-r1 root=/dev/sda1 ro pcie_aspm=force
[    0.000000] Kernel command line: BOOT_IMAGE=/boot/vmlinuz-4.9.6-gentoo-r1 root=/dev/sda1 ro pcie_aspm=force
[    0.000000] PCIe ASPM is forcibly enabled
[    0.777237] acpi PNP0A08:00: _OSC: OS supports [ExtendedConfig ASPM ClockPM Segments MSI]
[    0.777292] acpi PNP0A08:00: _OSC failed (AE_NOT_FOUND); disabling ASPM

tamo
() автор топика
Ответ на: pcie_aspm=force от tamo

А ты в код посмотри. Текст ошибки вводит в заблуждение; в действительности pcie_aspm=force имеет приоритет.

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

В файле /usr/src/linux/drivers/acpi/pci_root.c строка 457 (для ядра 4.9.6) выдает _OSC failed (AE_NOT_FOUND); disabling ASPM

Но, насколько я понимаю в коде, другие условия там существенно отличаются.

Или ткни пожалуйста - где там «Текст ошибки вводит в заблуждение; в действительности pcie_aspm=force имеет приоритет.»?

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

https://github.com/torvalds/linux/blob/master/drivers/pci/pcie/aspm.c#L961

Вызов этой функции является единственным следствием неудачи согласования ASPM с BIOS'ом.

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

То есть все равно неудача согласования и ASPM нерабочий или же просто выхлоп о нерабочем ASPM и каким-то чудным образом оно будет работать, будучи не согласованным с BIOS?
Я в коде C почти ничего не понимаю.

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

или же просто выхлоп о нерабочем ASPM и каким-то чудным образом оно будет работать, будучи не согласованным с BIOS?

Вот так.

Короче, AFAICS, ошибка сугубо косметическая.

intelfx ★★★★★
()
Последнее исправление: intelfx (всего исправлений: 1)
6 октября 2018 г.

Есть ли решение?Якобы баг в ядре. Наблюдаю такое на ноутбуке acer v3-571g-32374 на самосборных ядрах 4.14 - 4.18. В общем все работает, только раздражает задержка при загрузке на 12 секунд. Можно юзать acpi=off, но тогда будут другие проблемы

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