Commit 3347db8392486a1b52aab980cc445cf505c36d45
Committed by
Kevin Hilman
1 parent
db6db5d847
Davinci: jtag_id - use ioremap()
This patch replaces the jtag id base info in davinci_soc_info with a physical address which is then ioremap()ed within common code. This patch (in combination with a similar change for PSC) will allow us to eliminate the SYSCFG nastiness in DA8xx code. Signed-off-by: Cyril Chemparathy <cyril@ti.com> Signed-off-by: Kevin Hilman <khilman@deeprootsystems.com>
Showing 8 changed files with 37 additions and 31 deletions Side-by-side Diff
arch/arm/mach-davinci/common.c
... | ... | @@ -37,26 +37,43 @@ |
37 | 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; | |
43 | - struct davinci_id *dip; | |
44 | - u8 variant = (jtag_id & 0xf0000000) >> 28; | |
45 | - u16 part_no = (jtag_id & 0x0ffff000) >> 12; | |
42 | + int i; | |
43 | + struct davinci_id *dip; | |
44 | + u8 variant; | |
45 | + u16 part_no; | |
46 | + void __iomem *base; | |
46 | 47 | |
47 | - for (i = 0, dip = davinci_soc_info.ids; i < davinci_soc_info.ids_num; | |
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; | |
59 | + | |
60 | + for (i = 0, dip = soc_info->ids; i < soc_info->ids_num; | |
48 | 61 | i++, dip++) |
49 | 62 | /* Don't care about the manufacturer right now */ |
50 | - if ((dip->part_no == part_no) && (dip->variant == variant)) | |
51 | - return dip; | |
63 | + if ((dip->part_no == part_no) && (dip->variant == variant)) { | |
64 | + soc_info->cpu_id = dip->cpu_id; | |
65 | + pr_info("DaVinci %s variant 0x%x\n", dip->name, | |
66 | + dip->variant); | |
67 | + return 0; | |
68 | + } | |
52 | 69 | |
53 | - return NULL; | |
70 | + pr_err("Unknown DaVinci JTAG ID 0x%x\n", soc_info->jtag_id); | |
71 | + return -EINVAL; | |
54 | 72 | } |
55 | 73 | |
56 | 74 | void __init davinci_common_init(struct davinci_soc_info *soc_info) |
57 | 75 | { |
58 | 76 | int ret; |
59 | - struct davinci_id *dip; | |
60 | 77 | |
61 | 78 | if (!soc_info) { |
62 | 79 | ret = -EINVAL; |
63 | 80 | |
... | ... | @@ -84,18 +101,9 @@ |
84 | 101 | * We want to check CPU revision early for cpu_is_xxxx() macros. |
85 | 102 | * IO space mapping must be initialized before we can do that. |
86 | 103 | */ |
87 | - davinci_soc_info.jtag_id = __raw_readl(davinci_soc_info.jtag_id_base); | |
88 | - | |
89 | - dip = davinci_get_id(davinci_soc_info.jtag_id); | |
90 | - if (!dip) { | |
91 | - ret = -EINVAL; | |
92 | - pr_err("Unknown DaVinci JTAG ID 0x%x\n", | |
93 | - davinci_soc_info.jtag_id); | |
104 | + ret = davinci_init_id(&davinci_soc_info); | |
105 | + if (ret < 0) | |
94 | 106 | goto err; |
95 | - } | |
96 | - | |
97 | - davinci_soc_info.cpu_id = dip->cpu_id; | |
98 | - pr_info("DaVinci %s variant 0x%x\n", dip->name, dip->variant); | |
99 | 107 | |
100 | 108 | if (davinci_soc_info.cpu_clks) { |
101 | 109 | ret = davinci_clk_init(davinci_soc_info.cpu_clks); |
arch/arm/mach-davinci/da830.c
... | ... | @@ -1188,6 +1188,7 @@ |
1188 | 1188 | static struct davinci_soc_info davinci_soc_info_da830 = { |
1189 | 1189 | .io_desc = da830_io_desc, |
1190 | 1190 | .io_desc_num = ARRAY_SIZE(da830_io_desc), |
1191 | + .jtag_id_reg = DA8XX_SYSCFG0_BASE + DA8XX_JTAG_ID_REG, | |
1191 | 1192 | .ids = da830_ids, |
1192 | 1193 | .ids_num = ARRAY_SIZE(da830_ids), |
1193 | 1194 | .cpu_clks = da830_clks, |
... | ... | @@ -1215,8 +1216,6 @@ |
1215 | 1216 | if (WARN(!da8xx_syscfg0_base, "Unable to map syscfg0 module")) |
1216 | 1217 | return; |
1217 | 1218 | |
1218 | - davinci_soc_info_da830.jtag_id_base = | |
1219 | - DA8XX_SYSCFG0_VIRT(DA8XX_JTAG_ID_REG); | |
1220 | 1219 | davinci_soc_info_da830.pinmux_base = DA8XX_SYSCFG0_VIRT(0x120); |
1221 | 1220 | |
1222 | 1221 | davinci_common_init(&davinci_soc_info_da830); |
arch/arm/mach-davinci/da850.c
... | ... | @@ -1073,6 +1073,7 @@ |
1073 | 1073 | static struct davinci_soc_info davinci_soc_info_da850 = { |
1074 | 1074 | .io_desc = da850_io_desc, |
1075 | 1075 | .io_desc_num = ARRAY_SIZE(da850_io_desc), |
1076 | + .jtag_id_reg = DA8XX_SYSCFG0_BASE + DA8XX_JTAG_ID_REG, | |
1076 | 1077 | .ids = da850_ids, |
1077 | 1078 | .ids_num = ARRAY_SIZE(da850_ids), |
1078 | 1079 | .cpu_clks = da850_clks, |
... | ... | @@ -1108,8 +1109,6 @@ |
1108 | 1109 | if (WARN(!da8xx_syscfg1_base, "Unable to map syscfg1 module")) |
1109 | 1110 | return; |
1110 | 1111 | |
1111 | - davinci_soc_info_da850.jtag_id_base = | |
1112 | - DA8XX_SYSCFG0_VIRT(DA8XX_JTAG_ID_REG); | |
1113 | 1112 | davinci_soc_info_da850.pinmux_base = DA8XX_SYSCFG0_VIRT(0x120); |
1114 | 1113 | |
1115 | 1114 | davinci_common_init(&davinci_soc_info_da850); |
arch/arm/mach-davinci/dm355.c
... | ... | @@ -840,7 +840,7 @@ |
840 | 840 | static struct davinci_soc_info davinci_soc_info_dm355 = { |
841 | 841 | .io_desc = dm355_io_desc, |
842 | 842 | .io_desc_num = ARRAY_SIZE(dm355_io_desc), |
843 | - .jtag_id_base = IO_ADDRESS(0x01c40028), | |
843 | + .jtag_id_reg = 0x01c40028, | |
844 | 844 | .ids = dm355_ids, |
845 | 845 | .ids_num = ARRAY_SIZE(dm355_ids), |
846 | 846 | .cpu_clks = dm355_clks, |
arch/arm/mach-davinci/dm365.c
... | ... | @@ -1045,7 +1045,7 @@ |
1045 | 1045 | static struct davinci_soc_info davinci_soc_info_dm365 = { |
1046 | 1046 | .io_desc = dm365_io_desc, |
1047 | 1047 | .io_desc_num = ARRAY_SIZE(dm365_io_desc), |
1048 | - .jtag_id_base = IO_ADDRESS(0x01c40028), | |
1048 | + .jtag_id_reg = 0x01c40028, | |
1049 | 1049 | .ids = dm365_ids, |
1050 | 1050 | .ids_num = ARRAY_SIZE(dm365_ids), |
1051 | 1051 | .cpu_clks = dm365_clks, |
arch/arm/mach-davinci/dm644x.c
... | ... | @@ -731,7 +731,7 @@ |
731 | 731 | static struct davinci_soc_info davinci_soc_info_dm644x = { |
732 | 732 | .io_desc = dm644x_io_desc, |
733 | 733 | .io_desc_num = ARRAY_SIZE(dm644x_io_desc), |
734 | - .jtag_id_base = IO_ADDRESS(0x01c40028), | |
734 | + .jtag_id_reg = 0x01c40028, | |
735 | 735 | .ids = dm644x_ids, |
736 | 736 | .ids_num = ARRAY_SIZE(dm644x_ids), |
737 | 737 | .cpu_clks = dm644x_clks, |
arch/arm/mach-davinci/dm646x.c
... | ... | @@ -815,7 +815,7 @@ |
815 | 815 | static struct davinci_soc_info davinci_soc_info_dm646x = { |
816 | 816 | .io_desc = dm646x_io_desc, |
817 | 817 | .io_desc_num = ARRAY_SIZE(dm646x_io_desc), |
818 | - .jtag_id_base = IO_ADDRESS(0x01c40028), | |
818 | + .jtag_id_reg = 0x01c40028, | |
819 | 819 | .ids = dm646x_ids, |
820 | 820 | .ids_num = ARRAY_SIZE(dm646x_ids), |
821 | 821 | .cpu_clks = dm646x_clks, |
arch/arm/mach-davinci/include/mach/common.h