From 396b0722978f9254a3d012210a89ccdead23a916 Mon Sep 17 00:00:00 2001 From: Gabe Black Date: Thu, 26 Sep 2013 16:22:09 -0700 Subject: 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 Reviewed-on: https://chromium-review.googlesource.com/170836 Reviewed-by: Gabe Black Commit-Queue: Gabe Black Tested-by: Gabe Black (cherry picked from commit 462456fd00164c10c80eff72240226a04445fe60) Signed-off-by: Isaac Christensen Reviewed-on: http://review.coreboot.org/6431 Tested-by: build bot (Jenkins) Reviewed-by: Edward O'Callaghan --- src/soc/Kconfig | 1 + src/soc/Makefile.inc | 1 + src/soc/nvidia/Kconfig | 1 + src/soc/nvidia/Makefile.inc | 1 + src/soc/nvidia/tegra124/Kconfig | 42 ++++++++++++++++++++++++ src/soc/nvidia/tegra124/Makefile.inc | 9 ++++++ src/soc/nvidia/tegra124/bootblock.c | 23 ++++++++++++++ src/soc/nvidia/tegra124/cbfs.c | 26 +++++++++++++++ src/soc/nvidia/tegra124/monotonic_timer.c | 24 ++++++++++++++ src/soc/nvidia/tegra124/timer.c | 53 +++++++++++++++++++++++++++++++ 10 files changed, 181 insertions(+) create mode 100644 src/soc/nvidia/Kconfig create mode 100644 src/soc/nvidia/Makefile.inc create mode 100644 src/soc/nvidia/tegra124/Kconfig create mode 100644 src/soc/nvidia/tegra124/Makefile.inc create mode 100644 src/soc/nvidia/tegra124/bootblock.c create mode 100644 src/soc/nvidia/tegra124/cbfs.c create mode 100644 src/soc/nvidia/tegra124/monotonic_timer.c create mode 100644 src/soc/nvidia/tegra124/timer.c diff --git a/src/soc/Kconfig b/src/soc/Kconfig index 823d76c725..152e206374 100644 --- a/src/soc/Kconfig +++ b/src/soc/Kconfig @@ -1 +1,2 @@ source src/soc/intel/Kconfig +source src/soc/nvidia/Kconfig diff --git a/src/soc/Makefile.inc b/src/soc/Makefile.inc index fdf9db0d59..d419309105 100644 --- a/src/soc/Makefile.inc +++ b/src/soc/Makefile.inc @@ -2,3 +2,4 @@ ## Subdirectories ################################################################################ subdirs-y += intel +subdirs-y += nvidia 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 /* 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 + +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 +#include +#include +#include + +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); +} + -- cgit v1.2.3