/* * Copyright (C) 2013 Google, Inc. * * This software is licensed under the terms of the GNU General Public * License version 2, as published by the Free Software Foundation, and * may be copied, distributed, and modified under those terms. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * */ #include #include #include #include #include "trusty-fiq.h" #define _STRINGIFY(x) #x #define STRINGIFY(x) _STRINGIFY(x) static void __naked trusty_fiq_return(void) { asm volatile( ".arch_extension sec\n" "mov r12, r0\n" "ldr r0, =" STRINGIFY(SMC_FC_FIQ_EXIT) "\n" "smc #0"); } int trusty_fiq_arch_probe(struct platform_device *pdev) { return fiq_glue_set_return_handler(trusty_fiq_return); } void trusty_fiq_arch_remove(struct platform_device *pdev) { fiq_glue_clear_return_handler(trusty_fiq_return); }