Didenko Sergey wrote:
>
>
> 2009/10/8 Gilles Chanteperdrix <[email protected]
> <mailto:[email protected]>>
>
> Didenko Sergey wrote:
> > Dear Xenomai Experts,
> >
> > So far I did not progress too much.
> >
> > What I have now is that patched Linux is starting to boot as original
> > kernel and it hangs right after line
> > [42949373.240000] ata1: SATA max UDMA/133 irq 27
> > As you can see after line
> >
> > [42949373.230000] ?^<6>Xenomai: real-time nucleus v2.4.9.1 (Big Bad
> > Moon) loaded.
> >
> > System does not go to timer_interrupt() function any more.
>
> That is expected. Once Xenomai runs, it takes over the timer interrupt.
>
> >
> > What I'm worring about is that the system has 2 timers, one is
> > free-running with disabled interrupts, second one is interrupt-driven
> > clockevent timer.
>
> No problem. Use the clockevent timer for hardware timer, use the
> free-running counter for tsc emulation.
>
> >
> > =========================== Code - Start
> > (...)
> > =========================== Code - End
> >
> > According to HOWTO Xenomai needs free-running counter, in my case
> it is
> > Timer 0, but all functions are configured to work with Timer 1,
> which is
> > not free running.
> >
> > What would you suggest to do?
>
> No, the howto does not say that you need a free-running counter. It
> shows the example of a free-running counter and tell you to look at the
> integrator or s3cxxxx code if you want to know how to implement the
> I-pipe support for a decrementer. The reason being that I wrote the
> howto, and I never had to work with a decrementer.
>
>
> If you never worked with decrementer, I do not want to use it if there
> is any other way...
> For example can I:
> - Enable interrupts for free-running Timer0?
> - Add one more timer with proper functionality for Xenomai (system has 2
> more timers which are not initialized) ?
I do not know the details of your architecture, only you know that. But
if your architecture only supports a decrementer, you will have to use
the decrementer. You will find this kind of details in the processor
datasheet, and then you will know if you have a choice.
Also note that what makes the implementation of the I-pipe support a bit
complicated on integrator and S3Cxxx is that the tsc emulation is based
on the decrementer. But if you have have a decrementer and a
free-running counter, you can use the free-running counter for the tsc
emulation, and the decrementer for the timer implementation. The omap3
I-pipe support works that way for instance.
>
> If you really want us to help you should show us the code that you
> added, not the code that we can already find in the linux kernel
> sources.
>
>
> Of course I really want...
>
> The code I added is under XENOMAI_SUPPORT_DSV definition
Bad idea. You should follow the howto and only use CONFIG_IPIPE. This
way, you can select the I-pipe support by enabling the option in the
kernel configuration. Besides, calling the XENOMAI_somehting is a bit of
a misnomer, since what you are implementing is the I-pipe support, not
xenomai support.
> /*
> * Program the hardware timer to trig an interrupt in 'delay' hardware
> timer ticks.
> */
> void __ipipe_mach_set_dec(unsigned long delay)
> {
> u32 u;
>
> XEN_PRINT("-")
>
> if (delay > MIN_OSCR_DELTA) {
Please use define names which are meaningful for your architecture, do
not reuse the PXA define names.
> unsigned long flags;
>
> local_irq_save(flags);
>
> // OSCR //OSMR0
> writel(delay + readl(TIMER1_VAL), TIMER1_RELOAD);
As discussed earlier, this looks wrong if your hardware timer is based
on a decrementer.
> static irqreturn_t orion_timer_interrupt(int irq, void *dev_id)
> {
> /*
> * ACK timer interrupt
> */
> writel(BRIDGE_INT_TIMER1_CLR, BRIDGE_CAUSE);
This is wrong. When I-pipe is enabled, this acknowledgement is done in
the ipipe_mach_acktimer function, and should no longer be done in the
timer interrupt. Look at pxa_timer_interrupt implementation in the howto.
> BTW, how can I know how much the MIN_OSCR_DELTA value should be for MV
> 88F6290 platfrom?
As I already told you MIN_OSCR_DELTA is called that way because on PXA,
the hardware timer is based on a register called OSCR. You should try
and find a name meaningful for your architecture. Anyway, this value
should be documented in the datasheet of your processor.
--
Gilles
_______________________________________________
Xenomai-help mailing list
[email protected]
https://mail.gna.org/listinfo/xenomai-help