aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBen Dooks <ben.dooks@codethink.co.uk>2016-06-22 05:36:37 -0400
committerKrzysztof Kozlowski <k.kozlowski@samsung.com>2016-06-22 08:00:21 -0400
commit187364b6fcabb9f4bfefcb62fab4fcda019b5810 (patch)
treed20694931afe53b6dfc5a99b522eef460d62f948
parent58f388bcf011b47040378754cbe25118f7942151 (diff)
cpufreq: s5pv210: use relaxed IO accesors
The use of __raw IO accesors is not endian safe and should be used sparingly. The relaxed variants should be as lightweight and also are endian safe. Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk> Acked-by: Viresh Kumar <viresh.kumar@linaro.org> Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
-rw-r--r--drivers/cpufreq/s5pv210-cpufreq.c68
1 files changed, 34 insertions, 34 deletions
diff --git a/drivers/cpufreq/s5pv210-cpufreq.c b/drivers/cpufreq/s5pv210-cpufreq.c
index 06d85917b6d5..392b29a0eb17 100644
--- a/drivers/cpufreq/s5pv210-cpufreq.c
+++ b/drivers/cpufreq/s5pv210-cpufreq.c
@@ -220,7 +220,7 @@ static void s5pv210_set_refresh(enum s5pv210_dmc_port ch, unsigned long freq)
220 220
221 tmp1 /= tmp; 221 tmp1 /= tmp;
222 222
223 __raw_writel(tmp1, reg); 223 writel_relaxed(tmp1, reg);
224} 224}
225 225
226static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index) 226static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
@@ -301,29 +301,29 @@ static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
301 * 1. Temporary Change divider for MFC and G3D 301 * 1. Temporary Change divider for MFC and G3D
302 * SCLKA2M(200/1=200)->(200/4=50)Mhz 302 * SCLKA2M(200/1=200)->(200/4=50)Mhz
303 */ 303 */
304 reg = __raw_readl(S5P_CLK_DIV2); 304 reg = readl_relaxed(S5P_CLK_DIV2);
305 reg &= ~(S5P_CLKDIV2_G3D_MASK | S5P_CLKDIV2_MFC_MASK); 305 reg &= ~(S5P_CLKDIV2_G3D_MASK | S5P_CLKDIV2_MFC_MASK);
306 reg |= (3 << S5P_CLKDIV2_G3D_SHIFT) | 306 reg |= (3 << S5P_CLKDIV2_G3D_SHIFT) |
307 (3 << S5P_CLKDIV2_MFC_SHIFT); 307 (3 << S5P_CLKDIV2_MFC_SHIFT);
308 __raw_writel(reg, S5P_CLK_DIV2); 308 writel_relaxed(reg, S5P_CLK_DIV2);
309 309
310 /* For MFC, G3D dividing */ 310 /* For MFC, G3D dividing */
311 do { 311 do {
312 reg = __raw_readl(S5P_CLKDIV_STAT0); 312 reg = readl_relaxed(S5P_CLKDIV_STAT0);
313 } while (reg & ((1 << 16) | (1 << 17))); 313 } while (reg & ((1 << 16) | (1 << 17)));
314 314
315 /* 315 /*
316 * 2. Change SCLKA2M(200Mhz)to SCLKMPLL in MFC_MUX, G3D MUX 316 * 2. Change SCLKA2M(200Mhz)to SCLKMPLL in MFC_MUX, G3D MUX
317 * (200/4=50)->(667/4=166)Mhz 317 * (200/4=50)->(667/4=166)Mhz
318 */ 318 */
319 reg = __raw_readl(S5P_CLK_SRC2); 319 reg = readl_relaxed(S5P_CLK_SRC2);
320 reg &= ~(S5P_CLKSRC2_G3D_MASK | S5P_CLKSRC2_MFC_MASK); 320 reg &= ~(S5P_CLKSRC2_G3D_MASK | S5P_CLKSRC2_MFC_MASK);
321 reg |= (1 << S5P_CLKSRC2_G3D_SHIFT) | 321 reg |= (1 << S5P_CLKSRC2_G3D_SHIFT) |
322 (1 << S5P_CLKSRC2_MFC_SHIFT); 322 (1 << S5P_CLKSRC2_MFC_SHIFT);
323 __raw_writel(reg, S5P_CLK_SRC2); 323 writel_relaxed(reg, S5P_CLK_SRC2);
324 324
325 do { 325 do {
326 reg = __raw_readl(S5P_CLKMUX_STAT1); 326 reg = readl_relaxed(S5P_CLKMUX_STAT1);
327 } while (reg & ((1 << 7) | (1 << 3))); 327 } while (reg & ((1 << 7) | (1 << 3)));
328 328
329 /* 329 /*
@@ -335,19 +335,19 @@ static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
335 s5pv210_set_refresh(DMC1, 133000); 335 s5pv210_set_refresh(DMC1, 133000);
336 336
337 /* 4. SCLKAPLL -> SCLKMPLL */ 337 /* 4. SCLKAPLL -> SCLKMPLL */
338 reg = __raw_readl(S5P_CLK_SRC0); 338 reg = readl_relaxed(S5P_CLK_SRC0);
339 reg &= ~(S5P_CLKSRC0_MUX200_MASK); 339 reg &= ~(S5P_CLKSRC0_MUX200_MASK);
340 reg |= (0x1 << S5P_CLKSRC0_MUX200_SHIFT); 340 reg |= (0x1 << S5P_CLKSRC0_MUX200_SHIFT);
341 __raw_writel(reg, S5P_CLK_SRC0); 341 writel_relaxed(reg, S5P_CLK_SRC0);
342 342
343 do { 343 do {
344 reg = __raw_readl(S5P_CLKMUX_STAT0); 344 reg = readl_relaxed(S5P_CLKMUX_STAT0);
345 } while (reg & (0x1 << 18)); 345 } while (reg & (0x1 << 18));
346 346
347 } 347 }
348 348
349 /* Change divider */ 349 /* Change divider */
350 reg = __raw_readl(S5P_CLK_DIV0); 350 reg = readl_relaxed(S5P_CLK_DIV0);
351 351
352 reg &= ~(S5P_CLKDIV0_APLL_MASK | S5P_CLKDIV0_A2M_MASK | 352 reg &= ~(S5P_CLKDIV0_APLL_MASK | S5P_CLKDIV0_A2M_MASK |
353 S5P_CLKDIV0_HCLK200_MASK | S5P_CLKDIV0_PCLK100_MASK | 353 S5P_CLKDIV0_HCLK200_MASK | S5P_CLKDIV0_PCLK100_MASK |
@@ -363,25 +363,25 @@ static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
363 (clkdiv_val[index][6] << S5P_CLKDIV0_HCLK133_SHIFT) | 363 (clkdiv_val[index][6] << S5P_CLKDIV0_HCLK133_SHIFT) |
364 (clkdiv_val[index][7] << S5P_CLKDIV0_PCLK66_SHIFT)); 364 (clkdiv_val[index][7] << S5P_CLKDIV0_PCLK66_SHIFT));
365 365
366 __raw_writel(reg, S5P_CLK_DIV0); 366 writel_relaxed(reg, S5P_CLK_DIV0);
367 367
368 do { 368 do {
369 reg = __raw_readl(S5P_CLKDIV_STAT0); 369 reg = readl_relaxed(S5P_CLKDIV_STAT0);
370 } while (reg & 0xff); 370 } while (reg & 0xff);
371 371
372 /* ARM MCS value changed */ 372 /* ARM MCS value changed */
373 reg = __raw_readl(S5P_ARM_MCS_CON); 373 reg = readl_relaxed(S5P_ARM_MCS_CON);
374 reg &= ~0x3; 374 reg &= ~0x3;
375 if (index >= L3) 375 if (index >= L3)
376 reg |= 0x3; 376 reg |= 0x3;
377 else 377 else
378 reg |= 0x1; 378 reg |= 0x1;
379 379
380 __raw_writel(reg, S5P_ARM_MCS_CON); 380 writel_relaxed(reg, S5P_ARM_MCS_CON);
381 381
382 if (pll_changing) { 382 if (pll_changing) {
383 /* 5. Set Lock time = 30us*24Mhz = 0x2cf */ 383 /* 5. Set Lock time = 30us*24Mhz = 0x2cf */
384 __raw_writel(0x2cf, S5P_APLL_LOCK); 384 writel_relaxed(0x2cf, S5P_APLL_LOCK);
385 385
386 /* 386 /*
387 * 6. Turn on APLL 387 * 6. Turn on APLL
@@ -389,12 +389,12 @@ static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
389 * 6-2. Wait untile the PLL is locked 389 * 6-2. Wait untile the PLL is locked
390 */ 390 */
391 if (index == L0) 391 if (index == L0)
392 __raw_writel(APLL_VAL_1000, S5P_APLL_CON); 392 writel_relaxed(APLL_VAL_1000, S5P_APLL_CON);
393 else 393 else
394 __raw_writel(APLL_VAL_800, S5P_APLL_CON); 394 writel_relaxed(APLL_VAL_800, S5P_APLL_CON);
395 395
396 do { 396 do {
397 reg = __raw_readl(S5P_APLL_CON); 397 reg = readl_relaxed(S5P_APLL_CON);
398 } while (!(reg & (0x1 << 29))); 398 } while (!(reg & (0x1 << 29)));
399 399
400 /* 400 /*
@@ -402,39 +402,39 @@ static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
402 * to SCLKA2M(200Mhz) in MFC_MUX and G3D MUX 402 * to SCLKA2M(200Mhz) in MFC_MUX and G3D MUX
403 * (667/4=166)->(200/4=50)Mhz 403 * (667/4=166)->(200/4=50)Mhz
404 */ 404 */
405 reg = __raw_readl(S5P_CLK_SRC2); 405 reg = readl_relaxed(S5P_CLK_SRC2);
406 reg &= ~(S5P_CLKSRC2_G3D_MASK | S5P_CLKSRC2_MFC_MASK); 406 reg &= ~(S5P_CLKSRC2_G3D_MASK | S5P_CLKSRC2_MFC_MASK);
407 reg |= (0 << S5P_CLKSRC2_G3D_SHIFT) | 407 reg |= (0 << S5P_CLKSRC2_G3D_SHIFT) |
408 (0 << S5P_CLKSRC2_MFC_SHIFT); 408 (0 << S5P_CLKSRC2_MFC_SHIFT);
409 __raw_writel(reg, S5P_CLK_SRC2); 409 writel_relaxed(reg, S5P_CLK_SRC2);
410 410
411 do { 411 do {
412 reg = __raw_readl(S5P_CLKMUX_STAT1); 412 reg = readl_relaxed(S5P_CLKMUX_STAT1);
413 } while (reg & ((1 << 7) | (1 << 3))); 413 } while (reg & ((1 << 7) | (1 << 3)));
414 414
415 /* 415 /*
416 * 8. Change divider for MFC and G3D 416 * 8. Change divider for MFC and G3D
417 * (200/4=50)->(200/1=200)Mhz 417 * (200/4=50)->(200/1=200)Mhz
418 */ 418 */
419 reg = __raw_readl(S5P_CLK_DIV2); 419 reg = readl_relaxed(S5P_CLK_DIV2);
420 reg &= ~(S5P_CLKDIV2_G3D_MASK | S5P_CLKDIV2_MFC_MASK); 420 reg &= ~(S5P_CLKDIV2_G3D_MASK | S5P_CLKDIV2_MFC_MASK);
421 reg |= (clkdiv_val[index][10] << S5P_CLKDIV2_G3D_SHIFT) | 421 reg |= (clkdiv_val[index][10] << S5P_CLKDIV2_G3D_SHIFT) |
422 (clkdiv_val[index][9] << S5P_CLKDIV2_MFC_SHIFT); 422 (clkdiv_val[index][9] << S5P_CLKDIV2_MFC_SHIFT);
423 __raw_writel(reg, S5P_CLK_DIV2); 423 writel_relaxed(reg, S5P_CLK_DIV2);
424 424
425 /* For MFC, G3D dividing */ 425 /* For MFC, G3D dividing */
426 do { 426 do {
427 reg = __raw_readl(S5P_CLKDIV_STAT0); 427 reg = readl_relaxed(S5P_CLKDIV_STAT0);
428 } while (reg & ((1 << 16) | (1 << 17))); 428 } while (reg & ((1 << 16) | (1 << 17)));
429 429
430 /* 9. Change MPLL to APLL in MSYS_MUX */ 430 /* 9. Change MPLL to APLL in MSYS_MUX */
431 reg = __raw_readl(S5P_CLK_SRC0); 431 reg = readl_relaxed(S5P_CLK_SRC0);
432 reg &= ~(S5P_CLKSRC0_MUX200_MASK); 432 reg &= ~(S5P_CLKSRC0_MUX200_MASK);
433 reg |= (0x0 << S5P_CLKSRC0_MUX200_SHIFT); 433 reg |= (0x0 << S5P_CLKSRC0_MUX200_SHIFT);
434 __raw_writel(reg, S5P_CLK_SRC0); 434 writel_relaxed(reg, S5P_CLK_SRC0);
435 435
436 do { 436 do {
437 reg = __raw_readl(S5P_CLKMUX_STAT0); 437 reg = readl_relaxed(S5P_CLKMUX_STAT0);
438 } while (reg & (0x1 << 18)); 438 } while (reg & (0x1 << 18));
439 439
440 /* 440 /*
@@ -451,13 +451,13 @@ static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index)
451 * and memory refresh parameter should be changed 451 * and memory refresh parameter should be changed
452 */ 452 */
453 if (bus_speed_changing) { 453 if (bus_speed_changing) {
454 reg = __raw_readl(S5P_CLK_DIV6); 454 reg = readl_relaxed(S5P_CLK_DIV6);
455 reg &= ~S5P_CLKDIV6_ONEDRAM_MASK; 455 reg &= ~S5P_CLKDIV6_ONEDRAM_MASK;
456 reg |= (clkdiv_val[index][8] << S5P_CLKDIV6_ONEDRAM_SHIFT); 456 reg |= (clkdiv_val[index][8] << S5P_CLKDIV6_ONEDRAM_SHIFT);
457 __raw_writel(reg, S5P_CLK_DIV6); 457 writel_relaxed(reg, S5P_CLK_DIV6);
458 458
459 do { 459 do {
460 reg = __raw_readl(S5P_CLKDIV_STAT1); 460 reg = readl_relaxed(S5P_CLKDIV_STAT1);
461 } while (reg & (1 << 15)); 461 } while (reg & (1 << 15));
462 462
463 /* Reconfigure DRAM refresh counter value */ 463 /* Reconfigure DRAM refresh counter value */
@@ -497,7 +497,7 @@ static int check_mem_type(void __iomem *dmc_reg)
497{ 497{
498 unsigned long val; 498 unsigned long val;
499 499
500 val = __raw_readl(dmc_reg + 0x4); 500 val = readl_relaxed(dmc_reg + 0x4);
501 val = (val & (0xf << 8)); 501 val = (val & (0xf << 8));
502 502
503 return val >> 8; 503 return val >> 8;
@@ -542,10 +542,10 @@ static int s5pv210_cpu_init(struct cpufreq_policy *policy)
542 } 542 }
543 543
544 /* Find current refresh counter and frequency each DMC */ 544 /* Find current refresh counter and frequency each DMC */
545 s5pv210_dram_conf[0].refresh = (__raw_readl(dmc_base[0] + 0x30) * 1000); 545 s5pv210_dram_conf[0].refresh = (readl_relaxed(dmc_base[0] + 0x30) * 1000);
546 s5pv210_dram_conf[0].freq = clk_get_rate(dmc0_clk); 546 s5pv210_dram_conf[0].freq = clk_get_rate(dmc0_clk);
547 547
548 s5pv210_dram_conf[1].refresh = (__raw_readl(dmc_base[1] + 0x30) * 1000); 548 s5pv210_dram_conf[1].refresh = (readl_relaxed(dmc_base[1] + 0x30) * 1000);
549 s5pv210_dram_conf[1].freq = clk_get_rate(dmc1_clk); 549 s5pv210_dram_conf[1].freq = clk_get_rate(dmc1_clk);
550 550
551 policy->suspend_freq = SLEEP_FREQ; 551 policy->suspend_freq = SLEEP_FREQ;