Skip to content

Commit

Permalink
arch/esp32_partition: read data from SPI Flash at designated
Browse files Browse the repository at this point in the history
address (with decryption)

Signed-off-by: nuttxs <[email protected]>
  • Loading branch information
nuttxs committed Feb 25, 2025
1 parent e06bb02 commit f081963
Show file tree
Hide file tree
Showing 2 changed files with 70 additions and 0 deletions.
20 changes: 20 additions & 0 deletions arch/xtensa/include/esp32/partition.h
Original file line number Diff line number Diff line change
Expand Up @@ -55,4 +55,24 @@ enum ota_img_bootseq
OTA_IMG_BOOT_SEQ_MAX
};

/****************************************************************************
* Name: esp32_partition_read_decrypt
*
* Description:
* Read data from SPI Flash at designated address. (with decryption)
*
* Input Parameters:
* label - Partition label
* offset - Offset in SPI Flash
* buf - Data buffer pointer
* size - Data number
*
* Returned Value:
* 0 if success or a negative value if fail.
*
****************************************************************************/

int esp32_partition_read_decrypt(const char *label, size_t offset,
void *buf, size_t size);

#endif /* __ARCH_XTENSA_INCLUDE_ESP32_PARTITION_H */
50 changes: 50 additions & 0 deletions arch/xtensa/src/esp32/esp32_partition.c
Original file line number Diff line number Diff line change
Expand Up @@ -1038,6 +1038,56 @@ int esp32_partition_read(const char *label, size_t offset, void *buf,
return OK;
}

/****************************************************************************
* Name: esp32_partition_read_decrypt
*
* Description:
* Read data from SPI Flash at designated address. (with decryption)
*
* Input Parameters:
* label - Partition label
* offset - Offset in SPI Flash
* buf - Data buffer pointer
* size - Data number
*
* Returned Value:
* 0 if success or a negative value if fail.
*
****************************************************************************/

int esp32_partition_read_decrypt(const char *label, size_t offset, void *buf,
size_t size)
{
int ret;
int partion_offset;
DEBUGASSERT(label != NULL && buf != NULL);
struct mtd_dev_s *mtd;

partion_offset = partition_get_offset(label, strlen(label));
if (partion_offset < 0)
{
ferr("ERROR: Failed to get partition: %s offset\n", label);
return partion_offset;
}

mtd = esp32_spiflash_encrypt_get_mtd();
if (!mtd)
{
ferr("ERROR: Failed to get SPI flash MTD\n");
return -ENOSYS;
}

ret = MTD_READ(mtd, partion_offset + offset,
size, (uint8_t *)buf);
if (ret != size)
{
ferr("ERROR: Failed to get read data from MTD\n");
return -EIO;
}

return OK;
}

/****************************************************************************
* Name: esp32_partition_write
*
Expand Down

0 comments on commit f081963

Please sign in to comment.