[PATCH 5/5] sandbox: add dummy memory-mapped I/O port region
Ahmad Fatoum
a.fatoum at pengutronix.de
Tue Sep 29 06:58:23 EDT 2020
Super I/O devices on x86 have their base usually located at one of two
I/O ports. They are probed by writing a "passcode" to the I/O port
and then a value is read back.
When COMPILE_TESTing these drivers and running them on sandbox,
this fails with a segfault because all I/O port access lead to
zero page dereference on that architecture. Even without running
barebox, static analyzers correctly flag these accesses as invoking
undefined behavior. Adding a dummy I/O region solves both issues.
Signed-off-by: Ahmad Fatoum <a.fatoum at pengutronix.de>
---
arch/sandbox/board/devices.c | 3 +++
arch/sandbox/include/asm/io.h | 6 +++++-
2 files changed, 8 insertions(+), 1 deletion(-)
diff --git a/arch/sandbox/board/devices.c b/arch/sandbox/board/devices.c
index 72e62552a3b8..1fd1913ae60f 100644
--- a/arch/sandbox/board/devices.c
+++ b/arch/sandbox/board/devices.c
@@ -9,6 +9,9 @@
#include <mach/linux.h>
#include <init.h>
#include <mach/linux.h>
+#include <asm/io.h>
+
+unsigned char __pci_iobase[IO_SPACE_LIMIT];
static LIST_HEAD(sandbox_device_list);
diff --git a/arch/sandbox/include/asm/io.h b/arch/sandbox/include/asm/io.h
index 6a0e77aead42..9f9cd3a42ab1 100644
--- a/arch/sandbox/include/asm/io.h
+++ b/arch/sandbox/include/asm/io.h
@@ -1,7 +1,11 @@
#ifndef __ASM_SANDBOX_IO_H
#define __ASM_SANDBOX_IO_H
-#define IO_SPACE_LIMIT 0
+#define IO_SPACE_LIMIT 0xffff
+/* pacify static analyzers */
+#define PCI_IOBASE ((void __iomem *)__pci_iobase)
+
+extern unsigned char __pci_iobase[IO_SPACE_LIMIT];
#include <asm-generic/io.h>
#include <asm-generic/bitio.h>
--
2.28.0
More information about the barebox
mailing list