29 mmio_region_write32(dma->
base_addr, DMA_SRC_ADDR_LO_REG_OFFSET,
30 transaction.source.address & UINT32_MAX);
31 mmio_region_write32(dma->
base_addr, DMA_SRC_ADDR_HI_REG_OFFSET,
32 transaction.source.address >> (
sizeof(uint32_t) * 8));
35 mmio_region_write32(dma->
base_addr, DMA_DST_ADDR_LO_REG_OFFSET,
36 transaction.destination.address & UINT32_MAX);
38 dma->
base_addr, DMA_DST_ADDR_HI_REG_OFFSET,
39 transaction.destination.address >> (
sizeof(uint32_t) * 8));
43 reg = bitfield_bit32_write(reg, DMA_SRC_CONFIG_WRAP_BIT,
44 transaction.src_config.wrap);
45 reg = bitfield_bit32_write(reg, DMA_SRC_CONFIG_INCREMENT_BIT,
46 transaction.src_config.increment);
47 mmio_region_write32(dma->
base_addr, DMA_SRC_CONFIG_REG_OFFSET, reg);
51 reg = bitfield_bit32_write(reg, DMA_DST_CONFIG_WRAP_BIT,
52 transaction.dst_config.wrap);
53 reg = bitfield_bit32_write(reg, DMA_DST_CONFIG_INCREMENT_BIT,
54 transaction.dst_config.increment);
55 mmio_region_write32(dma->
base_addr, DMA_DST_CONFIG_REG_OFFSET, reg);
59 reg = bitfield_field32_write(reg, DMA_ADDR_SPACE_ID_SRC_ASID_FIELD,
60 transaction.source.asid);
61 reg = bitfield_field32_write(reg, DMA_ADDR_SPACE_ID_DST_ASID_FIELD,
62 transaction.destination.asid);
63 mmio_region_write32(dma->
base_addr, DMA_ADDR_SPACE_ID_REG_OFFSET, reg);
66 mmio_region_write32(dma->
base_addr, DMA_CHUNK_DATA_SIZE_REG_OFFSET,
67 transaction.chunk_size);
68 mmio_region_write32(dma->
base_addr, DMA_TOTAL_DATA_SIZE_REG_OFFSET,
69 transaction.total_size);
70 mmio_region_write32(dma->
base_addr, DMA_TRANSFER_WIDTH_REG_OFFSET,
81 uint32_t reg = mmio_region_read32(dma->
base_addr, DMA_CONTROL_REG_OFFSET);
82 reg = bitfield_bit32_write(reg, DMA_CONTROL_HARDWARE_HANDSHAKE_ENABLE_BIT,
84 mmio_region_write32(dma->
base_addr, DMA_CONTROL_REG_OFFSET, reg);
93 uint32_t reg = mmio_region_read32(dma->
base_addr, DMA_CONTROL_REG_OFFSET);
94 reg = bitfield_bit32_write(reg, DMA_CONTROL_HARDWARE_HANDSHAKE_ENABLE_BIT,
96 mmio_region_write32(dma->
base_addr, DMA_CONTROL_REG_OFFSET, reg);
101 dif_dma_transaction_opcode_t opcode) {
106 uint32_t reg = mmio_region_read32(dma->
base_addr, DMA_CONTROL_REG_OFFSET);
107 reg = bitfield_field32_write(reg, DMA_CONTROL_OPCODE_FIELD, opcode);
108 reg = bitfield_bit32_write(reg, DMA_CONTROL_GO_BIT, 1);
109 reg = bitfield_bit32_write(reg, DMA_CONTROL_INITIAL_TRANSFER_BIT, 1);
110 mmio_region_write32(dma->
base_addr, DMA_CONTROL_REG_OFFSET, reg);
127 if (dma == NULL || size == 0) {
131 mmio_region_write32(dma->
base_addr, DMA_ENABLED_MEMORY_RANGE_BASE_REG_OFFSET,
134 uint32_t end_addr = address + size - 1;
135 mmio_region_write32(dma->
base_addr, DMA_ENABLED_MEMORY_RANGE_LIMIT_REG_OFFSET,
138 mmio_region_write32(dma->
base_addr, DMA_RANGE_VALID_REG_OFFSET, 1);
265 dif_dma_transaction_opcode_t opcode,
267 if (dma == NULL || digest == NULL) {
274 for (
int i = 0; i < digest_len; ++i) {
275 ptrdiff_t offset = DMA_SHA2_DIGEST_0_REG_OFFSET +
276 (ptrdiff_t)i * (ptrdiff_t)
sizeof(uint32_t);
278 digest[i] = mmio_region_read32(dma->
base_addr, offset);