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()
316 pm8001_ha->main_cfg_tbl.pm80xx_tbl.ila_version = in read_main_config_table()
318 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inc_fw_version = in read_main_config_table()
326 static void read_general_status_table(struct pm8001_hba_info *pm8001_ha) in read_general_status_table() argument
328 void __iomem *address = pm8001_ha->general_stat_tbl_addr; in read_general_status_table()
329 pm8001_ha->gs_tbl.pm80xx_tbl.gst_len_mpistate = in read_general_status_table()
331 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state0 = in read_general_status_table()
333 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state1 = in read_general_status_table()
335 pm8001_ha->gs_tbl.pm80xx_tbl.msgu_tcnt = in read_general_status_table()
337 pm8001_ha->gs_tbl.pm80xx_tbl.iop_tcnt = in read_general_status_table()
339 pm8001_ha->gs_tbl.pm80xx_tbl.gpio_input_val = in read_general_status_table()
341 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[0] = in read_general_status_table()
343 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[1] = in read_general_status_table()
345 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[2] = in read_general_status_table()
347 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[3] = in read_general_status_table()
349 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[4] = in read_general_status_table()
351 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[5] = in read_general_status_table()
353 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[6] = in read_general_status_table()
355 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[7] = in read_general_status_table()
362 static void read_phy_attr_table(struct pm8001_hba_info *pm8001_ha) in read_phy_attr_table() argument
364 void __iomem *address = pm8001_ha->pspa_q_tbl_addr; in read_phy_attr_table()
365 pm8001_ha->phy_attr_table.phystart1_16[0] = in read_phy_attr_table()
367 pm8001_ha->phy_attr_table.phystart1_16[1] = in read_phy_attr_table()
369 pm8001_ha->phy_attr_table.phystart1_16[2] = in read_phy_attr_table()
371 pm8001_ha->phy_attr_table.phystart1_16[3] = in read_phy_attr_table()
373 pm8001_ha->phy_attr_table.phystart1_16[4] = in read_phy_attr_table()
375 pm8001_ha->phy_attr_table.phystart1_16[5] = in read_phy_attr_table()
377 pm8001_ha->phy_attr_table.phystart1_16[6] = in read_phy_attr_table()
379 pm8001_ha->phy_attr_table.phystart1_16[7] = in read_phy_attr_table()
381 pm8001_ha->phy_attr_table.phystart1_16[8] = in read_phy_attr_table()
383 pm8001_ha->phy_attr_table.phystart1_16[9] = in read_phy_attr_table()
385 pm8001_ha->phy_attr_table.phystart1_16[10] = in read_phy_attr_table()
387 pm8001_ha->phy_attr_table.phystart1_16[11] = in read_phy_attr_table()
389 pm8001_ha->phy_attr_table.phystart1_16[12] = in read_phy_attr_table()
391 pm8001_ha->phy_attr_table.phystart1_16[13] = in read_phy_attr_table()
393 pm8001_ha->phy_attr_table.phystart1_16[14] = in read_phy_attr_table()
395 pm8001_ha->phy_attr_table.phystart1_16[15] = in read_phy_attr_table()
398 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[0] = in read_phy_attr_table()
400 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[1] = in read_phy_attr_table()
402 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[2] = in read_phy_attr_table()
404 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[3] = in read_phy_attr_table()
406 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[4] = in read_phy_attr_table()
408 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[5] = in read_phy_attr_table()
410 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[6] = in read_phy_attr_table()
412 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[7] = in read_phy_attr_table()
414 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[8] = in read_phy_attr_table()
416 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[9] = in read_phy_attr_table()
418 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[10] = in read_phy_attr_table()
420 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[11] = in read_phy_attr_table()
422 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[12] = in read_phy_attr_table()
424 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[13] = in read_phy_attr_table()
426 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[14] = in read_phy_attr_table()
428 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[15] = in read_phy_attr_table()
437 static void read_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_inbnd_queue_table() argument
440 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in read_inbnd_queue_table()
443 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in read_inbnd_queue_table()
446 pm8001_ha->inbnd_q_tbl[i].pi_offset = in read_inbnd_queue_table()
455 static void read_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_outbnd_queue_table() argument
458 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in read_outbnd_queue_table()
461 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in read_outbnd_queue_table()
464 pm8001_ha->outbnd_q_tbl[i].ci_offset = in read_outbnd_queue_table()
473 static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) in init_default_table_values() argument
477 void __iomem *addressib = pm8001_ha->inbnd_q_tbl_addr; in init_default_table_values()
478 void __iomem *addressob = pm8001_ha->outbnd_q_tbl_addr; in init_default_table_values()
480 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr = in init_default_table_values()
481 pm8001_ha->memoryMap.region[AAP1].phys_addr_hi; in init_default_table_values()
482 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr = in init_default_table_values()
483 pm8001_ha->memoryMap.region[AAP1].phys_addr_lo; in init_default_table_values()
484 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size = in init_default_table_values()
486 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity = 0x01; in init_default_table_values()
487 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr = in init_default_table_values()
488 pm8001_ha->memoryMap.region[IOP].phys_addr_hi; in init_default_table_values()
489 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr = in init_default_table_values()
490 pm8001_ha->memoryMap.region[IOP].phys_addr_lo; in init_default_table_values()
491 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size = in init_default_table_values()
493 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity = 0x01; in init_default_table_values()
494 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt = 0x01; in init_default_table_values()
497 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump = (0x1 << 16); in init_default_table_values()
500 pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = in init_default_table_values()
501 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); in init_default_table_values()
502 pm8001_ha->inbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
503 pm8001_ha->memoryMap.region[IB + i].phys_addr_hi; in init_default_table_values()
504 pm8001_ha->inbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
505 pm8001_ha->memoryMap.region[IB + i].phys_addr_lo; in init_default_table_values()
506 pm8001_ha->inbnd_q_tbl[i].base_virt = in init_default_table_values()
507 (u8 *)pm8001_ha->memoryMap.region[IB + i].virt_ptr; in init_default_table_values()
508 pm8001_ha->inbnd_q_tbl[i].total_length = in init_default_table_values()
509 pm8001_ha->memoryMap.region[IB + i].total_len; in init_default_table_values()
510 pm8001_ha->inbnd_q_tbl[i].ci_upper_base_addr = in init_default_table_values()
511 pm8001_ha->memoryMap.region[CI + i].phys_addr_hi; in init_default_table_values()
512 pm8001_ha->inbnd_q_tbl[i].ci_lower_base_addr = in init_default_table_values()
513 pm8001_ha->memoryMap.region[CI + i].phys_addr_lo; in init_default_table_values()
514 pm8001_ha->inbnd_q_tbl[i].ci_virt = in init_default_table_values()
515 pm8001_ha->memoryMap.region[CI + i].virt_ptr; in init_default_table_values()
517 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in init_default_table_values()
520 pm8001_ha->inbnd_q_tbl[i].pi_offset = in init_default_table_values()
522 pm8001_ha->inbnd_q_tbl[i].producer_idx = 0; in init_default_table_values()
523 pm8001_ha->inbnd_q_tbl[i].consumer_index = 0; in init_default_table_values()
526 pm8001_ha->outbnd_q_tbl[i].element_size_cnt = in init_default_table_values()
527 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); in init_default_table_values()
528 pm8001_ha->outbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
529 pm8001_ha->memoryMap.region[OB + i].phys_addr_hi; in init_default_table_values()
530 pm8001_ha->outbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
531 pm8001_ha->memoryMap.region[OB + i].phys_addr_lo; in init_default_table_values()
532 pm8001_ha->outbnd_q_tbl[i].base_virt = in init_default_table_values()
533 (u8 *)pm8001_ha->memoryMap.region[OB + i].virt_ptr; in init_default_table_values()
534 pm8001_ha->outbnd_q_tbl[i].total_length = in init_default_table_values()
535 pm8001_ha->memoryMap.region[OB + i].total_len; in init_default_table_values()
536 pm8001_ha->outbnd_q_tbl[i].pi_upper_base_addr = in init_default_table_values()
537 pm8001_ha->memoryMap.region[PI + i].phys_addr_hi; in init_default_table_values()
538 pm8001_ha->outbnd_q_tbl[i].pi_lower_base_addr = in init_default_table_values()
539 pm8001_ha->memoryMap.region[PI + i].phys_addr_lo; in init_default_table_values()
541 pm8001_ha->outbnd_q_tbl[i].interrup_vec_cnt_delay = (i << 24); in init_default_table_values()
542 pm8001_ha->outbnd_q_tbl[i].pi_virt = in init_default_table_values()
543 pm8001_ha->memoryMap.region[PI + i].virt_ptr; in init_default_table_values()
545 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in init_default_table_values()
548 pm8001_ha->outbnd_q_tbl[i].ci_offset = in init_default_table_values()
550 pm8001_ha->outbnd_q_tbl[i].consumer_idx = 0; in init_default_table_values()
551 pm8001_ha->outbnd_q_tbl[i].producer_index = 0; in init_default_table_values()
559 static void update_main_config_table(struct pm8001_hba_info *pm8001_ha) in update_main_config_table() argument
561 void __iomem *address = pm8001_ha->main_cfg_tbl_addr; in update_main_config_table()
563 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_q_nppd_hppd); in update_main_config_table()
565 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr); in update_main_config_table()
567 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr); in update_main_config_table()
569 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size); in update_main_config_table()
571 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity); in update_main_config_table()
573 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr); in update_main_config_table()
575 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr); in update_main_config_table()
577 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size); in update_main_config_table()
579 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity); in update_main_config_table()
581 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt |= in update_main_config_table()
582 ((pm8001_ha->number_of_intr - 1) << 8); in update_main_config_table()
584 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt); in update_main_config_table()
586 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump); in update_main_config_table()
589 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping &= 0xCFFFFFFF; in update_main_config_table()
591 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping |= 0x20000000; in update_main_config_table()
593 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping); in update_main_config_table()
596 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer); in update_main_config_table()
598 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interrupt_reassertion_delay); in update_main_config_table()
600 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer &= 0xffff0000; in update_main_config_table()
601 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer |= in update_main_config_table()
603 if (pm8001_ha->chip_id == chip_8006) { in update_main_config_table()
604 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer &= in update_main_config_table()
606 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer |= in update_main_config_table()
610 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer); in update_main_config_table()
617 static void update_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_inbnd_queue_table() argument
620 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in update_inbnd_queue_table()
623 pm8001_ha->inbnd_q_tbl[number].element_pri_size_cnt); in update_inbnd_queue_table()
625 pm8001_ha->inbnd_q_tbl[number].upper_base_addr); in update_inbnd_queue_table()
627 pm8001_ha->inbnd_q_tbl[number].lower_base_addr); in update_inbnd_queue_table()
629 pm8001_ha->inbnd_q_tbl[number].ci_upper_base_addr); in update_inbnd_queue_table()
631 pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr); in update_inbnd_queue_table()
638 static void update_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_outbnd_queue_table() argument
641 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in update_outbnd_queue_table()
644 pm8001_ha->outbnd_q_tbl[number].element_size_cnt); in update_outbnd_queue_table()
646 pm8001_ha->outbnd_q_tbl[number].upper_base_addr); in update_outbnd_queue_table()
648 pm8001_ha->outbnd_q_tbl[number].lower_base_addr); in update_outbnd_queue_table()
650 pm8001_ha->outbnd_q_tbl[number].pi_upper_base_addr); in update_outbnd_queue_table()
652 pm8001_ha->outbnd_q_tbl[number].pi_lower_base_addr); in update_outbnd_queue_table()
654 pm8001_ha->outbnd_q_tbl[number].interrup_vec_cnt_delay); in update_outbnd_queue_table()
661 static int mpi_init_check(struct pm8001_hba_info *pm8001_ha) in mpi_init_check() argument
669 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_UPDATE); in mpi_init_check()
671 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_init_check()
678 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_init_check()
689 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_init_check()
708 static int check_fw_ready(struct pm8001_hba_info *pm8001_ha) in check_fw_ready() argument
719 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
726 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
732 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
741 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
747 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
756 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
762 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
768 if ((pm8001_ha->chip_id != chip_8008) && in check_fw_ready()
769 (pm8001_ha->chip_id != chip_8009)) { in check_fw_ready()
774 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
780 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in check_fw_ready()
789 static void init_pci_device_addresses(struct pm8001_hba_info *pm8001_ha) in init_pci_device_addresses() argument
797 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0); in init_pci_device_addresses()
800 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
805 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
807 pm8001_ha->main_cfg_tbl_addr = base_addr = in init_pci_device_addresses()
808 pm8001_ha->io_mem[pcibar].memvirtaddr + offset; in init_pci_device_addresses()
809 pm8001_ha->general_stat_tbl_addr = in init_pci_device_addresses()
810 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x18) & in init_pci_device_addresses()
812 pm8001_ha->inbnd_q_tbl_addr = in init_pci_device_addresses()
813 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C) & in init_pci_device_addresses()
815 pm8001_ha->outbnd_q_tbl_addr = in init_pci_device_addresses()
816 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x20) & in init_pci_device_addresses()
818 pm8001_ha->ivt_tbl_addr = in init_pci_device_addresses()
819 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C) & in init_pci_device_addresses()
821 pm8001_ha->pspa_q_tbl_addr = in init_pci_device_addresses()
822 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x90) & in init_pci_device_addresses()
824 pm8001_ha->fatal_tbl_addr = in init_pci_device_addresses()
825 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0xA0) & in init_pci_device_addresses()
828 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
830 pm8001_cr32(pm8001_ha, pcibar, offset + 0x18))); in init_pci_device_addresses()
831 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
833 pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C))); in init_pci_device_addresses()
834 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
836 pm8001_cr32(pm8001_ha, pcibar, offset + 0x20))); in init_pci_device_addresses()
837 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
839 pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C))); in init_pci_device_addresses()
840 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
842 pm8001_cr32(pm8001_ha, pcibar, offset + 0x90))); in init_pci_device_addresses()
843 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
845 pm8001_ha->main_cfg_tbl_addr, in init_pci_device_addresses()
846 pm8001_ha->general_stat_tbl_addr)); in init_pci_device_addresses()
847 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
849 pm8001_ha->inbnd_q_tbl_addr, in init_pci_device_addresses()
850 pm8001_ha->outbnd_q_tbl_addr)); in init_pci_device_addresses()
851 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
853 pm8001_ha->pspa_q_tbl_addr, in init_pci_device_addresses()
854 pm8001_ha->ivt_tbl_addr)); in init_pci_device_addresses()
862 pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_thermal_config() argument
872 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_thermal_config()
876 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_thermal_config()
879 if (IS_SPCV_12G(pm8001_ha->pdev)) in pm80xx_set_thermal_config()
888 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_set_thermal_config()
890 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_thermal_config()
901 pm80xx_set_sas_protocol_timer_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_sas_protocol_timer_config() argument
913 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_sas_protocol_timer_config()
918 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_sas_protocol_timer_config()
940 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
943 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
946 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
949 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
952 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
955 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
958 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
961 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
964 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.MAX_AIP " in pm80xx_set_sas_protocol_timer_config()
970 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_set_sas_protocol_timer_config()
972 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_sas_protocol_timer_config()
982 pm80xx_get_encrypt_info(struct pm8001_hba_info *pm8001_ha) in pm80xx_get_encrypt_info() argument
988 scratch3_value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3); in pm80xx_get_encrypt_info()
993 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
996 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
999 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1002 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1003 pm8001_ha->encrypt_info.status = 0; in pm80xx_get_encrypt_info()
1004 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1007 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1008 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1009 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1013 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1016 pm8001_ha->encrypt_info.status = 0xFFFFFFFF; in pm80xx_get_encrypt_info()
1017 pm8001_ha->encrypt_info.cipher_mode = 0; in pm80xx_get_encrypt_info()
1018 pm8001_ha->encrypt_info.sec_mode = 0; in pm80xx_get_encrypt_info()
1022 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
1025 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1028 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1031 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1034 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1035 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1038 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1039 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1040 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1044 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
1047 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1050 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1053 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1056 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1058 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1061 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1062 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1063 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1072 static int pm80xx_encrypt_update(struct pm8001_hba_info *pm8001_ha) in pm80xx_encrypt_update() argument
1081 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_encrypt_update()
1085 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_encrypt_update()
1093 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_encrypt_update()
1095 pm8001_tag_free(pm8001_ha, tag); in pm80xx_encrypt_update()
1104 static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_init() argument
1110 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_init()
1111 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_init()
1117 pm8001_ha->controller_fatal_error = false; in pm80xx_chip_init()
1120 init_pci_device_addresses(pm8001_ha); in pm80xx_chip_init()
1121 init_default_table_values(pm8001_ha); in pm80xx_chip_init()
1122 read_main_config_table(pm8001_ha); in pm80xx_chip_init()
1123 read_general_status_table(pm8001_ha); in pm80xx_chip_init()
1124 read_inbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1125 read_outbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1126 read_phy_attr_table(pm8001_ha); in pm80xx_chip_init()
1129 update_main_config_table(pm8001_ha); in pm80xx_chip_init()
1131 update_inbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1133 update_outbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1136 if (0 == mpi_init_check(pm8001_ha)) { in pm80xx_chip_init()
1137 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1143 ret = pm80xx_set_sas_protocol_timer_config(pm8001_ha); in pm80xx_chip_init()
1146 if (pm8001_ha->chip->encrypt) { in pm80xx_chip_init()
1147 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1149 ret = pm80xx_get_encrypt_info(pm8001_ha); in pm80xx_chip_init()
1151 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1153 if (pm8001_ha->encrypt_info.status == 0x81) { in pm80xx_chip_init()
1154 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_init()
1157 pm80xx_encrypt_update(pm8001_ha); in pm80xx_chip_init()
1164 static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha) in mpi_uninit_check() argument
1169 init_pci_device_addresses(pm8001_ha); in mpi_uninit_check()
1172 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_RESET); in mpi_uninit_check()
1175 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_uninit_check()
1182 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_uninit_check()
1187 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1198 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_uninit_check()
1205 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1221 pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_soft_rst() argument
1228 if (!pm8001_ha->controller_fatal_error) { in pm80xx_chip_soft_rst()
1230 if (mpi_uninit_check(pm8001_ha) != 0) { in pm80xx_chip_soft_rst()
1231 regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in pm80xx_chip_soft_rst()
1232 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1239 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1240 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1243 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, SPCv_NORMAL_RESET_VALUE); in pm80xx_chip_soft_rst()
1246 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1247 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1252 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1256 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1262 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1) & in pm80xx_chip_soft_rst()
1266 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1270 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1274 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1278 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1285 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_soft_rst()
1286 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1289 if (pm8001_ha->pdev->subsystem_vendor != in pm80xx_chip_soft_rst()
1291 pm8001_ha->pdev->subsystem_vendor != in pm80xx_chip_soft_rst()
1293 pm8001_ha->pdev->subsystem_vendor != 0) { in pm80xx_chip_soft_rst()
1294 ibutton0 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1296 ibutton1 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1299 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1305 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1312 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1317 static void pm80xx_hw_chip_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_hw_chip_rst() argument
1321 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1325 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, 0x11); in pm80xx_hw_chip_rst()
1326 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1339 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1348 pm80xx_chip_intx_interrupt_enable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_enable() argument
1350 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, ODMR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1351 pm8001_cw32(pm8001_ha, 0, MSGU_ODCR, ODCR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1359 pm80xx_chip_intx_interrupt_disable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_disable() argument
1361 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, ODMR_MASK_ALL); in pm80xx_chip_intx_interrupt_disable()
1369 pm80xx_chip_interrupt_enable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_enable() argument
1375 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_enable()
1378 pm80xx_chip_intx_interrupt_enable(pm8001_ha); in pm80xx_chip_interrupt_enable()
1387 pm80xx_chip_interrupt_disable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_disable() argument
1395 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_disable()
1398 pm80xx_chip_intx_interrupt_disable(pm8001_ha); in pm80xx_chip_interrupt_disable()
1401 static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_abort_all() argument
1414 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("dev is null\n")); in pm80xx_send_abort_all()
1421 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("cannot " in pm80xx_send_abort_all()
1428 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_abort_all()
1434 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_abort_all()
1439 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_abort_all()
1446 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &task_abort, 0); in pm80xx_send_abort_all()
1449 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_abort_all()
1453 static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_read_log() argument
1469 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1475 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_read_log()
1478 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1489 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1490 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1498 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_read_log()
1507 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_read_log()
1522 res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, 0); in pm80xx_send_read_log()
1525 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1542 mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_completion() argument
1557 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_completion()
1568 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1576 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1582 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1593 sas_ssp_task_response(pm8001_ha->dev, t, iu); in mpi_ssp_completion()
1599 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1606 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1616 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1622 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1630 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1637 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1644 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1651 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1658 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1670 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1676 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
1681 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1688 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
1695 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1702 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1709 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1715 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1721 PM8001_IO_DBG(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()
1745 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
1750 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1756 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1762 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1768 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1775 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1782 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1791 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
1797 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
1800 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
1807 static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_event() argument
1820 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_event()
1824 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_event()
1829 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1834 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n");) in mpi_ssp_event()
1842 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1844 pm8001_handle_event(pm8001_ha, t, IO_XFER_ERROR_BREAK); in mpi_ssp_event()
1847 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1854 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1861 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1868 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1880 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1886 pm8001_handle_event(pm8001_ha, in mpi_ssp_event()
1891 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1898 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1905 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1912 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1919 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1925 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1927 pm8001_handle_event(pm8001_ha, t, IO_XFER_OPEN_RETRY_TIMEOUT); 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()
1948 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1954 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1960 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1966 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1973 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1977 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1990 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1994 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
1997 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
2005 mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_sata_completion() argument
2028 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2032 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_completion()
2038 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2047 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2054 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2061 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2071 sata_addr_low[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2073 sata_addr_hi[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2095 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2101 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2108 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_sata_completion()
2119 pm80xx_send_abort_all(pm8001_ha, pm8001_dev); in mpi_sata_completion()
2121 pm8001_tag_free(pm8001_ha, tag); in mpi_sata_completion()
2130 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2138 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2142 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2146 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2154 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2161 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2171 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2180 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2186 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2192 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2199 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2206 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2213 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2225 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2230 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2235 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2240 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2246 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2251 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2256 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2263 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2268 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2273 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2278 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()
2309 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2315 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2321 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2327 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2332 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2336 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2341 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2347 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2352 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2356 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2361 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2368 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2381 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2385 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2388 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2393 static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_sata_event() argument
2407 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_event()
2413 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2418 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2424 pm8001_dev = pm8001_find_dev(pm8001_ha, dev_id); in mpi_sata_event()
2427 pm80xx_send_read_log(pm8001_ha, pm8001_dev); in mpi_sata_event()
2432 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2438 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2443 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_sata_event()
2451 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2457 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2464 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2471 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2478 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2490 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2495 pm8001_handle_event(pm8001_ha, in mpi_sata_event()
2500 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2505 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2512 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2519 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()
2562 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2568 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2574 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2580 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2584 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2590 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2597 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2604 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2617 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2621 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2624 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2630 mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_smp_completion() argument
2647 ccb = &pm8001_ha->ccb_info[tag]; in mpi_smp_completion()
2653 PM8001_FAIL_DBG(pm8001_ha, in mpi_smp_completion()
2661 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_smp_completion()
2666 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in mpi_smp_completion()
2667 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2675 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
2683 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2691 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_smp_completion()
2699 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_NO_DEVICE\n")); in mpi_smp_completion()
2704 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2710 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2716 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2722 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2729 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2736 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2748 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2753 pm8001_handle_event(pm8001_ha, in mpi_smp_completion()
2758 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2765 PM8001_IO_DBG(pm8001_ha, pm8001_printk(\ in mpi_smp_completion()
2772 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2779 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2785 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2792 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2798 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2805 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2811 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2818 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2825 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2838 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
2842 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
2845 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
2861 static void pm80xx_hw_event_ack_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_hw_event_ack_req() argument
2870 circularQ = &pm8001_ha->inbnd_q_tbl[Qnum]; in pm80xx_hw_event_ack_req()
2876 pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_hw_event_ack_req()
2879 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
2882 static void hw_event_port_recover(struct pm8001_hba_info *pm8001_ha, in hw_event_port_recover() argument
2892 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_port_recover()
2894 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_port_recover()
2897 pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id, in hw_event_port_recover()
2914 hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sas_phy_up() argument
2929 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sas_phy_up()
2930 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sas_phy_up()
2931 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sas_phy_up()
2937 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in hw_event_sas_phy_up()
2944 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2948 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("end device.\n")); in hw_event_sas_phy_up()
2949 pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id, in hw_event_sas_phy_up()
2955 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2961 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2967 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2986 if (pm8001_ha->flags == PM8001F_RUN_TIME) in hw_event_sas_phy_up()
2988 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sas_phy_up()
2997 hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sata_phy_up() argument
3012 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sata_phy_up()
3013 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sata_phy_up()
3014 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sata_phy_up()
3016 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in hw_event_sata_phy_up()
3036 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sata_phy_up()
3045 hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_phy_down() argument
3058 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_phy_down()
3059 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_phy_down()
3068 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3070 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3075 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3081 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3085 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3090 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3092 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3097 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3104 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3111 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_phy_down()
3117 static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_start_resp() argument
3125 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_phy_start_resp()
3127 PM8001_INIT_DBG(pm8001_ha, in mpi_phy_start_resp()
3132 if (pm8001_ha->flags == PM8001F_RUN_TIME && in mpi_phy_start_resp()
3145 static int mpi_thermal_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_thermal_hw_event() argument
3154 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3156 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3161 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3163 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3175 static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_hw_event() argument
3190 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in mpi_hw_event()
3191 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_hw_event()
3192 struct pm8001_port *port = &pm8001_ha->port[port_id]; in mpi_hw_event()
3194 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3201 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3203 hw_event_sas_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3206 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3208 hw_event_sata_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3211 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3216 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3218 hw_event_phy_down(pm8001_ha, piomb); in mpi_hw_event()
3219 if (pm8001_ha->reset_in_progress) { in mpi_hw_event()
3220 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3228 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3237 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3239 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_BROADCAST_CHANGE, in mpi_hw_event()
3247 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3254 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3262 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3264 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3268 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3270 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3275 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3277 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3282 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_hw_event()
3284 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3289 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3293 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3301 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3303 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3308 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3313 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3320 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3322 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3330 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3332 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in mpi_hw_event()
3337 if (pm8001_ha->phy[phy_id].reset_completion) { in mpi_hw_event()
3338 pm8001_ha->phy[phy_id].port_reset_status = in mpi_hw_event()
3340 complete(pm8001_ha->phy[phy_id].reset_completion); in mpi_hw_event()
3341 pm8001_ha->phy[phy_id].reset_completion = NULL; in mpi_hw_event()
3345 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3347 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3350 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in mpi_hw_event()
3352 phy = &pm8001_ha->phy[i]; in mpi_hw_event()
3360 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3362 hw_event_port_recover(pm8001_ha, piomb); in mpi_hw_event()
3365 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3367 if (pm8001_ha->phy[phy_id].reset_completion) { in mpi_hw_event()
3368 pm8001_ha->phy[phy_id].port_reset_status = in mpi_hw_event()
3370 complete(pm8001_ha->phy[phy_id].reset_completion); in mpi_hw_event()
3371 pm8001_ha->phy[phy_id].reset_completion = NULL; in mpi_hw_event()
3375 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3379 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3391 static int mpi_phy_stop_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_stop_resp() argument
3399 struct pm8001_phy *phy = &pm8001_ha->phy[phyid]; in mpi_phy_stop_resp()
3400 PM8001_MSG_DBG(pm8001_ha, in mpi_phy_stop_resp()
3414 static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_controller_config_resp() argument
3422 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_set_controller_config_resp()
3434 static int mpi_get_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_controller_config_resp() argument
3437 PM8001_MSG_DBG(pm8001_ha, in mpi_get_controller_config_resp()
3448 static int mpi_get_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_phy_profile_resp() argument
3451 PM8001_MSG_DBG(pm8001_ha, in mpi_get_phy_profile_resp()
3462 static int mpi_flash_op_ext_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_flash_op_ext_resp() argument
3464 PM8001_MSG_DBG(pm8001_ha, in mpi_flash_op_ext_resp()
3475 static int mpi_set_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_resp() argument
3487 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3493 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3507 static int mpi_kek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_kek_management_resp() argument
3516 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_kek_management_resp()
3528 static int mpi_dek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_dek_management_resp() argument
3531 PM8001_MSG_DBG(pm8001_ha, in mpi_dek_management_resp()
3542 static int ssp_coalesced_comp_resp(struct pm8001_hba_info *pm8001_ha, in ssp_coalesced_comp_resp() argument
3545 PM8001_MSG_DBG(pm8001_ha, in ssp_coalesced_comp_resp()
3556 static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb) in process_one_iomb() argument
3563 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO\n")); in process_one_iomb()
3566 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3568 mpi_hw_event(pm8001_ha, piomb); in process_one_iomb()
3571 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3573 mpi_thermal_hw_event(pm8001_ha, piomb); in process_one_iomb()
3576 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3578 mpi_ssp_completion(pm8001_ha, piomb); in process_one_iomb()
3581 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3583 mpi_smp_completion(pm8001_ha, piomb); in process_one_iomb()
3586 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3588 pm8001_mpi_local_phy_ctl(pm8001_ha, piomb); in process_one_iomb()
3591 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3593 pm8001_mpi_reg_resp(pm8001_ha, piomb); in process_one_iomb()
3596 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3598 pm8001_mpi_dereg_resp(pm8001_ha, piomb); in process_one_iomb()
3601 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3605 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3607 mpi_sata_completion(pm8001_ha, piomb); in process_one_iomb()
3610 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3612 mpi_sata_event(pm8001_ha, piomb); in process_one_iomb()
3615 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3617 mpi_ssp_event(pm8001_ha, piomb); in process_one_iomb()
3620 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3625 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3630 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3632 pm8001_mpi_fw_flash_update_resp(pm8001_ha, piomb); in process_one_iomb()
3635 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3639 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3643 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3645 pm8001_mpi_general_event(pm8001_ha, piomb); in process_one_iomb()
3648 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3650 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3653 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3655 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3658 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3662 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3666 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3670 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3674 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3678 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3680 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3683 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3685 pm8001_mpi_get_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
3688 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3690 pm8001_mpi_set_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
3693 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3697 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3699 pm8001_mpi_set_dev_state_resp(pm8001_ha, piomb); in process_one_iomb()
3702 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3706 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3711 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3713 mpi_phy_start_resp(pm8001_ha, piomb); in process_one_iomb()
3716 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3718 mpi_phy_stop_resp(pm8001_ha, piomb); in process_one_iomb()
3721 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3723 mpi_set_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
3726 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3728 mpi_get_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
3731 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3733 mpi_get_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
3736 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3738 mpi_flash_op_ext_resp(pm8001_ha, piomb); in process_one_iomb()
3741 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3743 mpi_set_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
3746 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3748 mpi_kek_management_resp(pm8001_ha, piomb); in process_one_iomb()
3751 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3753 mpi_dek_management_resp(pm8001_ha, piomb); in process_one_iomb()
3756 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3758 ssp_coalesced_comp_resp(pm8001_ha, piomb); in process_one_iomb()
3761 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3767 static void print_scratchpad_registers(struct pm8001_hba_info *pm8001_ha) in print_scratchpad_registers() argument
3769 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3771 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0))); in print_scratchpad_registers()
3772 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3774 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1))); in print_scratchpad_registers()
3775 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3777 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_2))); in print_scratchpad_registers()
3778 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3780 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3))); in print_scratchpad_registers()
3781 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3783 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_0))); in print_scratchpad_registers()
3784 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3786 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_1))); in print_scratchpad_registers()
3787 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3789 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_2))); in print_scratchpad_registers()
3790 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3792 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_3))); in print_scratchpad_registers()
3793 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3795 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_4))); in print_scratchpad_registers()
3796 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3798 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_5))); in print_scratchpad_registers()
3799 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3801 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_6))); in print_scratchpad_registers()
3802 PM8001_FAIL_DBG(pm8001_ha, in print_scratchpad_registers()
3804 pm8001_cr32(pm8001_ha, 0, MSGU_HOST_SCRATCH_PAD_7))); in print_scratchpad_registers()
3807 static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec) in process_oq() argument
3816 if (vec == (pm8001_ha->number_of_intr - 1)) { in process_oq()
3817 regval = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in process_oq()
3820 pm8001_ha->controller_fatal_error = true; in process_oq()
3821 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in process_oq()
3823 print_scratchpad_registers(pm8001_ha); in process_oq()
3827 spin_lock_irqsave(&pm8001_ha->lock, flags); in process_oq()
3828 circularQ = &pm8001_ha->outbnd_q_tbl[vec]; in process_oq()
3836 ret = pm8001_mpi_msg_consume(pm8001_ha, circularQ, &pMsg1, &bc); in process_oq()
3839 process_one_iomb(pm8001_ha, (void *)(pMsg1 - 4)); in process_oq()
3841 pm8001_mpi_msg_free_set(pm8001_ha, pMsg1, in process_oq()
3854 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in process_oq()
3884 static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_smp_req() argument
3905 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, DMA_TO_DEVICE); in pm80xx_chip_smp_req()
3911 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, DMA_FROM_DEVICE); in pm80xx_chip_smp_req()
3924 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_smp_req()
3928 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3931 pm8001_ha->smp_exp_mode = SMP_DIRECT; in pm80xx_chip_smp_req()
3933 pm8001_ha->smp_exp_mode = SMP_INDIRECT; in pm80xx_chip_smp_req()
3940 if (pm8001_ha->smp_exp_mode == SMP_INDIRECT) { in pm80xx_chip_smp_req()
3941 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3973 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in pm80xx_chip_smp_req()
3974 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3979 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
3985 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
3993 &smp_cmd, pm8001_ha->smp_exp_mode, length); in pm80xx_chip_smp_req()
3994 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_smp_req()
4001 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1, in pm80xx_chip_smp_req()
4004 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1, in pm80xx_chip_smp_req()
4047 static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_ssp_io_req() argument
4079 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_ssp_io_req()
4082 if (pm8001_ha->chip->encrypt && in pm80xx_chip_ssp_io_req()
4083 !(pm8001_ha->encrypt_info.status) && check_enc_sas_cmd(task)) { in pm80xx_chip_ssp_io_req()
4084 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
4117 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
4149 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
4176 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
4202 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_ssp_io_req()
4207 static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_sata_req() argument
4227 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_sata_req()
4231 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n")); in pm80xx_chip_sata_req()
4235 PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA\n")); in pm80xx_chip_sata_req()
4238 PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO\n")); in pm80xx_chip_sata_req()
4243 PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA\n")); in pm80xx_chip_sata_req()
4261 if (pm8001_ha->chip->encrypt && in pm80xx_chip_sata_req()
4262 !(pm8001_ha->encrypt_info.status) && check_enc_sat_cmd(task)) { in pm80xx_chip_sata_req()
4263 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4294 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4331 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4360 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4427 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4431 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm80xx_chip_sata_req()
4436 pm8001_ccb_task_free_done(pm8001_ha, task, in pm80xx_chip_sata_req()
4443 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_sata_req()
4455 pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id) in pm80xx_chip_phy_start_req() argument
4462 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_start_req()
4466 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_phy_start_req()
4475 if (!IS_SPCV_12G(pm8001_ha->pdev)) in pm80xx_chip_phy_start_req()
4497 &pm8001_ha->phy[phy_id].dev_sas_addr, SAS_ADDR_SIZE); in pm80xx_chip_phy_start_req()
4499 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0); in pm80xx_chip_phy_start_req()
4509 static int pm80xx_chip_phy_stop_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_stop_req() argument
4517 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_stop_req()
4521 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0); in pm80xx_chip_phy_stop_req()
4528 static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_reg_dev_req() argument
4543 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_reg_dev_req()
4546 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_chip_reg_dev_req()
4549 ccb = &pm8001_ha->ccb_info[tag]; in pm80xx_chip_reg_dev_req()
4587 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_chip_reg_dev_req()
4589 pm8001_tag_free(pm8001_ha, tag); in pm80xx_chip_reg_dev_req()
4601 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_ctl_req() argument
4610 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_chip_phy_ctl_req()
4613 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_ctl_req()
4617 return pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_chip_phy_ctl_req()
4620 static u32 pm80xx_chip_is_our_interrupt(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_is_our_interrupt() argument
4627 value = pm8001_cr32(pm8001_ha, 0, MSGU_ODR); in pm80xx_chip_is_our_interrupt()
4641 pm80xx_chip_isr(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_isr() argument
4643 pm80xx_chip_interrupt_disable(pm8001_ha, vec); in pm80xx_chip_isr()
4644 process_oq(pm8001_ha, vec); in pm80xx_chip_isr()
4645 pm80xx_chip_interrupt_enable(pm8001_ha, vec); in pm80xx_chip_isr()
4649 void mpi_set_phy_profile_req(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_req() argument
4659 rc = pm8001_tag_alloc(pm8001_ha, &tag); in mpi_set_phy_profile_req()
4661 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("Invalid tag\n")); in mpi_set_phy_profile_req()
4662 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in mpi_set_phy_profile_req()
4665 PM8001_INIT_DBG(pm8001_ha, in mpi_set_phy_profile_req()
4672 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in mpi_set_phy_profile_req()
4674 pm8001_tag_free(pm8001_ha, tag); in mpi_set_phy_profile_req()
4677 void pm8001_set_phy_profile(struct pm8001_hba_info *pm8001_ha, in pm8001_set_phy_profile() argument
4682 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_set_phy_profile()
4683 mpi_set_phy_profile_req(pm8001_ha, in pm8001_set_phy_profile()
4687 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("phy settings completed\n")); in pm8001_set_phy_profile()
4690 void pm8001_set_phy_profile_single(struct pm8001_hba_info *pm8001_ha, in pm8001_set_phy_profile_single() argument
4700 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm8001_set_phy_profile_single()
4702 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("Invalid tag")); in pm8001_set_phy_profile_single()
4704 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm8001_set_phy_profile_single()
4714 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm8001_set_phy_profile_single()
4716 pm8001_tag_free(pm8001_ha, tag); in pm8001_set_phy_profile_single()
4718 PM8001_INIT_DBG(pm8001_ha, in pm8001_set_phy_profile_single()