Lines Matching defs:iphy

65 enum sas_linkrate sci_phy_linkrate(struct isci_phy *iphy)
67 return iphy->max_negotiated_speed;
71 sci_phy_transport_layer_initialization(struct isci_phy *iphy,
76 iphy->transport_layer_registers = reg;
79 &iphy->transport_layer_registers->stp_rni);
85 tl_control = readl(&iphy->transport_layer_registers->control);
87 writel(tl_control, &iphy->transport_layer_registers->control);
93 sci_phy_link_layer_initialization(struct isci_phy *iphy,
96 struct isci_host *ihost = iphy->owning_port->owning_controller;
99 int phy_idx = iphy->phy_index;
110 iphy->link_layer_registers = llr;
290 sci_change_state(&iphy->sm, SCI_PHY_STOPPED);
298 struct isci_phy *iphy = container_of(tmr, typeof(*iphy), sata_timer);
299 struct isci_host *ihost = iphy->owning_port->owning_controller;
307 dev_dbg(sciphy_to_dev(iphy),
311 iphy);
313 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
330 struct isci_port *phy_get_non_dummy_port(struct isci_phy *iphy)
332 struct isci_port *iport = iphy->owning_port;
337 return iphy->owning_port;
342 * @out]: iphy This parameter specifies the phy for which to assign a port
348 struct isci_phy *iphy,
351 iphy->owning_port = iport;
353 if (iphy->bcn_received_while_port_unassigned) {
354 iphy->bcn_received_while_port_unassigned = false;
355 sci_port_broadcast_change_received(iphy->owning_port, iphy);
359 enum sci_status sci_phy_initialize(struct isci_phy *iphy,
364 sci_phy_transport_layer_initialization(iphy, tl);
367 sci_phy_link_layer_initialization(iphy, ll);
372 sci_change_state(&iphy->sm, SCI_PHY_STOPPED);
380 * @iphy The phy for which the direct attached device id is to
386 void sci_phy_setup_transport(struct isci_phy *iphy, u32 device_id)
390 writel(device_id, &iphy->transport_layer_registers->stp_rni);
396 tl_control = readl(&iphy->transport_layer_registers->control);
398 writel(tl_control, &iphy->transport_layer_registers->control);
401 static void sci_phy_suspend(struct isci_phy *iphy)
406 readl(&iphy->link_layer_registers->phy_configuration);
409 &iphy->link_layer_registers->phy_configuration);
411 sci_phy_setup_transport(iphy, SCIC_SDS_REMOTE_NODE_CONTEXT_INVALID_INDEX);
414 void sci_phy_resume(struct isci_phy *iphy)
419 readl(&iphy->link_layer_registers->phy_configuration);
422 &iphy->link_layer_registers->phy_configuration);
425 void sci_phy_get_sas_address(struct isci_phy *iphy, struct sci_sas_address *sas)
427 sas->high = readl(&iphy->link_layer_registers->source_sas_address_high);
428 sas->low = readl(&iphy->link_layer_registers->source_sas_address_low);
431 void sci_phy_get_attached_sas_address(struct isci_phy *iphy, struct sci_sas_address *sas)
435 iaf = &iphy->frame_rcvd.iaf;
439 void sci_phy_get_protocols(struct isci_phy *iphy, struct sci_phy_proto *proto)
441 proto->all = readl(&iphy->link_layer_registers->transmit_identification);
444 enum sci_status sci_phy_start(struct isci_phy *iphy)
446 enum sci_phy_states state = iphy->sm.current_state_id;
449 dev_dbg(sciphy_to_dev(iphy),
454 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
458 enum sci_status sci_phy_stop(struct isci_phy *iphy)
460 enum sci_phy_states state = iphy->sm.current_state_id;
475 dev_dbg(sciphy_to_dev(iphy),
480 sci_change_state(&iphy->sm, SCI_PHY_STOPPED);
484 enum sci_status sci_phy_reset(struct isci_phy *iphy)
486 enum sci_phy_states state = iphy->sm.current_state_id;
489 dev_dbg(sciphy_to_dev(iphy),
494 sci_change_state(&iphy->sm, SCI_PHY_RESETTING);
498 enum sci_status sci_phy_consume_power_handler(struct isci_phy *iphy)
500 enum sci_phy_states state = iphy->sm.current_state_id;
506 enable_spinup = readl(&iphy->link_layer_registers->notify_enable_spinup_control);
508 writel(enable_spinup, &iphy->link_layer_registers->notify_enable_spinup_control);
511 sci_change_state(&iphy->sm, SCI_PHY_SUB_FINAL);
520 readl(&iphy->link_layer_registers->phy_configuration);
525 &iphy->link_layer_registers->phy_configuration);
531 &iphy->link_layer_registers->phy_configuration);
534 sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SATA_PHY_EN);
539 dev_dbg(sciphy_to_dev(iphy),
545 static void sci_phy_start_sas_link_training(struct isci_phy *iphy)
553 phy_control = readl(&iphy->link_layer_registers->phy_configuration);
556 &iphy->link_layer_registers->phy_configuration);
558 sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SAS_SPEED_EN);
560 iphy->protocol = SCIC_SDS_PHY_PROTOCOL_SAS;
563 static void sci_phy_start_sata_link_training(struct isci_phy *iphy)
569 sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SATA_POWER);
571 iphy->protocol = SCIC_SDS_PHY_PROTOCOL_SATA;
585 static void sci_phy_complete_link_training(struct isci_phy *iphy,
589 iphy->max_negotiated_speed = max_link_rate;
591 sci_change_state(&iphy->sm, next_state);
594 enum sci_status sci_phy_event_handler(struct isci_phy *iphy, u32 event_code)
596 enum sci_phy_states state = iphy->sm.current_state_id;
602 sci_phy_start_sas_link_training(iphy);
603 iphy->is_in_link_training = true;
606 sci_phy_start_sata_link_training(iphy);
607 iphy->is_in_link_training = true;
610 dev_dbg(sciphy_to_dev(iphy),
627 sci_phy_complete_link_training(iphy, SAS_LINK_RATE_1_5_GBPS,
632 sci_phy_complete_link_training(iphy, SAS_LINK_RATE_3_0_GBPS,
637 sci_phy_complete_link_training(iphy, SAS_LINK_RATE_6_0_GBPS,
644 sci_phy_start_sata_link_training(iphy);
648 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
651 dev_warn(sciphy_to_dev(iphy),
664 sci_phy_start_sas_link_training(iphy);
671 sci_phy_start_sata_link_training(iphy);
677 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
680 dev_warn(sciphy_to_dev(iphy),
691 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
694 dev_warn(sciphy_to_dev(iphy),
706 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
718 sci_phy_start_sas_link_training(iphy);
722 dev_warn(sciphy_to_dev(iphy),
734 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
742 iphy->protocol = SCIC_SDS_PHY_PROTOCOL_SATA;
745 sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SATA_SPEED_EN);
751 sci_phy_start_sas_link_training(iphy);
754 dev_warn(sciphy_to_dev(iphy),
772 sci_phy_complete_link_training(iphy, SAS_LINK_RATE_1_5_GBPS,
777 sci_phy_complete_link_training(iphy, SAS_LINK_RATE_3_0_GBPS,
782 sci_phy_complete_link_training(iphy, SAS_LINK_RATE_6_0_GBPS,
787 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
793 sci_phy_start_sas_link_training(iphy);
796 dev_warn(sciphy_to_dev(iphy),
809 sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_SATA_SPEED_EN);
814 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
818 dev_warn(sciphy_to_dev(iphy),
831 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
835 if (phy_get_non_dummy_port(iphy) != NULL)
836 sci_port_broadcast_change_received(iphy->owning_port, iphy);
838 iphy->bcn_received_while_port_unassigned = true;
841 dev_warn(sciphy_to_dev(iphy),
844 __func__, iphy, event_code);
852 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
855 dev_warn(sciphy_to_dev(iphy),
858 __func__, iphy, event_code);
865 dev_dbg(sciphy_to_dev(iphy),
871 enum sci_status sci_phy_frame_handler(struct isci_phy *iphy, u32 frame_index)
873 enum sci_phy_states state = iphy->sm.current_state_id;
874 struct isci_host *ihost = iphy->owning_port->owning_controller;
894 spin_lock_irqsave(&iphy->sas_phy.frame_rcvd_lock, flags);
895 memcpy(&iphy->frame_rcvd.iaf, &iaf, sizeof(iaf));
896 spin_unlock_irqrestore(&iphy->sas_phy.frame_rcvd_lock, flags);
909 sci_change_state(&iphy->sm, state);
912 dev_warn(sciphy_to_dev(iphy),
937 spin_lock_irqsave(&iphy->sas_phy.frame_rcvd_lock, flags);
938 sci_controller_copy_sata_response(&iphy->frame_rcvd.fis,
941 spin_unlock_irqrestore(&iphy->sas_phy.frame_rcvd_lock, flags);
944 sci_change_state(&iphy->sm, SCI_PHY_SUB_FINAL);
948 dev_warn(sciphy_to_dev(iphy),
959 dev_dbg(sciphy_to_dev(iphy),
968 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
971 sci_change_state(&iphy->sm, SCI_PHY_SUB_AWAIT_OSSP_EN);
976 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
977 struct isci_host *ihost = iphy->owning_port->owning_controller;
979 sci_controller_power_control_queue_insert(ihost, iphy);
984 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
985 struct isci_host *ihost = iphy->owning_port->owning_controller;
987 sci_controller_power_control_queue_remove(ihost, iphy);
992 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
993 struct isci_host *ihost = iphy->owning_port->owning_controller;
995 sci_controller_power_control_queue_insert(ihost, iphy);
1000 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1001 struct isci_host *ihost = iphy->owning_port->owning_controller;
1003 sci_controller_power_control_queue_remove(ihost, iphy);
1008 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1010 sci_mod_timer(&iphy->sata_timer, SCIC_SDS_SATA_LINK_TRAINING_TIMEOUT);
1015 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1017 sci_del_timer(&iphy->sata_timer);
1022 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1024 sci_mod_timer(&iphy->sata_timer, SCIC_SDS_SATA_LINK_TRAINING_TIMEOUT);
1029 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1031 sci_del_timer(&iphy->sata_timer);
1036 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1038 if (sci_port_link_detected(iphy->owning_port, iphy)) {
1046 sci_phy_resume(iphy);
1048 sci_mod_timer(&iphy->sata_timer,
1051 iphy->is_in_link_training = false;
1056 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1058 sci_del_timer(&iphy->sata_timer);
1063 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1068 sci_change_state(&iphy->sm, SCI_PHY_READY);
1080 struct isci_phy *iphy)
1087 readl(&iphy->link_layer_registers->phy_configuration);
1093 &iphy->link_layer_registers->phy_configuration);
1096 enable_spinup_value = readl(&iphy->link_layer_registers->notify_enable_spinup_control);
1098 writel(enable_spinup_value, &iphy->link_layer_registers->notify_enable_spinup_control);
1101 static void scu_link_layer_start_oob(struct isci_phy *iphy)
1103 struct scu_link_layer_registers __iomem *ll = iphy->link_layer_registers;
1131 struct isci_phy *iphy)
1139 readl(&iphy->link_layer_registers->phy_configuration);
1144 &iphy->link_layer_registers->phy_configuration);
1150 &iphy->link_layer_registers->phy_configuration);
1155 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1156 struct isci_port *iport = iphy->owning_port;
1163 sci_del_timer(&iphy->sata_timer);
1165 scu_link_layer_stop_protocol_engine(iphy);
1167 if (iphy->sm.previous_state_id != SCI_PHY_INITIAL)
1168 sci_controller_link_down(ihost, phy_get_non_dummy_port(iphy), iphy);
1173 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1174 struct isci_port *iport = iphy->owning_port;
1177 scu_link_layer_stop_protocol_engine(iphy);
1178 scu_link_layer_start_oob(iphy);
1181 iphy->protocol = SCIC_SDS_PHY_PROTOCOL_UNKNOWN;
1182 iphy->bcn_received_while_port_unassigned = false;
1184 if (iphy->sm.previous_state_id == SCI_PHY_READY)
1185 sci_controller_link_down(ihost, phy_get_non_dummy_port(iphy), iphy);
1187 sci_change_state(&iphy->sm, SCI_PHY_SUB_INITIAL);
1192 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1193 struct isci_port *iport = iphy->owning_port;
1196 sci_controller_link_up(ihost, phy_get_non_dummy_port(iphy), iphy);
1201 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1203 sci_phy_suspend(iphy);
1208 struct isci_phy *iphy = container_of(sm, typeof(*iphy), sm);
1214 sci_port_deactivate_phy(iphy->owning_port, iphy, false);
1216 if (iphy->protocol == SCIC_SDS_PHY_PROTOCOL_SAS) {
1217 scu_link_layer_tx_hard_reset(iphy);
1222 sci_change_state(&iphy->sm, SCI_PHY_STARTING);
1273 void sci_phy_construct(struct isci_phy *iphy,
1276 sci_init_sm(&iphy->sm, sci_phy_state_table, SCI_PHY_INITIAL);
1279 iphy->owning_port = iport;
1280 iphy->phy_index = phy_index;
1281 iphy->bcn_received_while_port_unassigned = false;
1282 iphy->protocol = SCIC_SDS_PHY_PROTOCOL_UNKNOWN;
1283 iphy->link_layer_registers = NULL;
1284 iphy->max_negotiated_speed = SAS_LINK_RATE_UNKNOWN;
1287 sci_init_timer(&iphy->sata_timer, phy_sata_timeout);
1290 void isci_phy_init(struct isci_phy *iphy, struct isci_host *ihost, int index)
1300 memcpy(iphy->sas_addr, &sas_addr, sizeof(sas_addr));
1302 iphy->isci_port = NULL;
1303 iphy->sas_phy.enabled = 0;
1304 iphy->sas_phy.id = index;
1305 iphy->sas_phy.sas_addr = &iphy->sas_addr[0];
1306 iphy->sas_phy.frame_rcvd = (u8 *)&iphy->frame_rcvd;
1307 iphy->sas_phy.ha = &ihost->sas_ha;
1308 iphy->sas_phy.lldd_phy = iphy;
1309 iphy->sas_phy.enabled = 1;
1310 iphy->sas_phy.class = SAS;
1311 iphy->sas_phy.iproto = SAS_PROTOCOL_ALL;
1312 iphy->sas_phy.tproto = 0;
1313 iphy->sas_phy.type = PHY_TYPE_PHYSICAL;
1314 iphy->sas_phy.role = PHY_ROLE_INITIATOR;
1315 iphy->sas_phy.oob_mode = OOB_NOT_CONNECTED;
1316 iphy->sas_phy.linkrate = SAS_LINK_RATE_UNKNOWN;
1317 memset(&iphy->frame_rcvd, 0, sizeof(iphy->frame_rcvd));
1335 struct isci_phy *iphy = sas_phy->lldd_phy;
1336 struct isci_port *iport = iphy->isci_port;
1342 __func__, sas_phy, func, buf, iphy, iport);
1347 sci_phy_stop(iphy);
1353 sci_phy_stop(iphy);
1354 sci_phy_start(iphy);
1363 ret = isci_port_perform_hard_reset(ihost, iport, iphy);
1370 r = iphy->link_layer_registers;