* [PATCH] libata-zpodd: must use ata_tf_init()
@ 2013-06-23 19:25 Sergei Shtylyov
2013-06-23 19:34 ` Sergei Shtylyov
` (2 more replies)
0 siblings, 3 replies; 8+ messages in thread
From: Sergei Shtylyov @ 2013-06-23 19:25 UTC (permalink / raw)
To: linux-ide, tj; +Cc: aaron.lu
There are some SATA controllers which have both devices 0 and 1 but this module
just zeroes out taskfile and sets then ATA_TFLAG_DEVICE (not sure that's needed)
which could lead to a wrong device being selected just before issuing command.
Thus we should call ata_tf_init() which sets up the device register value
properly, like all other users of ata_exec_internal() do...
Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
---
The patch is against the 'for-3.10-fixes' branch of Tejun Heo's 'libata.git'
repository.
drivers/ata/libata-zpodd.c | 7 ++++---
1 file changed, 4 insertions(+), 3 deletions(-)
Index: libata/drivers/ata/libata-zpodd.c
===================================================================
--- libata.orig/drivers/ata/libata-zpodd.c
+++ libata/drivers/ata/libata-zpodd.c
@@ -32,13 +32,14 @@ struct zpodd {
static int eject_tray(struct ata_device *dev)
{
- struct ata_taskfile tf = {};
+ struct ata_taskfile tf;
const char cdb[] = { GPCMD_START_STOP_UNIT,
0, 0, 0,
0x02, /* LoEj */
0, 0, 0, 0, 0, 0, 0,
};
+ ata_tf_init(dev, &tf);
tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
tf.command = ATA_CMD_PACKET;
tf.protocol = ATAPI_PROT_NODATA;
@@ -52,8 +53,7 @@ static enum odd_mech_type zpodd_get_mech
char buf[16];
unsigned int ret;
struct rm_feature_desc *desc = (void *)(buf + 8);
- struct ata_taskfile tf = {};
-
+ struct ata_taskfile tf;
char cdb[] = { GPCMD_GET_CONFIGURATION,
2, /* only 1 feature descriptor requested */
0, 3, /* 3, removable medium feature */
@@ -62,6 +62,7 @@ static enum odd_mech_type zpodd_get_mech
0, 0, 0,
};
+ ata_tf_init(dev, &tf);
tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
tf.command = ATA_CMD_PACKET;
tf.protocol = ATAPI_PROT_PIO;
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] libata-zpodd: must use ata_tf_init()
2013-06-23 19:25 [PATCH] libata-zpodd: must use ata_tf_init() Sergei Shtylyov
@ 2013-06-23 19:34 ` Sergei Shtylyov
2013-06-24 22:46 ` Tejun Heo
2013-06-26 2:05 ` Aaron Lu
2 siblings, 0 replies; 8+ messages in thread
From: Sergei Shtylyov @ 2013-06-23 19:34 UTC (permalink / raw)
To: linux-ide, tj; +Cc: aaron.lu
Hello.
On 06/23/2013 11:25 PM, Sergei Shtylyov wrote:
> There are some SATA controllers which have both devices 0 and 1 but this module
> just zeroes out taskfile and sets then ATA_TFLAG_DEVICE (not sure that's needed)
> which could lead to a wrong device being selected just before issuing command.
> Thus we should call ata_tf_init() which sets up the device register value
> properly, like all other users of ata_exec_internal() do...
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Forgot to add Cc: stable@vger.kernel.org...
WBR, Sergei
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] libata-zpodd: must use ata_tf_init()
2013-06-23 19:25 [PATCH] libata-zpodd: must use ata_tf_init() Sergei Shtylyov
2013-06-23 19:34 ` Sergei Shtylyov
@ 2013-06-24 22:46 ` Tejun Heo
2013-06-26 2:05 ` Aaron Lu
2 siblings, 0 replies; 8+ messages in thread
From: Tejun Heo @ 2013-06-24 22:46 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-ide, aaron.lu
On Sun, Jun 23, 2013 at 11:25:04PM +0400, Sergei Shtylyov wrote:
> There are some SATA controllers which have both devices 0 and 1 but this module
> just zeroes out taskfile and sets then ATA_TFLAG_DEVICE (not sure that's needed)
> which could lead to a wrong device being selected just before issuing command.
> Thus we should call ata_tf_init() which sets up the device register value
> properly, like all other users of ata_exec_internal() do...
>
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
Applied to libata/for-3.11 w/ stable cc'd.
Thanks.
--
tejun
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] libata-zpodd: must use ata_tf_init()
2013-06-23 19:25 [PATCH] libata-zpodd: must use ata_tf_init() Sergei Shtylyov
2013-06-23 19:34 ` Sergei Shtylyov
2013-06-24 22:46 ` Tejun Heo
@ 2013-06-26 2:05 ` Aaron Lu
2013-06-26 11:10 ` Sergei Shtylyov
2 siblings, 1 reply; 8+ messages in thread
From: Aaron Lu @ 2013-06-26 2:05 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-ide, tj, aaron.lu
On 06/24/2013 03:25 AM, Sergei Shtylyov wrote:
> There are some SATA controllers which have both devices 0 and 1 but this module
Do you mean a SATA port can connect to two SATA devices without PMP?
No objections to this patch, it's obviously correct, just want to learn
something more :-)
Thanks,
Aaron
> just zeroes out taskfile and sets then ATA_TFLAG_DEVICE (not sure that's needed)
> which could lead to a wrong device being selected just before issuing command.
> Thus we should call ata_tf_init() which sets up the device register value
> properly, like all other users of ata_exec_internal() do...
>
> Signed-off-by: Sergei Shtylyov <sergei.shtylyov@cogentembedded.com>
>
> ---
> The patch is against the 'for-3.10-fixes' branch of Tejun Heo's 'libata.git'
> repository.
>
> drivers/ata/libata-zpodd.c | 7 ++++---
> 1 file changed, 4 insertions(+), 3 deletions(-)
>
> Index: libata/drivers/ata/libata-zpodd.c
> ===================================================================
> --- libata.orig/drivers/ata/libata-zpodd.c
> +++ libata/drivers/ata/libata-zpodd.c
> @@ -32,13 +32,14 @@ struct zpodd {
>
> static int eject_tray(struct ata_device *dev)
> {
> - struct ata_taskfile tf = {};
> + struct ata_taskfile tf;
> const char cdb[] = { GPCMD_START_STOP_UNIT,
> 0, 0, 0,
> 0x02, /* LoEj */
> 0, 0, 0, 0, 0, 0, 0,
> };
>
> + ata_tf_init(dev, &tf);
> tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
> tf.command = ATA_CMD_PACKET;
> tf.protocol = ATAPI_PROT_NODATA;
> @@ -52,8 +53,7 @@ static enum odd_mech_type zpodd_get_mech
> char buf[16];
> unsigned int ret;
> struct rm_feature_desc *desc = (void *)(buf + 8);
> - struct ata_taskfile tf = {};
> -
> + struct ata_taskfile tf;
> char cdb[] = { GPCMD_GET_CONFIGURATION,
> 2, /* only 1 feature descriptor requested */
> 0, 3, /* 3, removable medium feature */
> @@ -62,6 +62,7 @@ static enum odd_mech_type zpodd_get_mech
> 0, 0, 0,
> };
>
> + ata_tf_init(dev, &tf);
> tf.flags = ATA_TFLAG_ISADDR | ATA_TFLAG_DEVICE;
> tf.command = ATA_CMD_PACKET;
> tf.protocol = ATAPI_PROT_PIO;
> --
> To unsubscribe from this list: send the line "unsubscribe linux-ide" in
> the body of a message to majordomo@vger.kernel.org
> More majordomo info at http://vger.kernel.org/majordomo-info.html
>
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] libata-zpodd: must use ata_tf_init()
2013-06-26 2:05 ` Aaron Lu
@ 2013-06-26 11:10 ` Sergei Shtylyov
2013-06-27 1:15 ` Aaron Lu
0 siblings, 1 reply; 8+ messages in thread
From: Sergei Shtylyov @ 2013-06-26 11:10 UTC (permalink / raw)
To: Aaron Lu; +Cc: linux-ide, tj
Hello.
On 26-06-2013 6:05, Aaron Lu wrote:
>> There are some SATA controllers which have both devices 0 and 1 but this module
> Do you mean a SATA port can connect to two SATA devices without PMP?
No, I mean 2 SATA ports combined in one ATA channel as 2 devices.
Look for SLAVE_POSS in drivers/ata/[s]ata*.c...
> Thanks,
> Aaron
MBR, Sergei
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] libata-zpodd: must use ata_tf_init()
2013-06-26 11:10 ` Sergei Shtylyov
@ 2013-06-27 1:15 ` Aaron Lu
2013-06-28 12:49 ` Sergei Shtylyov
0 siblings, 1 reply; 8+ messages in thread
From: Aaron Lu @ 2013-06-27 1:15 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-ide, tj
On 06/26/2013 07:10 PM, Sergei Shtylyov wrote:
> Hello.
>
> On 26-06-2013 6:05, Aaron Lu wrote:
>
>>> There are some SATA controllers which have both devices 0 and 1 but this module
>
>> Do you mean a SATA port can connect to two SATA devices without PMP?
>
> No, I mean 2 SATA ports combined in one ATA channel as 2 devices.
> Look for SLAVE_POSS in drivers/ata/[s]ata*.c...
Oh yes that happened when the SATA controller is in IDE programming
mode, not AHCI.
ZPODD is only supported for SATA controllers in AHCI programming mode,
the ACPI table will not support power off the port if the controller is
in IDE mode, so the device 1 case shouldn't happen in practice :-)
Thanks,
Aaron
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] libata-zpodd: must use ata_tf_init()
2013-06-27 1:15 ` Aaron Lu
@ 2013-06-28 12:49 ` Sergei Shtylyov
2013-06-29 13:04 ` Aaron Lu
0 siblings, 1 reply; 8+ messages in thread
From: Sergei Shtylyov @ 2013-06-28 12:49 UTC (permalink / raw)
To: Aaron Lu; +Cc: linux-ide, tj
Hello.
On 27-06-2013 5:15, Aaron Lu wrote:
>>>> There are some SATA controllers which have both devices 0 and 1 but this module
>>> Do you mean a SATA port can connect to two SATA devices without PMP?
>> No, I mean 2 SATA ports combined in one ATA channel as 2 devices.
>> Look for SLAVE_POSS in drivers/ata/[s]ata*.c...
> Oh yes that happened when the SATA controller is in IDE programming
> mode, not AHCI.
AHCI is not the only mode for the SATA controllers.
> ZPODD is only supported for SATA controllers in AHCI programming mode,
Hm, really? How about the true SATA controllers that don't use AHCI?
> the ACPI table will not support power off the port if the controller is
> in IDE mode, so the device 1 case shouldn't happen in practice :-)
Anyway, I need uniform setup for ata_exec_internal() call for my to
be posted cleanup patches.
> Thanks,
> Aaron
WBR, Sergei
^ permalink raw reply [flat|nested] 8+ messages in thread
* Re: [PATCH] libata-zpodd: must use ata_tf_init()
2013-06-28 12:49 ` Sergei Shtylyov
@ 2013-06-29 13:04 ` Aaron Lu
0 siblings, 0 replies; 8+ messages in thread
From: Aaron Lu @ 2013-06-29 13:04 UTC (permalink / raw)
To: Sergei Shtylyov; +Cc: linux-ide, tj
On 06/28/2013 08:49 PM, Sergei Shtylyov wrote:
> Hello.
>
> On 27-06-2013 5:15, Aaron Lu wrote:
>
>>>>> There are some SATA controllers which have both devices 0 and 1 but this module
>
>>>> Do you mean a SATA port can connect to two SATA devices without PMP?
>
>>> No, I mean 2 SATA ports combined in one ATA channel as 2 devices.
>>> Look for SLAVE_POSS in drivers/ata/[s]ata*.c...
>
>> Oh yes that happened when the SATA controller is in IDE programming
>> mode, not AHCI.
>
> AHCI is not the only mode for the SATA controllers.
Right.
>
>> ZPODD is only supported for SATA controllers in AHCI programming mode,
>
> Hm, really? How about the true SATA controllers that don't use AHCI?
If they don't set ATA_FLAG_ACPI_SATA, no.
>
>> the ACPI table will not support power off the port if the controller is
>> in IDE mode, so the device 1 case shouldn't happen in practice :-)
>
> Anyway, I need uniform setup for ata_exec_internal() call for my to
> be posted cleanup patches.
No problem.
Thanks,
Aaron
^ permalink raw reply [flat|nested] 8+ messages in thread
end of thread, other threads:[~2013-06-29 13:06 UTC | newest]
Thread overview: 8+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2013-06-23 19:25 [PATCH] libata-zpodd: must use ata_tf_init() Sergei Shtylyov
2013-06-23 19:34 ` Sergei Shtylyov
2013-06-24 22:46 ` Tejun Heo
2013-06-26 2:05 ` Aaron Lu
2013-06-26 11:10 ` Sergei Shtylyov
2013-06-27 1:15 ` Aaron Lu
2013-06-28 12:49 ` Sergei Shtylyov
2013-06-29 13:04 ` Aaron Lu
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).