@@ -149,8 +149,8 @@ typedef unsigned long long ULONG64;
149149#define AZURE_RTOS_LEVELX
150150#define LEVELX_MAJOR_VERSION 6
151151#define LEVELX_MINOR_VERSION 5
152- #define LEVELX_PATCH_VERSION 0
153- #define LEVELX_BUILD_VERSION 202601
152+ #define LEVELX_PATCH_VERSION 1
153+ #define LEVELX_BUILD_VERSION 202602
154154#define LEVELX_HOTFIX_VERSION ' '
155155
156156
@@ -274,6 +274,17 @@ typedef unsigned long long ULONG64;
274274#define LX_NAND_FLASH_MAX_METADATA_BLOCKS 4
275275#endif
276276
277+ /* When LX_NAND_FLASH_ENABLE_LAZY_SECTOR_RELEASE is defined, sector releases from full blocks
278+ are deferred when free block count exceeds the threshold below (opt-in, default: off).
279+ Requires pages_per_block <= 4095 (bit 12 is reserved for COMPACTION_PENDING flag). */
280+ /* #define LX_NAND_FLASH_ENABLE_LAZY_SECTOR_RELEASE */
281+
282+ #ifdef LX_NAND_FLASH_ENABLE_LAZY_SECTOR_RELEASE
283+ #ifndef LX_NAND_FLASH_SECTOR_RELEASE_LAZY_THRESHOLD
284+ #define LX_NAND_FLASH_SECTOR_RELEASE_LAZY_THRESHOLD 10u
285+ #endif
286+ #endif
287+
277288#ifndef LX_UTILITY_SHORT_SET
278289#define LX_UTILITY_SHORT_SET (address , value ) *((USHORT*)(address)) = (USHORT)(value)
279290#endif
@@ -328,6 +339,11 @@ typedef unsigned long long ULONG64;
328339#define LX_NAND_BLOCK_STATUS_FULL 0x4000u
329340#define LX_NAND_BLOCK_STATUS_NON_SEQUENTIAL 0x2000u
330341#define LX_NAND_BLOCK_STATUS_MAPPING_PRESENT 0x1000u
342+ #ifdef LX_NAND_FLASH_ENABLE_LAZY_SECTOR_RELEASE
343+ /* Repurpose the otherwise-unused MAPPING_PRESENT bit to signal a block whose compaction
344+ has been deferred. Only valid when pages_per_block <= 4095. */
345+ #define LX_NAND_BLOCK_STATUS_COMPACTION_PENDING LX_NAND_BLOCK_STATUS_MAPPING_PRESENT
346+ #endif
331347#define LX_NAND_BLOCK_STATUS_PAGE_NUMBER_MASK 0x0FFFu
332348#define LX_NAND_BLOCK_STATUS_FREE 0xFFFFu
333349#define LX_NAND_BLOCK_STATUS_BAD 0xFF00u
@@ -402,6 +418,12 @@ typedef struct LX_NAND_FLASH_STRUCT
402418 USHORT * lx_nand_flash_block_list ;
403419 ULONG lx_nand_flash_block_list_size ;
404420 ULONG lx_nand_flash_free_block_list_tail ;
421+ #ifdef LX_NAND_FLASH_ENABLE_LAZY_SECTOR_RELEASE
422+ /* Parallel to block_mapping_table: physical block with pending compaction for a group,
423+ or LX_NAND_BLOCK_UNMAPPED when no compaction is pending. */
424+ USHORT * lx_nand_flash_block_compaction_table ;
425+ ULONG lx_nand_flash_block_compaction_table_size ;
426+ #endif
405427 ULONG lx_nand_flash_mapped_block_list_head ;
406428
407429 ULONG lx_nand_flash_metadata_block_number ;
@@ -771,6 +793,9 @@ UINT _lx_nand_flash_metadata_write(LX_NAND_FLASH *nand_flash, UCHAR* main_buf
771793VOID _lx_nand_flash_system_error (LX_NAND_FLASH * nand_flash , UINT error_code , ULONG block , ULONG page );
772794UINT _lx_nand_flash_256byte_ecc_check (UCHAR * page_buffer , UCHAR * ecc_buffer );
773795UINT _lx_nand_flash_256byte_ecc_compute (UCHAR * page_buffer , UCHAR * ecc_buffer );
796+ #ifdef LX_NAND_FLASH_ENABLE_LAZY_SECTOR_RELEASE
797+ UINT _lx_nand_flash_logical_group_compact (LX_NAND_FLASH * nand_flash , ULONG logical_group );
798+ #endif
774799
775800UINT _lx_nor_flash_block_reclaim (LX_NOR_FLASH * nor_flash );
776801UINT _lx_nor_flash_driver_block_erase (LX_NOR_FLASH * nor_flash , ULONG block , ULONG erase_count );
0 commit comments