23 Feb, 2017
3 commits
-
- add the sata phy power down and phy reset for 6qp
sataSigned-off-by: Richard Zhu
(cherry picked from commit b1270554354d46cf7676e354e63ec4f11766e6f6) -
Since the version of the imx6qp's ahci controller
is same to the version of imx6q ahci controller.
So, this work-around should be applied to imx6qp
ahci too.Signed-off-by: Richard Zhu
(cherry picked from commit 31a7eab5be9843263535306dbaa08592b66714e5) -
errata:
When a read command returns less data than specified in the PRDs (for
example, there are two PRDs for this command, but the device returns a
number of bytes which is less than in the first PRD), the second PRD of
this command is not read out of the PRD FIFO, causing the next command
to use this PRD erroneously.workaround
- forces sg_tablesize = 1
- modified the sg_io function in block/scsi_ioctl.c to use a 64k buffer
allocated with dma_alloc_coherent during the probe in ahci_imx
- In order to fix the scsi/sata hang, when CD_ROM and HDD are
accessed simultaneously after the workaround is applied.
Do not go to sleep in scsi_eh_handler, when there is host failed.Signed-off-by: Richard Zhu
09 Feb, 2017
3 commits
-
commit 2dae99558e86894e9e5dbf097477baaa5eb70134 upstream.
For an ATA device supporting the sense data reporting feature set, a
failed command will trigger the execution of ata_eh_request_sense if
the result task file of the failed command has the ATA_SENSE bit set
(sense data available bit). ata_eh_request_sense executes the REQUEST
SENSE DATA EXT command to retrieve the sense data of the failed
command. On success of REQUEST SENSE DATA EXT, the ATA_SENSE bit will
NOT be set (the command succeeded) but ata_eh_request_sense
nevertheless tests the availability of sense data by testing that bit
presence in the result tf of the REQUEST SENSE DATA EXT command. This
leads us to falsely assume that request sense data failed and to the
warning message:atax.xx: request sense failed stat 50 emask 0
Upon success of REQUEST SENSE DATA EXT, set the ATA_SENSE bit in the
result task file command so that sense data can be returned by
ata_eh_request_sense.Signed-off-by: Damien Le Moal
Signed-off-by: Tejun Heo
Signed-off-by: Greg Kroah-Hartman -
commit e0edc8c546463f268d41d064d855bcff994c52fa upstream.
Marko reports that CX1-JB512-HP shows the same timeout issues as
CX1-JB256-HP. Let's apply MAX_SEC_128 to all devices in the series.Signed-off-by: Tejun Heo
Reported-by: Marko Koski-Vähälä
Signed-off-by: Greg Kroah-Hartman -
commit 064c3db9c564cc5be514ac21fb4aa26cc33db746 upstream.
Here, If devm_ioremap will fail. It will return NULL.
Then hpriv->base = NULL - 0x20000; Kernel can run into
a NULL-pointer dereference. This error check will avoid
NULL pointer dereference.Signed-off-by: Arvind Yadav
Signed-off-by: Tejun Heo
Signed-off-by: Greg Kroah-Hartman
08 Dec, 2016
1 commit
-
SCT Write Same support had been introduced with
commit 7b2030942859 ("libata: Add support for SCT Write Same")Some problems, namely excessive userspace segfaults, had been reported at
http://lkml.kernel.org/r/20160908192736.GA4356@gmail.com
This lead to commit 0ce1b18c42a5 ("libata: Some drives failing on
SCT Write Same") which strived to disable SCT Write Same on !ZAC devices.
Due to the way this was done and to the logic in sd_config_write_same(),
this didn't work for those devices that have
->max_ws_blocks > SD_MAX_WS10_BLOCKS: for these, ->no_write_same and
->max_write_same_sectors would still be non-zero,
but ->ws10 == ->ws16 == 0. This would cause sd_setup_write_same_cmnd() to
demultiplex REQ_OP_WRITE_SAME requests to WRITE_SAME, and these in turn
aren't supported by libata-scsi:EXT4-fs (dm-1): Delayed block allocation failed for inode 2625094 at
logical offset 2032 with max blocks 2 with error 121
EXT4-fs (dm-1): This should not happen!! Data will be lost121 == EREMOTEIO is what scsi_io_completion() asserts in case of
invalid opcodes.Back to the original problem of userspace segfaults: this can be tracked
down to ata_format_sct_write_same() overwriting the input page. Sometimes,
this page is ZERO_PAGE(0) which ceases to be filled with zeros from that
point on. Since ZERO_PAGE(0) is used for userspace .bss mappings, code of
the following is doomed:static char *a = NULL; /* .bss */
...
if (a)
*a = 'a';This problem is not solved by disabling SCT Write Same for !ZAC devices
only.It can certainly be fixed, but the final release is quite close -- so
disable SCT Write Same for all ATA devices rather than introducing some
SCT key buffer allocation schemes at this point.Fixes: 7b2030942859 ("libata: Add support for SCT Write Same")
Signed-off-by: Nicolai Stange
Signed-off-by: Tejun Heo
30 Nov, 2016
1 commit
-
If the nr-ports property is missing ata_host_alloc_pinfo is called with
n_ports = 0. This results in host->ports[0] = NULL which later makes
mv_init_host() oops when dereferencing this pointer.Instead be a bit more cooperative and fail the probing with an error
message.Signed-off-by: Uwe Kleine-König
Signed-off-by: Tejun Heo
22 Nov, 2016
1 commit
-
Don't try to guess what the errors from pci_irq_alloc_vectors mean, as
that's too fragile. Instead always try allocating a single vector
when multi-MSI mode fails. This makes various intel Desktop and
Laptop CPUs use MSI again.Signed-off-by: Christoph Hellwig
Reported-by: Michael Marley
Tested-by: Michael Marley
Fixes: 0b9e2988ab22 ("ahci: use pci_alloc_irq_vectors")
Signed-off-by: Tejun Heo
02 Nov, 2016
1 commit
-
There's a typo in ata_gen_passthru_sense(), where the first byte
would be overwritten incorrectly later on.Reported-by: Charles Machalow
Signed-off-by: Hannes Reinecke
Fixes: 11093cb1ef56 ("libata-scsi: generate correct ATA pass-through sense")
Cc: stable@vger.kernel.org # v4.7+
Signed-off-by: Tejun Heo
25 Oct, 2016
1 commit
-
We need to make sure hpriv->irq is set properly if we don't use per-port
vectors, so switch from blindly assigning pdev->irq to using
pci_irq_vector, which handles all interrupt types correctly.Signed-off-by: Christoph Hellwig
Reported-by: Robert Richter
Tested-by: Robert Richter
Tested-by: David Daney
Fixes: 0b9e2988ab22 ("ahci: use pci_alloc_irq_vectors")
Signed-off-by: Tejun Heo
21 Oct, 2016
1 commit
-
commit 17a51f12 ("ahci: only try to use multi-MSI mode if there is more
than 1 port") lead to a case where nvec isn't initialized before it's
used. Fix this by moving the check into the n_ports conditional.Reported-and-reviewed-by Colin Ian King
Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
20 Oct, 2016
1 commit
-
We should only try to allocate multiple MSI or MSI-X vectors if the device
actually has multiple ports. Otherwise pci_alloc_irq_vectors will return
a single vector due to n_ports = 1, in which case we shouldn't set the
AHCI_HFLAG_MULTI_MSI flag.Signed-off-by: Christoph Hellwig
Fixes: 0b9e2988 ("ahci: use pci_alloc_irq_vectors")
Reported-by: Emmanuel Benisty
Tested-by: Emmanuel Benisty
Signed-off-by: Tejun Heo
30 Sep, 2016
1 commit
-
This reverts commit 640847298e2b7f19 ("ahci: qoriq: Disable NCQ
on ls2080a SoC")The erratum has been fixed in ls2080a v2.0 and later soc.
In reality, customer will not get any ls2080a v1.0 soc. Neither apply
to any products. So reverting this commit won't create any side effect.Blacklisting v2.0 could also be a option, but that needs to check the
soc version which is not suitable in the driver.Signed-off-by: Tang Yuantian
Signed-off-by: Tejun Heo
22 Sep, 2016
2 commits
-
Signed-off-by: Harman Kalra
Signed-off-by: Tejun Heo -
Replace BUG() with BUG_ON().
Caught by coccinelle.Signed-off-by: Harman Kalra
Signed-off-by: Tejun Heo
21 Sep, 2016
1 commit
-
Replacing dma_pool_alloc and memset with a single call to dma_pool_zalloc
Signed-off-by: Harman Kalra
Signed-off-by: Tejun Heo
10 Sep, 2016
1 commit
-
Restrict support SCT Write Same to devices which also support ZAC where
support is required.Reported-by: Mike Krinkin
Signed-off-by: Shaun Tancheff
Signed-off-by: Tejun Heo
07 Sep, 2016
2 commits
-
Use the new pci_alloc_irq_vectors API to allocate MSI-X and MSI vectors.
The big advantage over the old code is that we can use the same API for
MSI and MSI-X, and that we don't need to store the MSI-X vector mapping
in driver-private data structures.This first conversion keeps the probe order as-is: MSI-X multi vector,
MSI multi vector, MSI single vector, MSI-X single vector and last a
single least legacy interrupt line. There is one small change of
behavior: we now check the "MSI Revert to Single Message" flag for
MSI-X in addition to MSI.Because the API to find the Linux IRQ number for a MSI/MSI-X vector
is PCI specific, but libahaci is bus-agnostic I had to a
get_irq_vector function pointer to struct ahci_host_priv. The
alternative would be to move the multi-vector case of ahci_host_activate
to ahci.c and just call ata_host_activate directly from the others
users of ahci_host_activate.Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
30 Aug, 2016
1 commit
-
Ninja32 needs to set some flags to indicate it does 32bit IO. However it currently assigns this which
loses the initializing flag and causes a warning spew. Fix it to use a logical or as is intended.Signed-off-by: Alan Cox
Tested-by: Ellmar Stelnberger
Signed-off-by: Tejun Heo
25 Aug, 2016
4 commits
-
Use non DMA write log when ATA_DFLAG_PIO is set.
Signed-off-by: Shaun Tancheff
Reviewed-by: Hannes Reinecke
Acked-by: Tejun Heo -
Correct handling of devices with sector_size other that 512 bytes.
In the case of a 4Kn device sector_size it is possible to describe a much
larger DSM Trim than the current fixed default of 512 bytes.This patch assumes the minimum descriptor is sector_size and fills out
the descriptor accordingly.The ACS-2 specification is quite clear that the DSM command payload is
sized as number of 512 byte transfers so a 4Kn device will operate
correctly without this patch.Signed-off-by: Shaun Tancheff
Acked-by: Tejun Heo -
SATA drives may support write same via SCT. This is useful
for setting the drive contents to a specific pattern (0's).Translate a SCSI WRITE SAME 16 command to be either a DSM TRIM
command or an SCT Write Same command.Based on the UNMAP flag:
- When set translate to DSM TRIM
- When not set translate to SCT Write SameSigned-off-by: Shaun Tancheff
Reviewed-by: Hannes Reinecke
Acked-by: Tejun Heo -
Safely overwriting the attached page to ATA format from the SCSI formatted
variant.Signed-off-by: Shaun Tancheff
Reviewed-by: Hannes Reinecke
Acked-by: Tejun Heo
12 Aug, 2016
2 commits
-
irq already contains the interrupt number for the port, don't add the
port index to it.Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
Fixes: d684a90d38e2 ("ahci: per-port msix support")
Cc: stable@vger.kernel.org v4.5+ -
Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo
11 Aug, 2016
1 commit
-
Despite ST AHCI version = 1.3, reading HOST_PORTS_IMPL
returns 0. So force_port_map to 1 by using ports-implemented
DT property.Signed-off-by: Patrice Chotard
Signed-off-by: Tejun Heo
10 Aug, 2016
4 commits
-
By default the SATA IP on the qoriq SoCs does not generating
coherent/snoopable transactions. This patch enable it in the
sata axicc register.
In addition, the dma-coherent property must be set on the
SATA controller nodes.Signed-off-by: Tang Yuantian
Signed-off-by: Tejun Heo -
The default values for Port Phy2Cfg register and
Port Phy3Cfg register are better, no need to overwrite them.Signed-off-by: Tang Yuantian
Signed-off-by: Tejun Heo -
scsi_done() was called repeatedly and apparently because of that,
the kernel would call trace when we touch the Control mode page:Call Trace:
[] dump_stack+0x63/0x81
[] __warn+0xcb/0xf0
[] warn_slowpath_null+0x1d/0x20
[] ata_eh_finish+0xe0/0xf0 [libata]
[] sata_pmp_error_handler+0x640/0xa50 [libata]
[] ahci_error_handler+0x1d/0x70 [libahci]
[] ata_scsi_port_error_handler+0x430/0x770 [libata]
[] ? ata_scsi_cmd_error_handler+0xdd/0x160 [libata]
[] ata_scsi_error+0xa7/0xf0 [libata]
[] scsi_error_handler+0xaa/0x560 [scsi_mod]
[] ? scsi_eh_get_sense+0x180/0x180 [scsi_mod]
[] kthread+0xd8/0xf0
[] ret_from_fork+0x1f/0x40
[] ? kthread_worker_fn+0x170/0x170
---[ end trace 8b7501047e928a17 ]---Removed the unnecessary code and let ata_scsi_translate() do the job.
Also, since ata_mselect_control() has no ATA command to send to the
device, ata_scsi_mode_select_xlat() should return 1 for it, so that
ata_scsi_translate() will finish early to avoid ata_qc_issue().Signed-off-by: Tom Yan
Signed-off-by: Tejun Heo -
ata_mselect_*() would initialize a char array for storing a copy of
the current mode page. However, char could be signed char. In that
case, bytes larger than 127 would be converted to negative number.For example, 0xff from def_control_mpage[] would become -1. This
prevented ata_mselect_control() from working at all, since when it
did the read-only bits check, there would always be a mismatch.Signed-off-by: Tom Yan
Signed-off-by: Tejun Heo
28 Jul, 2016
1 commit
-
Pull LED updates from Jacek Anaszewski:
"New LED class driver:
- LED driver for TI LP3952 6-Channel Color LEDLED core improvements:
- Only descend into leds directory when CONFIG_NEW_LEDS is set
- Add no-op gpio_led_register_device when LED subsystem is disabled
- MAINTAINERS: Add file patterns for led device tree bindingsLED Trigger core improvements:
- return error if invalid trigger name is provided via sysfsLED class drivers improvements
- is31fl32xx: define complete i2c_device_id table
- is31fl32xx: fix typo in id and match table names
- leds-gpio: Set of_node for created LED devices
- pca9532: Add device tree supportConversion of IDE trigger to common disk trigger:
- leds: convert IDE trigger to common disk trigger
- leds: documentation: 'ide-disk' to 'disk-activity'
- unicore32: use the new LED disk activity trigger
- parisc: use the new LED disk activity trigger
- mips: use the new LED disk activity trigger
- arm: use the new LED disk activity trigger
- powerpc: use the new LED disk activity trigger"* tag 'leds_for_4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/j.anaszewski/linux-leds:
leds: is31fl32xx: define complete i2c_device_id table
leds: is31fl32xx: fix typo in id and match table names
leds: LED driver for TI LP3952 6-Channel Color LED
leds: leds-gpio: Set of_node for created LED devices
leds: triggers: return error if invalid trigger name is provided via sysfs
leds: Only descend into leds directory when CONFIG_NEW_LEDS is set
leds: Add no-op gpio_led_register_device when LED subsystem is disabled
unicore32: use the new LED disk activity trigger
parisc: use the new LED disk activity trigger
mips: use the new LED disk activity trigger
arm: use the new LED disk activity trigger
powerpc: use the new LED disk activity trigger
leds: documentation: 'ide-disk' to 'disk-activity'
leds: convert IDE trigger to common disk trigger
leds: pca9532: Add device tree support
MAINTAINERS: Add file patterns for led device tree bindings
27 Jul, 2016
2 commits
-
Pull core block updates from Jens Axboe:
- the big change is the cleanup from Mike Christie, cleaning up our
uses of command types and modified flags. This is what will throw
some merge conflicts- regression fix for the above for btrfs, from Vincent
- following up to the above, better packing of struct request from
Christoph- a 2038 fix for blktrace from Arnd
- a few trivial/spelling fixes from Bart Van Assche
- a front merge check fix from Damien, which could cause issues on
SMR drives- Atari partition fix from Gabriel
- convert cfq to highres timers, since jiffies isn't granular enough
for some devices these days. From Jan and Jeff- CFQ priority boost fix idle classes, from me
- cleanup series from Ming, improving our bio/bvec iteration
- a direct issue fix for blk-mq from Omar
- fix for plug merging not involving the IO scheduler, like we do for
other types of merges. From Tahsin- expose DAX type internally and through sysfs. From Toshi and Yigal
* 'for-4.8/core' of git://git.kernel.dk/linux-block: (76 commits)
block: Fix front merge check
block: do not merge requests without consulting with io scheduler
block: Fix spelling in a source code comment
block: expose QUEUE_FLAG_DAX in sysfs
block: add QUEUE_FLAG_DAX for devices to advertise their DAX support
Btrfs: fix comparison in __btrfs_map_block()
block: atari: Return early for unsupported sector size
Doc: block: Fix a typo in queue-sysfs.txt
cfq-iosched: Charge at least 1 jiffie instead of 1 ns
cfq-iosched: Fix regression in bonnie++ rewrite performance
cfq-iosched: Convert slice_resid from u64 to s64
block: Convert fifo_time from ulong to u64
blktrace: avoid using timespec
block/blk-cgroup.c: Declare local symbols static
block/bio-integrity.c: Add #include "blk.h"
block/partition-generic.c: Remove a set-but-not-used variable
block: bio: kill BIO_MAX_SIZE
cfq-iosched: temporarily boost queue priority for idle classes
block: drbd: avoid to use BIO_MAX_SIZE
block: bio: remove BIO_MAX_SECTORS
... -
Pull libata updates from Tejun Heo:
"libata saw quite a bit of activities in this cycle:- SMR drive support still being worked on
- bug fixes and improvements to misc SCSI command emulation
- some low level driver updates"
* 'for-4.8' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata: (39 commits)
libata-scsi: better style in ata_msense_*()
AHCI: Clear GHC.IS to prevent unexpectly asserting INTx
ata: sata_dwc_460ex: remove redundant dev_err call
ata: define ATA_PROT_* in terms of ATA_PROT_FLAG_*
libata: remove ATA_PROT_FLAG_DATA
libata: remove ata_is_nodata
ata: make lba_{28,48}_ok() use ATA_MAX_SECTORS{,_LBA48}
libata-scsi: minor cleanup for ata_scsi_zbc_out_xlat
libata-scsi: Fix ZBC management out command translation
libata-scsi: Fix translation of REPORT ZONES command
ata: Handle ATA NCQ NO-DATA commands correctly
libata-eh: decode all taskfile protocols
ata: fixup ATA_PROT_NODATA
libsas: use ata_is_ncq() and ata_has_dma() accessors
libata: use ata_is_ncq() accessors
libata: return boolean values from ata_is_*
libata-scsi: avoid repeated calculation of number of TRIM ranges
libata-scsi: reject WRITE SAME (16) with n_block that exceeds limit
libata-scsi: rename ata_msense_ctl_mode() to ata_msense_control()
libata-scsi: fix D_SENSE bit relection in control mode page
...
23 Jul, 2016
1 commit
-
Pull libata fix from Tejun Heo:
"Another fallout from max_sectors bump a couple years ago. The lite-on
optical drive times out on large requests"* 'for-4.7-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/tj/libata:
libata: LITE-ON CX1-JB256-HP needs lower max_sectors
20 Jul, 2016
3 commits
-
`changeable` is the "version" of mode page requested by the user.
It will be less confusing/misleading if we do not check it
"together" with the setting bits of the drive.Not to mention that we currently have ata_mselect_*() implemented
in a way that each of them will serve exclusively a particular bit
on each page. The old style will hence make the condition look even
more unnecessarily arcane if the ata_msense_*() is reflecting more
than one bit.Signed-off-by: Tom Yan
Signed-off-by: Tejun Heo -
Due to PCI subsystem behaviour, unloading AHCI driver will disable
MSI and enable INTx. When HBA supports MSIx or Multiple MSI, Driver's
irq handler doesn't clear GHC.IS register. It works well when reading or
writing data and GHC.IS is always non-zero. But when unloading driver
(or any other operation which causes disable MSIx and enable INTx), PCI
subsystem uses config write(Rx04.bit10) to enable INTx. Because
GHC.IS is non-zero, HBA will falsely assume some port needs interrupt
service. Then it asserts INTx. To make things worse, when AHCI controller
shares the same interrupt pin with other PCI device, that PCI device's ISR
will be called and nobody de-asserts previous INTx.
This patch clears GHC.IS in ahci_port_stop() even when using MSIx or
MMSI to prevent this case. It ensures GHC.IS is zero before PCI subsystem
enables INTx.tj: Minor updates to the comment.
Signed-off-by: Raymond Pang
Signed-off-by: Tejun Heo -
There is a error message within devm_ioremap_resource
already, so remove the dev_err call to avoid redundant
error message.Signed-off-by: Wei Yongjun
Signed-off-by: Tejun Heo
19 Jul, 2016
1 commit
-
This avoid the need to always translate between the two in ata_prot_flags
and generally cleans up the taskfile protocol usage.Signed-off-by: Christoph Hellwig
Signed-off-by: Tejun Heo