{},
 };
 
+static bool __init
+arch_timer_probed(int type, const struct of_device_id *matches)
+{
+       struct device_node *dn;
+       bool probed = false;
+
+       dn = of_find_matching_node(NULL, matches);
+       if (dn && of_device_is_available(dn) && (arch_timers_present & type))
+               probed = true;
+       of_node_put(dn);
+
+       return probed;
+}
+
 static void __init arch_timer_common_init(void)
 {
        unsigned mask = ARCH_CP15_TIMER | ARCH_MEM_TIMER;
 
        /* Wait until both nodes are probed if we have two timers */
        if ((arch_timers_present & mask) != mask) {
-               if (of_find_matching_node(NULL, arch_timer_mem_of_match) &&
-                               !(arch_timers_present & ARCH_MEM_TIMER))
+               if (!arch_timer_probed(ARCH_MEM_TIMER, arch_timer_mem_of_match))
                        return;
-               if (of_find_matching_node(NULL, arch_timer_of_match) &&
-                               !(arch_timers_present & ARCH_CP15_TIMER))
+               if (!arch_timer_probed(ARCH_CP15_TIMER, arch_timer_of_match))
                        return;
        }