Message ID | 20170201115706.3750-1-alexandre.belloni@free-electrons.com |
---|---|
State | Accepted |
Headers | show |
On Wed, Feb 1, 2017 at 12:57 PM, Alexandre Belloni <alexandre.belloni@free-electrons.com> wrote: > COMPILE_TEST was wrongly placed, move it to the "depends on" line. Also, > select COMMON_CLK has the driver now needs it to be properly compiled. > > Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> > --- > drivers/rtc/Kconfig | 5 +++-- > 1 file changed, 3 insertions(+), 2 deletions(-) > > diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig > index ee287cf63b01..06f3beb8e30f 100644 > --- a/drivers/rtc/Kconfig > +++ b/drivers/rtc/Kconfig > @@ -1435,8 +1435,9 @@ config RTC_DRV_SUN4V > > config RTC_DRV_SUN6I > bool "Allwinner A31 RTC" > - default MACH_SUN6I || MACH_SUN8I || COMPILE_TEST > - depends on ARCH_SUNXI > + default MACH_SUN6I || MACH_SUN8I > + select COMMON_CLK I think this needs to be "depends on COMMON_CLK", otherwise it looks good. Arnd
Hi Alexandre, [auto build test ERROR on abelloni/rtc-next] [also build test ERROR on next-20170201] [cannot apply to v4.10-rc6] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Alexandre-Belloni/rtc-sun6i-extend-test-coverage/20170201-200542 base: https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next config: ia64-allmodconfig (attached as .config) compiler: ia64-linux-gcc (GCC) 6.2.0 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=ia64 All error/warnings (new ones prefixed by >>): >> drivers/clocksource/timer-sun5i.c:52:21: error: field 'clksrc' has incomplete type struct clocksource clksrc; ^~~~~~ >> drivers/clocksource/timer-sun5i.c:60:28: error: field 'clkevt' has incomplete type struct clock_event_device clkevt; ^~~~~~ In file included from include/linux/clk.h:16:0, from drivers/clocksource/timer-sun5i.c:13: drivers/clocksource/timer-sun5i.c: In function 'sun5i_clkevt_shutdown': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ >> drivers/clocksource/timer-sun5i.c:108:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ >> drivers/clocksource/timer-sun5i.c:108:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c: In function 'sun5i_clkevt_set_oneshot': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c:116:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c:116:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c: In function 'sun5i_clkevt_set_periodic': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c:125:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c:125:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c: In function 'sun5i_clkevt_next_event': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c:136:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/timer-sun5i.c:64:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clkevt, clkevt) ^~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c:136:34: note: in expansion of macro 'to_sun5i_timer_clkevt' struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c: In function 'sun5i_clksrc_read': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/timer-sun5i.c:56:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clksrc, clksrc) ^~~~~~~~~~~~ >> drivers/clocksource/timer-sun5i.c:157:34: note: in expansion of macro 'to_sun5i_timer_clksrc' struct sun5i_timer_clksrc *cs = to_sun5i_timer_clksrc(clksrc); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'cs') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/timer-sun5i.c:56:2: note: in expansion of macro 'container_of' container_of(x, struct sun5i_timer_clksrc, clksrc) ^~~~~~~~~~~~ >> drivers/clocksource/timer-sun5i.c:157:34: note: in expansion of macro 'to_sun5i_timer_clksrc' struct sun5i_timer_clksrc *cs = to_sun5i_timer_clksrc(clksrc); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c: In function 'sun5i_rate_cb_clksrc': >> drivers/clocksource/timer-sun5i.c:171:3: error: implicit declaration of function 'clocksource_unregister' [-Werror=implicit-function-declaration] clocksource_unregister(&cs->clksrc); ^~~~~~~~~~~~~~~~~~~~~~ >> drivers/clocksource/timer-sun5i.c:175:3: error: implicit declaration of function 'clocksource_register_hz' [-Werror=implicit-function-declaration] clocksource_register_hz(&cs->clksrc, ndata->new_rate); ^~~~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c: In function 'sun5i_setup_clocksource': >> drivers/clocksource/timer-sun5i.c:223:20: error: implicit declaration of function 'CLOCKSOURCE_MASK' [-Werror=implicit-function-declaration] cs->clksrc.mask = CLOCKSOURCE_MASK(32); ^~~~~~~~~~~~~~~~ >> drivers/clocksource/timer-sun5i.c:224:21: error: 'CLOCK_SOURCE_IS_CONTINUOUS' undeclared (first use in this function) cs->clksrc.flags = CLOCK_SOURCE_IS_CONTINUOUS; ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c:224:21: note: each undeclared identifier is reported only once for each function it appears in drivers/clocksource/timer-sun5i.c: In function 'sun5i_rate_cb_clkevt': >> drivers/clocksource/timer-sun5i.c:251:3: error: implicit declaration of function 'clockevents_update_freq' [-Werror=implicit-function-declaration] clockevents_update_freq(&ce->clkevt, ndata->new_rate); ^~~~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/timer-sun5i.c: In function 'sun5i_setup_clockevent': >> drivers/clocksource/timer-sun5i.c:291:24: error: 'CLOCK_EVT_FEAT_PERIODIC' undeclared (first use in this function) ce->clkevt.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; ^~~~~~~~~~~~~~~~~~~~~~~ -- >> drivers/clocksource/cadence_ttc_timer.c:92:21: error: field 'cs' has incomplete type struct clocksource cs; ^~ >> drivers/clocksource/cadence_ttc_timer.c:100:28: error: field 'ce' has incomplete type struct clock_event_device ce; ^~ In file included from include/linux/clk.h:16:0, from drivers/clocksource/cadence_ttc_timer.c:18: drivers/clocksource/cadence_ttc_timer.c: In function '__ttc_clocksource_read': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/cadence_ttc_timer.c:96:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clocksource, cs) ^~~~~~~~~~~~ >> drivers/clocksource/cadence_ttc_timer.c:163:29: note: in expansion of macro 'to_ttc_timer_clksrc' struct ttc_timer *timer = &to_ttc_timer_clksrc(cs)->ttc; ^~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'timer') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ >> drivers/clocksource/cadence_ttc_timer.c:96:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clocksource, cs) ^~~~~~~~~~~~ >> drivers/clocksource/cadence_ttc_timer.c:163:29: note: in expansion of macro 'to_ttc_timer_clksrc' struct ttc_timer *timer = &to_ttc_timer_clksrc(cs)->ttc; ^~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: In function 'ttc_set_next_event': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ >> drivers/clocksource/cadence_ttc_timer.c:185:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ttce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ >> drivers/clocksource/cadence_ttc_timer.c:185:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: In function 'ttc_shutdown': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:199:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ttce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:199:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: In function 'ttc_set_periodic': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:211:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ttce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:211:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: In function 'ttc_resume': include/linux/kernel.h:850:48: error: initialization from incompatible pointer type [-Werror=incompatible-pointer-types] const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:221:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ include/linux/kernel.h:850:48: note: (near initialization for 'ttce') const typeof( ((type *)0)->member ) *__mptr = (ptr); \ ^ drivers/clocksource/cadence_ttc_timer.c:104:3: note: in expansion of macro 'container_of' container_of(x, struct ttc_timer_clockevent, ce) ^~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:221:38: note: in expansion of macro 'to_ttc_timer_clkevent' struct ttc_timer_clockevent *ttce = to_ttc_timer_clkevent(evt); ^~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: In function 'ttc_setup_clocksource': >> drivers/clocksource/cadence_ttc_timer.c:358:19: error: implicit declaration of function 'CLOCKSOURCE_MASK' [-Werror=implicit-function-declaration] ttccs->cs.mask = CLOCKSOURCE_MASK(timer_width); ^~~~~~~~~~~~~~~~ >> drivers/clocksource/cadence_ttc_timer.c:359:20: error: 'CLOCK_SOURCE_IS_CONTINUOUS' undeclared (first use in this function) ttccs->cs.flags = CLOCK_SOURCE_IS_CONTINUOUS; ^~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:359:20: note: each undeclared identifier is reported only once for each function it appears in >> drivers/clocksource/cadence_ttc_timer.c:372:8: error: implicit declaration of function 'clocksource_register_hz' [-Werror=implicit-function-declaration] err = clocksource_register_hz(&ttccs->cs, ttccs->ttc.freq / PRESCALE); ^~~~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: In function 'ttc_rate_change_clockevent_cb': >> drivers/clocksource/cadence_ttc_timer.c:398:3: error: implicit declaration of function 'clockevents_update_freq' [-Werror=implicit-function-declaration] clockevents_update_freq(&ttcce->ce, ndata->new_rate / PRESCALE); ^~~~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: In function 'ttc_setup_clockevent': >> drivers/clocksource/cadence_ttc_timer.c:441:23: error: 'CLOCK_EVT_FEAT_PERIODIC' undeclared (first use in this function) ttcce->ce.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; ^~~~~~~~~~~~~~~~~~~~~~~ >> drivers/clocksource/cadence_ttc_timer.c:441:49: error: 'CLOCK_EVT_FEAT_ONESHOT' undeclared (first use in this function) ttcce->ce.features = CLOCK_EVT_FEAT_PERIODIC | CLOCK_EVT_FEAT_ONESHOT; ^~~~~~~~~~~~~~~~~~~~~~ >> drivers/clocksource/cadence_ttc_timer.c:468:2: error: implicit declaration of function 'clockevents_config_and_register' [-Werror=implicit-function-declaration] clockevents_config_and_register(&ttcce->ce, ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c: At top level: >> drivers/clocksource/cadence_ttc_timer.c:542:29: error: expected ')' before string constant CLOCKSOURCE_OF_DECLARE(ttc, "cdns,ttc", ttc_timer_init); ^~~~~~~~~~ drivers/clocksource/cadence_ttc_timer.c:480:19: warning: 'ttc_timer_init' defined but not used [-Wunused-function] static int __init ttc_timer_init(struct device_node *timer) ^~~~~~~~~~~~~~ cc1: some warnings being treated as errors vim +/clksrc +52 drivers/clocksource/timer-sun5i.c 67905540 Maxime Ripard 2013-11-07 7 * 67905540 Maxime Ripard 2013-11-07 8 * This file is licensed under the terms of the GNU General Public 67905540 Maxime Ripard 2013-11-07 9 * License version 2. This program is licensed "as is" without any 67905540 Maxime Ripard 2013-11-07 10 * warranty of any kind, whether express or implied. 67905540 Maxime Ripard 2013-11-07 11 */ 67905540 Maxime Ripard 2013-11-07 12 67905540 Maxime Ripard 2013-11-07 @13 #include <linux/clk.h> 67905540 Maxime Ripard 2013-11-07 14 #include <linux/clockchips.h> 67905540 Maxime Ripard 2013-11-07 15 #include <linux/delay.h> 67905540 Maxime Ripard 2013-11-07 16 #include <linux/interrupt.h> 67905540 Maxime Ripard 2013-11-07 17 #include <linux/irq.h> 67905540 Maxime Ripard 2013-11-07 18 #include <linux/irqreturn.h> e50a00be Maxime Ripard 2014-04-17 19 #include <linux/reset.h> 4a59058f Maxime Ripard 2015-03-31 20 #include <linux/slab.h> 67905540 Maxime Ripard 2013-11-07 21 #include <linux/of.h> 67905540 Maxime Ripard 2013-11-07 22 #include <linux/of_address.h> 67905540 Maxime Ripard 2013-11-07 23 #include <linux/of_irq.h> 67905540 Maxime Ripard 2013-11-07 24 67905540 Maxime Ripard 2013-11-07 25 #define TIMER_IRQ_EN_REG 0x00 67905540 Maxime Ripard 2013-11-07 26 #define TIMER_IRQ_EN(val) BIT(val) 67905540 Maxime Ripard 2013-11-07 27 #define TIMER_IRQ_ST_REG 0x04 67905540 Maxime Ripard 2013-11-07 28 #define TIMER_CTL_REG(val) (0x20 * (val) + 0x10) 67905540 Maxime Ripard 2013-11-07 29 #define TIMER_CTL_ENABLE BIT(0) 67905540 Maxime Ripard 2013-11-07 30 #define TIMER_CTL_RELOAD BIT(1) 67905540 Maxime Ripard 2013-11-07 31 #define TIMER_CTL_CLK_PRES(val) (((val) & 0x7) << 4) 67905540 Maxime Ripard 2013-11-07 32 #define TIMER_CTL_ONESHOT BIT(7) 67905540 Maxime Ripard 2013-11-07 33 #define TIMER_INTVAL_LO_REG(val) (0x20 * (val) + 0x14) 67905540 Maxime Ripard 2013-11-07 34 #define TIMER_INTVAL_HI_REG(val) (0x20 * (val) + 0x18) 67905540 Maxime Ripard 2013-11-07 35 #define TIMER_CNTVAL_LO_REG(val) (0x20 * (val) + 0x1c) 67905540 Maxime Ripard 2013-11-07 36 #define TIMER_CNTVAL_HI_REG(val) (0x20 * (val) + 0x20) 67905540 Maxime Ripard 2013-11-07 37 67905540 Maxime Ripard 2013-11-07 38 #define TIMER_SYNC_TICKS 3 67905540 Maxime Ripard 2013-11-07 39 4a59058f Maxime Ripard 2015-03-31 40 struct sun5i_timer { 4a59058f Maxime Ripard 2015-03-31 41 void __iomem *base; 4a59058f Maxime Ripard 2015-03-31 42 struct clk *clk; 3071efa4 Maxime Ripard 2015-03-31 43 struct notifier_block clk_rate_cb; 4a59058f Maxime Ripard 2015-03-31 44 u32 ticks_per_jiffy; 4a59058f Maxime Ripard 2015-03-31 45 }; 4a59058f Maxime Ripard 2015-03-31 46 3071efa4 Maxime Ripard 2015-03-31 47 #define to_sun5i_timer(x) \ 3071efa4 Maxime Ripard 2015-03-31 48 container_of(x, struct sun5i_timer, clk_rate_cb) 3071efa4 Maxime Ripard 2015-03-31 49 4a59058f Maxime Ripard 2015-03-31 50 struct sun5i_timer_clksrc { 4a59058f Maxime Ripard 2015-03-31 51 struct sun5i_timer timer; 4a59058f Maxime Ripard 2015-03-31 @52 struct clocksource clksrc; 4a59058f Maxime Ripard 2015-03-31 53 }; 4a59058f Maxime Ripard 2015-03-31 54 4a59058f Maxime Ripard 2015-03-31 55 #define to_sun5i_timer_clksrc(x) \ 4a59058f Maxime Ripard 2015-03-31 @56 container_of(x, struct sun5i_timer_clksrc, clksrc) 4a59058f Maxime Ripard 2015-03-31 57 4a59058f Maxime Ripard 2015-03-31 58 struct sun5i_timer_clkevt { 4a59058f Maxime Ripard 2015-03-31 59 struct sun5i_timer timer; 4a59058f Maxime Ripard 2015-03-31 @60 struct clock_event_device clkevt; 4a59058f Maxime Ripard 2015-03-31 61 }; 4a59058f Maxime Ripard 2015-03-31 62 4a59058f Maxime Ripard 2015-03-31 63 #define to_sun5i_timer_clkevt(x) \ 4a59058f Maxime Ripard 2015-03-31 @64 container_of(x, struct sun5i_timer_clkevt, clkevt) 67905540 Maxime Ripard 2013-11-07 65 67905540 Maxime Ripard 2013-11-07 66 /* 67905540 Maxime Ripard 2013-11-07 67 * When we disable a timer, we need to wait at least for 2 cycles of 67905540 Maxime Ripard 2013-11-07 68 * the timer source clock. We will use for that the clocksource timer 67905540 Maxime Ripard 2013-11-07 69 * that is already setup and runs at the same frequency than the other 67905540 Maxime Ripard 2013-11-07 70 * timers, and we never will be disabled. 67905540 Maxime Ripard 2013-11-07 71 */ 4a59058f Maxime Ripard 2015-03-31 72 static void sun5i_clkevt_sync(struct sun5i_timer_clkevt *ce) 67905540 Maxime Ripard 2013-11-07 73 { 4a59058f Maxime Ripard 2015-03-31 74 u32 old = readl(ce->timer.base + TIMER_CNTVAL_LO_REG(1)); 67905540 Maxime Ripard 2013-11-07 75 4a59058f Maxime Ripard 2015-03-31 76 while ((old - readl(ce->timer.base + TIMER_CNTVAL_LO_REG(1))) < TIMER_SYNC_TICKS) 67905540 Maxime Ripard 2013-11-07 77 cpu_relax(); 67905540 Maxime Ripard 2013-11-07 78 } 67905540 Maxime Ripard 2013-11-07 79 4a59058f Maxime Ripard 2015-03-31 80 static void sun5i_clkevt_time_stop(struct sun5i_timer_clkevt *ce, u8 timer) 67905540 Maxime Ripard 2013-11-07 81 { 4a59058f Maxime Ripard 2015-03-31 82 u32 val = readl(ce->timer.base + TIMER_CTL_REG(timer)); 4a59058f Maxime Ripard 2015-03-31 83 writel(val & ~TIMER_CTL_ENABLE, ce->timer.base + TIMER_CTL_REG(timer)); 67905540 Maxime Ripard 2013-11-07 84 4a59058f Maxime Ripard 2015-03-31 85 sun5i_clkevt_sync(ce); 67905540 Maxime Ripard 2013-11-07 86 } 67905540 Maxime Ripard 2013-11-07 87 4a59058f Maxime Ripard 2015-03-31 88 static void sun5i_clkevt_time_setup(struct sun5i_timer_clkevt *ce, u8 timer, u32 delay) 67905540 Maxime Ripard 2013-11-07 89 { 4a59058f Maxime Ripard 2015-03-31 90 writel(delay, ce->timer.base + TIMER_INTVAL_LO_REG(timer)); 67905540 Maxime Ripard 2013-11-07 91 } 67905540 Maxime Ripard 2013-11-07 92 4a59058f Maxime Ripard 2015-03-31 93 static void sun5i_clkevt_time_start(struct sun5i_timer_clkevt *ce, u8 timer, bool periodic) 67905540 Maxime Ripard 2013-11-07 94 { 4a59058f Maxime Ripard 2015-03-31 95 u32 val = readl(ce->timer.base + TIMER_CTL_REG(timer)); 67905540 Maxime Ripard 2013-11-07 96 67905540 Maxime Ripard 2013-11-07 97 if (periodic) 67905540 Maxime Ripard 2013-11-07 98 val &= ~TIMER_CTL_ONESHOT; 67905540 Maxime Ripard 2013-11-07 99 else 67905540 Maxime Ripard 2013-11-07 100 val |= TIMER_CTL_ONESHOT; 67905540 Maxime Ripard 2013-11-07 101 67905540 Maxime Ripard 2013-11-07 102 writel(val | TIMER_CTL_ENABLE | TIMER_CTL_RELOAD, 4a59058f Maxime Ripard 2015-03-31 103 ce->timer.base + TIMER_CTL_REG(timer)); 67905540 Maxime Ripard 2013-11-07 104 } 67905540 Maxime Ripard 2013-11-07 105 7486f5ad Viresh Kumar 2015-06-18 106 static int sun5i_clkevt_shutdown(struct clock_event_device *clkevt) 67905540 Maxime Ripard 2013-11-07 107 { 4a59058f Maxime Ripard 2015-03-31 @108 struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); 4a59058f Maxime Ripard 2015-03-31 109 4a59058f Maxime Ripard 2015-03-31 110 sun5i_clkevt_time_stop(ce, 0); 7486f5ad Viresh Kumar 2015-06-18 111 return 0; 7486f5ad Viresh Kumar 2015-06-18 112 } 7486f5ad Viresh Kumar 2015-06-18 113 7486f5ad Viresh Kumar 2015-06-18 114 static int sun5i_clkevt_set_oneshot(struct clock_event_device *clkevt) 7486f5ad Viresh Kumar 2015-06-18 115 { 7486f5ad Viresh Kumar 2015-06-18 116 struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); 7486f5ad Viresh Kumar 2015-06-18 117 4a59058f Maxime Ripard 2015-03-31 118 sun5i_clkevt_time_stop(ce, 0); 4a59058f Maxime Ripard 2015-03-31 119 sun5i_clkevt_time_start(ce, 0, false); 7486f5ad Viresh Kumar 2015-06-18 120 return 0; 67905540 Maxime Ripard 2013-11-07 121 } 7486f5ad Viresh Kumar 2015-06-18 122 7486f5ad Viresh Kumar 2015-06-18 123 static int sun5i_clkevt_set_periodic(struct clock_event_device *clkevt) 7486f5ad Viresh Kumar 2015-06-18 124 { 7486f5ad Viresh Kumar 2015-06-18 125 struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); 7486f5ad Viresh Kumar 2015-06-18 126 7486f5ad Viresh Kumar 2015-06-18 127 sun5i_clkevt_time_stop(ce, 0); 7486f5ad Viresh Kumar 2015-06-18 128 sun5i_clkevt_time_setup(ce, 0, ce->timer.ticks_per_jiffy); 7486f5ad Viresh Kumar 2015-06-18 129 sun5i_clkevt_time_start(ce, 0, true); 7486f5ad Viresh Kumar 2015-06-18 130 return 0; 67905540 Maxime Ripard 2013-11-07 131 } 67905540 Maxime Ripard 2013-11-07 132 67905540 Maxime Ripard 2013-11-07 133 static int sun5i_clkevt_next_event(unsigned long evt, 4a59058f Maxime Ripard 2015-03-31 134 struct clock_event_device *clkevt) 67905540 Maxime Ripard 2013-11-07 135 { 4a59058f Maxime Ripard 2015-03-31 136 struct sun5i_timer_clkevt *ce = to_sun5i_timer_clkevt(clkevt); 4a59058f Maxime Ripard 2015-03-31 137 4a59058f Maxime Ripard 2015-03-31 138 sun5i_clkevt_time_stop(ce, 0); 4a59058f Maxime Ripard 2015-03-31 139 sun5i_clkevt_time_setup(ce, 0, evt - TIMER_SYNC_TICKS); 4a59058f Maxime Ripard 2015-03-31 140 sun5i_clkevt_time_start(ce, 0, false); 67905540 Maxime Ripard 2013-11-07 141 67905540 Maxime Ripard 2013-11-07 142 return 0; 67905540 Maxime Ripard 2013-11-07 143 } 67905540 Maxime Ripard 2013-11-07 144 67905540 Maxime Ripard 2013-11-07 145 static irqreturn_t sun5i_timer_interrupt(int irq, void *dev_id) 67905540 Maxime Ripard 2013-11-07 146 { 4a59058f Maxime Ripard 2015-03-31 147 struct sun5i_timer_clkevt *ce = (struct sun5i_timer_clkevt *)dev_id; 67905540 Maxime Ripard 2013-11-07 148 4a59058f Maxime Ripard 2015-03-31 149 writel(0x1, ce->timer.base + TIMER_IRQ_ST_REG); 4a59058f Maxime Ripard 2015-03-31 150 ce->clkevt.event_handler(&ce->clkevt); 67905540 Maxime Ripard 2013-11-07 151 67905540 Maxime Ripard 2013-11-07 152 return IRQ_HANDLED; 67905540 Maxime Ripard 2013-11-07 153 } 67905540 Maxime Ripard 2013-11-07 154 a5a1d1c2 Thomas Gleixner 2016-12-21 155 static u64 sun5i_clksrc_read(struct clocksource *clksrc) 59387683 Chen-Yu Tsai 2016-10-18 156 { 59387683 Chen-Yu Tsai 2016-10-18 @157 struct sun5i_timer_clksrc *cs = to_sun5i_timer_clksrc(clksrc); 59387683 Chen-Yu Tsai 2016-10-18 158 59387683 Chen-Yu Tsai 2016-10-18 159 return ~readl(cs->timer.base + TIMER_CNTVAL_LO_REG(1)); 59387683 Chen-Yu Tsai 2016-10-18 160 } 59387683 Chen-Yu Tsai 2016-10-18 161 3071efa4 Maxime Ripard 2015-03-31 162 static int sun5i_rate_cb_clksrc(struct notifier_block *nb, 3071efa4 Maxime Ripard 2015-03-31 163 unsigned long event, void *data) 3071efa4 Maxime Ripard 2015-03-31 164 { 3071efa4 Maxime Ripard 2015-03-31 165 struct clk_notifier_data *ndata = data; 3071efa4 Maxime Ripard 2015-03-31 166 struct sun5i_timer *timer = to_sun5i_timer(nb); 3071efa4 Maxime Ripard 2015-03-31 167 struct sun5i_timer_clksrc *cs = container_of(timer, struct sun5i_timer_clksrc, timer); 3071efa4 Maxime Ripard 2015-03-31 168 3071efa4 Maxime Ripard 2015-03-31 169 switch (event) { 3071efa4 Maxime Ripard 2015-03-31 170 case PRE_RATE_CHANGE: 3071efa4 Maxime Ripard 2015-03-31 @171 clocksource_unregister(&cs->clksrc); 3071efa4 Maxime Ripard 2015-03-31 172 break; 3071efa4 Maxime Ripard 2015-03-31 173 3071efa4 Maxime Ripard 2015-03-31 174 case POST_RATE_CHANGE: 3071efa4 Maxime Ripard 2015-03-31 @175 clocksource_register_hz(&cs->clksrc, ndata->new_rate); 3071efa4 Maxime Ripard 2015-03-31 176 break; 3071efa4 Maxime Ripard 2015-03-31 177 3071efa4 Maxime Ripard 2015-03-31 178 default: 3071efa4 Maxime Ripard 2015-03-31 179 break; 3071efa4 Maxime Ripard 2015-03-31 180 } 3071efa4 Maxime Ripard 2015-03-31 181 3071efa4 Maxime Ripard 2015-03-31 182 return NOTIFY_DONE; 3071efa4 Maxime Ripard 2015-03-31 183 } 3071efa4 Maxime Ripard 2015-03-31 184 4a59058f Maxime Ripard 2015-03-31 185 static int __init sun5i_setup_clocksource(struct device_node *node, 4a59058f Maxime Ripard 2015-03-31 186 void __iomem *base, 4a59058f Maxime Ripard 2015-03-31 187 struct clk *clk, int irq) 4a59058f Maxime Ripard 2015-03-31 188 { 4a59058f Maxime Ripard 2015-03-31 189 struct sun5i_timer_clksrc *cs; 4a59058f Maxime Ripard 2015-03-31 190 unsigned long rate; 4a59058f Maxime Ripard 2015-03-31 191 int ret; 4a59058f Maxime Ripard 2015-03-31 192 4a59058f Maxime Ripard 2015-03-31 193 cs = kzalloc(sizeof(*cs), GFP_KERNEL); 4a59058f Maxime Ripard 2015-03-31 194 if (!cs) 4a59058f Maxime Ripard 2015-03-31 195 return -ENOMEM; 4a59058f Maxime Ripard 2015-03-31 196 4a59058f Maxime Ripard 2015-03-31 197 ret = clk_prepare_enable(clk); 4a59058f Maxime Ripard 2015-03-31 198 if (ret) { 4a59058f Maxime Ripard 2015-03-31 199 pr_err("Couldn't enable parent clock\n"); 4a59058f Maxime Ripard 2015-03-31 200 goto err_free; 4a59058f Maxime Ripard 2015-03-31 201 } 4a59058f Maxime Ripard 2015-03-31 202 4a59058f Maxime Ripard 2015-03-31 203 rate = clk_get_rate(clk); 4a59058f Maxime Ripard 2015-03-31 204 4a59058f Maxime Ripard 2015-03-31 205 cs->timer.base = base; 4a59058f Maxime Ripard 2015-03-31 206 cs->timer.clk = clk; 3071efa4 Maxime Ripard 2015-03-31 207 cs->timer.clk_rate_cb.notifier_call = sun5i_rate_cb_clksrc; 3071efa4 Maxime Ripard 2015-03-31 208 cs->timer.clk_rate_cb.next = NULL; 3071efa4 Maxime Ripard 2015-03-31 209 3071efa4 Maxime Ripard 2015-03-31 210 ret = clk_notifier_register(clk, &cs->timer.clk_rate_cb); 3071efa4 Maxime Ripard 2015-03-31 211 if (ret) { 3071efa4 Maxime Ripard 2015-03-31 212 pr_err("Unable to register clock notifier.\n"); 3071efa4 Maxime Ripard 2015-03-31 213 goto err_disable_clk; 3071efa4 Maxime Ripard 2015-03-31 214 } 4a59058f Maxime Ripard 2015-03-31 215 4a59058f Maxime Ripard 2015-03-31 216 writel(~0, base + TIMER_INTVAL_LO_REG(1)); 4a59058f Maxime Ripard 2015-03-31 217 writel(TIMER_CTL_ENABLE | TIMER_CTL_RELOAD, 4a59058f Maxime Ripard 2015-03-31 218 base + TIMER_CTL_REG(1)); 4a59058f Maxime Ripard 2015-03-31 219 59387683 Chen-Yu Tsai 2016-10-18 220 cs->clksrc.name = node->name; 59387683 Chen-Yu Tsai 2016-10-18 221 cs->clksrc.rating = 340; 59387683 Chen-Yu Tsai 2016-10-18 222 cs->clksrc.read = sun5i_clksrc_read; 59387683 Chen-Yu Tsai 2016-10-18 @223 cs->clksrc.mask = CLOCKSOURCE_MASK(32); 59387683 Chen-Yu Tsai 2016-10-18 @224 cs->clksrc.flags = CLOCK_SOURCE_IS_CONTINUOUS; 59387683 Chen-Yu Tsai 2016-10-18 225 59387683 Chen-Yu Tsai 2016-10-18 226 ret = clocksource_register_hz(&cs->clksrc, rate); 4a59058f Maxime Ripard 2015-03-31 227 if (ret) { 4a59058f Maxime Ripard 2015-03-31 228 pr_err("Couldn't register clock source.\n"); 3071efa4 Maxime Ripard 2015-03-31 229 goto err_remove_notifier; 4a59058f Maxime Ripard 2015-03-31 230 } 4a59058f Maxime Ripard 2015-03-31 231 4a59058f Maxime Ripard 2015-03-31 232 return 0; 4a59058f Maxime Ripard 2015-03-31 233 3071efa4 Maxime Ripard 2015-03-31 234 err_remove_notifier: 3071efa4 Maxime Ripard 2015-03-31 235 clk_notifier_unregister(clk, &cs->timer.clk_rate_cb); 4a59058f Maxime Ripard 2015-03-31 236 err_disable_clk: 4a59058f Maxime Ripard 2015-03-31 237 clk_disable_unprepare(clk); 4a59058f Maxime Ripard 2015-03-31 238 err_free: 4a59058f Maxime Ripard 2015-03-31 239 kfree(cs); 4a59058f Maxime Ripard 2015-03-31 240 return ret; 4a59058f Maxime Ripard 2015-03-31 241 } 4a59058f Maxime Ripard 2015-03-31 242 3071efa4 Maxime Ripard 2015-03-31 243 static int sun5i_rate_cb_clkevt(struct notifier_block *nb, 3071efa4 Maxime Ripard 2015-03-31 244 unsigned long event, void *data) 3071efa4 Maxime Ripard 2015-03-31 245 { 3071efa4 Maxime Ripard 2015-03-31 246 struct clk_notifier_data *ndata = data; 3071efa4 Maxime Ripard 2015-03-31 247 struct sun5i_timer *timer = to_sun5i_timer(nb); 3071efa4 Maxime Ripard 2015-03-31 248 struct sun5i_timer_clkevt *ce = container_of(timer, struct sun5i_timer_clkevt, timer); 3071efa4 Maxime Ripard 2015-03-31 249 3071efa4 Maxime Ripard 2015-03-31 250 if (event == POST_RATE_CHANGE) { 3071efa4 Maxime Ripard 2015-03-31 @251 clockevents_update_freq(&ce->clkevt, ndata->new_rate); 3071efa4 Maxime Ripard 2015-03-31 252 ce->timer.ticks_per_jiffy = DIV_ROUND_UP(ndata->new_rate, HZ); 3071efa4 Maxime Ripard 2015-03-31 253 } 3071efa4 Maxime Ripard 2015-03-31 254 :::::: The code at line 52 was first introduced by commit :::::: 4a59058f0b09682200c04b1db236b4a3b92128d7 clocksource/drivers/sun5i: Refactor the current code :::::: TO: Maxime Ripard <maxime.ripard@free-electrons.com> :::::: CC: Ingo Molnar <mingo@kernel.org> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
Hi Alexandre, [auto build test WARNING on abelloni/rtc-next] [also build test WARNING on next-20170201] [cannot apply to v4.10-rc6] [if your patch is applied to the wrong git tree, please drop us a note to help improve the system] url: https://github.com/0day-ci/linux/commits/Alexandre-Belloni/rtc-sun6i-extend-test-coverage/20170201-200542 base: https://git.kernel.org/pub/scm/linux/kernel/git/abelloni/linux.git rtc-next config: blackfin-allmodconfig (attached as .config) compiler: bfin-uclinux-gcc (GCC) 6.2.0 reproduce: wget https://git.kernel.org/cgit/linux/kernel/git/wfg/lkp-tests.git/plain/sbin/make.cross -O ~/bin/make.cross chmod +x ~/bin/make.cross # save the attached .config to linux build tree make.cross ARCH=blackfin All warnings (new ones prefixed by >>): >> drivers/clk/samsung/clk-s3c2412.c:28:0: warning: "SWRST" redefined #define SWRST 0x30 In file included from arch/blackfin/mach-bf533/include/mach/blackfin.h:16:0, from arch/blackfin/include/asm/irqflags.h:11, from include/linux/irqflags.h:15, from arch/blackfin/include/asm/bitops.h:33, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/asm-generic/bug.h:13, from arch/blackfin/include/asm/bug.h:71, from include/linux/bug.h:4, from include/linux/io.h:23, from include/linux/clk-provider.h:14, from drivers/clk/samsung/clk-s3c2412.c:11: arch/blackfin/mach-bf533/include/mach/defBF532.h:25:0: note: this is the location of the previous definition #define SWRST 0xFFC00100 /* Software Reset Register (16-bit) */ -- >> drivers/clk/samsung/clk-s3c2443.c:35:0: warning: "SWRST" redefined #define SWRST 0x44 In file included from arch/blackfin/mach-bf533/include/mach/blackfin.h:16:0, from arch/blackfin/include/asm/irqflags.h:11, from include/linux/irqflags.h:15, from arch/blackfin/include/asm/bitops.h:33, from include/linux/bitops.h:36, from include/linux/kernel.h:10, from include/asm-generic/bug.h:13, from arch/blackfin/include/asm/bug.h:71, from include/linux/bug.h:4, from include/linux/io.h:23, from include/linux/clk-provider.h:14, from drivers/clk/samsung/clk-s3c2443.c:11: arch/blackfin/mach-bf533/include/mach/defBF532.h:25:0: note: this is the location of the previous definition #define SWRST 0xFFC00100 /* Software Reset Register (16-bit) */ vim +/SWRST +28 drivers/clk/samsung/clk-s3c2412.c ca2e90ac Heiko Stuebner 2014-02-25 12 #include <linux/of.h> ca2e90ac Heiko Stuebner 2014-02-25 13 #include <linux/of_address.h> ca2e90ac Heiko Stuebner 2014-02-25 14 #include <linux/syscore_ops.h> e317c194 Heiko Stübner 2014-08-19 15 #include <linux/reboot.h> ca2e90ac Heiko Stuebner 2014-02-25 16 ca2e90ac Heiko Stuebner 2014-02-25 17 #include <dt-bindings/clock/s3c2412.h> ca2e90ac Heiko Stuebner 2014-02-25 18 ca2e90ac Heiko Stuebner 2014-02-25 19 #include "clk.h" ca2e90ac Heiko Stuebner 2014-02-25 20 #include "clk-pll.h" ca2e90ac Heiko Stuebner 2014-02-25 21 ca2e90ac Heiko Stuebner 2014-02-25 22 #define LOCKTIME 0x00 ca2e90ac Heiko Stuebner 2014-02-25 23 #define MPLLCON 0x04 ca2e90ac Heiko Stuebner 2014-02-25 24 #define UPLLCON 0x08 ca2e90ac Heiko Stuebner 2014-02-25 25 #define CLKCON 0x0c ca2e90ac Heiko Stuebner 2014-02-25 26 #define CLKDIVN 0x14 ca2e90ac Heiko Stuebner 2014-02-25 27 #define CLKSRC 0x1c e317c194 Heiko Stübner 2014-08-19 @28 #define SWRST 0x30 ca2e90ac Heiko Stuebner 2014-02-25 29 ca2e90ac Heiko Stuebner 2014-02-25 30 /* list of PLLs to be registered */ ca2e90ac Heiko Stuebner 2014-02-25 31 enum s3c2412_plls { ca2e90ac Heiko Stuebner 2014-02-25 32 mpll, upll, ca2e90ac Heiko Stuebner 2014-02-25 33 }; ca2e90ac Heiko Stuebner 2014-02-25 34 ca2e90ac Heiko Stuebner 2014-02-25 35 static void __iomem *reg_base; ca2e90ac Heiko Stuebner 2014-02-25 36 :::::: The code at line 28 was first introduced by commit :::::: e317c19470f6d690122519bf9ed1c9f21ea11906 clk: samsung: register restart handlers for s3c2412 and s3c2443 :::::: TO: Heiko Stübner <heiko@sntech.de> :::::: CC: Heiko Stuebner <heiko@sntech.de> --- 0-DAY kernel test infrastructure Open Source Technology Center https://lists.01.org/pipermail/kbuild-all Intel Corporation
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig index ee287cf63b01..06f3beb8e30f 100644 --- a/drivers/rtc/Kconfig +++ b/drivers/rtc/Kconfig @@ -1435,8 +1435,9 @@ config RTC_DRV_SUN4V config RTC_DRV_SUN6I bool "Allwinner A31 RTC" - default MACH_SUN6I || MACH_SUN8I || COMPILE_TEST - depends on ARCH_SUNXI + default MACH_SUN6I || MACH_SUN8I + select COMMON_CLK + depends on ARCH_SUNXI || COMPILE_TEST help If you say Y here you will get support for the RTC found in some Allwinner SoCs like the A31 or the A64.
COMPILE_TEST was wrongly placed, move it to the "depends on" line. Also, select COMMON_CLK has the driver now needs it to be properly compiled. Signed-off-by: Alexandre Belloni <alexandre.belloni@free-electrons.com> --- drivers/rtc/Kconfig | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-)