Lines Matching +full:step +full:- +full:size
1 /*-
2 * SPDX-License-Identifier: BSD-2-Clause
4 * Copyright (c) 2013-2016 Qlogic Corporation
68 wnd_reg = (Q8_CRB_WINDOW_PF0 | (ha->pci_func << 2)); in ql_rdwr_indreg32()
72 while (count--) { in ql_rdwr_indreg32()
78 device_printf(ha->pci_dev, "%s: [0x%08x, 0x%08x, %d] failed\n", in ql_rdwr_indreg32()
81 return -1; in ql_rdwr_indreg32()
102 uint32_t data, step = 0; in ql_rdwr_offchip_mem() local
109 step = 1; in ql_rdwr_offchip_mem()
115 step = 2; in ql_rdwr_offchip_mem()
121 step = 3; in ql_rdwr_offchip_mem()
126 data = val->data_lo; in ql_rdwr_offchip_mem()
128 step = 4; in ql_rdwr_offchip_mem()
132 data = val->data_hi; in ql_rdwr_offchip_mem()
134 step = 5; in ql_rdwr_offchip_mem()
138 data = val->data_ulo; in ql_rdwr_offchip_mem()
140 step = 6; in ql_rdwr_offchip_mem()
144 data = val->data_uhi; in ql_rdwr_offchip_mem()
146 step = 7; in ql_rdwr_offchip_mem()
152 step = 7; in ql_rdwr_offchip_mem()
158 step = 8; in ql_rdwr_offchip_mem()
163 while (count--) { in ql_rdwr_offchip_mem()
165 step = 9; in ql_rdwr_offchip_mem()
173 step = 10; in ql_rdwr_offchip_mem()
176 val->data_lo = data; in ql_rdwr_offchip_mem()
180 step = 11; in ql_rdwr_offchip_mem()
183 val->data_hi = data; in ql_rdwr_offchip_mem()
187 step = 12; in ql_rdwr_offchip_mem()
190 val->data_ulo = data; in ql_rdwr_offchip_mem()
194 step = 13; in ql_rdwr_offchip_mem()
197 val->data_uhi = data; in ql_rdwr_offchip_mem()
206 device_printf(ha->pci_dev, in ql_rdwr_offchip_mem()
209 (uint32_t)(addr), val->data_lo, val->data_hi, val->data_ulo, in ql_rdwr_offchip_mem()
210 val->data_uhi, rd, step); in ql_rdwr_offchip_mem()
214 return (-1); in ql_rdwr_offchip_mem()
227 device_printf(ha->pci_dev, "%s: Q8_FLASH_LOCK failed\n", in ql_rd_flash32()
229 return (-1); in ql_rd_flash32()
235 device_printf(ha->pci_dev, in ql_rd_flash32()
238 return (-1); in ql_rd_flash32()
244 device_printf(ha->pci_dev, in ql_rd_flash32()
247 return (-1); in ql_rd_flash32()
261 hw = &ha->hw; in qla_get_fdt()
265 (uint32_t *)&hw->fdt + (count >> 2))) { in qla_get_fdt()
266 device_printf(ha->pci_dev, in qla_get_fdt()
269 return (-1); in qla_get_fdt()
275 device_printf(ha->pci_dev, "%s: Q8_FLASH_LOCK failed\n", in qla_get_fdt()
277 return (-1); in qla_get_fdt()
283 device_printf(ha->pci_dev, in qla_get_fdt()
286 return (-1); in qla_get_fdt()
292 device_printf(ha->pci_dev, in qla_get_fdt()
295 return (-1); in qla_get_fdt()
313 device_printf(ha->pci_dev, in qla_get_fdt()
316 return (-1); in qla_get_fdt()
325 device_printf(ha->pci_dev, in qla_get_fdt()
328 return (-1); in qla_get_fdt()
333 device_printf(ha->pci_dev, in qla_get_fdt()
336 return (-1); in qla_get_fdt()
342 if (hw->fdt.flash_manuf == data32) in qla_get_fdt()
345 return (-1); in qla_get_fdt()
354 data32 = Q8_WR_ENABLE_FL_ADDR | ha->hw.fdt.write_statusreg_cmd; in qla_flash_write_enable()
356 device_printf(ha->pci_dev, in qla_flash_write_enable()
359 return (-1); in qla_flash_write_enable()
363 data32 = ha->hw.fdt.write_enable_bits; in qla_flash_write_enable()
365 data32 = ha->hw.fdt.write_disable_bits; in qla_flash_write_enable()
368 device_printf(ha->pci_dev, in qla_flash_write_enable()
371 return (-1); in qla_flash_write_enable()
376 device_printf(ha->pci_dev, in qla_flash_write_enable()
379 return (-1); in qla_flash_write_enable()
393 device_printf(ha->pci_dev, in qla_flash_write_enable()
396 return (-1); in qla_flash_write_enable()
404 device_printf(ha->pci_dev, in qla_flash_write_enable()
407 return (-1); in qla_flash_write_enable()
424 device_printf(ha->pci_dev, in qla_erase_flash_sector()
427 return (-1); in qla_erase_flash_sector()
435 device_printf(ha->pci_dev, in qla_erase_flash_sector()
438 return (-1); in qla_erase_flash_sector()
443 device_printf(ha->pci_dev, in qla_erase_flash_sector()
446 return (-1); in qla_erase_flash_sector()
449 data32 = Q8_ERASE_FL_ADDR_MASK | ha->hw.fdt.erase_cmd; in qla_erase_flash_sector()
451 device_printf(ha->pci_dev, in qla_erase_flash_sector()
454 return (-1); in qla_erase_flash_sector()
459 device_printf(ha->pci_dev, in qla_erase_flash_sector()
462 return (-1); in qla_erase_flash_sector()
471 device_printf(ha->pci_dev, in qla_erase_flash_sector()
474 return (-1); in qla_erase_flash_sector()
482 device_printf(ha->pci_dev, in qla_erase_flash_sector()
485 return (-1); in qla_erase_flash_sector()
492 ql_erase_flash(qla_host_t *ha, uint32_t off, uint32_t size) in ql_erase_flash() argument
497 if (off & (Q8_FLASH_SECTOR_SIZE -1)) in ql_erase_flash()
498 return (-1); in ql_erase_flash()
502 device_printf(ha->pci_dev, "%s: Q8_FLASH_LOCK failed\n", in ql_erase_flash()
504 return (-1); in ql_erase_flash()
508 rval = -1; in ql_erase_flash()
512 for (start = off; start < (off + size); start = start + in ql_erase_flash()
515 rval = -1; in ql_erase_flash()
535 device_printf(ha->pci_dev, in qla_wr_flash32()
538 return (-1); in qla_wr_flash32()
542 device_printf(ha->pci_dev, in qla_wr_flash32()
545 return (-1); in qla_wr_flash32()
550 device_printf(ha->pci_dev, in qla_wr_flash32()
553 return (-1); in qla_wr_flash32()
567 device_printf(ha->pci_dev, in qla_wr_flash32()
570 return (-1); in qla_wr_flash32()
578 device_printf(ha->pci_dev, in qla_wr_flash32()
581 return (-1); in qla_wr_flash32()
588 qla_flash_write_data(qla_host_t *ha, uint32_t off, uint32_t size, in qla_flash_write_data() argument
597 device_printf(ha->pci_dev, "%s: Q8_FLASH_LOCK failed\n", in qla_flash_write_data()
599 rval = -1; in qla_flash_write_data()
604 device_printf(ha->pci_dev, "%s: failed\n", in qla_flash_write_data()
606 rval = -1; in qla_flash_write_data()
610 for (start = off; start < (off + size); start = start + 4) { in qla_flash_write_data()
613 rval = -1; in qla_flash_write_data()
630 ql_wr_flash_buffer(qla_host_t *ha, uint32_t off, uint32_t size, void *buf) in ql_wr_flash_buffer() argument
635 if (size == 0) in ql_wr_flash_buffer()
638 size = size << 2; in ql_wr_flash_buffer()
641 return -1; in ql_wr_flash_buffer()
643 if ((data = malloc(size, M_QLA83XXBUF, M_NOWAIT)) == NULL) { in ql_wr_flash_buffer()
644 device_printf(ha->pci_dev, "%s: malloc failed \n", __func__); in ql_wr_flash_buffer()
645 rval = -1; in ql_wr_flash_buffer()
649 if ((rval = copyin(buf, data, size))) { in ql_wr_flash_buffer()
650 device_printf(ha->pci_dev, "%s copyin failed\n", __func__); in ql_wr_flash_buffer()
654 rval = qla_flash_write_data(ha, off, size, data); in ql_wr_flash_buffer()
679 device_printf(ha->pci_dev, "%s: [0x%08x][0x%08x]\n", in qla_load_fw_from_flash()
712 * - reset
713 * - CRB Init
714 * - Peg Init
715 * - Read the Bootloader from Flash and Load into Offchip Memory
716 * - Kick start the bootloader which loads the rest of the firmware
731 (ha->pci_dev, "%s: func[%d] cmdpegstate 0x%08x\n", in qla_init_from_flash()
732 __func__, ha->pci_func, data)); in qla_init_from_flash()
734 QL_DPRINT2(ha, (ha->pci_dev, in qla_init_from_flash()
736 __func__, ha->pci_func)); in qla_init_from_flash()
740 } while (delay--); in qla_init_from_flash()
742 return (-1); in qla_init_from_flash()
756 dev = ha->pci_dev; in ql_init_hw()
760 if (ha->pci_func & 0x1) { in ql_init_hw()
761 while ((ha->pci_func & 0x1) && delay--) { in ql_init_hw()
767 __func__, ha->pci_func)); in ql_init_hw()
773 ret = -1; in ql_init_hw()
778 if (!cold || (val != 0xFF01) || ha->qla_initiate_recovery) { in ql_init_hw()
784 ha->fw_ver_major = READ_REG32(ha, Q8_FW_VER_MAJOR); in ql_init_hw()
785 ha->fw_ver_minor = READ_REG32(ha, Q8_FW_VER_MINOR); in ql_init_hw()
786 ha->fw_ver_sub = READ_REG32(ha, Q8_FW_VER_SUB); in ql_init_hw()
791 ha->hw.flags.fdt_valid = 1; in ql_init_hw()
797 if (ha->hw.sp_log_stop_events & Q8_SP_LOG_STOP_HW_INIT_FAILURE) in ql_init_hw()
798 ha->hw.sp_log_stop = -1; in ql_init_hw()
813 (ha->pci_func << 3); in ql_read_mac_addr()
820 ha->hw.mac_addr[5] = macp[0]; in ql_read_mac_addr()
821 ha->hw.mac_addr[4] = macp[1]; in ql_read_mac_addr()
822 ha->hw.mac_addr[3] = macp[2]; in ql_read_mac_addr()
823 ha->hw.mac_addr[2] = macp[3]; in ql_read_mac_addr()
826 ha->hw.mac_addr[1] = macp[0]; in ql_read_mac_addr()
827 ha->hw.mac_addr[0] = macp[1]; in ql_read_mac_addr()
829 //device_printf(ha->pci_dev, "%s: %02x:%02x:%02x:%02x:%02x:%02x\n", in ql_read_mac_addr()
830 // __func__, ha->hw.mac_addr[0], ha->hw.mac_addr[1], in ql_read_mac_addr()
831 // ha->hw.mac_addr[2], ha->hw.mac_addr[3], in ql_read_mac_addr()
832 // ha->hw.mac_addr[4], ha->hw.mac_addr[5]); in ql_read_mac_addr()
842 qla_tmplt_16bit_checksum(qla_host_t *ha, uint16_t *buf, uint32_t size) in qla_tmplt_16bit_checksum() argument
845 uint32_t count = size >> 1; /* size in 16 bit words */ in qla_tmplt_16bit_checksum()
847 while (count-- > 0) in qla_tmplt_16bit_checksum()
864 for (i = 0; i < ce_hdr->opcount; i++, wr_l++) { in qla_wr_list()
865 if (ql_rdwr_indreg32(ha, wr_l->addr, &wr_l->value, 0)) { in qla_wr_list()
866 device_printf(ha->pci_dev, in qla_wr_list()
868 wr_l->addr, wr_l->value); in qla_wr_list()
869 return -1; in qla_wr_list()
871 if (ce_hdr->delay_to) { in qla_wr_list()
872 DELAY(ce_hdr->delay_to); in qla_wr_list()
887 for (i = 0; i < ce_hdr->opcount; i++, rd_wr_l++) { in qla_rd_wr_list()
888 if (ql_rdwr_indreg32(ha, rd_wr_l->rd_addr, &data, 1)) { in qla_rd_wr_list()
889 device_printf(ha->pci_dev, "%s: [0x%08x] error\n", in qla_rd_wr_list()
890 __func__, rd_wr_l->rd_addr); in qla_rd_wr_list()
892 return -1; in qla_rd_wr_list()
895 if (ql_rdwr_indreg32(ha, rd_wr_l->wr_addr, &data, 0)) { in qla_rd_wr_list()
896 device_printf(ha->pci_dev, in qla_rd_wr_list()
898 rd_wr_l->wr_addr, data); in qla_rd_wr_list()
899 return -1; in qla_rd_wr_list()
901 if (ce_hdr->delay_to) { in qla_rd_wr_list()
902 DELAY(ce_hdr->delay_to); in qla_rd_wr_list()
916 device_printf(ha->pci_dev, "%s: [0x%08x] error\n", in qla_poll_reg()
918 return -1; in qla_poll_reg()
922 ms_to--; in qla_poll_reg()
928 return ((ms_to ? 0: -1)); in qla_poll_reg()
942 for (i = 0; i < ce_hdr->opcount; i++, pe++) { in qla_poll_list()
943 if (ql_rdwr_indreg32(ha, pe->addr, &data, 1)) { in qla_poll_list()
944 device_printf(ha->pci_dev, "%s: [0x%08x] error\n", in qla_poll_list()
945 __func__, pe->addr); in qla_poll_list()
946 return -1; in qla_poll_list()
949 if (ce_hdr->delay_to) { in qla_poll_list()
950 if ((data & phdr->tmask) == phdr->tvalue) in qla_poll_list()
952 if (qla_poll_reg(ha, pe->addr, ce_hdr->delay_to, in qla_poll_list()
953 phdr->tmask, phdr->tvalue)) { in qla_poll_list()
954 if (ql_rdwr_indreg32(ha, pe->to_addr, &data, in qla_poll_list()
956 device_printf(ha->pci_dev, in qla_poll_list()
958 __func__, pe->to_addr); in qla_poll_list()
959 return -1; in qla_poll_list()
962 if (ql_rdwr_indreg32(ha, pe->addr, &data, 1)) { in qla_poll_list()
963 device_printf(ha->pci_dev, in qla_poll_list()
965 __func__, pe->addr); in qla_poll_list()
966 return -1; in qla_poll_list()
984 for (i = 0; i < ce_hdr->opcount; i++, wr_e++) { in qla_poll_write_list()
985 if (ql_rdwr_indreg32(ha, wr_e->dr_addr, &wr_e->dr_value, 0)) { in qla_poll_write_list()
986 device_printf(ha->pci_dev, in qla_poll_write_list()
988 wr_e->dr_addr, wr_e->dr_value); in qla_poll_write_list()
989 return -1; in qla_poll_write_list()
991 if (ql_rdwr_indreg32(ha, wr_e->ar_addr, &wr_e->ar_value, 0)) { in qla_poll_write_list()
992 device_printf(ha->pci_dev, in qla_poll_write_list()
994 wr_e->ar_addr, wr_e->ar_value); in qla_poll_write_list()
995 return -1; in qla_poll_write_list()
997 if (ce_hdr->delay_to) { in qla_poll_write_list()
998 if (qla_poll_reg(ha, wr_e->ar_addr, ce_hdr->delay_to, in qla_poll_write_list()
999 phdr->tmask, phdr->tvalue)) in qla_poll_write_list()
1000 device_printf(ha->pci_dev, "%s: " in qla_poll_write_list()
1004 __func__, wr_e->ar_addr, wr_e->ar_value, in qla_poll_write_list()
1005 ce_hdr->delay_to, phdr->tmask, in qla_poll_write_list()
1006 phdr->tvalue); in qla_poll_write_list()
1023 for (i = 0; i < ce_hdr->opcount; i++, rd_e++) { in qla_poll_read_list()
1024 if (ql_rdwr_indreg32(ha, rd_e->ar_addr, &rd_e->ar_value, 0)) { in qla_poll_read_list()
1025 device_printf(ha->pci_dev, in qla_poll_read_list()
1027 rd_e->ar_addr, rd_e->ar_value); in qla_poll_read_list()
1028 return -1; in qla_poll_read_list()
1031 if (ce_hdr->delay_to) { in qla_poll_read_list()
1032 if (qla_poll_reg(ha, rd_e->ar_addr, ce_hdr->delay_to, in qla_poll_read_list()
1033 phdr->tmask, phdr->tvalue)) { in qla_poll_read_list()
1034 return (-1); in qla_poll_read_list()
1036 if (ql_rdwr_indreg32(ha, rd_e->dr_addr, in qla_poll_read_list()
1038 device_printf(ha->pci_dev, in qla_poll_read_list()
1040 __func__, rd_e->ar_addr); in qla_poll_read_list()
1041 return -1; in qla_poll_read_list()
1044 ha->hw.rst_seq[ha->hw.rst_seq_idx++] = value; in qla_poll_read_list()
1045 if (ha->hw.rst_seq_idx == Q8_MAX_RESET_SEQ_IDX) in qla_poll_read_list()
1046 ha->hw.rst_seq_idx = 1; in qla_poll_read_list()
1058 if (hdr->index_a >= Q8_MAX_RESET_SEQ_IDX) { in qla_rdmwr()
1059 device_printf(ha->pci_dev, "%s: [0x%08x] error\n", __func__, in qla_rdmwr()
1060 hdr->index_a); in qla_rdmwr()
1061 return -1; in qla_rdmwr()
1064 if (hdr->index_a) { in qla_rdmwr()
1065 value = ha->hw.rst_seq[hdr->index_a]; in qla_rdmwr()
1068 device_printf(ha->pci_dev, "%s: [0x%08x] error\n", in qla_rdmwr()
1070 return -1; in qla_rdmwr()
1074 value &= hdr->and_value; in qla_rdmwr()
1075 value <<= hdr->shl; in qla_rdmwr()
1076 value >>= hdr->shr; in qla_rdmwr()
1077 value |= hdr->or_value; in qla_rdmwr()
1078 value ^= hdr->xor_value; in qla_rdmwr()
1081 device_printf(ha->pci_dev, "%s: [0x%08x] error\n", __func__, in qla_rdmwr()
1083 return -1; in qla_rdmwr()
1100 for (i = 0; i < ce_hdr->opcount; i++, rdmwr_e++) { in qla_read_modify_write_list()
1101 if (qla_rdmwr(ha, rdmwr_e->rd_addr, rdmwr_e->wr_addr, in qla_read_modify_write_list()
1103 return -1; in qla_read_modify_write_list()
1105 if (ce_hdr->delay_to) { in qla_read_modify_write_list()
1106 DELAY(ce_hdr->delay_to); in qla_read_modify_write_list()
1123 switch (ce_hdr->opcode) { in qla_tmplt_execute()
1158 if (ce_hdr->delay_to) { in qla_tmplt_execute()
1159 qla_mdelay(__func__, ce_hdr->delay_to); in qla_tmplt_execute()
1175 buf += ce_hdr->size; in qla_tmplt_execute()
1196 len32 -= 4; in qla_load_offchip_mem()
1198 return -1; in qla_load_offchip_mem()
1275 bzero(ha->hw.rst_seq, sizeof (ha->hw.rst_seq)); in qla_ld_fw_init()
1279 device_printf(ha->pci_dev, "%s: reset sequence\n", __func__); in qla_ld_fw_init()
1281 (uint32_t)hdr->size)) { in qla_ld_fw_init()
1282 device_printf(ha->pci_dev, "%s: reset seq checksum failed\n", in qla_ld_fw_init()
1284 return -1; in qla_ld_fw_init()
1287 buf = ql83xx_resetseq + hdr->stop_seq_off; in qla_ld_fw_init()
1289 device_printf(ha->pci_dev, "%s: stop sequence\n", __func__); in qla_ld_fw_init()
1290 if (qla_tmplt_execute(ha, buf, index , &end_idx, hdr->nentries)) { in qla_ld_fw_init()
1291 device_printf(ha->pci_dev, "%s: stop seq failed\n", __func__); in qla_ld_fw_init()
1292 return -1; in qla_ld_fw_init()
1297 buf = ql83xx_resetseq + hdr->init_seq_off; in qla_ld_fw_init()
1299 device_printf(ha->pci_dev, "%s: init sequence\n", __func__); in qla_ld_fw_init()
1300 if (qla_tmplt_execute(ha, buf, index , &end_idx, hdr->nentries)) { in qla_ld_fw_init()
1301 device_printf(ha->pci_dev, "%s: init seq failed\n", __func__); in qla_ld_fw_init()
1302 return -1; in qla_ld_fw_init()
1310 return -1; in qla_ld_fw_init()
1313 return -1; in qla_ld_fw_init()
1319 buf = ql83xx_resetseq + hdr->start_seq_off; in qla_ld_fw_init()
1321 device_printf(ha->pci_dev, "%s: start sequence\n", __func__); in qla_ld_fw_init()
1322 if (qla_tmplt_execute(ha, buf, index , &end_idx, hdr->nentries)) { in qla_ld_fw_init()
1323 device_printf(ha->pci_dev, "%s: init seq failed\n", __func__); in qla_ld_fw_init()
1324 return -1; in qla_ld_fw_init()
1337 bzero(ha->hw.rst_seq, sizeof (ha->hw.rst_seq)); in ql_stop_sequence()
1342 (uint32_t)hdr->size)) { in ql_stop_sequence()
1343 device_printf(ha->pci_dev, "%s: reset seq checksum failed\n", in ql_stop_sequence()
1345 return (-1); in ql_stop_sequence()
1348 buf = ql83xx_resetseq + hdr->stop_seq_off; in ql_stop_sequence()
1350 device_printf(ha->pci_dev, "%s: stop sequence\n", __func__); in ql_stop_sequence()
1351 if (qla_tmplt_execute(ha, buf, index , &end_idx, hdr->nentries)) { in ql_stop_sequence()
1352 device_printf(ha->pci_dev, "%s: stop seq failed\n", __func__); in ql_stop_sequence()
1353 return (-1); in ql_stop_sequence()
1366 bzero(ha->hw.rst_seq, sizeof (ha->hw.rst_seq)); in ql_start_sequence()
1371 (uint32_t)hdr->size)) { in ql_start_sequence()
1372 device_printf(ha->pci_dev, "%s: reset seq checksum failed\n", in ql_start_sequence()
1374 return (-1); in ql_start_sequence()
1377 buf = ql83xx_resetseq + hdr->init_seq_off; in ql_start_sequence()
1379 device_printf(ha->pci_dev, "%s: init sequence\n", __func__); in ql_start_sequence()
1380 if (qla_tmplt_execute(ha, buf, index , &end_idx, hdr->nentries)) { in ql_start_sequence()
1381 device_printf(ha->pci_dev, "%s: init seq failed\n", __func__); in ql_start_sequence()
1382 return (-1); in ql_start_sequence()
1390 return -1; in ql_start_sequence()
1393 return -1; in ql_start_sequence()
1399 buf = ql83xx_resetseq + hdr->start_seq_off; in ql_start_sequence()
1401 device_printf(ha->pci_dev, "%s: start sequence\n", __func__); in ql_start_sequence()
1402 if (qla_tmplt_execute(ha, buf, index , &end_idx, hdr->nentries)) { in ql_start_sequence()
1403 device_printf(ha->pci_dev, "%s: init seq failed\n", __func__); in ql_start_sequence()
1404 return -1; in ql_start_sequence()