Jump to content

Parliamone....DevirtualiseMMIO quirk e MMIO Whitelist


fabiosun

Recommended Posts

  • Supervisor

In questo thread proveremo a spiegare la funzione di questo interessantissimo quirk e soprattutto della correlata sezione di MMIO Whitelist che e' ancora piu' fondamentale per diversi sistemi.

L'argomento e' stato documentato recentemente in modo piu' esaustivo nel pdf di configurazione di OpenCore, ma ha assunto al giorno d'oggi sempre piu' valore per avere un Hackintosh al massimo delle sue potenzialità anche alla luce delle nuove architetture di CPU in uso.

 

Di base il quirk non e' attivo e per molti sistemi non e' indispensabile per far funzionare e partire il proprio Hack.

 

A dicembre 2019 con l'uscita delle CPU AMD ThreadRipper della terza generazione (sTRX4), molti utenti, loro malgrado, sono stati costretti ad interessarsi al funzionamento del quirk in oggetto.

 

In quel periodo la documentazione di OpenCore sull'argomento era poco esaustiva anche perche' era un quirk utile solo per vecchi sistemi.

 

Con l'aiuto a volte criptico degli sviluppatori di OpenCore (ai quali e' sempre dovuto un ringraziamento per il loro lavoro) si sono iniziati a muovere i primi passi per capire come utilizzarlo per fare dei debug su una piattaforma come quella descritta poco sopra (sTRX4) in unione alla funzionalità della MMIO Whitelist.

link

 

Attivando il quirk e solo utilizzando una versione di debug di OpenCore con opzione Misc/Debug/Target impostato su 67, e' possibile, anche con una macchina che non parte, un debug nel quale sono evidenziate le aree MMIO del proprio PC (numero di aree e valori possono variare):

08:808 00:001 OCABC: MMIO devirt 0xE2100000 (0x81 pages, 0x8000000000000001) skip 0
08:809 00:001 OCABC: MMIO devirt 0xE3180000 (0x81 pages, 0x8000000000000001) skip 0
08:810 00:001 OCABC: MMIO devirt 0xEF100000 (0x181 pages, 0x8000000000000001) skip 0
08:811 00:001 OCABC: MMIO devirt 0xFA180000 (0x81 pages, 0x8000000000000001) skip 0
08:812 00:001 OCABC: MMIO devirt 0xFA300000 (0x100 pages, 0x8000000000000001) skip 0
08:813 00:001 OCABC: MMIO devirt 0xFEA00000 (0x100 pages, 0x8000000000000001) skip 0
08:814 00:001 OCABC: MMIO devirt 0xFEC00000 (0x1 pages, 0x8000000000000001) skip 0
08:816 00:001 OCABC: MMIO devirt 0xFEC10000 (0x1 pages, 0x8000000000000001) skip 0
08:817 00:001 OCABC: MMIO devirt 0xFED00000 (0x1 pages, 0x8000000000000001) skip 0
08:818 00:001 OCABC: MMIO devirt 0xFED40000 (0x5 pages, 0x8000000000000001) skip 0
08:819 00:001 OCABC: MMIO devirt 0xFED80000 (0x10 pages, 0x8000000000000001) skip 0
08:820 00:001 OCABC: MMIO devirt 0xFEDC2000 (0xE pages, 0x8000000000000001) skip 0
08:821 00:001 OCABC: MMIO devirt 0xFEDD4000 (0x2 pages, 0x8000000000000001) skip 0
08:822 00:001 OCABC: MMIO devirt 0xFEE00000 (0x100 pages, 0x8000000000000001) skip 0
08:823 00:001 OCABC: MMIO devirt 0xFF000000 (0x1000 pages, 0x8000000000000001) skip 0
08:825 00:001 OCABC: MMIO devirt 0x4040000000 (0x10400 pages, 0x8000000000000001) skip 0
08:826 00:001 OCABC: MMIO devirt 0x8BB0000000 (0x10400 pages, 0x8000000000000001) skip 0
08:827 00:001 OCABC: MMIO devirt 0x8BE0000000 (0x10400 pages, 0x8000000000000001) skip 0
08:828 00:001 OCABC: MMIO devirt 0xD750000000 (0x10400 pages, 0x8000000000000001) skip 0

 

E' di particolare importanza che queste aree possono essere diverse anche in condizioni di stesso BIOS e produttore, ma solo scambiando delle opzioni nel BIOS o riempendo gli slot nvme e pciexpress in maniera diversa.

Nota:

un errore comune e' prendere questa lista da una configurazione qualsiasi e inserirla nel proprio config.plist

Va sempre necessariamente presa e calcolata nel sistema in uso e ricontrollata se si cambiano opzioni nel BIOS o si aggiunge hardware!

 

Attivare il quirk comporta aver devirtualizzato le aree di memoria ed in alcuni casi liberati diversi megabyte di memoria (tipicamente dai 64 ai 256 Mb) fatto questo che consente ad alcuni sistemi problematici di partire senza avere il famigerato errore al boot (memory allocation errors), e questo proprio nelle fasi iniziali del boot.

 

skip 0 significa area devirtualizzata e nel caso durante le sue operazioni interne macOS necessitasse di quell'area, non avendola a sua disposizione, si creerebbero mal funzionamenti o Kernel Panic.

 

Su indicazioni dei devs di Opencore ci si e' concentrati sulle ultime 4 aree che sono quelle piu' corpose a livello di pagine da eventualmente devirtualizzare e con 16 combinazioni (4!) si stabili' che le patches del Kernel in uso allora erano malfunzionanti per i sistemi sTRX4.

Trascuriamo ora questa affermazione rivelatasi poi non propriamente corretta, ma allora era praticamente un dato di fatto che porto' molti utenti sTRX4 con desiderio di utilizzare OSX sulle proprie macchine ad esplorare l'affascinante mondo della virtualizzazione con ProXmox.

 

Ora le prove fatte all'epoca furono di riportare le ultime 4 aree a completo utilizzo di OSX (skip 1) in varie combinazioni (16).

Come?

Aggiungendo queste aree nella sezione Booter/MmioWhitelist del nostro config.plist.

Per fare questo ci viene in aiuto la calcolatrice scientifica o la ottima app presente in area download HackCheck (visibile in foto) per il download clicca qui:

https://www.macos86.it/files/file/95-hack-check/

 

ora concentriamoci solo sull'area:

08:828 00:001 OCABC: MMIO devirt 0xD750000000 (0x10400 pages, 0x8000000000000001) skip 0

 

e prendiamo il valore esadecimale 0xD750000000, questo andrà convertito in numero come da figura qui sotto:

 

660646609_Screenshot2022-02-01at3_40_03PM.png.40d80403993181d04ded23b9d3ef8544.png

 

e andrà riportato precisamente nella apposita area del config.plist attivandolo:

 

1415270048_Screenshot2022-02-01at3_42_51PM.thumb.png.2139fa292b918dba763894ade5e434bf.png

 

Dopo aver salvato il config.plist e riavviato avremo nel nostro successivo debug log questa situazione:

 

08:808 00:001 OCABC: MMIO devirt 0xE2100000 (0x81 pages, 0x8000000000000001) skip 0
08:809 00:001 OCABC: MMIO devirt 0xE3180000 (0x81 pages, 0x8000000000000001) skip 0
08:810 00:001 OCABC: MMIO devirt 0xEF100000 (0x181 pages, 0x8000000000000001) skip 0
08:811 00:001 OCABC: MMIO devirt 0xFA180000 (0x81 pages, 0x8000000000000001) skip 0
08:812 00:001 OCABC: MMIO devirt 0xFA300000 (0x100 pages, 0x8000000000000001) skip 0
08:813 00:001 OCABC: MMIO devirt 0xFEA00000 (0x100 pages, 0x8000000000000001) skip 0
08:814 00:001 OCABC: MMIO devirt 0xFEC00000 (0x1 pages, 0x8000000000000001) skip 0
08:816 00:001 OCABC: MMIO devirt 0xFEC10000 (0x1 pages, 0x8000000000000001) skip 0
08:817 00:001 OCABC: MMIO devirt 0xFED00000 (0x1 pages, 0x8000000000000001) skip 0
08:818 00:001 OCABC: MMIO devirt 0xFED40000 (0x5 pages, 0x8000000000000001) skip 0
08:819 00:001 OCABC: MMIO devirt 0xFED80000 (0x10 pages, 0x8000000000000001) skip 0
08:820 00:001 OCABC: MMIO devirt 0xFEDC2000 (0xE pages, 0x8000000000000001) skip 0
08:821 00:001 OCABC: MMIO devirt 0xFEDD4000 (0x2 pages, 0x8000000000000001) skip 0
08:822 00:001 OCABC: MMIO devirt 0xFEE00000 (0x100 pages, 0x8000000000000001) skip 0
08:823 00:001 OCABC: MMIO devirt 0xFF000000 (0x1000 pages, 0x8000000000000001) skip 0
08:825 00:001 OCABC: MMIO devirt 0x4040000000 (0x10400 pages, 0x8000000000000001) skip 0
08:826 00:001 OCABC: MMIO devirt 0x8BB0000000 (0x10400 pages, 0x8000000000000001) skip 0
08:827 00:001 OCABC: MMIO devirt 0x8BE0000000 (0x10400 pages, 0x8000000000000001) skip 0
08:828 00:001 OCABC: MMIO devirt 0xD750000000 (0x10400 pages, 0x8000000000000001) skip 1

 

Quindi l'area che abbiamo convertito e inserito nel config attivando YES ora e' listata nel config come skip 1.

Che significa?

Significa che ora questa area e' di nuovo a disposizione di OSX come se non avessimo attivato il quirk..ma solo lei.

Se nella fortunata ipotesi che il nostro sistema parta ugualmente e arrivi al login, e' possibile procedere ad inserire ed attivare in MMIOWhitelist tutte le altre aree fino a quando non troviamo quella che e' deleteria nel nostro sistema.

 

Quale e' un obiettivo utile per l'utente che necessita di utilizzare questa procedura?

Riavere piu' skip 1 possibili!

 

Se attivo il quirk DevirtualizeMMIO e metto tutte le aree in Whitelist che accade?

Prima possibilità:

- il sistema parte regolarmente!

Bene avete perso un sacco di tempo perche' a voi non serve questa procedura!

avere tutte le aree dichiarate e attivate nel config plist sezione Booter/MmmioWhitelist e' come lasciare il quirk DevirtualiseMMIO su OFF.

Seconda possibilità:

- il sistema non parte regolarmente!

Benissimo e' per questo che avete attivato il quirk, se fosse possibile per noi mantenere tutto invariato non avremmo attivato il quirk.

 

Quindi, di santa pazienza si provano a convertire uno ad uno tutti i valori ed ad inserirli in MMIOWhitelist (skip 1) fino a trovare quelli che non si possono inserire e che bloccano il proprio sistema.

 

A questo punto, se le idee non si sono piu' ingarbugliate di quando avevate iniziato a leggere vi dovreste chiedere:

Ma perche' fare questa operazione di ri-mettere a disposizione di OSX piu' aree possibili?

Semplice, anche se il vostro pc parte e sembra funzionare correttamente solo attivando il quirk DevirtualiseMMIO, durante l'operatività quotidiana si potrebbero (si hanno di certo) dei problemi di KP, Reboot o semplicemente cattivi funzionamenti della Nvram e del ciclo sleep/wake.

 

Quindi e' buona cosa perdere un po' di tempo ri-assegnandoli al libero utilizzo di OSX fino a quando non si trova o trovano quelli impossibili da riassegnare!

 

 

Edited by fabiosun
enfatizzata una linea per chiarezza
  • Like 4
  • +1 1
Link to comment
Share on other sites

  • Moderators

Interessante dici dovrei farlo..?

 

Spoiler

06:692 00:013 OCABC: MMIO devirt start
06:696 00:004 OCABC: MMIO devirt 0xF0000000 (0x8000 pages, 0x8000000000000000) skip 0
06:700 00:004 OCABC: MMIO devirt 0xFE000000 (0x11 pages, 0x8000000000000001) skip 0
06:704 00:004 OCABC: MMIO devirt 0xFEC00000 (0x1 pages, 0x8000000000000001) skip 0
06:708 00:004 OCABC: MMIO devirt 0xFED00000 (0x1 pages, 0x8000000000000001) skip 0
06:713 00:004 OCABC: MMIO devirt 0xFEE00000 (0x1 pages, 0x800000000000100D) skip 0
06:717 00:004 OCABC: MMIO devirt 0xFF000000 (0x1000 pages, 0x800000000000100D) skip 0
06:721 00:003 OCABC: MMIO devirt end, saved 147536 KB

 

1514574539_Schermata2022-02-02alle07_20_14.png.319f3646a44e0f36106faf8a928952ee.png

 

Spoiler

07:465 00:020 OCABC: MMIO devirt start
07:475 00:010 OCABC: MMIO devirt 0xF0000000 (0x8000 pages, 0x8000000000000000) skip 0
07:486 00:010 OCABC: MMIO devirt 0xFE000000 (0x11 pages, 0x8000000000000001) skip 0
07:496 00:010 OCABC: MMIO devirt 0xFEC00000 (0x1 pages, 0x8000000000000001) skip 0
07:507 00:010 OCABC: MMIO devirt 0xFED00000 (0x1 pages, 0x8000000000000001) skip 0
07:518 00:010 OCABC: MMIO devirt 0xFEE00000 (0x1 pages, 0x800000000000100D) skip 0
07:529 00:011 OCABC: MMIO devirt 0xFF000000 (0x1000 pages, 0x800000000000100D) skip 1
07:540 00:010 OCABC: MMIO devirt end, saved 131152 KB

 

Link to comment
Share on other sites

  • Supervisor
1 minute ago, netgear said:

Le voci sopra all'ultima rimangono skip 0

le devi dichiarare ed attivare

Conversione da esadecimale a numero

attivazione con Yes nel config

 

Just now, netgear said:

DevirtualizeMMIO lo devo disabilitare per far funzionare le patch

Di che patch parli?

 

Link to comment
Share on other sites

  • Supervisor

perfetto

skip 1 e' come se avessi il quirk su Off/no/False 🙂

gli altri ora li hai devritualizzati (dallo schema che hai postato) e per alcune operazioni e funzionalità di OSX non e' cosa buona (reboot/shutdown/Nvram)

 

Link to comment
Share on other sites

  • Supervisor

Come ti dicevo di solito non serve 🙂

Se lo attivi e non metti su yes nessuno dei valori MMIO del tuo sistema nel config

Ti devirtualizza tutte quelle aree di memoria e se OSX ne ha bisogno e ci scrive potresti avere dei problemi

 

Se il tuo sistema parte con DevirtualiseMMIO su NO, non devi perdere tempo con queste cose 🙂

 

Se non lo attivi la lista degli MMIO non serve e non viene utilizzata nemmeno se li dichiari!

Link to comment
Share on other sites

  • Supervisor

Si corretto

te li espone solo mettendo quel quirk su YES

Poi se la tua macchina ha bisogno del quirk per partire (non e' il tuo caso) si rimettono su skip 1 tutti quanti gli MMIO che e' possibile ridare a OSX

Nel caso di macchine problematiche non e' possibile farlo su tutti, e si cerca di metterne il piu' possibile su 1 

 

Se non si capisce dal primo post devo rivedere cosa ho scritto 🙂

 

 

Link to comment
Share on other sites

  • Supervisor
16 hours ago, fabiosun said:

Quale e' un obiettivo utile per l'utente che necessita di utilizzare questa procedura?

Riavere piu' skip 1 possibili!

 

Se attivo il quirk DevirtualizeMMIO e metto tutte le aree in Whitelist che accade?

Prima possibilità:

- il sistema parte regolarmente!

Bene avete perso un sacco di tempo perche' a voi non serve questa procedura!

avere tutte le aree dichiarate e attivate nel config plist sezione Booter/MmmioWhitelist e' come lasciare il quirk DevirtualiseMMIO su OFF.

Seconda possibilità:

- il sistema non parte regolarmente!

Benissimo e' per questo che avete attivato il quirk, se fosse possibile per noi mantenere tutto invariato non avremmo attivato il quirk.

 

Quindi, di santa pazienza si provano a convertire uno ad uno tutti i valori ed ad inserirli in MMIOWhitelist (skip 1) fino a trovare quelli che non si possono inserire e che bloccano il proprio sistema.

 

A questo punto, se le idee non si sono piu' ingarbugliate di quando avevate iniziato a leggere vi dovreste chiedere:

Ma perche' fare questa operazione di ri-mettere a disposizione di OSX piu' aree possibili?

Semplice, anche se il vostro pc parte e sembra funzionare correttamente solo attivando il quirk DevirtualiseMMIO, durante l'operatività quotidiana si potrebbero (si hanno di certo) dei problemi di KP, Reboot o semplicemente cattivi funzionamenti della Nvram e del ciclo sleep/wake.

 

Quindi e' buona cosa perdere un po' di tempo ri-assegnandoli al libero utilizzo di OSX fino a quando non si trova o trovano quelli impossibili da riassegnare!

si qui si dovrebbe capire

 

1 minute ago, netgear said:

Quindi tolgo tutto e lascio come prima con DevirtualizeMMIO su NO in origine era su SI

 

Se prima di leggere questo thread era su No lascialo come era

Se invece era su SI puoi provare a vedere quali degli MMIO puoi riassegnare

Se il sistema parte con NO 

lascialo su NO

Link to comment
Share on other sites

  • 3 weeks later...

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
  • Recently Browsing   0 members

    • There are no registered users currently online
×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.