1 /* 2 * Processor reset using WDT. 3 * 4 * Copyright (C) 2012 Dmitry Bondar <bond@inmys.ru> 5 * Copyright (C) 2007 Sergey Kubushyn <ksi@koi8.net> 6 * 7 * SPDX-License-Identifier: GPL-2.0+ 8 */ 9 10 #include <common.h> 11 #include <asm/io.h> 12 #include <asm/arch/timer_defs.h> 13 #include <asm/arch/hardware.h> 14 15 void reset_cpu(unsigned long a) 16 { 17 struct davinci_timer *const wdttimer = 18 (struct davinci_timer *)DAVINCI_WDOG_BASE; 19 writel(0x08, &wdttimer->tgcr); 20 writel(readl(&wdttimer->tgcr) | 0x03, &wdttimer->tgcr); 21 writel(0, &wdttimer->tim12); 22 writel(0, &wdttimer->tim34); 23 writel(0, &wdttimer->prd12); 24 writel(0, &wdttimer->prd34); 25 writel(readl(&wdttimer->tcr) | 0x40, &wdttimer->tcr); 26 writel(readl(&wdttimer->wdtcr) | 0x4000, &wdttimer->wdtcr); 27 writel(0xa5c64000, &wdttimer->wdtcr); 28 writel(0xda7e4000, &wdttimer->wdtcr); 29 writel(0x4000, &wdttimer->wdtcr); 30 while (1) 31 /*nothing*/; 32 } 33