summaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorJi Luo <ji.luo@nxp.com>2018-08-19 19:16:43 +0800
committerJi Luo <ji.luo@nxp.com>2018-08-22 17:36:43 +0800
commitb0e849fb2dfd483e039571c4fe0aab7f65273bb3 (patch)
treedad2851c9abd9beaaed736de1b3931ee5ffec836 /lib
parentd6b9992db082920b55c08d33df1cb03942939e7f (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')
-rw-r--r--lib/avb/fsl/fsl_avbkey.c17
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)){