/*
 * linux/arch/mips/tx4938/common/setup.c
 *
 * common tx4938 setup routines
 *
 * 2003-2005 (c) MontaVista Software, Inc. This file is licensed under the
 * terms of the GNU General Public License version 2. This program is
 * licensed "as is" without any warranty of any kind, whether express
 * or implied.
 *
 * Support for TX4938 in 2.6 - Manish Lachwani (mlachwani@mvista.com)
 */

#include <linux/errno.h>
#include <linux/init.h>
#include <linux/kernel_stat.h>
#include <linux/module.h>
#include <linux/signal.h>
#include <linux/sched.h>
#include <linux/types.h>
#include <linux/interrupt.h>
#include <linux/ioport.h>
#include <linux/timex.h>
#include <linux/slab.h>
#include <linux/random.h>
#include <linux/irq.h>
#include <asm/bitops.h>
#include <asm/bootinfo.h>
#include <asm/io.h>
#include <asm/irq.h>
#include <asm/mipsregs.h>
#include <asm/system.h>
#include <asm/time.h>
#include <asm/time.h>
#include <asm/tx4938/rbtx4938.h>

extern void toshiba_rbtx4938_setup(void);
extern void rbtx4938_time_init(void);

void __init tx4938_setup(void);
void __init tx4938_time_init(void);
void __init tx4938_timer_setup(struct irqaction *irq);
void dump_cp0(char *key);

void (*__wbflush) (void);

static void
tx4938_write_buffer_flush(void)
{
	mmiowb();

	__asm__ __volatile__(
		".set	push\n\t"
		".set	noreorder\n\t"
		"lw	$0,%0\n\t"
		"nop\n\t"
		".set	pop"
		: /* no output */
		: "m" (*(int *)KSEG1)
		: "memory");
}

void __init
plat_setup(void)
{
	board_time_init = tx4938_time_init;
	board_timer_setup = tx4938_timer_setup;
	__wbflush = tx4938_write_buffer_flush;
	toshiba_rbtx4938_setup();
}

void __init
tx4938_time_init(void)
{
	rbtx4938_time_init();
}

void __init
tx4938_timer_setup(struct irqaction *irq)
{
	u32 count;
	u32 c1;
	u32 c2;

	setup_irq(TX4938_IRQ_CPU_TIMER, irq);

	c1 = read_c0_count();
	count = c1 + (mips_hpt_frequency / HZ);
	write_c0_compare(count);
	c2 = read_c0_count();
}
