[flashrom] [PATCH] Do not require PCI code for RayeR SPI driver

Carl-Daniel Hailfinger c-d.hailfinger.devel.2006 at gmx.net
Sat Feb 20 02:36:17 CET 2016


On 20.02.2016 01:24, Stefan Tauner wrote:
> On Wed, 17 Feb 2016 01:10:41 +0100
> Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net> wrote:
>> --- flashrom-libpci_libusb_report_requirements/Makefile	2016-02-17 00:26:37.497626067 +0100
>> +++ flashrom-rayer_do_not_require_libpci/Makefile	2016-02-17 00:52:46.457405821 +0100
>> @@ -599,8 +599,7 @@
>>  ifeq ($(CONFIG_RAYER_SPI), yes)
>>  FEATURE_CFLAGS += -D'CONFIG_RAYER_SPI=1'
>>  PROGRAMMER_OBJS += rayer_spi.o
>> -# Actually, NEED_LIBPCI is wrong. NEED_IOPORT_ACCESS would be more correct.
> What's wrong with NEED_IOPORT_ACCESS? I'd prefer that (not only because
> I have read this wannabe FIXME a few dozen times by now... :)

I didn't want to add NEED_IOPORT_ACCESS, NEED_MEM_ACCESS and
NEED_MSR_ACCESS.
The sane way was to combine all three into NEED_RAW_ACCESS.


>> -NEED_LIBPCI += CONFIG_RAYER_SPI
>> +NEED_RAW_ACCESS += CONFIG_RAYER_SPI
>>  endif
>>  
>>  ifeq ($(CONFIG_PONY_SPI), yes)
>> @@ -807,6 +810,11 @@
>>  endif
>>  endif
>>  
>> +ifneq ($(NEED_RAW_ACCESS), )
>> +FEATURE_CFLAGS += -D'NEED_RAW_ACCESS=1'
>> +PROGRAMMER_OBJS += physmap.o hwaccess.o
>> +endif
>> +
>>  ifneq ($(NEED_LIBUSB0), )
>>  CHECK_LIBUSB0 = yes
>>  FEATURE_CFLAGS += -D'NEED_LIBUSB0=1'
> Apparently this somehow breaks some includes as shown by the buildbot
> (as discussed on IRC)...

Thanks for the review!

New version, fixes OpenBSD, NetBSD, FreeBSD, OS X.
Should compile fine on everything except Android, which was broken since
r1898 (sys/io.h was suddenly included for all Linux targets instead of
just for glibc, and Android doesn't have it).

CONFIG_RAYER_SPI only needs raw hardware access, but not libpci.

Signed-off-by: Carl-Daniel Hailfinger <c-d.hailfinger.devel.2006 at gmx.net>

Index: flashrom-rayer_do_not_require_libpci/Makefile
===================================================================
--- flashrom-rayer_do_not_require_libpci/Makefile	(Revision 1931)
+++ flashrom-rayer_do_not_require_libpci/Makefile	(Arbeitskopie)
@@ -599,8 +599,7 @@
 ifeq ($(CONFIG_RAYER_SPI), yes)
 FEATURE_CFLAGS += -D'CONFIG_RAYER_SPI=1'
 PROGRAMMER_OBJS += rayer_spi.o
-# Actually, NEED_LIBPCI is wrong. NEED_IOPORT_ACCESS would be more correct.
-NEED_LIBPCI += CONFIG_RAYER_SPI
+NEED_RAW_ACCESS += CONFIG_RAYER_SPI
 endif
 
 ifeq ($(CONFIG_PONY_SPI), yes)
@@ -782,19 +781,30 @@
 
 ifneq ($(NEED_LIBPCI), )
 CHECK_LIBPCI = yes
+# This is a dirty hack, but it saves us from checking all PCI drivers and all platforms manually.
+# libpci may need raw memory, MSR or PCI port I/O on some platforms.
+# Individual drivers might have the same needs as well.
+NEED_RAW_ACCESS += $(NEED_LIBPCI)
 FEATURE_CFLAGS += -D'NEED_PCI=1'
 FEATURE_CFLAGS += $(call debug_shell,grep -q "OLD_PCI_GET_DEV := yes" .libdeps && printf "%s" "-D'OLD_PCI_GET_DEV=1'")
 
-PROGRAMMER_OBJS += pcidev.o physmap.o hwaccess.o
+PROGRAMMER_OBJS += pcidev.o
 ifeq ($(TARGET_OS), NetBSD)
 # The libpci we want is called libpciutils on NetBSD and needs NetBSD libpci.
 PCILIBS += -lpciutils -lpci
+else
+PCILIBS += -lpci
+endif
+endif
+
+ifneq ($(NEED_RAW_ACCESS), )
+FEATURE_CFLAGS += -D'NEED_RAW_ACCESS=1'
+PROGRAMMER_OBJS += physmap.o hwaccess.o
+
+ifeq ($(TARGET_OS), NetBSD)
 # For (i386|x86_64)_iopl(2).
 PCILIBS += -l$(shell uname -p)
 else
-
-PCILIBS += -lpci
-
 ifeq ($(TARGET_OS), OpenBSD)
 # For (i386|amd64)_iopl(2).
 PCILIBS += -l$(shell uname -m)
@@ -805,6 +815,7 @@
 endif
 endif
 endif
+
 endif
 
 ifneq ($(NEED_LIBUSB0), )
Index: flashrom-rayer_do_not_require_libpci/hwaccess.h
===================================================================
--- flashrom-rayer_do_not_require_libpci/hwaccess.h	(Revision 1931)
+++ flashrom-rayer_do_not_require_libpci/hwaccess.h	(Arbeitskopie)
@@ -24,6 +24,8 @@
 #ifndef __HWACCESS_H__
 #define __HWACCESS_H__ 1
 
+#include <sys/types.h>
+
 #include "platform.h"
 
 #if NEED_PCI == 1
@@ -196,7 +198,7 @@
 #define le_to_cpu32 cpu_to_le32
 #define le_to_cpu64 cpu_to_le64
 
-#if NEED_PCI == 1
+#if NEED_RAW_ACCESS == 1
 #if IS_X86
 
 /* sys/io.h provides iopl(2) and x86 I/O port access functions (inb, outb etc).
@@ -376,6 +378,6 @@
 #error Unknown architecture, please check if it supports PCI port IO.
 
 #endif /* IS_* */
-#endif /* NEED_PCI == 1 */
+#endif /* NEED_RAW_ACCESS == 1 */
 
 #endif /* !__HWACCESS_H__ */





More information about the flashrom mailing list