10 #include <linux/slab.h>
12 #include <asm/uaccess.h>
40 while ((data &
BIT_0) == 0) {
113 for (cnt = 0; cnt < 11; cnt++) {
117 qla2x00_nv_write(ha, 0);
122 for (cnt = 0; cnt < 16; cnt++) {
160 data = qla2x00_nvram_request(ha, nv_cmd);
195 qla2x00_nv_write(ha, 0);
196 qla2x00_nv_write(ha, 0);
198 for (word = 0; word < 8; word++)
201 qla2x00_nv_deselect(ha);
207 for (count = 0; count < 27; count++) {
211 qla2x00_nv_write(ha, 0);
216 qla2x00_nv_deselect(ha);
225 "NVRAM didn't go ready...\n");
232 qla2x00_nv_deselect(ha);
236 for (count = 0; count < 10; count++)
237 qla2x00_nv_write(ha, 0);
239 qla2x00_nv_deselect(ha);
254 qla2x00_nv_write(ha, 0);
255 qla2x00_nv_write(ha, 0);
257 for (word = 0; word < 8; word++)
260 qla2x00_nv_deselect(ha);
266 for (count = 0; count < 27; count++) {
270 qla2x00_nv_write(ha, 0);
275 qla2x00_nv_deselect(ha);
287 }
while ((word & NVR_DATA_IN) == 0);
289 qla2x00_nv_deselect(ha);
293 for (count = 0; count < 10; count++)
294 qla2x00_nv_write(ha, 0);
296 qla2x00_nv_deselect(ha);
306 qla2x00_clear_nvram_protection(
struct qla_hw_data *ha)
318 stat = qla2x00_write_nvram_word_tmo(ha, ha->
nvram_base,
324 qla2x00_nv_write(ha, 0);
325 qla2x00_nv_write(ha, 0);
326 for (word = 0; word < 8; word++)
329 qla2x00_nv_deselect(ha);
335 for (word = 0; word < 8; word++)
338 qla2x00_nv_deselect(ha);
344 for (word = 0; word < 8; word++)
347 qla2x00_nv_deselect(ha);
356 "NVRAM didn't go ready...\n");
361 }
while ((word & NVR_DATA_IN) == 0);
366 qla2x00_write_nvram_word(ha, ha->
nvram_base, wprot_old);
372 qla2x00_set_nvram_protection(
struct qla_hw_data *ha,
int stat)
384 qla2x00_nv_write(ha, 0);
385 qla2x00_nv_write(ha, 0);
386 for (word = 0; word < 8; word++)
389 qla2x00_nv_deselect(ha);
395 for (word = 0; word < 8; word++)
398 qla2x00_nv_deselect(ha);
404 for (word = 0; word < 8; word++)
407 qla2x00_nv_deselect(ha);
416 "NVRAM didn't go ready...\n");
421 }
while ((word & NVR_DATA_IN) == 0);
489 for (i = 0; i < dwords; i++, faddr++)
490 dwptr[i] =
cpu_to_le32(qla24xx_read_flash_dword(ha,
491 flash_data_addr(ha, faddr)));
525 ids = qla24xx_read_flash_dword(ha, flash_conf_addr(ha, 0x03ab));
527 *flash_id =
MSB(ids);
530 if (ids != 0xDEADDEAD && (*man_id == 0 || *flash_id == 0)) {
537 ids = qla24xx_read_flash_dword(ha, flash_conf_addr(ha, 0x009f));
539 *flash_id =
MSB(ids);
546 const char *
loc, *locations[] = {
"DEF",
"PCI" };
583 bcode = buf + (pcihdr % 4);
584 if (bcode[0x0] != 0x55 || bcode[0x1] != 0xaa)
588 pcids = pcihdr + ((bcode[0x19] << 8) | bcode[0x18]);
590 bcode = buf + (pcihdr % 4);
593 if (bcode[0x0] !=
'P' || bcode[0x1] !=
'C' ||
594 bcode[0x2] !=
'I' || bcode[0x3] !=
'R')
597 last_image = bcode[0x15] &
BIT_7;
600 pcihdr += ((bcode[0x11] << 8) | bcode[0x10]) * 512;
601 }
while (!last_image);
607 if (fltl->
sig[0] !=
'Q' || fltl->
sig[1] !=
'F' ||
608 fltl->
sig[2] !=
'L' || fltl->
sig[3] !=
'T')
613 for (chksum = 0;
cnt; cnt--)
617 "Inconsistent FLTL detected: checksum=0x%x.\n", chksum);
629 "FLTL[%s] = 0x%x.\n",
637 const char *
loc, *locations[] = {
"DEF",
"FLT" };
686 fcp_prio_cfg0[def] : fcp_prio_cfg1[def];
698 "Unsupported FLT detected: version=0x%x length=0x%x checksum=0x%x.\n",
705 for (chksum = 0;
cnt; cnt--)
709 "Inconsistent FLT detected: version=0x%x length=0x%x checksum=0x%x.\n",
717 for ( ;
cnt; cnt--, region++) {
721 "FLT[%02x]: start=0x%x "
752 if (!ha->
flags.port0)
764 if (!ha->
flags.port0)
775 if (!ha->
flags.port0)
786 if (!ha->
flags.port0)
814 if (!ha->
flags.port0)
826 if (!ha->
flags.port0)
840 def_vpd0[def] : def_vpd1[def];
842 def_nvram0[def] : def_nvram1[def];
845 def_npiv_conf0[def] : def_npiv_conf1[def];
848 "FLT[%s]: boot=0x%x fw=0x%x vpd_nvram=0x%x vpd=0x%x nvram=0x%x "
849 "fdt=0x%x flt=0x%x npiv=0x%x fcp_prif_cfg=0x%x.\n",
859 #define FLASH_BLK_SIZE_4K 0x1000
860 #define FLASH_BLK_SIZE_32K 0x8000
861 #define FLASH_BLK_SIZE_64K 0x10000
862 const char *
loc, *locations[] = {
"MID",
"FDT" };
877 if (fdt->
sig[0] !=
'Q' || fdt->
sig[1] !=
'L' || fdt->
sig[2] !=
'I' ||
881 for (cnt = 0, chksum = 0; cnt < sizeof(struct qla_fdt_layout) >> 1;
886 "Inconsistent FDT detected:"
887 " checksum=0x%x id=%c version0x%x.\n", chksum,
905 flash_conf_addr(ha, 0x0336);
914 qla24xx_get_flash_manufacturer(ha, &man_id, &flash_id);
921 if (flash_id == 0x8e)
926 if (flash_id == 0x80)
945 "FDT[%s]: (0x%x/0x%x) erase=0x%x "
946 "pr=%x wrtd=0x%x blk=0x%x.\n",
956 #define QLA82XX_IDC_PARAM_ADDR 0x003e885c
966 QLA82XX_IDC_PARAM_ADDR , 8);
976 "fcoe_dev_init_timeout=%d "
993 ret = qla2xxx_find_flt_start(vha, &flt_addr);
997 qla2xxx_get_flt_info(vha, flt_addr);
998 qla2xxx_get_fdt_info(vha);
999 qla2xxx_get_idc_param(vha);
1007 #define NPIV_CONFIG_SIZE (16*1024)
1020 if (ha->
flags.nic_core_reset_hdlr_active)
1029 "Unsupported NPIV-Config "
1030 "detected: version=0x%x entries=0x%x checksum=0x%x.\n",
1039 "Unable to allocate memory for data.\n");
1048 for (wptr = data, chksum = 0;
cnt; cnt--)
1052 "Inconsistent NPIV-Config "
1053 "detected: version=0x%x entries=0x%x checksum=0x%x.\n",
1061 for (i = 0;
cnt; cnt--, entry++, i++) {
1069 if (flags == 0xffff)
1071 if ((flags &
BIT_0) == 0)
1074 memset(&vid, 0,
sizeof(vid));
1078 vid.
port_name = wwn_to_u64(entry->port_name);
1079 vid.
node_name = wwn_to_u64(entry->node_name);
1082 "NPIV[%02x]: wwpn=%llx "
1083 "wwnn=%llx vf_id=0x%x Q_qos=0x%x F_qos=0x%x.\n", cnt,
1086 le16_to_cpu(entry->vf_id),
1087 entry->q_qos, entry->f_qos);
1093 "NPIV-Config Failed to create vport [%02x]: "
1094 "wwpn=%llx wwnn=%llx.\n", cnt,
1109 if (ha->
flags.fac_supported)
1121 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0);
1123 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101), 0);
1135 if (ha->
flags.fac_supported)
1139 goto skip_wrt_protect;
1142 qla24xx_write_flash_dword(ha, flash_conf_addr(ha, 0x101),
1144 for (cnt = 300; cnt &&
1145 qla24xx_read_flash_dword(ha, flash_conf_addr(ha, 0x005)) &
BIT_0;
1165 if (ha->
flags.fac_supported) {
1169 start), flash_data_addr(ha, finish));
1173 (fdata & 0xff00) | ((fdata << 16) & 0xff0000) |
1174 ((fdata >> 16) & 0xff));
1186 void *optrom =
NULL;
1196 "Unable to allocate "
1197 "memory for optrom burst write (%x KB).\n",
1203 sec_mask = ~rest_addr;
1205 ret = qla24xx_unprotect_flash(vha);
1208 "Unable to unprotect flash for update.\n");
1212 for (liter = 0; liter < dwords; liter++, faddr++, dwptr++) {
1213 fdata = (faddr & sec_mask) << 2;
1216 if ((faddr & rest_addr) == 0) {
1219 qla24xx_write_flash_dword(ha,
1221 (fdata & 0xff00) | ((fdata << 16) &
1222 0xff0000) | ((fdata >> 16) & 0xff));
1223 ret = qla24xx_erase_sector(vha, fdata);
1226 "Unable to erase erase sector: address=%x.\n",
1238 flash_data_addr(ha, faddr),
1242 "Unable to burst-write optrom segment "
1243 "(%x/%x/%llx).\n", ret,
1244 flash_data_addr(ha, faddr),
1245 (
unsigned long long)optrom_dma);
1247 "Reverting to slow-write.\n");
1260 ret = qla24xx_write_flash_dword(ha,
1264 "Unable to program flash address=%x data=%x.\n",
1271 ((faddr & rest_addr) == rest_addr))
1272 qla24xx_write_flash_dword(ha,
1274 (fdata & 0xff00) | ((fdata << 16) &
1275 0xff0000) | ((fdata >> 16) & 0xff));
1278 ret = qla24xx_protect_flash(vha);
1281 "Unable to protect flash after update.\n");
1300 qla2x00_lock_nvram_access(ha);
1301 for (i = 0; i < bytes >> 1; i++, naddr++)
1304 qla2x00_unlock_nvram_access(ha);
1322 for (i = 0; i < bytes >> 2; i++, naddr++)
1323 dwptr[i] =
cpu_to_le32(qla24xx_read_flash_dword(ha,
1324 nvram_data_addr(ha, naddr)));
1336 unsigned long flags;
1342 qla2x00_lock_nvram_access(ha);
1345 stat = qla2x00_clear_nvram_protection(ha);
1348 for (i = 0; i < bytes >> 1; i++, naddr++) {
1349 qla2x00_write_nvram_word(ha, naddr,
1355 qla2x00_set_nvram_protection(ha, stat);
1357 qla2x00_unlock_nvram_access(ha);
1358 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1384 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0);
1385 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0);
1389 for (i = 0; i < bytes >> 2; i++, naddr++, dwptr++) {
1390 ret = qla24xx_write_flash_dword(ha,
1394 "Unable to program nvram address=%x data=%x.\n",
1401 qla24xx_write_flash_dword(ha, nvram_conf_addr(ha, 0x101), 0x8c);
1421 for (i = 0; i < bytes >> 2; i++, naddr++)
1422 dwptr[i] =
cpu_to_le32(qla24xx_read_flash_dword(ha,
1433 #define RMW_BUFFER_SIZE (64 * 1024)
1441 memcpy(dbuf + (naddr << 2), buf, bytes);
1477 #define PIO_REG(h, r) ((h)->pio_address + offsetof(struct device_reg_2xxx, r))
1485 unsigned long flags;
1513 qla2x00_flip_colors(ha, &led_color);
1519 gpio_data |= led_color;
1529 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1537 unsigned long flags;
1546 "Unable to update fw options (beacon on).\n");
1577 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1603 ha->
isp_ops->beacon_blink(vha);
1611 "Unable to update fw options (beacon off).\n");
1636 unsigned long flags;
1651 qla24xx_flip_colors(ha, &led_color);
1657 gpio_data |= led_color;
1662 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1673 if (ha->
flags.port0)
1679 return led_select_value;
1689 uint32_t led_10_value, led_43_value;
1698 led_select_value = qla83xx_select_led_port(ha);
1706 led_select_value = qla83xx_select_led_port(ha);
1724 led_cfg[0] = 0x4000;
1725 led_cfg[1] = 0x2000;
1731 led_cfg[0] = 0x4000;
1732 led_cfg[1] = 0x4000;
1733 led_cfg[2] = 0x4000;
1734 led_cfg[3] = 0x2000;
1736 led_cfg[5] = 0x2000;
1741 led_cfg[0] = 0x4000;
1742 led_cfg[1] = 0x2000;
1745 led_cfg[0] = 0x4000;
1746 led_cfg[1] = 0x2000;
1747 led_cfg[2] = 0x4000;
1748 led_cfg[3] = 0x4000;
1750 led_cfg[5] = 0x2000;
1763 unsigned long flags;
1783 "Unable to update fw options (beacon on).\n");
1798 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1815 unsigned long flags;
1825 goto set_fw_options;
1832 ha->
isp_ops->beacon_blink(vha);
1842 spin_unlock_irqrestore(&ha->hardware_lock, flags);
1849 "Unable to update fw options (beacon on).\n");
1855 "Unable to update fw options (beacon on).\n");
1920 bank_select &= ~0xf8;
1921 bank_select |= addr >> 12 & 0xf0;
1937 }
else if (((addr & BIT_16) == 0) &&
1938 (bank_select & CSR_FLASH_64K_BANK)) {
1954 }
while (data != data2);
1957 data = qla2x00_debounce_register(®->
flash_data);
1979 bank_select &= ~0xf8;
1980 bank_select |= addr >> 12 & 0xf0;
1994 if ((addr & BIT_16) && ((bank_select & CSR_FLASH_64K_BANK) == 0)) {
1998 }
else if (((addr & BIT_16) == 0) &&
1999 (bank_select & CSR_FLASH_64K_BANK)) {
2044 for (cnt = 3000000;
cnt; cnt--) {
2045 flash_data = qla2x00_read_flash_byte(ha, addr);
2046 if ((flash_data &
BIT_7) == poll_data) {
2051 if (man_id != 0x40 && man_id != 0xda) {
2052 if ((flash_data &
BIT_5) && cnt > 2)
2078 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa);
2079 qla2x00_write_flash_byte(ha, 0x555, 0x55);
2080 qla2x00_write_flash_byte(ha, 0xaaa, 0xa0);
2081 qla2x00_write_flash_byte(ha, addr, data);
2083 if (man_id == 0xda && flash_id == 0xc1) {
2084 qla2x00_write_flash_byte(ha, addr, data);
2088 qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
2089 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
2090 qla2x00_write_flash_byte(ha, 0x5555, 0xa0);
2091 qla2x00_write_flash_byte(ha, addr, data);
2098 return qla2x00_poll_flash(ha, addr, data, man_id, flash_id);
2114 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa);
2115 qla2x00_write_flash_byte(ha, 0x555, 0x55);
2116 qla2x00_write_flash_byte(ha, 0xaaa, 0x80);
2117 qla2x00_write_flash_byte(ha, 0xaaa, 0xaa);
2118 qla2x00_write_flash_byte(ha, 0x555, 0x55);
2119 qla2x00_write_flash_byte(ha, 0xaaa, 0x10);
2121 qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
2122 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
2123 qla2x00_write_flash_byte(ha, 0x5555, 0x80);
2124 qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
2125 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
2126 qla2x00_write_flash_byte(ha, 0x5555, 0x10);
2132 return qla2x00_poll_flash(ha, 0x00, 0x80, man_id, flash_id);
2150 qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
2151 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
2152 qla2x00_write_flash_byte(ha, 0x5555, 0x80);
2153 qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
2154 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
2155 if (man_id == 0x1f && flash_id == 0x13)
2156 qla2x00_write_flash_byte(ha, addr & sec_mask, 0x10);
2158 qla2x00_write_flash_byte(ha, addr & sec_mask, 0x30);
2163 return qla2x00_poll_flash(ha, addr, 0x80, man_id, flash_id);
2175 qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
2176 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
2177 qla2x00_write_flash_byte(ha, 0x5555, 0x90);
2178 *man_id = qla2x00_read_flash_byte(ha, 0x0000);
2179 *flash_id = qla2x00_read_flash_byte(ha, 0x0001);
2180 qla2x00_write_flash_byte(ha, 0x5555, 0xaa);
2181 qla2x00_write_flash_byte(ha, 0x2aaa, 0x55);
2182 qla2x00_write_flash_byte(ha, 0x5555, 0xf0);
2193 midpoint = length / 2;
2197 for (ilength = 0; ilength <
length; saddr++, ilength++, tmp_buf++) {
2198 if (ilength == midpoint) {
2202 data = qla2x00_read_flash_byte(ha, saddr);
2214 unsigned long flags;
2220 ha->
isp_ops->disable_intrs(ha);
2228 for (cnt = 0; cnt < 30000; cnt++) {
2236 spin_unlock_irqrestore(&ha->hardware_lock, flags);
2262 qla2x00_suspend_hba(vha);
2267 qla2x00_flash_enable(ha);
2270 for (addr = offset, data = buf; addr <
length; addr++, data++) {
2271 if (addr == midpoint) {
2276 *data = qla2x00_read_flash_byte(ha, addr);
2278 qla2x00_flash_disable(ha);
2281 qla2x00_resume_hba(vha);
2299 qla2x00_suspend_hba(vha);
2309 qla2x00_flash_enable(ha);
2314 man_id = flash_id = 0;
2319 qla2x00_get_flash_manufacturer(ha, &man_id, &flash_id);
2322 if (flash_id == 0xd2 || flash_id == 0xe3) {
2356 if (flash_id == 0x38 || flash_id == 0x4f) {
2365 if (flash_id == 0x13) {
2366 rest_addr = 0x7fffffff;
2367 sec_mask = 0x80000000;
2373 if (flash_id == 0x38 || flash_id == 0x40 ||
2380 }
else if (flash_id == 0x3e) {
2389 }
else if (flash_id == 0x20 || flash_id == 0x6e) {
2397 }
else if (flash_id == 0x6d) {
2412 if (qla2x00_erase_flash(ha, man_id, flash_id)) {
2418 for (addr = offset, liter = 0; liter <
length; liter++,
2422 if ((addr & rest_addr) == 0) {
2424 if (addr >= 0x10000UL) {
2425 if (((addr >> 12) & 0xf0) &&
2427 flash_id == 0x3e) ||
2429 flash_id == 0xd2))) {
2431 if (sec_number == 1) {
2457 if (flash_id == 0xda && man_id == 0xc1) {
2458 qla2x00_write_flash_byte(ha, 0x5555,
2460 qla2x00_write_flash_byte(ha, 0x2aaa,
2462 qla2x00_write_flash_byte(ha, 0x5555,
2466 if (qla2x00_erase_flash_sector(ha,
2467 addr, sec_mask, man_id,
2472 if (man_id == 0x01 && flash_id == 0x6d)
2477 if (man_id == 0x01 && flash_id == 0x6d) {
2478 if (sec_number == 1 &&
2479 addr == (rest_addr - 1)) {
2482 }
else if (sec_number == 3 && (addr & 0x7ffe)) {
2488 if (qla2x00_program_flash_address(ha, addr, data,
2489 man_id, flash_id)) {
2496 qla2x00_flash_disable(ha);
2499 qla2x00_resume_hba(vha);
2536 rval = qla24xx_write_flash_data(vha, (
uint32_t *)buf, offset >> 2,
2568 "Unable to allocate memory for optrom burst read (%x KB).\n",
2574 faddr = offset >> 2;
2582 flash_data_addr(ha, faddr), burst);
2585 "Unable to burst-read optrom segment (%x/%x/%llx).\n",
2586 rval, flash_data_addr(ha, faddr),
2587 (
unsigned long long)optrom_dma);
2589 "Reverting to slow-read.\n");
2592 optrom, optrom_dma);
2596 memcpy(pbuf, optrom, burst * 4);
2641 ((qla2x00_read_flash_byte(ha, pcids + 0x0B) << 8) |
2642 qla2x00_read_flash_byte(ha, pcids + 0x0A));
2643 iend = istart + 0x100;
2648 while ((iter < iend) && !do_next) {
2650 if (qla2x00_read_flash_byte(ha, iter) ==
'/') {
2651 if (qla2x00_read_flash_byte(ha, iter + 2) ==
2654 else if (qla2x00_read_flash_byte(ha,
2664 while ((iter > istart) && !do_next) {
2666 if (qla2x00_read_flash_byte(ha, iter) ==
' ')
2678 while ((iter > istart) && !do_next) {
2680 rbyte = qla2x00_read_flash_byte(ha, iter);
2681 if (rbyte ==
' ' || rbyte == 0xd || rbyte == 0x10)
2689 if ((vend - iter) &&
2692 while (iter <= vend) {
2693 *vbyte++ = qla2x00_read_flash_byte(ha, iter);
2708 uint8_t code_type, last_image;
2722 qla2x00_flash_enable(ha);
2729 if (qla2x00_read_flash_byte(ha, pcihdr) != 0x55 ||
2730 qla2x00_read_flash_byte(ha, pcihdr + 0x01) != 0xaa) {
2733 "No matching ROM signature.\n");
2740 ((qla2x00_read_flash_byte(ha, pcihdr + 0x19) << 8) |
2741 qla2x00_read_flash_byte(ha, pcihdr + 0x18));
2744 if (qla2x00_read_flash_byte(ha, pcids) !=
'P' ||
2745 qla2x00_read_flash_byte(ha, pcids + 0x1) !=
'C' ||
2746 qla2x00_read_flash_byte(ha, pcids + 0x2) !=
'I' ||
2747 qla2x00_read_flash_byte(ha, pcids + 0x3) !=
'R') {
2750 "PCI data struct not found pcir_adr=%x.\n", pcids);
2756 code_type = qla2x00_read_flash_byte(ha, pcids + 0x14);
2757 switch (code_type) {
2761 qla2x00_read_flash_byte(ha, pcids + 0x12);
2763 qla2x00_read_flash_byte(ha, pcids + 0x13);
2765 "Read BIOS %d.%d.\n",
2771 qla2x00_get_fcode_version(ha, pcids);
2776 qla2x00_read_flash_byte(ha, pcids + 0x12);
2778 qla2x00_read_flash_byte(ha, pcids + 0x13);
2780 "Read EFI %d.%d.\n",
2785 "Unrecognized code type %x at pcids %x.\n",
2790 last_image = qla2x00_read_flash_byte(ha, pcids + 0x15) &
BIT_7;
2793 pcihdr += ((qla2x00_read_flash_byte(ha, pcids + 0x11) << 8) |
2794 qla2x00_read_flash_byte(ha, pcids + 0x10)) * 512;
2795 }
while (!last_image);
2804 qla2x00_read_flash_data(ha, dbyte, ha->
flt_region_fw * 4 + 10,
2808 "ver from flash:.\n");
2812 if ((dcode[0] == 0xffff && dcode[1] == 0xffff &&
2813 dcode[2] == 0xffff && dcode[3] == 0xffff) ||
2814 (dcode[0] == 0 && dcode[1] == 0 && dcode[2] == 0 &&
2817 "Unrecognized fw revision at %x.\n",
2831 qla2x00_flash_disable(ha);
2843 uint8_t code_type, last_image;
2866 bcode = mbuf + (pcihdr % 4);
2867 if (bcode[0x0] != 0x55 || bcode[0x1] != 0xaa) {
2870 "No matching ROM signature.\n");
2876 pcids = pcihdr + ((bcode[0x19] << 8) | bcode[0x18]);
2879 bcode = mbuf + (pcihdr % 4);
2882 if (bcode[0x0] !=
'P' || bcode[0x1] !=
'C' ||
2883 bcode[0x2] !=
'I' || bcode[0x3] !=
'R') {
2886 "PCI data struct not found pcir_adr=%x.\n", pcids);
2892 code_type = bcode[0x14];
2893 switch (code_type) {
2899 "Read BIOS %d.%d.\n",
2907 "Read FCODE %d.%d.\n",
2915 "Read EFI %d.%d.\n",
2920 "Unrecognized code type %x at pcids %x.\n",
2925 last_image = bcode[0x15] &
BIT_7;
2928 pcihdr += ((bcode[0x11] << 8) | bcode[0x10]) * 512;
2929 }
while (!last_image);
2936 for (i = 0; i < 4; i++)
2939 if ((dcode[0] == 0xffffffff && dcode[1] == 0xffffffff &&
2940 dcode[2] == 0xffffffff && dcode[3] == 0xffffffff) ||
2941 (dcode[0] == 0 && dcode[1] == 0 && dcode[2] == 0 &&
2944 "Unrecognized fw revision at %x.\n",
2952 "Firmware revision %d.%d.%d.%d.\n",
2968 if (dcode[4] == 0xFFFFFFFF && dcode[5] == 0xFFFFFFFF &&
2969 dcode[6] == 0xFFFFFFFF && dcode[7] == 0xFFFFFFFF) {
2971 "Unrecognized golden fw at 0x%x.\n",
2976 for (i = 4; i < 8; i++)
2985 if (pos >= end || *pos != 0x82)
2989 if (pos >= end || *pos != 0x90)
2993 if (pos >= end || *pos != 0x78)
3010 while (pos < end && *pos != 0x78) {
3011 len = (*pos == 0x82) ? pos[1] : pos[2];
3016 if (*pos != 0x90 && *pos != 0x91)
3022 if (pos < end - len && *pos != 0x78)
3023 return snprintf(str, size,
"%.*s", len, pos + 3);
3039 "Unable to allocate memory for fcp priorty data (%x).\n",
3061 fcp_prio_addr << 2, (len < max_len ? len : max_len));
3067 ha->
flags.fcp_prio_enabled = 1;