From mboxrd@z Thu Jan 1 00:00:00 1970 Return-path: Received: from mail-lb0-x231.google.com ([2a00:1450:4010:c04::231]) by merlin.infradead.org with esmtps (Exim 4.80.1 #2 (Red Hat Linux)) id 1VDouP-0004ds-UF for barebox@lists.infradead.org; Mon, 26 Aug 2013 05:00:11 +0000 Received: by mail-lb0-f177.google.com with SMTP id p5so1030751lbi.8 for ; Sun, 25 Aug 2013 21:59:47 -0700 (PDT) From: Antony Pavlov Date: Mon, 26 Aug 2013 08:57:15 +0400 Message-Id: <1377493037-2229-7-git-send-email-antonynpavlov@gmail.com> In-Reply-To: <1377493037-2229-1-git-send-email-antonynpavlov@gmail.com> References: <1377493037-2229-1-git-send-email-antonynpavlov@gmail.com> List-Id: List-Unsubscribe: , List-Archive: List-Post: List-Help: List-Subscribe: , MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Sender: "barebox" Errors-To: barebox-bounces+u.kleine-koenig=pengutronix.de@lists.infradead.org Subject: [RFC 6/8] ARM: DIGIC: add csrc-dummy To: barebox@lists.infradead.org The clocksource csrc-timer driver that uses DIGIC hardware TIMER2 perfectrly works on Canon A1100, but does not works on Canon EOS 600D. IMHO we need additional timer initialisation. This patch introduces a quick-and-dirty termporary solution for this situation: a clocksource driver that does not use any hardware at all. Also this driver is very handy for running barebox on Magic Lantern EOS qemu-based emulator as the emulator does not realize timer counter register at all! Signed-off-by: Antony Pavlov --- arch/arm/mach-digic/Kconfig | 4 ++++ arch/arm/mach-digic/Makefile | 1 + arch/arm/mach-digic/csrc-dummy.c | 49 ++++++++++++++++++++++++++++++++++++++++ 3 files changed, 54 insertions(+) create mode 100644 arch/arm/mach-digic/csrc-dummy.c diff --git a/arch/arm/mach-digic/Kconfig b/arch/arm/mach-digic/Kconfig index 557cad4..b3de2d9 100644 --- a/arch/arm/mach-digic/Kconfig +++ b/arch/arm/mach-digic/Kconfig @@ -13,7 +13,11 @@ config ARCH_TEXT_BASE hex default 0x00001900 if MACH_CANON_A1100 + config DIGIC_CSRC_TIMER bool +config DIGIC_CSRC_DUMMY + bool + endif diff --git a/arch/arm/mach-digic/Makefile b/arch/arm/mach-digic/Makefile index 1d7cb72..31e5ac1 100644 --- a/arch/arm/mach-digic/Makefile +++ b/arch/arm/mach-digic/Makefile @@ -1,2 +1,3 @@ obj-y += core.o obj-$(CONFIG_DIGIC_CSRC_TIMER) += csrc-timer.o +obj-$(CONFIG_DIGIC_CSRC_DUMMY) += csrc-dummy.o diff --git a/arch/arm/mach-digic/csrc-dummy.c b/arch/arm/mach-digic/csrc-dummy.c new file mode 100644 index 0000000..68c68a3 --- /dev/null +++ b/arch/arm/mach-digic/csrc-dummy.c @@ -0,0 +1,49 @@ +/* + * Copyright (C) 2013 Antony Pavlov + * + * This file is part of barebox. + * See file CREDITS for list of people who contributed to this project. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 + * as published by the Free Software Foundation. + * + * 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. + * + */ + +#include +#include + +#include + +static uint64_t dummy_counter; + +static uint64_t dummy_cs_read(void) +{ + dummy_counter += 2000; + return dummy_counter; +} + +static struct clocksource dummy_cs = { + .read = dummy_cs_read, + .mask = CLOCKSOURCE_MASK(32), +}; + +static int clocksource_init(void) +{ + dummy_counter = 0; + + clocks_calc_mult_shift(&dummy_cs.mult, &dummy_cs.shift, + 100000000, NSEC_PER_SEC, 10); + + printf("clocksource_init: mult=%08x, shift=%08x\n", + dummy_cs.mult, dummy_cs.shift); + init_clock(&dummy_cs); + + return 0; +} +core_initcall(clocksource_init); -- 1.8.4.rc3 _______________________________________________ barebox mailing list barebox@lists.infradead.org http://lists.infradead.org/mailman/listinfo/barebox