diff options
Diffstat (limited to 'package/uboot-lantiq/files/cpu/mips/danube')
| -rw-r--r-- | package/uboot-lantiq/files/cpu/mips/danube/Makefile | 46 | ||||
| -rw-r--r-- | package/uboot-lantiq/files/cpu/mips/danube/clock.c | 65 | ||||
| -rw-r--r-- | package/uboot-lantiq/files/cpu/mips/danube/ifx_cache.S | 60 | 
3 files changed, 171 insertions, 0 deletions
| diff --git a/package/uboot-lantiq/files/cpu/mips/danube/Makefile b/package/uboot-lantiq/files/cpu/mips/danube/Makefile new file mode 100644 index 000000000..c48d02eaa --- /dev/null +++ b/package/uboot-lantiq/files/cpu/mips/danube/Makefile @@ -0,0 +1,46 @@ +######################################################################### +# +# (C) Copyright 2000-2006 +# Wolfgang Denk, DENX Software Engineering, 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 $(TOPDIR)/config.mk + +LIB	= $(obj)lib$(SOC).a + +COBJS	= clock.o + +SRCS	:= $(SOBJS:.o=.S) $(COBJS:.o=.c) +OBJS	:= $(addprefix $(obj),$(SOBJS) $(COBJS)) + +all:	$(obj).depend $(LIB) + +$(LIB):	$(OBJS) +	$(AR) $(ARFLAGS) $@ $(OBJS) + +######################################################################### + +# defines $(obj).depend target +include $(SRCTREE)/rules.mk + +sinclude $(obj).depend + +######################################################################### diff --git a/package/uboot-lantiq/files/cpu/mips/danube/clock.c b/package/uboot-lantiq/files/cpu/mips/danube/clock.c new file mode 100644 index 000000000..4219f8f92 --- /dev/null +++ b/package/uboot-lantiq/files/cpu/mips/danube/clock.c @@ -0,0 +1,65 @@ +/* + * (C) Copyright 2003 + * Wolfgang Denk, DENX Software Engineering, 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 <common.h> +#include <asm/danube.h> + +ulong ifx_get_ddr_hz(void) +{ +	static const ulong ddr_freq[] = {166666667,133333333,111111111,83333333}; +	return ddr_freq[((*DANUBE_CGU_SYS) & 0x3)]; +} + +ulong ifx_get_cpuclk(void) +{ +#ifdef CONFIG_USE_EMULATOR +	return EMULATOR_CPU_SPEED; +#else //NOT CONFIG_USE_EMULATOR +	unsigned int ddr_clock=ifx_get_ddr_hz(); +	switch((*DANUBE_CGU_SYS) & 0xc){ +		case 0: +		default: +			return 323333333; +		case 4: +			return ddr_clock; +		case 8: +			return ddr_clock << 1; +	} +#endif +} + +ulong get_bus_freq(ulong dummy) +{ +#ifdef CONFIG_USE_EMULATOR +	unsigned int  clkCPU; +	clkCPU = ifx_get_cpuclk(); +	return clkCPU >> 2; +#else //NOT CONFIG_USE_EMULATOR +	unsigned int ddr_clock=ifx_get_ddr_hz(); +	if ((*DANUBE_CGU_SYS) & 0x40){ +		return ddr_clock >> 1; +	} +	return ddr_clock; +#endif +} + diff --git a/package/uboot-lantiq/files/cpu/mips/danube/ifx_cache.S b/package/uboot-lantiq/files/cpu/mips/danube/ifx_cache.S new file mode 100644 index 000000000..fc482dcd6 --- /dev/null +++ b/package/uboot-lantiq/files/cpu/mips/danube/ifx_cache.S @@ -0,0 +1,60 @@ + +#define IFX_CACHE_EXTRA_INVALID_TAG						\ +	mtc0	zero, CP0_TAGLO, 1;						\ +	mtc0	zero, CP0_TAGLO, 2;						\ +	mtc0	zero, CP0_TAGLO, 3;						\ +	mtc0	zero, CP0_TAGLO, 4; + +#define IFX_CACHE_EXTRA_OPERATION						\ +	/* set WST bit */							\ +	mfc0	a0, CP0_ECC;							\ +	li	a1, ECCF_WST;							\ +	or	a0, a1;								\ +	mtc0	a0, CP0_ECC;							\ +										\ +	li	a0, K0BASE;							\ +	move	a2, t2;		/* icacheSize */				\ +	move	a3, t4;		/* icacheLineSize */				\ +	move	a1, a2;								\ +	icacheop(a0,a1,a2,a3,(Index_Store_Tag_I));				\ +										\ +	/* clear WST bit */							\ +	mfc0	a0, CP0_ECC;							\ +	li	a1, ~ECCF_WST;							\ +	and	a0, a1;								\ +	mtc0	a0, CP0_ECC;							\ +										\ +	/* 1: initialise dcache tags. */					\ +										\ +	/* cache line size */							\ +	li	a2, CFG_CACHELINE_SIZE;						\ +	/* kseg0 mem address */							\ +	li	a1, 0;								\ +	li	a3, CFG_CACHE_SETS * CFG_CACHE_WAYS;				\ +1:										\ +	/* store tag (invalid, not locked) */					\ +	cache 0x8, 0(a1);							\ +	cache 0x9, 0(a1);							\ +										\ +	add	a3, -1;								\ +	bne	a3, zero, 1b;							\ +	add	a1, a2;								\ +										\ +	/* set WST bit */							\ +	mfc0	a0, CP0_ECC;							\ +	li	a1, ECCF_WST;							\ +	or	a0, a1;								\ +	mtc0	a0, CP0_ECC;							\ +										\ +	li	a0, K0BASE;							\ +	move	a2, t3;		/* dcacheSize */				\ +	move	a3, t5;		/* dcacheLineSize */				\ +	move	a1, a2;								\ +	icacheop(a0,a1,a2,a3,(Index_Store_Tag_D));				\ +										\ +	/* clear WST bit */							\ +	mfc0	a0, CP0_ECC;							\ +	li	a1, ~ECCF_WST;							\ +	and	a0, a1;								\ +	mtc0	a0, CP0_ECC; + | 
