diff options
-rw-r--r-- | drivers/crypto/fsl_caam.c | 20 | ||||
-rw-r--r-- | drivers/crypto/fsl_caam_internal.h | 2 | ||||
-rw-r--r-- | drivers/usb/gadget/fastboot_lock_unlock.c | 14 | ||||
-rw-r--r-- | lib/avb/fsl/fsl_avbkey.c | 17 |
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)){ |