Skip site navigation (1)Skip section navigation (2)
Date:      Fri, 05 Jun 2009 12:41:53 -0400
From:      Gary Corcoran <gcorcoran@rcn.com>
To:        Matthew Dillon <dillon@apollo.backplane.com>
Cc:        Alexander Motin <mav@mavhome.dp.ua>, FreeBSD-Current <freebsd-current@freebsd.org>, freebsd-arch@freebsd.org
Subject:   Re: WIP: ATA to CAM integration
Message-ID:  <4A294AD1.6040809@rcn.com>
In-Reply-To: <200906051601.n55G10Mi075734@apollo.backplane.com>
References:  <4A254B45.8050800@mavhome.dp.ua>	<200906050703.n5573x5Q071765@apollo.backplane.com> <200906051601.n55G10Mi075734@apollo.backplane.com>

next in thread | previous in thread | raw e-mail | index | archive | help
Matthew Dillon wrote:
>     More on the port multiplier spec.  It turns out that the port-multiplier
>     port selector is in the command table, so it is per command-tag.  There
>     is confusion in the spec though:
> 
>     section 9.1:
> 
>     In this mode of operation, a communication path is opened between the
>     HBA and a device through the Port Multiplier.  Since Port Multipliers are
>     meant to be simple, the burden of making a connection is on the AHCI
>     software, to ensure that multiple commands are not outstanding to
>     different devices behind the Port Multiplier.
> 
>     section 9.1.2:
> 
>     "Since queued commands result in two different operations (command issue,
>     clear of BSY, then data transfer), if commands were sent to different
>     ports, the Port Multiplier may issue FISes back to the HBA in
>     an interleaved manner from different ports.  This will break an HBA that
>     only supports command-based switching.  Therefore, when executing native
>     command queueing commands, system software must only add commands
>     to the command list that target a single port behind the Port Multiplier,
>     wait for the commands to finish (PxSACT bits all cleared), then add
>     commands for a different port.  Additionally, the tags used
>     must match the command slot entries."
> 
>     --
> 
>     It's unclear to me what this means.  Can we use NCQ to queue multiple
>     commands to multiple ports behind a single port multiplier in parallel
>     or can't we?  It's very confusing.

As I read the above, this:
 > ensure that multiple commands are not outstanding to
 >     different devices behind the Port Multiplier

combined with this:
 > system software must only add commands
 >     to the command list that target a *single port* behind the Port Multiplier,
 >     *wait for the commands to finish*

suggests strongly that you many not send multiple commands out to a single
port multiplier.  However, I agree that it's not crystal clear, and may not
be what was intended.

Gary



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?4A294AD1.6040809>