[U-Boot] [PATCH 021/172] arm: socfpga: system: Clean up pinmux_config.c

Marek Vasut marex at denx.de
Mon Jul 27 22:49:44 CEST 2015


Implement new accessor, sysmgr_get_pinmux_table(), used to obtain pinmux
table and it's size from the QTS-generated pinmux_config.c. The target
here is again to get rid of poluting global namespace by including the
pinmux_config.h into it.

Furthermore, the pinmux_config.h declares some CONFIG_HPS_* macros,
which are explicitly useless to us in U-Boot. Instead, U-Boot does
use DT to detect exactly these configuration options. This patch
makes sure that while this QTS-generated file can stay in the tree,
these obscure macros do not ooze into the namespace anymore.

Signed-off-by: Marek Vasut <marex at denx.de>
---
 .../arm/mach-socfpga/include/mach/system_manager.h |  5 ++--
 arch/arm/mach-socfpga/system_manager.c             |  6 +++-
 board/altera/socfpga/Makefile                      |  2 +-
 board/altera/socfpga/qts/Makefile                  |  7 -----
 board/altera/socfpga/wrap_pinmux_config.c          | 35 ++++++++++++++++++++++
 include/configs/socfpga_arria5.h                   |  1 -
 include/configs/socfpga_cyclone5.h                 |  1 -
 7 files changed, 43 insertions(+), 14 deletions(-)
 delete mode 100644 board/altera/socfpga/qts/Makefile
 create mode 100644 board/altera/socfpga/wrap_pinmux_config.c

diff --git a/arch/arm/mach-socfpga/include/mach/system_manager.h b/arch/arm/mach-socfpga/include/mach/system_manager.h
index de05aaf..46af30b 100644
--- a/arch/arm/mach-socfpga/include/mach/system_manager.h
+++ b/arch/arm/mach-socfpga/include/mach/system_manager.h
@@ -12,9 +12,8 @@
 void sysmgr_pinmux_init(void);
 void sysmgr_config_warmrstcfgio(int enable);
 
-/* declaration for handoff table type */
-extern unsigned long sys_mgr_init_table[CONFIG_HPS_PINMUX_NUM];
-
+void sysmgr_get_pinmux_table(const unsigned long **table,
+			     unsigned int *table_len);
 #endif
 
 struct socfpga_system_manager {
diff --git a/arch/arm/mach-socfpga/system_manager.c b/arch/arm/mach-socfpga/system_manager.c
index 5ed47c3..744ec32 100644
--- a/arch/arm/mach-socfpga/system_manager.c
+++ b/arch/arm/mach-socfpga/system_manager.c
@@ -57,9 +57,13 @@ static void populate_sysmgr_fpgaintf_module(void)
 void sysmgr_pinmux_init(void)
 {
 	uint32_t regs = (uint32_t)&sysmgr_regs->emacio[0];
+	const unsigned long *sys_mgr_init_table;
+	unsigned int len;
 	int i;
 
-	for (i = 0; i < ARRAY_SIZE(sys_mgr_init_table); i++) {
+	sysmgr_get_pinmux_table(&sys_mgr_init_table, &len);
+
+	for (i = 0; i < len; i++) {
 		writel(sys_mgr_init_table[i], regs);
 		regs += sizeof(regs);
 	}
diff --git a/board/altera/socfpga/Makefile b/board/altera/socfpga/Makefile
index 7cd4ef9..640f629 100644
--- a/board/altera/socfpga/Makefile
+++ b/board/altera/socfpga/Makefile
@@ -7,4 +7,4 @@
 #
 
 obj-y	:= socfpga.o wrap_pll_config.o
-obj-$(CONFIG_SPL_BUILD) += qts/ wrap_iocsr_config.o
+obj-$(CONFIG_SPL_BUILD) += wrap_iocsr_config.o wrap_pinmux_config.o
diff --git a/board/altera/socfpga/qts/Makefile b/board/altera/socfpga/qts/Makefile
deleted file mode 100644
index cd8fecc..0000000
--- a/board/altera/socfpga/qts/Makefile
+++ /dev/null
@@ -1,7 +0,0 @@
-#
-# (C) Copyright 2015 Marek Vasut <marex at denx.de>
-#
-# SPDX-License-Identifier:	GPL-2.0+
-#
-
-obj-y += pinmux_config.o
diff --git a/board/altera/socfpga/wrap_pinmux_config.c b/board/altera/socfpga/wrap_pinmux_config.c
new file mode 100644
index 0000000..b33e2ca
--- /dev/null
+++ b/board/altera/socfpga/wrap_pinmux_config.c
@@ -0,0 +1,35 @@
+/*
+ * Copyright (C) 2015 Marek Vasut <marex at denx.de>
+ *
+ * SPDX-License-Identifier:    GPL-2.0+
+ */
+
+#include <common.h>
+#include <errno.h>
+/*
+ * Yes, dear reader, we're including a C file here, this is no mistake.
+ * But this time around, we do even more perverse hacking here to be
+ * compatible with QTS headers and obtain reasonably nice results too.
+ *
+ * First, we define _PRELOADER_PINMUX_CONFIG_H_, which will neutralise
+ * the pinmux_config.h inclusion in pinmux_config.c . Since we are
+ * probing everything from DT, we do NOT want those macros from the
+ * pinmux_config.h to ooze into our build system, anywhere, ever. So
+ * we nip it at the bud.
+ *
+ * Next, pinmux_config.c needs CONFIG_HPS_PINMUX_NUM and uses it to
+ * specify sized array explicitly. Instead, we want to use ARRAY_SIZE
+ * to figure out the size of the array, so define this macro as an
+ * empty one, so that the preprocessor optimizes things such that the
+ * arrays are not sized by default.
+ */
+#define _PRELOADER_PINMUX_CONFIG_H_
+#define CONFIG_HPS_PINMUX_NUM
+#include "qts/pinmux_config.c"
+
+void sysmgr_get_pinmux_table(const unsigned long **table,
+			     unsigned int *table_len)
+{
+	*table = sys_mgr_init_table;
+	*table_len = ARRAY_SIZE(sys_mgr_init_table);
+}
diff --git a/include/configs/socfpga_arria5.h b/include/configs/socfpga_arria5.h
index 758912c..329ca35 100644
--- a/include/configs/socfpga_arria5.h
+++ b/include/configs/socfpga_arria5.h
@@ -7,7 +7,6 @@
 #define __CONFIG_SOCFPGA_ARRIA5_H__
 
 #include <asm/arch/socfpga_base_addrs.h>
-#include "../../board/altera/socfpga/qts/pinmux_config.h"
 
 /* U-Boot Commands */
 #define CONFIG_SYS_NO_FLASH
diff --git a/include/configs/socfpga_cyclone5.h b/include/configs/socfpga_cyclone5.h
index e7938f5..c2922dd 100644
--- a/include/configs/socfpga_cyclone5.h
+++ b/include/configs/socfpga_cyclone5.h
@@ -7,7 +7,6 @@
 #define __CONFIG_SOCFPGA_CYCLONE5_H__
 
 #include <asm/arch/socfpga_base_addrs.h>
-#include "../../board/altera/socfpga/qts/pinmux_config.h"
 
 /* U-Boot Commands */
 #define CONFIG_SYS_NO_FLASH
-- 
2.1.4



More information about the U-Boot mailing list