File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change @@ -353,6 +353,37 @@ enum ec_image system_get_image_copy(void)
353353 return MCHP_VBAT_RAM (MCHP_IMAGETYPE_IDX );
354354}
355355
356+ /**
357+ * lfw wdt
358+ * this function is for RTC power fail are not stable
359+ * when the RTC power domain comes up later than the EC ALW power domain
360+ * will cause PLL lock never stable also make EC stuck in while
361+ * add wdt to reset EC lfw again
362+ * timeout default follow CONFIG_WATCHDOG_PERIOD_MS(1.6s)
363+ */
364+ void lfw_wdt (void )
365+ {
366+ /* Clear WDT PCR sleep enable */
367+ MCHP_PCR_SLP_DIS_DEV (MCHP_PCR_WDT );
368+
369+ /* Set timeout. It takes 1007us to decrement WDG_CNT by 1. */
370+ MCHP_WDG_LOAD = CONFIG_WATCHDOG_PERIOD_MS * 1000 / 1007 ;
371+
372+ /* start watchdog */
373+ MCHP_WDG_CTL |= 1 ;
374+
375+ /* Reload watchdog */
376+ MCHP_WDG_KICK = 1 ;
377+ }
378+
379+ void lfw_wdt_stop (void )
380+ {
381+ /* Stop watchdog */
382+ MCHP_WDG_CTL &= ~1 ;
383+
384+ /* Reload watchdog */
385+ MCHP_WDG_KICK = 1 ;
386+ }
356387
357388/*
358389 * lfw_main is entered by MEC BootROM or EC_RO/RW calling it directly.
@@ -404,7 +435,9 @@ void lfw_main(void)
404435 trace0 (0 , LFW , 0 , "LFW first trace" );
405436
406437 timer_init ();
438+ lfw_wdt ();
407439 clock_init ();
440+ lfw_wdt_stop ();
408441 cpu_init ();
409442 dma_init ();
410443 uart_init ();
You can’t perform that action at this time.
0 commit comments