2007-07-12 16:25:29 +08:00
/*
* Copyright 2004 - 2007 Analog Devices Inc .
*
* 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 .
*
* This program is distributed in the hope that it will be useful ,
* but WITHOUT ANY WARRANTY ; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE . See the
* GNU General Public License for more details .
*
* You should have received a copy of the GNU General Public License
* along with this program ; if not , see the file COPYING , or write
* to the Free Software Foundation , Inc . ,
* 51 Franklin St , Fifth Floor , Boston , MA 02110 - 1301 USA
*/
# include <linux/cpu.h>
# include <asm/cacheflush.h>
# include <asm/blackfin.h>
2007-10-10 23:55:26 +08:00
# include <asm/cplb.h>
2007-07-12 16:25:29 +08:00
# include <asm/cplbinit.h>
2007-10-10 23:55:26 +08:00
# if defined(CONFIG_BFIN_ICACHE)
2009-01-07 23:14:38 +08:00
void __cpuinit bfin_icache_init ( struct cplb_entry * icplb_tbl )
2007-07-12 16:25:29 +08:00
{
unsigned long ctrl ;
int i ;
2009-01-07 23:14:38 +08:00
SSYNC ( ) ;
2007-07-12 16:25:29 +08:00
for ( i = 0 ; i < MAX_CPLBS ; i + + ) {
2009-01-07 23:14:38 +08:00
bfin_write32 ( ICPLB_ADDR0 + i * 4 , icplb_tbl [ i ] . addr ) ;
bfin_write32 ( ICPLB_DATA0 + i * 4 , icplb_tbl [ i ] . data ) ;
2007-07-12 16:25:29 +08:00
}
ctrl = bfin_read_IMEM_CONTROL ( ) ;
ctrl | = IMC | ENICPLB ;
bfin_write_IMEM_CONTROL ( ctrl ) ;
2008-01-22 19:23:50 +08:00
SSYNC ( ) ;
2007-07-12 16:25:29 +08:00
}
# endif
2007-10-10 23:55:26 +08:00
# if defined(CONFIG_BFIN_DCACHE)
2009-01-07 23:14:38 +08:00
void __cpuinit bfin_dcache_init ( struct cplb_entry * dcplb_tbl )
2007-07-12 16:25:29 +08:00
{
unsigned long ctrl ;
int i ;
2009-01-07 23:14:38 +08:00
SSYNC ( ) ;
2007-07-12 16:25:29 +08:00
for ( i = 0 ; i < MAX_CPLBS ; i + + ) {
2009-01-07 23:14:38 +08:00
bfin_write32 ( DCPLB_ADDR0 + i * 4 , dcplb_tbl [ i ] . addr ) ;
bfin_write32 ( DCPLB_DATA0 + i * 4 , dcplb_tbl [ i ] . data ) ;
2007-07-12 16:25:29 +08:00
}
2009-01-07 23:14:38 +08:00
2007-07-12 16:25:29 +08:00
ctrl = bfin_read_DMEM_CONTROL ( ) ;
ctrl | = DMEM_CNTR ;
bfin_write_DMEM_CONTROL ( ctrl ) ;
2008-01-22 19:23:50 +08:00
SSYNC ( ) ;
2007-07-12 16:25:29 +08:00
}
# endif