@@ -137,47 +137,6 @@ static void loadOCCImageDuringIpl(void* occ_bootloader)
137137 gpe_1_length );
138138}
139139
140- static void startOCCFromSRAM (TARGETING ::Target * i_proc )
141- {
142- // executed only for master processor!!!
143- if (master_proc )
144- {
145- pm_pss_init ();
146- }
147-
148- pm_occ_fir_init ();
149- // executed only for master processor!!!
150- if (master_proc )
151- {
152- clear_occ_special_wakeups ();
153- }
154-
155- write_scom (PU_OCB_OCI_OIRR0A_SCOM , 0x218780f800000000 );
156- write_scom (PU_OCB_OCI_OIRR1A_SCOM , 0x0003d03c00000000 );
157- write_scom (PU_OCB_OCI_OIRR0B_SCOM , 0x2181801800000000 );
158- write_scom (PU_OCB_OCI_OIRR1B_SCOM , 0x0003d00c00000000 );
159- write_scom (PU_OCB_OCI_OIRR0C_SCOM , 0x010280ac00000000 );
160- write_scom (PU_OCB_OCI_OIRR1C_SCOM , 0x0001901400000000 );
161-
162- // executed only for master processor!!!
163- if (master_proc )
164- {
165- p9_pm_occ_control (
166- makeStart405Instruction ());
167- }
168-
169- write_scom (OCB_OITR0 , 0xffffffffffffffff );
170- write_scom (OCB_OIEPR0 , 0xffffffffffffffff );
171- }
172-
173- static void p9_pm_occ_control (const uint64_t i_ppc405_jump_to_main_instr )
174- {
175- write_scom (PU_SRAM_SRBV3_SCOM , i_ppc405_jump_to_main_instr );
176- write_scom (PU_JTG_PIB_OJCFG_AND , ~PPC_BIT (JTG_PIB_OJCFG_DBG_HALT_BIT ));
177- write_scom (PU_OCB_PIB_OCR_OR , PPC_BIT (OCB_PIB_OCR_CORE_RESET_BIT ));
178- write_scom (PU_OCB_PIB_OCR_CLEAR , PPC_BIT (OCB_PIB_OCR_CORE_RESET_BIT ));
179- }
180-
181140static void pm_pss_init (void )
182141{
183142 write_scom (
@@ -203,8 +162,8 @@ static void pm_pss_init(void)
203162 | PPC_BIT (2 ));
204163 write_scom (
205164 PU_SPIPSS_P2S_CTRL_REG1 ,
206- read_scom (PU_SPIPSS_P2S_CTRL_REG1 )
207- & ~PPC_BITMASK (1 , 3 )
165+ ( read_scom (PU_SPIPSS_P2S_CTRL_REG1 )
166+ & ~PPC_BITMASK (1 , 3 ))
208167 | PPC_BIT (0 ) | PPC_BIT (10 )
209168 | PPC_BIT (12 ) | PPC_BIT (17 ));
210169 write_scom (
@@ -216,7 +175,117 @@ static void pm_pss_init(void)
216175 write_scom (
217176 PU_SPIPSS_100NS_REG ,
218177 (read_scom (PU_SPIPSS_100NS_REG ) & 0xFFFFFFFF )
219- | (FREQ_PB_MHZ / 40 ) << 32 );
178+ | (uint64_t )(FREQ_PB_MHZ / 40 ) << 32 );
179+ }
180+
181+ static void pm_occ_fir_init (void )
182+ {
183+ uint64_t iv_mask = read_scom (iv_mask_address );
184+
185+ write_scom (iv_proc , iv_fir_address , 0 );
186+ write_scom (iv_proc , iv_action0_address , C405_ECC_UE );
187+ write_scom (
188+ iv_proc ,
189+ iv_action1_address ,
190+ C405_ECC_CE | C405_OCI_MC_CHK
191+ | C405DCU_M_TIMEOUT | GPE0_ERR
192+ | GPE0_OCISLV_ERR | GPE1_ERR
193+ | GPE1_OCISLV_ERR | GPE2_OCISLV_ERR
194+ | GPE3_OCISLV_ERR | JTAGACC_ERR
195+ | OCB_DB_OCI_RDATA_PARITY | OCB_DB_OCI_SLVERR
196+ | OCB_DB_OCI_TIMEOUT | OCB_DB_PIB_DATA_PARITY_ERR
197+ | OCB_IDC0_ERR | OCB_IDC1_ERR
198+ | OCB_IDC2_ERR | OCB_IDC3_ERR
199+ | OCB_PIB_ADDR_PARITY_ERR | OCC_CMPLX_FAULT
200+ | OCC_CMPLX_NOTIFY | SRAM_CE
201+ | SRAM_DATAOUT_PERR | SRAM_OCI_ADDR_PARITY_ERR
202+ | SRAM_OCI_BE_PARITY_ERR | SRAM_OCI_WDATA_PARITY
203+ | SRAM_READ_ERR | SRAM_SPARE_DIRERR0
204+ | SRAM_SPARE_DIRERR1 | SRAM_SPARE_DIRERR2
205+ | SRAM_SPARE_DIRERR3 | SRAM_UE
206+ | SRAM_WRITE_ERR | SRT_FSM_ERR
207+ | STOP_RCV_NOTIFY_PRD );
208+ write_scom (
209+ iv_proc ,
210+ iv_fir_address + MASK_WOR_INCR ,
211+ iv_mask | C405ICU_M_TIMEOUT
212+ | CME_ERR_NOTIFY | EXT_TRAP
213+ | FIR_PARITY_ERR_DUP | FIR_PARITY_ERR
214+ | GPE0_HALTED | GPE0_WD_TIMEOUT
215+ | GPE1_HALTED | GPE1_WD_TIMEOUT
216+ | GPE2_ERR | GPE2_HALTED
217+ | GPE2_WD_TIMEOUT | GPE3_ERR
218+ | GPE3_HALTED | GPE3_WD_TIMEOUT
219+ | OCB_ERR | OCC_FW0
220+ | OCC_FW1 | OCC_HB_NOTIFY
221+ | PPC405_CHIP_RESET | PPC405_CORE_RESET
222+ | PPC405_DBGSTOPACK | PPC405_SYS_RESET
223+ | PPC405_WAIT_STATE | SPARE_59
224+ | SPARE_60 | SPARE_61
225+ | SPARE_ERR_38 );
226+ write_scom (
227+ iv_proc ,
228+ iv_fir_address + MASK_WAND_INCR ,
229+ iv_mask & ~C405_ECC_CE
230+ & ~C405_ECC_UE & ~C405_OCI_MC_CHK
231+ & ~C405DCU_M_TIMEOUT & ~GPE0_ERR
232+ & ~GPE0_OCISLV_ERR & ~GPE1_ERR
233+ & ~GPE1_OCISLV_ERR & ~GPE2_OCISLV_ERR
234+ & ~GPE3_OCISLV_ERR & ~JTAGACC_ERR
235+ & ~OCB_DB_OCI_RDATA_PARITY & ~OCB_DB_OCI_SLVERR
236+ & ~OCB_DB_OCI_TIMEOUT & ~OCB_DB_PIB_DATA_PARITY_ERR
237+ & ~OCB_IDC0_ERR & ~OCB_IDC1_ERR
238+ & ~OCB_IDC2_ERR & ~OCB_IDC3_ERR
239+ & ~OCB_PIB_ADDR_PARITY_ERR & ~OCC_CMPLX_FAULT
240+ & ~OCC_CMPLX_NOTIFY & ~SRAM_CE
241+ & ~SRAM_DATAOUT_PERR & ~SRAM_OCI_ADDR_PARITY_ERR
242+ & ~SRAM_OCI_BE_PARITY_ERR & ~SRAM_OCI_WDATA_PARITY
243+ & ~SRAM_READ_ERR & ~SRAM_SPARE_DIRERR0
244+ & ~SRAM_SPARE_DIRERR1 & ~SRAM_SPARE_DIRERR2
245+ & ~SRAM_SPARE_DIRERR3 & ~SRAM_UE
246+ & ~SRAM_WRITE_ERR & ~SRT_FSM_ERR
247+ & ~STOP_RCV_NOTIFY_PRD );
248+ }
249+
250+ static void startOCCFromSRAM (void )
251+ {
252+ // executed only for master processor!!!
253+ if (MASTER_PROC )
254+ {
255+ pm_pss_init ();
256+ }
257+
258+ pm_occ_fir_init ();
259+ // executed only for master processor!!!
260+ if (MASTER_PROC )
261+ {
262+ clear_occ_special_wakeups ();
263+ }
264+
265+ write_scom (PU_OCB_OCI_OIRR0A_SCOM , 0x218780f800000000 );
266+ write_scom (PU_OCB_OCI_OIRR1A_SCOM , 0x0003d03c00000000 );
267+ write_scom (PU_OCB_OCI_OIRR0B_SCOM , 0x2181801800000000 );
268+ write_scom (PU_OCB_OCI_OIRR1B_SCOM , 0x0003d00c00000000 );
269+ write_scom (PU_OCB_OCI_OIRR0C_SCOM , 0x010280ac00000000 );
270+ write_scom (PU_OCB_OCI_OIRR1C_SCOM , 0x0001901400000000 );
271+
272+ // executed only for master processor!!!
273+ if (MASTER_PROC )
274+ {
275+ p9_pm_occ_control (
276+ makeStart405Instruction ());
277+ }
278+
279+ write_scom (OCB_OITR0 , 0xffffffffffffffff );
280+ write_scom (OCB_OIEPR0 , 0xffffffffffffffff );
281+ }
282+
283+ static void p9_pm_occ_control (const uint64_t i_ppc405_jump_to_main_instr )
284+ {
285+ write_scom (PU_SRAM_SRBV3_SCOM , i_ppc405_jump_to_main_instr );
286+ write_scom (PU_JTG_PIB_OJCFG_AND , ~PPC_BIT (JTG_PIB_OJCFG_DBG_HALT_BIT ));
287+ write_scom (PU_OCB_PIB_OCR_OR , PPC_BIT (OCB_PIB_OCR_CORE_RESET_BIT ));
288+ write_scom (PU_OCB_PIB_OCR_CLEAR , PPC_BIT (OCB_PIB_OCR_CORE_RESET_BIT ));
220289}
221290
222291static void clear_occ_special_wakeups (void )
@@ -343,75 +412,6 @@ static void p9_pm_ocb_indir_access(
343412 }
344413}
345414
346- static void pm_occ_fir_init (void )
347- {
348- iv_mask = read_scom (iv_mask_address );
349-
350- write_scom (iv_proc , iv_fir_address , 0 );
351- write_scom (iv_proc , iv_action0_address , C405_ECC_UE );
352- write_scom (
353- iv_proc ,
354- iv_action1_address ,
355- C405_ECC_CE | C405_OCI_MC_CHK
356- | C405DCU_M_TIMEOUT | GPE0_ERR
357- | GPE0_OCISLV_ERR | GPE1_ERR
358- | GPE1_OCISLV_ERR | GPE2_OCISLV_ERR
359- | GPE3_OCISLV_ERR | JTAGACC_ERR
360- | OCB_DB_OCI_RDATA_PARITY | OCB_DB_OCI_SLVERR
361- | OCB_DB_OCI_TIMEOUT | OCB_DB_PIB_DATA_PARITY_ERR
362- | OCB_IDC0_ERR | OCB_IDC1_ERR
363- | OCB_IDC2_ERR | OCB_IDC3_ERR
364- | OCB_PIB_ADDR_PARITY_ERR | OCC_CMPLX_FAULT
365- | OCC_CMPLX_NOTIFY | SRAM_CE
366- | SRAM_DATAOUT_PERR | SRAM_OCI_ADDR_PARITY_ERR
367- | SRAM_OCI_BE_PARITY_ERR | SRAM_OCI_WDATA_PARITY
368- | SRAM_READ_ERR | SRAM_SPARE_DIRERR0
369- | SRAM_SPARE_DIRERR1 | SRAM_SPARE_DIRERR2
370- | SRAM_SPARE_DIRERR3 | SRAM_UE
371- | SRAM_WRITE_ERR | SRT_FSM_ERR
372- | STOP_RCV_NOTIFY_PRD );
373- write_scom (
374- iv_proc ,
375- iv_fir_address + MASK_WOR_INCR ,
376- iv_mask | C405ICU_M_TIMEOUT
377- | CME_ERR_NOTIFY | EXT_TRAP
378- | FIR_PARITY_ERR_DUP | FIR_PARITY_ERR
379- | GPE0_HALTED | GPE0_WD_TIMEOUT
380- | GPE1_HALTED | GPE1_WD_TIMEOUT
381- | GPE2_ERR | GPE2_HALTED
382- | GPE2_WD_TIMEOUT | GPE3_ERR
383- | GPE3_HALTED | GPE3_WD_TIMEOUT
384- | OCB_ERR | OCC_FW0
385- | OCC_FW1 | OCC_HB_NOTIFY
386- | PPC405_CHIP_RESET | PPC405_CORE_RESET
387- | PPC405_DBGSTOPACK | PPC405_SYS_RESET
388- | PPC405_WAIT_STATE | SPARE_59
389- | SPARE_60 | SPARE_61
390- | SPARE_ERR_38 );
391- write_scom (
392- iv_proc ,
393- iv_fir_address + MASK_WAND_INCR ,
394- iv_mask & ~C405_ECC_CE
395- & ~C405_ECC_UE & ~C405_OCI_MC_CHK
396- & ~C405DCU_M_TIMEOUT & ~GPE0_ERR
397- & ~GPE0_OCISLV_ERR & ~GPE1_ERR
398- & ~GPE1_OCISLV_ERR & ~GPE2_OCISLV_ERR
399- & ~GPE3_OCISLV_ERR & ~JTAGACC_ERR
400- & ~OCB_DB_OCI_RDATA_PARITY & ~OCB_DB_OCI_SLVERR
401- & ~OCB_DB_OCI_TIMEOUT & ~OCB_DB_PIB_DATA_PARITY_ERR
402- & ~OCB_IDC0_ERR & ~OCB_IDC1_ERR
403- & ~OCB_IDC2_ERR & ~OCB_IDC3_ERR
404- & ~OCB_PIB_ADDR_PARITY_ERR & ~OCC_CMPLX_FAULT
405- & ~OCC_CMPLX_NOTIFY & ~SRAM_CE
406- & ~SRAM_DATAOUT_PERR & ~SRAM_OCI_ADDR_PARITY_ERR
407- & ~SRAM_OCI_BE_PARITY_ERR & ~SRAM_OCI_WDATA_PARITY
408- & ~SRAM_READ_ERR & ~SRAM_SPARE_DIRERR0
409- & ~SRAM_SPARE_DIRERR1 & ~SRAM_SPARE_DIRERR2
410- & ~SRAM_SPARE_DIRERR3 & ~SRAM_UE
411- & ~SRAM_WRITE_ERR & ~SRT_FSM_ERR
412- & ~STOP_RCV_NOTIFY_PRD );
413- }
414-
415415static void p9_pm_pba_bar_config (
416416 int bar_index ,
417417 int bar_address )
0 commit comments