ARM: rockchip: rk3228: add efuse support
[firefly-linux-kernel-4.4.55.git] / arch / arm / mach-rockchip / efuse.c
index ca2597fb7a4341ea7ff1ac42fac4dffff21a144a..77afe8a4bcb56a026edeae31b8a0935d607c99d4 100644 (file)
@@ -126,7 +126,7 @@ static void efuse_writel(u32 val, u32 offset)
 #define RKTF_VLDVER_MINOR (3)
 
 
-static void rockchip_tf_ver_check(void)
+static int __init rockchip_tf_ver_check(void)
 {
        u64 val;
        u32 ver_val;
@@ -137,7 +137,7 @@ static void rockchip_tf_ver_check(void)
 
        if ((RKTF_VER_MAJOR(ver_val) >= RKTF_VLDVER_MAJOR) &&
                (RKTF_VER_MINOR(ver_val) >= RKTF_VLDVER_MINOR))
-               return;
+               return 0;
 
 ver_error:
 
@@ -148,8 +148,10 @@ ver_error:
                pr_err("trusted firmware need to update to(%d.%d) or is invaild!\n",
                        RKTF_VLDVER_MAJOR, RKTF_VLDVER_MINOR);
        } while(1);
-}
 
+       return 0;
+}
+device_initcall_sync(rockchip_tf_ver_check);
 #endif
 
 static int rk3288_efuse_readregs(u32 addr, u32 length, u8 *buf)
@@ -209,7 +211,6 @@ static int rk3288_get_leakage(int ch)
        return efuse_buf[23+ch];
 }
 
-#ifdef CONFIG_ARM
 static void __init rk3288_set_system_serial(void)
 {
        int i;
@@ -223,9 +224,6 @@ static void __init rk3288_set_system_serial(void)
        system_serial_low = crc32(0, buf, 8);
        system_serial_high = crc32(system_serial_low, buf + 8, 8);
 }
-#else
-static inline void __init rk3288_set_system_serial(void) {}
-#endif
 
 int rk312x_efuse_readregs(u32 addr, u32 length, u8 *buf)
 {
@@ -318,7 +316,7 @@ void __init rockchip_efuse_init(void)
 {
        int ret;
 
-       if (cpu_is_rk3288()) {
+       if (cpu_is_rk3288() || cpu_is_rk3228()) {
                rk3288_efuse_init();
        } else if (cpu_is_rk312x()) {
                ret = rk312x_efuse_readregs(0, 32, efuse_buf);
@@ -341,8 +339,6 @@ static int __init rockchip_efuse_probe(struct platform_device *pdev)
        }
        efuse_phys = regs->start;
 
-       rockchip_tf_ver_check();
-
        rk3288_efuse_init();
        return 0;
 }