| .. | .. |
|---|
| 73 | 73 | flush_cache(aligned_input, aligned_len); |
|---|
| 74 | 74 | } |
|---|
| 75 | 75 | |
|---|
| 76 | +static void crypto_invalidate_cacheline(uint32_t addr, uint32_t size) |
|---|
| 77 | +{ |
|---|
| 78 | + ulong alignment = CONFIG_SYS_CACHELINE_SIZE; |
|---|
| 79 | + ulong aligned_input, aligned_len; |
|---|
| 80 | + |
|---|
| 81 | + if (!addr || !size) |
|---|
| 82 | + return; |
|---|
| 83 | + |
|---|
| 84 | + /* Must invalidate dcache after crypto DMA write data region */ |
|---|
| 85 | + aligned_input = round_down(addr, alignment); |
|---|
| 86 | + aligned_len = round_up(size + (addr - aligned_input), alignment); |
|---|
| 87 | + invalidate_dcache_range(aligned_input, aligned_input + aligned_len); |
|---|
| 88 | +} |
|---|
| 89 | + |
|---|
| 76 | 90 | static uint32_t trusty_base_write_security_data(char *filename, |
|---|
| 77 | 91 | uint32_t filename_size, |
|---|
| 78 | 92 | uint8_t *data, |
|---|
| .. | .. |
|---|
| 1014 | 1028 | &TeecOperation, |
|---|
| 1015 | 1029 | &ErrorOrigin); |
|---|
| 1016 | 1030 | |
|---|
| 1031 | + crypto_invalidate_cacheline(dst_phys_addr, len); |
|---|
| 1032 | + |
|---|
| 1017 | 1033 | exit: |
|---|
| 1018 | 1034 | TEEC_ReleaseSharedMemory(&SharedMem_config); |
|---|
| 1019 | 1035 | TEEC_CloseSession(&TeecSession); |
|---|