Unverified Commit 91389c39 authored by Samuel Holland's avatar Samuel Holland Committed by Maxime Ripard
Browse files

clk: sunxi-ng: Allow the CCU core to be built as a module



Like the individual CCU drivers, it can be beneficial for memory
consumption of cross-platform configurations to only load the CCU core
on the relevant platform. For example, a generic arm64 kernel sees the
following improvement when building the CCU core and drivers as modules:

  before:
    text      data     bss     dec       hex      filename
    13882360  5251670  360800  19494830  12977ae  vmlinux

  after:
    text      data     bss     dec       hex      filename
    13734787  5086442  360800  19182029  124b1cd  vmlinux

So the result is a 390KB total reduction in kernel image size.

The one early clock provider (sun5i) requires the core to be built in.

Now that loading the MMC driver will trigger loading the CCU core, the
MMC timing mode functions do not need a compile-time fallback.

Signed-off-by: default avatarSamuel Holland <samuel@sholland.org>
Signed-off-by: default avatarMaxime Ripard <maxime@cerno.tech>
Link: https://lore.kernel.org/r/20211119033338.25486-5-samuel@sholland.org
parent 7ec03b58
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -110,7 +110,7 @@ obj-$(CONFIG_PLAT_SPEAR) += spear/
obj-y					+= sprd/
obj-$(CONFIG_ARCH_STI)			+= st/
obj-$(CONFIG_ARCH_SUNXI)		+= sunxi/
obj-$(CONFIG_SUNXI_CCU)			+= sunxi-ng/
obj-y					+= sunxi-ng/
obj-$(CONFIG_ARCH_TEGRA)		+= tegra/
obj-y					+= ti/
obj-$(CONFIG_CLK_UNIPHIER)		+= uniphier/
+2 −1
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0-only
config SUNXI_CCU
	bool "Clock support for Allwinner SoCs"
	tristate "Clock support for Allwinner SoCs"
	depends on ARCH_SUNXI || COMPILE_TEST
	select RESET_CONTROLLER
	default ARCH_SUNXI
@@ -52,6 +52,7 @@ config SUN5I_CCU
	bool "Support for the Allwinner sun5i family CCM"
	default MACH_SUN5I
	depends on MACH_SUN5I || COMPILE_TEST
	depends on SUNXI_CCU=y

config SUN6I_A31_CCU
	tristate "Support for the Allwinner A31/A31s CCU"
+18 −15
Original line number Diff line number Diff line
# SPDX-License-Identifier: GPL-2.0

obj-$(CONFIG_SUNXI_CCU)		+= sunxi-ccu.o

# Common objects
obj-y				+= ccu_common.o
obj-y				+= ccu_mmc_timing.o
obj-y				+= ccu_reset.o
sunxi-ccu-y			+= ccu_common.o
sunxi-ccu-y			+= ccu_mmc_timing.o
sunxi-ccu-y			+= ccu_reset.o

# Base clock types
obj-y				+= ccu_div.o
obj-y				+= ccu_frac.o
obj-y				+= ccu_gate.o
obj-y				+= ccu_mux.o
obj-y				+= ccu_mult.o
obj-y				+= ccu_phase.o
obj-y				+= ccu_sdm.o
sunxi-ccu-y			+= ccu_div.o
sunxi-ccu-y			+= ccu_frac.o
sunxi-ccu-y			+= ccu_gate.o
sunxi-ccu-y			+= ccu_mux.o
sunxi-ccu-y			+= ccu_mult.o
sunxi-ccu-y			+= ccu_phase.o
sunxi-ccu-y			+= ccu_sdm.o

# Multi-factor clocks
obj-y				+= ccu_nk.o
obj-y				+= ccu_nkm.o
obj-y				+= ccu_nkmp.o
obj-y				+= ccu_nm.o
obj-y				+= ccu_mp.o
sunxi-ccu-y			+= ccu_nk.o
sunxi-ccu-y			+= ccu_nkm.o
sunxi-ccu-y			+= ccu_nkmp.o
sunxi-ccu-y			+= ccu_nm.o
sunxi-ccu-y			+= ccu_mp.o

# SoC support
obj-$(CONFIG_SUNIV_F1C100S_CCU)	+= suniv-f1c100s-ccu.o
+3 −0
Original line number Diff line number Diff line
@@ -9,6 +9,7 @@
#include <linux/clk-provider.h>
#include <linux/device.h>
#include <linux/iopoll.h>
#include <linux/module.h>
#include <linux/slab.h>

#include "ccu_common.h"
@@ -214,3 +215,5 @@ void of_sunxi_ccu_probe(struct device_node *node, void __iomem *reg,
		kfree(ccu);
	}
}

MODULE_LICENSE("GPL");
+1 −0
Original line number Diff line number Diff line
@@ -966,6 +966,7 @@ config MMC_REALTEK_USB
config MMC_SUNXI
	tristate "Allwinner sunxi SD/MMC Host Controller support"
	depends on ARCH_SUNXI || COMPILE_TEST
	depends on SUNXI_CCU
	help
	  This selects support for the SD/MMC Host Controller on
	  Allwinner sunxi SoCs.
Loading