mirror of https://github.com/ARMmbed/mbed-os.git
SFDP: consolidation of sfdp_detect_page_size
parent
8a076d4b1f
commit
7d1886ecae
|
@ -31,7 +31,6 @@ using namespace mbed;
|
|||
|
||||
/* Default QSPIF Parameters */
|
||||
/****************************/
|
||||
#define QSPIF_DEFAULT_PAGE_SIZE 256
|
||||
#define QSPIF_DEFAULT_SE_SIZE 4096
|
||||
// The SFDP spec only defines two status registers. But some devices,
|
||||
// have three "status-like" registers (one status, two config)
|
||||
|
@ -62,7 +61,6 @@ using namespace mbed;
|
|||
#define QSPIF_BASIC_PARAM_TABLE_222_READ_INST_BYTE 23
|
||||
#define QSPIF_BASIC_PARAM_TABLE_122_READ_INST_BYTE 15
|
||||
#define QSPIF_BASIC_PARAM_TABLE_112_READ_INST_BYTE 13
|
||||
#define QSPIF_BASIC_PARAM_TABLE_PAGE_SIZE_BYTE 40
|
||||
// Quad Enable Params
|
||||
#define QSPIF_BASIC_PARAM_TABLE_QER_BYTE 58
|
||||
#define QSPIF_BASIC_PARAM_TABLE_444_MODE_EN_SEQ_BYTE 56
|
||||
|
@ -652,7 +650,7 @@ int QSPIFBlockDevice::_sfdp_parse_basic_param_table(Callback<int(bd_addr_t, void
|
|||
_device_size_bytes = (density_bits + 1) / 8;
|
||||
|
||||
// Set Page Size (QSPI write must be done on Page limits)
|
||||
_page_size_bytes = _sfdp_detect_page_size(param_table, basic_table_size);
|
||||
_page_size_bytes = sfdp_detect_page_size(param_table, basic_table_size);
|
||||
|
||||
if (_sfdp_detect_reset_protocol_and_reset(param_table) != QSPIF_BD_ERROR_OK) {
|
||||
tr_error("Init - Detecting reset protocol/resetting failed");
|
||||
|
@ -832,21 +830,6 @@ int QSPIFBlockDevice::_sfdp_set_qpi_enabled(uint8_t *basic_param_table_ptr)
|
|||
return 0;
|
||||
}
|
||||
|
||||
int QSPIFBlockDevice::_sfdp_detect_page_size(uint8_t *basic_param_table_ptr, int basic_param_table_size)
|
||||
{
|
||||
unsigned int page_size = QSPIF_DEFAULT_PAGE_SIZE;
|
||||
|
||||
if (basic_param_table_size > QSPIF_BASIC_PARAM_TABLE_PAGE_SIZE_BYTE) {
|
||||
// Page Size is specified by 4 Bits (N), calculated by 2^N
|
||||
int page_to_power_size = ((int)basic_param_table_ptr[QSPIF_BASIC_PARAM_TABLE_PAGE_SIZE_BYTE]) >> 4;
|
||||
page_size = 1 << page_to_power_size;
|
||||
tr_debug("Detected Page Size: %d", page_size);
|
||||
} else {
|
||||
tr_debug("Using Default Page Size: %d", page_size);
|
||||
}
|
||||
return page_size;
|
||||
}
|
||||
|
||||
int QSPIFBlockDevice::_sfdp_detect_erase_types_inst_and_size(uint8_t *basic_param_table_ptr,
|
||||
int basic_param_table_size,
|
||||
sfdp_smptbl_info &smptbl)
|
||||
|
|
|
@ -30,7 +30,6 @@ using namespace mbed;
|
|||
/****************************/
|
||||
#define SPIF_DEFAULT_READ_SIZE 1
|
||||
#define SPIF_DEFAULT_PROG_SIZE 1
|
||||
#define SPIF_DEFAULT_PAGE_SIZE 256
|
||||
#define SPIF_DEFAULT_SE_SIZE 4096
|
||||
#define SPI_MAX_STATUS_REGISTER_SIZE 2
|
||||
#ifndef UINT64_MAX
|
||||
|
@ -49,7 +48,6 @@ using namespace mbed;
|
|||
#define SPIF_BASIC_PARAM_TABLE_222_READ_INST_BYTE 23
|
||||
#define SPIF_BASIC_PARAM_TABLE_122_READ_INST_BYTE 15
|
||||
#define SPIF_BASIC_PARAM_TABLE_112_READ_INST_BYTE 13
|
||||
#define SPIF_BASIC_PARAM_TABLE_PAGE_SIZE_BYTE 40
|
||||
// Address Length
|
||||
#define SPIF_ADDR_SIZE_3_BYTES 3
|
||||
#define SPIF_ADDR_SIZE_4_BYTES 4
|
||||
|
@ -653,7 +651,7 @@ int SPIFBlockDevice::_sfdp_parse_basic_param_table(Callback<int(bd_addr_t, void
|
|||
_erase_instruction = SPIF_SE;
|
||||
|
||||
// Set Page Size (SPI write must be done on Page limits)
|
||||
_page_size_bytes = _sfdp_detect_page_size(param_table, sfdp_info.bptbl.size);
|
||||
_page_size_bytes = sfdp_detect_page_size(param_table, sfdp_info.bptbl.size);
|
||||
|
||||
// Detect and Set Erase Types
|
||||
_sfdp_detect_erase_types_inst_and_size(param_table, sfdp_info.bptbl.size, _erase4k_inst, sfdp_info.smptbl);
|
||||
|
@ -665,21 +663,6 @@ int SPIFBlockDevice::_sfdp_parse_basic_param_table(Callback<int(bd_addr_t, void
|
|||
return 0;
|
||||
}
|
||||
|
||||
unsigned int SPIFBlockDevice::_sfdp_detect_page_size(uint8_t *basic_param_table_ptr, int basic_param_table_size)
|
||||
{
|
||||
unsigned int page_size = SPIF_DEFAULT_PAGE_SIZE;
|
||||
|
||||
if (basic_param_table_size > SPIF_BASIC_PARAM_TABLE_PAGE_SIZE_BYTE) {
|
||||
// Page Size is specified by 4 Bits (N), calculated by 2^N
|
||||
int page_to_power_size = ((int)basic_param_table_ptr[SPIF_BASIC_PARAM_TABLE_PAGE_SIZE_BYTE]) >> 4;
|
||||
page_size = local_math_power(2, page_to_power_size);
|
||||
tr_debug("Detected Page Size: %d", page_size);
|
||||
} else {
|
||||
tr_debug("Using Default Page Size: %d", page_size);
|
||||
}
|
||||
return page_size;
|
||||
}
|
||||
|
||||
int SPIFBlockDevice::_sfdp_detect_erase_types_inst_and_size(uint8_t *basic_param_table_ptr, int basic_param_table_size,
|
||||
int &erase4k_inst,
|
||||
sfdp_smptbl_info &smptbl)
|
||||
|
|
|
@ -126,6 +126,15 @@ int sfdp_parse_headers(Callback<int(bd_addr_t, void *, bd_size_t)> sfdp_reader,
|
|||
*/
|
||||
int sfdp_parse_sector_map_table(Callback<int(bd_addr_t, void *, bd_size_t)> sfdp_reader, sfdp_smptbl_info &smtbl);
|
||||
|
||||
/** Detect page size used for writing on flash
|
||||
*
|
||||
* @param bptbl_ptr Pointer to memory holding a Basic Parameter Table structure
|
||||
* @param bptbl_size Size of memory holding a Basic Parameter Table
|
||||
*
|
||||
* @return Page size
|
||||
*/
|
||||
size_t sfdp_detect_page_size(uint8_t *bptbl_ptr, size_t bptbl_size);
|
||||
|
||||
/** @}*/
|
||||
} /* namespace mbed */
|
||||
#endif
|
||||
|
|
|
@ -192,5 +192,24 @@ int sfdp_parse_sector_map_table(Callback<int(bd_addr_t, void *, bd_size_t)> sfdp
|
|||
return 0;
|
||||
}
|
||||
|
||||
size_t sfdp_detect_page_size(uint8_t *basic_param_table_ptr, size_t basic_param_table_size)
|
||||
{
|
||||
constexpr int SFDP_BASIC_PARAM_TABLE_PAGE_SIZE = 40;
|
||||
constexpr int SFDP_DEFAULT_PAGE_SIZE = 256;
|
||||
|
||||
unsigned int page_size = SFDP_DEFAULT_PAGE_SIZE;
|
||||
|
||||
if (basic_param_table_size > SFDP_BASIC_PARAM_TABLE_PAGE_SIZE) {
|
||||
// Page Size is specified by 4 Bits (N), calculated by 2^N
|
||||
int page_to_power_size = ((int)basic_param_table_ptr[SFDP_BASIC_PARAM_TABLE_PAGE_SIZE]) >> 4;
|
||||
page_size = 1 << page_to_power_size;
|
||||
tr_debug("Detected Page Size: %d", page_size);
|
||||
} else {
|
||||
tr_debug("Using Default Page Size: %d", page_size);
|
||||
}
|
||||
return page_size;
|
||||
}
|
||||
|
||||
|
||||
} /* namespace mbed */
|
||||
#endif /* (DEVICE_SPI || DEVICE_QSPI) */
|
||||
|
|
Loading…
Reference in New Issue