From mboxrd@z Thu Jan 1 00:00:00 1970 From: Heiko Schocher Date: Wed, 26 Aug 2015 11:29:32 +0200 Subject: [U-Boot] Periodic task In-Reply-To: References: <55DD446F.8010808@denx.de> <55DD6546.7030808@denx.de> Message-ID: <55DD86FC.8050703@denx.de> List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hello Ran, Am 26.08.2015 um 10:57 schrieb Ran Shalit: > On Wed, Aug 26, 2015 at 10:05 AM, Heiko Schocher wrote: >> Hello Ran, >> >> >> Am 26.08.2015 um 08:09 schrieb Ran Shalit: >>> >>> On Wed, Aug 26, 2015 at 7:45 AM, Heiko Schocher wrote: >>>> >>>> Hello Ran, >>>> >>>> Am 25.08.2015 um 22:03 schrieb Ran Shalit: >>>>> >>>>> >>>>> Hello, >>>>> >>>>> I need to do some periodic very simple task during u-boot prompt >>>>> (while u-boot wais for commands). The task is very simple, just >>>>> writing into a watchdog refresh register. >>>>> But it seems that it's very difficult to "hack" u-boot with such >>>>> periodic >>>>> task. >>>>> I see that main loop is waiting in loop for characters in a call to >>>>> getc, which is a blocking command. If it was non-blocking, it might >>>>> have help me. I'm not sure if there is a way to replace the getc with >>>>> a non-blocking call. >>>>> >>>>> Does anyone have any idea if there is some simple way to do periodic >>>>> task in u-boot ? >>>> >>>> >>>> >>>> As you want to trigger a watchdog, have a look at >>>> u-boot:/drivers/watchdog >>>> and grep the U-Boot code for >>>> CONFIG_WATCHDOG >>>> CONFIG_HW_WATCHDOG >>>> >>>> bye, >>>> Heiko >>>> -- >>> >>> >>> >>> Hi Heiko, >>> >>> That's a great suggestion. >>> I can understand from this, that there is timer interrupt in the >>> background for the watchdog refresh activity. >> >> >> I do not know anything about your hw ... but timer interrupt is not >> necessary. >> >> WATCHDOG_RESET is called from the U-Boot code .. >> see definition in include/watchdog.h >> >> >> bye, >> Heiko >> -- > > > Hi Heiko, > > I am using PPC mpc8349 freescale. > In the arch/powerpc/lib/board.c file it does the following: > .... > for (;;) { > WATCHDOG_RESET(); > main_loop(); > } > > There is something in the concept of u-boot flow that I don't uunderstand. > How is it that main_loop will perdiocally return to WATCHDOG_RESET if > it waits for keyboard activity with getc() blocking function. Look into the serial driver: drivers/serial/ns16550.c NS16550_getc() triggers periodically the watchdog ... bye, Heiko -- DENX Software Engineering GmbH, Managing Director: Wolfgang Denk HRB 165235 Munich, Office: Kirchenstr.5, D-82194 Groebenzell, Germany