arm & sh: factorised duplicated clkdev.c
Subsystems (22)
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
put the arch specific code for allocation as example in asm/lookup_clkdev.h
--- arch/arm/Kconfig | 40 +++--- arch/arm/common/Kconfig | 4 - arch/arm/common/Makefile | 1 - arch/arm/include/asm/lookup_clkdev.h | 23 +++ arch/arm/mach-shmobile/Kconfig | 6 +- arch/arm/plat-omap/Kconfig | 4 +- arch/sh/Kconfig | 2 +- arch/sh/include/asm/lookup_clkdev.h | 29 ++++ arch/sh/kernel/Makefile | 2 +- arch/sh/kernel/clkdev.c | 169 -------------------- arch/sh/kernel/cpu/clock.c | 16 -- drivers/Kconfig | 2 + drivers/Makefile | 2 + drivers/clk/Kconfig | 4 + drivers/clk/Makefile | 2 + .../common/clkdev.c => drivers/clk/lookup_clkdev.c | 18 ++- 16 files changed, 100 insertions(+), 224 deletions(-) create mode 100644 arch/arm/include/asm/lookup_clkdev.h create mode 100644 arch/sh/include/asm/lookup_clkdev.h delete mode 100644 arch/sh/kernel/clkdev.c create mode 100644 drivers/clk/Kconfig create mode 100644 drivers/clk/Makefile rename arch/arm/common/clkdev.c => drivers/clk/lookup_clkdev.c (89%)
arch/arm/Kconfig +20 -20
@@ -221,7 +221,7 @@ config ARCH_INTEGRATOR bool "ARM Ltd. Integrator family" select ARM_AMBA select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ICST select GENERIC_CLOCKEVENTS select PLAT_VERSATILE
@@ -231,7 +231,7 @@ config ARCH_INTEGRATOR config ARCH_REALVIEW bool "ARM Ltd. RealView family" select ARM_AMBA - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB
@@ -245,7 +245,7 @@ config ARCH_VERSATILE bool "ARM Ltd. Versatile family" select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB
@@ -259,7 +259,7 @@ config ARCH_VEXPRESS select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_TIMER_SP804 - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select HAVE_CLK select ICST
@@ -281,7 +281,7 @@ config ARCH_BCMRING depends on MMU select CPU_V6 select ARM_AMBA - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB help
@@ -328,7 +328,7 @@ config ARCH_EP93XX select CPU_ARM920T select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_USES_GETTIMEOFFSET
@@ -348,14 +348,14 @@ config ARCH_MXC bool "Freescale MXC/iMX-based" select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV help Support for Freescale MXC/iMX-based family of processors config ARCH_STMP3XXX bool "Freescale STMP3xxx" select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select USB_ARCH_HAS_EHCI
@@ -473,7 +473,7 @@ config ARCH_LPC32XX select HAVE_IDE select ARM_AMBA select USB_ARCH_HAS_OHCI - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_TIME select GENERIC_CLOCKEVENTS help
@@ -507,7 +507,7 @@ config ARCH_MMP bool "Marvell PXA168/910/MMP2" depends on MMU select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select TICK_ONESHOT select PLAT_PXA
@@ -539,7 +539,7 @@ config ARCH_W90X900 bool "Nuvoton W90X900 CPU" select CPU_ARM926T select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS help Support for Nuvoton (Winbond logic dept.) ARM9 processor,
@@ -553,7 +553,7 @@ config ARCH_W90X900 config ARCH_NUC93X bool "Nuvoton NUC93X CPU" select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV help Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a low-power and high performance MPEG-4/JPEG multimedia controller chip.
@@ -564,7 +564,7 @@ config ARCH_TEGRA select GENERIC_CLOCKEVENTS select GENERIC_GPIO select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_HAS_BARRIERS if CACHE_L2X0 help This enables support for NVIDIA Tegra based systems (Tegra APX,
@@ -573,7 +573,7 @@ config ARCH_TEGRA config ARCH_PNX4008 bool "Philips Nexperia PNX4008 Mobile" select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_USES_GETTIMEOFFSET help This enables support for Philips PNX4008 mobile platform.
@@ -583,7 +583,7 @@ config ARCH_PXA depends on MMU select ARCH_MTD_XIP select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select TICK_ONESHOT
@@ -767,7 +767,7 @@ config ARCH_U300 select ARM_AMBA select ARM_VIC select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_GPIO help Support for ST-Ericsson U300 series mobile platforms.
@@ -777,7 +777,7 @@ config ARCH_U8500 select CPU_V7 select ARM_AMBA select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB help Support for ST-Ericsson's Ux500 architecture
@@ -787,7 +787,7 @@ config ARCH_NOMADIK select ARM_AMBA select ARM_VIC select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB help
@@ -799,7 +799,7 @@ config ARCH_DAVINCI select ARCH_REQUIRE_GPIOLIB select ZONE_DMA select HAVE_IDE - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_ALLOCATOR select ARCH_HAS_HOLES_MEMORYMODEL help
@@ -819,7 +819,7 @@ config PLAT_SPEAR bool "ST SPEAr" select ARM_AMBA select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select HAVE_CLK help
arch/arm/common/Kconfig +0 -4
@@ -37,7 +37,3 @@ config SHARP_PARAM config SHARP_SCOOP bool - -config COMMON_CLKDEV - bool - select HAVE_CLK
arch/arm/common/Makefile +0 -1
@@ -16,4 +16,3 @@ obj-$(CONFIG_SHARP_SCOOP) += scoop.o obj-$(CONFIG_ARCH_IXP2000) += uengine.o obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o -obj-$(CONFIG_COMMON_CLKDEV) += clkdev.o
arch/arm/include/asm/lookup_clkdev.h new file +23 -0
@@ -0,0 +1,23 @@ +/* +* arch/arm/common/clkdev.c +* +* Copyright (C) 2008 Russell King. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Helper for the clk API to assist looking up a struct clk. +*/ + +#ifndef __LOOKUP_CLK_DEV__ +#define __LOOKUP_CLK_DEV__ + +#include <mach/clkdev.h> + +static __inline__struct clk_lookup_alloc *arch_kzalloc (size_t size) +{ +return kzalloc (size,GFP_KERNEL ); +} + +#endif /* __LOOKUP_CLK_DEV__ */
arch/arm/mach-shmobile/Kconfig +3 -3
@@ -6,7 +6,7 @@ config ARCH_SH7367 bool "SH-Mobile G3 (SH7367)" select CPU_V6 select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select SH_CLK_CPG select GENERIC_CLOCKEVENTS
@@ -14,7 +14,7 @@ config ARCH_SH7377 bool "SH-Mobile G4 (SH7377)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select SH_CLK_CPG select GENERIC_CLOCKEVENTS
@@ -22,7 +22,7 @@ config ARCH_SH7372 bool "SH-Mobile AP4 (SH7372)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select SH_CLK_CPG select GENERIC_CLOCKEVENTS
arch/arm/plat-omap/Kconfig +2 -2
@@ -11,13 +11,13 @@ choice config ARCH_OMAP1 bool "TI OMAP1" - select COMMON_CLKDEV + select LOOKUP_CLKDEV help "Systems based on omap7xx, omap15xx or omap16xx" config ARCH_OMAP2PLUS bool "TI OMAP2/3/4" - select COMMON_CLKDEV + select LOOKUP_CLKDEV help "Systems based on omap24xx, omap34xx or omap44xx"
arch/sh/Kconfig +1 -1
@@ -8,7 +8,7 @@ mainmenu "Linux/SuperH Kernel Configuration" config SUPERH def_bool y select EMBEDDED - select HAVE_CLK + select LOOKUP_CLKDEV select HAVE_IDE if HAS_IOPORT select HAVE_MEMBLOCK select HAVE_OPROFILE
arch/sh/include/asm/lookup_clkdev.h new file +29 -0
@@ -0,0 +1,29 @@ +/* +* Copyright (C) 2010 Paul Mundt <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Helper for the clk API to assist looking up a struct clk. +*/ + +#ifndef __LOOKUP_CLK_DEV__ +#define __LOOKUP_CLK_DEV__ + +#include <linux/bootmem.h> +#include <linux/mm.h> +#include <asm/clock.h> + +static __inline__struct clk_lookup_alloc *arch_kzalloc (size_t size) +{ +if (!slab_is_available ()) +return alloc_bootmem_low_pages (size); +else +return kzalloc (size,GFP_KERNEL ); +} + +#define __clk_put (clk) +#define __clk_get (clk) ({ 1; }) + +#endif /* __LOOKUP_CLK_DEV__ */
arch/sh/kernel/Makefile +1 -1
@@ -11,7 +11,7 @@ endif CFLAGS_REMOVE_return_address.o = -pg -obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \ +obj-y := debugtraps.o dma-nommu.o dumpstack.o \ idle.o io.o irq.o \ irq_$(BITS).o machvec.o nmi_debug.o process.o \ process_$(BITS).o ptrace_$(BITS).o \
arch/sh/kernel/clkdev.c deleted +0 -169
169 lines not on this page · raw message
arch/sh/kernel/cpu/clock.c +0 -16
@@ -48,20 +48,4 @@ int __init clk_init(void)return ret; } -/* -* Returns a clock. Note that we first try to use device id on the bus -* and clock name. If this fails, we try to use clock name only. -*/ -struct clk *clk_get (struct device *dev,const char *con_id) -{ -const char *dev_id = dev ?dev_name (dev) :NULL ; - -return clk_get_sys (dev_id, con_id); -} -EXPORT_SYMBOL_GPL (clk_get); - -void clk_put (struct clk *clk) -{ -} -EXPORT_SYMBOL_GPL (clk_put);
drivers/Kconfig +2 -0
@@ -111,4 +111,6 @@ source "drivers/xen/Kconfig" source "drivers/staging/Kconfig" source "drivers/platform/Kconfig" + +source "drivers/clk/Kconfig" endmenu
drivers/Makefile +2 -0
@@ -115,3 +115,5 @@ obj-$(CONFIG_VLYNQ) += vlynq/ obj-$(CONFIG_STAGING) += staging/ obj-y += platform/ obj-y += ieee802154/ +#common clk code +obj-y += clk/
drivers/clk/Kconfig new file +4 -0
@@ -0,0 +1,4 @@ + +config LOOKUP_CLKDEV + bool + select HAVE_CLK
drivers/clk/Makefile new file +2 -0
@@ -0,0 +1,2 @@ + +obj-$(CONFIG_LOOKUP_CLKDEV) += lookup_clkdev.o
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +11 -7
@@ -1,5 +1,5 @@/* -* arch/arm/common/clkdev.c +* drivers/clk/lookup_clkdev.c * * Copyright (C) 2008 Russell King. *
@@ -21,7 +21,7 @@#include <linux/slab.h> #include <asm/clkdev.h> -#include <mach/clkdev.h> +#include <asm/lookup_clkdev.h> static LIST_HEAD (clocks);static DEFINE_MUTEX (clocks_mutex);
@@ -79,19 +79,23 @@ struct clk *clk_get_sys(const char *dev_id, const char *con_id) }EXPORT_SYMBOL (clk_get_sys); +/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;return clk_get_sys (dev_id, con_id); } -EXPORT_SYMBOL (clk_get); +EXPORT_SYMBOL_GPL (clk_get);void clk_put (struct clk *clk) {__clk_put (clk); } -EXPORT_SYMBOL (clk_put); +EXPORT_SYMBOL_GPL (clk_put);void clkdev_add (struct clk_lookup *cl) {
@@ -120,12 +124,12 @@ struct clk_lookup_alloc {char con_id[MAX_CON_ID ]; }; -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refok +clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...) {struct clk_lookup_alloc *cla; - cla =kzalloc (sizeof (*cla),GFP_KERNEL ); + cla =arch_kzalloc (sizeof (*cla));if (!cla)return NULL ;
Signature · 1 line
1.7.1
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 11 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +4
-0+/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;return clk_get_sys (dev_id, con_id);
drivers/clk/lookup_clkdev.c struct clk *clk_get_sys(const char *dev_id, const char *con_id) · line 98
Quoted 10 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +2
-2} -EXPORT_SYMBOL (clk_get); +EXPORT_SYMBOL_GPL (clk_get);void clk_put (struct clk *clk) {__clk_put (clk); } -EXPORT_SYMBOL (clk_put); +EXPORT_SYMBOL_GPL (clk_put);
Please leave these as-is.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 16 lines · Russell King - ARM Linux
Quoted 15 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +5
-1+/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;return clk_get_sys (dev_id, con_id); } -EXPORT_SYMBOL (clk_get); +EXPORT_SYMBOL_GPL (clk_get);
Quoted 8 lines
drivers/clk/lookup_clkdev.c struct clk *clk_get_sys(const char *dev_id, const char *con_id) · line 98
Quoted 6 lines
void
clk_put(struct clk *clk)
{drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-1__clk_put (clk); } -EXPORT_SYMBOL (clk_put); +EXPORT_SYMBOL_GPL (clk_put);Please leave these as-is.
ok but on SH it's GPL so it is ok with you Paul too?
Best Regards,
J.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 25 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 16 lines · Russell King - ARM Linux
Quoted 15 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +5
-1+/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;return clk_get_sys (dev_id, con_id); } -EXPORT_SYMBOL (clk_get); +EXPORT_SYMBOL_GPL (clk_get);Quoted 8 lines
drivers/clk/lookup_clkdev.c struct clk *clk_get_sys(const char *dev_id, const char *con_id) · line 98
Quoted 6 lines
void
clk_put(struct clk *clk)
{drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-1__clk_put (clk); } -EXPORT_SYMBOL (clk_put); +EXPORT_SYMBOL_GPL (clk_put);Please leave these as-is.
Quoted 1 line
ok but on SH it's GPL so it is ok with you Paul too?
If you want to get that pedantic... I created clkdev, and Sascha Hauer extended it with some refactoring to create the clk_get_sys() interface.
If you look at the history, the sh version is a copy of the ARM version:
commit 51a5006afcd13176276f0935ee57c4cc6f210e83
Author: Paul Mundt <[email protected]> Date: Mon Mar 8 21:45:19 2010 +0900
sh: Merge clkdev API updates.
This rolls in the remainder of the clkdev API bits from the ARM tree. This can more or less be used verbatim, so we just copy it over and nuke our local version.
and
commit 441c2440aba2efd8d0f48a5e3357deec92283d62
Author: Magnus Damm <[email protected]> Date: Tue May 11 09:37:12 2010 +0000
sh: remove unused clock lookup
Now when all clocks are registered using clkdev, get rid of the special SH-specific clock lookup.
Also ditch the unused module ref counting code. This patch syncs the SH behaviour with ARM.
so really it's a question for primerily me, and maybe Sascha.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 26 lines · Russell King - ARM Linux
Quoted 25 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 24 lines · Russell King - ARM Linux
Quoted 11 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +4
-0+/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;return clk_get_sys (dev_id, con_id);drivers/clk/lookup_clkdev.c struct clk *clk_get_sys(const char *dev_id, const char *con_id) · line 98
Quoted 10 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +2
-2} -EXPORT_SYMBOL (clk_get); +EXPORT_SYMBOL_GPL (clk_get);void clk_put (struct clk *clk) {__clk_put (clk); } -EXPORT_SYMBOL (clk_put); +EXPORT_SYMBOL_GPL (clk_put);Please leave these as-is.
Quoted 4 lines
Quoted 1 line
ok but on SH it's GPL so it is ok with you Paul too?
If you want to get that pedantic... I created clkdev, and Sascha Hauer extended it with some refactoring to create the
clk_get_sys()interface.
personnaly It's fine for I
I just get in mind to knon if Paul have a specific reason to put it as GPL EXPORT_SYMBOL
Best Regards,
J.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 27 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 26 lines · Russell King - ARM Linux
Quoted 25 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 24 lines · Russell King - ARM Linux
Quoted 11 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +4
-0+/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;return clk_get_sys (dev_id, con_id);drivers/clk/lookup_clkdev.c struct clk *clk_get_sys(const char *dev_id, const char *con_id) · line 98
Quoted 10 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +2
-2} -EXPORT_SYMBOL (clk_get); +EXPORT_SYMBOL_GPL (clk_get);void clk_put (struct clk *clk) {__clk_put (clk); } -EXPORT_SYMBOL (clk_put); +EXPORT_SYMBOL_GPL (clk_put);Please leave these as-is.
Quoted 8 lines
Quoted 4 lines
Quoted 1 line
ok but on SH it's GPL so it is ok with you Paul too?
If you want to get that pedantic... I created clkdev, and Sascha Hauer extended it with some refactoring to create the
clk_get_sys()interface.personnaly It's fine for I
I just get in mind to knon if Paul have a specific reason to put it as GPLEXPORT_SYMBOL
The original SH interfaces were GPL exported, when I moved the ARM code in I suppose I forgot to sync the symbol exports at the same time. My reasons for having it GPL only in the first place are irrelevant here, we defer to whatever ARM is doing.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Jean-Christophe PLAGNIOL-VILLARDHello,
Quoted 243 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
put the arch specific code for allocation as example in
asm/lookup_clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>--- arch/arm/Kconfig | 40 +++--- arch/arm/common/Kconfig | 4 - arch/arm/common/Makefile | 1 - arch/arm/include/asm/lookup_clkdev.h | 23 +++ arch/arm/mach-shmobile/Kconfig | 6 +- arch/arm/plat-omap/Kconfig | 4 +- arch/sh/Kconfig | 2 +- arch/sh/include/asm/lookup_clkdev.h | 29 ++++ arch/sh/kernel/Makefile | 2 +- arch/sh/kernel/clkdev.c | 169 -------------------- arch/sh/kernel/cpu/clock.c | 16 -- drivers/Kconfig | 2 + drivers/Makefile | 2 + drivers/clk/Kconfig | 4 + drivers/clk/Makefile | 2 + .../common/clkdev.c => drivers/clk/lookup_clkdev.c | 18 ++- 16 files changed, 100 insertions(+), 224 deletions(-) create mode 100644 arch/arm/include/asm/lookup_clkdev.h create mode 100644 arch/sh/include/asm/lookup_clkdev.h delete mode 100644 arch/sh/kernel/clkdev.c create mode 100644 drivers/clk/Kconfig create mode 100644 drivers/clk/Makefile rename arch/arm/common/clkdev.c => drivers/clk/lookup_clkdev.c (89%)arch/arm/Kconfig +20
-20@@ -221,7 +221,7 @@ config ARCH_INTEGRATOR bool "ARM Ltd. Integrator family" select ARM_AMBA select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ICST select GENERIC_CLOCKEVENTS select PLAT_VERSATILE@@ -231,7 +231,7 @@ config ARCH_INTEGRATOR config ARCH_REALVIEW bool "ARM Ltd. RealView family" select ARM_AMBA - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB@@ -245,7 +245,7 @@ config ARCH_VERSATILE bool "ARM Ltd. Versatile family" select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB@@ -259,7 +259,7 @@ config ARCH_VEXPRESS select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_TIMER_SP804 - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select HAVE_CLK select ICST@@ -281,7 +281,7 @@ config ARCH_BCMRING depends on MMU select CPU_V6 select ARM_AMBA - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB help@@ -328,7 +328,7 @@ config ARCH_EP93XX select CPU_ARM920T select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_USES_GETTIMEOFFSET@@ -348,14 +348,14 @@ config ARCH_MXC bool "Freescale MXC/iMX-based" select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV help Support for Freescale MXC/iMX-based family of processors config ARCH_STMP3XXX bool "Freescale STMP3xxx" select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select USB_ARCH_HAS_EHCI@@ -473,7 +473,7 @@ config ARCH_LPC32XX select HAVE_IDE select ARM_AMBA select USB_ARCH_HAS_OHCI - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_TIME select GENERIC_CLOCKEVENTS help@@ -507,7 +507,7 @@ config ARCH_MMP bool "Marvell PXA168/910/MMP2" depends on MMU select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select TICK_ONESHOT select PLAT_PXA@@ -539,7 +539,7 @@ config ARCH_W90X900 bool "Nuvoton W90X900 CPU" select CPU_ARM926T select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS help Support for Nuvoton (Winbond logic dept.) ARM9 processor,@@ -553,7 +553,7 @@ config ARCH_W90X900 config ARCH_NUC93X bool "Nuvoton NUC93X CPU" select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV help Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a low-power and high performance MPEG-4/JPEG multimedia controller chip.@@ -564,7 +564,7 @@ config ARCH_TEGRA select GENERIC_CLOCKEVENTS select GENERIC_GPIO select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_HAS_BARRIERS if CACHE_L2X0 help This enables support for NVIDIA Tegra based systems (Tegra APX,@@ -573,7 +573,7 @@ config ARCH_TEGRA config ARCH_PNX4008 bool "Philips Nexperia PNX4008 Mobile" select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_USES_GETTIMEOFFSET help This enables support for Philips PNX4008 mobile platform.@@ -583,7 +583,7 @@ config ARCH_PXA depends on MMU select ARCH_MTD_XIP select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select TICK_ONESHOT@@ -767,7 +767,7 @@ config ARCH_U300 select ARM_AMBA select ARM_VIC select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_GPIO help Support for ST-Ericsson U300 series mobile platforms.@@ -777,7 +777,7 @@ config ARCH_U8500 select CPU_V7 select ARM_AMBA select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select LOOKUP_CLKDEV select ARCH_REQUIRE_GPIOLIB help Support for ST-Ericsson's Ux500 architecture@@ -787,7 +787,7 @@ config ARCH_NOMADIK select ARM_AMBA select ARM_VIC select CPU_ARM926T - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB help@@ -799,7 +799,7 @@ config ARCH_DAVINCI select ARCH_REQUIRE_GPIOLIB select ZONE_DMA select HAVE_IDE - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_ALLOCATOR select ARCH_HAS_HOLES_MEMORYMODEL help@@ -819,7 +819,7 @@ config PLAT_SPEAR bool "ST SPEAr" select ARM_AMBA select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select LOOKUP_CLKDEV select GENERIC_CLOCKEVENTS select HAVE_CLK helparch/arm/common/Kconfig +0
-4@@ -37,7 +37,3 @@ config SHARP_PARAM config SHARP_SCOOP bool - -config COMMON_CLKDEV - bool - select HAVE_CLKarch/arm/common/Makefile +0
-1@@ -16,4 +16,3 @@ obj-$(CONFIG_SHARP_SCOOP) += scoop.o obj-$(CONFIG_ARCH_IXP2000) += uengine.o obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o -obj-$(CONFIG_COMMON_CLKDEV) += clkdev.oarch/arm/include/asm/lookup_clkdev.h new file +0
-0
arch/arm/include/asm/lookup_clkdev.h line 2
Quoted 2 lines
arch/arm/include/asm/lookup_clkdev.h new file +2
-0@@ -0,0 +1,23 @@ +/* +* arch/arm/common/clkdev.c
This line is wrong.
Quoted 9 lines
arch/arm/include/asm/lookup_clkdev.h new file +9
-0+* +* Copyright (C) 2008 Russell King. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Helper for the clk API to assist looking up a struct clk. +*/
arch/arm/include/asm/lookup_clkdev.h line 21
Quoted 10 lines
arch/arm/include/asm/lookup_clkdev.h new file +10
-0+ +#ifndef __LOOKUP_CLK_DEV__ +#define __LOOKUP_CLK_DEV__ + +#include <mach/clkdev.h> + +static __inline__struct clk_lookup_alloc *arch_kzalloc (size_t size) +{ +return kzalloc (size,GFP_KERNEL ); +}
Is this really needed? If yes it should either be in a different header of be named clk_lookup_alloc or similar.
Quoted 403 lines
arch/arm/include/asm/lookup_clkdev.h new file +2
-0+ +#endif /* __LOOKUP_CLK_DEV__ */ arch/arm/mach-shmobile/Kconfig +3
-3@@ -6,7 +6,7 @@ config ARCH_SH7367 bool "SH-Mobile G3 (SH7367)" select CPU_V6 select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select SH_CLK_CPG select GENERIC_CLOCKEVENTS@@ -14,7 +14,7 @@ config ARCH_SH7377 bool "SH-Mobile G4 (SH7377)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select SH_CLK_CPG select GENERIC_CLOCKEVENTS@@ -22,7 +22,7 @@ config ARCH_SH7372 bool "SH-Mobile AP4 (SH7372)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select LOOKUP_CLKDEV select SH_CLK_CPG select GENERIC_CLOCKEVENTSarch/arm/plat-omap/Kconfig +2
-2@@ -11,13 +11,13 @@ choice config ARCH_OMAP1 bool "TI OMAP1" - select COMMON_CLKDEV + select LOOKUP_CLKDEV help "Systems based on omap7xx, omap15xx or omap16xx" config ARCH_OMAP2PLUS bool "TI OMAP2/3/4" - select COMMON_CLKDEV + select LOOKUP_CLKDEV help "Systems based on omap24xx, omap34xx or omap44xx"arch/sh/Kconfig +1
-1@@ -8,7 +8,7 @@ mainmenu "Linux/SuperH Kernel Configuration" config SUPERH def_bool y select EMBEDDED - select HAVE_CLK + select LOOKUP_CLKDEV select HAVE_IDE if HAS_IOPORT select HAVE_MEMBLOCK select HAVE_OPROFILEarch/sh/include/asm/lookup_clkdev.h new file +29
-0@@ -0,0 +1,29 @@ +/* +* Copyright (C) 2010 Paul Mundt <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Helper for the clk API to assist looking up a struct clk. +*/ + +#ifndef __LOOKUP_CLK_DEV__ +#define __LOOKUP_CLK_DEV__ + +#include <linux/bootmem.h> +#include <linux/mm.h> +#include <asm/clock.h> + +static __inline__struct clk_lookup_alloc *arch_kzalloc (size_t size) +{ +if (!slab_is_available ()) +return alloc_bootmem_low_pages (size); +else +return kzalloc (size,GFP_KERNEL ); +} + +#define __clk_put (clk) +#define __clk_get (clk) ({ 1; }) + +#endif /* __LOOKUP_CLK_DEV__ */ arch/sh/kernel/Makefile +1
-1@@ -11,7 +11,7 @@ endif CFLAGS_REMOVE_return_address.o = -pg -obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \ +obj-y := debugtraps.o dma-nommu.o dumpstack.o \ idle.o io.o irq.o \ irq_$(BITS).o machvec.o nmi_debug.o process.o \ process_$(BITS).o ptrace_$(BITS).o \arch/sh/kernel/clkdev.c deleted +0
-169@@ -1,169 +0,0 @@ -/* -* arch/sh/kernel/clkdev.c -* -* Cloned from arch/arm/common/clkdev.c: -* -* Copyright (C) 2008 Russell King. -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 2 as -* published by the Free Software Foundation. -* -* Helper for the clk API to assist looking up a struct clk. -*/ -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/device.h> -#include <linux/list.h> -#include <linux/errno.h> -#include <linux/err.h> -#include <linux/string.h> -#include <linux/mutex.h> -#include <linux/clk.h> -#include <linux/slab.h> -#include <linux/bootmem.h> -#include <linux/mm.h> -#include <asm/clock.h> -#include <asm/clkdev.h> - -static LIST_HEAD (clocks); -static DEFINE_MUTEX (clocks_mutex); - -/* -* Find the correct struct clk for the device and connection ID. -* We do slightly fuzzy matching here: -* An entry with a NULL ID is assumed to be a wildcard. -* If an entry has a device ID, it must match -* If an entry has a connection ID, it must match -* Then we take the most specific entry - with the following -* order of precedence: dev+con > dev only > con only. -*/ -static struct clk *clk_find (const char *dev_id,const char *con_id) -{ -struct clk_lookup *p; -struct clk *clk =NULL ; -int match, best =0 ; - -list_for_each_entry (p, &clocks, node) { - match =0 ; -if (p->dev_id) { -if (!dev_id ||strcmp (p->dev_id, dev_id)) -continue ; - match +=2 ; - } -if (p->con_id) { -if (!con_id ||strcmp (p->con_id, con_id)) -continue ; - match +=1 ; - } -if (match ==0 ) -continue ; - -if (match > best) { - clk = p->clk; - best = match; - } - } -return clk; -} - -struct clk *clk_get_sys (const char *dev_id,const char *con_id) -{ -struct clk *clk; - -mutex_lock (&clocks_mutex); - clk =clk_find (dev_id, con_id); -mutex_unlock (&clocks_mutex); - -return clk ? clk :ERR_PTR (-ENOENT ); -} -EXPORT_SYMBOL (clk_get_sys); - -void clkdev_add (struct clk_lookup *cl) -{ -mutex_lock (&clocks_mutex); -list_add_tail (&cl->node, &clocks); -mutex_unlock (&clocks_mutex); -} -EXPORT_SYMBOL (clkdev_add); - -void __init clkdev_add_table (struct clk_lookup *cl,size_t num) -{ -mutex_lock (&clocks_mutex); -while (num--) { -list_add_tail (&cl->node, &clocks); - cl++; - } -mutex_unlock (&clocks_mutex); -} - -#define MAX_DEV_ID 20 -#define MAX_CON_ID 16 - -struct clk_lookup_alloc { -struct clk_lookup cl; -char dev_id[MAX_DEV_ID ]; -char con_id[MAX_CON_ID ]; -}; - -struct clk_lookup * __init_refok -clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...) -{ -struct clk_lookup_alloc *cla; - -if (!slab_is_available ()) - cla =alloc_bootmem_low_pages (sizeof (*cla)); -else - cla =kzalloc (sizeof (*cla),GFP_KERNEL ); - -if (!cla) -return NULL ; - - cla->cl.clk = clk; -if (con_id) { -strlcpy (cla->con_id, con_id,sizeof (cla->con_id)); - cla->cl.con_id = cla->con_id; - } - -if (dev_fmt) { -va_list ap; - -va_start (ap, dev_fmt); -vscnprintf (cla->dev_id,sizeof (cla->dev_id), dev_fmt, ap); - cla->cl.dev_id = cla->dev_id; -va_end (ap); - } - -return &cla->cl; -} -EXPORT_SYMBOL (clkdev_alloc); - -int clk_add_alias (const char *alias,const char *alias_dev_name,char *id, -struct device *dev) -{ -struct clk *r =clk_get (dev, id); -struct clk_lookup *l; - -if (IS_ERR (r)) -return PTR_ERR (r); - - l =clkdev_alloc (r, alias, alias_dev_name); -clk_put (r); -if (!l) -return -ENODEV ; -clkdev_add (l); -return 0 ; -} -EXPORT_SYMBOL (clk_add_alias); - -/* -* clkdev_drop - remove a clock dynamically allocated -*/ -void clkdev_drop (struct clk_lookup *cl) -{ -mutex_lock (&clocks_mutex); -list_del (&cl->node); -mutex_unlock (&clocks_mutex); -kfree (cl); -} -EXPORT_SYMBOL (clkdev_drop);arch/sh/kernel/cpu/clock.c +0
-16@@ -48,20 +48,4 @@ int __init clk_init(void)return ret; } -/* -* Returns a clock. Note that we first try to use device id on the bus -* and clock name. If this fails, we try to use clock name only. -*/ -struct clk *clk_get (struct device *dev,const char *con_id) -{ -const char *dev_id = dev ?dev_name (dev) :NULL ; - -return clk_get_sys (dev_id, con_id); -} -EXPORT_SYMBOL_GPL (clk_get); - -void clk_put (struct clk *clk) -{ -} -EXPORT_SYMBOL_GPL (clk_put);drivers/Kconfig +2
-0@@ -111,4 +111,6 @@ source "drivers/xen/Kconfig" source "drivers/staging/Kconfig" source "drivers/platform/Kconfig" + +source "drivers/clk/Kconfig" endmenudrivers/Makefile +2
-0@@ -115,3 +115,5 @@ obj-$(CONFIG_VLYNQ) += vlynq/ obj-$(CONFIG_STAGING) += staging/ obj-y += platform/ obj-y += ieee802154/ +#common clk code +obj-y += clk/drivers/clk/Kconfig new file +4
-0@@ -0,0 +1,4 @@ + +config LOOKUP_CLKDEV + bool + select HAVE_CLKdrivers/clk/Makefile new file +2
-0@@ -0,0 +1,2 @@ + +obj-$(CONFIG_LOOKUP_CLKDEV) += lookup_clkdev.odrivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +8
-4@@ -1,5 +1,5 @@/* -* arch/arm/common/clkdev.c +* drivers/clk/lookup_clkdev.c * * Copyright (C) 2008 Russell King. * @@ -21,7 +21,7 @@#include <linux/slab.h> #include <asm/clkdev.h> -#include <mach/clkdev.h> +#include <asm/lookup_clkdev.h> static LIST_HEAD (clocks);static DEFINE_MUTEX (clocks_mutex);@@ -79,19 +79,23 @@ struct clk *clk_get_sys(const char *dev_id, const char *con_id) }EXPORT_SYMBOL (clk_get_sys); +/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;return clk_get_sys (dev_id, con_id); } -EXPORT_SYMBOL (clk_get); +EXPORT_SYMBOL_GPL (clk_get);void clk_put (struct clk *clk) {__clk_put (clk); } -EXPORT_SYMBOL (clk_put); +EXPORT_SYMBOL_GPL (clk_put);void clkdev_add (struct clk_lookup *cl) {
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 127
Quoted 6 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-2@@ -120,12 +124,12 @@ struct clk_lookup_alloc {char con_id[MAX_CON_ID ]; }; -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refok
Why do you need __init_refok? __init_refok is defined as follows in include/linux/init.h:
/* compatibility defines */ #define __init_refok __ref
So if really needed better use __ref. Couldn't this be __init?
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 134
Quoted 8 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +2
-1+clkdev_alloc(struct clk *clk, const char *con_id, const char *dev_fmt, ...) { struct clk_lookup_alloc *cla; - cla =kzalloc (sizeof (*cla),GFP_KERNEL ); + cla =arch_kzalloc (sizeof (*cla));if (!cla)return NULL ;
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 11 lines
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 127
Quoted 4 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-2-struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refokWhy do you need
__init_refok?__init_refokis defined as follows ininclude/linux/init.h:/* compatibility defines */ #define __init_refok __refSo if really needed better use
__ref. Couldn't this be__init?
ok for __ref but __init_refok is more clear IMHO
and yes we need it as for early device we may use bootmem as slab allocators may no be availlable in some case
Best Regards,
J.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 7 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 7 lines
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 127
Quoted 4 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-2-struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refokWhy do you need
__init_refok?__init_refokis defined as follows ininclude/linux/init.h:
Quoted 5 lines
Quoted 4 lines
/* compatibility defines */ #define __init_refok __refSo if really needed better use
__ref. Couldn't this be__init?ok for
__refbut__init_refokis more clear IMHO
For me it was not, because before your mail I didn't know __init_refok so I had to look it up.
Quoted 2 lines
and yes we need it as for early device we may use bootmem as slab allocators may no be availlable in some case
Yes I got that, but it doesn't explain why you need to mark your function as __ref or why you cannot use __init.
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 12 lines · Uwe Kleine-K?nig
Quoted 11 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 11 lines
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 127
Quoted 4 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-2-struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refokWhy do you need
__init_refok?__init_refokis defined as follows ininclude/linux/init.h:/* compatibility defines */ #define __init_refok __refSo if really needed better use
__ref. Couldn't this be__init?
Quoted 8 lines
Quoted 1 line
ok for
__refbut__init_refokis more clear IMHOFor me it was not, because before your mail I didn't know
__init_refokso I had to look it up.Quoted 2 lines
and yes we need it as for early device we may use bootmem as slab allocators may no be availlable in some case
Yes I got that, but it doesn't explain why you need to mark your function as
__refor why you cannot use__init.
Take a look in this commit 312b1485fb509c9bc32eda28ad29537896658cb8
it will be more clear
Best Regards,
J.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 17 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 16 lines · Uwe Kleine-K?nig
Quoted 7 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 7 lines
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 127
Quoted 4 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-2-struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refokWhy do you need
__init_refok?__init_refokis defined as follows ininclude/linux/init.h:Quoted 5 lines
Quoted 4 lines
/* compatibility defines */ #define __init_refok __refSo if really needed better use
__ref. Couldn't this be__init?ok for
__refbut__init_refokis more clear IMHOFor me it was not, because before your mail I didn't know
__init_refokso I had to look it up.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
and yes we need it as for early device we may use bootmem as slab allocators may no be availlable in some case
Yes I got that, but it doesn't explain why you need to mark your function as
__refor why you cannot use__init.Take a look in this commit
312b1485fb509c9bc32eda28ad29537896658cb8it will be more clear
Assume I understand in which cases you need to use __ref. Which of these cases is valid for clkdev_alloc?
And further, which function calls (or which structure references) clkdev_alloc that makes it impossible to mark it using __init?
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Uwe Kleine-KönigQuoted 12 lines · Uwe Kleine-K?nig
Quoted 11 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 11 lines
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 127
Quoted 4 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-2-struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refokWhy do you need
__init_refok?__init_refokis defined as follows ininclude/linux/init.h:/* compatibility defines */ #define __init_refok __refSo if really needed better use
__ref. Couldn't this be__init?
Quoted 8 lines
Quoted 1 line
ok for
__refbut__init_refokis more clear IMHOFor me it was not, because before your mail I didn't know
__init_refokso I had to look it up.Quoted 2 lines
and yes we need it as for early device we may use bootmem as slab allocators may no be availlable in some case
Yes I got that, but it doesn't explain why you need to mark your function as
__refor why you cannot use__init.
You can't use __init for this because this function may be used for non-init code.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 17 lines · Russell King - ARM Linux
Quoted 16 lines · Uwe Kleine-K?nig
Quoted 7 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 7 lines
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 127
Quoted 4 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +1
-2-struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refokWhy do you need
__init_refok?__init_refokis defined as follows ininclude/linux/init.h:Quoted 5 lines
Quoted 4 lines
/* compatibility defines */ #define __init_refok __refSo if really needed better use
__ref. Couldn't this be__init?ok for
__refbut__init_refokis more clear IMHOFor me it was not, because before your mail I didn't know
__init_refokso I had to look it up.
Quoted 7 lines
Quoted 4 lines
Quoted 2 lines
and yes we need it as for early device we may use bootmem as slab allocators may no be availlable in some case
Yes I got that, but it doesn't explain why you need to mark your function as
__refor why you cannot use__init.You can't use
__initfor this because this function may be used for non-init code.
Hmmm, as I don't seem to be able to persude someone else to do the hard work, I did it. Here are the hard facts:
- clkdev_alloc is exported
- clkdev is called by clk_add_alias
- clk_add_alias is exported
- clkdev_alloc is called by impd1_probe (arch/arm/mach-integrator/impd1.c)
Can be compiled as a module.
- clk_add_alias is called from __init functions only in arch/arm/mach-davinci/dm355.c arch/arm/mach-davinci/dm365.c arch/arm/mach-davinci/dm644x.c arch/arm/mach-pxa/eseries.c arch/arm/mach-pxa/lubbock.c arch/arm/mach-pxa/tosa.c arch/sh/kernel/cpu/clock-cpg.c
All these cannot be compiled as a module.
- clk_add_alias is called from non-__init functions that could be __init:
arch/arm/mach-omap1/board-nokia770.c
This cannot be compiled as a module.
So the actions needed before make clkdev_alloc and clk_add_alias __init are:
- register the clocks for impd1 in machine code, not the driver
- move hwa742_dev_init to .init.text
- don't export clkdev_alloc and clk_add_alias
I guess the first is simple, the rest trivial, no?
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
PATCH 1/1 ARM: omap1/nokia770: mark some functions __init
These are only called from omap_nokia770_init which is in .init.text, too.
--- arch/arm/mach-omap1/board-nokia770.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
arch/arm/mach-omap1/board-nokia770.c +3 -3
@@ -112,7 +112,7 @@ static struct mipid_platform_data nokia770_mipid_platform_data = { .shutdown = mipid_shutdown, }; -static void mipid_dev_init (void ) +static void __init mipid_dev_init (void ) {const struct omap_lcd_config *conf;
@@ -123,7 +123,7 @@ static void mipid_dev_init(void) } } -static void ads7846_dev_init (void ) +static void __init ads7846_dev_init (void ) {if (gpio_request (ADS7846_PENDOWN_GPIO ,"ADS7846 pendown" ) <0 )printk (KERN_ERR "can't get ads7846 pen down GPIO\n" );
@@ -167,7 +167,7 @@ static struct hwa742_platform_data nokia770_hwa742_platform_data = { .te_connected = 1, }; -static void hwa742_dev_init (void ) +static void __init hwa742_dev_init (void ) {clk_add_alias ("hwa_sys_ck" ,NULL ,"bclk" ,NULL );omapfb_set_ctrl_platform_data (&nokia770_hwa742_platform_data);
Signature · 1 line
1.7.1
PATCH 1/5 ARM: omap/fb: move omap_init_fb to .init.text
omap_init_fb() is only called as arch_initcall and so can live in .init.text.
--- arch/arm/plat-omap/fb.c | 4 ++-- 1 files changed, 2 insertions(+), 2 deletions(-)
arch/arm/plat-omap/fb.c +2 -2
@@ -336,7 +336,7 @@ void omapfb_set_ctrl_platform_data(void *data) omapfb_config.ctrl_platform_data = data; } -static inline int omap_init_fb (void ) +static int __init omap_init_fb (void ) {const struct omap_lcd_config *conf;
@@ -381,7 +381,7 @@ void omapfb_set_platform_data(struct omapfb_platform_data *data) omapfb_config = *data; } -static inline int omap_init_fb (void ) +static int __init omap_init_fb (void ) {return platform_device_register (&omap_fb_device); }
Signature · 1 line
1.7.1
Tomi Valkeinen
AppliedPATCH 1/5 ARM: omap/fb: move omap_init_fb to .init.text
Hi,
Quoted 4 lines · ext Uwe Kleine-K?nig
omap_init_fb()is only called asarch_initcalland so can live in .init.text.Signed-off-by Uwe Kleine-K?nig <[email protected]>
I picked patches 1, 2 and 3 from this patch set to my tree. They look fine, thanks!
Patch 4 should probably go through Tony, and 5 was marked work-in-progress.
Tomi
PATCH 2/5 ARM: omap/fb: move omapfb_reserve_sram to .init.text
In reply to Uwe Kleine-KönigThis function is only called by omap_detect_sram which lives in .init.text, too.
--- arch/arm/plat-omap/fb.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
arch/arm/plat-omap/fb.c +3 -3
@@ -262,7 +262,7 @@ void __init omapfb_reserve_sdram_memblock(void)* this point, since the driver built as a module would have problem with * freeing / reallocating the regions. */ -unsigned long omapfb_reserve_sram(unsigned long sram_pstart, +unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, unsigned long sram_vstart, unsigned long sram_size, unsigned long pstart_avail,
@@ -392,7 +392,7 @@ void omapfb_reserve_sdram_memblock(void) { } -unsigned long omapfb_reserve_sram(unsigned long sram_pstart, +unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, unsigned long sram_vstart, unsigned long sram_size, unsigned long start_avail,
@@ -411,7 +411,7 @@ void omapfb_reserve_sdram_memblock(void) { } -unsigned long omapfb_reserve_sram(unsigned long sram_pstart, +unsigned long __init omapfb_reserve_sram(unsigned long sram_pstart, unsigned long sram_vstart, unsigned long sram_size, unsigned long start_avail,
Signature · 1 line
1.7.1
PATCH 3/5 ARM: omap/fb: move get_fbmem_region() to .init.text
In reply to Uwe Kleine-Königget_fbmem_region() is only called by omapfb_reserve_sdram_memblock() and omapfb_reserve_sram() that both live in .init.text. So get_fbmem_region can go there, too.
--- arch/arm/plat-omap/fb.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/plat-omap/fb.c +1 -1
@@ -94,7 +94,7 @@ static int fbmem_region_reserved(unsigned long start, size_t size)* Get the region_idx`th region from board config/ATAG and convert it to * our internal format. */ -static int get_fbmem_region (int region_idx,struct omapfb_mem_region *rg) +static int __init get_fbmem_region (int region_idx,struct omapfb_mem_region *rg) {const struct omap_fbmem_config *conf;u32 paddr;
Signature · 1 line
1.7.1
PATCH 4/5 ARM: omap: move omap_get_config et al. to .init.text
In reply to Uwe Kleine-KönigAll callers of these functions live in .init.text, so these can go there, too. There they must not be exported anymore, this is no problem though, as all callers are always built-in.
--- arch/arm/plat-omap/common.c | 6 ++---- arch/arm/plat-omap/include/plat/board.h | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-)
arch/arm/plat-omap/common.c +2 -4
@@ -71,17 +71,15 @@ static const void *get_config(u16 tag, size_t len, int skip, size_t *len_out)return kinfo->data; } -const void *__omap_get_config (u16 tag,size_t len,int nr) +const void *__init __omap_get_config (u16 tag,size_t len,int nr) {return get_config (tag, len, nr,NULL ); } -EXPORT_SYMBOL (__omap_get_config); -const void *omap_get_var_config (u16 tag,size_t *len) +const void *__init omap_get_var_config (u16 tag,size_t *len) {return get_config (tag,NO_LENGTH_CHECK ,0 , len); } -EXPORT_SYMBOL (omap_get_var_config);void __init omap_reserve (void ) {
arch/arm/plat-omap/include/plat/board.h +2 -2
@@ -151,14 +151,14 @@ struct omap_board_config_kernel {const void *data; }; -extern const void *__omap_get_config (u16 tag,size_t len,int nr); +extern const void *__init __omap_get_config (u16 tag,size_t len,int nr);#define omap_get_config (tag, type) \ ((const type *) __omap_get_config((tag), sizeof(type), 0))#define omap_get_nr_config (tag, type, nr) \ ((const type *) __omap_get_config((tag), sizeof(type), (nr))) -extern const void *omap_get_var_config (u16 tag,size_t *len); +extern const void *__init omap_get_var_config (u16 tag,size_t *len);extern struct omap_board_config_kernel *omap_board_config;extern int omap_board_config_size;
Signature · 1 line
1.7.1
PATCH 5/5 wip: ARM: omap: move omap_board_config_kernel to .init.data
In reply to Uwe Kleine-KönigProbably this works ...
--- arch/arm/plat-omap/common.c | 2 +- 1 files changed, 1 insertions(+), 1 deletions(-)
arch/arm/plat-omap/common.c +1 -1
@@ -46,7 +46,7 @@#define NO_LENGTH_CHECK 0xffffffff -struct omap_board_config_kernel *omap_board_config; +struct omap_board_config_kernel *omap_board_config__initdata ;int omap_board_config_size;static const void *get_config (u16 tag,size_t len,int skip,size_t *len_out)
Signature · 1 line
1.7.1
PATCH 1/1 ARM: omap1/nokia770: mark some functions __init
In reply to Uwe Kleine-KönigHey Tony,
this patch below is now 4 months old and I didn't get any feedback. (Though I somehow missed to cc linux-omap at vger.kernel.org before, sorry for that.)
There are two more patches in this thread that are not yet applied/commented. Should I resend?
Best regards
Uwe
Quoted 40 lines · Uwe Kleine-K?nig
These are only called from
omap_nokia770_initwhich is in .init.text, too.Signed-off-by Uwe Kleine-K?nig <[email protected]>--- arch/arm/mach-omap1/board-nokia770.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)arch/arm/mach-omap1/board-nokia770.c +3
-3@@ -112,7 +112,7 @@ static struct mipid_platform_data nokia770_mipid_platform_data = { .shutdown = mipid_shutdown, }; -static void mipid_dev_init (void ) +static void __init mipid_dev_init (void ) {const struct omap_lcd_config *conf;@@ -123,7 +123,7 @@ static void mipid_dev_init(void) } } -static void ads7846_dev_init (void ) +static void __init ads7846_dev_init (void ) {if (gpio_request (ADS7846_PENDOWN_GPIO ,"ADS7846 pendown" ) <0 )printk (KERN_ERR "can't get ads7846 pen down GPIO\n" );@@ -167,7 +167,7 @@ static struct hwa742_platform_data nokia770_hwa742_platform_data = { .te_connected = 1, }; -static void hwa742_dev_init (void ) +static void __init hwa742_dev_init (void ) {clk_add_alias ("hwa_sys_ck" ,NULL ,"bclk" ,NULL );omapfb_set_ctrl_platform_data (&nokia770_hwa742_platform_data);Signature · 1 line
1.7.1
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
PATCH 1/1 ARM: omap1/nokia770: mark some functions __init
Quoted 7 lines · Uwe Kleine-K?nig
Hey Tony,
this patch below is now 4 months old and I didn't get any feedback. (Though I somehow missed to cc linux-omap at vger.kernel.org before, sorry for that.)
There are two more patches in this thread that are not yet applied/commented. Should I resend?
ping
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
Tony Lindgren
maintainerPATCH 1/1 ARM: omap1/nokia770: mark some functions __init
Quoted 5 lines · Uwe Kleine-K?nig
Quoted 4 lines · Uwe Kleine-K?nig
Hey Tony,
this patch below is now 4 months old and I didn't get any feedback. (Though I somehow missed to cc linux-omap at vger.kernel.org before, sorry for that.)
Sorry I must have missed those.
Quoted 3 lines
Quoted 2 lines
There are two more patches in this thread that are not yet applied/commented. Should I resend?
ping
Well I usually purge my mailing list archives after about a month or so. Can you please resend or bounce the thread to me?
Regards,
Tony
PATCH 1/4 ARM: omap1/nokia770: mark some functions __init
These are only called from omap_nokia770_init which is in .init.text, too.
--- arch/arm/mach-omap1/board-nokia770.c | 6 +++--- 1 files changed, 3 insertions(+), 3 deletions(-)
arch/arm/mach-omap1/board-nokia770.c +3 -3
@@ -115,7 +115,7 @@ static struct mipid_platform_data nokia770_mipid_platform_data = { .shutdown = mipid_shutdown, }; -static void mipid_dev_init (void ) +static void __init mipid_dev_init (void ) {const struct omap_lcd_config *conf;
@@ -126,7 +126,7 @@ static void mipid_dev_init(void) } } -static void ads7846_dev_init (void ) +static void __init ads7846_dev_init (void ) {if (gpio_request (ADS7846_PENDOWN_GPIO ,"ADS7846 pendown" ) <0 )printk (KERN_ERR "can't get ads7846 pen down GPIO\n" );
@@ -170,7 +170,7 @@ static struct hwa742_platform_data nokia770_hwa742_platform_data = { .te_connected = 1, }; -static void hwa742_dev_init (void ) +static void __init hwa742_dev_init (void ) {clk_add_alias ("hwa_sys_ck" ,NULL ,"bclk" ,NULL );omapfb_set_ctrl_platform_data (&nokia770_hwa742_platform_data);
Signature · 1 line
1.7.2.3
PATCH 2/4 ARM: omap: move omap_get_config et al. to .init.text
In reply to Tony LindgrenAll callers of these functions live in .init.text, so these can go there, too. There they must not be exported anymore, this is no problem though, as all callers are always built-in.
--- arch/arm/plat-omap/common.c | 6 ++---- arch/arm/plat-omap/include/plat/board.h | 4 ++-- 2 files changed, 4 insertions(+), 6 deletions(-)
arch/arm/plat-omap/common.c +2 -4
@@ -49,17 +49,15 @@ static const void *get_config(u16 tag, size_t len, int skip, size_t *len_out)return kinfo->data; } -const void *__omap_get_config (u16 tag,size_t len,int nr) +const void *__init __omap_get_config (u16 tag,size_t len,int nr) {return get_config (tag, len, nr,NULL ); } -EXPORT_SYMBOL (__omap_get_config); -const void *omap_get_var_config (u16 tag,size_t *len) +const void *__init omap_get_var_config (u16 tag,size_t *len) {return get_config (tag,NO_LENGTH_CHECK ,0 , len); } -EXPORT_SYMBOL (omap_get_var_config);void __init omap_reserve (void ) {
arch/arm/plat-omap/include/plat/board.h +2 -2
@@ -151,14 +151,14 @@ struct omap_board_config_kernel {const void *data; }; -extern const void *__omap_get_config (u16 tag,size_t len,int nr); +extern const void *__init __omap_get_config (u16 tag,size_t len,int nr);#define omap_get_config (tag, type) \ ((const type *) __omap_get_config((tag), sizeof(type), 0))#define omap_get_nr_config (tag, type, nr) \ ((const type *) __omap_get_config((tag), sizeof(type), (nr))) -extern const void *omap_get_var_config (u16 tag,size_t *len); +extern const void *__init omap_get_var_config (u16 tag,size_t *len);extern struct omap_board_config_kernel *omap_board_config;extern int omap_board_config_size;
Signature · 1 line
1.7.2.3
PATCH 3/4 ARM: omap: move omap_board_config_kernel to .init.data
In reply to Tony LindgrenThis variable is only assigned in __init functions and never used later.
--- arch/arm/plat-omap/common.c | 5 +++-- 1 files changed, 3 insertions(+), 2 deletions(-)
arch/arm/plat-omap/common.c +3 -2
@@ -24,10 +24,11 @@#define NO_LENGTH_CHECK 0xffffffff -struct omap_board_config_kernel *omap_board_config; +struct omap_board_config_kernel *omap_board_config__initdata ;int omap_board_config_size; -static const void *get_config (u16 tag,size_t len,int skip,size_t *len_out) +static const void *__init get_config (u16 tag,size_t len, +int skip,size_t *len_out) {struct omap_board_config_kernel *kinfo =NULL ;int i;
Signature · 1 line
1.7.2.3
PATCH 4/4 wip: fix section mismatches in omap1_defconfig
In reply to Tony Lindgrenafter these changes omap1_defconfig and omap2plus_defconfig don't have any section mismatches any more, making it plausible that the patches earlier in this series are OK.
--- arch/arm/mach-omap1/board-ams-delta.c | 4 ++-- arch/arm/mach-omap1/board-fsample.c | 2 +- drivers/usb/otg/isp1301_omap.c | 2 +- 3 files changed, 4 insertions(+), 4 deletions(-)
arch/arm/mach-omap1/board-ams-delta.c +2 -2
@@ -175,7 +175,7 @@ static struct omap_usb_config ams_delta_usb_config __initdata = { .pins[0] = 2, }; -static struct omap_board_config_kernel ams_delta_config[] = { +static struct omap_board_config_kernel ams_delta_config[]__initdata = { {OMAP_TAG_LCD , &ams_delta_lcd_config }, };
@@ -259,7 +259,7 @@ static int ams_delta_camera_power(struct device *dev, int power)#define ams_delta_camera_power NULL#endif -static struct soc_camera_link __initdata ams_delta_iclink = { +static struct soc_camera_link ams_delta_iclink = { .bus_id =0 ,/* OMAP1 SoC camera bus */ .i2c_adapter_id =1 , .board_info = &ams_delta_camera_board_info[0 ],
arch/arm/mach-omap1/board-fsample.c +1 -1
@@ -291,7 +291,7 @@ static struct omap_lcd_config fsample_lcd_config __initdata = { .ctrl_name = "internal", }; -static struct omap_board_config_kernel fsample_config[] = { +static struct omap_board_config_kernel fsample_config[]__initdata = { {OMAP_TAG_LCD , &fsample_lcd_config }, };
drivers/usb/otg/isp1301_omap.c +1 -1
@@ -1510,7 +1510,7 @@ isp1301_start_hnp(struct otg_transceiver *dev)/*-------------------------------------------------------------------------*/ -static int __init +static int __devinit isp1301_probe (struct i2c_client *i2c,const struct i2c_device_id *id) {int status;
Signature · 1 line
1.7.2.3
Tony Lindgren
maintainerPATCH 1/1 ARM: omap1/nokia770: mark some functions __init
In reply to Tony LindgrenQuoted 4 lines · Tony Lindgren
Quoted 2 lines · Uwe Kleine-K?nig
Quoted 2 lines
There are two more patches in this thread that are not yet applied/commented. Should I resend?
Thanks Uwe, I've applied them into devel-cleanup branch for the next merge window.
Regards,
Tony
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Uwe Kleine-KönigQuoted 1 line · Uwe Kleine-K?nig
I guess the first is simple, the rest trivial, no?
Stop it. Just accept that we don't want clk_add_alias to be __init.
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Jean-Christophe PLAGNIOL-VILLARDQuoted 14 lines · Jean-Christophe PLAGNIOL-VILLARD
arch/arm/include/asm/lookup_clkdev.h new file +8
-0@@ -0,0 +1,23 @@ +/* +* arch/arm/common/clkdev.c +* +* Copyright (C) 2008 Russell King. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation.
arch/arm/include/asm/lookup_clkdev.h line 18
Quoted 10 lines
arch/arm/include/asm/lookup_clkdev.h new file +10
-0+* +* Helper for the clk API to assist looking up a struct clk. +*/ + +#ifndef __LOOKUP_CLK_DEV__ +#define __LOOKUP_CLK_DEV__ + +#include <mach/clkdev.h> + +static __inline__struct clk_lookup_alloc *arch_kzalloc (size_t size)
No need to use __inline__ here - use inline instead.
arch/arm/include/asm/lookup_clkdev.h line 19
Quoted 1 line
arch/arm/include/asm/lookup_clkdev.h new file +1
-0+static __inline__struct clk_lookup_alloc *arch_kzalloc (size_t size)
Ditto.
arch/arm/include/asm/lookup_clkdev.h struct clk_lookup_alloc { · line 128
Quoted 8 lines
arch/arm/include/asm/lookup_clkdev.h new file +2
-2@@ -120,12 +124,12 @@ struct clk_lookup_alloc {char con_id[MAX_CON_ID ]; }; -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refok +clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...)
This looks like a nasty hack to get around the problem of calling a boot-time only allocator - but I guess given what sh is doing we don't have much choice here.
The choice of 'arch_kzalloc' is imho very poor - it potentially could clash with some other use. Maybe __clkdev_alloc() instead?
RFC PATCH 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 22 lines
Review
Quoted 2 lines
(quoted diff) +2
-0+ +static __inline__ struct clk_lookup_alloc *arch_kzalloc(size_t size)No need to use
__inline__here - use inline instead.Quoted 1 line
+static
__inline__structclk_lookup_alloc*arch_kzalloc(size_t size)Ditto.
drivers/clk/lookup_clkdev.c struct clk_lookup_alloc { · line 128
Quoted 8 lines
drivers/clk/lookup_clkdev.c renamed from arch/arm/common/clkdev.c +2
-2@@ -120,12 +124,12 @@ struct clk_lookup_alloc {char con_id[MAX_CON_ID ]; }; -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refok +clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...)This looks like a nasty hack to get around the problem of calling a boot-time only allocator - but I guess given what sh is doing we don't have much choice here.
Quoted 2 lines
The choice of '
arch_kzalloc' is imho very poor - it potentially could clash with some other use. Maybe__clkdev_alloc()instead?
ok I'll update
Best Regards,
J.
RFC PATCH v2 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Jean-Christophe PLAGNIOL-VILLARDfactorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
put the arch specific code for allocation as example in asm/clkdev.h
---
V2:
update base on Russel & Uwe Comments
Best Regards,
J.
arch/arm/Kconfig | 40 +++---
arch/arm/common/Kconfig | 4 -
arch/arm/common/Makefile | 1 -
arch/arm/include/asm/clkdev.h | 24 +---
arch/arm/mach-bcmring/clock.c | 3 +-
arch/arm/mach-bcmring/core.c | 2 +-
arch/arm/mach-davinci/clock.h | 2 +-
arch/arm/mach-ep93xx/clock.c | 2 +-
arch/arm/mach-imx/clock-imx1.c | 3 +-
arch/arm/mach-imx/clock-imx21.c | 2 +-
arch/arm/mach-imx/clock-imx27.c | 2 +-
arch/arm/mach-integrator/core.c | 3 +-
arch/arm/mach-integrator/impd1.c | 3 +-
arch/arm/mach-integrator/integrator_cp.c | 3 +-
arch/arm/mach-lpc32xx/clock.c | 3 +-
arch/arm/mach-mmp/clock.h | 2 +-
arch/arm/mach-mx25/clock.c | 3 +-
arch/arm/mach-mx3/clock-imx31.c | 2 +-
arch/arm/mach-mx3/clock-imx35.c | 3 +-
arch/arm/mach-mx5/clock-mx51.c | 2 +-
arch/arm/mach-mxc91231/clock.c | 2 +-
arch/arm/mach-nomadik/clock.c | 2 +-
arch/arm/mach-nuc93x/clock.h | 2 +-
arch/arm/mach-omap1/clock.c | 2 +-
arch/arm/mach-omap2/dpll3xxx.c | 2 +-
arch/arm/mach-pnx4008/clock.c | 3 +-
arch/arm/mach-pxa/clock.c | 2 +-
arch/arm/mach-pxa/clock.h | 2 +-
arch/arm/mach-realview/core.c | 3 +-
arch/arm/mach-shmobile/Kconfig | 6 +-
arch/arm/mach-shmobile/clock-sh7367.c | 2 +-
arch/arm/mach-shmobile/clock-sh7372.c | 2 +-
arch/arm/mach-shmobile/clock-sh7377.c | 2 +-
arch/arm/mach-tegra/clock.c | 2 +-
arch/arm/mach-tegra/clock.h | 2 +-
arch/arm/mach-tegra/tegra2_clocks.c | 3 +-
arch/arm/mach-u300/clock.c | 2 +-
arch/arm/mach-ux500/clock.c | 3 +-
arch/arm/mach-versatile/core.c | 3 +-
arch/arm/mach-vexpress/ct-ca9x4.c | 3 +-
arch/arm/mach-vexpress/v2m.c | 3 +-
arch/arm/mach-w90x900/clock.h | 2 +-
arch/arm/plat-omap/Kconfig | 4 +-
arch/arm/plat-omap/include/plat/clkdev_omap.h | 2 +-
arch/arm/plat-spear/include/plat/clock.h | 2 +-
arch/arm/plat-stmp3xxx/clock.c | 2 +-
arch/sh/Kconfig | 2 +-
arch/sh/boards/mach-highlander/setup.c | 2 +-
arch/sh/include/asm/clkdev.h | 66 ++++-----
arch/sh/kernel/Makefile | 2 +-
arch/sh/kernel/clkdev.c | 169 -----------------------
arch/sh/kernel/cpu/clock-cpg.c | 2 +-
arch/sh/kernel/cpu/clock.c | 16 --
arch/sh/kernel/cpu/sh4/clock-sh4-202.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7343.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7366.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7723.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7724.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7757.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7763.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7780.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7785.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7786.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-shx3.c | 2 +-
drivers/Kconfig | 2 +
drivers/Makefile | 2 +
drivers/clk/Kconfig | 4 +
drivers/clk/Makefile | 2 +
{arch/arm/common => drivers/clk}/clkdev.c | 17 ++-
{arch/sh/include/asm => include/linux}/clkdev.h | 10 +-
71 files changed, 143 insertions(+), 351 deletions(-)
rewrite arch/sh/include/asm/clkdev.h (69%)
delete mode 100644 arch/sh/kernel/clkdev.c
create mode 100644 drivers/clk/Kconfig
create mode 100644 drivers/clk/Makefile
rename {arch/arm/common => drivers/clk}/clkdev.c (91%)
rename {arch/sh/include/asm => include/linux}/clkdev.h (85%)arch/arm/Kconfig +20 -20
@@ -221,7 +221,7 @@ config ARCH_INTEGRATOR bool "ARM Ltd. Integrator family" select ARM_AMBA select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select PLAT_VERSATILE
@@ -231,7 +231,7 @@ config ARCH_INTEGRATOR config ARCH_REALVIEW bool "ARM Ltd. RealView family" select ARM_AMBA - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB
@@ -245,7 +245,7 @@ config ARCH_VERSATILE bool "ARM Ltd. Versatile family" select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB
@@ -259,7 +259,7 @@ config ARCH_VEXPRESS select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_TIMER_SP804 - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select HAVE_CLK select ICST
@@ -281,7 +281,7 @@ config ARCH_BCMRING depends on MMU select CPU_V6 select ARM_AMBA - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB help
@@ -328,7 +328,7 @@ config ARCH_EP93XX select CPU_ARM920T select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_USES_GETTIMEOFFSET
@@ -348,14 +348,14 @@ config ARCH_MXC bool "Freescale MXC/iMX-based" select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP help Support for Freescale MXC/iMX-based family of processors config ARCH_STMP3XXX bool "Freescale STMP3xxx" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select USB_ARCH_HAS_EHCI
@@ -473,7 +473,7 @@ config ARCH_LPC32XX select HAVE_IDE select ARM_AMBA select USB_ARCH_HAS_OHCI - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_TIME select GENERIC_CLOCKEVENTS help
@@ -507,7 +507,7 @@ config ARCH_MMP bool "Marvell PXA168/910/MMP2" depends on MMU select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select TICK_ONESHOT select PLAT_PXA
@@ -539,7 +539,7 @@ config ARCH_W90X900 bool "Nuvoton W90X900 CPU" select CPU_ARM926T select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS help Support for Nuvoton (Winbond logic dept.) ARM9 processor,
@@ -553,7 +553,7 @@ config ARCH_W90X900 config ARCH_NUC93X bool "Nuvoton NUC93X CPU" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP help Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a low-power and high performance MPEG-4/JPEG multimedia controller chip.
@@ -564,7 +564,7 @@ config ARCH_TEGRA select GENERIC_CLOCKEVENTS select GENERIC_GPIO select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_HAS_BARRIERS if CACHE_L2X0 help This enables support for NVIDIA Tegra based systems (Tegra APX,
@@ -573,7 +573,7 @@ config ARCH_TEGRA config ARCH_PNX4008 bool "Philips Nexperia PNX4008 Mobile" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_USES_GETTIMEOFFSET help This enables support for Philips PNX4008 mobile platform.
@@ -583,7 +583,7 @@ config ARCH_PXA depends on MMU select ARCH_MTD_XIP select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select TICK_ONESHOT
@@ -767,7 +767,7 @@ config ARCH_U300 select ARM_AMBA select ARM_VIC select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_GPIO help Support for ST-Ericsson U300 series mobile platforms.
@@ -777,7 +777,7 @@ config ARCH_U8500 select CPU_V7 select ARM_AMBA select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB help Support for ST-Ericsson's Ux500 architecture
@@ -787,7 +787,7 @@ config ARCH_NOMADIK select ARM_AMBA select ARM_VIC select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB help
@@ -799,7 +799,7 @@ config ARCH_DAVINCI select ARCH_REQUIRE_GPIOLIB select ZONE_DMA select HAVE_IDE - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_ALLOCATOR select ARCH_HAS_HOLES_MEMORYMODEL help
@@ -819,7 +819,7 @@ config PLAT_SPEAR bool "ST SPEAr" select ARM_AMBA select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select HAVE_CLK help
arch/arm/common/Kconfig +0 -4
@@ -37,7 +37,3 @@ config SHARP_PARAM config SHARP_SCOOP bool - -config COMMON_CLKDEV - bool - select HAVE_CLK
arch/arm/common/Makefile +0 -1
@@ -16,4 +16,3 @@ obj-$(CONFIG_SHARP_SCOOP) += scoop.o obj-$(CONFIG_ARCH_IXP2000) += uengine.o obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o -obj-$(CONFIG_COMMON_CLKDEV) += clkdev.o
arch/arm/include/asm/clkdev.h +7 -17
@@ -1,5 +1,5 @@/* -* arch/arm/include/asm/clkdev.h +* arch/arm/include/linux/clkdev.h * * Copyright (C) 2008 Russell King. *
@@ -12,23 +12,13 @@#ifndef __ASM_CLKDEV_H#define __ASM_CLKDEV_H -struct clk ; -struct device ; +#include <linux/slab.h> -struct clk_lookup { -struct list_head node; -const char *dev_id; -const char *con_id; -struct clk *clk; -}; +#include <mach/clkdev.h> -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...); - -void clkdev_add (struct clk_lookup *cl); -void clkdev_drop (struct clk_lookup *cl); - -void clkdev_add_table (struct clk_lookup *,size_t ); -int clk_add_alias (const char *,const char *,char *,struct device *); +static inline struct clk_lookup_alloc *__clkdev_alloc (size_t size) +{ +return kzalloc (size,GFP_KERNEL ); +}#endif
arch/arm/mach-bcmring/clock.c +1 -2
@@ -21,13 +21,12 @@#include <linux/string.h> #include <linux/clk.h> #include <linux/spinlock.h> +#include <linux/clkdev.h> #include <mach/csp/hw_cfg.h> #include <mach/csp/chipcHw_def.h> #include <mach/csp/chipcHw_reg.h> #include <mach/csp/chipcHw_inline.h> -#include <asm/clkdev.h> -#include "clock.h" #define clk_is_primary (x) ((x)->type & CLK_TYPE_PRIMARY)
arch/arm/mach-bcmring/core.c +1 -1
@@ -30,10 +30,10 @@#include <linux/amba/bus.h> #include <linux/clocksource.h> #include <linux/clockchips.h> +#include <linux/clkdev.h> #include <mach/csp/mm_addr.h> #include <mach/hardware.h> -#include <asm/clkdev.h> #include <linux/io.h> #include <asm/irq.h> #include <asm/hardware/arm_timer.h>
arch/arm/mach-davinci/clock.h +1 -1
@@ -68,7 +68,7 @@ #ifndef __ASSEMBLER__ #include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct pll_data { u32 phys_base;
arch/arm/mach-ep93xx/clock.c +1 -1
@@ -19,10 +19,10 @@#include <linux/string.h> #include <linux/io.h> #include <linux/spinlock.h> +#include <linux/clkdev.h> #include <mach/hardware.h> -#include <asm/clkdev.h> #include <asm/div64.h>
arch/arm/mach-imx/clock-imx1.c +1 -2
@@ -22,8 +22,7 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h>
arch/arm/mach-imx/clock-imx21.c +1 -1
@@ -21,11 +21,11 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> #include <mach/common.h> -#include <asm/clkdev.h> #include <asm/div64.h> #define IO_ADDR_CCM (off) (MX21_IO_ADDRESS(MX21_CCM_BASE_ADDR + (off)))
arch/arm/mach-imx/clock-imx27.c +1 -1
@@ -21,8 +21,8 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/clock.h>
arch/arm/mach-integrator/core.c +1 -2
@@ -21,9 +21,8 @@#include <linux/amba/bus.h> #include <linux/amba/serial.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <asm/irq.h>
arch/arm/mach-integrator/impd1.c +1 -2
@@ -22,9 +22,8 @@#include <linux/amba/clcd.h> #include <linux/io.h> #include <linux/slab.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <asm/hardware/icst.h> #include <mach/lm.h> #include <mach/impd1.h>
arch/arm/mach-integrator/integrator_cp.c +1 -2
@@ -21,9 +21,8 @@#include <linux/amba/mmci.h> #include <linux/io.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <asm/irq.h>
arch/arm/mach-lpc32xx/clock.c +1 -2
@@ -90,10 +90,9 @@#include <linux/clk.h> #include <linux/amba/bus.h> #include <linux/amba/clcd.h> +#include <linux/clkdev.h> #include <mach/hardware.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/platform.h> #include "clock.h" #include "common.h"
arch/arm/mach-mmp/clock.h +1 -1
@@ -6,7 +6,7 @@* published by the Free Software Foundation. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct clkops {void (*enable)(struct clk *);
arch/arm/mach-mx25/clock.c +1 -2
@@ -21,8 +21,7 @@#include <linux/list.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h>
arch/arm/mach-mx3/clock-imx31.c +1 -1
@@ -23,8 +23,8 @@#include <linux/clk.h> #include <linux/err.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/clock.h>
arch/arm/mach-mx3/clock-imx35.c +1 -2
@@ -21,8 +21,7 @@#include <linux/list.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h>
arch/arm/mach-mx5/clock-mx51.c +1 -1
@@ -14,8 +14,8 @@#include <linux/delay.h> #include <linux/clk.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/hardware.h>
arch/arm/mach-mxc91231/clock.c +1 -1
@@ -2,12 +2,12 @@#include <linux/kernel.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> #include <mach/common.h> -#include <asm/clkdev.h> #include <asm/bug.h> #include <asm/div64.h>
arch/arm/mach-nomadik/clock.c +1 -1
@@ -7,7 +7,7 @@#include <linux/module.h> #include <linux/errno.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include "clock.h" /*
arch/arm/mach-nuc93x/clock.h +1 -1
@@ -10,7 +10,7 @@* the Free Software Foundation; either version 2 of the License. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> void nuc93x_clk_enable (struct clk *clk,int enable);void clks_register (struct clk_lookup *clks,size_t num);
arch/arm/mach-omap1/clock.c +1 -1
@@ -17,9 +17,9 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <asm/mach-types.h> -#include <asm/clkdev.h> #include <plat/cpu.h> #include <plat/usb.h>
arch/arm/mach-omap2/dpll3xxx.c +1 -1
@@ -26,10 +26,10 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/bitops.h> +#include <linux/clkdev.h> #include <plat/cpu.h> #include <plat/clock.h> -#include <asm/clkdev.h> #include "clock.h" #include "prm.h"
arch/arm/mach-pnx4008/clock.c +1 -2
@@ -21,8 +21,7 @@#include <linux/err.h> #include <linux/delay.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/hardware.h> #include <mach/clock.h>
arch/arm/mach-pxa/clock.c +1 -1
@@ -11,8 +11,8 @@#include <linux/spinlock.h> #include <linux/platform_device.h> #include <linux/delay.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <mach/pxa2xx-regs.h> #include <mach/hardware.h>
arch/arm/mach-pxa/clock.h +1 -1
@@ -1,4 +1,4 @@ -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct clkops {void (*enable)(struct clk *);
arch/arm/mach-realview/core.c +1 -2
@@ -30,8 +30,8 @@#include <linux/ata_platform.h> #include <linux/amba/mmci.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/system.h> #include <mach/hardware.h> #include <asm/irq.h>
@@ -47,7 +47,6 @@#include <asm/hardware/gic.h> -#include <mach/clkdev.h> #include <mach/platform.h> #include <mach/irqs.h> #include <plat/timer-sp.h>
arch/arm/mach-shmobile/Kconfig +3 -3
@@ -6,7 +6,7 @@ config ARCH_SH7367 bool "SH-Mobile G3 (SH7367)" select CPU_V6 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS
@@ -14,7 +14,7 @@ config ARCH_SH7377 bool "SH-Mobile G4 (SH7377)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS
@@ -22,7 +22,7 @@ config ARCH_SH7372 bool "SH-Mobile AP4 (SH7372)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS
arch/arm/mach-shmobile/clock-sh7367.c +1 -1
@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7367 registers */ #define RTFRQCR 0xe6150000
arch/arm/mach-shmobile/clock-sh7372.c +1 -1
@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7372 registers */ #define FRQCRA 0xe6150000
arch/arm/mach-shmobile/clock-sh7377.c +1 -1
@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7377 registers */ #define RTFRQCR 0xe6150000
arch/arm/mach-tegra/clock.c +1 -1
@@ -24,7 +24,7 @@#include <linux/debugfs.h> #include <linux/slab.h> #include <linux/seq_file.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include "clock.h"
arch/arm/mach-tegra/clock.h +1 -1
@@ -21,7 +21,7 @@#define __MACH_TEGRA_CLOCK_H#include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #define DIV_BUS (1 << 0)#define DIV_U71 (1 << 1)
arch/arm/mach-tegra/tegra2_clocks.c +1 -2
@@ -24,8 +24,7 @@#include <linux/delay.h> #include <linux/io.h> #include <linux/hrtimer.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/iomap.h>
arch/arm/mach-u300/clock.c +1 -1
@@ -25,8 +25,8 @@#include <linux/timer.h> #include <linux/io.h> #include <linux/seq_file.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <mach/hardware.h> #include <mach/syscon.h>
arch/arm/mach-ux500/clock.c +1 -2
@@ -13,8 +13,7 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <plat/mtu.h> #include <mach/hardware.h>
arch/arm/mach-versatile/core.c +1 -2
@@ -31,8 +31,8 @@#include <linux/amba/pl022.h> #include <linux/io.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/system.h> #include <asm/irq.h> #include <asm/leds.h>
@@ -46,7 +46,6 @@#include <asm/mach/irq.h> #include <asm/mach/time.h> #include <asm/mach/map.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <plat/timer-sp.h>
arch/arm/mach-vexpress/ct-ca9x4.c +1 -2
@@ -8,8 +8,8 @@#include <linux/platform_device.h> #include <linux/amba/bus.h> #include <linux/amba/clcd.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/pgtable.h> #include <asm/hardware/arm_timer.h> #include <asm/hardware/cache-l2x0.h>
@@ -18,7 +18,6 @@#include <asm/pmu.h> #include <asm/smp_twd.h> -#include <mach/clkdev.h> #include <mach/ct-ca9x4.h> #include <plat/timer-sp.h>
arch/arm/mach-vexpress/v2m.c +1 -2
@@ -11,15 +11,14 @@#include <linux/spinlock.h> #include <linux/sysdev.h> #include <linux/usb/isp1760.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/sizes.h> #include <asm/mach/flash.h> #include <asm/mach/map.h> #include <asm/mach/time.h> #include <asm/hardware/arm_timer.h> -#include <mach/clkdev.h> #include <mach/motherboard.h> #include <plat/timer-sp.h>
arch/arm/mach-w90x900/clock.h +1 -1
@@ -10,7 +10,7 @@* the Free Software Foundation; either version 2 of the License. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> void nuc900_clk_enable (struct clk *clk,int enable);void nuc900_subclk_enable (struct clk *clk,int enable);
arch/arm/plat-omap/Kconfig +2 -2
@@ -11,13 +11,13 @@ choice config ARCH_OMAP1 bool "TI OMAP1" - select COMMON_CLKDEV + select CLKDEV_LOOKUP help "Systems based on omap7xx, omap15xx or omap16xx" config ARCH_OMAP2PLUS bool "TI OMAP2/3/4" - select COMMON_CLKDEV + select CLKDEV_LOOKUP help "Systems based on omap24xx, omap34xx or omap44xx"
arch/arm/plat-omap/include/plat/clkdev_omap.h +1 -1
@@ -8,7 +8,7 @@ #ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H #define __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct omap_clk { u16 cpu;
arch/arm/plat-spear/include/plat/clock.h +1 -1
@@ -15,7 +15,7 @@#define __PLAT_CLOCK_H#include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <linux/types.h> /* clk structure flags */
arch/arm/plat-stmp3xxx/clock.c +1 -1
@@ -25,9 +25,9 @@#include <linux/err.h> #include <linux/delay.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <asm/mach-types.h> -#include <asm/clkdev.h> #include <mach/platform.h> #include <mach/regs-clkctrl.h>
arch/sh/Kconfig +1 -1
@@ -8,7 +8,7 @@ mainmenu "Linux/SuperH Kernel Configuration" config SUPERH def_bool y select EMBEDDED - select HAVE_CLK + select CLKDEV_LOOKUP select HAVE_IDE if HAS_IOPORT select HAVE_MEMBLOCK select HAVE_OPROFILE
arch/sh/boards/mach-highlander/setup.c +1 -1
@@ -24,10 +24,10 @@#include <linux/interrupt.h> #include <linux/usb/r8a66597.h> #include <linux/usb/m66592.h> +#include <linux/clkdev.h> #include <net/ax88796.h> #include <asm/machvec.h> #include <mach/highlander.h> -#include <asm/clkdev.h> #include <asm/clock.h> #include <asm/heartbeat.h> #include <asm/io.h>
arch/sh/include/asm/clkdev.h +31 -35
66 lines not on this page · raw message
arch/sh/kernel/Makefile +1 -1
@@ -11,7 +11,7 @@ endif CFLAGS_REMOVE_return_address.o = -pg -obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \ +obj-y := debugtraps.o dma-nommu.o dumpstack.o \ idle.o io.o irq.o \ irq_$(BITS).o machvec.o nmi_debug.o process.o \ process_$(BITS).o ptrace_$(BITS).o \
arch/sh/kernel/clkdev.c deleted +0 -169
169 lines not on this page · raw message
arch/sh/kernel/cpu/clock-cpg.c +1 -1
@@ -2,7 +2,7 @@#include <linux/compiler.h> #include <linux/slab.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> static struct clk master_clk = {
arch/sh/kernel/cpu/clock.c +0 -16
@@ -48,20 +48,4 @@ int __init clk_init(void)return ret; } -/* -* Returns a clock. Note that we first try to use device id on the bus -* and clock name. If this fails, we try to use clock name only. -*/ -struct clk *clk_get (struct device *dev,const char *con_id) -{ -const char *dev_id = dev ?dev_name (dev) :NULL ; - -return clk_get_sys (dev_id, con_id); -} -EXPORT_SYMBOL_GPL (clk_get); - -void clk_put (struct clk *clk) -{ -} -EXPORT_SYMBOL_GPL (clk_put);
arch/sh/kernel/cpu/sh4/clock-sh4-202.c +1 -1
@@ -13,7 +13,7 @@#include <linux/kernel.h> #include <linux/err.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
arch/sh/kernel/cpu/sh4a/clock-sh7343.c +1 -1
@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> /* SH7343 registers */
arch/sh/kernel/cpu/sh4a/clock-sh7366.c +1 -1
@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> /* SH7366 registers */
arch/sh/kernel/cpu/sh4a/clock-sh7722.c +1 -1
@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7722.h>
arch/sh/kernel/cpu/sh4a/clock-sh7723.c +1 -1
@@ -22,7 +22,7 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7723.h>
arch/sh/kernel/cpu/sh4a/clock-sh7724.c +1 -1
@@ -22,7 +22,7 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7724.h>
arch/sh/kernel/cpu/sh4a/clock-sh7757.c +1 -1
@@ -12,7 +12,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
arch/sh/kernel/cpu/sh4a/clock-sh7763.c +1 -1
@@ -13,7 +13,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <asm/io.h>
arch/sh/kernel/cpu/sh4a/clock-sh7780.c +1 -1
@@ -12,7 +12,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <asm/io.h>
arch/sh/kernel/cpu/sh4a/clock-sh7785.c +1 -1
@@ -14,7 +14,7 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/cpufreq.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <cpu/sh7785.h>
arch/sh/kernel/cpu/sh4a/clock-sh7786.c +1 -1
@@ -13,7 +13,7 @@#include <linux/kernel.h> #include <linux/clk.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
arch/sh/kernel/cpu/sh4a/clock-shx3.c +1 -1
@@ -14,7 +14,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
drivers/Kconfig +2 -0
@@ -111,4 +111,6 @@ source "drivers/xen/Kconfig" source "drivers/staging/Kconfig" source "drivers/platform/Kconfig" + +source "drivers/clk/Kconfig" endmenu
drivers/Makefile +2 -0
@@ -115,3 +115,5 @@ obj-$(CONFIG_VLYNQ) += vlynq/ obj-$(CONFIG_STAGING) += staging/ obj-y += platform/ obj-y += ieee802154/ +#common clk code +obj-y += clk/
drivers/clk/Kconfig new file +4 -0
@@ -0,0 +1,4 @@ + +config CLKDEV_LOOKUP + bool + select HAVE_CLK
drivers/clk/Makefile new file +2 -0
@@ -0,0 +1,2 @@ + +obj-$(CONFIG_CLKDEV_LOOKUP) += clkdev.o
drivers/clk/clkdev.c renamed from arch/arm/common/clkdev.c +9 -8
@@ -1,5 +1,5 @@/* -* arch/arm/common/clkdev.c +* drivers/clk/clkdev.c * * Copyright (C) 2008 Russell King. *
@@ -18,10 +18,7 @@#include <linux/string.h> #include <linux/mutex.h> #include <linux/clk.h> -#include <linux/slab.h> - -#include <asm/clkdev.h> -#include <mach/clkdev.h> +#include <linux/clkdev.h> static LIST_HEAD (clocks);static DEFINE_MUTEX (clocks_mutex);
@@ -79,6 +76,10 @@ struct clk *clk_get_sys(const char *dev_id, const char *con_id) }EXPORT_SYMBOL (clk_get_sys); +/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;
@@ -120,12 +121,12 @@ struct clk_lookup_alloc {char con_id[MAX_CON_ID ]; }; -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refok +clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...) {struct clk_lookup_alloc *cla; - cla =kzalloc (sizeof (*cla),GFP_KERNEL ); + cla =__clkdev_alloc (sizeof (*cla));if (!cla)return NULL ;
include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +5 -5
@@ -1,7 +1,5 @@/* -* arch/sh/include/asm/clkdev.h -* -* Cloned from arch/arm/include/asm/clkdev.h: +* include/linux/clkdev.h * * Copyright (C) 2008 Russell King. *
@@ -11,8 +9,10 @@* * Helper for the clk API to assist looking up a struct clk. */ -#ifndef __ASM_CLKDEV_H -#define __ASM_CLKDEV_H +#ifndef __CLKDEV_H +#define __CLKDEV_H + +#include <asm/clkdev.h> struct clk ;
Signature · 1 line
1.7.1
RFC PATCH v2 1/1 arm & sh: factorised duplicated clkdev.c
arch/arm/include/asm/clkdev.h line 2
Quoted 8 lines · Jean-Christophe PLAGNIOL-VILLARD
arch/arm/include/asm/clkdev.h +1
-1@@ -1,5 +1,5 @@/* -* arch/arm/include/asm/clkdev.h +* arch/arm/include/linux/clkdev.h
?
arch/arm/include/asm/clkdev.h
Quoted 4 lines
arch/arm/include/asm/clkdev.h +4
-0+/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/
This comment is actually wrong, and conflicts with the commentry against clk_find(), which describes completely how clocks are found. Therefore, this comment should be deleted.
Quoted 19 lines
include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +1
-3@@ -1,7 +1,5 @@/* -* arch/sh/include/asm/clkdev.h -* -* Cloned from arch/arm/include/asm/clkdev.h: +* include/linux/clkdev.h * * Copyright (C) 2008 Russell King. * @@ -11,8 +9,10 @@* * Helper for the clk API to assist looking up a struct clk.
include/linux/clkdev.h line 18
Quoted 10 lines
include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +4
-2*/ -#ifndef __ASM_CLKDEV_H -#define __ASM_CLKDEV_H +#ifndef __CLKDEV_H +#define __CLKDEV_H + +#include <asm/clkdev.h> struct clk ;
This should really be a clone of the ARM version of clkdev.h - the sh version misses the predeclaration of 'struct device' which is required for the function prototypes in this file.
RFC PATCH v2 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Jean-Christophe PLAGNIOL-VILLARDHello Jean,
Quoted 5 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
Quoted 7 lines
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>---
V2:update base on Russel & Uwe Comments
s/Russel/Russell/ BTW.
arch/arm/Kconfig config ARCH_INTEGRATOR · line 227
Quoted 13 lines
arch/arm/Kconfig +1
-1@@ -221,7 +221,7 @@ config ARCH_INTEGRATOR bool "ARM Ltd. Integrator family" select ARM_AMBA select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select PLAT_VERSATILE
did you think about keeping the name COMMON_CLKDEV?
Quoted 196 lines
arch/arm/Kconfig +19
-19@@ -231,7 +231,7 @@ config ARCH_INTEGRATOR config ARCH_REALVIEW bool "ARM Ltd. RealView family" select ARM_AMBA - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB@@ -245,7 +245,7 @@ config ARCH_VERSATILE bool "ARM Ltd. Versatile family" select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB@@ -259,7 +259,7 @@ config ARCH_VEXPRESS select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_TIMER_SP804 - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select HAVE_CLK select ICST@@ -281,7 +281,7 @@ config ARCH_BCMRING depends on MMU select CPU_V6 select ARM_AMBA - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB help@@ -328,7 +328,7 @@ config ARCH_EP93XX select CPU_ARM920T select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_USES_GETTIMEOFFSET@@ -348,14 +348,14 @@ config ARCH_MXC bool "Freescale MXC/iMX-based" select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP help Support for Freescale MXC/iMX-based family of processors config ARCH_STMP3XXX bool "Freescale STMP3xxx" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select USB_ARCH_HAS_EHCI@@ -473,7 +473,7 @@ config ARCH_LPC32XX select HAVE_IDE select ARM_AMBA select USB_ARCH_HAS_OHCI - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_TIME select GENERIC_CLOCKEVENTS help@@ -507,7 +507,7 @@ config ARCH_MMP bool "Marvell PXA168/910/MMP2" depends on MMU select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select TICK_ONESHOT select PLAT_PXA@@ -539,7 +539,7 @@ config ARCH_W90X900 bool "Nuvoton W90X900 CPU" select CPU_ARM926T select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS help Support for Nuvoton (Winbond logic dept.) ARM9 processor,@@ -553,7 +553,7 @@ config ARCH_W90X900 config ARCH_NUC93X bool "Nuvoton NUC93X CPU" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP help Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a low-power and high performance MPEG-4/JPEG multimedia controller chip.@@ -564,7 +564,7 @@ config ARCH_TEGRA select GENERIC_CLOCKEVENTS select GENERIC_GPIO select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_HAS_BARRIERS if CACHE_L2X0 help This enables support for NVIDIA Tegra based systems (Tegra APX,@@ -573,7 +573,7 @@ config ARCH_TEGRA config ARCH_PNX4008 bool "Philips Nexperia PNX4008 Mobile" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_USES_GETTIMEOFFSET help This enables support for Philips PNX4008 mobile platform.@@ -583,7 +583,7 @@ config ARCH_PXA depends on MMU select ARCH_MTD_XIP select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select TICK_ONESHOT@@ -767,7 +767,7 @@ config ARCH_U300 select ARM_AMBA select ARM_VIC select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_GPIO help Support for ST-Ericsson U300 series mobile platforms.@@ -777,7 +777,7 @@ config ARCH_U8500 select CPU_V7 select ARM_AMBA select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB help Support for ST-Ericsson's Ux500 architecture@@ -787,7 +787,7 @@ config ARCH_NOMADIK select ARM_AMBA select ARM_VIC select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB help@@ -799,7 +799,7 @@ config ARCH_DAVINCI select ARCH_REQUIRE_GPIOLIB select ZONE_DMA select HAVE_IDE - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_ALLOCATOR select ARCH_HAS_HOLES_MEMORYMODEL help@@ -819,7 +819,7 @@ config PLAT_SPEAR bool "ST SPEAr" select ARM_AMBA select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select HAVE_CLK helparch/arm/common/Kconfig +0
-4@@ -37,7 +37,3 @@ config SHARP_PARAM config SHARP_SCOOP bool - -config COMMON_CLKDEV - bool - select HAVE_CLKarch/arm/common/Makefile +0
-1@@ -16,4 +16,3 @@ obj-$(CONFIG_SHARP_SCOOP) += scoop.o obj-$(CONFIG_ARCH_IXP2000) += uengine.o obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o -obj-$(CONFIG_COMMON_CLKDEV) += clkdev.oarch/arm/include/asm/clkdev.h +0
-0
arch/arm/include/asm/clkdev.h line 2
Quoted 3 lines
arch/arm/include/asm/clkdev.h +1
-1@@ -1,5 +1,5 @@/* -* arch/arm/include/asm/clkdev.h +* arch/arm/include/linux/clkdev.h
??, arch/arm/include/asm/clkdev.h was correct, no?
Quoted 1,247 lines
arch/arm/include/asm/clkdev.h +6
-16* * Copyright (C) 2008 Russell King. * @@ -12,23 +12,13 @@#ifndef __ASM_CLKDEV_H#define __ASM_CLKDEV_H -struct clk ; -struct device ; +#include <linux/slab.h> -struct clk_lookup { -struct list_head node; -const char *dev_id; -const char *con_id; -struct clk *clk; -}; +#include <mach/clkdev.h> -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...); - -void clkdev_add (struct clk_lookup *cl); -void clkdev_drop (struct clk_lookup *cl); - -void clkdev_add_table (struct clk_lookup *,size_t ); -int clk_add_alias (const char *,const char *,char *,struct device *); +static inline struct clk_lookup_alloc *__clkdev_alloc (size_t size) +{ +return kzalloc (size,GFP_KERNEL ); +}#endif arch/arm/mach-bcmring/clock.c +1
-2@@ -21,13 +21,12 @@#include <linux/string.h> #include <linux/clk.h> #include <linux/spinlock.h> +#include <linux/clkdev.h> #include <mach/csp/hw_cfg.h> #include <mach/csp/chipcHw_def.h> #include <mach/csp/chipcHw_reg.h> #include <mach/csp/chipcHw_inline.h> -#include <asm/clkdev.h> -#include "clock.h" #define clk_is_primary (x) ((x)->type & CLK_TYPE_PRIMARY)arch/arm/mach-bcmring/core.c +1
-1@@ -30,10 +30,10 @@#include <linux/amba/bus.h> #include <linux/clocksource.h> #include <linux/clockchips.h> +#include <linux/clkdev.h> #include <mach/csp/mm_addr.h> #include <mach/hardware.h> -#include <asm/clkdev.h> #include <linux/io.h> #include <asm/irq.h> #include <asm/hardware/arm_timer.h> arch/arm/mach-davinci/clock.h +1
-1@@ -68,7 +68,7 @@ #ifndef __ASSEMBLER__ #include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct pll_data { u32 phys_base;arch/arm/mach-ep93xx/clock.c +1
-1@@ -19,10 +19,10 @@#include <linux/string.h> #include <linux/io.h> #include <linux/spinlock.h> +#include <linux/clkdev.h> #include <mach/hardware.h> -#include <asm/clkdev.h> #include <asm/div64.h> arch/arm/mach-imx/clock-imx1.c +1
-2@@ -22,8 +22,7 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> arch/arm/mach-imx/clock-imx21.c +1
-1@@ -21,11 +21,11 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> #include <mach/common.h> -#include <asm/clkdev.h> #include <asm/div64.h> #define IO_ADDR_CCM (off) (MX21_IO_ADDRESS(MX21_CCM_BASE_ADDR + (off)))arch/arm/mach-imx/clock-imx27.c +1
-1@@ -21,8 +21,8 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/clock.h> arch/arm/mach-integrator/core.c +1
-2@@ -21,9 +21,8 @@#include <linux/amba/bus.h> #include <linux/amba/serial.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <asm/irq.h> arch/arm/mach-integrator/impd1.c +1
-2@@ -22,9 +22,8 @@#include <linux/amba/clcd.h> #include <linux/io.h> #include <linux/slab.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <asm/hardware/icst.h> #include <mach/lm.h> #include <mach/impd1.h> arch/arm/mach-integrator/integrator_cp.c +1
-2@@ -21,9 +21,8 @@#include <linux/amba/mmci.h> #include <linux/io.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <asm/irq.h> arch/arm/mach-lpc32xx/clock.c +1
-2@@ -90,10 +90,9 @@#include <linux/clk.h> #include <linux/amba/bus.h> #include <linux/amba/clcd.h> +#include <linux/clkdev.h> #include <mach/hardware.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/platform.h> #include "clock.h" #include "common.h" arch/arm/mach-mmp/clock.h +1
-1@@ -6,7 +6,7 @@* published by the Free Software Foundation. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct clkops {void (*enable)(struct clk *);arch/arm/mach-mx25/clock.c +1
-2@@ -21,8 +21,7 @@#include <linux/list.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> arch/arm/mach-mx3/clock-imx31.c +1
-1@@ -23,8 +23,8 @@#include <linux/clk.h> #include <linux/err.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/clock.h> arch/arm/mach-mx3/clock-imx35.c +1
-2@@ -21,8 +21,7 @@#include <linux/list.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> arch/arm/mach-mx5/clock-mx51.c +1
-1@@ -14,8 +14,8 @@#include <linux/delay.h> #include <linux/clk.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/hardware.h> arch/arm/mach-mxc91231/clock.c +1
-1@@ -2,12 +2,12 @@#include <linux/kernel.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> #include <mach/common.h> -#include <asm/clkdev.h> #include <asm/bug.h> #include <asm/div64.h> arch/arm/mach-nomadik/clock.c +1
-1@@ -7,7 +7,7 @@#include <linux/module.h> #include <linux/errno.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include "clock.h" /* arch/arm/mach-nuc93x/clock.h +1
-1@@ -10,7 +10,7 @@* the Free Software Foundation; either version 2 of the License. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> void nuc93x_clk_enable (struct clk *clk,int enable);void clks_register (struct clk_lookup *clks,size_t num);arch/arm/mach-omap1/clock.c +1
-1@@ -17,9 +17,9 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <asm/mach-types.h> -#include <asm/clkdev.h> #include <plat/cpu.h> #include <plat/usb.h> arch/arm/mach-omap2/dpll3xxx.c +1
-1@@ -26,10 +26,10 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/bitops.h> +#include <linux/clkdev.h> #include <plat/cpu.h> #include <plat/clock.h> -#include <asm/clkdev.h> #include "clock.h" #include "prm.h" arch/arm/mach-pnx4008/clock.c +1
-2@@ -21,8 +21,7 @@#include <linux/err.h> #include <linux/delay.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/hardware.h> #include <mach/clock.h> arch/arm/mach-pxa/clock.c +1
-1@@ -11,8 +11,8 @@#include <linux/spinlock.h> #include <linux/platform_device.h> #include <linux/delay.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <mach/pxa2xx-regs.h> #include <mach/hardware.h> arch/arm/mach-pxa/clock.h +1
-1@@ -1,4 +1,4 @@ -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct clkops {void (*enable)(struct clk *);arch/arm/mach-realview/core.c +1
-2@@ -30,8 +30,8 @@#include <linux/ata_platform.h> #include <linux/amba/mmci.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/system.h> #include <mach/hardware.h> #include <asm/irq.h> @@ -47,7 +47,6 @@#include <asm/hardware/gic.h> -#include <mach/clkdev.h> #include <mach/platform.h> #include <mach/irqs.h> #include <plat/timer-sp.h> arch/arm/mach-shmobile/Kconfig +3
-3@@ -6,7 +6,7 @@ config ARCH_SH7367 bool "SH-Mobile G3 (SH7367)" select CPU_V6 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS@@ -14,7 +14,7 @@ config ARCH_SH7377 bool "SH-Mobile G4 (SH7377)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS@@ -22,7 +22,7 @@ config ARCH_SH7372 bool "SH-Mobile AP4 (SH7372)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTSarch/arm/mach-shmobile/clock-sh7367.c +1
-1@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7367 registers */ #define RTFRQCR 0xe6150000arch/arm/mach-shmobile/clock-sh7372.c +1
-1@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7372 registers */ #define FRQCRA 0xe6150000arch/arm/mach-shmobile/clock-sh7377.c +1
-1@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7377 registers */ #define RTFRQCR 0xe6150000arch/arm/mach-tegra/clock.c +1
-1@@ -24,7 +24,7 @@#include <linux/debugfs.h> #include <linux/slab.h> #include <linux/seq_file.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include "clock.h" arch/arm/mach-tegra/clock.h +1
-1@@ -21,7 +21,7 @@#define __MACH_TEGRA_CLOCK_H#include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #define DIV_BUS (1 << 0)#define DIV_U71 (1 << 1)arch/arm/mach-tegra/tegra2_clocks.c +1
-2@@ -24,8 +24,7 @@#include <linux/delay.h> #include <linux/io.h> #include <linux/hrtimer.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/iomap.h> arch/arm/mach-u300/clock.c +1
-1@@ -25,8 +25,8 @@#include <linux/timer.h> #include <linux/io.h> #include <linux/seq_file.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <mach/hardware.h> #include <mach/syscon.h> arch/arm/mach-ux500/clock.c +1
-2@@ -13,8 +13,7 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <plat/mtu.h> #include <mach/hardware.h> arch/arm/mach-versatile/core.c +1
-2@@ -31,8 +31,8 @@#include <linux/amba/pl022.h> #include <linux/io.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/system.h> #include <asm/irq.h> #include <asm/leds.h> @@ -46,7 +46,6 @@#include <asm/mach/irq.h> #include <asm/mach/time.h> #include <asm/mach/map.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <plat/timer-sp.h> arch/arm/mach-vexpress/ct-ca9x4.c +1
-2@@ -8,8 +8,8 @@#include <linux/platform_device.h> #include <linux/amba/bus.h> #include <linux/amba/clcd.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/pgtable.h> #include <asm/hardware/arm_timer.h> #include <asm/hardware/cache-l2x0.h> @@ -18,7 +18,6 @@#include <asm/pmu.h> #include <asm/smp_twd.h> -#include <mach/clkdev.h> #include <mach/ct-ca9x4.h> #include <plat/timer-sp.h> arch/arm/mach-vexpress/v2m.c +1
-2@@ -11,15 +11,14 @@#include <linux/spinlock.h> #include <linux/sysdev.h> #include <linux/usb/isp1760.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/sizes.h> #include <asm/mach/flash.h> #include <asm/mach/map.h> #include <asm/mach/time.h> #include <asm/hardware/arm_timer.h> -#include <mach/clkdev.h> #include <mach/motherboard.h> #include <plat/timer-sp.h> arch/arm/mach-w90x900/clock.h +1
-1@@ -10,7 +10,7 @@* the Free Software Foundation; either version 2 of the License. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> void nuc900_clk_enable (struct clk *clk,int enable);void nuc900_subclk_enable (struct clk *clk,int enable);arch/arm/plat-omap/Kconfig +2
-2@@ -11,13 +11,13 @@ choice config ARCH_OMAP1 bool "TI OMAP1" - select COMMON_CLKDEV + select CLKDEV_LOOKUP help "Systems based on omap7xx, omap15xx or omap16xx" config ARCH_OMAP2PLUS bool "TI OMAP2/3/4" - select COMMON_CLKDEV + select CLKDEV_LOOKUP help "Systems based on omap24xx, omap34xx or omap44xx"arch/arm/plat-omap/include/plat/clkdev_omap.h +1
-1@@ -8,7 +8,7 @@ #ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H #define __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct omap_clk { u16 cpu;arch/arm/plat-spear/include/plat/clock.h +1
-1@@ -15,7 +15,7 @@#define __PLAT_CLOCK_H#include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <linux/types.h> /* clk structure flags */ arch/arm/plat-stmp3xxx/clock.c +1
-1@@ -25,9 +25,9 @@#include <linux/err.h> #include <linux/delay.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <asm/mach-types.h> -#include <asm/clkdev.h> #include <mach/platform.h> #include <mach/regs-clkctrl.h> arch/sh/Kconfig +1
-1@@ -8,7 +8,7 @@ mainmenu "Linux/SuperH Kernel Configuration" config SUPERH def_bool y select EMBEDDED - select HAVE_CLK + select CLKDEV_LOOKUP select HAVE_IDE if HAS_IOPORT select HAVE_MEMBLOCK select HAVE_OPROFILEarch/sh/boards/mach-highlander/setup.c +1
-1@@ -24,10 +24,10 @@#include <linux/interrupt.h> #include <linux/usb/r8a66597.h> #include <linux/usb/m66592.h> +#include <linux/clkdev.h> #include <net/ax88796.h> #include <asm/machvec.h> #include <mach/highlander.h> -#include <asm/clkdev.h> #include <asm/clock.h> #include <asm/heartbeat.h> #include <asm/io.h> arch/sh/include/asm/clkdev.h +31
-35@@ -1,35 +1,31 @@ -/* -* arch/sh/include/asm/clkdev.h -* -* Cloned from arch/arm/include/asm/clkdev.h: -* -* Copyright (C) 2008 Russell King. -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 2 as -* published by the Free Software Foundation. -* -* Helper for the clk API to assist looking up a struct clk. -*/ -#ifndef __ASM_CLKDEV_H -#define __ASM_CLKDEV_H - -struct clk ; - -struct clk_lookup { -struct list_head node; -const char *dev_id; -const char *con_id; -struct clk *clk; -}; - -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...); - -void clkdev_add (struct clk_lookup *cl); -void clkdev_drop (struct clk_lookup *cl); - -void clkdev_add_table (struct clk_lookup *,size_t ); -int clk_add_alias (const char *,const char *,char *,struct device *); - -#endif +/* +* Copyright (C) 2010 Paul Mundt <[email protected]> +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. +* +* Helper for the clk API to assist looking up a struct clk. +*/ + +#ifndef __CLKDEV__H_ +#define __CLKDEV__H_ + +#include <linux/bootmem.h> +#include <linux/mm.h> +#include <linux/slab.h> + +#include <asm/clock.h> + +static inline struct clk_lookup_alloc *__clkdev_alloc (size_t size) +{ +if (!slab_is_available ()) +return alloc_bootmem_low_pages (size); +else +return kzalloc (size,GFP_KERNEL ); +} + +#define __clk_put (clk) +#define __clk_get (clk) ({ 1; }) + +#endif /* __CLKDEV_H__ */ arch/sh/kernel/Makefile +1
-1@@ -11,7 +11,7 @@ endif CFLAGS_REMOVE_return_address.o = -pg -obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \ +obj-y := debugtraps.o dma-nommu.o dumpstack.o \ idle.o io.o irq.o \ irq_$(BITS).o machvec.o nmi_debug.o process.o \ process_$(BITS).o ptrace_$(BITS).o \arch/sh/kernel/clkdev.c deleted +0
-169@@ -1,169 +0,0 @@ -/* -* arch/sh/kernel/clkdev.c -* -* Cloned from arch/arm/common/clkdev.c: -* -* Copyright (C) 2008 Russell King. -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License version 2 as -* published by the Free Software Foundation. -* -* Helper for the clk API to assist looking up a struct clk. -*/ -#include <linux/module.h> -#include <linux/kernel.h> -#include <linux/device.h> -#include <linux/list.h> -#include <linux/errno.h> -#include <linux/err.h> -#include <linux/string.h> -#include <linux/mutex.h> -#include <linux/clk.h> -#include <linux/slab.h> -#include <linux/bootmem.h> -#include <linux/mm.h> -#include <asm/clock.h> -#include <asm/clkdev.h> - -static LIST_HEAD (clocks); -static DEFINE_MUTEX (clocks_mutex); - -/* -* Find the correct struct clk for the device and connection ID. -* We do slightly fuzzy matching here: -* An entry with a NULL ID is assumed to be a wildcard. -* If an entry has a device ID, it must match -* If an entry has a connection ID, it must match -* Then we take the most specific entry - with the following -* order of precedence: dev+con > dev only > con only. -*/ -static struct clk *clk_find (const char *dev_id,const char *con_id) -{ -struct clk_lookup *p; -struct clk *clk =NULL ; -int match, best =0 ; - -list_for_each_entry (p, &clocks, node) { - match =0 ; -if (p->dev_id) { -if (!dev_id ||strcmp (p->dev_id, dev_id)) -continue ; - match +=2 ; - } -if (p->con_id) { -if (!con_id ||strcmp (p->con_id, con_id)) -continue ; - match +=1 ; - } -if (match ==0 ) -continue ; - -if (match > best) { - clk = p->clk; - best = match; - } - } -return clk; -} - -struct clk *clk_get_sys (const char *dev_id,const char *con_id) -{ -struct clk *clk; - -mutex_lock (&clocks_mutex); - clk =clk_find (dev_id, con_id); -mutex_unlock (&clocks_mutex); - -return clk ? clk :ERR_PTR (-ENOENT ); -} -EXPORT_SYMBOL (clk_get_sys); - -void clkdev_add (struct clk_lookup *cl) -{ -mutex_lock (&clocks_mutex); -list_add_tail (&cl->node, &clocks); -mutex_unlock (&clocks_mutex); -} -EXPORT_SYMBOL (clkdev_add); - -void __init clkdev_add_table (struct clk_lookup *cl,size_t num) -{ -mutex_lock (&clocks_mutex); -while (num--) { -list_add_tail (&cl->node, &clocks); - cl++; - } -mutex_unlock (&clocks_mutex); -} - -#define MAX_DEV_ID 20 -#define MAX_CON_ID 16 - -struct clk_lookup_alloc { -struct clk_lookup cl; -char dev_id[MAX_DEV_ID ]; -char con_id[MAX_CON_ID ]; -}; - -struct clk_lookup * __init_refok -clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...) -{ -struct clk_lookup_alloc *cla; - -if (!slab_is_available ()) - cla =alloc_bootmem_low_pages (sizeof (*cla)); -else - cla =kzalloc (sizeof (*cla),GFP_KERNEL ); - -if (!cla) -return NULL ; - - cla->cl.clk = clk; -if (con_id) { -strlcpy (cla->con_id, con_id,sizeof (cla->con_id)); - cla->cl.con_id = cla->con_id; - } - -if (dev_fmt) { -va_list ap; - -va_start (ap, dev_fmt); -vscnprintf (cla->dev_id,sizeof (cla->dev_id), dev_fmt, ap); - cla->cl.dev_id = cla->dev_id; -va_end (ap); - } - -return &cla->cl; -} -EXPORT_SYMBOL (clkdev_alloc); - -int clk_add_alias (const char *alias,const char *alias_dev_name,char *id, -struct device *dev) -{ -struct clk *r =clk_get (dev, id); -struct clk_lookup *l; - -if (IS_ERR (r)) -return PTR_ERR (r); - - l =clkdev_alloc (r, alias, alias_dev_name); -clk_put (r); -if (!l) -return -ENODEV ; -clkdev_add (l); -return 0 ; -} -EXPORT_SYMBOL (clk_add_alias); - -/* -* clkdev_drop - remove a clock dynamically allocated -*/ -void clkdev_drop (struct clk_lookup *cl) -{ -mutex_lock (&clocks_mutex); -list_del (&cl->node); -mutex_unlock (&clocks_mutex); -kfree (cl); -} -EXPORT_SYMBOL (clkdev_drop);arch/sh/kernel/cpu/clock-cpg.c +1
-1@@ -2,7 +2,7 @@#include <linux/compiler.h> #include <linux/slab.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> static struct clk master_clk = {arch/sh/kernel/cpu/clock.c +0
-16@@ -48,20 +48,4 @@ int __init clk_init(void)return ret; } -/* -* Returns a clock. Note that we first try to use device id on the bus -* and clock name. If this fails, we try to use clock name only. -*/ -struct clk *clk_get (struct device *dev,const char *con_id) -{ -const char *dev_id = dev ?dev_name (dev) :NULL ; - -return clk_get_sys (dev_id, con_id); -} -EXPORT_SYMBOL_GPL (clk_get); - -void clk_put (struct clk *clk) -{ -} -EXPORT_SYMBOL_GPL (clk_put);arch/sh/kernel/cpu/sh4/clock-sh4-202.c +1
-1@@ -13,7 +13,7 @@#include <linux/kernel.h> #include <linux/err.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> arch/sh/kernel/cpu/sh4a/clock-sh7343.c +1
-1@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> /* SH7343 registers */ arch/sh/kernel/cpu/sh4a/clock-sh7366.c +1
-1@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> /* SH7366 registers */ arch/sh/kernel/cpu/sh4a/clock-sh7722.c +1
-1@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7722.h> arch/sh/kernel/cpu/sh4a/clock-sh7723.c +1
-1@@ -22,7 +22,7 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7723.h> arch/sh/kernel/cpu/sh4a/clock-sh7724.c +1
-1@@ -22,7 +22,7 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7724.h> arch/sh/kernel/cpu/sh4a/clock-sh7757.c +1
-1@@ -12,7 +12,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> arch/sh/kernel/cpu/sh4a/clock-sh7763.c +1
-1@@ -13,7 +13,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <asm/io.h> arch/sh/kernel/cpu/sh4a/clock-sh7780.c +1
-1@@ -12,7 +12,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <asm/io.h> arch/sh/kernel/cpu/sh4a/clock-sh7785.c +1
-1@@ -14,7 +14,7 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/cpufreq.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <cpu/sh7785.h> arch/sh/kernel/cpu/sh4a/clock-sh7786.c +1
-1@@ -13,7 +13,7 @@#include <linux/kernel.h> #include <linux/clk.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> arch/sh/kernel/cpu/sh4a/clock-shx3.c +1
-1@@ -14,7 +14,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> drivers/Kconfig +2
-0@@ -111,4 +111,6 @@ source "drivers/xen/Kconfig" source "drivers/staging/Kconfig" source "drivers/platform/Kconfig" + +source "drivers/clk/Kconfig" endmenudrivers/Makefile +2
-0@@ -115,3 +115,5 @@ obj-$(CONFIG_VLYNQ) += vlynq/ obj-$(CONFIG_STAGING) += staging/ obj-y += platform/ obj-y += ieee802154/ +#common clk code +obj-y += clk/drivers/clk/Kconfig new file +4
-0@@ -0,0 +1,4 @@ + +config CLKDEV_LOOKUP + bool + select HAVE_CLKdrivers/clk/Makefile new file +2
-0@@ -0,0 +1,2 @@ + +obj-$(CONFIG_CLKDEV_LOOKUP) += clkdev.odrivers/clk/clkdev.c renamed from arch/arm/common/clkdev.c +6
-5@@ -1,5 +1,5 @@/* -* arch/arm/common/clkdev.c +* drivers/clk/clkdev.c * * Copyright (C) 2008 Russell King. * @@ -18,10 +18,7 @@#include <linux/string.h> #include <linux/mutex.h> #include <linux/clk.h> -#include <linux/slab.h> - -#include <asm/clkdev.h> -#include <mach/clkdev.h> +#include <linux/clkdev.h> static LIST_HEAD (clocks);static DEFINE_MUTEX (clocks_mutex);@@ -79,6 +76,10 @@ struct clk *clk_get_sys(const char *dev_id, const char *con_id) }EXPORT_SYMBOL (clk_get_sys); +/* +* Returns a clock. Note that we first try to use device id on the bus +* and clock name. If this fails, we try to use clock name only. +*/ struct clk *clk_get (struct device *dev,const char *con_id) {const char *dev_id = dev ?dev_name (dev) :NULL ;
drivers/clk/clkdev.c struct clk_lookup_alloc { · line 125
Quoted 7 lines
drivers/clk/clkdev.c renamed from arch/arm/common/clkdev.c +2
-2@@ -120,12 +121,12 @@ struct clk_lookup_alloc {char con_id[MAX_CON_ID ]; }; -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refok +clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...)
I'm not very satisfied by Russell's answer. But even if I accept that it should not move to .init.text, why .ref.text? If I'm not mistaken clkdev_alloc references the following non-local symbols:
__clkdev_alloc
strlcpy
vscnprintf
non of these are in .init, so I think it's not needed.
Russell, would at least __module_or_init be OK?
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
RFC PATCH v2 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 7 lines · Uwe Kleine-K?nig
I'm not very satisfied by Russell's answer. But even if I accept that it should not move to .init.text, why .ref.text? If I'm not mistaken
clkdev_allocreferences the following non-local symbols:
__clkdev_alloc
strlcpy
vscnprintf
__clkdev_alloc() is an inline function, so effectively it's part of this function. On sh, this calls the boot time allocator which is marked as __init if the normal memory allocators aren't online yet.
Quoted 1 line
Russell, would at least
__module_or_initbe OK?
It's a conceptual thing - we want to allow people to create aliases at run time. Making it an __init thing will only encourage people to do silly things to work around the "it can only be used at init time" problem rather than taking the obvious step of removing the __init tag.
Make it easy for people to do the right thing.
RFC PATCH v2 1/1 arm & sh: factorised duplicated clkdev.c
Hi Russell,
Quoted 5 lines · Russell King - ARM Linux
Quoted 4 lines · Uwe Kleine-K?nig
I'm not very satisfied by Russell's answer. But even if I accept that it should not move to .init.text, why .ref.text? If I'm not mistaken
clkdev_allocreferences the following non-local symbols:
Quoted 7 lines
Quoted 3 lines
__clkdev_alloc
strlcpy
vscnprintf
__clkdev_alloc()is an inline function, so effectively it's part of this function. On sh, this calls the boot time allocator which is marked as__initif the normal memory allocators aren't online yet.
ah, OK, so I suggest to do
#ifdef CONFIG_SH __ref #endif
Just kidding :-)
Quoted 6 lines
Quoted 1 line
Russell, would at least
__module_or_initbe OK?It's a conceptual thing - we want to allow people to create aliases at run time. Making it an
__initthing will only encourage people to do silly things to work around the "it can only be used at init time" problem rather than taking the obvious step of removing the__inittag.
OK, thanks for your explanation.
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
PATCH v3 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Jean-Christophe PLAGNIOL-VILLARDfactorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
put the arch specific code for allocation as example in asm/clkdev.h
---
v3:
wrong comment removed
headers fixed
Best Regards,
J.
arch/arm/Kconfig | 40 +++---
arch/arm/common/Kconfig | 4 -
arch/arm/common/Makefile | 1 -
arch/arm/include/asm/clkdev.h | 22 +--
arch/arm/mach-bcmring/clock.c | 3 +-
arch/arm/mach-bcmring/core.c | 2 +-
arch/arm/mach-davinci/clock.h | 2 +-
arch/arm/mach-ep93xx/clock.c | 2 +-
arch/arm/mach-imx/clock-imx1.c | 3 +-
arch/arm/mach-imx/clock-imx21.c | 2 +-
arch/arm/mach-imx/clock-imx27.c | 2 +-
arch/arm/mach-integrator/core.c | 3 +-
arch/arm/mach-integrator/impd1.c | 3 +-
arch/arm/mach-integrator/integrator_cp.c | 3 +-
arch/arm/mach-lpc32xx/clock.c | 3 +-
arch/arm/mach-mmp/clock.h | 2 +-
arch/arm/mach-mx25/clock.c | 3 +-
arch/arm/mach-mx3/clock-imx31.c | 2 +-
arch/arm/mach-mx3/clock-imx35.c | 3 +-
arch/arm/mach-mx5/clock-mx51.c | 2 +-
arch/arm/mach-mxc91231/clock.c | 2 +-
arch/arm/mach-nomadik/clock.c | 2 +-
arch/arm/mach-nuc93x/clock.h | 2 +-
arch/arm/mach-omap1/clock.c | 2 +-
arch/arm/mach-omap2/dpll3xxx.c | 2 +-
arch/arm/mach-pnx4008/clock.c | 3 +-
arch/arm/mach-pxa/clock.c | 2 +-
arch/arm/mach-pxa/clock.h | 2 +-
arch/arm/mach-realview/core.c | 3 +-
arch/arm/mach-shmobile/Kconfig | 6 +-
arch/arm/mach-shmobile/clock-sh7367.c | 2 +-
arch/arm/mach-shmobile/clock-sh7372.c | 2 +-
arch/arm/mach-shmobile/clock-sh7377.c | 2 +-
arch/arm/mach-tegra/clock.c | 2 +-
arch/arm/mach-tegra/clock.h | 2 +-
arch/arm/mach-tegra/tegra2_clocks.c | 3 +-
arch/arm/mach-u300/clock.c | 2 +-
arch/arm/mach-ux500/clock.c | 3 +-
arch/arm/mach-versatile/core.c | 3 +-
arch/arm/mach-vexpress/ct-ca9x4.c | 3 +-
arch/arm/mach-vexpress/v2m.c | 3 +-
arch/arm/mach-w90x900/clock.h | 2 +-
arch/arm/plat-omap/Kconfig | 4 +-
arch/arm/plat-omap/include/plat/clkdev_omap.h | 2 +-
arch/arm/plat-spear/include/plat/clock.h | 2 +-
arch/arm/plat-stmp3xxx/clock.c | 2 +-
arch/sh/Kconfig | 2 +-
arch/sh/boards/mach-highlander/setup.c | 2 +-
arch/sh/include/asm/clkdev.h | 66 ++++-----
arch/sh/kernel/Makefile | 2 +-
arch/sh/kernel/clkdev.c | 169 -----------------------
arch/sh/kernel/cpu/clock-cpg.c | 2 +-
arch/sh/kernel/cpu/clock.c | 16 --
arch/sh/kernel/cpu/sh4/clock-sh4-202.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7343.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7366.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7722.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7723.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7724.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7757.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7763.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7780.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7785.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-sh7786.c | 2 +-
arch/sh/kernel/cpu/sh4a/clock-shx3.c | 2 +-
drivers/Kconfig | 2 +
drivers/Makefile | 2 +
drivers/clk/Kconfig | 4 +
drivers/clk/Makefile | 2 +
{arch/arm/common => drivers/clk}/clkdev.c | 13 +-
{arch/sh/include/asm => include/linux}/clkdev.h | 11 +-
71 files changed, 139 insertions(+), 350 deletions(-)
rewrite arch/sh/include/asm/clkdev.h (69%)
delete mode 100644 arch/sh/kernel/clkdev.c
create mode 100644 drivers/clk/Kconfig
create mode 100644 drivers/clk/Makefile
rename {arch/arm/common => drivers/clk}/clkdev.c (93%)
rename {arch/sh/include/asm => include/linux}/clkdev.h (85%)arch/arm/Kconfig +20 -20
@@ -221,7 +221,7 @@ config ARCH_INTEGRATOR bool "ARM Ltd. Integrator family" select ARM_AMBA select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select PLAT_VERSATILE
@@ -231,7 +231,7 @@ config ARCH_INTEGRATOR config ARCH_REALVIEW bool "ARM Ltd. RealView family" select ARM_AMBA - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB
@@ -245,7 +245,7 @@ config ARCH_VERSATILE bool "ARM Ltd. Versatile family" select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ICST select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB
@@ -259,7 +259,7 @@ config ARCH_VEXPRESS select ARCH_WANT_OPTIONAL_GPIOLIB select ARM_AMBA select ARM_TIMER_SP804 - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select HAVE_CLK select ICST
@@ -281,7 +281,7 @@ config ARCH_BCMRING depends on MMU select CPU_V6 select ARM_AMBA - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select ARCH_WANT_OPTIONAL_GPIOLIB help
@@ -328,7 +328,7 @@ config ARCH_EP93XX select CPU_ARM920T select ARM_AMBA select ARM_VIC - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select ARCH_HAS_HOLES_MEMORYMODEL select ARCH_USES_GETTIMEOFFSET
@@ -348,14 +348,14 @@ config ARCH_MXC bool "Freescale MXC/iMX-based" select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP help Support for Freescale MXC/iMX-based family of processors config ARCH_STMP3XXX bool "Freescale STMP3xxx" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select USB_ARCH_HAS_EHCI
@@ -473,7 +473,7 @@ config ARCH_LPC32XX select HAVE_IDE select ARM_AMBA select USB_ARCH_HAS_OHCI - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_TIME select GENERIC_CLOCKEVENTS help
@@ -507,7 +507,7 @@ config ARCH_MMP bool "Marvell PXA168/910/MMP2" depends on MMU select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select TICK_ONESHOT select PLAT_PXA
@@ -539,7 +539,7 @@ config ARCH_W90X900 bool "Nuvoton W90X900 CPU" select CPU_ARM926T select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS help Support for Nuvoton (Winbond logic dept.) ARM9 processor,
@@ -553,7 +553,7 @@ config ARCH_W90X900 config ARCH_NUC93X bool "Nuvoton NUC93X CPU" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP help Support for Nuvoton (Winbond logic dept.) NUC93X MCU,The NUC93X is a low-power and high performance MPEG-4/JPEG multimedia controller chip.
@@ -564,7 +564,7 @@ config ARCH_TEGRA select GENERIC_CLOCKEVENTS select GENERIC_GPIO select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_HAS_BARRIERS if CACHE_L2X0 help This enables support for NVIDIA Tegra based systems (Tegra APX,
@@ -573,7 +573,7 @@ config ARCH_TEGRA config ARCH_PNX4008 bool "Philips Nexperia PNX4008 Mobile" select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_USES_GETTIMEOFFSET help This enables support for Philips PNX4008 mobile platform.
@@ -583,7 +583,7 @@ config ARCH_PXA depends on MMU select ARCH_MTD_XIP select ARCH_HAS_CPUFREQ - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB select GENERIC_CLOCKEVENTS select TICK_ONESHOT
@@ -767,7 +767,7 @@ config ARCH_U300 select ARM_AMBA select ARM_VIC select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_GPIO help Support for ST-Ericsson U300 series mobile platforms.
@@ -777,7 +777,7 @@ config ARCH_U8500 select CPU_V7 select ARM_AMBA select GENERIC_CLOCKEVENTS - select COMMON_CLKDEV + select CLKDEV_LOOKUP select ARCH_REQUIRE_GPIOLIB help Support for ST-Ericsson's Ux500 architecture
@@ -787,7 +787,7 @@ config ARCH_NOMADIK select ARM_AMBA select ARM_VIC select CPU_ARM926T - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select ARCH_REQUIRE_GPIOLIB help
@@ -799,7 +799,7 @@ config ARCH_DAVINCI select ARCH_REQUIRE_GPIOLIB select ZONE_DMA select HAVE_IDE - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_ALLOCATOR select ARCH_HAS_HOLES_MEMORYMODEL help
@@ -819,7 +819,7 @@ config PLAT_SPEAR bool "ST SPEAr" select ARM_AMBA select ARCH_REQUIRE_GPIOLIB - select COMMON_CLKDEV + select CLKDEV_LOOKUP select GENERIC_CLOCKEVENTS select HAVE_CLK help
arch/arm/common/Kconfig +0 -4
@@ -37,7 +37,3 @@ config SHARP_PARAM config SHARP_SCOOP bool - -config COMMON_CLKDEV - bool - select HAVE_CLK
arch/arm/common/Makefile +0 -1
@@ -16,4 +16,3 @@ obj-$(CONFIG_SHARP_SCOOP) += scoop.o obj-$(CONFIG_ARCH_IXP2000) += uengine.o obj-$(CONFIG_ARCH_IXP23XX) += uengine.o obj-$(CONFIG_PCI_HOST_ITE8152) += it8152.o -obj-$(CONFIG_COMMON_CLKDEV) += clkdev.o
arch/arm/include/asm/clkdev.h +6 -16
@@ -12,23 +12,13 @@#ifndef __ASM_CLKDEV_H#define __ASM_CLKDEV_H -struct clk ; -struct device ; +#include <linux/slab.h> -struct clk_lookup { -struct list_head node; -const char *dev_id; -const char *con_id; -struct clk *clk; -}; +#include <mach/clkdev.h> -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...); - -void clkdev_add (struct clk_lookup *cl); -void clkdev_drop (struct clk_lookup *cl); - -void clkdev_add_table (struct clk_lookup *,size_t ); -int clk_add_alias (const char *,const char *,char *,struct device *); +static inline struct clk_lookup_alloc *__clkdev_alloc (size_t size) +{ +return kzalloc (size,GFP_KERNEL ); +}#endif
arch/arm/mach-bcmring/clock.c +1 -2
@@ -21,13 +21,12 @@#include <linux/string.h> #include <linux/clk.h> #include <linux/spinlock.h> +#include <linux/clkdev.h> #include <mach/csp/hw_cfg.h> #include <mach/csp/chipcHw_def.h> #include <mach/csp/chipcHw_reg.h> #include <mach/csp/chipcHw_inline.h> -#include <asm/clkdev.h> -#include "clock.h" #define clk_is_primary (x) ((x)->type & CLK_TYPE_PRIMARY)
arch/arm/mach-bcmring/core.c +1 -1
@@ -30,10 +30,10 @@#include <linux/amba/bus.h> #include <linux/clocksource.h> #include <linux/clockchips.h> +#include <linux/clkdev.h> #include <mach/csp/mm_addr.h> #include <mach/hardware.h> -#include <asm/clkdev.h> #include <linux/io.h> #include <asm/irq.h> #include <asm/hardware/arm_timer.h>
arch/arm/mach-davinci/clock.h +1 -1
@@ -68,7 +68,7 @@ #ifndef __ASSEMBLER__ #include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct pll_data { u32 phys_base;
arch/arm/mach-ep93xx/clock.c +1 -1
@@ -19,10 +19,10 @@#include <linux/string.h> #include <linux/io.h> #include <linux/spinlock.h> +#include <linux/clkdev.h> #include <mach/hardware.h> -#include <asm/clkdev.h> #include <asm/div64.h>
arch/arm/mach-imx/clock-imx1.c +1 -2
@@ -22,8 +22,7 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h>
arch/arm/mach-imx/clock-imx21.c +1 -1
@@ -21,11 +21,11 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> #include <mach/common.h> -#include <asm/clkdev.h> #include <asm/div64.h> #define IO_ADDR_CCM (off) (MX21_IO_ADDRESS(MX21_CCM_BASE_ADDR + (off)))
arch/arm/mach-imx/clock-imx27.c +1 -1
@@ -21,8 +21,8 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/module.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/clock.h>
arch/arm/mach-integrator/core.c +1 -2
@@ -21,9 +21,8 @@#include <linux/amba/bus.h> #include <linux/amba/serial.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <asm/irq.h>
arch/arm/mach-integrator/impd1.c +1 -2
@@ -22,9 +22,8 @@#include <linux/amba/clcd.h> #include <linux/io.h> #include <linux/slab.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <asm/hardware/icst.h> #include <mach/lm.h> #include <mach/impd1.h>
arch/arm/mach-integrator/integrator_cp.c +1 -2
@@ -21,9 +21,8 @@#include <linux/amba/mmci.h> #include <linux/io.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <asm/irq.h>
arch/arm/mach-lpc32xx/clock.c +1 -2
@@ -90,10 +90,9 @@#include <linux/clk.h> #include <linux/amba/bus.h> #include <linux/amba/clcd.h> +#include <linux/clkdev.h> #include <mach/hardware.h> -#include <asm/clkdev.h> -#include <mach/clkdev.h> #include <mach/platform.h> #include "clock.h" #include "common.h"
arch/arm/mach-mmp/clock.h +1 -1
@@ -6,7 +6,7 @@* published by the Free Software Foundation. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct clkops {void (*enable)(struct clk *);
arch/arm/mach-mx25/clock.c +1 -2
@@ -21,8 +21,7 @@#include <linux/list.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h>
arch/arm/mach-mx3/clock-imx31.c +1 -1
@@ -23,8 +23,8 @@#include <linux/clk.h> #include <linux/err.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/clock.h>
arch/arm/mach-mx3/clock-imx35.c +1 -2
@@ -21,8 +21,7 @@#include <linux/list.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h>
arch/arm/mach-mx5/clock-mx51.c +1 -1
@@ -14,8 +14,8 @@#include <linux/delay.h> #include <linux/clk.h> #include <linux/io.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/div64.h> #include <mach/hardware.h>
arch/arm/mach-mxc91231/clock.c +1 -1
@@ -2,12 +2,12 @@#include <linux/kernel.h> #include <linux/init.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <mach/clock.h> #include <mach/hardware.h> #include <mach/common.h> -#include <asm/clkdev.h> #include <asm/bug.h> #include <asm/div64.h>
arch/arm/mach-nomadik/clock.c +1 -1
@@ -7,7 +7,7 @@#include <linux/module.h> #include <linux/errno.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include "clock.h" /*
arch/arm/mach-nuc93x/clock.h +1 -1
@@ -10,7 +10,7 @@* the Free Software Foundation; either version 2 of the License. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> void nuc93x_clk_enable (struct clk *clk,int enable);void clks_register (struct clk_lookup *clks,size_t num);
arch/arm/mach-omap1/clock.c +1 -1
@@ -17,9 +17,9 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <asm/mach-types.h> -#include <asm/clkdev.h> #include <plat/cpu.h> #include <plat/usb.h>
arch/arm/mach-omap2/dpll3xxx.c +1 -1
@@ -26,10 +26,10 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/bitops.h> +#include <linux/clkdev.h> #include <plat/cpu.h> #include <plat/clock.h> -#include <asm/clkdev.h> #include "clock.h" #include "prm.h"
arch/arm/mach-pnx4008/clock.c +1 -2
@@ -21,8 +21,7 @@#include <linux/err.h> #include <linux/delay.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/hardware.h> #include <mach/clock.h>
arch/arm/mach-pxa/clock.c +1 -1
@@ -11,8 +11,8 @@#include <linux/spinlock.h> #include <linux/platform_device.h> #include <linux/delay.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <mach/pxa2xx-regs.h> #include <mach/hardware.h>
arch/arm/mach-pxa/clock.h +1 -1
@@ -1,4 +1,4 @@ -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct clkops {void (*enable)(struct clk *);
arch/arm/mach-realview/core.c +1 -2
@@ -30,8 +30,8 @@#include <linux/ata_platform.h> #include <linux/amba/mmci.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/system.h> #include <mach/hardware.h> #include <asm/irq.h>
@@ -47,7 +47,6 @@#include <asm/hardware/gic.h> -#include <mach/clkdev.h> #include <mach/platform.h> #include <mach/irqs.h> #include <plat/timer-sp.h>
arch/arm/mach-shmobile/Kconfig +3 -3
@@ -6,7 +6,7 @@ config ARCH_SH7367 bool "SH-Mobile G3 (SH7367)" select CPU_V6 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS
@@ -14,7 +14,7 @@ config ARCH_SH7377 bool "SH-Mobile G4 (SH7377)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS
@@ -22,7 +22,7 @@ config ARCH_SH7372 bool "SH-Mobile AP4 (SH7372)" select CPU_V7 select HAVE_CLK - select COMMON_CLKDEV + select CLKDEV_LOOKUP select SH_CLK_CPG select GENERIC_CLOCKEVENTS
arch/arm/mach-shmobile/clock-sh7367.c +1 -1
@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7367 registers */ #define RTFRQCR 0xe6150000
arch/arm/mach-shmobile/clock-sh7372.c +1 -1
@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7372 registers */ #define FRQCRA 0xe6150000
arch/arm/mach-shmobile/clock-sh7377.c +1 -1
@@ -20,8 +20,8 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/sh_clk.h> +#include <linux/clkdev.h> #include <mach/common.h> -#include <asm/clkdev.h> /* SH7377 registers */ #define RTFRQCR 0xe6150000
arch/arm/mach-tegra/clock.c +1 -1
@@ -24,7 +24,7 @@#include <linux/debugfs.h> #include <linux/slab.h> #include <linux/seq_file.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include "clock.h"
arch/arm/mach-tegra/clock.h +1 -1
@@ -21,7 +21,7 @@#define __MACH_TEGRA_CLOCK_H#include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #define DIV_BUS (1 << 0)#define DIV_U71 (1 << 1)
arch/arm/mach-tegra/tegra2_clocks.c +1 -2
@@ -24,8 +24,7 @@#include <linux/delay.h> #include <linux/io.h> #include <linux/hrtimer.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <mach/iomap.h>
arch/arm/mach-u300/clock.c +1 -1
@@ -25,8 +25,8 @@#include <linux/timer.h> #include <linux/io.h> #include <linux/seq_file.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <mach/hardware.h> #include <mach/syscon.h>
arch/arm/mach-ux500/clock.c +1 -2
@@ -13,8 +13,7 @@#include <linux/err.h> #include <linux/clk.h> #include <linux/io.h> - -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <plat/mtu.h> #include <mach/hardware.h>
arch/arm/mach-versatile/core.c +1 -2
@@ -31,8 +31,8 @@#include <linux/amba/pl022.h> #include <linux/io.h> #include <linux/gfp.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/system.h> #include <asm/irq.h> #include <asm/leds.h>
@@ -46,7 +46,6 @@#include <asm/mach/irq.h> #include <asm/mach/time.h> #include <asm/mach/map.h> -#include <mach/clkdev.h> #include <mach/hardware.h> #include <mach/platform.h> #include <plat/timer-sp.h>
arch/arm/mach-vexpress/ct-ca9x4.c +1 -2
@@ -8,8 +8,8 @@#include <linux/platform_device.h> #include <linux/amba/bus.h> #include <linux/amba/clcd.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/pgtable.h> #include <asm/hardware/arm_timer.h> #include <asm/hardware/cache-l2x0.h>
@@ -18,7 +18,6 @@#include <asm/pmu.h> #include <asm/smp_twd.h> -#include <mach/clkdev.h> #include <mach/ct-ca9x4.h> #include <plat/timer-sp.h>
arch/arm/mach-vexpress/v2m.c +1 -2
@@ -11,15 +11,14 @@#include <linux/spinlock.h> #include <linux/sysdev.h> #include <linux/usb/isp1760.h> +#include <linux/clkdev.h> -#include <asm/clkdev.h> #include <asm/sizes.h> #include <asm/mach/flash.h> #include <asm/mach/map.h> #include <asm/mach/time.h> #include <asm/hardware/arm_timer.h> -#include <mach/clkdev.h> #include <mach/motherboard.h> #include <plat/timer-sp.h>
arch/arm/mach-w90x900/clock.h +1 -1
@@ -10,7 +10,7 @@* the Free Software Foundation; either version 2 of the License. */ -#include <asm/clkdev.h> +#include <linux/clkdev.h> void nuc900_clk_enable (struct clk *clk,int enable);void nuc900_subclk_enable (struct clk *clk,int enable);
arch/arm/plat-omap/Kconfig +2 -2
@@ -11,13 +11,13 @@ choice config ARCH_OMAP1 bool "TI OMAP1" - select COMMON_CLKDEV + select CLKDEV_LOOKUP help "Systems based on omap7xx, omap15xx or omap16xx" config ARCH_OMAP2PLUS bool "TI OMAP2/3/4" - select COMMON_CLKDEV + select CLKDEV_LOOKUP help "Systems based on omap24xx, omap34xx or omap44xx"
arch/arm/plat-omap/include/plat/clkdev_omap.h +1 -1
@@ -8,7 +8,7 @@ #ifndef __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H #define __ARCH_ARM_PLAT_OMAP_INCLUDE_PLAT_CLKDEV_OMAP_H -#include <asm/clkdev.h> +#include <linux/clkdev.h> struct omap_clk { u16 cpu;
arch/arm/plat-spear/include/plat/clock.h +1 -1
@@ -15,7 +15,7 @@#define __PLAT_CLOCK_H#include <linux/list.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <linux/types.h> /* clk structure flags */
arch/arm/plat-stmp3xxx/clock.c +1 -1
@@ -25,9 +25,9 @@#include <linux/err.h> #include <linux/delay.h> #include <linux/io.h> +#include <linux/clkdev.h> #include <asm/mach-types.h> -#include <asm/clkdev.h> #include <mach/platform.h> #include <mach/regs-clkctrl.h>
arch/sh/Kconfig +1 -1
@@ -8,7 +8,7 @@ mainmenu "Linux/SuperH Kernel Configuration" config SUPERH def_bool y select EMBEDDED - select HAVE_CLK + select CLKDEV_LOOKUP select HAVE_IDE if HAS_IOPORT select HAVE_MEMBLOCK select HAVE_OPROFILE
arch/sh/boards/mach-highlander/setup.c +1 -1
@@ -24,10 +24,10 @@#include <linux/interrupt.h> #include <linux/usb/r8a66597.h> #include <linux/usb/m66592.h> +#include <linux/clkdev.h> #include <net/ax88796.h> #include <asm/machvec.h> #include <mach/highlander.h> -#include <asm/clkdev.h> #include <asm/clock.h> #include <asm/heartbeat.h> #include <asm/io.h>
arch/sh/include/asm/clkdev.h +31 -35
66 lines not on this page · raw message
arch/sh/kernel/Makefile +1 -1
@@ -11,7 +11,7 @@ endif CFLAGS_REMOVE_return_address.o = -pg -obj-y := clkdev.o debugtraps.o dma-nommu.o dumpstack.o \ +obj-y := debugtraps.o dma-nommu.o dumpstack.o \ idle.o io.o irq.o \ irq_$(BITS).o machvec.o nmi_debug.o process.o \ process_$(BITS).o ptrace_$(BITS).o \
arch/sh/kernel/clkdev.c deleted +0 -169
169 lines not on this page · raw message
arch/sh/kernel/cpu/clock-cpg.c +1 -1
@@ -2,7 +2,7 @@#include <linux/compiler.h> #include <linux/slab.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> static struct clk master_clk = {
arch/sh/kernel/cpu/clock.c +0 -16
@@ -48,20 +48,4 @@ int __init clk_init(void)return ret; } -/* -* Returns a clock. Note that we first try to use device id on the bus -* and clock name. If this fails, we try to use clock name only. -*/ -struct clk *clk_get (struct device *dev,const char *con_id) -{ -const char *dev_id = dev ?dev_name (dev) :NULL ; - -return clk_get_sys (dev_id, con_id); -} -EXPORT_SYMBOL_GPL (clk_get); - -void clk_put (struct clk *clk) -{ -} -EXPORT_SYMBOL_GPL (clk_put);
arch/sh/kernel/cpu/sh4/clock-sh4-202.c +1 -1
@@ -13,7 +13,7 @@#include <linux/kernel.h> #include <linux/err.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
arch/sh/kernel/cpu/sh4a/clock-sh7343.c +1 -1
@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> /* SH7343 registers */
arch/sh/kernel/cpu/sh4a/clock-sh7366.c +1 -1
@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> /* SH7366 registers */
arch/sh/kernel/cpu/sh4a/clock-sh7722.c +1 -1
@@ -21,7 +21,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7722.h>
arch/sh/kernel/cpu/sh4a/clock-sh7723.c +1 -1
@@ -22,7 +22,7 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7723.h>
arch/sh/kernel/cpu/sh4a/clock-sh7724.c +1 -1
@@ -22,7 +22,7 @@#include <linux/kernel.h> #include <linux/io.h> #include <linux/clk.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/hwblk.h> #include <cpu/sh7724.h>
arch/sh/kernel/cpu/sh4a/clock-sh7757.c +1 -1
@@ -12,7 +12,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
arch/sh/kernel/cpu/sh4a/clock-sh7763.c +1 -1
@@ -13,7 +13,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <asm/io.h>
arch/sh/kernel/cpu/sh4a/clock-sh7780.c +1 -1
@@ -12,7 +12,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <asm/io.h>
arch/sh/kernel/cpu/sh4a/clock-sh7785.c +1 -1
@@ -14,7 +14,7 @@#include <linux/clk.h> #include <linux/io.h> #include <linux/cpufreq.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h> #include <cpu/sh7785.h>
arch/sh/kernel/cpu/sh4a/clock-sh7786.c +1 -1
@@ -13,7 +13,7 @@#include <linux/kernel.h> #include <linux/clk.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
arch/sh/kernel/cpu/sh4a/clock-shx3.c +1 -1
@@ -14,7 +14,7 @@#include <linux/init.h> #include <linux/kernel.h> #include <linux/io.h> -#include <asm/clkdev.h> +#include <linux/clkdev.h> #include <asm/clock.h> #include <asm/freq.h>
drivers/Kconfig +2 -0
@@ -111,4 +111,6 @@ source "drivers/xen/Kconfig" source "drivers/staging/Kconfig" source "drivers/platform/Kconfig" + +source "drivers/clk/Kconfig" endmenu
drivers/Makefile +2 -0
@@ -115,3 +115,5 @@ obj-$(CONFIG_VLYNQ) += vlynq/ obj-$(CONFIG_STAGING) += staging/ obj-y += platform/ obj-y += ieee802154/ +#common clk code +obj-y += clk/
drivers/clk/Kconfig new file +4 -0
@@ -0,0 +1,4 @@ + +config CLKDEV_LOOKUP + bool + select HAVE_CLK
drivers/clk/Makefile new file +2 -0
@@ -0,0 +1,2 @@ + +obj-$(CONFIG_CLKDEV_LOOKUP) += clkdev.o
drivers/clk/clkdev.c renamed from arch/arm/common/clkdev.c +5 -8
@@ -1,5 +1,5 @@/* -* arch/arm/common/clkdev.c +* drivers/clk/clkdev.c * * Copyright (C) 2008 Russell King. *
@@ -18,10 +18,7 @@#include <linux/string.h> #include <linux/mutex.h> #include <linux/clk.h> -#include <linux/slab.h> - -#include <asm/clkdev.h> -#include <mach/clkdev.h> +#include <linux/clkdev.h> static LIST_HEAD (clocks);static DEFINE_MUTEX (clocks_mutex);
@@ -120,12 +117,12 @@ struct clk_lookup_alloc {char con_id[MAX_CON_ID ]; }; -struct clk_lookup *clkdev_alloc (struct clk *clk,const char *con_id, -const char *dev_fmt, ...) +struct clk_lookup * __init_refok +clkdev_alloc (struct clk *clk,const char *con_id,const char *dev_fmt, ...) {struct clk_lookup_alloc *cla; - cla =kzalloc (sizeof (*cla),GFP_KERNEL ); + cla =__clkdev_alloc (sizeof (*cla));if (!cla)return NULL ;
include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +6 -5
@@ -1,7 +1,5 @@/* -* arch/sh/include/asm/clkdev.h -* -* Cloned from arch/arm/include/asm/clkdev.h: +* include/linux/clkdev.h * * Copyright (C) 2008 Russell King. *
@@ -11,10 +9,13 @@* * Helper for the clk API to assist looking up a struct clk. */ -#ifndef __ASM_CLKDEV_H -#define __ASM_CLKDEV_H +#ifndef __CLKDEV_H +#define __CLKDEV_H + +#include <asm/clkdev.h> struct clk; +struct device; struct clk_lookup { struct list_head node;
Signature · 1 line
1.7.1
Magnus Damm
maintainerPATCH v3 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 5 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
Quoted 7 lines
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>---
v3:
? ? ? ?wrong comment removed
? ? ? ?headers fixed
[snip]
I can't apply this patch using GNU patch. I've tested 2.5.9 and 2.6.1 from Gentoo.
Using --dry-run is fine, but omitting dry-run gives me:
...
patching file arch/arm/common/clkdev.c
patching file arch/sh/include/asm/clkdev.h
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 11.
2 out of 2 hunks FAILED -- saving rejects to filearch/sh/include/asm/clkdev.h.rej
I guess this is caused by the last "renaming" hunk, see below.
I thought these things were supposed to work out of the box...
/ magnus
Quoted 34 lines
include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +0
-0@@ -1,7 +1,5 @@?/*
- * ?arch/sh/include/asm/clkdev.h
- *
- * Cloned fromarch/arm/include/asm/clkdev.h:
+ * ?include/linux/clkdev.h
?*
?* ?Copyright (C) 2008 Russell King.
?*include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +0
-0@@ -11,10 +9,13 @@?*
?* Helper for the clk API to assist looking up a struct clk. ?*/include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +4
-2-#ifndef __ASM_CLKDEV_H -#define __ASM_CLKDEV_H +#ifndef __CLKDEV_H +#define __CLKDEV_H + +#include <asm/clkdev.h> ?struct clk;
+struct device;?struct
clk_lookup{
? ? ? ?structlist_head? ? ? ?node;
--
1.7.1
PATCH v3 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 30 lines · Magnus Damm
Quoted 5 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
Quoted 7 lines
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>---
v3:
? ? ? ?wrong comment removed
? ? ? ?headers fixed[snip]
I can't apply this patch using GNU patch. I've tested 2.5.9 and 2.6.1 from Gentoo.
Using --dry-run is fine, but omitting dry-run gives me:
...
patching filearch/arm/common/clkdev.c
patching filearch/sh/include/asm/clkdev.h
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 11.
2 out of 2 hunks FAILED -- saving rejects to filearch/sh/include/asm/clkdev.h.rej
Quoted 3 lines
I guess this is caused by the last "renaming" hunk, see below.
I thought these things were supposed to work out of the box...
I generate it as usual with git (1.7.1)
with the following options git format-patch -M -B -C
and I agree it's supposed to work out of the box
Best Regards,
J.
Hello,
[added git ML to Cc:]
Quoted 30 lines · Magnus Damm
Quoted 5 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
Quoted 7 lines
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>---
v3:
? ? ? ?wrong comment removed
? ? ? ?headers fixed[snip]
I can't apply this patch using GNU patch. I've tested 2.5.9 and 2.6.1 from Gentoo.
Using --dry-run is fine, but omitting dry-run gives me:
...
patching filearch/arm/common/clkdev.c
patching filearch/sh/include/asm/clkdev.h
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 11.
2 out of 2 hunks FAILED -- saving rejects to filearch/sh/include/asm/clkdev.h.rej
Quoted 3 lines
I guess this is caused by the last "renaming" hunk, see below.
I thought these things were supposed to work out of the box...
Yes, they work out of the box, but only for people using git :-)
Maybe git-apply can be used instead of patch?
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
[BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
(+cc: bug-patch)
Hi,
Quoted 12 lines · Uwe Kleine-K?nig
Quoted 10 lines · Magnus Damm
Using --dry-run is fine, but omitting dry-run gives me:
...
patching filearch/arm/common/clkdev.c
patching filearch/sh/include/asm/clkdev.h
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 11.
2 out of 2 hunks FAILED -- saving rejects to filearch/sh/include/asm/clkdev.h.rej
Quoted 1 line
Quoted 1 line
I guess this is caused by the last "renaming" hunk, see below.
Yep, I can reproduce this. Patch applies with "git apply", "patch --dry-run -p1" accepts it, "patch -p1" fails.
$ patch --version | head -1 GNU patch 2.6.1.85-423d $ cd ~/src/linux-2.6 $ git checkout 2bfc96a12 $ git clean -fd $ wget http://download.gmane.org/gmane.linux.ports.sh.devel/8747/8748 $ patch -p1 --quiet --dry-run <8748 $ echo $? 0 $ patch -p1 --quiet <8748 2 out of 2 hunks FAILED -- saving rejects to file include/linux/clkdev.h.rej $ echo $? 1
Andreas: ideas?
Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 17 lines · Jonathan Nieder
(+cc: bug-patch)
Hi,
Quoted 12 lines · Uwe Kleine-K?nig
Quoted 10 lines · Magnus Damm
Using --dry-run is fine, but omitting dry-run gives me:
...
patching filearch/arm/common/clkdev.c
patching filearch/sh/include/asm/clkdev.h
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 11.
2 out of 2 hunks FAILED -- saving rejects to filearch/sh/include/asm/clkdev.h.rej
Quoted 4 lines
Quoted 1 line
Quoted 1 line
I guess this is caused by the last "renaming" hunk, see below.
Yep, I can reproduce this. Patch applies with "git apply", "patch --dry-run -p1" accepts it, "patch -p1" fails.
git patches include additional metadata for renaming files, which gnu patch will not understand.
If you want GNU patch compatible diffs, don't use -C or -M when generating patches out of git.
Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Hey Russell,
Quoted 16 lines · Russell King - ARM Linux
Quoted 15 lines · Jonathan Nieder
Quoted 13 lines · Uwe Kleine-K?nig
Quoted 11 lines · Magnus Damm
Using --dry-run is fine, but omitting dry-run gives me:
...
patching filearch/arm/common/clkdev.c
patching filearch/sh/include/asm/clkdev.h
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 11.
2 out of 2 hunks FAILED -- saving rejects to filearch/sh/include/asm/clkdev.h.rejI guess this is caused by the last "renaming" hunk, see below.
Quoted 8 lines
Quoted 2 lines
Yep, I can reproduce this. Patch applies with "git apply", "patch --dry-run -p1" accepts it, "patch -p1" fails.
git patches include additional metadata for renaming files, which gnu patch will not understand.
If you want GNU patch compatible diffs, don't use -C or -M when generating patches out of git.
Still GNU patch should then already fail in --dry-run mode.
Best regards
Uwe
Signature · 2 lines
Pengutronix e.K. | Uwe Kleine-K?nig | Industrial Linux Solutions | http://www.pengutronix.de/ |
Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 1 line · Uwe Kleine-K?nig
Still GNU patch should then already fail in --dry-run mode.
Since --dry-run doesn't actually perform any changes it can easily be fooled when a file is patched twice.
Andreas.
Signature · 3 lines
Andreas Schwab, schwab at linux-m68k.org GPG Key fingerprint = 58CA 54C7 6D53 942B 1756 01D3 44D5 214B 8276 4ED5 "And now for something completely different."
Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
In reply to Uwe Kleine-KönigQuoted 6 lines · Uwe Kleine-K?nig
Quoted 5 lines
git patches include additional metadata for renaming files, which gnu patch will not understand.
If you want GNU patch compatible diffs, don't use -C or -M when generating patches out of git.
Still GNU patch should then already fail in --dry-run mode.
And now look at the patch - it touches arch/sh/include/asm/clkdev.h twice. Once to remove it and once as a rename.
GNU patch not in --dry-run mode will first remove arch/sh/include/asm/clkdev.h, and then not have a file to deal with when it tries to patch the rename part. Whereas with --dry-run, the file stays around.
As I say, it's because GNU patch doesn't (currently) understand GIT patches. I wouldn't call that a bug in GNU patch.
Re: [bug-patch] Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 2 lines · On Saturday 04 September 2010 02:03:48 Russell King - ARM Linux wrote:
As I say, it's because GNU patch doesn't (currently) understand GIT patches. I wouldn't call that a bug in GNU patch.
GNU patch in the version used does understand GIT patch headers and does support things like renames.
The --dry-run option often will not work when the same file is modified more than once in the same patch, though. This is because GNU patch doesn't remember the intermediary states of files.
In this case, the patch itself is broken.
Andreas
Re: [bug-patch] Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 4 lines · Andreas Gruenbacher
Quoted 2 lines · On Saturday 04 September 2010 02:03:48 Russell King - ARM Linux wrote:
As I say, it's because GNU patch doesn't (currently) understand GIT patches. I wouldn't call that a bug in GNU patch.
Quoted 8 lines
GNU patch in the version used does understand GIT patch headers and does support things like renames.
The --dry-run option often will not work when the same file is modified more than once in the same patch, though. This is because GNU patch doesn't remember the intermediary states of files.
In this case, the patch itself is broken.
GIT has many options to control how it produces patches, and -C or -M allow it to reduce the size of patches making them more reviewable. It also makes them incompatible with GNU patch, whether or not GNU patch understands the GIT headers.
As I've already said - if you want GNU compatible patches, don't generate GIT patches using -C or -M.
Simples.
Re: [bug-patch] Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 2 lines · On Saturday 04 September 2010 23:45:27 Russell King - ARM Linux wrote:
It also makes them incompatible with GNU patch, whether or not GNU patch understands the GIT headers.
Aha? Then why do you think GNU patch tries to understand the GIt patch headers? So that it can be incompatible with GIT?
Andreas
Re: [bug-patch] Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 6 lines · Andreas Gruenbacher
Quoted 2 lines · On Saturday 04 September 2010 23:45:27 Russell King - ARM Linux wrote:
It also makes them incompatible with GNU patch, whether or not GNU patch understands the GIT headers.
Aha? Then why do you think GNU patch tries to understand the GIt patch headers? So that it can be incompatible with GIT?
Read what you said last time around. "In this case, the patch itself is broken."
So, because GNU patch doesn't understand the patch file, the patch file must be broken? No, the patch file is fine with GIT which can apply it correctly, but incompatible with GNU patch because of the way GNU patch works (as you yourself said, GNU patch doesn't keep the intermediate states.)
I repeat - if you want maximum compatibility, want GNU patch to be able to apply the patch with or without --dry-run, then don't use -C or -M when generating patches with git.
Simples.
Re: [bug-patch] Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 10 lines · On Sunday 05 September 2010 00:01:52 Russell King - ARM Linux wrote:
Quoted 6 lines · Andreas Gruenbacher
Quoted 2 lines · On Saturday 04 September 2010 23:45:27 Russell King - ARM Linux wrote:
It also makes them incompatible with GNU patch, whether or not GNU patch understands the GIT headers.
Aha? Then why do you think GNU patch tries to understand the GIt patch headers? So that it can be incompatible with GIT?
Read what you said last time around. "In this case, the patch itself is broken."
I was corrected on that by Jonathan Nieder's mail which describes a detail of the GIT patch format that I didn't know about. So it's a bug in the way GNU patch handles the git patch format and not an error in the patch. Not nice and probably not easy to fix, but not fundamentally unfixable.
Andreas
Re: [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
In reply to Russell King - ARM LinuxQuoted 5 lines · Russell King - ARM Linux
git patches include additional metadata for renaming files, which gnu patch will not understand.
If you want GNU patch compatible diffs, don't use -C or -M when generating patches out of git.
Fyi: actually, GNU patch will support git-style patches in the next version according to
http://savannah.gnu.org/forum/forum.php?forum_id=6320
Signature · 2 lines
Matthieu Moy http://www-verimag.imag.fr/~moy/
Re: [bug-patch] [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
In reply to Jonathan NiederHi,
Quoted 18 lines · On Friday 03 September 2010 20:43:51 Jonathan Nieder wrote:
Quoted 12 lines · Uwe Kleine-K?nig
Quoted 10 lines · Magnus Damm
Using --dry-run is fine, but omitting dry-run gives me:
...
patching filearch/arm/common/clkdev.c
patching filearch/sh/include/asm/clkdev.h
Hunk #1 FAILED at 1.
Hunk #2 FAILED at 11.
2 out of 2 hunks FAILED -- saving rejects to filearch/sh/include/asm/clkdev.h.rejQuoted 1 line
Quoted 1 line
I guess this is caused by the last "renaming" hunk, see below.
Yep, I can reproduce this. Patch applies with "git apply", "patch --dry-run -p1" accepts it, "patch -p1" fails.
Quoted 7 lines
$ patch --version | head -1 GNU patch 2.6.1.85-423d $ cd ~/src/linux-2.6 $ git checkout 2bfc96a12 $ git clean -fd $ wget http://download.gmane.org/gmane.linux.ports.sh.devel/8747/8748 [...]
something pretty bizarre is going on here. The wget output modifies the same file twice, but both patches to this file have the same source sha1 (5645f35):
include/linux/clkdev.h
Quoted 11 lines
arch/sh/include/asm/clkdev.h +0
-0include/linux/clkdev.h renamed from arch/sh/include/asm/clkdev.h +0
-0
So "git apply" and "patch --dry-run" seem to work only by accident.
How was this patch generated: with git itself?
The fact that "patch --dry-run" may not work for patches that modify the same file twice is a known defect. I don't know how to solve this in a reasonably elegant way. Luckily the problem only triggers when people are doing something "strange" such as concatenating patches.
Andreas
Re: [bug-patch] [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 2 lines · Andreas Gruenbacher
something pretty bizarre is going on here. The wget output modifies the same file twice, but both patches to this file have the same source sha1 (5645f35):
Re: [bug-patch] [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
Quoted 31 lines · On Saturday 04 September 2010 01:32:52 Jonathan Nieder wrote:
Quoted 2 lines · Andreas Gruenbacher
something pretty bizarre is going on here. The wget output modifies the same file twice, but both patches to this file have the same source sha1 (5645f35):
From the git v1.6.0-rc0~92 changelog entry:
apply: fix copy/rename breakage
7ebd52a (Merge branch 'dz/apply-again', 2008-07-01) taught "git-apply" to grok a (non-git) patch that is a concatenation of separate patches that touch the same file number of times, by recording the postimage of patch application of previous round and using it as the preimage for later rounds.
This "incremental" mode of patch application fundamentally contradicts with the way git rename/copy patches are designed. When a git patch talks about a file A getting modified, and a new file B created out of A, like this:
diff --git a/A b/A
--- a/A
+++ b/A
... change text here ...
diff --git a/A b/B
copy from A
copy to B
--- a/A
+++ b/B
... change text here ...
Quoted 7 lines
the second change to produce B does not depend on what is done to A with the first change in any way. This is explicitly done so for reviewability of individual patches.
With this commit, we do not look at '
fn_table' that records the postimage of previous round when applying a patch to produce a new file out of an existing file.
Ouch ... this gets really messy when a user concatenates git style patches and they are not applied to exactly the same source tree.
Thanks for digging out this commit message!
Andreas
Re: [bug-patch] [BUG?] rename patch accepted with --dry-run, rejected without (Re: [PATCH V3] arm & sh: factorised duplicated clkdev.c)
In reply to Andreas GruenbacherQuoted 4 lines
So "git apply" and "patch --dry-run" seem to work only by accident.
How was this patch generated: with git itself?
I did as usual
git format-patch -M -B -C HEAD~
Quoted 5 lines
The fact that "patch --dry-run" may not work for patches that modify the same file twice is a known defect. I don't know how to solve this in a reasonably elegant way. Luckily the problem only triggers when people are doing something "strange" such as concatenating patches.
Best Regards,
J.
PATCH v3 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Jean-Christophe PLAGNIOL-VILLARDQuoted 8 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>
is it ok?
Best Regards,
J.
PATCH v3 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 11 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 8 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>is it ok?
It's fine with me, but this will want to go via the ARM tree. You'll probably want to submit this to the ARM patch tracker, and you can add my Acked-by for the SH and SH-Mobile bits.
PATCH v3 1/1 arm & sh: factorised duplicated clkdev.c
Quoted 7 lines · Paul Mundt
Quoted 6 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 5 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
Quoted 8 lines
Quoted 5 lines
Quoted 3 lines
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>is it ok?
It's fine with me, but this will want to go via the ARM tree. You'll probably want to submit this to the ARM patch tracker, and you can add my Acked-by for the SH and SH-Mobile bits.
Add in patch tracket as 6390/1
Best Regards,
J.
PATCH v3 1/1 arm & sh: factorised duplicated clkdev.c
In reply to Jean-Christophe PLAGNIOL-VILLARDQuoted 10 lines · Jean-Christophe PLAGNIOL-VILLARD
Quoted 8 lines · Jean-Christophe PLAGNIOL-VILLARD
factorise some generic infrastructure to assist looking up struct clks for the ARM & SH architecture.
as the code is identical at 99%
put the arch specific code for allocation as example in
asm/clkdev.hSigned-off-by Jean-Christophe PLAGNIOL-VILLARD <[email protected]>is it ok?
Just applied it and dropped it - it seems to miss deleting the old files. Please resubmit with the old files removed.
BTW, patch system understands git -C and -M patches.