diff options
author | Ji Luo <ji.luo@nxp.com> | 2018-08-19 19:16:43 +0800 |
---|---|---|
committer | Ji Luo <ji.luo@nxp.com> | 2018-08-22 17:36:43 +0800 |
commit | b0e849fb2dfd483e039571c4fe0aab7f65273bb3 (patch) | |
tree | dad2851c9abd9beaaed736de1b3931ee5ffec836 /lib/avb | |
parent | d6b9992db082920b55c08d33df1cb03942939e7f (diff) |
MA-12421 Fix CAAM not work on Android Things
Blob buffer size is 48 bytes larger than the plain text buffer,
set correct range when flush the dcache. Also use cache aligned
buffer for the blob/plain_text to avoid failure in CAAM.
Change-Id: I3b377cfeb8f5bd9c76233827b2c9c7bd0d788c9b
Signed-off-by: Ji Luo <ji.luo@nxp.com>
Diffstat (limited to 'lib/avb')
-rw-r--r-- | lib/avb/fsl/fsl_avbkey.c | 17 |
1 files changed, 9 insertions, 8 deletions
diff --git a/lib/avb/fsl/fsl_avbkey.c b/lib/avb/fsl/fsl_avbkey.c index 72fd7ea09f..99ceca577d 100644 --- a/lib/avb/fsl/fsl_avbkey.c +++ b/lib/avb/fsl/fsl_avbkey.c @@ -24,6 +24,7 @@ #include "fsl_atx_attributes.h" #include "utils.h" #include "debug.h" +#include <memalign.h> #define INITFLAG_FUSE_OFFSET 0 #define INITFLAG_FUSE_MASK 0x00000001 @@ -470,9 +471,9 @@ int read_keyslot_package(struct keyslot_package* kp) { int gen_rpmb_key(struct keyslot_package *kp) { char original_part; - uint8_t plain_key[RPMBKEY_LENGTH]; unsigned char* fill = NULL; int blksz; + ALLOC_CACHE_ALIGN_BUFFER(uint8_t, plain_key, RPMBKEY_LENGTH); kp->rpmb_keyblob_len = RPMBKEY_LEN; strcpy(kp->magic, KEYPACK_MAGIC); @@ -595,9 +596,9 @@ int rpmb_read(struct mmc *mmc, uint8_t *buffer, size_t num_bytes, int64_t offset unsigned short part_start, part_length, part_end, bs, be; margin_pos_t margin; char original_part; - uint8_t extract_key[RPMBKEY_LENGTH]; uint8_t *blob = NULL; struct blk_desc *desc = mmc_get_blk_desc(mmc); + ALLOC_CACHE_ALIGN_BUFFER(uint8_t, extract_key, RPMBKEY_LENGTH); #ifdef AVB_RPMB struct keyslot_package kp; @@ -629,7 +630,7 @@ int rpmb_read(struct mmc *mmc, uint8_t *buffer, size_t num_bytes, int64_t offset } /* get rpmb key */ - blob = (uint8_t *)memalign(ALIGN_BYTES, RPMBKEY_BLOB_LEN); + blob = (uint8_t *)memalign(ARCH_DMA_MINALIGN, RPMBKEY_BLOB_LEN); #ifdef AVB_RPMB if (read_keyslot_package(&kp)) { #else @@ -701,9 +702,9 @@ int rpmb_write(struct mmc *mmc, uint8_t *buffer, size_t num_bytes, int64_t offse unsigned short part_start, part_length, part_end, bs; margin_pos_t margin; char original_part; - uint8_t extract_key[RPMBKEY_LENGTH]; uint8_t *blob = NULL; struct blk_desc *desc = mmc_get_blk_desc(mmc); + ALLOC_CACHE_ALIGN_BUFFER(uint8_t, extract_key, RPMBKEY_LENGTH); #ifdef AVB_RPMB struct keyslot_package kp; @@ -736,7 +737,7 @@ int rpmb_write(struct mmc *mmc, uint8_t *buffer, size_t num_bytes, int64_t offse } /* get rpmb key */ - blob = (uint8_t *)memalign(ALIGN_BYTES, RPMBKEY_BLOB_LEN); + blob = (uint8_t *)memalign(ARCH_DMA_MINALIGN, RPMBKEY_BLOB_LEN); #ifdef AVB_RPMB if (read_keyslot_package(&kp)) { #else @@ -809,10 +810,10 @@ fail: static int rpmb_key(struct mmc *mmc) { char original_part; - uint8_t blob[RPMBKEY_FUSE_LEN]; - uint8_t plain_key[RPMBKEY_LENGTH]; int ret = 0; struct blk_desc *desc = mmc_get_blk_desc(mmc); + ALLOC_CACHE_ALIGN_BUFFER(uint8_t, blob, RPMBKEY_FUSE_LEN); + ALLOC_CACHE_ALIGN_BUFFER(uint8_t, plain_key, RPMBKEY_LENGTH); DEBUGAVB("[rpmb]: set kley\n"); @@ -859,7 +860,7 @@ static int rpmb_key(struct mmc *mmc) { #ifdef CONFIG_AVB_DEBUG /* debug */ - uint8_t ext_key[RPMBKEY_LENGTH]; + ALLOC_CACHE_ALIGN_BUFFER(uint8_t, ext_key, RPMBKEY_LENGTH); printf(" RPMB plain kay---\n"); print_buffer(0, plain_key, HEXDUMP_WIDTH, RPMBKEY_LENGTH, 0); if (fsl_fuse_read((uint32_t *)blob, RPMBKEY_FUSE_LENW, RPMBKEY_FUSE_OFFSET)){ |