1406107daSMichal Simek /*
2406107daSMichal Simek  * Copyright (C) 2007-2009 Michal Simek <monstr@monstr.eu>
3406107daSMichal Simek  * Copyright (C) 2007-2009 PetaLogix
4406107daSMichal Simek  * Copyright (C) 2007 John Williams <john.williams@petalogix.com>
5406107daSMichal Simek  *
6406107daSMichal Simek  * This file is subject to the terms and conditions of the GNU General Public
7406107daSMichal Simek  * License. See the file "COPYING" in the main directory of this archive
8406107daSMichal Simek  * for more details.
9406107daSMichal Simek  */
10406107daSMichal Simek 
11406107daSMichal Simek #include <linux/init.h>
12406107daSMichal Simek #include <asm/cpuinfo.h>
13406107daSMichal Simek #include <asm/pvr.h>
14406107daSMichal Simek 
15406107daSMichal Simek const struct cpu_ver_key cpu_ver_lookup[] = {
16406107daSMichal Simek 	/* These key value are as per MBV field in PVR0 */
17406107daSMichal Simek 	{"5.00.a", 0x01},
18406107daSMichal Simek 	{"5.00.b", 0x02},
19406107daSMichal Simek 	{"5.00.c", 0x03},
20406107daSMichal Simek 	{"6.00.a", 0x04},
21406107daSMichal Simek 	{"6.00.b", 0x06},
22406107daSMichal Simek 	{"7.00.a", 0x05},
23406107daSMichal Simek 	{"7.00.b", 0x07},
24406107daSMichal Simek 	{"7.10.a", 0x08},
25406107daSMichal Simek 	{"7.10.b", 0x09},
26406107daSMichal Simek 	{"7.10.c", 0x0a},
27406107daSMichal Simek 	{"7.10.d", 0x0b},
2894ad8eb8SMichal Simek 	{"7.20.a", 0x0c},
2994ad8eb8SMichal Simek 	{"7.20.b", 0x0d},
30f97b4f7dSJohn Williams 	{"7.20.c", 0x0e},
316cec713bSMichal Simek 	{"7.20.d", 0x0f},
32c8983a5cSMichal Simek 	{"7.30.a", 0x10},
33f66efecaSMichal Simek 	{"7.30.b", 0x11},
34f66efecaSMichal Simek 	{"8.00.a", 0x12},
35406107daSMichal Simek 	{NULL, 0},
36406107daSMichal Simek };
37406107daSMichal Simek 
38406107daSMichal Simek /*
39406107daSMichal Simek  * FIXME Not sure if the actual key is defined by Xilinx in the PVR
40406107daSMichal Simek  */
41406107daSMichal Simek const struct family_string_key family_string_lookup[] = {
42406107daSMichal Simek 	{"virtex2", 0x4},
43406107daSMichal Simek 	{"virtex2pro", 0x5},
44406107daSMichal Simek 	{"spartan3", 0x6},
45406107daSMichal Simek 	{"virtex4", 0x7},
46406107daSMichal Simek 	{"virtex5", 0x8},
47406107daSMichal Simek 	{"spartan3e", 0x9},
48406107daSMichal Simek 	{"spartan3a", 0xa},
49406107daSMichal Simek 	{"spartan3an", 0xb},
50406107daSMichal Simek 	{"spartan3adsp", 0xc},
51f97b4f7dSJohn Williams 	{"spartan6", 0xd},
52f97b4f7dSJohn Williams 	{"virtex6", 0xe},
53406107daSMichal Simek 	/* FIXME There is no key code defined for spartan2 */
54406107daSMichal Simek 	{"spartan2", 0xf0},
55406107daSMichal Simek 	{NULL, 0},
56406107daSMichal Simek };
57406107daSMichal Simek 
58406107daSMichal Simek struct cpuinfo cpuinfo;
59406107daSMichal Simek 
60406107daSMichal Simek void __init setup_cpuinfo(void)
61406107daSMichal Simek {
62406107daSMichal Simek 	struct device_node *cpu = NULL;
63406107daSMichal Simek 
64406107daSMichal Simek 	cpu = (struct device_node *) of_find_node_by_type(NULL, "cpu");
65406107daSMichal Simek 	if (!cpu)
66406107daSMichal Simek 		printk(KERN_ERR "You don't have cpu!!!\n");
67406107daSMichal Simek 
68406107daSMichal Simek 	printk(KERN_INFO "%s: initialising\n", __func__);
69406107daSMichal Simek 
70406107daSMichal Simek 	switch (cpu_has_pvr()) {
71406107daSMichal Simek 	case 0:
72406107daSMichal Simek 		printk(KERN_WARNING
73406107daSMichal Simek 			"%s: No PVR support. Using static CPU info from FDT\n",
74406107daSMichal Simek 			__func__);
75406107daSMichal Simek 		set_cpuinfo_static(&cpuinfo, cpu);
76406107daSMichal Simek 		break;
77fbeda677SMichal Simek /* FIXME I found weird behavior with MB 7.00.a/b 7.10.a
78406107daSMichal Simek  * please do not use FULL PVR with MMU */
79406107daSMichal Simek 	case 1:
80406107daSMichal Simek 		printk(KERN_INFO "%s: Using full CPU PVR support\n",
81406107daSMichal Simek 			__func__);
82406107daSMichal Simek 		set_cpuinfo_static(&cpuinfo, cpu);
83406107daSMichal Simek 		set_cpuinfo_pvr_full(&cpuinfo, cpu);
84406107daSMichal Simek 		break;
85406107daSMichal Simek 	default:
86406107daSMichal Simek 		printk(KERN_WARNING "%s: Unsupported PVR setting\n", __func__);
87406107daSMichal Simek 		set_cpuinfo_static(&cpuinfo, cpu);
88406107daSMichal Simek 	}
89406107daSMichal Simek }
90