[flashrom] [PATCH] Try to handle non-x86 sanely

Uwe Hermann uwe at hermann-uwe.de
Wed May 26 01:02:41 CEST 2010


On Wed, May 26, 2010 at 12:34:49AM +0200, Carl-Daniel Hailfinger wrote:
> Handle the following architectures in generic flashrom code:
> - x86/x86_64 (little endian)
> - PowerPC (big endian)
> - MIPS (big+little endian)

Build-tested on x86 and x86_64. Runtime-tested on a random
FWH-board/-chip (PREW) on Linux x86_64, still works fine.

 
> Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>
> Acked-by: Vladimir 'phcoder/φ-coder' Serbinenko <phcoder at gmail.com>

Acked-by: Uwe Hermann <uwe at hermann-uwe.de>

 
> Index: flashrom-arch_abstraction/hwaccess.c
> ===================================================================
> --- flashrom-arch_abstraction/hwaccess.c	(Revision 1008)
> +++ flashrom-arch_abstraction/hwaccess.c	(Arbeitskopie)
[...]  
> +#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__)
> +
> +static inline void sync_primitive(void)
> +{
> +	asm("eieio" : : : "memory");

This asm could use a nice long comment about what it does exactly and
why it's needed etc.


> +#if !defined (__FLASHROM_BIG_ENDIAN__) && !defined (__FLASHROM_LITTLE_ENDIAN__)
> +#error Unable to determine endianness. Please add support for your arch or libc.
> +#endif
> +
> +#define ___constant_swab8(x) ((uint8_t)(				\
                                          ^
                                  space here, please

> +	(((uint8_t)(x) & (uint8_t)0xffU))))
> +
> +#define ___constant_swab16(x) ((uint16_t)(				\
                                            ^

> +	(((uint16_t)(x) & (uint16_t)0x00ffU) << 8) |			\
> +	(((uint16_t)(x) & (uint16_t)0xff00U) >> 8)))
> +
> +#define ___constant_swab32(x) ((uint32_t)(				\
                                            ^

> +	(((uint32_t)(x) & (uint32_t)0x000000ffUL) << 24) |		\
> +	(((uint32_t)(x) & (uint32_t)0x0000ff00UL) <<  8) |		\
> +	(((uint32_t)(x) & (uint32_t)0x00ff0000UL) >>  8) |		\
> +	(((uint32_t)(x) & (uint32_t)0xff000000UL) >> 24)))
> +
> +#define ___constant_swab64(x) ((uint64_t)(				\
                                            ^
Ditto for these other 3 places.


> +#elif defined(__powerpc__) || defined(__powerpc64__) || defined(__ppc__) || defined(__ppc64__)
> +
> +/* PCI port I/O is not yet implemented on PowerPC. */
> +
> +#elif defined (__mips) || defined (__mips__) || defined (_mips) || defined (mips)
> +
> +/* PCI port I/O is not yet implemented on MIPS. */
> +
> +#else
> +
> +#error Unknown architecture, please check if it supports PCI port IO.
                                                                     ^^
"IO" -> "I/O" for consistency.


> Index: flashrom-arch_abstraction/nic3com.c
> ===================================================================
> --- flashrom-arch_abstraction/nic3com.c	(Revision 1008)
> +++ flashrom-arch_abstraction/nic3com.c	(Arbeitskopie)
> @@ -23,6 +23,8 @@
>  #include <sys/types.h>
>  #include "flash.h"
>  
> +#if defined(__i386__) || defined(__x86_64__)
> +
>  #define BIOS_ROM_ADDR		0x04
>  #define BIOS_ROM_DATA		0x08
>  #define INT_STATUS		0x0e
> @@ -112,3 +114,7 @@
>  	OUTL((uint32_t)addr, io_base_addr + BIOS_ROM_ADDR);
>  	return INB(io_base_addr + BIOS_ROM_DATA);
>  }
> +
> +#else
> +#error Unsupported architecture for nic3com. You need a way to emulate port IO access.

"IO" -> "I/O" for consistency.

Also, wouldn't the nicrealtek code need the same #ifdefs and #error?


Uwe.
-- 
http://hermann-uwe.de     | http://sigrok.org
http://randomprojects.org | http://unmaintained-free-software.org




More information about the flashrom mailing list