Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
* 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus: (68 commits) [MIPS] remove Documentation/mips/GT64120.README [MIPS] Malta: remaining bits of the board support code cleanup [MIPS] Malta: make the helper function static [MIPS] Malta: fix braces at single statement blocks [MIPS] Malta, Atlas: move an extern function declaration to the header file [MIPS] Malta: Use C89 style for comments [MIPS] Malta: else should follow close brace in malta_int.c [MIPS] Malta: remove a superfluous comment [MIPS] Malta: include <linux/cpu.h> instead of <asm/cpu.h> [MIPS] Malta, Atlas, Sead: remove an extern from .c files [MIPS] Malta: fix oversized lines in malta_int.c [MIPS] Malta: remove a dead function declaration [MIPS] Malta: use tabs not spaces [MIPS] Malta: set up the screen info in a separate function [MIPS] Malta: check the PCI clock frequency in a separate function [MIPS] Malta: use the KERN_ facility level in printk() [MIPS] Malta: use Linux kernel style for structure initialization [MIPS]: constify function pointer tables [MIPS] compat: handle argument endianess of sys32_(f)truncate64 with merge_64 [MIPS] Cobalt 64-bits kernels can be safely unmarked experimental ...
This commit is contained in:
commit
21af0297c7
|
@ -2,5 +2,3 @@
|
||||||
- this file.
|
- this file.
|
||||||
AU1xxx_IDE.README
|
AU1xxx_IDE.README
|
||||||
- README for MIPS AU1XXX IDE driver.
|
- README for MIPS AU1XXX IDE driver.
|
||||||
GT64120.README
|
|
||||||
- README for dir with info on MIPS boards using GT-64120 or GT-64120A.
|
|
||||||
|
|
|
@ -1,65 +0,0 @@
|
||||||
README for arch/mips/gt64120 directory and subdirectories
|
|
||||||
|
|
||||||
Jun Sun, jsun@mvista.com or jsun@junsun.net
|
|
||||||
01/27, 2001
|
|
||||||
|
|
||||||
MOTIVATION
|
|
||||||
----------
|
|
||||||
|
|
||||||
Many MIPS boards share the same system controller (or CPU companian chip),
|
|
||||||
such as GT-64120. It is highly desirable to let these boards share
|
|
||||||
the same controller code instead of duplicating them.
|
|
||||||
|
|
||||||
This directory is meant to hold all MIPS boards that use GT-64120 or GT-64120A.
|
|
||||||
|
|
||||||
|
|
||||||
HOW TO ADD A BOARD
|
|
||||||
------------------
|
|
||||||
|
|
||||||
. Create a subdirectory include/asm/gt64120/<board>.
|
|
||||||
|
|
||||||
. Create a file called gt64120_dep.h under that directory.
|
|
||||||
|
|
||||||
. Modify include/asm/gt64120/gt64120.h file to include the new gt64120_dep.h
|
|
||||||
based on config options. The board-dep section is at the end of
|
|
||||||
include/asm/gt64120/gt64120.h file. There you can find all required
|
|
||||||
definitions include/asm/gt64120/<board>/gt64120_dep.h file must supply.
|
|
||||||
|
|
||||||
. Create a subdirectory arch/mips/gt64120/<board> directory to hold
|
|
||||||
board specific routines.
|
|
||||||
|
|
||||||
. The GT-64120 common code is supplied under arch/mips/gt64120/common directory.
|
|
||||||
It includes:
|
|
||||||
1) arch/mips/gt64120/pci.c -
|
|
||||||
common PCI routine, include the top-level pcibios_init()
|
|
||||||
2) arch/mips/gt64120/irq.c -
|
|
||||||
common IRQ routine, include the top-level do_IRQ()
|
|
||||||
[This part really belongs to arch/mips/kernel. jsun]
|
|
||||||
3) arch/mips/gt64120/gt_irq.c -
|
|
||||||
common IRQ routines for GT-64120 chip. Currently it only handles
|
|
||||||
the timer interrupt.
|
|
||||||
|
|
||||||
. Board-specific routines are supplied under arch/mips/gt64120/<board> dir.
|
|
||||||
1) arch/mips/gt64120/<board>/pci.c - it provides bus fixup routine
|
|
||||||
2) arch/mips/gt64120/<board>/irq.c - it provides enable/disable irqs
|
|
||||||
and board irq setup routine (irq_setup)
|
|
||||||
3) arch/mips/gt64120/<board>/int-handler.S -
|
|
||||||
The first-level interrupt dispatching routine.
|
|
||||||
4) a bunch of other "normal" stuff (setup, prom, dbg_io, reset, etc)
|
|
||||||
|
|
||||||
. Follow other "normal" procedure to modify configuration files, etc.
|
|
||||||
|
|
||||||
|
|
||||||
TO-DO LIST
|
|
||||||
----------
|
|
||||||
|
|
||||||
. Expand arch/mips/gt64120/gt_irq.c to handle all GT-64120 interrupts.
|
|
||||||
We probably need to introduce GT_IRQ_BASE in board-dep header file,
|
|
||||||
which is used the starting irq_nr for all GT irqs.
|
|
||||||
|
|
||||||
A function, gt64120_handle_irq(), will be added so that the first-level
|
|
||||||
irq dispatcher will call this function if it detects an interrupt
|
|
||||||
from GT-64120.
|
|
||||||
|
|
||||||
. More support for GT-64120 PCI features (2nd PCI bus, perhaps)
|
|
||||||
|
|
|
@ -37,16 +37,6 @@ config BASLER_EXCITE
|
||||||
The eXcite is a smart camera platform manufactured by
|
The eXcite is a smart camera platform manufactured by
|
||||||
Basler Vision Technologies AG.
|
Basler Vision Technologies AG.
|
||||||
|
|
||||||
config BASLER_EXCITE_PROTOTYPE
|
|
||||||
bool "Support for pre-release units"
|
|
||||||
depends on BASLER_EXCITE
|
|
||||||
default n
|
|
||||||
help
|
|
||||||
Pre-series (prototype) units are different from later ones in
|
|
||||||
some ways. Select this option if you have one of these. Please
|
|
||||||
note that a kernel built with this option selected will not be
|
|
||||||
able to run on normal units.
|
|
||||||
|
|
||||||
config BCM47XX
|
config BCM47XX
|
||||||
bool "BCM47XX based boards"
|
bool "BCM47XX based boards"
|
||||||
select CEVT_R4K
|
select CEVT_R4K
|
||||||
|
@ -82,7 +72,7 @@ config MIPS_COBALT
|
||||||
select SYS_HAS_CPU_NEVADA
|
select SYS_HAS_CPU_NEVADA
|
||||||
select SYS_HAS_EARLY_PRINTK
|
select SYS_HAS_EARLY_PRINTK
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
select SYS_SUPPORTS_64BIT_KERNEL
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
select GENERIC_HARDIRQS_NO__DO_IRQ
|
select GENERIC_HARDIRQS_NO__DO_IRQ
|
||||||
|
|
||||||
|
@ -91,6 +81,9 @@ config MACH_DECSTATION
|
||||||
select BOOT_ELF32
|
select BOOT_ELF32
|
||||||
select CEVT_R4K
|
select CEVT_R4K
|
||||||
select CSRC_R4K
|
select CSRC_R4K
|
||||||
|
select CPU_DADDI_WORKAROUNDS if 64BIT
|
||||||
|
select CPU_R4000_WORKAROUNDS if 64BIT
|
||||||
|
select CPU_R4400_WORKAROUNDS if 64BIT
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
select NO_IOPORT
|
select NO_IOPORT
|
||||||
select IRQ_CPU
|
select IRQ_CPU
|
||||||
|
@ -124,12 +117,12 @@ config MACH_JAZZ
|
||||||
select ARCH_MAY_HAVE_PC_FDC
|
select ARCH_MAY_HAVE_PC_FDC
|
||||||
select CEVT_R4K
|
select CEVT_R4K
|
||||||
select CSRC_R4K
|
select CSRC_R4K
|
||||||
|
select DEFAULT_SGI_PARTITION if CPU_BIG_ENDIAN
|
||||||
select GENERIC_ISA_DMA
|
select GENERIC_ISA_DMA
|
||||||
select IRQ_CPU
|
select IRQ_CPU
|
||||||
select I8253
|
select I8253
|
||||||
select I8259
|
select I8259
|
||||||
select ISA
|
select ISA
|
||||||
select PCSPEAKER
|
|
||||||
select SYS_HAS_CPU_R4X00
|
select SYS_HAS_CPU_R4X00
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
select SYS_SUPPORTS_32BIT_KERNEL
|
||||||
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
|
||||||
|
@ -187,6 +180,7 @@ config LEMOTE_FULONG
|
||||||
config MIPS_ATLAS
|
config MIPS_ATLAS
|
||||||
bool "MIPS Atlas board"
|
bool "MIPS Atlas board"
|
||||||
select BOOT_ELF32
|
select BOOT_ELF32
|
||||||
|
select BOOT_RAW
|
||||||
select CEVT_R4K
|
select CEVT_R4K
|
||||||
select CSRC_R4K
|
select CSRC_R4K
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
|
@ -219,6 +213,7 @@ config MIPS_MALTA
|
||||||
bool "MIPS Malta board"
|
bool "MIPS Malta board"
|
||||||
select ARCH_MAY_HAVE_PC_FDC
|
select ARCH_MAY_HAVE_PC_FDC
|
||||||
select BOOT_ELF32
|
select BOOT_ELF32
|
||||||
|
select BOOT_RAW
|
||||||
select CEVT_R4K
|
select CEVT_R4K
|
||||||
select CSRC_R4K
|
select CSRC_R4K
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
|
@ -364,35 +359,6 @@ config PMC_YOSEMITE
|
||||||
Yosemite is an evaluation board for the RM9000x2 processor
|
Yosemite is an evaluation board for the RM9000x2 processor
|
||||||
manufactured by PMC-Sierra.
|
manufactured by PMC-Sierra.
|
||||||
|
|
||||||
config QEMU
|
|
||||||
bool "Qemu"
|
|
||||||
select CEVT_R4K
|
|
||||||
select CSRC_R4K
|
|
||||||
select DMA_COHERENT
|
|
||||||
select GENERIC_ISA_DMA
|
|
||||||
select HAVE_STD_PC_SERIAL_PORT
|
|
||||||
select I8253
|
|
||||||
select I8259
|
|
||||||
select IRQ_CPU
|
|
||||||
select ISA
|
|
||||||
select PCSPEAKER
|
|
||||||
select SWAP_IO_SPACE
|
|
||||||
select SYS_HAS_CPU_MIPS32_R1
|
|
||||||
select SYS_HAS_EARLY_PRINTK
|
|
||||||
select SYS_SUPPORTS_32BIT_KERNEL
|
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN
|
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
|
||||||
select GENERIC_HARDIRQS_NO__DO_IRQ
|
|
||||||
select NR_CPUS_DEFAULT_1
|
|
||||||
select SYS_SUPPORTS_SMP
|
|
||||||
help
|
|
||||||
Qemu is a software emulator which among other architectures also
|
|
||||||
can simulate a MIPS32 4Kc system. This patch adds support for the
|
|
||||||
system architecture that currently is being simulated by Qemu. It
|
|
||||||
will eventually be removed again when Qemu has the capability to
|
|
||||||
simulate actual MIPS hardware platforms. More information on Qemu
|
|
||||||
can be found at http://www.linux-mips.org/wiki/Qemu.
|
|
||||||
|
|
||||||
config SGI_IP22
|
config SGI_IP22
|
||||||
bool "SGI IP22 (Indy/Indigo2)"
|
bool "SGI IP22 (Indy/Indigo2)"
|
||||||
select ARC
|
select ARC
|
||||||
|
@ -400,6 +366,7 @@ config SGI_IP22
|
||||||
select BOOT_ELF32
|
select BOOT_ELF32
|
||||||
select CEVT_R4K
|
select CEVT_R4K
|
||||||
select CSRC_R4K
|
select CSRC_R4K
|
||||||
|
select DEFAULT_SGI_PARTITION
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
select HW_HAS_EISA
|
select HW_HAS_EISA
|
||||||
select I8253
|
select I8253
|
||||||
|
@ -407,6 +374,12 @@ config SGI_IP22
|
||||||
select IP22_CPU_SCACHE
|
select IP22_CPU_SCACHE
|
||||||
select IRQ_CPU
|
select IRQ_CPU
|
||||||
select GENERIC_ISA_DMA_SUPPORT_BROKEN
|
select GENERIC_ISA_DMA_SUPPORT_BROKEN
|
||||||
|
select SGI_HAS_DS1286
|
||||||
|
select SGI_HAS_I8042
|
||||||
|
select SGI_HAS_INDYDOG
|
||||||
|
select SGI_HAS_SEEQ
|
||||||
|
select SGI_HAS_WD93
|
||||||
|
select SGI_HAS_ZILOG
|
||||||
select SWAP_IO_SPACE
|
select SWAP_IO_SPACE
|
||||||
select SYS_HAS_CPU_R4X00
|
select SYS_HAS_CPU_R4X00
|
||||||
select SYS_HAS_CPU_R5000
|
select SYS_HAS_CPU_R5000
|
||||||
|
@ -424,6 +397,7 @@ config SGI_IP27
|
||||||
select ARC
|
select ARC
|
||||||
select ARC64
|
select ARC64
|
||||||
select BOOT_ELF64
|
select BOOT_ELF64
|
||||||
|
select DEFAULT_SGI_PARTITION
|
||||||
select DMA_IP27
|
select DMA_IP27
|
||||||
select SYS_HAS_EARLY_PRINTK
|
select SYS_HAS_EARLY_PRINTK
|
||||||
select HW_HAS_PCI
|
select HW_HAS_PCI
|
||||||
|
@ -440,6 +414,36 @@ config SGI_IP27
|
||||||
workstations. To compile a Linux kernel that runs on these, say Y
|
workstations. To compile a Linux kernel that runs on these, say Y
|
||||||
here.
|
here.
|
||||||
|
|
||||||
|
config SGI_IP28
|
||||||
|
bool "SGI IP28 (Indigo2 R10k) (EXPERIMENTAL)"
|
||||||
|
depends on EXPERIMENTAL
|
||||||
|
select ARC
|
||||||
|
select ARC64
|
||||||
|
select BOOT_ELF64
|
||||||
|
select CEVT_R4K
|
||||||
|
select CSRC_R4K
|
||||||
|
select DEFAULT_SGI_PARTITION
|
||||||
|
select DMA_NONCOHERENT
|
||||||
|
select GENERIC_ISA_DMA_SUPPORT_BROKEN
|
||||||
|
select IRQ_CPU
|
||||||
|
select HW_HAS_EISA
|
||||||
|
select I8253
|
||||||
|
select I8259
|
||||||
|
select SGI_HAS_DS1286
|
||||||
|
select SGI_HAS_I8042
|
||||||
|
select SGI_HAS_INDYDOG
|
||||||
|
select SGI_HAS_SEEQ
|
||||||
|
select SGI_HAS_WD93
|
||||||
|
select SGI_HAS_ZILOG
|
||||||
|
select SWAP_IO_SPACE
|
||||||
|
select SYS_HAS_CPU_R10000
|
||||||
|
select SYS_HAS_EARLY_PRINTK
|
||||||
|
select SYS_SUPPORTS_64BIT_KERNEL
|
||||||
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
|
help
|
||||||
|
This is the SGI Indigo2 with R10000 processor. To compile a Linux
|
||||||
|
kernel that runs on these, say Y here.
|
||||||
|
|
||||||
config SGI_IP32
|
config SGI_IP32
|
||||||
bool "SGI IP32 (O2)"
|
bool "SGI IP32 (O2)"
|
||||||
select ARC
|
select ARC
|
||||||
|
@ -545,19 +549,6 @@ config SIBYTE_SENTOSA
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN
|
select SYS_SUPPORTS_BIG_ENDIAN
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
select SYS_SUPPORTS_LITTLE_ENDIAN
|
||||||
|
|
||||||
config SIBYTE_PTSWARM
|
|
||||||
bool "Sibyte BCM91250PT-PTSWARM"
|
|
||||||
depends on EXPERIMENTAL
|
|
||||||
select BOOT_ELF32
|
|
||||||
select DMA_COHERENT
|
|
||||||
select NR_CPUS_DEFAULT_2
|
|
||||||
select SIBYTE_SB1250
|
|
||||||
select SWAP_IO_SPACE
|
|
||||||
select SYS_HAS_CPU_SB1
|
|
||||||
select SYS_SUPPORTS_BIG_ENDIAN
|
|
||||||
select SYS_SUPPORTS_HIGHMEM
|
|
||||||
select SYS_SUPPORTS_LITTLE_ENDIAN
|
|
||||||
|
|
||||||
config SIBYTE_BIGSUR
|
config SIBYTE_BIGSUR
|
||||||
bool "Sibyte BCM91480B-BigSur"
|
bool "Sibyte BCM91480B-BigSur"
|
||||||
select BOOT_ELF32
|
select BOOT_ELF32
|
||||||
|
@ -575,10 +566,12 @@ config SNI_RM
|
||||||
bool "SNI RM200/300/400"
|
bool "SNI RM200/300/400"
|
||||||
select ARC if CPU_LITTLE_ENDIAN
|
select ARC if CPU_LITTLE_ENDIAN
|
||||||
select ARC32 if CPU_LITTLE_ENDIAN
|
select ARC32 if CPU_LITTLE_ENDIAN
|
||||||
|
select SNIPROM if CPU_BIG_ENDIAN
|
||||||
select ARCH_MAY_HAVE_PC_FDC
|
select ARCH_MAY_HAVE_PC_FDC
|
||||||
select BOOT_ELF32
|
select BOOT_ELF32
|
||||||
select CEVT_R4K
|
select CEVT_R4K
|
||||||
select CSRC_R4K
|
select CSRC_R4K
|
||||||
|
select DEFAULT_SGI_PARTITION if CPU_BIG_ENDIAN
|
||||||
select DMA_NONCOHERENT
|
select DMA_NONCOHERENT
|
||||||
select GENERIC_ISA_DMA
|
select GENERIC_ISA_DMA
|
||||||
select HW_HAS_EISA
|
select HW_HAS_EISA
|
||||||
|
@ -587,7 +580,6 @@ config SNI_RM
|
||||||
select I8253
|
select I8253
|
||||||
select I8259
|
select I8259
|
||||||
select ISA
|
select ISA
|
||||||
select PCSPEAKER
|
|
||||||
select SWAP_IO_SPACE if CPU_BIG_ENDIAN
|
select SWAP_IO_SPACE if CPU_BIG_ENDIAN
|
||||||
select SYS_HAS_CPU_R4X00
|
select SYS_HAS_CPU_R4X00
|
||||||
select SYS_HAS_CPU_R5000
|
select SYS_HAS_CPU_R5000
|
||||||
|
@ -690,6 +682,7 @@ config WR_PPMC
|
||||||
endchoice
|
endchoice
|
||||||
|
|
||||||
source "arch/mips/au1000/Kconfig"
|
source "arch/mips/au1000/Kconfig"
|
||||||
|
source "arch/mips/basler/excite/Kconfig"
|
||||||
source "arch/mips/jazz/Kconfig"
|
source "arch/mips/jazz/Kconfig"
|
||||||
source "arch/mips/lasat/Kconfig"
|
source "arch/mips/lasat/Kconfig"
|
||||||
source "arch/mips/pmc-sierra/Kconfig"
|
source "arch/mips/pmc-sierra/Kconfig"
|
||||||
|
@ -797,10 +790,6 @@ config DMA_COHERENT
|
||||||
config DMA_IP27
|
config DMA_IP27
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config DMA_IP32
|
|
||||||
bool
|
|
||||||
select DMA_NEED_PCI_MAP_STATE
|
|
||||||
|
|
||||||
config DMA_NONCOHERENT
|
config DMA_NONCOHERENT
|
||||||
bool
|
bool
|
||||||
select DMA_NEED_PCI_MAP_STATE
|
select DMA_NEED_PCI_MAP_STATE
|
||||||
|
@ -956,16 +945,40 @@ config EMMA2RH
|
||||||
config SERIAL_RM9000
|
config SERIAL_RM9000
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SGI_HAS_DS1286
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SGI_HAS_INDYDOG
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SGI_HAS_SEEQ
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SGI_HAS_WD93
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SGI_HAS_ZILOG
|
||||||
|
bool
|
||||||
|
|
||||||
|
config SGI_HAS_I8042
|
||||||
|
bool
|
||||||
|
|
||||||
|
config DEFAULT_SGI_PARTITION
|
||||||
|
bool
|
||||||
|
|
||||||
config ARC32
|
config ARC32
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SNIPROM
|
||||||
|
bool
|
||||||
|
|
||||||
config BOOT_ELF32
|
config BOOT_ELF32
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config MIPS_L1_CACHE_SHIFT
|
config MIPS_L1_CACHE_SHIFT
|
||||||
int
|
int
|
||||||
default "4" if MACH_DECSTATION
|
default "4" if MACH_DECSTATION
|
||||||
default "7" if SGI_IP27 || SNI_RM
|
default "7" if SGI_IP27 || SGI_IP28 || SNI_RM
|
||||||
default "4" if PMC_MSP4200_EVAL
|
default "4" if PMC_MSP4200_EVAL
|
||||||
default "5"
|
default "5"
|
||||||
|
|
||||||
|
@ -974,7 +987,7 @@ config HAVE_STD_PC_SERIAL_PORT
|
||||||
|
|
||||||
config ARC_CONSOLE
|
config ARC_CONSOLE
|
||||||
bool "ARC console support"
|
bool "ARC console support"
|
||||||
depends on SGI_IP22 || (SNI_RM && CPU_LITTLE_ENDIAN)
|
depends on SGI_IP22 || SGI_IP28 || (SNI_RM && CPU_LITTLE_ENDIAN)
|
||||||
|
|
||||||
config ARC_MEMORY
|
config ARC_MEMORY
|
||||||
bool
|
bool
|
||||||
|
@ -983,7 +996,7 @@ config ARC_MEMORY
|
||||||
|
|
||||||
config ARC_PROMLIB
|
config ARC_PROMLIB
|
||||||
bool
|
bool
|
||||||
depends on MACH_JAZZ || SNI_RM || SGI_IP22 || SGI_IP32
|
depends on MACH_JAZZ || SNI_RM || SGI_IP22 || SGI_IP28 || SGI_IP32
|
||||||
default y
|
default y
|
||||||
|
|
||||||
config ARC64
|
config ARC64
|
||||||
|
@ -1443,7 +1456,9 @@ config MIPS_MT_SMP
|
||||||
select MIPS_MT
|
select MIPS_MT
|
||||||
select NR_CPUS_DEFAULT_2
|
select NR_CPUS_DEFAULT_2
|
||||||
select SMP
|
select SMP
|
||||||
|
select SYS_SUPPORTS_SCHED_SMT if SMP
|
||||||
select SYS_SUPPORTS_SMP
|
select SYS_SUPPORTS_SMP
|
||||||
|
select SMP_UP
|
||||||
help
|
help
|
||||||
This is a kernel model which is also known a VSMP or lately
|
This is a kernel model which is also known a VSMP or lately
|
||||||
has been marketesed into SMVP.
|
has been marketesed into SMVP.
|
||||||
|
@ -1460,6 +1475,7 @@ config MIPS_MT_SMTC
|
||||||
select NR_CPUS_DEFAULT_8
|
select NR_CPUS_DEFAULT_8
|
||||||
select SMP
|
select SMP
|
||||||
select SYS_SUPPORTS_SMP
|
select SYS_SUPPORTS_SMP
|
||||||
|
select SMP_UP
|
||||||
help
|
help
|
||||||
This is a kernel model which is known a SMTC or lately has been
|
This is a kernel model which is known a SMTC or lately has been
|
||||||
marketesed into SMVP.
|
marketesed into SMVP.
|
||||||
|
@ -1469,6 +1485,19 @@ endchoice
|
||||||
config MIPS_MT
|
config MIPS_MT
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
config SCHED_SMT
|
||||||
|
bool "SMT (multithreading) scheduler support"
|
||||||
|
depends on SYS_SUPPORTS_SCHED_SMT
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
SMT scheduler support improves the CPU scheduler's decision making
|
||||||
|
when dealing with MIPS MT enabled cores at a cost of slightly
|
||||||
|
increased overhead in some places. If unsure say N here.
|
||||||
|
|
||||||
|
config SYS_SUPPORTS_SCHED_SMT
|
||||||
|
bool
|
||||||
|
|
||||||
|
|
||||||
config SYS_SUPPORTS_MULTITHREADING
|
config SYS_SUPPORTS_MULTITHREADING
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
@ -1589,15 +1618,6 @@ config CPU_HAS_SMARTMIPS
|
||||||
config CPU_HAS_WB
|
config CPU_HAS_WB
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config 64BIT_CONTEXT
|
|
||||||
bool "Save 64bit integer registers"
|
|
||||||
depends on 32BIT && CPU_LOONGSON2
|
|
||||||
help
|
|
||||||
Loongson2 CPU is 64bit , when used in 32BIT mode, its integer
|
|
||||||
registers can still be accessed as 64bit, mainly for multimedia
|
|
||||||
instructions. We must have all 64bit save/restored to make sure
|
|
||||||
those instructions to get correct result.
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Vectored interrupt mode is an R2 feature
|
# Vectored interrupt mode is an R2 feature
|
||||||
#
|
#
|
||||||
|
@ -1618,6 +1638,19 @@ config CPU_HAS_SYNC
|
||||||
config GENERIC_CLOCKEVENTS_BROADCAST
|
config GENERIC_CLOCKEVENTS_BROADCAST
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
#
|
||||||
|
# CPU non-features
|
||||||
|
#
|
||||||
|
config CPU_DADDI_WORKAROUNDS
|
||||||
|
bool
|
||||||
|
|
||||||
|
config CPU_R4000_WORKAROUNDS
|
||||||
|
bool
|
||||||
|
select CPU_R4400_WORKAROUNDS
|
||||||
|
|
||||||
|
config CPU_R4400_WORKAROUNDS
|
||||||
|
bool
|
||||||
|
|
||||||
#
|
#
|
||||||
# Use the generic interrupt handling code in kernel/irq/:
|
# Use the generic interrupt handling code in kernel/irq/:
|
||||||
#
|
#
|
||||||
|
@ -1721,6 +1754,9 @@ config SMP
|
||||||
|
|
||||||
If you don't know what to do here, say N.
|
If you don't know what to do here, say N.
|
||||||
|
|
||||||
|
config SMP_UP
|
||||||
|
bool
|
||||||
|
|
||||||
config SYS_SUPPORTS_SMP
|
config SYS_SUPPORTS_SMP
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
@ -1978,9 +2014,6 @@ config MMU
|
||||||
config I8253
|
config I8253
|
||||||
bool
|
bool
|
||||||
|
|
||||||
config PCSPEAKER
|
|
||||||
bool
|
|
||||||
|
|
||||||
config ZONE_DMA32
|
config ZONE_DMA32
|
||||||
bool
|
bool
|
||||||
|
|
||||||
|
|
|
@ -141,6 +141,10 @@ cflags-$(CONFIG_CPU_R8000) += -march=r8000 -Wa,--trap
|
||||||
cflags-$(CONFIG_CPU_R10000) += $(call cc-option,-march=r10000,-march=r8000) \
|
cflags-$(CONFIG_CPU_R10000) += $(call cc-option,-march=r10000,-march=r8000) \
|
||||||
-Wa,--trap
|
-Wa,--trap
|
||||||
|
|
||||||
|
cflags-$(CONFIG_CPU_R4000_WORKAROUNDS) += $(call cc-option,-mfix-r4000,)
|
||||||
|
cflags-$(CONFIG_CPU_R4400_WORKAROUNDS) += $(call cc-option,-mfix-r4400,)
|
||||||
|
cflags-$(CONFIG_CPU_DADDI_WORKAROUNDS) += $(call cc-option,-mno-daddi,)
|
||||||
|
|
||||||
ifdef CONFIG_CPU_SB1
|
ifdef CONFIG_CPU_SB1
|
||||||
ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
|
ifdef CONFIG_SB1_PASS_1_WORKAROUNDS
|
||||||
MODFLAGS += -msb1-pass1-workarounds
|
MODFLAGS += -msb1-pass1-workarounds
|
||||||
|
@ -152,6 +156,8 @@ endif
|
||||||
#
|
#
|
||||||
libs-$(CONFIG_ARC) += arch/mips/fw/arc/
|
libs-$(CONFIG_ARC) += arch/mips/fw/arc/
|
||||||
libs-$(CONFIG_CFE) += arch/mips/fw/cfe/
|
libs-$(CONFIG_CFE) += arch/mips/fw/cfe/
|
||||||
|
libs-$(CONFIG_SNIPROM) += arch/mips/fw/sni/
|
||||||
|
libs-y += arch/mips/fw/lib/
|
||||||
libs-$(CONFIG_SIBYTE_CFE) += arch/mips/sibyte/cfe/
|
libs-$(CONFIG_SIBYTE_CFE) += arch/mips/sibyte/cfe/
|
||||||
|
|
||||||
#
|
#
|
||||||
|
@ -308,7 +314,7 @@ core-$(CONFIG_MIPS_ATLAS) += arch/mips/mips-boards/atlas/
|
||||||
cflags-$(CONFIG_MIPS_ATLAS) += -Iinclude/asm-mips/mach-atlas
|
cflags-$(CONFIG_MIPS_ATLAS) += -Iinclude/asm-mips/mach-atlas
|
||||||
cflags-$(CONFIG_MIPS_ATLAS) += -Iinclude/asm-mips/mach-mips
|
cflags-$(CONFIG_MIPS_ATLAS) += -Iinclude/asm-mips/mach-mips
|
||||||
load-$(CONFIG_MIPS_ATLAS) += 0xffffffff80100000
|
load-$(CONFIG_MIPS_ATLAS) += 0xffffffff80100000
|
||||||
all-$(CONFIG_MIPS_ATLAS) := vmlinux.srec
|
all-$(CONFIG_MIPS_ATLAS) := vmlinux.bin
|
||||||
|
|
||||||
#
|
#
|
||||||
# MIPS Malta board
|
# MIPS Malta board
|
||||||
|
@ -316,7 +322,7 @@ all-$(CONFIG_MIPS_ATLAS) := vmlinux.srec
|
||||||
core-$(CONFIG_MIPS_MALTA) += arch/mips/mips-boards/malta/
|
core-$(CONFIG_MIPS_MALTA) += arch/mips/mips-boards/malta/
|
||||||
cflags-$(CONFIG_MIPS_MALTA) += -Iinclude/asm-mips/mach-mips
|
cflags-$(CONFIG_MIPS_MALTA) += -Iinclude/asm-mips/mach-mips
|
||||||
load-$(CONFIG_MIPS_MALTA) += 0xffffffff80100000
|
load-$(CONFIG_MIPS_MALTA) += 0xffffffff80100000
|
||||||
all-$(CONFIG_MIPS_MALTA) := vmlinux.srec
|
all-$(CONFIG_MIPS_MALTA) := vmlinux.bin
|
||||||
|
|
||||||
#
|
#
|
||||||
# MIPS SEAD board
|
# MIPS SEAD board
|
||||||
|
@ -348,14 +354,6 @@ core-$(CONFIG_PMC_YOSEMITE) += arch/mips/pmc-sierra/yosemite/
|
||||||
cflags-$(CONFIG_PMC_YOSEMITE) += -Iinclude/asm-mips/mach-yosemite
|
cflags-$(CONFIG_PMC_YOSEMITE) += -Iinclude/asm-mips/mach-yosemite
|
||||||
load-$(CONFIG_PMC_YOSEMITE) += 0xffffffff80100000
|
load-$(CONFIG_PMC_YOSEMITE) += 0xffffffff80100000
|
||||||
|
|
||||||
#
|
|
||||||
# Qemu simulating MIPS32 4Kc
|
|
||||||
#
|
|
||||||
core-$(CONFIG_QEMU) += arch/mips/qemu/
|
|
||||||
cflags-$(CONFIG_QEMU) += -Iinclude/asm-mips/mach-qemu
|
|
||||||
load-$(CONFIG_QEMU) += 0xffffffff80010000
|
|
||||||
all-$(CONFIG_QEMU) := vmlinux.bin
|
|
||||||
|
|
||||||
#
|
#
|
||||||
# Basler eXcite
|
# Basler eXcite
|
||||||
#
|
#
|
||||||
|
@ -474,6 +472,20 @@ OBJCOPYFLAGS := --change-addresses=0x57ffffff80000000
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
|
#
|
||||||
|
# SGI IP28 (Indigo2 R10k)
|
||||||
|
#
|
||||||
|
# Set the load address to >= 0xa800000020080000 if you want to leave space for
|
||||||
|
# symmon, 0xa800000020004000 for production kernels ? Note that the value must
|
||||||
|
# be 16kb aligned or the handling of the current variable will break.
|
||||||
|
# Simplified: what IP22 does at 128MB+ in ksegN, IP28 does at 512MB+ in xkphys
|
||||||
|
#
|
||||||
|
#core-$(CONFIG_SGI_IP28) += arch/mips/sgi-ip22/ arch/mips/arc/arc_con.o
|
||||||
|
core-$(CONFIG_SGI_IP28) += arch/mips/sgi-ip22/
|
||||||
|
cflags-$(CONFIG_SGI_IP28) += -mr10k-cache-barrier=1 -Iinclude/asm-mips/mach-ip28
|
||||||
|
#cflags-$(CONFIG_SGI_IP28) += -Iinclude/asm-mips/mach-ip28
|
||||||
|
load-$(CONFIG_SGI_IP28) += 0xa800000020004000
|
||||||
|
|
||||||
#
|
#
|
||||||
# SGI-IP32 (O2)
|
# SGI-IP32 (O2)
|
||||||
#
|
#
|
||||||
|
@ -602,9 +614,11 @@ ifdef CONFIG_64BIT
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
||||||
ifeq ($(KBUILD_SYM32), y)
|
ifeq ($(KBUILD_SYM32)$(call cc-option-yn,-msym32), yy)
|
||||||
ifeq ($(call cc-option-yn,-msym32), y)
|
cflags-y += -msym32 -DKBUILD_64BIT_SYM32
|
||||||
cflags-y += -msym32 -DKBUILD_64BIT_SYM32
|
else
|
||||||
|
ifeq ($(CONFIG_CPU_DADDI_WORKAROUNDS), y)
|
||||||
|
$(error CONFIG_CPU_DADDI_WORKAROUNDS unsupported without -msym32)
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -25,27 +25,10 @@
|
||||||
* with this program; if not, write to the Free Software Foundation, Inc.,
|
* with this program; if not, write to the Free Software Foundation, Inc.,
|
||||||
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
* 675 Mass Ave, Cambridge, MA 02139, USA.
|
||||||
*/
|
*/
|
||||||
#include <linux/errno.h>
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/irq.h>
|
#include <linux/kernel.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/delay.h>
|
|
||||||
#include <linux/bitops.h>
|
|
||||||
|
|
||||||
#include <asm/bootinfo.h>
|
#include <au1000.h>
|
||||||
#include <asm/io.h>
|
|
||||||
#include <asm/mipsregs.h>
|
|
||||||
#include <asm/system.h>
|
|
||||||
#include <asm/mach-au1x00/au1000.h>
|
|
||||||
|
|
||||||
/* The IC0 interrupt table. This is processor, rather than
|
/* The IC0 interrupt table. This is processor, rather than
|
||||||
* board dependent, so no reason to keep this info in the board
|
* board dependent, so no reason to keep this info in the board
|
||||||
|
|
|
@ -179,7 +179,7 @@ static dbdev_tab_t dbdev_tab[] = {
|
||||||
{ 0, 0, 0, 0, 0, 0, 0 },
|
{ 0, 0, 0, 0, 0, 0, 0 },
|
||||||
};
|
};
|
||||||
|
|
||||||
#define DBDEV_TAB_SIZE (sizeof(dbdev_tab) / sizeof(dbdev_tab_t))
|
#define DBDEV_TAB_SIZE ARRAY_SIZE(dbdev_tab)
|
||||||
|
|
||||||
static chan_tab_t *chan_tab_ptr[NUM_DBDMA_CHANS];
|
static chan_tab_t *chan_tab_ptr[NUM_DBDMA_CHANS];
|
||||||
|
|
||||||
|
|
|
@ -57,17 +57,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
/* Set the platform # */
|
|
||||||
#if defined(CONFIG_MIPS_DB1550)
|
|
||||||
mips_machtype = MACH_DB1550;
|
|
||||||
#elif defined(CONFIG_MIPS_DB1500)
|
|
||||||
mips_machtype = MACH_DB1500;
|
|
||||||
#elif defined(CONFIG_MIPS_DB1100)
|
|
||||||
mips_machtype = MACH_DB1100;
|
|
||||||
#else
|
|
||||||
mips_machtype = MACH_DB1000;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
|
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
|
|
|
@ -54,8 +54,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
mips_machtype = MACH_MTX1; /* set the platform # */
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
|
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
|
|
|
@ -22,9 +22,32 @@
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
|
#include <linux/gpio_keys.h>
|
||||||
|
#include <linux/input.h>
|
||||||
|
|
||||||
#include <asm/gpio.h>
|
#include <asm/gpio.h>
|
||||||
|
|
||||||
|
static struct gpio_keys_button mtx1_gpio_button[] = {
|
||||||
|
{
|
||||||
|
.gpio = 207,
|
||||||
|
.code = BTN_0,
|
||||||
|
.desc = "System button",
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct gpio_keys_platform_data mtx1_buttons_data = {
|
||||||
|
.buttons = mtx1_gpio_button,
|
||||||
|
.nbuttons = ARRAY_SIZE(mtx1_gpio_button),
|
||||||
|
};
|
||||||
|
|
||||||
|
static struct platform_device mtx1_button = {
|
||||||
|
.name = "gpio-keys",
|
||||||
|
.id = -1,
|
||||||
|
.dev = {
|
||||||
|
.platform_data = &mtx1_buttons_data,
|
||||||
|
}
|
||||||
|
};
|
||||||
|
|
||||||
static struct resource mtx1_wdt_res[] = {
|
static struct resource mtx1_wdt_res[] = {
|
||||||
[0] = {
|
[0] = {
|
||||||
.start = 15,
|
.start = 15,
|
||||||
|
@ -66,11 +89,13 @@ static struct platform_device mtx1_gpio_leds = {
|
||||||
|
|
||||||
static struct __initdata platform_device * mtx1_devs[] = {
|
static struct __initdata platform_device * mtx1_devs[] = {
|
||||||
&mtx1_gpio_leds,
|
&mtx1_gpio_leds,
|
||||||
&mtx1_wdt
|
&mtx1_wdt,
|
||||||
|
&mtx1_button
|
||||||
};
|
};
|
||||||
|
|
||||||
static int __init mtx1_register_devices(void)
|
static int __init mtx1_register_devices(void)
|
||||||
{
|
{
|
||||||
|
gpio_direction_input(207);
|
||||||
return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
|
return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,8 +52,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
mips_machtype = MACH_PB1000;
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
if (!memsize_str) {
|
if (!memsize_str) {
|
||||||
|
|
|
@ -53,8 +53,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg3;
|
prom_envp = (char **) fw_arg3;
|
||||||
|
|
||||||
mips_machtype = MACH_PB1100;
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
|
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
|
|
|
@ -53,8 +53,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
mips_machtype = MACH_PB1200;
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
if (!memsize_str) {
|
if (!memsize_str) {
|
||||||
|
|
|
@ -53,8 +53,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
mips_machtype = MACH_PB1500;
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
if (!memsize_str) {
|
if (!memsize_str) {
|
||||||
|
|
|
@ -53,8 +53,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
mips_machtype = MACH_PB1550;
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
if (!memsize_str) {
|
if (!memsize_str) {
|
||||||
|
|
|
@ -52,8 +52,6 @@ void __init prom_init(void)
|
||||||
prom_argv = (char **) fw_arg1;
|
prom_argv = (char **) fw_arg1;
|
||||||
prom_envp = (char **) fw_arg2;
|
prom_envp = (char **) fw_arg2;
|
||||||
|
|
||||||
mips_machtype = MACH_XXS1500; /* set the platform # */
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
|
|
||||||
memsize_str = prom_getenv("memsize");
|
memsize_str = prom_getenv("memsize");
|
||||||
|
|
|
@ -0,0 +1,9 @@
|
||||||
|
config BASLER_EXCITE_PROTOTYPE
|
||||||
|
bool "Support for pre-release units"
|
||||||
|
depends on BASLER_EXCITE
|
||||||
|
default n
|
||||||
|
help
|
||||||
|
Pre-series (prototype) units are different from later ones in
|
||||||
|
some ways. Select this option if you have one of these. Please
|
||||||
|
note that a kernel built with this option selected will not be
|
||||||
|
able to run on normal units.
|
|
@ -48,7 +48,7 @@ static DECLARE_WAIT_QUEUE_HEAD(wq);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
static struct file_operations fops =
|
static const struct file_operations fops =
|
||||||
{
|
{
|
||||||
.owner = THIS_MODULE,
|
.owner = THIS_MODULE,
|
||||||
.open = iodev_open,
|
.open = iodev_open,
|
||||||
|
|
|
@ -135,8 +135,6 @@ void __init prom_init(void)
|
||||||
#ifdef CONFIG_64BIT
|
#ifdef CONFIG_64BIT
|
||||||
# error 64 bit support not implemented
|
# error 64 bit support not implemented
|
||||||
#endif /* CONFIG_64BIT */
|
#endif /* CONFIG_64BIT */
|
||||||
|
|
||||||
mips_machtype = MACH_TITAN_EXCITE;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* This is called from free_initmem(), so we need to provide it */
|
/* This is called from free_initmem(), so we need to provide it */
|
||||||
|
|
|
@ -10,9 +10,10 @@
|
||||||
*/
|
*/
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/io.h>
|
#include <linux/io.h>
|
||||||
#include <linux/jiffies.h>
|
|
||||||
#include <linux/leds.h>
|
#include <linux/leds.h>
|
||||||
|
|
||||||
|
#include <asm/processor.h>
|
||||||
|
|
||||||
#include <cobalt.h>
|
#include <cobalt.h>
|
||||||
|
|
||||||
#define RESET_PORT ((void __iomem *)CKSEG1ADDR(0x1c000000))
|
#define RESET_PORT ((void __iomem *)CKSEG1ADDR(0x1c000000))
|
||||||
|
@ -29,28 +30,15 @@ device_initcall(ledtrig_power_off_init);
|
||||||
|
|
||||||
void cobalt_machine_halt(void)
|
void cobalt_machine_halt(void)
|
||||||
{
|
{
|
||||||
int state, last, diff;
|
|
||||||
unsigned long mark;
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* turn on power off LED on RaQ
|
* turn on power off LED on RaQ
|
||||||
*
|
|
||||||
* restart if ENTER and SELECT are pressed
|
|
||||||
*/
|
*/
|
||||||
|
|
||||||
last = COBALT_KEY_PORT;
|
|
||||||
|
|
||||||
led_trigger_event(power_off_led_trigger, LED_FULL);
|
led_trigger_event(power_off_led_trigger, LED_FULL);
|
||||||
|
|
||||||
for (state = 0;;) {
|
local_irq_disable();
|
||||||
diff = COBALT_KEY_PORT ^ last;
|
while (1) {
|
||||||
last ^= diff;
|
if (cpu_wait)
|
||||||
|
cpu_wait();
|
||||||
if((diff & (COBALT_KEY_ENTER | COBALT_KEY_SELECT)) && !(~last & (COBALT_KEY_ENTER | COBALT_KEY_SELECT)))
|
|
||||||
writeb(RESET, RESET_PORT);
|
|
||||||
|
|
||||||
for (mark = jiffies; jiffies - mark < HZ;)
|
|
||||||
;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_MIPS_ATLAS=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_MIPS_ATLAS=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_SIBYTE_BIGSUR=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MIPS_COBALT=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MIPS_COBALT=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_DB1000=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_DB1000=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_DB1100=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_DB1100=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_DB1200=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_DB1200=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_DB1500=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_DB1500=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_DB1550=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_DB1550=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_MACH_DECSTATION=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_MACH_DECSTATION=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
CONFIG_MARKEINS=y
|
CONFIG_MARKEINS=y
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_MARKEINS=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_BASLER_EXCITE=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_BASLER_EXCITE=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -23,7 +23,6 @@ CONFIG_LEMOTE_FULONG=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -33,7 +32,6 @@ CONFIG_LEMOTE_FULONG=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -25,7 +25,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
CONFIG_SGI_IP22=y
|
CONFIG_SGI_IP22=y
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -36,7 +35,6 @@ CONFIG_SGI_IP22=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MIPS=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
CONFIG_SGI_IP27=y
|
CONFIG_SGI_IP27=y
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_SGI_IP27=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_SGI_IP32=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_MACH_JAZZ=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_MACH_JAZZ=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MIPS=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MIPS=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
CONFIG_TOSHIBA_JMR3927=y
|
CONFIG_TOSHIBA_JMR3927=y
|
||||||
|
@ -464,7 +462,6 @@ CONFIG_SERIAL_TXX9_STDSERIAL=y
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
# CONFIG_IPMI_HANDLER is not set
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
|
||||||
# CONFIG_HW_RANDOM is not set
|
# CONFIG_HW_RANDOM is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
|
@ -482,6 +479,20 @@ CONFIG_DEVPORT=y
|
||||||
# CONFIG_W1 is not set
|
# CONFIG_W1 is not set
|
||||||
# CONFIG_POWER_SUPPLY is not set
|
# CONFIG_POWER_SUPPLY is not set
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
|
CONFIG_WATCHDOG=y
|
||||||
|
# CONFIG_WATCHDOG_NOWAYOUT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Watchdog Device Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_SOFT_WATCHDOG is not set
|
||||||
|
CONFIG_TXX9_WDT=y
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCI-based Watchdog Cards
|
||||||
|
#
|
||||||
|
# CONFIG_PCIPCWATCHDOG is not set
|
||||||
|
# CONFIG_WDTPCI is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
|
|
|
@ -25,7 +25,6 @@ CONFIG_LASAT=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -36,7 +35,6 @@ CONFIG_LASAT=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -25,7 +25,6 @@ CONFIG_MIPS_MALTA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -36,7 +35,6 @@ CONFIG_MIPS_MALTA=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -26,7 +26,6 @@ CONFIG_MIPS_SIM=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -37,7 +36,6 @@ CONFIG_MIPS_SIM=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
CONFIG_PMC_MSP=y
|
CONFIG_PMC_MSP=y
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_PMC_MSP=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_ALCHEMY=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_ALCHEMY=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
@ -1617,6 +1615,7 @@ CONFIG_INPUT_EVBUG=m
|
||||||
#
|
#
|
||||||
CONFIG_INPUT_KEYBOARD=y
|
CONFIG_INPUT_KEYBOARD=y
|
||||||
CONFIG_KEYBOARD_ATKBD=y
|
CONFIG_KEYBOARD_ATKBD=y
|
||||||
|
CONFIG_KEYBOARD_GPIO=y
|
||||||
CONFIG_KEYBOARD_SUNKBD=m
|
CONFIG_KEYBOARD_SUNKBD=m
|
||||||
CONFIG_KEYBOARD_LKKBD=m
|
CONFIG_KEYBOARD_LKKBD=m
|
||||||
CONFIG_KEYBOARD_XTKBD=m
|
CONFIG_KEYBOARD_XTKBD=m
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_PB1100=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_PB1100=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_PB1500=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_PB1500=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -38,7 +38,6 @@ CONFIG_MIPS_PB1550=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -48,7 +47,6 @@ CONFIG_MIPS_PB1550=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_PNX8550_JBS=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_PNX8550_JBS=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
CONFIG_PNX8550_STB810=y
|
CONFIG_PNX8550_STB810=y
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_PNX8550_STB810=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
CONFIG_QEMU=y
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_QEMU=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MIPS=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MIPS=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
@ -431,7 +429,6 @@ CONFIG_UNIX98_PTYS=y
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
# CONFIG_IPMI_HANDLER is not set
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
|
||||||
# CONFIG_HW_RANDOM is not set
|
# CONFIG_HW_RANDOM is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
|
@ -449,6 +446,20 @@ CONFIG_DEVPORT=y
|
||||||
# CONFIG_W1 is not set
|
# CONFIG_W1 is not set
|
||||||
# CONFIG_POWER_SUPPLY is not set
|
# CONFIG_POWER_SUPPLY is not set
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
|
CONFIG_WATCHDOG=y
|
||||||
|
# CONFIG_WATCHDOG_NOWAYOUT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Watchdog Device Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_SOFT_WATCHDOG is not set
|
||||||
|
CONFIG_TXX9_WDT=m
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCI-based Watchdog Cards
|
||||||
|
#
|
||||||
|
# CONFIG_PCIPCWATCHDOG is not set
|
||||||
|
# CONFIG_WDTPCI is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MIPS=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MIPS=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
@ -450,7 +448,6 @@ CONFIG_UNIX98_PTYS=y
|
||||||
CONFIG_LEGACY_PTYS=y
|
CONFIG_LEGACY_PTYS=y
|
||||||
CONFIG_LEGACY_PTY_COUNT=256
|
CONFIG_LEGACY_PTY_COUNT=256
|
||||||
# CONFIG_IPMI_HANDLER is not set
|
# CONFIG_IPMI_HANDLER is not set
|
||||||
# CONFIG_WATCHDOG is not set
|
|
||||||
# CONFIG_HW_RANDOM is not set
|
# CONFIG_HW_RANDOM is not set
|
||||||
# CONFIG_RTC is not set
|
# CONFIG_RTC is not set
|
||||||
# CONFIG_R3964 is not set
|
# CONFIG_R3964 is not set
|
||||||
|
@ -479,6 +476,20 @@ CONFIG_SPI_AT25=y
|
||||||
# CONFIG_W1 is not set
|
# CONFIG_W1 is not set
|
||||||
# CONFIG_POWER_SUPPLY is not set
|
# CONFIG_POWER_SUPPLY is not set
|
||||||
# CONFIG_HWMON is not set
|
# CONFIG_HWMON is not set
|
||||||
|
CONFIG_WATCHDOG=y
|
||||||
|
# CONFIG_WATCHDOG_NOWAYOUT is not set
|
||||||
|
|
||||||
|
#
|
||||||
|
# Watchdog Device Drivers
|
||||||
|
#
|
||||||
|
# CONFIG_SOFT_WATCHDOG is not set
|
||||||
|
CONFIG_TXX9_WDT=m
|
||||||
|
|
||||||
|
#
|
||||||
|
# PCI-based Watchdog Cards
|
||||||
|
#
|
||||||
|
# CONFIG_PCIPCWATCHDOG is not set
|
||||||
|
# CONFIG_WDTPCI is not set
|
||||||
|
|
||||||
#
|
#
|
||||||
# Multifunction device drivers
|
# Multifunction device drivers
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_SIBYTE_SWARM=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_MIPS_SEAD=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_MIPS_SEAD=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -35,7 +34,6 @@ CONFIG_MACH_VR41XX=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_WR_PPMC=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_WR_PPMC=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_MACH_VR41XX is not set
|
# CONFIG_MACH_VR41XX is not set
|
||||||
CONFIG_PMC_YOSEMITE=y
|
CONFIG_PMC_YOSEMITE=y
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
# CONFIG_MARKEINS is not set
|
# CONFIG_MARKEINS is not set
|
||||||
# CONFIG_SGI_IP22 is not set
|
# CONFIG_SGI_IP22 is not set
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
|
@ -47,7 +46,6 @@ CONFIG_PMC_YOSEMITE=y
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_RHONE is not set
|
# CONFIG_SIBYTE_RHONE is not set
|
||||||
# CONFIG_SIBYTE_CARMEL is not set
|
# CONFIG_SIBYTE_CARMEL is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_CRHINE is not set
|
# CONFIG_SIBYTE_CRHINE is not set
|
||||||
# CONFIG_SIBYTE_CRHONE is not set
|
# CONFIG_SIBYTE_CRHONE is not set
|
||||||
|
|
|
@ -161,7 +161,6 @@ static cycle_t dec_ioasic_hpt_read(void)
|
||||||
|
|
||||||
void __init plat_time_init(void)
|
void __init plat_time_init(void)
|
||||||
{
|
{
|
||||||
mips_timer_state = dec_timer_state;
|
|
||||||
mips_timer_ack = dec_timer_ack;
|
mips_timer_ack = dec_timer_ack;
|
||||||
|
|
||||||
if (!cpu_has_counter && IOASIC)
|
if (!cpu_has_counter && IOASIC)
|
||||||
|
|
|
@ -25,7 +25,6 @@ CONFIG_ZONE_DMA=y
|
||||||
# CONFIG_PNX8550_STB810 is not set
|
# CONFIG_PNX8550_STB810 is not set
|
||||||
# CONFIG_PMC_MSP is not set
|
# CONFIG_PMC_MSP is not set
|
||||||
# CONFIG_PMC_YOSEMITE is not set
|
# CONFIG_PMC_YOSEMITE is not set
|
||||||
# CONFIG_QEMU is not set
|
|
||||||
CONFIG_SGI_IP22=y
|
CONFIG_SGI_IP22=y
|
||||||
# CONFIG_SGI_IP27 is not set
|
# CONFIG_SGI_IP27 is not set
|
||||||
# CONFIG_SGI_IP32 is not set
|
# CONFIG_SGI_IP32 is not set
|
||||||
|
@ -36,7 +35,6 @@ CONFIG_SGI_IP22=y
|
||||||
# CONFIG_SIBYTE_SWARM is not set
|
# CONFIG_SIBYTE_SWARM is not set
|
||||||
# CONFIG_SIBYTE_LITTLESUR is not set
|
# CONFIG_SIBYTE_LITTLESUR is not set
|
||||||
# CONFIG_SIBYTE_SENTOSA is not set
|
# CONFIG_SIBYTE_SENTOSA is not set
|
||||||
# CONFIG_SIBYTE_PTSWARM is not set
|
|
||||||
# CONFIG_SIBYTE_BIGSUR is not set
|
# CONFIG_SIBYTE_BIGSUR is not set
|
||||||
# CONFIG_SNI_RM is not set
|
# CONFIG_SNI_RM is not set
|
||||||
# CONFIG_TOSHIBA_JMR3927 is not set
|
# CONFIG_TOSHIBA_JMR3927 is not set
|
||||||
|
|
|
@ -52,7 +52,7 @@ static char * __init move_firmware_args(char* cp)
|
||||||
strcat(cp, used_arc[i][1]);
|
strcat(cp, used_arc[i][1]);
|
||||||
cp += strlen(used_arc[i][1]);
|
cp += strlen(used_arc[i][1]);
|
||||||
/* ... and now the argument */
|
/* ... and now the argument */
|
||||||
s = strstr(prom_argv(actr), "=");
|
s = strchr(prom_argv(actr), '=');
|
||||||
if (s) {
|
if (s) {
|
||||||
s++;
|
s++;
|
||||||
strcpy(cp, s);
|
strcpy(cp, s);
|
||||||
|
|
|
@ -12,6 +12,7 @@
|
||||||
|
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
#include <asm/sgialib.h>
|
#include <asm/sgialib.h>
|
||||||
|
#include <asm/smp-ops.h>
|
||||||
|
|
||||||
#undef DEBUG_PROM_INIT
|
#undef DEBUG_PROM_INIT
|
||||||
|
|
||||||
|
@ -48,4 +49,11 @@ void __init prom_init(void)
|
||||||
ArcRead(0, &c, 1, &cnt);
|
ArcRead(0, &c, 1, &cnt);
|
||||||
ArcEnterInteractiveMode();
|
ArcEnterInteractiveMode();
|
||||||
#endif
|
#endif
|
||||||
|
#ifdef CONFIG_SGI_IP27
|
||||||
|
{
|
||||||
|
extern struct plat_smp_ops ip27_smp_ops;
|
||||||
|
|
||||||
|
register_smp_ops(&ip27_smp_ops);
|
||||||
|
}
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,19 +16,16 @@
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* *********************************************************************
|
/*
|
||||||
*
|
*
|
||||||
* Broadcom Common Firmware Environment (CFE)
|
* Broadcom Common Firmware Environment (CFE)
|
||||||
*
|
*
|
||||||
* Device Function stubs File: cfe_api.c
|
* This module contains device function stubs (small routines to
|
||||||
*
|
* call the standard "iocb" interface entry point to CFE).
|
||||||
* This module contains device function stubs (small routines to
|
* There should be one routine here per iocb function call.
|
||||||
* call the standard "iocb" interface entry point to CFE).
|
*
|
||||||
* There should be one routine here per iocb function call.
|
* Authors: Mitch Lichtenberg, Chris Demetriou
|
||||||
*
|
*/
|
||||||
* Authors: Mitch Lichtenberg, Chris Demetriou
|
|
||||||
*
|
|
||||||
********************************************************************* */
|
|
||||||
|
|
||||||
#include <asm/fw/cfe/cfe_api.h>
|
#include <asm/fw/cfe/cfe_api.h>
|
||||||
#include "cfe_api_int.h"
|
#include "cfe_api_int.h"
|
||||||
|
@ -37,12 +34,8 @@
|
||||||
#define XPTR_FROM_NATIVE(n) ((cfe_xptr_t) (intptr_t) (n))
|
#define XPTR_FROM_NATIVE(n) ((cfe_xptr_t) (intptr_t) (n))
|
||||||
#define NATIVE_FROM_XPTR(x) ((void *) (intptr_t) (x))
|
#define NATIVE_FROM_XPTR(x) ((void *) (intptr_t) (x))
|
||||||
|
|
||||||
#ifdef CFE_API_IMPL_NAMESPACE
|
int cfe_iocb_dispatch(struct cfe_xiocb *xiocb);
|
||||||
#define cfe_iocb_dispatch(a) __cfe_iocb_dispatch(a)
|
|
||||||
#endif
|
|
||||||
int cfe_iocb_dispatch(cfe_xiocb_t * xiocb);
|
|
||||||
|
|
||||||
#if defined(CFE_API_common) || defined(CFE_API_ALL)
|
|
||||||
/*
|
/*
|
||||||
* Declare the dispatch function with args of "intptr_t".
|
* Declare the dispatch function with args of "intptr_t".
|
||||||
* This makes sure whatever model we're compiling in
|
* This makes sure whatever model we're compiling in
|
||||||
|
@ -53,27 +46,25 @@ int cfe_iocb_dispatch(cfe_xiocb_t * xiocb);
|
||||||
*/
|
*/
|
||||||
|
|
||||||
static int (*cfe_dispfunc) (intptr_t handle, intptr_t xiocb) = 0;
|
static int (*cfe_dispfunc) (intptr_t handle, intptr_t xiocb) = 0;
|
||||||
static cfe_xuint_t cfe_handle = 0;
|
static u64 cfe_handle = 0;
|
||||||
|
|
||||||
int cfe_init(cfe_xuint_t handle, cfe_xuint_t ept)
|
int cfe_init(u64 handle, u64 ept)
|
||||||
{
|
{
|
||||||
cfe_dispfunc = NATIVE_FROM_XPTR(ept);
|
cfe_dispfunc = NATIVE_FROM_XPTR(ept);
|
||||||
cfe_handle = handle;
|
cfe_handle = handle;
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
int cfe_iocb_dispatch(cfe_xiocb_t * xiocb)
|
int cfe_iocb_dispatch(struct cfe_xiocb * xiocb)
|
||||||
{
|
{
|
||||||
if (!cfe_dispfunc)
|
if (!cfe_dispfunc)
|
||||||
return -1;
|
return -1;
|
||||||
return (*cfe_dispfunc) ((intptr_t) cfe_handle, (intptr_t) xiocb);
|
return (*cfe_dispfunc) ((intptr_t) cfe_handle, (intptr_t) xiocb);
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_common || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_close) || defined(CFE_API_ALL)
|
|
||||||
int cfe_close(int handle)
|
int cfe_close(int handle)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_CLOSE;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_CLOSE;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
|
@ -86,18 +77,16 @@ int cfe_close(int handle)
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_close || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_cpu_start) || defined(CFE_API_ALL)
|
|
||||||
int cfe_cpu_start(int cpu, void (*fn) (void), long sp, long gp, long a1)
|
int cfe_cpu_start(int cpu, void (*fn) (void), long sp, long gp, long a1)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_FW_CPUCTL;
|
xiocb.xiocb_fcode = CFE_CMD_FW_CPUCTL;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_cpuctl_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_cpuctl);
|
||||||
xiocb.plist.xiocb_cpuctl.cpu_number = cpu;
|
xiocb.plist.xiocb_cpuctl.cpu_number = cpu;
|
||||||
xiocb.plist.xiocb_cpuctl.cpu_command = CFE_CPU_CMD_START;
|
xiocb.plist.xiocb_cpuctl.cpu_command = CFE_CPU_CMD_START;
|
||||||
xiocb.plist.xiocb_cpuctl.gp_val = gp;
|
xiocb.plist.xiocb_cpuctl.gp_val = gp;
|
||||||
|
@ -109,18 +98,16 @@ int cfe_cpu_start(int cpu, void (*fn) (void), long sp, long gp, long a1)
|
||||||
|
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_cpu_start || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_cpu_stop) || defined(CFE_API_ALL)
|
|
||||||
int cfe_cpu_stop(int cpu)
|
int cfe_cpu_stop(int cpu)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_FW_CPUCTL;
|
xiocb.xiocb_fcode = CFE_CMD_FW_CPUCTL;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_cpuctl_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_cpuctl);
|
||||||
xiocb.plist.xiocb_cpuctl.cpu_number = cpu;
|
xiocb.plist.xiocb_cpuctl.cpu_number = cpu;
|
||||||
xiocb.plist.xiocb_cpuctl.cpu_command = CFE_CPU_CMD_STOP;
|
xiocb.plist.xiocb_cpuctl.cpu_command = CFE_CPU_CMD_STOP;
|
||||||
|
|
||||||
|
@ -128,18 +115,16 @@ int cfe_cpu_stop(int cpu)
|
||||||
|
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_cpu_stop || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_enumenv) || defined(CFE_API_ALL)
|
|
||||||
int cfe_enumenv(int idx, char *name, int namelen, char *val, int vallen)
|
int cfe_enumenv(int idx, char *name, int namelen, char *val, int vallen)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
|
xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_envbuf_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_envbuf);
|
||||||
xiocb.plist.xiocb_envbuf.enum_idx = idx;
|
xiocb.plist.xiocb_envbuf.enum_idx = idx;
|
||||||
xiocb.plist.xiocb_envbuf.name_ptr = XPTR_FROM_NATIVE(name);
|
xiocb.plist.xiocb_envbuf.name_ptr = XPTR_FROM_NATIVE(name);
|
||||||
xiocb.plist.xiocb_envbuf.name_length = namelen;
|
xiocb.plist.xiocb_envbuf.name_length = namelen;
|
||||||
|
@ -150,20 +135,17 @@ int cfe_enumenv(int idx, char *name, int namelen, char *val, int vallen)
|
||||||
|
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_enumenv || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_enummem) || defined(CFE_API_ALL)
|
|
||||||
int
|
int
|
||||||
cfe_enummem(int idx, int flags, cfe_xuint_t * start, cfe_xuint_t * length,
|
cfe_enummem(int idx, int flags, u64 *start, u64 *length, u64 *type)
|
||||||
cfe_xuint_t * type)
|
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_FW_MEMENUM;
|
xiocb.xiocb_fcode = CFE_CMD_FW_MEMENUM;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = flags;
|
xiocb.xiocb_flags = flags;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_meminfo_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_meminfo);
|
||||||
xiocb.plist.xiocb_meminfo.mi_idx = idx;
|
xiocb.plist.xiocb_meminfo.mi_idx = idx;
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
@ -177,30 +159,26 @@ cfe_enummem(int idx, int flags, cfe_xuint_t * start, cfe_xuint_t * length,
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_enummem || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_exit) || defined(CFE_API_ALL)
|
|
||||||
int cfe_exit(int warm, int status)
|
int cfe_exit(int warm, int status)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_FW_RESTART;
|
xiocb.xiocb_fcode = CFE_CMD_FW_RESTART;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = warm ? CFE_FLG_WARMSTART : 0;
|
xiocb.xiocb_flags = warm ? CFE_FLG_WARMSTART : 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_exitstat_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_exitstat);
|
||||||
xiocb.plist.xiocb_exitstat.status = status;
|
xiocb.plist.xiocb_exitstat.status = status;
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_exit || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_flushcache) || defined(CFE_API_ALL)
|
|
||||||
int cfe_flushcache(int flg)
|
int cfe_flushcache(int flg)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_FW_FLUSHCACHE;
|
xiocb.xiocb_fcode = CFE_CMD_FW_FLUSHCACHE;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
|
@ -212,34 +190,30 @@ int cfe_flushcache(int flg)
|
||||||
|
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_flushcache || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_getdevinfo) || defined(CFE_API_ALL)
|
|
||||||
int cfe_getdevinfo(char *name)
|
int cfe_getdevinfo(char *name)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_GETINFO;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_GETINFO;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_buffer);
|
||||||
xiocb.plist.xiocb_buffer.buf_offset = 0;
|
xiocb.plist.xiocb_buffer.buf_offset = 0;
|
||||||
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(name);
|
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(name);
|
||||||
xiocb.plist.xiocb_buffer.buf_length = cfe_strlen(name);
|
xiocb.plist.xiocb_buffer.buf_length = strlen(name);
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
|
||||||
if (xiocb.xiocb_status < 0)
|
if (xiocb.xiocb_status < 0)
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
return xiocb.plist.xiocb_buffer.buf_devflags;
|
return xiocb.plist.xiocb_buffer.buf_ioctlcmd;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_getdevinfo || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_getenv) || defined(CFE_API_ALL)
|
|
||||||
int cfe_getenv(char *name, char *dest, int destlen)
|
int cfe_getenv(char *name, char *dest, int destlen)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
*dest = 0;
|
*dest = 0;
|
||||||
|
|
||||||
|
@ -247,10 +221,10 @@ int cfe_getenv(char *name, char *dest, int destlen)
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_envbuf_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_envbuf);
|
||||||
xiocb.plist.xiocb_envbuf.enum_idx = 0;
|
xiocb.plist.xiocb_envbuf.enum_idx = 0;
|
||||||
xiocb.plist.xiocb_envbuf.name_ptr = XPTR_FROM_NATIVE(name);
|
xiocb.plist.xiocb_envbuf.name_ptr = XPTR_FROM_NATIVE(name);
|
||||||
xiocb.plist.xiocb_envbuf.name_length = cfe_strlen(name);
|
xiocb.plist.xiocb_envbuf.name_length = strlen(name);
|
||||||
xiocb.plist.xiocb_envbuf.val_ptr = XPTR_FROM_NATIVE(dest);
|
xiocb.plist.xiocb_envbuf.val_ptr = XPTR_FROM_NATIVE(dest);
|
||||||
xiocb.plist.xiocb_envbuf.val_length = destlen;
|
xiocb.plist.xiocb_envbuf.val_length = destlen;
|
||||||
|
|
||||||
|
@ -258,18 +232,16 @@ int cfe_getenv(char *name, char *dest, int destlen)
|
||||||
|
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_getenv || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_getfwinfo) || defined(CFE_API_ALL)
|
|
||||||
int cfe_getfwinfo(cfe_fwinfo_t * info)
|
int cfe_getfwinfo(cfe_fwinfo_t * info)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_FW_GETINFO;
|
xiocb.xiocb_fcode = CFE_CMD_FW_GETINFO;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_fwinfo_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_fwinfo);
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
|
||||||
|
@ -292,12 +264,10 @@ int cfe_getfwinfo(cfe_fwinfo_t * info)
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_getfwinfo || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_getstdhandle) || defined(CFE_API_ALL)
|
|
||||||
int cfe_getstdhandle(int flg)
|
int cfe_getstdhandle(int flg)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_GETHANDLE;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_GETHANDLE;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
|
@ -311,23 +281,17 @@ int cfe_getstdhandle(int flg)
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
return xiocb.xiocb_handle;
|
return xiocb.xiocb_handle;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_getstdhandle || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_getticks) || defined(CFE_API_ALL)
|
|
||||||
int64_t
|
int64_t
|
||||||
#ifdef CFE_API_IMPL_NAMESPACE
|
|
||||||
__cfe_getticks(void)
|
|
||||||
#else
|
|
||||||
cfe_getticks(void)
|
cfe_getticks(void)
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_FW_GETTIME;
|
xiocb.xiocb_fcode = CFE_CMD_FW_GETTIME;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_time_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_time);
|
||||||
xiocb.plist.xiocb_time.ticks = 0;
|
xiocb.plist.xiocb_time.ticks = 0;
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
@ -335,18 +299,16 @@ cfe_getticks(void)
|
||||||
return xiocb.plist.xiocb_time.ticks;
|
return xiocb.plist.xiocb_time.ticks;
|
||||||
|
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_getticks || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_inpstat) || defined(CFE_API_ALL)
|
|
||||||
int cfe_inpstat(int handle)
|
int cfe_inpstat(int handle)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_INPSTAT;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_INPSTAT;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = handle;
|
xiocb.xiocb_handle = handle;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_inpstat_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_inpstat);
|
||||||
xiocb.plist.xiocb_inpstat.inp_status = 0;
|
xiocb.plist.xiocb_inpstat.inp_status = 0;
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
@ -355,20 +317,18 @@ int cfe_inpstat(int handle)
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
return xiocb.plist.xiocb_inpstat.inp_status;
|
return xiocb.plist.xiocb_inpstat.inp_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_inpstat || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_ioctl) || defined(CFE_API_ALL)
|
|
||||||
int
|
int
|
||||||
cfe_ioctl(int handle, unsigned int ioctlnum, unsigned char *buffer,
|
cfe_ioctl(int handle, unsigned int ioctlnum, unsigned char *buffer,
|
||||||
int length, int *retlen, cfe_xuint_t offset)
|
int length, int *retlen, u64 offset)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_IOCTL;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_IOCTL;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = handle;
|
xiocb.xiocb_handle = handle;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_buffer);
|
||||||
xiocb.plist.xiocb_buffer.buf_offset = offset;
|
xiocb.plist.xiocb_buffer.buf_offset = offset;
|
||||||
xiocb.plist.xiocb_buffer.buf_ioctlcmd = ioctlnum;
|
xiocb.plist.xiocb_buffer.buf_ioctlcmd = ioctlnum;
|
||||||
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(buffer);
|
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(buffer);
|
||||||
|
@ -380,21 +340,19 @@ cfe_ioctl(int handle, unsigned int ioctlnum, unsigned char *buffer,
|
||||||
*retlen = xiocb.plist.xiocb_buffer.buf_retlen;
|
*retlen = xiocb.plist.xiocb_buffer.buf_retlen;
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_ioctl || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_open) || defined(CFE_API_ALL)
|
|
||||||
int cfe_open(char *name)
|
int cfe_open(char *name)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_OPEN;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_OPEN;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_buffer);
|
||||||
xiocb.plist.xiocb_buffer.buf_offset = 0;
|
xiocb.plist.xiocb_buffer.buf_offset = 0;
|
||||||
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(name);
|
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(name);
|
||||||
xiocb.plist.xiocb_buffer.buf_length = cfe_strlen(name);
|
xiocb.plist.xiocb_buffer.buf_length = strlen(name);
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
|
||||||
|
@ -402,27 +360,21 @@ int cfe_open(char *name)
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
return xiocb.xiocb_handle;
|
return xiocb.xiocb_handle;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_open || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_read) || defined(CFE_API_ALL)
|
|
||||||
int cfe_read(int handle, unsigned char *buffer, int length)
|
int cfe_read(int handle, unsigned char *buffer, int length)
|
||||||
{
|
{
|
||||||
return cfe_readblk(handle, 0, buffer, length);
|
return cfe_readblk(handle, 0, buffer, length);
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_read || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_readblk) || defined(CFE_API_ALL)
|
int cfe_readblk(int handle, s64 offset, unsigned char *buffer, int length)
|
||||||
int
|
|
||||||
cfe_readblk(int handle, cfe_xint_t offset, unsigned char *buffer,
|
|
||||||
int length)
|
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_READ;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_READ;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = handle;
|
xiocb.xiocb_handle = handle;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_buffer);
|
||||||
xiocb.plist.xiocb_buffer.buf_offset = offset;
|
xiocb.plist.xiocb_buffer.buf_offset = offset;
|
||||||
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(buffer);
|
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(buffer);
|
||||||
xiocb.plist.xiocb_buffer.buf_length = length;
|
xiocb.plist.xiocb_buffer.buf_length = length;
|
||||||
|
@ -433,62 +385,41 @@ cfe_readblk(int handle, cfe_xint_t offset, unsigned char *buffer,
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
return xiocb.plist.xiocb_buffer.buf_retlen;
|
return xiocb.plist.xiocb_buffer.buf_retlen;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_readblk || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_setenv) || defined(CFE_API_ALL)
|
|
||||||
int cfe_setenv(char *name, char *val)
|
int cfe_setenv(char *name, char *val)
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
|
xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = 0;
|
xiocb.xiocb_handle = 0;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_envbuf_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_envbuf);
|
||||||
xiocb.plist.xiocb_envbuf.enum_idx = 0;
|
xiocb.plist.xiocb_envbuf.enum_idx = 0;
|
||||||
xiocb.plist.xiocb_envbuf.name_ptr = XPTR_FROM_NATIVE(name);
|
xiocb.plist.xiocb_envbuf.name_ptr = XPTR_FROM_NATIVE(name);
|
||||||
xiocb.plist.xiocb_envbuf.name_length = cfe_strlen(name);
|
xiocb.plist.xiocb_envbuf.name_length = strlen(name);
|
||||||
xiocb.plist.xiocb_envbuf.val_ptr = XPTR_FROM_NATIVE(val);
|
xiocb.plist.xiocb_envbuf.val_ptr = XPTR_FROM_NATIVE(val);
|
||||||
xiocb.plist.xiocb_envbuf.val_length = cfe_strlen(val);
|
xiocb.plist.xiocb_envbuf.val_length = strlen(val);
|
||||||
|
|
||||||
cfe_iocb_dispatch(&xiocb);
|
cfe_iocb_dispatch(&xiocb);
|
||||||
|
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_setenv || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if (defined(CFE_API_strlen) || defined(CFE_API_ALL)) \
|
|
||||||
&& !defined(CFE_API_STRLEN_CUSTOM)
|
|
||||||
int cfe_strlen(char *name)
|
|
||||||
{
|
|
||||||
int count = 0;
|
|
||||||
|
|
||||||
while (*name++)
|
|
||||||
count++;
|
|
||||||
|
|
||||||
return count;
|
|
||||||
}
|
|
||||||
#endif /* CFE_API_strlen || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_write) || defined(CFE_API_ALL)
|
|
||||||
int cfe_write(int handle, unsigned char *buffer, int length)
|
int cfe_write(int handle, unsigned char *buffer, int length)
|
||||||
{
|
{
|
||||||
return cfe_writeblk(handle, 0, buffer, length);
|
return cfe_writeblk(handle, 0, buffer, length);
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_write || CFE_API_ALL */
|
|
||||||
|
|
||||||
#if defined(CFE_API_writeblk) || defined(CFE_API_ALL)
|
int cfe_writeblk(int handle, s64 offset, unsigned char *buffer, int length)
|
||||||
int
|
|
||||||
cfe_writeblk(int handle, cfe_xint_t offset, unsigned char *buffer,
|
|
||||||
int length)
|
|
||||||
{
|
{
|
||||||
cfe_xiocb_t xiocb;
|
struct cfe_xiocb xiocb;
|
||||||
|
|
||||||
xiocb.xiocb_fcode = CFE_CMD_DEV_WRITE;
|
xiocb.xiocb_fcode = CFE_CMD_DEV_WRITE;
|
||||||
xiocb.xiocb_status = 0;
|
xiocb.xiocb_status = 0;
|
||||||
xiocb.xiocb_handle = handle;
|
xiocb.xiocb_handle = handle;
|
||||||
xiocb.xiocb_flags = 0;
|
xiocb.xiocb_flags = 0;
|
||||||
xiocb.xiocb_psize = sizeof(xiocb_buffer_t);
|
xiocb.xiocb_psize = sizeof(struct xiocb_buffer);
|
||||||
xiocb.plist.xiocb_buffer.buf_offset = offset;
|
xiocb.plist.xiocb_buffer.buf_offset = offset;
|
||||||
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(buffer);
|
xiocb.plist.xiocb_buffer.buf_ptr = XPTR_FROM_NATIVE(buffer);
|
||||||
xiocb.plist.xiocb_buffer.buf_length = length;
|
xiocb.plist.xiocb_buffer.buf_length = length;
|
||||||
|
@ -499,4 +430,3 @@ cfe_writeblk(int handle, cfe_xint_t offset, unsigned char *buffer,
|
||||||
return xiocb.xiocb_status;
|
return xiocb.xiocb_status;
|
||||||
return xiocb.plist.xiocb_buffer.buf_retlen;
|
return xiocb.plist.xiocb_buffer.buf_retlen;
|
||||||
}
|
}
|
||||||
#endif /* CFE_API_writeblk || CFE_API_ALL */
|
|
||||||
|
|
|
@ -15,28 +15,12 @@
|
||||||
* along with this program; if not, write to the Free Software
|
* along with this program; if not, write to the Free Software
|
||||||
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
* Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
/* *********************************************************************
|
|
||||||
*
|
|
||||||
* Broadcom Common Firmware Environment (CFE)
|
|
||||||
*
|
|
||||||
* Device function prototypes File: cfe_api_int.h
|
|
||||||
*
|
|
||||||
* This header defines all internal types and macros for the
|
|
||||||
* library. This is stuff that's not exported to an app
|
|
||||||
* using the library.
|
|
||||||
*
|
|
||||||
* Authors: Mitch Lichtenberg, Chris Demetriou
|
|
||||||
*
|
|
||||||
********************************************************************* */
|
|
||||||
|
|
||||||
#ifndef CFE_API_INT_H
|
#ifndef CFE_API_INT_H
|
||||||
#define CFE_API_INT_H
|
#define CFE_API_INT_H
|
||||||
|
|
||||||
/* *********************************************************************
|
/*
|
||||||
* Constants
|
* Constants.
|
||||||
********************************************************************* */
|
*/
|
||||||
|
|
||||||
#define CFE_CMD_FW_GETINFO 0
|
#define CFE_CMD_FW_GETINFO 0
|
||||||
#define CFE_CMD_FW_RESTART 1
|
#define CFE_CMD_FW_RESTART 1
|
||||||
#define CFE_CMD_FW_BOOT 2
|
#define CFE_CMD_FW_BOOT 2
|
||||||
|
@ -64,89 +48,101 @@
|
||||||
|
|
||||||
#define CFE_CMD_VENDOR_USE 0x8000 /* codes above this are for customer use */
|
#define CFE_CMD_VENDOR_USE 0x8000 /* codes above this are for customer use */
|
||||||
|
|
||||||
/* *********************************************************************
|
/*
|
||||||
* Structures
|
* Structures.
|
||||||
********************************************************************* */
|
*/
|
||||||
|
|
||||||
typedef uint64_t cfe_xuint_t;
|
/* eeek, signed "pointers" */
|
||||||
typedef int64_t cfe_xint_t;
|
typedef s64 cfe_xptr_t;
|
||||||
typedef int64_t cfe_xptr_t;
|
|
||||||
|
|
||||||
typedef struct xiocb_buffer_s {
|
struct xiocb_buffer {
|
||||||
cfe_xuint_t buf_offset; /* offset on device (bytes) */
|
u64 buf_offset; /* offset on device (bytes) */
|
||||||
cfe_xptr_t buf_ptr; /* pointer to a buffer */
|
cfe_xptr_t buf_ptr; /* pointer to a buffer */
|
||||||
cfe_xuint_t buf_length; /* length of this buffer */
|
u64 buf_length; /* length of this buffer */
|
||||||
cfe_xuint_t buf_retlen; /* returned length (for read ops) */
|
u64 buf_retlen; /* returned length (for read ops) */
|
||||||
cfe_xuint_t buf_ioctlcmd; /* IOCTL command (used only for IOCTLs) */
|
u64 buf_ioctlcmd; /* IOCTL command (used only for IOCTLs) */
|
||||||
} xiocb_buffer_t;
|
};
|
||||||
|
|
||||||
#define buf_devflags buf_ioctlcmd /* returned device info flags */
|
struct xiocb_inpstat {
|
||||||
|
u64 inp_status; /* 1 means input available */
|
||||||
|
};
|
||||||
|
|
||||||
typedef struct xiocb_inpstat_s {
|
struct xiocb_envbuf {
|
||||||
cfe_xuint_t inp_status; /* 1 means input available */
|
s64 enum_idx; /* 0-based enumeration index */
|
||||||
} xiocb_inpstat_t;
|
|
||||||
|
|
||||||
typedef struct xiocb_envbuf_s {
|
|
||||||
cfe_xint_t enum_idx; /* 0-based enumeration index */
|
|
||||||
cfe_xptr_t name_ptr; /* name string buffer */
|
cfe_xptr_t name_ptr; /* name string buffer */
|
||||||
cfe_xint_t name_length; /* size of name buffer */
|
s64 name_length; /* size of name buffer */
|
||||||
cfe_xptr_t val_ptr; /* value string buffer */
|
cfe_xptr_t val_ptr; /* value string buffer */
|
||||||
cfe_xint_t val_length; /* size of value string buffer */
|
s64 val_length; /* size of value string buffer */
|
||||||
} xiocb_envbuf_t;
|
};
|
||||||
|
|
||||||
typedef struct xiocb_cpuctl_s {
|
struct xiocb_cpuctl {
|
||||||
cfe_xuint_t cpu_number; /* cpu number to control */
|
u64 cpu_number; /* cpu number to control */
|
||||||
cfe_xuint_t cpu_command; /* command to issue to CPU */
|
u64 cpu_command; /* command to issue to CPU */
|
||||||
cfe_xuint_t start_addr; /* CPU start address */
|
u64 start_addr; /* CPU start address */
|
||||||
cfe_xuint_t gp_val; /* starting GP value */
|
u64 gp_val; /* starting GP value */
|
||||||
cfe_xuint_t sp_val; /* starting SP value */
|
u64 sp_val; /* starting SP value */
|
||||||
cfe_xuint_t a1_val; /* starting A1 value */
|
u64 a1_val; /* starting A1 value */
|
||||||
} xiocb_cpuctl_t;
|
};
|
||||||
|
|
||||||
typedef struct xiocb_time_s {
|
struct xiocb_time {
|
||||||
cfe_xint_t ticks; /* current time in ticks */
|
s64 ticks; /* current time in ticks */
|
||||||
} xiocb_time_t;
|
};
|
||||||
|
|
||||||
typedef struct xiocb_exitstat_s {
|
struct xiocb_exitstat{
|
||||||
cfe_xint_t status;
|
s64 status;
|
||||||
} xiocb_exitstat_t;
|
};
|
||||||
|
|
||||||
typedef struct xiocb_meminfo_s {
|
struct xiocb_meminfo {
|
||||||
cfe_xint_t mi_idx; /* 0-based enumeration index */
|
s64 mi_idx; /* 0-based enumeration index */
|
||||||
cfe_xint_t mi_type; /* type of memory block */
|
s64 mi_type; /* type of memory block */
|
||||||
cfe_xuint_t mi_addr; /* physical start address */
|
u64 mi_addr; /* physical start address */
|
||||||
cfe_xuint_t mi_size; /* block size */
|
u64 mi_size; /* block size */
|
||||||
} xiocb_meminfo_t;
|
};
|
||||||
|
|
||||||
typedef struct xiocb_fwinfo_s {
|
struct xiocb_fwinfo {
|
||||||
cfe_xint_t fwi_version; /* major, minor, eco version */
|
s64 fwi_version; /* major, minor, eco version */
|
||||||
cfe_xint_t fwi_totalmem; /* total installed mem */
|
s64 fwi_totalmem; /* total installed mem */
|
||||||
cfe_xint_t fwi_flags; /* various flags */
|
s64 fwi_flags; /* various flags */
|
||||||
cfe_xint_t fwi_boardid; /* board ID */
|
s64 fwi_boardid; /* board ID */
|
||||||
cfe_xint_t fwi_bootarea_va; /* VA of boot area */
|
s64 fwi_bootarea_va; /* VA of boot area */
|
||||||
cfe_xint_t fwi_bootarea_pa; /* PA of boot area */
|
s64 fwi_bootarea_pa; /* PA of boot area */
|
||||||
cfe_xint_t fwi_bootarea_size; /* size of boot area */
|
s64 fwi_bootarea_size; /* size of boot area */
|
||||||
cfe_xint_t fwi_reserved1;
|
s64 fwi_reserved1;
|
||||||
cfe_xint_t fwi_reserved2;
|
s64 fwi_reserved2;
|
||||||
cfe_xint_t fwi_reserved3;
|
s64 fwi_reserved3;
|
||||||
} xiocb_fwinfo_t;
|
};
|
||||||
|
|
||||||
typedef struct cfe_xiocb_s {
|
struct cfe_xiocb {
|
||||||
cfe_xuint_t xiocb_fcode; /* IOCB function code */
|
u64 xiocb_fcode; /* IOCB function code */
|
||||||
cfe_xint_t xiocb_status; /* return status */
|
s64 xiocb_status; /* return status */
|
||||||
cfe_xint_t xiocb_handle; /* file/device handle */
|
s64 xiocb_handle; /* file/device handle */
|
||||||
cfe_xuint_t xiocb_flags; /* flags for this IOCB */
|
u64 xiocb_flags; /* flags for this IOCB */
|
||||||
cfe_xuint_t xiocb_psize; /* size of parameter list */
|
u64 xiocb_psize; /* size of parameter list */
|
||||||
union {
|
union {
|
||||||
xiocb_buffer_t xiocb_buffer; /* buffer parameters */
|
/* buffer parameters */
|
||||||
xiocb_inpstat_t xiocb_inpstat; /* input status parameters */
|
struct xiocb_buffer xiocb_buffer;
|
||||||
xiocb_envbuf_t xiocb_envbuf; /* environment function parameters */
|
|
||||||
xiocb_cpuctl_t xiocb_cpuctl; /* CPU control parameters */
|
|
||||||
xiocb_time_t xiocb_time; /* timer parameters */
|
|
||||||
xiocb_meminfo_t xiocb_meminfo; /* memory arena info parameters */
|
|
||||||
xiocb_fwinfo_t xiocb_fwinfo; /* firmware information */
|
|
||||||
xiocb_exitstat_t xiocb_exitstat; /* Exit Status */
|
|
||||||
} plist;
|
|
||||||
} cfe_xiocb_t;
|
|
||||||
|
|
||||||
#endif /* CFE_API_INT_H */
|
/* input status parameters */
|
||||||
|
struct xiocb_inpstat xiocb_inpstat;
|
||||||
|
|
||||||
|
/* environment function parameters */
|
||||||
|
struct xiocb_envbuf xiocb_envbuf;
|
||||||
|
|
||||||
|
/* CPU control parameters */
|
||||||
|
struct xiocb_cpuctl xiocb_cpuctl;
|
||||||
|
|
||||||
|
/* timer parameters */
|
||||||
|
struct xiocb_time xiocb_time;
|
||||||
|
|
||||||
|
/* memory arena info parameters */
|
||||||
|
struct xiocb_meminfo xiocb_meminfo;
|
||||||
|
|
||||||
|
/* firmware information */
|
||||||
|
struct xiocb_fwinfo xiocb_fwinfo;
|
||||||
|
|
||||||
|
/* Exit Status */
|
||||||
|
struct xiocb_exitstat xiocb_exitstat;
|
||||||
|
} plist;
|
||||||
|
};
|
||||||
|
|
||||||
|
#endif /* CFE_API_INT_H */
|
||||||
|
|
|
@ -0,0 +1,5 @@
|
||||||
|
#
|
||||||
|
# Makefile for generic prom monitor library routines under Linux.
|
||||||
|
#
|
||||||
|
|
||||||
|
lib-$(CONFIG_64BIT) += call_o32.o
|
|
@ -0,0 +1,97 @@
|
||||||
|
/*
|
||||||
|
* arch/mips/dec/prom/call_o32.S
|
||||||
|
*
|
||||||
|
* O32 interface for the 64 (or N32) ABI.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2002 Maciej W. Rozycki
|
||||||
|
*
|
||||||
|
* 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.
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <asm/asm.h>
|
||||||
|
#include <asm/regdef.h>
|
||||||
|
|
||||||
|
/* Maximum number of arguments supported. Must be even! */
|
||||||
|
#define O32_ARGC 32
|
||||||
|
/* Number of static registers we save. */
|
||||||
|
#define O32_STATC 11
|
||||||
|
/* Frame size for static register */
|
||||||
|
#define O32_FRAMESZ (SZREG * O32_STATC)
|
||||||
|
/* Frame size on new stack */
|
||||||
|
#define O32_FRAMESZ_NEW (SZREG + 4 * O32_ARGC)
|
||||||
|
|
||||||
|
.text
|
||||||
|
|
||||||
|
/*
|
||||||
|
* O32 function call dispatcher, for interfacing 32-bit ROM routines.
|
||||||
|
*
|
||||||
|
* The standard 64 (N32) calling sequence is supported, with a0
|
||||||
|
* holding a function pointer, a1 a new stack pointer, a2-a7 -- its
|
||||||
|
* first six arguments and the stack -- remaining ones (up to O32_ARGC,
|
||||||
|
* including a2-a7). Static registers, gp and fp are preserved, v0 holds
|
||||||
|
* a result. This code relies on the called o32 function for sp and ra
|
||||||
|
* restoration and this dispatcher has to be placed in a KSEGx (or KUSEG)
|
||||||
|
* address space. Any pointers passed have to point to addresses within
|
||||||
|
* one of these spaces as well.
|
||||||
|
*/
|
||||||
|
NESTED(call_o32, O32_FRAMESZ, ra)
|
||||||
|
REG_SUBU sp,O32_FRAMESZ
|
||||||
|
|
||||||
|
REG_S ra,O32_FRAMESZ-1*SZREG(sp)
|
||||||
|
REG_S fp,O32_FRAMESZ-2*SZREG(sp)
|
||||||
|
REG_S gp,O32_FRAMESZ-3*SZREG(sp)
|
||||||
|
REG_S s7,O32_FRAMESZ-4*SZREG(sp)
|
||||||
|
REG_S s6,O32_FRAMESZ-5*SZREG(sp)
|
||||||
|
REG_S s5,O32_FRAMESZ-6*SZREG(sp)
|
||||||
|
REG_S s4,O32_FRAMESZ-7*SZREG(sp)
|
||||||
|
REG_S s3,O32_FRAMESZ-8*SZREG(sp)
|
||||||
|
REG_S s2,O32_FRAMESZ-9*SZREG(sp)
|
||||||
|
REG_S s1,O32_FRAMESZ-10*SZREG(sp)
|
||||||
|
REG_S s0,O32_FRAMESZ-11*SZREG(sp)
|
||||||
|
|
||||||
|
move jp,a0
|
||||||
|
REG_SUBU s0,a1,O32_FRAMESZ_NEW
|
||||||
|
REG_S sp,O32_FRAMESZ_NEW-1*SZREG(s0)
|
||||||
|
|
||||||
|
sll a0,a2,zero
|
||||||
|
sll a1,a3,zero
|
||||||
|
sll a2,a4,zero
|
||||||
|
sll a3,a5,zero
|
||||||
|
sw a6,0x10(s0)
|
||||||
|
sw a7,0x14(s0)
|
||||||
|
|
||||||
|
PTR_LA t0,O32_FRAMESZ(sp)
|
||||||
|
PTR_LA t1,0x18(s0)
|
||||||
|
li t2,O32_ARGC-6
|
||||||
|
1:
|
||||||
|
lw t3,(t0)
|
||||||
|
REG_ADDU t0,SZREG
|
||||||
|
sw t3,(t1)
|
||||||
|
REG_SUBU t2,1
|
||||||
|
REG_ADDU t1,4
|
||||||
|
bnez t2,1b
|
||||||
|
|
||||||
|
move sp,s0
|
||||||
|
|
||||||
|
jalr jp
|
||||||
|
|
||||||
|
REG_L sp,O32_FRAMESZ_NEW-1*SZREG(sp)
|
||||||
|
|
||||||
|
REG_L s0,O32_FRAMESZ-11*SZREG(sp)
|
||||||
|
REG_L s1,O32_FRAMESZ-10*SZREG(sp)
|
||||||
|
REG_L s2,O32_FRAMESZ-9*SZREG(sp)
|
||||||
|
REG_L s3,O32_FRAMESZ-8*SZREG(sp)
|
||||||
|
REG_L s4,O32_FRAMESZ-7*SZREG(sp)
|
||||||
|
REG_L s5,O32_FRAMESZ-6*SZREG(sp)
|
||||||
|
REG_L s6,O32_FRAMESZ-5*SZREG(sp)
|
||||||
|
REG_L s7,O32_FRAMESZ-4*SZREG(sp)
|
||||||
|
REG_L gp,O32_FRAMESZ-3*SZREG(sp)
|
||||||
|
REG_L fp,O32_FRAMESZ-2*SZREG(sp)
|
||||||
|
REG_L ra,O32_FRAMESZ-1*SZREG(sp)
|
||||||
|
|
||||||
|
REG_ADDU sp,O32_FRAMESZ
|
||||||
|
jr ra
|
||||||
|
END(call_o32)
|
|
@ -0,0 +1,5 @@
|
||||||
|
#
|
||||||
|
# Makefile for the SNI prom monitor routines under Linux.
|
||||||
|
#
|
||||||
|
|
||||||
|
lib-$(CONFIG_SNIPROM) += sniprom.o
|
|
@ -0,0 +1,151 @@
|
||||||
|
/*
|
||||||
|
* Big Endian PROM code for SNI RM machines
|
||||||
|
*
|
||||||
|
* This file is subject to the terms and conditions of the GNU General Public
|
||||||
|
* License. See the file "COPYING" in the main directory of this archive
|
||||||
|
* for more details.
|
||||||
|
*
|
||||||
|
* Copyright (C) 2005-2006 Florian Lohoff (flo@rfc822.org)
|
||||||
|
* Copyright (C) 2005-2006 Thomas Bogendoerfer (tsbogend@alpha.franken.de)
|
||||||
|
*/
|
||||||
|
|
||||||
|
#include <linux/kernel.h>
|
||||||
|
#include <linux/init.h>
|
||||||
|
#include <linux/string.h>
|
||||||
|
#include <linux/console.h>
|
||||||
|
|
||||||
|
#include <asm/addrspace.h>
|
||||||
|
#include <asm/sni.h>
|
||||||
|
#include <asm/mipsprom.h>
|
||||||
|
#include <asm/mipsregs.h>
|
||||||
|
#include <asm/bootinfo.h>
|
||||||
|
|
||||||
|
/* special SNI prom calls */
|
||||||
|
/*
|
||||||
|
* This does not exist in all proms - SINIX compares
|
||||||
|
* the prom env variable "version" against "2.0008"
|
||||||
|
* or greater. If lesser it tries to probe interesting
|
||||||
|
* registers
|
||||||
|
*/
|
||||||
|
#define PROM_GET_MEMCONF 58
|
||||||
|
#define PROM_GET_HWCONF 61
|
||||||
|
|
||||||
|
#define PROM_VEC (u64 *)CKSEG1ADDR(0x1fc00000)
|
||||||
|
#define PROM_ENTRY(x) (PROM_VEC + (x))
|
||||||
|
|
||||||
|
#define ___prom_putchar ((int *(*)(int))PROM_ENTRY(PROM_PUTCHAR))
|
||||||
|
#define ___prom_getenv ((char *(*)(char *))PROM_ENTRY(PROM_GETENV))
|
||||||
|
#define ___prom_get_memconf ((void (*)(void *))PROM_ENTRY(PROM_GET_MEMCONF))
|
||||||
|
#define ___prom_get_hwconf ((u32 (*)(void))PROM_ENTRY(PROM_GET_HWCONF))
|
||||||
|
|
||||||
|
#ifdef CONFIG_64BIT
|
||||||
|
|
||||||
|
static u8 o32_stk[16384];
|
||||||
|
#define O32_STK &o32_stk[sizeof(o32_stk)]
|
||||||
|
|
||||||
|
#define __PROM_O32(fun, arg) fun arg __asm__(#fun); \
|
||||||
|
__asm__(#fun " = call_o32")
|
||||||
|
|
||||||
|
int __PROM_O32(__prom_putchar, (int *(*)(int), void *, int));
|
||||||
|
char *__PROM_O32(__prom_getenv, (char *(*)(char *), void *, char *));
|
||||||
|
void __PROM_O32(__prom_get_memconf, (void (*)(void *), void *, void *));
|
||||||
|
u32 __PROM_O32(__prom_get_hwconf, (u32 (*)(void), void *));
|
||||||
|
|
||||||
|
#define _prom_putchar(x) __prom_putchar(___prom_putchar, O32_STK, x)
|
||||||
|
#define _prom_getenv(x) __prom_getenv(___prom_getenv, O32_STK, x)
|
||||||
|
#define _prom_get_memconf(x) __prom_get_memconf(___prom_get_memconf, O32_STK, x)
|
||||||
|
#define _prom_get_hwconf() __prom_get_hwconf(___prom_get_hwconf, O32_STK)
|
||||||
|
|
||||||
|
#else
|
||||||
|
#define _prom_putchar(x) ___prom_putchar(x)
|
||||||
|
#define _prom_getenv(x) ___prom_getenv(x)
|
||||||
|
#define _prom_get_memconf(x) ___prom_get_memconf(x)
|
||||||
|
#define _prom_get_hwconf(x) ___prom_get_hwconf(x)
|
||||||
|
#endif
|
||||||
|
|
||||||
|
void prom_putchar(char c)
|
||||||
|
{
|
||||||
|
_prom_putchar(c);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
char *prom_getenv(char *s)
|
||||||
|
{
|
||||||
|
return _prom_getenv(s);
|
||||||
|
}
|
||||||
|
|
||||||
|
void *prom_get_hwconf(void)
|
||||||
|
{
|
||||||
|
u32 hwconf = _prom_get_hwconf();
|
||||||
|
|
||||||
|
if (hwconf == 0xffffffff)
|
||||||
|
return NULL;
|
||||||
|
|
||||||
|
return (void *)CKSEG1ADDR(hwconf);
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init prom_free_prom_memory(void)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
* /proc/cpuinfo system type
|
||||||
|
*
|
||||||
|
*/
|
||||||
|
char *system_type = "Unknown";
|
||||||
|
const char *get_system_type(void)
|
||||||
|
{
|
||||||
|
return system_type;
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __init sni_mem_init(void)
|
||||||
|
{
|
||||||
|
int i, memsize;
|
||||||
|
struct membank {
|
||||||
|
u32 size;
|
||||||
|
u32 base;
|
||||||
|
u32 size2;
|
||||||
|
u32 pad1;
|
||||||
|
u32 pad2;
|
||||||
|
} memconf[8];
|
||||||
|
int brd_type = *(unsigned char *)SNI_IDPROM_BRDTYPE;
|
||||||
|
|
||||||
|
|
||||||
|
/* MemSIZE from prom in 16MByte chunks */
|
||||||
|
memsize = *((unsigned char *) SNI_IDPROM_MEMSIZE) * 16;
|
||||||
|
|
||||||
|
pr_debug("IDProm memsize: %u MByte\n", memsize);
|
||||||
|
|
||||||
|
/* get memory bank layout from prom */
|
||||||
|
_prom_get_memconf(&memconf);
|
||||||
|
|
||||||
|
pr_debug("prom_get_mem_conf memory configuration:\n");
|
||||||
|
for (i = 0; i < 8 && memconf[i].size; i++) {
|
||||||
|
if (brd_type == SNI_BRD_PCI_TOWER ||
|
||||||
|
brd_type == SNI_BRD_PCI_TOWER_CPLUS) {
|
||||||
|
if (memconf[i].base >= 0x20000000 &&
|
||||||
|
memconf[i].base < 0x30000000)
|
||||||
|
memconf[i].base -= 0x20000000;
|
||||||
|
}
|
||||||
|
pr_debug("Bank%d: %08x @ %08x\n", i,
|
||||||
|
memconf[i].size, memconf[i].base);
|
||||||
|
add_memory_region(memconf[i].base, memconf[i].size,
|
||||||
|
BOOT_MEM_RAM);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
void __init prom_init(void)
|
||||||
|
{
|
||||||
|
int argc = fw_arg0;
|
||||||
|
u32 *argv = (u32 *)CKSEG0ADDR(fw_arg1);
|
||||||
|
int i;
|
||||||
|
|
||||||
|
sni_mem_init();
|
||||||
|
|
||||||
|
/* copy prom cmdline parameters to kernel cmdline */
|
||||||
|
for (i = 1; i < argc; i++) {
|
||||||
|
strcat(arcs_cmdline, (char *)CKSEG0ADDR(argv[i]));
|
||||||
|
if (i < (argc - 1))
|
||||||
|
strcat(arcs_cmdline, " ");
|
||||||
|
}
|
||||||
|
}
|
|
@ -121,8 +121,6 @@ const char *get_system_type(void)
|
||||||
*/
|
*/
|
||||||
void __init prom_init(void)
|
void __init prom_init(void)
|
||||||
{
|
{
|
||||||
mips_machtype = MACH_WRPPMC;
|
|
||||||
|
|
||||||
add_memory_region(WRPPMC_SDRAM_SCS0_BASE, WRPPMC_SDRAM_SCS0_SIZE, BOOT_MEM_RAM);
|
add_memory_region(WRPPMC_SDRAM_SCS0_BASE, WRPPMC_SDRAM_SCS0_SIZE, BOOT_MEM_RAM);
|
||||||
add_memory_region(WRPPMC_BOOTROM_BASE, WRPPMC_BOOTROM_SIZE, BOOT_MEM_ROM_DATA);
|
add_memory_region(WRPPMC_BOOTROM_BASE, WRPPMC_BOOTROM_SIZE, BOOT_MEM_ROM_DATA);
|
||||||
|
|
||||||
|
|
|
@ -200,12 +200,19 @@ static struct platform_device jazz_cmos_pdev = {
|
||||||
.resource = jazz_cmos_rsrc
|
.resource = jazz_cmos_rsrc
|
||||||
};
|
};
|
||||||
|
|
||||||
|
static struct platform_device pcspeaker_pdev = {
|
||||||
|
.name = "pcspkr",
|
||||||
|
.id = -1,
|
||||||
|
};
|
||||||
|
|
||||||
static int __init jazz_setup_devinit(void)
|
static int __init jazz_setup_devinit(void)
|
||||||
{
|
{
|
||||||
platform_device_register(&jazz_serial8250_device);
|
platform_device_register(&jazz_serial8250_device);
|
||||||
platform_device_register(&jazz_esp_pdev);
|
platform_device_register(&jazz_esp_pdev);
|
||||||
platform_device_register(&jazz_sonic_pdev);
|
platform_device_register(&jazz_sonic_pdev);
|
||||||
platform_device_register(&jazz_cmos_pdev);
|
platform_device_register(&jazz_cmos_pdev);
|
||||||
|
platform_device_register(&pcspeaker_pdev);
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -52,10 +52,6 @@ void __init prom_init(void)
|
||||||
puts("Warning: TX3927 TLB off\n");
|
puts("Warning: TX3927 TLB off\n");
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#ifdef CONFIG_TOSHIBA_JMR3927
|
|
||||||
mips_machtype = MACH_TOSHIBA_JMR3927;
|
|
||||||
#endif
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
add_memory_region(0, JMR3927_SDRAM_SIZE, BOOT_MEM_RAM);
|
add_memory_region(0, JMR3927_SDRAM_SIZE, BOOT_MEM_RAM);
|
||||||
}
|
}
|
||||||
|
|
|
@ -29,21 +29,17 @@
|
||||||
|
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/kernel.h>
|
#include <linux/kernel.h>
|
||||||
#include <linux/kdev_t.h>
|
|
||||||
#include <linux/types.h>
|
#include <linux/types.h>
|
||||||
#include <linux/pci.h>
|
#include <linux/pci.h>
|
||||||
#include <linux/ide.h>
|
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
#include <linux/delay.h>
|
#include <linux/delay.h>
|
||||||
#include <linux/pm.h>
|
#include <linux/pm.h>
|
||||||
#include <linux/platform_device.h>
|
#include <linux/platform_device.h>
|
||||||
|
#include <linux/clk.h>
|
||||||
#ifdef CONFIG_SERIAL_TXX9
|
#ifdef CONFIG_SERIAL_TXX9
|
||||||
#include <linux/tty.h>
|
|
||||||
#include <linux/serial.h>
|
|
||||||
#include <linux/serial_core.h>
|
#include <linux/serial_core.h>
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <asm/addrspace.h>
|
|
||||||
#include <asm/txx9tmr.h>
|
#include <asm/txx9tmr.h>
|
||||||
#include <asm/reboot.h>
|
#include <asm/reboot.h>
|
||||||
#include <asm/jmr3927/jmr3927.h>
|
#include <asm/jmr3927/jmr3927.h>
|
||||||
|
@ -238,6 +234,8 @@ static void __init tx3927_setup(void)
|
||||||
tx3927_ccfgptr->ccfg &= ~TX3927_CCFG_BEOW;
|
tx3927_ccfgptr->ccfg &= ~TX3927_CCFG_BEOW;
|
||||||
/* Disable PCI snoop */
|
/* Disable PCI snoop */
|
||||||
tx3927_ccfgptr->ccfg &= ~TX3927_CCFG_PSNP;
|
tx3927_ccfgptr->ccfg &= ~TX3927_CCFG_PSNP;
|
||||||
|
/* do reset on watchdog */
|
||||||
|
tx3927_ccfgptr->ccfg |= TX3927_CCFG_WR;
|
||||||
|
|
||||||
#ifdef DO_WRITE_THROUGH
|
#ifdef DO_WRITE_THROUGH
|
||||||
/* Enable PCI SNOOP - with write through only */
|
/* Enable PCI SNOOP - with write through only */
|
||||||
|
@ -388,3 +386,55 @@ static int __init jmr3927_rtc_init(void)
|
||||||
return IS_ERR(dev) ? PTR_ERR(dev) : 0;
|
return IS_ERR(dev) ? PTR_ERR(dev) : 0;
|
||||||
}
|
}
|
||||||
device_initcall(jmr3927_rtc_init);
|
device_initcall(jmr3927_rtc_init);
|
||||||
|
|
||||||
|
/* Watchdog support */
|
||||||
|
|
||||||
|
static int __init txx9_wdt_init(unsigned long base)
|
||||||
|
{
|
||||||
|
struct resource res = {
|
||||||
|
.start = base,
|
||||||
|
.end = base + 0x100 - 1,
|
||||||
|
.flags = IORESOURCE_MEM,
|
||||||
|
};
|
||||||
|
struct platform_device *dev =
|
||||||
|
platform_device_register_simple("txx9wdt", -1, &res, 1);
|
||||||
|
return IS_ERR(dev) ? PTR_ERR(dev) : 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
static int __init jmr3927_wdt_init(void)
|
||||||
|
{
|
||||||
|
return txx9_wdt_init(TX3927_TMR_REG(2));
|
||||||
|
}
|
||||||
|
device_initcall(jmr3927_wdt_init);
|
||||||
|
|
||||||
|
/* Minimum CLK support */
|
||||||
|
|
||||||
|
struct clk *clk_get(struct device *dev, const char *id)
|
||||||
|
{
|
||||||
|
if (!strcmp(id, "imbus_clk"))
|
||||||
|
return (struct clk *)JMR3927_IMCLK;
|
||||||
|
return ERR_PTR(-ENOENT);
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(clk_get);
|
||||||
|
|
||||||
|
int clk_enable(struct clk *clk)
|
||||||
|
{
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(clk_enable);
|
||||||
|
|
||||||
|
void clk_disable(struct clk *clk)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(clk_disable);
|
||||||
|
|
||||||
|
unsigned long clk_get_rate(struct clk *clk)
|
||||||
|
{
|
||||||
|
return (unsigned long)clk;
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(clk_get_rate);
|
||||||
|
|
||||||
|
void clk_put(struct clk *clk)
|
||||||
|
{
|
||||||
|
}
|
||||||
|
EXPORT_SYMBOL(clk_put);
|
||||||
|
|
|
@ -18,6 +18,15 @@
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
|
static char bug64hit[] __initdata =
|
||||||
|
"reliable operation impossible!\n%s";
|
||||||
|
static char nowar[] __initdata =
|
||||||
|
"Please report to <linux-mips@linux-mips.org>.";
|
||||||
|
static char r4kwar[] __initdata =
|
||||||
|
"Enable CPU_R4000_WORKAROUNDS to rectify.";
|
||||||
|
static char daddiwar[] __initdata =
|
||||||
|
"Enable CPU_DADDI_WORKAROUNDS to rectify.";
|
||||||
|
|
||||||
static inline void align_mod(const int align, const int mod)
|
static inline void align_mod(const int align, const int mod)
|
||||||
{
|
{
|
||||||
asm volatile(
|
asm volatile(
|
||||||
|
@ -155,13 +164,7 @@ static inline void check_mult_sh(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
printk("no.\n");
|
printk("no.\n");
|
||||||
panic("Reliable operation impossible!\n"
|
panic(bug64hit, !R4000_WAR ? r4kwar : nowar);
|
||||||
#ifndef CONFIG_CPU_R4000
|
|
||||||
"Configure for R4000 to enable the workaround."
|
|
||||||
#else
|
|
||||||
"Please report to <linux-mips@linux-mips.org>."
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static volatile int daddi_ov __initdata = 0;
|
static volatile int daddi_ov __initdata = 0;
|
||||||
|
@ -233,15 +236,11 @@ static inline void check_daddi(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
printk("no.\n");
|
printk("no.\n");
|
||||||
panic("Reliable operation impossible!\n"
|
panic(bug64hit, !DADDI_WAR ? daddiwar : nowar);
|
||||||
#if !defined(CONFIG_CPU_R4000) && !defined(CONFIG_CPU_R4400)
|
|
||||||
"Configure for R4000 or R4400 to enable the workaround."
|
|
||||||
#else
|
|
||||||
"Please report to <linux-mips@linux-mips.org>."
|
|
||||||
#endif
|
|
||||||
);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int daddiu_bug __initdata = -1;
|
||||||
|
|
||||||
static inline void check_daddiu(void)
|
static inline void check_daddiu(void)
|
||||||
{
|
{
|
||||||
long v, w, tmp;
|
long v, w, tmp;
|
||||||
|
@ -281,7 +280,9 @@ static inline void check_daddiu(void)
|
||||||
: "=&r" (v), "=&r" (w), "=&r" (tmp)
|
: "=&r" (v), "=&r" (w), "=&r" (tmp)
|
||||||
: "I" (0xffffffffffffdb9aUL), "I" (0x1234));
|
: "I" (0xffffffffffffdb9aUL), "I" (0x1234));
|
||||||
|
|
||||||
if (v == w) {
|
daddiu_bug = v != w;
|
||||||
|
|
||||||
|
if (!daddiu_bug) {
|
||||||
printk("no.\n");
|
printk("no.\n");
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -303,18 +304,16 @@ static inline void check_daddiu(void)
|
||||||
}
|
}
|
||||||
|
|
||||||
printk("no.\n");
|
printk("no.\n");
|
||||||
panic("Reliable operation impossible!\n"
|
panic(bug64hit, !DADDI_WAR ? daddiwar : nowar);
|
||||||
#if !defined(CONFIG_CPU_R4000) && !defined(CONFIG_CPU_R4400)
|
}
|
||||||
"Configure for R4000 or R4400 to enable the workaround."
|
|
||||||
#else
|
void __init check_bugs64_early(void)
|
||||||
"Please report to <linux-mips@linux-mips.org>."
|
{
|
||||||
#endif
|
check_mult_sh();
|
||||||
);
|
check_daddiu();
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init check_bugs64(void)
|
void __init check_bugs64(void)
|
||||||
{
|
{
|
||||||
check_mult_sh();
|
|
||||||
check_daddi();
|
check_daddi();
|
||||||
check_daddiu();
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -188,6 +188,8 @@ static inline void check_wait(void)
|
||||||
case CPU_AU1500:
|
case CPU_AU1500:
|
||||||
case CPU_AU1550:
|
case CPU_AU1550:
|
||||||
case CPU_AU1200:
|
case CPU_AU1200:
|
||||||
|
case CPU_AU1210:
|
||||||
|
case CPU_AU1250:
|
||||||
if (allow_au1k_wait)
|
if (allow_au1k_wait)
|
||||||
cpu_wait = au1k_wait;
|
cpu_wait = au1k_wait;
|
||||||
break;
|
break;
|
||||||
|
@ -733,6 +735,11 @@ static inline void cpu_probe_alchemy(struct cpuinfo_mips *c)
|
||||||
break;
|
break;
|
||||||
case 4:
|
case 4:
|
||||||
c->cputype = CPU_AU1200;
|
c->cputype = CPU_AU1200;
|
||||||
|
if (2 == (c->processor_id & 0xff))
|
||||||
|
c->cputype = CPU_AU1250;
|
||||||
|
break;
|
||||||
|
case 5:
|
||||||
|
c->cputype = CPU_AU1210;
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
panic("Unknown Au Core!");
|
panic("Unknown Au Core!");
|
||||||
|
@ -858,6 +865,8 @@ static __init const char *cpu_to_name(struct cpuinfo_mips *c)
|
||||||
case CPU_AU1100: name = "Au1100"; break;
|
case CPU_AU1100: name = "Au1100"; break;
|
||||||
case CPU_AU1550: name = "Au1550"; break;
|
case CPU_AU1550: name = "Au1550"; break;
|
||||||
case CPU_AU1200: name = "Au1200"; break;
|
case CPU_AU1200: name = "Au1200"; break;
|
||||||
|
case CPU_AU1210: name = "Au1210"; break;
|
||||||
|
case CPU_AU1250: name = "Au1250"; break;
|
||||||
case CPU_4KEC: name = "MIPS 4KEc"; break;
|
case CPU_4KEC: name = "MIPS 4KEc"; break;
|
||||||
case CPU_4KSC: name = "MIPS 4KSc"; break;
|
case CPU_4KSC: name = "MIPS 4KSc"; break;
|
||||||
case CPU_VR41XX: name = "NEC Vr41xx"; break;
|
case CPU_VR41XX: name = "NEC Vr41xx"; break;
|
||||||
|
|
|
@ -6,7 +6,7 @@
|
||||||
* Copyright (C) 1994 - 2000, 2001, 2003 Ralf Baechle
|
* Copyright (C) 1994 - 2000, 2001, 2003 Ralf Baechle
|
||||||
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
||||||
* Copyright (C) 2001 MIPS Technologies, Inc.
|
* Copyright (C) 2001 MIPS Technologies, Inc.
|
||||||
* Copyright (C) 2002 Maciej W. Rozycki
|
* Copyright (C) 2002, 2007 Maciej W. Rozycki
|
||||||
*/
|
*/
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
|
|
||||||
|
@ -471,7 +471,13 @@ NESTED(nmi_handler, PT_SIZE, sp)
|
||||||
jr k0
|
jr k0
|
||||||
rfe
|
rfe
|
||||||
#else
|
#else
|
||||||
|
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
||||||
LONG_ADDIU k0, 4 /* stall on $k0 */
|
LONG_ADDIU k0, 4 /* stall on $k0 */
|
||||||
|
#else
|
||||||
|
.set at=v1
|
||||||
|
LONG_ADDIU k0, 4
|
||||||
|
.set noat
|
||||||
|
#endif
|
||||||
MTC0 k0, CP0_EPC
|
MTC0 k0, CP0_EPC
|
||||||
/* I hope three instructions between MTC0 and ERET are enough... */
|
/* I hope three instructions between MTC0 and ERET are enough... */
|
||||||
ori k1, _THREAD_MASK
|
ori k1, _THREAD_MASK
|
||||||
|
|
|
@ -161,8 +161,7 @@ static unsigned int translate_open_flags(int flags)
|
||||||
int i;
|
int i;
|
||||||
unsigned int ret = 0;
|
unsigned int ret = 0;
|
||||||
|
|
||||||
for (i = 0; i < (sizeof(open_flags_table) / sizeof(struct apsp_table));
|
for (i = 0; i < ARRAY_SIZE(open_flags_table); i++) {
|
||||||
i++) {
|
|
||||||
if( (flags & open_flags_table[i].sp) ) {
|
if( (flags & open_flags_table[i].sp) ) {
|
||||||
ret |= open_flags_table[i].ap;
|
ret |= open_flags_table[i].ap;
|
||||||
}
|
}
|
||||||
|
|
|
@ -174,36 +174,16 @@ struct rlimit32 {
|
||||||
int rlim_max;
|
int rlim_max;
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifdef __MIPSEB__
|
asmlinkage long sys32_truncate64(const char __user * path,
|
||||||
asmlinkage long sys32_truncate64(const char __user * path, unsigned long __dummy,
|
unsigned long __dummy, int a2, int a3)
|
||||||
int length_hi, int length_lo)
|
|
||||||
#endif
|
|
||||||
#ifdef __MIPSEL__
|
|
||||||
asmlinkage long sys32_truncate64(const char __user * path, unsigned long __dummy,
|
|
||||||
int length_lo, int length_hi)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
loff_t length;
|
return sys_truncate(path, merge_64(a2, a3));
|
||||||
|
|
||||||
length = ((unsigned long) length_hi << 32) | (unsigned int) length_lo;
|
|
||||||
|
|
||||||
return sys_truncate(path, length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef __MIPSEB__
|
|
||||||
asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy,
|
asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy,
|
||||||
int length_hi, int length_lo)
|
int a2, int a3)
|
||||||
#endif
|
|
||||||
#ifdef __MIPSEL__
|
|
||||||
asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy,
|
|
||||||
int length_lo, int length_hi)
|
|
||||||
#endif
|
|
||||||
{
|
{
|
||||||
loff_t length;
|
return sys_ftruncate(fd, merge_64(a2, a3));
|
||||||
|
|
||||||
length = ((unsigned long) length_hi << 32) | (unsigned int) length_lo;
|
|
||||||
|
|
||||||
return sys_ftruncate(fd, length);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static inline long
|
static inline long
|
||||||
|
|
|
@ -17,7 +17,6 @@
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/hardirq.h>
|
#include <asm/hardirq.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/smp.h>
|
|
||||||
#include <asm/mipsmtregs.h>
|
#include <asm/mipsmtregs.h>
|
||||||
#include <asm/r4kcache.h>
|
#include <asm/r4kcache.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
|
|
@ -1,28 +0,0 @@
|
||||||
/*
|
|
||||||
* Copyright (C) 2006 IBM Corporation
|
|
||||||
*
|
|
||||||
* Implements device information for i8253 timer chip
|
|
||||||
*
|
|
||||||
* This program is free software; you can redistribute it and/or
|
|
||||||
* modify it under the terms of the GNU General Public License version
|
|
||||||
* 2 as published by the Free Software Foundation
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <linux/platform_device.h>
|
|
||||||
|
|
||||||
static __init int add_pcspkr(void)
|
|
||||||
{
|
|
||||||
struct platform_device *pd;
|
|
||||||
int ret;
|
|
||||||
|
|
||||||
pd = platform_device_alloc("pcspkr", -1);
|
|
||||||
if (!pd)
|
|
||||||
return -ENOMEM;
|
|
||||||
|
|
||||||
ret = platform_device_add(pd);
|
|
||||||
if (ret)
|
|
||||||
platform_device_put(pd);
|
|
||||||
|
|
||||||
return ret;
|
|
||||||
}
|
|
||||||
device_initcall(add_pcspkr);
|
|
|
@ -62,6 +62,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
|
||||||
);
|
);
|
||||||
seq_printf(m, "shadow register sets\t: %d\n",
|
seq_printf(m, "shadow register sets\t: %d\n",
|
||||||
cpu_data[n].srsets);
|
cpu_data[n].srsets);
|
||||||
|
seq_printf(m, "core\t\t\t: %d\n", cpu_data[n].core);
|
||||||
|
|
||||||
sprintf(fmt, "VCE%%c exceptions\t\t: %s\n",
|
sprintf(fmt, "VCE%%c exceptions\t\t: %s\n",
|
||||||
cpu_has_vce ? "%u" : "not available");
|
cpu_has_vce ? "%u" : "not available");
|
||||||
|
@ -89,7 +90,7 @@ static void c_stop(struct seq_file *m, void *v)
|
||||||
{
|
{
|
||||||
}
|
}
|
||||||
|
|
||||||
struct seq_operations cpuinfo_op = {
|
const struct seq_operations cpuinfo_op = {
|
||||||
.start = c_start,
|
.start = c_start,
|
||||||
.next = c_next,
|
.next = c_next,
|
||||||
.stop = c_stop,
|
.stop = c_stop,
|
||||||
|
|
|
@ -40,7 +40,6 @@
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/mips_mt.h>
|
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/vpe.h>
|
#include <asm/vpe.h>
|
||||||
#include <asm/rtlx.h>
|
#include <asm/rtlx.h>
|
||||||
|
|
|
@ -8,7 +8,7 @@
|
||||||
* Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02, 03 Ralf Baechle
|
* Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02, 03 Ralf Baechle
|
||||||
* Copyright (C) 1996 Stoned Elipot
|
* Copyright (C) 1996 Stoned Elipot
|
||||||
* Copyright (C) 1999 Silicon Graphics, Inc.
|
* Copyright (C) 1999 Silicon Graphics, Inc.
|
||||||
* Copyright (C) 2000 2001, 2002 Maciej W. Rozycki
|
* Copyright (C) 2000, 2001, 2002, 2007 Maciej W. Rozycki
|
||||||
*/
|
*/
|
||||||
#include <linux/init.h>
|
#include <linux/init.h>
|
||||||
#include <linux/ioport.h>
|
#include <linux/ioport.h>
|
||||||
|
@ -24,10 +24,12 @@
|
||||||
|
|
||||||
#include <asm/addrspace.h>
|
#include <asm/addrspace.h>
|
||||||
#include <asm/bootinfo.h>
|
#include <asm/bootinfo.h>
|
||||||
|
#include <asm/bugs.h>
|
||||||
#include <asm/cache.h>
|
#include <asm/cache.h>
|
||||||
#include <asm/cpu.h>
|
#include <asm/cpu.h>
|
||||||
#include <asm/sections.h>
|
#include <asm/sections.h>
|
||||||
#include <asm/setup.h>
|
#include <asm/setup.h>
|
||||||
|
#include <asm/smp-ops.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
|
|
||||||
struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
|
struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
|
||||||
|
@ -561,6 +563,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
cpu_report();
|
cpu_report();
|
||||||
|
check_bugs_early();
|
||||||
|
|
||||||
#if defined(CONFIG_VT)
|
#if defined(CONFIG_VT)
|
||||||
#if defined(CONFIG_VGA_CONSOLE)
|
#if defined(CONFIG_VGA_CONSOLE)
|
||||||
|
@ -573,9 +576,7 @@ void __init setup_arch(char **cmdline_p)
|
||||||
arch_mem_init(cmdline_p);
|
arch_mem_init(cmdline_p);
|
||||||
|
|
||||||
resource_init();
|
resource_init();
|
||||||
#ifdef CONFIG_SMP
|
|
||||||
plat_smp_setup();
|
plat_smp_setup();
|
||||||
#endif
|
|
||||||
}
|
}
|
||||||
|
|
||||||
static int __init fpu_disable(char *s)
|
static int __init fpu_disable(char *s)
|
||||||
|
|
|
@ -22,6 +22,7 @@
|
||||||
#include <linux/cpumask.h>
|
#include <linux/cpumask.h>
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
#include <linux/compiler.h>
|
#include <linux/compiler.h>
|
||||||
|
#include <linux/smp.h>
|
||||||
|
|
||||||
#include <asm/atomic.h>
|
#include <asm/atomic.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
|
@ -30,7 +31,6 @@
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/hardirq.h>
|
#include <asm/hardirq.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/smp.h>
|
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/mipsmtregs.h>
|
#include <asm/mipsmtregs.h>
|
||||||
|
@ -215,68 +215,67 @@ static void __init smp_tc_init(unsigned int tc, unsigned int mvpconf0)
|
||||||
write_tc_c0_tchalt(TCHALT_H);
|
write_tc_c0_tchalt(TCHALT_H);
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
static void vsmp_send_ipi_single(int cpu, unsigned int action)
|
||||||
* Common setup before any secondaries are started
|
|
||||||
* Make sure all CPU's are in a sensible state before we boot any of the
|
|
||||||
* secondarys
|
|
||||||
*/
|
|
||||||
void __init plat_smp_setup(void)
|
|
||||||
{
|
{
|
||||||
unsigned int mvpconf0, ntc, tc, ncpu = 0;
|
int i;
|
||||||
|
unsigned long flags;
|
||||||
|
int vpflags;
|
||||||
|
|
||||||
|
local_irq_save(flags);
|
||||||
|
|
||||||
|
vpflags = dvpe(); /* cant access the other CPU's registers whilst MVPE enabled */
|
||||||
|
|
||||||
|
switch (action) {
|
||||||
|
case SMP_CALL_FUNCTION:
|
||||||
|
i = C_SW1;
|
||||||
|
break;
|
||||||
|
|
||||||
|
case SMP_RESCHEDULE_YOURSELF:
|
||||||
|
default:
|
||||||
|
i = C_SW0;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
|
||||||
|
/* 1:1 mapping of vpe and tc... */
|
||||||
|
settc(cpu);
|
||||||
|
write_vpe_c0_cause(read_vpe_c0_cause() | i);
|
||||||
|
evpe(vpflags);
|
||||||
|
|
||||||
|
local_irq_restore(flags);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void vsmp_send_ipi_mask(cpumask_t mask, unsigned int action)
|
||||||
|
{
|
||||||
|
unsigned int i;
|
||||||
|
|
||||||
|
for_each_cpu_mask(i, mask)
|
||||||
|
vsmp_send_ipi_single(i, action);
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __cpuinit vsmp_init_secondary(void)
|
||||||
|
{
|
||||||
|
/* Enable per-cpu interrupts */
|
||||||
|
|
||||||
|
/* This is Malta specific: IPI,performance and timer inetrrupts */
|
||||||
|
write_c0_status((read_c0_status() & ~ST0_IM ) |
|
||||||
|
(STATUSF_IP0 | STATUSF_IP1 | STATUSF_IP6 | STATUSF_IP7));
|
||||||
|
}
|
||||||
|
|
||||||
|
static void __cpuinit vsmp_smp_finish(void)
|
||||||
|
{
|
||||||
|
write_c0_compare(read_c0_count() + (8* mips_hpt_frequency/HZ));
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS_MT_FPAFF
|
#ifdef CONFIG_MIPS_MT_FPAFF
|
||||||
/* If we have an FPU, enroll ourselves in the FPU-full mask */
|
/* If we have an FPU, enroll ourselves in the FPU-full mask */
|
||||||
if (cpu_has_fpu)
|
if (cpu_has_fpu)
|
||||||
cpu_set(0, mt_fpu_cpumask);
|
cpu_set(smp_processor_id(), mt_fpu_cpumask);
|
||||||
#endif /* CONFIG_MIPS_MT_FPAFF */
|
#endif /* CONFIG_MIPS_MT_FPAFF */
|
||||||
if (!cpu_has_mipsmt)
|
|
||||||
return;
|
|
||||||
|
|
||||||
/* disable MT so we can configure */
|
local_irq_enable();
|
||||||
dvpe();
|
|
||||||
dmt();
|
|
||||||
|
|
||||||
/* Put MVPE's into 'configuration state' */
|
|
||||||
set_c0_mvpcontrol(MVPCONTROL_VPC);
|
|
||||||
|
|
||||||
mvpconf0 = read_c0_mvpconf0();
|
|
||||||
ntc = (mvpconf0 & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT;
|
|
||||||
|
|
||||||
/* we'll always have more TC's than VPE's, so loop setting everything
|
|
||||||
to a sensible state */
|
|
||||||
for (tc = 0; tc <= ntc; tc++) {
|
|
||||||
settc(tc);
|
|
||||||
|
|
||||||
smp_tc_init(tc, mvpconf0);
|
|
||||||
ncpu = smp_vpe_init(tc, mvpconf0, ncpu);
|
|
||||||
}
|
|
||||||
|
|
||||||
/* Release config state */
|
|
||||||
clear_c0_mvpcontrol(MVPCONTROL_VPC);
|
|
||||||
|
|
||||||
/* We'll wait until starting the secondaries before starting MVPE */
|
|
||||||
|
|
||||||
printk(KERN_INFO "Detected %i available secondary CPU(s)\n", ncpu);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
void __init plat_prepare_cpus(unsigned int max_cpus)
|
static void vsmp_cpus_done(void)
|
||||||
{
|
{
|
||||||
mips_mt_set_cpuoptions();
|
|
||||||
|
|
||||||
/* set up ipi interrupts */
|
|
||||||
if (cpu_has_vint) {
|
|
||||||
set_vi_handler(MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch);
|
|
||||||
set_vi_handler(MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch);
|
|
||||||
}
|
|
||||||
|
|
||||||
cpu_ipi_resched_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_RESCHED_IRQ;
|
|
||||||
cpu_ipi_call_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_CALL_IRQ;
|
|
||||||
|
|
||||||
setup_irq(cpu_ipi_resched_irq, &irq_resched);
|
|
||||||
setup_irq(cpu_ipi_call_irq, &irq_call);
|
|
||||||
|
|
||||||
set_irq_handler(cpu_ipi_resched_irq, handle_percpu_irq);
|
|
||||||
set_irq_handler(cpu_ipi_call_irq, handle_percpu_irq);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
|
@ -287,7 +286,7 @@ void __init plat_prepare_cpus(unsigned int max_cpus)
|
||||||
* (unsigned long)idle->thread_info the gp
|
* (unsigned long)idle->thread_info the gp
|
||||||
* assumes a 1:1 mapping of TC => VPE
|
* assumes a 1:1 mapping of TC => VPE
|
||||||
*/
|
*/
|
||||||
void __cpuinit prom_boot_secondary(int cpu, struct task_struct *idle)
|
static void __cpuinit vsmp_boot_secondary(int cpu, struct task_struct *idle)
|
||||||
{
|
{
|
||||||
struct thread_info *gp = task_thread_info(idle);
|
struct thread_info *gp = task_thread_info(idle);
|
||||||
dvpe();
|
dvpe();
|
||||||
|
@ -321,57 +320,81 @@ void __cpuinit prom_boot_secondary(int cpu, struct task_struct *idle)
|
||||||
evpe(EVPE_ENABLE);
|
evpe(EVPE_ENABLE);
|
||||||
}
|
}
|
||||||
|
|
||||||
void __cpuinit prom_init_secondary(void)
|
/*
|
||||||
|
* Common setup before any secondaries are started
|
||||||
|
* Make sure all CPU's are in a sensible state before we boot any of the
|
||||||
|
* secondarys
|
||||||
|
*/
|
||||||
|
static void __init vsmp_smp_setup(void)
|
||||||
{
|
{
|
||||||
/* Enable per-cpu interrupts */
|
unsigned int mvpconf0, ntc, tc, ncpu = 0;
|
||||||
|
unsigned int nvpe;
|
||||||
/* This is Malta specific: IPI,performance and timer inetrrupts */
|
|
||||||
write_c0_status((read_c0_status() & ~ST0_IM ) |
|
|
||||||
(STATUSF_IP0 | STATUSF_IP1 | STATUSF_IP6 | STATUSF_IP7));
|
|
||||||
}
|
|
||||||
|
|
||||||
void __cpuinit prom_smp_finish(void)
|
|
||||||
{
|
|
||||||
write_c0_compare(read_c0_count() + (8* mips_hpt_frequency/HZ));
|
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS_MT_FPAFF
|
#ifdef CONFIG_MIPS_MT_FPAFF
|
||||||
/* If we have an FPU, enroll ourselves in the FPU-full mask */
|
/* If we have an FPU, enroll ourselves in the FPU-full mask */
|
||||||
if (cpu_has_fpu)
|
if (cpu_has_fpu)
|
||||||
cpu_set(smp_processor_id(), mt_fpu_cpumask);
|
cpu_set(0, mt_fpu_cpumask);
|
||||||
#endif /* CONFIG_MIPS_MT_FPAFF */
|
#endif /* CONFIG_MIPS_MT_FPAFF */
|
||||||
|
if (!cpu_has_mipsmt)
|
||||||
|
return;
|
||||||
|
|
||||||
local_irq_enable();
|
/* disable MT so we can configure */
|
||||||
}
|
dvpe();
|
||||||
|
dmt();
|
||||||
|
|
||||||
void prom_cpus_done(void)
|
/* Put MVPE's into 'configuration state' */
|
||||||
{
|
set_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||||
}
|
|
||||||
|
|
||||||
void core_send_ipi(int cpu, unsigned int action)
|
mvpconf0 = read_c0_mvpconf0();
|
||||||
{
|
ntc = (mvpconf0 & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT;
|
||||||
int i;
|
|
||||||
unsigned long flags;
|
|
||||||
int vpflags;
|
|
||||||
|
|
||||||
local_irq_save(flags);
|
nvpe = ((mvpconf0 & MVPCONF0_PVPE) >> MVPCONF0_PVPE_SHIFT) + 1;
|
||||||
|
smp_num_siblings = nvpe;
|
||||||
|
|
||||||
vpflags = dvpe(); /* cant access the other CPU's registers whilst MVPE enabled */
|
/* we'll always have more TC's than VPE's, so loop setting everything
|
||||||
|
to a sensible state */
|
||||||
|
for (tc = 0; tc <= ntc; tc++) {
|
||||||
|
settc(tc);
|
||||||
|
|
||||||
switch (action) {
|
smp_tc_init(tc, mvpconf0);
|
||||||
case SMP_CALL_FUNCTION:
|
ncpu = smp_vpe_init(tc, mvpconf0, ncpu);
|
||||||
i = C_SW1;
|
|
||||||
break;
|
|
||||||
|
|
||||||
case SMP_RESCHEDULE_YOURSELF:
|
|
||||||
default:
|
|
||||||
i = C_SW0;
|
|
||||||
break;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* 1:1 mapping of vpe and tc... */
|
/* Release config state */
|
||||||
settc(cpu);
|
clear_c0_mvpcontrol(MVPCONTROL_VPC);
|
||||||
write_vpe_c0_cause(read_vpe_c0_cause() | i);
|
|
||||||
evpe(vpflags);
|
|
||||||
|
|
||||||
local_irq_restore(flags);
|
/* We'll wait until starting the secondaries before starting MVPE */
|
||||||
|
|
||||||
|
printk(KERN_INFO "Detected %i available secondary CPU(s)\n", ncpu);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static void __init vsmp_prepare_cpus(unsigned int max_cpus)
|
||||||
|
{
|
||||||
|
mips_mt_set_cpuoptions();
|
||||||
|
|
||||||
|
/* set up ipi interrupts */
|
||||||
|
if (cpu_has_vint) {
|
||||||
|
set_vi_handler(MIPS_CPU_IPI_RESCHED_IRQ, ipi_resched_dispatch);
|
||||||
|
set_vi_handler(MIPS_CPU_IPI_CALL_IRQ, ipi_call_dispatch);
|
||||||
|
}
|
||||||
|
|
||||||
|
cpu_ipi_resched_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_RESCHED_IRQ;
|
||||||
|
cpu_ipi_call_irq = MIPS_CPU_IRQ_BASE + MIPS_CPU_IPI_CALL_IRQ;
|
||||||
|
|
||||||
|
setup_irq(cpu_ipi_resched_irq, &irq_resched);
|
||||||
|
setup_irq(cpu_ipi_call_irq, &irq_call);
|
||||||
|
|
||||||
|
set_irq_handler(cpu_ipi_resched_irq, handle_percpu_irq);
|
||||||
|
set_irq_handler(cpu_ipi_call_irq, handle_percpu_irq);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct plat_smp_ops vsmp_smp_ops = {
|
||||||
|
.send_ipi_single = vsmp_send_ipi_single,
|
||||||
|
.send_ipi_mask = vsmp_send_ipi_mask,
|
||||||
|
.init_secondary = vsmp_init_secondary,
|
||||||
|
.smp_finish = vsmp_smp_finish,
|
||||||
|
.cpus_done = vsmp_cpus_done,
|
||||||
|
.boot_secondary = vsmp_boot_secondary,
|
||||||
|
.smp_setup = vsmp_smp_setup,
|
||||||
|
.prepare_cpus = vsmp_prepare_cpus,
|
||||||
|
};
|
||||||
|
|
|
@ -37,7 +37,6 @@
|
||||||
#include <asm/processor.h>
|
#include <asm/processor.h>
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/smp.h>
|
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
|
|
||||||
#ifdef CONFIG_MIPS_MT_SMTC
|
#ifdef CONFIG_MIPS_MT_SMTC
|
||||||
|
@ -56,6 +55,44 @@ EXPORT_SYMBOL(cpu_online_map);
|
||||||
extern void __init calibrate_delay(void);
|
extern void __init calibrate_delay(void);
|
||||||
extern void cpu_idle(void);
|
extern void cpu_idle(void);
|
||||||
|
|
||||||
|
/* Number of TCs (or siblings in Intel speak) per CPU core */
|
||||||
|
int smp_num_siblings = 1;
|
||||||
|
EXPORT_SYMBOL(smp_num_siblings);
|
||||||
|
|
||||||
|
/* representing the TCs (or siblings in Intel speak) of each logical CPU */
|
||||||
|
cpumask_t cpu_sibling_map[NR_CPUS] __read_mostly;
|
||||||
|
EXPORT_SYMBOL(cpu_sibling_map);
|
||||||
|
|
||||||
|
/* representing cpus for which sibling maps can be computed */
|
||||||
|
static cpumask_t cpu_sibling_setup_map;
|
||||||
|
|
||||||
|
static inline void set_cpu_sibling_map(int cpu)
|
||||||
|
{
|
||||||
|
int i;
|
||||||
|
|
||||||
|
cpu_set(cpu, cpu_sibling_setup_map);
|
||||||
|
|
||||||
|
if (smp_num_siblings > 1) {
|
||||||
|
for_each_cpu_mask(i, cpu_sibling_setup_map) {
|
||||||
|
if (cpu_data[cpu].core == cpu_data[i].core) {
|
||||||
|
cpu_set(i, cpu_sibling_map[cpu]);
|
||||||
|
cpu_set(cpu, cpu_sibling_map[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
} else
|
||||||
|
cpu_set(cpu, cpu_sibling_map[cpu]);
|
||||||
|
}
|
||||||
|
|
||||||
|
struct plat_smp_ops *mp_ops;
|
||||||
|
|
||||||
|
__cpuinit void register_smp_ops(struct plat_smp_ops *ops)
|
||||||
|
{
|
||||||
|
if (ops)
|
||||||
|
printk(KERN_WARNING "Overriding previous set SMP ops\n");
|
||||||
|
|
||||||
|
mp_ops = ops;
|
||||||
|
}
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* First C code run on the secondary CPUs after being started up by
|
* First C code run on the secondary CPUs after being started up by
|
||||||
* the master.
|
* the master.
|
||||||
|
@ -72,7 +109,7 @@ asmlinkage __cpuinit void start_secondary(void)
|
||||||
cpu_report();
|
cpu_report();
|
||||||
per_cpu_trap_init();
|
per_cpu_trap_init();
|
||||||
mips_clockevent_init();
|
mips_clockevent_init();
|
||||||
prom_init_secondary();
|
mp_ops->init_secondary();
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* XXX parity protection should be folded in here when it's converted
|
* XXX parity protection should be folded in here when it's converted
|
||||||
|
@ -84,7 +121,8 @@ asmlinkage __cpuinit void start_secondary(void)
|
||||||
cpu = smp_processor_id();
|
cpu = smp_processor_id();
|
||||||
cpu_data[cpu].udelay_val = loops_per_jiffy;
|
cpu_data[cpu].udelay_val = loops_per_jiffy;
|
||||||
|
|
||||||
prom_smp_finish();
|
mp_ops->smp_finish();
|
||||||
|
set_cpu_sibling_map(cpu);
|
||||||
|
|
||||||
cpu_set(cpu, cpu_callin_map);
|
cpu_set(cpu, cpu_callin_map);
|
||||||
|
|
||||||
|
@ -155,7 +193,7 @@ int smp_call_function_mask(cpumask_t mask, void (*func) (void *info),
|
||||||
smp_mb();
|
smp_mb();
|
||||||
|
|
||||||
/* Send a message to all other CPUs and wait for them to respond */
|
/* Send a message to all other CPUs and wait for them to respond */
|
||||||
core_send_ipi_mask(mask, SMP_CALL_FUNCTION);
|
mp_ops->send_ipi_mask(mask, SMP_CALL_FUNCTION);
|
||||||
|
|
||||||
/* Wait for response */
|
/* Wait for response */
|
||||||
/* FIXME: lock-up detection, backtrace on lock-up */
|
/* FIXME: lock-up detection, backtrace on lock-up */
|
||||||
|
@ -249,7 +287,7 @@ void smp_send_stop(void)
|
||||||
|
|
||||||
void __init smp_cpus_done(unsigned int max_cpus)
|
void __init smp_cpus_done(unsigned int max_cpus)
|
||||||
{
|
{
|
||||||
prom_cpus_done();
|
mp_ops->cpus_done();
|
||||||
}
|
}
|
||||||
|
|
||||||
/* called from main before smp_init() */
|
/* called from main before smp_init() */
|
||||||
|
@ -257,7 +295,8 @@ void __init smp_prepare_cpus(unsigned int max_cpus)
|
||||||
{
|
{
|
||||||
init_new_context(current, &init_mm);
|
init_new_context(current, &init_mm);
|
||||||
current_thread_info()->cpu = 0;
|
current_thread_info()->cpu = 0;
|
||||||
plat_prepare_cpus(max_cpus);
|
mp_ops->prepare_cpus(max_cpus);
|
||||||
|
set_cpu_sibling_map(0);
|
||||||
#ifndef CONFIG_HOTPLUG_CPU
|
#ifndef CONFIG_HOTPLUG_CPU
|
||||||
cpu_present_map = cpu_possible_map;
|
cpu_present_map = cpu_possible_map;
|
||||||
#endif
|
#endif
|
||||||
|
@ -295,7 +334,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
|
||||||
if (IS_ERR(idle))
|
if (IS_ERR(idle))
|
||||||
panic(KERN_ERR "Fork failed for CPU %d", cpu);
|
panic(KERN_ERR "Fork failed for CPU %d", cpu);
|
||||||
|
|
||||||
prom_boot_secondary(cpu, idle);
|
mp_ops->boot_secondary(cpu, idle);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Trust is futile. We should really have timeouts ...
|
* Trust is futile. We should really have timeouts ...
|
||||||
|
|
|
@ -14,7 +14,6 @@
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/hardirq.h>
|
#include <asm/hardirq.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/smp.h>
|
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <linux/proc_fs.h>
|
#include <linux/proc_fs.h>
|
||||||
|
|
|
@ -16,7 +16,6 @@
|
||||||
#include <asm/hazards.h>
|
#include <asm/hazards.h>
|
||||||
#include <asm/irq.h>
|
#include <asm/irq.h>
|
||||||
#include <asm/mmu_context.h>
|
#include <asm/mmu_context.h>
|
||||||
#include <asm/smp.h>
|
|
||||||
#include <asm/mipsregs.h>
|
#include <asm/mipsregs.h>
|
||||||
#include <asm/cacheflush.h>
|
#include <asm/cacheflush.h>
|
||||||
#include <asm/time.h>
|
#include <asm/time.h>
|
||||||
|
|
|
@ -50,8 +50,6 @@ int update_persistent_clock(struct timespec now)
|
||||||
return rtc_mips_set_mmss(now.tv_sec);
|
return rtc_mips_set_mmss(now.tv_sec);
|
||||||
}
|
}
|
||||||
|
|
||||||
int (*mips_timer_state)(void);
|
|
||||||
|
|
||||||
int null_perf_irq(void)
|
int null_perf_irq(void)
|
||||||
{
|
{
|
||||||
return 0;
|
return 0;
|
||||||
|
|
|
@ -53,7 +53,6 @@
|
||||||
#include <asm/system.h>
|
#include <asm/system.h>
|
||||||
#include <asm/vpe.h>
|
#include <asm/vpe.h>
|
||||||
#include <asm/kspd.h>
|
#include <asm/kspd.h>
|
||||||
#include <asm/mips_mt.h>
|
|
||||||
|
|
||||||
typedef void *vpe_handle;
|
typedef void *vpe_handle;
|
||||||
|
|
||||||
|
|
|
@ -22,8 +22,6 @@
|
||||||
|
|
||||||
struct pvc_defs *picvue;
|
struct pvc_defs *picvue;
|
||||||
|
|
||||||
DECLARE_MUTEX(pvc_sem);
|
|
||||||
|
|
||||||
static void pvc_reg_write(u32 val)
|
static void pvc_reg_write(u32 val)
|
||||||
{
|
{
|
||||||
*picvue->reg = val;
|
*picvue->reg = val;
|
||||||
|
|
|
@ -4,8 +4,6 @@
|
||||||
* Brian Murphy <brian.murphy@eicon.com>
|
* Brian Murphy <brian.murphy@eicon.com>
|
||||||
*
|
*
|
||||||
*/
|
*/
|
||||||
#include <asm/semaphore.h>
|
|
||||||
|
|
||||||
struct pvc_defs {
|
struct pvc_defs {
|
||||||
volatile u32 *reg;
|
volatile u32 *reg;
|
||||||
u32 data_shift;
|
u32 data_shift;
|
||||||
|
@ -45,4 +43,3 @@ void pvc_move(u8 cmd);
|
||||||
void pvc_clear(void);
|
void pvc_clear(void);
|
||||||
void pvc_home(void);
|
void pvc_home(void);
|
||||||
|
|
||||||
extern struct semaphore pvc_sem;
|
|
||||||
|
|
|
@ -13,9 +13,11 @@
|
||||||
#include <linux/interrupt.h>
|
#include <linux/interrupt.h>
|
||||||
|
|
||||||
#include <linux/timer.h>
|
#include <linux/timer.h>
|
||||||
|
#include <linux/mutex.h>
|
||||||
|
|
||||||
#include "picvue.h"
|
#include "picvue.h"
|
||||||
|
|
||||||
|
static DEFINE_MUTEX(pvc_mutex);
|
||||||
static char pvc_lines[PVC_NLINES][PVC_LINELEN+1];
|
static char pvc_lines[PVC_NLINES][PVC_LINELEN+1];
|
||||||
static int pvc_linedata[PVC_NLINES];
|
static int pvc_linedata[PVC_NLINES];
|
||||||
static struct proc_dir_entry *pvc_display_dir;
|
static struct proc_dir_entry *pvc_display_dir;
|
||||||
|
@ -48,9 +50,9 @@ static int pvc_proc_read_line(char *page, char **start,
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
down(&pvc_sem);
|
mutex_lock(&pvc_mutex);
|
||||||
page += sprintf(page, "%s\n", pvc_lines[lineno]);
|
page += sprintf(page, "%s\n", pvc_lines[lineno]);
|
||||||
up(&pvc_sem);
|
mutex_unlock(&pvc_mutex);
|
||||||
|
|
||||||
return page - origpage;
|
return page - origpage;
|
||||||
}
|
}
|
||||||
|
@ -73,10 +75,10 @@ static int pvc_proc_write_line(struct file *file, const char *buffer,
|
||||||
if (buffer[count-1] == '\n')
|
if (buffer[count-1] == '\n')
|
||||||
count--;
|
count--;
|
||||||
|
|
||||||
down(&pvc_sem);
|
mutex_lock(&pvc_mutex);
|
||||||
strncpy(pvc_lines[lineno], buffer, count);
|
strncpy(pvc_lines[lineno], buffer, count);
|
||||||
pvc_lines[lineno][count] = '\0';
|
pvc_lines[lineno][count] = '\0';
|
||||||
up(&pvc_sem);
|
mutex_unlock(&pvc_mutex);
|
||||||
|
|
||||||
tasklet_schedule(&pvc_display_tasklet);
|
tasklet_schedule(&pvc_display_tasklet);
|
||||||
|
|
||||||
|
@ -89,7 +91,7 @@ static int pvc_proc_write_scroll(struct file *file, const char *buffer,
|
||||||
int origcount = count;
|
int origcount = count;
|
||||||
int cmd = simple_strtol(buffer, NULL, 10);
|
int cmd = simple_strtol(buffer, NULL, 10);
|
||||||
|
|
||||||
down(&pvc_sem);
|
mutex_lock(&pvc_mutex);
|
||||||
if (scroll_interval != 0)
|
if (scroll_interval != 0)
|
||||||
del_timer(&timer);
|
del_timer(&timer);
|
||||||
|
|
||||||
|
@ -106,7 +108,7 @@ static int pvc_proc_write_scroll(struct file *file, const char *buffer,
|
||||||
}
|
}
|
||||||
add_timer(&timer);
|
add_timer(&timer);
|
||||||
}
|
}
|
||||||
up(&pvc_sem);
|
mutex_unlock(&pvc_mutex);
|
||||||
|
|
||||||
return origcount;
|
return origcount;
|
||||||
}
|
}
|
||||||
|
@ -117,9 +119,9 @@ static int pvc_proc_read_scroll(char *page, char **start,
|
||||||
{
|
{
|
||||||
char *origpage = page;
|
char *origpage = page;
|
||||||
|
|
||||||
down(&pvc_sem);
|
mutex_lock(&pvc_mutex);
|
||||||
page += sprintf(page, "%d\n", scroll_dir * scroll_interval);
|
page += sprintf(page, "%d\n", scroll_dir * scroll_interval);
|
||||||
up(&pvc_sem);
|
mutex_unlock(&pvc_mutex);
|
||||||
|
|
||||||
return page - origpage;
|
return page - origpage;
|
||||||
}
|
}
|
||||||
|
|
|
@ -81,9 +81,6 @@ static void __init ict_pcimap(void)
|
||||||
|
|
||||||
static int __init pcibios_init(void)
|
static int __init pcibios_init(void)
|
||||||
{
|
{
|
||||||
extern int pci_probe_only;
|
|
||||||
pci_probe_only = 0;
|
|
||||||
|
|
||||||
ict_pcimap();
|
ict_pcimap();
|
||||||
register_pci_controller(&loongson2e_pci_controller);
|
register_pci_controller(&loongson2e_pci_controller);
|
||||||
|
|
||||||
|
|
|
@ -57,8 +57,6 @@ void __init prom_init(void)
|
||||||
arg = (int *)fw_arg1;
|
arg = (int *)fw_arg1;
|
||||||
env = (int *)fw_arg2;
|
env = (int *)fw_arg2;
|
||||||
|
|
||||||
mips_machtype = MACH_LEMOTE_FULONG;
|
|
||||||
|
|
||||||
prom_init_cmdline();
|
prom_init_cmdline();
|
||||||
|
|
||||||
if ((strstr(arcs_cmdline, "console=")) == NULL)
|
if ((strstr(arcs_cmdline, "console=")) == NULL)
|
||||||
|
|
|
@ -7,6 +7,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998, 1999 Ralf Baechle
|
* Copyright (C) 1998, 1999 Ralf Baechle
|
||||||
* Copyright (C) 1999 Silicon Graphics, Inc.
|
* Copyright (C) 1999 Silicon Graphics, Inc.
|
||||||
|
* Copyright (C) 2007 Maciej W. Rozycki
|
||||||
*/
|
*/
|
||||||
#include <linux/errno.h>
|
#include <linux/errno.h>
|
||||||
#include <asm/asm.h>
|
#include <asm/asm.h>
|
||||||
|
@ -52,9 +53,12 @@
|
||||||
#define UNIT(unit) ((unit)*NBYTES)
|
#define UNIT(unit) ((unit)*NBYTES)
|
||||||
|
|
||||||
#define ADDC(sum,reg) \
|
#define ADDC(sum,reg) \
|
||||||
|
.set push; \
|
||||||
|
.set noat; \
|
||||||
ADD sum, reg; \
|
ADD sum, reg; \
|
||||||
sltu v1, sum, reg; \
|
sltu v1, sum, reg; \
|
||||||
ADD sum, v1
|
ADD sum, v1; \
|
||||||
|
.set pop
|
||||||
|
|
||||||
#define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3) \
|
#define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3) \
|
||||||
LOAD _t0, (offset + UNIT(0))(src); \
|
LOAD _t0, (offset + UNIT(0))(src); \
|
||||||
|
@ -92,13 +96,13 @@ LEAF(csum_partial)
|
||||||
move t7, zero
|
move t7, zero
|
||||||
|
|
||||||
sltiu t8, a1, 0x8
|
sltiu t8, a1, 0x8
|
||||||
bnez t8, small_csumcpy /* < 8 bytes to copy */
|
bnez t8, .Lsmall_csumcpy /* < 8 bytes to copy */
|
||||||
move t2, a1
|
move t2, a1
|
||||||
|
|
||||||
andi t7, src, 0x1 /* odd buffer? */
|
andi t7, src, 0x1 /* odd buffer? */
|
||||||
|
|
||||||
hword_align:
|
.Lhword_align:
|
||||||
beqz t7, word_align
|
beqz t7, .Lword_align
|
||||||
andi t8, src, 0x2
|
andi t8, src, 0x2
|
||||||
|
|
||||||
lbu t0, (src)
|
lbu t0, (src)
|
||||||
|
@ -110,8 +114,8 @@ hword_align:
|
||||||
PTR_ADDU src, src, 0x1
|
PTR_ADDU src, src, 0x1
|
||||||
andi t8, src, 0x2
|
andi t8, src, 0x2
|
||||||
|
|
||||||
word_align:
|
.Lword_align:
|
||||||
beqz t8, dword_align
|
beqz t8, .Ldword_align
|
||||||
sltiu t8, a1, 56
|
sltiu t8, a1, 56
|
||||||
|
|
||||||
lhu t0, (src)
|
lhu t0, (src)
|
||||||
|
@ -120,12 +124,12 @@ word_align:
|
||||||
sltiu t8, a1, 56
|
sltiu t8, a1, 56
|
||||||
PTR_ADDU src, src, 0x2
|
PTR_ADDU src, src, 0x2
|
||||||
|
|
||||||
dword_align:
|
.Ldword_align:
|
||||||
bnez t8, do_end_words
|
bnez t8, .Ldo_end_words
|
||||||
move t8, a1
|
move t8, a1
|
||||||
|
|
||||||
andi t8, src, 0x4
|
andi t8, src, 0x4
|
||||||
beqz t8, qword_align
|
beqz t8, .Lqword_align
|
||||||
andi t8, src, 0x8
|
andi t8, src, 0x8
|
||||||
|
|
||||||
lw t0, 0x00(src)
|
lw t0, 0x00(src)
|
||||||
|
@ -134,8 +138,8 @@ dword_align:
|
||||||
PTR_ADDU src, src, 0x4
|
PTR_ADDU src, src, 0x4
|
||||||
andi t8, src, 0x8
|
andi t8, src, 0x8
|
||||||
|
|
||||||
qword_align:
|
.Lqword_align:
|
||||||
beqz t8, oword_align
|
beqz t8, .Loword_align
|
||||||
andi t8, src, 0x10
|
andi t8, src, 0x10
|
||||||
|
|
||||||
#ifdef USE_DOUBLE
|
#ifdef USE_DOUBLE
|
||||||
|
@ -152,8 +156,8 @@ qword_align:
|
||||||
PTR_ADDU src, src, 0x8
|
PTR_ADDU src, src, 0x8
|
||||||
andi t8, src, 0x10
|
andi t8, src, 0x10
|
||||||
|
|
||||||
oword_align:
|
.Loword_align:
|
||||||
beqz t8, begin_movement
|
beqz t8, .Lbegin_movement
|
||||||
LONG_SRL t8, a1, 0x7
|
LONG_SRL t8, a1, 0x7
|
||||||
|
|
||||||
#ifdef USE_DOUBLE
|
#ifdef USE_DOUBLE
|
||||||
|
@ -168,51 +172,55 @@ oword_align:
|
||||||
PTR_ADDU src, src, 0x10
|
PTR_ADDU src, src, 0x10
|
||||||
LONG_SRL t8, a1, 0x7
|
LONG_SRL t8, a1, 0x7
|
||||||
|
|
||||||
begin_movement:
|
.Lbegin_movement:
|
||||||
beqz t8, 1f
|
beqz t8, 1f
|
||||||
andi t2, a1, 0x40
|
andi t2, a1, 0x40
|
||||||
|
|
||||||
move_128bytes:
|
.Lmove_128bytes:
|
||||||
CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
|
CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
|
||||||
CSUM_BIGCHUNK(src, 0x20, sum, t0, t1, t3, t4)
|
CSUM_BIGCHUNK(src, 0x20, sum, t0, t1, t3, t4)
|
||||||
CSUM_BIGCHUNK(src, 0x40, sum, t0, t1, t3, t4)
|
CSUM_BIGCHUNK(src, 0x40, sum, t0, t1, t3, t4)
|
||||||
CSUM_BIGCHUNK(src, 0x60, sum, t0, t1, t3, t4)
|
CSUM_BIGCHUNK(src, 0x60, sum, t0, t1, t3, t4)
|
||||||
LONG_SUBU t8, t8, 0x01
|
LONG_SUBU t8, t8, 0x01
|
||||||
bnez t8, move_128bytes
|
.set reorder /* DADDI_WAR */
|
||||||
PTR_ADDU src, src, 0x80
|
PTR_ADDU src, src, 0x80
|
||||||
|
bnez t8, .Lmove_128bytes
|
||||||
|
.set noreorder
|
||||||
|
|
||||||
1:
|
1:
|
||||||
beqz t2, 1f
|
beqz t2, 1f
|
||||||
andi t2, a1, 0x20
|
andi t2, a1, 0x20
|
||||||
|
|
||||||
move_64bytes:
|
.Lmove_64bytes:
|
||||||
CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
|
CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
|
||||||
CSUM_BIGCHUNK(src, 0x20, sum, t0, t1, t3, t4)
|
CSUM_BIGCHUNK(src, 0x20, sum, t0, t1, t3, t4)
|
||||||
PTR_ADDU src, src, 0x40
|
PTR_ADDU src, src, 0x40
|
||||||
|
|
||||||
1:
|
1:
|
||||||
beqz t2, do_end_words
|
beqz t2, .Ldo_end_words
|
||||||
andi t8, a1, 0x1c
|
andi t8, a1, 0x1c
|
||||||
|
|
||||||
move_32bytes:
|
.Lmove_32bytes:
|
||||||
CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
|
CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
|
||||||
andi t8, a1, 0x1c
|
andi t8, a1, 0x1c
|
||||||
PTR_ADDU src, src, 0x20
|
PTR_ADDU src, src, 0x20
|
||||||
|
|
||||||
do_end_words:
|
.Ldo_end_words:
|
||||||
beqz t8, small_csumcpy
|
beqz t8, .Lsmall_csumcpy
|
||||||
andi t2, a1, 0x3
|
andi t2, a1, 0x3
|
||||||
LONG_SRL t8, t8, 0x2
|
LONG_SRL t8, t8, 0x2
|
||||||
|
|
||||||
end_words:
|
.Lend_words:
|
||||||
lw t0, (src)
|
lw t0, (src)
|
||||||
LONG_SUBU t8, t8, 0x1
|
LONG_SUBU t8, t8, 0x1
|
||||||
ADDC(sum, t0)
|
ADDC(sum, t0)
|
||||||
bnez t8, end_words
|
.set reorder /* DADDI_WAR */
|
||||||
PTR_ADDU src, src, 0x4
|
PTR_ADDU src, src, 0x4
|
||||||
|
bnez t8, .Lend_words
|
||||||
|
.set noreorder
|
||||||
|
|
||||||
/* unknown src alignment and < 8 bytes to go */
|
/* unknown src alignment and < 8 bytes to go */
|
||||||
small_csumcpy:
|
.Lsmall_csumcpy:
|
||||||
move a1, t2
|
move a1, t2
|
||||||
|
|
||||||
andi t0, a1, 4
|
andi t0, a1, 4
|
||||||
|
@ -246,6 +254,8 @@ small_csumcpy:
|
||||||
1: ADDC(sum, t1)
|
1: ADDC(sum, t1)
|
||||||
|
|
||||||
/* fold checksum */
|
/* fold checksum */
|
||||||
|
.set push
|
||||||
|
.set noat
|
||||||
#ifdef USE_DOUBLE
|
#ifdef USE_DOUBLE
|
||||||
dsll32 v1, sum, 0
|
dsll32 v1, sum, 0
|
||||||
daddu sum, v1
|
daddu sum, v1
|
||||||
|
@ -266,6 +276,7 @@ small_csumcpy:
|
||||||
srl sum, sum, 8
|
srl sum, sum, 8
|
||||||
or sum, v1
|
or sum, v1
|
||||||
andi sum, 0xffff
|
andi sum, 0xffff
|
||||||
|
.set pop
|
||||||
1:
|
1:
|
||||||
.set reorder
|
.set reorder
|
||||||
/* Add the passed partial csum. */
|
/* Add the passed partial csum. */
|
||||||
|
@ -373,7 +384,11 @@ small_csumcpy:
|
||||||
|
|
||||||
#define ADDRMASK (NBYTES-1)
|
#define ADDRMASK (NBYTES-1)
|
||||||
|
|
||||||
|
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
||||||
.set noat
|
.set noat
|
||||||
|
#else
|
||||||
|
.set at=v1
|
||||||
|
#endif
|
||||||
|
|
||||||
LEAF(__csum_partial_copy_user)
|
LEAF(__csum_partial_copy_user)
|
||||||
PTR_ADDU AT, src, len /* See (1) above. */
|
PTR_ADDU AT, src, len /* See (1) above. */
|
||||||
|
@ -398,95 +413,101 @@ FEXPORT(csum_partial_copy_nocheck)
|
||||||
*/
|
*/
|
||||||
sltu t2, len, NBYTES
|
sltu t2, len, NBYTES
|
||||||
and t1, dst, ADDRMASK
|
and t1, dst, ADDRMASK
|
||||||
bnez t2, copy_bytes_checklen
|
bnez t2, .Lcopy_bytes_checklen
|
||||||
and t0, src, ADDRMASK
|
and t0, src, ADDRMASK
|
||||||
andi odd, dst, 0x1 /* odd buffer? */
|
andi odd, dst, 0x1 /* odd buffer? */
|
||||||
bnez t1, dst_unaligned
|
bnez t1, .Ldst_unaligned
|
||||||
nop
|
nop
|
||||||
bnez t0, src_unaligned_dst_aligned
|
bnez t0, .Lsrc_unaligned_dst_aligned
|
||||||
/*
|
/*
|
||||||
* use delay slot for fall-through
|
* use delay slot for fall-through
|
||||||
* src and dst are aligned; need to compute rem
|
* src and dst are aligned; need to compute rem
|
||||||
*/
|
*/
|
||||||
both_aligned:
|
.Lboth_aligned:
|
||||||
SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter
|
SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter
|
||||||
beqz t0, cleanup_both_aligned # len < 8*NBYTES
|
beqz t0, .Lcleanup_both_aligned # len < 8*NBYTES
|
||||||
nop
|
nop
|
||||||
SUB len, 8*NBYTES # subtract here for bgez loop
|
SUB len, 8*NBYTES # subtract here for bgez loop
|
||||||
.align 4
|
.align 4
|
||||||
1:
|
1:
|
||||||
EXC( LOAD t0, UNIT(0)(src), l_exc)
|
EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
|
||||||
EXC( LOAD t1, UNIT(1)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t2, UNIT(2)(src), l_exc_copy)
|
EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t3, UNIT(3)(src), l_exc_copy)
|
EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t4, UNIT(4)(src), l_exc_copy)
|
EXC( LOAD t4, UNIT(4)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t5, UNIT(5)(src), l_exc_copy)
|
EXC( LOAD t5, UNIT(5)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t6, UNIT(6)(src), l_exc_copy)
|
EXC( LOAD t6, UNIT(6)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t7, UNIT(7)(src), l_exc_copy)
|
EXC( LOAD t7, UNIT(7)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 8*NBYTES
|
SUB len, len, 8*NBYTES
|
||||||
ADD src, src, 8*NBYTES
|
ADD src, src, 8*NBYTES
|
||||||
EXC( STORE t0, UNIT(0)(dst), s_exc)
|
EXC( STORE t0, UNIT(0)(dst), .Ls_exc)
|
||||||
ADDC(sum, t0)
|
ADDC(sum, t0)
|
||||||
EXC( STORE t1, UNIT(1)(dst), s_exc)
|
EXC( STORE t1, UNIT(1)(dst), .Ls_exc)
|
||||||
ADDC(sum, t1)
|
ADDC(sum, t1)
|
||||||
EXC( STORE t2, UNIT(2)(dst), s_exc)
|
EXC( STORE t2, UNIT(2)(dst), .Ls_exc)
|
||||||
ADDC(sum, t2)
|
ADDC(sum, t2)
|
||||||
EXC( STORE t3, UNIT(3)(dst), s_exc)
|
EXC( STORE t3, UNIT(3)(dst), .Ls_exc)
|
||||||
ADDC(sum, t3)
|
ADDC(sum, t3)
|
||||||
EXC( STORE t4, UNIT(4)(dst), s_exc)
|
EXC( STORE t4, UNIT(4)(dst), .Ls_exc)
|
||||||
ADDC(sum, t4)
|
ADDC(sum, t4)
|
||||||
EXC( STORE t5, UNIT(5)(dst), s_exc)
|
EXC( STORE t5, UNIT(5)(dst), .Ls_exc)
|
||||||
ADDC(sum, t5)
|
ADDC(sum, t5)
|
||||||
EXC( STORE t6, UNIT(6)(dst), s_exc)
|
EXC( STORE t6, UNIT(6)(dst), .Ls_exc)
|
||||||
ADDC(sum, t6)
|
ADDC(sum, t6)
|
||||||
EXC( STORE t7, UNIT(7)(dst), s_exc)
|
EXC( STORE t7, UNIT(7)(dst), .Ls_exc)
|
||||||
ADDC(sum, t7)
|
ADDC(sum, t7)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, 8*NBYTES
|
||||||
bgez len, 1b
|
bgez len, 1b
|
||||||
ADD dst, dst, 8*NBYTES
|
.set noreorder
|
||||||
ADD len, 8*NBYTES # revert len (see above)
|
ADD len, 8*NBYTES # revert len (see above)
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* len == the number of bytes left to copy < 8*NBYTES
|
* len == the number of bytes left to copy < 8*NBYTES
|
||||||
*/
|
*/
|
||||||
cleanup_both_aligned:
|
.Lcleanup_both_aligned:
|
||||||
#define rem t7
|
#define rem t7
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
sltu t0, len, 4*NBYTES
|
sltu t0, len, 4*NBYTES
|
||||||
bnez t0, less_than_4units
|
bnez t0, .Lless_than_4units
|
||||||
and rem, len, (NBYTES-1) # rem = len % NBYTES
|
and rem, len, (NBYTES-1) # rem = len % NBYTES
|
||||||
/*
|
/*
|
||||||
* len >= 4*NBYTES
|
* len >= 4*NBYTES
|
||||||
*/
|
*/
|
||||||
EXC( LOAD t0, UNIT(0)(src), l_exc)
|
EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
|
||||||
EXC( LOAD t1, UNIT(1)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t2, UNIT(2)(src), l_exc_copy)
|
EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t3, UNIT(3)(src), l_exc_copy)
|
EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 4*NBYTES
|
SUB len, len, 4*NBYTES
|
||||||
ADD src, src, 4*NBYTES
|
ADD src, src, 4*NBYTES
|
||||||
EXC( STORE t0, UNIT(0)(dst), s_exc)
|
EXC( STORE t0, UNIT(0)(dst), .Ls_exc)
|
||||||
ADDC(sum, t0)
|
ADDC(sum, t0)
|
||||||
EXC( STORE t1, UNIT(1)(dst), s_exc)
|
EXC( STORE t1, UNIT(1)(dst), .Ls_exc)
|
||||||
ADDC(sum, t1)
|
ADDC(sum, t1)
|
||||||
EXC( STORE t2, UNIT(2)(dst), s_exc)
|
EXC( STORE t2, UNIT(2)(dst), .Ls_exc)
|
||||||
ADDC(sum, t2)
|
ADDC(sum, t2)
|
||||||
EXC( STORE t3, UNIT(3)(dst), s_exc)
|
EXC( STORE t3, UNIT(3)(dst), .Ls_exc)
|
||||||
ADDC(sum, t3)
|
ADDC(sum, t3)
|
||||||
beqz len, done
|
.set reorder /* DADDI_WAR */
|
||||||
ADD dst, dst, 4*NBYTES
|
ADD dst, dst, 4*NBYTES
|
||||||
less_than_4units:
|
beqz len, .Ldone
|
||||||
|
.set noreorder
|
||||||
|
.Lless_than_4units:
|
||||||
/*
|
/*
|
||||||
* rem = len % NBYTES
|
* rem = len % NBYTES
|
||||||
*/
|
*/
|
||||||
beq rem, len, copy_bytes
|
beq rem, len, .Lcopy_bytes
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
EXC( LOAD t0, 0(src), l_exc)
|
EXC( LOAD t0, 0(src), .Ll_exc)
|
||||||
ADD src, src, NBYTES
|
ADD src, src, NBYTES
|
||||||
SUB len, len, NBYTES
|
SUB len, len, NBYTES
|
||||||
EXC( STORE t0, 0(dst), s_exc)
|
EXC( STORE t0, 0(dst), .Ls_exc)
|
||||||
ADDC(sum, t0)
|
ADDC(sum, t0)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, NBYTES
|
||||||
bne rem, len, 1b
|
bne rem, len, 1b
|
||||||
ADD dst, dst, NBYTES
|
.set noreorder
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* src and dst are aligned, need to copy rem bytes (rem < NBYTES)
|
* src and dst are aligned, need to copy rem bytes (rem < NBYTES)
|
||||||
|
@ -500,20 +521,20 @@ EXC( STORE t0, 0(dst), s_exc)
|
||||||
* more instruction-level parallelism.
|
* more instruction-level parallelism.
|
||||||
*/
|
*/
|
||||||
#define bits t2
|
#define bits t2
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
ADD t1, dst, len # t1 is just past last byte of dst
|
ADD t1, dst, len # t1 is just past last byte of dst
|
||||||
li bits, 8*NBYTES
|
li bits, 8*NBYTES
|
||||||
SLL rem, len, 3 # rem = number of bits to keep
|
SLL rem, len, 3 # rem = number of bits to keep
|
||||||
EXC( LOAD t0, 0(src), l_exc)
|
EXC( LOAD t0, 0(src), .Ll_exc)
|
||||||
SUB bits, bits, rem # bits = number of bits to discard
|
SUB bits, bits, rem # bits = number of bits to discard
|
||||||
SHIFT_DISCARD t0, t0, bits
|
SHIFT_DISCARD t0, t0, bits
|
||||||
EXC( STREST t0, -1(t1), s_exc)
|
EXC( STREST t0, -1(t1), .Ls_exc)
|
||||||
SHIFT_DISCARD_REVERT t0, t0, bits
|
SHIFT_DISCARD_REVERT t0, t0, bits
|
||||||
.set reorder
|
.set reorder
|
||||||
ADDC(sum, t0)
|
ADDC(sum, t0)
|
||||||
b done
|
b .Ldone
|
||||||
.set noreorder
|
.set noreorder
|
||||||
dst_unaligned:
|
.Ldst_unaligned:
|
||||||
/*
|
/*
|
||||||
* dst is unaligned
|
* dst is unaligned
|
||||||
* t0 = src & ADDRMASK
|
* t0 = src & ADDRMASK
|
||||||
|
@ -524,25 +545,25 @@ dst_unaligned:
|
||||||
* Set match = (src and dst have same alignment)
|
* Set match = (src and dst have same alignment)
|
||||||
*/
|
*/
|
||||||
#define match rem
|
#define match rem
|
||||||
EXC( LDFIRST t3, FIRST(0)(src), l_exc)
|
EXC( LDFIRST t3, FIRST(0)(src), .Ll_exc)
|
||||||
ADD t2, zero, NBYTES
|
ADD t2, zero, NBYTES
|
||||||
EXC( LDREST t3, REST(0)(src), l_exc_copy)
|
EXC( LDREST t3, REST(0)(src), .Ll_exc_copy)
|
||||||
SUB t2, t2, t1 # t2 = number of bytes copied
|
SUB t2, t2, t1 # t2 = number of bytes copied
|
||||||
xor match, t0, t1
|
xor match, t0, t1
|
||||||
EXC( STFIRST t3, FIRST(0)(dst), s_exc)
|
EXC( STFIRST t3, FIRST(0)(dst), .Ls_exc)
|
||||||
SLL t4, t1, 3 # t4 = number of bits to discard
|
SLL t4, t1, 3 # t4 = number of bits to discard
|
||||||
SHIFT_DISCARD t3, t3, t4
|
SHIFT_DISCARD t3, t3, t4
|
||||||
/* no SHIFT_DISCARD_REVERT to handle odd buffer properly */
|
/* no SHIFT_DISCARD_REVERT to handle odd buffer properly */
|
||||||
ADDC(sum, t3)
|
ADDC(sum, t3)
|
||||||
beq len, t2, done
|
beq len, t2, .Ldone
|
||||||
SUB len, len, t2
|
SUB len, len, t2
|
||||||
ADD dst, dst, t2
|
ADD dst, dst, t2
|
||||||
beqz match, both_aligned
|
beqz match, .Lboth_aligned
|
||||||
ADD src, src, t2
|
ADD src, src, t2
|
||||||
|
|
||||||
src_unaligned_dst_aligned:
|
.Lsrc_unaligned_dst_aligned:
|
||||||
SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter
|
SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter
|
||||||
beqz t0, cleanup_src_unaligned
|
beqz t0, .Lcleanup_src_unaligned
|
||||||
and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES
|
and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES
|
||||||
1:
|
1:
|
||||||
/*
|
/*
|
||||||
|
@ -551,49 +572,53 @@ src_unaligned_dst_aligned:
|
||||||
* It's OK to load FIRST(N+1) before REST(N) because the two addresses
|
* It's OK to load FIRST(N+1) before REST(N) because the two addresses
|
||||||
* are to the same unit (unless src is aligned, but it's not).
|
* are to the same unit (unless src is aligned, but it's not).
|
||||||
*/
|
*/
|
||||||
EXC( LDFIRST t0, FIRST(0)(src), l_exc)
|
EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
|
||||||
EXC( LDFIRST t1, FIRST(1)(src), l_exc_copy)
|
EXC( LDFIRST t1, FIRST(1)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 4*NBYTES
|
SUB len, len, 4*NBYTES
|
||||||
EXC( LDREST t0, REST(0)(src), l_exc_copy)
|
EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t1, REST(1)(src), l_exc_copy)
|
EXC( LDREST t1, REST(1)(src), .Ll_exc_copy)
|
||||||
EXC( LDFIRST t2, FIRST(2)(src), l_exc_copy)
|
EXC( LDFIRST t2, FIRST(2)(src), .Ll_exc_copy)
|
||||||
EXC( LDFIRST t3, FIRST(3)(src), l_exc_copy)
|
EXC( LDFIRST t3, FIRST(3)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t2, REST(2)(src), l_exc_copy)
|
EXC( LDREST t2, REST(2)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t3, REST(3)(src), l_exc_copy)
|
EXC( LDREST t3, REST(3)(src), .Ll_exc_copy)
|
||||||
ADD src, src, 4*NBYTES
|
ADD src, src, 4*NBYTES
|
||||||
#ifdef CONFIG_CPU_SB1
|
#ifdef CONFIG_CPU_SB1
|
||||||
nop # improves slotting
|
nop # improves slotting
|
||||||
#endif
|
#endif
|
||||||
EXC( STORE t0, UNIT(0)(dst), s_exc)
|
EXC( STORE t0, UNIT(0)(dst), .Ls_exc)
|
||||||
ADDC(sum, t0)
|
ADDC(sum, t0)
|
||||||
EXC( STORE t1, UNIT(1)(dst), s_exc)
|
EXC( STORE t1, UNIT(1)(dst), .Ls_exc)
|
||||||
ADDC(sum, t1)
|
ADDC(sum, t1)
|
||||||
EXC( STORE t2, UNIT(2)(dst), s_exc)
|
EXC( STORE t2, UNIT(2)(dst), .Ls_exc)
|
||||||
ADDC(sum, t2)
|
ADDC(sum, t2)
|
||||||
EXC( STORE t3, UNIT(3)(dst), s_exc)
|
EXC( STORE t3, UNIT(3)(dst), .Ls_exc)
|
||||||
ADDC(sum, t3)
|
ADDC(sum, t3)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, 4*NBYTES
|
||||||
bne len, rem, 1b
|
bne len, rem, 1b
|
||||||
ADD dst, dst, 4*NBYTES
|
.set noreorder
|
||||||
|
|
||||||
cleanup_src_unaligned:
|
.Lcleanup_src_unaligned:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
and rem, len, NBYTES-1 # rem = len % NBYTES
|
and rem, len, NBYTES-1 # rem = len % NBYTES
|
||||||
beq rem, len, copy_bytes
|
beq rem, len, .Lcopy_bytes
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
EXC( LDFIRST t0, FIRST(0)(src), l_exc)
|
EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
|
||||||
EXC( LDREST t0, REST(0)(src), l_exc_copy)
|
EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
|
||||||
ADD src, src, NBYTES
|
ADD src, src, NBYTES
|
||||||
SUB len, len, NBYTES
|
SUB len, len, NBYTES
|
||||||
EXC( STORE t0, 0(dst), s_exc)
|
EXC( STORE t0, 0(dst), .Ls_exc)
|
||||||
ADDC(sum, t0)
|
ADDC(sum, t0)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, NBYTES
|
||||||
bne len, rem, 1b
|
bne len, rem, 1b
|
||||||
ADD dst, dst, NBYTES
|
.set noreorder
|
||||||
|
|
||||||
copy_bytes_checklen:
|
.Lcopy_bytes_checklen:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
nop
|
nop
|
||||||
copy_bytes:
|
.Lcopy_bytes:
|
||||||
/* 0 < len < NBYTES */
|
/* 0 < len < NBYTES */
|
||||||
#ifdef CONFIG_CPU_LITTLE_ENDIAN
|
#ifdef CONFIG_CPU_LITTLE_ENDIAN
|
||||||
#define SHIFT_START 0
|
#define SHIFT_START 0
|
||||||
|
@ -604,14 +629,14 @@ copy_bytes:
|
||||||
#endif
|
#endif
|
||||||
move t2, zero # partial word
|
move t2, zero # partial word
|
||||||
li t3, SHIFT_START # shift
|
li t3, SHIFT_START # shift
|
||||||
/* use l_exc_copy here to return correct sum on fault */
|
/* use .Ll_exc_copy here to return correct sum on fault */
|
||||||
#define COPY_BYTE(N) \
|
#define COPY_BYTE(N) \
|
||||||
EXC( lbu t0, N(src), l_exc_copy); \
|
EXC( lbu t0, N(src), .Ll_exc_copy); \
|
||||||
SUB len, len, 1; \
|
SUB len, len, 1; \
|
||||||
EXC( sb t0, N(dst), s_exc); \
|
EXC( sb t0, N(dst), .Ls_exc); \
|
||||||
SLLV t0, t0, t3; \
|
SLLV t0, t0, t3; \
|
||||||
addu t3, SHIFT_INC; \
|
addu t3, SHIFT_INC; \
|
||||||
beqz len, copy_bytes_done; \
|
beqz len, .Lcopy_bytes_done; \
|
||||||
or t2, t0
|
or t2, t0
|
||||||
|
|
||||||
COPY_BYTE(0)
|
COPY_BYTE(0)
|
||||||
|
@ -622,15 +647,17 @@ EXC( sb t0, N(dst), s_exc); \
|
||||||
COPY_BYTE(4)
|
COPY_BYTE(4)
|
||||||
COPY_BYTE(5)
|
COPY_BYTE(5)
|
||||||
#endif
|
#endif
|
||||||
EXC( lbu t0, NBYTES-2(src), l_exc_copy)
|
EXC( lbu t0, NBYTES-2(src), .Ll_exc_copy)
|
||||||
SUB len, len, 1
|
SUB len, len, 1
|
||||||
EXC( sb t0, NBYTES-2(dst), s_exc)
|
EXC( sb t0, NBYTES-2(dst), .Ls_exc)
|
||||||
SLLV t0, t0, t3
|
SLLV t0, t0, t3
|
||||||
or t2, t0
|
or t2, t0
|
||||||
copy_bytes_done:
|
.Lcopy_bytes_done:
|
||||||
ADDC(sum, t2)
|
ADDC(sum, t2)
|
||||||
done:
|
.Ldone:
|
||||||
/* fold checksum */
|
/* fold checksum */
|
||||||
|
.set push
|
||||||
|
.set noat
|
||||||
#ifdef USE_DOUBLE
|
#ifdef USE_DOUBLE
|
||||||
dsll32 v1, sum, 0
|
dsll32 v1, sum, 0
|
||||||
daddu sum, v1
|
daddu sum, v1
|
||||||
|
@ -651,13 +678,14 @@ done:
|
||||||
srl sum, sum, 8
|
srl sum, sum, 8
|
||||||
or sum, v1
|
or sum, v1
|
||||||
andi sum, 0xffff
|
andi sum, 0xffff
|
||||||
|
.set pop
|
||||||
1:
|
1:
|
||||||
.set reorder
|
.set reorder
|
||||||
ADDC(sum, psum)
|
ADDC(sum, psum)
|
||||||
jr ra
|
jr ra
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
|
||||||
l_exc_copy:
|
.Ll_exc_copy:
|
||||||
/*
|
/*
|
||||||
* Copy bytes from src until faulting load address (or until a
|
* Copy bytes from src until faulting load address (or until a
|
||||||
* lb faults)
|
* lb faults)
|
||||||
|
@ -672,15 +700,17 @@ l_exc_copy:
|
||||||
li t2, SHIFT_START
|
li t2, SHIFT_START
|
||||||
LOAD t0, THREAD_BUADDR(t0)
|
LOAD t0, THREAD_BUADDR(t0)
|
||||||
1:
|
1:
|
||||||
EXC( lbu t1, 0(src), l_exc)
|
EXC( lbu t1, 0(src), .Ll_exc)
|
||||||
ADD src, src, 1
|
ADD src, src, 1
|
||||||
sb t1, 0(dst) # can't fault -- we're copy_from_user
|
sb t1, 0(dst) # can't fault -- we're copy_from_user
|
||||||
SLLV t1, t1, t2
|
SLLV t1, t1, t2
|
||||||
addu t2, SHIFT_INC
|
addu t2, SHIFT_INC
|
||||||
ADDC(sum, t1)
|
ADDC(sum, t1)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, 1
|
||||||
bne src, t0, 1b
|
bne src, t0, 1b
|
||||||
ADD dst, dst, 1
|
.set noreorder
|
||||||
l_exc:
|
.Ll_exc:
|
||||||
LOAD t0, TI_TASK($28)
|
LOAD t0, TI_TASK($28)
|
||||||
nop
|
nop
|
||||||
LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address
|
LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address
|
||||||
|
@ -697,19 +727,30 @@ l_exc:
|
||||||
* Clear len bytes starting at dst. Can't call __bzero because it
|
* Clear len bytes starting at dst. Can't call __bzero because it
|
||||||
* might modify len. An inefficient loop for these rare times...
|
* might modify len. An inefficient loop for these rare times...
|
||||||
*/
|
*/
|
||||||
beqz len, done
|
.set reorder /* DADDI_WAR */
|
||||||
SUB src, len, 1
|
SUB src, len, 1
|
||||||
|
beqz len, .Ldone
|
||||||
|
.set noreorder
|
||||||
1: sb zero, 0(dst)
|
1: sb zero, 0(dst)
|
||||||
ADD dst, dst, 1
|
ADD dst, dst, 1
|
||||||
|
.set push
|
||||||
|
.set noat
|
||||||
|
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
||||||
bnez src, 1b
|
bnez src, 1b
|
||||||
SUB src, src, 1
|
SUB src, src, 1
|
||||||
|
#else
|
||||||
|
li v1, 1
|
||||||
|
bnez src, 1b
|
||||||
|
SUB src, src, v1
|
||||||
|
#endif
|
||||||
li v1, -EFAULT
|
li v1, -EFAULT
|
||||||
b done
|
b .Ldone
|
||||||
sw v1, (errptr)
|
sw v1, (errptr)
|
||||||
|
|
||||||
s_exc:
|
.Ls_exc:
|
||||||
li v0, -1 /* invalid checksum */
|
li v0, -1 /* invalid checksum */
|
||||||
li v1, -EFAULT
|
li v1, -EFAULT
|
||||||
jr ra
|
jr ra
|
||||||
sw v1, (errptr)
|
sw v1, (errptr)
|
||||||
|
.set pop
|
||||||
END(__csum_partial_copy_user)
|
END(__csum_partial_copy_user)
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
* Copyright (C) 1999, 2000, 01, 2002 Silicon Graphics, Inc.
|
* Copyright (C) 1999, 2000, 01, 2002 Silicon Graphics, Inc.
|
||||||
* Copyright (C) 2002 Broadcom, Inc.
|
* Copyright (C) 2002 Broadcom, Inc.
|
||||||
* memcpy/copy_user author: Mark Vandevoorde
|
* memcpy/copy_user author: Mark Vandevoorde
|
||||||
|
* Copyright (C) 2007 Maciej W. Rozycki
|
||||||
*
|
*
|
||||||
* Mnemonic names for arguments to memcpy/__copy_user
|
* Mnemonic names for arguments to memcpy/__copy_user
|
||||||
*/
|
*/
|
||||||
|
@ -175,7 +176,11 @@
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
||||||
.set noat
|
.set noat
|
||||||
|
#else
|
||||||
|
.set at=v1
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A combined memcpy/__copy_user
|
* A combined memcpy/__copy_user
|
||||||
|
@ -204,36 +209,36 @@ LEAF(__copy_user_inatomic)
|
||||||
and t1, dst, ADDRMASK
|
and t1, dst, ADDRMASK
|
||||||
PREF( 0, 1*32(src) )
|
PREF( 0, 1*32(src) )
|
||||||
PREF( 1, 1*32(dst) )
|
PREF( 1, 1*32(dst) )
|
||||||
bnez t2, copy_bytes_checklen
|
bnez t2, .Lcopy_bytes_checklen
|
||||||
and t0, src, ADDRMASK
|
and t0, src, ADDRMASK
|
||||||
PREF( 0, 2*32(src) )
|
PREF( 0, 2*32(src) )
|
||||||
PREF( 1, 2*32(dst) )
|
PREF( 1, 2*32(dst) )
|
||||||
bnez t1, dst_unaligned
|
bnez t1, .Ldst_unaligned
|
||||||
nop
|
nop
|
||||||
bnez t0, src_unaligned_dst_aligned
|
bnez t0, .Lsrc_unaligned_dst_aligned
|
||||||
/*
|
/*
|
||||||
* use delay slot for fall-through
|
* use delay slot for fall-through
|
||||||
* src and dst are aligned; need to compute rem
|
* src and dst are aligned; need to compute rem
|
||||||
*/
|
*/
|
||||||
both_aligned:
|
.Lboth_aligned:
|
||||||
SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter
|
SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter
|
||||||
beqz t0, cleanup_both_aligned # len < 8*NBYTES
|
beqz t0, .Lcleanup_both_aligned # len < 8*NBYTES
|
||||||
and rem, len, (8*NBYTES-1) # rem = len % (8*NBYTES)
|
and rem, len, (8*NBYTES-1) # rem = len % (8*NBYTES)
|
||||||
PREF( 0, 3*32(src) )
|
PREF( 0, 3*32(src) )
|
||||||
PREF( 1, 3*32(dst) )
|
PREF( 1, 3*32(dst) )
|
||||||
.align 4
|
.align 4
|
||||||
1:
|
1:
|
||||||
EXC( LOAD t0, UNIT(0)(src), l_exc)
|
EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
|
||||||
EXC( LOAD t1, UNIT(1)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t2, UNIT(2)(src), l_exc_copy)
|
EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t3, UNIT(3)(src), l_exc_copy)
|
EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 8*NBYTES
|
SUB len, len, 8*NBYTES
|
||||||
EXC( LOAD t4, UNIT(4)(src), l_exc_copy)
|
EXC( LOAD t4, UNIT(4)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t7, UNIT(5)(src), l_exc_copy)
|
EXC( LOAD t7, UNIT(5)(src), .Ll_exc_copy)
|
||||||
STORE t0, UNIT(0)(dst)
|
STORE t0, UNIT(0)(dst)
|
||||||
STORE t1, UNIT(1)(dst)
|
STORE t1, UNIT(1)(dst)
|
||||||
EXC( LOAD t0, UNIT(6)(src), l_exc_copy)
|
EXC( LOAD t0, UNIT(6)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t1, UNIT(7)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(7)(src), .Ll_exc_copy)
|
||||||
ADD src, src, 8*NBYTES
|
ADD src, src, 8*NBYTES
|
||||||
ADD dst, dst, 8*NBYTES
|
ADD dst, dst, 8*NBYTES
|
||||||
STORE t2, UNIT(-6)(dst)
|
STORE t2, UNIT(-6)(dst)
|
||||||
|
@ -250,39 +255,43 @@ EXC( LOAD t1, UNIT(7)(src), l_exc_copy)
|
||||||
/*
|
/*
|
||||||
* len == rem == the number of bytes left to copy < 8*NBYTES
|
* len == rem == the number of bytes left to copy < 8*NBYTES
|
||||||
*/
|
*/
|
||||||
cleanup_both_aligned:
|
.Lcleanup_both_aligned:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
sltu t0, len, 4*NBYTES
|
sltu t0, len, 4*NBYTES
|
||||||
bnez t0, less_than_4units
|
bnez t0, .Lless_than_4units
|
||||||
and rem, len, (NBYTES-1) # rem = len % NBYTES
|
and rem, len, (NBYTES-1) # rem = len % NBYTES
|
||||||
/*
|
/*
|
||||||
* len >= 4*NBYTES
|
* len >= 4*NBYTES
|
||||||
*/
|
*/
|
||||||
EXC( LOAD t0, UNIT(0)(src), l_exc)
|
EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
|
||||||
EXC( LOAD t1, UNIT(1)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t2, UNIT(2)(src), l_exc_copy)
|
EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t3, UNIT(3)(src), l_exc_copy)
|
EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 4*NBYTES
|
SUB len, len, 4*NBYTES
|
||||||
ADD src, src, 4*NBYTES
|
ADD src, src, 4*NBYTES
|
||||||
STORE t0, UNIT(0)(dst)
|
STORE t0, UNIT(0)(dst)
|
||||||
STORE t1, UNIT(1)(dst)
|
STORE t1, UNIT(1)(dst)
|
||||||
STORE t2, UNIT(2)(dst)
|
STORE t2, UNIT(2)(dst)
|
||||||
STORE t3, UNIT(3)(dst)
|
STORE t3, UNIT(3)(dst)
|
||||||
beqz len, done
|
.set reorder /* DADDI_WAR */
|
||||||
ADD dst, dst, 4*NBYTES
|
ADD dst, dst, 4*NBYTES
|
||||||
less_than_4units:
|
beqz len, .Ldone
|
||||||
|
.set noreorder
|
||||||
|
.Lless_than_4units:
|
||||||
/*
|
/*
|
||||||
* rem = len % NBYTES
|
* rem = len % NBYTES
|
||||||
*/
|
*/
|
||||||
beq rem, len, copy_bytes
|
beq rem, len, .Lcopy_bytes
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
EXC( LOAD t0, 0(src), l_exc)
|
EXC( LOAD t0, 0(src), .Ll_exc)
|
||||||
ADD src, src, NBYTES
|
ADD src, src, NBYTES
|
||||||
SUB len, len, NBYTES
|
SUB len, len, NBYTES
|
||||||
STORE t0, 0(dst)
|
STORE t0, 0(dst)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, NBYTES
|
||||||
bne rem, len, 1b
|
bne rem, len, 1b
|
||||||
ADD dst, dst, NBYTES
|
.set noreorder
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* src and dst are aligned, need to copy rem bytes (rem < NBYTES)
|
* src and dst are aligned, need to copy rem bytes (rem < NBYTES)
|
||||||
|
@ -296,17 +305,17 @@ EXC( LOAD t0, 0(src), l_exc)
|
||||||
* more instruction-level parallelism.
|
* more instruction-level parallelism.
|
||||||
*/
|
*/
|
||||||
#define bits t2
|
#define bits t2
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
ADD t1, dst, len # t1 is just past last byte of dst
|
ADD t1, dst, len # t1 is just past last byte of dst
|
||||||
li bits, 8*NBYTES
|
li bits, 8*NBYTES
|
||||||
SLL rem, len, 3 # rem = number of bits to keep
|
SLL rem, len, 3 # rem = number of bits to keep
|
||||||
EXC( LOAD t0, 0(src), l_exc)
|
EXC( LOAD t0, 0(src), .Ll_exc)
|
||||||
SUB bits, bits, rem # bits = number of bits to discard
|
SUB bits, bits, rem # bits = number of bits to discard
|
||||||
SHIFT_DISCARD t0, t0, bits
|
SHIFT_DISCARD t0, t0, bits
|
||||||
STREST t0, -1(t1)
|
STREST t0, -1(t1)
|
||||||
jr ra
|
jr ra
|
||||||
move len, zero
|
move len, zero
|
||||||
dst_unaligned:
|
.Ldst_unaligned:
|
||||||
/*
|
/*
|
||||||
* dst is unaligned
|
* dst is unaligned
|
||||||
* t0 = src & ADDRMASK
|
* t0 = src & ADDRMASK
|
||||||
|
@ -317,22 +326,22 @@ dst_unaligned:
|
||||||
* Set match = (src and dst have same alignment)
|
* Set match = (src and dst have same alignment)
|
||||||
*/
|
*/
|
||||||
#define match rem
|
#define match rem
|
||||||
EXC( LDFIRST t3, FIRST(0)(src), l_exc)
|
EXC( LDFIRST t3, FIRST(0)(src), .Ll_exc)
|
||||||
ADD t2, zero, NBYTES
|
ADD t2, zero, NBYTES
|
||||||
EXC( LDREST t3, REST(0)(src), l_exc_copy)
|
EXC( LDREST t3, REST(0)(src), .Ll_exc_copy)
|
||||||
SUB t2, t2, t1 # t2 = number of bytes copied
|
SUB t2, t2, t1 # t2 = number of bytes copied
|
||||||
xor match, t0, t1
|
xor match, t0, t1
|
||||||
STFIRST t3, FIRST(0)(dst)
|
STFIRST t3, FIRST(0)(dst)
|
||||||
beq len, t2, done
|
beq len, t2, .Ldone
|
||||||
SUB len, len, t2
|
SUB len, len, t2
|
||||||
ADD dst, dst, t2
|
ADD dst, dst, t2
|
||||||
beqz match, both_aligned
|
beqz match, .Lboth_aligned
|
||||||
ADD src, src, t2
|
ADD src, src, t2
|
||||||
|
|
||||||
src_unaligned_dst_aligned:
|
.Lsrc_unaligned_dst_aligned:
|
||||||
SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter
|
SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter
|
||||||
PREF( 0, 3*32(src) )
|
PREF( 0, 3*32(src) )
|
||||||
beqz t0, cleanup_src_unaligned
|
beqz t0, .Lcleanup_src_unaligned
|
||||||
and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES
|
and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES
|
||||||
PREF( 1, 3*32(dst) )
|
PREF( 1, 3*32(dst) )
|
||||||
1:
|
1:
|
||||||
|
@ -342,15 +351,15 @@ src_unaligned_dst_aligned:
|
||||||
* It's OK to load FIRST(N+1) before REST(N) because the two addresses
|
* It's OK to load FIRST(N+1) before REST(N) because the two addresses
|
||||||
* are to the same unit (unless src is aligned, but it's not).
|
* are to the same unit (unless src is aligned, but it's not).
|
||||||
*/
|
*/
|
||||||
EXC( LDFIRST t0, FIRST(0)(src), l_exc)
|
EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
|
||||||
EXC( LDFIRST t1, FIRST(1)(src), l_exc_copy)
|
EXC( LDFIRST t1, FIRST(1)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 4*NBYTES
|
SUB len, len, 4*NBYTES
|
||||||
EXC( LDREST t0, REST(0)(src), l_exc_copy)
|
EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t1, REST(1)(src), l_exc_copy)
|
EXC( LDREST t1, REST(1)(src), .Ll_exc_copy)
|
||||||
EXC( LDFIRST t2, FIRST(2)(src), l_exc_copy)
|
EXC( LDFIRST t2, FIRST(2)(src), .Ll_exc_copy)
|
||||||
EXC( LDFIRST t3, FIRST(3)(src), l_exc_copy)
|
EXC( LDFIRST t3, FIRST(3)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t2, REST(2)(src), l_exc_copy)
|
EXC( LDREST t2, REST(2)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t3, REST(3)(src), l_exc_copy)
|
EXC( LDREST t3, REST(3)(src), .Ll_exc_copy)
|
||||||
PREF( 0, 9*32(src) ) # 0 is PREF_LOAD (not streamed)
|
PREF( 0, 9*32(src) ) # 0 is PREF_LOAD (not streamed)
|
||||||
ADD src, src, 4*NBYTES
|
ADD src, src, 4*NBYTES
|
||||||
#ifdef CONFIG_CPU_SB1
|
#ifdef CONFIG_CPU_SB1
|
||||||
|
@ -361,32 +370,36 @@ EXC( LDREST t3, REST(3)(src), l_exc_copy)
|
||||||
STORE t2, UNIT(2)(dst)
|
STORE t2, UNIT(2)(dst)
|
||||||
STORE t3, UNIT(3)(dst)
|
STORE t3, UNIT(3)(dst)
|
||||||
PREF( 1, 9*32(dst) ) # 1 is PREF_STORE (not streamed)
|
PREF( 1, 9*32(dst) ) # 1 is PREF_STORE (not streamed)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, 4*NBYTES
|
||||||
bne len, rem, 1b
|
bne len, rem, 1b
|
||||||
ADD dst, dst, 4*NBYTES
|
.set noreorder
|
||||||
|
|
||||||
cleanup_src_unaligned:
|
.Lcleanup_src_unaligned:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
and rem, len, NBYTES-1 # rem = len % NBYTES
|
and rem, len, NBYTES-1 # rem = len % NBYTES
|
||||||
beq rem, len, copy_bytes
|
beq rem, len, .Lcopy_bytes
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
EXC( LDFIRST t0, FIRST(0)(src), l_exc)
|
EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
|
||||||
EXC( LDREST t0, REST(0)(src), l_exc_copy)
|
EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
|
||||||
ADD src, src, NBYTES
|
ADD src, src, NBYTES
|
||||||
SUB len, len, NBYTES
|
SUB len, len, NBYTES
|
||||||
STORE t0, 0(dst)
|
STORE t0, 0(dst)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, NBYTES
|
||||||
bne len, rem, 1b
|
bne len, rem, 1b
|
||||||
ADD dst, dst, NBYTES
|
.set noreorder
|
||||||
|
|
||||||
copy_bytes_checklen:
|
.Lcopy_bytes_checklen:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
nop
|
nop
|
||||||
copy_bytes:
|
.Lcopy_bytes:
|
||||||
/* 0 < len < NBYTES */
|
/* 0 < len < NBYTES */
|
||||||
#define COPY_BYTE(N) \
|
#define COPY_BYTE(N) \
|
||||||
EXC( lb t0, N(src), l_exc); \
|
EXC( lb t0, N(src), .Ll_exc); \
|
||||||
SUB len, len, 1; \
|
SUB len, len, 1; \
|
||||||
beqz len, done; \
|
beqz len, .Ldone; \
|
||||||
sb t0, N(dst)
|
sb t0, N(dst)
|
||||||
|
|
||||||
COPY_BYTE(0)
|
COPY_BYTE(0)
|
||||||
|
@ -397,16 +410,16 @@ EXC( lb t0, N(src), l_exc); \
|
||||||
COPY_BYTE(4)
|
COPY_BYTE(4)
|
||||||
COPY_BYTE(5)
|
COPY_BYTE(5)
|
||||||
#endif
|
#endif
|
||||||
EXC( lb t0, NBYTES-2(src), l_exc)
|
EXC( lb t0, NBYTES-2(src), .Ll_exc)
|
||||||
SUB len, len, 1
|
SUB len, len, 1
|
||||||
jr ra
|
jr ra
|
||||||
sb t0, NBYTES-2(dst)
|
sb t0, NBYTES-2(dst)
|
||||||
done:
|
.Ldone:
|
||||||
jr ra
|
jr ra
|
||||||
nop
|
nop
|
||||||
END(__copy_user_inatomic)
|
END(__copy_user_inatomic)
|
||||||
|
|
||||||
l_exc_copy:
|
.Ll_exc_copy:
|
||||||
/*
|
/*
|
||||||
* Copy bytes from src until faulting load address (or until a
|
* Copy bytes from src until faulting load address (or until a
|
||||||
* lb faults)
|
* lb faults)
|
||||||
|
@ -421,12 +434,14 @@ l_exc_copy:
|
||||||
nop
|
nop
|
||||||
LOAD t0, THREAD_BUADDR(t0)
|
LOAD t0, THREAD_BUADDR(t0)
|
||||||
1:
|
1:
|
||||||
EXC( lb t1, 0(src), l_exc)
|
EXC( lb t1, 0(src), .Ll_exc)
|
||||||
ADD src, src, 1
|
ADD src, src, 1
|
||||||
sb t1, 0(dst) # can't fault -- we're copy_from_user
|
sb t1, 0(dst) # can't fault -- we're copy_from_user
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, 1
|
||||||
bne src, t0, 1b
|
bne src, t0, 1b
|
||||||
ADD dst, dst, 1
|
.set noreorder
|
||||||
l_exc:
|
.Ll_exc:
|
||||||
LOAD t0, TI_TASK($28)
|
LOAD t0, TI_TASK($28)
|
||||||
nop
|
nop
|
||||||
LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address
|
LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address
|
||||||
|
|
|
@ -9,6 +9,7 @@
|
||||||
* Copyright (C) 1999, 2000, 01, 2002 Silicon Graphics, Inc.
|
* Copyright (C) 1999, 2000, 01, 2002 Silicon Graphics, Inc.
|
||||||
* Copyright (C) 2002 Broadcom, Inc.
|
* Copyright (C) 2002 Broadcom, Inc.
|
||||||
* memcpy/copy_user author: Mark Vandevoorde
|
* memcpy/copy_user author: Mark Vandevoorde
|
||||||
|
* Copyright (C) 2007 Maciej W. Rozycki
|
||||||
*
|
*
|
||||||
* Mnemonic names for arguments to memcpy/__copy_user
|
* Mnemonic names for arguments to memcpy/__copy_user
|
||||||
*/
|
*/
|
||||||
|
@ -175,7 +176,11 @@
|
||||||
|
|
||||||
.text
|
.text
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
||||||
.set noat
|
.set noat
|
||||||
|
#else
|
||||||
|
.set at=v1
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* A combined memcpy/__copy_user
|
* A combined memcpy/__copy_user
|
||||||
|
@ -186,7 +191,7 @@
|
||||||
.align 5
|
.align 5
|
||||||
LEAF(memcpy) /* a0=dst a1=src a2=len */
|
LEAF(memcpy) /* a0=dst a1=src a2=len */
|
||||||
move v0, dst /* return value */
|
move v0, dst /* return value */
|
||||||
__memcpy:
|
.L__memcpy:
|
||||||
FEXPORT(__copy_user)
|
FEXPORT(__copy_user)
|
||||||
/*
|
/*
|
||||||
* Note: dst & src may be unaligned, len may be 0
|
* Note: dst & src may be unaligned, len may be 0
|
||||||
|
@ -194,6 +199,7 @@ FEXPORT(__copy_user)
|
||||||
*/
|
*/
|
||||||
#define rem t8
|
#define rem t8
|
||||||
|
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
/*
|
/*
|
||||||
* The "issue break"s below are very approximate.
|
* The "issue break"s below are very approximate.
|
||||||
* Issue delays for dcache fills will perturb the schedule, as will
|
* Issue delays for dcache fills will perturb the schedule, as will
|
||||||
|
@ -207,44 +213,45 @@ FEXPORT(__copy_user)
|
||||||
and t1, dst, ADDRMASK
|
and t1, dst, ADDRMASK
|
||||||
PREF( 0, 1*32(src) )
|
PREF( 0, 1*32(src) )
|
||||||
PREF( 1, 1*32(dst) )
|
PREF( 1, 1*32(dst) )
|
||||||
bnez t2, copy_bytes_checklen
|
bnez t2, .Lcopy_bytes_checklen
|
||||||
and t0, src, ADDRMASK
|
and t0, src, ADDRMASK
|
||||||
PREF( 0, 2*32(src) )
|
PREF( 0, 2*32(src) )
|
||||||
PREF( 1, 2*32(dst) )
|
PREF( 1, 2*32(dst) )
|
||||||
bnez t1, dst_unaligned
|
bnez t1, .Ldst_unaligned
|
||||||
nop
|
nop
|
||||||
bnez t0, src_unaligned_dst_aligned
|
bnez t0, .Lsrc_unaligned_dst_aligned
|
||||||
/*
|
/*
|
||||||
* use delay slot for fall-through
|
* use delay slot for fall-through
|
||||||
* src and dst are aligned; need to compute rem
|
* src and dst are aligned; need to compute rem
|
||||||
*/
|
*/
|
||||||
both_aligned:
|
.Lboth_aligned:
|
||||||
SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter
|
SRL t0, len, LOG_NBYTES+3 # +3 for 8 units/iter
|
||||||
beqz t0, cleanup_both_aligned # len < 8*NBYTES
|
beqz t0, .Lcleanup_both_aligned # len < 8*NBYTES
|
||||||
and rem, len, (8*NBYTES-1) # rem = len % (8*NBYTES)
|
and rem, len, (8*NBYTES-1) # rem = len % (8*NBYTES)
|
||||||
PREF( 0, 3*32(src) )
|
PREF( 0, 3*32(src) )
|
||||||
PREF( 1, 3*32(dst) )
|
PREF( 1, 3*32(dst) )
|
||||||
.align 4
|
.align 4
|
||||||
1:
|
1:
|
||||||
EXC( LOAD t0, UNIT(0)(src), l_exc)
|
R10KCBARRIER(0(ra))
|
||||||
EXC( LOAD t1, UNIT(1)(src), l_exc_copy)
|
EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
|
||||||
EXC( LOAD t2, UNIT(2)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t3, UNIT(3)(src), l_exc_copy)
|
EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
|
||||||
|
EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 8*NBYTES
|
SUB len, len, 8*NBYTES
|
||||||
EXC( LOAD t4, UNIT(4)(src), l_exc_copy)
|
EXC( LOAD t4, UNIT(4)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t7, UNIT(5)(src), l_exc_copy)
|
EXC( LOAD t7, UNIT(5)(src), .Ll_exc_copy)
|
||||||
EXC( STORE t0, UNIT(0)(dst), s_exc_p8u)
|
EXC( STORE t0, UNIT(0)(dst), .Ls_exc_p8u)
|
||||||
EXC( STORE t1, UNIT(1)(dst), s_exc_p7u)
|
EXC( STORE t1, UNIT(1)(dst), .Ls_exc_p7u)
|
||||||
EXC( LOAD t0, UNIT(6)(src), l_exc_copy)
|
EXC( LOAD t0, UNIT(6)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t1, UNIT(7)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(7)(src), .Ll_exc_copy)
|
||||||
ADD src, src, 8*NBYTES
|
ADD src, src, 8*NBYTES
|
||||||
ADD dst, dst, 8*NBYTES
|
ADD dst, dst, 8*NBYTES
|
||||||
EXC( STORE t2, UNIT(-6)(dst), s_exc_p6u)
|
EXC( STORE t2, UNIT(-6)(dst), .Ls_exc_p6u)
|
||||||
EXC( STORE t3, UNIT(-5)(dst), s_exc_p5u)
|
EXC( STORE t3, UNIT(-5)(dst), .Ls_exc_p5u)
|
||||||
EXC( STORE t4, UNIT(-4)(dst), s_exc_p4u)
|
EXC( STORE t4, UNIT(-4)(dst), .Ls_exc_p4u)
|
||||||
EXC( STORE t7, UNIT(-3)(dst), s_exc_p3u)
|
EXC( STORE t7, UNIT(-3)(dst), .Ls_exc_p3u)
|
||||||
EXC( STORE t0, UNIT(-2)(dst), s_exc_p2u)
|
EXC( STORE t0, UNIT(-2)(dst), .Ls_exc_p2u)
|
||||||
EXC( STORE t1, UNIT(-1)(dst), s_exc_p1u)
|
EXC( STORE t1, UNIT(-1)(dst), .Ls_exc_p1u)
|
||||||
PREF( 0, 8*32(src) )
|
PREF( 0, 8*32(src) )
|
||||||
PREF( 1, 8*32(dst) )
|
PREF( 1, 8*32(dst) )
|
||||||
bne len, rem, 1b
|
bne len, rem, 1b
|
||||||
|
@ -253,39 +260,45 @@ EXC( STORE t1, UNIT(-1)(dst), s_exc_p1u)
|
||||||
/*
|
/*
|
||||||
* len == rem == the number of bytes left to copy < 8*NBYTES
|
* len == rem == the number of bytes left to copy < 8*NBYTES
|
||||||
*/
|
*/
|
||||||
cleanup_both_aligned:
|
.Lcleanup_both_aligned:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
sltu t0, len, 4*NBYTES
|
sltu t0, len, 4*NBYTES
|
||||||
bnez t0, less_than_4units
|
bnez t0, .Lless_than_4units
|
||||||
and rem, len, (NBYTES-1) # rem = len % NBYTES
|
and rem, len, (NBYTES-1) # rem = len % NBYTES
|
||||||
/*
|
/*
|
||||||
* len >= 4*NBYTES
|
* len >= 4*NBYTES
|
||||||
*/
|
*/
|
||||||
EXC( LOAD t0, UNIT(0)(src), l_exc)
|
EXC( LOAD t0, UNIT(0)(src), .Ll_exc)
|
||||||
EXC( LOAD t1, UNIT(1)(src), l_exc_copy)
|
EXC( LOAD t1, UNIT(1)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t2, UNIT(2)(src), l_exc_copy)
|
EXC( LOAD t2, UNIT(2)(src), .Ll_exc_copy)
|
||||||
EXC( LOAD t3, UNIT(3)(src), l_exc_copy)
|
EXC( LOAD t3, UNIT(3)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 4*NBYTES
|
SUB len, len, 4*NBYTES
|
||||||
ADD src, src, 4*NBYTES
|
ADD src, src, 4*NBYTES
|
||||||
EXC( STORE t0, UNIT(0)(dst), s_exc_p4u)
|
R10KCBARRIER(0(ra))
|
||||||
EXC( STORE t1, UNIT(1)(dst), s_exc_p3u)
|
EXC( STORE t0, UNIT(0)(dst), .Ls_exc_p4u)
|
||||||
EXC( STORE t2, UNIT(2)(dst), s_exc_p2u)
|
EXC( STORE t1, UNIT(1)(dst), .Ls_exc_p3u)
|
||||||
EXC( STORE t3, UNIT(3)(dst), s_exc_p1u)
|
EXC( STORE t2, UNIT(2)(dst), .Ls_exc_p2u)
|
||||||
beqz len, done
|
EXC( STORE t3, UNIT(3)(dst), .Ls_exc_p1u)
|
||||||
ADD dst, dst, 4*NBYTES
|
.set reorder /* DADDI_WAR */
|
||||||
less_than_4units:
|
ADD dst, dst, 4*NBYTES
|
||||||
|
beqz len, .Ldone
|
||||||
|
.set noreorder
|
||||||
|
.Lless_than_4units:
|
||||||
/*
|
/*
|
||||||
* rem = len % NBYTES
|
* rem = len % NBYTES
|
||||||
*/
|
*/
|
||||||
beq rem, len, copy_bytes
|
beq rem, len, .Lcopy_bytes
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
EXC( LOAD t0, 0(src), l_exc)
|
R10KCBARRIER(0(ra))
|
||||||
|
EXC( LOAD t0, 0(src), .Ll_exc)
|
||||||
ADD src, src, NBYTES
|
ADD src, src, NBYTES
|
||||||
SUB len, len, NBYTES
|
SUB len, len, NBYTES
|
||||||
EXC( STORE t0, 0(dst), s_exc_p1u)
|
EXC( STORE t0, 0(dst), .Ls_exc_p1u)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, NBYTES
|
||||||
bne rem, len, 1b
|
bne rem, len, 1b
|
||||||
ADD dst, dst, NBYTES
|
.set noreorder
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* src and dst are aligned, need to copy rem bytes (rem < NBYTES)
|
* src and dst are aligned, need to copy rem bytes (rem < NBYTES)
|
||||||
|
@ -299,17 +312,17 @@ EXC( STORE t0, 0(dst), s_exc_p1u)
|
||||||
* more instruction-level parallelism.
|
* more instruction-level parallelism.
|
||||||
*/
|
*/
|
||||||
#define bits t2
|
#define bits t2
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
ADD t1, dst, len # t1 is just past last byte of dst
|
ADD t1, dst, len # t1 is just past last byte of dst
|
||||||
li bits, 8*NBYTES
|
li bits, 8*NBYTES
|
||||||
SLL rem, len, 3 # rem = number of bits to keep
|
SLL rem, len, 3 # rem = number of bits to keep
|
||||||
EXC( LOAD t0, 0(src), l_exc)
|
EXC( LOAD t0, 0(src), .Ll_exc)
|
||||||
SUB bits, bits, rem # bits = number of bits to discard
|
SUB bits, bits, rem # bits = number of bits to discard
|
||||||
SHIFT_DISCARD t0, t0, bits
|
SHIFT_DISCARD t0, t0, bits
|
||||||
EXC( STREST t0, -1(t1), s_exc)
|
EXC( STREST t0, -1(t1), .Ls_exc)
|
||||||
jr ra
|
jr ra
|
||||||
move len, zero
|
move len, zero
|
||||||
dst_unaligned:
|
.Ldst_unaligned:
|
||||||
/*
|
/*
|
||||||
* dst is unaligned
|
* dst is unaligned
|
||||||
* t0 = src & ADDRMASK
|
* t0 = src & ADDRMASK
|
||||||
|
@ -320,22 +333,23 @@ dst_unaligned:
|
||||||
* Set match = (src and dst have same alignment)
|
* Set match = (src and dst have same alignment)
|
||||||
*/
|
*/
|
||||||
#define match rem
|
#define match rem
|
||||||
EXC( LDFIRST t3, FIRST(0)(src), l_exc)
|
EXC( LDFIRST t3, FIRST(0)(src), .Ll_exc)
|
||||||
ADD t2, zero, NBYTES
|
ADD t2, zero, NBYTES
|
||||||
EXC( LDREST t3, REST(0)(src), l_exc_copy)
|
EXC( LDREST t3, REST(0)(src), .Ll_exc_copy)
|
||||||
SUB t2, t2, t1 # t2 = number of bytes copied
|
SUB t2, t2, t1 # t2 = number of bytes copied
|
||||||
xor match, t0, t1
|
xor match, t0, t1
|
||||||
EXC( STFIRST t3, FIRST(0)(dst), s_exc)
|
R10KCBARRIER(0(ra))
|
||||||
beq len, t2, done
|
EXC( STFIRST t3, FIRST(0)(dst), .Ls_exc)
|
||||||
|
beq len, t2, .Ldone
|
||||||
SUB len, len, t2
|
SUB len, len, t2
|
||||||
ADD dst, dst, t2
|
ADD dst, dst, t2
|
||||||
beqz match, both_aligned
|
beqz match, .Lboth_aligned
|
||||||
ADD src, src, t2
|
ADD src, src, t2
|
||||||
|
|
||||||
src_unaligned_dst_aligned:
|
.Lsrc_unaligned_dst_aligned:
|
||||||
SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter
|
SRL t0, len, LOG_NBYTES+2 # +2 for 4 units/iter
|
||||||
PREF( 0, 3*32(src) )
|
PREF( 0, 3*32(src) )
|
||||||
beqz t0, cleanup_src_unaligned
|
beqz t0, .Lcleanup_src_unaligned
|
||||||
and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES
|
and rem, len, (4*NBYTES-1) # rem = len % 4*NBYTES
|
||||||
PREF( 1, 3*32(dst) )
|
PREF( 1, 3*32(dst) )
|
||||||
1:
|
1:
|
||||||
|
@ -345,52 +359,59 @@ src_unaligned_dst_aligned:
|
||||||
* It's OK to load FIRST(N+1) before REST(N) because the two addresses
|
* It's OK to load FIRST(N+1) before REST(N) because the two addresses
|
||||||
* are to the same unit (unless src is aligned, but it's not).
|
* are to the same unit (unless src is aligned, but it's not).
|
||||||
*/
|
*/
|
||||||
EXC( LDFIRST t0, FIRST(0)(src), l_exc)
|
R10KCBARRIER(0(ra))
|
||||||
EXC( LDFIRST t1, FIRST(1)(src), l_exc_copy)
|
EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
|
||||||
|
EXC( LDFIRST t1, FIRST(1)(src), .Ll_exc_copy)
|
||||||
SUB len, len, 4*NBYTES
|
SUB len, len, 4*NBYTES
|
||||||
EXC( LDREST t0, REST(0)(src), l_exc_copy)
|
EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t1, REST(1)(src), l_exc_copy)
|
EXC( LDREST t1, REST(1)(src), .Ll_exc_copy)
|
||||||
EXC( LDFIRST t2, FIRST(2)(src), l_exc_copy)
|
EXC( LDFIRST t2, FIRST(2)(src), .Ll_exc_copy)
|
||||||
EXC( LDFIRST t3, FIRST(3)(src), l_exc_copy)
|
EXC( LDFIRST t3, FIRST(3)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t2, REST(2)(src), l_exc_copy)
|
EXC( LDREST t2, REST(2)(src), .Ll_exc_copy)
|
||||||
EXC( LDREST t3, REST(3)(src), l_exc_copy)
|
EXC( LDREST t3, REST(3)(src), .Ll_exc_copy)
|
||||||
PREF( 0, 9*32(src) ) # 0 is PREF_LOAD (not streamed)
|
PREF( 0, 9*32(src) ) # 0 is PREF_LOAD (not streamed)
|
||||||
ADD src, src, 4*NBYTES
|
ADD src, src, 4*NBYTES
|
||||||
#ifdef CONFIG_CPU_SB1
|
#ifdef CONFIG_CPU_SB1
|
||||||
nop # improves slotting
|
nop # improves slotting
|
||||||
#endif
|
#endif
|
||||||
EXC( STORE t0, UNIT(0)(dst), s_exc_p4u)
|
EXC( STORE t0, UNIT(0)(dst), .Ls_exc_p4u)
|
||||||
EXC( STORE t1, UNIT(1)(dst), s_exc_p3u)
|
EXC( STORE t1, UNIT(1)(dst), .Ls_exc_p3u)
|
||||||
EXC( STORE t2, UNIT(2)(dst), s_exc_p2u)
|
EXC( STORE t2, UNIT(2)(dst), .Ls_exc_p2u)
|
||||||
EXC( STORE t3, UNIT(3)(dst), s_exc_p1u)
|
EXC( STORE t3, UNIT(3)(dst), .Ls_exc_p1u)
|
||||||
PREF( 1, 9*32(dst) ) # 1 is PREF_STORE (not streamed)
|
PREF( 1, 9*32(dst) ) # 1 is PREF_STORE (not streamed)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, 4*NBYTES
|
||||||
bne len, rem, 1b
|
bne len, rem, 1b
|
||||||
ADD dst, dst, 4*NBYTES
|
.set noreorder
|
||||||
|
|
||||||
cleanup_src_unaligned:
|
.Lcleanup_src_unaligned:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
and rem, len, NBYTES-1 # rem = len % NBYTES
|
and rem, len, NBYTES-1 # rem = len % NBYTES
|
||||||
beq rem, len, copy_bytes
|
beq rem, len, .Lcopy_bytes
|
||||||
nop
|
nop
|
||||||
1:
|
1:
|
||||||
EXC( LDFIRST t0, FIRST(0)(src), l_exc)
|
R10KCBARRIER(0(ra))
|
||||||
EXC( LDREST t0, REST(0)(src), l_exc_copy)
|
EXC( LDFIRST t0, FIRST(0)(src), .Ll_exc)
|
||||||
|
EXC( LDREST t0, REST(0)(src), .Ll_exc_copy)
|
||||||
ADD src, src, NBYTES
|
ADD src, src, NBYTES
|
||||||
SUB len, len, NBYTES
|
SUB len, len, NBYTES
|
||||||
EXC( STORE t0, 0(dst), s_exc_p1u)
|
EXC( STORE t0, 0(dst), .Ls_exc_p1u)
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, NBYTES
|
||||||
bne len, rem, 1b
|
bne len, rem, 1b
|
||||||
ADD dst, dst, NBYTES
|
.set noreorder
|
||||||
|
|
||||||
copy_bytes_checklen:
|
.Lcopy_bytes_checklen:
|
||||||
beqz len, done
|
beqz len, .Ldone
|
||||||
nop
|
nop
|
||||||
copy_bytes:
|
.Lcopy_bytes:
|
||||||
/* 0 < len < NBYTES */
|
/* 0 < len < NBYTES */
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
#define COPY_BYTE(N) \
|
#define COPY_BYTE(N) \
|
||||||
EXC( lb t0, N(src), l_exc); \
|
EXC( lb t0, N(src), .Ll_exc); \
|
||||||
SUB len, len, 1; \
|
SUB len, len, 1; \
|
||||||
beqz len, done; \
|
beqz len, .Ldone; \
|
||||||
EXC( sb t0, N(dst), s_exc_p1)
|
EXC( sb t0, N(dst), .Ls_exc_p1)
|
||||||
|
|
||||||
COPY_BYTE(0)
|
COPY_BYTE(0)
|
||||||
COPY_BYTE(1)
|
COPY_BYTE(1)
|
||||||
|
@ -400,16 +421,16 @@ EXC( sb t0, N(dst), s_exc_p1)
|
||||||
COPY_BYTE(4)
|
COPY_BYTE(4)
|
||||||
COPY_BYTE(5)
|
COPY_BYTE(5)
|
||||||
#endif
|
#endif
|
||||||
EXC( lb t0, NBYTES-2(src), l_exc)
|
EXC( lb t0, NBYTES-2(src), .Ll_exc)
|
||||||
SUB len, len, 1
|
SUB len, len, 1
|
||||||
jr ra
|
jr ra
|
||||||
EXC( sb t0, NBYTES-2(dst), s_exc_p1)
|
EXC( sb t0, NBYTES-2(dst), .Ls_exc_p1)
|
||||||
done:
|
.Ldone:
|
||||||
jr ra
|
jr ra
|
||||||
nop
|
nop
|
||||||
END(memcpy)
|
END(memcpy)
|
||||||
|
|
||||||
l_exc_copy:
|
.Ll_exc_copy:
|
||||||
/*
|
/*
|
||||||
* Copy bytes from src until faulting load address (or until a
|
* Copy bytes from src until faulting load address (or until a
|
||||||
* lb faults)
|
* lb faults)
|
||||||
|
@ -424,12 +445,14 @@ l_exc_copy:
|
||||||
nop
|
nop
|
||||||
LOAD t0, THREAD_BUADDR(t0)
|
LOAD t0, THREAD_BUADDR(t0)
|
||||||
1:
|
1:
|
||||||
EXC( lb t1, 0(src), l_exc)
|
EXC( lb t1, 0(src), .Ll_exc)
|
||||||
ADD src, src, 1
|
ADD src, src, 1
|
||||||
sb t1, 0(dst) # can't fault -- we're copy_from_user
|
sb t1, 0(dst) # can't fault -- we're copy_from_user
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD dst, dst, 1
|
||||||
bne src, t0, 1b
|
bne src, t0, 1b
|
||||||
ADD dst, dst, 1
|
.set noreorder
|
||||||
l_exc:
|
.Ll_exc:
|
||||||
LOAD t0, TI_TASK($28)
|
LOAD t0, TI_TASK($28)
|
||||||
nop
|
nop
|
||||||
LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address
|
LOAD t0, THREAD_BUADDR(t0) # t0 is just past last good address
|
||||||
|
@ -446,20 +469,33 @@ l_exc:
|
||||||
* Clear len bytes starting at dst. Can't call __bzero because it
|
* Clear len bytes starting at dst. Can't call __bzero because it
|
||||||
* might modify len. An inefficient loop for these rare times...
|
* might modify len. An inefficient loop for these rare times...
|
||||||
*/
|
*/
|
||||||
beqz len, done
|
.set reorder /* DADDI_WAR */
|
||||||
SUB src, len, 1
|
SUB src, len, 1
|
||||||
|
beqz len, .Ldone
|
||||||
|
.set noreorder
|
||||||
1: sb zero, 0(dst)
|
1: sb zero, 0(dst)
|
||||||
ADD dst, dst, 1
|
ADD dst, dst, 1
|
||||||
|
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
||||||
bnez src, 1b
|
bnez src, 1b
|
||||||
SUB src, src, 1
|
SUB src, src, 1
|
||||||
|
#else
|
||||||
|
.set push
|
||||||
|
.set noat
|
||||||
|
li v1, 1
|
||||||
|
bnez src, 1b
|
||||||
|
SUB src, src, v1
|
||||||
|
.set pop
|
||||||
|
#endif
|
||||||
jr ra
|
jr ra
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
|
||||||
#define SEXC(n) \
|
#define SEXC(n) \
|
||||||
s_exc_p ## n ## u: \
|
.set reorder; /* DADDI_WAR */ \
|
||||||
jr ra; \
|
.Ls_exc_p ## n ## u: \
|
||||||
ADD len, len, n*NBYTES
|
ADD len, len, n*NBYTES; \
|
||||||
|
jr ra; \
|
||||||
|
.set noreorder
|
||||||
|
|
||||||
SEXC(8)
|
SEXC(8)
|
||||||
SEXC(7)
|
SEXC(7)
|
||||||
|
@ -470,10 +506,12 @@ SEXC(3)
|
||||||
SEXC(2)
|
SEXC(2)
|
||||||
SEXC(1)
|
SEXC(1)
|
||||||
|
|
||||||
s_exc_p1:
|
.Ls_exc_p1:
|
||||||
|
.set reorder /* DADDI_WAR */
|
||||||
|
ADD len, len, 1
|
||||||
jr ra
|
jr ra
|
||||||
ADD len, len, 1
|
.set noreorder
|
||||||
s_exc:
|
.Ls_exc:
|
||||||
jr ra
|
jr ra
|
||||||
nop
|
nop
|
||||||
|
|
||||||
|
@ -484,38 +522,44 @@ LEAF(memmove)
|
||||||
sltu t0, a1, t0 # dst + len <= src -> memcpy
|
sltu t0, a1, t0 # dst + len <= src -> memcpy
|
||||||
sltu t1, a0, t1 # dst >= src + len -> memcpy
|
sltu t1, a0, t1 # dst >= src + len -> memcpy
|
||||||
and t0, t1
|
and t0, t1
|
||||||
beqz t0, __memcpy
|
beqz t0, .L__memcpy
|
||||||
move v0, a0 /* return value */
|
move v0, a0 /* return value */
|
||||||
beqz a2, r_out
|
beqz a2, .Lr_out
|
||||||
END(memmove)
|
END(memmove)
|
||||||
|
|
||||||
/* fall through to __rmemcpy */
|
/* fall through to __rmemcpy */
|
||||||
LEAF(__rmemcpy) /* a0=dst a1=src a2=len */
|
LEAF(__rmemcpy) /* a0=dst a1=src a2=len */
|
||||||
sltu t0, a1, a0
|
sltu t0, a1, a0
|
||||||
beqz t0, r_end_bytes_up # src >= dst
|
beqz t0, .Lr_end_bytes_up # src >= dst
|
||||||
nop
|
nop
|
||||||
ADD a0, a2 # dst = dst + len
|
ADD a0, a2 # dst = dst + len
|
||||||
ADD a1, a2 # src = src + len
|
ADD a1, a2 # src = src + len
|
||||||
|
|
||||||
r_end_bytes:
|
.Lr_end_bytes:
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
lb t0, -1(a1)
|
lb t0, -1(a1)
|
||||||
SUB a2, a2, 0x1
|
SUB a2, a2, 0x1
|
||||||
sb t0, -1(a0)
|
sb t0, -1(a0)
|
||||||
SUB a1, a1, 0x1
|
SUB a1, a1, 0x1
|
||||||
bnez a2, r_end_bytes
|
.set reorder /* DADDI_WAR */
|
||||||
SUB a0, a0, 0x1
|
SUB a0, a0, 0x1
|
||||||
|
bnez a2, .Lr_end_bytes
|
||||||
|
.set noreorder
|
||||||
|
|
||||||
r_out:
|
.Lr_out:
|
||||||
jr ra
|
jr ra
|
||||||
move a2, zero
|
move a2, zero
|
||||||
|
|
||||||
r_end_bytes_up:
|
.Lr_end_bytes_up:
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
lb t0, (a1)
|
lb t0, (a1)
|
||||||
SUB a2, a2, 0x1
|
SUB a2, a2, 0x1
|
||||||
sb t0, (a0)
|
sb t0, (a0)
|
||||||
ADD a1, a1, 0x1
|
ADD a1, a1, 0x1
|
||||||
bnez a2, r_end_bytes_up
|
.set reorder /* DADDI_WAR */
|
||||||
ADD a0, a0, 0x1
|
ADD a0, a0, 0x1
|
||||||
|
bnez a2, .Lr_end_bytes_up
|
||||||
|
.set noreorder
|
||||||
|
|
||||||
jr ra
|
jr ra
|
||||||
move a2, zero
|
move a2, zero
|
||||||
|
|
|
@ -5,6 +5,7 @@
|
||||||
*
|
*
|
||||||
* Copyright (C) 1998, 1999, 2000 by Ralf Baechle
|
* Copyright (C) 1998, 1999, 2000 by Ralf Baechle
|
||||||
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
* Copyright (C) 1999, 2000 Silicon Graphics, Inc.
|
||||||
|
* Copyright (C) 2007 Maciej W. Rozycki
|
||||||
*/
|
*/
|
||||||
#include <asm/asm.h>
|
#include <asm/asm.h>
|
||||||
#include <asm/asm-offsets.h>
|
#include <asm/asm-offsets.h>
|
||||||
|
@ -71,34 +72,45 @@ LEAF(memset)
|
||||||
|
|
||||||
FEXPORT(__bzero)
|
FEXPORT(__bzero)
|
||||||
sltiu t0, a2, LONGSIZE /* very small region? */
|
sltiu t0, a2, LONGSIZE /* very small region? */
|
||||||
bnez t0, small_memset
|
bnez t0, .Lsmall_memset
|
||||||
andi t0, a0, LONGMASK /* aligned? */
|
andi t0, a0, LONGMASK /* aligned? */
|
||||||
|
|
||||||
|
#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
|
||||||
beqz t0, 1f
|
beqz t0, 1f
|
||||||
PTR_SUBU t0, LONGSIZE /* alignment in bytes */
|
PTR_SUBU t0, LONGSIZE /* alignment in bytes */
|
||||||
|
#else
|
||||||
|
.set noat
|
||||||
|
li AT, LONGSIZE
|
||||||
|
beqz t0, 1f
|
||||||
|
PTR_SUBU t0, AT /* alignment in bytes */
|
||||||
|
.set at
|
||||||
|
#endif
|
||||||
|
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
#ifdef __MIPSEB__
|
#ifdef __MIPSEB__
|
||||||
EX(LONG_S_L, a1, (a0), first_fixup) /* make word/dword aligned */
|
EX(LONG_S_L, a1, (a0), .Lfirst_fixup) /* make word/dword aligned */
|
||||||
#endif
|
#endif
|
||||||
#ifdef __MIPSEL__
|
#ifdef __MIPSEL__
|
||||||
EX(LONG_S_R, a1, (a0), first_fixup) /* make word/dword aligned */
|
EX(LONG_S_R, a1, (a0), .Lfirst_fixup) /* make word/dword aligned */
|
||||||
#endif
|
#endif
|
||||||
PTR_SUBU a0, t0 /* long align ptr */
|
PTR_SUBU a0, t0 /* long align ptr */
|
||||||
PTR_ADDU a2, t0 /* correct size */
|
PTR_ADDU a2, t0 /* correct size */
|
||||||
|
|
||||||
1: ori t1, a2, 0x3f /* # of full blocks */
|
1: ori t1, a2, 0x3f /* # of full blocks */
|
||||||
xori t1, 0x3f
|
xori t1, 0x3f
|
||||||
beqz t1, memset_partial /* no block to fill */
|
beqz t1, .Lmemset_partial /* no block to fill */
|
||||||
andi t0, a2, 0x40-LONGSIZE
|
andi t0, a2, 0x40-LONGSIZE
|
||||||
|
|
||||||
PTR_ADDU t1, a0 /* end address */
|
PTR_ADDU t1, a0 /* end address */
|
||||||
.set reorder
|
.set reorder
|
||||||
1: PTR_ADDIU a0, 64
|
1: PTR_ADDIU a0, 64
|
||||||
f_fill64 a0, -64, a1, fwd_fixup
|
R10KCBARRIER(0(ra))
|
||||||
|
f_fill64 a0, -64, a1, .Lfwd_fixup
|
||||||
bne t1, a0, 1b
|
bne t1, a0, 1b
|
||||||
.set noreorder
|
.set noreorder
|
||||||
|
|
||||||
memset_partial:
|
.Lmemset_partial:
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
PTR_LA t1, 2f /* where to start */
|
PTR_LA t1, 2f /* where to start */
|
||||||
#if LONGSIZE == 4
|
#if LONGSIZE == 4
|
||||||
PTR_SUBU t1, t0
|
PTR_SUBU t1, t0
|
||||||
|
@ -106,7 +118,7 @@ memset_partial:
|
||||||
.set noat
|
.set noat
|
||||||
LONG_SRL AT, t0, 1
|
LONG_SRL AT, t0, 1
|
||||||
PTR_SUBU t1, AT
|
PTR_SUBU t1, AT
|
||||||
.set noat
|
.set at
|
||||||
#endif
|
#endif
|
||||||
jr t1
|
jr t1
|
||||||
PTR_ADDU a0, t0 /* dest ptr */
|
PTR_ADDU a0, t0 /* dest ptr */
|
||||||
|
@ -114,26 +126,28 @@ memset_partial:
|
||||||
.set push
|
.set push
|
||||||
.set noreorder
|
.set noreorder
|
||||||
.set nomacro
|
.set nomacro
|
||||||
f_fill64 a0, -64, a1, partial_fixup /* ... but first do longs ... */
|
f_fill64 a0, -64, a1, .Lpartial_fixup /* ... but first do longs ... */
|
||||||
2: .set pop
|
2: .set pop
|
||||||
andi a2, LONGMASK /* At most one long to go */
|
andi a2, LONGMASK /* At most one long to go */
|
||||||
|
|
||||||
beqz a2, 1f
|
beqz a2, 1f
|
||||||
PTR_ADDU a0, a2 /* What's left */
|
PTR_ADDU a0, a2 /* What's left */
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
#ifdef __MIPSEB__
|
#ifdef __MIPSEB__
|
||||||
EX(LONG_S_R, a1, -1(a0), last_fixup)
|
EX(LONG_S_R, a1, -1(a0), .Llast_fixup)
|
||||||
#endif
|
#endif
|
||||||
#ifdef __MIPSEL__
|
#ifdef __MIPSEL__
|
||||||
EX(LONG_S_L, a1, -1(a0), last_fixup)
|
EX(LONG_S_L, a1, -1(a0), .Llast_fixup)
|
||||||
#endif
|
#endif
|
||||||
1: jr ra
|
1: jr ra
|
||||||
move a2, zero
|
move a2, zero
|
||||||
|
|
||||||
small_memset:
|
.Lsmall_memset:
|
||||||
beqz a2, 2f
|
beqz a2, 2f
|
||||||
PTR_ADDU t1, a0, a2
|
PTR_ADDU t1, a0, a2
|
||||||
|
|
||||||
1: PTR_ADDIU a0, 1 /* fill bytewise */
|
1: PTR_ADDIU a0, 1 /* fill bytewise */
|
||||||
|
R10KCBARRIER(0(ra))
|
||||||
bne t1, a0, 1b
|
bne t1, a0, 1b
|
||||||
sb a1, -1(a0)
|
sb a1, -1(a0)
|
||||||
|
|
||||||
|
@ -141,11 +155,11 @@ small_memset:
|
||||||
move a2, zero
|
move a2, zero
|
||||||
END(memset)
|
END(memset)
|
||||||
|
|
||||||
first_fixup:
|
.Lfirst_fixup:
|
||||||
jr ra
|
jr ra
|
||||||
nop
|
nop
|
||||||
|
|
||||||
fwd_fixup:
|
.Lfwd_fixup:
|
||||||
PTR_L t0, TI_TASK($28)
|
PTR_L t0, TI_TASK($28)
|
||||||
LONG_L t0, THREAD_BUADDR(t0)
|
LONG_L t0, THREAD_BUADDR(t0)
|
||||||
andi a2, 0x3f
|
andi a2, 0x3f
|
||||||
|
@ -153,7 +167,7 @@ fwd_fixup:
|
||||||
jr ra
|
jr ra
|
||||||
LONG_SUBU a2, t0
|
LONG_SUBU a2, t0
|
||||||
|
|
||||||
partial_fixup:
|
.Lpartial_fixup:
|
||||||
PTR_L t0, TI_TASK($28)
|
PTR_L t0, TI_TASK($28)
|
||||||
LONG_L t0, THREAD_BUADDR(t0)
|
LONG_L t0, THREAD_BUADDR(t0)
|
||||||
andi a2, LONGMASK
|
andi a2, LONGMASK
|
||||||
|
@ -161,6 +175,6 @@ partial_fixup:
|
||||||
jr ra
|
jr ra
|
||||||
LONG_SUBU a2, t0
|
LONG_SUBU a2, t0
|
||||||
|
|
||||||
last_fixup:
|
.Llast_fixup:
|
||||||
jr ra
|
jr ra
|
||||||
andi v1, a2, LONGMASK
|
andi v1, a2, LONGMASK
|
||||||
|
|
Some files were not shown because too many files have changed in this diff Show More
Loading…
Reference in New Issue