Skip to content

Commit b006627

Browse files
author
dongyongtao
committed
application: operate eclic shadow register only when it exists(shadow number is greater than 0)
Signed-off-by: dongyongtao <dongyongtao@nucleisys.com>
1 parent b9ccda6 commit b006627

3 files changed

Lines changed: 24 additions & 16 deletions

File tree

application/baremetal/demo_eclic/demo_eclic.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -114,11 +114,13 @@ int main(int argc, char** argv)
114114
uint32_t nlbits = ECLIC_GetCfgNlbits();
115115
printf("ECLIC nlbits configuration: %u\r\n", nlbits);
116116
#if __ECLIC_VER == 2
117-
ECLIC_SetShadowLevel(0, timer_intlevel);
118117
uint32_t shadow_num = ECLIC_GetInfoShadowNum();
119-
printf("ECLIC Shadow Register Groups: %u\r\n", shadow_num);
120-
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg();
121-
printf("Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
118+
if (shadow_num > 0) {
119+
ECLIC_SetShadowLevel(0, timer_intlevel);
120+
printf("ECLIC Shadow Register Groups: %u\r\n", shadow_num);
121+
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg();
122+
printf("Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
123+
}
122124
#endif
123125

124126
// initialize software interrupt as vector interrupt

application/baremetal/demo_eclic_stress/main.c

Lines changed: 12 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -927,11 +927,13 @@ static void supervisor_mode_entry_point(void)
927927
* The first parameter refers to the shadow register index (SHAD1_CFG, SHAD2_CFG, etc.)
928928
* The second parameter sets the interrupt level threshold for shadow register group
929929
*/
930-
ECLIC_SetShadowLevel_S(0, 3);
931930
uint32_t shadow_num = ECLIC_GetInfoShadowNum();
932-
printf("[S] ECLIC Shadow Register Groups: %u\r\n", shadow_num);
933-
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg_S();
934-
printf("[S] Supervisor Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
931+
if (shadow_num > 0) {
932+
ECLIC_SetShadowLevel_S(0, 3);
933+
printf("[S] ECLIC Shadow Register Groups: %u\r\n", shadow_num);
934+
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg_S();
935+
printf("[S] Supervisor Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
936+
}
935937
#endif
936938

937939
#if defined(__SSTC_PRESENT) && (__SSTC_PRESENT == 1)
@@ -1012,11 +1014,13 @@ int initialize_mmode_demo(void)
10121014
* The first parameter refers to the shadow register index (SHAD1_CFG, SHAD2_CFG, etc.)
10131015
* The second parameter sets the interrupt level threshold for shadow register group
10141016
*/
1015-
ECLIC_SetShadowLevel(0, 2);
10161017
uint32_t shadow_num = ECLIC_GetInfoShadowNum();
1017-
printf("[M] ECLIC Shadow Register Groups: %u\r\n", shadow_num);
1018-
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg();
1019-
printf("[M] Machine Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
1018+
if (shadow_num > 0) {
1019+
ECLIC_SetShadowLevel(0, 2);
1020+
printf("[M] ECLIC Shadow Register Groups: %u\r\n", shadow_num);
1021+
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg();
1022+
printf("[M] Machine Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
1023+
}
10201024
#endif
10211025

10221026
// Initialize and start M-Mode timer - moved to end of main function

application/baremetal/demo_smode_eclic/demo_smode_eclic.c

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -136,11 +136,13 @@ static void supervisor_mode_entry_point(void)
136136

137137
printf("ECLIC nlbits configuration: %u\r\n", nlbits);
138138
#if __ECLIC_VER == 2
139-
ECLIC_SetShadowLevel_S(0, timer_intlevel);
140139
uint32_t shadow_num = ECLIC_GetInfoShadowNum();
141-
printf("ECLIC Shadow Register Groups: %u\r\n", shadow_num);
142-
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg_S();
143-
printf("Supervisor Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
140+
if (shadow_num > 0) {
141+
ECLIC_SetShadowLevel_S(0, timer_intlevel);
142+
printf("ECLIC Shadow Register Groups: %u\r\n", shadow_num);
143+
uint64_t shadow_reg_val = ECLIC_GetShadowLevelReg_S();
144+
printf("Supervisor Shadow Level Register: 0x%08x%08x\r\n", (uint32_t)(shadow_reg_val >> 32), (uint32_t)shadow_reg_val);
145+
}
144146
#endif
145147

146148
// initialize software interrupt as vector interrupt

0 commit comments

Comments
 (0)