[PATCH] libata: handle 0xff status properly
authorTejun Heo <htejun@gmail.com>
Mon, 9 Oct 2006 09:32:15 +0000 (18:32 +0900)
committerJeff Garzik <jeff@garzik.org>
Sat, 2 Dec 2006 03:40:28 +0000 (22:40 -0500)
commitd1adc1bbd6dde3e05a91e2d3e6ab42d202ea61d5
tree49d88b2f55bb88e5334979b418296af384149cda
parenta20c9e820864e18b59d2a4f2f04e8b6053986c95
[PATCH] libata: handle 0xff status properly

libata waits for !BSY even when the status register reports 0xff.
This causes long boot delays when D8 isn't pulled down properly.  This
patch does the followings.

* don't wait if status register is 0xff in all wait functions

* make ata_busy_sleep() return 0 on success and -errno on failure.
  -ENODEV is returned on 0xff status and -EBUSY on other failures.

* make ata_bus_softreset() succeed on 0xff status.  0xff status is not
  reset failure.  It indicates no device.  This removes unnecessary
  retries on such ports.  Note that the code change assumes unoccupied
  port reporting 0xff status does not produce valid device signature.

Signed-off-by: Tejun Heo <htejun@gmail.com>
Cc: Joe Jin <lkmaillist@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
drivers/ata/libata-core.c
include/linux/libata.h