11 #include "spi_device_regs.h"
13 #define DIF_SPI_DEVICE_TPM_FIFO_DEPTH 16
16 kDifSpiDeviceEFlashLen =
17 SPI_DEVICE_PARAM_SRAM_READ_BUFFER_DEPTH *
sizeof(uint32_t),
18 kDifSpiDeviceMailboxLen =
19 SPI_DEVICE_PARAM_SRAM_MAILBOX_DEPTH *
sizeof(uint32_t),
20 kDifSpiDeviceSfdpLen = SPI_DEVICE_PARAM_SRAM_SFDP_DEPTH *
sizeof(uint32_t),
21 kDifSpiDevicePayloadLen =
22 SPI_DEVICE_PARAM_SRAM_PAYLOAD_DEPTH *
sizeof(uint32_t),
23 kDifSpiDeviceTpmWriteFifoLen =
24 SPI_DEVICE_PARAM_SRAM_TPM_WR_FIFO_DEPTH *
sizeof(uint32_t),
28 kDifSpiDeviceEFlashOffset =
29 SPI_DEVICE_PARAM_SRAM_READ_BUFFER_OFFSET *
sizeof(uint32_t),
30 kDifSpiDeviceMailboxOffset =
31 SPI_DEVICE_PARAM_SRAM_MAILBOX_OFFSET *
sizeof(uint32_t),
32 kDifSpiDeviceSfdpOffset =
33 SPI_DEVICE_PARAM_SRAM_SFDP_OFFSET *
sizeof(uint32_t),
34 kDifSpiDevicePayloadOffset =
35 SPI_DEVICE_PARAM_SRAM_PAYLOAD_OFFSET *
sizeof(uint32_t),
36 kDifSpiDeviceTpmWriteFifoOffset =
37 SPI_DEVICE_PARAM_SRAM_TPM_WR_FIFO_OFFSET *
sizeof(uint32_t),
44 static inline uint32_t build_control_word(
60 static inline uint32_t extract_mode_from_config(
62 switch (config.device_mode) {
64 return SPI_DEVICE_CONTROL_MODE_VALUE_DISABLED;
66 return SPI_DEVICE_CONTROL_MODE_VALUE_FLASHMODE;
68 return SPI_DEVICE_CONTROL_MODE_VALUE_PASSTHROUGH;
80 return dif_spi_device_init(base_addr, &spi->
dev);
96 uint32_t device_mode = extract_mode_from_config(config);
97 if (device_mode == -1u) {
101 uint32_t device_config = build_control_word(config);
102 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_CFG_REG_OFFSET,
106 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_CONTROL_REG_OFFSET);
110 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_CONTROL_REG_OFFSET,
123 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_CONTROL_REG_OFFSET);
125 if (mode != SPI_DEVICE_CONTROL_MODE_VALUE_FLASHMODE &&
126 mode != SPI_DEVICE_CONTROL_MODE_VALUE_PASSTHROUGH) {
131 SPI_DEVICE_CONTROL_MODE_VALUE_PASSTHROUGH);
134 SPI_DEVICE_CONTROL_MODE_VALUE_FLASHMODE);
136 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_CONTROL_REG_OFFSET,
143 if (spi == NULL || csb == NULL) {
147 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_STATUS_REG_OFFSET);
157 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_MAILBOX_ADDR_REG_OFFSET,
160 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_CFG_REG_OFFSET);
162 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_CFG_REG_OFFSET, cfg_reg);
171 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_CFG_REG_OFFSET);
173 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_CFG_REG_OFFSET, cfg_reg);
179 if (spi == NULL || is_enabled == NULL || address == NULL) {
183 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_CFG_REG_OFFSET);
184 bool mailbox_enabled =
187 *address = mmio_region_read32(spi->
dev.base_addr,
188 SPI_DEVICE_MAILBOX_ADDR_REG_OFFSET);
197 uint32_t cfg_reg = 0;
205 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_ADDR_MODE_REG_OFFSET,
212 if (spi == NULL || addr_4b == NULL) {
216 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_ADDR_MODE_REG_OFFSET);
231 uint32_t device_mode = extract_mode_from_config(spi->
config);
232 if (device_mode == -1u) {
239 control, SPI_DEVICE_CONTROL_FLASH_STATUS_FIFO_CLR_BIT,
true);
240 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_CONTROL_REG_OFFSET,
248 if (spi == NULL ||
id == NULL) {
252 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_JEDEC_CC_REG_OFFSET);
254 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_JEDEC_ID_REG_OFFSET);
255 id->num_continuation_code =
257 id->continuation_code =
259 id->manufacturer_id =
272 id.num_continuation_code);
274 id.continuation_code);
279 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_JEDEC_CC_REG_OFFSET,
281 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_JEDEC_ID_REG_OFFSET,
300 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_INTERCEPT_EN_REG_OFFSET,
307 if (spi == NULL || address == NULL) {
310 *address = mmio_region_read32(spi->
dev.base_addr,
311 SPI_DEVICE_LAST_READ_ADDR_REG_OFFSET);
317 if (spi == NULL || address > SPI_DEVICE_READ_THRESHOLD_THRESHOLD_MASK) {
320 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_READ_THRESHOLD_REG_OFFSET,
330 uint32_t device_mode = extract_mode_from_config(spi->
config);
331 if (device_mode == -1u) {
338 control, SPI_DEVICE_CONTROL_FLASH_READ_BUFFER_CLR_BIT,
true);
339 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_CONTROL_REG_OFFSET,
348 if (spi == NULL || slot >= SPI_DEVICE_PARAM_NUM_CMD_INFO ||
352 ptrdiff_t reg_offset =
353 SPI_DEVICE_CMD_INFO_0_REG_OFFSET + slot *
sizeof(uint32_t);
354 uint32_t reg_val = 0;
360 uint32_t address_mode;
361 switch (command_info.address_type) {
363 address_mode = SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDRDISABLED;
366 address_mode = SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDRCFG;
369 address_mode = SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDR3B;
372 address_mode = SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDR4B;
378 (1u + SPI_DEVICE_CMD_INFO_0_DUMMY_SIZE_0_MASK)) {
404 uint32_t read_pipeline_mode;
408 SPI_DEVICE_CMD_INFO_0_READ_PIPELINE_MODE_0_VALUE_ZERO_STAGES;
412 SPI_DEVICE_CMD_INFO_0_READ_PIPELINE_MODE_0_VALUE_TWO_STAGES_HALF_CYCLE;
416 SPI_DEVICE_CMD_INFO_0_READ_PIPELINE_MODE_0_VALUE_TWO_STAGES_FULL_CYCLE;
435 reg_val, SPI_DEVICE_CMD_INFO_0_OPCODE_0_FIELD, command_info.
opcode);
437 reg_val, SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_FIELD, address_mode);
443 SPI_DEVICE_CMD_INFO_0_DUMMY_SIZE_0_FIELD,
446 reg_val, SPI_DEVICE_CMD_INFO_0_DUMMY_EN_0_BIT,
true);
449 reg_val, SPI_DEVICE_CMD_INFO_0_PAYLOAD_EN_0_FIELD, payload_en);
454 SPI_DEVICE_CMD_INFO_0_PAYLOAD_SWAP_EN_0_BIT,
457 reg_val, SPI_DEVICE_CMD_INFO_0_READ_PIPELINE_MODE_0_FIELD,
466 mmio_region_write32(spi->
dev.base_addr, reg_offset, reg_val);
473 if (spi == NULL || enabled == NULL || command_info == NULL ||
474 slot >= SPI_DEVICE_PARAM_NUM_CMD_INFO) {
477 ptrdiff_t reg_offset =
478 SPI_DEVICE_CMD_INFO_0_REG_OFFSET + slot *
sizeof(uint32_t);
479 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr, reg_offset);
481 dif_spi_device_flash_address_type_t address_type;
482 uint32_t reg_val_address_mode =
484 switch (reg_val_address_mode) {
485 case SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDRDISABLED:
488 case SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDRCFG:
491 case SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDR3B:
494 case SPI_DEVICE_CMD_INFO_0_ADDR_MODE_0_VALUE_ADDR4B:
498 address_type = kDifSpiDeviceFlashAddrCount;
502 uint32_t dummy_cycles = 0;
505 reg_val, SPI_DEVICE_CMD_INFO_0_DUMMY_SIZE_0_FIELD);
510 uint32_t payload_en =
512 bool payload_dir_to_host =
515 switch (payload_en) {
520 if (payload_dir_to_host) {
527 if (!payload_dir_to_host) {
546 reg_val, SPI_DEVICE_CMD_INFO_0_OPCODE_0_FIELD),
547 .address_type = address_type,
548 .dummy_cycles = (uint8_t)dummy_cycles,
549 .payload_io_type = payload_io_type,
551 reg_val, SPI_DEVICE_CMD_INFO_0_PAYLOAD_SWAP_EN_0_BIT),
552 .payload_dir_to_host = payload_dir_to_host,
554 reg_val, SPI_DEVICE_CMD_INFO_0_PAYLOAD_SWAP_EN_0_BIT),
582 ptrdiff_t reg_offset) {
591 mmio_region_write32(spi->
dev.base_addr, reg_offset, reg_val);
597 return write_special_cmd_info(spi, enable, opcode,
598 SPI_DEVICE_CMD_INFO_EN4B_REG_OFFSET);
603 return write_special_cmd_info(spi, enable, opcode,
604 SPI_DEVICE_CMD_INFO_EX4B_REG_OFFSET);
609 return write_special_cmd_info(spi, enable, opcode,
610 SPI_DEVICE_CMD_INFO_WREN_REG_OFFSET);
615 return write_special_cmd_info(spi, enable, opcode,
616 SPI_DEVICE_CMD_INFO_WRDI_REG_OFFSET);
621 uint32_t replacement) {
625 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_ADDR_SWAP_MASK_REG_OFFSET,
627 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_ADDR_SWAP_DATA_REG_OFFSET,
634 uint32_t replacement) {
638 mmio_region_write32(spi->
dev.base_addr,
639 SPI_DEVICE_PAYLOAD_SWAP_MASK_REG_OFFSET, mask);
640 mmio_region_write32(spi->
dev.base_addr,
641 SPI_DEVICE_PAYLOAD_SWAP_DATA_REG_OFFSET, replacement);
647 if (spi == NULL || occupancy == NULL) {
650 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr,
651 SPI_DEVICE_UPLOAD_STATUS_REG_OFFSET);
653 reg_val, SPI_DEVICE_UPLOAD_STATUS_CMDFIFO_DEPTH_FIELD);
659 if (spi == NULL || occupancy == NULL) {
662 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr,
663 SPI_DEVICE_UPLOAD_STATUS_REG_OFFSET);
665 reg_val, SPI_DEVICE_UPLOAD_STATUS_ADDRFIFO_DEPTH_FIELD);
671 if (spi == NULL || occupancy == NULL || start_offset == NULL) {
674 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr,
675 SPI_DEVICE_UPLOAD_STATUS2_REG_OFFSET);
677 reg_val, SPI_DEVICE_UPLOAD_STATUS2_PAYLOAD_DEPTH_FIELD);
679 reg_val, SPI_DEVICE_UPLOAD_STATUS2_PAYLOAD_START_IDX_FIELD);
686 if (spi == NULL || command == NULL) {
689 uint32_t upload_status = mmio_region_read32(
690 spi->
dev.base_addr, SPI_DEVICE_UPLOAD_STATUS_REG_OFFSET);
692 SPI_DEVICE_UPLOAD_STATUS_CMDFIFO_NOTEMPTY_BIT)) {
695 uint32_t cmd_item = mmio_region_read32(spi->
dev.base_addr,
696 SPI_DEVICE_UPLOAD_CMDFIFO_REG_OFFSET);
698 cmd_item, SPI_DEVICE_UPLOAD_CMDFIFO_DATA_FIELD);
704 if (spi == NULL || address == NULL) {
707 uint32_t upload_status = mmio_region_read32(
708 spi->
dev.base_addr, SPI_DEVICE_UPLOAD_STATUS_REG_OFFSET);
710 SPI_DEVICE_UPLOAD_STATUS_ADDRFIFO_NOTEMPTY_BIT)) {
713 *address = mmio_region_read32(spi->
dev.base_addr,
714 SPI_DEVICE_UPLOAD_ADDRFIFO_REG_OFFSET);
720 ptrdiff_t buffer_offset;
723 static dif_result_t dif_spi_device_get_flash_buffer_info(
724 dif_spi_device_flash_buffer_type_t buffer_type,
726 switch (buffer_type) {
728 info->buffer_len = kDifSpiDeviceEFlashLen;
729 info->buffer_offset = kDifSpiDeviceEFlashOffset;
732 info->buffer_len = kDifSpiDeviceMailboxLen;
733 info->buffer_offset = kDifSpiDeviceMailboxOffset;
736 info->buffer_len = kDifSpiDeviceSfdpLen;
737 info->buffer_offset = kDifSpiDeviceSfdpOffset;
748 if (spi == NULL || buf == NULL) {
752 .buffer_len = kDifSpiDevicePayloadLen,
753 .buffer_offset = kDifSpiDevicePayloadOffset,
755 if (offset >= (info.buffer_offset + (ptrdiff_t)info.buffer_len) ||
756 length > (info.buffer_offset + (ptrdiff_t)info.buffer_len -
757 (ptrdiff_t)offset)) {
760 ptrdiff_t offset_from_base = SPI_DEVICE_INGRESS_BUFFER_REG_OFFSET +
761 info.buffer_offset + (ptrdiff_t)offset;
769 dif_spi_device_flash_buffer_type_t buffer_type, uint32_t offset,
770 size_t length,
const uint8_t *buf) {
771 if (spi == NULL || buf == NULL) {
776 dif_spi_device_get_flash_buffer_info(buffer_type, &info);
780 if (offset >= (info.buffer_offset + (ptrdiff_t)info.buffer_len) ||
781 length > (info.buffer_offset + (ptrdiff_t)info.buffer_len -
782 (ptrdiff_t)offset)) {
785 ptrdiff_t offset_from_base = SPI_DEVICE_EGRESS_BUFFER_REG_OFFSET +
786 info.buffer_offset + (ptrdiff_t)offset;
794 if (spi == NULL || enabled == NULL) {
797 ptrdiff_t reg_offset =
798 SPI_DEVICE_CMD_FILTER_0_REG_OFFSET + (command >> 5) *
sizeof(uint32_t);
799 uint32_t command_index = command & 0x1fu;
800 uint32_t reg_value = mmio_region_read32(spi->
dev.base_addr, reg_offset);
816 ptrdiff_t reg_offset =
817 SPI_DEVICE_CMD_FILTER_0_REG_OFFSET + (command >> 5) *
sizeof(uint32_t);
818 uint32_t command_index = command & 0x1fu;
819 uint32_t reg_value = mmio_region_read32(spi->
dev.base_addr, reg_offset);
821 mmio_region_write32(spi->
dev.base_addr, reg_offset, reg_value);
831 for (
int i = 0; i < SPI_DEVICE_CMD_FILTER_MULTIREG_COUNT; i++) {
832 ptrdiff_t reg_offset =
833 SPI_DEVICE_CMD_FILTER_0_REG_OFFSET + i * (ptrdiff_t)
sizeof(uint32_t);
834 mmio_region_write32(spi->
dev.base_addr, reg_offset, reg_value);
843 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr,
844 SPI_DEVICE_FLASH_STATUS_REG_OFFSET);
849 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_FLASH_STATUS_REG_OFFSET,
859 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_FLASH_STATUS_REG_OFFSET,
866 if (spi == NULL || value == NULL) {
869 *value = mmio_region_read32(spi->
dev.base_addr,
870 SPI_DEVICE_FLASH_STATUS_REG_OFFSET);
876 if (spi == NULL || caps == NULL) {
880 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_TPM_CAP_REG_OFFSET);
886 reg_val, SPI_DEVICE_TPM_CAP_MAX_WR_SIZE_FIELD);
888 reg_val, SPI_DEVICE_TPM_CAP_MAX_RD_SIZE_FIELD);
923 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_TPM_CFG_REG_OFFSET,
930 if (spi == NULL ||
status == NULL) {
934 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_TPM_STATUS_REG_OFFSET);
947 if (spi == NULL || locality >= SPI_DEVICE_PARAM_NUM_LOCALITY) {
952 ptrdiff_t reg_offset = SPI_DEVICE_TPM_ACCESS_0_REG_OFFSET + (locality & 0xfc);
953 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr, reg_offset);
954 switch (locality & 0x03) {
957 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_0_FIELD, value);
961 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_1_FIELD, value);
965 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_2_FIELD, value);
969 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_3_FIELD, value);
974 mmio_region_write32(spi->
dev.base_addr, reg_offset, reg_val);
981 if (spi == NULL || locality >= SPI_DEVICE_PARAM_NUM_LOCALITY ||
987 ptrdiff_t reg_offset = SPI_DEVICE_TPM_ACCESS_0_REG_OFFSET + (locality & 0xfc);
988 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr, reg_offset);
989 switch (locality & 0x03) {
992 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_0_FIELD);
996 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_1_FIELD);
1000 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_2_FIELD);
1004 reg_val, SPI_DEVICE_TPM_ACCESS_0_ACCESS_3_FIELD);
1021 uint32_t value, ptrdiff_t reg_offset) {
1025 mmio_region_write32(spi->
dev.base_addr, reg_offset, value);
1038 uint32_t *value, ptrdiff_t reg_offset) {
1039 if (spi == NULL || value == NULL) {
1042 *value = mmio_region_read32(spi->
dev.base_addr, reg_offset);
1048 return tpm_reg_write32(spi, value, SPI_DEVICE_TPM_STS_REG_OFFSET);
1053 return tpm_reg_read32(spi, value, SPI_DEVICE_TPM_STS_REG_OFFSET);
1058 return tpm_reg_write32(spi, value, SPI_DEVICE_TPM_INTF_CAPABILITY_REG_OFFSET);
1063 return tpm_reg_read32(spi, value, SPI_DEVICE_TPM_INTF_CAPABILITY_REG_OFFSET);
1068 return tpm_reg_write32(spi, value, SPI_DEVICE_TPM_INT_ENABLE_REG_OFFSET);
1073 return tpm_reg_read32(spi, value, SPI_DEVICE_TPM_INT_ENABLE_REG_OFFSET);
1078 return tpm_reg_write32(spi, value, SPI_DEVICE_TPM_INT_VECTOR_REG_OFFSET);
1083 return tpm_reg_read32(spi, value, SPI_DEVICE_TPM_INT_VECTOR_REG_OFFSET);
1088 return tpm_reg_write32(spi, value, SPI_DEVICE_TPM_INT_STATUS_REG_OFFSET);
1093 return tpm_reg_read32(spi, value, SPI_DEVICE_TPM_INT_STATUS_REG_OFFSET);
1106 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_TPM_DID_VID_REG_OFFSET,
1108 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_TPM_RID_REG_OFFSET,
1115 if (spi == NULL || value == NULL) {
1119 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_TPM_DID_VID_REG_OFFSET);
1121 mmio_region_read32(spi->
dev.base_addr, SPI_DEVICE_TPM_RID_REG_OFFSET);
1123 did_vid, SPI_DEVICE_TPM_DID_VID_VID_FIELD);
1125 did_vid, SPI_DEVICE_TPM_DID_VID_DID_FIELD);
1133 uint32_t *address) {
1134 if (spi == NULL || command == NULL || address == NULL) {
1137 uint32_t reg_val = mmio_region_read32(spi->
dev.base_addr,
1138 SPI_DEVICE_TPM_CMD_ADDR_REG_OFFSET);
1140 SPI_DEVICE_TPM_CMD_ADDR_CMD_FIELD);
1146 size_t length, uint8_t *buf) {
1147 if (spi == NULL || buf == NULL) {
1152 uint8_t offset = length & 0x3;
1153 uint32_t rdfifo_wdata;
1158 if (DIF_SPI_DEVICE_TPM_FIFO_DEPTH *
sizeof(uint32_t) < length) {
1161 for (
int i = 0; i < length; i += 4) {
1162 if (i + 4 > length) {
1165 for (
int j = 0; j <= offset; j++) {
1166 rdfifo_wdata |= (uint32_t)(buf[i + j]) << (8 * j);
1170 rdfifo_wdata = *((uint32_t *)buf + (i >> 2));
1172 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_TPM_READ_FIFO_REG_OFFSET,
1179 size_t length, uint8_t *buf) {
1180 if (spi == NULL || buf == NULL) {
1183 const uint32_t kOffset = 0;
1185 .buffer_len = kDifSpiDeviceTpmWriteFifoLen,
1186 .buffer_offset = kDifSpiDeviceTpmWriteFifoOffset,
1188 if (kOffset >= (kInfo.buffer_offset + (ptrdiff_t)kInfo.buffer_len) ||
1189 length > (kInfo.buffer_offset + (ptrdiff_t)kInfo.buffer_len -
1190 (ptrdiff_t)kOffset)) {
1193 ptrdiff_t offset_from_base = SPI_DEVICE_INGRESS_BUFFER_REG_OFFSET +
1194 kInfo.buffer_offset + (ptrdiff_t)kOffset;
1205 mmio_region_write32(spi->
dev.base_addr, SPI_DEVICE_TPM_STATUS_REG_OFFSET, 0);