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