mirror of
https://github.com/torvalds/linux.git
synced 2026-05-25 23:52:08 +02:00
firewire: ohci: fix PHY reg access after card ejection
Detect and handle ejection of FireWire CardBus cards in PHY register
accesses:
- The last attempt of firewire-core to reset the bus during shutdown
caused a spurious "firewire_ohci: failed to write phy reg" error
message in the log. Skip this message as well as the prior retry
loop that needlessly took 100 milliseconds.
- In the unlikely case that a PHY register was read right after card
ejection, a bogus value was obtained and possibly acted upon.
Instead, fail the read attempt.
Signed-off-by: Stefan Richter <stefanr@s5r6.in-berlin.de>
This commit is contained in:
parent
b14c369d87
commit
215fa444c2
|
|
@ -527,6 +527,9 @@ static int read_phy_reg(struct fw_ohci *ohci, int addr)
|
|||
reg_write(ohci, OHCI1394_PhyControl, OHCI1394_PhyControl_Read(addr));
|
||||
for (i = 0; i < 3 + 100; i++) {
|
||||
val = reg_read(ohci, OHCI1394_PhyControl);
|
||||
if (!~val)
|
||||
return -ENODEV; /* Card was ejected. */
|
||||
|
||||
if (val & OHCI1394_PhyControl_ReadDone)
|
||||
return OHCI1394_PhyControl_ReadData(val);
|
||||
|
||||
|
|
@ -550,6 +553,9 @@ static int write_phy_reg(const struct fw_ohci *ohci, int addr, u32 val)
|
|||
OHCI1394_PhyControl_Write(addr, val));
|
||||
for (i = 0; i < 3 + 100; i++) {
|
||||
val = reg_read(ohci, OHCI1394_PhyControl);
|
||||
if (!~val)
|
||||
return -ENODEV; /* Card was ejected. */
|
||||
|
||||
if (!(val & OHCI1394_PhyControl_WritePending))
|
||||
return 0;
|
||||
|
||||
|
|
|
|||
Loading…
Reference in New Issue
Block a user