[adm5120] add initial support for hardware accelerated byte swapping
git-svn-id: svn://svn.openwrt.org/openwrt/trunk@7708 3c298f89-4303-0410-b956-a3cf2f4a3e73master
parent
0ef3652486
commit
e3fae5ca90
|
@ -2,6 +2,7 @@ CONFIG_32BIT=y
|
|||
# CONFIG_64BIT is not set
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
CONFIG_ADM5120_GPIO=y
|
||||
CONFIG_ADM5120_HARDWARE_SWAB=y
|
||||
CONFIG_ADM5120_NR_UARTS=2
|
||||
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
|
||||
# CONFIG_ARCH_HAS_ILOG2_U64 is not set
|
||||
|
|
|
@ -0,0 +1,16 @@
|
|||
if MIPS_ADM5120
|
||||
|
||||
menu "ADM5120 Implementation Options"
|
||||
|
||||
config PCI_ADM5120
|
||||
bool "Enable PCI support"
|
||||
select PCI
|
||||
default y
|
||||
|
||||
config ADM5120_HARDWARE_SWAB
|
||||
bool "Enable hardware accelerated byte-swapping"
|
||||
default y
|
||||
|
||||
endmenu
|
||||
|
||||
endif
|
|
@ -18,6 +18,7 @@
|
|||
|
||||
#include <asm/bootinfo.h>
|
||||
#include <asm/addrspace.h>
|
||||
#include <asm/byteorder.h>
|
||||
|
||||
#include <asm/mach-adm5120/adm5120_defs.h>
|
||||
#include <asm/mach-adm5120/adm5120_switch.h>
|
||||
|
@ -897,11 +898,31 @@ void __init adm5120_info_show(void)
|
|||
printk("Memory size : %ldMB\n", adm5120_memsize >> 20);
|
||||
}
|
||||
|
||||
void __init adm5120_swab_test(void)
|
||||
{
|
||||
#if CONFIG_ADM5120_HARDWARE_SWAB
|
||||
u32 t1,t2;
|
||||
|
||||
t1 = 0x1234;
|
||||
t2 = swab16(t1);
|
||||
printk("hardware swab16 test %s, data:0x%04X, result:0x%04X\n",
|
||||
(t2 == 0x3412) ? "passed" :"failed", t1, t2);
|
||||
|
||||
t1 = 0x12345678;
|
||||
t2 = swab32(t1);
|
||||
printk("hardware swab32 test %s, data:0x%08X, result:0x%08X\n",
|
||||
(t2 == 0x78563412) ? "passed" :"failed", t1, t2);
|
||||
|
||||
#endif /* CONFIG_ADM5120_HARDWARE_SWAB */
|
||||
}
|
||||
|
||||
void __init adm5120_info_init(void)
|
||||
{
|
||||
|
||||
adm5120_detect_cpuinfo();
|
||||
adm5120_detect_memsize();
|
||||
adm5120_detect_board();
|
||||
|
||||
adm5120_info_show();
|
||||
adm5120_swab_test();
|
||||
}
|
||||
|
|
|
@ -2,7 +2,7 @@ Index: linux-2.6.21.1/arch/mips/Kconfig
|
|||
===================================================================
|
||||
--- linux-2.6.21.1.orig/arch/mips/Kconfig
|
||||
+++ linux-2.6.21.1/arch/mips/Kconfig
|
||||
@@ -16,6 +16,21 @@ choice
|
||||
@@ -16,6 +16,17 @@ choice
|
||||
prompt "System type"
|
||||
default SGI_IP22
|
||||
|
||||
|
@ -16,14 +16,18 @@ Index: linux-2.6.21.1/arch/mips/Kconfig
|
|||
+ select SYS_SUPPORTS_BIG_ENDIAN
|
||||
+ select SYS_SUPPORTS_32BIT_KERNEL
|
||||
+ select GENERIC_GPIO
|
||||
+
|
||||
+config PCI_ADM5120
|
||||
+ bool "Add PCI control support for ADM5120"
|
||||
+ depends on MIPS_ADM5120 && PCI
|
||||
+
|
||||
config MIPS_MTX1
|
||||
bool "4G Systems MTX-1 board"
|
||||
select DMA_NONCOHERENT
|
||||
@@ -766,6 +775,7 @@
|
||||
|
||||
endchoice
|
||||
|
||||
+source "arch/mips/adm5120/Kconfig"
|
||||
source "arch/mips/ddb5xxx/Kconfig"
|
||||
source "arch/mips/gt64120/ev64120/Kconfig"
|
||||
source "arch/mips/jazz/Kconfig"
|
||||
Index: linux-2.6.21.1/arch/mips/Makefile
|
||||
===================================================================
|
||||
--- linux-2.6.21.1.orig/arch/mips/Makefile
|
||||
|
|
|
@ -0,0 +1,38 @@
|
|||
--- linux-2.6.19.2/include/asm-mips/byteorder.h 2007-01-10 20:10:37.000000000 +0100
|
||||
+++ linux-2.6.19.2.new/include/asm-mips/byteorder.h 2007-05-16 21:14:47.000000000 +0200
|
||||
@@ -58,6 +58,35 @@
|
||||
|
||||
#endif /* CONFIG_CPU_MIPSR2 */
|
||||
|
||||
+#ifdef CONFIG_ADM5120_HARDWARE_SWAB
|
||||
+
|
||||
+static __inline__ __attribute_const__ __u16 ___adm5120__swab16(__u16 x)
|
||||
+{
|
||||
+ __asm__ (
|
||||
+ " sw %2, 0xC8(%1) \n"
|
||||
+ " lhu %0, 0xCC(%1) \n"
|
||||
+ : "=r" (x)
|
||||
+ : "r" (0xB2000000), "r" (x));
|
||||
+
|
||||
+ return x;
|
||||
+}
|
||||
+
|
||||
+static __inline__ __attribute_const__ __u32 ___adm5120__swab32(__u32 x)
|
||||
+{
|
||||
+ __asm__ (
|
||||
+ " sw %2, 0xC8(%1) \n"
|
||||
+ " lw %0, 0xCC(%1) \n"
|
||||
+ : "=r" (x)
|
||||
+ : "r" (0xB2000000), "r" (x));
|
||||
+
|
||||
+ return x;
|
||||
+}
|
||||
+
|
||||
+#define __arch__swab16(x) ___adm5120__swab16(x)
|
||||
+#define __arch__swab32(x) ___adm5120__swab32(x)
|
||||
+
|
||||
+#endif /* CONFIG_ADM5120_HARDWARE_SWAB */
|
||||
+
|
||||
#if !defined(__STRICT_ANSI__) || defined(__KERNEL__)
|
||||
# define __BYTEORDER_HAS_U64__
|
||||
# define __SWAB_64_THRU_32__
|
|
@ -2,6 +2,7 @@ CONFIG_32BIT=y
|
|||
# CONFIG_64BIT is not set
|
||||
# CONFIG_64BIT_PHYS_ADDR is not set
|
||||
CONFIG_ADM5120_GPIO=y
|
||||
CONFIG_ADM5120_HARDWARE_SWAB=y
|
||||
CONFIG_ADM5120_NR_UARTS=2
|
||||
# CONFIG_ATM_DRIVERS is not set
|
||||
# CONFIG_ARCH_HAS_ILOG2_U32 is not set
|
||||
|
|
Loading…
Reference in New Issue