summaryrefslogtreecommitdiff
path: root/src/soc/nvidia/tegra124
diff options
context:
space:
mode:
authorGabe Black <gabeblack@google.com>2013-10-07 01:57:42 -0700
committerIsaac Christensen <isaac.christensen@se-eng.com>2014-08-19 22:47:04 +0200
commit14eb43be984cc1f18fd950af9bf162b0104f8458 (patch)
tree26c2a253818cfe26f23e7e86a3c571ae46cc5fd6 /src/soc/nvidia/tegra124
parent08d5a89fd0a64740b81d1319551ac580068d835d (diff)
downloadcoreboot-14eb43be984cc1f18fd950af9bf162b0104f8458.tar.xz
tegra124: Implement the tegra i2c driver.
This uses the packet mode of the controller since that allows transfering more data at a time. Change-Id: I8329e5f915123cb55464fc28f7df9f9037b0446d Signed-off-by: Gabe Black <gabeblack@google.com> Reviewed-on: https://chromium-review.googlesource.com/172402 Reviewed-by: Ronald Minnich <rminnich@chromium.org> Reviewed-by: Julius Werner <jwerner@chromium.org> Reviewed-by: David Hendricks <dhendrix@chromium.org> Tested-by: Gabe Black <gabeblack@chromium.org> Commit-Queue: Gabe Black <gabeblack@chromium.org> (cherry picked from commit 4444cd626a55c8c2486cda6ac9cfece4e53dd0d3) Signed-off-by: Isaac Christensen <isaac.christensen@se-eng.com> Reviewed-on: http://review.coreboot.org/6703 Tested-by: build bot (Jenkins) Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net> Reviewed-by: Ronald G. Minnich <rminnich@gmail.com>
Diffstat (limited to 'src/soc/nvidia/tegra124')
-rw-r--r--src/soc/nvidia/tegra124/Makefile.inc2
-rw-r--r--src/soc/nvidia/tegra124/i2c.c27
-rw-r--r--src/soc/nvidia/tegra124/include/soc/addressmap.h10
3 files changed, 39 insertions, 0 deletions
diff --git a/src/soc/nvidia/tegra124/Makefile.inc b/src/soc/nvidia/tegra124/Makefile.inc
index 683d940eb4..d4d16fec2c 100644
--- a/src/soc/nvidia/tegra124/Makefile.inc
+++ b/src/soc/nvidia/tegra124/Makefile.inc
@@ -2,8 +2,10 @@ CBOOTIMAGE = cbootimage
bootblock-y += cbfs.c
bootblock-y += clock.c
+bootblock-y += i2c.c
bootblock-y += monotonic_timer.c
bootblock-y += ../tegra/gpio.c
+bootblock-y += ../tegra/i2c.c
bootblock-y += ../tegra/pingroup.c
bootblock-y += ../tegra/pinmux.c
bootblock-y += timer.c
diff --git a/src/soc/nvidia/tegra124/i2c.c b/src/soc/nvidia/tegra124/i2c.c
new file mode 100644
index 0000000000..b54230b171
--- /dev/null
+++ b/src/soc/nvidia/tegra124/i2c.c
@@ -0,0 +1,27 @@
+/*
+ * 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 <soc/addressmap.h>
+#include <soc/nvidia/tegra/i2c.h>
+
+void * const tegra_i2c_bases[TEGRA_I2C_BASE_COUNT] = {
+ (void *)TEGRA_I2C_BASE, (void *)TEGRA_I2C2_BASE,
+ (void *)TEGRA_I2C3_BASE, (void *)TEGRA_I2C4_BASE,
+ (void *)TEGRA_I2C5_BASE, (void *)TEGRA_I2C6_BASE
+};
diff --git a/src/soc/nvidia/tegra124/include/soc/addressmap.h b/src/soc/nvidia/tegra124/include/soc/addressmap.h
index 2fd607d4ad..bf59d75085 100644
--- a/src/soc/nvidia/tegra124/include/soc/addressmap.h
+++ b/src/soc/nvidia/tegra124/include/soc/addressmap.h
@@ -44,7 +44,13 @@ enum {
TEGRA_APB_UARTD_BASE = TEGRA_APB_MISC_BASE + 0x6300,
TEGRA_APB_UARTE_BASE = TEGRA_APB_MISC_BASE + 0x6400,
TEGRA_NAND_BASE = TEGRA_APB_MISC_BASE + 0x8000,
+ TEGRA_I2C_BASE = TEGRA_APB_MISC_BASE + 0xC000,
TEGRA_SPI_BASE = TEGRA_APB_MISC_BASE + 0xC380,
+ TEGRA_I2C2_BASE = TEGRA_APB_MISC_BASE + 0xC400,
+ TEGRA_I2C3_BASE = TEGRA_APB_MISC_BASE + 0xC500,
+ TEGRA_I2C4_BASE = TEGRA_APB_MISC_BASE + 0xC700,
+ TEGRA_I2C5_BASE = TEGRA_APB_MISC_BASE + 0xD000,
+ TEGRA_I2C6_BASE = TEGRA_APB_MISC_BASE + 0xD100,
TEGRA_SLINK1_BASE = TEGRA_APB_MISC_BASE + 0xD400,
TEGRA_SLINK2_BASE = TEGRA_APB_MISC_BASE + 0xD600,
TEGRA_SLINK3_BASE = TEGRA_APB_MISC_BASE + 0xD800,
@@ -59,4 +65,8 @@ enum {
TEGRA_USB_ADDR_MASK = 0xFFFFC000,
};
+enum {
+ TEGRA_I2C_BASE_COUNT = 6,
+};
+
#endif /* __SOC_NVIDIA_TEGRA124_INCLUDE_SOC_ADDRESS_MAP_H__ */