diff options
Diffstat (limited to 'arch/arm/mach-davinci/common.c')
-rw-r--r-- | arch/arm/mach-davinci/common.c | 57 |
1 files changed, 33 insertions, 24 deletions
diff --git a/arch/arm/mach-davinci/common.c b/arch/arm/mach-davinci/common.c index 94f27cbcd55a..1d2557394235 100644 --- a/arch/arm/mach-davinci/common.c +++ b/arch/arm/mach-davinci/common.c | |||
@@ -37,26 +37,43 @@ void davinci_get_mac_addr(struct memory_accessor *mem_acc, void *context) | |||
37 | pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr); | 37 | pr_info("Read MAC addr from EEPROM: %pM\n", mac_addr); |
38 | } | 38 | } |
39 | 39 | ||
40 | static struct davinci_id * __init davinci_get_id(u32 jtag_id) | 40 | static int __init davinci_init_id(struct davinci_soc_info *soc_info) |
41 | { | 41 | { |
42 | int i; | 42 | int i; |
43 | struct davinci_id *dip; | 43 | struct davinci_id *dip; |
44 | u8 variant = (jtag_id & 0xf0000000) >> 28; | 44 | u8 variant; |
45 | u16 part_no = (jtag_id & 0x0ffff000) >> 12; | 45 | u16 part_no; |
46 | void __iomem *base; | ||
47 | |||
48 | base = ioremap(soc_info->jtag_id_reg, SZ_4K); | ||
49 | if (!base) { | ||
50 | pr_err("Unable to map JTAG ID register\n"); | ||
51 | return -ENOMEM; | ||
52 | } | ||
53 | |||
54 | soc_info->jtag_id = __raw_readl(base); | ||
55 | iounmap(base); | ||
56 | |||
57 | variant = (soc_info->jtag_id & 0xf0000000) >> 28; | ||
58 | part_no = (soc_info->jtag_id & 0x0ffff000) >> 12; | ||
46 | 59 | ||
47 | for (i = 0, dip = davinci_soc_info.ids; i < davinci_soc_info.ids_num; | 60 | for (i = 0, dip = soc_info->ids; i < soc_info->ids_num; |
48 | i++, dip++) | 61 | i++, dip++) |
49 | /* Don't care about the manufacturer right now */ | 62 | /* Don't care about the manufacturer right now */ |
50 | if ((dip->part_no == part_no) && (dip->variant == variant)) | 63 | if ((dip->part_no == part_no) && (dip->variant == variant)) { |
51 | return dip; | 64 | soc_info->cpu_id = dip->cpu_id; |
52 | 65 | pr_info("DaVinci %s variant 0x%x\n", dip->name, | |
53 | return NULL; | 66 | dip->variant); |
67 | return 0; | ||
68 | } | ||
69 | |||
70 | pr_err("Unknown DaVinci JTAG ID 0x%x\n", soc_info->jtag_id); | ||
71 | return -EINVAL; | ||
54 | } | 72 | } |
55 | 73 | ||
56 | void __init davinci_common_init(struct davinci_soc_info *soc_info) | 74 | void __init davinci_common_init(struct davinci_soc_info *soc_info) |
57 | { | 75 | { |
58 | int ret; | 76 | int ret; |
59 | struct davinci_id *dip; | ||
60 | 77 | ||
61 | if (!soc_info) { | 78 | if (!soc_info) { |
62 | ret = -EINVAL; | 79 | ret = -EINVAL; |
@@ -77,22 +94,16 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info) | |||
77 | local_flush_tlb_all(); | 94 | local_flush_tlb_all(); |
78 | flush_cache_all(); | 95 | flush_cache_all(); |
79 | 96 | ||
97 | if (!davinci_soc_info.reset) | ||
98 | davinci_soc_info.reset = davinci_watchdog_reset; | ||
99 | |||
80 | /* | 100 | /* |
81 | * We want to check CPU revision early for cpu_is_xxxx() macros. | 101 | * We want to check CPU revision early for cpu_is_xxxx() macros. |
82 | * IO space mapping must be initialized before we can do that. | 102 | * IO space mapping must be initialized before we can do that. |
83 | */ | 103 | */ |
84 | davinci_soc_info.jtag_id = __raw_readl(davinci_soc_info.jtag_id_base); | 104 | ret = davinci_init_id(&davinci_soc_info); |
85 | 105 | if (ret < 0) | |
86 | dip = davinci_get_id(davinci_soc_info.jtag_id); | ||
87 | if (!dip) { | ||
88 | ret = -EINVAL; | ||
89 | pr_err("Unknown DaVinci JTAG ID 0x%x\n", | ||
90 | davinci_soc_info.jtag_id); | ||
91 | goto err; | 106 | goto err; |
92 | } | ||
93 | |||
94 | davinci_soc_info.cpu_id = dip->cpu_id; | ||
95 | pr_info("DaVinci %s variant 0x%x\n", dip->name, dip->variant); | ||
96 | 107 | ||
97 | if (davinci_soc_info.cpu_clks) { | 108 | if (davinci_soc_info.cpu_clks) { |
98 | ret = davinci_clk_init(davinci_soc_info.cpu_clks); | 109 | ret = davinci_clk_init(davinci_soc_info.cpu_clks); |
@@ -101,8 +112,6 @@ void __init davinci_common_init(struct davinci_soc_info *soc_info) | |||
101 | goto err; | 112 | goto err; |
102 | } | 113 | } |
103 | 114 | ||
104 | davinci_intc_base = davinci_soc_info.intc_base; | ||
105 | davinci_intc_type = davinci_soc_info.intc_type; | ||
106 | return; | 115 | return; |
107 | 116 | ||
108 | err: | 117 | err: |