S3C24XX: add clockevent/clocksource support
Subsystems (4)
PATCH v2 5/5 Remove unused plat-samsung/time.c
In reply to Heiko StübnerSince all Samsung devices use clocksource/clockevent API, we can remove unused sys_timer s3c24xx-timer (plat-samsung/time.c)
delete mode 100644 arch/arm/plat-samsung/time.c
arch/arm/plat-samsung/Makefile +0 -1
@@ -12,7 +12,6 @@ obj- := # Objects we always build independent of SoC choice obj-y += init.o cpu.o -obj-$(CONFIG_ARCH_USES_GETTIMEOFFSET) += time.o obj-$(CONFIG_SAMSUNG_HRT) += samsung-time.o obj-$(CONFIG_SAMSUNG_CLOCK) += clock.o
(quoted diff) +0 -0
b/arch/arm/plat-samsung/include/plat/cpu.h
index 86fb5f3..84a50ee 100644
arch/arm/plat-samsung/include/plat/cpu.h +0 -5
@@ -184,11 +184,6 @@ extern void s3c24xx_init_uartdevs(char *name,struct s3c24xx_uart_resources *res, struct s3c2410_uartcfg *cfg, int no); -/* timer for s5pc100 only */ - -struct sys_timer ; -extern struct sys_timer s3c24xx_timer; -extern struct syscore_ops s3c2410_pm_syscore_ops;extern struct syscore_ops s3c2412_pm_syscore_ops;extern struct syscore_ops s3c2416_pm_syscore_ops;
arch/arm/plat-samsung/time.c deleted +0 -18
@@ -1,285 +0,0 @@ -/* linux/arch/arm/plat-samsung/time.c -* -* Copyright (C) 2003-2005 Simtec Electronics -* Ben Dooks, <[email protected]> -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307
USA
- */
-
-#include <linux/kernel.h>
-#include <linux/sched.h>
-#include <linux/init.h>
-#include <linux/interrupt.h>
-#include <linux/irq.h>
-#include <linux/err.h>
-#include <linux/clk.h>
-#include <linux/io.h>
-#include <linux/platform_device.h>
-
-#include <asm/mach-types.h>
-
-#include <asm/irq.h>
-#include <mach/map.h>
-#include <plat/regs-timer.h>
-#include <mach/regs-irq.h>
-#include <asm/mach/time.h>
-#include <mach/tick.h>
-
-#include <plat/clock.h>
-#include <plat/cpu.h>
-
-static unsigned long timer_startval;
-static unsigned long timer_usec_ticks;
-
-#ifndef TICK_MAX
-#define TICK_MAX (0xffff)
-#endif
-
-#define TIMER_USEC_SHIFT 16
-
-/* we use the shifted arithmetic to work out the ratio of timer ticks
- * to usecs, as often the peripheral clock is not a nice even multiple
- * of 1MHz.
- *
- * shift of 14 and 15 are too low for the 12MHz, 16 seems to be ok
- * for the current HZ value of 200 without producing overflows.
- *
- * Original patch by Dimitry Andric, updated by Ben Dooks
-*/
-
-
-/* timer_mask_usec_ticks
- *
- * given a clock and divisor, make the value to pass into timer_ticks_to_usec
- * to scale the ticks into usecs
-*/
-
-static inline unsigned long
-timer_mask_usec_ticks(unsigned long scaler, unsigned long pclk) -{
- unsigned long den = pclk / 1000;
-
- return ((1000 << TIMER_USEC_SHIFT) * scaler + (den >> 1)) / den;
-}
-
-/* timer_ticks_to_usec
- *
- * convert timer ticks to usec.
-*/
-
-static inline unsigned long timer_ticks_to_usec(unsigned long ticks) -{
- unsigned long res;
-
- res = ticks * timer_usec_ticks;
- res += 1 << (TIMER_USEC_SHIFT - 4); /* round up slightly */
-
- return res >> TIMER_USEC_SHIFT;
-}
-
-/***
- * Returns microsecond since last clock interrupt. Note that interrupts
- * will have been disabled by do_gettimeoffset()
- * IRQs are disabled before entering here from do_gettimeofday()
- */
-
-static unsigned long s3c2410_gettimeoffset (void)
-{
- unsigned long tdone;
- unsigned long tval;
-
- /* work out how many ticks have gone since last timer interrupt */
-
- tval = __raw_readl(S3C2410_TCNTO(4));
- tdone = timer_startval - tval;
-
- /* check to see if there is an interrupt pending */
-
- if (s3c24xx_ostimer_pending()) {
- /* re-read the timer, and try and fix up for the missed
- * interrupt. Note, the interrupt may go off before the
- * timer has re-loaded from wrapping.
- */
-
- tval = __raw_readl(S3C2410_TCNTO(4));
- tdone = timer_startval - tval;
-
- if (tval != 0)
- tdone += timer_startval;
- }
-
- return timer_ticks_to_usec(tdone);
-}
-
-
-/*
- * IRQ handler for the timer
- */
-static irqreturn_t
-s3c2410_timer_interrupt(int irq, void *dev_id)
-{
- timer_tick();
- return IRQ_HANDLED;
-}
-
-static struct irqaction s3c2410_timer_irq = {
- .name = "S3C2410 Timer Tick",
- .flags = IRQF_DISABLED | IRQF_TIMER | IRQF_IRQPOLL,
- .handler = s3c2410_timer_interrupt,
-};
-
-#define use_tclk1_12() ( \
- machine_is_bast() || \
- machine_is_vr1000() || \ - machine_is_anubis() || \
- machine_is_osiris())
-
-static struct clk *tin;
-static struct clk *tdiv;
-static struct clk *timerclk;
-
-/*
- * Set up timer interrupt, and return the current time in seconds.
- *
- * Currently we only use timer4, as it is the only timer which has no
- * other function that can be exploited externally
- */
-static void s3c2410_timer_setup (void)
-{
- unsigned long tcon;
- unsigned long tcnt;
- unsigned long tcfg1;
- unsigned long tcfg0;
-
- tcnt = TICK_MAX; /* default value for tcnt */
-
- /* configure the system for whichever machine is in use */
-
- if (use_tclk1_12()) {
- /* timer is at 12MHz, scaler is 1 */
- timer_usec_ticks = timer_mask_usec_ticks(1, 12000000);
- tcnt = 12000000 / HZ;
-
- tcfg1 = __raw_readl(S3C2410_TCFG1);
- tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK;
- tcfg1 |= S3C2410_TCFG1_MUX4_TCLK1;
- __raw_writel(tcfg1, S3C2410_TCFG1);
- } else {
- unsigned long pclk;
- struct clk *tscaler;
-
- /* for the h1940 (and others), we use the pclk from the core
- * to generate the timer values. since values around 50 to
- * 70MHz are not values we can directly generate the timer
- * value from, we need to pre-scale and divide before using it.
- *
- * for instance, using 50.7MHz and dividing by 6 gives 8.45MHz
- * (8.45 ticks per usec)
- */
-
- pclk = clk_get_rate(timerclk);
-
- /* configure clock tick */
-
- timer_usec_ticks = timer_mask_usec_ticks(6, pclk);
-
- tscaler = clk_get_parent(tdiv);
-
- clk_set_rate(tscaler, pclk / 3);
- clk_set_rate(tdiv, pclk / 6);
- clk_set_parent(tin, tdiv);
-
- tcnt = clk_get_rate(tin) / HZ;
- }
-
- tcon = __raw_readl(S3C2410_TCON);
- tcfg0 = __raw_readl(S3C2410_TCFG0);
- tcfg1 = __raw_readl(S3C2410_TCFG1);
-
- /* timers reload after counting zero, so reduce the count by 1 */
-
- tcnt--;
-
- printk(KERN_DEBUG "timer tcon=%08lx, tcnt %04lx, tcfg %08lx,%08lx,
usec %08lx\n",
- tcon, tcnt, tcfg0, tcfg1, timer_usec_ticks);
-
- /* check to see if timer is within 16bit range... */
- if (tcnt > TICK_MAX) {
- panic("setup_timer: HZ is too small, cannot configure timer!");
- return;
- }
-
- __raw_writel(tcfg1, S3C2410_TCFG1);
- __raw_writel(tcfg0, S3C2410_TCFG0);
-
- timer_startval = tcnt;
- __raw_writel(tcnt, S3C2410_TCNTB(4));
-
- /* ensure timer is stopped... */
-
- tcon &= ~(7<<20);
- tcon |= S3C2410_TCON_T4RELOAD;
- tcon |= S3C2410_TCON_T4MANUALUPD;
-
- __raw_writel(tcon, S3C2410_TCON);
- __raw_writel(tcnt, S3C2410_TCNTB(4));
- __raw_writel(tcnt, S3C2410_TCMPB(4));
-
- /* start the timer running */
- tcon |= S3C2410_TCON_T4START;
- tcon &= ~S3C2410_TCON_T4MANUALUPD;
- __raw_writel(tcon, S3C2410_TCON);
-}
-
-static void __init s3c2410_timer_resources(void)
-{
- struct platform_device tmpdev;
-
- tmpdev.dev.bus = &platform_bus_type;
- tmpdev.id = 4;
-
- timerclk = clk_get(NULL, "timers");
- if (IS_ERR(timerclk))
- panic("failed to get clock for system timer");
-
- clk_enable(timerclk);
-
- if (!use_tclk1_12()) {
- tmpdev.id = 4;
- tmpdev.dev.init_name = "s3c24xx-pwm.4";
- tin = clk_get(&tmpdev.dev, "pwm-tin");
- if (IS_ERR(tin))
- panic("failed to get pwm-tin clock for system timer");
-
- tdiv = clk_get(&tmpdev.dev, "pwm-tdiv");
- if (IS_ERR(tdiv))
- panic("failed to get pwm-tdiv clock for system timer");
- }
-
- clk_enable(tin);
-}
-
-static void __init s3c2410_timer_init(void)
-{
- s3c2410_timer_resources();
- s3c2410_timer_setup();
- setup_irq(IRQ_TIMER4, &s3c2410_timer_irq);
-}
-
-struct sys_timer s3c24xx_timer = {
- .init = s3c2410_timer_init,
- .offset = s3c2410_gettimeoffset,
- .resume = s3c2410_timer_setup
-};
Re: [PATCH 5/5 v2] Remove unused plat-samsung/time.c
Am Sonntag, 2. Dezember 2012, 20:44:22 schrieb Romain Naour:
Quoted 2 lines
Since all Samsung devices use clocksource/clockevent API, we can remove unused
sys_timers3c24xx-timer (plat-samsung/time.c)
The patch is corrupted, as it contains wrapped lines and does not apply against the current linux-next tree
Quoted 3 lines
Signed-off-by Naour Romain <[email protected]>delete mode 100644 arch/arm/plat-samsung/time.c
and what does this line do in the patch description? It seems your mail client mangled the "--" parting the patch message from the stats/comment section.
Quoted 313 lines
(quoted diff) +0
-0b/arch/arm/plat-samsung/Makefile index 06f2312..162e0df 100644
arch/arm/plat-samsung/Makefile +0
-1@@ -12,7 +12,6 @@ obj- := # Objects we always build independent of SoC choice obj-y += init.o cpu.o -obj-$(CONFIG_ARCH_USES_GETTIMEOFFSET) += time.o obj-$(CONFIG_SAMSUNG_HRT) += samsung-time.o obj-$(CONFIG_SAMSUNG_CLOCK) += clock.oarch/arm/plat-samsung/include/plat/cpu.h +0
-5@@ -184,11 +184,6 @@ extern void s3c24xx_init_uartdevs(char *name,struct s3c24xx_uart_resources *res, struct s3c2410_uartcfg *cfg, int no); -/* timer for s5pc100 only */ - -struct sys_timer ; -extern struct sys_timer s3c24xx_timer; -extern struct syscore_ops s3c2410_pm_syscore_ops;extern struct syscore_ops s3c2412_pm_syscore_ops;extern struct syscore_ops s3c2416_pm_syscore_ops;arch/arm/plat-samsung/time.c deleted +0
-65@@ -1,285 +0,0 @@ -/* linux/arch/arm/plat-samsung/time.c -* -* Copyright (C) 2003-2005 Simtec Electronics -* Ben Dooks, <[email protected]> -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/irq.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/platform_device.h> - -#include <asm/mach-types.h> - -#include <asm/irq.h> -#include <mach/map.h> -#include <plat/regs-timer.h> -#include <mach/regs-irq.h> -#include <asm/mach/time.h> -#include <mach/tick.h> - -#include <plat/clock.h> -#include <plat/cpu.h> - -static unsigned long timer_startval; -static unsigned long timer_usec_ticks; - -#ifndef TICK_MAX -#define TICK_MAX (0xffff) -#endif - -#define TIMER_USEC_SHIFT 16 - -/* we use the shifted arithmetic to work out the ratio of timer ticks -* to usecs, as often the peripheral clock is not a nice even multiple -* of 1MHz. -* -* shift of 14 and 15 are too low for the 12MHz, 16 seems to be ok -* for the current HZ value of 200 without producing overflows. -* -* Original patch by Dimitry Andric, updated by Ben Dooks -*/ - - -/* timer_mask_usec_ticks -* -* given a clock and divisor, make the value to pass into
timer_ticks_to_usec
- * to scale the ticks into usecsarch/arm/plat-samsung/time.c deleted +0
-149-*/ - -static inline unsigned long -timer_mask_usec_ticks (unsigned long scaler,unsigned long pclk) -{ -unsigned long den = pclk /1000 ; - -return ((1000 <<TIMER_USEC_SHIFT ) * scaler + (den >>1 )) / den; -} - -/* timer_ticks_to_usec -* -* convert timer ticks to usec. -*/ - -static inline unsigned long timer_ticks_to_usec (unsigned long ticks) -{ -unsigned long res; - - res = ticks * timer_usec_ticks; - res +=1 << (TIMER_USEC_SHIFT -4 );/* round up slightly */ - -return res >>TIMER_USEC_SHIFT ; -} - -/*** -* Returns microsecond since last clock interrupt. Note that interrupts -* will have been disabled by do_gettimeoffset() -* IRQs are disabled before entering here from do_gettimeofday() -*/ - -static unsigned long s3c2410_gettimeoffset (void ) -{ -unsigned long tdone; -unsigned long tval; - -/* work out how many ticks have gone since last timer interrupt */ - - tval =__raw_readl (S3C2410_TCNTO (4 )); - tdone = timer_startval - tval; - -/* check to see if there is an interrupt pending */ - -if (s3c24xx_ostimer_pending ()) { -/* re-read the timer, and try and fix up for the missed -* interrupt. Note, the interrupt may go off before the -* timer has re-loaded from wrapping. -*/ - - tval =__raw_readl (S3C2410_TCNTO (4 )); - tdone = timer_startval - tval; - -if (tval !=0 ) - tdone += timer_startval; - } - -return timer_ticks_to_usec (tdone); -} - - -/* -* IRQ handler for the timer -*/ -static irqreturn_t -s3c2410_timer_interrupt (int irq,void *dev_id) -{ -timer_tick (); -return IRQ_HANDLED ; -} - -static struct irqaction s3c2410_timer_irq = { - .name ="S3C2410 Timer Tick" , - .flags =IRQF_DISABLED |IRQF_TIMER |IRQF_IRQPOLL , - .handler = s3c2410_timer_interrupt, -}; - -#define use_tclk1_12 () ( \ - machine_is_bast() || \ - machine_is_vr1000() || \ - machine_is_anubis() || \ - machine_is_osiris()) - -static struct clk *tin; -static struct clk *tdiv; -static struct clk *timerclk; - -/* -* Set up timer interrupt, and return the current time in seconds. -* -* Currently we only use timer4, as it is the only timer which has no -* other function that can be exploited externally -*/ -static void s3c2410_timer_setup (void) -{ - unsigned long tcon; - unsigned long tcnt; - unsigned long tcfg1; - unsigned long tcfg0; - - tcnt = TICK_MAX; /* default value for tcnt */ - - /* configure the system for whichever machine is in use */ - - if (use_tclk1_12()) { - /* timer is at 12MHz, scaler is 1 */ - timer_usec_ticks = timer_mask_usec_ticks(1, 12000000); - tcnt = 12000000 / HZ; - - tcfg1 = __raw_readl(S3C2410_TCFG1); - tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK; - tcfg1 |= S3C2410_TCFG1_MUX4_TCLK1; - __raw_writel(tcfg1, S3C2410_TCFG1); - } else { - unsigned long pclk; - struct clk *tscaler; - - /* for the h1940 (and others), we use the pclk from the core - * to generate the timer values. since values around 50 to - * 70MHz are not values we can directly generate the timer - * value from, we need to pre-scale and divide before using it. - * - * for instance, using 50.7MHz and dividing by 6 gives 8.45MHz - * (8.45 ticks per usec) - */ - - pclk = clk_get_rate(timerclk); - - /* configure clock tick */ - - timer_usec_ticks = timer_mask_usec_ticks(6, pclk); - - tscaler = clk_get_parent(tdiv); - - clk_set_rate(tscaler, pclk / 3); - clk_set_rate(tdiv, pclk / 6); - clk_set_parent(tin, tdiv); - - tcnt = clk_get_rate(tin) / HZ; - } - - tcon = __raw_readl(S3C2410_TCON); - tcfg0 = __raw_readl(S3C2410_TCFG0); - tcfg1 = __raw_readl(S3C2410_TCFG1); - - /* timers reload after counting zero, so reduce the count by 1 */ - - tcnt--; - - printk(KERN_DEBUG "timer tcon=%08lx, tcnt %04lx, tcfg %08lx,%08lx,usec %08lx\n",
arch/arm/plat-samsung/time.c deleted +0
-60- tcon, tcnt, tcfg0, tcfg1, timer_usec_ticks); - -/* check to see if timer is within 16bit range... */ -if (tcnt >TICK_MAX ) { -panic ("setup_timer: HZ is too small, cannot configure timer!" ); -return ; - } - -__raw_writel (tcfg1,S3C2410_TCFG1 ); -__raw_writel (tcfg0,S3C2410_TCFG0 ); - - timer_startval = tcnt; -__raw_writel (tcnt,S3C2410_TCNTB (4 )); - -/* ensure timer is stopped... */ - - tcon &= ~(7 <<20 ); - tcon |=S3C2410_TCON_T4RELOAD ; - tcon |=S3C2410_TCON_T4MANUALUPD ; - -__raw_writel (tcon,S3C2410_TCON ); -__raw_writel (tcnt,S3C2410_TCNTB (4 )); -__raw_writel (tcnt,S3C2410_TCMPB (4 )); - -/* start the timer running */ - tcon |=S3C2410_TCON_T4START ; - tcon &= ~S3C2410_TCON_T4MANUALUPD ; -__raw_writel (tcon,S3C2410_TCON ); -} - -static void __init s3c2410_timer_resources (void ) -{ -struct platform_device tmpdev; - - tmpdev.dev.bus = &platform_bus_type; - tmpdev.id =4 ; - - timerclk =clk_get (NULL ,"timers" ); -if (IS_ERR (timerclk)) -panic ("failed to get clock for system timer" ); - -clk_enable (timerclk); - -if (!use_tclk1_12 ()) { - tmpdev.id =4 ; - tmpdev.dev.init_name ="s3c24xx-pwm.4" ; - tin =clk_get (&tmpdev.dev,"pwm-tin" ); -if (IS_ERR (tin)) -panic ("failed to get pwm-tin clock for system timer" ); - - tdiv =clk_get (&tmpdev.dev,"pwm-tdiv" ); -if (IS_ERR (tdiv)) -panic ("failed to get pwm-tdiv clock for system timer" ); - } - -clk_enable (tin); -} - -static void __init s3c2410_timer_init (void ) -{
arch/arm/plat-samsung/time.c
Quoted 10 lines
arch/arm/plat-samsung/time.c deleted +0
-10-s3c2410_timer_resources (); -s3c2410_timer_setup (); -setup_irq (IRQ_TIMER4 , &s3c2410_timer_irq); -} - -struct sys_timer s3c24xx_timer = { - .init = s3c2410_timer_init, - .offset = s3c2410_gettimeoffset, - .resume = s3c2410_timer_setup -};
4
Re: [PATCH 5/5 v2] Remove unused plat-samsung/time.c
Quoted 7 lines · Heiko Stübner
Am Sonntag, 2. Dezember 2012, 20:44:22 schrieb Romain Naour:
Quoted 2 lines
Since all Samsung devices use clocksource/clockevent API, we can remove unused
sys_timers3c24xx-timer (plat-samsung/time.c)The patch is corrupted, as it contains wrapped lines and does not apply against the current linux-next tree
Sorry for my late reply, I work on theses patches on my free time. Ok, I'll resend this patch.
Quoted 7 lines
Quoted 3 lines
Signed-off-by Naour Romain <[email protected]>delete mode 100644 arch/arm/plat-samsung/time.cand what does this line do in the patch description? It seems your mail client mangled the "--" parting the patch message from the stats/comment section.
Solved.
Quoted 327 lines
Quoted 314 lines
(quoted diff) +0
-0b/arch/arm/plat-samsung/Makefile index 06f2312..162e0df 100644
arch/arm/plat-samsung/Makefile +0
-1@@ -12,7 +12,6 @@ obj- := # Objects we always build independent of SoC choice obj-y += init.o cpu.o -obj-$(CONFIG_ARCH_USES_GETTIMEOFFSET) += time.o obj-$(CONFIG_SAMSUNG_HRT) += samsung-time.o obj-$(CONFIG_SAMSUNG_CLOCK) += clock.oarch/arm/plat-samsung/include/plat/cpu.h +0
-5@@ -184,11 +184,6 @@ extern void s3c24xx_init_uartdevs(char *name,struct s3c24xx_uart_resources *res, struct s3c2410_uartcfg *cfg, int no); -/* timer for s5pc100 only */ - -struct sys_timer ; -extern struct sys_timer s3c24xx_timer; -extern struct syscore_ops s3c2410_pm_syscore_ops;extern struct syscore_ops s3c2412_pm_syscore_ops;extern struct syscore_ops s3c2416_pm_syscore_ops;arch/arm/plat-samsung/time.c deleted +0
-65@@ -1,285 +0,0 @@ -/* linux/arch/arm/plat-samsung/time.c -* -* Copyright (C) 2003-2005 Simtec Electronics -* Ben Dooks, <[email protected]> -* -* This program is free software; you can redistribute it and/or modify -* it under the terms of the GNU General Public License as published by -* the Free Software Foundation; either version 2 of the License, or -* (at your option) any later version. -* -* This program is distributed in the hope that it will be useful, -* but WITHOUT ANY WARRANTY; without even the implied warranty of -* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the -* GNU General Public License for more details. -* -* You should have received a copy of the GNU General Public License -* along with this program; if not, write to the Free Software -* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -*/ - -#include <linux/kernel.h> -#include <linux/sched.h> -#include <linux/init.h> -#include <linux/interrupt.h> -#include <linux/irq.h> -#include <linux/err.h> -#include <linux/clk.h> -#include <linux/io.h> -#include <linux/platform_device.h> - -#include <asm/mach-types.h> - -#include <asm/irq.h> -#include <mach/map.h> -#include <plat/regs-timer.h> -#include <mach/regs-irq.h> -#include <asm/mach/time.h> -#include <mach/tick.h> - -#include <plat/clock.h> -#include <plat/cpu.h> - -static unsigned long timer_startval; -static unsigned long timer_usec_ticks; - -#ifndef TICK_MAX -#define TICK_MAX (0xffff) -#endif - -#define TIMER_USEC_SHIFT 16 - -/* we use the shifted arithmetic to work out the ratio of timer ticks -* to usecs, as often the peripheral clock is not a nice even multiple -* of 1MHz. -* -* shift of 14 and 15 are too low for the 12MHz, 16 seems to be ok -* for the current HZ value of 200 without producing overflows. -* -* Original patch by Dimitry Andric, updated by Ben Dooks -*/ - - -/* timer_mask_usec_ticks -* -* given a clock and divisor, make the value to pass into
timer_ticks_to_usec
- * to scale the ticks into usecsarch/arm/plat-samsung/time.c deleted +0
-149-*/ - -static inline unsigned long -timer_mask_usec_ticks (unsigned long scaler,unsigned long pclk) -{ -unsigned long den = pclk /1000 ; - -return ((1000 <<TIMER_USEC_SHIFT ) * scaler + (den >>1 )) / den; -} - -/* timer_ticks_to_usec -* -* convert timer ticks to usec. -*/ - -static inline unsigned long timer_ticks_to_usec (unsigned long ticks) -{ -unsigned long res; - - res = ticks * timer_usec_ticks; - res +=1 << (TIMER_USEC_SHIFT -4 );/* round up slightly */ - -return res >>TIMER_USEC_SHIFT ; -} - -/*** -* Returns microsecond since last clock interrupt. Note that interrupts -* will have been disabled by do_gettimeoffset() -* IRQs are disabled before entering here from do_gettimeofday() -*/ - -static unsigned long s3c2410_gettimeoffset (void ) -{ -unsigned long tdone; -unsigned long tval; - -/* work out how many ticks have gone since last timer interrupt */ - - tval =__raw_readl (S3C2410_TCNTO (4 )); - tdone = timer_startval - tval; - -/* check to see if there is an interrupt pending */ - -if (s3c24xx_ostimer_pending ()) { -/* re-read the timer, and try and fix up for the missed -* interrupt. Note, the interrupt may go off before the -* timer has re-loaded from wrapping. -*/ - - tval =__raw_readl (S3C2410_TCNTO (4 )); - tdone = timer_startval - tval; - -if (tval !=0 ) - tdone += timer_startval; - } - -return timer_ticks_to_usec (tdone); -} - - -/* -* IRQ handler for the timer -*/ -static irqreturn_t -s3c2410_timer_interrupt (int irq,void *dev_id) -{ -timer_tick (); -return IRQ_HANDLED ; -} - -static struct irqaction s3c2410_timer_irq = { - .name ="S3C2410 Timer Tick" , - .flags =IRQF_DISABLED |IRQF_TIMER |IRQF_IRQPOLL , - .handler = s3c2410_timer_interrupt, -}; - -#define use_tclk1_12 () ( \ - machine_is_bast() || \ - machine_is_vr1000() || \ - machine_is_anubis() || \ - machine_is_osiris()) - -static struct clk *tin; -static struct clk *tdiv; -static struct clk *timerclk; - -/* -* Set up timer interrupt, and return the current time in seconds. -* -* Currently we only use timer4, as it is the only timer which has no -* other function that can be exploited externally -*/ -static void s3c2410_timer_setup (void) -{ - unsigned long tcon; - unsigned long tcnt; - unsigned long tcfg1; - unsigned long tcfg0; - - tcnt = TICK_MAX; /* default value for tcnt */ - - /* configure the system for whichever machine is in use */ - - if (use_tclk1_12()) { - /* timer is at 12MHz, scaler is 1 */ - timer_usec_ticks = timer_mask_usec_ticks(1, 12000000); - tcnt = 12000000 / HZ; - - tcfg1 = __raw_readl(S3C2410_TCFG1); - tcfg1 &= ~S3C2410_TCFG1_MUX4_MASK; - tcfg1 |= S3C2410_TCFG1_MUX4_TCLK1; - __raw_writel(tcfg1, S3C2410_TCFG1); - } else { - unsigned long pclk; - struct clk *tscaler; - - /* for the h1940 (and others), we use the pclk from the core - * to generate the timer values. since values around 50 to - * 70MHz are not values we can directly generate the timer - * value from, we need to pre-scale and divide before using it. - * - * for instance, using 50.7MHz and dividing by 6 gives 8.45MHz - * (8.45 ticks per usec) - */ - - pclk = clk_get_rate(timerclk); - - /* configure clock tick */ - - timer_usec_ticks = timer_mask_usec_ticks(6, pclk); - - tscaler = clk_get_parent(tdiv); - - clk_set_rate(tscaler, pclk / 3); - clk_set_rate(tdiv, pclk / 6); - clk_set_parent(tin, tdiv); - - tcnt = clk_get_rate(tin) / HZ; - } - - tcon = __raw_readl(S3C2410_TCON); - tcfg0 = __raw_readl(S3C2410_TCFG0); - tcfg1 = __raw_readl(S3C2410_TCFG1); - - /* timers reload after counting zero, so reduce the count by 1 */ - - tcnt--; - - printk(KERN_DEBUG "timer tcon=%08lx, tcnt %04lx, tcfg %08lx,%08lx,usec %08lx\n",
arch/arm/plat-samsung/time.c deleted +0
-60- tcon, tcnt, tcfg0, tcfg1, timer_usec_ticks); - -/* check to see if timer is within 16bit range... */ -if (tcnt >TICK_MAX ) { -panic ("setup_timer: HZ is too small, cannot configure timer!" ); -return ; - } - -__raw_writel (tcfg1,S3C2410_TCFG1 ); -__raw_writel (tcfg0,S3C2410_TCFG0 ); - - timer_startval = tcnt; -__raw_writel (tcnt,S3C2410_TCNTB (4 )); - -/* ensure timer is stopped... */ - - tcon &= ~(7 <<20 ); - tcon |=S3C2410_TCON_T4RELOAD ; - tcon |=S3C2410_TCON_T4MANUALUPD ; - -__raw_writel (tcon,S3C2410_TCON ); -__raw_writel (tcnt,S3C2410_TCNTB (4 )); -__raw_writel (tcnt,S3C2410_TCMPB (4 )); - -/* start the timer running */ - tcon |=S3C2410_TCON_T4START ; - tcon &= ~S3C2410_TCON_T4MANUALUPD ; -__raw_writel (tcon,S3C2410_TCON ); -} - -static void __init s3c2410_timer_resources (void ) -{ -struct platform_device tmpdev; - - tmpdev.dev.bus = &platform_bus_type; - tmpdev.id =4 ; - - timerclk =clk_get (NULL ,"timers" ); -if (IS_ERR (timerclk)) -panic ("failed to get clock for system timer" ); - -clk_enable (timerclk); - -if (!use_tclk1_12 ()) { - tmpdev.id =4 ; - tmpdev.dev.init_name ="s3c24xx-pwm.4" ; - tin =clk_get (&tmpdev.dev,"pwm-tin" ); -if (IS_ERR (tin)) -panic ("failed to get pwm-tin clock for system timer" ); - - tdiv =clk_get (&tmpdev.dev,"pwm-tdiv" ); -if (IS_ERR (tdiv)) -panic ("failed to get pwm-tdiv clock for system timer" ); - } - -clk_enable (tin); -} - -static void __init s3c2410_timer_init (void ) -{arch/arm/plat-samsung/time.c
Quoted 10 lines
arch/arm/plat-samsung/time.c deleted +0
-10-s3c2410_timer_resources (); -s3c2410_timer_setup (); -setup_irq (IRQ_TIMER4 , &s3c2410_timer_irq); -} - -struct sys_timer s3c24xx_timer = { - .init = s3c2410_timer_init, - .offset = s3c2410_gettimeoffset, - .resume = s3c2410_timer_setup -};4
PATCH v3 5/5 Remove unused plat-samsung/time.c
In reply to Heiko StübnerSince all Samsung devices use clocksource/clockevent API, we can remove unused sys_timer s3c24xx-timer (plat-samsung/time.c)
--- arch/arm/plat-samsung/Makefile | 1 - arch/arm/plat-samsung/include/plat/cpu.h | 5 - arch/arm/plat-samsung/time.c | 285 ------------------------------- 3 files changed, 291 deletions(-) delete mode 100644 arch/arm/plat-samsung/time.c
arch/arm/plat-samsung/Makefile +0 -1
@@ -12,7 +12,6 @@ obj- := # Objects we always build independent of SoC choice obj-y += init.o cpu.o -obj-$(CONFIG_ARCH_USES_GETTIMEOFFSET) += time.o obj-$(CONFIG_SAMSUNG_HRT) += samsung-time.o obj-$(CONFIG_SAMSUNG_CLOCK) += clock.o
arch/arm/plat-samsung/include/plat/cpu.h +0 -5
@@ -192,11 +192,6 @@ extern void s3c24xx_init_uartdevs(char *name,struct s3c24xx_uart_resources *res, struct s3c2410_uartcfg *cfg, int no); -/* timer for s5pc100 only */ - -struct sys_timer ; -extern struct sys_timer s3c24xx_timer; -extern struct syscore_ops s3c2410_pm_syscore_ops;extern struct syscore_ops s3c2412_pm_syscore_ops;extern struct syscore_ops s3c2416_pm_syscore_ops;
arch/arm/plat-samsung/time.c deleted +0 -285
285 lines not on this page · raw message
PATCH 2/3 Add samsung-time support for s3c24xx
In reply to Romain NaourThis patch replace ARCH_USES_GETTIMEOFFSET by GENERIC_CLOCKEVENTS for s3c24xx devices. It becomes possible to use the high-resolution timer and dynamic ticks.
--- arch/arm/Kconfig | 3 ++- arch/arm/mach-s3c24xx/Kconfig | 6 ++++++ arch/arm/mach-s3c24xx/mach-amlm5900.c | 5 ++++- arch/arm/mach-s3c24xx/mach-anubis.c | 4 +++- arch/arm/mach-s3c24xx/mach-at2440evb.c | 4 +++- arch/arm/mach-s3c24xx/mach-bast.c | 4 +++- arch/arm/mach-s3c24xx/mach-gta02.c | 4 +++- arch/arm/mach-s3c24xx/mach-h1940.c | 4 +++- arch/arm/mach-s3c24xx/mach-jive.c | 4 +++- arch/arm/mach-s3c24xx/mach-mini2440.c | 4 +++- arch/arm/mach-s3c24xx/mach-n30.c | 6 ++++-- arch/arm/mach-s3c24xx/mach-nexcoder.c | 4 +++- arch/arm/mach-s3c24xx/mach-osiris.c | 4 +++- arch/arm/mach-s3c24xx/mach-otom.c | 4 +++- arch/arm/mach-s3c24xx/mach-qt2410.c | 4 +++- arch/arm/mach-s3c24xx/mach-rx1950.c | 4 +++- arch/arm/mach-s3c24xx/mach-rx3715.c | 4 +++- arch/arm/mach-s3c24xx/mach-smdk2410.c | 4 +++- arch/arm/mach-s3c24xx/mach-smdk2413.c | 8 +++++--- arch/arm/mach-s3c24xx/mach-smdk2416.c | 4 +++- arch/arm/mach-s3c24xx/mach-smdk2440.c | 4 +++- arch/arm/mach-s3c24xx/mach-smdk2443.c | 4 +++- arch/arm/mach-s3c24xx/mach-tct_hammer.c | 4 +++- arch/arm/mach-s3c24xx/mach-vr1000.c | 4 +++- arch/arm/mach-s3c24xx/mach-vstms.c | 5 +++-- arch/arm/plat-samsung/include/plat/cpu.h | 2 +- arch/arm/plat-samsung/include/plat/samsung-time.h | 11 +++++++++++ arch/arm/plat-samsung/samsung-time.c | 12 ++++++------ 28 files changed, 99 insertions(+), 35 deletions(-)
arch/arm/Kconfig +2 -1
@@ -737,7 +737,8 @@ config ARCH_SA1100 config ARCH_S3C24XX bool "Samsung S3C24XX SoCs" select ARCH_HAS_CPUFREQ - select ARCH_USES_GETTIMEOFFSET + select GENERIC_CLOCKEVENTS + select CLKSRC_MMIO select CLKDEV_LOOKUP select GENERIC_GPIO select HAVE_CLK
arch/arm/mach-s3c24xx/Kconfig +6 -0
@@ -21,6 +21,7 @@ config CPU_S3C2410 select S3C2410_CLOCK select S3C2410_CPUFREQ if CPU_FREQ_S3C24XX select S3C2410_PM if PM + select SAMSUNG_HRT help Support for S3C2410 and S3C2410A family from the S3C24XX line of Samsung Mobile CPUs.
@@ -32,6 +33,7 @@ config CPU_S3C2412 select CPU_LLSERIAL_S3C2440 select S3C2412_DMA if S3C24XX_DMA select S3C2412_PM if PM + select SAMSUNG_HRT help Support for the S3C2412 and S3C2413 SoCs from the S3C24XX line
@@ -44,6 +46,7 @@ config CPU_S3C2416 select S3C2443_COMMON select S3C2443_DMA if S3C24XX_DMA select SAMSUNG_CLKSRC + select SAMSUNG_HRT help Support for the S3C2416 SoC from the S3C24XX line
@@ -54,6 +57,7 @@ config CPU_S3C2440 select S3C2410_CLOCK select S3C2410_PM if PM select S3C2440_DMA if S3C24XX_DMA + select SAMSUNG_HRT help Support for S3C2440 Samsung Mobile CPU based systems.
@@ -63,6 +67,7 @@ config CPU_S3C2442 select CPU_LLSERIAL_S3C2440 select S3C2410_CLOCK select S3C2410_PM if PM + select SAMSUNG_HRT help Support for S3C2442 Samsung Mobile CPU based systems.
@@ -78,6 +83,7 @@ config CPU_S3C2443 select S3C2443_COMMON select S3C2443_DMA if S3C24XX_DMA select SAMSUNG_CLKSRC + select SAMSUNG_HRT help Support for the S3C2443 SoC from the S3C24XX line
arch/arm/mach-s3c24xx/mach-amlm5900.c +4 -1
@@ -63,6 +63,8 @@#include <linux/mtd/map.h> #include <linux/mtd/physmap.h> +#include <plat/samsung-time.h> +#include "common.h" static struct resource amlm5900_nor_resource =
@@ -160,6 +162,7 @@ static void __init amlm5900_map_io(void)s3c24xx_init_io (amlm5900_iodesc,ARRAY_SIZE (amlm5900_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (amlm5900_uartcfgs,ARRAY_SIZE (amlm5900_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }#ifdef CONFIG_FB_S3C2410
@@ -237,6 +240,6 @@ MACHINE_START(AML_M5900, "AML_M5900") .map_io = amlm5900_map_io, .init_irq = s3c24xx_init_irq, .init_machine = amlm5900_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-anubis.c +3 -1
@@ -54,6 +54,7 @@#include <plat/devs.h> #include <plat/cpu.h> #include <linux/platform_data/asoc-s3c24xx_simtec.h> +#include <plat/samsung-time.h> #include "simtec.h" #include "common.h"
@@ -414,6 +415,7 @@ static void __init anubis_map_io(void)s3c24xx_init_io (anubis_iodesc,ARRAY_SIZE (anubis_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (anubis_uartcfgs,ARRAY_SIZE (anubis_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* check for the newer revision boards with large page nand */
@@ -448,6 +450,6 @@ MACHINE_START(ANUBIS, "Simtec-Anubis") .map_io = anubis_map_io, .init_machine = anubis_init, .init_irq = s3c24xx_init_irq, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-at2440evb.c +3 -1
@@ -48,6 +48,7 @@#include <plat/devs.h> #include <plat/cpu.h> #include <linux/platform_data/mmc-s3cmci.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -192,6 +193,7 @@ static void __init at2440evb_map_io(void)s3c24xx_init_io (at2440evb_iodesc,ARRAY_SIZE (at2440evb_iodesc));s3c24xx_init_clocks (16934400 );s3c24xx_init_uarts (at2440evb_uartcfgs,ARRAY_SIZE (at2440evb_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init at2440evb_init (void )
@@ -210,6 +212,6 @@ MACHINE_START(AT2440EVB, "AT2440EVB") .map_io = at2440evb_map_io, .init_machine = at2440evb_init, .init_irq = s3c24xx_init_irq, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-bast.c +3 -1
@@ -63,6 +63,7 @@#include <plat/cpu-freq.h> #include <plat/gpio-cfg.h> #include <linux/platform_data/asoc-s3c24xx_simtec.h> +#include <plat/samsung-time.h> #include "simtec.h" #include "common.h"
@@ -583,6 +584,7 @@ static void __init bast_map_io(void)s3c24xx_init_io (bast_iodesc,ARRAY_SIZE (bast_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (bast_uartcfgs,ARRAY_SIZE (bast_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init bast_init (void )
@@ -612,6 +614,6 @@ MACHINE_START(BAST, "Simtec-BAST") .map_io = bast_map_io, .init_irq = s3c24xx_init_irq, .init_machine = bast_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-gta02.c +3 -1
@@ -88,6 +88,7 @@#include <plat/gpio-cfg.h> #include <linux/platform_data/i2c-s3c2410.h> #include <linux/platform_data/touchscreen-s3c2410.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -507,6 +508,7 @@ static void __init gta02_map_io(void)s3c24xx_init_io (gta02_iodesc,ARRAY_SIZE (gta02_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (gta02_uartcfgs,ARRAY_SIZE (gta02_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }
@@ -596,6 +598,6 @@ MACHINE_START(NEO1973_GTA02, "GTA02") .map_io = gta02_map_io, .init_irq = s3c24xx_init_irq, .init_machine = gta02_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-h1940.c +3 -1
@@ -67,6 +67,7 @@#include <plat/pm.h> #include <linux/platform_data/mmc-s3cmci.h> #include <linux/platform_data/touchscreen-s3c2410.h> +#include <plat/samsung-time.h> #include <sound/uda1380.h>
@@ -652,6 +653,7 @@ static void __init h1940_map_io(void)s3c24xx_init_io (h1940_iodesc,ARRAY_SIZE (h1940_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (h1940_uartcfgs,ARRAY_SIZE (h1940_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* setup PM */
@@ -747,6 +749,6 @@ MACHINE_START(H1940, "IPAQ-H1940") .reserve = h1940_reserve, .init_irq = h1940_init_irq, .init_machine = h1940_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-jive.c +3 -1
@@ -55,6 +55,7 @@#include <plat/cpu.h> #include <plat/pm.h> #include <linux/platform_data/usb-s3c2410_udc.h> +#include <plat/samsung-time.h> static struct map_desc jive_iodesc[]__initdata = { };
@@ -506,6 +507,7 @@ static void __init jive_map_io(void)s3c24xx_init_io (jive_iodesc,ARRAY_SIZE (jive_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (jive_uartcfgs,ARRAY_SIZE (jive_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void jive_power_off (void )
@@ -661,6 +663,6 @@ MACHINE_START(JIVE, "JIVE") .init_irq = s3c24xx_init_irq, .map_io = jive_map_io, .init_machine = jive_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2412_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-mini2440.c +3 -1
@@ -57,6 +57,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include <sound/s3c24xx_uda134x.h>
@@ -527,6 +528,7 @@ static void __init mini2440_map_io(void)s3c24xx_init_io (mini2440_iodesc,ARRAY_SIZE (mini2440_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (mini2440_uartcfgs,ARRAY_SIZE (mini2440_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }/*
@@ -689,6 +691,6 @@ MACHINE_START(MINI2440, "MINI2440") .map_io = mini2440_map_io, .init_machine = mini2440_init, .init_irq = s3c24xx_init_irq, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-n30.c +4 -2
@@ -50,6 +50,7 @@#include <linux/platform_data/mmc-s3cmci.h> #include <plat/s3c2410.h> #include <linux/platform_data/usb-s3c2410_udc.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -536,6 +537,7 @@ static void __init n30_map_io(void)n30_hwinit ();s3c24xx_init_clocks (0 );s3c24xx_init_uarts (n30_uartcfgs,ARRAY_SIZE (n30_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }/* GPB3 is the line that controls the pull-up for the USB D+ line */
@@ -589,7 +591,7 @@ MACHINE_START(N30, "Acer-N30")Ben Dooks <[email protected]> */ .atag_offset = 0x100, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .init_machine = n30_init, .init_irq = s3c24xx_init_irq, .map_io = n30_map_io,
@@ -600,7 +602,7 @@ MACHINE_START(N35, "Acer-N35")/* Maintainer: Christer Weinigel <[email protected]> */ .atag_offset = 0x100, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .init_machine = n30_init, .init_irq = s3c24xx_init_irq, .map_io = n30_map_io,
arch/arm/mach-s3c24xx/mach-nexcoder.c +3 -1
@@ -46,6 +46,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -137,6 +138,7 @@ static void __init nexcoder_map_io(void)s3c24xx_init_io (nexcoder_iodesc,ARRAY_SIZE (nexcoder_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (nexcoder_uartcfgs,ARRAY_SIZE (nexcoder_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );nexcoder_sensorboard_init (); }
@@ -153,6 +155,6 @@ MACHINE_START(NEXCODER_2440, "NexVision - Nexcoder 2440") .map_io = nexcoder_map_io, .init_machine = nexcoder_init, .init_irq = s3c24xx_init_irq, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-osiris.c +3 -1
@@ -53,6 +53,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -386,6 +387,7 @@ static void __init osiris_map_io(void)s3c24xx_init_io (osiris_iodesc,ARRAY_SIZE (osiris_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (osiris_uartcfgs,ARRAY_SIZE (osiris_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* check for the newer revision boards with large page nand */
@@ -428,6 +430,6 @@ MACHINE_START(OSIRIS, "Simtec-OSIRIS") .map_io = osiris_map_io, .init_irq = s3c24xx_init_irq, .init_machine = osiris_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-otom.c +3 -1
@@ -37,6 +37,7 @@#include <plat/devs.h> #include <linux/platform_data/i2c-s3c2410.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -104,6 +105,7 @@ static void __init otom11_map_io(void)s3c24xx_init_io (otom11_iodesc,ARRAY_SIZE (otom11_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (otom11_uartcfgs,ARRAY_SIZE (otom11_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init otom11_init (void )
@@ -118,6 +120,6 @@ MACHINE_START(OTOM, "Nex Vision - Otom 1.1") .map_io = otom11_map_io, .init_machine = otom11_init, .init_irq = s3c24xx_init_irq, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-qt2410.c +3 -1
@@ -60,6 +60,7 @@#include <plat/devs.h> #include <plat/cpu.h> #include <plat/pm.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -304,6 +305,7 @@ static void __init qt2410_map_io(void)s3c24xx_init_io (qt2410_iodesc,ARRAY_SIZE (qt2410_iodesc));s3c24xx_init_clocks (12 *1000 *1000 );s3c24xx_init_uarts (smdk2410_uartcfgs,ARRAY_SIZE (smdk2410_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init qt2410_machine_init (void )
@@ -343,6 +345,6 @@ MACHINE_START(QT2410, "QT2410") .map_io = qt2410_map_io, .init_irq = s3c24xx_init_irq, .init_machine = qt2410_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-rx1950.c +3 -1
@@ -58,6 +58,7 @@#include <plat/pm.h> #include <plat/irq.h> #include <linux/platform_data/touchscreen-s3c2410.h> +#include <plat/samsung-time.h> #include <sound/uda1380.h>
@@ -743,6 +744,7 @@ static void __init rx1950_map_io(void)s3c24xx_init_io (rx1950_iodesc,ARRAY_SIZE (rx1950_iodesc));s3c24xx_init_clocks (16934000 );s3c24xx_init_uarts (rx1950_uartcfgs,ARRAY_SIZE (rx1950_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* setup PM */
@@ -815,6 +817,6 @@ MACHINE_START(RX1950, "HP iPAQ RX1950") .reserve = rx1950_reserve, .init_irq = s3c24xx_init_irq, .init_machine = rx1950_init_machine, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-rx3715.c +3 -1
@@ -50,6 +50,7 @@#include <plat/devs.h> #include <plat/cpu.h> #include <plat/pm.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -179,6 +180,7 @@ static void __init rx3715_map_io(void)s3c24xx_init_io (rx3715_iodesc,ARRAY_SIZE (rx3715_iodesc));s3c24xx_init_clocks (16934000 );s3c24xx_init_uarts (rx3715_uartcfgs,ARRAY_SIZE (rx3715_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }/* H1940 and RX3715 need to reserve this for suspend */
@@ -212,6 +214,6 @@ MACHINE_START(RX3715, "IPAQ-RX3715") .reserve = rx3715_reserve, .init_irq = rx3715_init_irq, .init_machine = rx3715_init_machine, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-smdk2410.c +3 -1
@@ -53,6 +53,7 @@#include <plat/cpu.h> #include <plat/common-smdk.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -101,6 +102,7 @@ static void __init smdk2410_map_io(void)s3c24xx_init_io (smdk2410_iodesc,ARRAY_SIZE (smdk2410_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (smdk2410_uartcfgs,ARRAY_SIZE (smdk2410_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init smdk2410_init (void )
@@ -117,6 +119,6 @@ MACHINE_START(SMDK2410, "SMDK2410") /* @TODO: request a new identifier and switc .map_io = smdk2410_map_io, .init_irq = s3c24xx_init_irq, .init_machine = smdk2410_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-smdk2413.c +5 -3
@@ -47,6 +47,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include <plat/common-smdk.h>
@@ -107,6 +108,7 @@ static void __init smdk2413_map_io(void)s3c24xx_init_io (smdk2413_iodesc,ARRAY_SIZE (smdk2413_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (smdk2413_uartcfgs,ARRAY_SIZE (smdk2413_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init smdk2413_machine_init (void )
@@ -133,7 +135,7 @@ MACHINE_START(S3C2413, "S3C2413") .init_irq = s3c24xx_init_irq, .map_io = smdk2413_map_io, .init_machine = smdk2413_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2412_restart,MACHINE_END
@@ -145,7 +147,7 @@ MACHINE_START(SMDK2412, "SMDK2412") .init_irq = s3c24xx_init_irq, .map_io = smdk2413_map_io, .init_machine = smdk2413_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2412_restart,MACHINE_END
@@ -157,6 +159,6 @@ MACHINE_START(SMDK2413, "SMDK2413") .init_irq = s3c24xx_init_irq, .map_io = smdk2413_map_io, .init_machine = smdk2413_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2412_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-smdk2416.c +3 -1
@@ -52,6 +52,7 @@#include <plat/sdhci.h> #include <linux/platform_data/usb-s3c2410_udc.h> #include <linux/platform_data/s3c-hsudc.h> +#include <plat/samsung-time.h> #include <plat/fb.h>
@@ -222,6 +223,7 @@ static void __init smdk2416_map_io(void)s3c24xx_init_io (smdk2416_iodesc,ARRAY_SIZE (smdk2416_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (smdk2416_uartcfgs,ARRAY_SIZE (smdk2416_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init smdk2416_machine_init (void )
@@ -254,6 +256,6 @@ MACHINE_START(SMDK2416, "SMDK2416") .init_irq = s3c24xx_init_irq, .map_io = smdk2416_map_io, .init_machine = smdk2416_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2416_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-smdk2440.c +3 -1
@@ -44,6 +44,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include <plat/common-smdk.h>
@@ -164,6 +165,7 @@ static void __init smdk2440_map_io(void)s3c24xx_init_io (smdk2440_iodesc,ARRAY_SIZE (smdk2440_iodesc));s3c24xx_init_clocks (16934400 );s3c24xx_init_uarts (smdk2440_uartcfgs,ARRAY_SIZE (smdk2440_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init smdk2440_machine_init (void )
@@ -182,6 +184,6 @@ MACHINE_START(S3C2440, "SMDK2440") .init_irq = s3c24xx_init_irq, .map_io = smdk2440_map_io, .init_machine = smdk2440_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c244x_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-smdk2443.c +3 -1
@@ -44,6 +44,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include <plat/common-smdk.h>
@@ -123,6 +124,7 @@ static void __init smdk2443_map_io(void)s3c24xx_init_io (smdk2443_iodesc,ARRAY_SIZE (smdk2443_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (smdk2443_uartcfgs,ARRAY_SIZE (smdk2443_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init smdk2443_machine_init (void )
@@ -144,6 +146,6 @@ MACHINE_START(SMDK2443, "SMDK2443") .init_irq = s3c24xx_init_irq, .map_io = smdk2443_map_io, .init_machine = smdk2443_machine_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2443_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-tct_hammer.c +3 -1
@@ -53,6 +53,7 @@#include <linux/mtd/partitions.h> #include <linux/mtd/map.h> #include <linux/mtd/physmap.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -136,6 +137,7 @@ static void __init tct_hammer_map_io(void)s3c24xx_init_io (tct_hammer_iodesc,ARRAY_SIZE (tct_hammer_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (tct_hammer_uartcfgs,ARRAY_SIZE (tct_hammer_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init tct_hammer_init (void )
@@ -149,6 +151,6 @@ MACHINE_START(TCT_HAMMER, "TCT_HAMMER") .map_io = tct_hammer_map_io, .init_irq = s3c24xx_init_irq, .init_machine = tct_hammer_init, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-vr1000.c +3 -1
@@ -50,6 +50,7 @@#include <plat/cpu.h> #include <linux/platform_data/i2c-s3c2410.h> #include <linux/platform_data/asoc-s3c24xx_simtec.h> +#include <plat/samsung-time.h> #include "simtec.h" #include "common.h"
@@ -335,6 +336,7 @@ static void __init vr1000_map_io(void)s3c24xx_init_io (vr1000_iodesc,ARRAY_SIZE (vr1000_iodesc));s3c24xx_init_clocks (0 );s3c24xx_init_uarts (vr1000_uartcfgs,ARRAY_SIZE (vr1000_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init vr1000_init (void )
@@ -357,6 +359,6 @@ MACHINE_START(VR1000, "Thorcom-VR1000") .map_io = vr1000_map_io, .init_machine = vr1000_init, .init_irq = s3c24xx_init_irq, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2410_restart,MACHINE_END
arch/arm/mach-s3c24xx/mach-vstms.c +3 -2
@@ -47,7 +47,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> - +#include <plat/samsung-time.h> static struct map_desc vstms_iodesc[]__initdata = { };
@@ -144,6 +144,7 @@ static void __init vstms_map_io(void)s3c24xx_init_io (vstms_iodesc,ARRAY_SIZE (vstms_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (vstms_uartcfgs,ARRAY_SIZE (vstms_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init vstms_init (void )
@@ -161,6 +162,6 @@ MACHINE_START(VSTMS, "VSTMS") .init_irq = s3c24xx_init_irq, .init_machine = vstms_init, .map_io = vstms_map_io, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c2412_restart,MACHINE_END
arch/arm/plat-samsung/include/plat/cpu.h +1 -1
@@ -184,7 +184,7 @@ extern void s3c24xx_init_uartdevs(char *name,struct s3c24xx_uart_resources *res, struct s3c2410_uartcfg *cfg, int no); -/* timer for 2410/2440 */ +/* timer for s5pc100 only */ struct sys_timer ;extern struct sys_timer s3c24xx_timer;
arch/arm/plat-samsung/include/plat/samsung-time.h +11 -0
@@ -30,7 +30,18 @@ struct samsung_timer_source {/* Be able to sleep for atleast 4 seconds (usually more) */ #define SAMSUNG_TIMER_MIN_RANGE 4 +#ifdef CONFIG_ARCH_S3C24XX +#define TCNT_MAX 0xffff +#define TSCALER_DIV 25 +#define TDIV 50 +#define TSIZE 16 +#else #define TCNT_MAX 0xffffffff +#define TSCALER_DIV 2 +#define TDIV 2 +#define TSIZE 32 +#endif +#define NON_PERIODIC 0#define PERIODIC 1
arch/arm/plat-samsung/samsung-time.c +6 -6
@@ -2,7 +2,7 @@* Copyright (c) 2011 Samsung Electronics Co., Ltd. * http://www.samsung.com/ * -* SAMSUNG - Common hr-timer support +* samsung - Common hr-timer support (s3c and s5p) * * 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
@@ -267,8 +267,8 @@ static void __init samsung_clockevent_init(void) tscaler =clk_get_parent (tdiv_event); -clk_set_rate (tscaler, pclk /2 ); -clk_set_rate (tdiv_event, pclk /2 ); +clk_set_rate (tscaler, pclk /TSCALER_DIV ); +clk_set_rate (tdiv_event, pclk /TDIV );clk_set_parent (tin_event, tdiv_event); clock_rate =clk_get_rate (tin_event);
@@ -336,7 +336,7 @@ static void __init samsung_clocksource_init(void) pclk =clk_get_rate (timerclk); -clk_set_rate (tdiv_source, pclk /2 ); +clk_set_rate (tdiv_source, pclk /TDIV );clk_set_parent (tin_source, tdiv_source); clock_rate =clk_get_rate (tin_source);
@@ -344,10 +344,10 @@ static void __init samsung_clocksource_init(void)samsung_time_setup (timer_source.source_id,TCNT_MAX );samsung_time_start (timer_source.source_id,PERIODIC ); -setup_sched_clock (samsung_read_sched_clock,32 , clock_rate); +setup_sched_clock (samsung_read_sched_clock,TSIZE , clock_rate);if (clocksource_mmio_init (samsung_timer_reg (),"samsung_clocksource_timer" , - clock_rate,250 ,32 , clocksource_mmio_readl_down)) + clock_rate,250 ,TSIZE , clocksource_mmio_readl_down))panic ("samsung_clocksource_timer: can't register clocksource\n" ); }
PATCH 3/3 Add samsung-time support for s3c64xx
In reply to Romain NaourThis patch replace ARCH_USES_GETTIMEOFFSET by GENERIC_CLOCKEVENTS for s3c64xx devices. It becomes possible to use the high-resolution timer and dynamic ticks.
--- arch/arm/Kconfig | 3 ++- arch/arm/mach-s3c64xx/Kconfig | 2 ++ arch/arm/mach-s3c64xx/mach-anw6410.c | 4 +++- arch/arm/mach-s3c64xx/mach-crag6410.c | 4 +++- arch/arm/mach-s3c64xx/mach-hmt.c | 4 +++- arch/arm/mach-s3c64xx/mach-mini6410.c | 4 +++- arch/arm/mach-s3c64xx/mach-ncp.c | 4 +++- arch/arm/mach-s3c64xx/mach-real6410.c | 4 +++- arch/arm/mach-s3c64xx/mach-smartq.c | 2 ++ arch/arm/mach-s3c64xx/mach-smartq5.c | 3 ++- arch/arm/mach-s3c64xx/mach-smartq7.c | 3 ++- arch/arm/mach-s3c64xx/mach-smdk6400.c | 4 +++- arch/arm/mach-s3c64xx/mach-smdk6410.c | 4 +++- 13 files changed, 34 insertions(+), 11 deletions(-)
arch/arm/Kconfig +2 -1
@@ -757,7 +757,8 @@ config ARCH_S3C64XX bool "Samsung S3C64XX" select ARCH_HAS_CPUFREQ select ARCH_REQUIRE_GPIOLIB - select ARCH_USES_GETTIMEOFFSET + select GENERIC_CLOCKEVENTS + select CLKSRC_MMIO select ARM_VIC select CLKDEV_LOOKUP select CPU_V6
arch/arm/mach-s3c64xx/Kconfig +2 -0
@@ -17,11 +17,13 @@ config PLAT_S3C64XX # Configuration options for the S3C6410 CPU config CPU_S3C6400 + select SAMSUNG_HRT bool help Enable S3C6400 CPU support config CPU_S3C6410 + select SAMSUNG_HRT bool help Enable S3C6410 CPU support
arch/arm/mach-s3c64xx/mach-anw6410.c +3 -1
@@ -51,6 +51,7 @@#include <plat/cpu.h> #include <mach/regs-gpio.h> #include <mach/regs-modem.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -209,6 +210,7 @@ static void __init anw6410_map_io(void)s3c64xx_init_io (anw6410_iodesc,ARRAY_SIZE (anw6410_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (anw6410_uartcfgs,ARRAY_SIZE (anw6410_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );anw6410_lcd_mode_set (); }
@@ -234,6 +236,6 @@ MACHINE_START(ANW6410, "A&W6410") .map_io = anw6410_map_io, .init_machine = anw6410_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-crag6410.c +3 -1
@@ -70,6 +70,7 @@#include <plat/adc.h> #include <linux/platform_data/i2c-s3c2410.h> #include <plat/pm.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -704,6 +705,7 @@ static void __init crag6410_map_io(void)s3c64xx_init_io (NULL ,0 );s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (crag6410_uartcfgs,ARRAY_SIZE (crag6410_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* LCD type and Bypass set by bootloader */ }
@@ -829,6 +831,6 @@ MACHINE_START(WLF_CRAGG_6410, "Wolfson Cragganmore 6410") .map_io = crag6410_map_io, .init_machine = crag6410_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-hmt.c +3 -1
@@ -42,6 +42,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -249,6 +250,7 @@ static void __init hmt_map_io(void)s3c64xx_init_io (hmt_iodesc,ARRAY_SIZE (hmt_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (hmt_uartcfgs,ARRAY_SIZE (hmt_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init hmt_machine_init (void )
@@ -277,6 +279,6 @@ MACHINE_START(HMT, "Airgoo-HMT") .map_io = hmt_map_io, .init_machine = hmt_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-mini6410.c +3 -1
@@ -44,6 +44,7 @@#include <video/platform_lcd.h> #include <video/samsung_fimd.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -233,6 +234,7 @@ static void __init mini6410_map_io(void)s3c64xx_init_io (NULL ,0 );s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (mini6410_uartcfgs,ARRAY_SIZE (mini6410_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* set the LCD type */ tmp =__raw_readl (S3C64XX_SPCON );
@@ -356,6 +358,6 @@ MACHINE_START(MINI6410, "MINI6410") .map_io = mini6410_map_io, .init_machine = mini6410_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-ncp.c +3 -1
@@ -44,6 +44,7 @@#include <plat/clock.h> #include <plat/devs.h> #include <plat/cpu.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -88,6 +89,7 @@ static void __init ncp_map_io(void)s3c64xx_init_io (ncp_iodesc,ARRAY_SIZE (ncp_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (ncp_uartcfgs,ARRAY_SIZE (ncp_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static void __init ncp_machine_init (void )
@@ -105,6 +107,6 @@ MACHINE_START(NCP, "NCP") .map_io = ncp_map_io, .init_machine = ncp_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-real6410.c +3 -1
@@ -45,6 +45,7 @@#include <video/platform_lcd.h> #include <video/samsung_fimd.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -212,6 +213,7 @@ static void __init real6410_map_io(void)s3c64xx_init_io (NULL ,0 );s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (real6410_uartcfgs,ARRAY_SIZE (real6410_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* set the LCD type */ tmp =__raw_readl (S3C64XX_SPCON );
@@ -335,6 +337,6 @@ MACHINE_START(REAL6410, "REAL6410") .map_io = real6410_map_io, .init_machine = real6410_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-smartq.c +2 -0
@@ -39,6 +39,7 @@#include <linux/platform_data/touchscreen-s3c2410.h> #include <video/platform_lcd.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -378,6 +379,7 @@ void __init smartq_map_io(void)s3c64xx_init_io (smartq_iodesc,ARRAY_SIZE (smartq_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (smartq_uartcfgs,ARRAY_SIZE (smartq_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );smartq_lcd_mode_set (); }
arch/arm/mach-s3c64xx/mach-smartq5.c +2 -1
@@ -29,6 +29,7 @@#include <plat/devs.h> #include <plat/fb.h> #include <plat/gpio-cfg.h> +#include <plat/samsung-time.h> #include "common.h" #include "mach-smartq.h"
@@ -157,6 +158,6 @@ MACHINE_START(SMARTQ5, "SmartQ 5") .map_io = smartq_map_io, .init_machine = smartq5_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-smartq7.c +2 -1
@@ -29,6 +29,7 @@#include <plat/devs.h> #include <plat/fb.h> #include <plat/gpio-cfg.h> +#include <plat/samsung-time.h> #include "common.h" #include "mach-smartq.h"
@@ -173,6 +174,6 @@ MACHINE_START(SMARTQ7, "SmartQ 7") .map_io = smartq_map_io, .init_machine = smartq7_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-smdk6400.c +3 -1
@@ -36,6 +36,7 @@#include <plat/devs.h> #include <plat/cpu.h> #include <linux/platform_data/i2c-s3c2410.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -67,6 +68,7 @@ static void __init smdk6400_map_io(void)s3c64xx_init_io (smdk6400_iodesc,ARRAY_SIZE (smdk6400_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (smdk6400_uartcfgs,ARRAY_SIZE (smdk6400_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 ); }static struct platform_device *smdk6400_devices[]__initdata = {
@@ -94,6 +96,6 @@ MACHINE_START(SMDK6400, "SMDK6400") .map_io = smdk6400_map_io, .init_machine = smdk6400_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END
arch/arm/mach-s3c64xx/mach-smdk6410.c +3 -1
@@ -73,6 +73,7 @@#include <linux/platform_data/touchscreen-s3c2410.h> #include <plat/keypad.h> #include <plat/backlight.h> +#include <plat/samsung-time.h> #include "common.h"
@@ -636,6 +637,7 @@ static void __init smdk6410_map_io(void)s3c64xx_init_io (smdk6410_iodesc,ARRAY_SIZE (smdk6410_iodesc));s3c24xx_init_clocks (12000000 );s3c24xx_init_uarts (smdk6410_uartcfgs,ARRAY_SIZE (smdk6410_uartcfgs)); +samsung_set_timer_source (SAMSUNG_PWM3 ,SAMSUNG_PWM4 );/* set the LCD type */
@@ -705,6 +707,6 @@ MACHINE_START(SMDK6410, "SMDK6410") .map_io = smdk6410_map_io, .init_machine = smdk6410_machine_init, .init_late = s3c64xx_init_late, - .timer = &s3c24xx_timer, + .timer = &samsung_timer, .restart = s3c64xx_restart,MACHINE_END