coreboot/src/soc
Cliff Huang 0539962835 soc/intel/common/block/pcie/rtd3: Fix root port _ON logic
_ON() calls _STA() at the beginning. If _STA() indicates the device is
ON, it exits immediately.  The solution is to move this _STA() check
into the ONSK logic. In general cases, ONSK remains '0'.

NOTE: RTD3 provides a way to skip _OFF() and _ON() methods following
by a device reset such as WWAN device. When such device calls its
_RST(), it increments OFSK. When the following _OFF() is called, it
was scheduled to skip, it will also increments ONSK. Similarly, when
the following _ON() is called, it checks if the previous _OFF was
skipped or not. If skipped, it needs to do the same. In normal
suspend/resume cases, these two variables remains '0'. No _OFF() and
 _ON() calls are skipped.

entire generated code:

Method (_ON, 0, Serialized)  // _ON_: Power On
{
    If ((ONSK == Zero))
    {
        Local0 = \_SB.PCI0.RP01.RTD3._STA ()
        If ((Local0 == One))
        {
            Return (One)
        }

        Acquire (\_SB.PCI0.R3MX, 0xFFFF)
        EMPG = Zero
        Local7 = 0x06
        While ((Local7 > Zero))
        {
            If ((AMPG == Zero))
            {
                Break
            }

            Sleep (0x10)
            Local7--
        }

        Release (\_SB.PCI0.R3MX)
        \_SB.PCI0.PMC.IPCS (0xAC, Zero, 0x10, 0x00000020, 0x00000020,
          0x00000020, 0x00000020)
        \_SB.PCI0.STXS (0x015E)
        If ((NCB7 == One))
        {
            L23R = One
            Local7 = 0x14
            While ((Local7 > Zero))
            {
                If ((L23R == Zero))
                {
                    Break
                }

                Sleep (0x10)
                Local7--
            }

            NCB7 = Zero
            Local7 = 0x08
            While ((Local7 > Zero))
            {
                If ((LASX == One))
                {
                    Break
                }

                Sleep (0x10)
                Local7--
            }
        }
    }
    Else
    {
        ONSK--
    }
}

BUG=b:249931687
BUG=b:241850118
TEST=Use above functions and check the generated SSDT table after OS
boot.

Signed-off-by: Cliff Huang <cliff.huang@intel.com>
Change-Id: Id1ea2e78e98d334a90294ee6cdd14ae2de9b9b62
Reviewed-on: https://review.coreboot.org/c/coreboot/+/72826
Reviewed-by: Nick Vaccaro <nvaccaro@google.com>
Reviewed-by: Kane Chen <kane.chen@intel.corp-partner.google.com>
Reviewed-by: Jérémy Compostella <jeremy.compostella@intel.com>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
2023-02-16 14:12:07 +00:00
..
amd soc/amd/common: Move missing APCB warning to common area 2023-02-15 13:07:04 +00:00
cavium treewide: Remove duplicated include <device/pci.h> 2023-02-01 03:03:34 +00:00
example/min86
intel soc/intel/common/block/pcie/rtd3: Fix root port _ON logic 2023-02-16 14:12:07 +00:00
mediatek mb/google/geralt: Add power-on sequence for BOE_TV110C9M_LL0 2023-02-09 09:19:07 +00:00
nvidia treewide: stop calling custom TPM log "TCPA" 2023-01-11 16:00:55 +00:00
qualcomm soc/qualcomm/sc7280: Add support to configure 6bit color depth 2023-02-13 12:38:19 +00:00
rockchip cbmem_top_chipset: Change the return value to uintptr_t 2022-11-18 16:00:45 +00:00
samsung treewide: Fix old-style declarations 2023-01-17 04:23:49 +00:00
sifive/fu540 cbmem_top_chipset: Change the return value to uintptr_t 2022-11-18 16:00:45 +00:00
ti src/soc/ti: Remove unnecessary space after casts 2022-11-22 13:42:28 +00:00
ucb/riscv cbmem_top_chipset: Change the return value to uintptr_t 2022-11-18 16:00:45 +00:00