diff options
author | Warner Losh <imp@FreeBSD.org> | 2005-10-08 06:57:13 +0000 |
---|---|---|
committer | Warner Losh <imp@FreeBSD.org> | 2005-10-08 06:57:13 +0000 |
commit | f481fa4d29a82b438c376ec3af7ff4026bbf7447 (patch) | |
tree | 82de0384ffdc55857ada13ad220a3fb6ee1382c7 /sys/dev/pccbb/pccbb.c | |
parent | f1abc0ea53816bebd3aa3ee85f5fd8456825d73f (diff) | |
download | src-f481fa4d29a82b438c376ec3af7ff4026bbf7447.tar.gz src-f481fa4d29a82b438c376ec3af7ff4026bbf7447.zip |
MFP4: Changes to hopefully make the new power code work better
o Rather than just try to turn off EXCA_INTR_RESET, set the entire register
to 0. This is slightly faster, and a better hammer.
o Move attempted clearing of the output enable (EXCA_PWRCTL_OE) back to
after we turn off the power. Modify it to write 0 so that we don't get
Bad Vcc messages on TI bridges (untested, but ru@ sent me a similar patch)
while at the same time avoiding interrupt storms on Ricoh bridges (tested
by me on my Sony).
# Many of my observations of 'breakage' for this patch are due to some bug
# in the load/unload of cbb.ko unlreated to this change. I'll be investigating
# and fixing that bug in the fullness of time.
Notes
Notes:
svn path=/head/; revision=151080
Diffstat (limited to 'sys/dev/pccbb/pccbb.c')
-rw-r--r-- | sys/dev/pccbb/pccbb.c | 6 |
1 files changed, 3 insertions, 3 deletions
diff --git a/sys/dev/pccbb/pccbb.c b/sys/dev/pccbb/pccbb.c index c94d4e9406e8..9363238d6937 100644 --- a/sys/dev/pccbb/pccbb.c +++ b/sys/dev/pccbb/pccbb.c @@ -1269,13 +1269,13 @@ cbb_pcic_power_disable_socket(device_t brdev, device_t child) DPRINTF(("cbb_pcic_socket_disable\n")); - /* reset signal asserting... */ - exca_clrb(&sc->exca[0], EXCA_INTR, EXCA_INTR_RESET); + /* Turn off the card's interrupt and leave it in reset */ + exca_putb(&sc->exca[0], EXCA_INTR, 0); tsleep(sc, PZERO, "cbbP1", hz / 100); /* power down the socket */ - exca_clrb(&sc->exca[0], EXCA_PWRCTL, EXCA_PWRCTL_OE); cbb_power(brdev, CARD_OFF); + exca_putb(&sc->exca[0], EXCA_PWRCTL, 0); /* wait 300ms until power fails (Tpf). */ tsleep(sc, PZERO, "cbbP1", hz * 300 / 1000); |