From: Qiuxu Zhuo <[email protected]>

commit bc8f10babcc27c1f4d8e80d91cc543eabf9125c4 upstream.

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]>
Signed-off-by: Liwei Song <[email protected]>
---
 drivers/edac/pnd2_edac.c | 10 ++++++++--
 1 file changed, 8 insertions(+), 2 deletions(-)

diff --git a/drivers/edac/pnd2_edac.c b/drivers/edac/pnd2_edac.c
index 89cdd9a7a733..4395c84cdcbf 100644
--- a/drivers/edac/pnd2_edac.c
+++ b/drivers/edac/pnd2_edac.c
@@ -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;
 }
-- 
2.7.4

-- 
_______________________________________________
linux-yocto mailing list
[email protected]
https://lists.yoctoproject.org/listinfo/linux-yocto

Reply via email to