Module Name: src
Committed By: matt
Date: Mon Jan 9 22:03:13 UTC 2012
Modified Files:
src/sys/arch/mips/rmi [matt-nb5-mips64]: rmixlp_pcie.c
Log Message:
Use a map of bar0 sizes instead of a switch statement.
Return the proper IRT entry for the 2nd i2c controller.
To generate a diff of this commit:
cvs rdiff -u -r1.1.2.7 -r1.1.2.8 src/sys/arch/mips/rmi/rmixlp_pcie.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/arch/mips/rmi/rmixlp_pcie.c
diff -u src/sys/arch/mips/rmi/rmixlp_pcie.c:1.1.2.7 src/sys/arch/mips/rmi/rmixlp_pcie.c:1.1.2.8
--- src/sys/arch/mips/rmi/rmixlp_pcie.c:1.1.2.7 Wed Jan 4 16:17:54 2012
+++ src/sys/arch/mips/rmi/rmixlp_pcie.c Mon Jan 9 22:03:13 2012
@@ -1,4 +1,4 @@
-/* $NetBSD: rmixlp_pcie.c,v 1.1.2.7 2012/01/04 16:17:54 matt Exp $ */
+/* $NetBSD: rmixlp_pcie.c,v 1.1.2.8 2012/01/09 22:03:13 matt Exp $ */
/*
* Copyright (c) 2001 Wasabi Systems, Inc.
@@ -40,7 +40,7 @@
*/
#include <sys/cdefs.h>
-__KERNEL_RCSID(0, "$NetBSD: rmixlp_pcie.c,v 1.1.2.7 2012/01/04 16:17:54 matt Exp $");
+__KERNEL_RCSID(0, "$NetBSD: rmixlp_pcie.c,v 1.1.2.8 2012/01/09 22:03:13 matt Exp $");
#include "opt_pci.h"
#include "pci.h"
@@ -132,6 +132,8 @@ static struct rmixlp_pcie_softc {
[RMIXLP_PCITAG_IDX(RMIXLP_NAE_PCITAG)] = 4-0x20000,
[RMIXLP_PCITAG_IDX(RMIXLP_POE_PCITAG)] = 4-0x2000,
[RMIXLP_PCITAG_IDX(RMIXLP_AHCI_PCITAG)] = 4-0x400,
+ [RMIXLP_PCITAG_IDX(RMIXLP_FMN_PCITAG)] = 4-0x4000,
+ [RMIXLP_PCITAG_IDX(RMIXLP_SRIO_PCITAG)] = 4-0x20000,
},
};
@@ -962,49 +964,22 @@ rmixlp_pcie_conf_read(void *v, pcitag_t
&& offset == 0x60)
offset = 0x100;
+ /*
+ * I2C incorrectly reports the wrong IRT for the 2nd I2C controller
+ * so correct it here.
+ */
+ if (tag == RMIXLP_I2C2_PCITAG && offset == PCI_RMIXLP_IRTINFO)
+ return 0x00010088;
+
if (_RMIXL_PCITAG_BUS(tag) == 0 && (_RMIXL_PCITAG_DEV(tag) & 7) > 0) {
- if (tag == sc->sc_mapprobe) {
- if (offset == PCI_MAPREG_START + 4) {
- aprint_debug_dev(sc->sc_dev,
- "tag %#lx reg %#x: %#x\n",
- tag, offset, 0xffffffff);
- return 0xffffffff;
- }
-#if 0
- return sc->sc_bus0_bar0_sizes[RMIXLP_PCITAG_IDX(tag)];
-#else
- switch (_RMIXL_PCITAG_DEV(tag)) {
- case _RMIXL_PCITAG_DEV(RMIXLP_EHCI0_PCITAG):
- rv = 4-0x400;
- break;
- case _RMIXL_PCITAG_DEV(RMIXLP_NAE_PCITAG):
- switch (_RMIXL_PCITAG_FUNC(tag)) {
- case _RMIXL_PCITAG_FUNC(RMIXLP_NAE_PCITAG):
- rv = 4-0x20000;
- break;
- case _RMIXL_PCITAG_FUNC(RMIXLP_POE_PCITAG):
- rv = 4-0x2000;
- break;
- case _RMIXL_PCITAG_FUNC(RMIXLP_AHCI_PCITAG):
- rv = 4-0x400;
- break;
- default:
- rv = 0xffffffff;
- break;
- }
- break;
- case _RMIXL_PCITAG_DEV(RMIXLP_FMN_PCITAG):
- rv = 4-0x4000;
- break;
- default:
- rv = 0xffffffff;
- break;
- }
+ if (tag == sc->sc_mapprobe && (offset & -8) == PCI_BAR0) {
+ rv = (offset == PCI_BAR0)
+ ? sc->sc_bus0_bar0_sizes[RMIXLP_PCITAG_IDX(tag)]
+ : 0xffffffff;
aprint_debug_dev(sc->sc_dev,
"conf_read: tag %#lx reg %#x: %#x\n",
tag, offset, rv);
return rv;
-#endif
}
}