|
80 | 80 | ASIZE_MAX)
|
81 | 81 |
|
82 | 82 | /**
|
83 |
| - * struct aemif_cs_data: structure to hold cs parameters |
84 |
| - * @cs: chip-select number |
| 83 | + * struct aemif_cs_timings: structure to hold CS timings |
85 | 84 | * @wstrobe: write strobe width, number of cycles - 1
|
86 | 85 | * @rstrobe: read strobe width, number of cycles - 1
|
87 | 86 | * @wsetup: write setup width, number of cycles - 1
|
88 | 87 | * @whold: write hold width, number of cycles - 1
|
89 | 88 | * @rsetup: read setup width, number of cycles - 1
|
90 | 89 | * @rhold: read hold width, number of cycles - 1
|
91 | 90 | * @ta: minimum turn around time, number of cycles - 1
|
92 |
| - * @enable_ss: enable/disable select strobe mode |
93 |
| - * @enable_ew: enable/disable extended wait mode |
94 |
| - * @asize: width of the asynchronous device's data bus |
95 | 91 | */
|
96 |
| -struct aemif_cs_data { |
97 |
| - u8 cs; |
| 92 | +struct aemif_cs_timings { |
98 | 93 | u32 wstrobe;
|
99 | 94 | u32 rstrobe;
|
100 | 95 | u32 wsetup;
|
101 | 96 | u32 whold;
|
102 | 97 | u32 rsetup;
|
103 | 98 | u32 rhold;
|
104 | 99 | u32 ta;
|
| 100 | +}; |
| 101 | + |
| 102 | +/** |
| 103 | + * struct aemif_cs_data: structure to hold CS parameters |
| 104 | + * @timings: timings configuration |
| 105 | + * @cs: chip-select number |
| 106 | + * @enable_ss: enable/disable select strobe mode |
| 107 | + * @enable_ew: enable/disable extended wait mode |
| 108 | + * @asize: width of the asynchronous device's data bus |
| 109 | + */ |
| 110 | +struct aemif_cs_data { |
| 111 | + struct aemif_cs_timings timings; |
| 112 | + u8 cs; |
105 | 113 | u8 enable_ss;
|
106 | 114 | u8 enable_ew;
|
107 | 115 | u8 asize;
|
@@ -179,9 +187,10 @@ static int aemif_config_abus(struct platform_device *pdev, int csnum)
|
179 | 187 |
|
180 | 188 | offset = A1CR_OFFSET + (data->cs - aemif->cs_offset) * 4;
|
181 | 189 |
|
182 |
| - set = TA(data->ta) | |
183 |
| - RHOLD(data->rhold) | RSTROBE(data->rstrobe) | RSETUP(data->rsetup) | |
184 |
| - WHOLD(data->whold) | WSTROBE(data->wstrobe) | WSETUP(data->wsetup); |
| 190 | + set = TA(data->timings.ta) | |
| 191 | + RHOLD(data->timings.rhold) | RSTROBE(data->timings.rstrobe) | |
| 192 | + RSETUP(data->timings.rsetup) | WHOLD(data->timings.whold) | |
| 193 | + WSTROBE(data->timings.wstrobe) | WSETUP(data->timings.wsetup); |
185 | 194 |
|
186 | 195 | set |= (data->asize & ACR_ASIZE_MASK);
|
187 | 196 | if (data->enable_ew)
|
@@ -215,13 +224,13 @@ static void aemif_get_hw_params(struct platform_device *pdev, int csnum)
|
215 | 224 | offset = A1CR_OFFSET + (data->cs - aemif->cs_offset) * 4;
|
216 | 225 | val = readl(aemif->base + offset);
|
217 | 226 |
|
218 |
| - data->ta = TA_VAL(val); |
219 |
| - data->rhold = RHOLD_VAL(val); |
220 |
| - data->rstrobe = RSTROBE_VAL(val); |
221 |
| - data->rsetup = RSETUP_VAL(val); |
222 |
| - data->whold = WHOLD_VAL(val); |
223 |
| - data->wstrobe = WSTROBE_VAL(val); |
224 |
| - data->wsetup = WSETUP_VAL(val); |
| 227 | + data->timings.ta = TA_VAL(val); |
| 228 | + data->timings.rhold = RHOLD_VAL(val); |
| 229 | + data->timings.rstrobe = RSTROBE_VAL(val); |
| 230 | + data->timings.rsetup = RSETUP_VAL(val); |
| 231 | + data->timings.whold = WHOLD_VAL(val); |
| 232 | + data->timings.wstrobe = WSTROBE_VAL(val); |
| 233 | + data->timings.wsetup = WSETUP_VAL(val); |
225 | 234 | data->enable_ew = EW_VAL(val);
|
226 | 235 | data->enable_ss = SSTROBE_VAL(val);
|
227 | 236 | data->asize = val & ASIZE_MAX;
|
@@ -272,55 +281,55 @@ static int of_aemif_parse_abus_config(struct platform_device *pdev,
|
272 | 281 | if (ret < 0)
|
273 | 282 | return ret;
|
274 | 283 |
|
275 |
| - data->ta = ret; |
| 284 | + data->timings.ta = ret; |
276 | 285 | }
|
277 | 286 |
|
278 | 287 | if (!of_property_read_u32(np, "ti,cs-read-hold-ns", &val)) {
|
279 | 288 | ret = aemif_calc_rate(pdev, val, clk_rate, RHOLD_MAX);
|
280 | 289 | if (ret < 0)
|
281 | 290 | return ret;
|
282 | 291 |
|
283 |
| - data->rhold = ret; |
| 292 | + data->timings.rhold = ret; |
284 | 293 | }
|
285 | 294 |
|
286 | 295 | if (!of_property_read_u32(np, "ti,cs-read-strobe-ns", &val)) {
|
287 | 296 | ret = aemif_calc_rate(pdev, val, clk_rate, RSTROBE_MAX);
|
288 | 297 | if (ret < 0)
|
289 | 298 | return ret;
|
290 | 299 |
|
291 |
| - data->rstrobe = ret; |
| 300 | + data->timings.rstrobe = ret; |
292 | 301 | }
|
293 | 302 |
|
294 | 303 | if (!of_property_read_u32(np, "ti,cs-read-setup-ns", &val)) {
|
295 | 304 | ret = aemif_calc_rate(pdev, val, clk_rate, RSETUP_MAX);
|
296 | 305 | if (ret < 0)
|
297 | 306 | return ret;
|
298 | 307 |
|
299 |
| - data->rsetup = ret; |
| 308 | + data->timings.rsetup = ret; |
300 | 309 | }
|
301 | 310 |
|
302 | 311 | if (!of_property_read_u32(np, "ti,cs-write-hold-ns", &val)) {
|
303 | 312 | ret = aemif_calc_rate(pdev, val, clk_rate, WHOLD_MAX);
|
304 | 313 | if (ret < 0)
|
305 | 314 | return ret;
|
306 | 315 |
|
307 |
| - data->whold = ret; |
| 316 | + data->timings.whold = ret; |
308 | 317 | }
|
309 | 318 |
|
310 | 319 | if (!of_property_read_u32(np, "ti,cs-write-strobe-ns", &val)) {
|
311 | 320 | ret = aemif_calc_rate(pdev, val, clk_rate, WSTROBE_MAX);
|
312 | 321 | if (ret < 0)
|
313 | 322 | return ret;
|
314 | 323 |
|
315 |
| - data->wstrobe = ret; |
| 324 | + data->timings.wstrobe = ret; |
316 | 325 | }
|
317 | 326 |
|
318 | 327 | if (!of_property_read_u32(np, "ti,cs-write-setup-ns", &val)) {
|
319 | 328 | ret = aemif_calc_rate(pdev, val, clk_rate, WSETUP_MAX);
|
320 | 329 | if (ret < 0)
|
321 | 330 | return ret;
|
322 | 331 |
|
323 |
| - data->wsetup = ret; |
| 332 | + data->timings.wsetup = ret; |
324 | 333 | }
|
325 | 334 |
|
326 | 335 | if (!of_property_read_u32(np, "ti,cs-bus-width", &val))
|
|
0 commit comments