/** @file Power Meter Device Configuration for Alderlake-S @copyright INTEL CONFIDENTIAL Copyright 2020 - 2021 Intel Corporation. The source code contained or described herein and all documents related to the source code ("Material") are owned by Intel Corporation or its suppliers or licensors. Title to the Material remains with Intel Corporation or its suppliers and licensors. The Material may contain trade secrets and proprietary and confidential information of Intel Corporation and its suppliers and licensors, and is protected by worldwide copyright and trade secret laws and treaty provisions. No part of the Material may be used, copied, reproduced, modified, published, uploaded, posted, transmitted, distributed, or disclosed in any way without Intel's prior express written permission. No license under any patent, copyright, trade secret or other intellectual property right is granted to or conferred upon you by disclosure or delivery of the Materials, either expressly, by implication, inducement, estoppel or otherwise. Any license under such intellectual property rights must be express and approved by Intel in writing. Unless otherwise agreed by Intel in writing, you may not remove or alter this notice or any other notice embedded in Materials by Intel or Intel's suppliers or licensors in any way. This file contains a 'Sample Driver' and is licensed as such under the terms of your license agreement with Intel or your vendor. This file may be modified by the user, subject to the additional terms of the license agreement. @par Specification Reference: **/ Scope(\_SB.PC00.I2C0) { // // PA01 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA01) { Name(_HID, "MCHP1930") Name(_UID, 1) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Store (0x10, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "VCCIN_AUX_PH1", 2, // Channel 1 "VCCIN_AUX_PH2", 2, // Channel 2 "V12S_CPU_VCCIN_AUX_VIN", 5, // Channel 3 "V3P3DX_PCH_SSD1", 10 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 2000, // Channel 1 2000, // Channel 2 5000, // Channel 3 10000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA01 Scope End // // PA02 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA02) { Name(_HID, "MCHP1930") Name(_UID, 2) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Store (0x12, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "VCCCORE_VIN", 2, // Channel 1 "VCCGT_VIN", 2, // Channel 2 "VCCCORE_PH1", 1, // Channel 3 "VCCCORE_PH2", 1 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 2000, // Channel 1 2000, // Channel 2 1000, // Channel 3 1000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA02 Scope End // // PA03 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA03) { Name(_HID, "MCHP1930") Name(_UID, 3) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Store (0x14, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "VCCCORE_PH3", 1, // Channel 1 "VCCCORE_PH4", 1, // Channel 2 "VCCCORE_PH5", 1, // Channel 3 "VCCCORE_PH6", 1 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 1000, // Channel 1 1000, // Channel 2 1000, // Channel 3 1000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA03 Scope End // // PA04 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA04) { Name(_HID, "MCHP1930") Name(_UID, 4) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Store (0x16, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { // Rail Name, Resistor Value Package () { "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package () { "VCCCORE_PH7", 1, // Channel 1 "VCCCORE_PH8", 1, // Channel 2 "VCCGT", 1, // Channel 3 "V0P82A_PCH", 2 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { // Value Package () { 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package () { 1000, // Channel 1 1000, // Channel 2 1000, // Channel 3 2000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA04 Scope End // // PA05 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA05) { Name(_HID, "MCHP1930") Name(_UID, 5) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Store (0x18, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { // Rail Name, Resistor Value Package () { "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package () { "V5P0DX_SSD", 5, // Channel 1 "V1P05A_CPU", 5, // Channel 2 "VCCPRIM_1P8", 22, // Channel 3 "VCCPDSW_3P3", 22 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { // Value Package () { 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package () { 5000, // Channel 1 5000, // Channel 2 22000, // Channel 3 22000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA05 Scope End // // PA06 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA06) { Name(_HID, "MCHP1930") Name(_UID, 6) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Store (0x1A, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { // Rail Name, Resistor Value Package () { "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package () { "V5DSW", 10, // Channel 1 "V5S", 2, // Channel 2 "V3P3S", 2, // Channel 3 "V12S", 2 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { // Value Package () { 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package () { 10000, // Channel 1 2000, // Channel 2 2000, // Channel 3 2000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA06 Scope End // // PA07 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA07) { Name(_HID, "MCHP1930") Name(_UID, 7) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv, BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb, BoardIdAdlSAdpSDdr4SODimmCrb}) { Store (0x1C, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { // Rail Name, Resistor Value Package () { "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package () { "V3P3DX_CPU_SSD", 10, // Channel 1 "", 0, // Channel 2 "VCCDD2_CPU", 2, // Channel 3 "VPP", 10 // Channel 4 }, Package () { "V3P3DX_CPU_SSD", 10, // Channel 1 "", 0, // Channel 2 "VCCDD2_CPU", 5, // Channel 3 "V5DUAL_DDR5", 2 // Channel 4 }, Package () { "V3P3DX_CPU_SSD", 10, // Channel 1 "", 0, // Channel 2 "VCCDD2_CPU", 5, // Channel 3 "VDDQ", 2 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv}) { return(DerefOf(Index(PKG1, 1))) } Case (Package () {BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb}) { return(DerefOf(Index(PKG1, 2))) } Case (Package () {BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 3))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { // Value Package () { 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package () { 10000, // Channel 1 0, // Channel 2 2000, // Channel 3 10000 // Channel 4 }, Package () { 10000, // Channel 1 0, // Channel 2 5000, // Channel 3 2000 // Channel 4 }, Package () { 10000, // Channel 1 0, // Channel 2 5000, // Channel 3 2000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSDdr4UDimm2DCrb, BoardIdAdlSAdpSDdr4UDimm2DCrbEv, BoardIdAdlSAdpSDdr4UDimm2DCrbCpv}) { return(DerefOf(Index(PKG2, 1))) } Case (Package () {BoardIdAdlSAdpSDdr5UDimm1DCrb, BoardIdAdlSAdpSDdr5UDimm1DCrbPpv, BoardIdAdlSAdpSDdr5SODimmCrb}) { return(DerefOf(Index(PKG2, 2))) } Case (Package () {BoardIdAdlSAdpSDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 3))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA07 Scope End // // PM01 Device: Defines how the PAC195x is connected to the I2C Controller. // Device(PM01) { Name(_HID, "MCHP1940") Name(_UID, 1) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Return(0x0F) } } } Return(0x00) } // Current Resources Settings Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Controller or peripheral? 400000, // Connection Speed in Hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Store (0x10, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // _DSM - Device Specific Method // // This method returns configuration information that PAC194x/5x driver // uses for the device initial configuration. // // The DSM UUID for the Microchip PAC194x/5x: {721F1534-5D27-4B60-9DF4-41A3C4B7DA3A}. // This must match what the Windows PAC194x/5x driver expects. // // Returns: // Either: A Buffer (for supported Functions, or an error) // A Package containing PAC194x/5x resources (configuration values) // // Input Arguments (per _DSM standard): // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // Is PAC194x/5x DSM UUID being invoked? if(LNotEqual(Arg0, ToUUID("721F1534-5D27-4B60-9DF4-41A3C4B7DA3A"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // Function number check switch(ToInteger(Arg2)) { // Function 0 - returns a bit-mask of supported functions case(0) { switch(ToInteger(Arg1)) // revision check { // Revision 0: function 1->7 are supported case(0) {return (Buffer() {0xFF})} } break; } // Function 1 - returns the names of the monitored power rails. // The names should be compliant with Windows EMI power rail taxonomy. // If the rail name is NULL ("") -> no EMI created for the channel ("private channel"). case(1) { Name(PKG1, Package() { Package() { // Rail Names set "", // Channel 1 name "", // Channel 2 name "", // Channel 3 name "" // Channel 4 name }, Package() { // Rail Names set "CPU_VCCINAUX1", // Channel 1 name "CPU_VCCINAUX2", // Channel 2 name "CPU_VCCCORE1" , // Channel 3 name "CPU_VCCCORE2" // Channel 4 name } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 - returns the sense resistor values, in micro-Ohms. case(2) { Name(PKG2, Package() { Package() { // Sense resistors values (micro-Ohms) 0, // Channel 1 resistor 0, // Channel 2 resistor 0, // Channel 3 resistor 0 // Channel 4 resistor }, Package() { // Sense resistors values (micro-Ohms) 2000, // Channel 1 resistor 2000, // Channel 2 resistor 1000, // Channel 3 resistor 1000 // Channel 4 resistor } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 - returns the EMI enable/disable bit-mask case(3) { Name(BUF3, Package() { // EMI bitmask - CH1:CH2:CH3:CH4 0xF // CHn = 1: EMI enable for channel 'n' // CHn = 0: EMI disable for channel 'n' ("private channel") }) return(BUF3) } // Function 4 - returns Vsense and Vbus polarity and full scale range configs case(4) { Name(BUF4, Package() { // Vsense configs 0x0, 0x0, 0x0, 0x0, // CFG_VS1, CFG_VS2, CFG_VS3, CFG_VS4 // CFG_VSn: Vsense configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} // Vbus configs 0x0, 0x0, 0x0, 0x0 // CFG_VB1, CFG_VB2, CFG_VB3, CFG_VB4 // CFG_VBn: Vbus configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} }) return(BUF4) } // Function 5 - returns the sample frequencies for ACTIVE and IDLE modes case(5) { Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 - returns the REFRESH watchdog timer interval case(6) { Name(BUF6, Package() { 900 // seconds (min=60, max=60000) }) return(BUF6) } // Function 7 - returns the Vbus multiplication factors for PAC194x/5x-2 // PAC194x/5x-2 power meter VBUS+ pins may be connected to voltage dividers // to measure rail voltage higher than device Vbus FSR. case(7) { Name(BUF7, Package() { // K = 1000 * (Vrail / Vbus). Must be integer, positive value. 1000, // Channel 1 K-factor 1000, // Channel 2 K-factor 1000, // Channel 3 K-factor 1000 // Channel 4 K-factor }) return(BUF7) } } // switch(Arg2) // Return an error (a buffer with a value of zero) // if we didn't return anything else above return(Buffer() {0x0}) } // _DSM } // Device(PM01) // // PM02 Device: Defines how the PAC195x is connected to the I2C Controller. // Device(PM02) { Name(_HID, "MCHP1940") Name(_UID, 2) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Return(0x0F) } } } Return(0x00) } // Current Resources Settings Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Controller or peripheral? 400000, // Connection Speed in Hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Store (0x14, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // _DSM - Device Specific Method // // This method returns configuration information that PAC194x/5x driver // uses for the device initial configuration. // // The DSM UUID for the Microchip PAC194x/5x: {721F1534-5D27-4B60-9DF4-41A3C4B7DA3A}. // This must match what the Windows PAC194x/5x driver expects. // // Returns: // Either: A Buffer (for supported Functions, or an error) // A Package containing PAC194x/5x resources (configuration values) // // Input Arguments (per _DSM standard): // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // Is PAC194x/5x DSM UUID being invoked? if(LNotEqual(Arg0, ToUUID("721F1534-5D27-4B60-9DF4-41A3C4B7DA3A"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // Function number check switch(ToInteger(Arg2)) { // Function 0 - returns a bit-mask of supported functions case(0) { switch(ToInteger(Arg1)) // revision check { // Revision 0: function 1->7 are supported case(0) {return (Buffer() {0xFF})} } break; } // Function 1 - returns the names of the monitored power rails. // The names should be compliant with Windows EMI power rail taxonomy. // If the rail name is NULL ("") -> no EMI created for the channel ("private channel"). case(1) { Name(PKG1, Package() { Package() { // Rail Names set "", // Channel 1 name "", // Channel 2 name "", // Channel 3 name "" // Channel 4 name }, Package() { // Rail Names set "CPU_VCCCORE3", // Channel 1 name "CPU_VCCCORE4", // Channel 2 name "CPU_VCCCORE5" , // Channel 3 name "CPU_VCCCORE6" // Channel 4 name } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 - returns the sense resistor values, in micro-Ohms. case(2) { Name(PKG2, Package() { Package() { // Sense resistors values (micro-Ohms) 0, // Channel 1 resistor 0, // Channel 2 resistor 0, // Channel 3 resistor 0 // Channel 4 resistor }, Package() { // Sense resistors values (micro-Ohms) 1000, // Channel 1 resistor 1000, // Channel 2 resistor 1000, // Channel 3 resistor 1000 // Channel 4 resistor } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 - returns the EMI enable/disable bit-mask case(3) { Name(BUF3, Package() { // EMI bitmask - CH1:CH2:CH3:CH4 0xF // CHn = 1: EMI enable for channel 'n' // CHn = 0: EMI disable for channel 'n' ("private channel") }) return(BUF3) } // Function 4 - returns Vsense and Vbus polarity and full scale range configs case(4) { Name(BUF4, Package() { // Vsense configs 0x0, 0x0, 0x0, 0x0, // CFG_VS1, CFG_VS2, CFG_VS3, CFG_VS4 // CFG_VSn: Vsense configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} // Vbus configs 0x0, 0x0, 0x0, 0x0 // CFG_VB1, CFG_VB2, CFG_VB3, CFG_VB4 // CFG_VBn: Vbus configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} }) return(BUF4) } // Function 5 - returns the sample frequencies for ACTIVE and IDLE modes case(5) { Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 - returns the REFRESH watchdog timer interval case(6) { Name(BUF6, Package() { 900 // seconds (min=60, max=60000) }) return(BUF6) } // Function 7 - returns the Vbus multiplication factors for PAC194x/5x-2 // PAC194x/5x-2 power meter VBUS+ pins may be connected to voltage dividers // to measure rail voltage higher than device Vbus FSR. case(7) { Name(BUF7, Package() { // K = 1000 * (Vrail / Vbus). Must be integer, positive value. 1000, // Channel 1 K-factor 1000, // Channel 2 K-factor 1000, // Channel 3 K-factor 1000 // Channel 4 K-factor }) return(BUF7) } } // switch(Arg2) // Return an error (a buffer with a value of zero) // if we didn't return anything else above return(Buffer() {0x0}) } // _DSM } // Device(PM02) // // PM03 Device: Defines how the PAC195x is connected to the I2C Controller. // Device(PM03) { Name(_HID, "MCHP1940") Name(_UID, 3) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Return(0x0F) } } } Return(0x00) } // Current Resources Settings Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Controller or peripheral? 400000, // Connection Speed in Hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Store (0x16, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // _DSM - Device Specific Method // // This method returns configuration information that PAC194x/5x driver // uses for the device initial configuration. // // The DSM UUID for the Microchip PAC194x/5x: {721F1534-5D27-4B60-9DF4-41A3C4B7DA3A}. // This must match what the Windows PAC194x/5x driver expects. // // Returns: // Either: A Buffer (for supported Functions, or an error) // A Package containing PAC194x/5x resources (configuration values) // // Input Arguments (per _DSM standard): // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // Is PAC194x/5x DSM UUID being invoked? if(LNotEqual(Arg0, ToUUID("721F1534-5D27-4B60-9DF4-41A3C4B7DA3A"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // Function number check switch(ToInteger(Arg2)) { // Function 0 - returns a bit-mask of supported functions case(0) { switch(ToInteger(Arg1)) // revision check { // Revision 0: function 1->7 are supported case(0) {return (Buffer() {0xFF})} } break; } // Function 1 - returns the names of the monitored power rails. // The names should be compliant with Windows EMI power rail taxonomy. // If the rail name is NULL ("") -> no EMI created for the channel ("private channel"). case(1) { Name(PKG1, Package() { Package() { // Rail Names set "", // Channel 1 name "", // Channel 2 name "", // Channel 3 name "" // Channel 4 name }, Package() { // Rail Names set "CPU_VCCCORE7", // Channel 1 name "STORAGE_PCH_SSD", // Channel 2 name "CPU_VCCGT" , // Channel 3 name "PCH_V0P82A" // Channel 4 name } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 - returns the sense resistor values, in micro-Ohms. case(2) { Name(PKG2, Package() { Package() { // Sense resistors values (micro-Ohms) 0, // Channel 1 resistor 0, // Channel 2 resistor 0, // Channel 3 resistor 0 // Channel 4 resistor }, Package() { // Sense resistors values (micro-Ohms) 1000, // Channel 1 resistor 5000, // Channel 2 resistor 1000, // Channel 3 resistor 2000 // Channel 4 resistor } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 - returns the EMI enable/disable bit-mask case(3) { Name(BUF3, Package() { // EMI bitmask - CH1:CH2:CH3:CH4 0xF // CHn = 1: EMI enable for channel 'n' // CHn = 0: EMI disable for channel 'n' ("private channel") }) return(BUF3) } // Function 4 - returns Vsense and Vbus polarity and full scale range configs case(4) { Name(BUF4, Package() { // Vsense configs 0x0, 0x0, 0x0, 0x0, // CFG_VS1, CFG_VS2, CFG_VS3, CFG_VS4 // CFG_VSn: Vsense configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} // Vbus configs 0x0, 0x0, 0x0, 0x0 // CFG_VB1, CFG_VB2, CFG_VB3, CFG_VB4 // CFG_VBn: Vbus configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} }) return(BUF4) } // Function 5 - returns the sample frequencies for ACTIVE and IDLE modes case(5) { Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 - returns the REFRESH watchdog timer interval case(6) { Name(BUF6, Package() { 900 // seconds (min=60, max=60000) }) return(BUF6) } // Function 7 - returns the Vbus multiplication factors for PAC194x/5x-2 // PAC194x/5x-2 power meter VBUS+ pins may be connected to voltage dividers // to measure rail voltage higher than device Vbus FSR. case(7) { Name(BUF7, Package() { // K = 1000 * (Vrail / Vbus). Must be integer, positive value. 1000, // Channel 1 K-factor 1000, // Channel 2 K-factor 1000, // Channel 3 K-factor 1000 // Channel 4 K-factor }) return(BUF7) } } // switch(Arg2) // Return an error (a buffer with a value of zero) // if we didn't return anything else above return(Buffer() {0x0}) } // _DSM } // Device(PM03) // // PM04 Device: Defines how the PAC195x is connected to the I2C Controller. // Device(PM04) { Name(_HID, "MCHP1940") Name(_UID, 4) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Return(0x0F) } } } Return(0x00) } // Current Resources Settings Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Controller or peripheral? 400000, // Connection Speed in Hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Store (0x18, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // _DSM - Device Specific Method // // This method returns configuration information that PAC194x/5x driver // uses for the device initial configuration. // // The DSM UUID for the Microchip PAC194x/5x: {721F1534-5D27-4B60-9DF4-41A3C4B7DA3A}. // This must match what the Windows PAC194x/5x driver expects. // // Returns: // Either: A Buffer (for supported Functions, or an error) // A Package containing PAC194x/5x resources (configuration values) // // Input Arguments (per _DSM standard): // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // Is PAC194x/5x DSM UUID being invoked? if(LNotEqual(Arg0, ToUUID("721F1534-5D27-4B60-9DF4-41A3C4B7DA3A"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // Function number check switch(ToInteger(Arg2)) { // Function 0 - returns a bit-mask of supported functions case(0) { switch(ToInteger(Arg1)) // revision check { // Revision 0: function 1->7 are supported case(0) {return (Buffer() {0xFF})} } break; } // Function 1 - returns the names of the monitored power rails. // The names should be compliant with Windows EMI power rail taxonomy. // If the rail name is NULL ("") -> no EMI created for the channel ("private channel"). case(1) { Name(PKG1, Package() { Package() { // Rail Names set "", // Channel 1 name "", // Channel 2 name "", // Channel 3 name "" // Channel 4 name }, Package() { // Rail Names set "STORAGE_SATA", // Channel 1 name "CPU_V1P05A", // Channel 2 name "PCH_VCCPRIM_1P8" , // Channel 3 name "PCH_VCCPDSW_3P3" // Channel 4 name } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 - returns the sense resistor values, in micro-Ohms. case(2) { Name(PKG2, Package() { Package() { // Sense resistors values (micro-Ohms) 0, // Channel 1 resistor 0, // Channel 2 resistor 0, // Channel 3 resistor 0 // Channel 4 resistor }, Package() { // Sense resistors values (micro-Ohms) 5000, // Channel 1 resistor 5000, // Channel 2 resistor 22000, // Channel 3 resistor 22000 // Channel 4 resistor } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 - returns the EMI enable/disable bit-mask case(3) { Name(BUF3, Package() { // EMI bitmask - CH1:CH2:CH3:CH4 0xF // CHn = 1: EMI enable for channel 'n' // CHn = 0: EMI disable for channel 'n' ("private channel") }) return(BUF3) } // Function 4 - returns Vsense and Vbus polarity and full scale range configs case(4) { Name(BUF4, Package() { // Vsense configs 0x0, 0x0, 0x0, 0x0, // CFG_VS1, CFG_VS2, CFG_VS3, CFG_VS4 // CFG_VSn: Vsense configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} // Vbus configs 0x0, 0x0, 0x0, 0x0 // CFG_VB1, CFG_VB2, CFG_VB3, CFG_VB4 // CFG_VBn: Vbus configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} }) return(BUF4) } // Function 5 - returns the sample frequencies for ACTIVE and IDLE modes case(5) { Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 - returns the REFRESH watchdog timer interval case(6) { Name(BUF6, Package() { 900 // seconds (min=60, max=60000) }) return(BUF6) } // Function 7 - returns the Vbus multiplication factors for PAC194x/5x-2 // PAC194x/5x-2 power meter VBUS+ pins may be connected to voltage dividers // to measure rail voltage higher than device Vbus FSR. case(7) { Name(BUF7, Package() { // K = 1000 * (Vrail / Vbus). Must be integer, positive value. 1000, // Channel 1 K-factor 1000, // Channel 2 K-factor 1000, // Channel 3 K-factor 1000 // Channel 4 K-factor }) return(BUF7) } } // switch(Arg2) // Return an error (a buffer with a value of zero) // if we didn't return anything else above return(Buffer() {0x0}) } // _DSM } // Device(PM04) // // PM05 Device: Defines how the PAC195x is connected to the I2C Controller. // Device(PM05) { Name(_HID, "MCHP1940") Name(_UID, 5) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Return(0x0F) } } } Return(0x00) } // Current Resources Settings Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Controller or peripheral? 400000, // Connection Speed in Hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Store (0x1A, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // _DSM - Device Specific Method // // This method returns configuration information that PAC194x/5x driver // uses for the device initial configuration. // // The DSM UUID for the Microchip PAC194x/5x: {721F1534-5D27-4B60-9DF4-41A3C4B7DA3A}. // This must match what the Windows PAC194x/5x driver expects. // // Returns: // Either: A Buffer (for supported Functions, or an error) // A Package containing PAC194x/5x resources (configuration values) // // Input Arguments (per _DSM standard): // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // Is PAC194x/5x DSM UUID being invoked? if(LNotEqual(Arg0, ToUUID("721F1534-5D27-4B60-9DF4-41A3C4B7DA3A"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // Function number check switch(ToInteger(Arg2)) { // Function 0 - returns a bit-mask of supported functions case(0) { switch(ToInteger(Arg1)) // revision check { // Revision 0: function 1->7 are supported case(0) {return (Buffer() {0xFF})} } break; } // Function 1 - returns the names of the monitored power rails. // The names should be compliant with Windows EMI power rail taxonomy. // If the rail name is NULL ("") -> no EMI created for the channel ("private channel"). case(1) { Name(PKG1, Package() { Package() { // Rail Names set "", // Channel 1 name "", // Channel 2 name "", // Channel 3 name "" // Channel 4 name }, Package() { // Rail Names set "SYSTEM_V5DSW", // Channel 1 name "SYSTEM_V5S", // Channel 2 name "SYSTEM_V3P3S" , // Channel 3 name "SYSTEM_V12S" // Channel 4 name } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 - returns the sense resistor values, in micro-Ohms. case(2) { Name(PKG2, Package() { Package() { // Sense resistors values (micro-Ohms) 0, // Channel 1 resistor 0, // Channel 2 resistor 0, // Channel 3 resistor 0 // Channel 4 resistor }, Package() { // Sense resistors values (micro-Ohms) 10000, // Channel 1 resistor 2000, // Channel 2 resistor 2000, // Channel 3 resistor 2000 // Channel 4 resistor } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 - returns the EMI enable/disable bit-mask case(3) { Name(BUF3, Package() { // EMI bitmask - CH1:CH2:CH3:CH4 0xF // CHn = 1: EMI enable for channel 'n' // CHn = 0: EMI disable for channel 'n' ("private channel") }) return(BUF3) } // Function 4 - returns Vsense and Vbus polarity and full scale range configs case(4) { Name(BUF4, Package() { // Vsense configs 0x0, 0x0, 0x0, 0x0, // CFG_VS1, CFG_VS2, CFG_VS3, CFG_VS4 // CFG_VSn: Vsense configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} // Vbus configs 0x0, 0x0, 0x0, 0x0 // CFG_VB1, CFG_VB2, CFG_VB3, CFG_VB4 // CFG_VBn: Vbus configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} }) return(BUF4) } // Function 5 - returns the sample frequencies for ACTIVE and IDLE modes case(5) { Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 - returns the REFRESH watchdog timer interval case(6) { Name(BUF6, Package() { 900 // seconds (min=60, max=60000) }) return(BUF6) } // Function 7 - returns the Vbus multiplication factors for PAC194x/5x-2 // PAC194x/5x-2 power meter VBUS+ pins may be connected to voltage dividers // to measure rail voltage higher than device Vbus FSR. case(7) { Name(BUF7, Package() { // K = 1000 * (Vrail / Vbus). Must be integer, positive value. 1000, // Channel 1 K-factor 1000, // Channel 2 K-factor 1000, // Channel 3 K-factor 1000 // Channel 4 K-factor }) return(BUF7) } } // switch(Arg2) // Return an error (a buffer with a value of zero) // if we didn't return anything else above return(Buffer() {0x0}) } // _DSM } // Device(PM05) // // PM06 Device: Defines how the PAC195x is connected to the I2C Controller. // Device(PM06) { Name(_HID, "MCHP1940") Name(_UID, 6) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Return(0x0F) } } } Return(0x00) } // Current Resources Settings Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Controller or peripheral? 400000, // Connection Speed in Hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C0", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { Store (0x1C, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // _DSM - Device Specific Method // // This method returns configuration information that PAC194x/5x driver // uses for the device initial configuration. // // The DSM UUID for the Microchip PAC194x/5x: {721F1534-5D27-4B60-9DF4-41A3C4B7DA3A}. // This must match what the Windows PAC194x/5x driver expects. // // Returns: // Either: A Buffer (for supported Functions, or an error) // A Package containing PAC194x/5x resources (configuration values) // // Input Arguments (per _DSM standard): // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // Is PAC194x/5x DSM UUID being invoked? if(LNotEqual(Arg0, ToUUID("721F1534-5D27-4B60-9DF4-41A3C4B7DA3A"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // Function number check switch(ToInteger(Arg2)) { // Function 0 - returns a bit-mask of supported functions case(0) { switch(ToInteger(Arg1)) // revision check { // Revision 0: function 1->7 are supported case(0) {return (Buffer() {0xFF})} } break; } // Function 1 - returns the names of the monitored power rails. // The names should be compliant with Windows EMI power rail taxonomy. // If the rail name is NULL ("") -> no EMI created for the channel ("private channel"). case(1) { Name(PKG1, Package() { Package() { // Rail Names set "", // Channel 1 name "", // Channel 2 name "", // Channel 3 name "" // Channel 4 name }, Package() { // Rail Names set "STORAGE_CPU_SSD", // Channel 1 name "DRAM_VPP", // Channel 2 name "CPU_VCCDD2" , // Channel 3 name "DRAM_VDD2" // Channel 4 name } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 - returns the sense resistor values, in micro-Ohms. case(2) { Name(PKG2, Package() { Package() { // Sense resistors values (micro-Ohms) 0, // Channel 1 resistor 0, // Channel 2 resistor 0, // Channel 3 resistor 0 // Channel 4 resistor }, Package() { // Sense resistors values (micro-Ohms) 5000, // Channel 1 resistor 10000, // Channel 2 resistor 2000, // Channel 3 resistor 2000 // Channel 4 resistor } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr4SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 - returns the EMI enable/disable bit-mask case(3) { Name(BUF3, Package() { // EMI bitmask - CH1:CH2:CH3:CH4 0xF // CHn = 1: EMI enable for channel 'n' // CHn = 0: EMI disable for channel 'n' ("private channel") }) return(BUF3) } // Function 4 - returns Vsense and Vbus polarity and full scale range configs case(4) { Name(BUF4, Package() { // Vsense configs 0x0, 0x0, 0x0, 0x0, // CFG_VS1, CFG_VS2, CFG_VS3, CFG_VS4 // CFG_VSn: Vsense configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} // Vbus configs 0x0, 0x0, 0x0, 0x0 // CFG_VB1, CFG_VB2, CFG_VB3, CFG_VB4 // CFG_VBn: Vbus configuration for channel // {0x0 = unipolar; 0x1 = bipolar; 0x2 = half scale bipolar} }) return(BUF4) } // Function 5 - returns the sample frequencies for ACTIVE and IDLE modes case(5) { Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 - returns the REFRESH watchdog timer interval case(6) { Name(BUF6, Package() { 900 // seconds (min=60, max=60000) }) return(BUF6) } // Function 7 - returns the Vbus multiplication factors for PAC194x/5x-2 // PAC194x/5x-2 power meter VBUS+ pins may be connected to voltage dividers // to measure rail voltage higher than device Vbus FSR. case(7) { Name(BUF7, Package() { // K = 1000 * (Vrail / Vbus). Must be integer, positive value. 1000, // Channel 1 K-factor 1000, // Channel 2 K-factor 1000, // Channel 3 K-factor 1000 // Channel 4 K-factor }) return(BUF7) } } // switch(Arg2) // Return an error (a buffer with a value of zero) // if we didn't return anything else above return(Buffer() {0x0}) } // _DSM } // Device(PM06) } // Scope I2C0 Scope(\_SB.PC00.I2C3) { // // PA01 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA01) { Name(_HID, "MCHP1930") Name(_UID, 1) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C3", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Store (0x20, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "VBATA_VCCGT_GPU", 5, // Channel 1 "VBATA_VCCSAMC_GPU", 5, // Channel 2 "VBATA_DGPU", 5, // Channel 3 "VBATA_VDD_GDDR6_GPU", 5 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 5000, // Channel 1 5000, // Channel 2 5000, // Channel 3 5000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA01 Scope End // // PA02 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA02) { Name(_HID, "MCHP1930") Name(_UID, 2) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C3", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Store (0x22, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "VBATA_VCCIN", 5, // Channel 1 "VBATA_VCCIN_AUX", 5, // Channel 2 "VBATA_VCCGT", 5, // Channel 3 "V5A_DDR5", 2 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 5000, // Channel 1 5000, // Channel 2 5000, // Channel 3 2000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA02 Scope End // // PA03 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA03) { Name(_HID, "MCHP1930") Name(_UID, 3) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C3", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Store (0x24, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "V3P3DX_PCH_SSD1", 10, // Channel 1 "V3P3DX_CPU_SSD", 10, // Channel 2 "VBATTERY", 5, // Channel 3 "V3P3A_WWAN", 10 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 10000, // Channel 1 10000, // Channel 2 5000, // Channel 3 10000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA03 Scope End // // PA04 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA04) { Name(_HID, "MCHP1930") Name(_UID, 4) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C3", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { Store (0x26, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { // Rail Name, Resistor Value Package () { "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package () { "V3P3_SLOTE", 10, // Channel 1 "V3P3_LAN", 10, // Channel 2 "V3P3DX_EDP", 10, // Channel 3 "VCC_EDP_BKLT", 10 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { // Value Package () { 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package () { 10000, // Channel 1 10000, // Channel 2 10000, // Channel 3 10000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmAep}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA04 Scope End } // Scope I2C3 Scope(\_SB.PC00.I2C5) { // // PA01 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA01) { Name(_HID, "MCHP1930") Name(_UID, 1) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C5", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Store (0x10, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "AUDIO_V1P8", 10, // Channel 1 "AUDIO_V5", 10, // Channel 2 "AUDIO_V12S", 10, // Channel 3 "STORAGE_PCH_SSD", 10 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 10000, // Channel 1 10000, // Channel 2 10000, // Channel 3 10000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA01 Scope End // // PA02 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA02) { Name(_HID, "MCHP1930") Name(_UID, 2) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C5", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Store (0x14, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "SYSTEM_VCCCORE_VIN", 2, // Channel 1 "SYSTEM_VCCGT_VIN", 2, // Channel 2 "CPU_V1P8", 10, // Channel 3 "CPU_V1P05", 5 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 2000, // Channel 1 2000, // Channel 2 10000, // Channel 3 5000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA02 Scope End // // PA03 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA03) { Name(_HID, "MCHP1930") Name(_UID, 3) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C5", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Store (0x16, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { Package() { // Rail Name, Resistor Value "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package() { // Rail Name, Resistor Value "SYSTEM_VCCINAUX_VIN", 5, // Channel 1 "CPU_VCCDD2", 5, // Channel 2 "DRAM_V5A", 2, // Channel 3 "SYSTEM_VBATA", 1 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { Package() { // Value 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package() { // Value 5000, // Channel 1 5000, // Channel 2 2000, // Channel 3 1000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA03 Scope End // // PA04 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA04) { Name(_HID, "MCHP1930") Name(_UID, 4) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C5", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Store (0x18, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { // Rail Name, Resistor Value Package () { "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package () { "PLATFORM_V1P8A", 5, // Channel 1 "PCH_V0P82A", 2 , // Channel 2 "PLATFORM_V3P3A_DSW", 1, // Channel 3 "PLATFORM_V5A_DS3", 1 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { // Value Package () { 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package () { 5000, // Channel 1 2000, // Channel 2 1000, // Channel 3 1000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA04 Scope End // // PA05 Device: Defines how the PAC193x is connected to the I2C Controller. // Device(PA05) { Name(_HID, "MCHP1930") Name(_UID, 5) // Lowest power D-State supported by the device is D3 Name (_S0W, 3) // Device Status: present, enabled, and functioning properly Method(_STA, 0x0, NotSerialized) { If(POME) { Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Return(0x0F) } } } Return (0x00) } // // Current Resources Settings // Method(_CRS, 0x0, NotSerialized) { Name(RBUF, ResourceTemplate() { I2CSerialBus(0x0, // 7-bit Peripheral Address ControllerInitiated, // Peripheral or Controller? 400000, // Connection Speed in hz AddressingMode7Bit, // 7-bit or 10-bit addressing? "\\_SB.PC00.I2C5", // I2C Controller to which PAC is connected 0, // Resource Index ResourceConsumer, // Consumer or Producer? I2CB) // Descriptor name }) CreateWordField(RBUF,I2CB._ADR,BADR) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { Store (0x1C, BADR) } Default { Store (0x0, BADR) } } Return(RBUF) } // // _DSM - Device Specific Method // // This method returns configuration information that tells the driver // which devices each line in the PAC193x is wired to monitor. // Names of the monitored devices must come from the Microsoft-defined // power rail taxonomy. // // The UUID for the Microchip PAC193x's DSM is {033771E0-1705-47B4-9535-D1BBE14D9A09}. // This is unique to the device, and must match what the Windows PAC193x driver expects. // // Returns: // Either: A Buffer (for Functions 0 and 2, or an error) // A Package containing EMI resources (rail/resistor pairs) // // Input Arguments (per _DSM standard): // // Arg0: UUID - Function Identifier // Arg1: Integer - Revision // Arg2: Integer - Function Index // Arg3: Package - Parameters (not used in our implementation) // Function(_DSM, {BuffObj, PkgObj}, {BuffObj, IntObj, IntObj, PkgObj}) { // // Is our UUID being invoked? // if(LNotEqual(Arg0, ToUUID("033771E0-1705-47B4-9535-D1BBE14D9A09"))) { return(Buffer() {0x0}) // incorrect UUID, return NULL for error } // // Switch based on the function number requested... // switch(ToInteger(Arg2)) { // // Function zero returns a bit-mask of supported functions // case(0) { switch(ToInteger(Arg1)) // revision check { case(0) { return (Buffer() {0x3}) // Revision 0: function 1 is supported } case(1) { return (Buffer() {0x7f}) // Revision 1: functions 1->6 are supported } } break; } // Function 1 returns the channel "Rail Name" and the Resistor Value expressed in milli-Ohms. case(1) { // All Revisions supported (0 and 1 presently defined) Name(PKG1, Package() { // Rail Name, Resistor Value Package () { "", 0, // Channel 1 "", 0, // Channel 2 "", 0, // Channel 3 "", 0 // Channel 4 }, Package () { "STORAGE_CPU_SSD", 10, // Channel 1 "CONNECTIVITY_WLAN", 2, // Channel 2 "CONNECTIVITY_LAN", 10, // Channel 3 "CONNECTIVITY_WWAN", 10 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG1, 1))) } Default { return(DerefOf(Index(PKG1, 0))) } } } // Function 2 returns the Resistor values expressed in micro-Ohms. case(2) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return enhanced precision resistor values. Name(PKG2, Package() { // Value Package () { 0, // Channel 1 0, // Channel 2 0, // Channel 3 0 // Channel 4 }, Package () { 10000, // Channel 1 2000, // Channel 2 10000, // Channel 3 10000 // Channel 4 } }) Switch (ToInteger(PLID)) { Case (Package () {BoardIdAdlSAdpSSbgaDdr5SODimmCrb}) { return(DerefOf(Index(PKG2, 1))) } Default { return(DerefOf(Index(PKG2, 0))) } } } // Function 3 returns the EMI enabled/disabled flags case(3) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return ON/OFF flags. Name(BUF3, Package() { 0xF // driver EMI ENABLE mask, CH1:CH2:CH3:CH4 - 1b=ON, 0b=OFF // EMI mask bit set but rail name is NULL -> EMI is not created (private channel) // channel name valid but mask bit not set -> EMI is not created (private channel) }) return(BUF3) } // Function 4 returns the channel bipolar settings case(4) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. // Return the target NEG_PWR flags. Name(BUF4, Package() { 0x00 // CH1:CH2:CH3:CH4-BIDI : CH1:CH2:CH3:CH4-BIDV }) return(BUF4) } // Function 5 returns the SPS for ACTIVE and IDLE case(5) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF5, Package() { 1024, // ACTIVE sps - accepted values = {1024, 256, 64, 8} 8 // IDLE sps - accepted values = {1024, 256, 64, 8} }) return(BUF5) } // Function 6 returns the watchdog interval case(6) { If(LLess(Arg1,1)){ break; } // Revision 0 not supported. Name(BUF6, Package() { 900 // seconds (min=60, max=900) }) return(BUF6) } } // switch(Arg2) // // Return an error (a buffer with a value of zero) // if we didn't return anything else above // return(Buffer() {0x0}) } // _DSM } // PowerMeter Device PA05 Scope End } // Scope I2C5