FredWst Posted November 2, 2014 Share Posted November 2, 2014 Bonjour, Depuis un petit moment j'ai cette machine qui fonctionne très bien sous Yosemite. Cependant il reste un point de détail que je souhaiterais régler. J'ai lu sur le forum projetcosx un moyen qui permet de passer en mode AHCI. Cela consiste à passer par la DSDT pour configurer le registre MAP (offset 0x90) du contrôleur ICH8. La manip avec setpci fonctionne et je vois bien avec un lspci que le chipset change d'id PCI 2820 -> 2824 et donc reconnu en AHCI. Lspci montre aussi la zone mémoire affectée, adresse du registre offset 0x24. J'ai codé cela dans la DSDT, je suis certain de mon code à 100%. La raison en est simple si je ne configure pas le registre MAP et que je force id 2829 pour charger le bon kext, j'ai un kernel panic. Si je configure le registre en écrivant a l'aide de la DSDT la valeur 0x40 dans le registre MAP, je n'ai plus de kernel panic. C'est clover qui se charge de charger la DSDT. Cependant impossible de booter disque non reconnu. Hervé, Il me semble que tu as travaillé sur ce sujet. faut-il que j'intègre ma DSDT directement dans le bios ? Si oui qu'elles seraient les softs pour ce BIOS Dell ? Fred Link to comment Share on other sites More sharing options...
FredWst Posted November 2, 2014 Author Share Posted November 2, 2014 Re Voici ma DSDT DSDT.zip Je vais checker par rapport à ton post, mais c'est ce que je fais en gros. Fred Link to comment Share on other sites More sharing options...
FredWst Posted November 2, 2014 Author Share Posted November 2, 2014 Oui, ça me semble Ok; après, quand j'utilisais le call PINI(), je ne me souviens plus si je l'avais déclaré comme toi sous Scope (\). Par contre, je n'ai jamais modifié le SATA primaire comme tu le fais en forçant l'id du mode AHCI. Pour moi ça n'était pas nécessaire dès l'instant que le contrôleur passait directement sous cet id après changement du registre lors des manip manuelles avec setpci. De mémoire, le D620 utilise un device IDE0 que j'avais du conserver en l'état (pas de renommage en 'SATA'). Le device était nommé IDE0, mais il n'y a pas de ssdt avec un appel à IDE0, donc on peut le renommer. Je ne sais pas comment voir si le KEXT se charge, c'est peut être cela mon problème. Je vais tenter l'option Clover pour forcer son chargement. Ou alors l'init AHCI arrive trop tard. Fred Link to comment Share on other sites More sharing options...
FredWst Posted November 2, 2014 Author Share Posted November 2, 2014 Oui, le patch DSDT fonctionne. J'ai codé cela dans la DSDT, je suis certain de mon code à 100%. La raison en est simple si je ne configure pas le registre MAP et que je force id 2829 pour charger le bon kext, j'ai un kernel panic.Si je configure le registre en écrivant a l'aide de la DSDT la valeur 0x40 dans le registre MAP, je n'ai plus de kernel panic. Comme le bios n'est pas prévu pour sélecter AHCI. peut-être que ce n'est pas correctement initialisé ! J'ai DL le PDF du chipset ICH8. Il faut vérifier un certain nombre de points. Fred Edit: 11.4.1.2 GHC—Global ICH8 Control Register (D31:F2) Address Offset: Default Value: ABAR + 04h–07h 00000000h Attribute: Size: R/W 32 bits Bit Description 31 AHCI Enable (AE) — R/W. When set, indicates that an AHCI driver is loaded and the controller will be talked to via AHCI mechanisms. This can be used by an ICH8 that supports both legacy mechanisms (such as SFF-8038i) and AHCI to know when the controller will not be talked to as legacy. 0 = Software will only talk to the ICH8 using legacy mechanisms.1 = Software will only talk to the ICH8 using AHCI. The ICH8 will not have to allow command processing via both AHCI and legacy mechanisms. Software shall set this bit to 1 before accessing other AHCI registers. 30:3 Reserved 2 MSI Revert to Single Message (MRSM) — RO: When set to 1 by hardware, indicates that the host controller requested more than one MSI vector but has reverted to using the first vector only. When this bit is cleared to '0', the HBA has not reverted to single MSI mode (i.e. hardware is already in single MSI mode, software has allocated the number of messages requested, or hardware is sharing interrupt vectors if MC.MME < MC.MMC). "MC.MSIE = '1' (MSI is enabled)"MC.MMC > 0 (multiple messages requested)"MC.MME > 0 (more than one message allocated)"MC.MME != MC.MMC (messages allocated not equal to number requested) When this bit is set to '1', single MSI mode operation is in use and software is responsible for clearing bits in the IS register to clear interrupts.This bit shall be cleared to '0' by hardware when any of the four conditions stated is false. This bit is also cleared to '0' when MC.MSIE = '1' and MC.MME = 0h. In this case, the hardware has been programmed to use single MSI mode, and is not "reverting" to that mode.For ICH8, the HBA shall always revert to single MSI mode when the number of vectors allocated by the host is less than the number requested. 1 Interrupt Enable (IE) — R/W. This global bit enables interrupts from the ICH8. 0 = All interrupt sources from all ports are disabled. 1 = Interrupts are allowed from the AHCI controller. 0 HBA Reset (HR) — R/W. Resets ICH8 AHCI controller.0 = No effect1 = When set by SW, this bit causes an internal reset of the ICH8 AHCI controller. All state machines that relate to data transfers and queuing return to an idle condition, and all ports are re-initialized via COMRESET.NOTE: For further details, consult section 12.3.3 of the Serial ATA Advanced Host Controller Interface specification. Link to comment Share on other sites More sharing options...
FredWst Posted November 2, 2014 Author Share Posted November 2, 2014 un patch bin DSDT ne doit pas suffire il y a d'autres choses à modifier. non ? as-tu les outils pour intégrer la nouvelle DSDT ? as-tu deja fait ce type de modification ? Fred Link to comment Share on other sites More sharing options...
FredWst Posted November 2, 2014 Author Share Posted November 2, 2014 Alors attention tu risques de planter ta carte mère, plus de boot possible, sauf si tu sais passer en mode recovery. L'intégration de la DSDT dans le bios implique le recalcule de checksums, etc. A moins d'avoir un programmateur externe pour reprogrammer la flash. Fred Link to comment Share on other sites More sharing options...
FredWst Posted November 4, 2014 Author Share Posted November 4, 2014 Bonjour, Après analyse des registres une fois le contrôleur passé en AHCI, je ne vois pas ce qui pose problème au regard de la documentation du chipset. Tout semble correctement configuré. Reste une chose à tester c'est de demander le reset du contrôleur AHCI pour que celui-ci recherche les disques connectés. Cela doit pouvoir se faire à l'init du bus PCI dans la DSDT. Sinon me restera à tester en intégrant la DSDT dans le BIOS . Voici le log avec en rouge les octets changés. Optiplex 745 AHCI.zip Hervé as-tu réussi avec le test que tu avais prévu de faire ? Fred Link to comment Share on other sites More sharing options...
FredWst Posted November 6, 2014 Author Share Posted November 6, 2014 Ok, Si j'ai bien compris tu as intégré la DSDT dans le bios ? Si oui pourrais-tu expliquer la marche à suivre et les softs utilisés ? Est-ce possible sur Optiplex 745 ? C'est intérréssant dans la mesure ou plusieurs personne galère car cette DSDT ne peut pas être patché à la volée par Clover. (BUG DSDT la compile ne passe pas) Je sortirai un bios avec DSDT patché pour OSX. Fred Link to comment Share on other sites More sharing options...
FredWst Posted November 7, 2014 Author Share Posted November 7, 2014 Ok Merci Dans mon cas Phoenixtool. Je vais tester. Fred Link to comment Share on other sites More sharing options...
FredWst Posted February 22, 2015 Author Share Posted February 22, 2015 Salut, Le patch fontionne bien sous linux. (Ubuntu 14.04) Mon contrôleur passe bien en mode Ahci. Je joins les fichiers dump dmesg, lspci, lsmod ainsi que la dsdt utilisée. La dsdt est chagé par grub. Il faut ajouter un fichier 01_acpi dans /etc/grub.d qui devra contenir ce qui suit : ****************************************************************************************************** #! /bin/sh -e# Uncomment to load custom ACPI tableGRUB_CUSTOM_ACPI="/boot/dsdt.aml"# DON'T MODIFY ANYTHING BELOW THIS LINE!prefix=/usrexec_prefix=${prefix}libdir=${exec_prefix}/lib. ${libdir}/grub/grub-mkconfig_lib# Load custom ACPI tableif [ x${GRUB_CUSTOM_ACPI} != x ] && [ -f ${GRUB_CUSTOM_ACPI} ] \ && is_path_readable_by_grub ${GRUB_CUSTOM_ACPI}; then echo "Found custom ACPI table: ${GRUB_CUSTOM_ACPI}" >&2 prepare_grub_to_access_device `${grub_probe} --target=device ${GRUB_CUSTOM_ACPI}` | sed -e "s/^/ /" cat << EOFacpi (\$root)`make_system_path_relative_to_its_root ${GRUB_CUSTOM_ACPI}`EOFfi ************************************************************************* sudo chmod a+x /etc/grub.d/01_acpi sudo cp dsdt.aml /boot/dsdt.aml sudo update-grub sudo grub-mkconfig -o /boot/grub/grub.cfg) Reste à comprendre pourquoi sous OSX cela ne fonctionne pas. dmesg.txt lspci.txt lsmod.txt dsdt.dsl.tar.gz Fred Link to comment Share on other sites More sharing options...
FredWst Posted February 23, 2015 Author Share Posted February 23, 2015 Salut, Je pencherais pour le bootloader, mais pour le moment rien de concret. Faudrait pouvoir intégrer le patch à boot0. Ou autre solution que je tenterai ce weekend lancer CLOVER (puis OSX) à partir de grub, solution semble avoir été mise en place. http://forum.ubuntu-fr.org/viewtopic.php?id=414412 On verra bien si c'est lié au moment ou est initialisé le contrôleur DD. Fred Link to comment Share on other sites More sharing options...
FredWst Posted February 26, 2015 Author Share Posted February 26, 2015 Salut, La différence semble vraiment l'endroit ou est fait le patch. Avec grub2 c'est fait me semble-t-il au moment de l'accès au loader. J'aimerais tester en mettant le patch au même niveau pour les bootloaders OSX c'est à dire dans boot0. Mais la je ne suis pas capable de le faire. Qui pourrais me filer un coupe de main ? Fred Link to comment Share on other sites More sharing options...
FredWst Posted March 4, 2015 Author Share Posted March 4, 2015 Salut, J'ai écrit un kext pour prendre en compte le patch de linux, mais je bloque sur une partie de code void Ich8AhciEnabler::quirk_io_region(IOPCIDevice *pciDevice, int port, unsigned size, int nr, const char *name) { UInt16 region; // struct pci_bus_region bus_region; // struct resource *res = dev->resource + nr; //code linux pci_read_config_word(dev, port, ®ion); region = pciDevice->configRead16(port); region &= ~(size - 1); if (!region) { IOLog("Ich8AhciEnabler by FredWst: Function quirk_io_region: %s not enable\n",name); return; } ********************** Partie de code à traduire pour OSX //res->name = pci_name(dev); //res->flags = IORESOURCE_IO;*/ //peut être pciDevice->setIOEnable(true); ????? /* Convert from PCI bus to resource space */ //bus_region.start = region; //bus_region.end = region + size - 1; //pcibios_bus_to_resource(dev, res, &bus_region); //if (!pci_claim_resource(dev, nr)) //dev_info(&dev->dev, "quirk: %pR claimed by %s\n", res, name);*/ *********************** IOLog("Ich8AhciEnabler by FredWst: Function quirk_io_region: %s enable\n",name); } Le code qui me pose problème est en commentaire. Une idée, un contact ? Fred Link to comment Share on other sites More sharing options...
Recommended Posts