/*
 * 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_mem_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();
}
