Lines Matching refs:dd

255 static int load_fabric_serdes_firmware(struct hfi1_devdata *dd,
257 static void dump_fw_version(struct hfi1_devdata *dd);
272 static int __read_8051_data(struct hfi1_devdata *dd, u32 addr, u64 *result) in __read_8051_data() argument
280 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, reg); in __read_8051_data()
282 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, in __read_8051_data()
287 while ((read_csr(dd, DC_DC8051_CFG_RAM_ACCESS_STATUS) in __read_8051_data()
292 dd_dev_err(dd, "timeout reading 8051 data\n"); in __read_8051_data()
299 *result = read_csr(dd, DC_DC8051_CFG_RAM_ACCESS_RD_DATA); in __read_8051_data()
308 int read_8051_data(struct hfi1_devdata *dd, u32 addr, u32 len, u64 *result) in read_8051_data() argument
314 spin_lock_irqsave(&dd->dc8051_memlock, flags); in read_8051_data()
317 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_SETUP, 0); in read_8051_data()
320 ret = __read_8051_data(dd, addr, result); in read_8051_data()
326 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, 0); in read_8051_data()
328 spin_unlock_irqrestore(&dd->dc8051_memlock, flags); in read_8051_data()
336 static int write_8051(struct hfi1_devdata *dd, int code, u32 start, in write_8051() argument
349 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_SETUP, reg); in write_8051()
354 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, reg); in write_8051()
368 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_WR_DATA, reg); in write_8051()
372 while ((read_csr(dd, DC_DC8051_CFG_RAM_ACCESS_STATUS) in write_8051()
377 dd_dev_err(dd, "timeout writing 8051 data\n"); in write_8051()
385 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_CTRL, 0); in write_8051()
386 write_csr(dd, DC_DC8051_CFG_RAM_ACCESS_SETUP, 0); in write_8051()
392 static int invalid_header(struct hfi1_devdata *dd, const char *what, in invalid_header() argument
398 dd_dev_err(dd, in invalid_header()
407 static int verify_css_header(struct hfi1_devdata *dd, struct css_header *css) in verify_css_header() argument
410 if (invalid_header(dd, "module_type", css->module_type, in verify_css_header()
412 invalid_header(dd, "header_len", css->header_len, in verify_css_header()
414 invalid_header(dd, "header_version", css->header_version, in verify_css_header()
416 invalid_header(dd, "module_vendor", css->module_vendor, in verify_css_header()
418 invalid_header(dd, "key_size", css->key_size, KEY_SIZE / 4) || in verify_css_header()
419 invalid_header(dd, "modulus_size", css->modulus_size, in verify_css_header()
421 invalid_header(dd, "exponent_size", css->exponent_size, in verify_css_header()
431 static int payload_check(struct hfi1_devdata *dd, const char *name, in payload_check() argument
436 dd_dev_err(dd, in payload_check()
450 static int obtain_one_firmware(struct hfi1_devdata *dd, const char *name, in obtain_one_firmware() argument
458 ret = request_firmware(&fdet->fw, name, &dd->pcidev->dev); in obtain_one_firmware()
460 dd_dev_warn(dd, "cannot find firmware \"%s\", err %d\n", in obtain_one_firmware()
467 dd_dev_err(dd, "firmware \"%s\" is too small\n", name); in obtain_one_firmware()
504 ret = verify_css_header(dd, css); in obtain_one_firmware()
506 dd_dev_info(dd, "Invalid CSS header for \"%s\"\n", name); in obtain_one_firmware()
513 ret = payload_check(dd, name, fdet->fw->size, in obtain_one_firmware()
529 …dd_dev_err(dd, "driver is unable to validate firmware without r2 and mu (not in firmware file)\n"); in obtain_one_firmware()
538 ret = payload_check(dd, name, fdet->fw->size, in obtain_one_firmware()
553 dd_dev_err(dd, in obtain_one_firmware()
584 static void __obtain_firmware(struct hfi1_devdata *dd) in __obtain_firmware() argument
600 dd_dev_warn(dd, "using alternate firmware names\n"); in __obtain_firmware()
630 err = obtain_one_firmware(dd, fw_sbus_name, &fw_sbus); in __obtain_firmware()
636 err = obtain_one_firmware(dd, fw_pcie_serdes_name, &fw_pcie); in __obtain_firmware()
642 err = obtain_one_firmware(dd, fw_fabric_serdes_name, in __obtain_firmware()
649 err = obtain_one_firmware(dd, fw_8051_name, &fw_8051); in __obtain_firmware()
657 if (fw_state == FW_EMPTY && dd->icode == ICODE_RTL_SILICON) { in __obtain_firmware()
662 dd_dev_err(dd, "unable to obtain working firmware\n"); in __obtain_firmware()
668 dd->icode != ICODE_FUNCTIONAL_SIMULATOR) in __obtain_firmware()
684 static int obtain_firmware(struct hfi1_devdata *dd) in obtain_firmware() argument
699 dd_dev_err(dd, "Timeout waiting for firmware try"); in obtain_firmware()
712 __obtain_firmware(dd); in obtain_firmware()
746 static int retry_firmware(struct hfi1_devdata *dd, int load_result) in retry_firmware() argument
762 __obtain_firmware(dd); in retry_firmware()
777 static void write_rsa_data(struct hfi1_devdata *dd, int what, in write_rsa_data() argument
788 write_csr(dd, what + (8 * i), *ptr); in write_rsa_data()
795 write_csr(dd, what + (8 * i), value); in write_rsa_data()
804 static void write_streamed_rsa_data(struct hfi1_devdata *dd, int what, in write_streamed_rsa_data() argument
811 write_csr(dd, what, *ptr); in write_streamed_rsa_data()
818 static int run_rsa(struct hfi1_devdata *dd, const char *who, in run_rsa() argument
827 write_rsa_data(dd, MISC_CFG_RSA_SIGNATURE, signature, KEY_SIZE); in run_rsa()
830 write_csr(dd, MISC_CFG_RSA_CMD, RSA_CMD_INIT); in run_rsa()
836 status = (read_csr(dd, MISC_CFG_FW_CTRL) in run_rsa()
840 dd_dev_err(dd, "%s security engine not idle - giving up\n", in run_rsa()
846 write_csr(dd, MISC_CFG_RSA_CMD, RSA_CMD_START); in run_rsa()
871 status = (read_csr(dd, MISC_CFG_FW_CTRL) in run_rsa()
877 dd_dev_err(dd, "%s firmware security bad idle state\n", in run_rsa()
897 dd_dev_err(dd, "%s firmware security time out\n", who); in run_rsa()
911 write_csr(dd, MISC_ERR_CLEAR, in run_rsa()
919 reg = read_csr(dd, MISC_ERR_STATUS); in run_rsa()
922 dd_dev_warn(dd, "%s firmware authorization failed\n", in run_rsa()
925 dd_dev_warn(dd, "%s firmware key mismatch\n", who); in run_rsa()
931 static void load_security_variables(struct hfi1_devdata *dd, in load_security_variables() argument
935 write_rsa_data(dd, MISC_CFG_RSA_MODULUS, fdet->modulus, KEY_SIZE); in load_security_variables()
937 write_rsa_data(dd, MISC_CFG_RSA_R2, fdet->r2, KEY_SIZE); in load_security_variables()
939 write_rsa_data(dd, MISC_CFG_RSA_MU, fdet->mu, MU_SIZE); in load_security_variables()
941 write_streamed_rsa_data(dd, MISC_CFG_SHA_PRELOAD, in load_security_variables()
947 static inline u32 get_firmware_state(struct hfi1_devdata *dd) in get_firmware_state() argument
949 u64 reg = read_csr(dd, DC_DC8051_STS_CUR_STATE); in get_firmware_state()
959 int wait_fm_ready(struct hfi1_devdata *dd, u32 mstimeout) in wait_fm_ready() argument
964 if (dd->icode == ICODE_FUNCTIONAL_SIMULATOR) in wait_fm_ready()
969 if (get_firmware_state(dd) == 0xa0) /* ready */ in wait_fm_ready()
980 static int load_8051_firmware(struct hfi1_devdata *dd, in load_8051_firmware() argument
1001 write_csr(dd, DC_DC8051_CFG_RST, reg); in load_8051_firmware()
1013 write_csr(dd, DC_DC8051_CFG_RST, reg); in load_8051_firmware()
1016 load_security_variables(dd, fdet); in load_8051_firmware()
1021 write_csr(dd, MISC_CFG_FW_CTRL, 0); in load_8051_firmware()
1024 ret = write_8051(dd, 1/*code*/, 0, fdet->firmware_ptr, in load_8051_firmware()
1035 write_csr(dd, MISC_CFG_FW_CTRL, MISC_CFG_FW_CTRL_FW_8051_LOADED_SMASK); in load_8051_firmware()
1038 ret = run_rsa(dd, "8051", fdet->signature); in load_8051_firmware()
1043 write_csr(dd, DC_DC8051_CFG_RST, 0ull); in load_8051_firmware()
1049 ret = wait_fm_ready(dd, TIMEOUT_8051_START); in load_8051_firmware()
1051 dd_dev_err(dd, "8051 start timeout, current state 0x%x\n", in load_8051_firmware()
1052 get_firmware_state(dd)); in load_8051_firmware()
1056 read_misc_status(dd, &ver_major, &ver_minor, &ver_patch); in load_8051_firmware()
1057 dd_dev_info(dd, "8051 firmware version %d.%d.%d\n", in load_8051_firmware()
1059 dd->dc8051_ver = dc8051_ver(ver_major, ver_minor, ver_patch); in load_8051_firmware()
1060 ret = write_host_interface_version(dd, HOST_INTERFACE_VERSION); in load_8051_firmware()
1062 dd_dev_err(dd, in load_8051_firmware()
1076 void sbus_request(struct hfi1_devdata *dd, in sbus_request() argument
1079 write_csr(dd, ASIC_CFG_SBUS_REQUEST, in sbus_request()
1092 static u32 sbus_read(struct hfi1_devdata *dd, u8 receiver_addr, u8 data_addr, in sbus_read() argument
1101 sbus_request(dd, receiver_addr, data_addr, READ_SBUS_RECEIVER, data_in); in sbus_read()
1105 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_read()
1118 dd_dev_err(dd, "%s: read failed, result code 0x%x\n", __func__, in sbus_read()
1133 static void turn_off_spicos(struct hfi1_devdata *dd, int flags) in turn_off_spicos() argument
1136 if (!is_ax(dd)) in turn_off_spicos()
1139 dd_dev_info(dd, "Turning off spicos:%s%s\n", in turn_off_spicos()
1143 write_csr(dd, MISC_CFG_FW_CTRL, ENABLE_SPICO_SMASK); in turn_off_spicos()
1146 sbus_request(dd, SBUS_MASTER_BROADCAST, 0x01, in turn_off_spicos()
1151 sbus_request(dd, fabric_serdes_broadcast[dd->hfi1_id], in turn_off_spicos()
1153 write_csr(dd, MISC_CFG_FW_CTRL, 0); in turn_off_spicos()
1170 void fabric_serdes_reset(struct hfi1_devdata *dd) in fabric_serdes_reset() argument
1177 ret = acquire_chip_resource(dd, CR_SBUS, SBUS_TIMEOUT); in fabric_serdes_reset()
1179 dd_dev_err(dd, in fabric_serdes_reset()
1183 set_sbus_fast_mode(dd); in fabric_serdes_reset()
1185 if (is_ax(dd)) { in fabric_serdes_reset()
1187 u8 ra = fabric_serdes_broadcast[dd->hfi1_id]; in fabric_serdes_reset()
1190 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000011); in fabric_serdes_reset()
1194 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000010); in fabric_serdes_reset()
1196 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000002); in fabric_serdes_reset()
1198 turn_off_spicos(dd, SPICO_FABRIC); in fabric_serdes_reset()
1206 (void)load_fabric_serdes_firmware(dd, &fw_fabric); in fabric_serdes_reset()
1209 clear_sbus_fast_mode(dd); in fabric_serdes_reset()
1210 release_chip_resource(dd, CR_SBUS); in fabric_serdes_reset()
1214 int sbus_request_slow(struct hfi1_devdata *dd, in sbus_request_slow() argument
1220 clear_sbus_fast_mode(dd); in sbus_request_slow()
1222 sbus_request(dd, receiver_addr, data_addr, command, data_in); in sbus_request_slow()
1223 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, in sbus_request_slow()
1226 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1230 u64 counts = read_csr(dd, ASIC_STS_SBUS_COUNTERS); in sbus_request_slow()
1243 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1246 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, 0); in sbus_request_slow()
1248 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1253 reg = read_csr(dd, ASIC_STS_SBUS_RESULT); in sbus_request_slow()
1258 static int load_fabric_serdes_firmware(struct hfi1_devdata *dd, in load_fabric_serdes_firmware() argument
1262 const u8 ra = fabric_serdes_broadcast[dd->hfi1_id]; /* receiver addr */ in load_fabric_serdes_firmware()
1264 dd_dev_info(dd, "Downloading fabric firmware\n"); in load_fabric_serdes_firmware()
1267 load_security_variables(dd, fdet); in load_fabric_serdes_firmware()
1269 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000011); in load_fabric_serdes_firmware()
1273 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000010); in load_fabric_serdes_firmware()
1275 sbus_request(dd, ra, 0x00, WRITE_SBUS_RECEIVER, 0x40000000); in load_fabric_serdes_firmware()
1278 sbus_request(dd, ra, 0x0a, WRITE_SBUS_RECEIVER, in load_fabric_serdes_firmware()
1282 sbus_request(dd, ra, 0x00, WRITE_SBUS_RECEIVER, 0x00000000); in load_fabric_serdes_firmware()
1284 sbus_request(dd, ra, 0x0b, WRITE_SBUS_RECEIVER, 0x000c0000); in load_fabric_serdes_firmware()
1287 err = run_rsa(dd, "fabric serdes", fdet->signature); in load_fabric_serdes_firmware()
1292 sbus_request(dd, ra, 0x07, WRITE_SBUS_RECEIVER, 0x00000002); in load_fabric_serdes_firmware()
1294 sbus_request(dd, ra, 0x08, WRITE_SBUS_RECEIVER, 0x00000000); in load_fabric_serdes_firmware()
1299 static int load_sbus_firmware(struct hfi1_devdata *dd, in load_sbus_firmware() argument
1305 dd_dev_info(dd, "Downloading SBus firmware\n"); in load_sbus_firmware()
1308 load_security_variables(dd, fdet); in load_sbus_firmware()
1310 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x000000c0); in load_sbus_firmware()
1312 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000240); in load_sbus_firmware()
1314 sbus_request(dd, ra, 0x03, WRITE_SBUS_RECEIVER, 0x80000000); in load_sbus_firmware()
1317 sbus_request(dd, ra, 0x14, WRITE_SBUS_RECEIVER, in load_sbus_firmware()
1321 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000040); in load_sbus_firmware()
1323 sbus_request(dd, ra, 0x16, WRITE_SBUS_RECEIVER, 0x000c0000); in load_sbus_firmware()
1326 err = run_rsa(dd, "SBus", fdet->signature); in load_sbus_firmware()
1331 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000140); in load_sbus_firmware()
1336 static int load_pcie_serdes_firmware(struct hfi1_devdata *dd, in load_pcie_serdes_firmware() argument
1342 dd_dev_info(dd, "Downloading PCIe firmware\n"); in load_pcie_serdes_firmware()
1345 load_security_variables(dd, fdet); in load_pcie_serdes_firmware()
1347 sbus_request(dd, ra, 0x05, WRITE_SBUS_RECEIVER, 0x00000001); in load_pcie_serdes_firmware()
1349 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000d40); in load_pcie_serdes_firmware()
1356 sbus_request(dd, ra, 0x04, WRITE_SBUS_RECEIVER, in load_pcie_serdes_firmware()
1360 sbus_request(dd, ra, 0x01, WRITE_SBUS_RECEIVER, 0x00000140); in load_pcie_serdes_firmware()
1362 sbus_request(dd, ra, 0x05, WRITE_SBUS_RECEIVER, 0x00000000); in load_pcie_serdes_firmware()
1368 return run_rsa(dd, "PCIe serdes", fdet->signature); in load_pcie_serdes_firmware()
1374 static void set_serdes_broadcast(struct hfi1_devdata *dd, u8 bg1, u8 bg2, in set_serdes_broadcast() argument
1390 sbus_request(dd, addrs[count], 0xfd, WRITE_SBUS_RECEIVER, in set_serdes_broadcast()
1395 int acquire_hw_mutex(struct hfi1_devdata *dd) in acquire_hw_mutex() argument
1399 u8 mask = 1 << dd->hfi1_id; in acquire_hw_mutex()
1400 u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); in acquire_hw_mutex()
1403 dd_dev_info(dd, in acquire_hw_mutex()
1412 write_csr(dd, ASIC_CFG_MUTEX, mask); in acquire_hw_mutex()
1413 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); in acquire_hw_mutex()
1422 dd_dev_err(dd, in acquire_hw_mutex()
1428 write_csr(dd, ASIC_CFG_MUTEX, 0); in acquire_hw_mutex()
1436 void release_hw_mutex(struct hfi1_devdata *dd) in release_hw_mutex() argument
1438 u8 mask = 1 << dd->hfi1_id; in release_hw_mutex()
1439 u8 user = (u8)read_csr(dd, ASIC_CFG_MUTEX); in release_hw_mutex()
1442 dd_dev_warn(dd, in release_hw_mutex()
1446 write_csr(dd, ASIC_CFG_MUTEX, 0); in release_hw_mutex()
1455 static void fail_mutex_acquire_message(struct hfi1_devdata *dd, in fail_mutex_acquire_message() argument
1458 dd_dev_err(dd, in fail_mutex_acquire_message()
1468 static int __acquire_chip_resource(struct hfi1_devdata *dd, u32 resource) in __acquire_chip_resource() argument
1475 if (dd->pcidev->device == PCI_DEVICE_ID_INTEL0 && in __acquire_chip_resource()
1484 my_bit = resource_mask(dd->hfi1_id, resource); in __acquire_chip_resource()
1492 mutex_lock(&dd->asic_data->asic_resource_mutex); in __acquire_chip_resource()
1494 ret = acquire_hw_mutex(dd); in __acquire_chip_resource()
1496 fail_mutex_acquire_message(dd, __func__); in __acquire_chip_resource()
1501 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in __acquire_chip_resource()
1505 write_csr(dd, ASIC_CFG_SCRATCH, scratch0 | my_bit); in __acquire_chip_resource()
1507 (void)read_csr(dd, ASIC_CFG_SCRATCH); in __acquire_chip_resource()
1510 release_hw_mutex(dd); in __acquire_chip_resource()
1513 mutex_unlock(&dd->asic_data->asic_resource_mutex); in __acquire_chip_resource()
1524 int acquire_chip_resource(struct hfi1_devdata *dd, u32 resource, u32 mswait) in acquire_chip_resource() argument
1531 ret = __acquire_chip_resource(dd, resource); in acquire_chip_resource()
1544 void release_chip_resource(struct hfi1_devdata *dd, u32 resource) in release_chip_resource() argument
1550 dd_dev_err(dd, "%s: invalid resource 0x%x\n", __func__, in release_chip_resource()
1554 bit = resource_mask(dd->hfi1_id, resource); in release_chip_resource()
1557 mutex_lock(&dd->asic_data->asic_resource_mutex); in release_chip_resource()
1559 if (acquire_hw_mutex(dd)) { in release_chip_resource()
1560 fail_mutex_acquire_message(dd, __func__); in release_chip_resource()
1564 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in release_chip_resource()
1567 write_csr(dd, ASIC_CFG_SCRATCH, scratch0); in release_chip_resource()
1569 (void)read_csr(dd, ASIC_CFG_SCRATCH); in release_chip_resource()
1571 dd_dev_warn(dd, "%s: id %d, resource 0x%x: bit not set\n", in release_chip_resource()
1572 __func__, dd->hfi1_id, resource); in release_chip_resource()
1575 release_hw_mutex(dd); in release_chip_resource()
1578 mutex_unlock(&dd->asic_data->asic_resource_mutex); in release_chip_resource()
1585 bool check_chip_resource(struct hfi1_devdata *dd, u32 resource, in check_chip_resource() argument
1591 bit = resource_mask(dd->hfi1_id, resource); in check_chip_resource()
1595 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in check_chip_resource()
1598 dd_dev_warn(dd, in check_chip_resource()
1600 func, dd->hfi1_id, resource); in check_chip_resource()
1606 static void clear_chip_resources(struct hfi1_devdata *dd, const char *func) in clear_chip_resources() argument
1611 mutex_lock(&dd->asic_data->asic_resource_mutex); in clear_chip_resources()
1613 if (acquire_hw_mutex(dd)) { in clear_chip_resources()
1614 fail_mutex_acquire_message(dd, func); in clear_chip_resources()
1619 scratch0 = read_csr(dd, ASIC_CFG_SCRATCH); in clear_chip_resources()
1620 scratch0 &= ~resource_mask(dd->hfi1_id, CR_DYN_MASK); in clear_chip_resources()
1621 write_csr(dd, ASIC_CFG_SCRATCH, scratch0); in clear_chip_resources()
1623 (void)read_csr(dd, ASIC_CFG_SCRATCH); in clear_chip_resources()
1625 release_hw_mutex(dd); in clear_chip_resources()
1628 mutex_unlock(&dd->asic_data->asic_resource_mutex); in clear_chip_resources()
1631 void init_chip_resources(struct hfi1_devdata *dd) in init_chip_resources() argument
1634 clear_chip_resources(dd, __func__); in init_chip_resources()
1637 void finish_chip_resources(struct hfi1_devdata *dd) in finish_chip_resources() argument
1640 clear_chip_resources(dd, __func__); in finish_chip_resources()
1643 void set_sbus_fast_mode(struct hfi1_devdata *dd) in set_sbus_fast_mode() argument
1645 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, in set_sbus_fast_mode()
1649 void clear_sbus_fast_mode(struct hfi1_devdata *dd) in clear_sbus_fast_mode() argument
1653 reg = read_csr(dd, ASIC_STS_SBUS_COUNTERS); in clear_sbus_fast_mode()
1659 reg = read_csr(dd, ASIC_STS_SBUS_COUNTERS); in clear_sbus_fast_mode()
1661 write_csr(dd, ASIC_CFG_SBUS_EXECUTE, 0); in clear_sbus_fast_mode()
1664 int load_firmware(struct hfi1_devdata *dd) in load_firmware() argument
1669 ret = acquire_chip_resource(dd, CR_SBUS, SBUS_TIMEOUT); in load_firmware()
1673 set_sbus_fast_mode(dd); in load_firmware()
1675 set_serdes_broadcast(dd, all_fabric_serdes_broadcast, in load_firmware()
1676 fabric_serdes_broadcast[dd->hfi1_id], in load_firmware()
1677 fabric_serdes_addrs[dd->hfi1_id], in load_firmware()
1679 turn_off_spicos(dd, SPICO_FABRIC); in load_firmware()
1681 ret = load_fabric_serdes_firmware(dd, &fw_fabric); in load_firmware()
1682 } while (retry_firmware(dd, ret)); in load_firmware()
1684 clear_sbus_fast_mode(dd); in load_firmware()
1685 release_chip_resource(dd, CR_SBUS); in load_firmware()
1692 ret = load_8051_firmware(dd, &fw_8051); in load_firmware()
1693 } while (retry_firmware(dd, ret)); in load_firmware()
1698 dump_fw_version(dd); in load_firmware()
1702 int hfi1_firmware_init(struct hfi1_devdata *dd) in hfi1_firmware_init() argument
1705 if (dd->icode != ICODE_RTL_SILICON) { in hfi1_firmware_init()
1712 if (dd->icode == ICODE_FUNCTIONAL_SIMULATOR) in hfi1_firmware_init()
1716 if (dd->icode == ICODE_RTL_SILICON) in hfi1_firmware_init()
1728 return obtain_firmware(dd); in hfi1_firmware_init()
1738 static int check_meta_version(struct hfi1_devdata *dd, u32 *system_table) in check_meta_version() argument
1741 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in check_meta_version()
1763 dd, "%s:Please update platform config\n", __func__); in check_meta_version()
1769 int parse_platform_config(struct hfi1_devdata *dd) in parse_platform_config() argument
1771 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in parse_platform_config()
1772 struct hfi1_pportdata *ppd = dd->pport; in parse_platform_config()
1787 if (!dd->platform_config.data) { in parse_platform_config()
1788 dd_dev_err(dd, "%s: Missing config file\n", __func__); in parse_platform_config()
1791 ptr = (u32 *)dd->platform_config.data; in parse_platform_config()
1796 dd_dev_err(dd, "%s: Bad config file\n", __func__); in parse_platform_config()
1809 dd_dev_info(dd, in parse_platform_config()
1817 if (file_length > dd->platform_config.size) { in parse_platform_config()
1818 dd_dev_info(dd, "%s:File claims to be larger than read size\n", in parse_platform_config()
1821 } else if (file_length < dd->platform_config.size) { in parse_platform_config()
1822 dd_dev_info(dd, in parse_platform_config()
1833 while (ptr < (u32 *)(dd->platform_config.data + file_length)) { in parse_platform_config()
1837 dd_dev_err(dd, "%s: Failed validation at offset %ld\n", in parse_platform_config()
1839 dd->platform_config.data)); in parse_platform_config()
1862 ret = check_meta_version(dd, ptr); in parse_platform_config()
1878 dd_dev_err(dd, in parse_platform_config()
1882 dd->platform_config.data)); in parse_platform_config()
1897 dd_dev_err(dd, in parse_platform_config()
1901 (u32 *)dd->platform_config.data)); in parse_platform_config()
1916 dd_dev_err(dd, "%s: Failed CRC check at offset %ld\n", in parse_platform_config()
1918 (u32 *)dd->platform_config.data)); in parse_platform_config()
1933 struct hfi1_devdata *dd, in get_integrated_platform_config_field() argument
1937 struct hfi1_pportdata *ppd = dd->pport; in get_integrated_platform_config_field()
2010 static int get_platform_fw_field_metadata(struct hfi1_devdata *dd, int table, in get_platform_fw_field_metadata() argument
2014 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in get_platform_fw_field_metadata()
2032 dd_dev_info(dd, "%s: Unknown table\n", __func__); in get_platform_fw_field_metadata()
2066 int get_platform_config_field(struct hfi1_devdata *dd, in get_platform_config_field() argument
2073 struct platform_config_cache *pcfgcache = &dd->pcfg_cache; in get_platform_config_field()
2074 struct hfi1_pportdata *ppd = dd->pport; in get_platform_config_field()
2085 get_integrated_platform_config_field(dd, table_type, in get_platform_config_field()
2090 ret = get_platform_fw_field_metadata(dd, table_type, field_index, in get_platform_config_field()
2123 src_ptr = dd->hfi1_id ? in get_platform_config_field()
2140 dd_dev_info(dd, "%s: Unknown table\n", __func__); in get_platform_config_field()
2160 int load_pcie_firmware(struct hfi1_devdata *dd) in load_pcie_firmware() argument
2165 set_sbus_fast_mode(dd); in load_pcie_firmware()
2168 turn_off_spicos(dd, SPICO_SBUS); in load_pcie_firmware()
2170 ret = load_sbus_firmware(dd, &fw_sbus); in load_pcie_firmware()
2171 } while (retry_firmware(dd, ret)); in load_pcie_firmware()
2177 dd_dev_info(dd, "Setting PCIe SerDes broadcast\n"); in load_pcie_firmware()
2178 set_serdes_broadcast(dd, all_pcie_serdes_broadcast, in load_pcie_firmware()
2179 pcie_serdes_broadcast[dd->hfi1_id], in load_pcie_firmware()
2180 pcie_serdes_addrs[dd->hfi1_id], in load_pcie_firmware()
2183 ret = load_pcie_serdes_firmware(dd, &fw_pcie); in load_pcie_firmware()
2184 } while (retry_firmware(dd, ret)); in load_pcie_firmware()
2190 clear_sbus_fast_mode(dd); in load_pcie_firmware()
2198 void read_guid(struct hfi1_devdata *dd) in read_guid() argument
2201 write_csr(dd, CCE_DC_CTRL, 0); in read_guid()
2202 (void)read_csr(dd, CCE_DC_CTRL); in read_guid()
2204 dd->base_guid = read_csr(dd, DC_DC8051_CFG_LOCAL_GUID); in read_guid()
2205 dd_dev_info(dd, "GUID %llx", in read_guid()
2206 (unsigned long long)dd->base_guid); in read_guid()
2210 static void dump_fw_version(struct hfi1_devdata *dd) in dump_fw_version() argument
2220 ret = acquire_chip_resource(dd, CR_SBUS, SBUS_TIMEOUT); in dump_fw_version()
2222 dd_dev_err(dd, "Unable to acquire SBus to read firmware versions\n"); in dump_fw_version()
2227 set_sbus_fast_mode(dd); in dump_fw_version()
2230 sbus_request(dd, SBUS_MASTER_BROADCAST, 0x02, WRITE_SBUS_RECEIVER, 0); in dump_fw_version()
2231 sbus_request(dd, SBUS_MASTER_BROADCAST, 0x07, WRITE_SBUS_RECEIVER, 0x1); in dump_fw_version()
2234 sbus_vers = sbus_read(dd, SBUS_MASTER_BROADCAST, 0x08, 0x1); in dump_fw_version()
2235 dd_dev_info(dd, "SBus Master firmware version 0x%08x\n", sbus_vers); in dump_fw_version()
2241 rcv_addr = pcie_serdes_addrs[dd->hfi1_id][i]; in dump_fw_version()
2242 sbus_request(dd, rcv_addr, 0x03, WRITE_SBUS_RECEIVER, 0); in dump_fw_version()
2245 pcie_vers[i] = sbus_read(dd, rcv_addr, 0x04, 0x0); in dump_fw_version()
2251 dd_dev_info(dd, "PCIe SerDes firmware version 0x%x\n", in dump_fw_version()
2254 dd_dev_warn(dd, "PCIe SerDes do not have the same firmware version\n"); in dump_fw_version()
2256 dd_dev_info(dd, in dump_fw_version()
2266 rcv_addr = fabric_serdes_addrs[dd->hfi1_id][i]; in dump_fw_version()
2267 sbus_request(dd, rcv_addr, 0x03, WRITE_SBUS_RECEIVER, 0); in dump_fw_version()
2270 fabric_vers[i] = sbus_read(dd, rcv_addr, 0x04, 0x0); in dump_fw_version()
2276 dd_dev_info(dd, "Fabric SerDes firmware version 0x%x\n", in dump_fw_version()
2279 dd_dev_warn(dd, "Fabric SerDes do not have the same firmware version\n"); in dump_fw_version()
2281 dd_dev_info(dd, in dump_fw_version()
2287 clear_sbus_fast_mode(dd); in dump_fw_version()
2288 release_chip_resource(dd, CR_SBUS); in dump_fw_version()