Reputation: 1
This is code to read 64bit address space. Issue showed up with gcc 9.3.1, did not have issue with earlier version of gcc
static inline void write_to_64bit_address(uint64_t address,
uint32_t data) {
uint32_t address_upper = (uint32_t)(address >> 32);
uint32_t address_lower = (uint32_t)(address);
uint32_t smc_code = SMC_LONG_ADDRESS_WRITE_SINGLE;
asm volatile("mov r0, %[smc_code]\n"
"mov r1, %[addr_upper]\n"
"mov r2, %[addr_lower]\n"
"mov r3, %[data_all]\n"
"mov r4, %[smc_zero]\n"
"mov r5, %[smc_zero]\n"
"mov r6, %[smc_zero]\n"
"smc #0\n"
:
: [smc_code] "r"(smc_code),
[addr_upper] "r"(address_upper),
[addr_lower] "r"(address_lower),
[data_all] "r"(data),
[smc_zero] "g"(SMC_ZERO)
: "r0","r1","r2","r3","r4", "r5", "r6");
}
I don't understand this assembly as well and learning. Can someone help.
Upvotes: 0
Views: 231