mail archive of the barebox mailing list
 help / color / mirror / Atom feed
* [JUST RFC] add hardware independent clock source
@ 2013-12-15 15:02 Antony Pavlov
  2013-12-15 15:02 ` [JUST RFC] ARM: DIGIC: add csrc-dummy Antony Pavlov
  0 siblings, 1 reply; 11+ messages in thread
From: Antony Pavlov @ 2013-12-15 15:02 UTC (permalink / raw)
  To: barebox

Then porting barebox to a new SoC/board it is possible
a situation then clocksource is broken or not yet present.
In the broken/absent clocksource situation serial barebox
console can't work correctly. Working on barebox for a DIGIC
chip I have faced this situation. To overcome the problem
I introduced the software-only clocksource.

The sample of hardware independent clock source is
in the following patch:

[JUST RFC] ARM: DIGIC: add csrc-dummy

Please comment on this approach!
May be there is some ready receipt for broken clocksource case?

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 15:02 [JUST RFC] add hardware independent clock source Antony Pavlov
@ 2013-12-15 15:02 ` Antony Pavlov
  2013-12-15 18:08   ` Alexander Shiyan
                     ` (2 more replies)
  0 siblings, 3 replies; 11+ messages in thread
From: Antony Pavlov @ 2013-12-15 15:02 UTC (permalink / raw)
  To: barebox

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 <antonynpavlov@gmail.com>
---
 arch/arm/mach-digic/Kconfig      |  3 +++
 arch/arm/mach-digic/Makefile     |  1 +
 arch/arm/mach-digic/csrc-dummy.c | 49 ++++++++++++++++++++++++++++++++++++++++
 3 files changed, 53 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..d0524bc 100644
--- a/arch/arm/mach-digic/Kconfig
+++ b/arch/arm/mach-digic/Kconfig
@@ -16,4 +16,7 @@ config ARCH_TEXT_BASE
 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 <antonynpavlov@gmail.com>
+ *
+ * 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 <init.h>
+#include <clock.h>
+
+#include <stdio.h>
+
+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.5


_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 15:02 ` [JUST RFC] ARM: DIGIC: add csrc-dummy Antony Pavlov
@ 2013-12-15 18:08   ` Alexander Shiyan
  2013-12-15 18:52     ` Antony Pavlov
  2013-12-15 19:30   ` Alexander Aring
  2013-12-16  7:41   ` Sascha Hauer
  2 siblings, 1 reply; 11+ messages in thread
From: Alexander Shiyan @ 2013-12-15 18:08 UTC (permalink / raw)
  To: Antony Pavlov; +Cc: barebox

> 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 <antonynpavlov@gmail.com>
...
> +	printf("clocksource_init: mult=%08x, shift=%08x\n",
> +			dummy_cs.mult, dummy_cs.shift);

No reason to spam into console. Put this into pr_debug.

---
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 18:52     ` Antony Pavlov
@ 2013-12-15 18:50       ` Alexander Shiyan
  0 siblings, 0 replies; 11+ messages in thread
From: Alexander Shiyan @ 2013-12-15 18:50 UTC (permalink / raw)
  To: Antony Pavlov; +Cc: barebox

> On Sun, 15 Dec 2013 22:08:00 +0400
> Alexander Shiyan <shc_work@mail.ru> wrote:
> 
> > > 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 <antonynpavlov@gmail.com>
> > ...
> > > +	printf("clocksource_init: mult=%08x, shift=%08x\n",
> > > +			dummy_cs.mult, dummy_cs.shift);
> > 
> > No reason to spam into console. Put this into pr_debug.
> > 
> 
> Of cause there is no reason to spam into console!
> 
> This patch is mailed only for illustration of the concept,
> it even can't be applyed.
> 
> Have you any comments on the concept itself?

I am not a guru, sorry :)

---
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 18:08   ` Alexander Shiyan
@ 2013-12-15 18:52     ` Antony Pavlov
  2013-12-15 18:50       ` Alexander Shiyan
  0 siblings, 1 reply; 11+ messages in thread
From: Antony Pavlov @ 2013-12-15 18:52 UTC (permalink / raw)
  To: Alexander Shiyan; +Cc: barebox

On Sun, 15 Dec 2013 22:08:00 +0400
Alexander Shiyan <shc_work@mail.ru> wrote:

> > 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 <antonynpavlov@gmail.com>
> ...
> > +	printf("clocksource_init: mult=%08x, shift=%08x\n",
> > +			dummy_cs.mult, dummy_cs.shift);
> 
> No reason to spam into console. Put this into pr_debug.
> 

Of cause there is no reason to spam into console!

This patch is mailed only for illustration of the concept,
it even can't be applyed.

Have you any comments on the concept itself?

-- 
Best regards,
  Antony Pavlov

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 15:02 ` [JUST RFC] ARM: DIGIC: add csrc-dummy Antony Pavlov
  2013-12-15 18:08   ` Alexander Shiyan
@ 2013-12-15 19:30   ` Alexander Aring
  2013-12-15 20:40     ` Antony Pavlov
  2013-12-16  7:41   ` Sascha Hauer
  2 siblings, 1 reply; 11+ messages in thread
From: Alexander Aring @ 2013-12-15 19:30 UTC (permalink / raw)
  To: Antony Pavlov; +Cc: barebox

Hi Antony,

On Sun, Dec 15, 2013 at 07:02:05PM +0400, Antony Pavlov wrote:
> 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 <antonynpavlov@gmail.com>
> ---
>  arch/arm/mach-digic/Kconfig      |  3 +++
>  arch/arm/mach-digic/Makefile     |  1 +
>  arch/arm/mach-digic/csrc-dummy.c | 49 ++++++++++++++++++++++++++++++++++++++++
>  3 files changed, 53 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..d0524bc 100644
> --- a/arch/arm/mach-digic/Kconfig
> +++ b/arch/arm/mach-digic/Kconfig
> @@ -16,4 +16,7 @@ config ARCH_TEXT_BASE
>  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 <antonynpavlov@gmail.com>
> + *
> + * 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 <init.h>
> +#include <clock.h>
> +
> +#include <stdio.h>
> +
> +static uint64_t dummy_counter;
> +
> +static uint64_t dummy_cs_read(void)
> +{
> +	dummy_counter += 2000;
> +	return dummy_counter;
> +}
> +
So if I understand it right, you assume here that the instructions to
read this value will take 0.02 ms?

- Alex

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 19:30   ` Alexander Aring
@ 2013-12-15 20:40     ` Antony Pavlov
  2013-12-15 21:17       ` Alexander Aring
  0 siblings, 1 reply; 11+ messages in thread
From: Antony Pavlov @ 2013-12-15 20:40 UTC (permalink / raw)
  To: Alexander Aring; +Cc: barebox

On Sun, 15 Dec 2013 20:30:16 +0100
Alexander Aring <alex.aring@gmail.com> wrote:

> Hi Antony,
> 
> On Sun, Dec 15, 2013 at 07:02:05PM +0400, Antony Pavlov wrote:
> > 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 <antonynpavlov@gmail.com>
> > ---
> >  arch/arm/mach-digic/Kconfig      |  3 +++
> >  arch/arm/mach-digic/Makefile     |  1 +
> >  arch/arm/mach-digic/csrc-dummy.c | 49 ++++++++++++++++++++++++++++++++++++++++
> >  3 files changed, 53 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..d0524bc 100644
> > --- a/arch/arm/mach-digic/Kconfig
> > +++ b/arch/arm/mach-digic/Kconfig
> > @@ -16,4 +16,7 @@ config ARCH_TEXT_BASE
> >  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 <antonynpavlov@gmail.com>
> > + *
> > + * 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 <init.h>
> > +#include <clock.h>
> > +
> > +#include <stdio.h>
> > +
> > +static uint64_t dummy_counter;
> > +
> > +static uint64_t dummy_cs_read(void)
> > +{
> > +	dummy_counter += 2000;
> > +	return dummy_counter;
> > +}
> > +
> So if I understand it right, you assume here that the instructions to
> read this value will take 0.02 ms?

It is not quite. I don't assume initially the time to read this value.
This value ("2000") was a suboptimal value for __specific board__
under the __specific circumstances__.
I have selected this value after several experiments.

-- 
Best regards,
  Antony Pavlov

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 20:40     ` Antony Pavlov
@ 2013-12-15 21:17       ` Alexander Aring
  0 siblings, 0 replies; 11+ messages in thread
From: Alexander Aring @ 2013-12-15 21:17 UTC (permalink / raw)
  To: Antony Pavlov; +Cc: barebox

On Mon, Dec 16, 2013 at 12:40:13AM +0400, Antony Pavlov wrote:
> On Sun, 15 Dec 2013 20:30:16 +0100
> Alexander Aring <alex.aring@gmail.com> wrote:
> 
> > Hi Antony,
> > 
> > On Sun, Dec 15, 2013 at 07:02:05PM +0400, Antony Pavlov wrote:
> > > 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 <antonynpavlov@gmail.com>
> > > ---
> > >  arch/arm/mach-digic/Kconfig      |  3 +++
> > >  arch/arm/mach-digic/Makefile     |  1 +
> > >  arch/arm/mach-digic/csrc-dummy.c | 49 ++++++++++++++++++++++++++++++++++++++++
> > >  3 files changed, 53 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..d0524bc 100644
> > > --- a/arch/arm/mach-digic/Kconfig
> > > +++ b/arch/arm/mach-digic/Kconfig
> > > @@ -16,4 +16,7 @@ config ARCH_TEXT_BASE
> > >  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 <antonynpavlov@gmail.com>
> > > + *
> > > + * 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 <init.h>
> > > +#include <clock.h>
> > > +
> > > +#include <stdio.h>
> > > +
> > > +static uint64_t dummy_counter;
> > > +
> > > +static uint64_t dummy_cs_read(void)
> > > +{
> > > +	dummy_counter += 2000;
> > > +	return dummy_counter;
> > > +}
> > > +
> > So if I understand it right, you assume here that the instructions to
> > read this value will take 0.02 ms?
> 
> It is not quite. I don't assume initially the time to read this value.
> This value ("2000") was a suboptimal value for __specific board__
> under the __specific circumstances__.
> I have selected this value after several experiments.
>

mhh, I am thinking maybe about some calculation with clock ticks. Maybe
some "nop" operations and inline assembler. In the processor datasheet
should stand how long one "nop" instruction will take. Then you can
increase the dummy_counter intervall and waits longer, that should
deincrease the amount of failure (I think).

The current solution has the smallest clock resolution (because you
don't make any "nops" instructions).

It isn't a quite solution as well and I don't know if this still works
with your qemu emulation. It's just a notice for an alternative and an
idea. It's the same idea like you already have...


Another question:
How do the original firmware do this? I think there are some date/time
information. Is there any additional hardware?

- Alex

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-15 15:02 ` [JUST RFC] ARM: DIGIC: add csrc-dummy Antony Pavlov
  2013-12-15 18:08   ` Alexander Shiyan
  2013-12-15 19:30   ` Alexander Aring
@ 2013-12-16  7:41   ` Sascha Hauer
  2013-12-16  7:46     ` Alexander Aring
  2013-12-16  7:48     ` Alexander Shiyan
  2 siblings, 2 replies; 11+ messages in thread
From: Sascha Hauer @ 2013-12-16  7:41 UTC (permalink / raw)
  To: Antony Pavlov; +Cc: barebox

On Sun, Dec 15, 2013 at 07:02:05PM +0400, Antony Pavlov wrote:
> 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 <antonynpavlov@gmail.com>
> ---
> +static uint64_t dummy_cs_read(void)
> +{
> +	dummy_counter += 2000;
> +	return dummy_counter;
> +}

I also played with the same approach. In my case it was more a fallback
when the initialization order was wrong so that the time functions were
used before the real clocksource was initialized. Without it time never
advanced and every udelay() locked up the system (or it crashed because
we didn't check for the clocksource being NULL, can't remember).

Maybe it would be possible to add this clocksource unconditionally on
every build, but let a real clocksource take over.

To do this and not silently fall back to a dummy console I suggest a:

static uint64_t dummy_cs_read(void)
{
	static int first;

	if (!first) {
		pr_warn("Warning: Using dummy clocksource\n");
		first = 0;
	}

	dummy_counter += 2000;
	return dummy_counter;
}

Sascha

-- 
Pengutronix e.K.                           |                             |
Industrial Linux Solutions                 | http://www.pengutronix.de/  |
Peiner Str. 6-8, 31137 Hildesheim, Germany | Phone: +49-5121-206917-0    |
Amtsgericht Hildesheim, HRA 2686           | Fax:   +49-5121-206917-5555 |

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-16  7:41   ` Sascha Hauer
@ 2013-12-16  7:46     ` Alexander Aring
  2013-12-16  7:48     ` Alexander Shiyan
  1 sibling, 0 replies; 11+ messages in thread
From: Alexander Aring @ 2013-12-16  7:46 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

On Mon, Dec 16, 2013 at 08:41:59AM +0100, Sascha Hauer wrote:
> On Sun, Dec 15, 2013 at 07:02:05PM +0400, Antony Pavlov wrote:
> > 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 <antonynpavlov@gmail.com>
> > ---
> > +static uint64_t dummy_cs_read(void)
> > +{
> > +	dummy_counter += 2000;
> > +	return dummy_counter;
> > +}
> 
> I also played with the same approach. In my case it was more a fallback
> when the initialization order was wrong so that the time functions were
> used before the real clocksource was initialized. Without it time never
> advanced and every udelay() locked up the system (or it crashed because
> we didn't check for the clocksource being NULL, can't remember).
> 
> Maybe it would be possible to add this clocksource unconditionally on
> every build, but let a real clocksource take over.
> 
> To do this and not silently fall back to a dummy console I suggest a:
> 
> static uint64_t dummy_cs_read(void)
> {
> 	static int first;
> 
> 	if (!first) {
> 		pr_warn("Warning: Using dummy clocksource\n");
> 		first = 0;

first = 1;

:-)

- Alex

_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

* Re: [JUST RFC] ARM: DIGIC: add csrc-dummy
  2013-12-16  7:41   ` Sascha Hauer
  2013-12-16  7:46     ` Alexander Aring
@ 2013-12-16  7:48     ` Alexander Shiyan
  1 sibling, 0 replies; 11+ messages in thread
From: Alexander Shiyan @ 2013-12-16  7:48 UTC (permalink / raw)
  To: Sascha Hauer; +Cc: barebox

> On Sun, Dec 15, 2013 at 07:02:05PM +0400, Antony Pavlov wrote:
> > 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!
...
> I also played with the same approach. In my case it was more a fallback
> when the initialization order was wrong so that the time functions were
> used before the real clocksource was initialized. Without it time never
> advanced and every udelay() locked up the system (or it crashed because
> we didn't check for the clocksource being NULL, can't remember).
> 
> Maybe it would be possible to add this clocksource unconditionally on
> every build, but let a real clocksource take over.
> 
> To do this and not silently fall back to a dummy console I suggest a:
> 
> static uint64_t dummy_cs_read(void)
> {
> 	static int first;
> 
> 	if (!first) {
> 		pr_warn("Warning: Using dummy clocksource\n");
> 		first = 0;

first =1;

---
_______________________________________________
barebox mailing list
barebox@lists.infradead.org
http://lists.infradead.org/mailman/listinfo/barebox

^ permalink raw reply	[flat|nested] 11+ messages in thread

end of thread, other threads:[~2013-12-16  7:49 UTC | newest]

Thread overview: 11+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2013-12-15 15:02 [JUST RFC] add hardware independent clock source Antony Pavlov
2013-12-15 15:02 ` [JUST RFC] ARM: DIGIC: add csrc-dummy Antony Pavlov
2013-12-15 18:08   ` Alexander Shiyan
2013-12-15 18:52     ` Antony Pavlov
2013-12-15 18:50       ` Alexander Shiyan
2013-12-15 19:30   ` Alexander Aring
2013-12-15 20:40     ` Antony Pavlov
2013-12-15 21:17       ` Alexander Aring
2013-12-16  7:41   ` Sascha Hauer
2013-12-16  7:46     ` Alexander Aring
2013-12-16  7:48     ` Alexander Shiyan

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox