/*
 *  INCA-IP Watchdog timer management code.
 *
 *  Copyright (c) 2003	Wolfgang Denk <wd@denx.de>
 *
 * 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 <config.h>
#include <asm/regdef.h>


#define WD_BASE            0xb8000000
#define WD_CON0(value)     0x0020(value)
#define WD_CON1(value)     0x0024(value)
#define WD_DISABLE         0x00000008
#define WD_ENABLE          0x00000000
#define WD_WRITE_PW        0xFFFC00F8
#define WD_WRITE_ENDINIT   0xFFFC00F3
#define WD_WRITE_INIT      0xFFFC00F2


	.globl	disable_incaip_wdt
disable_incaip_wdt:
	li	t0, WD_BASE

	/* Calculate password.
	 */
	lw	t2, WD_CON1(t0)
	and	t2, 0xC

	lw	t3, WD_CON0(t0)
	and	t3, 0xFFFFFF01

	or	t3, t2
	or	t3, 0xF0

	sw	t3, WD_CON0(t0)		/* write password */

	/* Clear ENDINIT.
	 */
	li	t1, WD_WRITE_INIT
	sw	t1, WD_CON0(t0)


	li	t1, WD_DISABLE
	sw	t1, WD_CON1(t0)		/* disable watchdog */
	li	t1, WD_WRITE_PW
	sw	t1, WD_CON0(t0)		/* write password */
	li	t1, WD_WRITE_ENDINIT
	sw	t1, WD_CON0(t0)		/* end command */

	jr	ra
	nop
