From 2d779b39b4e11c4db7a2796af76051e70a556c5f Mon Sep 17 00:00:00 2001 From: Marek Vasut Date: Sat, 25 Jul 2015 11:09:11 +0200 Subject: [PATCH] arm: socfpga: system: Clean up pinmux_config.c 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 --- .../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 de05aaf198..46af30b640 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 5ed47c3cff..744ec326b4 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 7cd4ef9b50..640f629856 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 cd8fecc040..0000000000 --- a/board/altera/socfpga/qts/Makefile +++ /dev/null @@ -1,7 +0,0 @@ -# -# (C) Copyright 2015 Marek Vasut -# -# 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 0000000000..b33e2cab82 --- /dev/null +++ b/board/altera/socfpga/wrap_pinmux_config.c @@ -0,0 +1,35 @@ +/* + * Copyright (C) 2015 Marek Vasut + * + * SPDX-License-Identifier: GPL-2.0+ + */ + +#include +#include +/* + * 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 3ef87b40e9..2d31df8a45 100644 --- a/include/configs/socfpga_arria5.h +++ b/include/configs/socfpga_arria5.h @@ -7,7 +7,6 @@ #define __CONFIG_SOCFPGA_ARRIA5_H__ #include -#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 dda411d5b9..96d5412b1e 100644 --- a/include/configs/socfpga_cyclone5.h +++ b/include/configs/socfpga_cyclone5.h @@ -7,7 +7,6 @@ #define __CONFIG_SOCFPGA_CYCLONE5_H__ #include -#include "../../board/altera/socfpga/qts/pinmux_config.h" /* U-Boot Commands */ #define CONFIG_SYS_NO_FLASH -- 2.25.1