13 Oct, 2007
40 commits
-
This is useful when debugging, handling problem systems, or for
distributions just to get the system installed so it can be sorted
out later.This is a bit smarter than the old IDE one and lets you do
libata.dma=0 Disable all PATA DMA like old IDE
libata.dma=1 Disk DMA only
libata.dma=2 ATAPI DMA only
libata.dma=4 CF DMA only(or combinations thereof - 0,1,3 being the useful ones I suspect)
(I've split CF as it seems to be a seperate case of pain and suffering
different to the others and caused by assorted PIO wired adapters etc)Signed-off-by: Alan Cox
[edited to work on SATA too, changing name from 'pata_dma' to 'dma']
Signed-off-by: Jeff Garzik -
Signed-off-by: Peer Chen
Signed-off-by: Jeff Garzik -
This adds human-readable decoding of the ATA status and error registers
(similar to what drivers/ide does) as well as the SATA Serror register
to libata error handling output. This prevents the need to pore
through standards documents to figure out the meaning of the bits
in these registers when looking at error reports. Some bits that
drivers/ide decoded are not decoded here, since the bits are either
command-dependent or obsolete, and properly parsing them would add
too much complexity.Signed-off-by: Robert Hancock
[edited slightly to make output a bit more symmetric]
Signed-off-by: Jeff Garzik -
Of course some controllers lie about PMP support. Black list them.
Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Private pi.flags area is full and we need more private flags. Move
host private flags over to pi.private_data. During initialization,
these flags are copied to hpriv->flags.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Implement AHCI PMP support. ahci only supports command based
switching. Also, for some reason, NCQ over PMP doesn't work now.
Other than that, everything works.Tested on ICH9R, JMB360/363 + SIMG3726, 4726 and 5744.
Signed-off-by: Tejun Heo
Cc: Forrest Zhao
Signed-off-by: Jeff Garzik -
As DEV_RST (hardreset) sometimes fail to recover the controller
(especially after PMP DMA CS errata). In such cases, perform PORT_RST
prior to DEV_RST.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Implement PMP support. sil24 supports full FIS-switching. However,
it has a PMP DMA CS errata which requires port-wide resetting if
commands are outstanding to three or more devices when an error occurs
on one of them.ATAPI commands often result in CHECK SENSE and it's crucial to not
reset them before fetching sense data. Unfortunately, ATAPI CHECK
SENSE causes a lot of problem if command is outstanding to any other
device usually resulting in port-wide reset. So, sata_sil24
implements sil24_qc_defer() which guarantees ATAPI command is run by
itself.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Implement sata_pmp_qc_defer_cmd_switch() - standard qc_defer for
command switching PMP support.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Extend ata_acpi_associate_sata_port() such that it can handle PMP and
call it when PMP is attached and detached.Build breakage when !CONFIG_ATA_ACPI was spotted and fixed by Petr
Vandrovec.Signed-off-by: Tejun Heo
Cc: Petr Vandrovec
Signed-off-by: Jeff Garzik -
Hook PMP support into libata and enable it. Connect SCR and probing
functions, and update ata_dev_classify() to detect PMP.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Implement Port Multiplier support. To support PMP, a LLDD has to
supply ops->pmp_read() and pmp_write(). If non-null, ->pmp_attach and
->pmp_detach are called on PMP attach and detach, respectively.->pmp_read/write() can be called while the port is frozen, so they
must be implemented by polling. This patch supplies several helpers
to ease ->pmp_read/write() implementation.Also, irq_handler and error_handler must be PMP aware. Most of PMP
aware EH can be done by calling ata_pmp_do_eh() with appropriate
methods. PMP EH uses separate set of reset methods and this patch
implements standard prereset, hardreset and postreset methods.This patch only implements PMP support. The next patch will integrate
PMP into the reset of libata and thus enable PMP support.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
PMP always requires SRST to be enabled. Also, hardreset reports
classification code from the first device when PMP is attached, not
from the PMP. Update ata_eh_reset() such that followup softreset is
performed if the controller is PMP capable and the host link is being
reset.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Restore the support for handling drives that report one sector too many
(ie SCSI not ATA style). This worked before the HPA update but was
removed in that process.Signed-off-by: Alan Cox
Signed-off-by: Jeff Garzik -
Reported by Andreas Messer.
Signed-off-by: Jeff Garzik
-
Signed-off-by: Alan Cox
[plus SuperIO fixes by Kyle McMartin]
[plus a cleanup from me]
Signed-off-by: Jeff Garzik -
Blacklist HITACHI HDS7250SASUN500G and HITACHI HDS7225SBSUN250G
drives using wildcard matching.Signed-off-by David Milburn
Signed-off-by: Jeff Garzik
-
* The firmware version of ST3160812AS is "3.ADJ" no "3.AD".
* Add several entries from various sources.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
'noacpi' isn't a standalone parameter, give it its prefix.
Signed-off-by: Dave Jones
Signed-off-by: Jeff Garzik -
I've been doing an audit of this driver to try and find out why we have
problems with some Clevo boxes that use it. Didn't get anywhere other
than to discover all the bug reporters I have use vmware, which may or
may not be chance.In the process however I did find out our MWDMA2 performance was a bit
low and code review showed the MWDMA0/2 timings are reversed due to a
thinko in the table orderingSigned-off-by: Alan Cox
Signed-off-by: Jeff Garzik -
Signed-off-by: Alan Cox
Signed-off-by: Jeff Garzik -
AHCI spec says host-reset bit may only be set when the ahci-enable bit
is also set.Noticed by Peer Chen
Signed-off-by: Jeff Garzik
-
Little fixlets, that the build started erroring / warning about:
drivers/ata/pata_scc.c: In function 'scc_bmdma_status':
drivers/ata/pata_scc.c:734: error: structure has no member named 'active_tag'
drivers/ata/pata_scc.c: In function 'scc_pata_prereset':
drivers/ata/pata_scc.c:866: warning: passing arg 1 of 'ata_std_prereset' from incompatible pointer type
drivers/ata/pata_scc.c: In function 'scc_error_handler':
drivers/ata/pata_scc.c:908: warning: passing arg 2 of 'ata_bmdma_drive_eh' from incompatible pointer type
drivers/ata/pata_scc.c:908: warning: passing arg 3 of 'ata_bmdma_drive_eh' from incompatible pointer type
drivers/ata/pata_scc.c:908: warning: passing arg 5 of 'ata_bmdma_drive_eh' from incompatible pointer type
make[2]: *** [drivers/ata/pata_scc.o] Error 1Signed-off-by: Satyam Sharma
Cc: Alan Cox
Cc: Mel Gorman
Signed-off-by: Jeff Garzik -
The SATA_PATA_SHARING register doesn't have anything to do with the
SATA part of the controller. It indicates whether an extern SATA PHY
is attached to the PATA part of the controller and if so how it is
wired. As the PATA part is driven by pata_via, sata_via has no reason
to care about that. Also, pata_via should work fine under all
configurations.This patch removes unnecessary attach failures. It seems recent via
chipsets are defaulting to different values or are actually connected
to SATA PHY triggering this more often.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
In ata_set_max_sectors(), the highest nibble in LBA28 mode was
missing. This made drives sized between 8G and 128G with HPA turned
on to be resized to under 8G. Fix it.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
AN serves multiple purposes. For ATAPI, it's used for media change
notification. For PMP, for downstream PHY status change notification.
Implement sata_async_notification() which demultiplexes AN.To avoid unnecessary port events, ATAPI AN is not enabled if PMP is
attached but SNTF is not available.Signed-off-by: Tejun Heo
Cc: Kriten Carlson Accardi
Signed-off-by: Jeff Garzik -
Some pseudo devices fail PM commands unnecessarily aborting system
suspend. Implement ATA_HORKAGE_SKIP_PM which makes libata skip PM
commands for these devices.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
If PMP itself becomes inaccessible while trying to link a downstream
link, spending time to recover the downstream link doesn't make any
sense. Make EH skip retry and fail fast if -ERESTART is received.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Implement ATA_LFLAG_DISABLED. The flag indicates the link is disabled
due to EH recovery failure. While a link is disabled, no EH action is
taken on the link and suspend/resume become noop too.This will be used by PMP links to manage failed links.
Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Some PMP links are connected to internal pseudo devices which may come
and go depending on situation. There's no reason to try hard to
recover them. ATA_LFLAG_NO_RETRY tells EH to not retry if the device
attached to the link fails.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Some links on some PMPs locks up on SRST and/or report incorrect
device signature. Implement ATA_LFLAG_NO_SRST, ASSUME_ATA and
ASSUME_SEMB to handle these quirky links. NO_SRST makes EH avoid
SRST. ASSUME_ATA and SEMB forces class code to ATA and SEMB_UNSUP
respectively. Note that SEMB isn't currently supported yet so the
_UNSUP variant is used.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Implement ap->nr_active_links (the number of links with active qcs),
ap->excl_link (pointer to link which can be used by ->qc_defer and is
cleared when a qc with ATA_QCFLAG_CLEAR_EXCL completes), and
ata_link_active().These can be used by ->qc_defer() to implement proper command
exclusion. This set of helpers seem enough for both sil24 (ATAPI
exclusion needed) and cmd-switching PMP.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Controllers which support PMP have various restrictions on which
combinations of commands are allowed to what number of devices
concurrently. This patch implements ops->qc_defer() which determines
whether a qc can be issued at the moment or should be deferred.If the function returns ATA_DEFER_LINK, the qc will be deferred until
a qc completes on the link. If ATA_DEFER_PORT, until a qc completes
on any link. The defer conditions are advisory and in general
ATA_DEFER_LINK can be considered as lower priority deferring than
ATA_DEFER_PORT.ops->qc_defer() replaces fixed ata_scmd_need_defer(). For standard
NCQ/non-NCQ exclusion, ata_std_qc_defer() is implemented. ahci and
sata_sil24 are converted to use ata_std_qc_defer().ops->qc_defer() is heavier than the original mechanism because full qc
is prepped before determining to defer it, but various information is
needed to determine defer conditinos and fully translating a qc is the
only way to supply such information in generic manner.IMHO, this shouldn't cause any noticeable performance issues as
* for most cases deferring occurs rarely (except for NCQ-aware
cmd-switching PMP)
* translation itself isn't that expensive
* once deferred the command won't be repeated until another command
completes which usually is a very long time cpu-wise.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Make a number of functions from libata-core.c and libata-eh.c global
to libata (drivers/ata/libata.h). These will be used by PMP.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Consider newly found class code while revalidating. PMP resetting
always results in valid class code and issuing PMP commands to
ATA/ATAPI device isn't very attractive. Add @new_class to
ata_dev_revalidate() and check class code for revalidation.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Add PMP related constants, fields and ops. Also, update
ata_class_enabled/disabled() such that PMP classes are considered.Signed-off-by: Tejun Heo
Signed-off-by: Jeff Garzik -
Update AN support in preparation of PMP support.
* s/ata_id_has_AN/ata_id_has_atapi_AN/
* add AN enabled reporting during configuration
* add err_mask to AN configuration failure reporting
* update LOCKING comment for ata_scsi_media_change_notify()
* check whether ATA dev is attached to SCSI dev ata_scsi_media_change_notify()
* set ATA_FLAG_AN in ahci and sata_sil24Signed-off-by: Tejun Heo
Cc: Kriten Carlson Accardi
Signed-off-by: Jeff Garzik -
Signed-off-by: Jeff Garzik
-
Clear ARRE, we don't do auto-reallocation on reads, just on writes.
Also, hardcode the size of the array using RW_RECOVERY_MPAGE_LEN,
following the style of the surrounding code.Signed-off-by: Jeff Garzik
-
* SAT specifies that FORMAT UNIT should be translated into a series
of READ and WRITE commands that zero the ATA device. That is far too
cumbersome to bother with.Since we don't actually format the device, the old behavior of
always returning success was inaccurate. Change FORMAT UNIT from
returning success immediately (old behavior) to always returning
an error (new behavior).* Add some comments around SYNCHRONIZE CACHE
* Shuffle scsi command code around a bit, so that things are close
to alphabetic order.Signed-off-by: Jeff Garzik