Lines Matching refs:ha
22 qla2x00_lock_nvram_access(struct qla_hw_data *ha) in qla2x00_lock_nvram_access() argument
25 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_lock_nvram_access()
27 if (!IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA2300(ha)) { in qla2x00_lock_nvram_access()
55 qla2x00_unlock_nvram_access(struct qla_hw_data *ha) in qla2x00_unlock_nvram_access() argument
57 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_unlock_nvram_access()
59 if (!IS_QLA2100(ha) && !IS_QLA2200(ha) && !IS_QLA2300(ha)) { in qla2x00_unlock_nvram_access()
71 qla2x00_nv_write(struct qla_hw_data *ha, uint16_t data) in qla2x00_nv_write() argument
73 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_nv_write()
103 qla2x00_nvram_request(struct qla_hw_data *ha, uint32_t nv_cmd) in qla2x00_nvram_request() argument
106 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_nvram_request()
114 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_nvram_request()
116 qla2x00_nv_write(ha, 0); in qla2x00_nvram_request()
152 qla2x00_get_nvram_word(struct qla_hw_data *ha, uint32_t addr) in qla2x00_get_nvram_word() argument
159 data = qla2x00_nvram_request(ha, nv_cmd); in qla2x00_get_nvram_word()
169 qla2x00_nv_deselect(struct qla_hw_data *ha) in qla2x00_nv_deselect() argument
171 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_nv_deselect()
185 qla2x00_write_nvram_word(struct qla_hw_data *ha, uint32_t addr, __le16 data) in qla2x00_write_nvram_word() argument
190 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_write_nvram_word()
191 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qla2x00_write_nvram_word()
193 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word()
194 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word()
195 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word()
198 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word()
200 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word()
208 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word()
210 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word()
215 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word()
231 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word()
234 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word()
236 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word()
238 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word()
242 qla2x00_write_nvram_word_tmo(struct qla_hw_data *ha, uint32_t addr, in qla2x00_write_nvram_word_tmo() argument
248 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_write_nvram_word_tmo()
252 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word_tmo()
253 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word_tmo()
254 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word_tmo()
257 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word_tmo()
259 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word_tmo()
267 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word_tmo()
269 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word_tmo()
274 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word_tmo()
288 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word_tmo()
291 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_write_nvram_word_tmo()
293 qla2x00_nv_write(ha, 0); in qla2x00_write_nvram_word_tmo()
295 qla2x00_nv_deselect(ha); in qla2x00_write_nvram_word_tmo()
305 qla2x00_clear_nvram_protection(struct qla_hw_data *ha) in qla2x00_clear_nvram_protection() argument
308 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_clear_nvram_protection()
311 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qla2x00_clear_nvram_protection()
316 wprot_old = cpu_to_le16(qla2x00_get_nvram_word(ha, ha->nvram_base)); in qla2x00_clear_nvram_protection()
317 stat = qla2x00_write_nvram_word_tmo(ha, ha->nvram_base, in qla2x00_clear_nvram_protection()
319 wprot = cpu_to_le16(qla2x00_get_nvram_word(ha, ha->nvram_base)); in qla2x00_clear_nvram_protection()
322 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_clear_nvram_protection()
323 qla2x00_nv_write(ha, 0); in qla2x00_clear_nvram_protection()
324 qla2x00_nv_write(ha, 0); in qla2x00_clear_nvram_protection()
326 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_clear_nvram_protection()
328 qla2x00_nv_deselect(ha); in qla2x00_clear_nvram_protection()
331 qla2x00_nv_write(ha, NVR_PR_ENABLE | NVR_DATA_OUT); in qla2x00_clear_nvram_protection()
332 qla2x00_nv_write(ha, NVR_PR_ENABLE); in qla2x00_clear_nvram_protection()
333 qla2x00_nv_write(ha, NVR_PR_ENABLE); in qla2x00_clear_nvram_protection()
335 qla2x00_nv_write(ha, NVR_DATA_OUT | NVR_PR_ENABLE); in qla2x00_clear_nvram_protection()
337 qla2x00_nv_deselect(ha); in qla2x00_clear_nvram_protection()
340 qla2x00_nv_write(ha, NVR_PR_ENABLE | NVR_DATA_OUT); in qla2x00_clear_nvram_protection()
341 qla2x00_nv_write(ha, NVR_PR_ENABLE | NVR_DATA_OUT); in qla2x00_clear_nvram_protection()
342 qla2x00_nv_write(ha, NVR_PR_ENABLE | NVR_DATA_OUT); in qla2x00_clear_nvram_protection()
344 qla2x00_nv_write(ha, NVR_DATA_OUT | NVR_PR_ENABLE); in qla2x00_clear_nvram_protection()
346 qla2x00_nv_deselect(ha); in qla2x00_clear_nvram_protection()
365 qla2x00_write_nvram_word(ha, ha->nvram_base, wprot_old); in qla2x00_clear_nvram_protection()
371 qla2x00_set_nvram_protection(struct qla_hw_data *ha, int stat) in qla2x00_set_nvram_protection() argument
373 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_set_nvram_protection()
375 scsi_qla_host_t *vha = pci_get_drvdata(ha->pdev); in qla2x00_set_nvram_protection()
382 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_set_nvram_protection()
383 qla2x00_nv_write(ha, 0); in qla2x00_set_nvram_protection()
384 qla2x00_nv_write(ha, 0); in qla2x00_set_nvram_protection()
386 qla2x00_nv_write(ha, NVR_DATA_OUT); in qla2x00_set_nvram_protection()
388 qla2x00_nv_deselect(ha); in qla2x00_set_nvram_protection()
391 qla2x00_nv_write(ha, NVR_PR_ENABLE | NVR_DATA_OUT); in qla2x00_set_nvram_protection()
392 qla2x00_nv_write(ha, NVR_PR_ENABLE); in qla2x00_set_nvram_protection()
393 qla2x00_nv_write(ha, NVR_PR_ENABLE); in qla2x00_set_nvram_protection()
395 qla2x00_nv_write(ha, NVR_DATA_OUT | NVR_PR_ENABLE); in qla2x00_set_nvram_protection()
397 qla2x00_nv_deselect(ha); in qla2x00_set_nvram_protection()
400 qla2x00_nv_write(ha, NVR_PR_ENABLE | NVR_DATA_OUT); in qla2x00_set_nvram_protection()
401 qla2x00_nv_write(ha, NVR_PR_ENABLE); in qla2x00_set_nvram_protection()
402 qla2x00_nv_write(ha, NVR_PR_ENABLE | NVR_DATA_OUT); in qla2x00_set_nvram_protection()
404 qla2x00_nv_write(ha, NVR_PR_ENABLE); in qla2x00_set_nvram_protection()
406 qla2x00_nv_deselect(ha); in qla2x00_set_nvram_protection()
429 flash_conf_addr(struct qla_hw_data *ha, uint32_t faddr) in flash_conf_addr() argument
431 return ha->flash_conf_off + faddr; in flash_conf_addr()
435 flash_data_addr(struct qla_hw_data *ha, uint32_t faddr) in flash_data_addr() argument
437 return ha->flash_data_off + faddr; in flash_data_addr()
441 nvram_conf_addr(struct qla_hw_data *ha, uint32_t naddr) in nvram_conf_addr() argument
443 return ha->nvram_conf_off + naddr; in nvram_conf_addr()
447 nvram_data_addr(struct qla_hw_data *ha, uint32_t naddr) in nvram_data_addr() argument
449 return ha->nvram_data_off + naddr; in nvram_data_addr()
453 qla24xx_read_flash_dword(struct qla_hw_data *ha, uint32_t addr, uint32_t *data) in qla24xx_read_flash_dword() argument
455 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_read_flash_dword()
469 ql_log(ql_log_warn, pci_get_drvdata(ha->pdev), 0x7090, in qla24xx_read_flash_dword()
481 struct qla_hw_data *ha = vha->hw; in qla24xx_read_flash_data() local
484 faddr = flash_data_addr(ha, faddr); in qla24xx_read_flash_data()
486 ret = qla24xx_read_flash_dword(ha, faddr, dwptr); in qla24xx_read_flash_data()
496 qla24xx_write_flash_dword(struct qla_hw_data *ha, uint32_t addr, uint32_t data) in qla24xx_write_flash_dword() argument
498 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_write_flash_dword()
511 ql_log(ql_log_warn, pci_get_drvdata(ha->pdev), 0x7090, in qla24xx_write_flash_dword()
517 qla24xx_get_flash_manufacturer(struct qla_hw_data *ha, uint8_t *man_id, in qla24xx_get_flash_manufacturer() argument
524 faddr = flash_conf_addr(ha, 0x03ab); in qla24xx_get_flash_manufacturer()
525 if (!qla24xx_read_flash_dword(ha, faddr, &ids)) { in qla24xx_get_flash_manufacturer()
538 faddr = flash_conf_addr(ha, 0x009f); in qla24xx_get_flash_manufacturer()
539 if (!qla24xx_read_flash_dword(ha, faddr, &ids)) { in qla24xx_get_flash_manufacturer()
553 struct qla_hw_data *ha = vha->hw; in qla2xxx_find_flt_start() local
554 struct req_que *req = ha->req_q_map[0]; in qla2xxx_find_flt_start()
566 if (IS_QLA24XX_TYPE(ha)) in qla2xxx_find_flt_start()
568 else if (IS_QLA25XX(ha)) in qla2xxx_find_flt_start()
570 else if (IS_QLA81XX(ha)) in qla2xxx_find_flt_start()
572 else if (IS_P3P_TYPE(ha)) { in qla2xxx_find_flt_start()
575 } else if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) { in qla2xxx_find_flt_start()
578 } else if (IS_QLA28XX(ha)) { in qla2xxx_find_flt_start()
670 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_flt_info() local
671 uint32_t def = IS_QLA81XX(ha) ? 2 : IS_QLA25XX(ha) ? 1 : 0; in qla2xxx_get_flt_info()
672 struct qla_flt_header *flt = ha->flt; in qla2xxx_get_flt_info()
681 ha->flt_region_fcp_prio = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
684 ha->flt_region_flt = flt_addr; in qla2xxx_get_flt_info()
685 wptr = (__force __le16 *)ha->flt; in qla2xxx_get_flt_info()
686 ha->isp_ops->read_optrom(vha, flt, flt_addr << 2, in qla2xxx_get_flt_info()
725 if (!IS_QLA8031(ha)) in qla2xxx_get_flt_info()
727 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
730 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
732 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
735 ha->flt_region_boot = start; in qla2xxx_get_flt_info()
738 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
740 ha->flt_region_vpd_nvram = start; in qla2xxx_get_flt_info()
741 if (IS_P3P_TYPE(ha)) in qla2xxx_get_flt_info()
743 if (ha->port_no == 0) in qla2xxx_get_flt_info()
744 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
747 if (IS_P3P_TYPE(ha) || IS_QLA8031(ha)) in qla2xxx_get_flt_info()
749 if (ha->port_no == 1) in qla2xxx_get_flt_info()
750 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
753 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
755 if (ha->port_no == 2) in qla2xxx_get_flt_info()
756 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
759 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
761 if (ha->port_no == 3) in qla2xxx_get_flt_info()
762 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
765 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
767 if (ha->port_no == 0) in qla2xxx_get_flt_info()
768 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
771 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
773 if (ha->port_no == 1) in qla2xxx_get_flt_info()
774 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
777 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
779 if (ha->port_no == 2) in qla2xxx_get_flt_info()
780 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
783 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
785 if (ha->port_no == 3) in qla2xxx_get_flt_info()
786 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
789 ha->flt_region_fdt = start; in qla2xxx_get_flt_info()
792 if (ha->port_no == 0) in qla2xxx_get_flt_info()
793 ha->flt_region_npiv_conf = start; in qla2xxx_get_flt_info()
796 if (ha->port_no == 1) in qla2xxx_get_flt_info()
797 ha->flt_region_npiv_conf = start; in qla2xxx_get_flt_info()
800 ha->flt_region_gold_fw = start; in qla2xxx_get_flt_info()
803 if (ha->port_no == 0) in qla2xxx_get_flt_info()
804 ha->flt_region_fcp_prio = start; in qla2xxx_get_flt_info()
807 if (ha->port_no == 1) in qla2xxx_get_flt_info()
808 ha->flt_region_fcp_prio = start; in qla2xxx_get_flt_info()
811 ha->flt_region_boot = start; in qla2xxx_get_flt_info()
814 if (IS_QLA8044(ha)) in qla2xxx_get_flt_info()
815 ha->flt_region_boot = start; in qla2xxx_get_flt_info()
818 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
821 if (IS_CNA_CAPABLE(ha)) in qla2xxx_get_flt_info()
822 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
825 ha->flt_region_gold_fw = start; in qla2xxx_get_flt_info()
828 ha->flt_region_bootload = start; in qla2xxx_get_flt_info()
831 if (IS_CNA_CAPABLE(ha)) in qla2xxx_get_flt_info()
832 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
835 if (!(IS_QLA8031(ha) || IS_QLA8044(ha))) in qla2xxx_get_flt_info()
837 if (ha->port_no == 0) in qla2xxx_get_flt_info()
838 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
841 if (!(IS_QLA8031(ha) || IS_QLA8044(ha))) in qla2xxx_get_flt_info()
843 if (ha->port_no == 1) in qla2xxx_get_flt_info()
844 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
847 if (IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
848 ha->flt_region_img_status_pri = start; in qla2xxx_get_flt_info()
851 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
852 ha->flt_region_img_status_sec = start; in qla2xxx_get_flt_info()
855 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
856 ha->flt_region_fw_sec = start; in qla2xxx_get_flt_info()
859 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
860 ha->flt_region_boot_sec = start; in qla2xxx_get_flt_info()
863 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
864 ha->flt_region_aux_img_status_pri = start; in qla2xxx_get_flt_info()
867 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
868 ha->flt_region_aux_img_status_sec = start; in qla2xxx_get_flt_info()
871 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
872 if (ha->port_no == 0) in qla2xxx_get_flt_info()
873 ha->flt_region_nvram_sec = start; in qla2xxx_get_flt_info()
876 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
877 if (ha->port_no == 1) in qla2xxx_get_flt_info()
878 ha->flt_region_nvram_sec = start; in qla2xxx_get_flt_info()
881 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
882 if (ha->port_no == 2) in qla2xxx_get_flt_info()
883 ha->flt_region_nvram_sec = start; in qla2xxx_get_flt_info()
886 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
887 if (ha->port_no == 3) in qla2xxx_get_flt_info()
888 ha->flt_region_nvram_sec = start; in qla2xxx_get_flt_info()
892 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla2xxx_get_flt_info()
893 ha->flt_region_vpd_nvram_sec = start; in qla2xxx_get_flt_info()
894 if (ha->port_no == 0) in qla2xxx_get_flt_info()
895 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
900 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
901 if (ha->port_no == 1) in qla2xxx_get_flt_info()
902 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
906 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
907 if (ha->port_no == 2) in qla2xxx_get_flt_info()
908 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
912 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
913 if (ha->port_no == 3) in qla2xxx_get_flt_info()
914 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
923 ha->flt_region_fw = def_fw[def]; in qla2xxx_get_flt_info()
924 ha->flt_region_boot = def_boot[def]; in qla2xxx_get_flt_info()
925 ha->flt_region_vpd_nvram = def_vpd_nvram[def]; in qla2xxx_get_flt_info()
926 ha->flt_region_vpd = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
928 ha->flt_region_nvram = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
930 ha->flt_region_fdt = def_fdt[def]; in qla2xxx_get_flt_info()
931 ha->flt_region_npiv_conf = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
937 loc, ha->flt_region_boot, ha->flt_region_fw, in qla2xxx_get_flt_info()
938 ha->flt_region_vpd_nvram, ha->flt_region_vpd, ha->flt_region_nvram, in qla2xxx_get_flt_info()
939 ha->flt_region_fdt, ha->flt_region_flt, ha->flt_region_npiv_conf, in qla2xxx_get_flt_info()
940 ha->flt_region_fcp_prio); in qla2xxx_get_flt_info()
950 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_fdt_info() local
951 struct req_que *req = ha->req_q_map[0]; in qla2xxx_get_fdt_info()
958 ha->isp_ops->read_optrom(vha, fdt, ha->flt_region_fdt << 2, in qla2xxx_get_fdt_info()
980 ha->fdt_wrt_disable = fdt->wrt_disable_bits; in qla2xxx_get_fdt_info()
981 ha->fdt_wrt_enable = fdt->wrt_enable_bits; in qla2xxx_get_fdt_info()
982 ha->fdt_wrt_sts_reg_cmd = fdt->wrt_sts_reg_cmd; in qla2xxx_get_fdt_info()
983 if (IS_QLA8044(ha)) in qla2xxx_get_fdt_info()
984 ha->fdt_erase_cmd = fdt->erase_cmd; in qla2xxx_get_fdt_info()
986 ha->fdt_erase_cmd = in qla2xxx_get_fdt_info()
987 flash_conf_addr(ha, 0x0300 | fdt->erase_cmd); in qla2xxx_get_fdt_info()
988 ha->fdt_block_size = le32_to_cpu(fdt->block_size); in qla2xxx_get_fdt_info()
990 ha->fdt_unprotect_sec_cmd = flash_conf_addr(ha, 0x0300 | in qla2xxx_get_fdt_info()
992 ha->fdt_protect_sec_cmd = fdt->protect_sec_cmd ? in qla2xxx_get_fdt_info()
993 flash_conf_addr(ha, 0x0300 | fdt->protect_sec_cmd) : in qla2xxx_get_fdt_info()
994 flash_conf_addr(ha, 0x0336); in qla2xxx_get_fdt_info()
999 if (IS_P3P_TYPE(ha)) { in qla2xxx_get_fdt_info()
1000 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1003 qla24xx_get_flash_manufacturer(ha, &man_id, &flash_id); in qla2xxx_get_fdt_info()
1006 ha->fdt_wrt_disable = 0x9c; in qla2xxx_get_fdt_info()
1007 ha->fdt_erase_cmd = flash_conf_addr(ha, 0x03d8); in qla2xxx_get_fdt_info()
1011 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1013 ha->fdt_block_size = FLASH_BLK_SIZE_32K; in qla2xxx_get_fdt_info()
1016 ha->fdt_erase_cmd = flash_conf_addr(ha, 0x0352); in qla2xxx_get_fdt_info()
1019 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1022 ha->fdt_block_size = FLASH_BLK_SIZE_4K; in qla2xxx_get_fdt_info()
1023 ha->fdt_erase_cmd = flash_conf_addr(ha, 0x0320); in qla2xxx_get_fdt_info()
1024 ha->fdt_unprotect_sec_cmd = flash_conf_addr(ha, 0x0339); in qla2xxx_get_fdt_info()
1025 ha->fdt_protect_sec_cmd = flash_conf_addr(ha, 0x0336); in qla2xxx_get_fdt_info()
1029 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1037 ha->fdt_erase_cmd, ha->fdt_protect_sec_cmd, in qla2xxx_get_fdt_info()
1038 ha->fdt_wrt_disable, ha->fdt_block_size); in qla2xxx_get_fdt_info()
1047 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_idc_param() local
1048 struct req_que *req = ha->req_q_map[0]; in qla2xxx_get_idc_param()
1050 if (!(IS_P3P_TYPE(ha))) in qla2xxx_get_idc_param()
1054 ha->isp_ops->read_optrom(vha, req->ring, QLA82XX_IDC_PARAM_ADDR, 8); in qla2xxx_get_idc_param()
1057 ha->fcoe_dev_init_timeout = QLA82XX_ROM_DEV_INIT_TIMEOUT; in qla2xxx_get_idc_param()
1058 ha->fcoe_reset_timeout = QLA82XX_ROM_DRV_RESET_ACK_TIMEOUT; in qla2xxx_get_idc_param()
1060 ha->fcoe_dev_init_timeout = le32_to_cpu(*wptr); in qla2xxx_get_idc_param()
1062 ha->fcoe_reset_timeout = le32_to_cpu(*wptr); in qla2xxx_get_idc_param()
1066 "fcoe_reset_timeout=%d.\n", ha->fcoe_dev_init_timeout, in qla2xxx_get_idc_param()
1067 ha->fcoe_reset_timeout); in qla2xxx_get_idc_param()
1076 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_flash_info() local
1078 if (!IS_QLA24XX_TYPE(ha) && !IS_QLA25XX(ha) && in qla2xxx_get_flash_info()
1079 !IS_CNA_CAPABLE(ha) && !IS_QLA2031(ha) && in qla2xxx_get_flash_info()
1080 !IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flash_info()
1104 struct qla_hw_data *ha = vha->hw; in qla2xxx_flash_npiv_conf() local
1106 if (!IS_QLA24XX_TYPE(ha) && !IS_QLA25XX(ha) && in qla2xxx_flash_npiv_conf()
1107 !IS_CNA_CAPABLE(ha) && !IS_QLA2031(ha)) in qla2xxx_flash_npiv_conf()
1110 if (ha->flags.nic_core_reset_hdlr_active) in qla2xxx_flash_npiv_conf()
1113 if (IS_QLA8044(ha)) in qla2xxx_flash_npiv_conf()
1116 ha->isp_ops->read_optrom(vha, &hdr, ha->flt_region_npiv_conf << 2, in qla2xxx_flash_npiv_conf()
1136 ha->isp_ops->read_optrom(vha, data, ha->flt_region_npiv_conf << 2, in qla2xxx_flash_npiv_conf()
1158 memcpy(&ha->npiv_info[i], entry, sizeof(struct qla_npiv_entry)); in qla2xxx_flash_npiv_conf()
1194 struct qla_hw_data *ha = vha->hw; in qla24xx_unprotect_flash() local
1195 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_unprotect_flash()
1197 if (ha->flags.fac_supported) in qla24xx_unprotect_flash()
1205 if (!ha->fdt_wrt_disable) in qla24xx_unprotect_flash()
1209 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); in qla24xx_unprotect_flash()
1211 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); in qla24xx_unprotect_flash()
1219 struct qla_hw_data *ha = vha->hw; in qla24xx_protect_flash() local
1220 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_protect_flash()
1224 if (ha->flags.fac_supported) in qla24xx_protect_flash()
1227 if (!ha->fdt_wrt_disable) in qla24xx_protect_flash()
1231 faddr = flash_conf_addr(ha, 0x101); in qla24xx_protect_flash()
1232 qla24xx_write_flash_dword(ha, faddr, ha->fdt_wrt_disable); in qla24xx_protect_flash()
1233 faddr = flash_conf_addr(ha, 0x5); in qla24xx_protect_flash()
1235 if (!qla24xx_read_flash_dword(ha, faddr, &dword)) { in qla24xx_protect_flash()
1253 struct qla_hw_data *ha = vha->hw; in qla24xx_erase_sector() local
1256 if (ha->flags.fac_supported) { in qla24xx_erase_sector()
1258 finish = start + (ha->fdt_block_size >> 2) - 1; in qla24xx_erase_sector()
1259 return qla81xx_fac_erase_sector(vha, flash_data_addr(ha, in qla24xx_erase_sector()
1260 start), flash_data_addr(ha, finish)); in qla24xx_erase_sector()
1263 return qla24xx_write_flash_dword(ha, ha->fdt_erase_cmd, in qla24xx_erase_sector()
1278 struct qla_hw_data *ha = vha->hw; in qla24xx_write_flash_data() local
1280 if (!IS_QLA25XX(ha) && !IS_QLA81XX(ha) && !IS_QLA83XX(ha) && in qla24xx_write_flash_data()
1281 !IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla24xx_write_flash_data()
1285 optrom = dma_alloc_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla24xx_write_flash_data()
1302 rest_addr = (ha->fdt_block_size >> 2) - 1; in qla24xx_write_flash_data()
1332 flash_data_addr(ha, faddr), dburst); in qla24xx_write_flash_data()
1342 flash_data_addr(ha, faddr), optrom, in qla24xx_write_flash_data()
1345 dma_free_coherent(&ha->pdev->dev, in qla24xx_write_flash_data()
1348 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla24xx_write_flash_data()
1355 ret = qla24xx_write_flash_dword(ha, in qla24xx_write_flash_data()
1356 flash_data_addr(ha, faddr), le32_to_cpu(*dwptr)); in qla24xx_write_flash_data()
1372 dma_free_coherent(&ha->pdev->dev, in qla24xx_write_flash_data()
1384 struct qla_hw_data *ha = vha->hw; in qla2x00_read_nvram_data() local
1388 qla2x00_lock_nvram_access(ha); in qla2x00_read_nvram_data()
1390 wptr[i] = cpu_to_le16(qla2x00_get_nvram_word(ha, in qla2x00_read_nvram_data()
1392 qla2x00_unlock_nvram_access(ha); in qla2x00_read_nvram_data()
1401 struct qla_hw_data *ha = vha->hw; in qla24xx_read_nvram_data() local
1405 if (IS_P3P_TYPE(ha)) in qla24xx_read_nvram_data()
1409 naddr = nvram_data_addr(ha, naddr); in qla24xx_read_nvram_data()
1412 if (qla24xx_read_flash_dword(ha, naddr, dwptr)) in qla24xx_read_nvram_data()
1428 struct qla_hw_data *ha = vha->hw; in qla2x00_write_nvram_data() local
1432 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_write_nvram_data()
1433 qla2x00_lock_nvram_access(ha); in qla2x00_write_nvram_data()
1436 stat = qla2x00_clear_nvram_protection(ha); in qla2x00_write_nvram_data()
1440 qla2x00_write_nvram_word(ha, naddr, in qla2x00_write_nvram_data()
1446 qla2x00_set_nvram_protection(ha, stat); in qla2x00_write_nvram_data()
1448 qla2x00_unlock_nvram_access(ha); in qla2x00_write_nvram_data()
1449 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_write_nvram_data()
1458 struct qla_hw_data *ha = vha->hw; in qla24xx_write_nvram_data() local
1459 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_write_nvram_data()
1466 if (IS_P3P_TYPE(ha)) in qla24xx_write_nvram_data()
1475 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0); in qla24xx_write_nvram_data()
1476 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0); in qla24xx_write_nvram_data()
1479 naddr = nvram_data_addr(ha, naddr); in qla24xx_write_nvram_data()
1482 if (qla24xx_write_flash_dword(ha, naddr, le32_to_cpu(*dwptr))) { in qla24xx_write_nvram_data()
1491 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0x8c); in qla24xx_write_nvram_data()
1505 struct qla_hw_data *ha = vha->hw; in qla25xx_read_nvram_data() local
1510 naddr = flash_data_addr(ha, ha->flt_region_vpd_nvram | naddr); in qla25xx_read_nvram_data()
1513 if (qla24xx_read_flash_dword(ha, naddr, dwptr)) in qla25xx_read_nvram_data()
1527 struct qla_hw_data *ha = vha->hw; in qla25xx_write_nvram_data() local
1532 ha->isp_ops->read_optrom(vha, dbuf, ha->flt_region_vpd_nvram << 2, in qla25xx_write_nvram_data()
1535 ha->isp_ops->write_optrom(vha, dbuf, ha->flt_region_vpd_nvram << 2, in qla25xx_write_nvram_data()
1543 qla2x00_flip_colors(struct qla_hw_data *ha, uint16_t *pflags) in qla2x00_flip_colors() argument
1545 if (IS_QLA2322(ha)) { in qla2x00_flip_colors()
1547 if (ha->beacon_color_state == QLA_LED_ALL_ON) { in qla2x00_flip_colors()
1549 ha->beacon_color_state = 0; in qla2x00_flip_colors()
1553 ha->beacon_color_state = QLA_LED_ALL_ON; in qla2x00_flip_colors()
1558 if (ha->beacon_color_state == QLA_LED_GRN_ON) { in qla2x00_flip_colors()
1560 ha->beacon_color_state = 0; in qla2x00_flip_colors()
1564 ha->beacon_color_state = QLA_LED_GRN_ON; in qla2x00_flip_colors()
1579 struct qla_hw_data *ha = vha->hw; in qla2x00_beacon_blink() local
1580 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_beacon_blink()
1582 if (IS_P3P_TYPE(ha)) in qla2x00_beacon_blink()
1585 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_beacon_blink()
1588 if (ha->pio_address) { in qla2x00_beacon_blink()
1589 gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe)); in qla2x00_beacon_blink()
1590 gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod)); in qla2x00_beacon_blink()
1599 if (ha->pio_address) { in qla2x00_beacon_blink()
1600 WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable); in qla2x00_beacon_blink()
1606 qla2x00_flip_colors(ha, &led_color); in qla2x00_beacon_blink()
1615 if (ha->pio_address) { in qla2x00_beacon_blink()
1616 WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data); in qla2x00_beacon_blink()
1622 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_beacon_blink()
1631 struct qla_hw_data *ha = vha->hw; in qla2x00_beacon_on() local
1632 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_beacon_on()
1634 ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING; in qla2x00_beacon_on()
1635 ha->fw_options[1] |= FO1_DISABLE_GPIO6_7; in qla2x00_beacon_on()
1637 if (qla2x00_set_fw_options(vha, ha->fw_options) != QLA_SUCCESS) { in qla2x00_beacon_on()
1644 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_beacon_on()
1645 if (ha->pio_address) { in qla2x00_beacon_on()
1646 gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe)); in qla2x00_beacon_on()
1647 gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod)); in qla2x00_beacon_on()
1655 if (ha->pio_address) { in qla2x00_beacon_on()
1656 WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable); in qla2x00_beacon_on()
1664 if (ha->pio_address) { in qla2x00_beacon_on()
1665 WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data); in qla2x00_beacon_on()
1670 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_beacon_on()
1676 ha->beacon_blink_led = 1; in qla2x00_beacon_on()
1677 ha->beacon_color_state = 0; in qla2x00_beacon_on()
1686 struct qla_hw_data *ha = vha->hw; in qla2x00_beacon_off() local
1688 ha->beacon_blink_led = 0; in qla2x00_beacon_off()
1691 if (IS_QLA2322(ha)) in qla2x00_beacon_off()
1692 ha->beacon_color_state = QLA_LED_ALL_ON; in qla2x00_beacon_off()
1694 ha->beacon_color_state = QLA_LED_GRN_ON; in qla2x00_beacon_off()
1696 ha->isp_ops->beacon_blink(vha); /* This turns green LED off */ in qla2x00_beacon_off()
1698 ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING; in qla2x00_beacon_off()
1699 ha->fw_options[1] &= ~FO1_DISABLE_GPIO6_7; in qla2x00_beacon_off()
1701 rval = qla2x00_set_fw_options(vha, ha->fw_options); in qla2x00_beacon_off()
1710 qla24xx_flip_colors(struct qla_hw_data *ha, uint16_t *pflags) in qla24xx_flip_colors() argument
1713 if (ha->beacon_color_state == QLA_LED_ALL_ON) { in qla24xx_flip_colors()
1715 ha->beacon_color_state = 0; in qla24xx_flip_colors()
1719 ha->beacon_color_state = QLA_LED_ALL_ON; in qla24xx_flip_colors()
1730 struct qla_hw_data *ha = vha->hw; in qla24xx_beacon_blink() local
1731 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_beacon_blink()
1734 spin_lock_irqsave(&ha->hardware_lock, flags); in qla24xx_beacon_blink()
1744 qla24xx_flip_colors(ha, &led_color); in qla24xx_beacon_blink()
1755 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla24xx_beacon_blink()
1759 qla83xx_select_led_port(struct qla_hw_data *ha) in qla83xx_select_led_port() argument
1763 if (!IS_QLA83XX(ha) && !IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla83xx_select_led_port()
1766 if (ha->port_no == 0) in qla83xx_select_led_port()
1779 struct qla_hw_data *ha = vha->hw; in qla83xx_beacon_blink() local
1784 if (!IS_QLA83XX(ha) && !IS_QLA81XX(ha) && !IS_QLA27XX(ha) && in qla83xx_beacon_blink()
1785 !IS_QLA28XX(ha)) in qla83xx_beacon_blink()
1788 if (!ha->beacon_blink_led) in qla83xx_beacon_blink()
1791 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla83xx_beacon_blink()
1794 } else if (IS_QLA2031(ha)) { in qla83xx_beacon_blink()
1795 led_select_value = qla83xx_select_led_port(ha); in qla83xx_beacon_blink()
1799 } else if (IS_QLA8031(ha)) { in qla83xx_beacon_blink()
1800 led_select_value = qla83xx_select_led_port(ha); in qla83xx_beacon_blink()
1810 } else if (IS_QLA81XX(ha)) { in qla83xx_beacon_blink()
1817 if (IS_QLA81XX(ha)) { in qla83xx_beacon_blink()
1834 if (IS_QLA81XX(ha)) { in qla83xx_beacon_blink()
1858 struct qla_hw_data *ha = vha->hw; in qla24xx_beacon_on() local
1859 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_beacon_on()
1861 if (IS_P3P_TYPE(ha)) in qla24xx_beacon_on()
1864 if (IS_QLA8031(ha) || IS_QLA81XX(ha)) in qla24xx_beacon_on()
1867 if (ha->beacon_blink_led == 0) { in qla24xx_beacon_on()
1869 ha->fw_options[1] |= ADD_FO1_DISABLE_GPIO_LED_CTRL; in qla24xx_beacon_on()
1871 if (qla2x00_set_fw_options(vha, ha->fw_options) != QLA_SUCCESS) in qla24xx_beacon_on()
1874 if (qla2x00_get_fw_options(vha, ha->fw_options) != in qla24xx_beacon_on()
1881 if (IS_QLA2031(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla24xx_beacon_on()
1884 spin_lock_irqsave(&ha->hardware_lock, flags); in qla24xx_beacon_on()
1892 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla24xx_beacon_on()
1896 ha->beacon_color_state = 0; in qla24xx_beacon_on()
1900 ha->beacon_blink_led = 1; in qla24xx_beacon_on()
1910 struct qla_hw_data *ha = vha->hw; in qla24xx_beacon_off() local
1911 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_beacon_off()
1913 if (IS_P3P_TYPE(ha)) in qla24xx_beacon_off()
1916 if (!ha->flags.fw_started) in qla24xx_beacon_off()
1919 ha->beacon_blink_led = 0; in qla24xx_beacon_off()
1921 if (IS_QLA2031(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla24xx_beacon_off()
1924 if (IS_QLA8031(ha) || IS_QLA81XX(ha)) in qla24xx_beacon_off()
1927 ha->beacon_color_state = QLA_LED_ALL_ON; in qla24xx_beacon_off()
1929 ha->isp_ops->beacon_blink(vha); /* Will flip to all off. */ in qla24xx_beacon_off()
1932 spin_lock_irqsave(&ha->hardware_lock, flags); in qla24xx_beacon_off()
1939 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla24xx_beacon_off()
1942 ha->fw_options[1] &= ~ADD_FO1_DISABLE_GPIO_LED_CTRL; in qla24xx_beacon_off()
1944 if (qla2x00_set_fw_options(vha, ha->fw_options) != QLA_SUCCESS) { in qla24xx_beacon_off()
1950 if (qla2x00_get_fw_options(vha, ha->fw_options) != QLA_SUCCESS) { in qla24xx_beacon_off()
1969 qla2x00_flash_enable(struct qla_hw_data *ha) in qla2x00_flash_enable() argument
1972 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_flash_enable()
1985 qla2x00_flash_disable(struct qla_hw_data *ha) in qla2x00_flash_disable() argument
1988 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_flash_disable()
2006 qla2x00_read_flash_byte(struct qla_hw_data *ha, uint32_t addr) in qla2x00_read_flash_byte() argument
2010 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_read_flash_byte()
2014 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_read_flash_byte()
2042 if (ha->pio_address) { in qla2x00_read_flash_byte()
2045 WRT_REG_WORD_PIO(PIO_REG(ha, flash_address), (uint16_t)addr); in qla2x00_read_flash_byte()
2047 data = RD_REG_WORD_PIO(PIO_REG(ha, flash_data)); in qla2x00_read_flash_byte()
2050 data2 = RD_REG_WORD_PIO(PIO_REG(ha, flash_data)); in qla2x00_read_flash_byte()
2067 qla2x00_write_flash_byte(struct qla_hw_data *ha, uint32_t addr, uint8_t data) in qla2x00_write_flash_byte() argument
2070 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_write_flash_byte()
2073 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_write_flash_byte()
2103 if (ha->pio_address) { in qla2x00_write_flash_byte()
2104 WRT_REG_WORD_PIO(PIO_REG(ha, flash_address), (uint16_t)addr); in qla2x00_write_flash_byte()
2105 WRT_REG_WORD_PIO(PIO_REG(ha, flash_data), (uint16_t)data); in qla2x00_write_flash_byte()
2130 qla2x00_poll_flash(struct qla_hw_data *ha, uint32_t addr, uint8_t poll_data, in qla2x00_poll_flash() argument
2142 flash_data = qla2x00_read_flash_byte(ha, addr); in qla2x00_poll_flash()
2170 qla2x00_program_flash_address(struct qla_hw_data *ha, uint32_t addr, in qla2x00_program_flash_address() argument
2174 if (IS_OEM_001(ha)) { in qla2x00_program_flash_address()
2175 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa); in qla2x00_program_flash_address()
2176 qla2x00_write_flash_byte(ha, 0x555, 0x55); in qla2x00_program_flash_address()
2177 qla2x00_write_flash_byte(ha, 0xaaa, 0xa0); in qla2x00_program_flash_address()
2178 qla2x00_write_flash_byte(ha, addr, data); in qla2x00_program_flash_address()
2181 qla2x00_write_flash_byte(ha, addr, data); in qla2x00_program_flash_address()
2185 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_program_flash_address()
2186 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_program_flash_address()
2187 qla2x00_write_flash_byte(ha, 0x5555, 0xa0); in qla2x00_program_flash_address()
2188 qla2x00_write_flash_byte(ha, addr, data); in qla2x00_program_flash_address()
2195 return qla2x00_poll_flash(ha, addr, data, man_id, flash_id); in qla2x00_program_flash_address()
2207 qla2x00_erase_flash(struct qla_hw_data *ha, uint8_t man_id, uint8_t flash_id) in qla2x00_erase_flash() argument
2210 if (IS_OEM_001(ha)) { in qla2x00_erase_flash()
2211 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa); in qla2x00_erase_flash()
2212 qla2x00_write_flash_byte(ha, 0x555, 0x55); in qla2x00_erase_flash()
2213 qla2x00_write_flash_byte(ha, 0xaaa, 0x80); in qla2x00_erase_flash()
2214 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa); in qla2x00_erase_flash()
2215 qla2x00_write_flash_byte(ha, 0x555, 0x55); in qla2x00_erase_flash()
2216 qla2x00_write_flash_byte(ha, 0xaaa, 0x10); in qla2x00_erase_flash()
2218 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash()
2219 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash()
2220 qla2x00_write_flash_byte(ha, 0x5555, 0x80); in qla2x00_erase_flash()
2221 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash()
2222 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash()
2223 qla2x00_write_flash_byte(ha, 0x5555, 0x10); in qla2x00_erase_flash()
2229 return qla2x00_poll_flash(ha, 0x00, 0x80, man_id, flash_id); in qla2x00_erase_flash()
2243 qla2x00_erase_flash_sector(struct qla_hw_data *ha, uint32_t addr, in qla2x00_erase_flash_sector() argument
2247 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash_sector()
2248 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash_sector()
2249 qla2x00_write_flash_byte(ha, 0x5555, 0x80); in qla2x00_erase_flash_sector()
2250 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash_sector()
2251 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash_sector()
2253 qla2x00_write_flash_byte(ha, addr & sec_mask, 0x10); in qla2x00_erase_flash_sector()
2255 qla2x00_write_flash_byte(ha, addr & sec_mask, 0x30); in qla2x00_erase_flash_sector()
2260 return qla2x00_poll_flash(ha, addr, 0x80, man_id, flash_id); in qla2x00_erase_flash_sector()
2270 qla2x00_get_flash_manufacturer(struct qla_hw_data *ha, uint8_t *man_id, in qla2x00_get_flash_manufacturer() argument
2273 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_get_flash_manufacturer()
2274 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_get_flash_manufacturer()
2275 qla2x00_write_flash_byte(ha, 0x5555, 0x90); in qla2x00_get_flash_manufacturer()
2276 *man_id = qla2x00_read_flash_byte(ha, 0x0000); in qla2x00_get_flash_manufacturer()
2277 *flash_id = qla2x00_read_flash_byte(ha, 0x0001); in qla2x00_get_flash_manufacturer()
2278 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_get_flash_manufacturer()
2279 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_get_flash_manufacturer()
2280 qla2x00_write_flash_byte(ha, 0x5555, 0xf0); in qla2x00_get_flash_manufacturer()
2284 qla2x00_read_flash_data(struct qla_hw_data *ha, uint8_t *tmp_buf, in qla2x00_read_flash_data() argument
2287 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_read_flash_data()
2300 data = qla2x00_read_flash_byte(ha, saddr); in qla2x00_read_flash_data()
2313 struct qla_hw_data *ha = vha->hw; in qla2x00_suspend_hba() local
2314 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_suspend_hba()
2318 ha->isp_ops->disable_intrs(ha); in qla2x00_suspend_hba()
2319 set_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla2x00_suspend_hba()
2322 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_suspend_hba()
2325 if (IS_QLA2100(ha) || IS_QLA2200(ha) || IS_QLA2300(ha)) { in qla2x00_suspend_hba()
2334 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_suspend_hba()
2340 struct qla_hw_data *ha = vha->hw; in qla2x00_resume_hba() local
2343 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla2x00_resume_hba()
2356 struct qla_hw_data *ha = vha->hw; in qla2x00_read_optrom_data() local
2357 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_read_optrom_data()
2363 midpoint = ha->optrom_size / 2; in qla2x00_read_optrom_data()
2365 qla2x00_flash_enable(ha); in qla2x00_read_optrom_data()
2374 *data = qla2x00_read_flash_byte(ha, addr); in qla2x00_read_optrom_data()
2376 qla2x00_flash_disable(ha); in qla2x00_read_optrom_data()
2393 struct qla_hw_data *ha = vha->hw; in qla2x00_write_optrom_data() local
2394 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_write_optrom_data()
2404 pci_read_config_word(ha->pdev, PCI_COMMAND, &wd); in qla2x00_write_optrom_data()
2407 qla2x00_flash_enable(ha); in qla2x00_write_optrom_data()
2410 if (IS_OEM_001(ha)) { in qla2x00_write_optrom_data()
2417 qla2x00_get_flash_manufacturer(ha, &man_id, &flash_id); in qla2x00_write_optrom_data()
2510 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_write_optrom_data()
2511 if (qla2x00_erase_flash(ha, man_id, flash_id)) { in qla2x00_write_optrom_data()
2522 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_write_optrom_data()
2551 } else if (addr == ha->optrom_size / 2) { in qla2x00_write_optrom_data()
2557 qla2x00_write_flash_byte(ha, 0x5555, in qla2x00_write_optrom_data()
2559 qla2x00_write_flash_byte(ha, 0x2aaa, in qla2x00_write_optrom_data()
2561 qla2x00_write_flash_byte(ha, 0x5555, in qla2x00_write_optrom_data()
2563 } else if (!IS_QLA2322(ha) && !IS_QLA6322(ha)) { in qla2x00_write_optrom_data()
2565 if (qla2x00_erase_flash_sector(ha, in qla2x00_write_optrom_data()
2587 if (qla2x00_program_flash_address(ha, addr, *data, in qla2x00_write_optrom_data()
2595 qla2x00_flash_disable(ha); in qla2x00_write_optrom_data()
2607 struct qla_hw_data *ha = vha->hw; in qla24xx_read_optrom_data() local
2611 set_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_read_optrom_data()
2617 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_read_optrom_data()
2655 struct qla_hw_data *ha = vha->hw; in qla28xx_get_flash_region() local
2656 struct qla_flt_header *flt = ha->flt; in qla28xx_get_flash_region()
2661 if (!ha->flt) in qla28xx_get_flash_region()
2681 struct qla_hw_data *ha = vha->hw; in qla28xx_write_flash_data() local
2708 optrom = dma_alloc_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla28xx_write_flash_data()
2721 if (ha->flags.secure_adapter && region.attribute) { in qla28xx_write_flash_data()
2783 sfub = dma_alloc_coherent(&ha->pdev->dev, in qla28xx_write_flash_data()
2803 rest_addr = (ha->fdt_block_size >> 2) - 1; in qla28xx_write_flash_data()
2839 if (ha->flags.secure_adapter) { in qla28xx_write_flash_data()
2845 if (!ha->flags.secure_fw) { in qla28xx_write_flash_data()
2869 ha->flags.fac_supported = 0; in qla28xx_write_flash_data()
2926 flash_data_addr(ha, faddr), dburst); in qla28xx_write_flash_data()
2930 flash_data_addr(ha, faddr), optrom, in qla28xx_write_flash_data()
2967 dma_free_coherent(&ha->pdev->dev, in qla28xx_write_flash_data()
2978 struct qla_hw_data *ha = vha->hw; in qla24xx_write_optrom_data() local
2982 set_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_write_optrom_data()
2985 if (IS_QLA28XX(ha)) in qla24xx_write_optrom_data()
2992 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_write_optrom_data()
3007 struct qla_hw_data *ha = vha->hw; in qla25xx_read_optrom_data() local
3009 if (IS_QLA25XX(ha) || IS_QLA81XX(ha) || IS_QLA83XX(ha) || in qla25xx_read_optrom_data()
3010 IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla25xx_read_optrom_data()
3020 optrom = dma_alloc_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla25xx_read_optrom_data()
3038 flash_data_addr(ha, faddr), burst); in qla25xx_read_optrom_data()
3042 rval, flash_data_addr(ha, faddr), in qla25xx_read_optrom_data()
3047 dma_free_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla25xx_read_optrom_data()
3059 dma_free_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, optrom, in qla25xx_read_optrom_data()
3087 qla2x00_get_fcode_version(struct qla_hw_data *ha, uint32_t pcids) in qla2x00_get_fcode_version() argument
3093 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla2x00_get_fcode_version()
3097 ((qla2x00_read_flash_byte(ha, pcids + 0x0B) << 8) | in qla2x00_get_fcode_version()
3098 qla2x00_read_flash_byte(ha, pcids + 0x0A)); in qla2x00_get_fcode_version()
3106 if (qla2x00_read_flash_byte(ha, iter) == '/') { in qla2x00_get_fcode_version()
3107 if (qla2x00_read_flash_byte(ha, iter + 2) == in qla2x00_get_fcode_version()
3110 else if (qla2x00_read_flash_byte(ha, in qla2x00_get_fcode_version()
3122 if (qla2x00_read_flash_byte(ha, iter) == ' ') in qla2x00_get_fcode_version()
3136 rbyte = qla2x00_read_flash_byte(ha, iter); in qla2x00_get_fcode_version()
3146 ((vend - iter) < sizeof(ha->fcode_revision))) { in qla2x00_get_fcode_version()
3147 vbyte = ha->fcode_revision; in qla2x00_get_fcode_version()
3149 *vbyte++ = qla2x00_read_flash_byte(ha, iter); in qla2x00_get_fcode_version()
3157 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla2x00_get_fcode_version()
3168 struct qla_hw_data *ha = vha->hw; in qla2x00_get_flash_version() local
3170 if (!ha->pio_address || !mbuf) in qla2x00_get_flash_version()
3173 memset(ha->bios_revision, 0, sizeof(ha->bios_revision)); in qla2x00_get_flash_version()
3174 memset(ha->efi_revision, 0, sizeof(ha->efi_revision)); in qla2x00_get_flash_version()
3175 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla2x00_get_flash_version()
3176 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla2x00_get_flash_version()
3178 qla2x00_flash_enable(ha); in qla2x00_get_flash_version()
3185 if (qla2x00_read_flash_byte(ha, pcihdr) != 0x55 || in qla2x00_get_flash_version()
3186 qla2x00_read_flash_byte(ha, pcihdr + 0x01) != 0xaa) { in qla2x00_get_flash_version()
3196 ((qla2x00_read_flash_byte(ha, pcihdr + 0x19) << 8) | in qla2x00_get_flash_version()
3197 qla2x00_read_flash_byte(ha, pcihdr + 0x18)); in qla2x00_get_flash_version()
3200 if (qla2x00_read_flash_byte(ha, pcids) != 'P' || in qla2x00_get_flash_version()
3201 qla2x00_read_flash_byte(ha, pcids + 0x1) != 'C' || in qla2x00_get_flash_version()
3202 qla2x00_read_flash_byte(ha, pcids + 0x2) != 'I' || in qla2x00_get_flash_version()
3203 qla2x00_read_flash_byte(ha, pcids + 0x3) != 'R') { in qla2x00_get_flash_version()
3212 code_type = qla2x00_read_flash_byte(ha, pcids + 0x14); in qla2x00_get_flash_version()
3216 ha->bios_revision[0] = in qla2x00_get_flash_version()
3217 qla2x00_read_flash_byte(ha, pcids + 0x12); in qla2x00_get_flash_version()
3218 ha->bios_revision[1] = in qla2x00_get_flash_version()
3219 qla2x00_read_flash_byte(ha, pcids + 0x13); in qla2x00_get_flash_version()
3222 ha->bios_revision[1], ha->bios_revision[0]); in qla2x00_get_flash_version()
3227 qla2x00_get_fcode_version(ha, pcids); in qla2x00_get_flash_version()
3231 ha->efi_revision[0] = in qla2x00_get_flash_version()
3232 qla2x00_read_flash_byte(ha, pcids + 0x12); in qla2x00_get_flash_version()
3233 ha->efi_revision[1] = in qla2x00_get_flash_version()
3234 qla2x00_read_flash_byte(ha, pcids + 0x13); in qla2x00_get_flash_version()
3237 ha->efi_revision[1], ha->efi_revision[0]); in qla2x00_get_flash_version()
3246 last_image = qla2x00_read_flash_byte(ha, pcids + 0x15) & BIT_7; in qla2x00_get_flash_version()
3249 pcihdr += ((qla2x00_read_flash_byte(ha, pcids + 0x11) << 8) | in qla2x00_get_flash_version()
3250 qla2x00_read_flash_byte(ha, pcids + 0x10)) * 512; in qla2x00_get_flash_version()
3253 if (IS_QLA2322(ha)) { in qla2x00_get_flash_version()
3255 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla2x00_get_flash_version()
3260 qla2x00_read_flash_data(ha, dbyte, ha->flt_region_fw * 4 + 10, in qla2x00_get_flash_version()
3274 ha->flt_region_fw * 4); in qla2x00_get_flash_version()
3277 ha->fw_revision[0] = dbyte[0] << 16 | dbyte[1]; in qla2x00_get_flash_version()
3278 ha->fw_revision[1] = dbyte[2] << 16 | dbyte[3]; in qla2x00_get_flash_version()
3279 ha->fw_revision[2] = dbyte[4] << 16 | dbyte[5]; in qla2x00_get_flash_version()
3282 "%d.%d.%d.\n", ha->fw_revision[0], in qla2x00_get_flash_version()
3283 ha->fw_revision[1], ha->fw_revision[2]); in qla2x00_get_flash_version()
3287 qla2x00_flash_disable(ha); in qla2x00_get_flash_version()
3300 struct qla_hw_data *ha = vha->hw; in qla82xx_get_flash_version() local
3305 memset(ha->bios_revision, 0, sizeof(ha->bios_revision)); in qla82xx_get_flash_version()
3306 memset(ha->efi_revision, 0, sizeof(ha->efi_revision)); in qla82xx_get_flash_version()
3307 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla82xx_get_flash_version()
3308 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla82xx_get_flash_version()
3311 pcihdr = ha->flt_region_boot << 2; in qla82xx_get_flash_version()
3315 ha->isp_ops->read_optrom(vha, dcode, pcihdr, 0x20 * 4); in qla82xx_get_flash_version()
3328 ha->isp_ops->read_optrom(vha, dcode, pcids, 0x20 * 4); in qla82xx_get_flash_version()
3345 ha->bios_revision[0] = bcode[0x12]; in qla82xx_get_flash_version()
3346 ha->bios_revision[1] = bcode[0x13]; in qla82xx_get_flash_version()
3349 ha->bios_revision[1], ha->bios_revision[0]); in qla82xx_get_flash_version()
3353 ha->fcode_revision[0] = bcode[0x12]; in qla82xx_get_flash_version()
3354 ha->fcode_revision[1] = bcode[0x13]; in qla82xx_get_flash_version()
3357 ha->fcode_revision[1], ha->fcode_revision[0]); in qla82xx_get_flash_version()
3361 ha->efi_revision[0] = bcode[0x12]; in qla82xx_get_flash_version()
3362 ha->efi_revision[1] = bcode[0x13]; in qla82xx_get_flash_version()
3365 ha->efi_revision[1], ha->efi_revision[0]); in qla82xx_get_flash_version()
3381 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla82xx_get_flash_version()
3383 ha->isp_ops->read_optrom(vha, dcode, ha->flt_region_fw << 2, 0x20); in qla82xx_get_flash_version()
3389 ha->fw_revision[0] = bcode[0x4]; in qla82xx_get_flash_version()
3390 ha->fw_revision[1] = bcode[0x5]; in qla82xx_get_flash_version()
3391 ha->fw_revision[2] = bcode[0x6]; in qla82xx_get_flash_version()
3394 ha->fw_revision[0], ha->fw_revision[1], in qla82xx_get_flash_version()
3395 ha->fw_revision[2]); in qla82xx_get_flash_version()
3410 struct qla_hw_data *ha = vha->hw; in qla24xx_get_flash_version() local
3414 if (IS_P3P_TYPE(ha)) in qla24xx_get_flash_version()
3420 memset(ha->bios_revision, 0, sizeof(ha->bios_revision)); in qla24xx_get_flash_version()
3421 memset(ha->efi_revision, 0, sizeof(ha->efi_revision)); in qla24xx_get_flash_version()
3422 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla24xx_get_flash_version()
3423 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla24xx_get_flash_version()
3425 pcihdr = ha->flt_region_boot << 2; in qla24xx_get_flash_version()
3426 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla24xx_get_flash_version()
3429 pcihdr = ha->flt_region_boot_sec << 2; in qla24xx_get_flash_version()
3466 ha->bios_revision[0] = bcode[0x12]; in qla24xx_get_flash_version()
3467 ha->bios_revision[1] = bcode[0x13]; in qla24xx_get_flash_version()
3470 ha->bios_revision[1], ha->bios_revision[0]); in qla24xx_get_flash_version()
3474 ha->fcode_revision[0] = bcode[0x12]; in qla24xx_get_flash_version()
3475 ha->fcode_revision[1] = bcode[0x13]; in qla24xx_get_flash_version()
3478 ha->fcode_revision[1], ha->fcode_revision[0]); in qla24xx_get_flash_version()
3482 ha->efi_revision[0] = bcode[0x12]; in qla24xx_get_flash_version()
3483 ha->efi_revision[1] = bcode[0x13]; in qla24xx_get_flash_version()
3486 ha->efi_revision[1], ha->efi_revision[0]); in qla24xx_get_flash_version()
3502 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla24xx_get_flash_version()
3503 faddr = ha->flt_region_fw; in qla24xx_get_flash_version()
3504 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla24xx_get_flash_version()
3507 faddr = ha->flt_region_fw_sec; in qla24xx_get_flash_version()
3514 ha->flt_region_fw * 4); in qla24xx_get_flash_version()
3518 ha->fw_revision[i] = in qla24xx_get_flash_version()
3522 ha->fw_revision[0], ha->fw_revision[1], in qla24xx_get_flash_version()
3523 ha->fw_revision[2], ha->fw_revision[3]); in qla24xx_get_flash_version()
3527 if (!IS_QLA81XX(ha)) { in qla24xx_get_flash_version()
3532 memset(ha->gold_fw_version, 0, sizeof(ha->gold_fw_version)); in qla24xx_get_flash_version()
3533 faddr = ha->flt_region_gold_fw; in qla24xx_get_flash_version()
3534 qla24xx_read_flash_data(vha, dcode, ha->flt_region_gold_fw, 8); in qla24xx_get_flash_version()
3543 ha->gold_fw_version[i] = in qla24xx_get_flash_version()
3569 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_vpd_field() local
3570 uint8_t *pos = ha->vpd; in qla2xxx_get_vpd_field()
3571 uint8_t *end = pos + ha->vpd_size; in qla2xxx_get_vpd_field()
3574 if (!IS_FWI2_CAPABLE(ha) || !qla2xxx_is_vpd_valid(pos, end)) in qla2xxx_get_vpd_field()
3600 struct qla_hw_data *ha = vha->hw; in qla24xx_read_fcp_prio_cfg() local
3602 if (!ha->fcp_prio_cfg) { in qla24xx_read_fcp_prio_cfg()
3603 ha->fcp_prio_cfg = vmalloc(FCP_PRIO_CFG_SIZE); in qla24xx_read_fcp_prio_cfg()
3604 if (!ha->fcp_prio_cfg) { in qla24xx_read_fcp_prio_cfg()
3611 memset(ha->fcp_prio_cfg, 0, FCP_PRIO_CFG_SIZE); in qla24xx_read_fcp_prio_cfg()
3613 fcp_prio_addr = ha->flt_region_fcp_prio; in qla24xx_read_fcp_prio_cfg()
3616 ha->isp_ops->read_optrom(vha, ha->fcp_prio_cfg, in qla24xx_read_fcp_prio_cfg()
3619 if (!qla24xx_fcp_prio_cfg_valid(vha, ha->fcp_prio_cfg, 0)) in qla24xx_read_fcp_prio_cfg()
3624 len = ha->fcp_prio_cfg->num_entries * sizeof(struct qla_fcp_prio_entry); in qla24xx_read_fcp_prio_cfg()
3627 ha->isp_ops->read_optrom(vha, &ha->fcp_prio_cfg->entry[0], in qla24xx_read_fcp_prio_cfg()
3631 if (!qla24xx_fcp_prio_cfg_valid(vha, ha->fcp_prio_cfg, 1)) in qla24xx_read_fcp_prio_cfg()
3634 ha->flags.fcp_prio_enabled = 1; in qla24xx_read_fcp_prio_cfg()
3637 vfree(ha->fcp_prio_cfg); in qla24xx_read_fcp_prio_cfg()
3638 ha->fcp_prio_cfg = NULL; in qla24xx_read_fcp_prio_cfg()