Add the ability to compile for the ARM architecture.
Note: The internal programmer will abort during processor check. This is intentional. The other hardware drivers (except those using port I/O) should work, though. My hope is to get this in before 0.9.5 so we can get a release with at least some ARM support.
Compile and run tests appreciated. If you're afraid, you can just run dummy. That would at least prove that flashrom compiles and works somehow.
David: This is mostly your code (I only extracted it from the chromium branch of flashrom), could you sign off on it?
Regards, Carl-Daniel
Index: flashrom-arm/hwaccess.c =================================================================== --- flashrom-arm/hwaccess.c (Revision 1491) +++ flashrom-arm/hwaccess.c (Arbeitskopie) @@ -116,6 +116,20 @@ { }
+#elif defined (__arm__) + +static inline void sync_primitive(void) +{ +} + +void get_io_perms(void) +{ +} + +void release_io_perms(void) +{ +} + #else
#error Unknown architecture Index: flashrom-arm/hwaccess.h =================================================================== --- flashrom-arm/hwaccess.h (Revision 1491) +++ flashrom-arm/hwaccess.h (Arbeitskopie) @@ -68,8 +68,15 @@ #error Little-endian PowerPC #defines are unknown #endif
+#elif defined (__arm__) +#if defined (__ARMEL__) +#define __FLASHROM_LITTLE_ENDIAN__ 1 +#else +#error Big-endian ARM #defines are unknown #endif
+#endif + #if !defined (__FLASHROM_BIG_ENDIAN__) && !defined (__FLASHROM_LITTLE_ENDIAN__) /* Nonstandard libc-specific macros for determining endianness. */ #if defined(__GLIBC__) @@ -326,6 +333,10 @@
/* PCI port I/O is not yet implemented on MIPS. */
+#elif defined(__arm__) + +/* Non memory mapped I/O is not supported on ARM. */ + #else
#error Unknown architecture, please check if it supports PCI port IO. Index: flashrom-arm/Makefile =================================================================== --- flashrom-arm/Makefile (Revision 1491) +++ flashrom-arm/Makefile (Arbeitskopie) @@ -215,8 +215,9 @@ # below uses CC itself. override ARCH := $(strip $(shell LC_ALL=C $(CC) $(CPPFLAGS) -E arch.h 2>/dev/null | grep -v '^#' | grep '"' | cut -f 2 -d'"'))
-ifeq ($(ARCH), ppc) -# There's no PCI port I/O support on PPC/PowerPC, yet. +# PCI port I/O support is unimplemented on PPC/MIPS and unavailable on ARM. +# Right now this means the drivers below only work on x86. +ifneq ($(ARCH), x86) ifeq ($(CONFIG_NIC3COM), yes) UNSUPPORTED_FEATURES += CONFIG_NIC3COM=yes else Index: flashrom-arm/arch.h =================================================================== --- flashrom-arm/arch.h (Revision 1491) +++ flashrom-arm/arch.h (Arbeitskopie) @@ -27,5 +27,7 @@ #define __FLASHROM_ARCH__ "mips" #elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__) #define __FLASHROM_ARCH__ "ppc" +#elif defined(__arm__) +#define __FLASHROM_ARCH__ "arm" #endif __FLASHROM_ARCH__ Index: flashrom-arm/programmer.h =================================================================== --- flashrom-arm/programmer.h (Revision 1491) +++ flashrom-arm/programmer.h (Arbeitskopie) @@ -527,6 +527,7 @@ int register_spi_programmer(const struct spi_programmer *programmer);
/* ichspi.c */ +#if CONFIG_INTERNAL == 1 enum ich_chipset { CHIPSET_ICH_UNKNOWN, CHIPSET_ICH7 = 7, @@ -538,7 +539,6 @@ CHIPSET_7_SERIES_PANTHER_POINT };
-#if CONFIG_INTERNAL == 1 extern uint32_t ichspi_bbar; int ich_init_spi(struct pci_dev *dev, uint32_t base, void *rcrb, enum ich_chipset ich_generation);