Merge branch 'torvalds/master'
[firefly-linux-kernel-4.4.55.git] / arch / microblaze / kernel / cpu / cpuinfo.c
index 410398f6db555a1df3be57620454dc61c47f20fa..b70bb538f00165df2d46ec87c27217577ec4b95a 100644 (file)
@@ -8,6 +8,7 @@
  * for more details.
  */
 
+#include <linux/clk.h>
 #include <linux/init.h>
 #include <asm/cpuinfo.h>
 #include <asm/pvr.h>
@@ -39,6 +40,15 @@ const struct cpu_ver_key cpu_ver_lookup[] = {
        {"8.30.a", 0x17},
        {"8.40.a", 0x18},
        {"8.40.b", 0x19},
+       {"8.50.a", 0x1a},
+       {"8.50.b", 0x1c},
+       {"8.50.c", 0x1e},
+       {"9.0", 0x1b},
+       {"9.1", 0x1d},
+       {"9.2", 0x1f},
+       {"9.3", 0x20},
+       {"9.4", 0x21},
+       {"9.5", 0x22},
        {NULL, 0},
 };
 
@@ -57,20 +67,22 @@ const struct family_string_key family_string_lookup[] = {
        {"spartan3adsp", 0xc},
        {"spartan6", 0xd},
        {"virtex6", 0xe},
+       {"virtex7", 0xf},
        /* FIXME There is no key code defined for spartan2 */
        {"spartan2", 0xf0},
        {"kintex7", 0x10},
        {"artix7", 0x11},
        {"zynq7000", 0x12},
+       {"UltraScale Virtex", 0x13},
+       {"UltraScale Kintex", 0x14},
        {NULL, 0},
 };
 
 struct cpuinfo cpuinfo;
+static struct device_node *cpu;
 
 void __init setup_cpuinfo(void)
 {
-       struct device_node *cpu = NULL;
-
        cpu = (struct device_node *) of_find_node_by_type(NULL, "cpu");
        if (!cpu)
                pr_err("You don't have cpu!!!\n");
@@ -100,3 +112,22 @@ void __init setup_cpuinfo(void)
                pr_warn("%s: Stream instructions enabled"
                        " - USERSPACE CAN LOCK THIS KERNEL!\n", __func__);
 }
+
+void __init setup_cpuinfo_clk(void)
+{
+       struct clk *clk;
+
+       clk = of_clk_get(cpu, 0);
+       if (IS_ERR(clk)) {
+               pr_err("ERROR: CPU CCF input clock not found\n");
+               /* take timebase-frequency from DTS */
+               cpuinfo.cpu_clock_freq = fcpu(cpu, "timebase-frequency");
+       } else {
+               cpuinfo.cpu_clock_freq = clk_get_rate(clk);
+       }
+
+       if (!cpuinfo.cpu_clock_freq) {
+               pr_err("ERROR: CPU clock frequency not setup\n");
+               BUG();
+       }
+}