clk: sunxi-ng: Move all clock types to a library
We've run into kconfig missing dependency errors in the sunxi-ng code a couple times now. Each time the fix is to find the missing select statement and add it to the Kconfig entry for a particular SoC driver. Given that all this code is builtin (non-modular) we don't need to do this complicated dependency tracking in Kconfig. Instead we can move all the "library"ish code to be compiled as lib-y instead of obj-y, let the linker throw away unused code in the resulting vmlinux, and drop all the Kconfig stuff we use to track clock types. Suggested-by: Arnd Bergmann <arnd@arndb.de> Signed-off-by: Stephen Boyd <sboyd@codeaurora.org> [Maxime: added lib.a to obj-y, added the comment] Signed-off-by: Maxime Ripard <maxime.ripard@free-electrons.com>
This commit is contained in:
Родитель
5a90c14c0b
Коммит
06e226c7fb
|
@ -6,174 +6,55 @@ config SUNXI_CCU
|
||||||
|
|
||||||
if SUNXI_CCU
|
if SUNXI_CCU
|
||||||
|
|
||||||
# Base clock types
|
|
||||||
|
|
||||||
config SUNXI_CCU_DIV
|
|
||||||
bool
|
|
||||||
select SUNXI_CCU_MUX
|
|
||||||
|
|
||||||
config SUNXI_CCU_FRAC
|
|
||||||
bool
|
|
||||||
|
|
||||||
config SUNXI_CCU_GATE
|
|
||||||
def_bool y
|
|
||||||
|
|
||||||
config SUNXI_CCU_MUX
|
|
||||||
bool
|
|
||||||
|
|
||||||
config SUNXI_CCU_MULT
|
|
||||||
bool
|
|
||||||
select SUNXI_CCU_MUX
|
|
||||||
|
|
||||||
config SUNXI_CCU_PHASE
|
|
||||||
bool
|
|
||||||
|
|
||||||
# Multi-factor clocks
|
|
||||||
|
|
||||||
config SUNXI_CCU_NK
|
|
||||||
bool
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
|
|
||||||
config SUNXI_CCU_NKM
|
|
||||||
bool
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
|
|
||||||
config SUNXI_CCU_NKMP
|
|
||||||
bool
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
|
|
||||||
config SUNXI_CCU_NM
|
|
||||||
bool
|
|
||||||
select SUNXI_CCU_FRAC
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
|
|
||||||
config SUNXI_CCU_MP
|
|
||||||
bool
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
select SUNXI_CCU_MUX
|
|
||||||
|
|
||||||
# SoC Drivers
|
|
||||||
|
|
||||||
config SUN50I_A64_CCU
|
config SUN50I_A64_CCU
|
||||||
bool "Support for the Allwinner A64 CCU"
|
bool "Support for the Allwinner A64 CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_NK
|
|
||||||
select SUNXI_CCU_NKM
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default ARM64 && ARCH_SUNXI
|
default ARM64 && ARCH_SUNXI
|
||||||
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
||||||
|
|
||||||
config SUN5I_CCU
|
config SUN5I_CCU
|
||||||
bool "Support for the Allwinner sun5i family CCM"
|
bool "Support for the Allwinner sun5i family CCM"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_MULT
|
|
||||||
select SUNXI_CCU_NK
|
|
||||||
select SUNXI_CCU_NKM
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN5I
|
default MACH_SUN5I
|
||||||
depends on MACH_SUN5I || COMPILE_TEST
|
depends on MACH_SUN5I || COMPILE_TEST
|
||||||
|
|
||||||
config SUN6I_A31_CCU
|
config SUN6I_A31_CCU
|
||||||
bool "Support for the Allwinner A31/A31s CCU"
|
bool "Support for the Allwinner A31/A31s CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_NK
|
|
||||||
select SUNXI_CCU_NKM
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN6I
|
default MACH_SUN6I
|
||||||
depends on MACH_SUN6I || COMPILE_TEST
|
depends on MACH_SUN6I || COMPILE_TEST
|
||||||
|
|
||||||
config SUN8I_A23_CCU
|
config SUN8I_A23_CCU
|
||||||
bool "Support for the Allwinner A23 CCU"
|
bool "Support for the Allwinner A23 CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_MULT
|
|
||||||
select SUNXI_CCU_NK
|
|
||||||
select SUNXI_CCU_NKM
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN8I
|
default MACH_SUN8I
|
||||||
depends on MACH_SUN8I || COMPILE_TEST
|
depends on MACH_SUN8I || COMPILE_TEST
|
||||||
|
|
||||||
config SUN8I_A33_CCU
|
config SUN8I_A33_CCU
|
||||||
bool "Support for the Allwinner A33 CCU"
|
bool "Support for the Allwinner A33 CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_MULT
|
|
||||||
select SUNXI_CCU_NK
|
|
||||||
select SUNXI_CCU_NKM
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN8I
|
default MACH_SUN8I
|
||||||
depends on MACH_SUN8I || COMPILE_TEST
|
depends on MACH_SUN8I || COMPILE_TEST
|
||||||
|
|
||||||
config SUN8I_A83T_CCU
|
config SUN8I_A83T_CCU
|
||||||
bool "Support for the Allwinner A83T CCU"
|
bool "Support for the Allwinner A83T CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_MULT
|
|
||||||
select SUNXI_CCU_MUX
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN8I
|
default MACH_SUN8I
|
||||||
|
|
||||||
config SUN8I_H3_CCU
|
config SUN8I_H3_CCU
|
||||||
bool "Support for the Allwinner H3 CCU"
|
bool "Support for the Allwinner H3 CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_NK
|
|
||||||
select SUNXI_CCU_NKM
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN8I || (ARM64 && ARCH_SUNXI)
|
default MACH_SUN8I || (ARM64 && ARCH_SUNXI)
|
||||||
depends on MACH_SUN8I || (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
depends on MACH_SUN8I || (ARM64 && ARCH_SUNXI) || COMPILE_TEST
|
||||||
|
|
||||||
config SUN8I_V3S_CCU
|
config SUN8I_V3S_CCU
|
||||||
bool "Support for the Allwinner V3s CCU"
|
bool "Support for the Allwinner V3s CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_NK
|
|
||||||
select SUNXI_CCU_NKM
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN8I
|
default MACH_SUN8I
|
||||||
depends on MACH_SUN8I || COMPILE_TEST
|
depends on MACH_SUN8I || COMPILE_TEST
|
||||||
|
|
||||||
config SUN8I_DE2_CCU
|
config SUN8I_DE2_CCU
|
||||||
bool "Support for the Allwinner SoCs DE2 CCU"
|
bool "Support for the Allwinner SoCs DE2 CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
|
|
||||||
config SUN9I_A80_CCU
|
config SUN9I_A80_CCU
|
||||||
bool "Support for the Allwinner A80 CCU"
|
bool "Support for the Allwinner A80 CCU"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_MULT
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
select SUNXI_CCU_NKMP
|
|
||||||
select SUNXI_CCU_NM
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
select SUNXI_CCU_PHASE
|
|
||||||
default MACH_SUN9I
|
default MACH_SUN9I
|
||||||
depends on MACH_SUN9I || COMPILE_TEST
|
depends on MACH_SUN9I || COMPILE_TEST
|
||||||
|
|
||||||
config SUN8I_R_CCU
|
config SUN8I_R_CCU
|
||||||
bool "Support for Allwinner SoCs' PRCM CCUs"
|
bool "Support for Allwinner SoCs' PRCM CCUs"
|
||||||
select SUNXI_CCU_DIV
|
|
||||||
select SUNXI_CCU_GATE
|
|
||||||
select SUNXI_CCU_MP
|
|
||||||
default MACH_SUN8I || (ARCH_SUNXI && ARM64)
|
default MACH_SUN8I || (ARCH_SUNXI && ARM64)
|
||||||
|
|
||||||
endif
|
endif
|
||||||
|
|
|
@ -1,21 +1,21 @@
|
||||||
# Common objects
|
# Common objects
|
||||||
obj-$(CONFIG_SUNXI_CCU) += ccu_common.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_common.o
|
||||||
obj-$(CONFIG_SUNXI_CCU) += ccu_reset.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_reset.o
|
||||||
|
|
||||||
# Base clock types
|
# Base clock types
|
||||||
obj-$(CONFIG_SUNXI_CCU_DIV) += ccu_div.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_div.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_FRAC) += ccu_frac.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_frac.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_GATE) += ccu_gate.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_gate.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_MUX) += ccu_mux.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_mux.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_MULT) += ccu_mult.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_mult.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_PHASE) += ccu_phase.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_phase.o
|
||||||
|
|
||||||
# Multi-factor clocks
|
# Multi-factor clocks
|
||||||
obj-$(CONFIG_SUNXI_CCU_NK) += ccu_nk.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_nk.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_NKM) += ccu_nkm.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_nkm.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_NKMP) += ccu_nkmp.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_nkmp.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_NM) += ccu_nm.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_nm.o
|
||||||
obj-$(CONFIG_SUNXI_CCU_MP) += ccu_mp.o
|
lib-$(CONFIG_SUNXI_CCU) += ccu_mp.o
|
||||||
|
|
||||||
# SoC support
|
# SoC support
|
||||||
obj-$(CONFIG_SUN50I_A64_CCU) += ccu-sun50i-a64.o
|
obj-$(CONFIG_SUN50I_A64_CCU) += ccu-sun50i-a64.o
|
||||||
|
@ -31,3 +31,12 @@ obj-$(CONFIG_SUN8I_R_CCU) += ccu-sun8i-r.o
|
||||||
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80.o
|
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80.o
|
||||||
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-de.o
|
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-de.o
|
||||||
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-usb.o
|
obj-$(CONFIG_SUN9I_A80_CCU) += ccu-sun9i-a80-usb.o
|
||||||
|
|
||||||
|
# The lib-y file goals is supposed to work only in arch/*/lib or lib/. In our
|
||||||
|
# case, we want to use that goal, but even though lib.a will be properly
|
||||||
|
# generated, it will not be linked in, eventually resulting in a linker error
|
||||||
|
# for missing symbols.
|
||||||
|
#
|
||||||
|
# We can work around that by explicitly adding lib.a to the obj-y goal. This is
|
||||||
|
# an undocumented behaviour, but works well for now.
|
||||||
|
obj-$(CONFIG_SUNXI_CCU) += lib.a
|
||||||
|
|
Загрузка…
Ссылка в новой задаче