This page captures the investigation notes and references to implementation for ACPI device runtime power management.
Device power management on NXP I.MX8MP Platform
We have implemented device power management for few devices (I2C, UART) in IMX8MP platform. Changes to different components are given below.
...
Code Block |
---|
Device (I2C1) { Name (_HID, "NXP0104") Name (_HRV, 0x1) Name (_UID, 0x1) Name (_CLK, 13) Method (_STA) { Return(0xf) } Name (_PRS, ResourceTemplate () // _PRS: Possible Resource Settings { Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 67 } }) Method (_CRS, 0x0, NotSerialized) { Name ( RBUF, ResourceTemplate () { MEMORY32FIXED(ReadWrite, 0x30A20000, 0x14, ) Interrupt(ResourceConsumer, Level, ActiveHigh, Exclusive) { 67 } }) Return(RBUF) } Method (_PS0, 0, NotSerialized) // _PS0: Power State 0 { SC07(_CLK, 1) } Method (_PS3, 0, NotSerialized) // _PS3: Power State 3 { SC07(_CLK, 0) } } // Operation Region for Shared memory transport OperationRegion(SHM, SystemMemory, 0x403f0000, 44) Field(SHM, ByteAcc, NoLock, Preserve) { RES1, 32, SCHS, 32, RES2, 64, SCHF, 32, SLEN, 32, SMSH, 32, SPLD, 128, } // SC07 - SCMI CLOCK_CONFIG_SET // Arg0: SCMI Clock ID // Arg1: Clock Attributes ( 1 -> Enable, 0 -> Disable) // Returns: 1 if config is set succesfully, 0 otherwise Method (SC07, 2, Serialized) { Name(BUFF, Buffer(8){}) CreateDWordField(BUFF, 0, PLW0) CreateDWordField(BUFF, 4, PLW1) PLW0 = Arg0 PLW1 = Arg1 local0 = SMT(0x14, 0x7, BUFF) CreateDWordField(local0, 0, RET) Return (RET) } // SMT - Interface to send SCMI message over shared memory channel // Arg0: SCMI Protocol ID // Arg1: SCMI Message ID // Arg2: SCMI Input Argument Buffer // Returns: SCMI Payload Method (SMT, 3, Serialized) { // SCMI Message header with SCMI protocol and message ID Name(MSGH, Buffer(8){}) CreateField(MSGH, 10, 8, PROI) CreateField(MSGH, 0, 8, MSGI) PROI = Arg0 MSGI = Arg1 SCHS = 0x0 SCHF = 0x0 SMSH = MSGH SLEN = 4 + sizeof(Arg2) SPLD = Arg2 // SMC call OperationRegion(AFFH, FFixedHW, 1, 8) Field (AFFH, BufferAcc, NoLock, Preserve) { SMCC, 64 } Name(BUFF, Buffer(8){}) CreateQWordField(BUFF, 0x00, BFX0) BFX0 = 0xC20000FE // SCMI FID BUFF = (SMCC = BUFF) Return (SPLD) } |
Power Management with SCMI on RD-N2 Platform
ACPI power management with SCMI on RdN2 platforms
...