app: aboot: Add support to use rpmb for device info
Use rpmb to store device info parameters.
Change-Id: Ia3ea796cc2cdfe40c2572048e69e7197eb681c25
diff --git a/app/aboot/aboot.c b/app/aboot/aboot.c
index 35373d8..d011532 100644
--- a/app/aboot/aboot.c
+++ b/app/aboot/aboot.c
@@ -57,6 +57,9 @@
#include <boot_device.h>
#include <boot_verifier.h>
#include <image_verify.h>
+#if USE_RPMB_FOR_DEVINFO
+#include <rpmb.h>
+#endif
#if DEVICE_TREE
#include <libfdt.h>
@@ -1445,7 +1448,6 @@
BUF_DMA_ALIGN(info_buf, BOOT_IMG_MAX_PAGE_SIZE);
void write_device_info_mmc(device_info *dev)
{
- struct device_info *info = (void*) info_buf;
unsigned long long ptn = 0;
#if !VERIFIED_BOOT
unsigned long long size;
@@ -1473,14 +1475,12 @@
size = partition_get_size(index);
#endif
- memcpy(info, dev, sizeof(device_info));
-
blocksize = mmc_get_device_blocksize();
#if VERIFIED_BOOT
- if(mmc_write(ptn, blocksize, (void *)info_buf))
+ if(mmc_write(ptn, blocksize, (void *)dev))
#else
- if(mmc_write((ptn + size - blocksize), blocksize, (void *)info_buf))
+ if(mmc_write((ptn + size - blocksize), blocksize, (void *)dev))
#endif
{
dprintf(CRITICAL, "ERROR: Cannot write device info\n");
@@ -1488,9 +1488,8 @@
}
}
-void read_device_info_mmc(device_info *dev)
+void read_device_info_mmc(struct device_info *info)
{
- struct device_info *info = (void*) info_buf;
unsigned long long ptn = 0;
#if !VERIFIED_BOOT
unsigned long long size;
@@ -1519,30 +1518,15 @@
blocksize = mmc_get_device_blocksize();
#if VERIFIED_BOOT
- if(mmc_read(ptn, (void *)info_buf, blocksize))
+ if(mmc_read(ptn, (void *)info, blocksize))
#else
- if(mmc_read((ptn + size - blocksize), (void *)info_buf, blocksize))
+ if(mmc_read((ptn + size - blocksize), (void *)info, blocksize))
#endif
{
dprintf(CRITICAL, "ERROR: Cannot read device info\n");
return;
}
- if (memcmp(info->magic, DEVICE_MAGIC, DEVICE_MAGIC_SIZE))
- {
- memcpy(info->magic, DEVICE_MAGIC, DEVICE_MAGIC_SIZE);
-#if DEFAULT_UNLOCK
- info->is_unlocked = 1;
-#else
- info->is_unlocked = 0;
-#endif
- info->is_verified = 0;
- info->is_tampered = 0;
- info->charger_screen_enabled = 0;
-
- write_device_info_mmc(info);
- }
- memcpy(dev, info, sizeof(device_info));
}
void write_device_info_flash(device_info *dev)
@@ -1614,7 +1598,15 @@
{
if(target_is_emmc_boot())
{
- write_device_info_mmc(dev);
+ struct device_info *info = (void*) info_buf;
+ memcpy(info, dev, sizeof(struct device_info));
+
+#if USE_RPMB_FOR_DEVINFO
+ if (is_secure_boot_enable())
+ write_device_info_rpmb((void*) info, mmc_get_device_blocksize());
+#else
+ write_device_info_mmc(info);
+#endif
}
else
{
@@ -1626,7 +1618,29 @@
{
if(target_is_emmc_boot())
{
- read_device_info_mmc(dev);
+ struct device_info *info = (void*) info_buf;
+
+#if USE_RPMB_FOR_DEVINFO
+ if (is_secure_boot_enable())
+ read_device_info_rpmb((void*) info, mmc_get_device_blocksize());
+#else
+ read_device_info_mmc(info);
+#endif
+
+ if (memcmp(info->magic, DEVICE_MAGIC, DEVICE_MAGIC_SIZE))
+ {
+ memcpy(info->magic, DEVICE_MAGIC, DEVICE_MAGIC_SIZE);
+ if (is_secure_boot_enable())
+ info->is_unlocked = 0;
+ else
+ info->is_unlocked = 1;
+ info->is_verified = 0;
+ info->is_tampered = 0;
+ info->charger_screen_enabled = 0;
+
+ write_device_info(info);
+ }
+ memcpy(dev, info, sizeof(device_info));
}
else
{