1*406107daSMichal Simek /* 2*406107daSMichal Simek * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu> 3*406107daSMichal Simek * Copyright (C) 2007-2009 PetaLogix 4*406107daSMichal Simek * Copyright (C) 2007 John Williams <john.williams@petalogix.com> 5*406107daSMichal Simek * 6*406107daSMichal Simek * This file is subject to the terms and conditions of the GNU General Public 7*406107daSMichal Simek * License. See the file "COPYING" in the main directory of this archive 8*406107daSMichal Simek * for more details. 9*406107daSMichal Simek */ 10*406107daSMichal Simek 11*406107daSMichal Simek #include <linux/init.h> 12*406107daSMichal Simek #include <linux/slab.h> 13*406107daSMichal Simek #include <asm/cpuinfo.h> 14*406107daSMichal Simek #include <asm/pvr.h> 15*406107daSMichal Simek 16*406107daSMichal Simek const struct cpu_ver_key cpu_ver_lookup[] = { 17*406107daSMichal Simek /* These key value are as per MBV field in PVR0 */ 18*406107daSMichal Simek {"5.00.a", 0x01}, 19*406107daSMichal Simek {"5.00.b", 0x02}, 20*406107daSMichal Simek {"5.00.c", 0x03}, 21*406107daSMichal Simek {"6.00.a", 0x04}, 22*406107daSMichal Simek {"6.00.b", 0x06}, 23*406107daSMichal Simek {"7.00.a", 0x05}, 24*406107daSMichal Simek {"7.00.b", 0x07}, 25*406107daSMichal Simek {"7.10.a", 0x08}, 26*406107daSMichal Simek {"7.10.b", 0x09}, 27*406107daSMichal Simek {"7.10.c", 0x0a}, 28*406107daSMichal Simek {"7.10.d", 0x0b}, 29*406107daSMichal Simek /* FIXME There is no keycode defined in MBV for these versions */ 30*406107daSMichal Simek {"2.10.a", 0x10}, 31*406107daSMichal Simek {"3.00.a", 0x20}, 32*406107daSMichal Simek {"4.00.a", 0x30}, 33*406107daSMichal Simek {"4.00.b", 0x40}, 34*406107daSMichal Simek {NULL, 0}, 35*406107daSMichal Simek }; 36*406107daSMichal Simek 37*406107daSMichal Simek /* 38*406107daSMichal Simek * FIXME Not sure if the actual key is defined by Xilinx in the PVR 39*406107daSMichal Simek */ 40*406107daSMichal Simek const struct family_string_key family_string_lookup[] = { 41*406107daSMichal Simek {"virtex2", 0x4}, 42*406107daSMichal Simek {"virtex2pro", 0x5}, 43*406107daSMichal Simek {"spartan3", 0x6}, 44*406107daSMichal Simek {"virtex4", 0x7}, 45*406107daSMichal Simek {"virtex5", 0x8}, 46*406107daSMichal Simek {"spartan3e", 0x9}, 47*406107daSMichal Simek {"spartan3a", 0xa}, 48*406107daSMichal Simek {"spartan3an", 0xb}, 49*406107daSMichal Simek {"spartan3adsp", 0xc}, 50*406107daSMichal Simek /* FIXME There is no key code defined for spartan2 */ 51*406107daSMichal Simek {"spartan2", 0xf0}, 52*406107daSMichal Simek {NULL, 0}, 53*406107daSMichal Simek }; 54*406107daSMichal Simek 55*406107daSMichal Simek struct cpuinfo cpuinfo; 56*406107daSMichal Simek 57*406107daSMichal Simek void __init setup_cpuinfo(void) 58*406107daSMichal Simek { 59*406107daSMichal Simek struct device_node *cpu = NULL; 60*406107daSMichal Simek 61*406107daSMichal Simek cpu = (struct device_node *) of_find_node_by_type(NULL, "cpu"); 62*406107daSMichal Simek if (!cpu) 63*406107daSMichal Simek printk(KERN_ERR "You don't have cpu!!!\n"); 64*406107daSMichal Simek 65*406107daSMichal Simek printk(KERN_INFO "%s: initialising\n", __func__); 66*406107daSMichal Simek 67*406107daSMichal Simek switch (cpu_has_pvr()) { 68*406107daSMichal Simek case 0: 69*406107daSMichal Simek printk(KERN_WARNING 70*406107daSMichal Simek "%s: No PVR support. Using static CPU info from FDT\n", 71*406107daSMichal Simek __func__); 72*406107daSMichal Simek set_cpuinfo_static(&cpuinfo, cpu); 73*406107daSMichal Simek break; 74*406107daSMichal Simek /* FIXME I found weird behavior with MB 7.00.a/b 75*406107daSMichal Simek * please do not use FULL PVR with MMU */ 76*406107daSMichal Simek case 1: 77*406107daSMichal Simek printk(KERN_INFO "%s: Using full CPU PVR support\n", 78*406107daSMichal Simek __func__); 79*406107daSMichal Simek set_cpuinfo_static(&cpuinfo, cpu); 80*406107daSMichal Simek set_cpuinfo_pvr_full(&cpuinfo, cpu); 81*406107daSMichal Simek break; 82*406107daSMichal Simek default: 83*406107daSMichal Simek printk(KERN_WARNING "%s: Unsupported PVR setting\n", __func__); 84*406107daSMichal Simek set_cpuinfo_static(&cpuinfo, cpu); 85*406107daSMichal Simek } 86*406107daSMichal Simek } 87