From f700ad4331d55df729a36b2602c4abe2d855036f Mon Sep 17 00:00:00 2001 From: Dave Jiang Date: Wed, 4 May 2011 18:08:35 -0700 Subject: [PATCH] isci: remove redundant copies of IAF We need to remove the extra copies of identify address frame that's being kept around. We only need the one copy that libsas is using. Signed-off-by: Dave Jiang [further cleanups] Signed-off-by: Dan Williams --- drivers/scsi/isci/core/scic_phy.h | 43 ----------------- drivers/scsi/isci/core/scic_sds_phy.c | 69 +++++---------------------- drivers/scsi/isci/core/scic_sds_phy.h | 5 -- drivers/scsi/isci/phy.h | 3 -- drivers/scsi/isci/port.c | 27 ----------- 5 files changed, 11 insertions(+), 136 deletions(-) diff --git a/drivers/scsi/isci/core/scic_phy.h b/drivers/scsi/isci/core/scic_phy.h index 8fcd3a4c574..3f43e8d69c4 100644 --- a/drivers/scsi/isci/core/scic_phy.h +++ b/drivers/scsi/isci/core/scic_phy.h @@ -287,47 +287,4 @@ enum scic_phy_counter_id { SCIC_PHY_COUNTER_SN_DWORD_SYNC_ERROR }; - -/** - * scic_sas_phy_get_properties() - This method will enable the user to retrieve - * information specific to a SAS phy, such as: the received identify address - * frame, received phy capabilities, etc. - * @phy: this parameter specifies the phy for which to retrieve properties. - * @properties: This parameter specifies the properties structure into which to - * copy the requested information. - * - * This method returns an indication as to whether the SAS phy properties were - * successfully retrieved. SCI_SUCCESS This value is returned if the SAS - * properties are successfully retrieved. SCI_FAILURE This value is returned if - * the SAS properties are not successfully retrieved (e.g. It's not a SAS Phy). - */ -enum sci_status scic_sas_phy_get_properties( - struct scic_sds_phy *phy, - struct scic_sas_phy_properties *properties); - -/** - * scic_sata_phy_get_properties() - This method will enable the user to - * retrieve information specific to a SATA phy, such as: the received - * signature FIS, if a port selector is present, etc. - * @phy: this parameter specifies the phy for which to retrieve properties. - * @properties: This parameter specifies the properties structure into which to - * copy the requested information. - * - * This method returns an indication as to whether the SATA phy properties were - * successfully retrieved. SCI_SUCCESS This value is returned if the SATA - * properties are successfully retrieved. SCI_FAILURE This value is returned if - * the SATA properties are not successfully retrieved (e.g. It's not a SATA - * Phy). - */ -enum sci_status scic_sata_phy_get_properties( - struct scic_sds_phy *phy, - struct scic_sata_phy_properties *properties); - - - - - - - #endif /* _SCIC_PHY_H_ */ - diff --git a/drivers/scsi/isci/core/scic_sds_phy.c b/drivers/scsi/isci/core/scic_sds_phy.c index bd2b3058770..4afdb422ab9 100644 --- a/drivers/scsi/isci/core/scic_sds_phy.c +++ b/drivers/scsi/isci/core/scic_sds_phy.c @@ -436,8 +436,9 @@ void scic_sds_phy_get_attached_sas_address(struct scic_sds_phy *sci_phy, struct sci_sas_address *sas_address) { struct sas_identify_frame *iaf; + struct isci_phy *iphy = sci_phy->iphy; - iaf = &sci_phy->phy_type.sas_id_frame; + iaf = &iphy->frame_rcvd.iaf; memcpy(sas_address, iaf->sas_addr, SAS_ADDR_SIZE); } @@ -458,13 +459,13 @@ void scic_sds_phy_get_attached_phy_protocols( protocols->u.all = 0; if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SAS) { + struct isci_phy *iphy = sci_phy->iphy; struct sas_identify_frame *iaf; - iaf = &sci_phy->phy_type.sas_id_frame; + iaf = &iphy->frame_rcvd.iaf; memcpy(&protocols->u.all, &iaf->initiator_bits, 2); - } else if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA) { + } else if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA) protocols->u.bits.stp_target = 1; - } } /* @@ -549,49 +550,6 @@ enum sci_status scic_sds_phy_consume_power_handler( return sci_phy->state_handlers->consume_power_handler(sci_phy); } -/* - * ***************************************************************************** - * * SCIC PHY Public Methods - * ***************************************************************************** */ - - -enum sci_status scic_sas_phy_get_properties( - struct scic_sds_phy *sci_phy, - struct scic_sas_phy_properties *properties) -{ - if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SAS) { - memcpy(&properties->rcvd_iaf, - &sci_phy->phy_type.sas_id_frame, - sizeof(struct sas_identify_frame)); - - properties->rcvd_cap.all = - readl(&sci_phy->link_layer_registers->receive_phycap); - - return SCI_SUCCESS; - } - - return SCI_FAILURE; -} - - -enum sci_status scic_sata_phy_get_properties( - struct scic_sds_phy *sci_phy, - struct scic_sata_phy_properties *properties) -{ - if (sci_phy->protocol == SCIC_SDS_PHY_PROTOCOL_SATA) { - memcpy(&properties->signature_fis, - &sci_phy->phy_type.sata_sig_fis, - sizeof(struct dev_to_host_fis)); - - /* / @todo add support for port selectors. */ - properties->is_port_selector_present = false; - - return SCI_SUCCESS; - } - - return SCI_FAILURE; -} - /* * ***************************************************************************** * * SCIC SDS PHY HELPER FUNCTIONS @@ -1163,6 +1121,7 @@ static enum sci_status scic_sds_phy_starting_substate_await_iaf_uf_frame_handler enum sci_status result; u32 *frame_words; struct sas_identify_frame *identify_frame; + struct isci_phy *iphy = sci_phy->iphy; result = scic_sds_unsolicited_frame_control_get_header( &(scic_sds_phy_get_controller(sci_phy)->uf_control), @@ -1188,9 +1147,7 @@ static enum sci_status scic_sds_phy_starting_substate_await_iaf_uf_frame_handler frame_words[4] = SCIC_SWAP_DWORD(frame_words[4]); frame_words[5] = SCIC_SWAP_DWORD(frame_words[5]); - memcpy(&sci_phy->phy_type.sas_id_frame, - identify_frame, - sizeof(struct sas_identify_frame)); + memcpy(&iphy->frame_rcvd.iaf, identify_frame, sizeof(*identify_frame)); if (identify_frame->smp_tport) { /* We got the IAF for an expander PHY go to the final state since @@ -1239,6 +1196,7 @@ static enum sci_status scic_sds_phy_starting_substate_await_sig_fis_frame_handle enum sci_status result; struct dev_to_host_fis *frame_header; u32 *fis_frame_data; + struct isci_phy *iphy = sci_phy->iphy; result = scic_sds_unsolicited_frame_control_get_header( &(scic_sds_phy_get_controller(sci_phy)->uf_control), @@ -1255,10 +1213,9 @@ static enum sci_status scic_sds_phy_starting_substate_await_sig_fis_frame_handle frame_index, (void **)&fis_frame_data); - scic_sds_controller_copy_sata_response( - &sci_phy->phy_type.sata_sig_fis, - frame_header, - fis_frame_data); + scic_sds_controller_copy_sata_response(&iphy->frame_rcvd.fis, + frame_header, + fis_frame_data); /* got IAF we can now go to the await spinup semaphore state */ sci_base_state_machine_change_state(&sci_phy->starting_substate_machine, @@ -2330,7 +2287,6 @@ static const struct sci_base_state scic_sds_phy_state_table[] = { void scic_sds_phy_construct(struct scic_sds_phy *sci_phy, struct scic_sds_port *owning_port, u8 phy_index) { - sci_base_state_machine_construct(&sci_phy->state_machine, sci_phy, scic_sds_phy_state_table, @@ -2347,9 +2303,6 @@ void scic_sds_phy_construct(struct scic_sds_phy *sci_phy, sci_phy->max_negotiated_speed = SAS_LINK_RATE_UNKNOWN; sci_phy->sata_timeout_timer = NULL; - /* Clear out the identification buffer data */ - memset(&sci_phy->phy_type, 0, sizeof(sci_phy->phy_type)); - /* Initialize the the substate machines */ sci_base_state_machine_construct(&sci_phy->starting_substate_machine, sci_phy, diff --git a/drivers/scsi/isci/core/scic_sds_phy.h b/drivers/scsi/isci/core/scic_sds_phy.h index 47b2194574a..e91f28316c0 100644 --- a/drivers/scsi/isci/core/scic_sds_phy.h +++ b/drivers/scsi/isci/core/scic_sds_phy.h @@ -272,11 +272,6 @@ struct scic_sds_phy { */ bool is_in_link_training; - union { - struct sas_identify_frame sas_id_frame; - struct dev_to_host_fis sata_sig_fis; - } phy_type; - /** * This field contains a reference to the timer utilized in detecting * when a signature FIS timeout has occurred. The signature FIS is the diff --git a/drivers/scsi/isci/phy.h b/drivers/scsi/isci/phy.h index 3100fd87c78..d4c4975546e 100644 --- a/drivers/scsi/isci/phy.h +++ b/drivers/scsi/isci/phy.h @@ -71,11 +71,8 @@ */ struct isci_phy { - struct scic_sds_phy *sci_phy_handle; - struct asd_sas_phy sas_phy; - struct sas_identify_frame *frame; struct isci_port *isci_port; u8 sas_addr[SAS_ADDR_SIZE]; diff --git a/drivers/scsi/isci/port.c b/drivers/scsi/isci/port.c index 0a1577327d6..96a2002dade 100644 --- a/drivers/scsi/isci/port.c +++ b/drivers/scsi/isci/port.c @@ -171,7 +171,6 @@ void isci_port_link_up( struct scic_port_properties properties; struct isci_phy *isci_phy = phy->iphy; struct isci_port *isci_port = port->iport; - enum sci_status call_status; unsigned long success = true; BUG_ON(isci_phy->isci_port != NULL); @@ -191,21 +190,7 @@ void isci_port_link_up( if (properties.remote.protocols.u.bits.stp_target) { u64 attached_sas_address; - struct scic_sata_phy_properties sata_phy_properties; - isci_phy->sas_phy.oob_mode = SATA_OOB_MODE; - - /* Get a copy of the signature fis for libsas */ - call_status = scic_sata_phy_get_properties(phy, - &sata_phy_properties); - - /* - * XXX I am concerned about this "assert". shouldn't we - * handle the return appropriately? - */ - BUG_ON(call_status != SCI_SUCCESS); - - isci_phy->frame_rcvd.fis = sata_phy_properties.signature_fis; isci_phy->sas_phy.frame_rcvd_size = sizeof(struct dev_to_host_fis); /* @@ -225,24 +210,12 @@ void isci_port_link_up( } else if (properties.remote.protocols.u.bits.ssp_target || properties.remote.protocols.u.bits.smp_target) { - - struct scic_sas_phy_properties sas_phy_properties; - isci_phy->sas_phy.oob_mode = SAS_OOB_MODE; - - /* Get a copy of the identify address frame for libsas */ - call_status = scic_sas_phy_get_properties(phy, - &sas_phy_properties); - - BUG_ON(call_status != SCI_SUCCESS); - - isci_phy->frame_rcvd.iaf = sas_phy_properties.rcvd_iaf; isci_phy->sas_phy.frame_rcvd_size = sizeof(struct sas_identify_frame); /* Copy the attached SAS address from the IAF */ memcpy(isci_phy->sas_phy.attached_sas_addr, isci_phy->frame_rcvd.iaf.sas_addr, SAS_ADDR_SIZE); - } else { dev_err(&isci_host->pdev->dev, "%s: unkown target\n", __func__); success = false; -- 2.39.5