diff options
author | Gabe Black <gabeblack@google.com> | 2013-09-26 16:22:09 -0700 |
---|---|---|
committer | Isaac Christensen <isaac.christensen@se-eng.com> | 2014-08-05 18:44:53 +0200 |
commit | 396b0722978f9254a3d012210a89ccdead23a916 (patch) | |
tree | d4c05f76dcadc8cb0928c57bcb5e5fad17a0705d /src/soc/nvidia | |
parent | 1ee2c6dbdfe7e35ab5e25a6136eab824ed2fec8f (diff) |
tegra124: Add a stub implementation of the tegra124 SOC.
Most things still needs to be filled in, but this will allow us to build
boards which use this SOC.
Change-Id: Ic790685a78193ccb223f4d9355bd3db57812af39
Signed-off-by: Gabe Black <gabeblack@google.com>
Reviewed-on: https://chromium-review.googlesource.com/170836
Reviewed-by: Gabe Black <gabeblack@chromium.org>
Commit-Queue: Gabe Black <gabeblack@chromium.org>
Tested-by: Gabe Black <gabeblack@chromium.org>
(cherry picked from commit 462456fd00164c10c80eff72240226a04445fe60)
Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com>
Reviewed-on: http://review.coreboot.org/6431
Tested-by: build bot (Jenkins)
Reviewed-by: Edward O'Callaghan <eocallaghan@alterapraxis.com>
Diffstat (limited to 'src/soc/nvidia')
-rw-r--r-- | src/soc/nvidia/Kconfig | 1 | ||||
-rw-r--r-- | src/soc/nvidia/Makefile.inc | 1 | ||||
-rw-r--r-- | src/soc/nvidia/tegra124/Kconfig | 42 | ||||
-rw-r--r-- | src/soc/nvidia/tegra124/Makefile.inc | 9 | ||||
-rw-r--r-- | src/soc/nvidia/tegra124/bootblock.c | 23 | ||||
-rw-r--r-- | src/soc/nvidia/tegra124/cbfs.c | 26 | ||||
-rw-r--r-- | src/soc/nvidia/tegra124/monotonic_timer.c | 24 | ||||
-rw-r--r-- | src/soc/nvidia/tegra124/timer.c | 53 |
8 files changed, 179 insertions, 0 deletions
diff --git a/src/soc/nvidia/Kconfig b/src/soc/nvidia/Kconfig new file mode 100644 index 0000000000..836edeb926 --- /dev/null +++ b/src/soc/nvidia/Kconfig @@ -0,0 +1 @@ +source src/soc/nvidia/tegra124/Kconfig diff --git a/src/soc/nvidia/Makefile.inc b/src/soc/nvidia/Makefile.inc new file mode 100644 index 0000000000..34feb0a280 --- /dev/null +++ b/src/soc/nvidia/Makefile.inc @@ -0,0 +1 @@ +subdirs-$(CONFIG_SOC_NVIDIA_TEGRA124) += tegra124 diff --git a/src/soc/nvidia/tegra124/Kconfig b/src/soc/nvidia/tegra124/Kconfig new file mode 100644 index 0000000000..5d8fd4c878 --- /dev/null +++ b/src/soc/nvidia/tegra124/Kconfig @@ -0,0 +1,42 @@ +config SOC_NVIDIA_TEGRA124 + depends on ARCH_ARMV7 + bool + default n + +if SOC_NVIDIA_TEGRA124 + +config BOOTBLOCK_CPU_INIT + string + default "soc/nvidia/tegra124/bootblock.c" + help + CPU/SoC-specific bootblock code. This is useful if the + bootblock must load microcode or copy data from ROM before + searching for the bootblock. + +# ROM image layout. +# +# 0x00000 Combined bootblock and BCT blob +# 0x18000 Master CBFS header. +# 0x18080 Free for CBFS data. + +config BOOTBLOCK_ROM_OFFSET + hex + default 0x0 + +config CBFS_HEADER_ROM_OFFSET + hex "offset of master CBFS header in ROM" + default 0x18000 + +config CBFS_ROM_OFFSET + hex "offset of CBFS data in ROM" + default 0x18080 + +config SYS_SDRAM_BASE + hex + default 0x80000000 + +config BOOTBLOCK_BASE + hex + default 0x80000000 + +endif diff --git a/src/soc/nvidia/tegra124/Makefile.inc b/src/soc/nvidia/tegra124/Makefile.inc new file mode 100644 index 0000000000..49e2b1f31e --- /dev/null +++ b/src/soc/nvidia/tegra124/Makefile.inc @@ -0,0 +1,9 @@ +bootblock-y += cbfs.c + +romstage-y += cbfs.c +romstage-y += monotonic_timer.c +romstage-y += timer.c + +ramstage-y += cbfs.c +ramstage-y += monotonic_timer.c +ramstage-y += timer.c diff --git a/src/soc/nvidia/tegra124/bootblock.c b/src/soc/nvidia/tegra124/bootblock.c new file mode 100644 index 0000000000..a8d6990a61 --- /dev/null +++ b/src/soc/nvidia/tegra124/bootblock.c @@ -0,0 +1,23 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2013 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 + */ + +void bootblock_cpu_init(void); +void bootblock_cpu_init(void) +{ +} diff --git a/src/soc/nvidia/tegra124/cbfs.c b/src/soc/nvidia/tegra124/cbfs.c new file mode 100644 index 0000000000..ede9146180 --- /dev/null +++ b/src/soc/nvidia/tegra124/cbfs.c @@ -0,0 +1,26 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2013 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 <cbfs.h> /* This driver serves as a CBFS media source. */ + +int init_default_cbfs_media(struct cbfs_media *media) +{ + return -1; +} diff --git a/src/soc/nvidia/tegra124/monotonic_timer.c b/src/soc/nvidia/tegra124/monotonic_timer.c new file mode 100644 index 0000000000..3423dde3f5 --- /dev/null +++ b/src/soc/nvidia/tegra124/monotonic_timer.c @@ -0,0 +1,24 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2013 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 <timer.h> + +void timer_monotonic_get(struct mono_time *mt) +{ +} diff --git a/src/soc/nvidia/tegra124/timer.c b/src/soc/nvidia/tegra124/timer.c new file mode 100644 index 0000000000..83f499cbf1 --- /dev/null +++ b/src/soc/nvidia/tegra124/timer.c @@ -0,0 +1,53 @@ +/* + * This file is part of the coreboot project. + * + * Copyright 2013 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 <console/console.h> +#include <timer.h> +#include <delay.h> +#include <thread.h> + +void init_timer(void) +{ +} + +/* delay x useconds */ +void udelay(unsigned usec) +{ + struct mono_time current, end; + + if (!thread_yield_microseconds(usec)) + return; + + timer_monotonic_get(¤t); + end = current; + mono_time_add_usecs(&end, usec); + + if (mono_time_after(¤t, &end)) { + printk(BIOS_EMERG, "udelay: 0x%08x is impossibly large\n", + usec); + /* There's not much we can do if usec is too big. Use a long, + * paranoid delay value and hope for the best... */ + end = current; + mono_time_add_usecs(&end, USECS_PER_SEC); + } + + while (mono_time_before(¤t, &end)) + timer_monotonic_get(¤t); +} + |