Merge tdk_new and Ti375 Efinity support
Keep the current GPS software and Genesys2/VCU118 flows while integrating Ti375C529 Efinity, flash, programming, and debug support. Add board-specific SPI NOR profiles and persistent GPS flash layouts across all three boards.
This commit is contained in:
@@ -17,17 +17,27 @@
|
||||
#define FLASH_CMD_WRITE_DISABLE 0x04u
|
||||
#define FLASH_CMD_WRITE_ENABLE 0x06u
|
||||
#define FLASH_CMD_READ_CONFIG 0x35u
|
||||
#define FLASH_CMD_CLEAR_STATUS 0x30u
|
||||
#define FLASH_CMD_RESET 0xf0u
|
||||
#define FLASH_CMD_READ_4B 0x13u
|
||||
#define FLASH_CMD_PROGRAM_4B 0x12u
|
||||
#define FLASH_CMD_ERASE_4B 0xdcu
|
||||
|
||||
#define FLASH_STATUS_WIP (1u << 0)
|
||||
#define FLASH_STATUS_WEL (1u << 1)
|
||||
#define FLASH_STATUS_E_ERR (1u << 5)
|
||||
#define FLASH_STATUS_P_ERR (1u << 6)
|
||||
#define FLASH_STATUS_ERROR (FLASH_STATUS_E_ERR | FLASH_STATUS_P_ERR)
|
||||
#define FLASH_STATUS_WIP (1u << 0)
|
||||
#define FLASH_STATUS_WEL (1u << 1)
|
||||
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
#define FLASH_CMD_CLEAR_STATUS 0x30u
|
||||
#define FLASH_CMD_RESET 0xf0u
|
||||
#define FLASH_STATUS_ERROR ((1u << 5) | (1u << 6))
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
#define FLASH_CMD_RESET_ENABLE 0x66u
|
||||
#define FLASH_CMD_RESET_MEMORY 0x99u
|
||||
#define FLASH_CMD_READ_FLAG_STATUS 0x70u
|
||||
#define FLASH_CMD_CLEAR_FLAG_STATUS 0x50u
|
||||
#define FLASH_FLAG_STATUS_ERROR ((1u << 1) | (1u << 4) | (1u << 5))
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_IS25WP512M
|
||||
#define FLASH_CMD_RESET_ENABLE 0x66u
|
||||
#define FLASH_CMD_RESET_MEMORY 0x99u
|
||||
#endif
|
||||
|
||||
#define FLASH_RESET_DELAY_US 300u
|
||||
#define FLASH_PROGRAM_TIMEOUT_US 100000u
|
||||
@@ -104,6 +114,7 @@ static bool flash_wait_complete(uint32_t timeout_us)
|
||||
|
||||
do {
|
||||
status = bsp_spi_flash_read_status();
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
if ((status & FLASH_STATUS_ERROR) != 0u) {
|
||||
/* S25FL-S deliberately holds WIP high after a program/erase error
|
||||
* until CLSR is issued. Clear the latched failure so a later request
|
||||
@@ -111,7 +122,15 @@ static bool flash_wait_complete(uint32_t timeout_us)
|
||||
flash_cmd(FLASH_CMD_CLEAR_STATUS);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
if ((status & FLASH_STATUS_WIP) == 0u) {
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
uint8_t flags = flash_read_register(FLASH_CMD_READ_FLAG_STATUS);
|
||||
if ((flags & FLASH_FLAG_STATUS_ERROR) != 0u) {
|
||||
flash_cmd(FLASH_CMD_CLEAR_FLAG_STATUS);
|
||||
return false;
|
||||
}
|
||||
#endif
|
||||
return true;
|
||||
}
|
||||
} while ((bsp_read64(BSP_CLINT_MTIME) - start) < timeout_ticks);
|
||||
@@ -121,11 +140,20 @@ static bool flash_wait_complete(uint32_t timeout_us)
|
||||
|
||||
static bool flash_write_enable(void)
|
||||
{
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
flash_cmd(FLASH_CMD_CLEAR_STATUS);
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
flash_cmd(FLASH_CMD_CLEAR_FLAG_STATUS);
|
||||
#endif
|
||||
flash_cmd(FLASH_CMD_WRITE_ENABLE);
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
return (bsp_spi_flash_read_status() &
|
||||
(FLASH_STATUS_WIP | FLASH_STATUS_WEL | FLASH_STATUS_ERROR)) ==
|
||||
FLASH_STATUS_WEL;
|
||||
#else
|
||||
return (bsp_spi_flash_read_status() &
|
||||
(FLASH_STATUS_WIP | FLASH_STATUS_WEL)) == FLASH_STATUS_WEL;
|
||||
#endif
|
||||
}
|
||||
|
||||
static bool flash_verify(uint32_t flash_addr, const uint8_t *expected,
|
||||
@@ -156,7 +184,12 @@ void bsp_spi_flash_init(void)
|
||||
void bsp_spi_flash_reset(void)
|
||||
{
|
||||
spi_select(0);
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
flash_cmd(FLASH_CMD_RESET);
|
||||
#else
|
||||
flash_cmd(FLASH_CMD_RESET_ENABLE);
|
||||
flash_cmd(FLASH_CMD_RESET_MEMORY);
|
||||
#endif
|
||||
flash_delay_us(FLASH_RESET_DELAY_US);
|
||||
}
|
||||
|
||||
@@ -179,7 +212,11 @@ uint8_t bsp_spi_flash_read_status(void)
|
||||
|
||||
uint8_t bsp_spi_flash_read_config(void)
|
||||
{
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
return flash_read_register(FLASH_CMD_READ_CONFIG);
|
||||
#else
|
||||
return 0u;
|
||||
#endif
|
||||
}
|
||||
|
||||
void bsp_spi_flash_read(uint32_t flash_addr, void *dst, uint32_t len)
|
||||
@@ -202,9 +239,13 @@ void bsp_spi_flash_read(uint32_t flash_addr, void *dst, uint32_t len)
|
||||
bool bsp_spi_flash_erase_sector(uint32_t flash_addr)
|
||||
{
|
||||
if ((flash_addr & (BSP_SPI_FLASH_SECTOR_SIZE - 1u)) != 0u ||
|
||||
!flash_range_valid(flash_addr, BSP_SPI_FLASH_SECTOR_SIZE) ||
|
||||
!flash_range_valid(flash_addr, BSP_SPI_FLASH_SECTOR_SIZE)
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
||
|
||||
((flash_addr >= (BSP_SPI_FLASH_SIZE - (2u * BSP_SPI_FLASH_SECTOR_SIZE))) &&
|
||||
((bsp_spi_flash_read_config() & BSP_SPI_FLASH_CONFIG_TBPARM) != 0u))) {
|
||||
((bsp_spi_flash_read_config() & BSP_SPI_FLASH_CONFIG_TBPARM) != 0u))
|
||||
#endif
|
||||
) {
|
||||
return false;
|
||||
}
|
||||
if (!flash_wait_complete(FLASH_PROGRAM_TIMEOUT_US) || !flash_write_enable()) {
|
||||
|
||||
@@ -4,10 +4,29 @@
|
||||
#include <stdbool.h>
|
||||
#include <stdint.h>
|
||||
|
||||
#define BSP_SPI_FLASH_SIZE 0x02000000UL
|
||||
#define BSP_SPI_FLASH_PROFILE_S25FL256S 1
|
||||
#define BSP_SPI_FLASH_PROFILE_MT25QU01G 2
|
||||
#define BSP_SPI_FLASH_PROFILE_IS25WP512M 3
|
||||
|
||||
#ifndef BSP_SPI_FLASH_PROFILE
|
||||
#define BSP_SPI_FLASH_PROFILE BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
#endif
|
||||
|
||||
#if BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_S25FL256S
|
||||
#define BSP_SPI_FLASH_SIZE 0x02000000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x00010219UL
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_MT25QU01G
|
||||
#define BSP_SPI_FLASH_SIZE 0x08000000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x0020bb21UL
|
||||
#elif BSP_SPI_FLASH_PROFILE == BSP_SPI_FLASH_PROFILE_IS25WP512M
|
||||
#define BSP_SPI_FLASH_SIZE 0x04000000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x009d701aUL
|
||||
#else
|
||||
#error "Unsupported BSP_SPI_FLASH_PROFILE"
|
||||
#endif
|
||||
|
||||
#define BSP_SPI_FLASH_PAGE_SIZE 256UL
|
||||
#define BSP_SPI_FLASH_SECTOR_SIZE 0x00010000UL
|
||||
#define BSP_SPI_FLASH_JEDEC_ID 0x00010219UL
|
||||
#define BSP_SPI_FLASH_CONFIG_TBPARM (1u << 2)
|
||||
|
||||
void bsp_spi_flash_init(void);
|
||||
|
||||
Reference in New Issue
Block a user