ACPI 인터페이스: PCIe 루트 포트에 대한 디바이스별 데이터(_DSD)

Windows 10(버전 1803)에서는 최신 대기 및 PCI 핫 플러그 시나리오를 지원하기 위해 새로운 ACPI _DSD 메서드가 추가되었습니다.

PCIe 루트 포트에서 DRIPS(Directed Deepest Runtime 유휴 플랫폼 상태) 지원

이 ACPI 개체는 DFx(Directed Power Management Framework)를 구현할 수 있는 최신 대기 지원 시스템에서 사용자가 액세스할 수 있는 모든 PCIe 루트 포트/슬롯의 ACPI scope 구현되어야 합니다.

Name (_DSD, Package () {

          ToUUID("FDF06FAD-F744-4451-BB64-ECD792215B10"),

            Package () {

                Package (2) {"FundamentalDeviceResetTriggeredOnD3ToD0", 1},
            }
        }
)

D3에서 핫 플러그를 지원하는 PCIe 루트 포트 식별

이 ACPI 개체를 사용하면 운영 체제가 D3 상태인 동안 핫 플러그 이벤트를 처리할 수 있는 PCIe 루트 포트를 식별하고 전원을 관리할 수 있습니다. 이 개체가 PCIe 핫 플러그 지원 포트에서 구현되지 않은 경우 자식 PCIe 디바이스가 없으면 시스템에서 이 포트를 관리하지 않으므로 시스템에서 필요한 것보다 더 많은 전력을 소비하게 됩니다.

이 개체는 루트 포트 ACPI 디바이스 scope RTD3(런타임 D3) 지원 시스템의 Thunderbolt 계층의 모든 PCIe 루트 포트에서 구현되어야 합니다.

Name (_DSD, Package () {  

        ToUUID("6211E2C0-58A3-4AF3-90E1-927A4E0C55A4"),  

        Package () {  

            Package (2) {"HotPlugSupportInD3", 1},  

                   }
        }
)

외부에 노출된 PCIe 루트 포트 식별

이 ACPI 개체를 사용하면 운영 체제에서 Thunderbolt와 같이 외부에 노출된 PCIe 계층 구조를 식별할 수 있습니다. 이 개체는 루트 포트 ACPI 디바이스 scope 구현해야 합니다.

참고: Windows 10 버전 1803과 함께 제공되는 시스템에서 이 개체는 Thunderbolt 계층 구조의 PCIe 루트 포트에서만 구현되어야 합니다.

Name (_DSD, Package () {  

ToUUID("EFCC06CC-73AC-4BC3-BFF0-76143807C389"),
Package () {
Package (2) {"ExternalFacingPort", 1}, // Property 1: This is an externally facing port/hierarchy
Package (2) {"UID", 0}, // Property 2: UID of the externally facing port on platform, range is: 0, 1, …, n-1
                   }
        }
)

사용자가 액세스할 수 있는 내부 PCIe 포트 식별 및 DMA 보호 필요

이 ACPI 개체를 사용하면 운영 체제에서 사용자가 쉽게 액세스할 수 있는 내부 PCIe 계층 구조(예: 래치를 통해 액세스할 수 있는 Laptop M.2 PCIe 슬롯)를 식별하고 OS 커널 DMA 보호 메커니즘을 통해 보호해야 합니다. 이 개체는 루트 포트 ACPI 디바이스 scope 구현해야 합니다.

참고의 주요 항목:

  • 이 ACPI 개체를 사용하여 PCI 포트 보호는 Windows 10 버전 1903 이상에서만 지원됩니다.

  • OS가 _DSD 구문 분석하고 PCI 포트에 필요한 보호를 적용하려면 시스템 BIOS/UEFI에서 커널 DMA 보호를 사용하도록 설정해야 합니다.

  • 이 포트에 연결된 디바이스의 드라이버는 DMA 다시 매핑을 지원해야 합니다. 그렇지 않으면 Windows 10 DMAGuard 정책에 따라 사용자가 로그인하거나 무기한으로 로그인할 때까지 이러한 디바이스의 작동을 차단할 수 있습니다.

Name (_DSD, Package () {  

ToUUID("70D24161-6DD5-4C9E-8070-705531292865"),
Package () {
Package (2) {"DmaProperty", 1}, // Property 1: This port needs to be protected by the OS
Package (2) {"UID", 0}, // Property 2: UID of the PCIe port on platform, range is: 0, 1, …, n-1
                   }
        }
)

D3_COLD_AUX_POWER ECN 인터페이스를 지원하는 PCIe 포트 식별

이 ACPI 개체를 사용하면 운영 체제에서 D3_COLD_AUX_POWER ECN 인터페이스를 지원하는 PCIe 포트를 식별할 수 있습니다. 이를 통해 PCIe 디바이스는 기본값인 375mA @3.3V보다 높은 D3의 추가 보조 전원을 플랫폼에서 요청할 수 있습니다. 이 DSD를 정의하는 모든 PCI 포트 또는 브리지는 이전에 협상한 보조 전력 값을 다시 프로그래밍할 때 작업이 성공한다는 것을 보장 해야 합니다 .

Name (_DSD, Package () {
            ToUUID("6B4AD420-8FD3-4364-ACF8-EB94876FD9EB"),
            Package () {
            }
        }
)

USB4에서 USB4 호스트 라우터로 터널된 네이티브 프로토콜(PCIe, DisplayPort) 매핑

이 ACPI 개체를 사용하면 운영 체제가 USB4를 통해 터널링된 PCIe 및 DisplayPort와 같은 네이티브 프로토콜을 올바른 USB4 호스트 라우터에 매핑할 수 있습니다.

다음 샘플에서는 에 Device (DSB0) 대한 종속성이 있습니다 \_SB.PCI0.NHI0.

Scope (\_SB.PCI0)
{
    Device (NHI0) { } //Host interface instance which has dependency on \_SB.PCI0.NHI0
    Device (DSB0) //Tunneled PCIe port instance
    {
        Name (_DSD, Package () {
            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), //Device Properties UUID 
            Package () {
                Package () { “usb4-host-interface", \_SB.PCI0.NHI0 },
                Package () { “usb4-port-number", PortInstance#},
            }
        })
    }
    Device (…) //Extend to DP and USB tunneled ports, as needed 
    {
        Name (_DSD, Package () {
            ToUUID("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"), //Device Properties UUID 
            Package () {
                Package () { “usb4-host-interface", \_SB.PCI0.NHI0 },
                Package () { “usb4-port-number", PortInstance#},
            }
        })
    }
}

추가 정보

Windows에서 PCI Express 네이티브 컨트롤 사용

Thunderbolt 3용 커널 DMA 보호

장치 드라이버에 DMA 다시 매핑 사용

D3COLD_AUX_POWER_AND_TIMING_INTERFACE 구조체