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()
318 static void read_general_status_table(struct pm8001_hba_info *pm8001_ha) in read_general_status_table() argument
320 void __iomem *address = pm8001_ha->general_stat_tbl_addr; in read_general_status_table()
321 pm8001_ha->gs_tbl.pm80xx_tbl.gst_len_mpistate = in read_general_status_table()
323 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state0 = in read_general_status_table()
325 pm8001_ha->gs_tbl.pm80xx_tbl.iq_freeze_state1 = in read_general_status_table()
327 pm8001_ha->gs_tbl.pm80xx_tbl.msgu_tcnt = in read_general_status_table()
329 pm8001_ha->gs_tbl.pm80xx_tbl.iop_tcnt = in read_general_status_table()
331 pm8001_ha->gs_tbl.pm80xx_tbl.gpio_input_val = in read_general_status_table()
333 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[0] = in read_general_status_table()
335 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[1] = in read_general_status_table()
337 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[2] = in read_general_status_table()
339 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[3] = in read_general_status_table()
341 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[4] = in read_general_status_table()
343 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[5] = in read_general_status_table()
345 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[6] = in read_general_status_table()
347 pm8001_ha->gs_tbl.pm80xx_tbl.recover_err_info[7] = in read_general_status_table()
354 static void read_phy_attr_table(struct pm8001_hba_info *pm8001_ha) in read_phy_attr_table() argument
356 void __iomem *address = pm8001_ha->pspa_q_tbl_addr; in read_phy_attr_table()
357 pm8001_ha->phy_attr_table.phystart1_16[0] = in read_phy_attr_table()
359 pm8001_ha->phy_attr_table.phystart1_16[1] = in read_phy_attr_table()
361 pm8001_ha->phy_attr_table.phystart1_16[2] = in read_phy_attr_table()
363 pm8001_ha->phy_attr_table.phystart1_16[3] = in read_phy_attr_table()
365 pm8001_ha->phy_attr_table.phystart1_16[4] = in read_phy_attr_table()
367 pm8001_ha->phy_attr_table.phystart1_16[5] = in read_phy_attr_table()
369 pm8001_ha->phy_attr_table.phystart1_16[6] = in read_phy_attr_table()
371 pm8001_ha->phy_attr_table.phystart1_16[7] = in read_phy_attr_table()
373 pm8001_ha->phy_attr_table.phystart1_16[8] = in read_phy_attr_table()
375 pm8001_ha->phy_attr_table.phystart1_16[9] = in read_phy_attr_table()
377 pm8001_ha->phy_attr_table.phystart1_16[10] = in read_phy_attr_table()
379 pm8001_ha->phy_attr_table.phystart1_16[11] = in read_phy_attr_table()
381 pm8001_ha->phy_attr_table.phystart1_16[12] = in read_phy_attr_table()
383 pm8001_ha->phy_attr_table.phystart1_16[13] = in read_phy_attr_table()
385 pm8001_ha->phy_attr_table.phystart1_16[14] = in read_phy_attr_table()
387 pm8001_ha->phy_attr_table.phystart1_16[15] = in read_phy_attr_table()
390 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[0] = in read_phy_attr_table()
392 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[1] = in read_phy_attr_table()
394 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[2] = in read_phy_attr_table()
396 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[3] = in read_phy_attr_table()
398 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[4] = in read_phy_attr_table()
400 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[5] = in read_phy_attr_table()
402 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[6] = in read_phy_attr_table()
404 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[7] = in read_phy_attr_table()
406 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[8] = in read_phy_attr_table()
408 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[9] = in read_phy_attr_table()
410 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[10] = in read_phy_attr_table()
412 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[11] = in read_phy_attr_table()
414 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[12] = in read_phy_attr_table()
416 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[13] = in read_phy_attr_table()
418 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[14] = in read_phy_attr_table()
420 pm8001_ha->phy_attr_table.outbound_hw_event_pid1_16[15] = in read_phy_attr_table()
429 static void read_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_inbnd_queue_table() argument
432 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in read_inbnd_queue_table()
435 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in read_inbnd_queue_table()
438 pm8001_ha->inbnd_q_tbl[i].pi_offset = in read_inbnd_queue_table()
447 static void read_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha) in read_outbnd_queue_table() argument
450 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in read_outbnd_queue_table()
453 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in read_outbnd_queue_table()
456 pm8001_ha->outbnd_q_tbl[i].ci_offset = in read_outbnd_queue_table()
465 static void init_default_table_values(struct pm8001_hba_info *pm8001_ha) in init_default_table_values() argument
469 void __iomem *addressib = pm8001_ha->inbnd_q_tbl_addr; in init_default_table_values()
470 void __iomem *addressob = pm8001_ha->outbnd_q_tbl_addr; in init_default_table_values()
472 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr = in init_default_table_values()
473 pm8001_ha->memoryMap.region[AAP1].phys_addr_hi; in init_default_table_values()
474 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr = in init_default_table_values()
475 pm8001_ha->memoryMap.region[AAP1].phys_addr_lo; in init_default_table_values()
476 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size = in init_default_table_values()
478 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity = 0x01; in init_default_table_values()
479 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr = in init_default_table_values()
480 pm8001_ha->memoryMap.region[IOP].phys_addr_hi; in init_default_table_values()
481 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr = in init_default_table_values()
482 pm8001_ha->memoryMap.region[IOP].phys_addr_lo; in init_default_table_values()
483 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size = in init_default_table_values()
485 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity = 0x01; in init_default_table_values()
486 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt = 0x01; in init_default_table_values()
489 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump = (0x1 << 16); in init_default_table_values()
492 pm8001_ha->inbnd_q_tbl[i].element_pri_size_cnt = in init_default_table_values()
493 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x00<<30); in init_default_table_values()
494 pm8001_ha->inbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
495 pm8001_ha->memoryMap.region[IB + i].phys_addr_hi; in init_default_table_values()
496 pm8001_ha->inbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
497 pm8001_ha->memoryMap.region[IB + i].phys_addr_lo; in init_default_table_values()
498 pm8001_ha->inbnd_q_tbl[i].base_virt = in init_default_table_values()
499 (u8 *)pm8001_ha->memoryMap.region[IB + i].virt_ptr; in init_default_table_values()
500 pm8001_ha->inbnd_q_tbl[i].total_length = in init_default_table_values()
501 pm8001_ha->memoryMap.region[IB + i].total_len; in init_default_table_values()
502 pm8001_ha->inbnd_q_tbl[i].ci_upper_base_addr = in init_default_table_values()
503 pm8001_ha->memoryMap.region[CI + i].phys_addr_hi; in init_default_table_values()
504 pm8001_ha->inbnd_q_tbl[i].ci_lower_base_addr = in init_default_table_values()
505 pm8001_ha->memoryMap.region[CI + i].phys_addr_lo; in init_default_table_values()
506 pm8001_ha->inbnd_q_tbl[i].ci_virt = in init_default_table_values()
507 pm8001_ha->memoryMap.region[CI + i].virt_ptr; in init_default_table_values()
509 pm8001_ha->inbnd_q_tbl[i].pi_pci_bar = in init_default_table_values()
512 pm8001_ha->inbnd_q_tbl[i].pi_offset = in init_default_table_values()
514 pm8001_ha->inbnd_q_tbl[i].producer_idx = 0; in init_default_table_values()
515 pm8001_ha->inbnd_q_tbl[i].consumer_index = 0; in init_default_table_values()
518 pm8001_ha->outbnd_q_tbl[i].element_size_cnt = in init_default_table_values()
519 PM8001_MPI_QUEUE | (pm8001_ha->iomb_size << 16) | (0x01<<30); in init_default_table_values()
520 pm8001_ha->outbnd_q_tbl[i].upper_base_addr = in init_default_table_values()
521 pm8001_ha->memoryMap.region[OB + i].phys_addr_hi; in init_default_table_values()
522 pm8001_ha->outbnd_q_tbl[i].lower_base_addr = in init_default_table_values()
523 pm8001_ha->memoryMap.region[OB + i].phys_addr_lo; in init_default_table_values()
524 pm8001_ha->outbnd_q_tbl[i].base_virt = in init_default_table_values()
525 (u8 *)pm8001_ha->memoryMap.region[OB + i].virt_ptr; in init_default_table_values()
526 pm8001_ha->outbnd_q_tbl[i].total_length = in init_default_table_values()
527 pm8001_ha->memoryMap.region[OB + i].total_len; in init_default_table_values()
528 pm8001_ha->outbnd_q_tbl[i].pi_upper_base_addr = in init_default_table_values()
529 pm8001_ha->memoryMap.region[PI + i].phys_addr_hi; in init_default_table_values()
530 pm8001_ha->outbnd_q_tbl[i].pi_lower_base_addr = in init_default_table_values()
531 pm8001_ha->memoryMap.region[PI + i].phys_addr_lo; in init_default_table_values()
533 pm8001_ha->outbnd_q_tbl[i].interrup_vec_cnt_delay = (i << 24); in init_default_table_values()
534 pm8001_ha->outbnd_q_tbl[i].pi_virt = in init_default_table_values()
535 pm8001_ha->memoryMap.region[PI + i].virt_ptr; in init_default_table_values()
537 pm8001_ha->outbnd_q_tbl[i].ci_pci_bar = in init_default_table_values()
540 pm8001_ha->outbnd_q_tbl[i].ci_offset = in init_default_table_values()
542 pm8001_ha->outbnd_q_tbl[i].consumer_idx = 0; in init_default_table_values()
543 pm8001_ha->outbnd_q_tbl[i].producer_index = 0; in init_default_table_values()
551 static void update_main_config_table(struct pm8001_hba_info *pm8001_ha) in update_main_config_table() argument
553 void __iomem *address = pm8001_ha->main_cfg_tbl_addr; in update_main_config_table()
555 pm8001_ha->main_cfg_tbl.pm80xx_tbl.inbound_q_nppd_hppd); in update_main_config_table()
557 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_event_log_addr); in update_main_config_table()
559 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_event_log_addr); in update_main_config_table()
561 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_size); in update_main_config_table()
563 pm8001_ha->main_cfg_tbl.pm80xx_tbl.event_log_severity); in update_main_config_table()
565 pm8001_ha->main_cfg_tbl.pm80xx_tbl.upper_pcs_event_log_addr); in update_main_config_table()
567 pm8001_ha->main_cfg_tbl.pm80xx_tbl.lower_pcs_event_log_addr); in update_main_config_table()
569 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_size); in update_main_config_table()
571 pm8001_ha->main_cfg_tbl.pm80xx_tbl.pcs_event_log_severity); in update_main_config_table()
573 pm8001_ha->main_cfg_tbl.pm80xx_tbl.fatal_err_interrupt); in update_main_config_table()
575 pm8001_ha->main_cfg_tbl.pm80xx_tbl.crc_core_dump); in update_main_config_table()
578 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping &= 0xCFFFFFFF; in update_main_config_table()
580 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping |= 0x20000000; in update_main_config_table()
582 pm8001_ha->main_cfg_tbl.pm80xx_tbl.gpio_led_mapping); in update_main_config_table()
585 pm8001_ha->main_cfg_tbl.pm80xx_tbl.port_recovery_timer); in update_main_config_table()
587 pm8001_ha->main_cfg_tbl.pm80xx_tbl.interrupt_reassertion_delay); in update_main_config_table()
594 static void update_inbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_inbnd_queue_table() argument
597 void __iomem *address = pm8001_ha->inbnd_q_tbl_addr; in update_inbnd_queue_table()
600 pm8001_ha->inbnd_q_tbl[number].element_pri_size_cnt); in update_inbnd_queue_table()
602 pm8001_ha->inbnd_q_tbl[number].upper_base_addr); in update_inbnd_queue_table()
604 pm8001_ha->inbnd_q_tbl[number].lower_base_addr); in update_inbnd_queue_table()
606 pm8001_ha->inbnd_q_tbl[number].ci_upper_base_addr); in update_inbnd_queue_table()
608 pm8001_ha->inbnd_q_tbl[number].ci_lower_base_addr); in update_inbnd_queue_table()
615 static void update_outbnd_queue_table(struct pm8001_hba_info *pm8001_ha, in update_outbnd_queue_table() argument
618 void __iomem *address = pm8001_ha->outbnd_q_tbl_addr; in update_outbnd_queue_table()
621 pm8001_ha->outbnd_q_tbl[number].element_size_cnt); in update_outbnd_queue_table()
623 pm8001_ha->outbnd_q_tbl[number].upper_base_addr); in update_outbnd_queue_table()
625 pm8001_ha->outbnd_q_tbl[number].lower_base_addr); in update_outbnd_queue_table()
627 pm8001_ha->outbnd_q_tbl[number].pi_upper_base_addr); in update_outbnd_queue_table()
629 pm8001_ha->outbnd_q_tbl[number].pi_lower_base_addr); in update_outbnd_queue_table()
631 pm8001_ha->outbnd_q_tbl[number].interrup_vec_cnt_delay); in update_outbnd_queue_table()
638 static int mpi_init_check(struct pm8001_hba_info *pm8001_ha) in mpi_init_check() argument
646 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_UPDATE); in mpi_init_check()
648 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_init_check()
655 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_init_check()
666 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_init_check()
685 static int check_fw_ready(struct pm8001_hba_info *pm8001_ha) in check_fw_ready() argument
696 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
703 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
709 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
718 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
724 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
733 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
739 PM8001_MSG_DBG(pm8001_ha, in check_fw_ready()
745 if ((pm8001_ha->chip_id != chip_8008) && in check_fw_ready()
746 (pm8001_ha->chip_id != chip_8009)) { in check_fw_ready()
751 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1); in check_fw_ready()
757 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in check_fw_ready()
766 static void init_pci_device_addresses(struct pm8001_hba_info *pm8001_ha) in init_pci_device_addresses() argument
774 value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_0); in init_pci_device_addresses()
777 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
782 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
784 pm8001_ha->main_cfg_tbl_addr = base_addr = in init_pci_device_addresses()
785 pm8001_ha->io_mem[pcibar].memvirtaddr + offset; in init_pci_device_addresses()
786 pm8001_ha->general_stat_tbl_addr = in init_pci_device_addresses()
787 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x18) & in init_pci_device_addresses()
789 pm8001_ha->inbnd_q_tbl_addr = in init_pci_device_addresses()
790 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C) & in init_pci_device_addresses()
792 pm8001_ha->outbnd_q_tbl_addr = in init_pci_device_addresses()
793 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x20) & in init_pci_device_addresses()
795 pm8001_ha->ivt_tbl_addr = in init_pci_device_addresses()
796 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C) & in init_pci_device_addresses()
798 pm8001_ha->pspa_q_tbl_addr = in init_pci_device_addresses()
799 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0x90) & in init_pci_device_addresses()
801 pm8001_ha->fatal_tbl_addr = in init_pci_device_addresses()
802 base_addr + (pm8001_cr32(pm8001_ha, pcibar, offset + 0xA0) & in init_pci_device_addresses()
805 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
807 pm8001_cr32(pm8001_ha, pcibar, offset + 0x18))); in init_pci_device_addresses()
808 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
810 pm8001_cr32(pm8001_ha, pcibar, offset + 0x1C))); in init_pci_device_addresses()
811 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
813 pm8001_cr32(pm8001_ha, pcibar, offset + 0x20))); in init_pci_device_addresses()
814 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
816 pm8001_cr32(pm8001_ha, pcibar, offset + 0x8C))); in init_pci_device_addresses()
817 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
819 pm8001_cr32(pm8001_ha, pcibar, offset + 0x90))); in init_pci_device_addresses()
820 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
822 pm8001_ha->main_cfg_tbl_addr, in init_pci_device_addresses()
823 pm8001_ha->general_stat_tbl_addr)); in init_pci_device_addresses()
824 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
826 pm8001_ha->inbnd_q_tbl_addr, in init_pci_device_addresses()
827 pm8001_ha->outbnd_q_tbl_addr)); in init_pci_device_addresses()
828 PM8001_INIT_DBG(pm8001_ha, in init_pci_device_addresses()
830 pm8001_ha->pspa_q_tbl_addr, in init_pci_device_addresses()
831 pm8001_ha->ivt_tbl_addr)); in init_pci_device_addresses()
839 pm80xx_set_thermal_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_thermal_config() argument
848 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_thermal_config()
852 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_thermal_config()
858 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_set_thermal_config()
860 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_thermal_config()
871 pm80xx_set_sas_protocol_timer_config(struct pm8001_hba_info *pm8001_ha) in pm80xx_set_sas_protocol_timer_config() argument
883 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_set_sas_protocol_timer_config()
888 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_set_sas_protocol_timer_config()
910 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
913 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
916 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
919 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
922 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
925 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
928 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
931 PM8001_INIT_DBG(pm8001_ha, in pm80xx_set_sas_protocol_timer_config()
934 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("SASConfigPage.MAX_AIP " in pm80xx_set_sas_protocol_timer_config()
940 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_set_sas_protocol_timer_config()
942 pm8001_tag_free(pm8001_ha, tag); in pm80xx_set_sas_protocol_timer_config()
952 pm80xx_get_encrypt_info(struct pm8001_hba_info *pm8001_ha) in pm80xx_get_encrypt_info() argument
958 scratch3_value = pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_3); in pm80xx_get_encrypt_info()
963 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
966 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
969 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
972 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
973 pm8001_ha->encrypt_info.status = 0; in pm80xx_get_encrypt_info()
974 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
977 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
978 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
979 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
983 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
986 pm8001_ha->encrypt_info.status = 0xFFFFFFFF; in pm80xx_get_encrypt_info()
987 pm8001_ha->encrypt_info.cipher_mode = 0; in pm80xx_get_encrypt_info()
988 pm8001_ha->encrypt_info.sec_mode = 0; in pm80xx_get_encrypt_info()
992 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
995 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
998 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1001 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1004 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1005 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1008 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1009 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1010 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1014 pm8001_ha->encrypt_info.status = in pm80xx_get_encrypt_info()
1017 pm8001_ha->encrypt_info.cipher_mode = CIPHER_MODE_XTS; in pm80xx_get_encrypt_info()
1020 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMF; in pm80xx_get_encrypt_info()
1023 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMA; in pm80xx_get_encrypt_info()
1026 pm8001_ha->encrypt_info.sec_mode = SEC_MODE_SMB; in pm80xx_get_encrypt_info()
1028 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_get_encrypt_info()
1031 scratch3_value, pm8001_ha->encrypt_info.cipher_mode, in pm80xx_get_encrypt_info()
1032 pm8001_ha->encrypt_info.sec_mode, in pm80xx_get_encrypt_info()
1033 pm8001_ha->encrypt_info.status)); in pm80xx_get_encrypt_info()
1042 static int pm80xx_encrypt_update(struct pm8001_hba_info *pm8001_ha) in pm80xx_encrypt_update() argument
1051 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_encrypt_update()
1055 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_encrypt_update()
1063 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_encrypt_update()
1065 pm8001_tag_free(pm8001_ha, tag); in pm80xx_encrypt_update()
1074 static int pm80xx_chip_init(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_init() argument
1080 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_init()
1081 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_init()
1087 init_pci_device_addresses(pm8001_ha); in pm80xx_chip_init()
1088 init_default_table_values(pm8001_ha); in pm80xx_chip_init()
1089 read_main_config_table(pm8001_ha); in pm80xx_chip_init()
1090 read_general_status_table(pm8001_ha); in pm80xx_chip_init()
1091 read_inbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1092 read_outbnd_queue_table(pm8001_ha); in pm80xx_chip_init()
1093 read_phy_attr_table(pm8001_ha); in pm80xx_chip_init()
1096 update_main_config_table(pm8001_ha); in pm80xx_chip_init()
1098 update_inbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1100 update_outbnd_queue_table(pm8001_ha, i); in pm80xx_chip_init()
1103 if (0 == mpi_init_check(pm8001_ha)) { in pm80xx_chip_init()
1104 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1110 ret = pm80xx_set_sas_protocol_timer_config(pm8001_ha); in pm80xx_chip_init()
1113 if (pm8001_ha->chip->encrypt) { in pm80xx_chip_init()
1114 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1116 ret = pm80xx_get_encrypt_info(pm8001_ha); in pm80xx_chip_init()
1118 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_init()
1120 if (pm8001_ha->encrypt_info.status == 0x81) { in pm80xx_chip_init()
1121 PM8001_INIT_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_init()
1124 pm80xx_encrypt_update(pm8001_ha); in pm80xx_chip_init()
1131 static int mpi_uninit_check(struct pm8001_hba_info *pm8001_ha) in mpi_uninit_check() argument
1136 init_pci_device_addresses(pm8001_ha); in mpi_uninit_check()
1139 pm8001_cw32(pm8001_ha, 0, MSGU_IBDB_SET, SPCv_MSGU_CFG_TABLE_RESET); in mpi_uninit_check()
1142 if (IS_SPCV_12G(pm8001_ha->pdev)) { in mpi_uninit_check()
1149 value = pm8001_cr32(pm8001_ha, 0, MSGU_IBDB_SET); in mpi_uninit_check()
1154 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1165 pm8001_mr32(pm8001_ha->general_stat_tbl_addr, in mpi_uninit_check()
1172 PM8001_FAIL_DBG(pm8001_ha, in mpi_uninit_check()
1188 pm80xx_chip_soft_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_soft_rst() argument
1195 if (mpi_uninit_check(pm8001_ha) != 0) { in pm80xx_chip_soft_rst()
1196 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1202 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1203 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1206 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, SPCv_NORMAL_RESET_VALUE); in pm80xx_chip_soft_rst()
1209 regval = pm8001_cr32(pm8001_ha, 0, SPC_REG_SOFT_RESET); in pm80xx_chip_soft_rst()
1210 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1215 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1219 PM8001_MSG_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1225 pm8001_cr32(pm8001_ha, 0, MSGU_SCRATCH_PAD_1) & in pm80xx_chip_soft_rst()
1229 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1233 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1237 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1241 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_soft_rst()
1248 if (-1 == check_fw_ready(pm8001_ha)) { in pm80xx_chip_soft_rst()
1249 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1252 if (pm8001_ha->pdev->subsystem_vendor != in pm80xx_chip_soft_rst()
1254 pm8001_ha->pdev->subsystem_vendor != 0) { in pm80xx_chip_soft_rst()
1255 ibutton0 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1257 ibutton1 = pm8001_cr32(pm8001_ha, 0, in pm80xx_chip_soft_rst()
1260 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1266 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1273 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_soft_rst()
1278 static void pm80xx_hw_chip_rst(struct pm8001_hba_info *pm8001_ha) in pm80xx_hw_chip_rst() argument
1282 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1286 pm8001_cw32(pm8001_ha, 0, SPC_REG_SOFT_RESET, 0x11); in pm80xx_hw_chip_rst()
1287 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1300 PM8001_INIT_DBG(pm8001_ha, in pm80xx_hw_chip_rst()
1309 pm80xx_chip_intx_interrupt_enable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_enable() argument
1311 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, ODMR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1312 pm8001_cw32(pm8001_ha, 0, MSGU_ODCR, ODCR_CLEAR_ALL); in pm80xx_chip_intx_interrupt_enable()
1320 pm80xx_chip_intx_interrupt_disable(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_intx_interrupt_disable() argument
1322 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, ODMR_MASK_ALL); in pm80xx_chip_intx_interrupt_disable()
1330 pm80xx_chip_interrupt_enable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_enable() argument
1336 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR_CLR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_enable()
1339 pm80xx_chip_intx_interrupt_enable(pm8001_ha); in pm80xx_chip_interrupt_enable()
1348 pm80xx_chip_interrupt_disable(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_interrupt_disable() argument
1356 pm8001_cw32(pm8001_ha, 0, MSGU_ODMR, (u32)(mask & 0xFFFFFFFF)); in pm80xx_chip_interrupt_disable()
1359 pm80xx_chip_intx_interrupt_disable(pm8001_ha); in pm80xx_chip_interrupt_disable()
1362 static void pm80xx_send_abort_all(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_abort_all() argument
1375 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("dev is null\n")); in pm80xx_send_abort_all()
1382 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("cannot " in pm80xx_send_abort_all()
1389 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_abort_all()
1395 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_abort_all()
1400 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_abort_all()
1407 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &task_abort, 0); in pm80xx_send_abort_all()
1410 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_abort_all()
1414 static void pm80xx_send_read_log(struct pm8001_hba_info *pm8001_ha, in pm80xx_send_read_log() argument
1430 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1436 res = pm8001_tag_alloc(pm8001_ha, &ccb_tag); in pm80xx_send_read_log()
1439 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1450 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1451 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_send_read_log()
1459 ccb = &pm8001_ha->ccb_info[ccb_tag]; in pm80xx_send_read_log()
1467 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_send_read_log()
1482 res = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &sata_cmd, 0); in pm80xx_send_read_log()
1485 pm8001_tag_free(pm8001_ha, ccb_tag); in pm80xx_send_read_log()
1502 mpi_ssp_completion(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_completion() argument
1517 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_completion()
1528 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1536 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_completion()
1542 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1553 sas_ssp_task_response(pm8001_ha->dev, t, iu); in mpi_ssp_completion()
1559 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1566 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1576 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1582 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1590 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1597 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1604 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1611 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1623 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1629 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
1634 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1641 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
1648 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1655 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1662 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1668 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1674 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1681 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()
1698 pm8001_handle_event(pm8001_ha, in mpi_ssp_completion()
1703 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()
1735 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_completion()
1744 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_completion()
1748 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
1751 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_completion()
1758 static void mpi_ssp_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_ssp_event() argument
1771 ccb = &pm8001_ha->ccb_info[tag]; in mpi_ssp_event()
1775 PM8001_FAIL_DBG(pm8001_ha, in mpi_ssp_event()
1780 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1785 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n");) in mpi_ssp_event()
1793 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1795 pm8001_handle_event(pm8001_ha, t, IO_XFER_ERROR_BREAK); in mpi_ssp_event()
1798 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1805 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1812 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1819 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1831 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1837 pm8001_handle_event(pm8001_ha, in mpi_ssp_event()
1842 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1849 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1856 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1863 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1870 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1876 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1878 pm8001_handle_event(pm8001_ha, t, IO_XFER_OPEN_RETRY_TIMEOUT); in mpi_ssp_event()
1881 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1887 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1893 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1899 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1905 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1911 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1917 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1924 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1928 PM8001_IO_DBG(pm8001_ha, in mpi_ssp_event()
1941 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_ssp_event()
1945 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
1948 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_ssp_event()
1956 mpi_sata_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_sata_completion() argument
1979 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
1983 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_completion()
1989 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
1998 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2005 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2012 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2022 sata_addr_low[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2024 sata_addr_hi[i] = pm8001_ha->sas_addr[j]; in mpi_sata_completion()
2046 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2052 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2059 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_sata_completion()
2070 pm80xx_send_abort_all(pm8001_ha, pm8001_dev); in mpi_sata_completion()
2072 pm8001_tag_free(pm8001_ha, tag); in mpi_sata_completion()
2081 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2089 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2093 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2097 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2105 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2112 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2122 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2131 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2137 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2143 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2150 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2157 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2164 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2176 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2181 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2186 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2191 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2197 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2202 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2207 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2214 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_completion()
2219 pm8001_handle_event(pm8001_ha, in mpi_sata_completion()
2224 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2229 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2236 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2242 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2248 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2254 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2260 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2266 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2272 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2278 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2283 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2287 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2292 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2298 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2303 pm8001_handle_event(pm8001_ha, pm8001_dev, in mpi_sata_completion()
2307 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2312 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2318 PM8001_IO_DBG(pm8001_ha, in mpi_sata_completion()
2331 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_completion()
2335 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2338 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_completion()
2343 static void mpi_sata_event(struct pm8001_hba_info *pm8001_ha , void *piomb) in mpi_sata_event() argument
2357 ccb = &pm8001_ha->ccb_info[tag]; in mpi_sata_event()
2363 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2368 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2374 pm8001_dev = pm8001_find_dev(pm8001_ha, dev_id); in mpi_sata_event()
2377 pm80xx_send_read_log(pm8001_ha, pm8001_dev); in mpi_sata_event()
2382 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2388 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2393 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_sata_event()
2401 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2407 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2414 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2421 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2428 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2440 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2445 pm8001_handle_event(pm8001_ha, in mpi_sata_event()
2450 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2455 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2462 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_sata_event()
2469 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2476 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2482 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2488 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2494 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2500 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2506 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2512 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2518 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2524 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2530 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2534 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2540 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2547 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2554 PM8001_IO_DBG(pm8001_ha, in mpi_sata_event()
2567 PM8001_FAIL_DBG(pm8001_ha, in mpi_sata_event()
2571 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2574 pm8001_ccb_task_free_done(pm8001_ha, t, ccb, tag); in mpi_sata_event()
2580 mpi_smp_completion(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_smp_completion() argument
2597 ccb = &pm8001_ha->ccb_info[tag]; in mpi_smp_completion()
2603 PM8001_FAIL_DBG(pm8001_ha, in mpi_smp_completion()
2611 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_SUCCESS\n")); in mpi_smp_completion()
2616 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in mpi_smp_completion()
2617 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2625 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
2633 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2641 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_UNDERFLOW\n")); in mpi_smp_completion()
2649 PM8001_IO_DBG(pm8001_ha, pm8001_printk("IO_NO_DEVICE\n")); in mpi_smp_completion()
2654 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2660 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2666 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2672 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2679 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2686 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2698 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2703 pm8001_handle_event(pm8001_ha, in mpi_smp_completion()
2708 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2715 PM8001_IO_DBG(pm8001_ha, pm8001_printk(\ in mpi_smp_completion()
2722 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2729 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2735 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2742 PM8001_IO_DBG(pm8001_ha, 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()
2775 PM8001_IO_DBG(pm8001_ha, in mpi_smp_completion()
2788 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk( in mpi_smp_completion()
2792 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
2795 pm8001_ccb_task_free(pm8001_ha, t, ccb, tag); in mpi_smp_completion()
2811 static void pm80xx_hw_event_ack_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_hw_event_ack_req() argument
2820 circularQ = &pm8001_ha->inbnd_q_tbl[Qnum]; in pm80xx_hw_event_ack_req()
2826 pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_hw_event_ack_req()
2829 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha,
2838 hw_event_sas_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sas_phy_up() argument
2853 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sas_phy_up()
2854 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sas_phy_up()
2855 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sas_phy_up()
2860 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in hw_event_sas_phy_up()
2867 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2871 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("end device.\n")); in hw_event_sas_phy_up()
2872 pm80xx_chip_phy_ctl_req(pm8001_ha, phy_id, in hw_event_sas_phy_up()
2878 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2884 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2890 PM8001_MSG_DBG(pm8001_ha, in hw_event_sas_phy_up()
2909 if (pm8001_ha->flags == PM8001F_RUN_TIME) in hw_event_sas_phy_up()
2911 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sas_phy_up()
2920 hw_event_sata_phy_up(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_sata_phy_up() argument
2935 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_sata_phy_up()
2936 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in hw_event_sata_phy_up()
2937 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_sata_phy_up()
2939 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in hw_event_sata_phy_up()
2959 pm8001_bytes_dmaed(pm8001_ha, phy_id); in hw_event_sata_phy_up()
2968 hw_event_phy_down(struct pm8001_hba_info *pm8001_ha, void *piomb) in hw_event_phy_down() argument
2981 struct pm8001_port *port = &pm8001_ha->port[port_id]; in hw_event_phy_down()
2982 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in hw_event_phy_down()
2992 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
2994 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
2997 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3001 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3005 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3010 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3012 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3015 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_PHY_DOWN, in hw_event_phy_down()
3020 PM8001_MSG_DBG(pm8001_ha, in hw_event_phy_down()
3028 static int mpi_phy_start_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_start_resp() argument
3036 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_phy_start_resp()
3038 PM8001_INIT_DBG(pm8001_ha, in mpi_phy_start_resp()
3043 if (pm8001_ha->flags == PM8001F_RUN_TIME) in mpi_phy_start_resp()
3055 static int mpi_thermal_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_thermal_hw_event() argument
3064 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3066 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3071 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3073 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in mpi_thermal_hw_event()
3085 static int mpi_hw_event(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_hw_event() argument
3101 struct sas_ha_struct *sas_ha = pm8001_ha->sas; in mpi_hw_event()
3102 struct pm8001_phy *phy = &pm8001_ha->phy[phy_id]; in mpi_hw_event()
3104 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3111 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3113 hw_event_sas_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3116 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3118 hw_event_sata_phy_up(pm8001_ha, piomb); in mpi_hw_event()
3121 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3126 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3131 hw_event_phy_down(pm8001_ha, piomb); in mpi_hw_event()
3134 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3143 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3145 pm80xx_hw_event_ack_req(pm8001_ha, 0, HW_EVENT_BROADCAST_CHANGE, in mpi_hw_event()
3153 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3160 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3168 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3170 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3177 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3179 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3187 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3189 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3197 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_hw_event()
3199 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3207 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3211 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3219 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3221 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3226 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3231 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3238 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3240 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3248 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3255 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3257 pm80xx_hw_event_ack_req(pm8001_ha, 0, in mpi_hw_event()
3265 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3269 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3273 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3277 PM8001_MSG_DBG(pm8001_ha, in mpi_hw_event()
3289 static int mpi_phy_stop_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_phy_stop_resp() argument
3297 struct pm8001_phy *phy = &pm8001_ha->phy[phyid]; in mpi_phy_stop_resp()
3298 PM8001_MSG_DBG(pm8001_ha, in mpi_phy_stop_resp()
3311 static int mpi_set_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_controller_config_resp() argument
3319 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_set_controller_config_resp()
3331 static int mpi_get_controller_config_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_controller_config_resp() argument
3334 PM8001_MSG_DBG(pm8001_ha, in mpi_get_controller_config_resp()
3345 static int mpi_get_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_get_phy_profile_resp() argument
3348 PM8001_MSG_DBG(pm8001_ha, in mpi_get_phy_profile_resp()
3359 static int mpi_flash_op_ext_resp(struct pm8001_hba_info *pm8001_ha, void *piomb) in mpi_flash_op_ext_resp() argument
3361 PM8001_MSG_DBG(pm8001_ha, in mpi_flash_op_ext_resp()
3372 static int mpi_set_phy_profile_resp(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_resp() argument
3384 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3390 PM8001_FAIL_DBG(pm8001_ha, in mpi_set_phy_profile_resp()
3404 static int mpi_kek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_kek_management_resp() argument
3413 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in mpi_kek_management_resp()
3425 static int mpi_dek_management_resp(struct pm8001_hba_info *pm8001_ha, in mpi_dek_management_resp() argument
3428 PM8001_MSG_DBG(pm8001_ha, in mpi_dek_management_resp()
3439 static int ssp_coalesced_comp_resp(struct pm8001_hba_info *pm8001_ha, in ssp_coalesced_comp_resp() argument
3442 PM8001_MSG_DBG(pm8001_ha, in ssp_coalesced_comp_resp()
3453 static void process_one_iomb(struct pm8001_hba_info *pm8001_ha, void *piomb) in process_one_iomb() argument
3460 PM8001_MSG_DBG(pm8001_ha, pm8001_printk("OPC_OUB_ECHO\n")); in process_one_iomb()
3463 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3465 mpi_hw_event(pm8001_ha, piomb); in process_one_iomb()
3468 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3470 mpi_thermal_hw_event(pm8001_ha, piomb); in process_one_iomb()
3473 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3475 mpi_ssp_completion(pm8001_ha, piomb); in process_one_iomb()
3478 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3480 mpi_smp_completion(pm8001_ha, piomb); in process_one_iomb()
3483 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3485 pm8001_mpi_local_phy_ctl(pm8001_ha, piomb); in process_one_iomb()
3488 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3490 pm8001_mpi_reg_resp(pm8001_ha, piomb); in process_one_iomb()
3493 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3495 pm8001_mpi_dereg_resp(pm8001_ha, piomb); in process_one_iomb()
3498 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3502 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3504 mpi_sata_completion(pm8001_ha, piomb); in process_one_iomb()
3507 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3509 mpi_sata_event(pm8001_ha, piomb); in process_one_iomb()
3512 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3514 mpi_ssp_event(pm8001_ha, piomb); in process_one_iomb()
3517 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3522 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3527 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3529 pm8001_mpi_fw_flash_update_resp(pm8001_ha, piomb); in process_one_iomb()
3532 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3536 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3540 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3542 pm8001_mpi_general_event(pm8001_ha, piomb); in process_one_iomb()
3545 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3547 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3550 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3552 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3555 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3559 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3563 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3567 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3571 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3575 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3577 pm8001_mpi_task_abort_resp(pm8001_ha, piomb); in process_one_iomb()
3580 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3582 pm8001_mpi_get_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
3585 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3587 pm8001_mpi_set_nvmd_resp(pm8001_ha, piomb); in process_one_iomb()
3590 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3594 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3596 pm8001_mpi_set_dev_state_resp(pm8001_ha, piomb); in process_one_iomb()
3599 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3603 PM8001_MSG_DBG(pm8001_ha, in process_one_iomb()
3608 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3610 mpi_phy_start_resp(pm8001_ha, piomb); in process_one_iomb()
3613 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3615 mpi_phy_stop_resp(pm8001_ha, piomb); in process_one_iomb()
3618 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3620 mpi_set_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
3623 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3625 mpi_get_controller_config_resp(pm8001_ha, piomb); in process_one_iomb()
3628 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3630 mpi_get_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
3633 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3635 mpi_flash_op_ext_resp(pm8001_ha, piomb); in process_one_iomb()
3638 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3640 mpi_set_phy_profile_resp(pm8001_ha, piomb); in process_one_iomb()
3643 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3645 mpi_kek_management_resp(pm8001_ha, piomb); in process_one_iomb()
3648 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3650 mpi_dek_management_resp(pm8001_ha, piomb); in process_one_iomb()
3653 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3655 ssp_coalesced_comp_resp(pm8001_ha, piomb); in process_one_iomb()
3658 PM8001_MSG_DBG(pm8001_ha, pm8001_printk( in process_one_iomb()
3664 static int process_oq(struct pm8001_hba_info *pm8001_ha, u8 vec) in process_oq() argument
3672 spin_lock_irqsave(&pm8001_ha->lock, flags); in process_oq()
3673 circularQ = &pm8001_ha->outbnd_q_tbl[vec]; in process_oq()
3675 ret = pm8001_mpi_msg_consume(pm8001_ha, circularQ, &pMsg1, &bc); in process_oq()
3678 process_one_iomb(pm8001_ha, (void *)(pMsg1 - 4)); in process_oq()
3680 pm8001_mpi_msg_free_set(pm8001_ha, pMsg1, in process_oq()
3693 spin_unlock_irqrestore(&pm8001_ha->lock, flags); in process_oq()
3723 static int pm80xx_chip_smp_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_smp_req() argument
3744 elem = dma_map_sg(pm8001_ha->dev, sg_req, 1, PCI_DMA_TODEVICE); in pm80xx_chip_smp_req()
3750 elem = dma_map_sg(pm8001_ha->dev, sg_resp, 1, PCI_DMA_FROMDEVICE); in pm80xx_chip_smp_req()
3763 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_smp_req()
3767 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3770 pm8001_ha->smp_exp_mode = SMP_DIRECT; in pm80xx_chip_smp_req()
3772 pm8001_ha->smp_exp_mode = SMP_INDIRECT; in pm80xx_chip_smp_req()
3779 if (pm8001_ha->smp_exp_mode == SMP_INDIRECT) { in pm80xx_chip_smp_req()
3780 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3812 if (pm8001_ha->smp_exp_mode == SMP_DIRECT) { in pm80xx_chip_smp_req()
3813 PM8001_IO_DBG(pm8001_ha, in pm80xx_chip_smp_req()
3818 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
3824 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_smp_req()
3832 &smp_cmd, pm8001_ha->smp_exp_mode, length); in pm80xx_chip_smp_req()
3833 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_smp_req()
3840 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_resp, 1, in pm80xx_chip_smp_req()
3843 dma_unmap_sg(pm8001_ha->dev, &ccb->task->smp_task.smp_req, 1, in pm80xx_chip_smp_req()
3886 static int pm80xx_chip_ssp_io_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_ssp_io_req() argument
3918 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_ssp_io_req()
3921 if (pm8001_ha->chip->encrypt && in pm80xx_chip_ssp_io_req()
3922 !(pm8001_ha->encrypt_info.status) && check_enc_sas_cmd(task)) { in pm80xx_chip_ssp_io_req()
3923 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
3956 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
3988 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_ssp_io_req()
4015 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_ssp_io_req()
4041 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_ssp_io_req()
4046 static int pm80xx_chip_sata_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_sata_req() argument
4066 circularQ = &pm8001_ha->inbnd_q_tbl[q_index]; in pm80xx_chip_sata_req()
4070 PM8001_IO_DBG(pm8001_ha, pm8001_printk("no data\n")); in pm80xx_chip_sata_req()
4074 PM8001_IO_DBG(pm8001_ha, pm8001_printk("DMA\n")); in pm80xx_chip_sata_req()
4077 PM8001_IO_DBG(pm8001_ha, pm8001_printk("PIO\n")); in pm80xx_chip_sata_req()
4082 PM8001_IO_DBG(pm8001_ha, pm8001_printk("FPDMA\n")); in pm80xx_chip_sata_req()
4100 if (pm8001_ha->chip->encrypt && in pm80xx_chip_sata_req()
4101 !(pm8001_ha->encrypt_info.status) && check_enc_sat_cmd(task)) { in pm80xx_chip_sata_req()
4102 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4133 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4170 PM8001_IO_DBG(pm8001_ha, pm8001_printk( in pm80xx_chip_sata_req()
4199 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4266 PM8001_FAIL_DBG(pm8001_ha, in pm80xx_chip_sata_req()
4270 pm8001_ccb_task_free(pm8001_ha, task, ccb, tag); in pm80xx_chip_sata_req()
4275 pm8001_ccb_task_free_done(pm8001_ha, task, in pm80xx_chip_sata_req()
4282 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, in pm80xx_chip_sata_req()
4294 pm80xx_chip_phy_start_req(struct pm8001_hba_info *pm8001_ha, u8 phy_id) in pm80xx_chip_phy_start_req() argument
4301 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_start_req()
4305 PM8001_INIT_DBG(pm8001_ha, in pm80xx_chip_phy_start_req()
4314 if (!IS_SPCV_12G(pm8001_ha->pdev)) in pm80xx_chip_phy_start_req()
4336 pm8001_ha->sas_addr, SAS_ADDR_SIZE); in pm80xx_chip_phy_start_req()
4338 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0); in pm80xx_chip_phy_start_req()
4348 static int pm80xx_chip_phy_stop_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_stop_req() argument
4356 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_stop_req()
4360 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opcode, &payload, 0); in pm80xx_chip_phy_stop_req()
4367 static int pm80xx_chip_reg_dev_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_reg_dev_req() argument
4382 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_reg_dev_req()
4385 rc = pm8001_tag_alloc(pm8001_ha, &tag); in pm80xx_chip_reg_dev_req()
4388 ccb = &pm8001_ha->ccb_info[tag]; in pm80xx_chip_reg_dev_req()
4426 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_chip_reg_dev_req()
4428 pm8001_tag_free(pm8001_ha, tag); in pm80xx_chip_reg_dev_req()
4440 static int pm80xx_chip_phy_ctl_req(struct pm8001_hba_info *pm8001_ha, in pm80xx_chip_phy_ctl_req() argument
4448 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in pm80xx_chip_phy_ctl_req()
4452 ret = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in pm80xx_chip_phy_ctl_req()
4456 static u32 pm80xx_chip_is_our_interupt(struct pm8001_hba_info *pm8001_ha) in pm80xx_chip_is_our_interupt() argument
4462 value = pm8001_cr32(pm8001_ha, 0, MSGU_ODR); in pm80xx_chip_is_our_interupt()
4476 pm80xx_chip_isr(struct pm8001_hba_info *pm8001_ha, u8 vec) in pm80xx_chip_isr() argument
4478 pm80xx_chip_interrupt_disable(pm8001_ha, vec); in pm80xx_chip_isr()
4479 process_oq(pm8001_ha, vec); in pm80xx_chip_isr()
4480 pm80xx_chip_interrupt_enable(pm8001_ha, vec); in pm80xx_chip_isr()
4484 void mpi_set_phy_profile_req(struct pm8001_hba_info *pm8001_ha, in mpi_set_phy_profile_req() argument
4494 rc = pm8001_tag_alloc(pm8001_ha, &tag); in mpi_set_phy_profile_req()
4496 PM8001_FAIL_DBG(pm8001_ha, pm8001_printk("Invalid tag\n")); in mpi_set_phy_profile_req()
4497 circularQ = &pm8001_ha->inbnd_q_tbl[0]; in mpi_set_phy_profile_req()
4500 PM8001_INIT_DBG(pm8001_ha, in mpi_set_phy_profile_req()
4507 rc = pm8001_mpi_build_cmd(pm8001_ha, circularQ, opc, &payload, 0); in mpi_set_phy_profile_req()
4509 pm8001_tag_free(pm8001_ha, tag); in mpi_set_phy_profile_req()
4512 void pm8001_set_phy_profile(struct pm8001_hba_info *pm8001_ha, in pm8001_set_phy_profile() argument
4518 for (i = 0; i < pm8001_ha->chip->n_phy; i++) { in pm8001_set_phy_profile()
4519 mpi_set_phy_profile_req(pm8001_ha, in pm8001_set_phy_profile()
4523 PM8001_INIT_DBG(pm8001_ha, pm8001_printk("phy settings completed\n")); in pm8001_set_phy_profile()