Ivy Bridge

HD4000 Ivy bridge


Приветствую!
Хотел бы освежить информацию по заводу Intel HD4000, сделать информацию более доступной для новичков, и привести тему к единому виду, с одинаковым методом инжекции.


Ставилась HD4000 в MacBook Pro (9,1 – 10,2), MacbookAir (5,1 – 5,2), MacMini (6,1-6,2), и в iMac (13,1-13,2).
Смбиосы:

  • iMac 13,2 – если у вас есть дискретная видеокарта, и вы заводите HD4000 для нужд AirPlay/iTunes Video/etc;
  • iMac 13,1 или MacMini 6,1-6,2 – если HD4000 является единственной картой, и мониторы будут подключаться к ней;
  • MacBook Pro 9,1-9,2 или MacBook Air 5,1-5,2 – если у вас ноутбук.
    *Если у вас стоит второй картой заводимый радеон, то лучше всего поставить MBP9,1 (только там есть вторая карта, если верить MacTracker’у);
    **Если вторая карта нвидия, то вообще забываем о дискретке.

Для завода Intel HD4000 необходимо:

  1. Выставить смбиос, в котором была Intel HD4000 (логика выбора выше);
  2. Инжектировать свойства для HD4000;
    1. Включая инжект ig-platform-id, и выставить в биосе количество видеопамяти, соответствующее ig-platform-id;
    2. Включая патч ig-platform-id (опционально);
  3. Инжектировать свойства для IMEI;
    1. Если HD4000 на чипсете Sandy (6-ое поколение), выполнить маскировку IMEI под 7-ое поколение.
  4. Переименовать в ACPI видеокарту GFX0 -> IGPU (для AGPM);
  5. Задать параметр onboard-1 (для звука по HDMI);
  6. Выставить фиксы AddDTGP + AddPNLF, и подкинуть в кловер IntelBacklight.kext (только для ноутбуков);
ОЧЕНЬ ВАЖНО: Помните, что при инжекции через Arbitrary, вы должны отключить все прочие инжекции, типа Grapchis/Inject/Intel, или удалить соответствующий _DSM в DSDT!
 


Инжекция параметров видеокарты:

Снимок экрана 2016-05-06 в 0.03.30.

Разберём ключи:

  1. subsystem-id = <86800000> (8086=Intel) – косметика;
  2. subsystem-vendor-id = <6b100000> (106b=Apple) – косметика;
  3. device-id = <66010000> (0x0126) – инжекция и/или подмена ID;
    Подробно о Device ID
    Нативных айди всего четыре: 0x01528086, 0x01568086, 0x01628086, 0x01668086.
    Если ID на ноутбуке совпадает с одним из перечисленных выше, то ставим тот, с которым совпадает.
    Если же не совпадает ни с одним из них, то оставляем секцию без изменений.
    Также, хотелось бы напомнить о том, что при записи ID как параметр для инжекции, мы следуем той же логике, что и при записи его в _DSM метод, то есть побитно переворачиваем, и добавляем нули, чтобы получилось 8 знаков, или же 4 бита.
    И, поскольку наш параметр называется device-id, мы пишем именно device-id, и откидываем vendor–id.
    Таким образом, наша запись преобразовывается из 0x01528086 (например), в <52010000>.
    Записи всех нативных айди:
    0x01528086 = <52010000>
    0x01568086 = <56010000>
    0x01628086 = <62010000>
    0x01668086 = <66010000>
  4. AAPL,ig-platform-id = <03006601> (0x01660003) – IG-платформа (фреймбуффер);
    Подробно о ig-platform-id
    ig-platform-id – это этакий “пресет”, состоящий из коннекторов, и параметров для них.
    Таким образом, правильно подобрав подходящий (может, даже и не полностью совпадающий), мы получим картинку как минимум на LVDS (или HDMI для десктопа).
    Подробное описание подбора идёт после разбора ключей, а так же их патч. Здесь, в основном, указываем тот, что берём за основу для патча.
    Записи популярных платформ:
    0x01660003 = <03006601> (ноутбук, представлен в примере)
    0x01660009 = <09006601> (ноутбук)
    0x0166000A = <0A006601> (десктоп)
    0x0166000B = <0B006601> (десктоп)
  5. AAPL,LinkType = <00000000> (0x0000000) – тип сигнала;
  6. model = Intel HD Graphics 4000 – косметика;
  7. hda-gfx = onboard-1 – свойство для HDMI звука;
  8. PciAddr = 00:02.00 (0x00020000) – PCI-адрес для встроенной графики.

Подбор и патчинг ig-platform-id:

Все ig-platform-id:
AAPL,ig-platform-id: 01660000, Stolen RAM for FB: 96MB, Pipes: 3, Ports: 4, FBMem: 3 
@0, 01000000 02000000 03000000 // (LVDS) (port 0x0)
@1, 02050000 00040000 07000000 // (DisplayPort) (port 0x5) 
@2, 03040000 00040000 07000000 // (DisplayPort) (port 0x6) 
@3, 04060000 00040000 07000000 // (DisplayPort) (port 0x7) 
//Рекомендуется использовать только для патчинга прочих фреймбуферов
AAPL,ig-platform-id: 01660001, Stolen RAM for FB: 96MB, Pipes: 3, Ports: 4, FBMem: 3 
@0, 01000000 02000000 30000000 // (LVDS) 
@1, 02050000 00080000 06000000 // (HDMI) 
@2, 03040000 00040000 07010000 // (DisplayPort) 
@3, 04060000 00040000 07010000 // (DisplayPort)
AAPL,ig-platform-id: 01660002, Stolen RAM for FB: 64MB, Pipes: 3, Ports: 1, FBMem: 1 
@0, 01000000 02000000 30000000 // (LVDS)
AAPL,ig-platform-id: 01660003, Stolen RAM for FB: 64MB, Pipes: 2, Ports: 4, FBMem: 2 
@0, 05030000 02000000 30000000 // (LVDS) 
@1, 02050000 00040000 07040000 // (DisplayPort) 
@2, 03040000 00040000 81000000 // (DisplayPort) 
@3, 04060000 00040000 81000000 // (DisplayPort)
AAPL,ig-platform-id: 01660004, Stolen RAM for FB: 32MB, Pipes: 3, Ports: 1, FBMem: 1 
@0, 05030000 02000000 30020000 // (LVDS)
AAPL,ig-platform-id: 01620005, Stolen RAM for FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2 
@0, 02050000 00040000 11000000 // (DisplayPort) 
@1, 03040000 00040000 07010000 // (DisplayPort) 
@2, 04060000 00040000 07010000 // (DisplayPort)
AAPL,ig-platform-id: 01620006, Stolen RAM for FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0 
//Фрейм-пустышка
AAPL,ig-platform-id: 01620007, Stolen RAM for FB: 0MB, Pipes: 0, Ports: 0, FBMem: 0 
//Фрейм-пустышка
AAPL,ig-platform-id: 01660008, Stolen RAM for FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 
@0, 01000000 02000000 30000000 // (LVDS) 
@1, 02050000 00040000 07010000 // (DisplayPort) 
@2, 03040000 00040000 07010000 // (DisplayPort)
AAPL,ig-platform-id: 01660009, Stolen RAM for FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 
@0, 01000000 02000000 30000000 // (LVDS) 
@1, 02050000 00040000 07010000 // (DisplayPort) 
@2, 03040000 00040000 07010000 // (DisplayPort)
AAPL,ig-platform-id: 0166000A, Stolen RAM for FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2 
@0, 02050000 00040000 07010000 // (DisplayPort) 
@1, 03040000 00040000 07010000 // (DisplayPort) 
@2, 04060000 00080000 06000000 // (HDMI)
AAPL,ig-platform-id: 0166000B, Stolen RAM for FB: 32MB, Pipes: 2, Ports: 3, FBMem: 2 
@0, 02050000 00040000 07010000 // (DisplayPort) 
@1, 03040000 00040000 07010000 // (DisplayPort) 
@2, 04060000 00080000 06000000 // (HDMI)

Разберём патч на примере 0x01660009:

Берём фрейм из спойлера выше
AAPL,ig-platform-id: 01660009, Stolen RAM for FB: 64MB, Pipes: 3, Ports: 3, FBMem: 3 
@0, 01000000 02000000 30000000 // (LVDS) 
@1, 02050000 00040000 07010000 // (DisplayPort) 
@2, 03040000 00040000 07010000 // (DisplayPort)

Разберём его по косточкам:

  • AAPL,ig-platform-id – сам параметр;
  • 01660009 – “имя” фреймбуфера. Его мы и указываем в ручной инжекции;
  • Stolen RAM for FB: 64MB – количество “похищаемой” видеопамяти. Это значение мы указываем в биосе;
  • Pipes: 3 – количество “труб” (параметр, не имеющий ценности);
  • Ports: 3 – количество портов, так-то! :D
  • FBMem: 3 – расчётное количество одновременно подключённых мониторов;
  • @0, (@1, @2) – номер коннектора. От него зависит порядок подключения, особенно для мобильных фреймов;
  • 01000000 02000000 30000000 // (LVDS) – коннектор, и указание его имени. Ниже представлены все типы коннекторов.

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

Приведём оригинальный фрейм в понятный клеверу вид, отбросив всё лишнее:

01000000 02000000 30000000 02050000 00040000 07010000 03040000 00040000 07010000

Это наш Find. То, что будет заменяться патчем.

И займёмся редактированием группы коннекторов.
Наш оригинальный фрейм выглядит как:

01000000 02000000 30000000 – LVDS
02050000 00040000 07010000 – DisplayPort
03040000 00040000 07010000 – DisplayPort

И, допустим, нам необходимо заместо одного LVDS и двух DP поставить HDMI, VGA, и DVI (обычная картина на десктопах).
Следовательно, нам нужно заменить по 16 бит от DP и LVDS на другие 16 бит под наш коннектор, которые мы возьмём из спойлера ниже.

Коннекторы:

HDMI (00080000):
04060000 00080000 06000000
02050000 00080000 06000000
LVDS/eDP (02000000):
01000000 02000000 03000000
01000000 02000000 30000000
05030000 02000000 30000000
DP (00040000):
02050000 00040000 07000000
02050000 00040000 07040000
02050000 00040000 11000000
03040000 00040000 07000000
03040000 00040000 07010000
03040000 00040000 81000000
04060000 00040000 07000000
04060000 00040000 07010000
04060000 00040000 81000000
VGA (01000000/02000000):
06020000 01000000 30000000
06020000 02000000 30000000
Касательно VGA.
Если ни один из них вам не помог – увы, больше ничего сделать не получится. Apple уже давно не используют VGA выходы в своей технике, а как таковая поддержка VGA на HD4000 выпилена в 10.9.1. Учтите также и то, что полноценно завести VGA на хакинтоше не получится: например, подключение на горячую сделать невозможно.
DVI-I, DVI-D, и mDP вешаются на DP.

И переделаем построчно под нашу конфигурацию:

06020000 02000000 30000000 - VGA
04060000 00080000 06000000 - HDMI
02050000 00040000 07010000 - DVI (Вспоминаем, что DVI цепляется к DP)

Приводим в понятный клеверу вид:

06020000 02000000 30000000 04060000 00080000 06000000 02050000 00040000 07010000

Это наш Replace. То, чем будет заменяться Find.

И составляем бинарный патч:

Find: <01000000 02000000 30000000 02050000 00040000 07010000 03040000 00040000 07010000>
Name: AppleIntelFramebufferCapri
Replace: <06020000 02000000 30000000 04060000 00080000 06000000 02050000 00040000 07010000>
Как-то так...
231397_df52f51f7c70dc0acd8f11dc628440ac

Инжекция IMEI (Intel ME Interface):

Подмена необходима в случае не нативного ID у данного девайса, что вряд ли.

Нативный ID всего один – 3A1E0000 (0x1E3A), следовательно, если ID у вашего IMEI отличается от этого, то необходимо провести маскировку (хотя и с нативным ID не помешает ):

Снимок экрана 2016-05-06 в 4.37.06.

Разберём ключи:

  1. subsystem-id = <70720000> (0x7270=Subsystem: Intel Corporation Device [8086:7270]) – косметика
  2. subsystem-vendor-id = <6b100000> (106b=Apple) – косметика
  3. device-id = <3a1e0000> (0x1e3a) – подмена ID (чего мы и добиваемся)
  4. PciAddr = 00:16.00 (0x00160000) – PCI-адрес для Intel ME интерфейса
Если HD4000 стоит на чипсете 6-ого поколения:
Понятия не имею, что принимали инженеры, которые проектируют такие ноутбуки, но явно что-то не слабое.
В любом случае, это чинится дополнительным ключом инжеции, в дополнение к указанным в пункте “Инжекция IMEI (Intel ME Interface)”:Снимок экрана 2016-05-06 в 5.30.09.

Тем самым, мы делаем подмену ID с IMEI на Sandy Bridge (0x1c3a) под IMEI на Ivy Bridge (0x1e3a). Ничего хорошего, конечно, это не принесёт, но это на данный момент лучшее решение. Хотя бы картинка будет 😀


Для завода AGPM добавим переименование видеокарты в ACPI таблицах с помощью бинарного патча:
Снимок экрана 2016-05-06 в 4.36.56.
Find: 47465830
Replace: 49475055

HDMI-звук:
На платформах Ivy и ниже свойство hda-gfx=”onboard-1″ цепляется к HDEF.
Мы реализуем это с помощью Arbitrary:

231282_e14df8ab7ae78aba33e64f26aab44f3c

Разберём ключи:

  1. hda-gfx = onboard-1 – свойство для HDMI звука;
  2. subsystem-id = <70720000> (0x7270=Subsystem: Intel Corporation Device) – косметика;
  3. subsystem-vendor-id = <86800000> (8086=Intel) – косметика;
  4. layout-id = <03000000> (0x03) – через этот параметр мы инжектируем лейаут;
    //Следовательно, инжекцию через параметр Devices/Audio/Inject=X следует отключить (поставить NO), во избежание двойного патча
  5. AAPL,slot-name = Built In – косметика;
  6. device_type = Audio Controller – косметика;
  7. PciAddr = 00:1B.00 (0x001B0000) – PCI-адрес для HDEF.

А так же, HDMI должен быть виден в системе как HDMI, а не как DP, или ещё что-нибудь. Но правка коннекторов была проделана ещё до инжектирования IMEI, поэтому беспокоится не стоит.
Да и AppleALC от @vit9696 умеет правильный инжект HD4000 на платформах ig-platform-id 0x01660003, 0x01660009, 0x0166000A. Красота, товарищи! Золотая эра хакинтоша 😀


Правильная регулировка яркости:

Ликбез: Яркость любой Intel-графики управляется через специальный регистр. При наличии PNLF устройства в DSDT/SSDT, OS X подключается к нему, и, используя заготовленные настройки к монитору, вписывает туда значение текущей яркости, а для конечного пользователя появляется ползунок. Таким образом минимальный фикс для яркости это фиксы кловера: AddDTGP + AddPNLF (включены в конфиг)

При таком подходе возникают проблемы:

  1. Яркость изменяется не равномерно;
  2. Ползунок на максимум не дает полную яркость монитора, а после сна резко вспыхивает.

Первая проблема из-за того, что OS X не знает 16 ключевых уровней яркости конкретно нашего монитора, и использует стандартный линейный пресет. Вторая проблема связанна с ограничением максимального уровня яркости на системном уровне.

Решение проблем:
Фиксы кловера (AddDTGP + AddPNLF), и подкинуть в кловер IntelBacklight.kext от Rehabman’а.
Написан специально для Intel HD. Знает все особенности Sandy, Ivy, Haswell, Broadwell, и Skylake графики.


Файлы:

  1. config-Intel-HD4000.plist – заготовка для завода Intel HD 4000. Остальные настройки за вами.
  2. config-Intel-HD4000-6-series.plist – заготовка для завода Intel HD 4000 на 6-ой серии чипсета. Настройки аналогичны п.1.
  3. IntelBacklight.kext – кекст на управление яркостью монитора ноутбуков.

Добавить комментарий

%d такие блоггеры, как: