Lines Matching refs:pm8001_ha

50 int pm80xx_bar4_shift(struct pm8001_hba_info *pm8001_ha, u32 shift_value)  in pm80xx_bar4_shift()  argument
54 pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER, shift_value); in pm80xx_bar4_shift()
58 reg_val = pm8001_cr32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER); in pm80xx_bar4_shift()
61 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_bar4_shift()
69 static void pm80xx_pci_mem_copy(struct pm8001_hba_info *pm8001_ha, u32 soffset, in pm80xx_pci_mem_copy() argument
80 value = pm8001_cr32(pm8001_ha, bus_base_number, offset); in pm80xx_pci_mem_copy()
92 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm80xx_get_fatal_dump() local
93 void __iomem *fatal_table_address = pm8001_ha->fatal_tbl_addr; in pm80xx_get_fatal_dump()
102 pm8001_ha->forensic_info.data_buf.direct_data = buf; in pm80xx_get_fatal_dump()
103 if (pm8001_ha->chip_id == chip_8001) { in pm80xx_get_fatal_dump()
104 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
105 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
107 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
111 if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) { in pm80xx_get_fatal_dump()
112 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
115 pm8001_ha->forensic_info.data_type = TYPE_NON_FATAL; in pm80xx_get_fatal_dump()
116 pm8001_ha->forensic_info.data_buf.direct_len = SYSFS_OFFSET; in pm80xx_get_fatal_dump()
117 pm8001_ha->forensic_info.data_buf.direct_offset = 0; in pm80xx_get_fatal_dump()
118 pm8001_ha->forensic_info.data_buf.read_len = 0; in pm80xx_get_fatal_dump()
119 pm8001_ha->forensic_preserved_accumulated_transfer = 0; in pm80xx_get_fatal_dump()
125 pm8001_ha->forensic_info.data_buf.direct_data = direct_data; in pm80xx_get_fatal_dump()
126 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
128 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
130 pm8001_ha->forensic_info.data_buf.read_len)); in pm80xx_get_fatal_dump()
131 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
133 pm8001_ha->forensic_info.data_buf.direct_len)); in pm80xx_get_fatal_dump()
134 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
136 pm8001_ha->forensic_info.data_buf.direct_offset)); in pm80xx_get_fatal_dump()
138 if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) { in pm80xx_get_fatal_dump()
141 pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER, in pm80xx_get_fatal_dump()
142 pm8001_ha->fatal_forensic_shift_offset); in pm80xx_get_fatal_dump()
143 pm8001_ha->forensic_last_offset = 0; in pm80xx_get_fatal_dump()
144 pm8001_ha->forensic_fatal_step = 0; in pm80xx_get_fatal_dump()
145 pm8001_ha->fatal_bar_loc = 0; in pm80xx_get_fatal_dump()
155 accum_len - pm8001_ha->forensic_preserved_accumulated_transfer; in pm80xx_get_fatal_dump()
156 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
158 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
161 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
163 pm8001_ha->forensic_last_offset)); in pm80xx_get_fatal_dump()
164 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
166 pm8001_ha->forensic_info.data_buf.read_len)); in pm80xx_get_fatal_dump()
167 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
169 pm8001_ha->forensic_info.data_buf.direct_len)); in pm80xx_get_fatal_dump()
170 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
172 pm8001_ha->forensic_info.data_buf.direct_offset)); in pm80xx_get_fatal_dump()
176 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
183 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
184 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
186 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
190 temp = (u32 *)pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr; in pm80xx_get_fatal_dump()
191 if (pm8001_ha->forensic_fatal_step == 0) { in pm80xx_get_fatal_dump()
196 if (pm8001_ha->forensic_last_offset + SYSFS_OFFSET in pm80xx_get_fatal_dump()
198 pm8001_ha->forensic_info.data_buf.direct_len = in pm80xx_get_fatal_dump()
200 pm8001_ha->forensic_last_offset; in pm80xx_get_fatal_dump()
202 pm8001_ha->forensic_info.data_buf.direct_len = in pm80xx_get_fatal_dump()
205 if (pm8001_ha->forensic_info.data_buf.direct_data) { in pm80xx_get_fatal_dump()
207 pm80xx_pci_mem_copy(pm8001_ha, in pm80xx_get_fatal_dump()
208 pm8001_ha->fatal_bar_loc, in pm80xx_get_fatal_dump()
209 pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr, in pm80xx_get_fatal_dump()
210 pm8001_ha->forensic_info.data_buf.direct_len, 1); in pm80xx_get_fatal_dump()
212 pm8001_ha->fatal_bar_loc += in pm80xx_get_fatal_dump()
213 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
214 pm8001_ha->forensic_info.data_buf.direct_offset += in pm80xx_get_fatal_dump()
215 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
216 pm8001_ha->forensic_last_offset += in pm80xx_get_fatal_dump()
217 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
218 pm8001_ha->forensic_info.data_buf.read_len = in pm80xx_get_fatal_dump()
219 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
221 if (pm8001_ha->forensic_last_offset >= length_to_read) { in pm80xx_get_fatal_dump()
222 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
223 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
226 (pm8001_ha->forensic_info.data_buf.direct_len in pm80xx_get_fatal_dump()
228 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
230 pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
234 pm8001_ha->fatal_bar_loc = 0; in pm80xx_get_fatal_dump()
235 pm8001_ha->forensic_fatal_step = 1; in pm80xx_get_fatal_dump()
236 pm8001_ha->fatal_forensic_shift_offset = 0; in pm80xx_get_fatal_dump()
237 pm8001_ha->forensic_last_offset = 0; in pm80xx_get_fatal_dump()
240 ((char *)pm8001_ha->forensic_info.data_buf.direct_data in pm80xx_get_fatal_dump()
242 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
244 return (char *)pm8001_ha-> in pm80xx_get_fatal_dump()
248 if (pm8001_ha->fatal_bar_loc < (64 * 1024)) { in pm80xx_get_fatal_dump()
249 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
250 sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
254 (pm8001_ha->forensic_info.data_buf.direct_len in pm80xx_get_fatal_dump()
256 pm8001_ha->forensic_info.data_buf.direct_data in pm80xx_get_fatal_dump()
257 += sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
263 ((char *)pm8001_ha->forensic_info.data_buf.direct_data in pm80xx_get_fatal_dump()
265 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
267 return (char *)pm8001_ha-> in pm80xx_get_fatal_dump()
273 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
274 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
277 (pm8001_ha->forensic_info.data_buf.direct_len in pm80xx_get_fatal_dump()
279 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
280 sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
284 pm8001_ha->fatal_forensic_shift_offset += 0x100; in pm80xx_get_fatal_dump()
285 pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER, in pm80xx_get_fatal_dump()
286 pm8001_ha->fatal_forensic_shift_offset); in pm80xx_get_fatal_dump()
287 pm8001_ha->fatal_bar_loc = 0; in pm80xx_get_fatal_dump()
290 ((char *)pm8001_ha->forensic_info.data_buf.direct_data in pm80xx_get_fatal_dump()
292 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
294 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
297 if (pm8001_ha->forensic_fatal_step == 1) { in pm80xx_get_fatal_dump()
301 pm8001_ha->forensic_preserved_accumulated_transfer = in pm80xx_get_fatal_dump()
330 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_fatal_dump()
334 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
336 pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
339 pm8001_ha->forensic_info.data_buf.direct_data in pm80xx_get_fatal_dump()
354 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_fatal_dump()
358 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
360 pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
362 pm8001_cw32(pm8001_ha, 0, in pm80xx_get_fatal_dump()
364 pm8001_ha->fatal_forensic_shift_offset); in pm80xx_get_fatal_dump()
369 pm8001_ha->forensic_preserved_accumulated_transfer; in pm80xx_get_fatal_dump()
371 pm8001_ha->forensic_fatal_step = 0; in pm80xx_get_fatal_dump()
374 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
376 pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
378 pm8001_ha->forensic_info.data_buf.read_len in pm80xx_get_fatal_dump()
380 pm8001_ha->forensic_info.data_buf.direct_len in pm80xx_get_fatal_dump()
382 pm8001_ha->forensic_info.data_buf.direct_offset in pm80xx_get_fatal_dump()
384 pm8001_ha->forensic_info.data_buf.read_len = 0; in pm80xx_get_fatal_dump()
388 offset = (int)((char *)pm8001_ha->forensic_info.data_buf.direct_data in pm80xx_get_fatal_dump()
390 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
392 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
404 struct pm8001_hba_info *pm8001_ha = sha->lldd_ha; in pm80xx_get_non_fatal_dump() local
405 void __iomem *nonfatal_table_address = pm8001_ha->fatal_tbl_addr; in pm80xx_get_non_fatal_dump()
415 temp = (u32 *)pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr; in pm80xx_get_non_fatal_dump()
416 if (++pm8001_ha->non_fatal_count == 1) { in pm80xx_get_non_fatal_dump()
417 if (pm8001_ha->chip_id == chip_8001) { in pm80xx_get_non_fatal_dump()
418 snprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_non_fatal_dump()
422 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_non_fatal_dump()
431 pm8001_ha->memoryMap.region[FORENSIC_MEM].phys_addr_lo); in pm80xx_get_non_fatal_dump()
435 pm8001_ha->memoryMap.region[FORENSIC_MEM].phys_addr_hi); in pm80xx_get_non_fatal_dump()
456 pm8001_ha->forensic_preserved_accumulated_transfer = 0; in pm80xx_get_non_fatal_dump()
457 pm8001_ha->non_fatal_read_length = 0; in pm80xx_get_non_fatal_dump()
468 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, in pm80xx_get_non_fatal_dump()
478 reg_val = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET) & in pm80xx_get_non_fatal_dump()
495 pm8001_ha->non_fatal_read_length = 0; in pm80xx_get_non_fatal_dump()
497 pm8001_ha->non_fatal_count = 0; in pm80xx_get_non_fatal_dump()
503 (pm8001_ha->non_fatal_read_length >= total_len)) { in pm80xx_get_non_fatal_dump()
504 pm8001_ha->non_fatal_read_length = 0; in pm80xx_get_non_fatal_dump()
506 pm8001_ha->non_fatal_count = 0; in pm80xx_get_non_fatal_dump()
511 pm8001_ha->forensic_preserved_accumulated_transfer; in pm80xx_get_non_fatal_dump()
517 pm8001_ha->non_fatal_read_length += output_length; in pm80xx_get_non_fatal_dump()
522 pm8001_ha->forensic_preserved_accumulated_transfer = accum_len; in pm80xx_get_non_fatal_dump()
530 static void read_main_config_table(struct pm8001_hba_info *pm8001_ha) in read_main_config_table() argument
532 void __iomem *address = pm8001_ha->main_cfg_tbl_addr; in read_main_config_table()
534 pm8001_ha->main_cfg_tbl.pm80xx_tbl.signature = in read_main_config_table()
536 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interface_rev = in read_main_config_table()
538 pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev = in read_main_config_table()
540 pm8001_ha->main_cfg_tbl.pm80xx_tbl.max_out_io = in read_main_config_table()
542 pm8001_ha->main_cfg_tbl.pm80xx_tbl.max_sgl = in read_main_config_table()
544 pm8001_ha->main_cfg_tbl.pm80xx_tbl.ctrl_cap_flag = in read_main_config_table()
546 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gst_offset = in read_main_config_table()
548 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_queue_offset = in read_main_config_table()
550 pm8001_ha->main_cfg_tbl.pm80xx_tbl.outbound_queue_offset = in read_main_config_table()
554 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_offset0 = in read_main_config_table()
556 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_length0 = in read_main_config_table()
558 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_offset1 = in read_main_config_table()
560 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_length1 = in read_main_config_table()
564 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping = in read_main_config_table()
568 pm8001_ha->main_cfg_tbl.pm80xx_tbl.analog_setup_table_offset = in read_main_config_table()
571 pm8001_ha->main_cfg_tbl.pm80xx_tbl.int_vec_table_offset = in read_main_config_table()
573 pm8001_ha->main_cfg_tbl.pm80xx_tbl.phy_attr_table_offset = in read_main_config_table()
576 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer = in read_main_config_table()
579 pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version = in read_main_config_table()
581 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version = in read_main_config_table()
584 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in read_main_config_table()
586 pm8001_ha->main_cfg_tbl.pm80xx_tbl.signature, in read_main_config_table()
587 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interface_rev, in read_main_config_table()
588 pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev)); in read_main_config_table()
590 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in read_main_config_table()
592 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gst_offset, in read_main_config_table()
593 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_queue_offset, in read_main_config_table()
594 pm8001_ha->main_cfg_tbl.pm80xx_tbl.outbound_queue_offset, in read_main_config_table()
595 pm8001_ha->main_cfg_tbl.pm80xx_tbl.int_vec_table_offset, in read_main_config_table()
596 pm8001_ha->main_cfg_tbl.pm80xx_tbl.phy_attr_table_offset)); in read_main_config_table()
598 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in read_main_config_table()
600 pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version, in read_main_config_table()
601 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version)); in read_main_config_table()
608 static void read_general_status_table(struct pm8001_hba_info *pm8001_ha) in read_general_status_table() argument
610 void __iomem *address = pm8001_ha->general_stat_tbl_addr; in read_general_status_table()
611 pm8001_ha->gs_tbl.pm80xx_tbl.gst_len_mpistate = in read_general_status_table()
613 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state0 = in read_general_status_table()
615 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state1 = in read_general_status_table()
617 pm8001_ha->gs_tbl.pm80xx_tbl.msgu_tcnt = in read_general_status_table()
619 pm8001_ha->gs_tbl.pm80xx_tbl.iop_tcnt = in read_general_status_table()
621 pm8001_ha->gs_tbl.pm80xx_tbl.gpio_input_val = in read_general_status_table()
623 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[0] = in read_general_status_table()
625 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[1] = in read_general_status_table()
627 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[2] = in read_general_status_table()
629 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[3] = in read_general_status_table()
631 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[4] = in read_general_status_table()
633 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[5] = in read_general_status_table()
635 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[6] = in read_general_status_table()
637 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[7] = in read_general_status_table()
644 static void read_phy_attr_table(struct pm8001_hba_info *pm8001_ha) in read_phy_attr_table() argument
646 void __iomem *address = pm8001_ha->pspa_q_tbl_addr; in read_phy_attr_table()
647 pm8001_ha->phy_attr_table.phystart1_16[0] = in read_phy_attr_table()
649 pm8001_ha->phy_attr_table.phystart1_16[1] = in read_phy_attr_table()
651 pm8001_ha->phy_attr_table.phystart1_16[2] = in read_phy_attr_table()
653 pm8001_ha->phy_attr_table.phystart1_16[3] = in read_phy_attr_table()
655 pm8001_ha->phy_attr_table.phystart1_16[4] = in read_phy_attr_table()
657 pm8001_ha->phy_attr_table.phystart1_16[5] = in read_phy_attr_table()
659 pm8001_ha->phy_attr_table.phystart1_16[6] = in read_phy_attr_table()
661 pm8001_ha->phy_attr_table.phystart1_16[7] = in read_phy_attr_table()
663 pm8001_ha->phy_attr_table.phystart1_16[8] = in read_phy_attr_table()
665 pm8001_ha->phy_attr_table.phystart1_16[9] = in read_phy_attr_table()
667 pm8001_ha->phy_attr_table.phystart1_16[10] = in read_phy_attr_table()
669 pm8001_ha->phy_attr_table.phystart1_16[11] = in read_phy_attr_table()
671 pm8001_ha->phy_attr_table.phystart1_16[12] = in read_phy_attr_table()
673 pm8001_ha->phy_attr_table.phystart1_16[13] = in read_phy_attr_table()
675 pm8001_ha->phy_attr_table.phystart1_16[14] = in read_phy_attr_table()
677 pm8001_ha->phy_attr_table.phystart1_16[15] = in read_phy_attr_table()
680 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[0] = in read_phy_attr_table()
682 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[1] = in read_phy_attr_table()
684 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[2] = in read_phy_attr_table()
686 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[3] = in read_phy_attr_table()
688 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[4] = in read_phy_attr_table()
690 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[5] = in read_phy_attr_table()
692 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[6] = in read_phy_attr_table()
694 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[7] = in read_phy_attr_table()
696 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[8] = in read_phy_attr_table()
698 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[9] = in read_phy_attr_table()
700 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[10] = in read_phy_attr_table()
702 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[11] = in read_phy_attr_table()
704 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[12] = in read_phy_attr_table()
706 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[13] = in read_phy_attr_table()
708 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[14] = in read_phy_attr_table()
710 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[15] = in read_phy_attr_table()
719 static void read_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_inbnd_queue_table() argument
722 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in read_inbnd_queue_table()
725 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in read_inbnd_queue_table()
728 pm8001_ha->inbnd_q_tbl[i].pi_offset = in read_inbnd_queue_table()
737 static void read_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_outbnd_queue_table() argument
740 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in read_outbnd_queue_table()
743 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in read_outbnd_queue_table()
746 pm8001_ha->outbnd_q_tbl[i].ci_offset = in read_outbnd_queue_table()
755 static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) in init_default_table_values() argument
759 void __iomem *addressib = pm8001_ha->inbnd_q_tbl_addr; in init_default_table_values()
760 void __iomem *addressob = pm8001_ha->outbnd_q_tbl_addr; in init_default_table_values()
761 u32 ib_offset = pm8001_ha->ib_offset; in init_default_table_values()
762 u32 ob_offset = pm8001_ha->ob_offset; in init_default_table_values()
763 u32 ci_offset = pm8001_ha->ci_offset; in init_default_table_values()
764 u32 pi_offset = pm8001_ha->pi_offset; in init_default_table_values()
766 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr = in init_default_table_values()
767 pm8001_ha->memoryMap.region[AAP1].phys_addr_hi; in init_default_table_values()
768 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr = in init_default_table_values()
769 pm8001_ha->memoryMap.region[AAP1].phys_addr_lo; in init_default_table_values()
770 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size = in init_default_table_values()
772 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity = 0x01; in init_default_table_values()
773 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr = in init_default_table_values()
774 pm8001_ha->memoryMap.region[IOP].phys_addr_hi; in init_default_table_values()
775 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr = in init_default_table_values()
776 pm8001_ha->memoryMap.region[IOP].phys_addr_lo; in init_default_table_values()
777 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size = in init_default_table_values()
779 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity = 0x01; in init_default_table_values()
780 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt = 0x01; in init_default_table_values()
783 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump = (0x1 << 16); in init_default_table_values()
785 for (i = 0; i < pm8001_ha->max_q_num; i++) { in init_default_table_values()
786 pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = in init_default_table_values()
787 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); in init_default_table_values()
788 pm8001_ha->inbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
789 pm8001_ha->memoryMap.region[ib_offset + i].phys_addr_hi; in init_default_table_values()
790 pm8001_ha->inbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
791 pm8001_ha->memoryMap.region[ib_offset + i].phys_addr_lo; in init_default_table_values()
792 pm8001_ha->inbnd_q_tbl[i].base_virt = in init_default_table_values()
793 (u8 *)pm8001_ha->memoryMap.region[ib_offset + i].virt_ptr; in init_default_table_values()
794 pm8001_ha->inbnd_q_tbl[i].total_length = in init_default_table_values()
795 pm8001_ha->memoryMap.region[ib_offset + i].total_len; in init_default_table_values()
796 pm8001_ha->inbnd_q_tbl[i].ci_upper_base_addr = in init_default_table_values()
797 pm8001_ha->memoryMap.region[ci_offset + i].phys_addr_hi; in init_default_table_values()
798 pm8001_ha->inbnd_q_tbl[i].ci_lower_base_addr = in init_default_table_values()
799 pm8001_ha->memoryMap.region[ci_offset + i].phys_addr_lo; in init_default_table_values()
800 pm8001_ha->inbnd_q_tbl[i].ci_virt = in init_default_table_values()
801 pm8001_ha->memoryMap.region[ci_offset + i].virt_ptr; in init_default_table_values()
803 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in init_default_table_values()
806 pm8001_ha->inbnd_q_tbl[i].pi_offset = in init_default_table_values()
808 pm8001_ha->inbnd_q_tbl[i].producer_idx = 0; in init_default_table_values()
809 pm8001_ha->inbnd_q_tbl[i].consumer_index = 0; in init_default_table_values()
811 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in init_default_table_values()
813 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar, in init_default_table_values()
814 pm8001_ha->inbnd_q_tbl[i].pi_offset)); in init_default_table_values()
816 for (i = 0; i < pm8001_ha->max_q_num; i++) { in init_default_table_values()
817 pm8001_ha->outbnd_q_tbl[i].element_size_cnt = in init_default_table_values()
818 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); in init_default_table_values()
819 pm8001_ha->outbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
820 pm8001_ha->memoryMap.region[ob_offset + i].phys_addr_hi; in init_default_table_values()
821 pm8001_ha->outbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
822 pm8001_ha->memoryMap.region[ob_offset + i].phys_addr_lo; in init_default_table_values()
823 pm8001_ha->outbnd_q_tbl[i].base_virt = in init_default_table_values()
824 (u8 *)pm8001_ha->memoryMap.region[ob_offset + i].virt_ptr; in init_default_table_values()
825 pm8001_ha->outbnd_q_tbl[i].total_length = in init_default_table_values()
826 pm8001_ha->memoryMap.region[ob_offset + i].total_len; in init_default_table_values()
827 pm8001_ha->outbnd_q_tbl[i].pi_upper_base_addr = in init_default_table_values()
828 pm8001_ha->memoryMap.region[pi_offset + i].phys_addr_hi; in init_default_table_values()
829 pm8001_ha->outbnd_q_tbl[i].pi_lower_base_addr = in init_default_table_values()
830 pm8001_ha->memoryMap.region[pi_offset + i].phys_addr_lo; in init_default_table_values()
832 pm8001_ha->outbnd_q_tbl[i].interrup_vec_cnt_delay = (i << 24); in init_default_table_values()
833 pm8001_ha->outbnd_q_tbl[i].pi_virt = in init_default_table_values()
834 pm8001_ha->memoryMap.region[pi_offset + i].virt_ptr; in init_default_table_values()
836 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in init_default_table_values()
839 pm8001_ha->outbnd_q_tbl[i].ci_offset = in init_default_table_values()
841 pm8001_ha->outbnd_q_tbl[i].consumer_idx = 0; in init_default_table_values()
842 pm8001_ha->outbnd_q_tbl[i].producer_index = 0; in init_default_table_values()
844 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in init_default_table_values()
846 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar, in init_default_table_values()
847 pm8001_ha->outbnd_q_tbl[i].ci_offset)); in init_default_table_values()
855 static void update_main_config_table(struct pm8001_hba_info *pm8001_ha) in update_main_config_table() argument
857 void __iomem *address = pm8001_ha->main_cfg_tbl_addr; in update_main_config_table()
859 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_q_nppd_hppd); in update_main_config_table()
861 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr); in update_main_config_table()
863 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr); in update_main_config_table()
865 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size); in update_main_config_table()
867 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity); in update_main_config_table()
869 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr); in update_main_config_table()
871 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr); in update_main_config_table()
873 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size); in update_main_config_table()
875 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity); in update_main_config_table()
877 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt |= in update_main_config_table()
878 ((pm8001_ha->max_q_num - 1) << 8); in update_main_config_table()
880 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt); in update_main_config_table()
881 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_main_config_table()
886 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump); in update_main_config_table()
889 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping &= 0xCFFFFFFF; in update_main_config_table()
891 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping |= 0x20000000; in update_main_config_table()
893 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping); in update_main_config_table()
894 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_main_config_table()
899 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer); in update_main_config_table()
901 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interrupt_reassertion_delay); in update_main_config_table()
903 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer &= 0xffff0000; in update_main_config_table()
904 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer |= in update_main_config_table()
906 if (pm8001_ha->chip_id == chip_8006) { in update_main_config_table()
907 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer &= in update_main_config_table()
909 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer |= in update_main_config_table()
913 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer); in update_main_config_table()
921 static void update_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_inbnd_queue_table() argument
924 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in update_inbnd_queue_table()
927 pm8001_ha->inbnd_q_tbl[number].element_pri_size_cnt); in update_inbnd_queue_table()
929 pm8001_ha->inbnd_q_tbl[number].upper_base_addr); in update_inbnd_queue_table()
931 pm8001_ha->inbnd_q_tbl[number].lower_base_addr); in update_inbnd_queue_table()
933 pm8001_ha->inbnd_q_tbl[number].ci_upper_base_addr); in update_inbnd_queue_table()
935 pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr); in update_inbnd_queue_table()
937 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_inbnd_queue_table()
940 pm8001_ha->inbnd_q_tbl[number].element_pri_size_cnt)); in update_inbnd_queue_table()
942 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_inbnd_queue_table()
944 pm8001_ha->inbnd_q_tbl[number].upper_base_addr, in update_inbnd_queue_table()
945 pm8001_ha->inbnd_q_tbl[number].lower_base_addr)); in update_inbnd_queue_table()
947 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_inbnd_queue_table()
949 pm8001_ha->inbnd_q_tbl[number].ci_upper_base_addr, in update_inbnd_queue_table()
950 pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr)); in update_inbnd_queue_table()
958 static void update_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_outbnd_queue_table() argument
961 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in update_outbnd_queue_table()
964 pm8001_ha->outbnd_q_tbl[number].element_size_cnt); in update_outbnd_queue_table()
966 pm8001_ha->outbnd_q_tbl[number].upper_base_addr); in update_outbnd_queue_table()
968 pm8001_ha->outbnd_q_tbl[number].lower_base_addr); in update_outbnd_queue_table()
970 pm8001_ha->outbnd_q_tbl[number].pi_upper_base_addr); in update_outbnd_queue_table()
972 pm8001_ha->outbnd_q_tbl[number].pi_lower_base_addr); in update_outbnd_queue_table()
974 pm8001_ha->outbnd_q_tbl[number].interrup_vec_cnt_delay); in update_outbnd_queue_table()
976 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_outbnd_queue_table()
979 pm8001_ha->outbnd_q_tbl[number].element_size_cnt)); in update_outbnd_queue_table()
981 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_outbnd_queue_table()
983 pm8001_ha->outbnd_q_tbl[number].upper_base_addr, in update_outbnd_queue_table()
984 pm8001_ha->outbnd_q_tbl[number].lower_base_addr)); in update_outbnd_queue_table()
986 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in update_outbnd_queue_table()
988 pm8001_ha->outbnd_q_tbl[number].pi_upper_base_addr, in update_outbnd_queue_table()
989 pm8001_ha->outbnd_q_tbl[number].pi_lower_base_addr)); in update_outbnd_queue_table()
996 static int mpi_init_check(struct pm8001_hba_info *pm8001_ha) in mpi_init_check() argument
1004 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_UPDATE); in mpi_init_check()
1006 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_init_check()
1013 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_init_check()
1019 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_init_check()
1028 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_init_check()
1047 static int check_fw_ready(struct pm8001_hba_info *pm8001_ha) in check_fw_ready() argument
1058 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
1065 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
1071 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
1080 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
1086 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
1095 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
1101 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
1107 if ((pm8001_ha->chip_id != chip_8008) && in check_fw_ready()
1108 (pm8001_ha->chip_id != chip_8009)) { in check_fw_ready()
1113 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
1119 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in check_fw_ready()
1128 static void init_pci_device_addresses(struct pm8001_hba_info *pm8001_ha) in init_pci_device_addresses() argument
1136 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0); in init_pci_device_addresses()
1139 PM8001_DEV_DBG(pm8001_ha, in init_pci_device_addresses()
1144 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1146 pm8001_ha->main_cfg_tbl_addr = base_addr = in init_pci_device_addresses()
1147 pm8001_ha->io_mem[pcibar].memvirtaddr + offset; in init_pci_device_addresses()
1148 pm8001_ha->general_stat_tbl_addr = in init_pci_device_addresses()
1149 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x18) & in init_pci_device_addresses()
1151 pm8001_ha->inbnd_q_tbl_addr = in init_pci_device_addresses()
1152 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C) & in init_pci_device_addresses()
1154 pm8001_ha->outbnd_q_tbl_addr = in init_pci_device_addresses()
1155 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x20) & in init_pci_device_addresses()
1157 pm8001_ha->ivt_tbl_addr = in init_pci_device_addresses()
1158 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C) & in init_pci_device_addresses()
1160 pm8001_ha->pspa_q_tbl_addr = in init_pci_device_addresses()
1161 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x90) & in init_pci_device_addresses()
1163 pm8001_ha->fatal_tbl_addr = in init_pci_device_addresses()
1164 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0xA0) & in init_pci_device_addresses()
1167 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1169 pm8001_cr32(pm8001_ha, pcibar, offset + 0x18))); in init_pci_device_addresses()
1170 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1172 pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C))); in init_pci_device_addresses()
1173 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1175 pm8001_cr32(pm8001_ha, pcibar, offset + 0x20))); in init_pci_device_addresses()
1176 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1178 pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C))); in init_pci_device_addresses()
1179 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1181 pm8001_cr32(pm8001_ha, pcibar, offset + 0x90))); in init_pci_device_addresses()
1182 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1184 pm8001_ha->main_cfg_tbl_addr, in init_pci_device_addresses()
1185 pm8001_ha->general_stat_tbl_addr)); in init_pci_device_addresses()
1186 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1188 pm8001_ha->inbnd_q_tbl_addr, in init_pci_device_addresses()
1189 pm8001_ha->outbnd_q_tbl_addr)); in init_pci_device_addresses()
1190 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
1192 pm8001_ha->pspa_q_tbl_addr, in init_pci_device_addresses()
1193 pm8001_ha->ivt_tbl_addr)); in init_pci_device_addresses()
1201 pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_thermal_config() argument
1211 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_thermal_config()
1215 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_thermal_config()
1218 if (IS_SPCV_12G(pm8001_ha->pdev)) in pm80xx_set_thermal_config()
1227 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in pm80xx_set_thermal_config()
1231 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in pm80xx_set_thermal_config()
1234 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_thermal_config()
1245 pm80xx_set_sas_protocol_timer_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_sas_protocol_timer_config() argument
1257 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_sas_protocol_timer_config()
1262 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_sas_protocol_timer_config()
1284 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1287 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1290 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1293 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1296 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1299 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1302 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1305 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
1308 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.MAX_AIP " in pm80xx_set_sas_protocol_timer_config()
1314 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in pm80xx_set_sas_protocol_timer_config()
1317 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_sas_protocol_timer_config()
1327 pm80xx_get_encrypt_info(struct pm8001_hba_info *pm8001_ha) in pm80xx_get_encrypt_info() argument
1333 scratch3_value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3); in pm80xx_get_encrypt_info()
1338 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1341 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1344 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1347 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1348 pm8001_ha->encrypt_info.status = 0; in pm80xx_get_encrypt_info()
1349 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1352 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1353 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1354 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1358 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1361 pm8001_ha->encrypt_info.status = 0xFFFFFFFF; in pm80xx_get_encrypt_info()
1362 pm8001_ha->encrypt_info.cipher_mode = 0; in pm80xx_get_encrypt_info()
1363 pm8001_ha->encrypt_info.sec_mode = 0; in pm80xx_get_encrypt_info()
1367 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
1370 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1373 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1376 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1379 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1380 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1383 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1384 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1385 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1389 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
1392 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1395 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1398 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1401 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1403 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1406 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1407 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1408 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1417 static int pm80xx_encrypt_update(struct pm8001_hba_info *pm8001_ha) in pm80xx_encrypt_update() argument
1426 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_encrypt_update()
1430 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_encrypt_update()
1438 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in pm80xx_encrypt_update()
1442 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in pm80xx_encrypt_update()
1445 pm8001_tag_free(pm8001_ha, tag); in pm80xx_encrypt_update()
1454 static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_init() argument
1460 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_init()
1461 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_init()
1467 pm8001_ha->controller_fatal_error = false; in pm80xx_chip_init()
1470 init_pci_device_addresses(pm8001_ha); in pm80xx_chip_init()
1471 init_default_table_values(pm8001_ha); in pm80xx_chip_init()
1472 read_main_config_table(pm8001_ha); in pm80xx_chip_init()
1473 read_general_status_table(pm8001_ha); in pm80xx_chip_init()
1474 read_inbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1475 read_outbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1476 read_phy_attr_table(pm8001_ha); in pm80xx_chip_init()
1479 update_main_config_table(pm8001_ha); in pm80xx_chip_init()
1480 for (i = 0; i < pm8001_ha->max_q_num; i++) { in pm80xx_chip_init()
1481 update_inbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1482 update_outbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1485 if (0 == mpi_init_check(pm8001_ha)) { in pm80xx_chip_init()
1486 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1492 ret = pm80xx_set_sas_protocol_timer_config(pm8001_ha); in pm80xx_chip_init()
1495 if (pm8001_ha->chip->encrypt) { in pm80xx_chip_init()
1496 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1498 ret = pm80xx_get_encrypt_info(pm8001_ha); in pm80xx_chip_init()
1500 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1502 if (pm8001_ha->encrypt_info.status == 0x81) { in pm80xx_chip_init()
1503 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_init()
1506 pm80xx_encrypt_update(pm8001_ha); in pm80xx_chip_init()
1513 static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha) in mpi_uninit_check() argument
1518 init_pci_device_addresses(pm8001_ha); in mpi_uninit_check()
1521 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_RESET); in mpi_uninit_check()
1524 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_uninit_check()
1531 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_uninit_check()
1536 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1547 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_uninit_check()
1554 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1570 pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_soft_rst() argument
1577 if (!pm8001_ha->controller_fatal_error) { in pm80xx_chip_soft_rst()
1579 if (mpi_uninit_check(pm8001_ha) != 0) { in pm80xx_chip_soft_rst()
1580 u32 r0 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0); in pm80xx_chip_soft_rst()
1581 u32 r1 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in pm80xx_chip_soft_rst()
1582 u32 r2 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2); in pm80xx_chip_soft_rst()
1583 u32 r3 = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3); in pm80xx_chip_soft_rst()
1584 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1595 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1596 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1599 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, SPCv_NORMAL_RESET_VALUE); in pm80xx_chip_soft_rst()
1602 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1603 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1608 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1612 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1618 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1) & in pm80xx_chip_soft_rst()
1622 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1626 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1630 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1634 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1641 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_soft_rst()
1642 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1645 if (pm8001_ha->pdev->subsystem_vendor != in pm80xx_chip_soft_rst()
1647 pm8001_ha->pdev->subsystem_vendor != in pm80xx_chip_soft_rst()
1649 pm8001_ha->pdev->subsystem_vendor != 0) { in pm80xx_chip_soft_rst()
1650 ibutton0 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1652 ibutton1 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1655 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1661 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1668 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1673 static void pm80xx_hw_chip_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_hw_chip_rst() argument
1677 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1681 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, 0x11); in pm80xx_hw_chip_rst()
1682 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1695 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1704 pm80xx_chip_intx_interrupt_enable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_enable() argument
1706 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, ODMR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1707 pm8001_cw32(pm8001_ha, 0, MSGU_ODCR, ODCR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1715 pm80xx_chip_intx_interrupt_disable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_disable() argument
1717 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, ODMR_MASK_ALL); in pm80xx_chip_intx_interrupt_disable()
1726 pm80xx_chip_interrupt_enable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_enable() argument
1732 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_enable()
1735 pm80xx_chip_intx_interrupt_enable(pm8001_ha); in pm80xx_chip_interrupt_enable()
1745 pm80xx_chip_interrupt_disable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_disable() argument
1753 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_disable()
1756 pm80xx_chip_intx_interrupt_disable(pm8001_ha); in pm80xx_chip_interrupt_disable()
1759 static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_abort_all() argument
1772 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("dev is null\n")); in pm80xx_send_abort_all()
1779 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("cannot " in pm80xx_send_abort_all()
1786 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_abort_all()
1792 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_abort_all()
1797 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_abort_all()
1804 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &task_abort, in pm80xx_send_abort_all()
1806 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_abort_all()
1810 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_abort_all()
1814 static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_read_log() argument
1830 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1836 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_read_log()
1839 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1850 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1851 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1859 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_read_log()
1868 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_read_log()
1883 res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, in pm80xx_send_read_log()
1885 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("Executing read log end\n")); in pm80xx_send_read_log()
1888 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1905 mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_completion() argument
1920 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_completion()
1931 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1937 PM8001_DEV_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
1943 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1949 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1960 sas_ssp_task_response(pm8001_ha->dev, t, iu); in mpi_ssp_completion()
1966 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1973 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1983 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1989 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1997 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2004 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2011 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2018 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2025 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2037 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2043 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
2048 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2055 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
2062 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2069 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2076 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2082 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2088 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2095 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2101 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2107 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2112 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
2117 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2123 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2129 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2135 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2142 PM8001_DEVIO_DBG(pm8001_ha, in mpi_ssp_completion()
2149 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
2158 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
2164 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
2167 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
2174 static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_event() argument
2187 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_event()
2191 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_event()
2196 PM8001_IOERR_DBG(pm8001_ha, in mpi_ssp_event()
2201 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n");) in mpi_ssp_event()
2209 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2211 pm8001_handle_event(pm8001_ha, t, IO_XFER_ERROR_BREAK); in mpi_ssp_event()
2214 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2221 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
2228 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2235 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2247 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2253 pm8001_handle_event(pm8001_ha, in mpi_ssp_event()
2258 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2265 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
2272 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2279 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2286 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2292 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2294 pm8001_handle_event(pm8001_ha, t, IO_XFER_OPEN_RETRY_TIMEOUT); in mpi_ssp_event()
2297 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2303 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2309 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2315 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2321 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2327 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2333 PM8001_IOERR_DBG(pm8001_ha, in mpi_ssp_event()
2340 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
2344 PM8001_DEVIO_DBG(pm8001_ha, in mpi_ssp_event()
2357 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
2361 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
2364 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
2372 mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_sata_completion() argument
2395 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2399 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_completion()
2405 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2414 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2421 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2428 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2434 PM8001_IOERR_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2444 sata_addr_low[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2446 sata_addr_hi[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2468 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2474 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2481 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_sata_completion()
2492 pm80xx_send_abort_all(pm8001_ha, pm8001_dev); in mpi_sata_completion()
2494 pm8001_tag_free(pm8001_ha, tag); in mpi_sata_completion()
2503 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2511 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2515 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2519 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2527 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2534 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2544 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2553 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2559 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2565 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2572 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2579 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2586 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2598 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2603 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2608 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2613 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2619 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2624 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2629 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2636 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2641 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2646 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2651 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2658 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2664 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2670 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2676 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2682 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2688 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2694 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2700 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2705 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2709 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2714 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2720 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2725 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2729 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2734 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2741 PM8001_DEVIO_DBG(pm8001_ha, in mpi_sata_completion()
2754 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2760 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2763 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2768 static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_sata_event() argument
2782 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_event()
2788 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2793 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2799 pm8001_dev = pm8001_find_dev(pm8001_ha, dev_id); in mpi_sata_event()
2802 pm80xx_send_read_log(pm8001_ha, pm8001_dev); in mpi_sata_event()
2807 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2813 PM8001_IOERR_DBG(pm8001_ha, in mpi_sata_event()
2818 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_sata_event()
2826 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2832 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2839 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2846 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2853 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2865 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2870 pm8001_handle_event(pm8001_ha, in mpi_sata_event()
2875 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2880 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2887 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2894 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2901 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2907 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2913 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2919 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2925 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2931 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2937 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2943 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2949 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2955 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2959 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2965 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2972 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2979 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2992 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2996 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2999 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
3005 mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_smp_completion() argument
3022 ccb = &pm8001_ha->ccb_info[tag]; in mpi_smp_completion()
3028 PM8001_FAIL_DBG(pm8001_ha, in mpi_smp_completion()
3033 PM8001_DEV_DBG(pm8001_ha, in mpi_smp_completion()
3039 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_smp_completion()
3044 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in mpi_smp_completion()
3045 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3053 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
3061 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3069 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_smp_completion()
3077 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_NO_DEVICE\n")); in mpi_smp_completion()
3082 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3088 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3094 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3100 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3107 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3114 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3126 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3131 pm8001_handle_event(pm8001_ha, in mpi_smp_completion()
3136 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3143 PM8001_IO_DBG(pm8001_ha, pm8001_printk(\ in mpi_smp_completion()
3150 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3157 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3163 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3170 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3176 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3183 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3189 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3196 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
3203 PM8001_DEVIO_DBG(pm8001_ha, in mpi_smp_completion()
3216 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
3220 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
3223 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
3239 static void pm80xx_hw_event_ack_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_hw_event_ack_req() argument
3248 circularQ = &pm8001_ha->inbnd_q_tbl[Qnum]; in pm80xx_hw_event_ack_req()
3254 pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in pm80xx_hw_event_ack_req()
3258 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
3261 static void hw_event_port_recover(struct pm8001_hba_info *pm8001_ha, in hw_event_port_recover() argument
3271 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_port_recover()
3273 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_port_recover()
3276 pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id, in hw_event_port_recover()
3293 hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sas_phy_up() argument
3308 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sas_phy_up()
3309 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sas_phy_up()
3310 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sas_phy_up()
3316 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in hw_event_sas_phy_up()
3323 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
3327 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("end device.\n")); in hw_event_sas_phy_up()
3328 pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id, in hw_event_sas_phy_up()
3334 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
3340 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
3346 PM8001_DEVIO_DBG(pm8001_ha, in hw_event_sas_phy_up()
3365 if (pm8001_ha->flags == PM8001F_RUN_TIME) in hw_event_sas_phy_up()
3367 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sas_phy_up()
3376 hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sata_phy_up() argument
3391 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sata_phy_up()
3392 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sata_phy_up()
3393 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sata_phy_up()
3395 PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk( in hw_event_sata_phy_up()
3415 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sata_phy_up()
3424 hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_phy_down() argument
3437 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_phy_down()
3438 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_phy_down()
3447 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3449 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3454 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3460 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3464 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3469 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3471 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3476 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3483 PM8001_DEVIO_DBG(pm8001_ha, in hw_event_phy_down()
3490 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_phy_down()
3496 static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_start_resp() argument
3504 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_phy_start_resp()
3506 PM8001_INIT_DBG(pm8001_ha, in mpi_phy_start_resp()
3511 if (pm8001_ha->flags == PM8001F_RUN_TIME && in mpi_phy_start_resp()
3526 static int mpi_thermal_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_thermal_hw_event() argument
3535 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3537 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3542 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3544 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3556 static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_hw_event() argument
3571 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in mpi_hw_event()
3572 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_hw_event()
3573 struct pm8001_port *port = &pm8001_ha->port[port_id]; in mpi_hw_event()
3575 PM8001_DEV_DBG(pm8001_ha, in mpi_hw_event()
3582 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3584 hw_event_sas_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3587 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3589 hw_event_sata_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3592 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3597 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3599 hw_event_phy_down(pm8001_ha, piomb); in mpi_hw_event()
3600 if (pm8001_ha->reset_in_progress) { in mpi_hw_event()
3601 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3609 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3618 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3620 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_BROADCAST_CHANGE, in mpi_hw_event()
3628 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3635 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3643 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3645 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3649 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3651 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3656 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3658 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3663 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_hw_event()
3665 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3670 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3674 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3682 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3684 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3689 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3694 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3701 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3703 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3711 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3713 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in mpi_hw_event()
3718 if (pm8001_ha->phy[phy_id].reset_completion) { in mpi_hw_event()
3719 pm8001_ha->phy[phy_id].port_reset_status = in mpi_hw_event()
3721 complete(pm8001_ha->phy[phy_id].reset_completion); in mpi_hw_event()
3722 pm8001_ha->phy[phy_id].reset_completion = NULL; in mpi_hw_event()
3726 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3728 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3731 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in mpi_hw_event()
3733 phy = &pm8001_ha->phy[i]; in mpi_hw_event()
3741 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3743 hw_event_port_recover(pm8001_ha, piomb); in mpi_hw_event()
3746 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3748 if (pm8001_ha->phy[phy_id].reset_completion) { in mpi_hw_event()
3749 pm8001_ha->phy[phy_id].port_reset_status = in mpi_hw_event()
3751 complete(pm8001_ha->phy[phy_id].reset_completion); in mpi_hw_event()
3752 pm8001_ha->phy[phy_id].reset_completion = NULL; in mpi_hw_event()
3756 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3760 PM8001_DEVIO_DBG(pm8001_ha, in mpi_hw_event()
3772 static int mpi_phy_stop_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_stop_resp() argument
3780 struct pm8001_phy *phy = &pm8001_ha->phy[phyid]; in mpi_phy_stop_resp()
3781 PM8001_MSG_DBG(pm8001_ha, in mpi_phy_stop_resp()
3795 static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_controller_config_resp() argument
3803 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_set_controller_config_resp()
3815 static int mpi_get_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_controller_config_resp() argument
3818 PM8001_MSG_DBG(pm8001_ha, in mpi_get_controller_config_resp()
3829 static int mpi_get_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_phy_profile_resp() argument
3832 PM8001_MSG_DBG(pm8001_ha, in mpi_get_phy_profile_resp()
3843 static int mpi_flash_op_ext_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_flash_op_ext_resp() argument
3845 PM8001_MSG_DBG(pm8001_ha, in mpi_flash_op_ext_resp()
3856 static int mpi_set_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_resp() argument
3871 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3877 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3883 pm8001_tag_free(pm8001_ha, tag); in mpi_set_phy_profile_resp()
3892 static int mpi_kek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_kek_management_resp() argument
3901 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_kek_management_resp()
3913 static int mpi_dek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_dek_management_resp() argument
3916 PM8001_MSG_DBG(pm8001_ha, in mpi_dek_management_resp()
3927 static int ssp_coalesced_comp_resp(struct pm8001_hba_info *pm8001_ha, in ssp_coalesced_comp_resp() argument
3930 PM8001_MSG_DBG(pm8001_ha, in ssp_coalesced_comp_resp()
3941 static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb) in process_one_iomb() argument
3948 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO\n")); in process_one_iomb()
3951 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3953 mpi_hw_event(pm8001_ha, piomb); in process_one_iomb()
3956 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3958 mpi_thermal_hw_event(pm8001_ha, piomb); in process_one_iomb()
3961 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3963 mpi_ssp_completion(pm8001_ha, piomb); in process_one_iomb()
3966 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3968 mpi_smp_completion(pm8001_ha, piomb); in process_one_iomb()
3971 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3973 pm8001_mpi_local_phy_ctl(pm8001_ha, piomb); in process_one_iomb()
3976 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3978 pm8001_mpi_reg_resp(pm8001_ha, piomb); in process_one_iomb()
3981 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3983 pm8001_mpi_dereg_resp(pm8001_ha, piomb); in process_one_iomb()
3986 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3990 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3992 mpi_sata_completion(pm8001_ha, piomb); in process_one_iomb()
3995 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3997 mpi_sata_event(pm8001_ha, piomb); in process_one_iomb()
4000 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4002 mpi_ssp_event(pm8001_ha, piomb); in process_one_iomb()
4005 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4010 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4015 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4017 pm8001_mpi_fw_flash_update_resp(pm8001_ha, piomb); in process_one_iomb()
4020 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4024 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4028 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4030 pm8001_mpi_general_event(pm8001_ha, piomb); in process_one_iomb()
4033 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4035 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
4038 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4040 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
4043 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4047 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4051 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4055 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4059 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4063 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4065 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
4068 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4070 pm8001_mpi_get_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
4073 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4075 pm8001_mpi_set_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
4078 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4082 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4084 pm8001_mpi_set_dev_state_resp(pm8001_ha, piomb); in process_one_iomb()
4087 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4091 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
4096 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4098 mpi_phy_start_resp(pm8001_ha, piomb); in process_one_iomb()
4101 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4103 mpi_phy_stop_resp(pm8001_ha, piomb); in process_one_iomb()
4106 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4108 mpi_set_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
4111 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4113 mpi_get_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
4116 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4118 mpi_get_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
4121 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4123 mpi_flash_op_ext_resp(pm8001_ha, piomb); in process_one_iomb()
4126 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4128 mpi_set_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
4131 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4133 mpi_kek_management_resp(pm8001_ha, piomb); in process_one_iomb()
4136 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4138 mpi_dek_management_resp(pm8001_ha, piomb); in process_one_iomb()
4141 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4143 ssp_coalesced_comp_resp(pm8001_ha, piomb); in process_one_iomb()
4146 PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
4152 static void print_scratchpad_registers(struct pm8001_hba_info *pm8001_ha) in print_scratchpad_registers() argument
4154 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4156 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0))); in print_scratchpad_registers()
4157 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4159 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1))); in print_scratchpad_registers()
4160 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4162 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2))); in print_scratchpad_registers()
4163 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4165 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3))); in print_scratchpad_registers()
4166 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4168 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_0))); in print_scratchpad_registers()
4169 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4171 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_1))); in print_scratchpad_registers()
4172 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4174 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_2))); in print_scratchpad_registers()
4175 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4177 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_3))); in print_scratchpad_registers()
4178 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4180 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_4))); in print_scratchpad_registers()
4181 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4183 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_5))); in print_scratchpad_registers()
4184 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4186 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_6))); in print_scratchpad_registers()
4187 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
4189 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_7))); in print_scratchpad_registers()
4192 static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec) in process_oq() argument
4201 if (vec == (pm8001_ha->max_q_num - 1)) { in process_oq()
4202 regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in process_oq()
4205 pm8001_ha->controller_fatal_error = true; in process_oq()
4206 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in process_oq()
4208 print_scratchpad_registers(pm8001_ha); in process_oq()
4212 spin_lock_irqsave(&pm8001_ha->lock, flags); in process_oq()
4213 circularQ = &pm8001_ha->outbnd_q_tbl[vec]; in process_oq()
4221 ret = pm8001_mpi_msg_consume(pm8001_ha, circularQ, &pMsg1, &bc); in process_oq()
4224 process_one_iomb(pm8001_ha, (void *)(pMsg1 - 4)); in process_oq()
4226 pm8001_mpi_msg_free_set(pm8001_ha, pMsg1, in process_oq()
4239 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in process_oq()
4269 static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_smp_req() argument
4291 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, DMA_TO_DEVICE); in pm80xx_chip_smp_req()
4297 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, DMA_FROM_DEVICE); in pm80xx_chip_smp_req()
4310 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_smp_req()
4314 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
4317 pm8001_ha->smp_exp_mode = SMP_DIRECT; in pm80xx_chip_smp_req()
4319 pm8001_ha->smp_exp_mode = SMP_INDIRECT; in pm80xx_chip_smp_req()
4326 if (pm8001_ha->smp_exp_mode == SMP_INDIRECT) { in pm80xx_chip_smp_req()
4327 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
4359 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in pm80xx_chip_smp_req()
4360 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
4365 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
4371 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
4379 &smp_cmd, pm8001_ha->smp_exp_mode, length); in pm80xx_chip_smp_req()
4381 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &smp_cmd, in pm80xx_chip_smp_req()
4389 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1, in pm80xx_chip_smp_req()
4392 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1, in pm80xx_chip_smp_req()
4435 static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_ssp_io_req() argument
4468 q_index = (u32) (cpu_id) % (pm8001_ha->max_q_num); in pm80xx_chip_ssp_io_req()
4469 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_ssp_io_req()
4472 if (pm8001_ha->chip->encrypt && in pm80xx_chip_ssp_io_req()
4473 !(pm8001_ha->encrypt_info.status) && check_enc_sas_cmd(task)) { in pm80xx_chip_ssp_io_req()
4474 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
4506 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
4536 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
4562 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
4586 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_ssp_io_req()
4592 static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_sata_req() argument
4612 q_index = (u32) (cpu_id) % (pm8001_ha->max_q_num); in pm80xx_chip_sata_req()
4613 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_sata_req()
4617 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n")); in pm80xx_chip_sata_req()
4621 PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA\n")); in pm80xx_chip_sata_req()
4624 PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO\n")); in pm80xx_chip_sata_req()
4629 PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA\n")); in pm80xx_chip_sata_req()
4647 if (pm8001_ha->chip->encrypt && in pm80xx_chip_sata_req()
4648 !(pm8001_ha->encrypt_info.status) && check_enc_sat_cmd(task)) { in pm80xx_chip_sata_req()
4649 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4679 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4714 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4742 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4807 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4811 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm80xx_chip_sata_req()
4816 pm8001_ccb_task_free_done(pm8001_ha, task, in pm80xx_chip_sata_req()
4823 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_sata_req()
4835 pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id) in pm80xx_chip_phy_start_req() argument
4842 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_start_req()
4846 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_phy_start_req()
4850 LINKMODE_AUTO | pm8001_ha->link_rate | phy_id); in pm80xx_chip_phy_start_req()
4863 &pm8001_ha->sas_addr, SAS_ADDR_SIZE); in pm80xx_chip_phy_start_req()
4865 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, in pm80xx_chip_phy_start_req()
4875 static int pm80xx_chip_phy_stop_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_stop_req() argument
4883 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_stop_req()
4887 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, in pm80xx_chip_phy_stop_req()
4895 static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_reg_dev_req() argument
4910 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_reg_dev_req()
4913 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_chip_reg_dev_req()
4916 ccb = &pm8001_ha->ccb_info[tag]; in pm80xx_chip_reg_dev_req()
4954 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in pm80xx_chip_reg_dev_req()
4957 pm8001_tag_free(pm8001_ha, tag); in pm80xx_chip_reg_dev_req()
4968 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_ctl_req() argument
4977 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_chip_phy_ctl_req()
4980 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_ctl_req()
4984 return pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in pm80xx_chip_phy_ctl_req()
4988 static u32 pm80xx_chip_is_our_interrupt(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_is_our_interrupt() argument
4995 value = pm8001_cr32(pm8001_ha, 0, MSGU_ODR); in pm80xx_chip_is_our_interrupt()
5008 pm80xx_chip_isr(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_isr() argument
5010 pm80xx_chip_interrupt_disable(pm8001_ha, vec); in pm80xx_chip_isr()
5011 PM8001_DEVIO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_isr()
5013 vec, pm8001_cr32(pm8001_ha, 0, 0x30))); in pm80xx_chip_isr()
5014 process_oq(pm8001_ha, vec); in pm80xx_chip_isr()
5015 pm80xx_chip_interrupt_enable(pm8001_ha, vec); in pm80xx_chip_isr()
5019 static void mpi_set_phy_profile_req(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_req() argument
5030 rc = pm8001_tag_alloc(pm8001_ha, &tag); in mpi_set_phy_profile_req()
5032 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("Invalid tag\n")); in mpi_set_phy_profile_req()
5033 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in mpi_set_phy_profile_req()
5036 PM8001_INIT_DBG(pm8001_ha, in mpi_set_phy_profile_req()
5043 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in mpi_set_phy_profile_req()
5046 pm8001_tag_free(pm8001_ha, tag); in mpi_set_phy_profile_req()
5049 void pm8001_set_phy_profile(struct pm8001_hba_info *pm8001_ha, in pm8001_set_phy_profile() argument
5054 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_set_phy_profile()
5055 mpi_set_phy_profile_req(pm8001_ha, in pm8001_set_phy_profile()
5059 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("phy settings completed\n")); in pm8001_set_phy_profile()
5062 void pm8001_set_phy_profile_single(struct pm8001_hba_info *pm8001_ha, in pm8001_set_phy_profile_single() argument
5072 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm8001_set_phy_profile_single()
5074 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("Invalid tag")); in pm8001_set_phy_profile_single()
5076 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm8001_set_phy_profile_single()
5086 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, in pm8001_set_phy_profile_single()
5089 pm8001_tag_free(pm8001_ha, tag); in pm8001_set_phy_profile_single()
5091 PM8001_INIT_DBG(pm8001_ha, in pm8001_set_phy_profile_single()