EDAC, pnd2: Properly toggle hidden state for P2SB PCI device

Properly handle hidden state of P2SB PCI device (DEV:D, FUN:0) for
Apollo Lake.

Signed-off-by: Qiuxu Zhuo <[email protected]>
Cc: Tony Luck <[email protected]>
Cc: linux-edac <[email protected]>
Link: http://lkml.kernel.org/r/[email protected]
Signed-off-by: Borislav Petkov <[email protected]>
This commit is contained in:
Qiuxu Zhuo 2017-08-14 23:49:05 +08:00 • committed by Borislav Petkov
commit bc8f10babc

View file

@ -161,8 +161,12 @@ static int _apl_rd_reg(int port, int off, int op, u32 *data)
{
int retries = 0xff, ret;
u16 status;
u8 hidden;
P2SB_WRITE(byte, P2SB_HIDE_OFF, 0);
/* Unhide the P2SB device, if it's hidden */
P2SB_READ(byte, P2SB_HIDE_OFF, &hidden);
if (hidden)
P2SB_WRITE(byte, P2SB_HIDE_OFF, 0);
if (p2sb_is_busy(&status)) {
ret = -EAGAIN;
@ -185,7 +189,9 @@ static int _apl_rd_reg(int port, int off, int op, u32 *data)
P2SB_READ(dword, P2SB_DATA_OFF, data);
ret = (status >> 1) & 0x3;
out:
P2SB_WRITE(byte, P2SB_HIDE_OFF, 1);
/* Hide the P2SB device, if it was hidden before */
if (hidden)
P2SB_WRITE(byte, P2SB_HIDE_OFF, hidden);
return ret;
}