commit: http://blackfin.uclinux.org/git/?p=linux-kernel;a=commitdiff;h=b2e2d5fb670a1139717097b5dda866802b60827d branch: http://blackfin.uclinux.org/git/?p=linux-kernel;a=shortlog;h=refs/heads/trunk
Add watchdog as a fault to reset the system. Signed-off-by: Bob Liu <[email protected]> --- .../mach-bf609/include/mach/cdefBF60x_base.h | 10 +++++++++- arch/blackfin/mach-common/ints-priority.c | 11 ++++++++--- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/arch/blackfin/mach-bf609/include/mach/cdefBF60x_base.h b/arch/blackfin/mach-bf609/include/mach/cdefBF60x_base.h index e3aa097..4a1b506 100644 --- a/arch/blackfin/mach-bf609/include/mach/cdefBF60x_base.h +++ b/arch/blackfin/mach-bf609/include/mach/cdefBF60x_base.h @@ -26,6 +26,9 @@ #define bfin_read_SEC_GCTL() bfin_read32(SEC_GCTL) #define bfin_write_SEC_GCTL(val) bfin_write32(SEC_GCTL, val) +#define bfin_read_SEC_FCTL() bfin_read32(SEC_FCTL) +#define bfin_write_SEC_FCTL(val) bfin_write32(SEC_FCTL, val) + #define bfin_read_SEC_SCTL(sid) bfin_read32((SEC_SCTL0 + (sid) * 8)) #define bfin_write_SEC_SCTL(sid, val) bfin_write32((SEC_SCTL0 + (sid) * 8), val) @@ -37,7 +40,12 @@ #define bfin_write_RCU0_CTL(val) bfin_write32(RCU0_CTL, val) /* Watchdog Timer Registers */ - +#define bfin_read_WDOG_CTL() bfin_read16(WDOG_CTL) +#define bfin_write_WDOG_CTL(val) bfin_write16(WDOG_CTL, val) +#define bfin_read_WDOG_CNT() bfin_read32(WDOG_CNT) +#define bfin_write_WDOG_CNT(val) bfin_write32(WDOG_CNT, val) +#define bfin_read_WDOG_STAT() bfin_read32(WDOG_STAT) +#define bfin_write_WDOG_STAT(val) bfin_write32(WDOG_STAT, val) /* RTC Registers */ diff --git a/arch/blackfin/mach-common/ints-priority.c b/arch/blackfin/mach-common/ints-priority.c index 2204da1..e0ae811 100644 --- a/arch/blackfin/mach-common/ints-priority.c +++ b/arch/blackfin/mach-common/ints-priority.c @@ -256,7 +256,10 @@ static void bfin_sec_enable_sci(unsigned int sid) unsigned long flags = hard_local_irq_save(); uint32_t reg_sctl = bfin_read_SEC_SCTL(sid); - reg_sctl |= SEC_SCTL_INT_EN; + if (sid == SIC_SYSIRQ(IRQ_WATCH0)) + reg_sctl |= SEC_SCTL_FAULT_EN; + else + reg_sctl |= SEC_SCTL_INT_EN; bfin_write_SEC_SCTL(sid, reg_sctl); hard_local_irq_restore(flags); @@ -348,7 +351,6 @@ void handle_sec_ssi_fault(uint32_t gstat) void handle_sec_fault(unsigned int irq, struct irq_desc *desc) { - struct irq_chip *chip = irq_desc_get_chip(desc); uint32_t sec_gstat; raw_spin_lock(&desc->lock); @@ -1293,7 +1295,7 @@ int __init init_arch_irq(void) for (irq = BFIN_IRQ(0); irq <= SYS_IRQS; irq++) { if (irq < CORE_IRQS) { irq_set_chip(irq, &bfin_sec_irqchip); - __irq_set_handler(irq, handle_sec_fault, 1, NULL); + __irq_set_handler(irq, handle_sec_fault, 0, NULL); } else if (irq >= BFIN_IRQ(21) && irq <= BFIN_IRQ(26)) { irq_set_chip(irq, &bfin_sec_irqchip); irq_set_chained_handler(irq, bfin_demux_gpio_irq); @@ -1364,6 +1366,9 @@ int __init init_arch_irq(void) bfin_write_SEC_GCTL(SEC_GCTL_RESET); udelay(100); + bfin_write_SEC_FCTL(SEC_FCTL_EN | SEC_FCTL_SYSRST_EN | SEC_FCTL_FLTIN_EN); + bfin_sec_enable_sci(SIC_SYSIRQ(IRQ_WATCH0)); + bfin_sec_enable_ssi(SIC_SYSIRQ(IRQ_WATCH0)); bfin_write_SEC_SCI(0, SEC_CCTL, SEC_CCTL_RESET); udelay(100); bfin_write_SEC_GCTL(SEC_GCTL_EN);
_______________________________________________ Linux-kernel-commits mailing list [email protected] https://blackfin.uclinux.org/mailman/listinfo/linux-kernel-commits
