summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohn Crispin <john@openwrt.org>2008-05-10 00:20:36 +0000
committerJohn Crispin <john@openwrt.org>2008-05-10 00:20:36 +0000
commit40881701d0864c965d98ef0d7b217006847c18bd (patch)
tree7bd8d6721673dddc5f413a2e1331d0c4f9b73757
parentace5c1dac5a45de03650acfbaa65a4b79554151e (diff)
downloadmtk-20170518-40881701d0864c965d98ef0d7b217006847c18bd.zip
mtk-20170518-40881701d0864c965d98ef0d7b217006847c18bd.tar.gz
mtk-20170518-40881701d0864c965d98ef0d7b217006847c18bd.tar.bz2
fixes timer issues
SVN-Revision: 11102
-rw-r--r--target/linux/ifxmips/files/arch/mips/ifxmips/setup.c26
-rw-r--r--target/linux/ifxmips/patches/100-board.patch34
2 files changed, 41 insertions, 19 deletions
diff --git a/target/linux/ifxmips/files/arch/mips/ifxmips/setup.c b/target/linux/ifxmips/files/arch/mips/ifxmips/setup.c
index ade78d1..1e62029 100644
--- a/target/linux/ifxmips/files/arch/mips/ifxmips/setup.c
+++ b/target/linux/ifxmips/files/arch/mips/ifxmips/setup.c
@@ -96,13 +96,21 @@ ifxmips_get_cpu_ver (void)
}
EXPORT_SYMBOL(ifxmips_get_cpu_ver);
-void
-ifxmips_time_init (void)
+static __inline__ u32 get_counter_resolution(void)
{
- mips_hpt_frequency = ifxmips_get_cpu_hz() / 2;
- r4k_offset = mips_hpt_frequency / HZ;
- printk("mips_hpt_frequency:%d\n", mips_hpt_frequency);
- printk("r4k_offset: %08x(%d)\n", r4k_offset, r4k_offset);
+ u32 res;
+ __asm__ __volatile__(
+ ".set push\n"
+ ".set mips32r2\n"
+ ".set noreorder\n"
+ "rdhwr %0, $3\n"
+ "ehb\n"
+ ".set pop\n"
+ : "=&r" (res)
+ : /* no input */
+ : "memory");
+ instruction_hazard();
+ return res;
}
int
@@ -117,9 +125,9 @@ ifxmips_be_handler(struct pt_regs *regs, int is_fixup)
void __init
plat_time_init (void)
{
+ mips_hpt_frequency = ifxmips_get_cpu_hz()/get_counter_resolution();
r4k_cur = (read_c0_count() + r4k_offset);
write_c0_compare(r4k_cur);
-
ifxmips_pmu_enable(IFXMIPS_PMU_PWDCR_GPT | IFXMIPS_PMU_PWDCR_FPI);
writel(0x100, IFXMIPS_GPTU_GPT_CLC);
@@ -130,7 +138,7 @@ plat_time_init (void)
extern const char* get_system_type (void);
-void (*board_time_init)(void);
+//void (*board_time_init)(void);
void __init
plat_mem_setup (void)
{
@@ -144,7 +152,7 @@ plat_mem_setup (void)
write_c0_status(status);
ifxmips_reboot_setup();
- board_time_init = ifxmips_time_init;
+// board_time_init = ifxmips_time_init;
board_be_handler = &ifxmips_be_handler;
ioport_resource.start = IOPORT_RESOURCE_START;
diff --git a/target/linux/ifxmips/patches/100-board.patch b/target/linux/ifxmips/patches/100-board.patch
index 9094749..448e430 100644
--- a/target/linux/ifxmips/patches/100-board.patch
+++ b/target/linux/ifxmips/patches/100-board.patch
@@ -1,8 +1,8 @@
-Index: linux-2.6.25/arch/mips/Kconfig
+Index: linux-2.6.25.1/arch/mips/Kconfig
===================================================================
---- linux-2.6.25.orig/arch/mips/Kconfig 2008-05-05 08:35:34.000000000 +0100
-+++ linux-2.6.25/arch/mips/Kconfig 2008-05-05 08:35:46.000000000 +0100
-@@ -78,6 +78,17 @@
+--- linux-2.6.25.1.orig/arch/mips/Kconfig 2008-05-10 01:03:55.000000000 +0100
++++ linux-2.6.25.1/arch/mips/Kconfig 2008-05-10 01:09:11.000000000 +0100
+@@ -78,6 +78,19 @@
select SYS_SUPPORTS_LITTLE_ENDIAN
select GENERIC_HARDIRQS_NO__DO_IRQ
@@ -10,6 +10,8 @@ Index: linux-2.6.25/arch/mips/Kconfig
+ bool "IFXMips support"
+ select DMA_NONCOHERENT
+ select IRQ_CPU
++ select CEVT_R4K
++ select CSRC_R4K
+ select SYS_HAS_CPU_MIPS32_R1
+ select HAVE_STD_PC_SERIAL_PORT
+ select SYS_SUPPORTS_BIG_ENDIAN
@@ -20,10 +22,10 @@ Index: linux-2.6.25/arch/mips/Kconfig
config MACH_DECSTATION
bool "DECstations"
select BOOT_ELF32
-Index: linux-2.6.25/arch/mips/Makefile
+Index: linux-2.6.25.1/arch/mips/Makefile
===================================================================
---- linux-2.6.25.orig/arch/mips/Makefile 2008-05-05 08:35:35.000000000 +0100
-+++ linux-2.6.25/arch/mips/Makefile 2008-05-05 08:35:46.000000000 +0100
+--- linux-2.6.25.1.orig/arch/mips/Makefile 2008-05-10 01:04:02.000000000 +0100
++++ linux-2.6.25.1/arch/mips/Makefile 2008-05-10 01:04:03.000000000 +0100
@@ -282,6 +282,13 @@
cflags-$(CONFIG_MIPS_COBALT) += -Iinclude/asm-mips/mach-cobalt
load-$(CONFIG_MIPS_COBALT) += 0xffffffff80080000
@@ -38,10 +40,10 @@ Index: linux-2.6.25/arch/mips/Makefile
#
# DECstation family
#
-Index: linux-2.6.25/include/asm-mips/bootinfo.h
+Index: linux-2.6.25.1/include/asm-mips/bootinfo.h
===================================================================
---- linux-2.6.25.orig/include/asm-mips/bootinfo.h 2008-05-05 08:35:35.000000000 +0100
-+++ linux-2.6.25/include/asm-mips/bootinfo.h 2008-05-05 08:35:46.000000000 +0100
+--- linux-2.6.25.1.orig/include/asm-mips/bootinfo.h 2008-05-10 01:03:55.000000000 +0100
++++ linux-2.6.25.1/include/asm-mips/bootinfo.h 2008-05-10 01:04:03.000000000 +0100
@@ -94,6 +94,12 @@
#define MACH_MSP7120_FPGA 5 /* PMC-Sierra MSP7120 Emulation */
#define MACH_MSP_OTHER 255 /* PMC-Sierra unknown board type */
@@ -55,3 +57,15 @@ Index: linux-2.6.25/include/asm-mips/bootinfo.h
#define CL_SIZE COMMAND_LINE_SIZE
extern char *system_type;
+Index: linux-2.6.25.1/arch/mips/kernel/traps.c
+===================================================================
+--- linux-2.6.25.1.orig/arch/mips/kernel/traps.c 2008-05-10 01:09:32.000000000 +0100
++++ linux-2.6.25.1/arch/mips/kernel/traps.c 2008-05-10 01:10:07.000000000 +0100
+@@ -1379,6 +1379,7 @@
+ */
+ if (cpu_has_mips_r2) {
+ cp0_compare_irq = (read_c0_intctl() >> 29) & 7;
++ cp0_compare_irq = CP0_LEGACY_COMPARE_IRQ;
+ cp0_perfcount_irq = (read_c0_intctl() >> 26) & 7;
+ if (cp0_perfcount_irq == cp0_compare_irq)
+ cp0_perfcount_irq = -1;