summaryrefslogtreecommitdiff
path: root/src/soc/nvidia/tegra132/ccplex.c
diff options
context:
space:
mode:
authorAaron Durbin <adurbin@chromium.org>2014-06-30 16:37:13 -0500
committerMarc Jones <marc.jones@se-eng.com>2015-03-04 19:51:42 +0100
commit3aca2cdced54ff525022366bc6dee949b0152d83 (patch)
tree5380f2c55a8d89c48465865634cb8933ff243a69 /src/soc/nvidia/tegra132/ccplex.c
parent73307e0917c9084f1dc264ac2a61a094fddf1167 (diff)
t132: load MTS microcode
The armv8 cores need to have microcode loaded before they can be taken out of reset. Locate and load the MTS microcode at the fixed address of 0x82000000. The ccplex, once enabled, will decode and transfer the microcode to the carveout region. BUG=chrome-os-partner:29922 BRANCH=None TEST=Built and ran. Confirmed dump of MTS region after loading code. Original-Change-Id: Ie5ab72e5363cbdb251d169356f718020d375fce6 Original-Signed-off-by: Aaron Durbin <adurbin@chromium.org> Original-Reviewed-on: https://chromium-review.googlesource.com/206290 Original-Reviewed-by: Furquan Shaikh <furquan@chromium.org> (cherry picked from commit 6726d8862c08b155b9218aa5e2e39428a105089e) Signed-off-by: Marc Jones <marc.jones@se-eng.com> Change-Id: I425c2e2fd1eaec49d81bef1ff4bf4f36da9296df Reviewed-on: http://review.coreboot.org/8580 Tested-by: build bot (Jenkins) Reviewed-by: Patrick Georgi <pgeorgi@google.com>
Diffstat (limited to 'src/soc/nvidia/tegra132/ccplex.c')
-rw-r--r--src/soc/nvidia/tegra132/ccplex.c61
1 files changed, 61 insertions, 0 deletions
diff --git a/src/soc/nvidia/tegra132/ccplex.c b/src/soc/nvidia/tegra132/ccplex.c
new file mode 100644
index 0000000000..b569bd2124
--- /dev/null
+++ b/src/soc/nvidia/tegra132/ccplex.c
@@ -0,0 +1,61 @@
+/*
+ * This file is part of the coreboot project.
+ *
+ * Copyright 2014 Google Inc.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; version 2 of the License.
+ *
+ * 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.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program; if not, write to the Free Software
+ * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+ */
+
+#include <string.h>
+#include <console/console.h>
+#include <arch/io.h>
+#include <cbfs.h>
+#include <soc/addressmap.h>
+#include "ccplex.h"
+#include "mc.h"
+
+#define MTS_FILE_NAME "mts"
+
+int ccplex_load_mts(void)
+{
+ struct cbfs_file file;
+ ssize_t offset;
+ size_t nread;
+ /*
+ * MTS location is hard coded to this magic address. The hardware will
+ * take the MTS from this location and place it in the final resting
+ * place in the carveout region.
+ */
+ void * const mts = (void *)(uintptr_t)MTS_LOAD_ADDRESS;
+ struct cbfs_media *media = CBFS_DEFAULT_MEDIA;
+
+ offset = cbfs_locate_file(media, &file, MTS_FILE_NAME);
+ if (offset < 0) {
+ printk(BIOS_DEBUG, "MTS file not found: %s\n", MTS_FILE_NAME);
+ return -1;
+ }
+
+ /* Read MTS file into the carveout region. */
+ nread = cbfs_read(media, mts, offset, file.len);
+
+ if (nread != file.len) {
+ printk(BIOS_DEBUG, "MTS bytes read (%zu) != file length(%u)!\n",
+ nread, file.len);
+ return -1;
+ }
+
+ printk(BIOS_DEBUG, "MTS: %zu bytes loaded @ %p\n", nread, mts);
+
+ return 0;
+}