Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 06e226c7 authored by Stephen Boyd's avatar Stephen Boyd Committed by Maxime Ripard
Browse files

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: default avatarArnd Bergmann <arnd@arndb.de>
Signed-off-by: default avatarStephen Boyd <sboyd@codeaurora.org>
[Maxime: added lib.a to obj-y, added the comment]
Signed-off-by: default avatarMaxime Ripard <maxime.ripard@free-electrons.com>
parent 5a90c14c
Loading
Loading
Loading
Loading
+0 −119
Original line number Diff line number Diff line
@@ -6,174 +6,55 @@ config 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
	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
	depends on (ARM64 && ARCH_SUNXI) || COMPILE_TEST

config SUN5I_CCU
	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
	depends on MACH_SUN5I || COMPILE_TEST

config SUN6I_A31_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
	depends on MACH_SUN6I || COMPILE_TEST

config SUN8I_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
	depends on MACH_SUN8I || COMPILE_TEST

config SUN8I_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
	depends on MACH_SUN8I || COMPILE_TEST

config SUN8I_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

config SUN8I_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)
	depends on MACH_SUN8I || (ARM64 && ARCH_SUNXI) || COMPILE_TEST

config SUN8I_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
	depends on MACH_SUN8I || COMPILE_TEST

config SUN8I_DE2_CCU
	bool "Support for the Allwinner SoCs DE2 CCU"
	select SUNXI_CCU_DIV
	select SUNXI_CCU_GATE

config SUN9I_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
	depends on MACH_SUN9I || COMPILE_TEST

config SUN8I_R_CCU
	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)

endif
+22 −13
Original line number Diff line number Diff line
# Common objects
obj-$(CONFIG_SUNXI_CCU)		+= ccu_common.o
obj-$(CONFIG_SUNXI_CCU)		+= ccu_reset.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_common.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_reset.o

# Base clock types
obj-$(CONFIG_SUNXI_CCU_DIV)	+= ccu_div.o
obj-$(CONFIG_SUNXI_CCU_FRAC)	+= ccu_frac.o
obj-$(CONFIG_SUNXI_CCU_GATE)	+= ccu_gate.o
obj-$(CONFIG_SUNXI_CCU_MUX)	+= ccu_mux.o
obj-$(CONFIG_SUNXI_CCU_MULT)	+= ccu_mult.o
obj-$(CONFIG_SUNXI_CCU_PHASE)	+= ccu_phase.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_div.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_frac.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_gate.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_mux.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_mult.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_phase.o

# Multi-factor clocks
obj-$(CONFIG_SUNXI_CCU_NK)	+= ccu_nk.o
obj-$(CONFIG_SUNXI_CCU_NKM)	+= ccu_nkm.o
obj-$(CONFIG_SUNXI_CCU_NKMP)	+= ccu_nkmp.o
obj-$(CONFIG_SUNXI_CCU_NM)	+= ccu_nm.o
obj-$(CONFIG_SUNXI_CCU_MP)	+= ccu_mp.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_nk.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_nkm.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_nkmp.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_nm.o
lib-$(CONFIG_SUNXI_CCU)		+= ccu_mp.o

# SoC support
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-de.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