Merge branch 'upstream' of git://ftp.linux-mips.org/pub/scm/upstream-linus
authorLinus Torvalds <torvalds@linux-foundation.org>
Tue, 29 Jan 2008 11:48:03 +0000 (22:48 +1100)
committerLinus Torvalds <torvalds@linux-foundation.org>
Tue, 29 Jan 2008 11:48:03 +0000 (22:48 +1100)
* '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
  ...

198 files changed:
Documentation/mips/00-INDEX
Documentation/mips/GT64120.README [deleted file]
arch/mips/Kconfig
arch/mips/Makefile
arch/mips/au1000/common/au1xxx_irqmap.c
arch/mips/au1000/common/dbdma.c
arch/mips/au1000/db1x00/init.c
arch/mips/au1000/mtx-1/init.c
arch/mips/au1000/mtx-1/platform.c
arch/mips/au1000/pb1000/init.c
arch/mips/au1000/pb1100/init.c
arch/mips/au1000/pb1200/init.c
arch/mips/au1000/pb1500/init.c
arch/mips/au1000/pb1550/init.c
arch/mips/au1000/xxs1500/init.c
arch/mips/basler/excite/Kconfig [new file with mode: 0644]
arch/mips/basler/excite/excite_iodev.c
arch/mips/basler/excite/excite_prom.c
arch/mips/cobalt/reset.c
arch/mips/configs/atlas_defconfig
arch/mips/configs/bigsur_defconfig
arch/mips/configs/capcella_defconfig
arch/mips/configs/cobalt_defconfig
arch/mips/configs/db1000_defconfig
arch/mips/configs/db1100_defconfig
arch/mips/configs/db1200_defconfig
arch/mips/configs/db1500_defconfig
arch/mips/configs/db1550_defconfig
arch/mips/configs/decstation_defconfig
arch/mips/configs/e55_defconfig
arch/mips/configs/emma2rh_defconfig
arch/mips/configs/excite_defconfig
arch/mips/configs/fulong_defconfig
arch/mips/configs/ip22_defconfig
arch/mips/configs/ip27_defconfig
arch/mips/configs/ip32_defconfig
arch/mips/configs/jazz_defconfig
arch/mips/configs/jmr3927_defconfig
arch/mips/configs/lasat_defconfig
arch/mips/configs/malta_defconfig
arch/mips/configs/mipssim_defconfig
arch/mips/configs/mpc30x_defconfig
arch/mips/configs/msp71xx_defconfig
arch/mips/configs/mtx1_defconfig
arch/mips/configs/pb1100_defconfig
arch/mips/configs/pb1500_defconfig
arch/mips/configs/pb1550_defconfig
arch/mips/configs/pnx8550-jbs_defconfig
arch/mips/configs/pnx8550-stb810_defconfig
arch/mips/configs/qemu_defconfig
arch/mips/configs/rbhma4200_defconfig
arch/mips/configs/rbhma4500_defconfig
arch/mips/configs/rm200_defconfig
arch/mips/configs/sb1250-swarm_defconfig
arch/mips/configs/sead_defconfig
arch/mips/configs/tb0219_defconfig
arch/mips/configs/tb0226_defconfig
arch/mips/configs/tb0287_defconfig
arch/mips/configs/workpad_defconfig
arch/mips/configs/wrppmc_defconfig
arch/mips/configs/yosemite_defconfig
arch/mips/dec/time.c
arch/mips/defconfig
arch/mips/fw/arc/cmdline.c
arch/mips/fw/arc/init.c
arch/mips/fw/cfe/cfe_api.c
arch/mips/fw/cfe/cfe_api_int.h
arch/mips/fw/lib/Makefile [new file with mode: 0644]
arch/mips/fw/lib/call_o32.S [new file with mode: 0644]
arch/mips/fw/sni/Makefile [new file with mode: 0644]
arch/mips/fw/sni/sniprom.c [new file with mode: 0644]
arch/mips/gt64120/wrppmc/setup.c
arch/mips/jazz/setup.c
arch/mips/jmr3927/rbhma3100/init.c
arch/mips/jmr3927/rbhma3100/setup.c
arch/mips/kernel/cpu-bugs64.c
arch/mips/kernel/cpu-probe.c
arch/mips/kernel/genex.S
arch/mips/kernel/kspd.c
arch/mips/kernel/linux32.c
arch/mips/kernel/mips-mt.c
arch/mips/kernel/pcspeaker.c [deleted file]
arch/mips/kernel/proc.c
arch/mips/kernel/rtlx.c
arch/mips/kernel/setup.c
arch/mips/kernel/smp-mt.c
arch/mips/kernel/smp.c
arch/mips/kernel/smtc-proc.c
arch/mips/kernel/smtc.c
arch/mips/kernel/time.c
arch/mips/kernel/vpe.c
arch/mips/lasat/picvue.c
arch/mips/lasat/picvue.h
arch/mips/lasat/picvue_proc.c
arch/mips/lemote/lm2e/pci.c
arch/mips/lemote/lm2e/prom.c
arch/mips/lib/csum_partial.S
arch/mips/lib/memcpy-inatomic.S
arch/mips/lib/memcpy.S
arch/mips/lib/memset.S
arch/mips/lib/strlen_user.S
arch/mips/lib/strncpy_user.S
arch/mips/lib/strnlen_user.S
arch/mips/lib/uncached.c
arch/mips/mips-boards/atlas/atlas_setup.c
arch/mips/mips-boards/generic/init.c
arch/mips/mips-boards/malta/malta_int.c
arch/mips/mips-boards/malta/malta_setup.c
arch/mips/mips-boards/malta/malta_smtc.c
arch/mips/mips-boards/sead/sead_setup.c
arch/mips/mipssim/Makefile
arch/mips/mipssim/sim_setup.c
arch/mips/mipssim/sim_smtc.c [moved from arch/mips/mipssim/sim_smp.c with 64% similarity]
arch/mips/mm/c-r4k.c
arch/mips/mm/dma-default.c
arch/mips/mm/pg-r4k.c
arch/mips/mm/tlbex.c
arch/mips/oprofile/op_model_mipsxx.c
arch/mips/pci/pci-bcm1480.c
arch/mips/pci/pci-bcm1480ht.c
arch/mips/philips/pnx8550/common/setup.c
arch/mips/philips/pnx8550/common/time.c
arch/mips/philips/pnx8550/jbs/init.c
arch/mips/philips/pnx8550/stb810/prom_init.c
arch/mips/pmc-sierra/yosemite/i2c-yosemite.h [deleted file]
arch/mips/pmc-sierra/yosemite/prom.c
arch/mips/pmc-sierra/yosemite/smp.c
arch/mips/qemu/Makefile [deleted file]
arch/mips/qemu/q-console.c [deleted file]
arch/mips/qemu/q-firmware.c [deleted file]
arch/mips/qemu/q-irq.c [deleted file]
arch/mips/qemu/q-mem.c [deleted file]
arch/mips/qemu/q-reset.c [deleted file]
arch/mips/qemu/q-setup.c [deleted file]
arch/mips/qemu/q-smp.c [deleted file]
arch/mips/sgi-ip22/Makefile
arch/mips/sgi-ip22/ip22-mc.c
arch/mips/sgi-ip22/ip28-berr.c [new file with mode: 0644]
arch/mips/sgi-ip27/ip27-init.c
arch/mips/sgi-ip27/ip27-klnuma.c
arch/mips/sgi-ip27/ip27-smp.c
arch/mips/sibyte/bcm1480/smp.c
arch/mips/sibyte/cfe/Makefile
arch/mips/sibyte/cfe/setup.c
arch/mips/sibyte/cfe/smp.c [deleted file]
arch/mips/sibyte/sb1250/smp.c
arch/mips/sni/Makefile
arch/mips/sni/a20r.c
arch/mips/sni/eisa.c [new file with mode: 0644]
arch/mips/sni/irq.c
arch/mips/sni/pcit.c
arch/mips/sni/rm200.c
arch/mips/sni/setup.c
arch/mips/sni/sniprom.c [deleted file]
arch/mips/sni/time.c
arch/mips/tx4927/common/Makefile
arch/mips/tx4927/common/tx4927_setup.c [deleted file]
arch/mips/tx4927/toshiba_rbtx4927/toshiba_rbtx4927_setup.c
arch/mips/tx4938/common/Makefile
arch/mips/tx4938/common/setup.c [deleted file]
arch/mips/tx4938/toshiba_rbtx4938/prom.c
arch/mips/tx4938/toshiba_rbtx4938/setup.c
arch/mips/vr41xx/common/init.c
arch/mips/vr41xx/nec-cmbvr4133/setup.c
include/asm-mips/addrspace.h
include/asm-mips/asm.h
include/asm-mips/bootinfo.h
include/asm-mips/bugs.h
include/asm-mips/cpu-info.h
include/asm-mips/cpu.h
include/asm-mips/delay.h
include/asm-mips/dma.h
include/asm-mips/fixmap.h
include/asm-mips/fw/cfe/cfe_api.h
include/asm-mips/fw/cfe/cfe_error.h
include/asm-mips/mach-cobalt/cobalt.h
include/asm-mips/mach-ip28/cpu-feature-overrides.h [new file with mode: 0644]
include/asm-mips/mach-ip28/ds1286.h [new file with mode: 0644]
include/asm-mips/mach-ip28/spaces.h [new file with mode: 0644]
include/asm-mips/mach-ip28/war.h [moved from include/asm-mips/mach-qemu/war.h with 82% similarity]
include/asm-mips/mach-qemu/cpu-feature-overrides.h [deleted file]
include/asm-mips/mips-boards/generic.h
include/asm-mips/mipsprom.h
include/asm-mips/pmc-sierra/msp71xx/msp_regs.h
include/asm-mips/r4kcache.h
include/asm-mips/sgi/ioc.h
include/asm-mips/sibyte/board.h
include/asm-mips/sibyte/sb1250.h
include/asm-mips/sibyte/swarm.h
include/asm-mips/smp-ops.h [new file with mode: 0644]
include/asm-mips/smp.h
include/asm-mips/sni.h
include/asm-mips/stackframe.h
include/asm-mips/time.h
include/asm-mips/topology.h
include/asm-mips/tx4927/tx4927_pci.h
include/asm-mips/uaccess.h
include/asm-mips/war.h

index 3f13bf8043d2a2f8a7626102c4b1375153a53ba5..8ae9cffc226234a9894e929231909b18e5acc2b3 100644 (file)
@@ -2,5 +2,3 @@
        - this file.
 AU1xxx_IDE.README
        - README for MIPS AU1XXX IDE driver.
-GT64120.README
-       - README for dir with info on MIPS boards using GT-64120 or GT-64120A.
diff --git a/Documentation/mips/GT64120.README b/Documentation/mips/GT64120.README
deleted file mode 100644 (file)
index 2d0eec9..0000000
+++ /dev/null
@@ -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)
-
index b22c043b6ef8e311702a6d8ac0b7064b10336c84..6b0f85f02c7966895656fb5a13681041e52f2394 100644 (file)
@@ -37,16 +37,6 @@ config BASLER_EXCITE
          The eXcite is a smart camera platform manufactured by
          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
        bool "BCM47XX based boards"
        select CEVT_R4K
@@ -82,7 +72,7 @@ config MIPS_COBALT
        select SYS_HAS_CPU_NEVADA
        select SYS_HAS_EARLY_PRINTK
        select SYS_SUPPORTS_32BIT_KERNEL
-       select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
+       select SYS_SUPPORTS_64BIT_KERNEL
        select SYS_SUPPORTS_LITTLE_ENDIAN
        select GENERIC_HARDIRQS_NO__DO_IRQ
 
@@ -91,6 +81,9 @@ config MACH_DECSTATION
        select BOOT_ELF32
        select CEVT_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 NO_IOPORT
        select IRQ_CPU
@@ -124,12 +117,12 @@ config MACH_JAZZ
        select ARCH_MAY_HAVE_PC_FDC
        select CEVT_R4K
        select CSRC_R4K
+       select DEFAULT_SGI_PARTITION if CPU_BIG_ENDIAN
        select GENERIC_ISA_DMA
        select IRQ_CPU
        select I8253
        select I8259
        select ISA
-       select PCSPEAKER
        select SYS_HAS_CPU_R4X00
        select SYS_SUPPORTS_32BIT_KERNEL
        select SYS_SUPPORTS_64BIT_KERNEL if EXPERIMENTAL
@@ -187,6 +180,7 @@ config LEMOTE_FULONG
 config MIPS_ATLAS
        bool "MIPS Atlas board"
        select BOOT_ELF32
+       select BOOT_RAW
        select CEVT_R4K
        select CSRC_R4K
        select DMA_NONCOHERENT
@@ -219,6 +213,7 @@ config MIPS_MALTA
        bool "MIPS Malta board"
        select ARCH_MAY_HAVE_PC_FDC
        select BOOT_ELF32
+       select BOOT_RAW
        select CEVT_R4K
        select CSRC_R4K
        select DMA_NONCOHERENT
@@ -364,35 +359,6 @@ config PMC_YOSEMITE
          Yosemite is an evaluation board for the RM9000x2 processor
          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
        bool "SGI IP22 (Indy/Indigo2)"
        select ARC
@@ -400,6 +366,7 @@ config SGI_IP22
        select BOOT_ELF32
        select CEVT_R4K
        select CSRC_R4K
+       select DEFAULT_SGI_PARTITION
        select DMA_NONCOHERENT
        select HW_HAS_EISA
        select I8253
@@ -407,6 +374,12 @@ config SGI_IP22
        select IP22_CPU_SCACHE
        select IRQ_CPU
        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 SYS_HAS_CPU_R4X00
        select SYS_HAS_CPU_R5000
@@ -424,6 +397,7 @@ config SGI_IP27
        select ARC
        select ARC64
        select BOOT_ELF64
+       select DEFAULT_SGI_PARTITION
        select DMA_IP27
        select SYS_HAS_EARLY_PRINTK
        select HW_HAS_PCI
@@ -440,6 +414,36 @@ config SGI_IP27
          workstations.  To compile a Linux kernel that runs on these, say Y
          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
        bool "SGI IP32 (O2)"
        select ARC
@@ -545,19 +549,6 @@ config SIBYTE_SENTOSA
        select SYS_SUPPORTS_BIG_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
        bool "Sibyte BCM91480B-BigSur"
        select BOOT_ELF32
@@ -575,10 +566,12 @@ config SNI_RM
        bool "SNI RM200/300/400"
        select ARC if CPU_LITTLE_ENDIAN
        select ARC32 if CPU_LITTLE_ENDIAN
+       select SNIPROM if CPU_BIG_ENDIAN
        select ARCH_MAY_HAVE_PC_FDC
        select BOOT_ELF32
        select CEVT_R4K
        select CSRC_R4K
+       select DEFAULT_SGI_PARTITION if CPU_BIG_ENDIAN
        select DMA_NONCOHERENT
        select GENERIC_ISA_DMA
        select HW_HAS_EISA
@@ -587,7 +580,6 @@ config SNI_RM
        select I8253
        select I8259
        select ISA
-       select PCSPEAKER
        select SWAP_IO_SPACE if CPU_BIG_ENDIAN
        select SYS_HAS_CPU_R4X00
        select SYS_HAS_CPU_R5000
@@ -690,6 +682,7 @@ config WR_PPMC
 endchoice
 
 source "arch/mips/au1000/Kconfig"
+source "arch/mips/basler/excite/Kconfig"
 source "arch/mips/jazz/Kconfig"
 source "arch/mips/lasat/Kconfig"
 source "arch/mips/pmc-sierra/Kconfig"
@@ -797,10 +790,6 @@ config DMA_COHERENT
 config DMA_IP27
        bool
 
-config DMA_IP32
-       bool
-       select DMA_NEED_PCI_MAP_STATE
-
 config DMA_NONCOHERENT
        bool
        select DMA_NEED_PCI_MAP_STATE
@@ -956,16 +945,40 @@ config EMMA2RH
 config SERIAL_RM9000
        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
        bool
 
+config SNIPROM
+       bool
+
 config BOOT_ELF32
        bool
 
 config MIPS_L1_CACHE_SHIFT
        int
        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 "5"
 
@@ -974,7 +987,7 @@ config HAVE_STD_PC_SERIAL_PORT
 
 config ARC_CONSOLE
        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
        bool
@@ -983,7 +996,7 @@ config ARC_MEMORY
 
 config ARC_PROMLIB
        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
 
 config ARC64
@@ -1443,7 +1456,9 @@ config MIPS_MT_SMP
        select MIPS_MT
        select NR_CPUS_DEFAULT_2
        select SMP
+       select SYS_SUPPORTS_SCHED_SMT if SMP
        select SYS_SUPPORTS_SMP
+       select SMP_UP
        help
          This is a kernel model which is also known a VSMP or lately
          has been marketesed into SMVP.
@@ -1460,6 +1475,7 @@ config MIPS_MT_SMTC
        select NR_CPUS_DEFAULT_8
        select SMP
        select SYS_SUPPORTS_SMP
+       select SMP_UP
        help
          This is a kernel model which is known a SMTC or lately has been
          marketesed into SMVP.
@@ -1469,6 +1485,19 @@ endchoice
 config MIPS_MT
        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
        bool
 
@@ -1589,15 +1618,6 @@ config CPU_HAS_SMARTMIPS
 config CPU_HAS_WB
        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
 #
@@ -1618,6 +1638,19 @@ config CPU_HAS_SYNC
 config GENERIC_CLOCKEVENTS_BROADCAST
        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/:
 #
@@ -1721,6 +1754,9 @@ config SMP
 
          If you don't know what to do here, say N.
 
+config SMP_UP
+       bool
+
 config SYS_SUPPORTS_SMP
        bool
 
@@ -1978,9 +2014,6 @@ config MMU
 config I8253
        bool
 
-config PCSPEAKER
-       bool
-
 config ZONE_DMA32
        bool
 
index a1f8d8b96b03faf5217d597ae59d28356012fb96..3fb7f3065c92d4a523001aba19731f36e3e76435 100644 (file)
@@ -141,6 +141,10 @@ cflags-$(CONFIG_CPU_R8000) += -march=r8000 -Wa,--trap
 cflags-$(CONFIG_CPU_R10000)    += $(call cc-option,-march=r10000,-march=r8000) \
                        -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_SB1_PASS_1_WORKAROUNDS
 MODFLAGS       += -msb1-pass1-workarounds
@@ -152,6 +156,8 @@ endif
 #
 libs-$(CONFIG_ARC)             += arch/mips/fw/arc/
 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/
 
 #
@@ -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-mips
 load-$(CONFIG_MIPS_ATLAS)      += 0xffffffff80100000
-all-$(CONFIG_MIPS_ATLAS)       := vmlinux.srec
+all-$(CONFIG_MIPS_ATLAS)       := vmlinux.bin
 
 #
 # MIPS Malta board
@@ -316,7 +322,7 @@ all-$(CONFIG_MIPS_ATLAS)    := vmlinux.srec
 core-$(CONFIG_MIPS_MALTA)      += arch/mips/mips-boards/malta/
 cflags-$(CONFIG_MIPS_MALTA)    += -Iinclude/asm-mips/mach-mips
 load-$(CONFIG_MIPS_MALTA)      += 0xffffffff80100000
-all-$(CONFIG_MIPS_MALTA)       := vmlinux.srec
+all-$(CONFIG_MIPS_MALTA)       := vmlinux.bin
 
 #
 # 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
 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
 #
@@ -474,6 +472,20 @@ OBJCOPYFLAGS                       := --change-addresses=0x57ffffff80000000
 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)
 #
@@ -602,9 +614,11 @@ ifdef CONFIG_64BIT
     endif
   endif
 
-  ifeq ($(KBUILD_SYM32), y)
-    ifeq ($(call cc-option-yn,-msym32), y)
-      cflags-y += -msym32 -DKBUILD_64BIT_SYM32
+  ifeq ($(KBUILD_SYM32)$(call cc-option-yn,-msym32), yy)
+    cflags-y += -msym32 -DKBUILD_64BIT_SYM32
+  else
+    ifeq ($(CONFIG_CPU_DADDI_WORKAROUNDS), y)
+      $(error CONFIG_CPU_DADDI_WORKAROUNDS unsupported without -msym32)
     endif
   endif
 endif
index 98a4e34b024896038e7c833c37686244f22aaa9e..37a10a01de9d30619c2a7c5feeabfac77cbb2c5f 100644 (file)
  *  with this program; if not, write  to the Free Software Foundation, Inc.,
  *  675 Mass Ave, Cambridge, MA 02139, USA.
  */
-#include <linux/errno.h>
 #include <linux/init.h>
-#include <linux/irq.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 <linux/kernel.h>
 
-#include <asm/bootinfo.h>
-#include <asm/io.h>
-#include <asm/mipsregs.h>
-#include <asm/system.h>
-#include <asm/mach-au1x00/au1000.h>
+#include <au1000.h>
 
 /* The IC0 interrupt table.  This is processor, rather than
  * board dependent, so no reason to keep this info in the board
index edf91f41a78671c3108563b13e5b8cdaadbc11cf..428ed275a0f60bb2131bdba50f0fe818690c2a9e 100644 (file)
@@ -179,7 +179,7 @@ static dbdev_tab_t dbdev_tab[] = {
        { 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];
 
index 43298fd9459ca20da50124cb9e0920e8132b0818..e822c123eab82e8e41a0b94a60496f77a1ae9b08 100644 (file)
@@ -57,17 +57,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        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();
 
        memsize_str = prom_getenv("memsize");
index cdeae3212a2d5e48dabfc7f17d7dfe3a1f26a84c..e700fd312a24f0f853f2aa9564c512135622c2ff 100644 (file)
@@ -54,8 +54,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        prom_envp = (char **) fw_arg2;
 
-       mips_machtype = MACH_MTX1;      /* set the platform # */
-
        prom_init_cmdline();
 
        memsize_str = prom_getenv("memsize");
index 49c0fb409fea99246e12e1c4de3ca5a0237ce2ef..ce8637b3afa9ea95e7fe16a8d7c987ef145d043b 100644 (file)
 #include <linux/types.h>
 #include <linux/platform_device.h>
 #include <linux/leds.h>
+#include <linux/gpio_keys.h>
+#include <linux/input.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[] = {
        [0] = {
                .start  = 15,
@@ -66,11 +89,13 @@ static struct platform_device mtx1_gpio_leds = {
 
 static struct __initdata platform_device * mtx1_devs[] = {
        &mtx1_gpio_leds,
-       &mtx1_wdt
+       &mtx1_wdt,
+       &mtx1_button
 };
 
 static int __init mtx1_register_devices(void)
 {
+       gpio_direction_input(207);
        return platform_add_devices(mtx1_devs, ARRAY_SIZE(mtx1_devs));
 }
 
index ddccaf6997d0924a8ef0b2098c3af621b70c8c97..2515b9fb24af68b0d703b978d70d994d24db4207 100644 (file)
@@ -52,8 +52,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        prom_envp = (char **) fw_arg2;
 
-       mips_machtype = MACH_PB1000;
-
        prom_init_cmdline();
        memsize_str = prom_getenv("memsize");
        if (!memsize_str) {
index c93fd39b4abae21e44cbf5e3835e622dbea99d6a..490c3801c275813ace198893e4b2d3b3f38f051e 100644 (file)
@@ -53,8 +53,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        prom_envp = (char **) fw_arg3;
 
-       mips_machtype = MACH_PB1100;
-
        prom_init_cmdline();
 
        memsize_str = prom_getenv("memsize");
index c251570749ee3cf668ff27123c3f172147087bc3..069ed45f04f2e504e7f9522d0cc9c07aff0e6008 100644 (file)
@@ -53,8 +53,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        prom_envp = (char **) fw_arg2;
 
-       mips_machtype = MACH_PB1200;
-
        prom_init_cmdline();
        memsize_str = prom_getenv("memsize");
        if (!memsize_str) {
index 507d4b20416175cccf728c38d8af225be162a27b..db558c967048e766379e7fca31122dfe16ebb59e 100644 (file)
@@ -53,8 +53,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        prom_envp = (char **) fw_arg2;
 
-       mips_machtype = MACH_PB1500;
-
        prom_init_cmdline();
        memsize_str = prom_getenv("memsize");
        if (!memsize_str) {
index b03eee601e360525b9afd65096d4d1228025bb62..b716363ea56443a4d3ce1ddf74bb88b7db05310b 100644 (file)
@@ -53,8 +53,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        prom_envp = (char **) fw_arg2;
 
-       mips_machtype = MACH_PB1550;
-
        prom_init_cmdline();
        memsize_str = prom_getenv("memsize");
        if (!memsize_str) {
index 6532939f377aac0ac0a096a6352b5ddf59938d31..7e6878c1b0a58aa0b1fcb9031ecfa585b7dc0f20 100644 (file)
@@ -52,8 +52,6 @@ void __init prom_init(void)
        prom_argv = (char **) fw_arg1;
        prom_envp = (char **) fw_arg2;
 
-       mips_machtype = MACH_XXS1500;   /* set the platform # */
-
        prom_init_cmdline();
 
        memsize_str = prom_getenv("memsize");
diff --git a/arch/mips/basler/excite/Kconfig b/arch/mips/basler/excite/Kconfig
new file mode 100644 (file)
index 0000000..ba50607
--- /dev/null
@@ -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.
index 6af0b21ebc3291a4d8afb9f863f45b9d87d763b7..476d20e08d0e4ceb2251b745ad3e81620f77589e 100644 (file)
@@ -48,7 +48,7 @@ static DECLARE_WAIT_QUEUE_HEAD(wq);
 
 
 
-static struct file_operations fops =
+static const struct file_operations fops =
 {
        .owner          = THIS_MODULE,
        .open           = iodev_open,
index 2d752c2f6e5902de96faef7915b4eb5a51d9d72b..68d8bc597e347a83ce17a356ccaf32864c05f68d 100644 (file)
@@ -135,8 +135,6 @@ void __init prom_init(void)
 #ifdef CONFIG_64BIT
 #      error 64 bit support not implemented
 #endif /* CONFIG_64BIT */
-
-       mips_machtype = MACH_TITAN_EXCITE;
 }
 
 /* This is called from free_initmem(), so we need to provide it */
index 71eb4ccc4bc15e2a369b26d129526dd1a39e290d..516b4428df4ecd3ac5b45a6397f8ffe4a2e070c1 100644 (file)
  */
 #include <linux/init.h>
 #include <linux/io.h>
-#include <linux/jiffies.h>
 #include <linux/leds.h>
 
+#include <asm/processor.h>
+
 #include <cobalt.h>
 
 #define RESET_PORT     ((void __iomem *)CKSEG1ADDR(0x1c000000))
@@ -29,28 +30,15 @@ device_initcall(ledtrig_power_off_init);
 
 void cobalt_machine_halt(void)
 {
-       int state, last, diff;
-       unsigned long mark;
-
        /*
         * 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);
 
-       for (state = 0;;) {
-               diff = COBALT_KEY_PORT ^ last;
-               last ^= diff;
-
-               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;)
-                       ;
+       local_irq_disable();
+       while (1) {
+               if (cpu_wait)
+                       cpu_wait();
        }
 }
 
index 62bcc887f2caca0f4bfda4b1aa216ce4774a9140..3443f6cd57bb7ebb879f1d3f152f4d885dd952dc 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_MIPS_ATLAS=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 3c70c9d16d01a6bd10918ad09a025f767e734550..abf70d74e9d7f0cb15868bc97c915b31d38b5f14 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 8ecbbb226c76edfb5611196954fa3f0ed09226c2..a94f14b5c8fa62d872daf50a147439fbda1145fa 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 36c13039e23748a38db716d7a929cb5900f990a2..b7295e988381492162e236ba7d35e234cf116e57 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MIPS_COBALT=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 5a8b7acb7dd7edc6df31bff29603633d2a02c991..36578968d386807940442eda47863242934f9c20 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_DB1000=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index d4ed90bca2691498f7c64033d4f211c664645da3..5a90740c363af1943b79d3ed749a6b4005c84c45 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_DB1100=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index a055657e69834d095296f4af72b514d8fc103c5d..76f37a1159fe1719da828dfc1aea1fae2cbe828d 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_DB1200=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 0ad08cf446ecea39aeaa54a36ac4454c38bf1dfe..508c91944f30414676ecb26376d9140f9ad9f566 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_DB1500=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 057c7d429c80dcef0bfb2a0f6bf5a73646299f88..0c2c70d21db95db8be4e29bcb2d40a12a99611bd 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_DB1550=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 2fb350432669e0d8aa667c5e6995dd6acde617d1..58c2cd68c3a7bc13019382ca01a2abfe4f674d71 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_MACH_DECSTATION=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index d0d07faeb844c74903701d57e434364bb5fb6f10..90d81f5dcebc4d2fb0717aeecb2f61d39d2610ec 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index d73d965f7615021f50e2af1d6e67128f3d4eae12..f9a003c2b3a13c92660d8bc26c0965ad981b5c53 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 CONFIG_MARKEINS=y
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 is not set
@@ -47,7 +46,6 @@ CONFIG_MARKEINS=y
 # CONFIG_SIBYTE_SENTOSA is not set
 # CONFIG_SIBYTE_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 17a866057fd49a888f077851cd70294b3656d97f..15efacc75d732e7869a9988787202230bd315c15 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_BASLER_EXCITE=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 4ef39a0527cc2a92e1ac8c432f8f10dc5bc6bc16..5887a1735fba70fc1be3e1520f33af78a3575721 100644 (file)
@@ -23,7 +23,6 @@ CONFIG_LEMOTE_FULONG=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 670039bb1a7cfd02a794178ff39d952d271f8142..4f5e56c9335e42014eb9f8fc081a55f18b8af178 100644 (file)
@@ -25,7 +25,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 CONFIG_SGI_IP22=y
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 892d4c38fd0dd533a242fe45edc8eb632c50af1a..f40e437bd9e5d32ef3452df61f63236a07ffc042 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MIPS=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 CONFIG_SGI_IP27=y
 # CONFIG_SGI_IP32 is not set
@@ -35,7 +34,6 @@ CONFIG_SGI_IP27=y
 # CONFIG_SIBYTE_SWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 47f49b60c5d631fe738407b324c7a76c4de761e9..2c5c624c5d42872abd9d9e599de59709fc680479 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index fa655e247eccfde5af1c18d65821d798d2d3dfc3..56148745e8f25a048ce5f1ce2a0bdb8cbb489671 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_MACH_JAZZ=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index eb96791c33eaacd60270e7f57f194a56741699e9..a7cd67753aacb137bee8c3df618f8a82943c491d 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MIPS=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 is not set
 # CONFIG_SGI_IP32 is not set
@@ -35,7 +34,6 @@ CONFIG_MIPS=y
 # CONFIG_SIBYTE_SWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 CONFIG_TOSHIBA_JMR3927=y
@@ -464,7 +462,6 @@ CONFIG_SERIAL_TXX9_STDSERIAL=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_RTC is not set
 # CONFIG_R3964 is not set
@@ -482,6 +479,20 @@ CONFIG_DEVPORT=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY 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
index 2c665fcef0891f77b9c742fb5966be54a5364d62..e6aef999854ccf5bc44928183ed3271656327301 100644 (file)
@@ -25,7 +25,6 @@ CONFIG_LASAT=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 is not set
 # CONFIG_SGI_IP32 is not set
@@ -36,7 +35,6 @@ CONFIG_LASAT=y
 # CONFIG_SIBYTE_SWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 4b7e43c9f69a84f5d285d2a6868f3f12e0e087f3..3d0da952811c025e185040a7610a10c6cda90379 100644 (file)
@@ -25,7 +25,6 @@ CONFIG_MIPS_MALTA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 61b72f5a953e2cf93daed47c2d3600524b3fe538..6db0bdaefb27f72ea11bd4b920819a7448a1ac36 100644 (file)
@@ -26,7 +26,6 @@ CONFIG_MIPS_SIM=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 8334350d7229b9e30091c2e610615d2ec50148d6..27e23fc9363ad3cabe87a53771ccb27628d790da 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 69278999c9a20eb897d0996fe2c2b864f738bf30..b12b73f6d74f5db7510988509193430f1668d108 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_MACH_VR41XX is not set
 CONFIG_PMC_MSP=y
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index b536d7c63790fd7213fbdc52125e4bd67c57a827..fa3aa391944832b98bb2c8c5f86f36bbc04f4198 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_ALCHEMY=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
@@ -1617,6 +1615,7 @@ CONFIG_INPUT_EVBUG=m
 #
 CONFIG_INPUT_KEYBOARD=y
 CONFIG_KEYBOARD_ATKBD=y
+CONFIG_KEYBOARD_GPIO=y
 CONFIG_KEYBOARD_SUNKBD=m
 CONFIG_KEYBOARD_LKKBD=m
 CONFIG_KEYBOARD_XTKBD=m
index 703d28db05b9e7b4f86c9b48cc98fa9f98dc5e6c..1d0157d3a5bb3130ee973dfb8508406f0233a301 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_PB1100=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 82f0c5cee0dc21c346f82ca0b637a1667a26e20b..d0491a05ee580efb3b369e519548ea1f68a07ab0 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_PB1500=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 147a4fc7fdd8dabca7882446a967ba6492814226..16d78d3cd2aa395222d3a0685e81e8ea79b25826 100644 (file)
@@ -38,7 +38,6 @@ CONFIG_MIPS_PB1550=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index f6906b069e0499f4e14fd8287320b772f72b6032..518a60892b78e890aadd2173e8492008834d0659 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_PNX8550_JBS=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index b741f81696fbb2d58722ea2c2c4f60ecba3509bc..68351eb81bc88bbe78e208dc69a9e2ac8c4b213e 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 CONFIG_PNX8550_STB810=y
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index b3caf5125c1504616771f110178d0f44f8667cbd..72ca147f942246ea53349b6224c161ca72730e97 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-CONFIG_QEMU=y
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 is not set
@@ -47,7 +46,6 @@ CONFIG_QEMU=y
 # CONFIG_SIBYTE_SENTOSA is not set
 # CONFIG_SIBYTE_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 9383a598094bc340d2e987acc15597aa6e42a8a6..470f6f4d3ea2d60bd6be23be6849085e0ab02383 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MIPS=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 is not set
 # CONFIG_SGI_IP32 is not set
@@ -35,7 +34,6 @@ CONFIG_MIPS=y
 # CONFIG_SIBYTE_SWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
@@ -431,7 +429,6 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_RTC is not set
 # CONFIG_R3964 is not set
@@ -449,6 +446,20 @@ CONFIG_DEVPORT=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY 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
index d1b56cc0fd7c640d7404758b4a615b85e89ce425..5a39f56b175e2c68c0be1183467aca4b1856e8ca 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MIPS=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 is not set
 # CONFIG_SGI_IP32 is not set
@@ -35,7 +34,6 @@ CONFIG_MIPS=y
 # CONFIG_SIBYTE_SWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
@@ -450,7 +448,6 @@ CONFIG_UNIX98_PTYS=y
 CONFIG_LEGACY_PTYS=y
 CONFIG_LEGACY_PTY_COUNT=256
 # CONFIG_IPMI_HANDLER is not set
-# CONFIG_WATCHDOG is not set
 # CONFIG_HW_RANDOM is not set
 # CONFIG_RTC is not set
 # CONFIG_R3964 is not set
@@ -479,6 +476,20 @@ CONFIG_SPI_AT25=y
 # CONFIG_W1 is not set
 # CONFIG_POWER_SUPPLY 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
index fc388118b1140af7efb0a2f04eaf7f2874f7faa5..56371b860eb08a2d2424440b0f346373517214c2 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index c2798229cbfb8609e893a998c585789bf9d0664c..117470b60e34c6f7af9edae070e00de3c88da02e 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 2b6282d132a857715bbdd6f0aa830a3c6b7644c3..3ee75b15c0b042f54a9225e7d293819e387d4352 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_MIPS_SEAD=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 326aa7aa40ea70c422beec4bf69d2ba757a18596..af82e1a1823c2de986bb24dbab6ff56028fa08ba 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 9fd0faeacf53397e2bc6d84810e71b125373b036..a95385b245463fdcd311d12b3089863c3f98bc66 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 499b6bd7ee6847eee5df449379700640350b617e..40d4a40a970e128fc3b623b4bcd1f56d0705fb6b 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index b52256ca0b5352d524dabdc27d8b5f88eacf24ca..edf90b321fe63d4076d28e369b2e3673ce1b8acf 100644 (file)
@@ -24,7 +24,6 @@ CONFIG_MACH_VR41XX=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_SGI_IP22 is not set
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index 7e410e10fed77ff5f7283608bfe8e29815b2d099..2e3c683b205247aea77898a2fed3c61a968b3dea 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_WR_PPMC=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index acaf0e21bb00b5817b57036d79a2047f33c7a08d..b6178ffbc5230f81bee481d9da7f7d6da1d359bf 100644 (file)
@@ -37,7 +37,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_MACH_VR41XX is not set
 CONFIG_PMC_YOSEMITE=y
-# CONFIG_QEMU is not set
 # CONFIG_MARKEINS is not set
 # CONFIG_SGI_IP22 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_RHONE is not set
 # CONFIG_SIBYTE_CARMEL is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_LITTLESUR is not set
 # CONFIG_SIBYTE_CRHINE is not set
 # CONFIG_SIBYTE_CRHONE is not set
index 820e5331205ff510c21aa699b97c812fc82995a9..60349062595a9f5c0d420a75bab4faf3a9ace8d8 100644 (file)
@@ -161,7 +161,6 @@ static cycle_t dec_ioasic_hpt_read(void)
 
 void __init plat_time_init(void)
 {
-       mips_timer_state = dec_timer_state;
        mips_timer_ack = dec_timer_ack;
 
        if (!cpu_has_counter && IOASIC)
index 670039bb1a7cfd02a794178ff39d952d271f8142..4f5e56c9335e42014eb9f8fc081a55f18b8af178 100644 (file)
@@ -25,7 +25,6 @@ CONFIG_ZONE_DMA=y
 # CONFIG_PNX8550_STB810 is not set
 # CONFIG_PMC_MSP is not set
 # CONFIG_PMC_YOSEMITE is not set
-# CONFIG_QEMU is not set
 CONFIG_SGI_IP22=y
 # CONFIG_SGI_IP27 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_LITTLESUR is not set
 # CONFIG_SIBYTE_SENTOSA is not set
-# CONFIG_SIBYTE_PTSWARM is not set
 # CONFIG_SIBYTE_BIGSUR is not set
 # CONFIG_SNI_RM is not set
 # CONFIG_TOSHIBA_JMR3927 is not set
index fd604ef28823ccf9113670c7377f53fc0c8a1a22..4ca4eef934a539aa579458c37c95e4826356ab44 100644 (file)
@@ -52,7 +52,7 @@ static char * __init move_firmware_args(char* cp)
                                strcat(cp, used_arc[i][1]);
                                cp += strlen(used_arc[i][1]);
                                /* ... and now the argument */
-                               s = strstr(prom_argv(actr), "=");
+                               s = strchr(prom_argv(actr), '=');
                                if (s) {
                                        s++;
                                        strcpy(cp, s);
index e2f75b13312f1a3940b1469462711f35e8cb2f31..3ad8788b6eaa0c3639890b8e00c9a09455daa4f9 100644 (file)
@@ -12,6 +12,7 @@
 
 #include <asm/bootinfo.h>
 #include <asm/sgialib.h>
+#include <asm/smp-ops.h>
 
 #undef DEBUG_PROM_INIT
 
@@ -48,4 +49,11 @@ void __init prom_init(void)
        ArcRead(0, &c, 1, &cnt);
        ArcEnterInteractiveMode();
 #endif
+#ifdef CONFIG_SGI_IP27
+       {
+               extern struct plat_smp_ops ip27_smp_ops;
+
+               register_smp_ops(&ip27_smp_ops);
+       }
+#endif
 }
index a9f69e4e40ac6703da7db1921303ed7b13630ad7..717db74f7c6ea786ab930fb66072084dacb6f510 100644 (file)
  * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307, USA.
  */
 
-/*  *********************************************************************
-    *
-    *  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).
-    *  There should be one routine here per iocb function call.
-    *
-    *  Authors:  Mitch Lichtenberg, Chris Demetriou
-    *
-    ********************************************************************* */
+/*
+ *
+ * Broadcom Common Firmware Environment (CFE)
+ *
+ * This module contains device function stubs (small routines to
+ * call the standard "iocb" interface entry point to CFE).
+ * There should be one routine here per iocb function call.
+ *
+ * Authors:  Mitch Lichtenberg, Chris Demetriou
+ */
 
 #include <asm/fw/cfe/cfe_api.h>
 #include "cfe_api_int.h"
 #define XPTR_FROM_NATIVE(n)    ((cfe_xptr_t) (intptr_t) (n))
 #define NATIVE_FROM_XPTR(x)    ((void *) (intptr_t) (x))
 
-#ifdef CFE_API_IMPL_NAMESPACE
-#define cfe_iocb_dispatch(a)           __cfe_iocb_dispatch(a)
-#endif
-int cfe_iocb_dispatch(cfe_xiocb_t * xiocb);
+int cfe_iocb_dispatch(struct cfe_xiocb *xiocb);
 
-#if defined(CFE_API_common) || defined(CFE_API_ALL)
 /*
  * Declare the dispatch function with args of "intptr_t".
  * 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 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_handle = handle;
        return 0;
 }
 
-int cfe_iocb_dispatch(cfe_xiocb_t * xiocb)
+int cfe_iocb_dispatch(struct cfe_xiocb * xiocb)
 {
        if (!cfe_dispfunc)
                return -1;
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_DEV_CLOSE;
        xiocb.xiocb_status = 0;
@@ -86,18 +77,16 @@ int cfe_close(int handle)
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_FW_CPUCTL;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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_command = CFE_CPU_CMD_START;
        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;
 }
-#endif                         /* CFE_API_cpu_start || CFE_API_ALL */
 
-#if defined(CFE_API_cpu_stop) || defined(CFE_API_ALL)
 int cfe_cpu_stop(int cpu)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_FW_CPUCTL;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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_command = CFE_CPU_CMD_STOP;
 
@@ -128,18 +115,16 @@ int cfe_cpu_stop(int cpu)
 
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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.name_ptr = XPTR_FROM_NATIVE(name);
        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;
 }
-#endif                         /* CFE_API_enumenv || CFE_API_ALL */
 
-#if defined(CFE_API_enummem) || defined(CFE_API_ALL)
 int
-cfe_enummem(int idx, int flags, cfe_xuint_t * start, cfe_xuint_t * length,
-           cfe_xuint_t * type)
+cfe_enummem(int idx, int flags, u64 *start, u64 *length, u64 *type)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_FW_MEMENUM;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 0;
        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;
 
        cfe_iocb_dispatch(&xiocb);
@@ -177,30 +159,26 @@ cfe_enummem(int idx, int flags, cfe_xuint_t * start, cfe_xuint_t * length,
 
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_FW_RESTART;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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;
 
        cfe_iocb_dispatch(&xiocb);
 
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_FW_FLUSHCACHE;
        xiocb.xiocb_status = 0;
@@ -212,34 +190,30 @@ int cfe_flushcache(int flg)
 
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_DEV_GETINFO;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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_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);
 
        if (xiocb.xiocb_status < 0)
                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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        *dest = 0;
 
@@ -247,10 +221,10 @@ int cfe_getenv(char *name, char *dest, int destlen)
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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.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_length = destlen;
 
@@ -258,18 +232,16 @@ int cfe_getenv(char *name, char *dest, int destlen)
 
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_FW_GETINFO;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 0;
        xiocb.xiocb_flags = 0;
-       xiocb.xiocb_psize = sizeof(xiocb_fwinfo_t);
+       xiocb.xiocb_psize = sizeof(struct xiocb_fwinfo);
 
        cfe_iocb_dispatch(&xiocb);
 
@@ -292,12 +264,10 @@ int cfe_getfwinfo(cfe_fwinfo_t * info)
 
        return 0;
 }
-#endif                         /* CFE_API_getfwinfo || CFE_API_ALL */
 
-#if defined(CFE_API_getstdhandle) || defined(CFE_API_ALL)
 int cfe_getstdhandle(int flg)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_DEV_GETHANDLE;
        xiocb.xiocb_status = 0;
@@ -311,23 +281,17 @@ int cfe_getstdhandle(int flg)
                return xiocb.xiocb_status;
        return xiocb.xiocb_handle;
 }
-#endif                         /* CFE_API_getstdhandle || CFE_API_ALL */
 
-#if defined(CFE_API_getticks) || defined(CFE_API_ALL)
 int64_t
-#ifdef CFE_API_IMPL_NAMESPACE
-__cfe_getticks(void)
-#else
 cfe_getticks(void)
-#endif
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_FW_GETTIME;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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;
 
        cfe_iocb_dispatch(&xiocb);
@@ -335,18 +299,16 @@ cfe_getticks(void)
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_DEV_INPSTAT;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = handle;
        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;
 
        cfe_iocb_dispatch(&xiocb);
@@ -355,20 +317,18 @@ int cfe_inpstat(int handle)
                return xiocb.xiocb_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
 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_status = 0;
        xiocb.xiocb_handle = handle;
        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_ioctlcmd = ioctlnum;
        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;
        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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_DEV_OPEN;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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_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);
 
@@ -402,27 +360,21 @@ int cfe_open(char *name)
                return xiocb.xiocb_status;
        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)
 {
        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, cfe_xint_t offset, unsigned char *buffer,
-           int length)
+int cfe_readblk(int handle, s64 offset, unsigned char *buffer, int length)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_DEV_READ;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = handle;
        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_ptr = XPTR_FROM_NATIVE(buffer);
        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.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)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_ENV_SET;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = 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.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_length = cfe_strlen(val);
+       xiocb.plist.xiocb_envbuf.val_length = strlen(val);
 
        cfe_iocb_dispatch(&xiocb);
 
        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)
 {
        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, cfe_xint_t offset, unsigned char *buffer,
-            int length)
+int cfe_writeblk(int handle, s64 offset, unsigned char *buffer, int length)
 {
-       cfe_xiocb_t xiocb;
+       struct cfe_xiocb xiocb;
 
        xiocb.xiocb_fcode = CFE_CMD_DEV_WRITE;
        xiocb.xiocb_status = 0;
        xiocb.xiocb_handle = handle;
        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_ptr = XPTR_FROM_NATIVE(buffer);
        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.plist.xiocb_buffer.buf_retlen;
 }
-#endif                         /* CFE_API_writeblk || CFE_API_ALL */
index f7e5a64b55f3457fdd2fddd63dba5032bfc4b22e..d9759e646956de25b0f23f8c5775b5ad70b13146 100644 (file)
  * along with this program; if not, write to the Free Software
  * 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
 #define CFE_API_INT_H
 
-/*  *********************************************************************
-    *  Constants
-    ********************************************************************* */
-
+/*
+ * Constants.
+ */
 #define CFE_CMD_FW_GETINFO     0
 #define CFE_CMD_FW_RESTART     1
 #define CFE_CMD_FW_BOOT                2
 
 #define CFE_CMD_VENDOR_USE     0x8000  /* codes above this are for customer use */
 
-/*  *********************************************************************
-    *  Structures
   ********************************************************************* */
+/*
+ * Structures.
+ */
 
-typedef uint64_t cfe_xuint_t;
-typedef int64_t cfe_xint_t;
-typedef int64_t cfe_xptr_t;
+/* eeek, signed "pointers" */
+typedef s64 cfe_xptr_t;
 
-typedef struct xiocb_buffer_s {
-       cfe_xuint_t buf_offset;         /* offset on device (bytes) */
+struct xiocb_buffer {
+       u64 buf_offset;         /* offset on device (bytes) */
        cfe_xptr_t  buf_ptr;            /* pointer to a buffer */
-       cfe_xuint_t buf_length;         /* length of this buffer */
-       cfe_xuint_t buf_retlen;         /* returned length (for read ops) */
-       cfe_xuint_t buf_ioctlcmd;       /* IOCTL command (used only for IOCTLs) */
-} xiocb_buffer_t;
-
-#define buf_devflags buf_ioctlcmd      /* returned device info flags */
+       u64 buf_length;         /* length of this buffer */
+       u64 buf_retlen;         /* returned length (for read ops) */
+       u64 buf_ioctlcmd;       /* IOCTL command (used only for IOCTLs) */
+};
 
-typedef struct xiocb_inpstat_s {
-       cfe_xuint_t inp_status;         /* 1 means input available */
-} xiocb_inpstat_t;
+struct xiocb_inpstat {
+       u64 inp_status;         /* 1 means input available */
+};
 
-typedef struct xiocb_envbuf_s {
-       cfe_xint_t enum_idx;            /* 0-based enumeration index */
+struct xiocb_envbuf {
+       s64 enum_idx;           /* 0-based enumeration index */
        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_xint_t val_length;          /* size of value string buffer */
-} xiocb_envbuf_t;
-
-typedef struct xiocb_cpuctl_s {
-       cfe_xuint_t cpu_number;         /* cpu number to control */
-       cfe_xuint_t cpu_command;        /* command to issue to CPU */
-       cfe_xuint_t start_addr;         /* CPU start address */
-       cfe_xuint_t gp_val;             /* starting GP value */
-       cfe_xuint_t sp_val;             /* starting SP value */
-       cfe_xuint_t a1_val;             /* starting A1 value */
-} xiocb_cpuctl_t;
-
-typedef struct xiocb_time_s {
-       cfe_xint_t ticks;               /* current time in ticks */
-} xiocb_time_t;
-
-typedef struct xiocb_exitstat_s {
-       cfe_xint_t status;
-} xiocb_exitstat_t;
-
-typedef struct xiocb_meminfo_s {
-       cfe_xint_t mi_idx;              /* 0-based enumeration index */
-       cfe_xint_t mi_type;             /* type of memory block */
-       cfe_xuint_t mi_addr;            /* physical start address */
-       cfe_xuint_t mi_size;            /* block size */
-} xiocb_meminfo_t;
-
-typedef struct xiocb_fwinfo_s {
-       cfe_xint_t fwi_version;         /* major, minor, eco version */
-       cfe_xint_t fwi_totalmem;        /* total installed mem */
-       cfe_xint_t fwi_flags;           /* various flags */
-       cfe_xint_t fwi_boardid;         /* board ID */
-       cfe_xint_t fwi_bootarea_va;     /* VA of boot area */
-       cfe_xint_t fwi_bootarea_pa;     /* PA of boot area */
-       cfe_xint_t fwi_bootarea_size;   /* size of boot area */
-       cfe_xint_t fwi_reserved1;
-       cfe_xint_t fwi_reserved2;
-       cfe_xint_t fwi_reserved3;
-} xiocb_fwinfo_t;
-
-typedef struct cfe_xiocb_s {
-       cfe_xuint_t xiocb_fcode;        /* IOCB function code */
-       cfe_xint_t xiocb_status;        /* return status */
-       cfe_xint_t xiocb_handle;        /* file/device handle */
-       cfe_xuint_t xiocb_flags;        /* flags for this IOCB */
-       cfe_xuint_t xiocb_psize;        /* size of parameter list */
+       s64 val_length;         /* size of value string buffer */
+};
+
+struct xiocb_cpuctl {
+       u64 cpu_number;         /* cpu number to control */
+       u64 cpu_command;        /* command to issue to CPU */
+       u64 start_addr;         /* CPU start address */
+       u64 gp_val;             /* starting GP value */
+       u64 sp_val;             /* starting SP value */
+       u64 a1_val;             /* starting A1 value */
+};
+
+struct xiocb_time {
+       s64 ticks;              /* current time in ticks */
+};
+
+struct xiocb_exitstat{
+       s64 status;
+};
+
+struct xiocb_meminfo {
+       s64 mi_idx;             /* 0-based enumeration index */
+       s64 mi_type;            /* type of memory block */
+       u64 mi_addr;            /* physical start address */
+       u64 mi_size;            /* block size */
+};
+
+struct xiocb_fwinfo {
+       s64 fwi_version;                /* major, minor, eco version */
+       s64 fwi_totalmem;       /* total installed mem */
+       s64 fwi_flags;          /* various flags */
+       s64 fwi_boardid;                /* board ID */
+       s64 fwi_bootarea_va;    /* VA of boot area */
+       s64 fwi_bootarea_pa;    /* PA of boot area */
+       s64 fwi_bootarea_size;  /* size of boot area */
+       s64 fwi_reserved1;
+       s64 fwi_reserved2;
+       s64 fwi_reserved3;
+};
+
+struct cfe_xiocb {
+       u64 xiocb_fcode;        /* IOCB function code */
+       s64 xiocb_status;       /* return status */
+       s64 xiocb_handle;       /* file/device handle */
+       u64 xiocb_flags;        /* flags for this IOCB */
+       u64 xiocb_psize;        /* size of parameter list */
        union {
-               xiocb_buffer_t xiocb_buffer;    /* buffer parameters */
-               xiocb_inpstat_t xiocb_inpstat;  /* input status parameters */
-               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 */
+               /* buffer parameters */
+               struct xiocb_buffer xiocb_buffer;
+
+               /* 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;
-} cfe_xiocb_t;
+};
 
-#endif                         /* CFE_API_INT_H */
+#endif /* CFE_API_INT_H */
diff --git a/arch/mips/fw/lib/Makefile b/arch/mips/fw/lib/Makefile
new file mode 100644 (file)
index 0000000..84befc9
--- /dev/null
@@ -0,0 +1,5 @@
+#
+# Makefile for generic prom monitor library routines under Linux.
+#
+
+lib-$(CONFIG_64BIT)    += call_o32.o
diff --git a/arch/mips/fw/lib/call_o32.S b/arch/mips/fw/lib/call_o32.S
new file mode 100644 (file)
index 0000000..bdf7d1d
--- /dev/null
@@ -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)
diff --git a/arch/mips/fw/sni/Makefile b/arch/mips/fw/sni/Makefile
new file mode 100644 (file)
index 0000000..d9740a3
--- /dev/null
@@ -0,0 +1,5 @@
+#
+# Makefile for the SNI prom monitor routines under Linux.
+#
+
+lib-$(CONFIG_SNIPROM)  += sniprom.o
diff --git a/arch/mips/fw/sni/sniprom.c b/arch/mips/fw/sni/sniprom.c
new file mode 100644 (file)
index 0000000..96ba992
--- /dev/null
@@ -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, " ");
+       }
+}
index 51f6b7862460eca4f9d523eb038fab740733e73d..728ef6a80edd0f613b4754f5f211b01dcef83797 100644 (file)
@@ -121,8 +121,6 @@ const char *get_system_type(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_BOOTROM_BASE, WRPPMC_BOOTROM_SIZE, BOOT_MEM_ROM_DATA);
 
index a7857973ca03fc7bd603742059858dcaf74d5bd4..a7947199c99b5a8129215a27c712861a7313864d 100644 (file)
@@ -200,12 +200,19 @@ static struct platform_device jazz_cmos_pdev = {
        .resource       = jazz_cmos_rsrc
 };
 
+static struct platform_device pcspeaker_pdev = {
+       .name           = "pcspkr",
+       .id             = -1,
+};
+
 static int __init jazz_setup_devinit(void)
 {
        platform_device_register(&jazz_serial8250_device);
        platform_device_register(&jazz_esp_pdev);
        platform_device_register(&jazz_sonic_pdev);
        platform_device_register(&jazz_cmos_pdev);
+       platform_device_register(&pcspeaker_pdev);
+
        return 0;
 }
 
index b643f75ec9a54fc3ed89bed96ba4dfcd30e1524b..700b9cf8eb9d7dee8b4c25a479d1ebf388dea97c 100644 (file)
@@ -52,10 +52,6 @@ void __init prom_init(void)
                puts("Warning: TX3927 TLB off\n");
 #endif
 
-#ifdef CONFIG_TOSHIBA_JMR3927
-       mips_machtype = MACH_TOSHIBA_JMR3927;
-#endif
-
        prom_init_cmdline();
        add_memory_region(0, JMR3927_SDRAM_SIZE, BOOT_MEM_RAM);
 }
index 06e01c8f4e3a56a96d415758af245f4622a1770d..c886d804d3037d964db8ae277b3c5da3ca2ebeda 100644 (file)
 
 #include <linux/init.h>
 #include <linux/kernel.h>
-#include <linux/kdev_t.h>
 #include <linux/types.h>
 #include <linux/pci.h>
-#include <linux/ide.h>
 #include <linux/ioport.h>
 #include <linux/delay.h>
 #include <linux/pm.h>
 #include <linux/platform_device.h>
+#include <linux/clk.h>
 #ifdef CONFIG_SERIAL_TXX9
-#include <linux/tty.h>
-#include <linux/serial.h>
 #include <linux/serial_core.h>
 #endif
 
-#include <asm/addrspace.h>
 #include <asm/txx9tmr.h>
 #include <asm/reboot.h>
 #include <asm/jmr3927/jmr3927.h>
@@ -238,6 +234,8 @@ static void __init tx3927_setup(void)
        tx3927_ccfgptr->ccfg &= ~TX3927_CCFG_BEOW;
        /* Disable PCI snoop */
        tx3927_ccfgptr->ccfg &= ~TX3927_CCFG_PSNP;
+       /* do reset on watchdog */
+       tx3927_ccfgptr->ccfg |= TX3927_CCFG_WR;
 
 #ifdef DO_WRITE_THROUGH
        /* 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;
 }
 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);
index af78456d4138cb5a511230766915a24e82ff41d7..417bb3e336ac811d33a0f9b43092e44e146a5b8f 100644 (file)
 #include <asm/mipsregs.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)
 {
        asm volatile(
@@ -155,13 +164,7 @@ static inline void check_mult_sh(void)
        }
 
        printk("no.\n");
-       panic("Reliable operation impossible!\n"
-#ifndef CONFIG_CPU_R4000
-             "Configure for R4000 to enable the workaround."
-#else
-             "Please report to <linux-mips@linux-mips.org>."
-#endif
-             );
+       panic(bug64hit, !R4000_WAR ? r4kwar : nowar);
 }
 
 static volatile int daddi_ov __initdata = 0;
@@ -233,15 +236,11 @@ static inline void check_daddi(void)
        }
 
        printk("no.\n");
-       panic("Reliable operation impossible!\n"
-#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
-             );
+       panic(bug64hit, !DADDI_WAR ? daddiwar : nowar);
 }
 
+int daddiu_bug __initdata = -1;
+
 static inline void check_daddiu(void)
 {
        long v, w, tmp;
@@ -281,7 +280,9 @@ static inline void check_daddiu(void)
                : "=&r" (v), "=&r" (w), "=&r" (tmp)
                : "I" (0xffffffffffffdb9aUL), "I" (0x1234));
 
-       if (v == w) {
+       daddiu_bug = v != w;
+
+       if (!daddiu_bug) {
                printk("no.\n");
                return;
        }
@@ -303,18 +304,16 @@ static inline void check_daddiu(void)
        }
 
        printk("no.\n");
-       panic("Reliable operation impossible!\n"
-#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
-             );
+       panic(bug64hit, !DADDI_WAR ? daddiwar : nowar);
 }
 
-void __init check_bugs64(void)
+void __init check_bugs64_early(void)
 {
        check_mult_sh();
-       check_daddi();
        check_daddiu();
 }
+
+void __init check_bugs64(void)
+{
+       check_daddi();
+}
index 5c2794391bf53423d8cd4a1282e17603701023f8..5861a432a52f93bb2feeb76724311922f6b57c76 100644 (file)
@@ -188,6 +188,8 @@ static inline void check_wait(void)
        case CPU_AU1500:
        case CPU_AU1550:
        case CPU_AU1200:
+       case CPU_AU1210:
+       case CPU_AU1250:
                if (allow_au1k_wait)
                        cpu_wait = au1k_wait;
                break;
@@ -733,6 +735,11 @@ static inline void cpu_probe_alchemy(struct cpuinfo_mips *c)
                        break;
                case 4:
                        c->cputype = CPU_AU1200;
+                       if (2 == (c->processor_id & 0xff))
+                               c->cputype = CPU_AU1250;
+                       break;
+               case 5:
+                       c->cputype = CPU_AU1210;
                        break;
                default:
                        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_AU1550:        name = "Au1550"; 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_4KSC:          name = "MIPS 4KSc"; break;
        case CPU_VR41XX:        name = "NEC Vr41xx"; break;
index e76a76bf0b3de0cad4de6099e45f81884a994d53..c6ada98ee042039a968e57d57f800ee1c8313ed6 100644 (file)
@@ -6,7 +6,7 @@
  * Copyright (C) 1994 - 2000, 2001, 2003 Ralf Baechle
  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
  * Copyright (C) 2001 MIPS Technologies, Inc.
- * Copyright (C) 2002 Maciej W. Rozycki
+ * Copyright (C) 2002, 2007  Maciej W. Rozycki
  */
 #include <linux/init.h>
 
@@ -471,7 +471,13 @@ NESTED(nmi_handler, PT_SIZE, sp)
        jr      k0
         rfe
 #else
+#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
        LONG_ADDIU      k0, 4           /* stall on $k0 */
+#else
+       .set    at=v1
+       LONG_ADDIU      k0, 4
+       .set    noat
+#endif
        MTC0    k0, CP0_EPC
        /* I hope three instructions between MTC0 and ERET are enough... */
        ori     k1, _THREAD_MASK
index d2c2e00e5864ff67802e811acc74fd74a889da08..f6704ab16306a91b5b2b654d3dcc312b5a437648 100644 (file)
@@ -161,8 +161,7 @@ static unsigned int translate_open_flags(int flags)
        int i;
        unsigned int ret = 0;
 
-       for (i = 0; i < (sizeof(open_flags_table) / sizeof(struct apsp_table));
-            i++) {
+       for (i = 0; i < ARRAY_SIZE(open_flags_table); i++) {
                if( (flags & open_flags_table[i].sp) ) {
                        ret |= open_flags_table[i].ap;
                }
index 2b8ec1102e863329393ad57eee20aea2e5581afa..65af3cc90abbfddef3d0591f526278dab9c925c3 100644 (file)
@@ -174,36 +174,16 @@ struct rlimit32 {
        int     rlim_max;
 };
 
-#ifdef __MIPSEB__
-asmlinkage long sys32_truncate64(const char __user * path, unsigned long __dummy,
-       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
+asmlinkage long sys32_truncate64(const char __user * path,
+       unsigned long __dummy, int a2, int a3)
 {
-       loff_t length;
-
-       length = ((unsigned long) length_hi << 32) | (unsigned int) length_lo;
-
-       return sys_truncate(path, length);
+       return sys_truncate(path, merge_64(a2, a3));
 }
 
-#ifdef __MIPSEB__
 asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy,
-       int length_hi, int length_lo)
-#endif
-#ifdef __MIPSEL__
-asmlinkage long sys32_ftruncate64(unsigned int fd, unsigned long __dummy,
-       int length_lo, int length_hi)
-#endif
+       int a2, int a3)
 {
-       loff_t length;
-
-       length = ((unsigned long) length_hi << 32) | (unsigned int) length_lo;
-
-       return sys_ftruncate(fd, length);
+       return sys_ftruncate(fd, merge_64(a2, a3));
 }
 
 static inline long
index 3d6b1ec1f328b222b7b2a61cc47a5b01fdb024f7..640fb0cc6e393050355750d02c10c027c6b30e37 100644 (file)
@@ -17,7 +17,6 @@
 #include <asm/system.h>
 #include <asm/hardirq.h>
 #include <asm/mmu_context.h>
-#include <asm/smp.h>
 #include <asm/mipsmtregs.h>
 #include <asm/r4kcache.h>
 #include <asm/cacheflush.h>
diff --git a/arch/mips/kernel/pcspeaker.c b/arch/mips/kernel/pcspeaker.c
deleted file mode 100644 (file)
index 475df69..0000000
+++ /dev/null
@@ -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);
index 6e6e947cce1efe6fac56d54f1a795a6ac9ad7b03..36f06539824304db22bc8f67a97e2b6034470026 100644 (file)
@@ -62,6 +62,7 @@ static int show_cpuinfo(struct seq_file *m, void *v)
                );
        seq_printf(m, "shadow register sets\t: %d\n",
                       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",
                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,
        .next   = c_next,
        .stop   = c_stop,
index 1ba00c15505be5617111c5b6877ef02ca5c63a22..0233798f71552c4c64b85e9a61e45f3aafc9fe6c 100644 (file)
@@ -40,7 +40,6 @@
 #include <asm/atomic.h>
 #include <asm/cpu.h>
 #include <asm/processor.h>
-#include <asm/mips_mt.h>
 #include <asm/system.h>
 #include <asm/vpe.h>
 #include <asm/rtlx.h>
index f8a535afce3943d434ae0fe42a727f9aba654694..269c252d956f42c1d74ec85162af510c3e986141 100644 (file)
@@ -8,7 +8,7 @@
  * Copyright (C) 1994, 95, 96, 97, 98, 99, 2000, 01, 02, 03  Ralf Baechle
  * Copyright (C) 1996 Stoned Elipot
  * 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/ioport.h>
 
 #include <asm/addrspace.h>
 #include <asm/bootinfo.h>
+#include <asm/bugs.h>
 #include <asm/cache.h>
 #include <asm/cpu.h>
 #include <asm/sections.h>
 #include <asm/setup.h>
+#include <asm/smp-ops.h>
 #include <asm/system.h>
 
 struct cpuinfo_mips cpu_data[NR_CPUS] __read_mostly;
@@ -561,6 +563,7 @@ void __init setup_arch(char **cmdline_p)
        }
 #endif
        cpu_report();
+       check_bugs_early();
 
 #if defined(CONFIG_VT)
 #if defined(CONFIG_VGA_CONSOLE)
@@ -573,9 +576,7 @@ void __init setup_arch(char **cmdline_p)
        arch_mem_init(cmdline_p);
 
        resource_init();
-#ifdef CONFIG_SMP
        plat_smp_setup();
-#endif
 }
 
 static int __init fpu_disable(char *s)
index 94e210cc6cb6725675389ba84d190c97d63be789..89e6f6aa5166f310c20ae91fafe0c829def00c94 100644 (file)
@@ -22,6 +22,7 @@
 #include <linux/cpumask.h>
 #include <linux/interrupt.h>
 #include <linux/compiler.h>
+#include <linux/smp.h>
 
 #include <asm/atomic.h>
 #include <asm/cacheflush.h>
@@ -30,7 +31,6 @@
 #include <asm/system.h>
 #include <asm/hardirq.h>
 #include <asm/mmu_context.h>
-#include <asm/smp.h>
 #include <asm/time.h>
 #include <asm/mipsregs.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);
 }
 
-/*
- * 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)
+static void vsmp_send_ipi_single(int cpu, unsigned int action)
 {
-       unsigned int mvpconf0, ntc, tc, ncpu = 0;
-
-#ifdef CONFIG_MIPS_MT_FPAFF
-       /* If we have an FPU, enroll ourselves in the FPU-full mask */
-       if (cpu_has_fpu)
-               cpu_set(0, mt_fpu_cpumask);
-#endif /* CONFIG_MIPS_MT_FPAFF */
-       if (!cpu_has_mipsmt)
-               return;
-
-       /* disable MT so we can configure */
-       dvpe();
-       dmt();
+       int i;
+       unsigned long flags;
+       int vpflags;
 
-       /* Put MVPE's into 'configuration state' */
-       set_c0_mvpcontrol(MVPCONTROL_VPC);
+       local_irq_save(flags);
 
-       mvpconf0 = read_c0_mvpconf0();
-       ntc = (mvpconf0 & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT;
+       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) {
+       case SMP_CALL_FUNCTION:
+               i = C_SW1;
+               break;
 
-               smp_tc_init(tc, mvpconf0);
-               ncpu = smp_vpe_init(tc, mvpconf0, ncpu);
+       case SMP_RESCHEDULE_YOURSELF:
+       default:
+               i = C_SW0;
+               break;
        }
 
-       /* Release config state */
-       clear_c0_mvpcontrol(MVPCONTROL_VPC);
+       /* 1:1 mapping of vpe and tc... */
+       settc(cpu);
+       write_vpe_c0_cause(read_vpe_c0_cause() | i);
+       evpe(vpflags);
 
-       /* We'll wait until starting the secondaries before starting MVPE */
+       local_irq_restore(flags);
+}
 
-       printk(KERN_INFO "Detected %i available secondary CPU(s)\n", ncpu);
+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);
 }
 
-void __init plat_prepare_cpus(unsigned int max_cpus)
+static void __cpuinit vsmp_init_secondary(void)
 {
-       mips_mt_set_cpuoptions();
+       /* Enable per-cpu interrupts */
 
-       /* 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);
-       }
+       /* 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));
+}
 
-       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;
+static void __cpuinit vsmp_smp_finish(void)
+{
+       write_c0_compare(read_c0_count() + (8* mips_hpt_frequency/HZ));
 
-       setup_irq(cpu_ipi_resched_irq, &irq_resched);
-       setup_irq(cpu_ipi_call_irq, &irq_call);
+#ifdef CONFIG_MIPS_MT_FPAFF
+       /* If we have an FPU, enroll ourselves in the FPU-full mask */
+       if (cpu_has_fpu)
+               cpu_set(smp_processor_id(), mt_fpu_cpumask);
+#endif /* CONFIG_MIPS_MT_FPAFF */
 
-       set_irq_handler(cpu_ipi_resched_irq, handle_percpu_irq);
-       set_irq_handler(cpu_ipi_call_irq, handle_percpu_irq);
+       local_irq_enable();
+}
+
+static void vsmp_cpus_done(void)
+{
 }
 
 /*
@@ -287,7 +286,7 @@ void __init plat_prepare_cpus(unsigned int max_cpus)
  * (unsigned long)idle->thread_info the gp
  * 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);
        dvpe();
@@ -321,57 +320,81 @@ void __cpuinit prom_boot_secondary(int cpu, struct task_struct *idle)
        evpe(EVPE_ENABLE);
 }
 
-void __cpuinit prom_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));
-}
-
-void __cpuinit prom_smp_finish(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)
 {
-       write_c0_compare(read_c0_count() + (8* mips_hpt_frequency/HZ));
+       unsigned int mvpconf0, ntc, tc, ncpu = 0;
+       unsigned int nvpe;
 
 #ifdef CONFIG_MIPS_MT_FPAFF
        /* If we have an FPU, enroll ourselves in the FPU-full mask */
        if (cpu_has_fpu)
-               cpu_set(smp_processor_id(), mt_fpu_cpumask);
+               cpu_set(0, mt_fpu_cpumask);
 #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)
-{
-       int i;
-       unsigned long flags;
-       int vpflags;
+       mvpconf0 = read_c0_mvpconf0();
+       ntc = (mvpconf0 & MVPCONF0_PTC) >> MVPCONF0_PTC_SHIFT;
 
-       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) {
-       case SMP_CALL_FUNCTION:
-               i = C_SW1;
-               break;
+               smp_tc_init(tc, mvpconf0);
+               ncpu = smp_vpe_init(tc, mvpconf0, ncpu);
+       }
 
-       case SMP_RESCHEDULE_YOURSELF:
-       default:
-               i = C_SW0;
-               break;
+       /* 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);
+}
+
+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);
        }
 
-       /* 1:1 mapping of vpe and tc... */
-       settc(cpu);
-       write_vpe_c0_cause(read_vpe_c0_cause() | i);
-       evpe(vpflags);
+       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;
 
-       local_irq_restore(flags);
+       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,
+};
index 63989e9df4f97099b73889d3610b6111d2447b0c..1e5dfc28294a48efac28259fc610c37db4b257e0 100644 (file)
@@ -37,7 +37,6 @@
 #include <asm/processor.h>
 #include <asm/system.h>
 #include <asm/mmu_context.h>
-#include <asm/smp.h>
 #include <asm/time.h>
 
 #ifdef CONFIG_MIPS_MT_SMTC
@@ -56,6 +55,44 @@ EXPORT_SYMBOL(cpu_online_map);
 extern void __init calibrate_delay(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
  * the master.
@@ -72,7 +109,7 @@ asmlinkage __cpuinit void start_secondary(void)
        cpu_report();
        per_cpu_trap_init();
        mips_clockevent_init();
-       prom_init_secondary();
+       mp_ops->init_secondary();
 
        /*
         * 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_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);
 
@@ -155,7 +193,7 @@ int smp_call_function_mask(cpumask_t mask, void (*func) (void *info),
        smp_mb();
 
        /* 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 */
        /* 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)
 {
-       prom_cpus_done();
+       mp_ops->cpus_done();
 }
 
 /* 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);
        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
        cpu_present_map = cpu_possible_map;
 #endif
@@ -295,7 +334,7 @@ int __cpuinit __cpu_up(unsigned int cpu)
        if (IS_ERR(idle))
                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 ...
index 6f3709996172489eefdbc738b5e6e6fc7a0a587a..fe256559c9978491ced2297b184c733b849050fa 100644 (file)
@@ -14,7 +14,6 @@
 #include <asm/system.h>
 #include <asm/hardirq.h>
 #include <asm/mmu_context.h>
-#include <asm/smp.h>
 #include <asm/mipsregs.h>
 #include <asm/cacheflush.h>
 #include <linux/proc_fs.h>
index 9c92d42996cb48eade410f317d9e9e68821ffd45..85f700e581316df1a2e4d735e89a767d89fddd12 100644 (file)
@@ -16,7 +16,6 @@
 #include <asm/hazards.h>
 #include <asm/irq.h>
 #include <asm/mmu_context.h>
-#include <asm/smp.h>
 #include <asm/mipsregs.h>
 #include <asm/cacheflush.h>
 #include <asm/time.h>
index 2995be1ab3cada3d9771e46cb95727f601cbad53..9f85d4cecc5b01568fefe151db2309111cf6fc8a 100644 (file)
@@ -50,8 +50,6 @@ int update_persistent_clock(struct timespec now)
        return rtc_mips_set_mmss(now.tv_sec);
 }
 
-int (*mips_timer_state)(void);
-
 int null_perf_irq(void)
 {
        return 0;
index c06eb812a95e1dc3d096926ed8ffeac58d900c5e..eed2dc4273e08a47af6472533ce9f77dea7b5e2d 100644 (file)
@@ -53,7 +53,6 @@
 #include <asm/system.h>
 #include <asm/vpe.h>
 #include <asm/kspd.h>
-#include <asm/mips_mt.h>
 
 typedef void *vpe_handle;
 
index 6471d0663fd80c6b382df6d9e8cd54baee829781..d3d04c392e251f2d21a9ef6b5d5fb71ca7b784dd 100644 (file)
@@ -22,8 +22,6 @@
 
 struct pvc_defs *picvue;
 
-DECLARE_MUTEX(pvc_sem);
-
 static void pvc_reg_write(u32 val)
 {
        *picvue->reg = val;
index 2a96bf971897aa044f957d88bd7239ef53fa67f0..91df553711279b76054d5eac4a69b12f83110209 100644 (file)
@@ -4,8 +4,6 @@
  * Brian Murphy <brian.murphy@eicon.com>
  *
  */
-#include <asm/semaphore.h>
-
 struct pvc_defs {
        volatile u32 *reg;
        u32 data_shift;
@@ -45,4 +43,3 @@ void pvc_move(u8 cmd);
 void pvc_clear(void);
 void pvc_home(void);
 
-extern struct semaphore pvc_sem;
index 9947c152582207560de3678257e98c67b15762cc..0bb6037afba3622ae0792842d3ceadae97f2c773 100644 (file)
 #include <linux/interrupt.h>
 
 #include <linux/timer.h>
+#include <linux/mutex.h>
 
 #include "picvue.h"
 
+static DEFINE_MUTEX(pvc_mutex);
 static char pvc_lines[PVC_NLINES][PVC_LINELEN+1];
 static int pvc_linedata[PVC_NLINES];
 static struct proc_dir_entry *pvc_display_dir;
@@ -48,9 +50,9 @@ static int pvc_proc_read_line(char *page, char **start,
                return 0;
        }
 
-       down(&pvc_sem);
+       mutex_lock(&pvc_mutex);
        page += sprintf(page, "%s\n", pvc_lines[lineno]);
-       up(&pvc_sem);
+       mutex_unlock(&pvc_mutex);
 
        return page - origpage;
 }
@@ -73,10 +75,10 @@ static int pvc_proc_write_line(struct file *file, const char *buffer,
        if (buffer[count-1] == '\n')
                count--;
 
-       down(&pvc_sem);
+       mutex_lock(&pvc_mutex);
        strncpy(pvc_lines[lineno], buffer, count);
        pvc_lines[lineno][count] = '\0';
-       up(&pvc_sem);
+       mutex_unlock(&pvc_mutex);
 
        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 cmd = simple_strtol(buffer, NULL, 10);
 
-       down(&pvc_sem);
+       mutex_lock(&pvc_mutex);
        if (scroll_interval != 0)
                del_timer(&timer);
 
@@ -106,7 +108,7 @@ static int pvc_proc_write_scroll(struct file *file, const char *buffer,
                }
                add_timer(&timer);
        }
-       up(&pvc_sem);
+       mutex_unlock(&pvc_mutex);
 
        return origcount;
 }
@@ -117,9 +119,9 @@ static int pvc_proc_read_scroll(char *page, char **start,
 {
        char *origpage = page;
 
-       down(&pvc_sem);
+       mutex_lock(&pvc_mutex);
        page += sprintf(page, "%d\n", scroll_dir * scroll_interval);
-       up(&pvc_sem);
+       mutex_unlock(&pvc_mutex);
 
        return page - origpage;
 }
index 1ade1cef389966d9035103ea16edaf1a1feb4bdd..c1e41f15cc7eef46a521e2ce691b0fc0c8245e45 100644 (file)
@@ -81,9 +81,6 @@ static void __init ict_pcimap(void)
 
 static int __init pcibios_init(void)
 {
-       extern int pci_probe_only;
-       pci_probe_only = 0;
-
        ict_pcimap();
        register_pci_controller(&loongson2e_pci_controller);
 
index 82433681219862fba6e227c645a1af06e092d531..7edc15dfed6cf44f94b180165cb51bc25ac01e7d 100644 (file)
@@ -57,8 +57,6 @@ void __init prom_init(void)
        arg = (int *)fw_arg1;
        env = (int *)fw_arg2;
 
-       mips_machtype = MACH_LEMOTE_FULONG;
-
        prom_init_cmdline();
 
        if ((strstr(arcs_cmdline, "console=")) == NULL)
index c0a77fe038befda70c6f4c67c06557bd335a89b4..8d7784122c143b7a36689d82dbe057928244a355 100644 (file)
@@ -7,6 +7,7 @@
  *
  * Copyright (C) 1998, 1999 Ralf Baechle
  * Copyright (C) 1999 Silicon Graphics, Inc.
+ * Copyright (C) 2007  Maciej W. Rozycki
  */
 #include <linux/errno.h>
 #include <asm/asm.h>
 #define UNIT(unit)  ((unit)*NBYTES)
 
 #define ADDC(sum,reg)                                          \
+       .set    push;                                           \
+       .set    noat;                                           \
        ADD     sum, reg;                                       \
        sltu    v1, sum, reg;                                   \
-       ADD     sum, v1
+       ADD     sum, v1;                                        \
+       .set    pop
 
 #define CSUM_BIGCHUNK1(src, offset, sum, _t0, _t1, _t2, _t3)   \
        LOAD    _t0, (offset + UNIT(0))(src);                   \
@@ -92,13 +96,13 @@ LEAF(csum_partial)
        move    t7, zero
 
        sltiu   t8, a1, 0x8
-       bnez    t8, small_csumcpy               /* < 8 bytes to copy */
+       bnez    t8, .Lsmall_csumcpy             /* < 8 bytes to copy */
         move   t2, a1
 
        andi    t7, src, 0x1                    /* odd buffer? */
 
-hword_align:
-       beqz    t7, word_align
+.Lhword_align:
+       beqz    t7, .Lword_align
         andi   t8, src, 0x2
 
        lbu     t0, (src)
@@ -110,8 +114,8 @@ hword_align:
        PTR_ADDU        src, src, 0x1
        andi    t8, src, 0x2
 
-word_align:
-       beqz    t8, dword_align
+.Lword_align:
+       beqz    t8, .Ldword_align
         sltiu  t8, a1, 56
 
        lhu     t0, (src)
@@ -120,12 +124,12 @@ word_align:
        sltiu   t8, a1, 56
        PTR_ADDU        src, src, 0x2
 
-dword_align:
-       bnez    t8, do_end_words
+.Ldword_align:
+       bnez    t8, .Ldo_end_words
         move   t8, a1
 
        andi    t8, src, 0x4
-       beqz    t8, qword_align
+       beqz    t8, .Lqword_align
         andi   t8, src, 0x8
 
        lw      t0, 0x00(src)
@@ -134,8 +138,8 @@ dword_align:
        PTR_ADDU        src, src, 0x4
        andi    t8, src, 0x8
 
-qword_align:
-       beqz    t8, oword_align
+.Lqword_align:
+       beqz    t8, .Loword_align
         andi   t8, src, 0x10
 
 #ifdef USE_DOUBLE
@@ -152,8 +156,8 @@ qword_align:
        PTR_ADDU        src, src, 0x8
        andi    t8, src, 0x10
 
-oword_align:
-       beqz    t8, begin_movement
+.Loword_align:
+       beqz    t8, .Lbegin_movement
         LONG_SRL       t8, a1, 0x7
 
 #ifdef USE_DOUBLE
@@ -168,51 +172,55 @@ oword_align:
        PTR_ADDU        src, src, 0x10
        LONG_SRL        t8, a1, 0x7
 
-begin_movement:
+.Lbegin_movement:
        beqz    t8, 1f
         andi   t2, a1, 0x40
 
-move_128bytes:
+.Lmove_128bytes:
        CSUM_BIGCHUNK(src, 0x00, 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, 0x60, sum, t0, t1, t3, t4)
        LONG_SUBU       t8, t8, 0x01
-       bnez    t8, move_128bytes
-        PTR_ADDU       src, src, 0x80
+       .set    reorder                         /* DADDI_WAR */
+       PTR_ADDU        src, src, 0x80
+       bnez    t8, .Lmove_128bytes
+       .set    noreorder
 
 1:
        beqz    t2, 1f
         andi   t2, a1, 0x20
 
-move_64bytes:
+.Lmove_64bytes:
        CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
        CSUM_BIGCHUNK(src, 0x20, sum, t0, t1, t3, t4)
        PTR_ADDU        src, src, 0x40
 
 1:
-       beqz    t2, do_end_words
+       beqz    t2, .Ldo_end_words
         andi   t8, a1, 0x1c
 
-move_32bytes:
+.Lmove_32bytes:
        CSUM_BIGCHUNK(src, 0x00, sum, t0, t1, t3, t4)
        andi    t8, a1, 0x1c
        PTR_ADDU        src, src, 0x20
 
-do_end_words:
-       beqz    t8, small_csumcpy
+.Ldo_end_words:
+       beqz    t8, .Lsmall_csumcpy
         andi   t2, a1, 0x3
        LONG_SRL        t8, t8, 0x2
 
-end_words:
+.Lend_words:
        lw      t0, (src)
        LONG_SUBU       t8, t8, 0x1
        ADDC(sum, t0)
-       bnez    t8, end_words
-        PTR_ADDU       src, src, 0x4
+       .set    reorder                         /* DADDI_WAR */
+       PTR_ADDU        src, src, 0x4
+       bnez    t8, .Lend_words
+       .set    noreorder
 
 /* unknown src alignment and < 8 bytes to go  */
-small_csumcpy:
+.Lsmall_csumcpy:
        move    a1, t2
 
        andi    t0, a1, 4
@@ -246,6 +254,8 @@ small_csumcpy:
 1:     ADDC(sum, t1)
 
        /* fold checksum */
+       .set    push
+       .set    noat
 #ifdef USE_DOUBLE
        dsll32  v1, sum, 0
        daddu   sum, v1
@@ -266,6 +276,7 @@ small_csumcpy:
        srl     sum, sum, 8
        or      sum, v1
        andi    sum, 0xffff
+       .set    pop
 1:
        .set    reorder
        /* Add the passed partial csum.  */
@@ -373,7 +384,11 @@ small_csumcpy:
 
 #define ADDRMASK (NBYTES-1)
 
+#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
        .set    noat
+#else
+       .set    at=v1
+#endif
 
 LEAF(__csum_partial_copy_user)
        PTR_ADDU        AT, src, len    /* See (1) above. */
@@ -398,95 +413,101 @@ FEXPORT(csum_partial_copy_nocheck)
         */
        sltu    t2, len, NBYTES
        and     t1, dst, ADDRMASK
-       bnez    t2, copy_bytes_checklen
+       bnez    t2, .Lcopy_bytes_checklen
         and    t0, src, ADDRMASK
        andi    odd, dst, 0x1                   /* odd buffer? */
-       bnez    t1, dst_unaligned
+       bnez    t1, .Ldst_unaligned
         nop
-       bnez    t0, src_unaligned_dst_aligned
+       bnez    t0, .Lsrc_unaligned_dst_aligned
        /*
         * use delay slot for fall-through
         * src and dst are aligned; need to compute rem
         */
-both_aligned:
+.Lboth_aligned:
         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
        SUB     len, 8*NBYTES           # subtract here for bgez loop
        .align  4
 1:
-EXC(   LOAD    t0, UNIT(0)(src),       l_exc)
-EXC(   LOAD    t1, UNIT(1)(src),       l_exc_copy)
-EXC(   LOAD    t2, UNIT(2)(src),       l_exc_copy)
-EXC(   LOAD    t3, UNIT(3)(src),       l_exc_copy)
-EXC(   LOAD    t4, UNIT(4)(src),       l_exc_copy)
-EXC(   LOAD    t5, UNIT(5)(src),       l_exc_copy)
-EXC(   LOAD    t6, UNIT(6)(src),       l_exc_copy)
-EXC(   LOAD    t7, UNIT(7)(src),       l_exc_copy)
+EXC(   LOAD    t0, UNIT(0)(src),       .Ll_exc)
+EXC(   LOAD    t1, UNIT(1)(src),       .Ll_exc_copy)
+EXC(   LOAD    t2, UNIT(2)(src),       .Ll_exc_copy)
+EXC(   LOAD    t3, UNIT(3)(src),       .Ll_exc_copy)
+EXC(   LOAD    t4, UNIT(4)(src),       .Ll_exc_copy)
+EXC(   LOAD    t5, UNIT(5)(src),       .Ll_exc_copy)
+EXC(   LOAD    t6, UNIT(6)(src),       .Ll_exc_copy)
+EXC(   LOAD    t7, UNIT(7)(src),       .Ll_exc_copy)
        SUB     len, len, 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)
-EXC(   STORE   t1, UNIT(1)(dst),       s_exc)
+EXC(   STORE   t1, UNIT(1)(dst),       .Ls_exc)
        ADDC(sum, t1)
-EXC(   STORE   t2, UNIT(2)(dst),       s_exc)
+EXC(   STORE   t2, UNIT(2)(dst),       .Ls_exc)
        ADDC(sum, t2)
-EXC(   STORE   t3, UNIT(3)(dst),       s_exc)
+EXC(   STORE   t3, UNIT(3)(dst),       .Ls_exc)
        ADDC(sum, t3)
-EXC(   STORE   t4, UNIT(4)(dst),       s_exc)
+EXC(   STORE   t4, UNIT(4)(dst),       .Ls_exc)
        ADDC(sum, t4)
-EXC(   STORE   t5, UNIT(5)(dst),       s_exc)
+EXC(   STORE   t5, UNIT(5)(dst),       .Ls_exc)
        ADDC(sum, t5)
-EXC(   STORE   t6, UNIT(6)(dst),       s_exc)
+EXC(   STORE   t6, UNIT(6)(dst),       .Ls_exc)
        ADDC(sum, t6)
-EXC(   STORE   t7, UNIT(7)(dst),       s_exc)
+EXC(   STORE   t7, UNIT(7)(dst),       .Ls_exc)
        ADDC(sum, t7)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 8*NBYTES
        bgez    len, 1b
-        ADD    dst, dst, 8*NBYTES
+       .set    noreorder
        ADD     len, 8*NBYTES           # revert len (see above)
 
        /*
         * len == the number of bytes left to copy < 8*NBYTES
         */
-cleanup_both_aligned:
+.Lcleanup_both_aligned:
 #define rem t7
-       beqz    len, done
+       beqz    len, .Ldone
         sltu   t0, len, 4*NBYTES
-       bnez    t0, less_than_4units
+       bnez    t0, .Lless_than_4units
         and    rem, len, (NBYTES-1)    # rem = len % NBYTES
        /*
         * len >= 4*NBYTES
         */
-EXC(   LOAD    t0, UNIT(0)(src),       l_exc)
-EXC(   LOAD    t1, UNIT(1)(src),       l_exc_copy)
-EXC(   LOAD    t2, UNIT(2)(src),       l_exc_copy)
-EXC(   LOAD    t3, UNIT(3)(src),       l_exc_copy)
+EXC(   LOAD    t0, UNIT(0)(src),       .Ll_exc)
+EXC(   LOAD    t1, UNIT(1)(src),       .Ll_exc_copy)
+EXC(   LOAD    t2, UNIT(2)(src),       .Ll_exc_copy)
+EXC(   LOAD    t3, UNIT(3)(src),       .Ll_exc_copy)
        SUB     len, len, 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)
-EXC(   STORE   t1, UNIT(1)(dst),       s_exc)
+EXC(   STORE   t1, UNIT(1)(dst),       .Ls_exc)
        ADDC(sum, t1)
-EXC(   STORE   t2, UNIT(2)(dst),       s_exc)
+EXC(   STORE   t2, UNIT(2)(dst),       .Ls_exc)
        ADDC(sum, t2)
-EXC(   STORE   t3, UNIT(3)(dst),       s_exc)
+EXC(   STORE   t3, UNIT(3)(dst),       .Ls_exc)
        ADDC(sum, t3)
-       beqz    len, done
-        ADD    dst, dst, 4*NBYTES
-less_than_4units:
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 4*NBYTES
+       beqz    len, .Ldone
+       .set    noreorder
+.Lless_than_4units:
        /*
         * rem = len % NBYTES
         */
-       beq     rem, len, copy_bytes
+       beq     rem, len, .Lcopy_bytes
         nop
 1:
-EXC(   LOAD    t0, 0(src),             l_exc)
+EXC(   LOAD    t0, 0(src),             .Ll_exc)
        ADD     src, src, NBYTES
        SUB     len, len, NBYTES
-EXC(   STORE   t0, 0(dst),             s_exc)
+EXC(   STORE   t0, 0(dst),             .Ls_exc)
        ADDC(sum, t0)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, NBYTES
        bne     rem, len, 1b
-        ADD    dst, dst, NBYTES
+       .set    noreorder
 
        /*
         * 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.
         */
 #define bits t2
-       beqz    len, done
+       beqz    len, .Ldone
         ADD    t1, dst, len    # t1 is just past last byte of dst
        li      bits, 8*NBYTES
        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
        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
        .set reorder
        ADDC(sum, t0)
-       b       done
+       b       .Ldone
        .set noreorder
-dst_unaligned:
+.Ldst_unaligned:
        /*
         * dst is unaligned
         * t0 = src & ADDRMASK
@@ -524,25 +545,25 @@ dst_unaligned:
         * Set match = (src and dst have same alignment)
         */
 #define match rem
-EXC(   LDFIRST t3, FIRST(0)(src),      l_exc)
+EXC(   LDFIRST t3, FIRST(0)(src),      .Ll_exc)
        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
        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
        SHIFT_DISCARD t3, t3, t4
        /* no SHIFT_DISCARD_REVERT to handle odd buffer properly */
        ADDC(sum, t3)
-       beq     len, t2, done
+       beq     len, t2, .Ldone
         SUB    len, len, t2
        ADD     dst, dst, t2
-       beqz    match, both_aligned
+       beqz    match, .Lboth_aligned
         ADD    src, src, t2
 
-src_unaligned_dst_aligned:
+.Lsrc_unaligned_dst_aligned:
        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
 1:
 /*
@@ -551,49 +572,53 @@ src_unaligned_dst_aligned:
  * 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).
  */
-EXC(   LDFIRST t0, FIRST(0)(src),      l_exc)
-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
-EXC(   LDREST  t0, REST(0)(src),       l_exc_copy)
-EXC(   LDREST  t1, REST(1)(src),       l_exc_copy)
-EXC(   LDFIRST t2, FIRST(2)(src),      l_exc_copy)
-EXC(   LDFIRST t3, FIRST(3)(src),      l_exc_copy)
-EXC(   LDREST  t2, REST(2)(src),       l_exc_copy)
-EXC(   LDREST  t3, REST(3)(src),       l_exc_copy)
+EXC(   LDREST  t0, REST(0)(src),       .Ll_exc_copy)
+EXC(   LDREST  t1, REST(1)(src),       .Ll_exc_copy)
+EXC(   LDFIRST t2, FIRST(2)(src),      .Ll_exc_copy)
+EXC(   LDFIRST t3, FIRST(3)(src),      .Ll_exc_copy)
+EXC(   LDREST  t2, REST(2)(src),       .Ll_exc_copy)
+EXC(   LDREST  t3, REST(3)(src),       .Ll_exc_copy)
        ADD     src, src, 4*NBYTES
 #ifdef CONFIG_CPU_SB1
        nop                             # improves slotting
 #endif
-EXC(   STORE   t0, UNIT(0)(dst),       s_exc)
+EXC(   STORE   t0, UNIT(0)(dst),       .Ls_exc)
        ADDC(sum, t0)
-EXC(   STORE   t1, UNIT(1)(dst),       s_exc)
+EXC(   STORE   t1, UNIT(1)(dst),       .Ls_exc)
        ADDC(sum, t1)
-EXC(   STORE   t2, UNIT(2)(dst),       s_exc)
+EXC(   STORE   t2, UNIT(2)(dst),       .Ls_exc)
        ADDC(sum, t2)
-EXC(   STORE   t3, UNIT(3)(dst),       s_exc)
+EXC(   STORE   t3, UNIT(3)(dst),       .Ls_exc)
        ADDC(sum, t3)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 4*NBYTES
        bne     len, rem, 1b
-        ADD    dst, dst, 4*NBYTES
+       .set    noreorder
 
-cleanup_src_unaligned:
-       beqz    len, done
+.Lcleanup_src_unaligned:
+       beqz    len, .Ldone
         and    rem, len, NBYTES-1  # rem = len % NBYTES
-       beq     rem, len, copy_bytes
+       beq     rem, len, .Lcopy_bytes
         nop
 1:
-EXC(   LDFIRST t0, FIRST(0)(src),      l_exc)
-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
        SUB     len, len, NBYTES
-EXC(   STORE   t0, 0(dst),             s_exc)
+EXC(   STORE   t0, 0(dst),             .Ls_exc)
        ADDC(sum, t0)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, NBYTES
        bne     len, rem, 1b
-        ADD    dst, dst, NBYTES
+       .set    noreorder
 
-copy_bytes_checklen:
-       beqz    len, done
+.Lcopy_bytes_checklen:
+       beqz    len, .Ldone
         nop
-copy_bytes:
+.Lcopy_bytes:
        /* 0 < len < NBYTES  */
 #ifdef CONFIG_CPU_LITTLE_ENDIAN
 #define SHIFT_START 0
@@ -604,14 +629,14 @@ copy_bytes:
 #endif
        move    t2, zero        # partial word
        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)                   \
-EXC(   lbu     t0, N(src), l_exc_copy);        \
+EXC(   lbu     t0, N(src), .Ll_exc_copy);      \
        SUB     len, len, 1;            \
-EXC(   sb      t0, N(dst), s_exc);     \
+EXC(   sb      t0, N(dst), .Ls_exc);   \
        SLLV    t0, t0, t3;             \
        addu    t3, SHIFT_INC;          \
-       beqz    len, copy_bytes_done;   \
+       beqz    len, .Lcopy_bytes_done; \
         or     t2, t0
 
        COPY_BYTE(0)
@@ -622,15 +647,17 @@ EXC(      sb      t0, N(dst), s_exc);     \
        COPY_BYTE(4)
        COPY_BYTE(5)
 #endif
-EXC(   lbu     t0, NBYTES-2(src), l_exc_copy)
+EXC(   lbu     t0, NBYTES-2(src), .Ll_exc_copy)
        SUB     len, len, 1
-EXC(   sb      t0, NBYTES-2(dst), s_exc)
+EXC(   sb      t0, NBYTES-2(dst), .Ls_exc)
        SLLV    t0, t0, t3
        or      t2, t0
-copy_bytes_done:
+.Lcopy_bytes_done:
        ADDC(sum, t2)
-done:
+.Ldone:
        /* fold checksum */
+       .set    push
+       .set    noat
 #ifdef USE_DOUBLE
        dsll32  v1, sum, 0
        daddu   sum, v1
@@ -651,13 +678,14 @@ done:
        srl     sum, sum, 8
        or      sum, v1
        andi    sum, 0xffff
+       .set    pop
 1:
        .set reorder
        ADDC(sum, psum)
        jr      ra
        .set noreorder
 
-l_exc_copy:
+.Ll_exc_copy:
        /*
         * Copy bytes from src until faulting load address (or until a
         * lb faults)
@@ -672,15 +700,17 @@ l_exc_copy:
         li     t2, SHIFT_START
        LOAD    t0, THREAD_BUADDR(t0)
 1:
-EXC(   lbu     t1, 0(src),     l_exc)
+EXC(   lbu     t1, 0(src),     .Ll_exc)
        ADD     src, src, 1
        sb      t1, 0(dst)      # can't fault -- we're copy_from_user
        SLLV    t1, t1, t2
        addu    t2, SHIFT_INC
        ADDC(sum, t1)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 1
        bne     src, t0, 1b
-        ADD    dst, dst, 1
-l_exc:
+       .set    noreorder
+.Ll_exc:
        LOAD    t0, TI_TASK($28)
         nop
        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
         * might modify len.  An inefficient loop for these rare times...
         */
-       beqz    len, done
-        SUB    src, len, 1
+       .set    reorder                         /* DADDI_WAR */
+       SUB     src, len, 1
+       beqz    len, .Ldone
+       .set    noreorder
 1:     sb      zero, 0(dst)
        ADD     dst, dst, 1
+       .set    push
+       .set    noat
+#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
        bnez    src, 1b
         SUB    src, src, 1
+#else
+       li      v1, 1
+       bnez    src, 1b
+        SUB    src, src, v1
+#endif
        li      v1, -EFAULT
-       b       done
+       b       .Ldone
         sw     v1, (errptr)
 
-s_exc:
+.Ls_exc:
        li      v0, -1 /* invalid checksum */
        li      v1, -EFAULT
        jr      ra
         sw     v1, (errptr)
+       .set    pop
        END(__csum_partial_copy_user)
index 3a534b2baa0f490e092943a40e3b1c67c215ed45..736d0fb56a949772c546d85b32fc754c0177c499 100644 (file)
@@ -9,6 +9,7 @@
  * Copyright (C) 1999, 2000, 01, 2002 Silicon Graphics, Inc.
  * Copyright (C) 2002 Broadcom, Inc.
  *   memcpy/copy_user author: Mark Vandevoorde
+ * Copyright (C) 2007  Maciej W. Rozycki
  *
  * Mnemonic names for arguments to memcpy/__copy_user
  */
 
        .text
        .set    noreorder
+#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
        .set    noat
+#else
+       .set    at=v1
+#endif
 
 /*
  * A combined memcpy/__copy_user
@@ -204,36 +209,36 @@ LEAF(__copy_user_inatomic)
        and     t1, dst, ADDRMASK
        PREF(   0, 1*32(src) )
        PREF(   1, 1*32(dst) )
-       bnez    t2, copy_bytes_checklen
+       bnez    t2, .Lcopy_bytes_checklen
         and    t0, src, ADDRMASK
        PREF(   0, 2*32(src) )
        PREF(   1, 2*32(dst) )
-       bnez    t1, dst_unaligned
+       bnez    t1, .Ldst_unaligned
         nop
-       bnez    t0, src_unaligned_dst_aligned
+       bnez    t0, .Lsrc_unaligned_dst_aligned
        /*
         * use delay slot for fall-through
         * src and dst are aligned; need to compute rem
         */
-both_aligned:
-        SRL    t0, len, LOG_NBYTES+3    # +3 for 8 units/iter
-       beqz    t0, cleanup_both_aligned # len < 8*NBYTES
-        and    rem, len, (8*NBYTES-1)   # rem = len % (8*NBYTES)
+.Lboth_aligned:
+        SRL    t0, len, LOG_NBYTES+3           # +3 for 8 units/iter
+       beqz    t0, .Lcleanup_both_aligned      # len < 8*NBYTES
+        and    rem, len, (8*NBYTES-1)          # rem = len % (8*NBYTES)
        PREF(   0, 3*32(src) )
        PREF(   1, 3*32(dst) )
        .align  4
 1:
-EXC(   LOAD    t0, UNIT(0)(src),       l_exc)
-EXC(   LOAD    t1, UNIT(1)(src),       l_exc_copy)
-EXC(   LOAD    t2, UNIT(2)(src),       l_exc_copy)
-EXC(   LOAD    t3, UNIT(3)(src),       l_exc_copy)
+EXC(   LOAD    t0, UNIT(0)(src),       .Ll_exc)
+EXC(   LOAD    t1, UNIT(1)(src),       .Ll_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
-EXC(   LOAD    t4, UNIT(4)(src),       l_exc_copy)
-EXC(   LOAD    t7, UNIT(5)(src),       l_exc_copy)
+EXC(   LOAD    t4, UNIT(4)(src),       .Ll_exc_copy)
+EXC(   LOAD    t7, UNIT(5)(src),       .Ll_exc_copy)
        STORE   t0, UNIT(0)(dst)
        STORE   t1, UNIT(1)(dst)
-EXC(   LOAD    t0, UNIT(6)(src),       l_exc_copy)
-EXC(   LOAD    t1, UNIT(7)(src),       l_exc_copy)
+EXC(   LOAD    t0, UNIT(6)(src),       .Ll_exc_copy)
+EXC(   LOAD    t1, UNIT(7)(src),       .Ll_exc_copy)
        ADD     src, src, 8*NBYTES
        ADD     dst, dst, 8*NBYTES
        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
         */
-cleanup_both_aligned:
-       beqz    len, done
+.Lcleanup_both_aligned:
+       beqz    len, .Ldone
         sltu   t0, len, 4*NBYTES
-       bnez    t0, less_than_4units
+       bnez    t0, .Lless_than_4units
         and    rem, len, (NBYTES-1)    # rem = len % NBYTES
        /*
         * len >= 4*NBYTES
         */
-EXC(   LOAD    t0, UNIT(0)(src),       l_exc)
-EXC(   LOAD    t1, UNIT(1)(src),       l_exc_copy)
-EXC(   LOAD    t2, UNIT(2)(src),       l_exc_copy)
-EXC(   LOAD    t3, UNIT(3)(src),       l_exc_copy)
+EXC(   LOAD    t0, UNIT(0)(src),       .Ll_exc)
+EXC(   LOAD    t1, UNIT(1)(src),       .Ll_exc_copy)
+EXC(   LOAD    t2, UNIT(2)(src),       .Ll_exc_copy)
+EXC(   LOAD    t3, UNIT(3)(src),       .Ll_exc_copy)
        SUB     len, len, 4*NBYTES
        ADD     src, src, 4*NBYTES
        STORE   t0, UNIT(0)(dst)
        STORE   t1, UNIT(1)(dst)
        STORE   t2, UNIT(2)(dst)
        STORE   t3, UNIT(3)(dst)
-       beqz    len, done
-        ADD    dst, dst, 4*NBYTES
-less_than_4units:
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 4*NBYTES
+       beqz    len, .Ldone
+       .set    noreorder
+.Lless_than_4units:
        /*
         * rem = len % NBYTES
         */
-       beq     rem, len, copy_bytes
+       beq     rem, len, .Lcopy_bytes
         nop
 1:
-EXC(   LOAD    t0, 0(src),             l_exc)
+EXC(   LOAD    t0, 0(src),             .Ll_exc)
        ADD     src, src, NBYTES
        SUB     len, len, NBYTES
        STORE   t0, 0(dst)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, NBYTES
        bne     rem, len, 1b
-        ADD    dst, dst, NBYTES
+       .set    noreorder
 
        /*
         * 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.
         */
 #define bits t2
-       beqz    len, done
+       beqz    len, .Ldone
         ADD    t1, dst, len    # t1 is just past last byte of dst
        li      bits, 8*NBYTES
        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
        SHIFT_DISCARD t0, t0, bits
        STREST  t0, -1(t1)
        jr      ra
         move   len, zero
-dst_unaligned:
+.Ldst_unaligned:
        /*
         * dst is unaligned
         * t0 = src & ADDRMASK
@@ -317,22 +326,22 @@ dst_unaligned:
         * Set match = (src and dst have same alignment)
         */
 #define match rem
-EXC(   LDFIRST t3, FIRST(0)(src),      l_exc)
+EXC(   LDFIRST t3, FIRST(0)(src),      .Ll_exc)
        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
        xor     match, t0, t1
        STFIRST t3, FIRST(0)(dst)
-       beq     len, t2, done
+       beq     len, t2, .Ldone
         SUB    len, len, t2
        ADD     dst, dst, t2
-       beqz    match, both_aligned
+       beqz    match, .Lboth_aligned
         ADD    src, src, t2
 
-src_unaligned_dst_aligned:
+.Lsrc_unaligned_dst_aligned:
        SRL     t0, len, LOG_NBYTES+2    # +2 for 4 units/iter
        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
        PREF(   1, 3*32(dst) )
 1:
@@ -342,15 +351,15 @@ src_unaligned_dst_aligned:
  * 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).
  */
-EXC(   LDFIRST t0, FIRST(0)(src),      l_exc)
-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
-EXC(   LDREST  t0, REST(0)(src),       l_exc_copy)
-EXC(   LDREST  t1, REST(1)(src),       l_exc_copy)
-EXC(   LDFIRST t2, FIRST(2)(src),      l_exc_copy)
-EXC(   LDFIRST t3, FIRST(3)(src),      l_exc_copy)
-EXC(   LDREST  t2, REST(2)(src),       l_exc_copy)
-EXC(   LDREST  t3, REST(3)(src),       l_exc_copy)
+EXC(   LDREST  t0, REST(0)(src),       .Ll_exc_copy)
+EXC(   LDREST  t1, REST(1)(src),       .Ll_exc_copy)
+EXC(   LDFIRST t2, FIRST(2)(src),      .Ll_exc_copy)
+EXC(   LDFIRST t3, FIRST(3)(src),      .Ll_exc_copy)
+EXC(   LDREST  t2, REST(2)(src),       .Ll_exc_copy)
+EXC(   LDREST  t3, REST(3)(src),       .Ll_exc_copy)
        PREF(   0, 9*32(src) )          # 0 is PREF_LOAD  (not streamed)
        ADD     src, src, 4*NBYTES
 #ifdef CONFIG_CPU_SB1
@@ -361,32 +370,36 @@ EXC(      LDREST  t3, REST(3)(src),       l_exc_copy)
        STORE   t2, UNIT(2)(dst)
        STORE   t3, UNIT(3)(dst)
        PREF(   1, 9*32(dst) )          # 1 is PREF_STORE (not streamed)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 4*NBYTES
        bne     len, rem, 1b
-        ADD    dst, dst, 4*NBYTES
+       .set    noreorder
 
-cleanup_src_unaligned:
-       beqz    len, done
+.Lcleanup_src_unaligned:
+       beqz    len, .Ldone
         and    rem, len, NBYTES-1  # rem = len % NBYTES
-       beq     rem, len, copy_bytes
+       beq     rem, len, .Lcopy_bytes
         nop
 1:
-EXC(   LDFIRST t0, FIRST(0)(src),      l_exc)
-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
        SUB     len, len, NBYTES
        STORE   t0, 0(dst)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, NBYTES
        bne     len, rem, 1b
-        ADD    dst, dst, NBYTES
+       .set    noreorder
 
-copy_bytes_checklen:
-       beqz    len, done
+.Lcopy_bytes_checklen:
+       beqz    len, .Ldone
         nop
-copy_bytes:
+.Lcopy_bytes:
        /* 0 < len < NBYTES  */
 #define COPY_BYTE(N)                   \
-EXC(   lb      t0, N(src), l_exc);     \
+EXC(   lb      t0, N(src), .Ll_exc);   \
        SUB     len, len, 1;            \
-       beqz    len, done;              \
+       beqz    len, .Ldone;            \
         sb     t0, N(dst)
 
        COPY_BYTE(0)
@@ -397,16 +410,16 @@ EXC(      lb      t0, N(src), l_exc);     \
        COPY_BYTE(4)
        COPY_BYTE(5)
 #endif
-EXC(   lb      t0, NBYTES-2(src), l_exc)
+EXC(   lb      t0, NBYTES-2(src), .Ll_exc)
        SUB     len, len, 1
        jr      ra
         sb     t0, NBYTES-2(dst)
-done:
+.Ldone:
        jr      ra
         nop
        END(__copy_user_inatomic)
 
-l_exc_copy:
+.Ll_exc_copy:
        /*
         * Copy bytes from src until faulting load address (or until a
         * lb faults)
@@ -421,12 +434,14 @@ l_exc_copy:
         nop
        LOAD    t0, THREAD_BUADDR(t0)
 1:
-EXC(   lb      t1, 0(src),     l_exc)
+EXC(   lb      t1, 0(src),     .Ll_exc)
        ADD     src, src, 1
        sb      t1, 0(dst)      # can't fault -- we're copy_from_user
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 1
        bne     src, t0, 1b
-        ADD    dst, dst, 1
-l_exc:
+       .set    noreorder
+.Ll_exc:
        LOAD    t0, TI_TASK($28)
         nop
        LOAD    t0, THREAD_BUADDR(t0)   # t0 is just past last good address
index a526c62cb76a90626d6461b31be1000f2858af38..c06cccf60becd10ddecd344ff940fe30d064c13f 100644 (file)
@@ -9,6 +9,7 @@
  * Copyright (C) 1999, 2000, 01, 2002 Silicon Graphics, Inc.
  * Copyright (C) 2002 Broadcom, Inc.
  *   memcpy/copy_user author: Mark Vandevoorde
+ * Copyright (C) 2007  Maciej W. Rozycki
  *
  * Mnemonic names for arguments to memcpy/__copy_user
  */
 
        .text
        .set    noreorder
+#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
        .set    noat
+#else
+       .set    at=v1
+#endif
 
 /*
  * A combined memcpy/__copy_user
        .align  5
 LEAF(memcpy)                                   /* a0=dst a1=src a2=len */
        move    v0, dst                         /* return value */
-__memcpy:
+.L__memcpy:
 FEXPORT(__copy_user)
        /*
         * Note: dst & src may be unaligned, len may be 0
@@ -194,6 +199,7 @@ FEXPORT(__copy_user)
         */
 #define rem t8
 
+       R10KCBARRIER(0(ra))
        /*
         * The "issue break"s below are very approximate.
         * Issue delays for dcache fills will perturb the schedule, as will
@@ -207,44 +213,45 @@ FEXPORT(__copy_user)
        and     t1, dst, ADDRMASK
        PREF(   0, 1*32(src) )
        PREF(   1, 1*32(dst) )
-       bnez    t2, copy_bytes_checklen
+       bnez    t2, .Lcopy_bytes_checklen
         and    t0, src, ADDRMASK
        PREF(   0, 2*32(src) )
        PREF(   1, 2*32(dst) )
-       bnez    t1, dst_unaligned
+       bnez    t1, .Ldst_unaligned
         nop
-       bnez    t0, src_unaligned_dst_aligned
+       bnez    t0, .Lsrc_unaligned_dst_aligned
        /*
         * use delay slot for fall-through
         * src and dst are aligned; need to compute rem
         */
-both_aligned:
+.Lboth_aligned:
         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)
        PREF(   0, 3*32(src) )
        PREF(   1, 3*32(dst) )
        .align  4
 1:
-EXC(   LOAD    t0, UNIT(0)(src),       l_exc)
-EXC(   LOAD    t1, UNIT(1)(src),       l_exc_copy)
-EXC(   LOAD    t2, UNIT(2)(src),       l_exc_copy)
-EXC(   LOAD    t3, UNIT(3)(src),       l_exc_copy)
+       R10KCBARRIER(0(ra))
+EXC(   LOAD    t0, UNIT(0)(src),       .Ll_exc)
+EXC(   LOAD    t1, UNIT(1)(src),       .Ll_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
-EXC(   LOAD    t4, UNIT(4)(src),       l_exc_copy)
-EXC(   LOAD    t7, UNIT(5)(src),       l_exc_copy)
-EXC(   STORE   t0, UNIT(0)(dst),       s_exc_p8u)
-EXC(   STORE   t1, UNIT(1)(dst),       s_exc_p7u)
-EXC(   LOAD    t0, UNIT(6)(src),       l_exc_copy)
-EXC(   LOAD    t1, UNIT(7)(src),       l_exc_copy)
+EXC(   LOAD    t4, UNIT(4)(src),       .Ll_exc_copy)
+EXC(   LOAD    t7, UNIT(5)(src),       .Ll_exc_copy)
+EXC(   STORE   t0, UNIT(0)(dst),       .Ls_exc_p8u)
+EXC(   STORE   t1, UNIT(1)(dst),       .Ls_exc_p7u)
+EXC(   LOAD    t0, UNIT(6)(src),       .Ll_exc_copy)
+EXC(   LOAD    t1, UNIT(7)(src),       .Ll_exc_copy)
        ADD     src, src, 8*NBYTES
        ADD     dst, dst, 8*NBYTES
-EXC(   STORE   t2, UNIT(-6)(dst),      s_exc_p6u)
-EXC(   STORE   t3, UNIT(-5)(dst),      s_exc_p5u)
-EXC(   STORE   t4, UNIT(-4)(dst),      s_exc_p4u)
-EXC(   STORE   t7, UNIT(-3)(dst),      s_exc_p3u)
-EXC(   STORE   t0, UNIT(-2)(dst),      s_exc_p2u)
-EXC(   STORE   t1, UNIT(-1)(dst),      s_exc_p1u)
+EXC(   STORE   t2, UNIT(-6)(dst),      .Ls_exc_p6u)
+EXC(   STORE   t3, UNIT(-5)(dst),      .Ls_exc_p5u)
+EXC(   STORE   t4, UNIT(-4)(dst),      .Ls_exc_p4u)
+EXC(   STORE   t7, UNIT(-3)(dst),      .Ls_exc_p3u)
+EXC(   STORE   t0, UNIT(-2)(dst),      .Ls_exc_p2u)
+EXC(   STORE   t1, UNIT(-1)(dst),      .Ls_exc_p1u)
        PREF(   0, 8*32(src) )
        PREF(   1, 8*32(dst) )
        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
         */
-cleanup_both_aligned:
-       beqz    len, done
+.Lcleanup_both_aligned:
+       beqz    len, .Ldone
         sltu   t0, len, 4*NBYTES
-       bnez    t0, less_than_4units
+       bnez    t0, .Lless_than_4units
         and    rem, len, (NBYTES-1)    # rem = len % NBYTES
        /*
         * len >= 4*NBYTES
         */
-EXC(   LOAD    t0, UNIT(0)(src),       l_exc)
-EXC(   LOAD    t1, UNIT(1)(src),       l_exc_copy)
-EXC(   LOAD    t2, UNIT(2)(src),       l_exc_copy)
-EXC(   LOAD    t3, UNIT(3)(src),       l_exc_copy)
+EXC(   LOAD    t0, UNIT(0)(src),       .Ll_exc)
+EXC(   LOAD    t1, UNIT(1)(src),       .Ll_exc_copy)
+EXC(   LOAD    t2, UNIT(2)(src),       .Ll_exc_copy)
+EXC(   LOAD    t3, UNIT(3)(src),       .Ll_exc_copy)
        SUB     len, len, 4*NBYTES
        ADD     src, src, 4*NBYTES
-EXC(   STORE   t0, UNIT(0)(dst),       s_exc_p4u)
-EXC(   STORE   t1, UNIT(1)(dst),       s_exc_p3u)
-EXC(   STORE   t2, UNIT(2)(dst),       s_exc_p2u)
-EXC(   STORE   t3, UNIT(3)(dst),       s_exc_p1u)
-       beqz    len, done
-        ADD    dst, dst, 4*NBYTES
-less_than_4units:
+       R10KCBARRIER(0(ra))
+EXC(   STORE   t0, UNIT(0)(dst),       .Ls_exc_p4u)
+EXC(   STORE   t1, UNIT(1)(dst),       .Ls_exc_p3u)
+EXC(   STORE   t2, UNIT(2)(dst),       .Ls_exc_p2u)
+EXC(   STORE   t3, UNIT(3)(dst),       .Ls_exc_p1u)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 4*NBYTES
+       beqz    len, .Ldone
+       .set    noreorder
+.Lless_than_4units:
        /*
         * rem = len % NBYTES
         */
-       beq     rem, len, copy_bytes
+       beq     rem, len, .Lcopy_bytes
         nop
 1:
-EXC(   LOAD    t0, 0(src),             l_exc)
+       R10KCBARRIER(0(ra))
+EXC(   LOAD    t0, 0(src),             .Ll_exc)
        ADD     src, src, 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
-        ADD    dst, dst, NBYTES
+       .set    noreorder
 
        /*
         * 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.
         */
 #define bits t2
-       beqz    len, done
+       beqz    len, .Ldone
         ADD    t1, dst, len    # t1 is just past last byte of dst
        li      bits, 8*NBYTES
        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
        SHIFT_DISCARD t0, t0, bits
-EXC(   STREST  t0, -1(t1),             s_exc)
+EXC(   STREST  t0, -1(t1),             .Ls_exc)
        jr      ra
         move   len, zero
-dst_unaligned:
+.Ldst_unaligned:
        /*
         * dst is unaligned
         * t0 = src & ADDRMASK
@@ -320,22 +333,23 @@ dst_unaligned:
         * Set match = (src and dst have same alignment)
         */
 #define match rem
-EXC(   LDFIRST t3, FIRST(0)(src),      l_exc)
+EXC(   LDFIRST t3, FIRST(0)(src),      .Ll_exc)
        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
        xor     match, t0, t1
-EXC(   STFIRST t3, FIRST(0)(dst),      s_exc)
-       beq     len, t2, done
+       R10KCBARRIER(0(ra))
+EXC(   STFIRST t3, FIRST(0)(dst),      .Ls_exc)
+       beq     len, t2, .Ldone
         SUB    len, len, t2
        ADD     dst, dst, t2
-       beqz    match, both_aligned
+       beqz    match, .Lboth_aligned
         ADD    src, src, t2
 
-src_unaligned_dst_aligned:
+.Lsrc_unaligned_dst_aligned:
        SRL     t0, len, LOG_NBYTES+2    # +2 for 4 units/iter
        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
        PREF(   1, 3*32(dst) )
 1:
@@ -345,52 +359,59 @@ src_unaligned_dst_aligned:
  * 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).
  */
-EXC(   LDFIRST t0, FIRST(0)(src),      l_exc)
-EXC(   LDFIRST t1, FIRST(1)(src),      l_exc_copy)
+       R10KCBARRIER(0(ra))
+EXC(   LDFIRST t0, FIRST(0)(src),      .Ll_exc)
+EXC(   LDFIRST t1, FIRST(1)(src),      .Ll_exc_copy)
        SUB     len, len, 4*NBYTES
-EXC(   LDREST  t0, REST(0)(src),       l_exc_copy)
-EXC(   LDREST  t1, REST(1)(src),       l_exc_copy)
-EXC(   LDFIRST t2, FIRST(2)(src),      l_exc_copy)
-EXC(   LDFIRST t3, FIRST(3)(src),      l_exc_copy)
-EXC(   LDREST  t2, REST(2)(src),       l_exc_copy)
-EXC(   LDREST  t3, REST(3)(src),       l_exc_copy)
+EXC(   LDREST  t0, REST(0)(src),       .Ll_exc_copy)
+EXC(   LDREST  t1, REST(1)(src),       .Ll_exc_copy)
+EXC(   LDFIRST t2, FIRST(2)(src),      .Ll_exc_copy)
+EXC(   LDFIRST t3, FIRST(3)(src),      .Ll_exc_copy)
+EXC(   LDREST  t2, REST(2)(src),       .Ll_exc_copy)
+EXC(   LDREST  t3, REST(3)(src),       .Ll_exc_copy)
        PREF(   0, 9*32(src) )          # 0 is PREF_LOAD  (not streamed)
        ADD     src, src, 4*NBYTES
 #ifdef CONFIG_CPU_SB1
        nop                             # improves slotting
 #endif
-EXC(   STORE   t0, UNIT(0)(dst),       s_exc_p4u)
-EXC(   STORE   t1, UNIT(1)(dst),       s_exc_p3u)
-EXC(   STORE   t2, UNIT(2)(dst),       s_exc_p2u)
-EXC(   STORE   t3, UNIT(3)(dst),       s_exc_p1u)
+EXC(   STORE   t0, UNIT(0)(dst),       .Ls_exc_p4u)
+EXC(   STORE   t1, UNIT(1)(dst),       .Ls_exc_p3u)
+EXC(   STORE   t2, UNIT(2)(dst),       .Ls_exc_p2u)
+EXC(   STORE   t3, UNIT(3)(dst),       .Ls_exc_p1u)
        PREF(   1, 9*32(dst) )          # 1 is PREF_STORE (not streamed)
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 4*NBYTES
        bne     len, rem, 1b
-        ADD    dst, dst, 4*NBYTES
+       .set    noreorder
 
-cleanup_src_unaligned:
-       beqz    len, done
+.Lcleanup_src_unaligned:
+       beqz    len, .Ldone
         and    rem, len, NBYTES-1  # rem = len % NBYTES
-       beq     rem, len, copy_bytes
+       beq     rem, len, .Lcopy_bytes
         nop
 1:
-EXC(   LDFIRST t0, FIRST(0)(src),      l_exc)
-EXC(   LDREST  t0, REST(0)(src),       l_exc_copy)
+       R10KCBARRIER(0(ra))
+EXC(   LDFIRST t0, FIRST(0)(src),      .Ll_exc)
+EXC(   LDREST  t0, REST(0)(src),       .Ll_exc_copy)
        ADD     src, src, 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
-        ADD    dst, dst, NBYTES
+       .set    noreorder
 
-copy_bytes_checklen:
-       beqz    len, done
+.Lcopy_bytes_checklen:
+       beqz    len, .Ldone
         nop
-copy_bytes:
+.Lcopy_bytes:
        /* 0 < len < NBYTES  */
+       R10KCBARRIER(0(ra))
 #define COPY_BYTE(N)                   \
-EXC(   lb      t0, N(src), l_exc);     \
+EXC(   lb      t0, N(src), .Ll_exc);   \
        SUB     len, len, 1;            \
-       beqz    len, done;              \
-EXC(    sb     t0, N(dst), s_exc_p1)
+       beqz    len, .Ldone;            \
+EXC(    sb     t0, N(dst), .Ls_exc_p1)
 
        COPY_BYTE(0)
        COPY_BYTE(1)
@@ -400,16 +421,16 @@ EXC(       sb     t0, N(dst), s_exc_p1)
        COPY_BYTE(4)
        COPY_BYTE(5)
 #endif
-EXC(   lb      t0, NBYTES-2(src), l_exc)
+EXC(   lb      t0, NBYTES-2(src), .Ll_exc)
        SUB     len, len, 1
        jr      ra
-EXC(    sb     t0, NBYTES-2(dst), s_exc_p1)
-done:
+EXC(    sb     t0, NBYTES-2(dst), .Ls_exc_p1)
+.Ldone:
        jr      ra
         nop
        END(memcpy)
 
-l_exc_copy:
+.Ll_exc_copy:
        /*
         * Copy bytes from src until faulting load address (or until a
         * lb faults)
@@ -424,12 +445,14 @@ l_exc_copy:
         nop
        LOAD    t0, THREAD_BUADDR(t0)
 1:
-EXC(   lb      t1, 0(src),     l_exc)
+EXC(   lb      t1, 0(src),     .Ll_exc)
        ADD     src, src, 1
        sb      t1, 0(dst)      # can't fault -- we're copy_from_user
+       .set    reorder                         /* DADDI_WAR */
+       ADD     dst, dst, 1
        bne     src, t0, 1b
-        ADD    dst, dst, 1
-l_exc:
+       .set    noreorder
+.Ll_exc:
        LOAD    t0, TI_TASK($28)
         nop
        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
         * might modify len.  An inefficient loop for these rare times...
         */
-       beqz    len, done
-        SUB    src, len, 1
+       .set    reorder                         /* DADDI_WAR */
+       SUB     src, len, 1
+       beqz    len, .Ldone
+       .set    noreorder
 1:     sb      zero, 0(dst)
        ADD     dst, dst, 1
+#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
        bnez    src, 1b
         SUB    src, src, 1
+#else
+       .set    push
+       .set    noat
+       li      v1, 1
+       bnez    src, 1b
+        SUB    src, src, v1
+       .set    pop
+#endif
        jr      ra
         nop
 
 
-#define SEXC(n)                                \
-s_exc_p ## n ## u:                     \
-       jr      ra;                     \
-        ADD    len, len, n*NBYTES
+#define SEXC(n)                                                        \
+       .set    reorder;                        /* DADDI_WAR */ \
+.Ls_exc_p ## n ## u:                                           \
+       ADD     len, len, n*NBYTES;                             \
+       jr      ra;                                             \
+       .set    noreorder
 
 SEXC(8)
 SEXC(7)
@@ -470,10 +506,12 @@ SEXC(3)
 SEXC(2)
 SEXC(1)
 
-s_exc_p1:
+.Ls_exc_p1:
+       .set    reorder                         /* DADDI_WAR */
+       ADD     len, len, 1
        jr      ra
-        ADD    len, len, 1
-s_exc:
+       .set    noreorder
+.Ls_exc:
        jr      ra
         nop
 
@@ -484,38 +522,44 @@ LEAF(memmove)
        sltu    t0, a1, t0                      # dst + len <= src -> memcpy
        sltu    t1, a0, t1                      # dst >= src + len -> memcpy
        and     t0, t1
-       beqz    t0, __memcpy
+       beqz    t0, .L__memcpy
         move   v0, a0                          /* return value */
-       beqz    a2, r_out
+       beqz    a2, .Lr_out
        END(memmove)
 
        /* fall through to __rmemcpy */
 LEAF(__rmemcpy)                                        /* a0=dst a1=src a2=len */
         sltu   t0, a1, a0
-       beqz    t0, r_end_bytes_up              # src >= dst
+       beqz    t0, .Lr_end_bytes_up            # src >= dst
         nop
        ADD     a0, a2                          # dst = dst + len
        ADD     a1, a2                          # src = src + len
 
-r_end_bytes:
+.Lr_end_bytes:
+       R10KCBARRIER(0(ra))
        lb      t0, -1(a1)
        SUB     a2, a2, 0x1
        sb      t0, -1(a0)
        SUB     a1, a1, 0x1
-       bnez    a2, r_end_bytes
-        SUB    a0, a0, 0x1
+       .set    reorder                         /* DADDI_WAR */
+       SUB     a0, a0, 0x1
+       bnez    a2, .Lr_end_bytes
+       .set    noreorder
 
-r_out:
+.Lr_out:
        jr      ra
         move   a2, zero
 
-r_end_bytes_up:
+.Lr_end_bytes_up:
+       R10KCBARRIER(0(ra))
        lb      t0, (a1)
        SUB     a2, a2, 0x1
        sb      t0, (a0)
        ADD     a1, a1, 0x1
-       bnez    a2, r_end_bytes_up
-        ADD    a0, a0, 0x1
+       .set    reorder                         /* DADDI_WAR */
+       ADD     a0, a0, 0x1
+       bnez    a2, .Lr_end_bytes_up
+       .set    noreorder
 
        jr      ra
         move   a2, zero
index 3f8b8b3d0b23575139ba263fb22a19eb301544f1..77dc3b20110ab9d583e09a9cac94e865bc2deab1 100644 (file)
@@ -5,6 +5,7 @@
  *
  * Copyright (C) 1998, 1999, 2000 by Ralf Baechle
  * Copyright (C) 1999, 2000 Silicon Graphics, Inc.
+ * Copyright (C) 2007  Maciej W. Rozycki
  */
 #include <asm/asm.h>
 #include <asm/asm-offsets.h>
@@ -71,34 +72,45 @@ LEAF(memset)
 
 FEXPORT(__bzero)
        sltiu           t0, a2, LONGSIZE        /* very small region? */
-       bnez            t0, small_memset
+       bnez            t0, .Lsmall_memset
         andi           t0, a0, LONGMASK        /* aligned? */
 
+#ifndef CONFIG_CPU_DADDI_WORKAROUNDS
        beqz            t0, 1f
         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__
-       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
 #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
        PTR_SUBU        a0, t0                  /* long align ptr */
        PTR_ADDU        a2, t0                  /* correct size */
 
 1:     ori             t1, a2, 0x3f            /* # of full blocks */
        xori            t1, 0x3f
-       beqz            t1, memset_partial      /* no block to fill */
+       beqz            t1, .Lmemset_partial    /* no block to fill */
         andi           t0, a2, 0x40-LONGSIZE
 
        PTR_ADDU        t1, a0                  /* end address */
        .set            reorder
 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
        .set            noreorder
 
-memset_partial:
+.Lmemset_partial:
+       R10KCBARRIER(0(ra))
        PTR_LA          t1, 2f                  /* where to start */
 #if LONGSIZE == 4
        PTR_SUBU        t1, t0
@@ -106,7 +118,7 @@ memset_partial:
        .set            noat
        LONG_SRL                AT, t0, 1
        PTR_SUBU        t1, AT
-       .set            noat
+       .set            at
 #endif
        jr              t1
         PTR_ADDU       a0, t0                  /* dest ptr */
@@ -114,26 +126,28 @@ memset_partial:
        .set            push
        .set            noreorder
        .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
        andi            a2, LONGMASK            /* At most one long to go */
 
        beqz            a2, 1f
         PTR_ADDU       a0, a2                  /* What's left */
+       R10KCBARRIER(0(ra))
 #ifdef __MIPSEB__
-       EX(LONG_S_R, a1, -1(a0), last_fixup)
+       EX(LONG_S_R, a1, -1(a0), .Llast_fixup)
 #endif
 #ifdef __MIPSEL__
-       EX(LONG_S_L, a1, -1(a0), last_fixup)
+       EX(LONG_S_L, a1, -1(a0), .Llast_fixup)
 #endif
 1:     jr              ra
         move           a2, zero
 
-small_memset:
+.Lsmall_memset:
        beqz            a2, 2f
         PTR_ADDU       t1, a0, a2
 
 1:     PTR_ADDIU       a0, 1                   /* fill bytewise */
+       R10KCBARRIER(0(ra))
        bne             t1, a0, 1b
         sb             a1, -1(a0)
 
@@ -141,11 +155,11 @@ small_memset:
         move           a2, zero
        END(memset)
 
-first_fixup:
+.Lfirst_fixup:
        jr      ra
         nop
 
-fwd_fixup:
+.Lfwd_fixup:
        PTR_L           t0, TI_TASK($28)
        LONG_L          t0, THREAD_BUADDR(t0)
        andi            a2, 0x3f
@@ -153,7 +167,7 @@ fwd_fixup:
        jr              ra
         LONG_SUBU      a2, t0
 
-partial_fixup:
+.Lpartial_fixup:
        PTR_L           t0, TI_TASK($28)
        LONG_L          t0, THREAD_BUADDR(t0)
        andi            a2, LONGMASK
@@ -161,6 +175,6 @@ partial_fixup:
        jr              ra
         LONG_SUBU      a2, t0
 
-last_fixup:
+.Llast_fixup:
        jr              ra
         andi           v1, a2, LONGMASK
index eca558d83a3730e7fe83890cb2144e1ab792495f..fdbb970f670d84ed2bafcbd42cc4e9eb46b96156 100644 (file)
 LEAF(__strlen_user_asm)
        LONG_L          v0, TI_ADDR_LIMIT($28)  # pointer ok?
        and             v0, a0
-       bnez            v0, fault
+       bnez            v0, .Lfault
 
 FEXPORT(__strlen_user_nocheck_asm)
        move            v0, a0
-1:     EX(lb, t0, (v0), fault)
+1:     EX(lb, t0, (v0), .Lfault)
        PTR_ADDIU       v0, 1
        bnez            t0, 1b
        PTR_SUBU        v0, a0
        jr              ra
        END(__strlen_user_asm)
 
-fault: move            v0, zero
+.Lfault:       move            v0, zero
        jr              ra
index d16c76fbfac721c5cdaf20d33628c948ca83571c..7201b2ff08c8be6356090b54ab42bb25ba48c9c7 100644 (file)
 LEAF(__strncpy_from_user_asm)
        LONG_L          v0, TI_ADDR_LIMIT($28)  # pointer ok?
        and             v0, a1
-       bnez            v0, fault
+       bnez            v0, .Lfault
 
 FEXPORT(__strncpy_from_user_nocheck_asm)
        move            v0, zero
        move            v1, a1
        .set            noreorder
-1:     EX(lbu, t0, (v1), fault)
+1:     EX(lbu, t0, (v1), .Lfault)
        PTR_ADDIU       v1, 1
+       R10KCBARRIER(0(ra))
        beqz            t0, 2f
         sb             t0, (a0)
        PTR_ADDIU       v0, 1
-       bne             v0, a2, 1b
-        PTR_ADDIU      a0, 1
        .set            reorder
+       PTR_ADDIU       a0, 1
+       bne             v0, a2, 1b
 2:     PTR_ADDU        t0, a1, v0
        xor             t0, a1
-       bltz            t0, fault
+       bltz            t0, .Lfault
        jr              ra                      # return n
        END(__strncpy_from_user_asm)
 
-fault: li              v0, -EFAULT
+.Lfault:       li              v0, -EFAULT
        jr              ra
 
        .section        __ex_table,"a"
-       PTR             1b, fault
+       PTR             1b, .Lfault
        .previous
index c0ea15194a0e8d132979de4a0ad02ab6e9cf9378..c768e3000616eba1959299a0ea04e8286fac5984 100644 (file)
 LEAF(__strnlen_user_asm)
        LONG_L          v0, TI_ADDR_LIMIT($28)  # pointer ok?
        and             v0, a0
-       bnez            v0, fault
+       bnez            v0, .Lfault
 
 FEXPORT(__strnlen_user_nocheck_asm)
        move            v0, a0
        PTR_ADDU        a1, a0                  # stop pointer
 1:     beq             v0, a1, 1f              # limit reached?
-       EX(lb, t0, (v0), fault)
+       EX(lb, t0, (v0), .Lfault)
        PTR_ADDU        v0, 1
        bnez            t0, 1b
 1:     PTR_SUBU        v0, a0
        jr              ra
        END(__strnlen_user_asm)
 
-fault: move            v0, zero
+.Lfault:
+       move            v0, zero
        jr              ra
index 58d14f4d9349c3f8b9890c56551c02f8f35737d4..27b012d4341c2ad6f259ac33b4557b7360bc0a9b 100644 (file)
@@ -46,9 +46,9 @@ unsigned long __init run_uncached(void *func)
        if (sp >= (long)CKSEG0 && sp < (long)CKSEG2)
                usp = CKSEG1ADDR(sp);
 #ifdef CONFIG_64BIT
-       else if ((long long)sp >= (long long)PHYS_TO_XKPHYS(0LL, 0) &&
-                (long long)sp < (long long)PHYS_TO_XKPHYS(8LL, 0))
-               usp = PHYS_TO_XKPHYS((long long)K_CALG_UNCACHED,
+       else if ((long long)sp >= (long long)PHYS_TO_XKPHYS(0, 0) &&
+                (long long)sp < (long long)PHYS_TO_XKPHYS(8, 0))
+               usp = PHYS_TO_XKPHYS(K_CALG_UNCACHED,
                                     XKPHYS_TO_PHYS((long long)sp));
 #endif
        else {
@@ -58,9 +58,9 @@ unsigned long __init run_uncached(void *func)
        if (lfunc >= (long)CKSEG0 && lfunc < (long)CKSEG2)
                ufunc = CKSEG1ADDR(lfunc);
 #ifdef CONFIG_64BIT
-       else if ((long long)lfunc >= (long long)PHYS_TO_XKPHYS(0LL, 0) &&
-                (long long)lfunc < (long long)PHYS_TO_XKPHYS(8LL, 0))
-               ufunc = PHYS_TO_XKPHYS((long long)K_CALG_UNCACHED,
+       else if ((long long)lfunc >= (long long)PHYS_TO_XKPHYS(0, 0) &&
+                (long long)lfunc < (long long)PHYS_TO_XKPHYS(8, 0))
+               ufunc = PHYS_TO_XKPHYS(K_CALG_UNCACHED,
                                       XKPHYS_TO_PHYS((long long)lfunc));
 #endif
        else {
index e405d112a067ff5ada284169763c3434bde04de5..5c500802271e78298866f8e58146239f2a3fbcd2 100644 (file)
 #include <asm/time.h>
 #include <asm/traps.h>
 
-extern void mips_reboot_setup(void);
-
-#ifdef CONFIG_KGDB
-extern void kgdb_config(void);
-#endif
-
 static void __init serial_init(void);
 
 const char *get_system_type(void)
index 30f1f54cb68b5d789af644b8d58499df8987c3ed..1695dca5506bbe7e008221ca400836ff97446703 100644 (file)
@@ -250,6 +250,8 @@ void __init mips_ejtag_setup(void)
        flush_icache_range((unsigned long)base, (unsigned long)base + 0x80);
 }
 
+extern struct plat_smp_ops msmtc_smp_ops;
+
 void __init prom_init(void)
 {
        prom_argc = fw_arg0;
@@ -416,4 +418,10 @@ void __init prom_init(void)
 #ifdef CONFIG_SERIAL_8250_CONSOLE
        console_config();
 #endif
+#ifdef CONFIG_MIPS_MT_SMP
+       register_smp_ops(&vsmp_smp_ops);
+#endif
+#ifdef CONFIG_MIPS_MT_SMTC
+       register_smp_ops(&msmtc_smp_ops);
+#endif
 }
index f010261b75d81fe367b90c2fc5036074b77e375e..dbe60eb55e2962c4e40d5ae7f8322514c63c21f7 100644 (file)
 #include <linux/sched.h>
 #include <linux/slab.h>
 #include <linux/interrupt.h>
+#include <linux/io.h>
 #include <linux/kernel_stat.h>
 #include <linux/kernel.h>
 #include <linux/random.h>
 
 #include <asm/i8259.h>
 #include <asm/irq_cpu.h>
-#include <asm/io.h>
 #include <asm/irq_regs.h>
 #include <asm/mips-boards/malta.h>
 #include <asm/mips-boards/maltaint.h>
@@ -47,7 +47,7 @@ static DEFINE_SPINLOCK(mips_irq_lock);
 static inline int mips_pcibios_iack(void)
 {
        int irq;
-        u32 dummy;
+       u32 dummy;
 
        /*
         * Determine highest priority pending interrupt by performing
@@ -58,7 +58,7 @@ static inline int mips_pcibios_iack(void)
        case MIPS_REVISION_SCON_ROCIT:
        case MIPS_REVISION_SCON_SOCITSC:
        case MIPS_REVISION_SCON_SOCITSCP:
-               MSC_READ(MSC01_PCI_IACK, irq);
+               MSC_READ(MSC01_PCI_IACK, irq);
                irq &= 0xff;
                break;
        case MIPS_REVISION_SCON_GT64120:
@@ -83,7 +83,7 @@ static inline int mips_pcibios_iack(void)
                BONITO_PCIMAP_CFG = 0;
                break;
        default:
-               printk("Unknown system controller.\n");
+               printk(KERN_WARNING "Unknown system controller.\n");
                return -1;
        }
        return irq;
@@ -114,7 +114,8 @@ static void malta_hw0_irqdispatch(void)
 
        irq = get_int();
        if (irq < 0) {
-               return;  /* interrupt has already been cleared */
+               /* interrupt has already been cleared */
+               return;
        }
 
        do_IRQ(MALTA_INT_BASE + irq);
@@ -123,15 +124,15 @@ static void malta_hw0_irqdispatch(void)
 static void corehi_irqdispatch(void)
 {
        unsigned int intedge, intsteer, pcicmd, pcibadaddr;
-        unsigned int pcimstat, intisr, inten, intpol;
+       unsigned int pcimstat, intisr, inten, intpol;
        unsigned int intrcause, datalo, datahi;
        struct pt_regs *regs = get_irq_regs();
 
-        printk("CoreHI interrupt, shouldn't happen, so we die here!!!\n");
-        printk("epc   : %08lx\nStatus: %08lx\n"
-              "Cause : %08lx\nbadVaddr : %08lx\n",
-              regs->cp0_epc, regs->cp0_status,
-              regs->cp0_cause, regs->cp0_badvaddr);
+       printk(KERN_EMERG "CoreHI interrupt, shouldn't happen, we die here!\n");
+       printk(KERN_EMERG "epc   : %08lx\nStatus: %08lx\n"
+                       "Cause : %08lx\nbadVaddr : %08lx\n",
+                       regs->cp0_epc, regs->cp0_status,
+                       regs->cp0_cause, regs->cp0_badvaddr);
 
        /* Read all the registers and then print them as there is a
           problem with interspersed printk's upsetting the Bonito controller.
@@ -139,41 +140,41 @@ static void corehi_irqdispatch(void)
        */
 
        switch (mips_revision_sconid) {
-        case MIPS_REVISION_SCON_SOCIT:
+       case MIPS_REVISION_SCON_SOCIT:
        case MIPS_REVISION_SCON_ROCIT:
        case MIPS_REVISION_SCON_SOCITSC:
        case MIPS_REVISION_SCON_SOCITSCP:
-                ll_msc_irq();
-                break;
-        case MIPS_REVISION_SCON_GT64120:
-                intrcause = GT_READ(GT_INTRCAUSE_OFS);
-                datalo = GT_READ(GT_CPUERR_ADDRLO_OFS);
-                datahi = GT_READ(GT_CPUERR_ADDRHI_OFS);
-                printk("GT_INTRCAUSE = %08x\n", intrcause);
-                printk("GT_CPUERR_ADDR = %02x%08x\n", datahi, datalo);
-                break;
-        case MIPS_REVISION_SCON_BONITO:
-                pcibadaddr = BONITO_PCIBADADDR;
-                pcimstat = BONITO_PCIMSTAT;
-                intisr = BONITO_INTISR;
-                inten = BONITO_INTEN;
-                intpol = BONITO_INTPOL;
-                intedge = BONITO_INTEDGE;
-                intsteer = BONITO_INTSTEER;
-                pcicmd = BONITO_PCICMD;
-                printk("BONITO_INTISR = %08x\n", intisr);
-                printk("BONITO_INTEN = %08x\n", inten);
-                printk("BONITO_INTPOL = %08x\n", intpol);
-                printk("BONITO_INTEDGE = %08x\n", intedge);
-                printk("BONITO_INTSTEER = %08x\n", intsteer);
-                printk("BONITO_PCICMD = %08x\n", pcicmd);
-                printk("BONITO_PCIBADADDR = %08x\n", pcibadaddr);
-                printk("BONITO_PCIMSTAT = %08x\n", pcimstat);
-                break;
-        }
-
-        /* We die here*/
-        die("CoreHi interrupt", regs);
+               ll_msc_irq();
+               break;
+       case MIPS_REVISION_SCON_GT64120:
+               intrcause = GT_READ(GT_INTRCAUSE_OFS);
+               datalo = GT_READ(GT_CPUERR_ADDRLO_OFS);
+               datahi = GT_READ(GT_CPUERR_ADDRHI_OFS);
+               printk(KERN_EMERG "GT_INTRCAUSE = %08x\n", intrcause);
+               printk(KERN_EMERG "GT_CPUERR_ADDR = %02x%08x\n",
+                               datahi, datalo);
+               break;
+       case MIPS_REVISION_SCON_BONITO:
+               pcibadaddr = BONITO_PCIBADADDR;
+               pcimstat = BONITO_PCIMSTAT;
+               intisr = BONITO_INTISR;
+               inten = BONITO_INTEN;
+               intpol = BONITO_INTPOL;
+               intedge = BONITO_INTEDGE;
+               intsteer = BONITO_INTSTEER;
+               pcicmd = BONITO_PCICMD;
+               printk(KERN_EMERG "BONITO_INTISR = %08x\n", intisr);
+               printk(KERN_EMERG "BONITO_INTEN = %08x\n", inten);
+               printk(KERN_EMERG "BONITO_INTPOL = %08x\n", intpol);
+               printk(KERN_EMERG "BONITO_INTEDGE = %08x\n", intedge);
+               printk(KERN_EMERG "BONITO_INTSTEER = %08x\n", intsteer);
+               printk(KERN_EMERG "BONITO_PCICMD = %08x\n", pcicmd);
+               printk(KERN_EMERG "BONITO_PCIBADADDR = %08x\n", pcibadaddr);
+               printk(KERN_EMERG "BONITO_PCIMSTAT = %08x\n", pcimstat);
+               break;
+       }
+
+       die("CoreHi interrupt", regs);
 }
 
 static inline int clz(unsigned long x)
@@ -214,9 +215,9 @@ static inline unsigned int irq_ffs(unsigned int pending)
 
        t0 = pending & 0x8000;
        t0 = t0 < 1;
-       //t0 = t0 << 2;
+       /* t0 = t0 << 2; */
        a0 = a0 - t0;
-       //pending = pending << t0;
+       /* pending = pending << t0; */
 
        return a0;
 #endif
@@ -299,21 +300,29 @@ void __init arch_init_irq(void)
        if (!cpu_has_veic)
                mips_cpu_irq_init();
 
-        switch(mips_revision_sconid) {
-        case MIPS_REVISION_SCON_SOCIT:
-        case MIPS_REVISION_SCON_ROCIT:
+       switch (mips_revision_sconid) {
+       case MIPS_REVISION_SCON_SOCIT:
+       case MIPS_REVISION_SCON_ROCIT:
                if (cpu_has_veic)
-                       init_msc_irqs(MIPS_MSC01_IC_REG_BASE, MSC01E_INT_BASE, msc_eicirqmap, msc_nr_eicirqs);
+                       init_msc_irqs(MIPS_MSC01_IC_REG_BASE,
+                                       MSC01E_INT_BASE, msc_eicirqmap,
+                                       msc_nr_eicirqs);
                else
-                       init_msc_irqs(MIPS_MSC01_IC_REG_BASE, MSC01C_INT_BASE, msc_irqmap, msc_nr_irqs);
+                       init_msc_irqs(MIPS_MSC01_IC_REG_BASE,
+                                       MSC01C_INT_BASE, msc_irqmap,
+                                       msc_nr_irqs);
                break;
 
-        case MIPS_REVISION_SCON_SOCITSC:
-        case MIPS_REVISION_SCON_SOCITSCP:
+       case MIPS_REVISION_SCON_SOCITSC:
+       case MIPS_REVISION_SCON_SOCITSCP:
                if (cpu_has_veic)
-                       init_msc_irqs(MIPS_SOCITSC_IC_REG_BASE, MSC01E_INT_BASE, msc_eicirqmap, msc_nr_eicirqs);
+                       init_msc_irqs(MIPS_SOCITSC_IC_REG_BASE,
+                                       MSC01E_INT_BASE, msc_eicirqmap,
+                                       msc_nr_eicirqs);
                else
-                       init_msc_irqs(MIPS_SOCITSC_IC_REG_BASE, MSC01C_INT_BASE, msc_irqmap, msc_nr_irqs);
+                       init_msc_irqs(MIPS_SOCITSC_IC_REG_BASE,
+                                       MSC01C_INT_BASE, msc_irqmap,
+                                       msc_nr_irqs);
        }
 
        if (cpu_has_veic) {
@@ -321,8 +330,7 @@ void __init arch_init_irq(void)
                set_vi_handler(MSC01E_INT_COREHI, corehi_irqdispatch);
                setup_irq(MSC01E_INT_BASE+MSC01E_INT_I8259A, &i8259irq);
                setup_irq(MSC01E_INT_BASE+MSC01E_INT_COREHI, &corehi_irqaction);
-       }
-       else if (cpu_has_vint) {
+       } else if (cpu_has_vint) {
                set_vi_handler(MIPSCPU_INT_I8259A, malta_hw0_irqdispatch);
                set_vi_handler(MIPSCPU_INT_COREHI, corehi_irqdispatch);
 #ifdef CONFIG_MIPS_MT_SMTC
@@ -344,11 +352,12 @@ void __init arch_init_irq(void)
                }
 #else /* Not SMTC */
                setup_irq(MIPS_CPU_IRQ_BASE+MIPSCPU_INT_I8259A, &i8259irq);
-               setup_irq(MIPS_CPU_IRQ_BASE+MIPSCPU_INT_COREHI, &corehi_irqaction);
+               setup_irq(MIPS_CPU_IRQ_BASE+MIPSCPU_INT_COREHI,
+                                               &corehi_irqaction);
 #endif /* CONFIG_MIPS_MT_SMTC */
-       }
-       else {
+       } else {
                setup_irq(MIPS_CPU_IRQ_BASE+MIPSCPU_INT_I8259A, &i8259irq);
-               setup_irq(MIPS_CPU_IRQ_BASE+MIPSCPU_INT_COREHI, &corehi_irqaction);
+               setup_irq(MIPS_CPU_IRQ_BASE+MIPSCPU_INT_COREHI,
+                                               &corehi_irqaction);
        }
 }
index bc43a5c2224dec370d3aeab2fb25cb0eb84c7ff1..2cd8f5734b3699cba9be4d1fab0860893b56475b 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * Carsten Langgaard, carstenl@mips.com
  * Copyright (C) 2000 MIPS Technologies, Inc.  All rights reserved.
+ * Copyright (C) Dmitri Vorobiev
  *
  *  This program is free software; you can distribute it and/or modify it
  *  under the terms of the GNU General Public License (Version 2) as
  *  with this program; if not, write to the Free Software Foundation, Inc.,
  *  59 Temple Place - Suite 330, Boston MA 02111-1307, USA.
  */
+#include <linux/cpu.h>
 #include <linux/init.h>
 #include <linux/sched.h>
 #include <linux/ioport.h>
+#include <linux/irq.h>
 #include <linux/pci.h>
 #include <linux/screen_info.h>
+#include <linux/time.h>
 
-#include <asm/cpu.h>
 #include <asm/bootinfo.h>
-#include <asm/irq.h>
 #include <asm/mips-boards/generic.h>
 #include <asm/mips-boards/prom.h>
 #include <asm/mips-boards/malta.h>
 #include <asm/mips-boards/maltaint.h>
 #include <asm/dma.h>
-#include <asm/time.h>
 #include <asm/traps.h>
 #ifdef CONFIG_VT
 #include <linux/console.h>
 #endif
 
-extern void mips_reboot_setup(void);
-extern unsigned long mips_rtc_get_time(void);
-
-#ifdef CONFIG_KGDB
-extern void kgdb_config(void);
-#endif
-
 struct resource standard_io_resources[] = {
-       { .name = "dma1", .start = 0x00, .end = 0x1f, .flags = IORESOURCE_BUSY },
-       { .name = "timer", .start = 0x40, .end = 0x5f, .flags = IORESOURCE_BUSY },
-       { .name = "keyboard", .start = 0x60, .end = 0x6f, .flags = IORESOURCE_BUSY },
-       { .name = "dma page reg", .start = 0x80, .end = 0x8f, .flags = IORESOURCE_BUSY },
-       { .name = "dma2", .start = 0xc0, .end = 0xdf, .flags = IORESOURCE_BUSY },
+       {
+               .name = "dma1",
+               .start = 0x00,
+               .end = 0x1f,
+               .flags = IORESOURCE_BUSY
+       },
+       {
+               .name = "timer",
+               .start = 0x40,
+               .end = 0x5f,
+               .flags = IORESOURCE_BUSY
+       },
+       {
+               .name = "keyboard",
+               .start = 0x60,
+               .end = 0x6f,
+               .flags = IORESOURCE_BUSY
+       },
+       {
+               .name = "dma page reg",
+               .start = 0x80,
+               .end = 0x8f,
+               .flags = IORESOURCE_BUSY
+       },
+       {
+               .name = "dma2",
+               .start = 0xc0,
+               .end = 0xdf,
+               .flags = IORESOURCE_BUSY
+       },
 };
 
 const char *get_system_type(void)
@@ -62,7 +81,7 @@ const char display_string[] = "        LINUX ON MALTA       ";
 #endif /* CONFIG_MIPS_MT_SMTC */
 
 #ifdef CONFIG_BLK_DEV_FD
-void __init fd_activate(void)
+static void __init fd_activate(void)
 {
        /*
         * Activate Floppy Controller in the SMSC FDC37M817 Super I/O
@@ -83,6 +102,85 @@ void __init fd_activate(void)
 }
 #endif
 
+#ifdef CONFIG_BLK_DEV_IDE
+static void __init pci_clock_check(void)
+{
+       unsigned int __iomem *jmpr_p =
+               (unsigned int *) ioremap(MALTA_JMPRS_REG, sizeof(unsigned int));
+       int jmpr = (__raw_readl(jmpr_p) >> 2) & 0x07;
+       static const int pciclocks[] __initdata = {
+               33, 20, 25, 30, 12, 16, 37, 10
+       };
+       int pciclock = pciclocks[jmpr];
+       char *argptr = prom_getcmdline();
+
+       if (pciclock != 33 && !strstr(argptr, "idebus=")) {
+               printk(KERN_WARNING "WARNING: PCI clock is %dMHz, "
+                               "setting idebus\n", pciclock);
+               argptr += strlen(argptr);
+               sprintf(argptr, " idebus=%d", pciclock);
+               if (pciclock < 20 || pciclock > 66)
+                       printk(KERN_WARNING "WARNING: IDE timing "
+                                       "calculations will be incorrect\n");
+       }
+}
+#endif
+
+#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
+static void __init screen_info_setup(void)
+{
+       screen_info = (struct screen_info) {
+               .orig_x = 0,
+               .orig_y = 25,
+               .ext_mem_k = 0,
+               .orig_video_page = 0,
+               .orig_video_mode = 0,
+               .orig_video_cols = 80,
+               .unused2 = 0,
+               .orig_video_ega_bx = 0,
+               .unused3 = 0,
+               .orig_video_lines = 25,
+               .orig_video_isVGA = VIDEO_TYPE_VGAC,
+               .orig_video_points = 16
+       };
+}
+#endif
+
+static void __init bonito_quirks_setup(void)
+{
+       char *argptr;
+
+       argptr = prom_getcmdline();
+       if (strstr(argptr, "debug")) {
+               BONITO_BONGENCFG |= BONITO_BONGENCFG_DEBUGMODE;
+               printk(KERN_INFO "Enabled Bonito debug mode\n");
+       } else
+               BONITO_BONGENCFG &= ~BONITO_BONGENCFG_DEBUGMODE;
+
+#ifdef CONFIG_DMA_COHERENT
+       if (BONITO_PCICACHECTRL & BONITO_PCICACHECTRL_CPUCOH_PRES) {
+               BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_CPUCOH_EN;
+               printk(KERN_INFO "Enabled Bonito CPU coherency\n");
+
+               argptr = prom_getcmdline();
+               if (strstr(argptr, "iobcuncached")) {
+                       BONITO_PCICACHECTRL &= ~BONITO_PCICACHECTRL_IOBCCOH_EN;
+                       BONITO_PCIMEMBASECFG = BONITO_PCIMEMBASECFG &
+                               ~(BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
+                                       BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
+                       printk(KERN_INFO "Disabled Bonito IOBC coherency\n");
+               } else {
+                       BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_IOBCCOH_EN;
+                       BONITO_PCIMEMBASECFG |=
+                               (BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
+                                       BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
+                       printk(KERN_INFO "Enabled Bonito IOBC coherency\n");
+               }
+       } else
+               panic("Hardware DMA cache coherency not supported");
+#endif
+}
+
 void __init plat_mem_setup(void)
 {
        unsigned int i;
@@ -102,86 +200,24 @@ void __init plat_mem_setup(void)
        kgdb_config();
 #endif
 
-       if (mips_revision_sconid == MIPS_REVISION_SCON_BONITO) {
-               char *argptr;
-
-               argptr = prom_getcmdline();
-               if (strstr(argptr, "debug")) {
-                       BONITO_BONGENCFG |= BONITO_BONGENCFG_DEBUGMODE;
-                       printk("Enabled Bonito debug mode\n");
-               }
-               else
-                       BONITO_BONGENCFG &= ~BONITO_BONGENCFG_DEBUGMODE;
-
-#ifdef CONFIG_DMA_COHERENT
-               if (BONITO_PCICACHECTRL & BONITO_PCICACHECTRL_CPUCOH_PRES) {
-                       BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_CPUCOH_EN;
-                       printk("Enabled Bonito CPU coherency\n");
-
-                       argptr = prom_getcmdline();
-                       if (strstr(argptr, "iobcuncached")) {
-                               BONITO_PCICACHECTRL &= ~BONITO_PCICACHECTRL_IOBCCOH_EN;
-                               BONITO_PCIMEMBASECFG = BONITO_PCIMEMBASECFG &
-                                       ~(BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
-                                         BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
-                               printk("Disabled Bonito IOBC coherency\n");
-                       }
-                       else {
-                               BONITO_PCICACHECTRL |= BONITO_PCICACHECTRL_IOBCCOH_EN;
-                               BONITO_PCIMEMBASECFG |=
-                                       (BONITO_PCIMEMBASECFG_MEMBASE0_CACHED |
-                                        BONITO_PCIMEMBASECFG_MEMBASE1_CACHED);
-                               printk("Enabled Bonito IOBC coherency\n");
-                       }
-               }
-               else
-                       panic("Hardware DMA cache coherency not supported");
-
-#endif
-       }
 #ifdef CONFIG_DMA_COHERENT
-       else {
+       if (mips_revision_sconid != MIPS_REVISION_SCON_BONITO)
                panic("Hardware DMA cache coherency not supported");
-       }
 #endif
 
+       if (mips_revision_sconid == MIPS_REVISION_SCON_BONITO)
+               bonito_quirks_setup();
+
 #ifdef CONFIG_BLK_DEV_IDE
-       /* Check PCI clock */
-       {
-               unsigned int __iomem *jmpr_p = (unsigned int *) ioremap(MALTA_JMPRS_REG, sizeof(unsigned int));
-               int jmpr = (__raw_readl(jmpr_p) >> 2) & 0x07;
-               static const int pciclocks[] __initdata = {
-                       33, 20, 25, 30, 12, 16, 37, 10
-               };
-               int pciclock = pciclocks[jmpr];
-               char *argptr = prom_getcmdline();
-
-               if (pciclock != 33 && !strstr (argptr, "idebus=")) {
-                       printk("WARNING: PCI clock is %dMHz, setting idebus\n", pciclock);
-                       argptr += strlen(argptr);
-                       sprintf(argptr, " idebus=%d", pciclock);
-                       if (pciclock < 20 || pciclock > 66)
-                               printk("WARNING: IDE timing calculations will be incorrect\n");
-               }
-       }
+       pci_clock_check();
 #endif
+
 #ifdef CONFIG_BLK_DEV_FD
        fd_activate();
 #endif
-#ifdef CONFIG_VT
-#if defined(CONFIG_VGA_CONSOLE)
-       screen_info = (struct screen_info) {
-               0, 25,                  /* orig-x, orig-y */
-               0,                      /* unused */
-               0,                      /* orig-video-page */
-               0,                      /* orig-video-mode */
-               80,                     /* orig-video-cols */
-               0, 0, 0,                /* ega_ax, ega_bx, ega_cx */
-               25,                     /* orig-video-lines */
-               VIDEO_TYPE_VGAC,        /* orig-video-isVGA */
-               16                      /* orig-video-points */
-       };
-#endif
+
+#if defined(CONFIG_VT) && defined(CONFIG_VGA_CONSOLE)
+       screen_info_setup();
 #endif
        mips_reboot_setup();
 }
index 5c980f4a48fe983526362b900931cbe275796187..5ea705e49454e3ce49b27fb6b2f80a9f796f6950 100644 (file)
  * Cause the specified action to be performed on a targeted "CPU"
  */
 
-void core_send_ipi(int cpu, unsigned int action)
+static void msmtc_send_ipi_single(int cpu, unsigned int action)
 {
        /* "CPU" may be TC of same VPE, VPE of same CPU, or different CPU */
        smtc_send_ipi(cpu, LINUX_SMP_IPI, action);
 }
 
-/*
- * Platform "CPU" startup hook
- */
-
-void __cpuinit prom_boot_secondary(int cpu, struct task_struct *idle)
+static void msmtc_send_ipi_mask(cpumask_t mask, unsigned int action)
 {
-       smtc_boot_secondary(cpu, idle);
+       unsigned int i;
+
+       for_each_cpu_mask(i, mask)
+               msmtc_send_ipi_single(i, action);
 }
 
 /*
  * Post-config but pre-boot cleanup entry point
  */
-
-void __cpuinit prom_init_secondary(void)
+static void __cpuinit msmtc_init_secondary(void)
 {
-        void smtc_init_secondary(void);
+       void smtc_init_secondary(void);
        int myvpe;
 
        /* Don't enable Malta I/O interrupts (IP2) for secondary VPEs */
@@ -50,45 +48,61 @@ void __cpuinit prom_init_secondary(void)
                        set_c0_status(0x100 << cp0_perfcount_irq);
        }
 
-        smtc_init_secondary();
+       smtc_init_secondary();
 }
 
 /*
- * Platform SMP pre-initialization
- *
- * As noted above, we can assume a single CPU for now
- * but it may be multithreaded.
+ * Platform "CPU" startup hook
  */
-
-void __cpuinit plat_smp_setup(void)
+static void __cpuinit msmtc_boot_secondary(int cpu, struct task_struct *idle)
 {
-       if (read_c0_config3() & (1<<2))
-               mipsmt_build_cpu_map(0);
+       smtc_boot_secondary(cpu, idle);
 }
 
-void __init plat_prepare_cpus(unsigned int max_cpus)
+/*
+ * SMP initialization finalization entry point
+ */
+static void __cpuinit msmtc_smp_finish(void)
 {
-       if (read_c0_config3() & (1<<2))
-               mipsmt_prepare_cpus();
+       smtc_smp_finish();
 }
 
 /*
- * SMP initialization finalization entry point
+ * Hook for after all CPUs are online
  */
 
-void __cpuinit prom_smp_finish(void)
+static void msmtc_cpus_done(void)
 {
-       smtc_smp_finish();
 }
 
 /*
- * Hook for after all CPUs are online
+ * Platform SMP pre-initialization
+ *
+ * As noted above, we can assume a single CPU for now
+ * but it may be multithreaded.
  */
 
-void prom_cpus_done(void)
+static void __init msmtc_smp_setup(void)
 {
+       mipsmt_build_cpu_map(0);
 }
 
+static void __init msmtc_prepare_cpus(unsigned int max_cpus)
+{
+       mipsmt_prepare_cpus();
+}
+
+struct plat_smp_ops msmtc_smp_ops = {
+       .send_ipi_single        = msmtc_send_ipi_single,
+       .send_ipi_mask          = msmtc_send_ipi_mask,
+       .init_secondary         = msmtc_init_secondary,
+       .smp_finish             = msmtc_smp_finish,
+       .cpus_done              = msmtc_cpus_done,
+       .boot_secondary         = msmtc_boot_secondary,
+       .smp_setup              = msmtc_smp_setup,
+       .prepare_cpus           = msmtc_prepare_cpus,
+};
+
 #ifdef CONFIG_MIPS_MT_SMTC_IRQAFF
 /*
  * IRQ affinity hook
index 1fb61b852304dbc7bbf7a553b4a00740495c2acd..8aa8e5b7b0742173077acbe2e1430e53924ce409 100644 (file)
@@ -34,8 +34,6 @@
 #include <asm/mips-boards/seadint.h>
 #include <asm/time.h>
 
-extern void mips_reboot_setup(void);
-
 static void __init serial_init(void);
 
 const char *get_system_type(void)
index 75568b584df451a6b651b22d7995720d92f71709..57f43c1c7882782bcabeb5143a2021d496a16205 100644 (file)
@@ -21,6 +21,6 @@ obj-y := sim_platform.o sim_setup.o sim_mem.o sim_time.o sim_int.o \
         sim_cmdline.o
 
 obj-$(CONFIG_EARLY_PRINTK) += sim_console.o
-obj-$(CONFIG_SMP) += sim_smp.o
+obj-$(CONFIG_MIPS_MT_SMTC) += sim_smtc.o
 
 EXTRA_CFLAGS += -Werror
index 452c129d02c11e2d42938f88d5e750babe171370..d49fe73426b74e017a788c82cbb70fdc9156e4fb 100644 (file)
@@ -60,6 +60,8 @@ void __init plat_mem_setup(void)
 #endif
 }
 
+extern struct plat_smp_ops ssmtc_smp_ops;
+
 void __init prom_init(void)
 {
        set_io_port_base(0xbfd00000);
@@ -67,8 +69,20 @@ void __init prom_init(void)
        pr_info("\nLINUX started...\n");
        prom_init_cmdline();
        prom_meminit();
-}
 
+#ifdef CONFIG_MIPS_MT_SMP
+       if (cpu_has_mipsmt)
+               register_smp_ops(&vsmp_smp_ops);
+       else
+               register_smp_ops(&up_smp_ops);
+#endif
+#ifdef CONFIG_MIPS_MT_SMTC
+       if (cpu_has_mipsmt)
+               register_smp_ops(&ssmtc_smp_ops);
+       else
+               register_smp_ops(&up_smp_ops);
+#endif
+}
 
 static void __init serial_init(void)
 {
similarity index 64%
rename from arch/mips/mipssim/sim_smp.c
rename to arch/mips/mipssim/sim_smtc.c
index ccbbccac23efed3de16e138bf236bc6cb9f85b28..d6e4f656ad14c985d301226f813dd52c769310eb 100644 (file)
@@ -16,7 +16,7 @@
  *
  */
 /*
- * Simulator Platform-specific hooks for SMP operation
+ * Simulator Platform-specific hooks for SMTC operation
  */
 #include <linux/kernel.h>
 #include <linux/sched.h>
 #include <asm/processor.h>
 #include <asm/system.h>
 #include <asm/mmu_context.h>
-#ifdef CONFIG_MIPS_MT_SMTC
 #include <asm/smtc_ipi.h>
-#endif /* CONFIG_MIPS_MT_SMTC */
 
 /* VPE/SMP Prototype implements platform interfaces directly */
-#if !defined(CONFIG_MIPS_MT_SMP)
 
 /*
  * Cause the specified action to be performed on a targeted "CPU"
  */
 
-void core_send_ipi(int cpu, unsigned int action)
+static void ssmtc_send_ipi_single(int cpu, unsigned int action)
 {
-#ifdef CONFIG_MIPS_MT_SMTC
        smtc_send_ipi(cpu, LINUX_SMP_IPI, action);
-#endif /* CONFIG_MIPS_MT_SMTC */
-/* "CPU" may be TC of same VPE, VPE of same CPU, or different CPU */
+       /* "CPU" may be TC of same VPE, VPE of same CPU, or different CPU */
+}
+
+static inline void ssmtc_send_ipi_mask(cpumask_t mask, unsigned int action)
+{
+       unsigned int i;
 
+       for_each_cpu_mask(i, mask)
+               ssmtc_send_ipi_single(i, action);
 }
 
 /*
- * Platform "CPU" startup hook
+ * Post-config but pre-boot cleanup entry point
  */
-
-void __cpuinit prom_boot_secondary(int cpu, struct task_struct *idle)
+static void __cpuinit ssmtc_init_secondary(void)
 {
-#ifdef CONFIG_MIPS_MT_SMTC
-       smtc_boot_secondary(cpu, idle);
-#endif /* CONFIG_MIPS_MT_SMTC */
+       void smtc_init_secondary(void);
+
+       smtc_init_secondary();
 }
 
 /*
- * Post-config but pre-boot cleanup entry point
+ * SMP initialization finalization entry point
  */
+static void __cpuinit ssmtc_smp_finish(void)
+{
+       smtc_smp_finish();
+}
 
-void __cpuinit prom_init_secondary(void)
+/*
+ * Hook for after all CPUs are online
+ */
+static void ssmtc_cpus_done(void)
 {
-#ifdef CONFIG_MIPS_MT_SMTC
-       void smtc_init_secondary(void);
+}
 
-       smtc_init_secondary();
-#endif /* CONFIG_MIPS_MT_SMTC */
+/*
+ * Platform "CPU" startup hook
+ */
+static void __cpuinit ssmtc_boot_secondary(int cpu, struct task_struct *idle)
+{
+       smtc_boot_secondary(cpu, idle);
 }
 
-void plat_smp_setup(void)
+static void __init ssmtc_smp_setup(void)
 {
-#ifdef CONFIG_MIPS_MT_SMTC
        if (read_c0_config3() & (1 << 2))
             &