return tboot != NULL;
 }
 
+/* noinline to prevent gcc from warning about dereferencing constant fixaddr */
+static noinline __init bool check_tboot_version(void)
+{
+       if (memcmp(&tboot_uuid, &tboot->uuid, sizeof(tboot->uuid))) {
+               pr_warn("tboot at 0x%llx is invalid\n", boot_params.tboot_addr);
+               return false;
+       }
+
+       if (tboot->version < 5) {
+               pr_warn("tboot version is invalid: %u\n", tboot->version);
+               return false;
+       }
+
+       pr_info("found shared page at phys addr 0x%llx:\n",
+               boot_params.tboot_addr);
+       pr_debug("version: %d\n", tboot->version);
+       pr_debug("log_addr: 0x%08x\n", tboot->log_addr);
+       pr_debug("shutdown_entry: 0x%x\n", tboot->shutdown_entry);
+       pr_debug("tboot_base: 0x%08x\n", tboot->tboot_base);
+       pr_debug("tboot_size: 0x%x\n", tboot->tboot_size);
+
+       return true;
+}
+
 void __init tboot_probe(void)
 {
        /* Look for valid page-aligned address for shared page. */
 
        /* Map and check for tboot UUID. */
        set_fixmap(FIX_TBOOT_BASE, boot_params.tboot_addr);
-       tboot = (struct tboot *)fix_to_virt(FIX_TBOOT_BASE);
-       if (memcmp(&tboot_uuid, &tboot->uuid, sizeof(tboot->uuid))) {
-               pr_warn("tboot at 0x%llx is invalid\n", boot_params.tboot_addr);
+       tboot = (void *)fix_to_virt(FIX_TBOOT_BASE);
+       if (!check_tboot_version())
                tboot = NULL;
-               return;
-       }
-       if (tboot->version < 5) {
-               pr_warn("tboot version is invalid: %u\n", tboot->version);
-               tboot = NULL;
-               return;
-       }
-
-       pr_info("found shared page at phys addr 0x%llx:\n",
-               boot_params.tboot_addr);
-       pr_debug("version: %d\n", tboot->version);
-       pr_debug("log_addr: 0x%08x\n", tboot->log_addr);
-       pr_debug("shutdown_entry: 0x%x\n", tboot->shutdown_entry);
-       pr_debug("tboot_base: 0x%08x\n", tboot->tboot_base);
-       pr_debug("tboot_size: 0x%x\n", tboot->tboot_size);
 }
 
 static pgd_t *tboot_pg_dir;