summaryrefslogtreecommitdiffstats
path: root/sys/mips
diff options
context:
space:
mode:
authoradrian <adrian@FreeBSD.org>2012-01-07 04:13:25 +0000
committeradrian <adrian@FreeBSD.org>2012-01-07 04:13:25 +0000
commit6707636c2f8076f7d1a57ec36c55521062e7ca0a (patch)
tree4d274863f0ce8fd0c6c8565a2507cc4dfcbc06e3 /sys/mips
parent0c739e2b567738ab61e63977eff92d9cedd6020e (diff)
downloadFreeBSD-src-6707636c2f8076f7d1a57ec36c55521062e7ca0a.zip
FreeBSD-src-6707636c2f8076f7d1a57ec36c55521062e7ca0a.tar.gz
Fix the ar724x shift calculation when writing to the PCI config space.
This was preventing the ath driver from being loaded at runtime. It worked fine when compiled statically into the kernel but not when kldload'ed after the system booted. The root cause was that PCIR_INTLINE (register 60) was being overwritten by zeros when register 62 was being written to. A subsequent read of this register would return 0, and thus the rest of the PCI glue assumed an IRQ resource had already been allocated. This caused the device to fail to attach at runtime as the device itself didn't contain any IRQ resources. TODO: go back over the ar71xx and ar724x PCI config read/write code and ensure it's correct.
Diffstat (limited to 'sys/mips')
-rw-r--r--sys/mips/atheros/ar724x_pci.c2
1 files changed, 1 insertions, 1 deletions
diff --git a/sys/mips/atheros/ar724x_pci.c b/sys/mips/atheros/ar724x_pci.c
index 59be9c0..f3519c6 100644
--- a/sys/mips/atheros/ar724x_pci.c
+++ b/sys/mips/atheros/ar724x_pci.c
@@ -93,7 +93,7 @@ ar724x_pci_write(uint32_t reg, uint32_t offset, uint32_t data, int bytes)
uint32_t val, mask, shift;
/* Register access is 32-bit aligned */
- shift = 8 * (offset & (bytes % 4));
+ shift = (offset & 3) * 8;
if (bytes % 4)
mask = (1 << (bytes * 8)) - 1;
else
OpenPOWER on IntegriCloud