81
81
82
82
#define RESET_WAIT_USEC 100
83
83
84
+ /* PMP openall flag */
85
+
86
+ #define PMP_NAPOT_RWX (PMPCFG_A_NAPOT | PMPCFG_RWX_MASK)
87
+
84
88
/****************************************************************************
85
89
* Private Variables
86
90
****************************************************************************/
@@ -163,13 +167,14 @@ bool k230_hart_is_big(void)
163
167
164
168
void k230_hart_big_stop (void )
165
169
{
166
- if (k230_hart_is_big ()) return ;
167
-
168
- /* 0x10001 set RESET */
169
-
170
- putreg32 (RESET_RQST_BIT | RESET_RQST_ENW , K230_CPU1_RESET );
171
- up_udelay (RESET_WAIT_USEC );
172
- sinfo ("reg: %" PRIx32 "\n" , getreg32 (K230_CPU1_RESET ));
170
+ if (!k230_hart_is_big ())
171
+ {
172
+ /* 0x10001 set RESET */
173
+
174
+ putreg32 (RESET_RQST_BIT | RESET_RQST_ENW , K230_CPU1_RESET );
175
+ up_udelay (RESET_WAIT_USEC );
176
+ sinfo ("reg: %" PRIx32 "\n" , getreg32 (K230_CPU1_RESET ));
177
+ }
173
178
}
174
179
175
180
/****************************************************************************
@@ -179,27 +184,28 @@ void k230_hart_big_stop(void)
179
184
180
185
void k230_hart_big_boot (uintptr_t addr )
181
186
{
182
- if (k230_hart_is_big ()) return ;
187
+ if (!k230_hart_is_big () && addr != NULL )
188
+ {
189
+ /* learned from U-Boot baremetal and RTT sysctl_reset_cpu */
183
190
184
- /* learned from U-Boot baremetal and RTT sysctl_reset_cpu */
191
+ putreg32 (addr , K230_CPU1_BOOTA );
192
+ sinfo ("addr=%" PRIxPTR "\n" , addr );
185
193
186
- if (addr ) putreg32 (addr , K230_CPU1_BOOTA );
187
- sinfo ("addr=%" PRIxPTR "\n" , addr );
194
+ /* 0x10001000 clear DONE bit */
188
195
189
- /* 0x10001000 clear DONE bit */
196
+ putreg32 (RESET_DONE_BIT | RESET_DONE_ENW , K230_CPU1_RESET );
197
+ up_udelay (RESET_WAIT_USEC );
190
198
191
- putreg32 (RESET_DONE_BIT | RESET_DONE_ENW , K230_CPU1_RESET );
192
- up_udelay (RESET_WAIT_USEC );
199
+ /* 0x10001 set RQST bit */
193
200
194
- /* 0x10001 set RQST bit */
201
+ putreg32 (RESET_RQST_BIT | RESET_RQST_ENW , K230_CPU1_RESET );
202
+ up_udelay (RESET_WAIT_USEC );
195
203
196
- putreg32 (RESET_RQST_BIT | RESET_RQST_ENW , K230_CPU1_RESET );
197
- up_udelay (RESET_WAIT_USEC );
204
+ /* 0x10000 clear RQST bit */
198
205
199
- /* 0x10000 clear RQST bit */
200
-
201
- putreg32 (RESET_RQST_ENW , K230_CPU1_RESET );
202
- up_udelay (RESET_WAIT_USEC );
206
+ putreg32 (RESET_RQST_ENW , K230_CPU1_RESET );
207
+ up_udelay (RESET_WAIT_USEC );
208
+ }
203
209
}
204
210
205
211
#endif /* !defined(CONFIG_BUILD_KERNEL) || defined(CONFIG_NUTTSBI) */
@@ -217,5 +223,9 @@ void sbi_late_initialize(void)
217
223
218
224
putreg32 (1 , K230_PLIC_CTRL );
219
225
k230_hart_init ();
226
+
227
+ /* Open everything for PMP */
228
+
229
+ DEBUGASSERT (riscv_append_pmp_region (PMP_NAPOT_RWX , 0 , 0 ) == 0 );
220
230
}
221
231
#endif
0 commit comments