root/arch/mips/dec/wbflush.c

/* [<][>][^][v][top][bottom][index][help] */

DEFINITIONS

This source file includes following definitions.
  1. wbflush_setup
  2. wbflush_kn01
  3. wbflush_kn210
  4. wbflush_mips

   1 /*
   2  * Setup the right wbflush routine for the different DECstations.
   3  *
   4  * Created with information from:
   5  *      DECstation 3100 Desktop Workstation Functional Specification
   6  *      DECstation 5000/200 KN02 System Module Functional Specification
   7  *      mipsel-linux-objdump --disassemble vmunix | grep "wbflush" :-)
   8  *
   9  * This file is subject to the terms and conditions of the GNU General Public
  10  * License.  See the file "COPYING" in the main directory of this archive
  11  * for more details.
  12  *
  13  * Copyright (C) 1998 Harald Koerfgen
  14  * Copyright (C) 2002 Maciej W. Rozycki
  15  */
  16 
  17 #include <linux/export.h>
  18 #include <linux/init.h>
  19 
  20 #include <asm/bootinfo.h>
  21 #include <asm/wbflush.h>
  22 #include <asm/barrier.h>
  23 
  24 static void wbflush_kn01(void);
  25 static void wbflush_kn210(void);
  26 static void wbflush_mips(void);
  27 
  28 void (*__wbflush) (void);
  29 
  30 void __init wbflush_setup(void)
  31 {
  32         switch (mips_machtype) {
  33         case MACH_DS23100:
  34         case MACH_DS5000_200:   /* DS5000 3max */
  35                 __wbflush = wbflush_kn01;
  36                 break;
  37         case MACH_DS5100:       /* DS5100 MIPSMATE */
  38                 __wbflush = wbflush_kn210;
  39                 break;
  40         case MACH_DS5000_1XX:   /* DS5000/100 3min */
  41         case MACH_DS5000_XX:    /* Personal DS5000/2x */
  42         case MACH_DS5000_2X0:   /* DS5000/240 3max+ */
  43         case MACH_DS5900:       /* DS5900 bigmax */
  44         default:
  45                 __wbflush = wbflush_mips;
  46                 break;
  47         }
  48 }
  49 
  50 /*
  51  * For the DS3100 and DS5000/200 the R2020/R3220 writeback buffer functions
  52  * as part of Coprocessor 0.
  53  */
  54 static void wbflush_kn01(void)
  55 {
  56     asm(".set\tpush\n\t"
  57         ".set\tnoreorder\n\t"
  58         "1:\tbc0f\t1b\n\t"
  59         "nop\n\t"
  60         ".set\tpop");
  61 }
  62 
  63 /*
  64  * For the DS5100 the writeback buffer seems to be a part of Coprocessor 3.
  65  * But CP3 has to enabled first.
  66  */
  67 static void wbflush_kn210(void)
  68 {
  69     asm(".set\tpush\n\t"
  70         ".set\tnoreorder\n\t"
  71         "mfc0\t$2,$12\n\t"
  72         "lui\t$3,0x8000\n\t"
  73         "or\t$3,$2,$3\n\t"
  74         "mtc0\t$3,$12\n\t"
  75         "nop\n"
  76         "1:\tbc3f\t1b\n\t"
  77         "nop\n\t"
  78         "mtc0\t$2,$12\n\t"
  79         "nop\n\t"
  80         ".set\tpop"
  81         : : : "$2", "$3");
  82 }
  83 
  84 /*
  85  * I/O ASIC systems use a standard writeback buffer that gets flushed
  86  * upon an uncached read.
  87  */
  88 static void wbflush_mips(void)
  89 {
  90         __fast_iob();
  91 }
  92 EXPORT_SYMBOL(__wbflush);

/* [<][>][^][v][top][bottom][index][help] */