Module Name: src
Committed By: soren
Date: Thu Jul 18 22:14:54 UTC 2013
Modified Files:
src/sys/dev/pci: ichsmb.c piixpm.c
Log Message:
Clear errors before beginning a transfer.
Closes PR port-i386/46792.
To generate a diff of this commit:
cvs rdiff -u -r1.31 -r1.32 src/sys/dev/pci/ichsmb.c
cvs rdiff -u -r1.40 -r1.41 src/sys/dev/pci/piixpm.c
Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.
Modified files:
Index: src/sys/dev/pci/ichsmb.c
diff -u src/sys/dev/pci/ichsmb.c:1.31 src/sys/dev/pci/ichsmb.c:1.32
--- src/sys/dev/pci/ichsmb.c:1.31 Thu Jul 18 03:14:09 2013
+++ src/sys/dev/pci/ichsmb.c Thu Jul 18 22:14:54 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: ichsmb.c,v 1.31 2013/07/18 03:14:09 msaitoh Exp $ */
+/* $NetBSD: ichsmb.c,v 1.32 2013/07/18 22:14:54 soren Exp $ */
/* $OpenBSD: ichiic.c,v 1.18 2007/05/03 09:36:26 dlg Exp $ */
/*
@@ -22,7 +22,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: ichsmb.c,v 1.31 2013/07/18 03:14:09 msaitoh Exp $");
+__KERNEL_RCSID(0, "$NetBSD: ichsmb.c,v 1.32 2013/07/18 22:14:54 soren Exp $");
#include <sys/param.h>
#include <sys/device.h>
@@ -224,6 +224,13 @@ ichsmb_i2c_exec(void *cookie, i2c_op_t o
"flags 0x%02x\n", device_xname(sc->sc_dev), op, addr, cmdlen,
len, flags));
+ /* Clear status bits */
+ bus_space_write_1(sc->sc_iot, sc->sc_ioh, LPCIB_SMB_HS,
+ LPCIB_SMB_HS_INTR | LPCIB_SMB_HS_DEVERR |
+ LPCIB_SMB_HS_BUSERR | LPCIB_SMB_HS_FAILED);
+ bus_space_barrier(sc->sc_iot, sc->sc_ioh, LPCIB_SMB_HS, 1,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+
/* Wait for bus to be idle */
for (retries = 100; retries > 0; retries--) {
st = bus_space_read_1(sc->sc_iot, sc->sc_ioh, LPCIB_SMB_HS);
Index: src/sys/dev/pci/piixpm.c
diff -u src/sys/dev/pci/piixpm.c:1.40 src/sys/dev/pci/piixpm.c:1.41
--- src/sys/dev/pci/piixpm.c:1.40 Tue Feb 14 15:08:07 2012
+++ src/sys/dev/pci/piixpm.c Thu Jul 18 22:14:54 2013
@@ -1,4 +1,4 @@
-/* $NetBSD: piixpm.c,v 1.40 2012/02/14 15:08:07 pgoyette Exp $ */
+/* $NetBSD: piixpm.c,v 1.41 2013/07/18 22:14:54 soren Exp $ */
/* $OpenBSD: piixpm.c,v 1.20 2006/02/27 08:25:02 grange Exp $ */
/*
@@ -22,7 +22,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: piixpm.c,v 1.40 2012/02/14 15:08:07 pgoyette Exp $");
+__KERNEL_RCSID(0, "$NetBSD: piixpm.c,v 1.41 2013/07/18 22:14:54 soren Exp $");
#include <sys/param.h>
#include <sys/systm.h>
@@ -390,6 +390,13 @@ piixpm_i2c_exec(void *cookie, i2c_op_t o
DPRINTF(("%s: exec: op %d, addr 0x%x, cmdlen %zu, len %zu, flags 0x%x\n",
device_xname(sc->sc_dev), op, addr, cmdlen, len, flags));
+ /* Clear status bits */
+ bus_space_write_1(sc->sc_smb_iot, sc->sc_smb_ioh, PIIX_SMB_HS,
+ PIIX_SMB_HS_INTR | PIIX_SMB_HS_DEVERR |
+ PIIX_SMB_HS_BUSERR | PIIX_SMB_HS_FAILED);
+ bus_space_barrier(sc->sc_smb_iot, sc->sc_smb_ioh, PIIX_SMB_HS, 1,
+ BUS_SPACE_BARRIER_READ | BUS_SPACE_BARRIER_WRITE);
+
/* Wait for bus to be idle */
for (retries = 100; retries > 0; retries--) {
st = bus_space_read_1(sc->sc_smb_iot, sc->sc_smb_ioh,