Skip to content
Snippets Groups Projects
Commit 92daa4d2 authored by Tom Rini's avatar Tom Rini
Browse files

Merge branch 'microblaze' of git://www.denx.de/git/u-boot-microblaze

parents 19fe4b3e 0f21f98d
No related branches found
No related tags found
No related merge requests found
...@@ -31,4 +31,8 @@ extern char __text_start[]; ...@@ -31,4 +31,8 @@ extern char __text_start[];
/* Microblaze board initialization function */ /* Microblaze board initialization function */
void board_init(void); void board_init(void);
/* Watchdog functions */
extern int hw_watchdog_init(void);
extern void hw_watchdog_disable(void);
#endif /* __ASM_MICROBLAZE_PROCESSOR_H */ #endif /* __ASM_MICROBLAZE_PROCESSOR_H */
...@@ -61,6 +61,9 @@ init_fnc_t *init_sequence[] = { ...@@ -61,6 +61,9 @@ init_fnc_t *init_sequence[] = {
serial_init, serial_init,
console_init_f, console_init_f,
interrupts_init, interrupts_init,
#ifdef CONFIG_XILINX_TB_WATCHDOG
hw_watchdog_init,
#endif
timer_init, timer_init,
NULL, NULL,
}; };
......
...@@ -38,10 +38,15 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[]) ...@@ -38,10 +38,15 @@ int do_reset(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
*((unsigned long *)(CONFIG_SYS_GPIO_0_ADDR)) = *((unsigned long *)(CONFIG_SYS_GPIO_0_ADDR)) =
++(*((unsigned long *)(CONFIG_SYS_GPIO_0_ADDR))); ++(*((unsigned long *)(CONFIG_SYS_GPIO_0_ADDR)));
#endif #endif
#ifdef CONFIG_SYS_RESET_ADDRESS
puts ("Reseting board\n"); #ifdef CONFIG_XILINX_TB_WATCHDOG
asm ("bra r0"); hw_watchdog_disable();
#endif #endif
puts ("Reseting board\n");
__asm__ __volatile__ (" mts rmsr, r0;" \
"bra r0");
return 0; return 0;
} }
......
...@@ -77,3 +77,7 @@ ...@@ -77,3 +77,7 @@
#define XILINX_LLTEMAC_SDMA_CTRL_BASEADDR 0x42000180 #define XILINX_LLTEMAC_SDMA_CTRL_BASEADDR 0x42000180
#define XILINX_LLTEMAC_BASEADDR1 0x44200000 #define XILINX_LLTEMAC_BASEADDR1 0x44200000
#define XILINX_LLTEMAC_FIFO_BASEADDR1 0x42100000 #define XILINX_LLTEMAC_FIFO_BASEADDR1 0x42100000
/* Watchdog IP is wxi_timebase_wdt_0 */
#define XILINX_WATCHDOG_BASEADDR 0x50000000
#define XILINX_WATCHDOG_IRQ 1
...@@ -27,3 +27,6 @@ CONFIG_IMX_WATCHDOG ...@@ -27,3 +27,6 @@ CONFIG_IMX_WATCHDOG
Available for i.mx31/35/5x/6x to service the watchdog. This is not Available for i.mx31/35/5x/6x to service the watchdog. This is not
automatically set because some boards (vision2) still need to define automatically set because some boards (vision2) still need to define
their own hw_watchdog_reset routine. their own hw_watchdog_reset routine.
CONFIG_XILINX_TB_WATCHDOG
Available for Xilinx Axi platforms to service timebase watchdog timer.
...@@ -32,6 +32,7 @@ COBJS-y += imx_watchdog.o ...@@ -32,6 +32,7 @@ COBJS-y += imx_watchdog.o
endif endif
COBJS-$(CONFIG_TNETV107X_WATCHDOG) += tnetv107x_wdt.o COBJS-$(CONFIG_TNETV107X_WATCHDOG) += tnetv107x_wdt.o
COBJS-$(CONFIG_S5P) += s5p_wdt.o COBJS-$(CONFIG_S5P) += s5p_wdt.o
COBJS-$(CONFIG_XILINX_TB_WATCHDOG) += xilinx_tb_wdt.o
COBJS := $(COBJS-y) COBJS := $(COBJS-y)
SRCS := $(COBJS:.o=.c) SRCS := $(COBJS:.o=.c)
......
/*
* Copyright (c) 2011-2013 Xilinx Inc.
*
* See file CREDITS for list of people who contributed to this
* project.
*
* This program is free software; you can redistribute it and/or
* modify it under the terms of the GNU General Public License as
* published by the Free Software Foundation; either version 2 of
* the License, or (at your option) any later version.
*
* This program is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston,
* MA 02111-1307 USA
*/
#include <common.h>
#include <asm/io.h>
#include <asm/microblaze_intc.h>
#include <asm/processor.h>
#include <watchdog.h>
#define XWT_CSR0_WRS_MASK 0x00000008 /* Reset status Mask */
#define XWT_CSR0_WDS_MASK 0x00000004 /* Timer state Mask */
#define XWT_CSR0_EWDT1_MASK 0x00000002 /* Enable bit 1 Mask*/
#define XWT_CSRX_EWDT2_MASK 0x00000001 /* Enable bit 2 Mask */
struct watchdog_regs {
u32 twcsr0; /* 0x0 */
u32 twcsr1; /* 0x4 */
u32 tbr; /* 0x8 */
};
static struct watchdog_regs *watchdog_base =
(struct watchdog_regs *)CONFIG_WATCHDOG_BASEADDR;
void hw_watchdog_reset(void)
{
u32 reg;
/* Read the current contents of TCSR0 */
reg = readl(&watchdog_base->twcsr0);
/* Clear the watchdog WDS bit */
if (reg & (XWT_CSR0_EWDT1_MASK | XWT_CSRX_EWDT2_MASK))
writel(reg | XWT_CSR0_WDS_MASK, &watchdog_base->twcsr0);
}
void hw_watchdog_disable(void)
{
u32 reg;
/* Read the current contents of TCSR0 */
reg = readl(&watchdog_base->twcsr0);
writel(reg & ~XWT_CSR0_EWDT1_MASK, &watchdog_base->twcsr0);
writel(~XWT_CSRX_EWDT2_MASK, &watchdog_base->twcsr1);
puts("Watchdog disabled!\n");
}
static void hw_watchdog_isr(void *arg)
{
hw_watchdog_reset();
}
int hw_watchdog_init(void)
{
int ret;
writel((XWT_CSR0_WRS_MASK | XWT_CSR0_WDS_MASK | XWT_CSR0_EWDT1_MASK),
&watchdog_base->twcsr0);
writel(XWT_CSRX_EWDT2_MASK, &watchdog_base->twcsr1);
ret = install_interrupt_handler(CONFIG_WATCHDOG_IRQ,
hw_watchdog_isr, NULL);
if (ret)
return 1;
return 0;
}
...@@ -120,6 +120,14 @@ ...@@ -120,6 +120,14 @@
# define CONFIG_SYS_TIMER_0_IRQ XILINX_TIMER_IRQ # define CONFIG_SYS_TIMER_0_IRQ XILINX_TIMER_IRQ
#endif #endif
/* watchdog */
#if defined(XILINX_WATCHDOG_BASEADDR) && defined(XILINX_WATCHDOG_IRQ)
# define CONFIG_WATCHDOG_BASEADDR XILINX_WATCHDOG_BASEADDR
# define CONFIG_WATCHDOG_IRQ XILINX_WATCHDOG_IRQ
# define CONFIG_HW_WATCHDOG
# define CONFIG_XILINX_TB_WATCHDOG
#endif
/* /*
* memory layout - Example * memory layout - Example
* CONFIG_SYS_TEXT_BASE = 0x1200_0000; defined in config.mk * CONFIG_SYS_TEXT_BASE = 0x1200_0000; defined in config.mk
...@@ -414,10 +422,17 @@ ...@@ -414,10 +422,17 @@
"nor0=flash-0\0"\ "nor0=flash-0\0"\
"mtdparts=mtdparts=flash-0:"\ "mtdparts=mtdparts=flash-0:"\
"256k(u-boot),256k(env),3m(kernel),"\ "256k(u-boot),256k(env),3m(kernel),"\
"1m(romfs),1m(cramfs),-(jffs2)\0" "1m(romfs),1m(cramfs),-(jffs2)\0"\
"nc=setenv stdout nc;"\
"setenv stdin nc\0" \
"serial=setenv stdout serial;"\
"setenv stdin serial\0"
#define CONFIG_CMDLINE_EDITING #define CONFIG_CMDLINE_EDITING
#define CONFIG_NETCONSOLE
#define CONFIG_SYS_CONSOLE_IS_IN_ENV
/* Use the HUSH parser */ /* Use the HUSH parser */
#define CONFIG_SYS_HUSH_PARSER #define CONFIG_SYS_HUSH_PARSER
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment