linux-ide.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
From: Tejun Heo <htejun@gmail.com>
To: Jeff Garzik <jgarzik@pobox.com>
Cc: albertcc@tw.ibm.com, liml@rtr.ca, linux-ide@vger.kernel.org
Subject: Re: [RFC/PATCHSET] libata: new reset mechanism
Date: Mon, 19 Dec 2005 15:03:46 +0900	[thread overview]
Message-ID: <43A64D42.2080700@gmail.com> (raw)
In-Reply-To: <43A64334.7010500@pobox.com>


Hello, Jeff.

Jeff Garzik wrote:
> Tejun Heo wrote:
> 
>> Hello, all.
>>
>> Currently libata uses ->phy_reset to reset ports.  However,
>> ->phy_reset is tightly woven into probing process (directly
>> manipulating device[]->class and disabling ports on failure) and thus
>> awkward to use for error handling or other purposes.
>>
>> Another problem with the current scheme is that libata doesn't have
>> much control over reset process, which isn't very nice for both
>> initialization and error handling.
>>
>> This patchset implements new reset mechanism.  The new mechanism can
>> peacefully live side-by-side with ->phy_reset mechanism and low level
>> drivers can be converted gradually.  This patchset converts sata_sil,
>> sata_sil24, ata_piix and ahci as a start.
>>
>> This patchset is composed of the following 14 patches.
>>
>> #01-03    : implement new reset mechanism and standard callbacks
>> #04    : preparation for low level driver conversion
>> #05    : convert sata_sil
>> #06-07    : convert sata_sil24 and add hardreset
>> #08-09    : convert ata_piix
>> #10-14    : convert ahci and add softreset
> 
> 
> Hard and soft reset should be implemented as
> 
>     qc = ata_qc_new_init()
>     qc->tf.protocol = ATA_PROT_HARD_RESET;
>     ... ata_qc_issue() ...
> 
> which automatically takes advantage of the ability to specify a behavior 
> using the qc_prep/qc_issue driver hooks.  The ATA passthru CDB supports 
> this method of programming (hard and soft reset are specified 
> protocols), and this is very similar to how the SiI 3124 behaves.  Other 
> FIS-based controllers will implement qc_issue/qc_prep such that they 
> send two Control FIS's.  Taskfile-based controllers use the currently 
> implemented method.

I don't really agree with you.  IMHO, resets are too different from 
standard qc execution (ie. standard ATA command execution) to be a qc 
protocol.  Also, how are we gonna represent host reset with qc?  I like 
the "everything via qc" idea but I think making resets protocols of qc 
is pushing too far.  Please consider...

* If we go with qc_prep/issue, we don't have context while executing 
resets.  Even though SATA is pretty much event-driven, many controllers 
still need quite some amount of polling during resets.  Even though a 
controller can be reset using interrupts/events, the code will be much 
more complex.  I think it's MUCH better to perform resets with context.

* If we perform resets with context, we can use ata_exec_internal() 
while performing resets.  If a controller can perform resets by issuing 
qc's or wants to do some post-reset configuration commands, it can do so 
by simply invoking ata_exec_internal().  If resets become qc protocols, 
we'll need to dance _really_ hard to do anything similar.  Please 
consider the state of IDE driver regarding resets / reconfiguration.

* Resets must be followed by a series of configuration commands.  i.e. 
we need context after performing reset anyway.  So, the context needs to 
be there whether or not resets are performed with contexts.

> On a separate note, E.D.D. support can probably be dropped.  No driver 
> uses it AFAIK.  It was only used during development and in the early 
> libata days.

Cool.

> Further, we should lean towards avoiding hard reset, and issuing SRST 
> most of the time, even for drivers currently doing hard reset (COMRESET).

That's what this patchset does.  It issues COMRESET only if SRST fails. 
  I'll talk about this in another reply.

Thanks for reviewing this.

-- 
tejun

  reply	other threads:[~2005-12-19  6:03 UTC|newest]

Thread overview: 31+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2005-12-18 13:33 [RFC/PATCHSET] libata: new reset mechanism Tejun Heo
2005-12-18 13:36 ` [PATCH 01/14] libata: modify ata_dev_try_classify Tejun Heo
2005-12-18 13:38 ` [PATCH 02/14] libata: implement new reset mechanism Tejun Heo
2005-12-19  5:31   ` Jeff Garzik
2005-12-19  6:33     ` Tejun Heo
2005-12-18 13:40 ` [PATCH 03/14] libata: implement standard reset methods Tejun Heo
2005-12-18 13:41 ` [PATCH 04/14] libata: export ata_busy_sleep() Tejun Heo
2005-12-18 13:42 ` [PATCH 05/14] sata_sil: convert to new reset mechanism Tejun Heo
2005-12-18 13:43 ` [PATCH 06/14] sata_sil24: " Tejun Heo
2005-12-18 13:44 ` [PATCH 07/14] sata_sil24: add hardreset Tejun Heo
2005-12-18 13:46 ` [PATCH 08/14] ata_piix: convert pata to new reset mechanism Tejun Heo
2005-12-18 13:47 ` [PATCH 09/14] ata_piix: convert sata " Tejun Heo
2005-12-18 13:48 ` [PATCH 10/14] ahci: separate out ahci_stop/start_engine() Tejun Heo
2005-12-19  5:33   ` Jeff Garzik
2005-12-19  6:05     ` Tejun Heo
2005-12-18 13:49 ` [PATCH 11/14] ahci: convert to new reset mechanism Tejun Heo
2005-12-19  5:33   ` Jeff Garzik
2005-12-19  6:07     ` Tejun Heo
2005-12-18 13:50 ` [PATCH 12/14] ahci: separate out ahci_cmd_prep() Tejun Heo
2005-12-19  5:34   ` Jeff Garzik
2005-12-18 13:51 ` [PATCH 13/14] ahci: add constants for SRST Tejun Heo
2005-12-19  5:35   ` Jeff Garzik
2005-12-18 13:51 ` [PATCH 14/14] ahci: add softreset Tejun Heo
2005-12-19  5:36   ` Jeff Garzik
2005-12-19  6:12     ` Tejun Heo
2005-12-19  6:40       ` Jeff Garzik
2005-12-19  7:13         ` Tejun Heo
2006-01-29  5:11           ` Jeff Garzik
2005-12-19  5:20 ` [RFC/PATCHSET] libata: new reset mechanism Jeff Garzik
2005-12-19  6:03   ` Tejun Heo [this message]
2006-01-29  5:20     ` Jeff Garzik

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=43A64D42.2080700@gmail.com \
    --to=htejun@gmail.com \
    --cc=albertcc@tw.ibm.com \
    --cc=jgarzik@pobox.com \
    --cc=liml@rtr.ca \
    --cc=linux-ide@vger.kernel.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
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).