Lines Matching refs:dd

212 static int load_fabric_serdes_firmware(struct hfi1_devdata *dd,
214 static void dump_fw_version(struct hfi1_devdata *dd);
229 static int __read_8051_data(struct hfi1_devdata *dd, u32 addr, u64 *result) in __read_8051_data() argument
237 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, reg); in __read_8051_data()
239 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, in __read_8051_data()
244 while ((read_csr(dd, DC_DC8051_CFG_RAM_ACCESS_STATUS) in __read_8051_data()
249 dd_dev_err(dd, "timeout reading 8051 data\n"); in __read_8051_data()
256 *result = read_csr(dd, DC_DC8051_CFG_RAM_ACCESS_RD_DATA); in __read_8051_data()
265 int read_8051_data(struct hfi1_devdata *dd, u32 addr, u32 len, u64 *result) in read_8051_data() argument
271 spin_lock_irqsave(&dd->dc8051_memlock, flags); in read_8051_data()
274 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_SETUP, 0); in read_8051_data()
277 ret = __read_8051_data(dd, addr, result); in read_8051_data()
283 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, 0); in read_8051_data()
285 spin_unlock_irqrestore(&dd->dc8051_memlock, flags); in read_8051_data()
293 static int write_8051(struct hfi1_devdata *dd, int code, u32 start, in write_8051() argument
306 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_SETUP, reg); in write_8051()
311 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, reg); in write_8051()
325 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_WR_DATA, reg); in write_8051()
329 while ((read_csr(dd, DC_DC8051_CFG_RAM_ACCESS_STATUS) in write_8051()
334 dd_dev_err(dd, "timeout writing 8051 data\n"); in write_8051()
342 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, 0); in write_8051()
343 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_SETUP, 0); in write_8051()
349 static int invalid_header(struct hfi1_devdata *dd, const char *what, in invalid_header() argument
355 dd_dev_err(dd, in invalid_header()
364 static int verify_css_header(struct hfi1_devdata *dd, struct css_header *css) in verify_css_header() argument
367 if (invalid_header(dd, "module_type", css->module_type, in verify_css_header()
369 invalid_header(dd, "header_len", css->header_len, in verify_css_header()
371 invalid_header(dd, "header_version", css->header_version, in verify_css_header()
373 invalid_header(dd, "module_vendor", css->module_vendor, in verify_css_header()
375 invalid_header(dd, "key_size", css->key_size, KEY_SIZE / 4) || in verify_css_header()
376 invalid_header(dd, "modulus_size", css->modulus_size, in verify_css_header()
378 invalid_header(dd, "exponent_size", css->exponent_size, in verify_css_header()
388 static int payload_check(struct hfi1_devdata *dd, const char *name, in payload_check() argument
393 dd_dev_err(dd, in payload_check()
407 static int obtain_one_firmware(struct hfi1_devdata *dd, const char *name, in obtain_one_firmware() argument
415 ret = request_firmware(&fdet->fw, name, &dd->pcidev->dev); in obtain_one_firmware()
417 dd_dev_warn(dd, "cannot find firmware \"%s\", err %d\n", in obtain_one_firmware()
424 dd_dev_err(dd, "firmware \"%s\" is too small\n", name); in obtain_one_firmware()
461 ret = verify_css_header(dd, css); in obtain_one_firmware()
463 dd_dev_info(dd, "Invalid CSS header for \"%s\"\n", name); in obtain_one_firmware()
470 ret = payload_check(dd, name, fdet->fw->size, in obtain_one_firmware()
486 …dd_dev_err(dd, "driver is unable to validate firmware without r2 and mu (not in firmware file)\n"); in obtain_one_firmware()
495 ret = payload_check(dd, name, fdet->fw->size, in obtain_one_firmware()
510 dd_dev_err(dd, in obtain_one_firmware()
541 static void __obtain_firmware(struct hfi1_devdata *dd) in __obtain_firmware() argument
557 dd_dev_warn(dd, "using alternate firmware names\n"); in __obtain_firmware()
587 err = obtain_one_firmware(dd, fw_sbus_name, &fw_sbus); in __obtain_firmware()
593 err = obtain_one_firmware(dd, fw_pcie_serdes_name, &fw_pcie); in __obtain_firmware()
599 err = obtain_one_firmware(dd, fw_fabric_serdes_name, in __obtain_firmware()
606 err = obtain_one_firmware(dd, fw_8051_name, &fw_8051); in __obtain_firmware()
614 if (fw_state == FW_EMPTY && dd->icode == ICODE_RTL_SILICON) { in __obtain_firmware()
619 dd_dev_err(dd, "unable to obtain working firmware\n"); in __obtain_firmware()
625 dd->icode != ICODE_FUNCTIONAL_SIMULATOR) in __obtain_firmware()
641 static int obtain_firmware(struct hfi1_devdata *dd) in obtain_firmware() argument
656 dd_dev_err(dd, "Timeout waiting for firmware try"); in obtain_firmware()
669 __obtain_firmware(dd); in obtain_firmware()
703 static int retry_firmware(struct hfi1_devdata *dd, int load_result) in retry_firmware() argument
719 __obtain_firmware(dd); in retry_firmware()
734 static void write_rsa_data(struct hfi1_devdata *dd, int what, in write_rsa_data() argument
745 write_csr(dd, what + (8 * i), *ptr); in write_rsa_data()
752 write_csr(dd, what + (8 * i), value); in write_rsa_data()
761 static void write_streamed_rsa_data(struct hfi1_devdata *dd, int what, in write_streamed_rsa_data() argument
768 write_csr(dd, what, *ptr); in write_streamed_rsa_data()
775 static int run_rsa(struct hfi1_devdata *dd, const char *who, in run_rsa() argument
784 write_rsa_data(dd, MISC_CFG_RSA_SIGNATURE, signature, KEY_SIZE); in run_rsa()
787 write_csr(dd, MISC_CFG_RSA_CMD, RSA_CMD_INIT); in run_rsa()
793 status = (read_csr(dd, MISC_CFG_FW_CTRL) in run_rsa()
797 dd_dev_err(dd, "%s security engine not idle - giving up\n", in run_rsa()
803 write_csr(dd, MISC_CFG_RSA_CMD, RSA_CMD_START); in run_rsa()
828 status = (read_csr(dd, MISC_CFG_FW_CTRL) in run_rsa()
834 dd_dev_err(dd, "%s firmware security bad idle state\n", in run_rsa()
854 dd_dev_err(dd, "%s firmware security time out\n", who); in run_rsa()
868 write_csr(dd, MISC_ERR_CLEAR, in run_rsa()
876 reg = read_csr(dd, MISC_ERR_STATUS); in run_rsa()
879 dd_dev_warn(dd, "%s firmware authorization failed\n", in run_rsa()
882 dd_dev_warn(dd, "%s firmware key mismatch\n", who); in run_rsa()
888 static void load_security_variables(struct hfi1_devdata *dd, in load_security_variables() argument
892 write_rsa_data(dd, MISC_CFG_RSA_MODULUS, fdet->modulus, KEY_SIZE); in load_security_variables()
894 write_rsa_data(dd, MISC_CFG_RSA_R2, fdet->r2, KEY_SIZE); in load_security_variables()
896 write_rsa_data(dd, MISC_CFG_RSA_MU, fdet->mu, MU_SIZE); in load_security_variables()
898 write_streamed_rsa_data(dd, MISC_CFG_SHA_PRELOAD, in load_security_variables()
904 static inline u32 get_firmware_state(struct hfi1_devdata *dd) in get_firmware_state() argument
906 u64 reg = read_csr(dd, DC_DC8051_STS_CUR_STATE); in get_firmware_state()
916 int wait_fm_ready(struct hfi1_devdata *dd, u32 mstimeout) in wait_fm_ready() argument
921 if (dd->icode == ICODE_FUNCTIONAL_SIMULATOR) in wait_fm_ready()
926 if (get_firmware_state(dd) == 0xa0) /* ready */ in wait_fm_ready()
937 static int load_8051_firmware(struct hfi1_devdata *dd, in load_8051_firmware() argument
958 write_csr(dd, DC_DC8051_CFG_RST, reg); in load_8051_firmware()
970 write_csr(dd, DC_DC8051_CFG_RST, reg); in load_8051_firmware()
973 load_security_variables(dd, fdet); in load_8051_firmware()
978 write_csr(dd, MISC_CFG_FW_CTRL, 0); in load_8051_firmware()
981 ret = write_8051(dd, 1/*code*/, 0, fdet->firmware_ptr, in load_8051_firmware()
992 write_csr(dd, MISC_CFG_FW_CTRL, MISC_CFG_FW_CTRL_FW_8051_LOADED_SMASK); in load_8051_firmware()
995 ret = run_rsa(dd, "8051", fdet->signature); in load_8051_firmware()
1000 write_csr(dd, DC_DC8051_CFG_RST, 0ull); in load_8051_firmware()
1006 ret = wait_fm_ready(dd, TIMEOUT_8051_START); in load_8051_firmware()
1008 dd_dev_err(dd, "8051 start timeout, current state 0x%x\n", in load_8051_firmware()
1009 get_firmware_state(dd)); in load_8051_firmware()
1013 read_misc_status(dd, &ver_major, &ver_minor, &ver_patch); in load_8051_firmware()
1014 dd_dev_info(dd, "8051 firmware version %d.%d.%d\n", in load_8051_firmware()
1016 dd->dc8051_ver = dc8051_ver(ver_major, ver_minor, ver_patch); in load_8051_firmware()
1017 ret = write_host_interface_version(dd, HOST_INTERFACE_VERSION); in load_8051_firmware()
1019 dd_dev_err(dd, in load_8051_firmware()
1033 void sbus_request(struct hfi1_devdata *dd, in sbus_request() argument
1036 write_csr(dd, ASIC_CFG_SBUS_REQUEST, in sbus_request()
1049 static u32 sbus_read(struct hfi1_devdata *dd, u8 receiver_addr, u8 data_addr, in sbus_read() argument
1058 sbus_request(dd, receiver_addr, data_addr, READ_SBUS_RECEIVER, data_in); in sbus_read()
1062 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_read()
1075 dd_dev_err(dd, "%s: read failed, result code 0x%x\n", __func__, in sbus_read()
1090 static void turn_off_spicos(struct hfi1_devdata *dd, int flags) in turn_off_spicos() argument
1093 if (!is_ax(dd)) in turn_off_spicos()
1096 dd_dev_info(dd, "Turning off spicos:%s%s\n", in turn_off_spicos()
1100 write_csr(dd, MISC_CFG_FW_CTRL, ENABLE_SPICO_SMASK); in turn_off_spicos()
1103 sbus_request(dd, SBUS_MASTER_BROADCAST, 0x01, in turn_off_spicos()
1108 sbus_request(dd, fabric_serdes_broadcast[dd->hfi1_id], in turn_off_spicos()
1110 write_csr(dd, MISC_CFG_FW_CTRL, 0); in turn_off_spicos()
1127 void fabric_serdes_reset(struct hfi1_devdata *dd) in fabric_serdes_reset() argument
1134 ret = acquire_chip_resource(dd, CR_SBUS, SBUS_TIMEOUT); in fabric_serdes_reset()
1136 dd_dev_err(dd, in fabric_serdes_reset()
1140 set_sbus_fast_mode(dd); in fabric_serdes_reset()
1142 if (is_ax(dd)) { in fabric_serdes_reset()
1144 u8 ra = fabric_serdes_broadcast[dd->hfi1_id]; in fabric_serdes_reset()
1147 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000011); in fabric_serdes_reset()
1151 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000010); in fabric_serdes_reset()
1153 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000002); in fabric_serdes_reset()
1155 turn_off_spicos(dd, SPICO_FABRIC); in fabric_serdes_reset()
1163 (void)load_fabric_serdes_firmware(dd, &fw_fabric); in fabric_serdes_reset()
1166 clear_sbus_fast_mode(dd); in fabric_serdes_reset()
1167 release_chip_resource(dd, CR_SBUS); in fabric_serdes_reset()
1171 int sbus_request_slow(struct hfi1_devdata *dd, in sbus_request_slow() argument
1177 clear_sbus_fast_mode(dd); in sbus_request_slow()
1179 sbus_request(dd, receiver_addr, data_addr, command, data_in); in sbus_request_slow()
1180 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, in sbus_request_slow()
1183 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1187 u64 counts = read_csr(dd, ASIC_STS_SBUS_COUNTERS); in sbus_request_slow()
1200 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1203 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, 0); in sbus_request_slow()
1205 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1210 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1215 static int load_fabric_serdes_firmware(struct hfi1_devdata *dd, in load_fabric_serdes_firmware() argument
1219 const u8 ra = fabric_serdes_broadcast[dd->hfi1_id]; /* receiver addr */ in load_fabric_serdes_firmware()
1221 dd_dev_info(dd, "Downloading fabric firmware\n"); in load_fabric_serdes_firmware()
1224 load_security_variables(dd, fdet); in load_fabric_serdes_firmware()
1226 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000011); in load_fabric_serdes_firmware()
1230 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000010); in load_fabric_serdes_firmware()
1232 sbus_request(dd, ra, 0x00, WRITE_SBUS_RECEIVER, 0x40000000); in load_fabric_serdes_firmware()
1235 sbus_request(dd, ra, 0x0a, WRITE_SBUS_RECEIVER, in load_fabric_serdes_firmware()
1239 sbus_request(dd, ra, 0x00, WRITE_SBUS_RECEIVER, 0x00000000); in load_fabric_serdes_firmware()
1241 sbus_request(dd, ra, 0x0b, WRITE_SBUS_RECEIVER, 0x000c0000); in load_fabric_serdes_firmware()
1244 err = run_rsa(dd, "fabric serdes", fdet->signature); in load_fabric_serdes_firmware()
1249 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000002); in load_fabric_serdes_firmware()
1251 sbus_request(dd, ra, 0x08, WRITE_SBUS_RECEIVER, 0x00000000); in load_fabric_serdes_firmware()
1256 static int load_sbus_firmware(struct hfi1_devdata *dd, in load_sbus_firmware() argument
1262 dd_dev_info(dd, "Downloading SBus firmware\n"); in load_sbus_firmware()
1265 load_security_variables(dd, fdet); in load_sbus_firmware()
1267 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x000000c0); in load_sbus_firmware()
1269 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000240); in load_sbus_firmware()
1271 sbus_request(dd, ra, 0x03, WRITE_SBUS_RECEIVER, 0x80000000); in load_sbus_firmware()
1274 sbus_request(dd, ra, 0x14, WRITE_SBUS_RECEIVER, in load_sbus_firmware()
1278 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000040); in load_sbus_firmware()
1280 sbus_request(dd, ra, 0x16, WRITE_SBUS_RECEIVER, 0x000c0000); in load_sbus_firmware()
1283 err = run_rsa(dd, "SBus", fdet->signature); in load_sbus_firmware()
1288 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000140); in load_sbus_firmware()
1293 static int load_pcie_serdes_firmware(struct hfi1_devdata *dd, in load_pcie_serdes_firmware() argument
1299 dd_dev_info(dd, "Downloading PCIe firmware\n"); in load_pcie_serdes_firmware()
1302 load_security_variables(dd, fdet); in load_pcie_serdes_firmware()
1304 sbus_request(dd, ra, 0x05, WRITE_SBUS_RECEIVER, 0x00000001); in load_pcie_serdes_firmware()
1306 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000d40); in load_pcie_serdes_firmware()
1313 sbus_request(dd, ra, 0x04, WRITE_SBUS_RECEIVER, in load_pcie_serdes_firmware()
1317 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000140); in load_pcie_serdes_firmware()
1319 sbus_request(dd, ra, 0x05, WRITE_SBUS_RECEIVER, 0x00000000); in load_pcie_serdes_firmware()
1325 return run_rsa(dd, "PCIe serdes", fdet->signature); in load_pcie_serdes_firmware()
1331 static void set_serdes_broadcast(struct hfi1_devdata *dd, u8 bg1, u8 bg2, in set_serdes_broadcast() argument
1347 sbus_request(dd, addrs[count], 0xfd, WRITE_SBUS_RECEIVER, in set_serdes_broadcast()
1352 int acquire_hw_mutex(struct hfi1_devdata *dd) in acquire_hw_mutex() argument
1356 u8 mask = 1 << dd->hfi1_id; in acquire_hw_mutex()
1357 u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); in acquire_hw_mutex()
1360 dd_dev_info(dd, in acquire_hw_mutex()
1369 write_csr(dd, ASIC_CFG_MUTEX, mask); in acquire_hw_mutex()
1370 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); in acquire_hw_mutex()
1379 dd_dev_err(dd, in acquire_hw_mutex()
1385 write_csr(dd, ASIC_CFG_MUTEX, 0); in acquire_hw_mutex()
1393 void release_hw_mutex(struct hfi1_devdata *dd) in release_hw_mutex() argument
1395 u8 mask = 1 << dd->hfi1_id; in release_hw_mutex()
1396 u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); in release_hw_mutex()
1399 dd_dev_warn(dd, in release_hw_mutex()
1403 write_csr(dd, ASIC_CFG_MUTEX, 0); in release_hw_mutex()
1412 static void fail_mutex_acquire_message(struct hfi1_devdata *dd, in fail_mutex_acquire_message() argument
1415 dd_dev_err(dd, in fail_mutex_acquire_message()
1425 static int __acquire_chip_resource(struct hfi1_devdata *dd, u32 resource) in __acquire_chip_resource() argument
1432 if (dd->pcidev->device == PCI_DEVICE_ID_INTEL0 && in __acquire_chip_resource()
1441 my_bit = resource_mask(dd->hfi1_id, resource); in __acquire_chip_resource()
1449 mutex_lock(&dd->asic_data->asic_resource_mutex); in __acquire_chip_resource()
1451 ret = acquire_hw_mutex(dd); in __acquire_chip_resource()
1453 fail_mutex_acquire_message(dd, __func__); in __acquire_chip_resource()
1458 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in __acquire_chip_resource()
1462 write_csr(dd, ASIC_CFG_SCRATCH, scratch0 | my_bit); in __acquire_chip_resource()
1464 (void)read_csr(dd, ASIC_CFG_SCRATCH); in __acquire_chip_resource()
1467 release_hw_mutex(dd); in __acquire_chip_resource()
1470 mutex_unlock(&dd->asic_data->asic_resource_mutex); in __acquire_chip_resource()
1481 int acquire_chip_resource(struct hfi1_devdata *dd, u32 resource, u32 mswait) in acquire_chip_resource() argument
1488 ret = __acquire_chip_resource(dd, resource); in acquire_chip_resource()
1501 void release_chip_resource(struct hfi1_devdata *dd, u32 resource) in release_chip_resource() argument
1507 dd_dev_err(dd, "%s: invalid resource 0x%x\n", __func__, in release_chip_resource()
1511 bit = resource_mask(dd->hfi1_id, resource); in release_chip_resource()
1514 mutex_lock(&dd->asic_data->asic_resource_mutex); in release_chip_resource()
1516 if (acquire_hw_mutex(dd)) { in release_chip_resource()
1517 fail_mutex_acquire_message(dd, __func__); in release_chip_resource()
1521 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in release_chip_resource()
1524 write_csr(dd, ASIC_CFG_SCRATCH, scratch0); in release_chip_resource()
1526 (void)read_csr(dd, ASIC_CFG_SCRATCH); in release_chip_resource()
1528 dd_dev_warn(dd, "%s: id %d, resource 0x%x: bit not set\n", in release_chip_resource()
1529 __func__, dd->hfi1_id, resource); in release_chip_resource()
1532 release_hw_mutex(dd); in release_chip_resource()
1535 mutex_unlock(&dd->asic_data->asic_resource_mutex); in release_chip_resource()
1542 bool check_chip_resource(struct hfi1_devdata *dd, u32 resource, in check_chip_resource() argument
1548 bit = resource_mask(dd->hfi1_id, resource); in check_chip_resource()
1552 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in check_chip_resource()
1555 dd_dev_warn(dd, in check_chip_resource()
1557 func, dd->hfi1_id, resource); in check_chip_resource()
1563 static void clear_chip_resources(struct hfi1_devdata *dd, const char *func) in clear_chip_resources() argument
1568 mutex_lock(&dd->asic_data->asic_resource_mutex); in clear_chip_resources()
1570 if (acquire_hw_mutex(dd)) { in clear_chip_resources()
1571 fail_mutex_acquire_message(dd, func); in clear_chip_resources()
1576 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in clear_chip_resources()
1577 scratch0 &= ~resource_mask(dd->hfi1_id, CR_DYN_MASK); in clear_chip_resources()
1578 write_csr(dd, ASIC_CFG_SCRATCH, scratch0); in clear_chip_resources()
1580 (void)read_csr(dd, ASIC_CFG_SCRATCH); in clear_chip_resources()
1582 release_hw_mutex(dd); in clear_chip_resources()
1585 mutex_unlock(&dd->asic_data->asic_resource_mutex); in clear_chip_resources()
1588 void init_chip_resources(struct hfi1_devdata *dd) in init_chip_resources() argument
1591 clear_chip_resources(dd, __func__); in init_chip_resources()
1594 void finish_chip_resources(struct hfi1_devdata *dd) in finish_chip_resources() argument
1597 clear_chip_resources(dd, __func__); in finish_chip_resources()
1600 void set_sbus_fast_mode(struct hfi1_devdata *dd) in set_sbus_fast_mode() argument
1602 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, in set_sbus_fast_mode()
1606 void clear_sbus_fast_mode(struct hfi1_devdata *dd) in clear_sbus_fast_mode() argument
1610 reg = read_csr(dd, ASIC_STS_SBUS_COUNTERS); in clear_sbus_fast_mode()
1616 reg = read_csr(dd, ASIC_STS_SBUS_COUNTERS); in clear_sbus_fast_mode()
1618 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, 0); in clear_sbus_fast_mode()
1621 int load_firmware(struct hfi1_devdata *dd) in load_firmware() argument
1626 ret = acquire_chip_resource(dd, CR_SBUS, SBUS_TIMEOUT); in load_firmware()
1630 set_sbus_fast_mode(dd); in load_firmware()
1632 set_serdes_broadcast(dd, all_fabric_serdes_broadcast, in load_firmware()
1633 fabric_serdes_broadcast[dd->hfi1_id], in load_firmware()
1634 fabric_serdes_addrs[dd->hfi1_id], in load_firmware()
1636 turn_off_spicos(dd, SPICO_FABRIC); in load_firmware()
1638 ret = load_fabric_serdes_firmware(dd, &fw_fabric); in load_firmware()
1639 } while (retry_firmware(dd, ret)); in load_firmware()
1641 clear_sbus_fast_mode(dd); in load_firmware()
1642 release_chip_resource(dd, CR_SBUS); in load_firmware()
1649 ret = load_8051_firmware(dd, &fw_8051); in load_firmware()
1650 } while (retry_firmware(dd, ret)); in load_firmware()
1655 dump_fw_version(dd); in load_firmware()
1659 int hfi1_firmware_init(struct hfi1_devdata *dd) in hfi1_firmware_init() argument
1662 if (dd->icode != ICODE_RTL_SILICON) { in hfi1_firmware_init()
1669 if (dd->icode == ICODE_FUNCTIONAL_SIMULATOR) in hfi1_firmware_init()
1673 if (dd->icode == ICODE_RTL_SILICON) in hfi1_firmware_init()
1685 return obtain_firmware(dd); in hfi1_firmware_init()
1695 static int check_meta_version(struct hfi1_devdata *dd, u32 *system_table) in check_meta_version() argument
1698 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in check_meta_version()
1720 dd, "%s:Please update platform config\n", __func__); in check_meta_version()
1726 int parse_platform_config(struct hfi1_devdata *dd) in parse_platform_config() argument
1728 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in parse_platform_config()
1729 struct hfi1_pportdata *ppd = dd->pport; in parse_platform_config()
1744 if (!dd->platform_config.data) { in parse_platform_config()
1745 dd_dev_err(dd, "%s: Missing config file\n", __func__); in parse_platform_config()
1749 ptr = (u32 *)dd->platform_config.data; in parse_platform_config()
1754 dd_dev_err(dd, "%s: Bad config file\n", __func__); in parse_platform_config()
1768 dd_dev_info(dd, in parse_platform_config()
1776 if (file_length > dd->platform_config.size) { in parse_platform_config()
1777 dd_dev_info(dd, "%s:File claims to be larger than read size\n", in parse_platform_config()
1781 } else if (file_length < dd->platform_config.size) { in parse_platform_config()
1782 dd_dev_info(dd, in parse_platform_config()
1793 while (ptr < (u32 *)(dd->platform_config.data + file_length)) { in parse_platform_config()
1797 dd_dev_err(dd, "%s: Failed validation at offset %ld\n", in parse_platform_config()
1799 dd->platform_config.data)); in parse_platform_config()
1823 ret = check_meta_version(dd, ptr); in parse_platform_config()
1839 dd_dev_err(dd, in parse_platform_config()
1843 dd->platform_config.data)); in parse_platform_config()
1859 dd_dev_err(dd, in parse_platform_config()
1863 (u32 *)dd->platform_config.data)); in parse_platform_config()
1879 dd_dev_err(dd, "%s: Failed CRC check at offset %ld\n", in parse_platform_config()
1881 (u32 *)dd->platform_config.data)); in parse_platform_config()
1897 struct hfi1_devdata *dd, in get_integrated_platform_config_field() argument
1901 struct hfi1_pportdata *ppd = dd->pport; in get_integrated_platform_config_field()
1974 static int get_platform_fw_field_metadata(struct hfi1_devdata *dd, int table, in get_platform_fw_field_metadata() argument
1978 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in get_platform_fw_field_metadata()
1996 dd_dev_info(dd, "%s: Unknown table\n", __func__); in get_platform_fw_field_metadata()
2030 int get_platform_config_field(struct hfi1_devdata *dd, in get_platform_config_field() argument
2037 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in get_platform_config_field()
2038 struct hfi1_pportdata *ppd = dd->pport; in get_platform_config_field()
2049 get_integrated_platform_config_field(dd, table_type, in get_platform_config_field()
2054 ret = get_platform_fw_field_metadata(dd, table_type, field_index, in get_platform_config_field()
2087 src_ptr = dd->hfi1_id ? in get_platform_config_field()
2104 dd_dev_info(dd, "%s: Unknown table\n", __func__); in get_platform_config_field()
2124 int load_pcie_firmware(struct hfi1_devdata *dd) in load_pcie_firmware() argument
2129 set_sbus_fast_mode(dd); in load_pcie_firmware()
2132 turn_off_spicos(dd, SPICO_SBUS); in load_pcie_firmware()
2134 ret = load_sbus_firmware(dd, &fw_sbus); in load_pcie_firmware()
2135 } while (retry_firmware(dd, ret)); in load_pcie_firmware()
2141 dd_dev_info(dd, "Setting PCIe SerDes broadcast\n"); in load_pcie_firmware()
2142 set_serdes_broadcast(dd, all_pcie_serdes_broadcast, in load_pcie_firmware()
2143 pcie_serdes_broadcast[dd->hfi1_id], in load_pcie_firmware()
2144 pcie_serdes_addrs[dd->hfi1_id], in load_pcie_firmware()
2147 ret = load_pcie_serdes_firmware(dd, &fw_pcie); in load_pcie_firmware()
2148 } while (retry_firmware(dd, ret)); in load_pcie_firmware()
2154 clear_sbus_fast_mode(dd); in load_pcie_firmware()
2162 void read_guid(struct hfi1_devdata *dd) in read_guid() argument
2165 write_csr(dd, CCE_DC_CTRL, 0); in read_guid()
2166 (void)read_csr(dd, CCE_DC_CTRL); in read_guid()
2168 dd->base_guid = read_csr(dd, DC_DC8051_CFG_LOCAL_GUID); in read_guid()
2169 dd_dev_info(dd, "GUID %llx", in read_guid()
2170 (unsigned long long)dd->base_guid); in read_guid()
2174 static void dump_fw_version(struct hfi1_devdata *dd) in dump_fw_version() argument
2184 ret = acquire_chip_resource(dd, CR_SBUS, SBUS_TIMEOUT); in dump_fw_version()
2186 dd_dev_err(dd, "Unable to acquire SBus to read firmware versions\n"); in dump_fw_version()
2191 set_sbus_fast_mode(dd); in dump_fw_version()
2194 sbus_request(dd, SBUS_MASTER_BROADCAST, 0x02, WRITE_SBUS_RECEIVER, 0); in dump_fw_version()
2195 sbus_request(dd, SBUS_MASTER_BROADCAST, 0x07, WRITE_SBUS_RECEIVER, 0x1); in dump_fw_version()
2198 sbus_vers = sbus_read(dd, SBUS_MASTER_BROADCAST, 0x08, 0x1); in dump_fw_version()
2199 dd_dev_info(dd, "SBus Master firmware version 0x%08x\n", sbus_vers); in dump_fw_version()
2205 rcv_addr = pcie_serdes_addrs[dd->hfi1_id][i]; in dump_fw_version()
2206 sbus_request(dd, rcv_addr, 0x03, WRITE_SBUS_RECEIVER, 0); in dump_fw_version()
2209 pcie_vers[i] = sbus_read(dd, rcv_addr, 0x04, 0x0); in dump_fw_version()
2215 dd_dev_info(dd, "PCIe SerDes firmware version 0x%x\n", in dump_fw_version()
2218 dd_dev_warn(dd, "PCIe SerDes do not have the same firmware version\n"); in dump_fw_version()
2220 dd_dev_info(dd, in dump_fw_version()
2230 rcv_addr = fabric_serdes_addrs[dd->hfi1_id][i]; in dump_fw_version()
2231 sbus_request(dd, rcv_addr, 0x03, WRITE_SBUS_RECEIVER, 0); in dump_fw_version()
2234 fabric_vers[i] = sbus_read(dd, rcv_addr, 0x04, 0x0); in dump_fw_version()
2240 dd_dev_info(dd, "Fabric SerDes firmware version 0x%x\n", in dump_fw_version()
2243 dd_dev_warn(dd, "Fabric SerDes do not have the same firmware version\n"); in dump_fw_version()
2245 dd_dev_info(dd, in dump_fw_version()
2251 clear_sbus_fast_mode(dd); in dump_fw_version()
2252 release_chip_resource(dd, CR_SBUS); in dump_fw_version()