Author: jchandra
Date: Sat Jul 16 20:31:29 2011
New Revision: 224115
URL: http://svn.freebsd.org/changeset/base/224115

Log:
  MIPS changes for Netlogic XLP support.
  
  This patch adds support for the Netlogic XLP mips64 processors in
  the common MIPS code. The changes are :
  
  - Add CPU_NLM processor type
  - Add cases for CPU_NLM, mostly were CPU_RMI is used.
  - Update cache flush changes for CPU_NLM
  - Add kernel build configuration files for xLP.
  
  In collaboration with: Prabhath Raman <prabhathpr at netlogicmicro com>
  
  Approved by:  bz(re), jmallett, imp(mips)

Added:
  head/sys/mips/conf/XLP   (contents, props changed)
  head/sys/mips/conf/XLP64   (contents, props changed)
  head/sys/mips/conf/XLPN32   (contents, props changed)
Modified:
  head/sys/conf/options.mips
  head/sys/mips/include/bus.h
  head/sys/mips/include/cpufunc.h
  head/sys/mips/include/intr_machdep.h
  head/sys/mips/mips/cache.c
  head/sys/mips/mips/cache_mipsNN.c
  head/sys/mips/mips/cpu.c
  head/sys/mips/mips/exception.S
  head/sys/mips/mips/locore.S
  head/sys/mips/mips/machdep.c
  head/sys/mips/nlm/cms.c
  head/sys/mips/nlm/std.xlp
  head/sys/mips/nlm/xlp_machdep.c

Modified: head/sys/conf/options.mips
==============================================================================
--- head/sys/conf/options.mips  Sat Jul 16 20:16:49 2011        (r224114)
+++ head/sys/conf/options.mips  Sat Jul 16 20:31:29 2011        (r224115)
@@ -36,6 +36,7 @@ CPU_HAVEFPU   opt_global.h
 CPU_SB1        opt_global.h
 CPU_CNMIPS     opt_global.h
 CPU_RMI                opt_global.h
+CPU_NLM                opt_global.h
 
 ISA_MIPS1      opt_cputype.h
 ISA_MIPS3      opt_cputype.h

Added: head/sys/mips/conf/XLP
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/mips/conf/XLP      Sat Jul 16 20:31:29 2011        (r224115)
@@ -0,0 +1,93 @@
+# XLP -- Generic kernel configuration file for FreeBSD/mips
+#
+# For more information on this file, please read the handbook section on
+# Kernel Configuration Files:
+#
+#    
http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files. 
+# If you are in doubt as to the purpose or necessity of a line, check first 
+# in NOTES.
+#
+# $FreeBSD$
+
+machine        mips mipseb
+ident           XLP
+
+options                ISA_MIPS32
+makeoptions    KERNLOADADDR=0x80100000
+
+include                "../nlm/std.xlp"
+makeoptions    MODULES_OVERRIDE=""
+makeoptions    DEBUG=-g                # Build kernel with gdb(1) debug symbols
+#profile       2
+makeoptions    TRAMPLOADADDR=0xffffffff85000000
+makeoptions    TRAMP_ARCH_FLAGS="-mabi=64 -march=mips64"
+
+options        SCHED_ULE               # ULE scheduler
+#options       VERBOSE_SYSINIT
+#options       SCHED_4BSD              # 4BSD scheduler
+options         SMP
+options        PREEMPTION              # Enable kernel thread preemption
+#options       FULL_PREEMPTION         # Enable kernel thread preemption
+options        INET                    # InterNETworking
+options        INET6                   # IPv6 communications protocols
+options        FFS                     # Berkeley Fast Filesystem
+#options       SOFTUPDATES             # Enable FFS soft updates support
+options        UFS_ACL                 # Support for access control lists
+options        UFS_DIRHASH             # Improve performance on big directories
+options                NFSCL
+options                NFS_ROOT
+options                MSDOSFS                 #MSDOS Filesystem
+#
+#options       BOOTP
+#options       BOOTP_NFSROOT
+#options       BOOTP_NFSV3
+#options       BOOTP_WIRED_TO=nlge0
+#options       BOOTP_COMPAT
+#options       ROOTDEVNAME=\"nfs:10.1.1.8:/usr/extra/nfsroot\"
+#
+options        MD_ROOT                 # MD is a potential root device
+options                MD_ROOT_SIZE=27000
+options                ROOTDEVNAME=\"ufs:md0\"
+options        _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time 
extensions
+options        HZ=1000 
+options        NO_SWAPPING
+
+#Debugging options
+options        KTRACE                  # ktrace(1) support
+options        DDB
+options        KDB
+options        GDB
+options        BREAK_TO_DEBUGGER
+options        ALT_BREAK_TO_DEBUGGER
+#options       DEADLKRES               #Enable the deadlock resolver
+#options       INVARIANTS              #Enable calls of extra sanity checking
+#options       INVARIANT_SUPPORT       #Extra sanity checks of internal 
structures, required by INVARIANTS
+#options       WITNESS                 #Enable checks to detect deadlocks and 
cycles
+#options       WITNESS_SKIPSPIN        #Don't run witness on spinlocks for 
speed
+#options       KTR                     # ktr(4) and ktrdump(8) support
+#options       
KTR_COMPILE=(KTR_LOCK|KTR_PROC|KTR_INTR|KTR_CALLOUT|KTR_UMA|KTR_SYSC)
+#options       KTR_ENTRIES=131072
+#options       LOCK_DEBUG
+#options       LOCK_PROFILING
+
+
+# Pseudo
+device         loop
+device         random
+device         md
+device         pty
+device         bpf
+
+# UART
+device         uart
+
+# Network
+device         ether

Added: head/sys/mips/conf/XLP64
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/mips/conf/XLP64    Sat Jul 16 20:31:29 2011        (r224115)
@@ -0,0 +1,95 @@
+# XLP64 -- Generic kernel configuration file for FreeBSD/mips
+#
+# For more information on this file, please read the handbook section on
+# Kernel Configuration Files:
+#
+#    
http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files. 
+# If you are in doubt as to the purpose or necessity of a line, check first 
+# in NOTES.
+#
+# $FreeBSD$
+
+machine        mips mips64eb
+ident           XLP64
+
+options        ISA_MIPS64
+makeoptions    ARCH_FLAGS="-march=mips64 -mabi=64"
+makeoptions    KERNLOADADDR=0xffffffff80100000
+
+include                "../nlm/std.xlp"
+
+makeoptions    MODULES_OVERRIDE=""
+makeoptions    DEBUG=-g                # Build kernel with gdb(1) debug symbols
+#profile       2
+makeoptions    TRAMPLOADADDR=0xffffffff85000000
+makeoptions    TRAMP_ARCH_FLAGS="-mabi=64 -march=mips64"
+
+options        SCHED_ULE               # ULE scheduler
+#options       VERBOSE_SYSINIT
+#options       SCHED_4BSD              # 4BSD scheduler
+options         SMP
+options        PREEMPTION              # Enable kernel thread preemption
+#options       FULL_PREEMPTION         # Enable kernel thread preemption
+options        INET                    # InterNETworking
+options        INET6                   # IPv6 communications protocols
+options        FFS                     # Berkeley Fast Filesystem
+#options       SOFTUPDATES             # Enable FFS soft updates support
+options        UFS_ACL                 # Support for access control lists
+options        UFS_DIRHASH             # Improve performance on big directories
+options                NFSCL
+options                NFS_ROOT
+options                MSDOSFS                 #MSDOS Filesystem
+#
+#options       BOOTP
+#options       BOOTP_NFSROOT
+#options       BOOTP_NFSV3
+#options       BOOTP_WIRED_TO=nlge0
+#options       BOOTP_COMPAT
+#options       ROOTDEVNAME=\"nfs:10.1.1.8:/usr/extra/nfsroot\"
+#
+options        MD_ROOT                 # MD is a potential root device
+options                MD_ROOT_SIZE=27000
+options                ROOTDEVNAME=\"ufs:md0\"
+options        _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time 
extensions
+options        HZ=1000 
+options        NO_SWAPPING
+
+#Debugging options
+options        KTRACE                  # ktrace(1) support
+options        DDB
+options        KDB
+options        GDB
+options        BREAK_TO_DEBUGGER
+options        ALT_BREAK_TO_DEBUGGER
+#options       DEADLKRES               #Enable the deadlock resolver
+#options       INVARIANTS              #Enable calls of extra sanity checking
+#options       INVARIANT_SUPPORT       #Extra sanity checks of internal 
structures, required by INVARIANTS
+#options       WITNESS                 #Enable checks to detect deadlocks and 
cycles
+#options       WITNESS_SKIPSPIN        #Don't run witness on spinlocks for 
speed
+#options       KTR                     # ktr(4) and ktrdump(8) support
+#options       
KTR_COMPILE=(KTR_LOCK|KTR_PROC|KTR_INTR|KTR_CALLOUT|KTR_UMA|KTR_SYSC)
+#options       KTR_ENTRIES=131072
+#options       LOCK_DEBUG
+#options       LOCK_PROFILING
+
+
+# Pseudo
+device         loop
+device         random
+device         md
+device         pty
+device         bpf
+
+# UART
+device         uart
+
+# Network
+device         ether

Added: head/sys/mips/conf/XLPN32
==============================================================================
--- /dev/null   00:00:00 1970   (empty, because file is newly added)
+++ head/sys/mips/conf/XLPN32   Sat Jul 16 20:31:29 2011        (r224115)
@@ -0,0 +1,94 @@
+# XLPN32 -- Generic kernel configuration file for FreeBSD/mips
+#
+# For more information on this file, please read the handbook section on
+# Kernel Configuration Files:
+#
+#    
http://www.FreeBSD.org/doc/en_US.ISO8859-1/books/handbook/kernelconfig-config.html
+#
+# The handbook is also available locally in /usr/share/doc/handbook
+# if you've installed the doc distribution, otherwise always see the
+# FreeBSD World Wide Web server (http://www.FreeBSD.org/) for the
+# latest information.
+#
+# An exhaustive list of options and more detailed explanations of the
+# device lines is also present in the ../../conf/NOTES and NOTES files. 
+# If you are in doubt as to the purpose or necessity of a line, check first 
+# in NOTES.
+#
+# $FreeBSD$
+
+machine        mips mipsn32eb
+ident           XLPN32
+
+options        ISA_MIPS64
+makeoptions    ARCH_FLAGS="-march=mips64 -mabi=n32"
+makeoptions    KERNLOADADDR=0x80100000
+
+include                "../nlm/std.xlp"
+makeoptions    MODULES_OVERRIDE=""
+makeoptions    DEBUG=-g                # Build kernel with gdb(1) debug symbols
+#profile       2
+makeoptions    TRAMPLOADADDR=0xffffffff85000000
+makeoptions    TRAMP_ARCH_FLAGS="-mabi=64 -march=mips64"
+
+options        SCHED_ULE               # ULE scheduler
+#options       VERBOSE_SYSINIT
+#options       SCHED_4BSD              # 4BSD scheduler
+options         SMP
+options        PREEMPTION              # Enable kernel thread preemption
+#options       FULL_PREEMPTION         # Enable kernel thread preemption
+options        INET                    # InterNETworking
+options        INET6                   # IPv6 communications protocols
+options        FFS                     # Berkeley Fast Filesystem
+#options       SOFTUPDATES             # Enable FFS soft updates support
+options        UFS_ACL                 # Support for access control lists
+options        UFS_DIRHASH             # Improve performance on big directories
+options                NFSCL
+options                NFS_ROOT
+options                MSDOSFS                 #MSDOS Filesystem
+#
+#options       BOOTP
+#options       BOOTP_NFSROOT
+#options       BOOTP_NFSV3
+#options       BOOTP_WIRED_TO=nlge0
+#options       BOOTP_COMPAT
+#options       ROOTDEVNAME=\"nfs:10.1.1.8:/usr/extra/nfsroot\"
+#
+options        MD_ROOT                 # MD is a potential root device
+options                MD_ROOT_SIZE=27000
+options                ROOTDEVNAME=\"ufs:md0\"
+options        _KPOSIX_PRIORITY_SCHEDULING # POSIX P1003_1B real-time 
extensions
+options        HZ=1000 
+options        NO_SWAPPING
+
+#Debugging options
+options        KTRACE                  # ktrace(1) support
+options        DDB
+options        KDB
+options        GDB
+options        BREAK_TO_DEBUGGER
+options        ALT_BREAK_TO_DEBUGGER
+#options       DEADLKRES               #Enable the deadlock resolver
+#options       INVARIANTS              #Enable calls of extra sanity checking
+#options       INVARIANT_SUPPORT       #Extra sanity checks of internal 
structures, required by INVARIANTS
+#options       WITNESS                 #Enable checks to detect deadlocks and 
cycles
+#options       WITNESS_SKIPSPIN        #Don't run witness on spinlocks for 
speed
+#options       KTR                     # ktr(4) and ktrdump(8) support
+#options       
KTR_COMPILE=(KTR_LOCK|KTR_PROC|KTR_INTR|KTR_CALLOUT|KTR_UMA|KTR_SYSC)
+#options       KTR_ENTRIES=131072
+#options       LOCK_DEBUG
+#options       LOCK_PROFILING
+
+
+# Pseudo
+device         loop
+device         random
+device         md
+device         pty
+device         bpf
+
+# UART
+device         uart
+
+# Network
+device         ether

Modified: head/sys/mips/include/bus.h
==============================================================================
--- head/sys/mips/include/bus.h Sat Jul 16 20:16:49 2011        (r224114)
+++ head/sys/mips/include/bus.h Sat Jul 16 20:31:29 2011        (r224115)
@@ -721,7 +721,7 @@ void        __bs_c(f,_bs_c_8) (void *t, bus_spa
 DECLARE_BUS_SPACE_PROTOTYPES(generic);
 extern bus_space_tag_t mips_bus_space_generic;
 /* Special bus space for RMI processors */
-#ifdef CPU_RMI
+#if defined(CPU_RMI) || defined (CPU_NLM)
 extern bus_space_tag_t rmi_bus_space;
 extern bus_space_tag_t rmi_pci_bus_space;
 #endif

Modified: head/sys/mips/include/cpufunc.h
==============================================================================
--- head/sys/mips/include/cpufunc.h     Sat Jul 16 20:16:49 2011        
(r224114)
+++ head/sys/mips/include/cpufunc.h     Sat Jul 16 20:31:29 2011        
(r224115)
@@ -254,6 +254,10 @@ MIPS_RW32_COP0_SEL(config3, MIPS_COP_0_C
 #ifdef CPU_CNMIPS
 MIPS_RW32_COP0_SEL(config4, MIPS_COP_0_CONFIG, 4);
 #endif
+#ifdef CPU_NLM
+MIPS_RW32_COP0_SEL(config6, MIPS_COP_0_CONFIG, 6);
+MIPS_RW32_COP0_SEL(config7, MIPS_COP_0_CONFIG, 7);
+#endif
 MIPS_RW32_COP0(count, MIPS_COP_0_COUNT);
 MIPS_RW32_COP0(index, MIPS_COP_0_TLB_INDEX);
 MIPS_RW32_COP0(wired, MIPS_COP_0_TLB_WIRED);

Modified: head/sys/mips/include/intr_machdep.h
==============================================================================
--- head/sys/mips/include/intr_machdep.h        Sat Jul 16 20:16:49 2011        
(r224114)
+++ head/sys/mips/include/intr_machdep.h        Sat Jul 16 20:31:29 2011        
(r224115)
@@ -29,7 +29,7 @@
 #ifndef        _MACHINE_INTR_MACHDEP_H_
 #define        _MACHINE_INTR_MACHDEP_H_
 
-#ifdef CPU_RMI
+#if defined(CPU_RMI) || defined(CPU_NLM)
 #define XLR_MAX_INTR 64 
 #else
 #define NHARD_IRQS     6

Modified: head/sys/mips/mips/cache.c
==============================================================================
--- head/sys/mips/mips/cache.c  Sat Jul 16 20:16:49 2011        (r224114)
+++ head/sys/mips/mips/cache.c  Sat Jul 16 20:31:29 2011        (r224115)
@@ -80,6 +80,11 @@ __FBSDID("$FreeBSD$");
 
 struct mips_cache_ops mips_cache_ops;
 
+static void
+cache_noop(vm_offset_t va, vm_size_t size)
+{
+}
+
 void
 mips_config_cache(struct mips_cpuinfo * cpuinfo)
 {
@@ -94,8 +99,13 @@ mips_config_cache(struct mips_cpuinfo * 
                break;
        case 32:
                mips_cache_ops.mco_icache_sync_all = mipsNN_icache_sync_all_32;
+#ifdef CPU_NLM
+               mips_cache_ops.mco_icache_sync_range =
+                   mipsNN_icache_sync_range_index_32;
+#else
                mips_cache_ops.mco_icache_sync_range =
                    mipsNN_icache_sync_range_32;
+#endif
                mips_cache_ops.mco_icache_sync_range_index =
                    mipsNN_icache_sync_range_index_32;
                break;
@@ -143,16 +153,26 @@ mips_config_cache(struct mips_cpuinfo * 
                mips_cache_ops.mco_pdcache_wbinv_all =
                    mips_cache_ops.mco_intern_pdcache_wbinv_all =
                    mipsNN_pdcache_wbinv_all_32;
+#ifdef CPU_NLM
+               mips_cache_ops.mco_pdcache_wbinv_range =
+                   mipsNN_pdcache_wbinv_range_index_32;
+#else
                mips_cache_ops.mco_pdcache_wbinv_range =
                    mipsNN_pdcache_wbinv_range_32;
+#endif
                mips_cache_ops.mco_pdcache_wbinv_range_index =
                    mips_cache_ops.mco_intern_pdcache_wbinv_range_index =
                    mipsNN_pdcache_wbinv_range_index_32;
                mips_cache_ops.mco_pdcache_inv_range =
                    mipsNN_pdcache_inv_range_32;
+#if defined(CPU_RMI) || defined(CPU_NLM)
+               mips_cache_ops.mco_pdcache_wb_range =
+                   mips_cache_ops.mco_intern_pdcache_wb_range = cache_noop;
+#else
                mips_cache_ops.mco_pdcache_wb_range =
                    mips_cache_ops.mco_intern_pdcache_wb_range =
                    mipsNN_pdcache_wb_range_32;
+#endif
                break;
 #ifdef CPU_CNMIPS
        case 128:

Modified: head/sys/mips/mips/cache_mipsNN.c
==============================================================================
--- head/sys/mips/mips/cache_mipsNN.c   Sat Jul 16 20:16:49 2011        
(r224114)
+++ head/sys/mips/mips/cache_mipsNN.c   Sat Jul 16 20:31:29 2011        
(r224115)
@@ -54,15 +54,36 @@ __FBSDID("$FreeBSD$");
 #define        round_line32(x)         (((x) + 31) & ~31)
 #define        trunc_line32(x)         ((x) & ~31)
 
+#if defined(CPU_NLM)
+static __inline void
+xlp_sync(void)
+{
+        __asm __volatile (
+           ".set push              \n"
+           ".set noreorder         \n"
+           ".set mips64            \n"
+           "dla    $8, 1f          \n"
+           "/* jr.hb $8 */         \n"
+           ".word 0x1000408        \n"
+           "nop                    \n"
+        "1: nop                    \n"
+           ".set pop               \n"
+           : : : "$8");
+}
+#endif
 
-#ifdef SB1250_PASS1
+#if defined(SB1250_PASS1)
 #define        SYNC    __asm volatile("sync; sync")
+#elif defined(CPU_NLM)
+#define SYNC   xlp_sync()
 #else
 #define        SYNC    __asm volatile("sync")
 #endif
 
-#ifdef CPU_CNMIPS
+#if defined(CPU_CNMIPS)
 #define SYNCI  mips_sync_icache();
+#elif defined(CPU_NLM)
+#define SYNCI  xlp_sync()
 #else
 #define SYNCI
 #endif

Modified: head/sys/mips/mips/cpu.c
==============================================================================
--- head/sys/mips/mips/cpu.c    Sat Jul 16 20:16:49 2011        (r224114)
+++ head/sys/mips/mips/cpu.c    Sat Jul 16 20:31:29 2011        (r224115)
@@ -101,8 +101,14 @@ mips_get_identity(struct mips_cpuinfo *c
 
        /* Learn TLB size and L1 cache geometry. */
        cfg1 = mips_rd_config1();
+#ifndef CPU_NLM
        cpuinfo->tlb_nentries = 
            ((cfg1 & MIPS_CONFIG1_TLBSZ_MASK) >> MIPS_CONFIG1_TLBSZ_SHIFT) + 1;
+#else
+       /* Account for Extended TLB entries in XLP */
+       tmp = mips_rd_config6();
+       cpuinfo->tlb_nentries = ((tmp >> 16) & 0xffff) + 1;
+#endif
 
        /* Add extended TLB size information from config4.  */
 #if defined(CPU_CNMIPS)

Modified: head/sys/mips/mips/exception.S
==============================================================================
--- head/sys/mips/mips/exception.S      Sat Jul 16 20:16:49 2011        
(r224114)
+++ head/sys/mips/mips/exception.S      Sat Jul 16 20:31:29 2011        
(r224115)
@@ -228,7 +228,7 @@ SlowFault:
        and     a0, a0, a2              ; \
         mtc0    a0, MIPS_COP_0_STATUS   ; \
        ITLBNOPFIX
-#elif defined(CPU_RMI)
+#elif defined(CPU_RMI) || defined(CPU_NLM)
 #define CLEAR_STATUS \
        mfc0    a0, MIPS_COP_0_STATUS   ;\
        li      a2, (MIPS_SR_KX | MIPS_SR_UX | MIPS_SR_COP_2_BIT) ; \
@@ -470,7 +470,7 @@ NNON_LEAF(MipsUserGenException, CALLFRAM
        and     t0, a0, ~(MIPS_SR_COP_1_BIT | MIPS_SR_EXL | MIPS3_SR_KSU_MASK | 
MIPS_SR_INT_IE)
 #if defined(CPU_CNMIPS)
        or      t0, t0, (MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX | MIPS_SR_PX)
-#elif defined(CPU_RMI) 
+#elif defined(CPU_RMI) || defined(CPU_NLM)
        or      t0, t0, (MIPS_SR_KX | MIPS_SR_UX | MIPS_SR_COP_2_BIT)
 #endif 
        mtc0    t0, MIPS_COP_0_STATUS
@@ -688,7 +688,7 @@ NNON_LEAF(MipsUserIntr, CALLFRAME_SIZ, r
        and     t0, a0, ~(MIPS_SR_COP_1_BIT | MIPS_SR_EXL | MIPS_SR_INT_IE | 
MIPS3_SR_KSU_MASK)
 #ifdef CPU_CNMIPS
        or      t0, t0, (MIPS_SR_KX | MIPS_SR_SX | MIPS_SR_UX | MIPS_SR_PX)
-#elif defined(CPU_RMI) 
+#elif defined(CPU_RMI) || defined(CPU_NLM)
        or      t0, t0, (MIPS_SR_KX | MIPS_SR_UX | MIPS_SR_COP_2_BIT)
 #endif 
        mtc0    t0, MIPS_COP_0_STATUS

Modified: head/sys/mips/mips/locore.S
==============================================================================
--- head/sys/mips/mips/locore.S Sat Jul 16 20:16:49 2011        (r224114)
+++ head/sys/mips/mips/locore.S Sat Jul 16 20:31:29 2011        (r224115)
@@ -99,7 +99,7 @@ VECTOR(_locore, unknown)
 
        /* Reset these bits */
         li     t0, ~(MIPS_SR_DE | MIPS_SR_SOFT_RESET | MIPS_SR_ERL | 
MIPS_SR_EXL | MIPS_SR_INT_IE)
-#elif defined (CPU_RMI)
+#elif defined (CPU_RMI) || defined (CPU_NLM) 
        /* Set these bits */
         li     t1, (MIPS_SR_COP_2_BIT | MIPS_SR_COP_0_BIT | MIPS_SR_KX | 
MIPS_SR_UX)
 

Modified: head/sys/mips/mips/machdep.c
==============================================================================
--- head/sys/mips/mips/machdep.c        Sat Jul 16 20:16:49 2011        
(r224114)
+++ head/sys/mips/mips/machdep.c        Sat Jul 16 20:31:29 2011        
(r224115)
@@ -338,7 +338,7 @@ mips_vector_init(void)
        bcopy(MipsTLBMiss, (void *)MIPS_UTLB_MISS_EXC_VEC,
              MipsTLBMissEnd - MipsTLBMiss);
 
-#if defined(CPU_CNMIPS) || defined(CPU_RMI)
+#if defined(CPU_CNMIPS) || defined(CPU_RMI) || defined(CPU_NLM)
 /* Fake, but sufficient, for the 32-bit with 64-bit hardware addresses  */
        bcopy(MipsTLBMiss, (void *)MIPS3_XTLB_MISS_EXC_VEC,
              MipsTLBMissEnd - MipsTLBMiss);

Modified: head/sys/mips/nlm/cms.c
==============================================================================
--- head/sys/mips/nlm/cms.c     Sat Jul 16 20:16:49 2011        (r224114)
+++ head/sys/mips/nlm/cms.c     Sat Jul 16 20:31:29 2011        (r224115)
@@ -257,13 +257,14 @@ xlp_handle_msg_vc(int vc, int max_msgs)
                        continue;
                }
                he = &msgmap[srcid];
-               if(he->action == NULL) {
+               if(he->action != NULL)
+                       (he->action)(vc, size, code, srcid, &msg, he->arg);
+#if 0 /* debug */
+               else
                        printf("[%s]: No Handler for message from stn_id=%d,"
                            " vc=%d, size=%d, msg0=%jx, dropping message\n",
                            __func__, srcid, vc, size, (uintmax_t)msg.msg[0]);
-                       continue;
-               }
-               (he->action)(vc, size, code, srcid, &msg, he->arg);
+#endif
        }
 
        return (i);

Modified: head/sys/mips/nlm/std.xlp
==============================================================================
--- head/sys/mips/nlm/std.xlp   Sat Jul 16 20:16:49 2011        (r224114)
+++ head/sys/mips/nlm/std.xlp   Sat Jul 16 20:31:29 2011        (r224115)
@@ -1,12 +1,4 @@
 # $FreeBSD$
 files  "../nlm/files.xlp"
-cpu    CPU_NLMXLP
+cpu    CPU_NLM
 
-#
-# XXXMIPS: It's a stub, isn't it?
-#
-#option        HW_PAGEWALKER
-#option        MMU_HASH_MODE  # enables hash based lookup into extended TLBs
-#option        MMU_CLOCK_GATING # enables clock gating on MMU
-#option        MMU_GLOBAL_MODE  # enables global mode of sharing all TLBs with 
all h/w threads
-#option        NOFPU

Modified: head/sys/mips/nlm/xlp_machdep.c
==============================================================================
--- head/sys/mips/nlm/xlp_machdep.c     Sat Jul 16 20:16:49 2011        
(r224114)
+++ head/sys/mips/nlm/xlp_machdep.c     Sat Jul 16 20:31:29 2011        
(r224115)
@@ -214,8 +214,7 @@ xlp_parse_mmu_options(void)
 
 unsupp:
        printf("ERROR : Unsupported CPU mask [use 1,2 or 4 threads per core].\n"
-           "\tcore0 thread mask [%lx], boot cpu mask [%lx]\n"
-           "\tUsing default, 16 TLB entries per CPU, split mode\n", 
+           "\tcore0 thread mask [%lx], boot cpu mask [%lx].\n",
            (u_long)core0_thr_mask, (u_long)cpu_map);
        panic("Invalid CPU mask - halting.\n");
        return;
@@ -495,8 +494,6 @@ platform_start(__register_t a0 __unused,
        xlp_pic_init();
 
        mips_timer_init_params(xlp_cpu_frequency, 0);
-
-       printf("Platform specific startup now completes\n");
 }
 
 void 
@@ -630,6 +627,7 @@ platform_ipi_intrnum(void) 
 void
 platform_ipi_send(int cpuid)
 {
+
        nlm_pic_send_ipi(xlp_pic_base, 0, xlp_cpuid_to_hwtid[cpuid],
            platform_ipi_intrnum(), 0);
 }
_______________________________________________
svn-src-all@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-all
To unsubscribe, send any mail to "svn-src-all-unsubscr...@freebsd.org"

Reply via email to