diff options
author | Ben Dooks <ben.dooks@codethink.co.uk> | 2016-06-22 05:36:37 -0400 |
---|---|---|
committer | Krzysztof Kozlowski <k.kozlowski@samsung.com> | 2016-06-22 08:00:21 -0400 |
commit | 187364b6fcabb9f4bfefcb62fab4fcda019b5810 (patch) | |
tree | d20694931afe53b6dfc5a99b522eef460d62f948 | |
parent | 58f388bcf011b47040378754cbe25118f7942151 (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.c | 68 |
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 | ||
226 | static int s5pv210_target(struct cpufreq_policy *policy, unsigned int index) | 226 | static 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; |