Jump to content

Optiplex 745 AHCI


FredWst
 Share

13 posts in this topic

Recommended Posts

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

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

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 effect
1 = 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

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

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

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

  • 3 months later...

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 table
GRUB_CUSTOM_ACPI="/boot/dsdt.aml"

# DON'T MODIFY ANYTHING BELOW THIS LINE!

prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib

. ${libdir}/grub/grub-mkconfig_lib

# Load custom ACPI table
if [ 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 << EOF
acpi (\$root)`make_system_path_relative_to_its_root ${GRUB_CUSTOM_ACPI}`
EOF
fi

*************************************************************************

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

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

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

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, &region);
    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

 Share

×
×
  • Create New...