mirror of
https://github.com/ARM-software/arm-trusted-firmware.git
synced 2025-04-16 17:44:19 +00:00
feat(mtd): add platform function to allow using external buffer
The scratch buffer could be large. The new function allows platform to defined its own external buffer or use the default one. Signed-off-by: Lionel Debieve <lionel.debieve@foss.st.com> Change-Id: Ib7ab8ff19fa0a9cb06e364f058b91af58c3c471a
This commit is contained in:
parent
351f9cd889
commit
f29c0702d2
2 changed files with 25 additions and 6 deletions
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2019-2021, STMicroelectronics - All Rights Reserved
|
||||
* Copyright (c) 2019-2022, STMicroelectronics - All Rights Reserved
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -8,19 +8,30 @@
|
|||
#include <errno.h>
|
||||
#include <stddef.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
#include <common/debug.h>
|
||||
#include <drivers/delay_timer.h>
|
||||
#include <drivers/nand.h>
|
||||
#include <lib/utils.h>
|
||||
|
||||
#include <platform_def.h>
|
||||
|
||||
/*
|
||||
* Define a single nand_device used by specific NAND frameworks.
|
||||
*/
|
||||
static struct nand_device nand_dev;
|
||||
|
||||
#pragma weak plat_get_scratch_buffer
|
||||
void plat_get_scratch_buffer(void **buffer_addr, size_t *buf_size)
|
||||
{
|
||||
static uint8_t scratch_buff[PLATFORM_MTD_MAX_PAGE_SIZE];
|
||||
|
||||
assert(buffer_addr != NULL);
|
||||
assert(buf_size != NULL);
|
||||
|
||||
*buffer_addr = (void *)scratch_buff;
|
||||
*buf_size = sizeof(scratch_buff);
|
||||
}
|
||||
|
||||
int nand_read(unsigned int offset, uintptr_t buffer, size_t length,
|
||||
size_t *length_read)
|
||||
{
|
||||
|
@ -34,6 +45,12 @@ int nand_read(unsigned int offset, uintptr_t buffer, size_t length,
|
|||
unsigned int bytes_read;
|
||||
int is_bad;
|
||||
int ret;
|
||||
uint8_t *scratch_buff;
|
||||
size_t scratch_buff_size;
|
||||
|
||||
plat_get_scratch_buffer((void **)&scratch_buff, &scratch_buff_size);
|
||||
|
||||
assert(scratch_buff != NULL);
|
||||
|
||||
VERBOSE("Block %u - %u, page_start %u, nb %u, length %zu, offset %u\n",
|
||||
block, end_block, page_start, nb_pages, length, offset);
|
||||
|
@ -41,7 +58,7 @@ int nand_read(unsigned int offset, uintptr_t buffer, size_t length,
|
|||
*length_read = 0UL;
|
||||
|
||||
if (((start_offset != 0U) || (length % nand_dev.page_size) != 0U) &&
|
||||
(sizeof(scratch_buff) < nand_dev.page_size)) {
|
||||
(scratch_buff_size < nand_dev.page_size)) {
|
||||
return -EINVAL;
|
||||
}
|
||||
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
/*
|
||||
* Copyright (c) 2019-2021, STMicroelectronics - All Rights Reserved
|
||||
* Copyright (c) 2019-2022, STMicroelectronics - All Rights Reserved
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*/
|
||||
|
@ -33,6 +33,8 @@ struct nand_device {
|
|||
uintptr_t buffer);
|
||||
};
|
||||
|
||||
void plat_get_scratch_buffer(void **buffer_addr, size_t *buf_size);
|
||||
|
||||
/*
|
||||
* Read bytes from NAND device
|
||||
*
|
||||
|
|
Loading…
Add table
Reference in a new issue