1 /* 2 * Copyright (c) 2024 Renesas Electronics Corporation 3 * 4 * SPDX-License-Identifier: Apache-2.0 5 */ 6 7 #ifndef ZEPHYR_DRIVERS_FLASH_RA_HP_H_ 8 #define ZEPHYR_DRIVERS_FLASH_RA_HP_H_ 9 10 #include <zephyr/drivers/flash.h> 11 #include <instances/r_flash_hp.h> 12 #include <api/r_flash_api.h> 13 #include <zephyr/drivers/flash/ra_flash_api_extensions.h> 14 15 #define CHECK_EQ(val1, val2) ((val1) == (val2) ? 1 : 0) 16 #define GET_SIZE(COND, value, default_value) ((COND) ? (value) : (default_value)) 17 18 #define FLASH_HP_BANK2_OFFSET \ 19 (BSP_FEATURE_FLASH_HP_CF_DUAL_BANK_START - BSP_FEATURE_FLASH_CODE_FLASH_START) 20 21 #define FLASH_HP_CF_BLOCK_8KB_SIZE BSP_FEATURE_FLASH_HP_CF_REGION0_BLOCK_SIZE 22 #define FLASH_HP_CF_BLOCK_32KB_SIZE BSP_FEATURE_FLASH_HP_CF_REGION1_BLOCK_SIZE 23 #define FLASH_HP_DF_BLOCK_SIZE BSP_FEATURE_FLASH_HP_DF_BLOCK_SIZE 24 #define FLASH_HP_DF_START BSP_FEATURE_FLASH_DATA_FLASH_START 25 26 #define FLASH_HP_CF_BLOCK_8KB_LOW_START (0) 27 #define FLASH_HP_CF_BLOCK_8KB_LOW_END (7) 28 #define FLASH_HP_CF_BLOCK_8KB_HIGH_START (70) 29 #define FLASH_HP_CF_BLOCK_8KB_HIGH_END (77) 30 31 #define FLASH_HP_CF_BLOCK_32KB_LINEAR_START (8) 32 #define FLASH_HP_CF_BLOCK_32KB_LINEAR_END (DT_PROP(DT_NODELABEL(flash), block_32kb_linear_end)) 33 34 #define FLASH_HP_DF_BLOCK_END (DT_REG_SIZE(DT_NODELABEL(flash1)) / FLASH_HP_DF_BLOCK_SIZE) 35 36 #if defined(CONFIG_DUAL_BANK_MODE) 37 #define FLASH_HP_CF_NUM_BLOCK_RESERVED (DT_PROP(DT_NODELABEL(flash), reserved_area_num)) 38 #define FLASH_HP_CF_BLOCK_32KB_DUAL_LOW_START (8) 39 #define FLASH_HP_CF_BLOCK_32KB_DUAL_HIGH_START (78) 40 41 #define FLASH_HP_CF_BLOCK_32KB_DUAL_LOW_END (DT_PROP(DT_NODELABEL(flash), block_32kb_dual_low_end)) 42 #define FLASH_HP_CF_BLOCK_32KB_DUAL_HIGH_END \ 43 (DT_PROP(DT_NODELABEL(flash), block_32kb_dual_high_end)) 44 45 #define FLASH_HP_CF_DUAL_HIGH_START_ADDRESS BSP_FEATURE_FLASH_HP_CF_DUAL_BANK_START 46 47 #define FLASH_HP_CF_DUAL_LOW_END_ADDRESS \ 48 (DT_REG_SIZE(DT_NODELABEL(flash0)) - \ 49 ((FLASH_HP_CF_BLOCK_32KB_LINEAR_END - FLASH_HP_CF_BLOCK_32KB_DUAL_LOW_END) * \ 50 FLASH_HP_CF_BLOCK_32KB_SIZE)) 51 52 #define FLASH_HP_CF_DUAL_HIGH_END_ADDRESS \ 53 (DT_REG_SIZE(DT_NODELABEL(flash0)) + \ 54 (FLASH_HP_CF_NUM_BLOCK_RESERVED * FLASH_HP_CF_BLOCK_32KB_SIZE)) 55 #endif 56 57 #if defined(CONFIG_FLASH_EX_OP_ENABLED) 58 #define FLASH_HP_FCU_CONFIG_SET_BPS (0x1300A1C0U) 59 #define FLASH_HP_FCU_CONFIG_SET_BPS_SEC (0x0300A240U) 60 #define FLASH_HP_FCU_CONFIG_SET_BPS_SEL (0x0300A2C0U) 61 62 #define FLASH_HP_FCU_CONFIG_SET_PBPS (0x1300A1E0U) 63 #define FLASH_HP_FCU_CONFIG_SET_PBPS_SEC (0x0300A260U) 64 #endif /* CONFIG_FLASH_EX_OP_ENABLED */ 65 66 /* Zero based offset into g_configuration_area_data[] for BPS */ 67 #define FLASH_HP_FCU_CONFIG_SET_BPS_OFFSET (0U) 68 69 enum flash_region { 70 CODE_FLASH, 71 DATA_FLASH, 72 }; 73 74 typedef void (*irq_config_func_t)(const struct device *dev); 75 76 struct flash_hp_ra_controller { 77 struct st_flash_hp_instance_ctrl flash_ctrl; 78 struct k_sem ctrl_sem; 79 struct st_flash_cfg fsp_config; 80 }; 81 82 struct flash_hp_ra_controller_config { 83 irq_config_func_t irq_config; 84 }; 85 86 struct flash_hp_ra_data { 87 struct flash_hp_ra_controller *controller; 88 enum flash_region FlashRegion; 89 uint32_t area_address; 90 uint32_t area_size; 91 }; 92 93 struct flash_hp_ra_config { 94 struct flash_parameters flash_ra_parameters; 95 }; 96 97 struct event_flash { 98 volatile bool erase_complete; 99 volatile bool write_complete; 100 }; 101 102 #if defined(CONFIG_FLASH_RA_WRITE_PROTECT) 103 int flash_ra_ex_op_write_protect(const struct device *dev, const uintptr_t in, void *out); 104 #endif /*CONFIG_FLASH_RA_WRITE_PROTECT*/ 105 106 #endif /* ZEPHYR_DRIVERS_FLASH_RA_HP_H_ */ 107