Commit 7e629841 authored by Bartek Nowakowski's avatar Bartek Nowakowski Committed by James Bottomley
Browse files

[SCSI] isci: enable wide port targets



Arrange for task_contexts prepared for the wide targets to account for
all the attached phys in the port.

Signed-off-by: default avatarBartek Nowakowski <bartek.nowakowski@intel.com>
Signed-off-by: default avatarDan Williams <dan.j.williams@intel.com>
Signed-off-by: default avatarJames Bottomley <JBottomley@Parallels.com>
parent d4ec1cf6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -114,7 +114,7 @@ static u32 sci_port_get_phys(struct isci_port *iport)
 * value is returned if the specified port is not valid.  When this value is
 * returned, no data is copied to the properties output parameter.
 */
static enum sci_status sci_port_get_properties(struct isci_port *iport,
enum sci_status sci_port_get_properties(struct isci_port *iport,
						struct sci_port_properties *prop)
{
	if (!iport || iport->logical_port_index == SCIC_SDS_DUMMY_PORT)
+4 −0
Original line number Diff line number Diff line
@@ -250,6 +250,10 @@ bool sci_port_link_detected(
	struct isci_port *iport,
	struct isci_phy *iphy);

enum sci_status sci_port_get_properties(
	struct isci_port *iport,
	struct sci_port_properties *prop);

enum sci_status sci_port_link_up(struct isci_port *iport,
				      struct isci_phy *iphy);
enum sci_status sci_port_link_down(struct isci_port *iport,
+7 −3
Original line number Diff line number Diff line
@@ -53,6 +53,7 @@
 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
 */
#include <scsi/sas.h>
#include <linux/bitops.h>
#include "isci.h"
#include "port.h"
#include "remote_device.h"
@@ -1101,6 +1102,7 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport,
						       struct isci_remote_device *idev)
{
	enum sci_status status;
	struct sci_port_properties properties;
	struct domain_device *dev = idev->domain_dev;

	sci_remote_device_construct(iport, idev);
@@ -1110,6 +1112,11 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport,
	 * entries will be needed to store the remote node.
	 */
	idev->is_direct_attached = true;

	sci_port_get_properties(iport, &properties);
	/* Get accurate port width from port's phy mask for a DA device. */
	idev->device_port_width = hweight32(properties.phy_mask);

	status = sci_controller_allocate_remote_node_context(iport->owning_controller,
								  idev,
								  &idev->rnc.remote_node_index);
@@ -1125,9 +1132,6 @@ static enum sci_status sci_remote_device_da_construct(struct isci_port *iport,

	idev->connection_rate = sci_port_get_max_allowed_speed(iport);

	/* / @todo Should I assign the port width by reading all of the phys on the port? */
	idev->device_port_width = 1;

	return SCI_SUCCESS;
}