Lines Matching +full:build +full:- +full:legacy

6  * SPDX-License-Identifier: GPL-2.0-or-later
26 /* Constants to build upiu */
51 /* for legacy doorbell mode */
64 return qpci_io_readl(&ufs->dev, ufs->bar, offset); in ufs_rreg()
69 qpci_io_writel(&ufs->dev, ufs->bar, offset, value); in ufs_wreg()
74 int slot = find_first_zero_bit(ufs->cmd_desc_bitmap, UFS_MAX_CMD_DESC); in alloc_cmd_desc_slot()
78 set_bit(slot, ufs->cmd_desc_bitmap); in alloc_cmd_desc_slot()
84 if (!test_bit(slot, ufs->cmd_desc_bitmap)) { in release_cmd_desc_slot()
87 clear_bit(slot, ufs->cmd_desc_bitmap); in release_cmd_desc_slot()
97 qtest_clock_step(ufs->dev.bus->qts, 100); in ufs_wait_for_irq()
128 ufs->utrlba + UTRD_TEST_SLOT * sizeof(UtpTransferReqDesc); in __ufs_send_transfer_request_doorbell()
131 qtest_memwrite(ufs->dev.bus->qts, utrd_addr, utrd, sizeof(*utrd)); in __ufs_send_transfer_request_doorbell()
140 qtest_memread(ufs->dev.bus->qts, utrd_addr, &utrd_result, in __ufs_send_transfer_request_doorbell()
149 uint32_t sqtp = ufs_rreg(ufs, ufs->sqdao[TEST_QID] + 0x4); in __ufs_send_transfer_request_mcq()
150 uint64_t utrd_addr = ufs->sqlba[TEST_QID] + sqtp; in __ufs_send_transfer_request_mcq()
155 qtest_memwrite(ufs->dev.bus->qts, utrd_addr, utrd, sizeof(*utrd)); in __ufs_send_transfer_request_mcq()
158 sqtp = ufs_rreg(ufs, ufs->sqdao[TEST_QID] + 0x4); in __ufs_send_transfer_request_mcq()
160 ufs_wreg(ufs, ufs->sqdao[TEST_QID] + 0x4, sqtp); in __ufs_send_transfer_request_mcq()
166 cqhp = ufs_rreg(ufs, ufs->cqdao[TEST_QID]); in __ufs_send_transfer_request_mcq()
167 cqentry_addr = ufs->cqlba[TEST_QID] + cqhp; in __ufs_send_transfer_request_mcq()
168 qtest_memread(ufs->dev.bus->qts, cqentry_addr, &cqentry, sizeof(cqentry)); in __ufs_send_transfer_request_mcq()
169 ufs_wreg(ufs, ufs->cqdao[TEST_QID], cqhp); in __ufs_send_transfer_request_mcq()
178 if (ufs->support_mcq) { in ufs_send_transfer_request_sync()
189 ufs->cmd_desc_addr + cmd_desc_slot * UTP_COMMAND_DESCRIPTOR_SIZE; in ufs_send_nop_out()
192 /* Build up request upiu */ in ufs_send_nop_out()
196 qtest_memwrite(ufs->dev.bus->qts, req_upiu_addr, &req_upiu, in ufs_send_nop_out()
199 /* Build up utp transfer request descriptor */ in ufs_send_nop_out()
206 qtest_memread(ufs->dev.bus->qts, rsp_upiu_addr, rsp_out, sizeof(*rsp_out)); in ufs_send_nop_out()
218 ufs->cmd_desc_addr + cmd_desc_slot * UTP_COMMAND_DESCRIPTOR_SIZE; in ufs_send_query()
221 /* Build up request upiu */ in ufs_send_query()
237 qtest_memwrite(ufs->dev.bus->qts, req_upiu_addr, &req_upiu, in ufs_send_query()
240 /* Build up utp transfer request descriptor */ in ufs_send_query()
247 qtest_memread(ufs->dev.bus->qts, rsp_upiu_addr, rsp_out, sizeof(*rsp_out)); in ufs_send_query()
259 /* Build up PRDT */ in ufs_send_scsi_command()
268 ufs->cmd_desc_addr + cmd_desc_slot * UTP_COMMAND_DESCRIPTOR_SIZE; in ufs_send_scsi_command()
290 qtest_memset(ufs->dev.bus->qts, ufs->data_buffer_addr, 0, in ufs_send_scsi_command()
293 qtest_memwrite(ufs->dev.bus->qts, ufs->data_buffer_addr, data_in, in ufs_send_scsi_command()
299 cpu_to_le64(ufs->data_buffer_addr + i * sizeof(UfshcdSgEntry)); in ufs_send_scsi_command()
301 entries[i].size = cpu_to_le32(PRD_ENTRY_DATA_SIZE - 1); in ufs_send_scsi_command()
304 data_len - (PRD_ENTRY_DATA_SIZE * (prd_table_length - 1)) - 1); in ufs_send_scsi_command()
307 qtest_memwrite(ufs->dev.bus->qts, prdt_addr, entries, in ufs_send_scsi_command()
312 /* Build up request upiu */ in ufs_send_scsi_command()
320 qtest_memwrite(ufs->dev.bus->qts, req_upiu_addr, &req_upiu, in ufs_send_scsi_command()
323 /* Build up utp transfer request descriptor */ in ufs_send_scsi_command()
330 qtest_memread(ufs->dev.bus->qts, rsp_upiu_addr, rsp_out, sizeof(*rsp_out)); in ufs_send_scsi_command()
332 qtest_memread(ufs->dev.bus->qts, ufs->data_buffer_addr, data_out, in ufs_send_scsi_command()
352 ufs->bar = qpci_iomap(&ufs->dev, 0, NULL); in ufs_init()
353 qpci_device_enable(&ufs->dev); in ufs_init()
362 qtest_clock_step(ufs->dev.bus->qts, 100); in ufs_init()
398 ufs->support_mcq = FIELD_EX32(cap, CAP, MCQS); in ufs_init()
412 if (ufs->support_mcq) { in ufs_init()
419 ufs->cmd_desc_addr = in ufs_init()
421 ufs->data_buffer_addr = in ufs_init()
424 if (ufs->support_mcq) { in ufs_init()
430 ufs->maxq = FIELD_EX32(mcqcap, MCQCAP, MAXQ) + 1; in ufs_init()
431 for (qid = 0; qid < ufs->maxq; ++qid) { in ufs_init()
432 ufs->sqlba[qid] = in ufs_init()
434 ufs->cqlba[qid] = in ufs_init()
439 ufs->sqlba[qid] & 0xffffffff); in ufs_init()
440 ufs_wreg(ufs, mcq_reg_offset + A_SQUBA, ufs->sqlba[qid] >> 32); in ufs_init()
442 ufs->cqlba[qid] & 0xffffffff); in ufs_init()
443 ufs_wreg(ufs, mcq_reg_offset + A_CQUBA, ufs->cqlba[qid] >> 32); in ufs_init()
461 ufs->sqdao[qid] = ufs_rreg(ufs, mcq_reg_offset + A_SQDAO); in ufs_init()
462 ufs->cqdao[qid] = ufs_rreg(ufs, mcq_reg_offset + A_CQDAO); in ufs_init()
466 ufs->utrlba = guest_alloc(alloc, nutrs * sizeof(UtpTransferReqDesc)); in ufs_init()
468 ufs_wreg(ufs, A_UTRLBA, ufs->utrlba & 0xffffffff); in ufs_init()
469 ufs_wreg(ufs, A_UTRLBAU, ufs->utrlba >> 32); in ufs_init()
487 qtest_clock_step(ufs->dev.bus->qts, 100); in ufs_init()
499 ufs->enabled = true; in ufs_init()
504 if (ufs->enabled) { in ufs_exit()
505 if (ufs->support_mcq) { in ufs_exit()
506 for (uint32_t qid = 0; qid < ufs->maxq; ++qid) { in ufs_exit()
507 guest_free(alloc, ufs->sqlba[qid]); in ufs_exit()
508 guest_free(alloc, ufs->cqlba[qid]); in ufs_exit()
511 guest_free(alloc, ufs->utrlba); in ufs_exit()
514 guest_free(alloc, ufs->cmd_desc_addr); in ufs_exit()
515 guest_free(alloc, ufs->data_buffer_addr); in ufs_exit()
518 qpci_iounmap(&ufs->dev, ufs->bar); in ufs_exit()
525 if (!g_strcmp0(interface, "pci-device")) { in ufs_get_driver()
526 return &ufs->dev; in ufs_get_driver()
538 qpci_device_init(&ufs->dev, bus, addr); in ufs_create()
539 ufs->obj.get_driver = ufs_get_driver; in ufs_create()
541 return &ufs->obj; in ufs_create()
549 ufs->bar = qpci_iomap(&ufs->dev, 0, NULL); in ufstest_reg_read()
550 qpci_device_enable(&ufs->dev); in ufstest_reg_read()
557 qpci_iounmap(&ufs->dev, ufs->bar); in ufstest_reg_read()
691 /* Read read-only flag */ in ufstest_query_flag_request()
742 /* Read Write-only Flag (Intended Failure) */ in ufstest_query_flag_request()
750 /* Write Read-Only Flag (Intended Failure) */ in ufstest_query_flag_request()
857 /* Read Write-Only Attribute (Intended Error) */ in ufstest_query_attr_request()
865 /* Write Read-Only Attribute (Intended Error) */ in ufstest_query_attr_request()
1073 fd = g_file_open_tmp("qtest-ufs.XXXXXX", &t_path, NULL); in drive_create()
1088 " -blockdev file,filename=%s,node-name=drv1 " in ufs_blk_test_setup()
1089 "-device ufs-lu,bus=ufs0,drive=drv1,lun=1 ", in ufs_blk_test_setup()
1099 .before_cmd_line = "-blockdev null-co,node-name=drv0,read-zeroes=on", in ufs_register_nodes()
1100 .after_cmd_line = "-device ufs-lu,bus=ufs0,drive=drv0,lun=0", in ufs_register_nodes()
1110 "mcq=true,mcq-maxq=1" }; in ufs_register_nodes()
1115 qos_node_consumes("ufs", "pci-bus", &edge_opts); in ufs_register_nodes()
1116 qos_node_produces("ufs", "pci-device"); in ufs_register_nodes()
1118 qos_add_test("reg-read", "ufs", ufstest_reg_read, NULL); in ufs_register_nodes()
1130 qos_add_test("legacy-read-write", "ufs", ufstest_read_write, &io_test_opts); in ufs_register_nodes()
1131 qos_add_test("mcq-read-write", "ufs", ufstest_read_write, &mcq_test_opts); in ufs_register_nodes()
1132 qos_add_test("query-flag", "ufs", ufstest_query_flag_request, in ufs_register_nodes()
1134 qos_add_test("query-attribute", "ufs", ufstest_query_attr_request, in ufs_register_nodes()
1136 qos_add_test("query-desciptor", "ufs", ufstest_query_desc_request, in ufs_register_nodes()