2005-04-16 15:20:36 -07:00
/*
* Setup the right wbflush routine for the different DECstations .
*
* Created with information from :
2013-01-22 12:59:30 +01:00
* DECstation 3100 Desktop Workstation Functional Specification
* DECstation 5000 / 200 KN02 System Module Functional Specification
* mipsel - linux - objdump - - disassemble vmunix | grep " wbflush " : - )
2005-04-16 15:20:36 -07:00
*
* 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 ) 1998 Harald Koerfgen
* Copyright ( C ) 2002 Maciej W . Rozycki
*/
2017-01-28 21:05:57 -05:00
# include <linux/export.h>
2005-04-16 15:20:36 -07:00
# include <linux/init.h>
# include <asm/bootinfo.h>
# include <asm/wbflush.h>
2012-03-28 18:30:02 +01:00
# include <asm/barrier.h>
2005-04-16 15:20:36 -07:00
static void wbflush_kn01 ( void ) ;
static void wbflush_kn210 ( void ) ;
static void wbflush_mips ( void ) ;
void ( * __wbflush ) ( void ) ;
void __init wbflush_setup ( void )
{
switch ( mips_machtype ) {
case MACH_DS23100 :
case MACH_DS5000_200 : /* DS5000 3max */
__wbflush = wbflush_kn01 ;
break ;
case MACH_DS5100 : /* DS5100 MIPSMATE */
__wbflush = wbflush_kn210 ;
break ;
case MACH_DS5000_1XX : /* DS5000/100 3min */
case MACH_DS5000_XX : /* Personal DS5000/2x */
case MACH_DS5000_2X0 : /* DS5000/240 3max+ */
case MACH_DS5900 : /* DS5900 bigmax */
default :
__wbflush = wbflush_mips ;
break ;
}
}
/*
* For the DS3100 and DS5000 / 200 the R2020 / R3220 writeback buffer functions
* as part of Coprocessor 0.
*/
static void wbflush_kn01 ( void )
{
asm ( " .set \t push \n \t "
" .set \t noreorder \n \t "
" 1: \t bc0f \t 1b \n \t "
" nop \n \t "
" .set \t pop " ) ;
}
/*
* For the DS5100 the writeback buffer seems to be a part of Coprocessor 3.
* But CP3 has to enabled first .
*/
static void wbflush_kn210 ( void )
{
asm ( " .set \t push \n \t "
" .set \t noreorder \n \t "
" mfc0 \t $2,$12 \n \t "
" lui \t $3,0x8000 \n \t "
" or \t $3,$2,$3 \n \t "
" mtc0 \t $3,$12 \n \t "
" nop \n "
" 1: \t bc3f \t 1b \n \t "
" nop \n \t "
" mtc0 \t $2,$12 \n \t "
" nop \n \t "
" .set \t pop "
: : : " $2 " , " $3 " ) ;
}
/*
* I / O ASIC systems use a standard writeback buffer that gets flushed
* upon an uncached read .
*/
static void wbflush_mips ( void )
{
__fast_iob ( ) ;
}
EXPORT_SYMBOL ( __wbflush ) ;