Commit graph

1904 commits

Author SHA1 Message Date
Jeff Garzik
39b07ce6d9 libata: more verbose request_irq() failure
Suggested by Jarek P.
2006-06-11 23:59:44 -04:00
Brian King
233277cad6 [PATCH] libata: Setup nbytes in ata_sg_init_one
Setup nbytes in ata_sg_init_one to the total transfer length
of the command. This is needed by some HBAs that need to know
the total transfer length of each command.

Signed-off-by: Brian King <brking@us.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-06-11 23:24:25 -04:00
Borislav Petkov
bd5d825c94 libata: Adjust initial debugging levels through preprocessor defines.
Signed-off-by: <petkov@uni-muenster.de>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-06-11 23:17:01 -04:00
Alexey Dobriyan
b47725743c [PATCH] sata_sil24: endian anotations
With help from Tejun Heo.

Signed-off-by: Alexey Dobriyan <adobriyan@gmail.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-06-11 23:07:19 -04:00
Jeff Garzik
fec69a9748 Merge branch 'upstream-fixes' into upstream
Conflicts:

	drivers/scsi/sata_sil24.c
2006-06-11 23:04:37 -04:00
Mark Lord
2f9719b61e [PATCH] sata_mv: grab host lock inside eng_timeout
Bug fix:  mv_eng_timeout() calls mv_err_intr() without first grabbing the host lock,
which can lead to all sorts of interesting scenarios.

This whole error-handling portion of sata_mv is nasty (and will get fixed for
the new EH stuff), but for now this patch will help keep it on life-support.

Signed-off-by:  Mark Lord <liml@rtr.ca>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-06-11 23:03:18 -04:00
Tejun Heo
1049cb4787 [PATCH] libata: add missing ->data_xfer for pdc_adma
pdc_adma use libata-core PIO path but were left out
during ->data_xfer conversion.  Initialize with proper callbacks.

This patch is against the current libata-dev#ALL.  Controllers which
implement their own PIO HSM (ahci and sil24) don't need ->data_xfer, so the
above two are the only drivers which were left out during conversion.

From: "Barry K. Nathan" <barryn@pobox.com>

Signed-off-by: Barry K. Nathan <barryn@pobox.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-06-11 10:21:13 -04:00
Tejun Heo
0a1b622ef4 [PATCH] libata: add missing finish_wait() call in ata_port_wait_eh()
Add missing finish_wait() call after wait loop in ata_port_wait_eh().

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-06-11 11:01:38 +09:00
Rune Torgersen
67f672f61b [PATCH] sata_sil24: SII3124 sata driver endian problem
From: "Rune Torgersen" <runet@innovsys.com>

Fix an endian issue in the sil24 driver.

Signed-off-by: Rune Torgersen <runet@innovsys.com>
Acked-by: Jeff Garzik <jeff@garzik.org>
Cc: Tejun Heo <htejun@gmail.com>
Signed-off-by: Andrew Morton <akpm@osdl.org>
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
2006-06-05 12:29:17 -07:00
Linus Torvalds
672c6108a5 Merge master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6
* master.kernel.org:/pub/scm/linux/kernel/git/jejb/scsi-rc-fixes-2.6:
  [SCSI] scsi_lib.c: properly count the number of pages in scsi_req_map_sg()
  [SCSI] scsi_transport_sas: make write attrs writeable
  [SCSI] scsi_transport_sas; fix user_scan
  [SCSI] ppa: fix for machines with highmem
  [SCSI] mptspi: reset handler shouldn't be called for other bus protocols
  [SCSI] Blacklist entry for HP dat changer
2006-06-03 09:12:50 -07:00
Bryan Holty
f52359622f [SCSI] scsi_lib.c: properly count the number of pages in scsi_req_map_sg()
The calculation of nr_pages in scsi_req_map_sg() doesn't account for
the fact that the first page could have an offset that pushes the end
of the buffer onto a new page.

Signed-off-by: Bryan Holty <lgeek@frontiernet.net>
Signed-off-by: James Bottomley <James.Bottomley@SteelEye.com>
2006-06-01 09:16:55 -05:00
Tejun Heo
d87fa38e70 [PATCH] libata-hp: move ata_do_reset() to libata-eh.c
With ops->probe_init() gone, no user is left in libata-core.c.  Move
ata_do_reset() to libata-eh.c and make it static.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:24 +09:00
Tejun Heo
52783c5dcc [PATCH] libata-hp: killl ops->probe_reset
Now that all drivers implementing new EH are converted to new probing
mechanism, ops->probe_reset doesn't have any user.  Kill it.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:22 +09:00
Tejun Heo
0542925b25 [PATCH] sata_sil24: convert to new probing mechanism and add hotplug support
Convert to new probing mechanism and add hotplug support by enabling
PORT_IRQ_PHYRDY_CHG, marking ehi for hotplug and scheduling EH on
PORT_IRQ_PHYRDY_CHG or PORT_IRQ_DEV_XCHG.

Sil3124/32 family of controllers don't have any mechanism to wait for
the first D2H FIS after hotplug, so ATA_FLAG_SKIP_D2H_BSY is used.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:20 +09:00
Tejun Heo
4296971dd3 [PATCH] ahci: convert to new probing mechanism and add hotplug support
Convert to new probing mechanism and add hotplug support by enabling
PORT_IRQ_PHYRDY, marking ehi for hotplug and scheduling EH on
CONNECT/PHYRDY interrupts.

Unfortunately, ahci cannot reliably wait for the first D2H FIS after
hotplug.  It sometimes succeeds but times out more often than not, so
ATA_FLAG_SKIP_D2H_BSY is used.

This patch also fixes ahci_hardreset() such that D2H Register FIS RX
area is cleared before issuing COMRESET.  Without this,
ata_busy_sleep() after COMRESET might prematually finish if the
previous TF contains DRDY && !BSY.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:18 +09:00
Tejun Heo
e573890b00 [PATCH] sata_sil: convert to new probing mechanism and add hotplug support
Convert to new probing mechanism and add hotplug support by enabling
SATA IRQ for SError.N, marking ehi for hotplug and scheduling EH on
SATA IRQs.

Sil3112/3512/3114 family of controllers use COMRESET as TF clearing
point and can reliably wait for D2H FIS after COMRESET whether the FIS
is the first D2H FIS after POR or in response to the COMRESET.  Thus,
setting ATA_FLAG_HRST_TO_RESUME is enough for device detection after
hotplug.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:16 +09:00
Tejun Heo
ccc4672aff [PATCH] ata_piix: convert ata_piix to new probing mechanism
Convert ata_piix to new probing mechanism.  Automatic hotplug is not
supported due to hardware limitation (no PHY event interrupt), but
warm plugging works.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:14 +09:00
Tejun Heo
720ba12620 [PATCH] libata-hp: update unload-unplug
Update unload unplug - driver unloading / PCI removal.  This is done
by ata_port_detach() which short-circuits EH, disables all devices and
freezes the port.  With this patch, EH and unloading/unplugging are
properly synchronized.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:13 +09:00
Tejun Heo
3e706399b0 [PATCH] libata-hp: implement bootplug
Implement bootplug - boot probing via hotplug path.  While loading,
ata_host_add() simply schedules probing and invokes EH.  After EH
completes, ata_host_add() scans and assicates them with SCSI devices.
EH path is slightly modified to handle this (e.g. no autopsy during
bootplug).  The SCSI part is left in ata_host_add() because it's
shared with legacy path and to keep probing order as before (ATA scan
all ports in host_set then attach all).

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:11 +09:00
Tejun Heo
ccf68c3405 [PATCH] libata-hp: hook warmplug
Hook transportt->user_scan() and hostt->slave_destroy().

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:09 +09:00
Tejun Heo
83c47bcb3c [PATCH] libata-hp: implement warmplug
Implement warmplug.  User-initiated unplug can be detected by
hostt->slave_destroy() and plug by transportt->user_scan().  This
patch only implements the two callbacks.  The next function will hook
them.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:07 +09:00
Tejun Heo
580b210232 [PATCH] libata-hp: implement SCSI part of hotplug
Implement SCSI part of hotplug.

This must be done in a separate context as SCSI makes use of EH during
probing.  SCSI scan fails silently if EH is in progress.  In such
cases, libata pauses briefly and retries until every device is
attached.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:05 +09:00
Tejun Heo
084fe639b8 [PATCH] libata-hp: implement hotplug
Implement ATA part of hotplug.  To avoid probing broken devices over
and over again, disabled devices are not automatically detached.  They
are detached only if probing is requested for the device or the
associated port is offline.  Also, to avoid infinite probing loop,
Each device is probed only once per EH run.

As SATA PHY status is fragile, devices are detached only after it has
used up its recovery chances unless explicitly requested by LLDD or
user (LLDD may request direct detach if, for example, it supports cold
presence detection).

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:03 +09:00
Tejun Heo
0ea035a3d1 [PATCH] libata-hp: implement ata_eh_detach_dev()
Implement ata_eh_detach_dev().  This function is responsible for
detaching an ATA device and offlining the associated SCSI device
atomically so that the detached device is not accessed after ATA
detach is complete.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:28:01 +09:00
Tejun Heo
e8e008e7b5 [PATCH] sata_sil24: update sil24_hardreset()
Use phy debouncing instead of unconditional wait after DEV_RST and
make sil24_hardreset() to request followup SRST as that's the only way
to wait for !BSY.  Note that the original implementation never worked
- if the cached status was !BSY, ata_busy_sleep() finished
immediately; otherwise, it timed out regardless of the actual device
status.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:59 +09:00
Tejun Heo
135da34573 [PATCH] sata_sil24: rename PORT_PRB to PORT_LRAM and add PORT_LRAM_SLOT_SZ
PORT_PRB is a misnomer as the area also contains other stuff.  Rename
it to PORT_LRAM and add PORT_LRAM_SLOT_SZ.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:57 +09:00
Tejun Heo
cbe88fbc72 [PATCH] sata_sil: new interrupt handler
The DMA complete bit of these controllers reflects ATA IRQ status
while no DMA command is in progress.  So, we can tell whether the
controller is raising an interrupt or not in deterministic manner.
This patch gives sata_sil its own interrupt handler which behaves much
better than the original one in terms of error detection and handling.
This change is also necessary for later hotplug support.

Further improvements are possible, in both 2 and 4 ports versions, we
can get all status with only one readl and using custom bmdma
operations can further cut down register accesses.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:55 +09:00
Tejun Heo
20888d8368 [PATCH] sata_sil: add new constants in preparation for new interrupt handler
sata_sil is about to get a brand new interrupt handler.  Add relevant
constants.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:53 +09:00
Tejun Heo
9a1004d0c1 [PATCH] libata: export ata_hsm_move()
ata_hsm_move() will be used by LLDDs which depend on standard PIO HSM
but implement their own interrupt handlers.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:52 +09:00
Tejun Heo
664faf09a0 [PATCH] libata-hp-prep: implement followup softreset handling
In some cases, hardreset must be followed by SRST.

* some controllers can't classify with hardreset
* some controllers can't wait for !BSY after hardreset (LLDD should
  explicitly request followup softreset by returning -EAGAIN)
* (later) PM needs SRST w/ PMP==15 to operate after hardreset

To handle above cases, this patch implements follow-up softreset.
After a hardreset, ata_eh_reset() checks whether any of above
conditions are met and do a follow-up softreset if necessary.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:50 +09:00
Tejun Heo
f5914a461e [PATCH] libata-hp-prep: add prereset() method and implement ata_std_prereset()
With hotplug, every reset might be a probing reset and thus something
similar to probe_init() is needed.  prereset() method is called before
a series of resets to a port and is the counterpart of postreset().
prereset() can tell EH to use different type of reset or skip reset by
modifying ehc->i.action.

This patch also implements ata_std_prereset().  Most controllers
should be able to use this function directly or with some wrapping.
After hotplug, different controllers need different actions to resume
the PHY and detect the newly attached device.  Controllers can be
categorized as follows.

* Controllers which can wait for the first D2H FIS after hotplug.
  Note that if the waiting is implemented by polling TF status, there
  needs to be a way to set BSY on PHY status change.  It can be
  implemented by hardware or with the help of the driver.

* Controllers which can wait for the first D2H FIS after sending
  COMRESET.  These controllers need to issue COMRESET to wait for the
  first FIS.  Note that the received D2H FIS could be the first D2H
  FIS after POR (power-on-reset) or D2H FIS in response to the
  COMRESET.  Some controllers use COMRESET as TF status
  synchronization point and clear TF automatically (sata_sil).

* Controllers which cannot wait for the first D2H FIS reliably.
  Blindly issuing SRST to spinning-up device often results in command
  issue failure or timeout, causing extended delay.  For these
  controllers, ata_std_prereset() explicitly waits ATA_SPINUP_WAIT
  (currently 8s) to give newly attached device time to spin up, then
  issues reset.  Note that failing to getting ready in ATA_SPINUP_WAIT
  is not critical.  libata will retry.  So, the timeout needs to be
  long enough to spin up most devices.

LLDDs can tell ata_std_prereset() which of above action is needed with
ATA_FLAG_HRST_TO_RESUME and ATA_FLAG_SKIP_D2H_BSY flags.  These flags
are PHY-specific property and will be moved to ata_link later.

While at it, this patch unifies function typedef's such that they all
have named arguments.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:48 +09:00
Tejun Heo
d7bb4cc757 [PATCH] libata-hp-prep: implement sata_phy_debounce()
With hotplug, PHY always needs to be debounced before a reset as any
reset might find new devices.  Extract PHY waiting code from
sata_phy_resume() and extend it to include SStatus debouncing.  Note
that sata_phy_debounce() is superset of what used to be done inside
sata_phy_resume().

Three default debounce timing parameters are defined to be used by
hot/boot plug.  As resume failure during probing will be properly
handled as errors, timeout doesn't have to be long as before.
probeinit() uses the same timeout to retain the original behavior.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:46 +09:00
Tejun Heo
a9beec9535 [PATCH] libata-hp-prep: make probing related functions global
Hotplug will be implemented in libata-eh.c.  Make ata_dev_read_id()
and ata_dev_configure() global.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:44 +09:00
Tejun Heo
453b07accb [PATCH] libata-hp-prep: add ata_aux_wq
It's best to run ATA hotplug from EH but attaching SCSI devices needs
working EH.  ata_aux_wq is used to give SCSI hotplug operations a
separate context.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:42 +09:00
Tejun Heo
3edebac41b [PATCH] libata-hp-prep: store attached SCSI device
Add device persistent field dev->sdev and store the attached SCSI
device.  With hotplug, libata needs to know the attached SCSI device
to offline and detach it, but scsi_device_lookup() cannot be used
because libata will reuse SCSI ID numbers - dead but not gone devices
(due to zombie opens, etc...) interfere with the lookup.

dev->sdev doesn't hold reference to the SCSI device.  It's cleared
when the SCSI device goes away.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:40 +09:00
Tejun Heo
5a04bf4bef [PATCH] libata-hp-prep: implement ap->hw_sata_spd_limit
Add ap->hw_sata_spd_limit and initialize it once during the boot
initialization (or driver load initialization).  ap->sata_spd_limit is
reset to ap->hw_sata_spd_limit on hotplug.  This prevents spd limits
introduced by earlier devices from affecting new devices.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:38 +09:00
Tejun Heo
315343637b [PATCH] libata-hp-prep: use __ata_scsi_find_dev()
Convert direct sdev -> dev lookup to __ata_scsi_find_dev().

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:36 +09:00
Tejun Heo
ab5b3a5b2d [PATCH] libata-hp-prep: update ata_scsi_find_dev() and friends
Separate out ata_find_dev() and __ata_scsi_find_dev() from
ata_scsi_find_dev().  These will be used by later hotplug
implementation.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:34 +09:00
Tejun Heo
72fa4b742b [PATCH] libata-hp-prep: make some ata_device fields persistent
Lifetimes of some fields span over device plugging/unplugging.  This
patch moves such persistent fields to the top of ata_device and
separate them with ATA_DEVICE_CLEAR_OFFSET.  Fields above the offset
are initialized once during host initializatino while all other fields
are cleared before hotplugging.  Currently ->ap, devno and part of
flags are persistent.

Note that flags is partially cleared while holding host_set lock.
This is to synchronize with later warm plug implementation which will
record hotplug request in dev->flags.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:32 +09:00
Tejun Heo
3ef3b43d56 [PATCH] libata-hp-prep: implement ata_dev_init()
Move initialization of struct ata_device into ata_dev_init() in
preparation for hotplug.  This patch calls ata_dev_init() from
ata_host_init() and thus makes no functional difference.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:30 +09:00
Tejun Heo
c6cf9e99d1 [PATCH] libata: implement ata_eh_wait()
Implement ata_eh_wait().  On return from this function, it's
guaranteed that the EH which was pending or in progress when the
function was called is complete - including the tailing part of SCSI
EH.  This will be used by hotplug and others to synchronize with EH.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:27 +09:00
Tejun Heo
20952b6990 [PATCH] libata: set PIO-0 after successful EH reset
Set ata_device->pio_mode to XFER_PIO_0 after a successful reset.  This
is to keep EH resets consistent with probe resets as updated by the
commit b6079ca409.  Note that, with
soon-to-follow hotplug update, EH resets will include probe resets.

Signed-off-by: Tejun Heo <htejun@gmail.com>
2006-05-31 18:27:23 +09:00
Borislav Petkov
ef2824073f libata debugging: set initial dbg value
This patch sets the prerequisites for the new debugging scheme that more or
less resembles Donald Becker's net driver example. This one liner doesn't
change any functionality beside setting the appropriate debug level for the
msg_enable control in the ata_port struct, which will be later used by the
ata_msg_* macros to control the amount of debug information sent to printk.

Signed-off-by: <petkov@uni-muenster.de>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-29 01:06:23 -04:00
Jeff Garzik
e42d7be25c Merge branch 'upstream-fixes' into upstream
Conflicts:

	drivers/scsi/libata-core.c
2006-05-28 16:32:59 -04:00
Mark Lord
0737ac895a [PATCH] the latest consensus libata resume fix
Okay, just to sum things up.

This forces libata to wait for up to 2 seconds for BUSY|DRQ to clear
on resume before continuing.

[jgarzik adds...]  During testing we never saw DRQ asserted, but
nonetheless (a) this works and (b) testing for DRQ won't hurt.

Signed-off-by:  Mark Lord <liml@rtr.ca>
Acked-by: Jens Axboe <axboe@suse.de>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-28 16:32:08 -04:00
Alan Cox
75e995855f [PATCH] libata: add pio_data_xfer_noirq
Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-26 22:02:23 -04:00
Albert Lee
89bad5892a [PATCH] libata: add back ->data_xfer to ata_piix.c
Add back ->data_xfer and ->mode_filter to ata_piix.c.

Signed-off-by: Albert Lee <albertcc@tw.ibm.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-26 21:30:12 -04:00
Alan Cox
31a34fe759 [PATCH] ata_piix formatting
if( spacing fix for Garzik compliant formatting

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-24 02:09:01 -04:00
Mark Lord
e14698745d [PATCH] sata_mv: endian annotations
Signed-off-by: Mark Lord <liml@rtr.ca>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-24 02:04:09 -04:00
Alan Cox
a6b2c5d475 [PATCH] PATCH: libata. Add ->data_xfer method
We need to pass the device in order to do per device checks such as
32bit I/O enables. With the changes to include dev->ap we now don't have
to add parameters however just clean them up. Also add data_xfer methods
to the existing drivers except ata_piix (which is in the other block of
patches). If you reject the piix one just add a data_xfer to it...

Signed-off-by: Alan Cox <alan@redhat.com>
Signed-off-by: Jeff Garzik <jeff@garzik.org>
2006-05-24 01:58:54 -04:00