Skip to content

Commit

Permalink
soc/intel/tigerlake: Remove IOM Mctp command from TCSS ASL
Browse files Browse the repository at this point in the history
Port fix from Alder Lake to not set/reset IOM MCTP during
D3 cold entry or exit.

Ports 5008d34 ("soc/intel/adl: Remove IOM Mctp command from TCSS
ASL"):

> Recently as part of s0ix hang issue, it was found that sending IOM
> MCTP command as part of TCSS D3 Cold enter-exit sequence created an
> issue.

> We discovered that due to change in hardware sequence, ADL should not
> set/reset IOM MCTP during D3 cold entry or exit. This patch removes
> the bit setting from ASL file to prevent hang in the system.

> This patch also removes obsolete Pcode mailbox communication which
> is no longer required for ADL.

> BUG=b:220796339
> BRANCH=firmware-brya-14505.B
> TEST=Check if hang issue is resolved with the CL and no other
> regression
> observed

> https://review.coreboot.org/c/coreboot/+/62861

Test: build/boot drobit to Win11. Verify TCSS XHCI power management
working and USB Root Hub doesn't Code 43 in device manager

Change-Id: I40a537fd2b0c821caf282f52aaff1874f54325f1
Signed-off-by: CoolStar <coolstarorganization@gmail.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/80719
Reviewed-by: Matt DeVillier <matt.devillier@gmail.com>
Reviewed-by: Paul Menzel <paulepanter@mailbox.org>
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
  • Loading branch information
coolstar authored and crawfxrd committed Feb 29, 2024
1 parent e824c88 commit e8df441
Showing 1 changed file with 1 addition and 142 deletions.
143 changes: 1 addition & 142 deletions src/soc/intel/tigerlake/acpi/tcss.asl
Original file line number Diff line number Diff line change
Expand Up @@ -363,12 +363,6 @@ Scope (\_SB.PCI0)
Offset(0x10),
RBAR, 64 /* RegBar, offset 0x7110 in MCHBAR */
}
Field (MBAR, DWordAcc, NoLock, Preserve)
{
Offset(0x304), /* PRIMDN_MASK1_0_0_0_MCHBAR_IMPH, offset 0x7404 */
, 31,
TCD3, 1 /* [31:31] TCSS IN D3 bit */
}

/*
* Operation region defined to access the pCode mailbox interface. Get the MCHBAR
Expand Down Expand Up @@ -404,101 +398,6 @@ Scope (\_SB.PCI0)
Return (0)
}

/*
* Method to send pCode MailBox command TCSS_DEVEN_MAILBOX_SUBCMD_GET_STATUS
*
* Result will be updated in DATA[1:0]
* DATA[0:0] TCSS_DEVEN_CURRENT_STATE:
* 0 - TCSS Deven in normal state.
* 1 - TCSS Deven is cleared by BIOS Mailbox request.
* DATA[1:1] TCSS_DEVEN_REQUEST_STATUS:
* 0 - IDLE. TCSS DEVEN has reached its final requested state.
* 1 - In Progress. TCSS DEVEN is currently in progress of switching state
* according to given request (bit 0 reflects source state).
*
* Return 0x00 - TCSS Deven in normal state
* 0x01 - TCSS Deven is cleared by BIOS Mailbox request
* 0x1x - TCSS Deven is in progress of switching state according to given request
* 0xFE - Command timeout
* 0xFF - Command corrupt
*/
Method (DSGS, 0)
{
If ((PMBY () == 0)) {
PMBC = MAILBOX_BIOS_CMD_TCSS_DEVEN_INTERFACE
PSCM = TCSS_DEVEN_MAILBOX_SUBCMD_GET_STATUS
PMBR = 1
If (PMBY () == 0) {
Local0 = PMBD
Local1 = PMBC
Stall (10)
If ((Local0 != PMBD) || (Local1 != PMBC)) {
Printf("pCode MailBox is corrupt.")
Return (0xFF)
}
Return (Local0)
} Else {
Printf("pCode MailBox is not ready.")
Return (0xFE)
}
} Else {
Printf("pCode MailBox is not ready.")
Return (0xFE)
}
}

/*
* Method to send pCode MailBox command TCSS_DEVEN_MAILBOX_SUBCMD_TCSS_CHANGE_REQ
*
* Arg0 : 0 - Restore to previously saved value of TCSS DEVEN
* 1 - Save current TCSS DEVEN value and clear it
*
* Return 0x00 - MAILBOX_BIOS_CMD_CLEAR_TCSS_DEVEN command completed
* 0xFD - Input argument is invalid
* 0xFE - Command timeout
* 0xFF - Command corrupt
*/
Method (DSCR, 1)
{
If (Arg0 > 1) {
Printf("pCode MailBox is corrupt.")
Return (0xFD)
}
If ((PMBY () == 0)) {
PMBC = MAILBOX_BIOS_CMD_TCSS_DEVEN_INTERFACE
PSCM = TCSS_DEVEN_MAILBOX_SUBCMD_TCSS_CHANGE_REQ
PMBD = Arg0
PMBR = 1
If ((PMBY () == 0)) {
Local0 = PMBD
Local1 = PMBC
Stall (10)
If ((Local0 != PMBD) || (Local1 != PMBC)) {
Printf("pCode MailBox is corrupt.")
Return (0xFF)
}
/* Poll TCSS_DEVEN_REQUEST_STATUS, timeout value is 10ms. */
Local0 = 0
While ((DSGS () & 0x10) && (Local0 < 100)) {
Stall (100)
Local0++
}
If (Local0 == 100) {
Printf("pCode MailBox is not ready.")
Return (0xFE)
} Else {
Return (0x00)
}
} Else {
Printf("pCode MailBox is not ready.")
Return (0xFE)
}
} Else {
Printf("pCode MailBox is not ready.")
Return (0xFE)
}
}

/*
* IOM REG BAR Base address is in offset 0x7110 in MCHBAR.
*/
Expand Down Expand Up @@ -707,26 +606,7 @@ Scope (\_SB.PCI0)
}
Else
{
/*
* Program IOP MCTP Drop (TCSS_IN_D3) after D3 cold exit and
* acknowledgement by IOM.
*/
TCD3 = 0
/*
* If the TCSS Deven is cleared by BIOS Mailbox request, then
* restore to previously saved value of TCSS DEVNE.
*/
Local0 = 0
While (\_SB.PCI0.TXHC.VDID == 0xFFFFFFFF) {
If (DSGS () == 1) {
DSCR (0)
}
Local0++
If (Local0 == 5) {
Printf("pCode mailbox command failed.")
Break
}
}
Printf("TCSS D3 exit.");
}
}
Else {
Expand All @@ -743,27 +623,6 @@ Scope (\_SB.PCI0)
Return
}

/*
* If the TCSS Deven in normal state, then Save current TCSS DEVEN value and
* clear it.
*/
Local0 = 0
While (\_SB.PCI0.TXHC.VDID != 0xFFFFFFFF) {
If (DSGS () == 0) {
DSCR (1)
}
Local0++
If (Local0 == 5) {
Printf("pCode mailbox command failed.")
Break
}
}

/*
* Program IOM MCTP Drop (TCSS_IN_D3) in D3Cold entry before entering D3 cold.
*/
TCD3 = 1

/* Request IOM for D3 cold entry sequence. */
TD3C = 1
}
Expand Down

0 comments on commit e8df441

Please sign in to comment.