coreboot/src/soc/amd/picasso/acpi/aoac.asl

146 lines
3.2 KiB
Plaintext

/* SPDX-License-Identifier: GPL-2.0-or-later */
#include <amdblocks/acpimmio_map.h>
#define AOAC_DEVICE(DEV_NAME, DEV_ID, SX) \
PowerResource(DEV_NAME, SX, 0) { \
OperationRegion (AOAC, SystemMemory, ACPIMMIO_AOAC_BASE + 0x40 + (DEV_ID << 1), 2) \
Field (AOAC, ByteAcc, NoLock, Preserve) { \
/* \
* Target Device State \
* \
* 0 = D0 - Uninitialized \
* 1 = D0 - Initialized \
* 2 = D1/D2/D3Hot \
* 3 = D3Cold \
* \
* This field is only used to cut off register access. It does not \
* control any power states. D3Cold is the only value that will \
* cut off register access. All other values will allow register \
* access and are purely informational. \
*/ \
TDS, 2, \
\
DS, 1, /* Device State - Purely informational */ \
\
/* \
* Power On Dev \
* \
* 1 = Perform hardware sequence to power on the device \
* 0 = Perform hardware sequence to power off the device \
* \
* This register is only valid when Is Software Control = 0. \
*/ \
POD, 1, \
\
/* Software Power On Reset B */ \
SPRB, 1, \
/* Software Ref Clock OK */ \
SRCO, 1, \
/* Software Reset B */ \
SRB, 1, \
/* \
* Is Software Control \
* \
* 1 = Allow software to control Power On Reset B, \
* Ref Clock OK, and Reset B. \
* 0 = Hardware control \
*/ \
ISWC, 1, \
\
/* Power Reset B State */ \
PRBS, 1, \
/* Ref Clock OK State */ \
RCOS, 1, \
/* Reset B State */ \
RBS, 1, \
/* Device Off Gating State */ \
DOGS, 1, \
/* D3 Cold State */ \
D3CS, 1, \
/* Device Clock OK State */ \
COS, 1, \
/* State of device */ \
STA0, 1, \
/* State of device */ \
STA1, 1, \
} \
Method(_STA) { \
Local0 = (PRBS && RCOS && RBS) \
\
Printf("AOAC.%s._STA: %o", #DEV_NAME, Local0) \
\
If (Local0) { \
Return (1) \
} Else { \
Return (0) \
} \
} \
Method(_ON, 0, Serialized) { \
Printf("AOAC.%s._ON", #DEV_NAME) \
\
ISWC=0 \
POD=1 \
\
While (!PRBS || !RCOS || !RBS) { \
Printf ("Waiting for device to power on") \
Stall (100) \
} \
\
Printf("Done waiting") \
} \
Method(_OFF, 0, Serialized) { \
Printf("AOAC.%s._OFF", #DEV_NAME) \
\
ISWC=0 \
POD=0 \
\
While (PRBS || RCOS || RBS) { \
Printf ("Waiting for device to power off") \
Stall (100) \
} \
\
Printf("Done waiting") \
} \
Method(_RST, 0, Serialized) { \
Printf("AOAC.%s._RST", #DEV_NAME) \
\
ISWC=1 \
SRB=1 \
\
/* Assert the SwRstB signal for 200 us */ \
Stall (200) \
\
SRB=0 \
ISWC=0 \
\
While (!PRBS || !RCOS || !RBS) { \
Printf ("Waiting for device to complete reset") \
Stall (100) \
} \
} \
}
Device (AOAC) {
Name (_HID, EISAID("PNP0C02")) // ID for Motherboard resources
Method (_STA, 0x0, NotSerialized)
{
/*
* This case is used to indicate a valid device for which no
* device driver should be loaded (for example, a bridge
* device.) Children of this device may be present and valid.
* OSPM should continue enumeration below a device whose _STA
* returns this bit combination.
*/
Return (0x08)
}
AOAC_DEVICE(I2C2, 7, 0)
AOAC_DEVICE(I2C3, 8, 0)
AOAC_DEVICE(FUR1, 12, 0)
AOAC_DEVICE(FUR2, 16, 0)
AOAC_DEVICE(FUR3, 26, 0)
}