Jelajahi Sumber

Merge pull request #845 from caogos/master

[BSP] Add FPU option for loongson1c.
Bernard Xiong 7 tahun lalu
induk
melakukan
0d193254f8

+ 3 - 3
bsp/ls1cdev/applications/startup.c

@@ -51,9 +51,9 @@ void rtthread_startup(void)
     rt_hw_interrupt_init();
     rt_hw_interrupt_init();
 
 
     /* copy vector */
     /* copy vector */
-    rt_memcpy((void *)A_K0BASE, tlb_refill_exception, 0x20);
-    rt_memcpy((void *)(A_K0BASE + 0x180), general_exception, 0x20);
-    rt_memcpy((void *)(A_K0BASE + 0x200), irq_exception, 0x20);
+    rt_memcpy((void *)A_K0BASE, tlb_refill_exception, 0x80);
+    rt_memcpy((void *)(A_K0BASE + 0x180), general_exception, 0x80);
+    rt_memcpy((void *)(A_K0BASE + 0x200), irq_exception, 0x80);
 
 
     invalidate_writeback_dcache_all();
     invalidate_writeback_dcache_all();
     invalidate_icache_all();
     invalidate_icache_all();

+ 2 - 0
bsp/ls1cdev/drivers/board.c

@@ -94,8 +94,10 @@ void rt_hw_board_init(void)
 	/* init operating system timer */
 	/* init operating system timer */
 	rt_hw_timer_init();
 	rt_hw_timer_init();
 
 
+#ifdef RT_USING_FPU
     /* init hardware fpu */
     /* init hardware fpu */
     rt_hw_fpu_init();
     rt_hw_fpu_init();
+#endif
 
 
 	rt_kprintf("current sr: 0x%08x\n", read_c0_status());
 	rt_kprintf("current sr: 0x%08x\n", read_c0_status());
 }
 }

+ 2 - 0
bsp/ls1cdev/rtconfig.h

@@ -75,6 +75,8 @@
 #define RT_UART_RX_BUFFER_SIZE	64
 #define RT_UART_RX_BUFFER_SIZE	64
 // </section>
 // </section>
 
 
+#define RT_USING_FPU
+
 // <section name="RT_USING_CONSOLE" description="Using console" default="true" >
 // <section name="RT_USING_CONSOLE" description="Using console" default="true" >
 #define RT_USING_CONSOLE
 #define RT_USING_CONSOLE
 // <integer name="RT_CONSOLEBUF_SIZE" description="The buffer size for console output" default="128" />
 // <integer name="RT_CONSOLEBUF_SIZE" description="The buffer size for console output" default="128" />

+ 4 - 0
libcpu/mips/loongson_1c/stackframe_fpu.h

@@ -37,6 +37,7 @@
     .macro SAVE_FPU
     .macro SAVE_FPU
     .set push
     .set push
     .set noreorder
     .set noreorder
+#ifdef RT_USING_FPU
     move k1, sp                     /* 保存现场 */
     move k1, sp                     /* 保存现场 */
     and k0, k1, 0xFFFFFFF8          /* 8字节对齐 */    
     and k0, k1, 0xFFFFFFF8          /* 8字节对齐 */    
     PTR_SUBU sp, k0, PT_FPU_SIZE    /* 计算栈底 */
     PTR_SUBU sp, k0, PT_FPU_SIZE    /* 计算栈底 */
@@ -57,6 +58,7 @@
     s.d $f28, PT_FPU_R28(sp)
     s.d $f28, PT_FPU_R28(sp)
     s.d $f30, PT_FPU_R30(sp)
     s.d $f30, PT_FPU_R30(sp)
     move sp, k1                     /* 恢复现场 */
     move sp, k1                     /* 恢复现场 */
+#endif
     .set reorder
     .set reorder
     .set pop
     .set pop
     .endm
     .endm
@@ -65,6 +67,7 @@
     .macro RESTORE_FPU
     .macro RESTORE_FPU
     .set push
     .set push
     .set noreorder
     .set noreorder
+#ifdef RT_USING_FPU
     move k1, sp                     /* 保存现场 */
     move k1, sp                     /* 保存现场 */
     and k0, k1, 0xFFFFFFF8          /* 8字节对齐 */
     and k0, k1, 0xFFFFFFF8          /* 8字节对齐 */
     PTR_SUBU sp, k0, PT_FPU_SIZE    /* 计算栈底*/
     PTR_SUBU sp, k0, PT_FPU_SIZE    /* 计算栈底*/
@@ -85,6 +88,7 @@
     l.d $f28, PT_FPU_R28(sp)
     l.d $f28, PT_FPU_R28(sp)
     l.d $f30, PT_FPU_R30(sp)
     l.d $f30, PT_FPU_R30(sp)
     move sp, k1                     /* 恢复现场 */
     move sp, k1                     /* 恢复现场 */
+#endif
     .set reorder
     .set reorder
     .set pop
     .set pop
     .endm
     .endm