Commit ec504b23 authored by Murthy Bhat's avatar Murthy Bhat Committed by Martin K. Petersen
Browse files

scsi: smartpqi: Add phy ID support for the physical drives

Display topology using PHY numbers. PHY (both local and remote) numbers
corresponding to physical drives are read from
BMIC_IDENTIFY_PHYSICAL_DEVICE.

Link: https://lore.kernel.org/r/161549383947.25025.16977895345376485056.stgit@brunhilda


Reviewed-by: default avatarScott Benesh <scott.benesh@microchip.com>
Reviewed-by: default avatarMike McGowen <mike.mcgowen@microchip.com>
Reviewed-by: default avatarScott Teel <scott.teel@microchip.com>
Reviewed-by: default avatarKevin Barnett <kevin.barnett@microchip.com>
Reviewed-by: default avatarMartin Wilck <mwilck@suse.com>
Signed-off-by: default avatarMurthy Bhat <Murthy.Bhat@microchip.com>
Signed-off-by: default avatarDon Brace <don.brace@microchip.com>
Signed-off-by: default avatarMartin K. Petersen <martin.petersen@oracle.com>
parent a4256252
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -1089,6 +1089,7 @@ struct pqi_scsi_dev {
	u8	phy_connected_dev_type;
	u8	box[8];
	u16	phys_connector[8];
	u8	phy_id;
	bool	raid_bypass_configured;	/* RAID bypass configured */
	bool	raid_bypass_enabled;	/* RAID bypass enabled */
	u32	next_bypass_group;
+10 −0
Original line number Diff line number Diff line
@@ -1434,6 +1434,8 @@ static void pqi_get_volume_status(struct pqi_ctrl_info *ctrl_info,
	device->volume_offline = volume_offline;
}

#define PQI_DEVICE_PHY_MAP_SUPPORTED	0x10

static int pqi_get_physical_device_info(struct pqi_ctrl_info *ctrl_info,
	struct pqi_scsi_dev *device,
	struct bmic_identify_physical_device *id_phys)
@@ -1473,6 +1475,13 @@ static int pqi_get_physical_device_info(struct pqi_ctrl_info *ctrl_info,
	memcpy(&device->page_83_identifier, &id_phys->page_83_identifier,
		sizeof(device->page_83_identifier));

	if ((id_phys->even_more_flags & PQI_DEVICE_PHY_MAP_SUPPORTED) &&
		id_phys->phy_count)
		device->phy_id =
			id_phys->phy_to_phy_map[device->active_path_index];
	else
		device->phy_id = 0xFF;

	return 0;
}

@@ -1839,6 +1848,7 @@ static void pqi_scsi_update_device(struct pqi_scsi_dev *existing_device,
	existing_device->aio_handle = new_device->aio_handle;
	existing_device->volume_status = new_device->volume_status;
	existing_device->active_path_index = new_device->active_path_index;
	existing_device->phy_id = new_device->phy_id;
	existing_device->path_map = new_device->path_map;
	existing_device->bay = new_device->bay;
	existing_device->box_index = new_device->box_index;
+1 −0
Original line number Diff line number Diff line
@@ -92,6 +92,7 @@ static int pqi_sas_port_add_rphy(struct pqi_sas_port *pqi_sas_port,

	identify = &rphy->identify;
	identify->sas_address = pqi_sas_port->sas_address;
	identify->phy_identifier = pqi_sas_port->device->phy_id;

	if (pqi_sas_port->device &&
		pqi_sas_port->device->is_expander_smp_device) {