* and OS lock must be unlocked before any memory mapped access on such
  * processors, otherwise memory mapped reads/writes will be invalid.
  */
-static void etm_os_unlock(void *info)
+static void etm_os_unlock(struct etm_drvdata *drvdata)
 {
-       struct etm_drvdata *drvdata = (struct etm_drvdata *)info;
        /* Writing any value to ETMOSLAR unlocks the trace registers */
        etm_writel(drvdata, 0x0, ETMOSLAR);
+       drvdata->os_unlock = true;
        isb();
 }
 
        u32 etmccr;
        struct etm_drvdata *drvdata = info;
 
+       /* Make sure all registers are accessible */
+       etm_os_unlock(drvdata);
+
        CS_UNLOCK(drvdata->base);
 
        /* First dummy read */
        get_online_cpus();
        etmdrvdata[drvdata->cpu] = drvdata;
 
-       if (!smp_call_function_single(drvdata->cpu, etm_os_unlock, drvdata, 1))
-               drvdata->os_unlock = true;
-
        if (smp_call_function_single(drvdata->cpu,
                                     etm_init_arch_data,  drvdata, 1))
                dev_err(dev, "ETM arch init failed\n");