plat_setup.c 16 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449
  1. /*
  2. * Copyright (c) 2019-2020, NVIDIA CORPORATION. All rights reserved.
  3. *
  4. * SPDX-License-Identifier: BSD-3-Clause
  5. */
  6. #include <arch_helpers.h>
  7. #include <assert.h>
  8. #include <bl31/bl31.h>
  9. #include <common/bl_common.h>
  10. #include <common/interrupt_props.h>
  11. #include <drivers/console.h>
  12. #include <context.h>
  13. #include <lib/el3_runtime/context_mgmt.h>
  14. #include <cortex_a57.h>
  15. #include <common/debug.h>
  16. #include <denver.h>
  17. #include <drivers/arm/gic_common.h>
  18. #include <drivers/arm/gicv2.h>
  19. #include <bl31/interrupt_mgmt.h>
  20. #include <mce.h>
  21. #include <mce_private.h>
  22. #include <memctrl.h>
  23. #include <plat/common/platform.h>
  24. #include <smmu.h>
  25. #include <spe.h>
  26. #include <tegra_def.h>
  27. #include <tegra_platform.h>
  28. #include <tegra_private.h>
  29. #include <lib/xlat_tables/xlat_tables_v2.h>
  30. /* ID for spe-console */
  31. #define TEGRA_CONSOLE_SPE_ID 0xFE
  32. /*******************************************************************************
  33. * Structure to store the SCR addresses and its expected settings.
  34. *******************************************************************************
  35. */
  36. typedef struct {
  37. uint32_t scr_addr;
  38. uint32_t scr_val;
  39. } scr_settings_t;
  40. static const scr_settings_t t194_scr_settings[] = {
  41. { SCRATCH_RSV68_SCR, SCRATCH_RSV68_SCR_VAL },
  42. { SCRATCH_RSV71_SCR, SCRATCH_RSV71_SCR_VAL },
  43. { SCRATCH_RSV72_SCR, SCRATCH_RSV72_SCR_VAL },
  44. { SCRATCH_RSV75_SCR, SCRATCH_RSV75_SCR_VAL },
  45. { SCRATCH_RSV81_SCR, SCRATCH_RSV81_SCR_VAL },
  46. { SCRATCH_RSV97_SCR, SCRATCH_RSV97_SCR_VAL },
  47. { SCRATCH_RSV99_SCR, SCRATCH_RSV99_SCR_VAL },
  48. { SCRATCH_RSV109_SCR, SCRATCH_RSV109_SCR_VAL },
  49. { MISCREG_SCR_SCRTZWELCK, MISCREG_SCR_SCRTZWELCK_VAL }
  50. };
  51. /*******************************************************************************
  52. * The Tegra power domain tree has a single system level power domain i.e. a
  53. * single root node. The first entry in the power domain descriptor specifies
  54. * the number of power domains at the highest power level.
  55. *******************************************************************************
  56. */
  57. static const uint8_t tegra_power_domain_tree_desc[] = {
  58. /* No of root nodes */
  59. 1,
  60. /* No of clusters */
  61. PLATFORM_CLUSTER_COUNT,
  62. /* No of CPU cores - cluster0 */
  63. PLATFORM_MAX_CPUS_PER_CLUSTER,
  64. /* No of CPU cores - cluster1 */
  65. PLATFORM_MAX_CPUS_PER_CLUSTER,
  66. /* No of CPU cores - cluster2 */
  67. PLATFORM_MAX_CPUS_PER_CLUSTER,
  68. /* No of CPU cores - cluster3 */
  69. PLATFORM_MAX_CPUS_PER_CLUSTER
  70. };
  71. /*******************************************************************************
  72. * This function returns the Tegra default topology tree information.
  73. ******************************************************************************/
  74. const uint8_t *plat_get_power_domain_tree_desc(void)
  75. {
  76. return tegra_power_domain_tree_desc;
  77. }
  78. /*
  79. * Table of regions to map using the MMU.
  80. */
  81. static const mmap_region_t tegra_mmap[] = {
  82. MAP_REGION_FLAT(TEGRA_MISC_BASE, 0x4000U, /* 16KB */
  83. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  84. MAP_REGION_FLAT(TEGRA_GPCDMA_BASE, 0x10000U, /* 64KB */
  85. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  86. MAP_REGION_FLAT(TEGRA_MC_STREAMID_BASE, 0x8000U, /* 32KB */
  87. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  88. MAP_REGION_FLAT(TEGRA_MC_BASE, 0x8000U, /* 32KB */
  89. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  90. #if !ENABLE_CONSOLE_SPE
  91. MAP_REGION_FLAT(TEGRA_UARTA_BASE, 0x20000U, /* 128KB - UART A, B*/
  92. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  93. MAP_REGION_FLAT(TEGRA_UARTC_BASE, 0x20000U, /* 128KB - UART C, G */
  94. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  95. MAP_REGION_FLAT(TEGRA_UARTD_BASE, 0x30000U, /* 192KB - UART D, E, F */
  96. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  97. #endif
  98. MAP_REGION_FLAT(TEGRA_XUSB_PADCTL_BASE, 0x2000U, /* 8KB */
  99. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  100. MAP_REGION_FLAT(TEGRA_GICD_BASE, 0x1000, /* 4KB */
  101. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  102. MAP_REGION_FLAT(TEGRA_GICC_BASE, 0x1000, /* 4KB */
  103. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  104. MAP_REGION_FLAT(TEGRA_SE0_BASE, 0x1000U, /* 4KB */
  105. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  106. MAP_REGION_FLAT(TEGRA_PKA1_BASE, 0x1000U, /* 4KB */
  107. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  108. MAP_REGION_FLAT(TEGRA_RNG1_BASE, 0x1000U, /* 4KB */
  109. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  110. MAP_REGION_FLAT(TEGRA_HSP_DBELL_BASE, 0x1000U, /* 4KB */
  111. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  112. #if ENABLE_CONSOLE_SPE
  113. MAP_REGION_FLAT(TEGRA_CONSOLE_SPE_BASE, 0x1000U, /* 4KB */
  114. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  115. #endif
  116. MAP_REGION_FLAT(TEGRA_TMRUS_BASE, TEGRA_TMRUS_SIZE, /* 4KB */
  117. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  118. MAP_REGION_FLAT(TEGRA_SCRATCH_BASE, 0x1000U, /* 4KB */
  119. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  120. MAP_REGION_FLAT(TEGRA_SMMU2_BASE, 0x800000U, /* 8MB */
  121. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  122. MAP_REGION_FLAT(TEGRA_SMMU1_BASE, 0x800000U, /* 8MB */
  123. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  124. MAP_REGION_FLAT(TEGRA_SMMU0_BASE, 0x800000U, /* 8MB */
  125. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  126. MAP_REGION_FLAT(TEGRA_BPMP_IPC_TX_PHYS_BASE, 0x10000U, /* 64KB */
  127. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  128. MAP_REGION_FLAT(TEGRA_CAR_RESET_BASE, 0x10000U, /* 64KB */
  129. (uint8_t)MT_DEVICE | (uint8_t)MT_RW | (uint8_t)MT_SECURE),
  130. {0}
  131. };
  132. /*******************************************************************************
  133. * Set up the pagetables as per the platform memory map & initialize the MMU
  134. ******************************************************************************/
  135. const mmap_region_t *plat_get_mmio_map(void)
  136. {
  137. /* MMIO space */
  138. return tegra_mmap;
  139. }
  140. /*******************************************************************************
  141. * Handler to get the System Counter Frequency
  142. ******************************************************************************/
  143. uint32_t plat_get_syscnt_freq2(void)
  144. {
  145. return 31250000;
  146. }
  147. #if !ENABLE_CONSOLE_SPE
  148. /*******************************************************************************
  149. * Maximum supported UART controllers
  150. ******************************************************************************/
  151. #define TEGRA194_MAX_UART_PORTS 7
  152. /*******************************************************************************
  153. * This variable holds the UART port base addresses
  154. ******************************************************************************/
  155. static uint32_t tegra194_uart_addresses[TEGRA194_MAX_UART_PORTS + 1] = {
  156. 0, /* undefined - treated as an error case */
  157. TEGRA_UARTA_BASE,
  158. TEGRA_UARTB_BASE,
  159. TEGRA_UARTC_BASE,
  160. TEGRA_UARTD_BASE,
  161. TEGRA_UARTE_BASE,
  162. TEGRA_UARTF_BASE,
  163. TEGRA_UARTG_BASE
  164. };
  165. #endif
  166. /*******************************************************************************
  167. * Enable console corresponding to the console ID
  168. ******************************************************************************/
  169. void plat_enable_console(int32_t id)
  170. {
  171. uint32_t console_clock = 0U;
  172. #if ENABLE_CONSOLE_SPE
  173. static console_t spe_console;
  174. if (id == TEGRA_CONSOLE_SPE_ID) {
  175. (void)console_spe_register(TEGRA_CONSOLE_SPE_BASE,
  176. console_clock,
  177. TEGRA_CONSOLE_BAUDRATE,
  178. &spe_console);
  179. console_set_scope(&spe_console, CONSOLE_FLAG_BOOT |
  180. CONSOLE_FLAG_RUNTIME | CONSOLE_FLAG_CRASH);
  181. }
  182. #else
  183. static console_t uart_console;
  184. if ((id > 0) && (id < TEGRA194_MAX_UART_PORTS)) {
  185. /*
  186. * Reference clock used by the FPGAs is a lot slower.
  187. */
  188. if (tegra_platform_is_fpga()) {
  189. console_clock = TEGRA_BOOT_UART_CLK_13_MHZ;
  190. } else {
  191. console_clock = TEGRA_BOOT_UART_CLK_408_MHZ;
  192. }
  193. (void)console_16550_register(tegra194_uart_addresses[id],
  194. console_clock,
  195. TEGRA_CONSOLE_BAUDRATE,
  196. &uart_console);
  197. console_set_scope(&uart_console, CONSOLE_FLAG_BOOT |
  198. CONSOLE_FLAG_RUNTIME | CONSOLE_FLAG_CRASH);
  199. }
  200. #endif
  201. }
  202. /*******************************************************************************
  203. * Verify SCR settings
  204. ******************************************************************************/
  205. static inline bool tegra194_is_scr_valid(void)
  206. {
  207. uint32_t scr_val;
  208. bool ret = true;
  209. for (uint8_t i = 0U; i < ARRAY_SIZE(t194_scr_settings); i++) {
  210. scr_val = mmio_read_32((uintptr_t)t194_scr_settings[i].scr_addr);
  211. if (scr_val != t194_scr_settings[i].scr_val) {
  212. ERROR("Mismatch at SCR addr = 0x%x\n", t194_scr_settings[i].scr_addr);
  213. ret = false;
  214. }
  215. }
  216. return ret;
  217. }
  218. /*******************************************************************************
  219. * Handler for early platform setup
  220. ******************************************************************************/
  221. void plat_early_platform_setup(void)
  222. {
  223. const plat_params_from_bl2_t *params_from_bl2 = bl31_get_plat_params();
  224. uint8_t enable_ccplex_lock_step = params_from_bl2->enable_ccplex_lock_step;
  225. uint64_t actlr_elx;
  226. /* Verify chip id is t194 */
  227. assert(tegra_chipid_is_t194());
  228. /* Verify SCR settings */
  229. if (tegra_platform_is_silicon()) {
  230. assert(tegra194_is_scr_valid());
  231. }
  232. /* sanity check MCE firmware compatibility */
  233. mce_verify_firmware_version();
  234. #if ENABLE_FEAT_RAS
  235. /* Enable Uncorrectable RAS error */
  236. tegra194_ras_enable();
  237. #endif
  238. /*
  239. * Program XUSB STREAMIDs
  240. * ======================
  241. * T19x XUSB has support for XUSB virtualization. It will have one
  242. * physical function (PF) and four Virtual function (VF)
  243. *
  244. * There were below two SIDs for XUSB until T186.
  245. * 1) #define TEGRA_SID_XUSB_HOST 0x1bU
  246. * 2) #define TEGRA_SID_XUSB_DEV 0x1cU
  247. *
  248. * We have below four new SIDs added for VF(s)
  249. * 3) #define TEGRA_SID_XUSB_VF0 0x5dU
  250. * 4) #define TEGRA_SID_XUSB_VF1 0x5eU
  251. * 5) #define TEGRA_SID_XUSB_VF2 0x5fU
  252. * 6) #define TEGRA_SID_XUSB_VF3 0x60U
  253. *
  254. * When virtualization is enabled then we have to disable SID override
  255. * and program above SIDs in below newly added SID registers in XUSB
  256. * PADCTL MMIO space. These registers are TZ protected and so need to
  257. * be done in ATF.
  258. * a) #define XUSB_PADCTL_HOST_AXI_STREAMID_PF_0 (0x136cU)
  259. * b) #define XUSB_PADCTL_DEV_AXI_STREAMID_PF_0 (0x139cU)
  260. * c) #define XUSB_PADCTL_HOST_AXI_STREAMID_VF_0 (0x1370U)
  261. * d) #define XUSB_PADCTL_HOST_AXI_STREAMID_VF_1 (0x1374U)
  262. * e) #define XUSB_PADCTL_HOST_AXI_STREAMID_VF_2 (0x1378U)
  263. * f) #define XUSB_PADCTL_HOST_AXI_STREAMID_VF_3 (0x137cU)
  264. *
  265. * This change disables SID override and programs XUSB SIDs in
  266. * above registers to support both virtualization and
  267. * non-virtualization platforms
  268. */
  269. if (tegra_platform_is_silicon() || tegra_platform_is_fpga()) {
  270. mmio_write_32(TEGRA_XUSB_PADCTL_BASE +
  271. XUSB_PADCTL_HOST_AXI_STREAMID_PF_0, TEGRA_SID_XUSB_HOST);
  272. assert(mmio_read_32(TEGRA_XUSB_PADCTL_BASE +
  273. XUSB_PADCTL_HOST_AXI_STREAMID_PF_0) == TEGRA_SID_XUSB_HOST);
  274. mmio_write_32(TEGRA_XUSB_PADCTL_BASE +
  275. XUSB_PADCTL_HOST_AXI_STREAMID_VF_0, TEGRA_SID_XUSB_VF0);
  276. assert(mmio_read_32(TEGRA_XUSB_PADCTL_BASE +
  277. XUSB_PADCTL_HOST_AXI_STREAMID_VF_0) == TEGRA_SID_XUSB_VF0);
  278. mmio_write_32(TEGRA_XUSB_PADCTL_BASE +
  279. XUSB_PADCTL_HOST_AXI_STREAMID_VF_1, TEGRA_SID_XUSB_VF1);
  280. assert(mmio_read_32(TEGRA_XUSB_PADCTL_BASE +
  281. XUSB_PADCTL_HOST_AXI_STREAMID_VF_1) == TEGRA_SID_XUSB_VF1);
  282. mmio_write_32(TEGRA_XUSB_PADCTL_BASE +
  283. XUSB_PADCTL_HOST_AXI_STREAMID_VF_2, TEGRA_SID_XUSB_VF2);
  284. assert(mmio_read_32(TEGRA_XUSB_PADCTL_BASE +
  285. XUSB_PADCTL_HOST_AXI_STREAMID_VF_2) == TEGRA_SID_XUSB_VF2);
  286. mmio_write_32(TEGRA_XUSB_PADCTL_BASE +
  287. XUSB_PADCTL_HOST_AXI_STREAMID_VF_3, TEGRA_SID_XUSB_VF3);
  288. assert(mmio_read_32(TEGRA_XUSB_PADCTL_BASE +
  289. XUSB_PADCTL_HOST_AXI_STREAMID_VF_3) == TEGRA_SID_XUSB_VF3);
  290. mmio_write_32(TEGRA_XUSB_PADCTL_BASE +
  291. XUSB_PADCTL_DEV_AXI_STREAMID_PF_0, TEGRA_SID_XUSB_DEV);
  292. assert(mmio_read_32(TEGRA_XUSB_PADCTL_BASE +
  293. XUSB_PADCTL_DEV_AXI_STREAMID_PF_0) == TEGRA_SID_XUSB_DEV);
  294. }
  295. /*
  296. * Enable dual execution optimized translations for all ELx.
  297. */
  298. if (enable_ccplex_lock_step != 0U) {
  299. actlr_elx = read_actlr_el3();
  300. actlr_elx |= DENVER_CPU_ENABLE_DUAL_EXEC_EL3;
  301. write_actlr_el3(actlr_elx);
  302. /* check if the bit is actually set */
  303. assert((read_actlr_el3() & DENVER_CPU_ENABLE_DUAL_EXEC_EL3) != 0ULL);
  304. actlr_elx = read_actlr_el2();
  305. actlr_elx |= DENVER_CPU_ENABLE_DUAL_EXEC_EL2;
  306. write_actlr_el2(actlr_elx);
  307. /* check if the bit is actually set */
  308. assert((read_actlr_el2() & DENVER_CPU_ENABLE_DUAL_EXEC_EL2) != 0ULL);
  309. actlr_elx = read_actlr_el1();
  310. actlr_elx |= DENVER_CPU_ENABLE_DUAL_EXEC_EL1;
  311. write_actlr_el1(actlr_elx);
  312. /* check if the bit is actually set */
  313. assert((read_actlr_el1() & DENVER_CPU_ENABLE_DUAL_EXEC_EL1) != 0ULL);
  314. }
  315. }
  316. /* Secure IRQs for Tegra194 */
  317. static const interrupt_prop_t tegra194_interrupt_props[] = {
  318. INTR_PROP_DESC(TEGRA_SDEI_SGI_PRIVATE, PLAT_SDEI_CRITICAL_PRI,
  319. GICV2_INTR_GROUP0, GIC_INTR_CFG_EDGE),
  320. INTR_PROP_DESC(TEGRA194_TOP_WDT_IRQ, PLAT_TEGRA_WDT_PRIO,
  321. GICV2_INTR_GROUP0, GIC_INTR_CFG_EDGE)
  322. };
  323. /*******************************************************************************
  324. * Initialize the GIC and SGIs
  325. ******************************************************************************/
  326. void plat_gic_setup(void)
  327. {
  328. tegra_gic_setup(tegra194_interrupt_props, ARRAY_SIZE(tegra194_interrupt_props));
  329. tegra_gic_init();
  330. /*
  331. * Initialize the FIQ handler
  332. */
  333. tegra_fiq_handler_setup();
  334. }
  335. /*******************************************************************************
  336. * Return pointer to the BL31 params from previous bootloader
  337. ******************************************************************************/
  338. struct tegra_bl31_params *plat_get_bl31_params(void)
  339. {
  340. uint64_t val;
  341. val = (mmio_read_32(TEGRA_SCRATCH_BASE + SCRATCH_BL31_PARAMS_HI_ADDR) &
  342. SCRATCH_BL31_PARAMS_HI_ADDR_MASK) >> SCRATCH_BL31_PARAMS_HI_ADDR_SHIFT;
  343. val <<= 32;
  344. val |= mmio_read_32(TEGRA_SCRATCH_BASE + SCRATCH_BL31_PARAMS_LO_ADDR);
  345. return (struct tegra_bl31_params *)(uintptr_t)val;
  346. }
  347. /*******************************************************************************
  348. * Return pointer to the BL31 platform params from previous bootloader
  349. ******************************************************************************/
  350. plat_params_from_bl2_t *plat_get_bl31_plat_params(void)
  351. {
  352. uint64_t val;
  353. val = (mmio_read_32(TEGRA_SCRATCH_BASE + SCRATCH_BL31_PLAT_PARAMS_HI_ADDR) &
  354. SCRATCH_BL31_PLAT_PARAMS_HI_ADDR_MASK) >> SCRATCH_BL31_PLAT_PARAMS_HI_ADDR_SHIFT;
  355. val <<= 32;
  356. val |= mmio_read_32(TEGRA_SCRATCH_BASE + SCRATCH_BL31_PLAT_PARAMS_LO_ADDR);
  357. return (plat_params_from_bl2_t *)(uintptr_t)val;
  358. }
  359. /*******************************************************************************
  360. * Handler for late platform setup
  361. ******************************************************************************/
  362. void plat_late_platform_setup(void)
  363. {
  364. #if ENABLE_STRICT_CHECKING_MODE
  365. /*
  366. * Enable strict checking after programming the GSC for
  367. * enabling TZSRAM and TZDRAM
  368. */
  369. mce_enable_strict_checking();
  370. mce_verify_strict_checking();
  371. #endif
  372. }
  373. /*******************************************************************************
  374. * Handler to indicate support for System Suspend
  375. ******************************************************************************/
  376. bool plat_supports_system_suspend(void)
  377. {
  378. return true;
  379. }
  380. /*******************************************************************************
  381. * Platform specific runtime setup.
  382. ******************************************************************************/
  383. void plat_runtime_setup(void)
  384. {
  385. /*
  386. * During cold boot, it is observed that the arbitration
  387. * bit is set in the Memory controller leading to false
  388. * error interrupts in the non-secure world. To avoid
  389. * this, clean the interrupt status register before
  390. * booting into the non-secure world
  391. */
  392. tegra_memctrl_clear_pending_interrupts();
  393. /*
  394. * During boot, USB3 and flash media (SDMMC/SATA) devices need
  395. * access to IRAM. Because these clients connect to the MC and
  396. * do not have a direct path to the IRAM, the MC implements AHB
  397. * redirection during boot to allow path to IRAM. In this mode
  398. * accesses to a programmed memory address aperture are directed
  399. * to the AHB bus, allowing access to the IRAM. This mode must be
  400. * disabled before we jump to the non-secure world.
  401. */
  402. tegra_memctrl_disable_ahb_redirection();
  403. /*
  404. * Verify the integrity of the previously configured SMMU(s) settings
  405. */
  406. tegra_smmu_verify();
  407. }