Thread (14 messages) 14 messages, 3 authors, 2019-12-25

Re: linux: sata_nv: adma support

From: Robert Hancock <hidden>
Date: 2015-08-02 01:45:36
Also in: lkml

On Sat, Aug 1, 2015 at 2:09 PM, Pali Rohár [off-list ref] wrote:
On Thursday 25 December 2014 07:22:13 Robert Hancock wrote:
quoted
On Tue, Dec 23, 2014 at 1:51 PM, Pali Rohár [off-list ref]
wrote:
quoted
Hello,

I have nvidia nforce4 motherboard with nvidia sata controller:

00:07.0 IDE interface [0101]: NVIDIA Corporation CK804 Serial ATA
Controller [10de:0054] (rev f3)
00:08.0 IDE interface [0101]: NVIDIA Corporation CK804 Serial ATA
Controller [10de:0055] (rev f3)

I manually enabled adma mode (which is disabled by default) by
adding sata_nv.adma=1 to grub cmdline. In git history I found
that enabling adma mode includes NCQ support and reduced CPU
overhead. It looks like adma mode is working, but at every boot I
see one same error message in dmesg:

[   16.823514] ata1.00: exception Emask 0x1 SAct 0x0 SErr 0x0
action 0x0
[   16.823520] ata1.00: CPB resp_flags 0x11: , CMD error
[   16.823524] ata1.00: failed command: SET FEATURES
[   16.823530] ata1.00: cmd ef/05:fe:00:00:00/00:00:00:00:00/40
tag 16
[   16.823530]          res 51/04:fe:00:00:00/00:00:00:00:00/40
Emask 0x1 (device error)
[   16.823533] ata1.00: status: { DRDY ERR }
[   16.823535] ata1.00: error: { ABRT }

When adma is disabled then this error message is not generated.
It looks like something is trying to issue a command to disable APM
power management on the drive, and the command fails (likely because
it doesn't support that command). I'm not sure where that would be
coming from - I'm pretty sure the kernel doesn't issue that command
itself. Something that's part of your distro perhaps?

I don't know why it would only be failing in ADMA mode either, though
depending on where the command is coming from, maybe it's not being
issued otherwise for some reason?
quoted
What does that error message means? It is critical? What is that
command SET FEATURES doing? Are there any problems with adma mode
on nforce4 motherboards? Because I did not see any problems
(except that one error message).

--
Pali Rohár
pali.rohar@gmail.com
Hello,

now after long time I did more investigation and that error is reported
for every connected HDD. I identified that it comes from udev script

 /lib/udev/rules.d/85-hdparm.rules

which just call script /lib/udev/hdparm for every one connected HDD.

Script /lib/udev/hdparm just call:

 /sbin/hdparm -B254 $DRIVE

And that -B254 cause above error message in dmesg log. Output from
hdparm is:

 /dev/sda:
  setting Advanced Power Management level to 0xfe (254)
  APM_level      = not supported

Any idea why in ADMA mode it cause above error (APM unsupported) and in
non ADMA mode it is working fine? Maybe APM ATA commands should not be
sent via ADMA?

Here is another output:

 $ sudo hdparm -I /dev/sda | grep -i power
            *    Power Management feature set
                 Power-Up In Standby feature set
            *    SET_FEATURES required to spinup after power up
            *    Host-initiated interface power management
The "set features" command is a non-data command so based on our
current knowledge, it should work in ADMA mode. However, these NVIDIA
SATAs are black boxes, and rather buggy ones at that, so it's possible
there's an unknown issue there.

The easiest way to test that would be to take out the condition check
for qc->tf.protocol == ATA_PROT_NODATA in nv_adma_use_reg_mode in
drivers/ata/sata_nv.c. That would force it to disable ADMA for all
non-data commands.

I really don't know why Ubuntu is disabling APM on all drives on
bootup however. Especially for laptops, that seems like a silly thing
to do explicitly. Sounds like one of the silly things Ubuntu is known
to do without consulting people.
Keyboard shortcuts
hback out one level
jnext message in thread
kprevious message in thread
ldrill in
Escclose help / fold thread tree
?toggle this help