ARM: SAMSUNG: Fixup endian issues in CPU detection
authorBen Dooks <ben.dooks@codethink.co.uk>
Tue, 21 Jun 2016 10:20:23 +0000 (11:20 +0100)
committerKrzysztof Kozlowski <k.kozlowski@samsung.com>
Tue, 21 Jun 2016 11:08:14 +0000 (13:08 +0200)
If the system is built for big endian, then the CPU identificaiton register
will be read in the wrong order. Fix this by using readl_relaxed() on the
register.

Signed-off-by: Ben Dooks <ben.dooks@codethink.co.uk>
Signed-off-by: Krzysztof Kozlowski <k.kozlowski@samsung.com>
arch/arm/plat-samsung/cpu.c

index 71333bb..bd12a55 100644 (file)
@@ -29,14 +29,14 @@ EXPORT_SYMBOL(samsung_rev);
 
 void __init s3c64xx_init_cpu(void)
 {
-       samsung_cpu_id = __raw_readl(S3C_VA_SYS + 0x118);
+       samsung_cpu_id = readl_relaxed(S3C_VA_SYS + 0x118);
        if (!samsung_cpu_id) {
                /*
                 * S3C6400 has the ID register in a different place,
                 * and needs a write before it can be read.
                 */
-               __raw_writel(0x0, S3C_VA_SYS + 0xA1C);
-               samsung_cpu_id = __raw_readl(S3C_VA_SYS + 0xA1C);
+               writel_relaxed(0x0, S3C_VA_SYS + 0xA1C);
+               samsung_cpu_id = readl_relaxed(S3C_VA_SYS + 0xA1C);
        }
 
        samsung_cpu_rev = 0;
@@ -46,7 +46,7 @@ void __init s3c64xx_init_cpu(void)
 
 void __init s5p_init_cpu(void __iomem *cpuid_addr)
 {
-       samsung_cpu_id = __raw_readl(cpuid_addr);
+       samsung_cpu_id = readl_relaxed(cpuid_addr);
        samsung_cpu_rev = samsung_cpu_id & 0xFF;
 
        pr_info("Samsung CPU ID: 0x%08lx\n", samsung_cpu_id);