diff options
Diffstat (limited to 'drivers')
-rw-r--r-- | drivers/bootcount/bootcount_ram.c | 3 | ||||
-rw-r--r-- | drivers/mtd/stm32_flash.c | 4 | ||||
-rw-r--r-- | drivers/spmi/spmi-sandbox.c | 3 | ||||
-rw-r--r-- | drivers/tpm/tpm_tis_sandbox.c | 2 |
4 files changed, 10 insertions, 2 deletions
diff --git a/drivers/bootcount/bootcount_ram.c b/drivers/bootcount/bootcount_ram.c index 5bdabcd5620..e0d2669b71d 100644 --- a/drivers/bootcount/bootcount_ram.c +++ b/drivers/bootcount/bootcount_ram.c @@ -35,6 +35,9 @@ void bootcount_store(ulong a) writel(patterns[i % NBR_OF_PATTERNS], &save_addr[i + OFFS_PATTERN]); + /* Make sure the data is written to RAM */ + flush_dcache_range((ulong)&save_addr[0], + (ulong)&save_addr[REPEAT_PATTERN + OFFS_PATTERN]); } ulong bootcount_load(void) diff --git a/drivers/mtd/stm32_flash.c b/drivers/mtd/stm32_flash.c index 71f48543a39..e16b6cd674f 100644 --- a/drivers/mtd/stm32_flash.c +++ b/drivers/mtd/stm32_flash.c @@ -137,6 +137,10 @@ int write_buff(flash_info_t *info, uchar *src, ulong addr, ulong cnt) /* To make things simple use byte writes only */ for (i = 0; i < cnt; i++) { *(uchar *)(addr + i) = src[i]; + /* avoid re-ordering flash data write and busy status + * check as flash memory space attributes are generally Normal + */ + mb(); while (readl(&STM32_FLASH->sr) & STM32_FLASH_SR_BSY) ; } diff --git a/drivers/spmi/spmi-sandbox.c b/drivers/spmi/spmi-sandbox.c index 2f0fea07e80..980aff2063a 100644 --- a/drivers/spmi/spmi-sandbox.c +++ b/drivers/spmi/spmi-sandbox.c @@ -35,7 +35,8 @@ struct sandbox_emul_fake_regs { }; struct sandbox_emul_gpio { - struct sandbox_emul_fake_regs r[EMUL_GPIO_REG_END]; /* Fake registers */ + /* Fake registers - need one more entry as REG_END is valid address. */ + struct sandbox_emul_fake_regs r[EMUL_GPIO_REG_END + 1]; }; struct sandbox_spmi_priv { diff --git a/drivers/tpm/tpm_tis_sandbox.c b/drivers/tpm/tpm_tis_sandbox.c index 9ea98075b30..4aade565e27 100644 --- a/drivers/tpm/tpm_tis_sandbox.c +++ b/drivers/tpm/tpm_tis_sandbox.c @@ -217,7 +217,7 @@ static int sandbox_tpm_xfer(struct udevice *dev, const uint8_t *sendbuf, rsk.struct_version = 2; rsk.uid = ROLLBACK_SPACE_KERNEL_UID; rsk.kernel_versions = 0; - rsk.crc8 = crc8((unsigned char *)&rsk, + rsk.crc8 = crc8(0, (unsigned char *)&rsk, offsetof(struct rollback_space_kernel, crc8)); memcpy(data, &rsk, sizeof(rsk)); |