[flashrom] [PATCH] ARM support

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Sun Feb 12 06:02:38 CET 2012


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


-- 
http://www.hailfinger.org/





More information about the flashrom mailing list