linux/include/linux/firmware/trusted_foundations.h
<<
>>
Prefs
   1/* SPDX-License-Identifier: GPL-2.0-or-later */
   2/*
   3 * Copyright (c) 2013, NVIDIA Corporation.
   4 */
   5
   6/*
   7 * Support for the Trusted Foundations secure monitor.
   8 *
   9 * Trusted Foundation comes active on some ARM consumer devices (most
  10 * Tegra-based devices sold on the market are concerned). Such devices can only
  11 * perform some basic operations, like setting the CPU reset vector, through
  12 * SMC calls to the secure monitor. The calls are completely specific to
  13 * Trusted Foundations, and do *not* follow the SMC calling convention or the
  14 * PSCI standard.
  15 */
  16
  17#ifndef __FIRMWARE_TRUSTED_FOUNDATIONS_H
  18#define __FIRMWARE_TRUSTED_FOUNDATIONS_H
  19
  20#include <linux/printk.h>
  21#include <linux/bug.h>
  22#include <linux/of.h>
  23#include <linux/cpu.h>
  24#include <linux/smp.h>
  25#include <linux/types.h>
  26
  27#include <asm/hardware/cache-l2x0.h>
  28#include <asm/outercache.h>
  29
  30#define TF_PM_MODE_LP0                  0
  31#define TF_PM_MODE_LP1                  1
  32#define TF_PM_MODE_LP1_NO_MC_CLK        2
  33#define TF_PM_MODE_LP2                  3
  34#define TF_PM_MODE_LP2_NOFLUSH_L2       4
  35#define TF_PM_MODE_NONE                 5
  36
  37struct trusted_foundations_platform_data {
  38        unsigned int version_major;
  39        unsigned int version_minor;
  40};
  41
  42#if IS_ENABLED(CONFIG_TRUSTED_FOUNDATIONS)
  43
  44void register_trusted_foundations(struct trusted_foundations_platform_data *pd);
  45void of_register_trusted_foundations(void);
  46bool trusted_foundations_registered(void);
  47
  48#else /* CONFIG_TRUSTED_FOUNDATIONS */
  49static inline void tf_dummy_write_sec(unsigned long val, unsigned int reg)
  50{
  51}
  52
  53static inline void register_trusted_foundations(
  54                                   struct trusted_foundations_platform_data *pd)
  55{
  56        /*
  57         * If the system requires TF and we cannot provide it, continue booting
  58         * but disable features that cannot be provided.
  59         */
  60        pr_err("No support for Trusted Foundations, continuing in degraded mode.\n");
  61        pr_err("Secondary processors as well as CPU PM will be disabled.\n");
  62#if IS_ENABLED(CONFIG_CACHE_L2X0)
  63        pr_err("L2X0 cache will be kept disabled.\n");
  64        outer_cache.write_sec = tf_dummy_write_sec;
  65#endif
  66#if IS_ENABLED(CONFIG_SMP)
  67        setup_max_cpus = 0;
  68#endif
  69        cpu_idle_poll_ctrl(true);
  70}
  71
  72static inline void of_register_trusted_foundations(void)
  73{
  74        /*
  75         * If we find the target should enable TF but does not support it,
  76         * fail as the system won't be able to do much anyway
  77         */
  78        if (of_find_compatible_node(NULL, NULL, "tlm,trusted-foundations"))
  79                register_trusted_foundations(NULL);
  80}
  81
  82static inline bool trusted_foundations_registered(void)
  83{
  84        return false;
  85}
  86#endif /* CONFIG_TRUSTED_FOUNDATIONS */
  87
  88#endif
  89