Commit 3347db8392486a1b52aab980cc445cf505c36d45

Authored by Cyril Chemparathy
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
... ... @@ -45,7 +45,7 @@
45 45 unsigned long io_desc_num;
46 46 u32 cpu_id;
47 47 u32 jtag_id;
48   - void __iomem *jtag_id_base;
  48 + u32 jtag_id_reg;
49 49 struct davinci_id *ids;
50 50 unsigned long ids_num;
51 51 struct clk_lookup *cpu_clks;