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()
567 if (IS_QLA24XX_TYPE(ha)) in qla2xxx_find_flt_start()
569 else if (IS_QLA25XX(ha)) in qla2xxx_find_flt_start()
571 else if (IS_QLA81XX(ha)) in qla2xxx_find_flt_start()
573 else if (IS_P3P_TYPE(ha)) { in qla2xxx_find_flt_start()
576 } else if (IS_QLA83XX(ha) || IS_QLA27XX(ha)) { in qla2xxx_find_flt_start()
579 } else if (IS_QLA28XX(ha)) { in qla2xxx_find_flt_start()
686 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_flt_info() local
687 uint32_t def = IS_QLA81XX(ha) ? 2 : IS_QLA25XX(ha) ? 1 : 0; in qla2xxx_get_flt_info()
688 struct qla_flt_header *flt = ha->flt; in qla2xxx_get_flt_info()
697 ha->flt_region_fcp_prio = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
700 ha->flt_region_flt = flt_addr; in qla2xxx_get_flt_info()
701 wptr = (__force __le16 *)ha->flt; in qla2xxx_get_flt_info()
702 ha->isp_ops->read_optrom(vha, flt, flt_addr << 2, in qla2xxx_get_flt_info()
741 if (!IS_QLA8031(ha)) in qla2xxx_get_flt_info()
743 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
746 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
748 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
751 ha->flt_region_boot = start; in qla2xxx_get_flt_info()
754 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
756 ha->flt_region_vpd_nvram = start; in qla2xxx_get_flt_info()
757 if (IS_P3P_TYPE(ha)) in qla2xxx_get_flt_info()
759 if (ha->port_no == 0) in qla2xxx_get_flt_info()
760 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
763 if (IS_P3P_TYPE(ha) || IS_QLA8031(ha)) in qla2xxx_get_flt_info()
765 if (ha->port_no == 1) in qla2xxx_get_flt_info()
766 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
769 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
771 if (ha->port_no == 2) in qla2xxx_get_flt_info()
772 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
775 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
777 if (ha->port_no == 3) in qla2xxx_get_flt_info()
778 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
781 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
783 if (ha->port_no == 0) in qla2xxx_get_flt_info()
784 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
787 if (IS_QLA8031(ha)) in qla2xxx_get_flt_info()
789 if (ha->port_no == 1) in qla2xxx_get_flt_info()
790 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
793 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
795 if (ha->port_no == 2) in qla2xxx_get_flt_info()
796 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
799 if (!IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
801 if (ha->port_no == 3) in qla2xxx_get_flt_info()
802 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
805 ha->flt_region_fdt = start; in qla2xxx_get_flt_info()
808 if (ha->port_no == 0) in qla2xxx_get_flt_info()
809 ha->flt_region_npiv_conf = start; in qla2xxx_get_flt_info()
812 if (ha->port_no == 1) in qla2xxx_get_flt_info()
813 ha->flt_region_npiv_conf = start; in qla2xxx_get_flt_info()
816 ha->flt_region_gold_fw = start; in qla2xxx_get_flt_info()
819 if (ha->port_no == 0) in qla2xxx_get_flt_info()
820 ha->flt_region_fcp_prio = start; in qla2xxx_get_flt_info()
823 if (ha->port_no == 1) in qla2xxx_get_flt_info()
824 ha->flt_region_fcp_prio = start; in qla2xxx_get_flt_info()
827 ha->flt_region_boot = start; in qla2xxx_get_flt_info()
830 if (IS_QLA8044(ha)) in qla2xxx_get_flt_info()
831 ha->flt_region_boot = start; in qla2xxx_get_flt_info()
834 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
837 if (IS_CNA_CAPABLE(ha)) in qla2xxx_get_flt_info()
838 ha->flt_region_fw = start; in qla2xxx_get_flt_info()
841 ha->flt_region_gold_fw = start; in qla2xxx_get_flt_info()
844 ha->flt_region_bootload = start; in qla2xxx_get_flt_info()
847 if (IS_CNA_CAPABLE(ha)) in qla2xxx_get_flt_info()
848 ha->flt_region_vpd = start; in qla2xxx_get_flt_info()
851 if (!(IS_QLA8031(ha) || IS_QLA8044(ha))) in qla2xxx_get_flt_info()
853 if (ha->port_no == 0) in qla2xxx_get_flt_info()
854 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
857 if (!(IS_QLA8031(ha) || IS_QLA8044(ha))) in qla2xxx_get_flt_info()
859 if (ha->port_no == 1) in qla2xxx_get_flt_info()
860 ha->flt_region_nvram = start; in qla2xxx_get_flt_info()
863 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
864 ha->flt_region_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_img_status_sec = start; in qla2xxx_get_flt_info()
871 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
872 ha->flt_region_fw_sec = start; in qla2xxx_get_flt_info()
875 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
876 ha->flt_region_boot_sec = start; in qla2xxx_get_flt_info()
879 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
880 ha->flt_region_aux_img_status_pri = start; in qla2xxx_get_flt_info()
883 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
884 ha->flt_region_aux_img_status_sec = start; in qla2xxx_get_flt_info()
887 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
888 if (ha->port_no == 0) in qla2xxx_get_flt_info()
889 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 if (ha->port_no == 1) in qla2xxx_get_flt_info()
894 ha->flt_region_nvram_sec = start; in qla2xxx_get_flt_info()
897 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
898 if (ha->port_no == 2) in qla2xxx_get_flt_info()
899 ha->flt_region_nvram_sec = start; in qla2xxx_get_flt_info()
902 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
903 if (ha->port_no == 3) in qla2xxx_get_flt_info()
904 ha->flt_region_nvram_sec = start; in qla2xxx_get_flt_info()
908 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla2xxx_get_flt_info()
909 ha->flt_region_vpd_nvram_sec = start; in qla2xxx_get_flt_info()
910 if (ha->port_no == 0) in qla2xxx_get_flt_info()
911 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
916 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
917 if (ha->port_no == 1) in qla2xxx_get_flt_info()
918 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
922 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
923 if (ha->port_no == 2) in qla2xxx_get_flt_info()
924 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
928 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla2xxx_get_flt_info()
929 if (ha->port_no == 3) in qla2xxx_get_flt_info()
930 ha->flt_region_vpd_sec = start; in qla2xxx_get_flt_info()
939 ha->flt_region_fw = def_fw[def]; in qla2xxx_get_flt_info()
940 ha->flt_region_boot = def_boot[def]; in qla2xxx_get_flt_info()
941 ha->flt_region_vpd_nvram = def_vpd_nvram[def]; in qla2xxx_get_flt_info()
942 ha->flt_region_vpd = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
944 ha->flt_region_nvram = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
946 ha->flt_region_fdt = def_fdt[def]; in qla2xxx_get_flt_info()
947 ha->flt_region_npiv_conf = (ha->port_no == 0) ? in qla2xxx_get_flt_info()
953 loc, ha->flt_region_boot, ha->flt_region_fw, in qla2xxx_get_flt_info()
954 ha->flt_region_vpd_nvram, ha->flt_region_vpd, ha->flt_region_nvram, in qla2xxx_get_flt_info()
955 ha->flt_region_fdt, ha->flt_region_flt, ha->flt_region_npiv_conf, in qla2xxx_get_flt_info()
956 ha->flt_region_fcp_prio); in qla2xxx_get_flt_info()
966 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_fdt_info() local
967 struct req_que *req = ha->req_q_map[0]; in qla2xxx_get_fdt_info()
974 ha->isp_ops->read_optrom(vha, fdt, ha->flt_region_fdt << 2, in qla2xxx_get_fdt_info()
996 ha->fdt_wrt_disable = fdt->wrt_disable_bits; in qla2xxx_get_fdt_info()
997 ha->fdt_wrt_enable = fdt->wrt_enable_bits; in qla2xxx_get_fdt_info()
998 ha->fdt_wrt_sts_reg_cmd = fdt->wrt_sts_reg_cmd; in qla2xxx_get_fdt_info()
999 if (IS_QLA8044(ha)) in qla2xxx_get_fdt_info()
1000 ha->fdt_erase_cmd = fdt->erase_cmd; in qla2xxx_get_fdt_info()
1002 ha->fdt_erase_cmd = in qla2xxx_get_fdt_info()
1003 flash_conf_addr(ha, 0x0300 | fdt->erase_cmd); in qla2xxx_get_fdt_info()
1004 ha->fdt_block_size = le32_to_cpu(fdt->block_size); in qla2xxx_get_fdt_info()
1006 ha->fdt_unprotect_sec_cmd = flash_conf_addr(ha, 0x0300 | in qla2xxx_get_fdt_info()
1008 ha->fdt_protect_sec_cmd = fdt->protect_sec_cmd ? in qla2xxx_get_fdt_info()
1009 flash_conf_addr(ha, 0x0300 | fdt->protect_sec_cmd) : in qla2xxx_get_fdt_info()
1010 flash_conf_addr(ha, 0x0336); in qla2xxx_get_fdt_info()
1015 if (IS_P3P_TYPE(ha)) { in qla2xxx_get_fdt_info()
1016 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1019 qla24xx_get_flash_manufacturer(ha, &man_id, &flash_id); in qla2xxx_get_fdt_info()
1022 ha->fdt_wrt_disable = 0x9c; in qla2xxx_get_fdt_info()
1023 ha->fdt_erase_cmd = flash_conf_addr(ha, 0x03d8); in qla2xxx_get_fdt_info()
1027 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1029 ha->fdt_block_size = FLASH_BLK_SIZE_32K; in qla2xxx_get_fdt_info()
1032 ha->fdt_erase_cmd = flash_conf_addr(ha, 0x0352); in qla2xxx_get_fdt_info()
1035 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1038 ha->fdt_block_size = FLASH_BLK_SIZE_4K; in qla2xxx_get_fdt_info()
1039 ha->fdt_erase_cmd = flash_conf_addr(ha, 0x0320); in qla2xxx_get_fdt_info()
1040 ha->fdt_unprotect_sec_cmd = flash_conf_addr(ha, 0x0339); in qla2xxx_get_fdt_info()
1041 ha->fdt_protect_sec_cmd = flash_conf_addr(ha, 0x0336); in qla2xxx_get_fdt_info()
1045 ha->fdt_block_size = FLASH_BLK_SIZE_64K; in qla2xxx_get_fdt_info()
1053 ha->fdt_erase_cmd, ha->fdt_protect_sec_cmd, in qla2xxx_get_fdt_info()
1054 ha->fdt_wrt_disable, ha->fdt_block_size); in qla2xxx_get_fdt_info()
1063 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_idc_param() local
1064 struct req_que *req = ha->req_q_map[0]; in qla2xxx_get_idc_param()
1066 if (!(IS_P3P_TYPE(ha))) in qla2xxx_get_idc_param()
1070 ha->isp_ops->read_optrom(vha, req->ring, QLA82XX_IDC_PARAM_ADDR, 8); in qla2xxx_get_idc_param()
1073 ha->fcoe_dev_init_timeout = QLA82XX_ROM_DEV_INIT_TIMEOUT; in qla2xxx_get_idc_param()
1074 ha->fcoe_reset_timeout = QLA82XX_ROM_DRV_RESET_ACK_TIMEOUT; in qla2xxx_get_idc_param()
1076 ha->fcoe_dev_init_timeout = le32_to_cpu(*wptr); in qla2xxx_get_idc_param()
1078 ha->fcoe_reset_timeout = le32_to_cpu(*wptr); in qla2xxx_get_idc_param()
1082 "fcoe_reset_timeout=%d.\n", ha->fcoe_dev_init_timeout, in qla2xxx_get_idc_param()
1083 ha->fcoe_reset_timeout); in qla2xxx_get_idc_param()
1092 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_flash_info() local
1094 if (!IS_QLA24XX_TYPE(ha) && !IS_QLA25XX(ha) && in qla2xxx_get_flash_info()
1095 !IS_CNA_CAPABLE(ha) && !IS_QLA2031(ha) && in qla2xxx_get_flash_info()
1096 !IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla2xxx_get_flash_info()
1120 struct qla_hw_data *ha = vha->hw; in qla2xxx_flash_npiv_conf() local
1122 if (!IS_QLA24XX_TYPE(ha) && !IS_QLA25XX(ha) && in qla2xxx_flash_npiv_conf()
1123 !IS_CNA_CAPABLE(ha) && !IS_QLA2031(ha)) in qla2xxx_flash_npiv_conf()
1126 if (ha->flags.nic_core_reset_hdlr_active) in qla2xxx_flash_npiv_conf()
1129 if (IS_QLA8044(ha)) in qla2xxx_flash_npiv_conf()
1132 ha->isp_ops->read_optrom(vha, &hdr, ha->flt_region_npiv_conf << 2, in qla2xxx_flash_npiv_conf()
1152 ha->isp_ops->read_optrom(vha, data, ha->flt_region_npiv_conf << 2, in qla2xxx_flash_npiv_conf()
1174 memcpy(&ha->npiv_info[i], entry, sizeof(struct qla_npiv_entry)); in qla2xxx_flash_npiv_conf()
1210 struct qla_hw_data *ha = vha->hw; in qla24xx_unprotect_flash() local
1211 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_unprotect_flash()
1213 if (ha->flags.fac_supported) in qla24xx_unprotect_flash()
1221 if (!ha->fdt_wrt_disable) in qla24xx_unprotect_flash()
1225 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); in qla24xx_unprotect_flash()
1227 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0); in qla24xx_unprotect_flash()
1235 struct qla_hw_data *ha = vha->hw; in qla24xx_protect_flash() local
1236 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_protect_flash()
1240 if (ha->flags.fac_supported) in qla24xx_protect_flash()
1243 if (!ha->fdt_wrt_disable) in qla24xx_protect_flash()
1247 faddr = flash_conf_addr(ha, 0x101); in qla24xx_protect_flash()
1248 qla24xx_write_flash_dword(ha, faddr, ha->fdt_wrt_disable); in qla24xx_protect_flash()
1249 faddr = flash_conf_addr(ha, 0x5); in qla24xx_protect_flash()
1251 if (!qla24xx_read_flash_dword(ha, faddr, &dword)) { in qla24xx_protect_flash()
1269 struct qla_hw_data *ha = vha->hw; in qla24xx_erase_sector() local
1272 if (ha->flags.fac_supported) { in qla24xx_erase_sector()
1274 finish = start + (ha->fdt_block_size >> 2) - 1; in qla24xx_erase_sector()
1275 return qla81xx_fac_erase_sector(vha, flash_data_addr(ha, in qla24xx_erase_sector()
1276 start), flash_data_addr(ha, finish)); in qla24xx_erase_sector()
1279 return qla24xx_write_flash_dword(ha, ha->fdt_erase_cmd, in qla24xx_erase_sector()
1294 struct qla_hw_data *ha = vha->hw; in qla24xx_write_flash_data() local
1296 if (!IS_QLA25XX(ha) && !IS_QLA81XX(ha) && !IS_QLA83XX(ha) && in qla24xx_write_flash_data()
1297 !IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla24xx_write_flash_data()
1301 optrom = dma_alloc_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla24xx_write_flash_data()
1318 rest_addr = (ha->fdt_block_size >> 2) - 1; in qla24xx_write_flash_data()
1348 flash_data_addr(ha, faddr), dburst); in qla24xx_write_flash_data()
1358 flash_data_addr(ha, faddr), optrom, in qla24xx_write_flash_data()
1361 dma_free_coherent(&ha->pdev->dev, in qla24xx_write_flash_data()
1364 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla24xx_write_flash_data()
1371 ret = qla24xx_write_flash_dword(ha, in qla24xx_write_flash_data()
1372 flash_data_addr(ha, faddr), le32_to_cpu(*dwptr)); in qla24xx_write_flash_data()
1388 dma_free_coherent(&ha->pdev->dev, in qla24xx_write_flash_data()
1400 struct qla_hw_data *ha = vha->hw; in qla2x00_read_nvram_data() local
1404 qla2x00_lock_nvram_access(ha); in qla2x00_read_nvram_data()
1406 wptr[i] = cpu_to_le16(qla2x00_get_nvram_word(ha, in qla2x00_read_nvram_data()
1408 qla2x00_unlock_nvram_access(ha); in qla2x00_read_nvram_data()
1417 struct qla_hw_data *ha = vha->hw; in qla24xx_read_nvram_data() local
1421 if (IS_P3P_TYPE(ha)) in qla24xx_read_nvram_data()
1425 naddr = nvram_data_addr(ha, naddr); in qla24xx_read_nvram_data()
1428 if (qla24xx_read_flash_dword(ha, naddr, dwptr)) in qla24xx_read_nvram_data()
1444 struct qla_hw_data *ha = vha->hw; in qla2x00_write_nvram_data() local
1448 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_write_nvram_data()
1449 qla2x00_lock_nvram_access(ha); in qla2x00_write_nvram_data()
1452 stat = qla2x00_clear_nvram_protection(ha); in qla2x00_write_nvram_data()
1456 qla2x00_write_nvram_word(ha, naddr, in qla2x00_write_nvram_data()
1462 qla2x00_set_nvram_protection(ha, stat); in qla2x00_write_nvram_data()
1464 qla2x00_unlock_nvram_access(ha); in qla2x00_write_nvram_data()
1465 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_write_nvram_data()
1474 struct qla_hw_data *ha = vha->hw; in qla24xx_write_nvram_data() local
1475 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_write_nvram_data()
1482 if (IS_P3P_TYPE(ha)) in qla24xx_write_nvram_data()
1491 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0); in qla24xx_write_nvram_data()
1492 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0); in qla24xx_write_nvram_data()
1495 naddr = nvram_data_addr(ha, naddr); in qla24xx_write_nvram_data()
1498 if (qla24xx_write_flash_dword(ha, naddr, le32_to_cpu(*dwptr))) { in qla24xx_write_nvram_data()
1507 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0x8c); in qla24xx_write_nvram_data()
1521 struct qla_hw_data *ha = vha->hw; in qla25xx_read_nvram_data() local
1526 naddr = flash_data_addr(ha, ha->flt_region_vpd_nvram | naddr); in qla25xx_read_nvram_data()
1529 if (qla24xx_read_flash_dword(ha, naddr, dwptr)) in qla25xx_read_nvram_data()
1543 struct qla_hw_data *ha = vha->hw; in qla25xx_write_nvram_data() local
1548 ha->isp_ops->read_optrom(vha, dbuf, ha->flt_region_vpd_nvram << 2, in qla25xx_write_nvram_data()
1551 ha->isp_ops->write_optrom(vha, dbuf, ha->flt_region_vpd_nvram << 2, in qla25xx_write_nvram_data()
1559 qla2x00_flip_colors(struct qla_hw_data *ha, uint16_t *pflags) in qla2x00_flip_colors() argument
1561 if (IS_QLA2322(ha)) { in qla2x00_flip_colors()
1563 if (ha->beacon_color_state == QLA_LED_ALL_ON) { in qla2x00_flip_colors()
1565 ha->beacon_color_state = 0; in qla2x00_flip_colors()
1569 ha->beacon_color_state = QLA_LED_ALL_ON; in qla2x00_flip_colors()
1574 if (ha->beacon_color_state == QLA_LED_GRN_ON) { in qla2x00_flip_colors()
1576 ha->beacon_color_state = 0; in qla2x00_flip_colors()
1580 ha->beacon_color_state = QLA_LED_GRN_ON; in qla2x00_flip_colors()
1595 struct qla_hw_data *ha = vha->hw; in qla2x00_beacon_blink() local
1596 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_beacon_blink()
1598 if (IS_P3P_TYPE(ha)) in qla2x00_beacon_blink()
1601 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_beacon_blink()
1604 if (ha->pio_address) { in qla2x00_beacon_blink()
1605 gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe)); in qla2x00_beacon_blink()
1606 gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod)); in qla2x00_beacon_blink()
1615 if (ha->pio_address) { in qla2x00_beacon_blink()
1616 WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable); in qla2x00_beacon_blink()
1622 qla2x00_flip_colors(ha, &led_color); in qla2x00_beacon_blink()
1631 if (ha->pio_address) { in qla2x00_beacon_blink()
1632 WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data); in qla2x00_beacon_blink()
1638 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_beacon_blink()
1647 struct qla_hw_data *ha = vha->hw; in qla2x00_beacon_on() local
1648 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_beacon_on()
1650 ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING; in qla2x00_beacon_on()
1651 ha->fw_options[1] |= FO1_DISABLE_GPIO6_7; in qla2x00_beacon_on()
1653 if (qla2x00_set_fw_options(vha, ha->fw_options) != QLA_SUCCESS) { in qla2x00_beacon_on()
1660 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_beacon_on()
1661 if (ha->pio_address) { in qla2x00_beacon_on()
1662 gpio_enable = RD_REG_WORD_PIO(PIO_REG(ha, gpioe)); in qla2x00_beacon_on()
1663 gpio_data = RD_REG_WORD_PIO(PIO_REG(ha, gpiod)); in qla2x00_beacon_on()
1671 if (ha->pio_address) { in qla2x00_beacon_on()
1672 WRT_REG_WORD_PIO(PIO_REG(ha, gpioe), gpio_enable); in qla2x00_beacon_on()
1680 if (ha->pio_address) { in qla2x00_beacon_on()
1681 WRT_REG_WORD_PIO(PIO_REG(ha, gpiod), gpio_data); in qla2x00_beacon_on()
1686 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_beacon_on()
1692 ha->beacon_blink_led = 1; in qla2x00_beacon_on()
1693 ha->beacon_color_state = 0; in qla2x00_beacon_on()
1702 struct qla_hw_data *ha = vha->hw; in qla2x00_beacon_off() local
1704 ha->beacon_blink_led = 0; in qla2x00_beacon_off()
1707 if (IS_QLA2322(ha)) in qla2x00_beacon_off()
1708 ha->beacon_color_state = QLA_LED_ALL_ON; in qla2x00_beacon_off()
1710 ha->beacon_color_state = QLA_LED_GRN_ON; in qla2x00_beacon_off()
1712 ha->isp_ops->beacon_blink(vha); /* This turns green LED off */ in qla2x00_beacon_off()
1714 ha->fw_options[1] &= ~FO1_SET_EMPHASIS_SWING; in qla2x00_beacon_off()
1715 ha->fw_options[1] &= ~FO1_DISABLE_GPIO6_7; in qla2x00_beacon_off()
1717 rval = qla2x00_set_fw_options(vha, ha->fw_options); in qla2x00_beacon_off()
1726 qla24xx_flip_colors(struct qla_hw_data *ha, uint16_t *pflags) in qla24xx_flip_colors() argument
1729 if (ha->beacon_color_state == QLA_LED_ALL_ON) { in qla24xx_flip_colors()
1731 ha->beacon_color_state = 0; in qla24xx_flip_colors()
1735 ha->beacon_color_state = QLA_LED_ALL_ON; in qla24xx_flip_colors()
1746 struct qla_hw_data *ha = vha->hw; in qla24xx_beacon_blink() local
1747 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_beacon_blink()
1750 spin_lock_irqsave(&ha->hardware_lock, flags); in qla24xx_beacon_blink()
1760 qla24xx_flip_colors(ha, &led_color); in qla24xx_beacon_blink()
1771 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla24xx_beacon_blink()
1775 qla83xx_select_led_port(struct qla_hw_data *ha) in qla83xx_select_led_port() argument
1779 if (!IS_QLA83XX(ha) && !IS_QLA27XX(ha) && !IS_QLA28XX(ha)) in qla83xx_select_led_port()
1782 if (ha->port_no == 0) in qla83xx_select_led_port()
1795 struct qla_hw_data *ha = vha->hw; in qla83xx_beacon_blink() local
1800 if (!IS_QLA83XX(ha) && !IS_QLA81XX(ha) && !IS_QLA27XX(ha) && in qla83xx_beacon_blink()
1801 !IS_QLA28XX(ha)) in qla83xx_beacon_blink()
1804 if (!ha->beacon_blink_led) in qla83xx_beacon_blink()
1807 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla83xx_beacon_blink()
1810 } else if (IS_QLA2031(ha)) { in qla83xx_beacon_blink()
1811 led_select_value = qla83xx_select_led_port(ha); in qla83xx_beacon_blink()
1815 } else if (IS_QLA8031(ha)) { in qla83xx_beacon_blink()
1816 led_select_value = qla83xx_select_led_port(ha); in qla83xx_beacon_blink()
1826 } else if (IS_QLA81XX(ha)) { in qla83xx_beacon_blink()
1833 if (IS_QLA81XX(ha)) { in qla83xx_beacon_blink()
1850 if (IS_QLA81XX(ha)) { in qla83xx_beacon_blink()
1874 struct qla_hw_data *ha = vha->hw; in qla24xx_beacon_on() local
1875 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_beacon_on()
1877 if (IS_P3P_TYPE(ha)) in qla24xx_beacon_on()
1880 if (IS_QLA8031(ha) || IS_QLA81XX(ha)) in qla24xx_beacon_on()
1883 if (ha->beacon_blink_led == 0) { in qla24xx_beacon_on()
1885 ha->fw_options[1] |= ADD_FO1_DISABLE_GPIO_LED_CTRL; in qla24xx_beacon_on()
1887 if (qla2x00_set_fw_options(vha, ha->fw_options) != QLA_SUCCESS) in qla24xx_beacon_on()
1890 if (qla2x00_get_fw_options(vha, ha->fw_options) != in qla24xx_beacon_on()
1897 if (IS_QLA2031(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla24xx_beacon_on()
1900 spin_lock_irqsave(&ha->hardware_lock, flags); in qla24xx_beacon_on()
1908 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla24xx_beacon_on()
1912 ha->beacon_color_state = 0; in qla24xx_beacon_on()
1916 ha->beacon_blink_led = 1; in qla24xx_beacon_on()
1926 struct qla_hw_data *ha = vha->hw; in qla24xx_beacon_off() local
1927 struct device_reg_24xx __iomem *reg = &ha->iobase->isp24; in qla24xx_beacon_off()
1929 if (IS_P3P_TYPE(ha)) in qla24xx_beacon_off()
1932 if (!ha->flags.fw_started) in qla24xx_beacon_off()
1935 ha->beacon_blink_led = 0; in qla24xx_beacon_off()
1937 if (IS_QLA2031(ha) || IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla24xx_beacon_off()
1940 if (IS_QLA8031(ha) || IS_QLA81XX(ha)) in qla24xx_beacon_off()
1943 ha->beacon_color_state = QLA_LED_ALL_ON; in qla24xx_beacon_off()
1945 ha->isp_ops->beacon_blink(vha); /* Will flip to all off. */ in qla24xx_beacon_off()
1948 spin_lock_irqsave(&ha->hardware_lock, flags); in qla24xx_beacon_off()
1955 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla24xx_beacon_off()
1958 ha->fw_options[1] &= ~ADD_FO1_DISABLE_GPIO_LED_CTRL; in qla24xx_beacon_off()
1960 if (qla2x00_set_fw_options(vha, ha->fw_options) != QLA_SUCCESS) { in qla24xx_beacon_off()
1966 if (qla2x00_get_fw_options(vha, ha->fw_options) != QLA_SUCCESS) { in qla24xx_beacon_off()
1985 qla2x00_flash_enable(struct qla_hw_data *ha) in qla2x00_flash_enable() argument
1988 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_flash_enable()
2001 qla2x00_flash_disable(struct qla_hw_data *ha) in qla2x00_flash_disable() argument
2004 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_flash_disable()
2022 qla2x00_read_flash_byte(struct qla_hw_data *ha, uint32_t addr) in qla2x00_read_flash_byte() argument
2026 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_read_flash_byte()
2030 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_read_flash_byte()
2058 if (ha->pio_address) { in qla2x00_read_flash_byte()
2061 WRT_REG_WORD_PIO(PIO_REG(ha, flash_address), (uint16_t)addr); in qla2x00_read_flash_byte()
2063 data = RD_REG_WORD_PIO(PIO_REG(ha, flash_data)); in qla2x00_read_flash_byte()
2066 data2 = RD_REG_WORD_PIO(PIO_REG(ha, flash_data)); in qla2x00_read_flash_byte()
2083 qla2x00_write_flash_byte(struct qla_hw_data *ha, uint32_t addr, uint8_t data) in qla2x00_write_flash_byte() argument
2086 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_write_flash_byte()
2089 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_write_flash_byte()
2119 if (ha->pio_address) { in qla2x00_write_flash_byte()
2120 WRT_REG_WORD_PIO(PIO_REG(ha, flash_address), (uint16_t)addr); in qla2x00_write_flash_byte()
2121 WRT_REG_WORD_PIO(PIO_REG(ha, flash_data), (uint16_t)data); in qla2x00_write_flash_byte()
2146 qla2x00_poll_flash(struct qla_hw_data *ha, uint32_t addr, uint8_t poll_data, in qla2x00_poll_flash() argument
2158 flash_data = qla2x00_read_flash_byte(ha, addr); in qla2x00_poll_flash()
2186 qla2x00_program_flash_address(struct qla_hw_data *ha, uint32_t addr, in qla2x00_program_flash_address() argument
2190 if (IS_OEM_001(ha)) { in qla2x00_program_flash_address()
2191 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa); in qla2x00_program_flash_address()
2192 qla2x00_write_flash_byte(ha, 0x555, 0x55); in qla2x00_program_flash_address()
2193 qla2x00_write_flash_byte(ha, 0xaaa, 0xa0); in qla2x00_program_flash_address()
2194 qla2x00_write_flash_byte(ha, addr, data); in qla2x00_program_flash_address()
2197 qla2x00_write_flash_byte(ha, addr, data); in qla2x00_program_flash_address()
2201 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_program_flash_address()
2202 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_program_flash_address()
2203 qla2x00_write_flash_byte(ha, 0x5555, 0xa0); in qla2x00_program_flash_address()
2204 qla2x00_write_flash_byte(ha, addr, data); in qla2x00_program_flash_address()
2211 return qla2x00_poll_flash(ha, addr, data, man_id, flash_id); in qla2x00_program_flash_address()
2223 qla2x00_erase_flash(struct qla_hw_data *ha, uint8_t man_id, uint8_t flash_id) in qla2x00_erase_flash() argument
2226 if (IS_OEM_001(ha)) { in qla2x00_erase_flash()
2227 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa); in qla2x00_erase_flash()
2228 qla2x00_write_flash_byte(ha, 0x555, 0x55); in qla2x00_erase_flash()
2229 qla2x00_write_flash_byte(ha, 0xaaa, 0x80); in qla2x00_erase_flash()
2230 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa); in qla2x00_erase_flash()
2231 qla2x00_write_flash_byte(ha, 0x555, 0x55); in qla2x00_erase_flash()
2232 qla2x00_write_flash_byte(ha, 0xaaa, 0x10); in qla2x00_erase_flash()
2234 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash()
2235 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash()
2236 qla2x00_write_flash_byte(ha, 0x5555, 0x80); in qla2x00_erase_flash()
2237 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash()
2238 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash()
2239 qla2x00_write_flash_byte(ha, 0x5555, 0x10); in qla2x00_erase_flash()
2245 return qla2x00_poll_flash(ha, 0x00, 0x80, man_id, flash_id); in qla2x00_erase_flash()
2259 qla2x00_erase_flash_sector(struct qla_hw_data *ha, uint32_t addr, in qla2x00_erase_flash_sector() argument
2263 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash_sector()
2264 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash_sector()
2265 qla2x00_write_flash_byte(ha, 0x5555, 0x80); in qla2x00_erase_flash_sector()
2266 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_erase_flash_sector()
2267 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_erase_flash_sector()
2269 qla2x00_write_flash_byte(ha, addr & sec_mask, 0x10); in qla2x00_erase_flash_sector()
2271 qla2x00_write_flash_byte(ha, addr & sec_mask, 0x30); in qla2x00_erase_flash_sector()
2276 return qla2x00_poll_flash(ha, addr, 0x80, man_id, flash_id); in qla2x00_erase_flash_sector()
2286 qla2x00_get_flash_manufacturer(struct qla_hw_data *ha, uint8_t *man_id, in qla2x00_get_flash_manufacturer() argument
2289 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_get_flash_manufacturer()
2290 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_get_flash_manufacturer()
2291 qla2x00_write_flash_byte(ha, 0x5555, 0x90); in qla2x00_get_flash_manufacturer()
2292 *man_id = qla2x00_read_flash_byte(ha, 0x0000); in qla2x00_get_flash_manufacturer()
2293 *flash_id = qla2x00_read_flash_byte(ha, 0x0001); in qla2x00_get_flash_manufacturer()
2294 qla2x00_write_flash_byte(ha, 0x5555, 0xaa); in qla2x00_get_flash_manufacturer()
2295 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55); in qla2x00_get_flash_manufacturer()
2296 qla2x00_write_flash_byte(ha, 0x5555, 0xf0); in qla2x00_get_flash_manufacturer()
2300 qla2x00_read_flash_data(struct qla_hw_data *ha, uint8_t *tmp_buf, in qla2x00_read_flash_data() argument
2303 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_read_flash_data()
2316 data = qla2x00_read_flash_byte(ha, saddr); in qla2x00_read_flash_data()
2329 struct qla_hw_data *ha = vha->hw; in qla2x00_suspend_hba() local
2330 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_suspend_hba()
2334 ha->isp_ops->disable_intrs(ha); in qla2x00_suspend_hba()
2335 set_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla2x00_suspend_hba()
2338 spin_lock_irqsave(&ha->hardware_lock, flags); in qla2x00_suspend_hba()
2341 if (IS_QLA2100(ha) || IS_QLA2200(ha) || IS_QLA2300(ha)) { in qla2x00_suspend_hba()
2350 spin_unlock_irqrestore(&ha->hardware_lock, flags); in qla2x00_suspend_hba()
2356 struct qla_hw_data *ha = vha->hw; in qla2x00_resume_hba() local
2359 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla2x00_resume_hba()
2372 struct qla_hw_data *ha = vha->hw; in qla2x00_read_optrom_data() local
2373 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_read_optrom_data()
2379 midpoint = ha->optrom_size / 2; in qla2x00_read_optrom_data()
2381 qla2x00_flash_enable(ha); in qla2x00_read_optrom_data()
2390 *data = qla2x00_read_flash_byte(ha, addr); in qla2x00_read_optrom_data()
2392 qla2x00_flash_disable(ha); in qla2x00_read_optrom_data()
2409 struct qla_hw_data *ha = vha->hw; in qla2x00_write_optrom_data() local
2410 struct device_reg_2xxx __iomem *reg = &ha->iobase->isp; in qla2x00_write_optrom_data()
2420 pci_read_config_word(ha->pdev, PCI_COMMAND, &wd); in qla2x00_write_optrom_data()
2423 qla2x00_flash_enable(ha); in qla2x00_write_optrom_data()
2426 if (IS_OEM_001(ha)) { in qla2x00_write_optrom_data()
2433 qla2x00_get_flash_manufacturer(ha, &man_id, &flash_id); in qla2x00_write_optrom_data()
2526 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_write_optrom_data()
2527 if (qla2x00_erase_flash(ha, man_id, flash_id)) { in qla2x00_write_optrom_data()
2538 if (IS_QLA2322(ha) || IS_QLA6322(ha)) { in qla2x00_write_optrom_data()
2567 } else if (addr == ha->optrom_size / 2) { in qla2x00_write_optrom_data()
2573 qla2x00_write_flash_byte(ha, 0x5555, in qla2x00_write_optrom_data()
2575 qla2x00_write_flash_byte(ha, 0x2aaa, in qla2x00_write_optrom_data()
2577 qla2x00_write_flash_byte(ha, 0x5555, in qla2x00_write_optrom_data()
2579 } else if (!IS_QLA2322(ha) && !IS_QLA6322(ha)) { in qla2x00_write_optrom_data()
2581 if (qla2x00_erase_flash_sector(ha, in qla2x00_write_optrom_data()
2603 if (qla2x00_program_flash_address(ha, addr, *data, in qla2x00_write_optrom_data()
2611 qla2x00_flash_disable(ha); in qla2x00_write_optrom_data()
2623 struct qla_hw_data *ha = vha->hw; in qla24xx_read_optrom_data() local
2628 set_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_read_optrom_data()
2638 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_read_optrom_data()
2677 struct qla_hw_data *ha = vha->hw; in qla28xx_get_flash_region() local
2678 struct qla_flt_header *flt = ha->flt; in qla28xx_get_flash_region()
2683 if (!ha->flt) in qla28xx_get_flash_region()
2703 struct qla_hw_data *ha = vha->hw; in qla28xx_write_flash_data() local
2730 optrom = dma_alloc_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla28xx_write_flash_data()
2743 if (ha->flags.secure_adapter && region.attribute) { in qla28xx_write_flash_data()
2805 sfub = dma_alloc_coherent(&ha->pdev->dev, in qla28xx_write_flash_data()
2825 rest_addr = (ha->fdt_block_size >> 2) - 1; in qla28xx_write_flash_data()
2861 if (ha->flags.secure_adapter) { in qla28xx_write_flash_data()
2867 if (!ha->flags.secure_fw) { in qla28xx_write_flash_data()
2891 ha->flags.fac_supported = 0; in qla28xx_write_flash_data()
2948 flash_data_addr(ha, faddr), dburst); in qla28xx_write_flash_data()
2952 flash_data_addr(ha, faddr), optrom, in qla28xx_write_flash_data()
2988 dma_free_coherent(&ha->pdev->dev, in qla28xx_write_flash_data()
2999 struct qla_hw_data *ha = vha->hw; in qla24xx_write_optrom_data() local
3003 set_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_write_optrom_data()
3006 if (IS_QLA28XX(ha)) in qla24xx_write_optrom_data()
3013 clear_bit(MBX_UPDATE_FLASH_ACTIVE, &ha->mbx_cmd_flags); in qla24xx_write_optrom_data()
3028 struct qla_hw_data *ha = vha->hw; in qla25xx_read_optrom_data() local
3030 if (IS_QLA25XX(ha) || IS_QLA81XX(ha) || IS_QLA83XX(ha) || in qla25xx_read_optrom_data()
3031 IS_QLA27XX(ha) || IS_QLA28XX(ha)) in qla25xx_read_optrom_data()
3041 optrom = dma_alloc_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla25xx_read_optrom_data()
3059 flash_data_addr(ha, faddr), burst); in qla25xx_read_optrom_data()
3063 rval, flash_data_addr(ha, faddr), in qla25xx_read_optrom_data()
3068 dma_free_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, in qla25xx_read_optrom_data()
3080 dma_free_coherent(&ha->pdev->dev, OPTROM_BURST_SIZE, optrom, in qla25xx_read_optrom_data()
3108 qla2x00_get_fcode_version(struct qla_hw_data *ha, uint32_t pcids) in qla2x00_get_fcode_version() argument
3114 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla2x00_get_fcode_version()
3118 ((qla2x00_read_flash_byte(ha, pcids + 0x0B) << 8) | in qla2x00_get_fcode_version()
3119 qla2x00_read_flash_byte(ha, pcids + 0x0A)); in qla2x00_get_fcode_version()
3127 if (qla2x00_read_flash_byte(ha, iter) == '/') { in qla2x00_get_fcode_version()
3128 if (qla2x00_read_flash_byte(ha, iter + 2) == in qla2x00_get_fcode_version()
3131 else if (qla2x00_read_flash_byte(ha, in qla2x00_get_fcode_version()
3143 if (qla2x00_read_flash_byte(ha, iter) == ' ') in qla2x00_get_fcode_version()
3157 rbyte = qla2x00_read_flash_byte(ha, iter); in qla2x00_get_fcode_version()
3167 ((vend - iter) < sizeof(ha->fcode_revision))) { in qla2x00_get_fcode_version()
3168 vbyte = ha->fcode_revision; in qla2x00_get_fcode_version()
3170 *vbyte++ = qla2x00_read_flash_byte(ha, iter); in qla2x00_get_fcode_version()
3178 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla2x00_get_fcode_version()
3189 struct qla_hw_data *ha = vha->hw; in qla2x00_get_flash_version() local
3191 if (!ha->pio_address || !mbuf) in qla2x00_get_flash_version()
3194 memset(ha->bios_revision, 0, sizeof(ha->bios_revision)); in qla2x00_get_flash_version()
3195 memset(ha->efi_revision, 0, sizeof(ha->efi_revision)); in qla2x00_get_flash_version()
3196 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla2x00_get_flash_version()
3197 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla2x00_get_flash_version()
3199 qla2x00_flash_enable(ha); in qla2x00_get_flash_version()
3206 if (qla2x00_read_flash_byte(ha, pcihdr) != 0x55 || in qla2x00_get_flash_version()
3207 qla2x00_read_flash_byte(ha, pcihdr + 0x01) != 0xaa) { in qla2x00_get_flash_version()
3217 ((qla2x00_read_flash_byte(ha, pcihdr + 0x19) << 8) | in qla2x00_get_flash_version()
3218 qla2x00_read_flash_byte(ha, pcihdr + 0x18)); in qla2x00_get_flash_version()
3221 if (qla2x00_read_flash_byte(ha, pcids) != 'P' || in qla2x00_get_flash_version()
3222 qla2x00_read_flash_byte(ha, pcids + 0x1) != 'C' || in qla2x00_get_flash_version()
3223 qla2x00_read_flash_byte(ha, pcids + 0x2) != 'I' || in qla2x00_get_flash_version()
3224 qla2x00_read_flash_byte(ha, pcids + 0x3) != 'R') { in qla2x00_get_flash_version()
3233 code_type = qla2x00_read_flash_byte(ha, pcids + 0x14); in qla2x00_get_flash_version()
3237 ha->bios_revision[0] = in qla2x00_get_flash_version()
3238 qla2x00_read_flash_byte(ha, pcids + 0x12); in qla2x00_get_flash_version()
3239 ha->bios_revision[1] = in qla2x00_get_flash_version()
3240 qla2x00_read_flash_byte(ha, pcids + 0x13); in qla2x00_get_flash_version()
3243 ha->bios_revision[1], ha->bios_revision[0]); in qla2x00_get_flash_version()
3248 qla2x00_get_fcode_version(ha, pcids); in qla2x00_get_flash_version()
3252 ha->efi_revision[0] = in qla2x00_get_flash_version()
3253 qla2x00_read_flash_byte(ha, pcids + 0x12); in qla2x00_get_flash_version()
3254 ha->efi_revision[1] = in qla2x00_get_flash_version()
3255 qla2x00_read_flash_byte(ha, pcids + 0x13); in qla2x00_get_flash_version()
3258 ha->efi_revision[1], ha->efi_revision[0]); in qla2x00_get_flash_version()
3267 last_image = qla2x00_read_flash_byte(ha, pcids + 0x15) & BIT_7; in qla2x00_get_flash_version()
3270 pcihdr += ((qla2x00_read_flash_byte(ha, pcids + 0x11) << 8) | in qla2x00_get_flash_version()
3271 qla2x00_read_flash_byte(ha, pcids + 0x10)) * 512; in qla2x00_get_flash_version()
3274 if (IS_QLA2322(ha)) { in qla2x00_get_flash_version()
3276 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla2x00_get_flash_version()
3281 qla2x00_read_flash_data(ha, dbyte, ha->flt_region_fw * 4 + 10, in qla2x00_get_flash_version()
3295 ha->flt_region_fw * 4); in qla2x00_get_flash_version()
3298 ha->fw_revision[0] = dbyte[0] << 16 | dbyte[1]; in qla2x00_get_flash_version()
3299 ha->fw_revision[1] = dbyte[2] << 16 | dbyte[3]; in qla2x00_get_flash_version()
3300 ha->fw_revision[2] = dbyte[4] << 16 | dbyte[5]; in qla2x00_get_flash_version()
3303 "%d.%d.%d.\n", ha->fw_revision[0], in qla2x00_get_flash_version()
3304 ha->fw_revision[1], ha->fw_revision[2]); in qla2x00_get_flash_version()
3308 qla2x00_flash_disable(ha); in qla2x00_get_flash_version()
3321 struct qla_hw_data *ha = vha->hw; in qla82xx_get_flash_version() local
3326 memset(ha->bios_revision, 0, sizeof(ha->bios_revision)); in qla82xx_get_flash_version()
3327 memset(ha->efi_revision, 0, sizeof(ha->efi_revision)); in qla82xx_get_flash_version()
3328 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla82xx_get_flash_version()
3329 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla82xx_get_flash_version()
3332 pcihdr = ha->flt_region_boot << 2; in qla82xx_get_flash_version()
3336 ha->isp_ops->read_optrom(vha, dcode, pcihdr, 0x20 * 4); in qla82xx_get_flash_version()
3349 ha->isp_ops->read_optrom(vha, dcode, pcids, 0x20 * 4); in qla82xx_get_flash_version()
3366 ha->bios_revision[0] = bcode[0x12]; in qla82xx_get_flash_version()
3367 ha->bios_revision[1] = bcode[0x13]; in qla82xx_get_flash_version()
3370 ha->bios_revision[1], ha->bios_revision[0]); in qla82xx_get_flash_version()
3374 ha->fcode_revision[0] = bcode[0x12]; in qla82xx_get_flash_version()
3375 ha->fcode_revision[1] = bcode[0x13]; in qla82xx_get_flash_version()
3378 ha->fcode_revision[1], ha->fcode_revision[0]); in qla82xx_get_flash_version()
3382 ha->efi_revision[0] = bcode[0x12]; in qla82xx_get_flash_version()
3383 ha->efi_revision[1] = bcode[0x13]; in qla82xx_get_flash_version()
3386 ha->efi_revision[1], ha->efi_revision[0]); in qla82xx_get_flash_version()
3402 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla82xx_get_flash_version()
3404 ha->isp_ops->read_optrom(vha, dcode, ha->flt_region_fw << 2, 0x20); in qla82xx_get_flash_version()
3410 ha->fw_revision[0] = bcode[0x4]; in qla82xx_get_flash_version()
3411 ha->fw_revision[1] = bcode[0x5]; in qla82xx_get_flash_version()
3412 ha->fw_revision[2] = bcode[0x6]; in qla82xx_get_flash_version()
3415 ha->fw_revision[0], ha->fw_revision[1], in qla82xx_get_flash_version()
3416 ha->fw_revision[2]); in qla82xx_get_flash_version()
3431 struct qla_hw_data *ha = vha->hw; in qla24xx_get_flash_version() local
3435 if (IS_P3P_TYPE(ha)) in qla24xx_get_flash_version()
3441 memset(ha->bios_revision, 0, sizeof(ha->bios_revision)); in qla24xx_get_flash_version()
3442 memset(ha->efi_revision, 0, sizeof(ha->efi_revision)); in qla24xx_get_flash_version()
3443 memset(ha->fcode_revision, 0, sizeof(ha->fcode_revision)); in qla24xx_get_flash_version()
3444 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla24xx_get_flash_version()
3446 pcihdr = ha->flt_region_boot << 2; in qla24xx_get_flash_version()
3447 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla24xx_get_flash_version()
3450 pcihdr = ha->flt_region_boot_sec << 2; in qla24xx_get_flash_version()
3497 ha->bios_revision[0] = bcode[0x12]; in qla24xx_get_flash_version()
3498 ha->bios_revision[1] = bcode[0x13]; in qla24xx_get_flash_version()
3501 ha->bios_revision[1], ha->bios_revision[0]); in qla24xx_get_flash_version()
3505 ha->fcode_revision[0] = bcode[0x12]; in qla24xx_get_flash_version()
3506 ha->fcode_revision[1] = bcode[0x13]; in qla24xx_get_flash_version()
3509 ha->fcode_revision[1], ha->fcode_revision[0]); in qla24xx_get_flash_version()
3513 ha->efi_revision[0] = bcode[0x12]; in qla24xx_get_flash_version()
3514 ha->efi_revision[1] = bcode[0x13]; in qla24xx_get_flash_version()
3517 ha->efi_revision[1], ha->efi_revision[0]); in qla24xx_get_flash_version()
3533 memset(ha->fw_revision, 0, sizeof(ha->fw_revision)); in qla24xx_get_flash_version()
3534 faddr = ha->flt_region_fw; in qla24xx_get_flash_version()
3535 if (IS_QLA27XX(ha) || IS_QLA28XX(ha)) { in qla24xx_get_flash_version()
3538 faddr = ha->flt_region_fw_sec; in qla24xx_get_flash_version()
3550 ha->flt_region_fw * 4); in qla24xx_get_flash_version()
3554 ha->fw_revision[i] = in qla24xx_get_flash_version()
3558 ha->fw_revision[0], ha->fw_revision[1], in qla24xx_get_flash_version()
3559 ha->fw_revision[2], ha->fw_revision[3]); in qla24xx_get_flash_version()
3564 if (!IS_QLA81XX(ha)) { in qla24xx_get_flash_version()
3569 memset(ha->gold_fw_version, 0, sizeof(ha->gold_fw_version)); in qla24xx_get_flash_version()
3570 faddr = ha->flt_region_gold_fw; in qla24xx_get_flash_version()
3571 ret = qla24xx_read_flash_data(vha, dcode, ha->flt_region_gold_fw, 8); in qla24xx_get_flash_version()
3585 ha->gold_fw_version[i] = in qla24xx_get_flash_version()
3611 struct qla_hw_data *ha = vha->hw; in qla2xxx_get_vpd_field() local
3612 uint8_t *pos = ha->vpd; in qla2xxx_get_vpd_field()
3613 uint8_t *end = pos + ha->vpd_size; in qla2xxx_get_vpd_field()
3616 if (!IS_FWI2_CAPABLE(ha) || !qla2xxx_is_vpd_valid(pos, end)) in qla2xxx_get_vpd_field()
3642 struct qla_hw_data *ha = vha->hw; in qla24xx_read_fcp_prio_cfg() local
3644 if (!ha->fcp_prio_cfg) { in qla24xx_read_fcp_prio_cfg()
3645 ha->fcp_prio_cfg = vmalloc(FCP_PRIO_CFG_SIZE); in qla24xx_read_fcp_prio_cfg()
3646 if (!ha->fcp_prio_cfg) { in qla24xx_read_fcp_prio_cfg()
3653 memset(ha->fcp_prio_cfg, 0, FCP_PRIO_CFG_SIZE); in qla24xx_read_fcp_prio_cfg()
3655 fcp_prio_addr = ha->flt_region_fcp_prio; in qla24xx_read_fcp_prio_cfg()
3658 ha->isp_ops->read_optrom(vha, ha->fcp_prio_cfg, in qla24xx_read_fcp_prio_cfg()
3661 if (!qla24xx_fcp_prio_cfg_valid(vha, ha->fcp_prio_cfg, 0)) in qla24xx_read_fcp_prio_cfg()
3666 len = ha->fcp_prio_cfg->num_entries * sizeof(struct qla_fcp_prio_entry); in qla24xx_read_fcp_prio_cfg()
3669 ha->isp_ops->read_optrom(vha, &ha->fcp_prio_cfg->entry[0], in qla24xx_read_fcp_prio_cfg()
3673 if (!qla24xx_fcp_prio_cfg_valid(vha, ha->fcp_prio_cfg, 1)) in qla24xx_read_fcp_prio_cfg()
3676 ha->flags.fcp_prio_enabled = 1; in qla24xx_read_fcp_prio_cfg()
3679 vfree(ha->fcp_prio_cfg); in qla24xx_read_fcp_prio_cfg()
3680 ha->fcp_prio_cfg = NULL; in qla24xx_read_fcp_prio_cfg()