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 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()
99 pm8001_ha->forensic_info.data_buf.direct_data = buf; in pm80xx_get_fatal_dump()
100 if (pm8001_ha->chip_id == chip_8001) { in pm80xx_get_fatal_dump()
101 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
102 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
104 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
107 if (pm8001_ha->forensic_info.data_buf.direct_offset == 0) { in pm80xx_get_fatal_dump()
108 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
111 pm8001_ha->forensic_info.data_type = TYPE_NON_FATAL; in pm80xx_get_fatal_dump()
112 pm8001_ha->forensic_info.data_buf.direct_len = SYSFS_OFFSET; in pm80xx_get_fatal_dump()
113 pm8001_ha->forensic_info.data_buf.read_len = 0; in pm80xx_get_fatal_dump()
115 pm8001_ha->forensic_info.data_buf.direct_data = direct_data; in pm80xx_get_fatal_dump()
119 pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER, in pm80xx_get_fatal_dump()
120 pm8001_ha->fatal_forensic_shift_offset); in pm80xx_get_fatal_dump()
121 pm8001_ha->forensic_last_offset = 0; in pm80xx_get_fatal_dump()
122 pm8001_ha->forensic_fatal_step = 0; in pm80xx_get_fatal_dump()
123 pm8001_ha->fatal_bar_loc = 0; in pm80xx_get_fatal_dump()
129 PM8001_IO_DBG(pm8001_ha, pm8001_printk("accum_len 0x%x\n", in pm80xx_get_fatal_dump()
132 PM8001_IO_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
138 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
139 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
141 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
144 temp = (u32 *)pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr; in pm80xx_get_fatal_dump()
145 if (pm8001_ha->forensic_fatal_step == 0) { in pm80xx_get_fatal_dump()
147 if (pm8001_ha->forensic_info.data_buf.direct_data) { in pm80xx_get_fatal_dump()
149 pm80xx_pci_mem_copy(pm8001_ha, pm8001_ha->fatal_bar_loc, in pm80xx_get_fatal_dump()
150 pm8001_ha->memoryMap.region[FORENSIC_MEM].virt_ptr, in pm80xx_get_fatal_dump()
151 pm8001_ha->forensic_info.data_buf.direct_len , in pm80xx_get_fatal_dump()
154 pm8001_ha->fatal_bar_loc += in pm80xx_get_fatal_dump()
155 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
156 pm8001_ha->forensic_info.data_buf.direct_offset += in pm80xx_get_fatal_dump()
157 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
158 pm8001_ha->forensic_last_offset += in pm80xx_get_fatal_dump()
159 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
160 pm8001_ha->forensic_info.data_buf.read_len = in pm80xx_get_fatal_dump()
161 pm8001_ha->forensic_info.data_buf.direct_len; in pm80xx_get_fatal_dump()
163 if (pm8001_ha->forensic_last_offset >= accum_len) { in pm80xx_get_fatal_dump()
164 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
165 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
168 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
169 sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
174 pm8001_ha->fatal_bar_loc = 0; in pm80xx_get_fatal_dump()
175 pm8001_ha->forensic_fatal_step = 1; in pm80xx_get_fatal_dump()
176 pm8001_ha->fatal_forensic_shift_offset = 0; in pm80xx_get_fatal_dump()
177 pm8001_ha->forensic_last_offset = 0; in pm80xx_get_fatal_dump()
178 return (char *)pm8001_ha-> in pm80xx_get_fatal_dump()
182 if (pm8001_ha->fatal_bar_loc < (64 * 1024)) { in pm80xx_get_fatal_dump()
183 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
184 sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
188 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
189 sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
193 return (char *)pm8001_ha-> in pm80xx_get_fatal_dump()
199 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
200 sprintf(pm8001_ha->forensic_info.data_buf.direct_data, in pm80xx_get_fatal_dump()
203 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
204 sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
208 pm8001_ha->fatal_forensic_shift_offset += 0x100; in pm80xx_get_fatal_dump()
209 pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER, in pm80xx_get_fatal_dump()
210 pm8001_ha->fatal_forensic_shift_offset); in pm80xx_get_fatal_dump()
211 pm8001_ha->fatal_bar_loc = 0; in pm80xx_get_fatal_dump()
212 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
215 if (pm8001_ha->forensic_fatal_step == 1) { in pm80xx_get_fatal_dump()
216 pm8001_ha->fatal_forensic_shift_offset = 0; in pm80xx_get_fatal_dump()
218 pm8001_cw32(pm8001_ha, 0, MEMBASE_II_SHIFT_REGISTER, in pm80xx_get_fatal_dump()
219 pm8001_ha->fatal_forensic_shift_offset); in pm80xx_get_fatal_dump()
233 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_get_fatal_dump()
240 pm8001_ha->forensic_fatal_step = 0; in pm80xx_get_fatal_dump()
248 pm8001_ha->forensic_info.data_buf.direct_data += in pm80xx_get_fatal_dump()
249 sprintf(pm8001_ha-> in pm80xx_get_fatal_dump()
252 pm8001_ha->forensic_info.data_buf.read_len = 0xFFFFFFFF; in pm80xx_get_fatal_dump()
253 pm8001_ha->forensic_info.data_buf.direct_len = 0; in pm80xx_get_fatal_dump()
254 pm8001_ha->forensic_info.data_buf.direct_offset = 0; in pm80xx_get_fatal_dump()
255 pm8001_ha->forensic_info.data_buf.read_len = 0; in pm80xx_get_fatal_dump()
259 return (char *)pm8001_ha->forensic_info.data_buf.direct_data - in pm80xx_get_fatal_dump()
267 static void read_main_config_table(struct pm8001_hba_info *pm8001_ha) in read_main_config_table() argument
269 void __iomem *address = pm8001_ha->main_cfg_tbl_addr; in read_main_config_table()
271 pm8001_ha->main_cfg_tbl.pm80xx_tbl.signature = in read_main_config_table()
273 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interface_rev = in read_main_config_table()
275 pm8001_ha->main_cfg_tbl.pm80xx_tbl.firmware_rev = in read_main_config_table()
277 pm8001_ha->main_cfg_tbl.pm80xx_tbl.max_out_io = in read_main_config_table()
279 pm8001_ha->main_cfg_tbl.pm80xx_tbl.max_sgl = in read_main_config_table()
281 pm8001_ha->main_cfg_tbl.pm80xx_tbl.ctrl_cap_flag = in read_main_config_table()
283 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gst_offset = in read_main_config_table()
285 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_queue_offset = in read_main_config_table()
287 pm8001_ha->main_cfg_tbl.pm80xx_tbl.outbound_queue_offset = in read_main_config_table()
291 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_offset0 = in read_main_config_table()
293 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_length0 = in read_main_config_table()
295 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_offset1 = in read_main_config_table()
297 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_dump_length1 = in read_main_config_table()
301 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping = in read_main_config_table()
305 pm8001_ha->main_cfg_tbl.pm80xx_tbl.analog_setup_table_offset = in read_main_config_table()
308 pm8001_ha->main_cfg_tbl.pm80xx_tbl.int_vec_table_offset = in read_main_config_table()
310 pm8001_ha->main_cfg_tbl.pm80xx_tbl.phy_attr_table_offset = in read_main_config_table()
313 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer = in read_main_config_table()
321 static void read_general_status_table(struct pm8001_hba_info *pm8001_ha) in read_general_status_table() argument
323 void __iomem *address = pm8001_ha->general_stat_tbl_addr; in read_general_status_table()
324 pm8001_ha->gs_tbl.pm80xx_tbl.gst_len_mpistate = in read_general_status_table()
326 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state0 = in read_general_status_table()
328 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state1 = in read_general_status_table()
330 pm8001_ha->gs_tbl.pm80xx_tbl.msgu_tcnt = in read_general_status_table()
332 pm8001_ha->gs_tbl.pm80xx_tbl.iop_tcnt = in read_general_status_table()
334 pm8001_ha->gs_tbl.pm80xx_tbl.gpio_input_val = in read_general_status_table()
336 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[0] = in read_general_status_table()
338 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[1] = in read_general_status_table()
340 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[2] = in read_general_status_table()
342 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[3] = in read_general_status_table()
344 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[4] = in read_general_status_table()
346 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[5] = in read_general_status_table()
348 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[6] = in read_general_status_table()
350 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[7] = in read_general_status_table()
357 static void read_phy_attr_table(struct pm8001_hba_info *pm8001_ha) in read_phy_attr_table() argument
359 void __iomem *address = pm8001_ha->pspa_q_tbl_addr; in read_phy_attr_table()
360 pm8001_ha->phy_attr_table.phystart1_16[0] = in read_phy_attr_table()
362 pm8001_ha->phy_attr_table.phystart1_16[1] = in read_phy_attr_table()
364 pm8001_ha->phy_attr_table.phystart1_16[2] = in read_phy_attr_table()
366 pm8001_ha->phy_attr_table.phystart1_16[3] = in read_phy_attr_table()
368 pm8001_ha->phy_attr_table.phystart1_16[4] = in read_phy_attr_table()
370 pm8001_ha->phy_attr_table.phystart1_16[5] = in read_phy_attr_table()
372 pm8001_ha->phy_attr_table.phystart1_16[6] = in read_phy_attr_table()
374 pm8001_ha->phy_attr_table.phystart1_16[7] = in read_phy_attr_table()
376 pm8001_ha->phy_attr_table.phystart1_16[8] = in read_phy_attr_table()
378 pm8001_ha->phy_attr_table.phystart1_16[9] = in read_phy_attr_table()
380 pm8001_ha->phy_attr_table.phystart1_16[10] = in read_phy_attr_table()
382 pm8001_ha->phy_attr_table.phystart1_16[11] = in read_phy_attr_table()
384 pm8001_ha->phy_attr_table.phystart1_16[12] = in read_phy_attr_table()
386 pm8001_ha->phy_attr_table.phystart1_16[13] = in read_phy_attr_table()
388 pm8001_ha->phy_attr_table.phystart1_16[14] = in read_phy_attr_table()
390 pm8001_ha->phy_attr_table.phystart1_16[15] = in read_phy_attr_table()
393 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[0] = in read_phy_attr_table()
395 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[1] = in read_phy_attr_table()
397 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[2] = in read_phy_attr_table()
399 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[3] = in read_phy_attr_table()
401 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[4] = in read_phy_attr_table()
403 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[5] = in read_phy_attr_table()
405 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[6] = in read_phy_attr_table()
407 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[7] = in read_phy_attr_table()
409 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[8] = in read_phy_attr_table()
411 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[9] = in read_phy_attr_table()
413 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[10] = in read_phy_attr_table()
415 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[11] = in read_phy_attr_table()
417 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[12] = in read_phy_attr_table()
419 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[13] = in read_phy_attr_table()
421 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[14] = in read_phy_attr_table()
423 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[15] = in read_phy_attr_table()
432 static void read_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_inbnd_queue_table() argument
435 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in read_inbnd_queue_table()
438 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in read_inbnd_queue_table()
441 pm8001_ha->inbnd_q_tbl[i].pi_offset = in read_inbnd_queue_table()
450 static void read_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_outbnd_queue_table() argument
453 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in read_outbnd_queue_table()
456 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in read_outbnd_queue_table()
459 pm8001_ha->outbnd_q_tbl[i].ci_offset = in read_outbnd_queue_table()
468 static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) in init_default_table_values() argument
472 void __iomem *addressib = pm8001_ha->inbnd_q_tbl_addr; in init_default_table_values()
473 void __iomem *addressob = pm8001_ha->outbnd_q_tbl_addr; in init_default_table_values()
475 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr = in init_default_table_values()
476 pm8001_ha->memoryMap.region[AAP1].phys_addr_hi; in init_default_table_values()
477 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr = in init_default_table_values()
478 pm8001_ha->memoryMap.region[AAP1].phys_addr_lo; in init_default_table_values()
479 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size = in init_default_table_values()
481 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity = 0x01; in init_default_table_values()
482 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr = in init_default_table_values()
483 pm8001_ha->memoryMap.region[IOP].phys_addr_hi; in init_default_table_values()
484 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr = in init_default_table_values()
485 pm8001_ha->memoryMap.region[IOP].phys_addr_lo; in init_default_table_values()
486 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size = in init_default_table_values()
488 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity = 0x01; in init_default_table_values()
489 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt = 0x01; in init_default_table_values()
492 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump = (0x1 << 16); in init_default_table_values()
495 pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = in init_default_table_values()
496 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); in init_default_table_values()
497 pm8001_ha->inbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
498 pm8001_ha->memoryMap.region[IB + i].phys_addr_hi; in init_default_table_values()
499 pm8001_ha->inbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
500 pm8001_ha->memoryMap.region[IB + i].phys_addr_lo; in init_default_table_values()
501 pm8001_ha->inbnd_q_tbl[i].base_virt = in init_default_table_values()
502 (u8 *)pm8001_ha->memoryMap.region[IB + i].virt_ptr; in init_default_table_values()
503 pm8001_ha->inbnd_q_tbl[i].total_length = in init_default_table_values()
504 pm8001_ha->memoryMap.region[IB + i].total_len; in init_default_table_values()
505 pm8001_ha->inbnd_q_tbl[i].ci_upper_base_addr = in init_default_table_values()
506 pm8001_ha->memoryMap.region[CI + i].phys_addr_hi; in init_default_table_values()
507 pm8001_ha->inbnd_q_tbl[i].ci_lower_base_addr = in init_default_table_values()
508 pm8001_ha->memoryMap.region[CI + i].phys_addr_lo; in init_default_table_values()
509 pm8001_ha->inbnd_q_tbl[i].ci_virt = in init_default_table_values()
510 pm8001_ha->memoryMap.region[CI + i].virt_ptr; in init_default_table_values()
512 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in init_default_table_values()
515 pm8001_ha->inbnd_q_tbl[i].pi_offset = in init_default_table_values()
517 pm8001_ha->inbnd_q_tbl[i].producer_idx = 0; in init_default_table_values()
518 pm8001_ha->inbnd_q_tbl[i].consumer_index = 0; in init_default_table_values()
521 pm8001_ha->outbnd_q_tbl[i].element_size_cnt = in init_default_table_values()
522 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); in init_default_table_values()
523 pm8001_ha->outbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
524 pm8001_ha->memoryMap.region[OB + i].phys_addr_hi; in init_default_table_values()
525 pm8001_ha->outbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
526 pm8001_ha->memoryMap.region[OB + i].phys_addr_lo; in init_default_table_values()
527 pm8001_ha->outbnd_q_tbl[i].base_virt = in init_default_table_values()
528 (u8 *)pm8001_ha->memoryMap.region[OB + i].virt_ptr; in init_default_table_values()
529 pm8001_ha->outbnd_q_tbl[i].total_length = in init_default_table_values()
530 pm8001_ha->memoryMap.region[OB + i].total_len; in init_default_table_values()
531 pm8001_ha->outbnd_q_tbl[i].pi_upper_base_addr = in init_default_table_values()
532 pm8001_ha->memoryMap.region[PI + i].phys_addr_hi; in init_default_table_values()
533 pm8001_ha->outbnd_q_tbl[i].pi_lower_base_addr = in init_default_table_values()
534 pm8001_ha->memoryMap.region[PI + i].phys_addr_lo; in init_default_table_values()
536 pm8001_ha->outbnd_q_tbl[i].interrup_vec_cnt_delay = (i << 24); in init_default_table_values()
537 pm8001_ha->outbnd_q_tbl[i].pi_virt = in init_default_table_values()
538 pm8001_ha->memoryMap.region[PI + i].virt_ptr; in init_default_table_values()
540 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in init_default_table_values()
543 pm8001_ha->outbnd_q_tbl[i].ci_offset = in init_default_table_values()
545 pm8001_ha->outbnd_q_tbl[i].consumer_idx = 0; in init_default_table_values()
546 pm8001_ha->outbnd_q_tbl[i].producer_index = 0; in init_default_table_values()
554 static void update_main_config_table(struct pm8001_hba_info *pm8001_ha) in update_main_config_table() argument
556 void __iomem *address = pm8001_ha->main_cfg_tbl_addr; in update_main_config_table()
558 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_q_nppd_hppd); in update_main_config_table()
560 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr); in update_main_config_table()
562 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr); in update_main_config_table()
564 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size); in update_main_config_table()
566 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity); in update_main_config_table()
568 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr); in update_main_config_table()
570 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr); in update_main_config_table()
572 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size); in update_main_config_table()
574 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity); in update_main_config_table()
576 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt); in update_main_config_table()
578 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump); in update_main_config_table()
581 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping &= 0xCFFFFFFF; in update_main_config_table()
583 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping |= 0x20000000; in update_main_config_table()
585 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping); in update_main_config_table()
588 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer); in update_main_config_table()
590 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interrupt_reassertion_delay); in update_main_config_table()
592 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer &= 0xffff0000; in update_main_config_table()
593 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer |= in update_main_config_table()
596 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer); in update_main_config_table()
603 static void update_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_inbnd_queue_table() argument
606 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in update_inbnd_queue_table()
609 pm8001_ha->inbnd_q_tbl[number].element_pri_size_cnt); in update_inbnd_queue_table()
611 pm8001_ha->inbnd_q_tbl[number].upper_base_addr); in update_inbnd_queue_table()
613 pm8001_ha->inbnd_q_tbl[number].lower_base_addr); in update_inbnd_queue_table()
615 pm8001_ha->inbnd_q_tbl[number].ci_upper_base_addr); in update_inbnd_queue_table()
617 pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr); in update_inbnd_queue_table()
624 static void update_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_outbnd_queue_table() argument
627 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in update_outbnd_queue_table()
630 pm8001_ha->outbnd_q_tbl[number].element_size_cnt); in update_outbnd_queue_table()
632 pm8001_ha->outbnd_q_tbl[number].upper_base_addr); in update_outbnd_queue_table()
634 pm8001_ha->outbnd_q_tbl[number].lower_base_addr); in update_outbnd_queue_table()
636 pm8001_ha->outbnd_q_tbl[number].pi_upper_base_addr); in update_outbnd_queue_table()
638 pm8001_ha->outbnd_q_tbl[number].pi_lower_base_addr); in update_outbnd_queue_table()
640 pm8001_ha->outbnd_q_tbl[number].interrup_vec_cnt_delay); in update_outbnd_queue_table()
647 static int mpi_init_check(struct pm8001_hba_info *pm8001_ha) in mpi_init_check() argument
655 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_UPDATE); in mpi_init_check()
657 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_init_check()
664 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_init_check()
675 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_init_check()
694 static int check_fw_ready(struct pm8001_hba_info *pm8001_ha) in check_fw_ready() argument
705 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
712 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
718 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
727 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
733 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
742 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
748 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
754 if ((pm8001_ha->chip_id != chip_8008) && in check_fw_ready()
755 (pm8001_ha->chip_id != chip_8009)) { in check_fw_ready()
760 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
766 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in check_fw_ready()
775 static void init_pci_device_addresses(struct pm8001_hba_info *pm8001_ha) in init_pci_device_addresses() argument
783 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0); in init_pci_device_addresses()
786 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
791 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
793 pm8001_ha->main_cfg_tbl_addr = base_addr = in init_pci_device_addresses()
794 pm8001_ha->io_mem[pcibar].memvirtaddr + offset; in init_pci_device_addresses()
795 pm8001_ha->general_stat_tbl_addr = in init_pci_device_addresses()
796 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x18) & in init_pci_device_addresses()
798 pm8001_ha->inbnd_q_tbl_addr = in init_pci_device_addresses()
799 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C) & in init_pci_device_addresses()
801 pm8001_ha->outbnd_q_tbl_addr = in init_pci_device_addresses()
802 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x20) & in init_pci_device_addresses()
804 pm8001_ha->ivt_tbl_addr = in init_pci_device_addresses()
805 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C) & in init_pci_device_addresses()
807 pm8001_ha->pspa_q_tbl_addr = in init_pci_device_addresses()
808 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x90) & in init_pci_device_addresses()
810 pm8001_ha->fatal_tbl_addr = in init_pci_device_addresses()
811 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0xA0) & in init_pci_device_addresses()
814 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
816 pm8001_cr32(pm8001_ha, pcibar, offset + 0x18))); in init_pci_device_addresses()
817 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
819 pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C))); in init_pci_device_addresses()
820 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
822 pm8001_cr32(pm8001_ha, pcibar, offset + 0x20))); in init_pci_device_addresses()
823 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
825 pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C))); in init_pci_device_addresses()
826 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
828 pm8001_cr32(pm8001_ha, pcibar, offset + 0x90))); in init_pci_device_addresses()
829 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
831 pm8001_ha->main_cfg_tbl_addr, in init_pci_device_addresses()
832 pm8001_ha->general_stat_tbl_addr)); in init_pci_device_addresses()
833 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
835 pm8001_ha->inbnd_q_tbl_addr, in init_pci_device_addresses()
836 pm8001_ha->outbnd_q_tbl_addr)); in init_pci_device_addresses()
837 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
839 pm8001_ha->pspa_q_tbl_addr, in init_pci_device_addresses()
840 pm8001_ha->ivt_tbl_addr)); in init_pci_device_addresses()
848 pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_thermal_config() argument
858 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_thermal_config()
862 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_thermal_config()
865 if (IS_SPCV_12G(pm8001_ha->pdev)) in pm80xx_set_thermal_config()
874 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_set_thermal_config()
876 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_thermal_config()
887 pm80xx_set_sas_protocol_timer_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_sas_protocol_timer_config() argument
899 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_sas_protocol_timer_config()
904 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_sas_protocol_timer_config()
926 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
929 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
932 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
935 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
938 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
941 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
944 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
947 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
950 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.MAX_AIP " in pm80xx_set_sas_protocol_timer_config()
956 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_set_sas_protocol_timer_config()
958 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_sas_protocol_timer_config()
968 pm80xx_get_encrypt_info(struct pm8001_hba_info *pm8001_ha) in pm80xx_get_encrypt_info() argument
974 scratch3_value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3); in pm80xx_get_encrypt_info()
979 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
982 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
985 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
988 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
989 pm8001_ha->encrypt_info.status = 0; in pm80xx_get_encrypt_info()
990 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
993 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
994 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
995 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
999 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1002 pm8001_ha->encrypt_info.status = 0xFFFFFFFF; in pm80xx_get_encrypt_info()
1003 pm8001_ha->encrypt_info.cipher_mode = 0; in pm80xx_get_encrypt_info()
1004 pm8001_ha->encrypt_info.sec_mode = 0; in pm80xx_get_encrypt_info()
1008 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
1011 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1014 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1017 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1020 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1021 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1024 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1025 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1026 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1030 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
1033 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1036 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1039 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1042 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1044 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1047 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1048 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1049 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1058 static int pm80xx_encrypt_update(struct pm8001_hba_info *pm8001_ha) in pm80xx_encrypt_update() argument
1067 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_encrypt_update()
1071 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_encrypt_update()
1079 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_encrypt_update()
1081 pm8001_tag_free(pm8001_ha, tag); in pm80xx_encrypt_update()
1090 static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_init() argument
1096 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_init()
1097 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_init()
1103 init_pci_device_addresses(pm8001_ha); in pm80xx_chip_init()
1104 init_default_table_values(pm8001_ha); in pm80xx_chip_init()
1105 read_main_config_table(pm8001_ha); in pm80xx_chip_init()
1106 read_general_status_table(pm8001_ha); in pm80xx_chip_init()
1107 read_inbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1108 read_outbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1109 read_phy_attr_table(pm8001_ha); in pm80xx_chip_init()
1112 update_main_config_table(pm8001_ha); in pm80xx_chip_init()
1114 update_inbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1116 update_outbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1119 if (0 == mpi_init_check(pm8001_ha)) { in pm80xx_chip_init()
1120 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1126 ret = pm80xx_set_sas_protocol_timer_config(pm8001_ha); in pm80xx_chip_init()
1129 if (pm8001_ha->chip->encrypt) { in pm80xx_chip_init()
1130 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1132 ret = pm80xx_get_encrypt_info(pm8001_ha); in pm80xx_chip_init()
1134 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1136 if (pm8001_ha->encrypt_info.status == 0x81) { in pm80xx_chip_init()
1137 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_init()
1140 pm80xx_encrypt_update(pm8001_ha); in pm80xx_chip_init()
1147 static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha) in mpi_uninit_check() argument
1152 init_pci_device_addresses(pm8001_ha); in mpi_uninit_check()
1155 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_RESET); in mpi_uninit_check()
1158 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_uninit_check()
1165 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_uninit_check()
1170 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1181 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_uninit_check()
1188 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1204 pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_soft_rst() argument
1211 if (mpi_uninit_check(pm8001_ha) != 0) { in pm80xx_chip_soft_rst()
1212 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1218 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1219 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1222 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, SPCv_NORMAL_RESET_VALUE); in pm80xx_chip_soft_rst()
1225 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1226 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1231 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1235 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1241 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1) & in pm80xx_chip_soft_rst()
1245 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1249 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1253 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1257 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1264 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_soft_rst()
1265 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1268 if (pm8001_ha->pdev->subsystem_vendor != in pm80xx_chip_soft_rst()
1270 pm8001_ha->pdev->subsystem_vendor != in pm80xx_chip_soft_rst()
1272 pm8001_ha->pdev->subsystem_vendor != 0) { in pm80xx_chip_soft_rst()
1273 ibutton0 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1275 ibutton1 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1278 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1284 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1291 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1296 static void pm80xx_hw_chip_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_hw_chip_rst() argument
1300 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1304 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, 0x11); in pm80xx_hw_chip_rst()
1305 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1318 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1327 pm80xx_chip_intx_interrupt_enable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_enable() argument
1329 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, ODMR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1330 pm8001_cw32(pm8001_ha, 0, MSGU_ODCR, ODCR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1338 pm80xx_chip_intx_interrupt_disable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_disable() argument
1340 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, ODMR_MASK_ALL); in pm80xx_chip_intx_interrupt_disable()
1348 pm80xx_chip_interrupt_enable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_enable() argument
1354 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_enable()
1357 pm80xx_chip_intx_interrupt_enable(pm8001_ha); in pm80xx_chip_interrupt_enable()
1366 pm80xx_chip_interrupt_disable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_disable() argument
1374 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_disable()
1377 pm80xx_chip_intx_interrupt_disable(pm8001_ha); in pm80xx_chip_interrupt_disable()
1380 static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_abort_all() argument
1393 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("dev is null\n")); in pm80xx_send_abort_all()
1400 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("cannot " in pm80xx_send_abort_all()
1407 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_abort_all()
1413 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_abort_all()
1418 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_abort_all()
1425 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &task_abort, 0); in pm80xx_send_abort_all()
1428 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_abort_all()
1432 static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_read_log() argument
1448 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1454 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_read_log()
1457 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1468 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1469 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1477 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_read_log()
1485 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_read_log()
1500 res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, 0); in pm80xx_send_read_log()
1503 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1520 mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_completion() argument
1535 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_completion()
1546 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1554 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1560 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1571 sas_ssp_task_response(pm8001_ha->dev, t, iu); in mpi_ssp_completion()
1577 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1584 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1594 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1600 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1608 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1615 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1622 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1629 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1636 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1648 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1654 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
1659 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1666 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
1673 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1680 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1687 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1693 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1699 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1706 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1712 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1718 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1723 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
1728 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1734 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1740 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1746 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1753 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1760 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1769 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
1773 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
1776 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
1783 static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_event() argument
1796 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_event()
1800 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_event()
1805 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1810 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n");) in mpi_ssp_event()
1818 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1820 pm8001_handle_event(pm8001_ha, t, IO_XFER_ERROR_BREAK); in mpi_ssp_event()
1823 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1830 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1837 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1844 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1856 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1862 pm8001_handle_event(pm8001_ha, in mpi_ssp_event()
1867 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1874 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1881 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1888 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1895 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1901 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1903 pm8001_handle_event(pm8001_ha, t, IO_XFER_OPEN_RETRY_TIMEOUT); in mpi_ssp_event()
1906 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1912 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1918 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1924 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1930 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1936 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1942 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1949 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1953 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1966 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1970 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
1973 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
1981 mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_sata_completion() argument
2004 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2008 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_completion()
2014 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2023 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2030 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2037 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2047 sata_addr_low[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2049 sata_addr_hi[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2071 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2077 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2084 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_sata_completion()
2095 pm80xx_send_abort_all(pm8001_ha, pm8001_dev); in mpi_sata_completion()
2097 pm8001_tag_free(pm8001_ha, tag); in mpi_sata_completion()
2106 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2114 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2118 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2122 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2130 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2137 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2147 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2156 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2162 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2168 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2175 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2182 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2189 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2201 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2206 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2211 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2216 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2222 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2227 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2232 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2239 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2244 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2249 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2254 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2261 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2267 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2273 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2279 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2285 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2291 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2297 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2303 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2308 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2312 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2317 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2323 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2328 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2332 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2337 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2344 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2357 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2361 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2364 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2369 static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_sata_event() argument
2383 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_event()
2389 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2394 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2400 pm8001_dev = pm8001_find_dev(pm8001_ha, dev_id); in mpi_sata_event()
2403 pm80xx_send_read_log(pm8001_ha, pm8001_dev); in mpi_sata_event()
2408 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2414 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2419 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_sata_event()
2427 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2433 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2440 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2447 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2454 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2466 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2471 pm8001_handle_event(pm8001_ha, in mpi_sata_event()
2476 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2481 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2488 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2495 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2502 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2508 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2514 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2520 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2526 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2532 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2538 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2544 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2550 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2556 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2560 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2566 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2573 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2580 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2593 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2597 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2600 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2606 mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_smp_completion() argument
2623 ccb = &pm8001_ha->ccb_info[tag]; in mpi_smp_completion()
2629 PM8001_FAIL_DBG(pm8001_ha, in mpi_smp_completion()
2637 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_smp_completion()
2642 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in mpi_smp_completion()
2643 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2651 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
2659 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2667 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_smp_completion()
2675 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_NO_DEVICE\n")); in mpi_smp_completion()
2680 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2686 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2692 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2698 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2705 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2712 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2724 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2729 pm8001_handle_event(pm8001_ha, in mpi_smp_completion()
2734 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2741 PM8001_IO_DBG(pm8001_ha, pm8001_printk(\ in mpi_smp_completion()
2748 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2755 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2761 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2768 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2774 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2781 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2787 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2794 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2801 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2814 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
2818 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
2821 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
2837 static void pm80xx_hw_event_ack_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_hw_event_ack_req() argument
2846 circularQ = &pm8001_ha->inbnd_q_tbl[Qnum]; in pm80xx_hw_event_ack_req()
2852 pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_hw_event_ack_req()
2855 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
2858 static void hw_event_port_recover(struct pm8001_hba_info *pm8001_ha, in hw_event_port_recover() argument
2868 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_port_recover()
2870 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_port_recover()
2873 pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id, in hw_event_port_recover()
2890 hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sas_phy_up() argument
2905 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sas_phy_up()
2906 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sas_phy_up()
2907 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sas_phy_up()
2913 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in hw_event_sas_phy_up()
2920 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2924 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("end device.\n")); in hw_event_sas_phy_up()
2925 pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id, in hw_event_sas_phy_up()
2931 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2937 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2943 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2962 if (pm8001_ha->flags == PM8001F_RUN_TIME) in hw_event_sas_phy_up()
2964 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sas_phy_up()
2973 hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sata_phy_up() argument
2988 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sata_phy_up()
2989 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sata_phy_up()
2990 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sata_phy_up()
2992 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in hw_event_sata_phy_up()
3012 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sata_phy_up()
3021 hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_phy_down() argument
3034 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_phy_down()
3035 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_phy_down()
3044 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3046 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3051 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3057 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3061 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3066 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3068 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3073 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3080 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3088 static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_start_resp() argument
3096 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_phy_start_resp()
3098 PM8001_INIT_DBG(pm8001_ha, in mpi_phy_start_resp()
3103 if (pm8001_ha->flags == PM8001F_RUN_TIME) in mpi_phy_start_resp()
3115 static int mpi_thermal_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_thermal_hw_event() argument
3124 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3126 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3131 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3133 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3145 static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_hw_event() argument
3160 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in mpi_hw_event()
3161 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_hw_event()
3162 struct pm8001_port *port = &pm8001_ha->port[port_id]; in mpi_hw_event()
3164 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3171 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3173 hw_event_sas_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3176 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3178 hw_event_sata_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3181 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3186 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3193 hw_event_phy_down(pm8001_ha, piomb); in mpi_hw_event()
3196 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3205 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3207 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_BROADCAST_CHANGE, in mpi_hw_event()
3215 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3222 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3230 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3232 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3236 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3238 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3243 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3245 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3250 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_hw_event()
3252 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3257 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3261 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3269 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3271 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3276 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3281 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3288 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3290 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3298 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3305 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3307 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3310 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in mpi_hw_event()
3312 phy = &pm8001_ha->phy[i]; in mpi_hw_event()
3320 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3322 hw_event_port_recover(pm8001_ha, piomb); in mpi_hw_event()
3325 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3329 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3333 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3345 static int mpi_phy_stop_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_stop_resp() argument
3353 struct pm8001_phy *phy = &pm8001_ha->phy[phyid]; in mpi_phy_stop_resp()
3354 PM8001_MSG_DBG(pm8001_ha, in mpi_phy_stop_resp()
3367 static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_controller_config_resp() argument
3375 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_set_controller_config_resp()
3387 static int mpi_get_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_controller_config_resp() argument
3390 PM8001_MSG_DBG(pm8001_ha, in mpi_get_controller_config_resp()
3401 static int mpi_get_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_phy_profile_resp() argument
3404 PM8001_MSG_DBG(pm8001_ha, in mpi_get_phy_profile_resp()
3415 static int mpi_flash_op_ext_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_flash_op_ext_resp() argument
3417 PM8001_MSG_DBG(pm8001_ha, in mpi_flash_op_ext_resp()
3428 static int mpi_set_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_resp() argument
3440 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3446 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3460 static int mpi_kek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_kek_management_resp() argument
3469 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_kek_management_resp()
3481 static int mpi_dek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_dek_management_resp() argument
3484 PM8001_MSG_DBG(pm8001_ha, in mpi_dek_management_resp()
3495 static int ssp_coalesced_comp_resp(struct pm8001_hba_info *pm8001_ha, in ssp_coalesced_comp_resp() argument
3498 PM8001_MSG_DBG(pm8001_ha, in ssp_coalesced_comp_resp()
3509 static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb) in process_one_iomb() argument
3516 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO\n")); in process_one_iomb()
3519 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3521 mpi_hw_event(pm8001_ha, piomb); in process_one_iomb()
3524 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3526 mpi_thermal_hw_event(pm8001_ha, piomb); in process_one_iomb()
3529 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3531 mpi_ssp_completion(pm8001_ha, piomb); in process_one_iomb()
3534 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3536 mpi_smp_completion(pm8001_ha, piomb); in process_one_iomb()
3539 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3541 pm8001_mpi_local_phy_ctl(pm8001_ha, piomb); in process_one_iomb()
3544 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3546 pm8001_mpi_reg_resp(pm8001_ha, piomb); in process_one_iomb()
3549 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3551 pm8001_mpi_dereg_resp(pm8001_ha, piomb); in process_one_iomb()
3554 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3558 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3560 mpi_sata_completion(pm8001_ha, piomb); in process_one_iomb()
3563 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3565 mpi_sata_event(pm8001_ha, piomb); in process_one_iomb()
3568 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3570 mpi_ssp_event(pm8001_ha, piomb); in process_one_iomb()
3573 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3578 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3583 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3585 pm8001_mpi_fw_flash_update_resp(pm8001_ha, piomb); in process_one_iomb()
3588 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3592 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3596 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3598 pm8001_mpi_general_event(pm8001_ha, piomb); in process_one_iomb()
3601 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3603 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3606 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3608 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3611 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3615 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3619 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3623 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3627 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3631 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3633 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3636 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3638 pm8001_mpi_get_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
3641 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3643 pm8001_mpi_set_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
3646 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3650 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3652 pm8001_mpi_set_dev_state_resp(pm8001_ha, piomb); in process_one_iomb()
3655 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3659 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3664 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3666 mpi_phy_start_resp(pm8001_ha, piomb); in process_one_iomb()
3669 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3671 mpi_phy_stop_resp(pm8001_ha, piomb); in process_one_iomb()
3674 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3676 mpi_set_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
3679 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3681 mpi_get_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
3684 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3686 mpi_get_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
3689 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3691 mpi_flash_op_ext_resp(pm8001_ha, piomb); in process_one_iomb()
3694 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3696 mpi_set_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
3699 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3701 mpi_kek_management_resp(pm8001_ha, piomb); in process_one_iomb()
3704 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3706 mpi_dek_management_resp(pm8001_ha, piomb); in process_one_iomb()
3709 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3711 ssp_coalesced_comp_resp(pm8001_ha, piomb); in process_one_iomb()
3714 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3720 static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec) in process_oq() argument
3728 spin_lock_irqsave(&pm8001_ha->lock, flags); in process_oq()
3729 circularQ = &pm8001_ha->outbnd_q_tbl[vec]; in process_oq()
3731 ret = pm8001_mpi_msg_consume(pm8001_ha, circularQ, &pMsg1, &bc); in process_oq()
3734 process_one_iomb(pm8001_ha, (void *)(pMsg1 - 4)); in process_oq()
3736 pm8001_mpi_msg_free_set(pm8001_ha, pMsg1, in process_oq()
3749 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in process_oq()
3779 static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_smp_req() argument
3800 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, PCI_DMA_TODEVICE); in pm80xx_chip_smp_req()
3806 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, PCI_DMA_FROMDEVICE); in pm80xx_chip_smp_req()
3819 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_smp_req()
3823 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3826 pm8001_ha->smp_exp_mode = SMP_DIRECT; in pm80xx_chip_smp_req()
3828 pm8001_ha->smp_exp_mode = SMP_INDIRECT; in pm80xx_chip_smp_req()
3835 if (pm8001_ha->smp_exp_mode == SMP_INDIRECT) { in pm80xx_chip_smp_req()
3836 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3868 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in pm80xx_chip_smp_req()
3869 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3874 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
3880 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
3888 &smp_cmd, pm8001_ha->smp_exp_mode, length); in pm80xx_chip_smp_req()
3889 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_smp_req()
3896 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1, in pm80xx_chip_smp_req()
3899 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1, in pm80xx_chip_smp_req()
3942 static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_ssp_io_req() argument
3974 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_ssp_io_req()
3977 if (pm8001_ha->chip->encrypt && in pm80xx_chip_ssp_io_req()
3978 !(pm8001_ha->encrypt_info.status) && check_enc_sas_cmd(task)) { in pm80xx_chip_ssp_io_req()
3979 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
4012 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
4044 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
4071 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
4097 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_ssp_io_req()
4102 static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_sata_req() argument
4122 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_sata_req()
4126 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n")); in pm80xx_chip_sata_req()
4130 PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA\n")); in pm80xx_chip_sata_req()
4133 PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO\n")); in pm80xx_chip_sata_req()
4138 PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA\n")); in pm80xx_chip_sata_req()
4156 if (pm8001_ha->chip->encrypt && in pm80xx_chip_sata_req()
4157 !(pm8001_ha->encrypt_info.status) && check_enc_sat_cmd(task)) { in pm80xx_chip_sata_req()
4158 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4189 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4226 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4255 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4322 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4326 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm80xx_chip_sata_req()
4331 pm8001_ccb_task_free_done(pm8001_ha, task, in pm80xx_chip_sata_req()
4338 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_sata_req()
4350 pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id) in pm80xx_chip_phy_start_req() argument
4357 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_start_req()
4361 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_phy_start_req()
4370 if (!IS_SPCV_12G(pm8001_ha->pdev)) in pm80xx_chip_phy_start_req()
4392 pm8001_ha->sas_addr, SAS_ADDR_SIZE); in pm80xx_chip_phy_start_req()
4394 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0); in pm80xx_chip_phy_start_req()
4404 static int pm80xx_chip_phy_stop_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_stop_req() argument
4412 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_stop_req()
4416 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0); in pm80xx_chip_phy_stop_req()
4423 static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_reg_dev_req() argument
4438 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_reg_dev_req()
4441 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_chip_reg_dev_req()
4444 ccb = &pm8001_ha->ccb_info[tag]; in pm80xx_chip_reg_dev_req()
4482 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_chip_reg_dev_req()
4484 pm8001_tag_free(pm8001_ha, tag); in pm80xx_chip_reg_dev_req()
4496 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_ctl_req() argument
4504 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_ctl_req()
4508 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_chip_phy_ctl_req()
4512 static u32 pm80xx_chip_is_our_interupt(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_is_our_interupt() argument
4518 value = pm8001_cr32(pm8001_ha, 0, MSGU_ODR); in pm80xx_chip_is_our_interupt()
4532 pm80xx_chip_isr(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_isr() argument
4534 pm80xx_chip_interrupt_disable(pm8001_ha, vec); in pm80xx_chip_isr()
4535 process_oq(pm8001_ha, vec); in pm80xx_chip_isr()
4536 pm80xx_chip_interrupt_enable(pm8001_ha, vec); in pm80xx_chip_isr()
4540 void mpi_set_phy_profile_req(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_req() argument
4550 rc = pm8001_tag_alloc(pm8001_ha, &tag); in mpi_set_phy_profile_req()
4552 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("Invalid tag\n")); in mpi_set_phy_profile_req()
4553 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in mpi_set_phy_profile_req()
4556 PM8001_INIT_DBG(pm8001_ha, in mpi_set_phy_profile_req()
4563 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in mpi_set_phy_profile_req()
4565 pm8001_tag_free(pm8001_ha, tag); in mpi_set_phy_profile_req()
4568 void pm8001_set_phy_profile(struct pm8001_hba_info *pm8001_ha, in pm8001_set_phy_profile() argument
4574 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_set_phy_profile()
4575 mpi_set_phy_profile_req(pm8001_ha, in pm8001_set_phy_profile()
4579 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("phy settings completed\n")); in pm8001_set_phy_profile()
4582 void pm8001_set_phy_profile_single(struct pm8001_hba_info *pm8001_ha, in pm8001_set_phy_profile_single() argument
4592 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm8001_set_phy_profile_single()
4594 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("Invalid tag")); in pm8001_set_phy_profile_single()
4596 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm8001_set_phy_profile_single()
4606 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm8001_set_phy_profile_single()
4608 pm8001_tag_free(pm8001_ha, tag); in pm8001_set_phy_profile_single()
4610 PM8001_INIT_DBG(pm8001_ha, in pm8001_set_phy_profile_single()