Skip to main content Link Menu Expand (external link) Document Search Copy Copied

AudioDxe

High Definition Audio (HDA) support driver in UEFI firmware for most Intel and some other analog audio controllers.

Note: AudioDxe is a staging driver, refer to acidanthera/bugtracker#740 for known issues.

Configuration

Most UEFI audio configuration is handled via the UEFI Audio Properties section, but in addition some of the following configuration options may be required in order to allow AudioDxe to correctly drive certain devices. All options are specified as text strings, separated by space if more than one option is required, in the Arguments property for the driver within the UEFI/Drivers section:

  • --codec-setup-delay - Integer value, default 0. Amount of time in milliseconds to wait for all widgets to come fully on, applied per codec during driver connection phase. In most systems this should not be needed and a faster boot will be achieved by using Audio section SetupDelay if any audio setup delay is required. Where required, values of up to one second may be needed.

  • --force-device - String value, no default. When this option is present and has a value (e.g. --force-device=PciRoot(0x0)/Pci(0x1f,0x3)), it forces AudioDxe to connect to the specified PCI device, even if the device does not report itself as an HDA audio controller.

    During driver connection, AudioDxe automatically provides audio services on all supported codecs of all available HDA controllers. However, if the relevant controller is misreporting its identity (typically, it will be reporting itself as a legacy audio device instead of an HDA controller) then this argument may be required.

    Applies if the audio device can be made to work in macOS, but shows no sign of being detected by AudioDxe (e.g. when including DEBUG_INFO in DisplayLevel and using a DEBUG build of AudioDxe, no controller and codec layout information is displayed during the Connecting drivers... phase of OpenCore log).

  • --gpio-setup - Default value is 0 (GPIO setup disabled) if argument is not provided, or 7 (all GPIO setup stages stages enabled) if the argument is provided with no value.

    Available values, which may be combined by adding, are: – 0x00000001 (bit 0) — GPIO_SETUP_STAGE_DATA, set GPIO pin data high on specified pins. Required e.g. on MacBookPro10,2 and MacPro5,1. – 0x00000002 (bit 1) — GPIO_SETUP_STAGE_DIRECTION, set GPIO data direction to output on specified pins. Required e.g. on MacPro5,1. – 0x00000004 (bit 2) — GPIO_SETUP_STAGE_ENABLE, enable specified GPIO pins. Required e.g. on MacPro5,1.

    If audio appears to be ‘playing’ on the correct codec, e.g. based on the debug log, but no sound is heard on any channel, it is suggested to use --gpio-setup (with no value) in the AudioDxe driver arguments. If specified with no value, all stages will be enabled (equivalent of specifying 7). If this produces sound, it is then possible to try fewer bits, e.g. --gpio-setup=1, --gpio-setup=3, to find out which stages are actually required.

    Note: Value 7 (all flags enabled) of this option – as required for the MacPro5,1 – is compatible with most systems, but is known to cause problems with sound (previous sounds are not allowed to finish before new sounds start) on a small number of other systems, hence this option is not enabled by default.

  • --gpio-pins - Default: 0, auto-detect.

    Specifies which GPIO pins should be operated on by --gpio-setup. This is a bit mask, with possible values from 0x0 to 0xFF. The usable maximum depends on the number if available pins on the audio out function group of the codec in use, e.g. it is 0x3 (lowest two bits) if two GPIO pins are present, 0x7 if three pins are present, etc.

    When --gpio-setup is enabled (i.e. non-zero), then 0 is a special value for --gpio-pins, meaning that the pin mask will be auto-generated based on the reported number of GPIO pins on the specified codec (see AudioCodec), e.g. if the codec’s audio out function group reports 4 GPIO pins, a mask of 0xF will be used. The value in use can be seen in the debug log in a line such as:

      HDA: GPIO setup on pins 0x0F - Success
    

    Values for driver parameters can be specified in hexadecimal beginning with 0x or in decimal, e.g. --gpio-pins=0x12 or --gpio-pins=18.

  • --restore-nosnoop - Boolean flag, enabled if present.

    AudioDxe clears the Intel HDA No Snoop Enable (NSNPEN) bit. On some systems, this change must be reversed on exit in order to avoid breaking sound in Windows or Linux. If so, this flag should be added to AudioDxe driver arguments. Not enabled by default, since restoring the flag can prevent sound from working in macOS on some other systems.