Index: processor_enable.c |
diff --git a/processor_enable.c b/processor_enable.c |
index b14cd3381543cc684c88bfadb1746aa5b44d2b06..7c64e946d535505afb9541e8658b7a721dedeb8a 100644 |
--- a/processor_enable.c |
+++ b/processor_enable.c |
@@ -81,6 +81,45 @@ static int is_loongson(void) |
} |
#endif |
+#if defined(__arm__) |
+#include <stdio.h> |
+#include <string.h> |
+#include <ctype.h> |
+ |
+static int is_tegra2(void) |
+{ |
+ FILE *cpuinfo; |
+ uint32_t impl = 0, architecture = 0, variant = 0, part = 0; |
+ |
+ cpuinfo = fopen("/proc/cpuinfo", "rb"); |
+ if (!cpuinfo) |
+ return 0; |
+ while (!feof(cpuinfo)) { |
+ char line[512], *ptr; |
+ if (fgets(line, sizeof(line), cpuinfo) == NULL) |
+ break; |
+ ptr = line; |
+ while (*ptr && isspace((unsigned char)*ptr)) |
+ ptr++; |
+ if (strncmp(ptr, "CPU part", sizeof("CPU part") - 1) == 0) |
+ ptr += sizeof("CPU part") - 1; |
+ while (*ptr && isspace((unsigned char)*ptr)) |
+ ptr++; |
+ if (*ptr != ':') |
+ continue; |
+ |
+ fclose(cpuinfo); |
+ ptr++; |
+ while (*ptr && isspace((unsigned char)*ptr)) |
+ ptr++; |
+ return (strncmp(ptr, "0xc09", |
+ sizeof("0xc09") - 1) == 0); |
+ } |
+ fclose(cpuinfo); |
+ return 0; |
+} |
+#endif |
+ |
int processor_flash_enable(void) |
{ |
/* FIXME: detect loongson on FreeBSD and OpenBSD as well. */ |
@@ -90,6 +129,12 @@ int processor_flash_enable(void) |
return 0; |
} |
#endif |
+#if defined (__arm__) |
+ if (is_tegra2()) { |
+ msg_pinfo("Detected NVIDIA Tegra 2.\n"); |
+ return tegra2_spi_init(); |
+ } |
+#endif |
/* Not implemented yet. Oh well. */ |
return 1; |
} |