Commit 66e8f9da6879fe37f3159b3997bff874842dc51d

Authored by Jean-Christophe PLAGNIOL-VILLARD
Committed by Wolfgang Denk
1 parent 7893aa1eb6
Exists in master and in 55 other branches 8qm-imx_v2020.04_5.4.70_2.3.0, emb_lf_v2022.04, emb_lf_v2023.04, imx_v2015.04_4.1.15_1.0.0_ga, pitx_8mp_lf_v2020.04, smarc-8m-android-10.0.0_2.6.0, smarc-8m-android-11.0.0_2.0.0, smarc-8mp-android-11.0.0_2.0.0, smarc-emmc-imx_v2014.04_3.10.53_1.1.0_ga, smarc-emmc-imx_v2014.04_3.14.28_1.0.0_ga, smarc-imx-l5.0.0_1.0.0-ga, smarc-imx6_v2018.03_4.14.98_2.0.0_ga, smarc-imx7_v2017.03_4.9.11_1.0.0_ga, smarc-imx7_v2018.03_4.14.98_2.0.0_ga, smarc-imx_v2014.04_3.14.28_1.0.0_ga, smarc-imx_v2015.04_4.1.15_1.0.0_ga, smarc-imx_v2017.03_4.9.11_1.0.0_ga, smarc-imx_v2017.03_4.9.88_2.0.0_ga, smarc-imx_v2017.03_o8.1.0_1.3.0_8m, smarc-imx_v2018.03_4.14.78_1.0.0_ga, smarc-m6.0.1_2.1.0-ga, smarc-n7.1.2_2.0.0-ga, smarc-rel_imx_4.1.15_2.0.0_ga, smarc_8m-imx_v2018.03_4.14.98_2.0.0_ga, smarc_8m-imx_v2019.04_4.19.35_1.1.0, smarc_8m_00d0-imx_v2018.03_4.14.98_2.0.0_ga, smarc_8mm-imx_v2018.03_4.14.98_2.0.0_ga, smarc_8mm-imx_v2019.04_4.19.35_1.1.0, smarc_8mm-imx_v2020.04_5.4.24_2.1.0, smarc_8mp_lf_v2020.04, smarc_8mq-imx_v2020.04_5.4.24_2.1.0, smarc_8mq_lf_v2020.04, ti-u-boot-2015.07, u-boot-2013.01.y, v2013.10, v2013.10-smarct33, v2013.10-smartmen, v2014.01, v2014.04, v2014.04-smarct33, v2014.04-smarct33-emmc, v2014.04-smartmen, v2014.07, v2014.07-smarct33, v2014.07-smartmen, v2015.07-smarct33, v2015.07-smarct33-emmc, v2015.07-smarct4x, v2016.05-dlt, v2016.05-smarct3x, v2016.05-smarct3x-emmc, v2016.05-smarct4x, v2017.01-smarct3x, v2017.01-smarct3x-emmc, v2017.01-smarct4x

arm/dcc: use static support to allow to use it at anytime

the dcc can be used at the start of the cpu

Signed-off-by: Jean-Christophe PLAGNIOL-VILLARD <plagnioj@jcrosoft.com>

Showing 1 changed file with 42 additions and 114 deletions Side-by-side Diff

drivers/serial/arm_dcc.c
... ... @@ -29,69 +29,50 @@
29 29 #include <common.h>
30 30 #include <devices.h>
31 31  
32   -#define DCC_ARM9_RBIT (1 << 0)
33   -#define DCC_ARM9_WBIT (1 << 1)
34   -#define DCC_ARM11_RBIT (1 << 30)
35   -#define DCC_ARM11_WBIT (1 << 29)
36   -
37   -#define read_core_id(x) do { \
38   - __asm__ ("mrc p15, 0, %0, c0, c0, 0\n" : "=r" (x)); \
39   - x = (x >> 4) & 0xFFF; \
40   - } while (0);
41   -
  32 +#if defined(CONFIG_CPU_V6)
42 33 /*
43   - * ARM9
  34 + * ARMV6
44 35 */
45   -#define write_arm9_dcc(x) \
46   - __asm__ volatile ("mcr p14, 0, %0, c1, c0, 0\n" : : "r" (x))
  36 +#define DCC_RBIT (1 << 30)
  37 +#define DCC_WBIT (1 << 29)
47 38  
48   -#define read_arm9_dcc(x) \
49   - __asm__ volatile ("mrc p14, 0, %0, c1, c0, 0\n" : "=r" (x))
  39 +#define write_dcc(x) \
  40 + __asm__ volatile ("mcr p14, 0, %0, c0, c5, 0\n" : : "r" (x))
50 41  
51   -#define status_arm9_dcc(x) \
52   - __asm__ volatile ("mrc p14, 0, %0, c0, c0, 0\n" : "=r" (x))
  42 +#define read_dcc(x) \
  43 + __asm__ volatile ("mrc p14, 0, %0, c0, c5, 0\n" : "=r" (x))
53 44  
54   -#define can_read_arm9_dcc(x) do { \
55   - status_arm9_dcc(x); \
56   - x &= DCC_ARM9_RBIT; \
57   - } while (0);
  45 +#define status_dcc(x) \
  46 + __asm__ volatile ("mrc p14, 0, %0, c0, c1, 0\n" : "=r" (x))
58 47  
59   -#define can_write_arm9_dcc(x) do { \
60   - status_arm9_dcc(x); \
61   - x &= DCC_ARM9_WBIT; \
62   - x = (x == 0); \
63   - } while (0);
  48 +#else
  49 +#define DCC_RBIT (1 << 0)
  50 +#define DCC_WBIT (1 << 1)
64 51  
65   -/*
66   - * ARM11
67   - */
68   -#define write_arm11_dcc(x) \
69   - __asm__ volatile ("mcr p14, 0, %0, c0, c5, 0\n" : : "r" (x))
  52 +#define write_dcc(x) \
  53 + __asm__ volatile ("mcr p14, 0, %0, c1, c0, 0\n" : : "r" (x))
70 54  
71   -#define read_arm11_dcc(x) \
72   - __asm__ volatile ("mrc p14, 0, %0, c0, c5, 0\n" : "=r" (x))
  55 +#define read_dcc(x) \
  56 + __asm__ volatile ("mrc p14, 0, %0, c1, c0, 0\n" : "=r" (x))
73 57  
74   -#define status_arm11_dcc(x) \
75   - __asm__ volatile ("mrc p14, 0, %0, c0, c1, 0\n" : "=r" (x))
  58 +#define status_dcc(x) \
  59 + __asm__ volatile ("mrc p14, 0, %0, c0, c0, 0\n" : "=r" (x))
76 60  
77   -#define can_read_arm11_dcc(x) do { \
78   - status_arm11_dcc(x); \
79   - x &= DCC_ARM11_RBIT; \
  61 +#endif
  62 +
  63 +#define can_read_dcc(x) do { \
  64 + status_dcc(x); \
  65 + x &= DCC_RBIT; \
80 66 } while (0);
81 67  
82   -#define can_write_arm11_dcc(x) do { \
83   - status_arm11_dcc(x); \
84   - x &= DCC_ARM11_WBIT; \
85   - x = (x == 0); \
  68 +#define can_write_dcc(x) do { \
  69 + status_dcc(x); \
  70 + x &= DCC_WBIT; \
  71 + x = (x == 0); \
86 72 } while (0);
87 73  
88 74 #define TIMEOUT_COUNT 0x4000000
89 75  
90   -static enum {
91   - arm9_and_earlier,
92   - arm11_and_later
93   -} arm_type = arm9_and_earlier;
94   -
95 76 #ifndef CONFIG_ARM_DCC_MULTI
96 77 #define arm_dcc_init serial_init
97 78 void serial_setbrg(void) {}
... ... @@ -103,15 +84,6 @@
103 84  
104 85 int arm_dcc_init(void)
105 86 {
106   - register unsigned int id;
107   -
108   - read_core_id(id);
109   -
110   - if (id >= 0xb00)
111   - arm_type = arm11_and_later;
112   - else
113   - arm_type = arm9_and_earlier;
114   -
115 87 return 0;
116 88 }
117 89  
118 90  
... ... @@ -120,23 +92,11 @@
120 92 int ch;
121 93 register unsigned int reg;
122 94  
123   - switch (arm_type) {
124   - case arm11_and_later:
125   - do {
126   - can_read_arm11_dcc(reg);
127   - } while (!reg);
128   - read_arm11_dcc(ch);
129   - break;
  95 + do {
  96 + can_read_dcc(reg);
  97 + } while (!reg);
  98 + read_dcc(ch);
130 99  
131   - case arm9_and_earlier:
132   - default:
133   - do {
134   - can_read_arm9_dcc(reg);
135   - } while (!reg);
136   - read_arm9_dcc(ch);
137   - break;
138   - }
139   -
140 100 return ch;
141 101 }
142 102  
143 103  
... ... @@ -145,32 +105,15 @@
145 105 register unsigned int reg;
146 106 unsigned int timeout_count = TIMEOUT_COUNT;
147 107  
148   - switch (arm_type) {
149   - case arm11_and_later:
150   - while (--timeout_count) {
151   - can_write_arm11_dcc(reg);
152   - if (reg)
153   - break;
154   - }
155   - if (timeout_count == 0)
156   - return;
157   - else
158   - write_arm11_dcc(ch);
159   - break;
160   -
161   - case arm9_and_earlier:
162   - default:
163   - while (--timeout_count) {
164   - can_write_arm9_dcc(reg);
165   - if (reg)
166   - break;
167   - }
168   - if (timeout_count == 0)
169   - return;
170   - else
171   - write_arm9_dcc(ch);
172   - break;
  108 + while (--timeout_count) {
  109 + can_write_dcc(reg);
  110 + if (reg)
  111 + break;
173 112 }
  113 + if (timeout_count == 0)
  114 + return;
  115 + else
  116 + write_dcc(ch);
174 117 }
175 118  
176 119 void arm_dcc_puts(const char *s)
... ... @@ -183,15 +126,7 @@
183 126 {
184 127 register unsigned int reg;
185 128  
186   - switch (arm_type) {
187   - case arm11_and_later:
188   - can_read_arm11_dcc(reg);
189   - break;
190   - case arm9_and_earlier:
191   - default:
192   - can_read_arm9_dcc(reg);
193   - break;
194   - }
  129 + can_read_dcc(reg);
195 130  
196 131 return reg;
197 132 }
... ... @@ -214,14 +149,7 @@
214 149 arm_dcc_dev.putc = arm_dcc_putc; /* 'putc' function */
215 150 arm_dcc_dev.puts = arm_dcc_puts; /* 'puts' function */
216 151  
217   - rc = device_register(&arm_dcc_dev);
218   -
219   - if (rc == 0) {
220   - arm_dcc_init();
221   - return 1;
222   - }
223   -
224   - return 0;
  152 + return device_register(&arm_dcc_dev);
225 153 }
226 154 #endif