blob: 035668ac2c5e9c9926fa836bc4eaace73c4a0077 [file] [log] [blame]
// SPDX-License-Identifier: GPL-2.0 OR Apache-2.0
/*
* Copyright 2023 Qorvo US, Inc.
*
*/
#include <stddef.h>
#include <qmrom_spi.h>
#include <qmrom_log.h>
#include <qmrom_utils.h>
#include <fwupdater.h>
#include "unit_tests.h"
#define PLD_CHK_PLD_SIZE 16
#define PLD_CHK_TOTAL_SIZE \
(sizeof(struct fw_pkg_payload_chunk_t) + PLD_CHK_PLD_SIZE)
void run_fwupdater_download_fwpkg_test(void *spi_handle)
{
uint8_t rx[STC_LEN + sizeof(struct fw_pkg_hdr_t)] = { 0 };
uint8_t tx[STC_LEN + sizeof(struct fw_pkg_hdr_t)] = {
0x80, 0x00, sizeof(struct fw_pkg_hdr_t), 0x00
};
struct fw_pkg_hdr_t *fwpkg = (struct fw_pkg_hdr_t *)&tx[STC_LEN];
/* Setup the expected fw package */
fwpkg->magic = CRYPTO_FIRMWARE_PACK_MAGIC_VALUE;
fwpkg->version = CRYPTO_FIRMWARE_PACK_VERSION;
fwpkg->enc_mode = CRYPTO_FIRMWARE_PACK_ENC_MODE_ENCRYPTED;
fwpkg->package_type = CRYPTO_FIRMWARE_PACK_PACKAGE_TYPE_ICV;
fwpkg->enc_mode = CRYPTO_FIRMWARE_PACK_ENC_MODE_ENCRYPTED;
fwpkg->enc_algo = CRYPTO_FIRMWARE_PACK_ENC_ALGO_128BIT_AES_CTR;
strcpy((char *)fwpkg->enc_data, "encrypted data");
strcpy((char *)fwpkg->fw_version, "firmware version");
fwpkg->payload_len = 0xDEADBEEF;
strcpy((char *)fwpkg->tag, "AES-CMAC Tag");
qmrom_spi_wait_for_ready_line(spi_handle, 100);
qmrom_spi_transfer(spi_handle, (char *)rx, (char *)tx, sizeof(tx));
LOG_INFO("received:\n");
hexdump(LOG_INFO, rx, sizeof(tx));
LOG_INFO("%s done\n", __func__);
}
void run_fwupdater_download_img_hdr_test(void *spi_handle)
{
char rx[STC_LEN + CRYPTO_FIRMWARE_IMAGE_HDR_TOTAL_SIZE] = { 0 };
char tx[STC_LEN + CRYPTO_FIRMWARE_IMAGE_HDR_TOTAL_SIZE] = {
(char)0x80, 0x00, CRYPTO_FIRMWARE_IMAGE_HDR_TOTAL_SIZE, 0x00
};
struct fw_pkg_img_hdr_t *imghdr =
(struct fw_pkg_img_hdr_t *)&tx[STC_LEN];
/* Setup the expected fw package */
imghdr->magic = CRYPTO_FIRMWARE_IMAGE_MAGIC_VALUE;
imghdr->version = CRYPTO_FIRMWARE_IMAGE_VERSION;
imghdr->cert_chain_length = CRYPTO_IMAGES_CERT_PKG_SIZE;
imghdr->cert_chain_offset = 0xDEADBEEF;
imghdr->num_descs = 1;
imghdr->descs[0].offset = 0xDEADBEEF;
imghdr->descs[0].length = 0xDEADBEEF;
qmrom_spi_wait_for_ready_line(spi_handle, 100);
qmrom_spi_transfer(spi_handle, rx, tx, sizeof(tx));
LOG_INFO("received:\n");
hexdump(LOG_INFO, rx, sizeof(tx));
LOG_INFO("%s done\n", __func__);
}
void run_fwupdater_download_pld_chk_test(void *spi_handle)
{
char rx[STC_LEN + PLD_CHK_TOTAL_SIZE] = { 0 };
char tx[STC_LEN + PLD_CHK_TOTAL_SIZE] = { (char)0x80, 0x00,
PLD_CHK_TOTAL_SIZE, 0x00 };
struct fw_pkg_payload_chunk_t *pldchk =
(struct fw_pkg_payload_chunk_t *)&tx[STC_LEN];
/* Setup the expected fw package */
pldchk->magic = CRYPTO_FIRMWARE_CHUNK_MAGIC_VALUE;
pldchk->version = CRYPTO_FIRMWARE_CHUNK_VERSION;
pldchk->length = PLD_CHK_PLD_SIZE;
strcpy((char *)pldchk->payload, "payload");
qmrom_spi_wait_for_ready_line(spi_handle, 100);
qmrom_spi_transfer(spi_handle, rx, tx, sizeof(tx));
LOG_INFO("received:\n");
hexdump(LOG_INFO, rx, sizeof(tx));
LOG_INFO("%s done\n", __func__);
}