value = tegra_hsp_channel_readl(channel, HSP_SM_SHRD_MBOX);
        value &= ~HSP_SM_SHRD_MBOX_FULL;
        msg = (void *)(unsigned long)value;
-       mbox_chan_received_data(channel->chan, msg);
 
        /*
         * Need to clear all bits here since some producers, such as TCU, depend
         * explicitly, so we have to make sure we cover all possible cases.
         */
        tegra_hsp_channel_writel(channel, 0x0, HSP_SM_SHRD_MBOX);
+
+       mbox_chan_received_data(channel->chan, msg);
 }
 
 static const struct tegra_hsp_sm_ops tegra_hsp_sm_32bit_ops = {
        value[3] = tegra_hsp_channel_readl(channel, HSP_SHRD_MBOX_TYPE1_DATA3);
 
        msg = (void *)(unsigned long)value;
-       mbox_chan_received_data(channel->chan, msg);
 
        /*
         * Clear data registers and tag.
        tegra_hsp_channel_writel(channel, 0x0, HSP_SHRD_MBOX_TYPE1_DATA2);
        tegra_hsp_channel_writel(channel, 0x0, HSP_SHRD_MBOX_TYPE1_DATA3);
        tegra_hsp_channel_writel(channel, 0x0, HSP_SHRD_MBOX_TYPE1_TAG);
+
+       mbox_chan_received_data(channel->chan, msg);
 }
 
 static const struct tegra_hsp_sm_ops tegra_hsp_sm_128bit_ops = {