[flashrom] [commit] r1882 - trunk

repository service svn at flashrom.org
Tue Feb 10 09:03:11 CET 2015


Author: stefanct
Date: Tue Feb 10 09:03:10 2015
New Revision: 1882
URL: http://flashrom.org/trac/flashrom/changeset/1882

Log:
Add support for SPARC (maybe).

Was implemented by SPARC newbies, does (cross-)compile but is not run-tested.

Signed-off-by: Stefan Tauner <stefan.tauner at alumni.tuwien.ac.at>
Acked-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Modified:
   trunk/Makefile
   trunk/hwaccess.c
   trunk/hwaccess.h
   trunk/platform.h

Modified: trunk/Makefile
==============================================================================
--- trunk/Makefile	Sun Feb  8 22:58:10 2015	(r1881)
+++ trunk/Makefile	Tue Feb 10 09:03:10 2015	(r1882)
@@ -328,7 +328,7 @@
 # below uses CC itself.
 override ARCH := $(strip $(shell LC_ALL=C $(CC) $(CPPFLAGS) -E archtest.c 2>/dev/null | grep -v '^\#' | grep '"' | cut -f 2 -d'"'))
 
-# PCI port I/O support is unimplemented on PPC/MIPS and unavailable on ARM.
+# PCI port I/O support is unimplemented on PPC/MIPS/SPARC and unavailable on ARM.
 # Right now this means the drivers below only work on x86.
 ifneq ($(ARCH), x86)
 ifeq ($(CONFIG_NIC3COM), yes)

Modified: trunk/hwaccess.c
==============================================================================
--- trunk/hwaccess.c	Sun Feb  8 22:58:10 2015	(r1881)
+++ trunk/hwaccess.c	Tue Feb 10 09:03:10 2015	(r1882)
@@ -49,13 +49,29 @@
  */
 static inline void sync_primitive(void)
 {
-/* This is needed only on PowerPC because...
- * - x86 uses uncached accesses which have a strongly ordered memory model and
- * - MIPS uses uncached accesses in mode 2 on /dev/mem which has also a strongly ordered memory model
- * - ARM uses a strongly ordered memory model for device memories.
+/* This is not needed for...
+ * - x86: uses uncached accesses which have a strongly ordered memory model.
+ * - MIPS: uses uncached accesses in mode 2 on /dev/mem which has also a strongly ordered memory model.
+ * - ARM: uses a strongly ordered memory model for device memories.
+ *
+ * See also https://git.kernel.org/cgit/linux/kernel/git/torvalds/linux.git/tree/Documentation/memory-barriers.txt
  */
 #if IS_PPC // cf. http://lxr.free-electrons.com/source/arch/powerpc/include/asm/barrier.h
 	asm("eieio" : : : "memory");
+#elif IS_SPARC
+#if defined(__sparc_v9__) || defined(__sparcv9)
+	/* Sparc V9 CPUs support three different memory orderings that range from x86-like TSO to PowerPC-like
+	 * RMO. The modes can be switched at runtime thus to make sure we maintain the right order of access we
+	 * use the strongest hardware memory barriers that exist on Sparc V9. */
+	asm volatile ("membar #Sync" ::: "memory");
+#elif defined(__sparc_v8__) || defined(__sparcv8)
+	/* On SPARC V8 there is no RMO just PSO and that does not apply to I/O accesses... but if V8 code is run
+	 * on V9 CPUs it might apply... or not... we issue a write barrier anyway. That's the most suitable
+	 * operation in the V8 instruction set anyway. If you know better then please tell us. */
+	asm volatile ("stbar");
+#else
+	#error Unknown and/or unsupported SPARC instruction set version detected.
+#endif
 #endif
 }
 

Modified: trunk/hwaccess.h
==============================================================================
--- trunk/hwaccess.h	Sun Feb  8 22:58:10 2015	(r1881)
+++ trunk/hwaccess.h	Tue Feb 10 09:03:10 2015	(r1882)
@@ -89,6 +89,10 @@
 #define __FLASHROM_LITTLE_ENDIAN__ 1
 #endif
 
+#elif IS_SPARC
+/* SPARC is big endian in general (but allows to access data in little endian too). */
+#define __FLASHROM_BIG_ENDIAN__ 1
+
 #endif /* IS_? */
 
 #if !defined (__FLASHROM_BIG_ENDIAN__) && !defined (__FLASHROM_LITTLE_ENDIAN__)
@@ -357,6 +361,10 @@
 
 /* PCI port I/O is not yet implemented on MIPS. */
 
+#elif IS_SPARC
+
+/* PCI port I/O is not yet implemented on SPARC. */
+
 #elif IS_ARM
 
 /* Non memory mapped I/O is not supported on ARM. */

Modified: trunk/platform.h
==============================================================================
--- trunk/platform.h	Sun Feb  8 22:58:10 2015	(r1881)
+++ trunk/platform.h	Tue Feb 10 09:03:10 2015	(r1882)
@@ -45,9 +45,12 @@
       defined(__aarch64__)
 	#define __FLASHROM_ARCH__ "arm"
 	#define IS_ARM 1
+#elif defined (__sparc__) || defined (__sparc)
+	#define __FLASHROM_ARCH__ "sparc"
+	#define IS_SPARC 1
 #endif
 
-#if !(IS_X86 || IS_MIPS || IS_PPC || IS_ARM)
+#if !(IS_X86 || IS_MIPS || IS_PPC || IS_ARM || IS_SPARC)
 #error Unknown architecture
 #endif
 




More information about the flashrom mailing list