diff mbox

cpufreq: exynos: Fix the compile error

Message ID 006c01cf70db$7e7f3b90$7b7db2b0$@samsung.com (mailing list archive)
State New, archived
Headers show

Commit Message

jhbird.choi@samsung.com May 16, 2014, 7:50 a.m. UTC
Commit 7da83a80 ("ARM: EXYNOS: Migrate Exynos specific macros from plat to
mach")
which lands in samsung tree causes build breakage for cpufreq-exynos like
following:
drivers/cpufreq/exynos-cpufreq.c: In function 'exynos_cpufreq_probe':
drivers/cpufreq/exynos-cpufreq.c:166:2: error: implicit declaration of
function 'soc_is_exynos4210' [-Werror=implicit-function-declaration]
drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration of
function 'soc_is_exynos4212' [-Werror=implicit-function-declaration]
drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration of
function 'soc_is_exynos4412' [-Werror=implicit-function-declaration]
drivers/cpufreq/exynos-cpufreq.c:170:2: error: implicit declaration of
function 'soc_is_exynos5250' [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[2]: *** [drivers/cpufreq/exynos-cpufreq.o] Error 1
make[2]: *** Waiting for unfinished jobs....
drivers/cpufreq/exynos4x12-cpufreq.c: In function 'exynos4x12_set_clkdiv':
drivers/cpufreq/exynos4x12-cpufreq.c:118:2: error: implicit declaration of
function 'soc_is_exynos4212' [-Werror=implicit-function-declaration]
cc1: some warnings being treated as errors
make[2]: *** [drivers/cpufreq/exynos4x12-cpufreq.o] Error 1
make[1]: *** [drivers/cpufreq] Error 2
This fixes above error with getting SoC information via DT instead of
soc_is_exynosXXXX().

Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
---
 .../devicetree/bindings/cpufreq/cpufreq-exynos.txt |   18 ++++++++
 drivers/cpufreq/Kconfig.arm                        |    4 +-
 drivers/cpufreq/exynos-cpufreq.c                   |   47
+++++++++++++++++---
 drivers/cpufreq/exynos-cpufreq.h                   |    8 ++++
 drivers/cpufreq/exynos4x12-cpufreq.c               |   11 ++---
 5 files changed, 72 insertions(+), 16 deletions(-)
 create mode 100644
Documentation/devicetree/bindings/cpufreq/cpufreq-exynos.txt

 static void exynos4x12_set_apll(unsigned int index)
@@ -184,7 +181,7 @@ int exynos4x12_cpufreq_init(struct exynos_dvfs_info
*info)
 	if (IS_ERR(mout_apll))
 		goto err_mout_apll;
 
-	if (soc_is_exynos4212())
+	if (info->type == EXYNOS_SOC_4212)
 		apll_freq_4x12 = apll_freq_4212;
 	else
 		apll_freq_4x12 = apll_freq_4412;

Comments

Viresh Kumar May 16, 2014, 7:55 a.m. UTC | #1
On 16 May 2014 13:20, Jonghwan Choi <jhbird.choi@samsung.com> wrote:
> Commit 7da83a80 ("ARM: EXYNOS: Migrate Exynos specific macros from plat to
> mach")

Why do you have a line break here ?

> which lands in samsung tree causes build breakage for cpufreq-exynos like
> following:

Enter a blank line here..

> drivers/cpufreq/exynos-cpufreq.c: In function 'exynos_cpufreq_probe':
> drivers/cpufreq/exynos-cpufreq.c:166:2: error: implicit declaration of
> function 'soc_is_exynos4210' [-Werror=implicit-function-declaration]

Let these cross 80 columns, don't break them, its unreadable.

> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration of
> function 'soc_is_exynos4212' [-Werror=implicit-function-declaration]
> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration of
> function 'soc_is_exynos4412' [-Werror=implicit-function-declaration]
> drivers/cpufreq/exynos-cpufreq.c:170:2: error: implicit declaration of
> function 'soc_is_exynos5250' [-Werror=implicit-function-declaration]
> cc1: some warnings being treated as errors
> make[2]: *** [drivers/cpufreq/exynos-cpufreq.o] Error 1
> make[2]: *** Waiting for unfinished jobs....
> drivers/cpufreq/exynos4x12-cpufreq.c: In function 'exynos4x12_set_clkdiv':
> drivers/cpufreq/exynos4x12-cpufreq.c:118:2: error: implicit declaration of
> function 'soc_is_exynos4212' [-Werror=implicit-function-declaration]
> cc1: some warnings being treated as errors
> make[2]: *** [drivers/cpufreq/exynos4x12-cpufreq.o] Error 1
> make[1]: *** [drivers/cpufreq] Error 2

Two blank lines here.

> This fixes above error with getting SoC information via DT instead of
> soc_is_exynosXXXX().
>
> Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
> ---
>  .../devicetree/bindings/cpufreq/cpufreq-exynos.txt |   18 ++++++++
>  drivers/cpufreq/Kconfig.arm                        |    4 +-
>  drivers/cpufreq/exynos-cpufreq.c                   |   47
> +++++++++++++++++---
>  drivers/cpufreq/exynos-cpufreq.h                   |    8 ++++
>  drivers/cpufreq/exynos4x12-cpufreq.c               |   11 ++---
>  5 files changed, 72 insertions(+), 16 deletions(-)

I don't think anybody can call that a fix :)

So what you have done is combined 'fix' with 'cleanups or improvements'.
That's surely wrong..

Just give a simple fix for this breakage that will go in 3.15 and do the DT
stuff in another patch for 3.16..
Viresh Kumar May 16, 2014, 7:56 a.m. UTC | #2
And please use Rafael's email id from Maintainers..

On 16 May 2014 13:25, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> On 16 May 2014 13:20, Jonghwan Choi <jhbird.choi@samsung.com> wrote:
>> Commit 7da83a80 ("ARM: EXYNOS: Migrate Exynos specific macros from plat to
>> mach")
>
> Why do you have a line break here ?
>
>> which lands in samsung tree causes build breakage for cpufreq-exynos like
>> following:
>
> Enter a blank line here..
>
>> drivers/cpufreq/exynos-cpufreq.c: In function 'exynos_cpufreq_probe':
>> drivers/cpufreq/exynos-cpufreq.c:166:2: error: implicit declaration of
>> function 'soc_is_exynos4210' [-Werror=implicit-function-declaration]
>
> Let these cross 80 columns, don't break them, its unreadable.
>
>> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration of
>> function 'soc_is_exynos4212' [-Werror=implicit-function-declaration]
>> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration of
>> function 'soc_is_exynos4412' [-Werror=implicit-function-declaration]
>> drivers/cpufreq/exynos-cpufreq.c:170:2: error: implicit declaration of
>> function 'soc_is_exynos5250' [-Werror=implicit-function-declaration]
>> cc1: some warnings being treated as errors
>> make[2]: *** [drivers/cpufreq/exynos-cpufreq.o] Error 1
>> make[2]: *** Waiting for unfinished jobs....
>> drivers/cpufreq/exynos4x12-cpufreq.c: In function 'exynos4x12_set_clkdiv':
>> drivers/cpufreq/exynos4x12-cpufreq.c:118:2: error: implicit declaration of
>> function 'soc_is_exynos4212' [-Werror=implicit-function-declaration]
>> cc1: some warnings being treated as errors
>> make[2]: *** [drivers/cpufreq/exynos4x12-cpufreq.o] Error 1
>> make[1]: *** [drivers/cpufreq] Error 2
>
> Two blank lines here.
>
>> This fixes above error with getting SoC information via DT instead of
>> soc_is_exynosXXXX().
>>
>> Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
>> ---
>>  .../devicetree/bindings/cpufreq/cpufreq-exynos.txt |   18 ++++++++
>>  drivers/cpufreq/Kconfig.arm                        |    4 +-
>>  drivers/cpufreq/exynos-cpufreq.c                   |   47
>> +++++++++++++++++---
>>  drivers/cpufreq/exynos-cpufreq.h                   |    8 ++++
>>  drivers/cpufreq/exynos4x12-cpufreq.c               |   11 ++---
>>  5 files changed, 72 insertions(+), 16 deletions(-)
>
> I don't think anybody can call that a fix :)
>
> So what you have done is combined 'fix' with 'cleanups or improvements'.
> That's surely wrong..
>
> Just give a simple fix for this breakage that will go in 3.15 and do the DT
> stuff in another patch for 3.16..
Kim Kukjin May 16, 2014, 8:13 a.m. UTC | #3
Viresh Kumar wrote:
> 
> And please use Rafael's email id from Maintainers..
> 
> On 16 May 2014 13:25, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> > On 16 May 2014 13:20, Jonghwan Choi <jhbird.choi@samsung.com> wrote:
> >> Commit 7da83a80 ("ARM: EXYNOS: Migrate Exynos specific macros from
> >> plat to
> >> mach")
> >
> > Why do you have a line break here ?
> >
> >> which lands in samsung tree causes build breakage for cpufreq-exynos
> >> like
> >> following:
> >
> > Enter a blank line here..
> >
> >> drivers/cpufreq/exynos-cpufreq.c: In function 'exynos_cpufreq_probe':
> >> drivers/cpufreq/exynos-cpufreq.c:166:2: error: implicit declaration
> >> of function 'soc_is_exynos4210'
> >> [-Werror=implicit-function-declaration]
> >
> > Let these cross 80 columns, don't break them, its unreadable.
> >
> >> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration
> >> of function 'soc_is_exynos4212'
> >> [-Werror=implicit-function-declaration]
> >> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration
> >> of function 'soc_is_exynos4412'
> >> [-Werror=implicit-function-declaration]
> >> drivers/cpufreq/exynos-cpufreq.c:170:2: error: implicit declaration
> >> of function 'soc_is_exynos5250'
> >> [-Werror=implicit-function-declaration]
> >> cc1: some warnings being treated as errors
> >> make[2]: *** [drivers/cpufreq/exynos-cpufreq.o] Error 1
> >> make[2]: *** Waiting for unfinished jobs....
> >> drivers/cpufreq/exynos4x12-cpufreq.c: In function
> 'exynos4x12_set_clkdiv':
> >> drivers/cpufreq/exynos4x12-cpufreq.c:118:2: error: implicit
> >> declaration of function 'soc_is_exynos4212'
> >> [-Werror=implicit-function-declaration]
> >> cc1: some warnings being treated as errors
> >> make[2]: *** [drivers/cpufreq/exynos4x12-cpufreq.o] Error 1
> >> make[1]: *** [drivers/cpufreq] Error 2
> >
> > Two blank lines here.
> >
> >> This fixes above error with getting SoC information via DT instead of
> >> soc_is_exynosXXXX().
> >>
> >> Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
> >> ---
> >>  .../devicetree/bindings/cpufreq/cpufreq-exynos.txt |   18 ++++++++
> >>  drivers/cpufreq/Kconfig.arm                        |    4 +-
> >>  drivers/cpufreq/exynos-cpufreq.c                   |   47
> >> +++++++++++++++++---
> >>  drivers/cpufreq/exynos-cpufreq.h                   |    8 ++++
> >>  drivers/cpufreq/exynos4x12-cpufreq.c               |   11 ++---
> >>  5 files changed, 72 insertions(+), 16 deletions(-)
> >
> > I don't think anybody can call that a fix :)
> >
> > So what you have done is combined 'fix' with 'cleanups or improvements'.
> > That's surely wrong..
> >
Well, I think this is really _fix_ the build error, this adds support DT binding for exynos cpufreq stuff though. Because we cannot cover exynos cpufreq without this and you can see that on current -next tree.

> > Just give a simple fix for this breakage that will go in 3.15 and do
> > the DT stuff in another patch for 3.16..

In 3.15, it should be fine. Please check the -next tree and this should be sent to upstream for 3.16 not 3.15 via samsung tree with the patch (commit ID 7da83a80) which causes the build error.

Thanks,
Kukjin
Kim Kukjin May 16, 2014, 8:25 a.m. UTC | #4
Kukjin Kim wrote:
> 
> Viresh Kumar wrote:
> >
> > And please use Rafael's email id from Maintainers..
> >
> > On 16 May 2014 13:25, Viresh Kumar <viresh.kumar@linaro.org> wrote:
> > > On 16 May 2014 13:20, Jonghwan Choi <jhbird.choi@samsung.com> wrote:
> > >> Commit 7da83a80 ("ARM: EXYNOS: Migrate Exynos specific macros from
> > >> plat to
> > >> mach")
> > >
> > > Why do you have a line break here ?
> > >
> > >> which lands in samsung tree causes build breakage for cpufreq-exynos
> > >> like
> > >> following:
> > >
> > > Enter a blank line here..
> > >
> > >> drivers/cpufreq/exynos-cpufreq.c: In function 'exynos_cpufreq_probe':
> > >> drivers/cpufreq/exynos-cpufreq.c:166:2: error: implicit declaration
> > >> of function 'soc_is_exynos4210'
> > >> [-Werror=implicit-function-declaration]
> > >
> > > Let these cross 80 columns, don't break them, its unreadable.
> > >
> > >> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration
> > >> of function 'soc_is_exynos4212'
> > >> [-Werror=implicit-function-declaration]
> > >> drivers/cpufreq/exynos-cpufreq.c:168:2: error: implicit declaration
> > >> of function 'soc_is_exynos4412'
> > >> [-Werror=implicit-function-declaration]
> > >> drivers/cpufreq/exynos-cpufreq.c:170:2: error: implicit declaration
> > >> of function 'soc_is_exynos5250'
> > >> [-Werror=implicit-function-declaration]
> > >> cc1: some warnings being treated as errors
> > >> make[2]: *** [drivers/cpufreq/exynos-cpufreq.o] Error 1
> > >> make[2]: *** Waiting for unfinished jobs....
> > >> drivers/cpufreq/exynos4x12-cpufreq.c: In function
> > 'exynos4x12_set_clkdiv':
> > >> drivers/cpufreq/exynos4x12-cpufreq.c:118:2: error: implicit
> > >> declaration of function 'soc_is_exynos4212'
> > >> [-Werror=implicit-function-declaration]
> > >> cc1: some warnings being treated as errors
> > >> make[2]: *** [drivers/cpufreq/exynos4x12-cpufreq.o] Error 1
> > >> make[1]: *** [drivers/cpufreq] Error 2
> > >
> > > Two blank lines here.
> > >
> > >> This fixes above error with getting SoC information via DT instead of
> > >> soc_is_exynosXXXX().
> > >>
> > >> Signed-off-by: Jonghwan Choi <jhbird.choi@samsung.com>
> > >> ---
> > >>  .../devicetree/bindings/cpufreq/cpufreq-exynos.txt |   18 ++++++++
> > >>  drivers/cpufreq/Kconfig.arm                        |    4 +-
> > >>  drivers/cpufreq/exynos-cpufreq.c                   |   47
> > >> +++++++++++++++++---
> > >>  drivers/cpufreq/exynos-cpufreq.h                   |    8 ++++
> > >>  drivers/cpufreq/exynos4x12-cpufreq.c               |   11 ++---
> > >>  5 files changed, 72 insertions(+), 16 deletions(-)
> > >
> > > I don't think anybody can call that a fix :)
> > >
> > > So what you have done is combined 'fix' with 'cleanups or
> improvements'.
> > > That's surely wrong..
> > >
> Well, I think this is really _fix_ the build error, this adds support DT
> binding for exynos cpufreq stuff though. Because we cannot cover exynos
> cpufreq without this and you can see that on current -next tree.
> 
One more, now we don't have another choice to support various exynos SoCs for cpufreq.

> > > Just give a simple fix for this breakage that will go in 3.15 and do
> > > the DT stuff in another patch for 3.16..
> 
> In 3.15, it should be fine. Please check the -next tree and this should be
> sent to upstream for 3.16 not 3.15 via samsung tree with the patch (commit
> ID 7da83a80) which causes the build error.
> 
But I think, Jonghwan needs to clarify that in commit subject and log...not just 'fix'.

- Kukjin
diff mbox

Patch

diff --git a/Documentation/devicetree/bindings/cpufreq/cpufreq-exynos.txt
b/Documentation/devicetree/bindings/cpufreq/cpufreq-exynos.txt
new file mode 100644
index 0000000..f5e8ac6
--- /dev/null
+++ b/Documentation/devicetree/bindings/cpufreq/cpufreq-exynos.txt
@@ -0,0 +1,18 @@ 
+
+Exynos cpufreq driver
+-------------------
+
+Exynos4210/4212/4412/5250 SoC cpufreq driver for CPU frequency scaling.
+
+Required properties:
+  - compatible: value should be either of the following.
+      (a) "samsung, exynos4210-cpufreq", for Exynos4210.
+      (b) "samsung, exynos4212-cpufreq", for Exynos4212.
+      (c) "samsung, exynos4412-cpufreq", for Exynos4412.
+      (d) "samsung, exynos5250-cpufreq", for Exynos5250.
+
+Example:
+--------
+	cpufreq@10030000 {
+		compatible = "samsung,exynos4210-cpufreq";
+	};
diff --git a/drivers/cpufreq/Kconfig.arm b/drivers/cpufreq/Kconfig.arm
index 5805035..9606f90 100644
--- a/drivers/cpufreq/Kconfig.arm
+++ b/drivers/cpufreq/Kconfig.arm
@@ -27,6 +27,8 @@  config ARM_VEXPRESS_SPC_CPUFREQ
 
 config ARM_EXYNOS_CPUFREQ
 	bool
+	depends on HAVE_CLK && OF
+	select PM_OPP
 
 config ARM_EXYNOS4210_CPUFREQ
 	bool "SAMSUNG EXYNOS4210"
@@ -64,8 +66,6 @@  config ARM_EXYNOS5250_CPUFREQ
 config ARM_EXYNOS5440_CPUFREQ
 	bool "SAMSUNG EXYNOS5440"
 	depends on SOC_EXYNOS5440
-	depends on HAVE_CLK && OF
-	select PM_OPP
 	default y
 	help
 	  This adds the CPUFreq driver for Samsung EXYNOS5440
diff --git a/drivers/cpufreq/exynos-cpufreq.c
b/drivers/cpufreq/exynos-cpufreq.c
index f99cfe2..cfc8c75 100644
--- a/drivers/cpufreq/exynos-cpufreq.c
+++ b/drivers/cpufreq/exynos-cpufreq.c
@@ -16,7 +16,10 @@ 
 #include <linux/slab.h>
 #include <linux/regulator/consumer.h>
 #include <linux/cpufreq.h>
+#include <linux/module.h>
 #include <linux/platform_device.h>
+#include <linux/pm_opp.h>
+#include <linux/of_device.h>
 
 #include <plat/cpu.h>
 
@@ -155,19 +158,44 @@  static struct cpufreq_driver exynos_driver = {
 #endif
 };
 
+static const struct of_device_id exynos_cpufreq_match[] = {
+	{ .compatible = "samsung,exynos4210-cpufreq",	.data =
(void*)EXYNOS_SOC_4210 },
+	{ .compatible = "samsung,exynos4212-cpufreq",	.data =
(void*)EXYNOS_SOC_4212 },
+	{ .compatible = "samsung,exynos4412-cpufreq",	.data =
(void*)EXYNOS_SOC_4412 },
+	{ .compatible = "samsung,exynos5250-cpufreq",	.data =
(void*)EXYNOS_SOC_5250 },
+	{},
+};
+MODULE_DEVICE_TABLE(of, exynos_cpufreq_match);
+
 static int exynos_cpufreq_probe(struct platform_device *pdev)
 {
 	int ret = -EINVAL;
+	struct device_node *np;
+	const struct of_device_id *match;
+
+	np =  pdev->dev.of_node;
+	if (!np)
+		return -ENODEV;
+
+	match = of_match_device(exynos_cpufreq_match, &pdev->dev);
+	if (!match) {
+		pr_err("%s: Unknown device mode\n", __func__);
+		goto err_put_node;
+	}
 
 	exynos_info = kzalloc(sizeof(*exynos_info), GFP_KERNEL);
-	if (!exynos_info)
-		return -ENOMEM;
+	if (!exynos_info) {
+		ret = -ENOMEM;
+		goto err_put_node;
+	}
+
+	exynos_info->type = (long)match->data;
 
-	if (soc_is_exynos4210())
+	if (exynos_info->type == EXYNOS_SOC_4210)
 		ret = exynos4210_cpufreq_init(exynos_info);
-	else if (soc_is_exynos4212() || soc_is_exynos4412())
+	else if (exynos_info->type == EXYNOS_SOC_4212 || exynos_info->type
== EXYNOS_SOC_4412)
 		ret = exynos4x12_cpufreq_init(exynos_info);
-	else if (soc_is_exynos5250())
+	else if (exynos_info->type == EXYNOS_SOC_5250)
 		ret = exynos5250_cpufreq_init(exynos_info);
 	else
 		return 0;
@@ -189,20 +217,25 @@  static int exynos_cpufreq_probe(struct platform_device
*pdev)
 	/* Done here as we want to capture boot frequency */
 	locking_frequency = clk_get_rate(exynos_info->cpu_clk) / 1000;
 
-	if (!cpufreq_register_driver(&exynos_driver))
+	if (!cpufreq_register_driver(&exynos_driver)) {
+		of_node_put(np);
 		return 0;
+	}
 
 	pr_err("%s: failed to register cpufreq driver\n", __func__);
 	regulator_put(arm_regulator);
 err_vdd_arm:
 	kfree(exynos_info);
-	return -EINVAL;
+err_put_node:
+	of_node_put(np);
+	return ret;
 }
 
 static struct platform_driver exynos_cpufreq_platdrv = {
 	.driver = {
 		.name	= "exynos-cpufreq",
 		.owner	= THIS_MODULE,
+		.of_match_table = exynos_cpufreq_match,
 	},
 	.probe = exynos_cpufreq_probe,
 };
diff --git a/drivers/cpufreq/exynos-cpufreq.h
b/drivers/cpufreq/exynos-cpufreq.h
index 3ddade8..f189547 100644
--- a/drivers/cpufreq/exynos-cpufreq.h
+++ b/drivers/cpufreq/exynos-cpufreq.h
@@ -17,6 +17,13 @@  enum cpufreq_level_index {
 	L20,
 };
 
+enum exynos_soc_type {
+	EXYNOS_SOC_4210,
+	EXYNOS_SOC_4212,
+	EXYNOS_SOC_4412,
+	EXYNOS_SOC_5250,
+};
+
 #define APLL_FREQ(f, a0, a1, a2, a3, a4, a5, a6, a7, b0, b1, b2, m, p, s) \
 	{ \
 		.freq = (f) * 1000, \
@@ -34,6 +41,7 @@  struct apll_freq {
 };
 
 struct exynos_dvfs_info {
+	enum exynos_soc_type type;
 	unsigned long	mpll_freq_khz;
 	unsigned int	pll_safe_idx;
 	struct clk	*cpu_clk;
diff --git a/drivers/cpufreq/exynos4x12-cpufreq.c
b/drivers/cpufreq/exynos4x12-cpufreq.c
index 466c76a..63a3907 100644
--- a/drivers/cpufreq/exynos4x12-cpufreq.c
+++ b/drivers/cpufreq/exynos4x12-cpufreq.c
@@ -100,7 +100,6 @@  static struct apll_freq apll_freq_4412[] = {
 static void exynos4x12_set_clkdiv(unsigned int div_index)
 {
 	unsigned int tmp;
-	unsigned int stat_cpu1;
 
 	/* Change Divider - CPU0 */
 
@@ -115,13 +114,11 @@  static void exynos4x12_set_clkdiv(unsigned int
div_index)
 	tmp = apll_freq_4x12[div_index].clk_div_cpu1;
 
 	__raw_writel(tmp, EXYNOS4_CLKDIV_CPU1);
-	if (soc_is_exynos4212())
-		stat_cpu1 = 0x11;
-	else
-		stat_cpu1 = 0x111;
 
-	while (__raw_readl(EXYNOS4_CLKDIV_STATCPU1) & stat_cpu1)
+	do {
 		cpu_relax();
+		tmp = __raw_readl(EXYNOS4_CLKDIV_STATCPU1);
+	} while (tmp != 0x0);
 }