| 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; | 
| } | 
|  |