2009-03-27 14:25:11 +01:00
/*
* Copyright ( C ) 2007 - 2009 Michal Simek < monstr @ monstr . eu >
* Copyright ( C ) 2007 - 2009 PetaLogix
* Copyright ( C ) 2007 John Williams < john . williams @ petalogix . com >
*
* 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 .
*/
# include <linux/init.h>
# include <asm/cpuinfo.h>
# include <asm/pvr.h>
const struct cpu_ver_key cpu_ver_lookup [ ] = {
/* These key value are as per MBV field in PVR0 */
{ " 5.00.a " , 0x01 } ,
{ " 5.00.b " , 0x02 } ,
{ " 5.00.c " , 0x03 } ,
{ " 6.00.a " , 0x04 } ,
{ " 6.00.b " , 0x06 } ,
{ " 7.00.a " , 0x05 } ,
{ " 7.00.b " , 0x07 } ,
{ " 7.10.a " , 0x08 } ,
{ " 7.10.b " , 0x09 } ,
{ " 7.10.c " , 0x0a } ,
{ " 7.10.d " , 0x0b } ,
2009-07-21 12:47:04 +02:00
{ " 7.20.a " , 0x0c } ,
{ " 7.20.b " , 0x0d } ,
2009-09-22 09:13:04 +10:00
{ " 7.20.c " , 0x0e } ,
2009-10-15 13:34:31 +02:00
{ " 7.20.d " , 0x0f } ,
2009-12-08 17:54:07 +01:00
{ " 7.30.a " , 0x10 } ,
2010-08-13 12:44:17 +02:00
{ " 7.30.b " , 0x11 } ,
{ " 8.00.a " , 0x12 } ,
2010-12-28 14:44:51 +01:00
{ " 8.00.b " , 0x13 } ,
2011-02-09 14:23:34 +01:00
{ " 8.10.a " , 0x14 } ,
2011-05-23 13:06:43 +02:00
{ " 8.20.a " , 0x15 } ,
2012-02-22 13:50:13 +01:00
{ " 8.20.b " , 0x16 } ,
{ " 8.30.a " , 0x17 } ,
2012-12-19 10:52:19 +01:00
{ " 8.40.a " , 0x18 } ,
{ " 8.40.b " , 0x19 } ,
2009-03-27 14:25:11 +01:00
{ NULL , 0 } ,
} ;
/*
* FIXME Not sure if the actual key is defined by Xilinx in the PVR
*/
const struct family_string_key family_string_lookup [ ] = {
{ " virtex2 " , 0x4 } ,
{ " virtex2pro " , 0x5 } ,
{ " spartan3 " , 0x6 } ,
{ " virtex4 " , 0x7 } ,
{ " virtex5 " , 0x8 } ,
{ " spartan3e " , 0x9 } ,
{ " spartan3a " , 0xa } ,
{ " spartan3an " , 0xb } ,
{ " spartan3adsp " , 0xc } ,
2009-09-22 09:13:04 +10:00
{ " spartan6 " , 0xd } ,
{ " virtex6 " , 0xe } ,
2009-03-27 14:25:11 +01:00
/* FIXME There is no key code defined for spartan2 */
{ " spartan2 " , 0xf0 } ,
2012-12-19 10:52:19 +01:00
{ " kintex7 " , 0x10 } ,
{ " artix7 " , 0x11 } ,
{ " zynq7000 " , 0x12 } ,
2009-03-27 14:25:11 +01:00
{ NULL , 0 } ,
} ;
struct cpuinfo cpuinfo ;
void __init setup_cpuinfo ( void )
{
struct device_node * cpu = NULL ;
cpu = ( struct device_node * ) of_find_node_by_type ( NULL , " cpu " ) ;
if ( ! cpu )
2012-12-27 10:40:38 +01:00
pr_err ( " You don't have cpu!!! \n " ) ;
2009-03-27 14:25:11 +01:00
2012-12-27 10:40:38 +01:00
pr_info ( " %s: initialising \n " , __func__ ) ;
2009-03-27 14:25:11 +01:00
switch ( cpu_has_pvr ( ) ) {
case 0 :
2012-12-27 10:40:38 +01:00
pr_warn ( " %s: No PVR support. Using static CPU info from FDT \n " ,
2009-03-27 14:25:11 +01:00
__func__ ) ;
set_cpuinfo_static ( & cpuinfo , cpu ) ;
break ;
2009-04-21 14:06:08 +02:00
/* FIXME I found weird behavior with MB 7.00.a/b 7.10.a
2009-03-27 14:25:11 +01:00
* please do not use FULL PVR with MMU */
case 1 :
2012-12-27 10:40:38 +01:00
pr_info ( " %s: Using full CPU PVR support \n " ,
2009-03-27 14:25:11 +01:00
__func__ ) ;
set_cpuinfo_static ( & cpuinfo , cpu ) ;
set_cpuinfo_pvr_full ( & cpuinfo , cpu ) ;
break ;
default :
2012-12-27 10:40:38 +01:00
pr_warn ( " %s: Unsupported PVR setting \n " , __func__ ) ;
2009-03-27 14:25:11 +01:00
set_cpuinfo_static ( & cpuinfo , cpu ) ;
}
2011-05-24 18:57:11 +10:00
if ( cpuinfo . mmu_privins )
2012-12-27 10:40:38 +01:00
pr_warn ( " %s: Stream instructions enabled "
2011-05-24 18:57:11 +10:00
" - USERSPACE CAN LOCK THIS KERNEL! \n " , __func__ ) ;
2009-03-27 14:25:11 +01:00
}