summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--drivers/crypto/fsl_caam.c20
-rw-r--r--drivers/crypto/fsl_caam_internal.h2
-rw-r--r--drivers/usb/gadget/fastboot_lock_unlock.c14
-rw-r--r--lib/avb/fsl/fsl_avbkey.c17
4 files changed, 30 insertions, 23 deletions
diff --git a/drivers/crypto/fsl_caam.c b/drivers/crypto/fsl_caam.c
index c176294774..52c8797c2b 100644
--- a/drivers/crypto/fsl_caam.c
+++ b/drivers/crypto/fsl_caam.c
@@ -141,16 +141,16 @@ u32 caam_decap_blob(u32 plain_text, u32 blob_addr, u32 size)
init_job_desc(decap_desc, 0);
append_load(decap_desc, PTR2CAAMDMA(skeymod), key_sz,
LDST_CLASS_2_CCB | LDST_SRCDST_BYTE_KEY);
- append_seq_in_ptr_intlen(decap_desc, blob_addr, size + 48, 0);
+ append_seq_in_ptr_intlen(decap_desc, blob_addr, size + CAAM_PAD_LEN, 0);
append_seq_out_ptr_intlen(decap_desc, plain_text, size, 0);
append_operation(decap_desc, OP_TYPE_DECAP_PROTOCOL | OP_PCLID_BLOB);
flush_dcache_range((uintptr_t)blob_addr & ALIGN_MASK,
((uintptr_t)blob_addr & ALIGN_MASK)
- + ROUND(2 * size, ARCH_DMA_MINALIGN));
+ + ROUND(size + CAAM_PAD_LEN, ARCH_DMA_MINALIGN));
flush_dcache_range((uintptr_t)plain_text & ALIGN_MASK,
(plain_text & ALIGN_MASK)
- + ROUND(2 * size, ARCH_DMA_MINALIGN));
+ + ROUND(size, ARCH_DMA_MINALIGN));
/* Run descriptor with result written to blob buffer */
ret = do_job(decap_desc);
@@ -186,15 +186,15 @@ u32 caam_gen_blob(u32 plain_data_addr, u32 blob_addr, u32 size)
append_load(encap_desc, PTR2CAAMDMA(skeymod), key_sz,
LDST_CLASS_2_CCB | LDST_SRCDST_BYTE_KEY);
append_seq_in_ptr_intlen(encap_desc, plain_data_addr, size, 0);
- append_seq_out_ptr_intlen(encap_desc, PTR2CAAMDMA(blob), size + 48, 0);
+ append_seq_out_ptr_intlen(encap_desc, PTR2CAAMDMA(blob), size + CAAM_PAD_LEN, 0);
append_operation(encap_desc, OP_TYPE_ENCAP_PROTOCOL | OP_PCLID_BLOB);
flush_dcache_range((uintptr_t)plain_data_addr & ALIGN_MASK,
(plain_data_addr & ALIGN_MASK)
- + ROUND(2 * size, ARCH_DMA_MINALIGN));
+ + ROUND(size, ARCH_DMA_MINALIGN));
flush_dcache_range((uintptr_t)blob & ALIGN_MASK,
((uintptr_t)blob & ALIGN_MASK)
- + ROUND(2 * size, ARCH_DMA_MINALIGN));
+ + ROUND(size + CAAM_PAD_LEN, ARCH_DMA_MINALIGN));
ret = do_job(encap_desc);
@@ -544,15 +544,15 @@ static int do_job(u32 *desc)
((uintptr_t)desc & ALIGN_MASK)
+ ROUND(DESC_MAX_SIZE, ARCH_DMA_MINALIGN));
+ flush_dcache_range((uintptr_t)g_jrdata.outrings & ALIGN_MASK,
+ ((uintptr_t)g_jrdata.outrings & ALIGN_MASK)
+ + ROUND(DESC_MAX_SIZE, ARCH_DMA_MINALIGN));
+
/* Inform HW that a new JR is available */
__raw_writel(1, CAAM_IRJAR0);
while (__raw_readl(CAAM_ORSFR0) == 0)
;
- flush_dcache_range((uintptr_t)g_jrdata.outrings & ALIGN_MASK,
- ((uintptr_t)g_jrdata.outrings & ALIGN_MASK)
- + ROUND(DESC_MAX_SIZE, ARCH_DMA_MINALIGN));
-
if (PTR2CAAMDMA(desc) == g_jrdata.outrings[0].desc) {
ret = g_jrdata.outrings[0].status;
} else {
diff --git a/drivers/crypto/fsl_caam_internal.h b/drivers/crypto/fsl_caam_internal.h
index 852672d1cb..dca8ba7169 100644
--- a/drivers/crypto/fsl_caam_internal.h
+++ b/drivers/crypto/fsl_caam_internal.h
@@ -252,4 +252,6 @@ typedef enum {
RNG_DESC_SH1_SIZE + \
RNG_DESC_KEYS_SIZE)
+#define CAAM_PAD_LEN 48
+
#endif /* __CAAM_INTERNAL_H__ */
diff --git a/drivers/usb/gadget/fastboot_lock_unlock.c b/drivers/usb/gadget/fastboot_lock_unlock.c
index 8fe534541c..18d479697c 100644
--- a/drivers/usb/gadget/fastboot_lock_unlock.c
+++ b/drivers/usb/gadget/fastboot_lock_unlock.c
@@ -37,6 +37,7 @@
#include <stdlib.h>
#include "fastboot_lock_unlock.h"
#include <fsl_fastboot.h>
+#include <memalign.h>
#ifdef CONFIG_IMX_TRUSTY_OS
#include <trusty/libtipc.h>
#include <asm/mach-imx/hab.h>
@@ -164,12 +165,13 @@ static int generate_salt(unsigned char* salt) {
}
static FbLockState decrypt_lock_store(unsigned char *bdata) {
- unsigned char plain_data[ENDATA_LEN];
int p = 0, ret;
+ ALLOC_CACHE_ALIGN_BUFFER(uint8_t, plain_data, ENDATA_LEN);
caam_open();
ret = caam_decap_blob((uint32_t)(ulong)plain_data,
- (uint32_t)(ulong)bdata + ENDATA_LEN, ENDATA_LEN);
+ (uint32_t)(ulong)bdata + ROUND(ENDATA_LEN, ARCH_DMA_MINALIGN),
+ ENDATA_LEN);
if (ret != 0) {
printf("Error during blob decap operation: 0x%x\n",ret);
return FASTBOOT_LOCK_ERROR;
@@ -227,7 +229,9 @@ static int encrypt_lock_store(FbLockState lock, unsigned char* bdata) {
*(bdata + p) = lock;
caam_open();
- ret = caam_gen_blob((uint32_t)(ulong)bdata, (uint32_t)(ulong)(bdata + ENDATA_LEN), ENDATA_LEN);
+ ret = caam_gen_blob((uint32_t)(ulong)bdata,
+ (uint32_t)(ulong)bdata + ROUND(ENDATA_LEN, ARCH_DMA_MINALIGN),
+ ENDATA_LEN);
if (ret != 0) {
printf("error in caam_gen_blob:0x%x\n", ret);
return -1;
@@ -330,7 +334,7 @@ int fastboot_set_lock_stat(FbLockState lock) {
int mmc_id;
int status, ret;
- bdata = (unsigned char *)memalign(ALIGN_BYTES, SECTOR_SIZE);
+ bdata = (unsigned char *)memalign(ARCH_DMA_MINALIGN, SECTOR_SIZE);
if (bdata == NULL)
goto fail2;
memset(bdata, 0, SECTOR_SIZE);
@@ -377,7 +381,7 @@ FbLockState fastboot_get_lock_stat(void) {
int mmc_id;
FbLockState ret;
- bdata = (unsigned char *)memalign(ALIGN_BYTES, SECTOR_SIZE);
+ bdata = (unsigned char *)memalign(ARCH_DMA_MINALIGN, SECTOR_SIZE);
if (bdata == NULL)
return g_lockstat;
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)){