diff mbox series

rtc: goldfish: Enable interrupt in set_alarm() when necessary

Message ID 1592654683-31314-1-git-send-email-chenhc@lemote.com
State New
Headers show
Series rtc: goldfish: Enable interrupt in set_alarm() when necessary | expand

Commit Message

Huacai Chen June 20, 2020, 12:04 p.m. UTC
When use goldfish rtc, the "hwclock" command fails with "select() to
/dev/rtc to wait for clock tick timed out". This is because "hwclock"
need the set_alarm() hook to enable interrupt when alrm->enabled is
true. This operation is missing in goldfish rtc (but other rtc drivers,
such as cmos rtc, enable interrupt here), so add it.

Signed-off-by: Huacai Chen <chenhc@lemote.com>
Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
---
 drivers/rtc/rtc-goldfish.c | 1 +
 1 file changed, 1 insertion(+)

Comments

Huacai Chen July 3, 2020, 3 a.m. UTC | #1
Ping?

On Sat, Jun 20, 2020 at 8:03 PM Huacai Chen <chenhc@lemote.com> wrote:
>
> When use goldfish rtc, the "hwclock" command fails with "select() to
> /dev/rtc to wait for clock tick timed out". This is because "hwclock"
> need the set_alarm() hook to enable interrupt when alrm->enabled is
> true. This operation is missing in goldfish rtc (but other rtc drivers,
> such as cmos rtc, enable interrupt here), so add it.
>
> Signed-off-by: Huacai Chen <chenhc@lemote.com>
> Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> ---
>  drivers/rtc/rtc-goldfish.c | 1 +
>  1 file changed, 1 insertion(+)
>
> diff --git a/drivers/rtc/rtc-goldfish.c b/drivers/rtc/rtc-goldfish.c
> index 1a3420e..d5083b0 100644
> --- a/drivers/rtc/rtc-goldfish.c
> +++ b/drivers/rtc/rtc-goldfish.c
> @@ -73,6 +73,7 @@ static int goldfish_rtc_set_alarm(struct device *dev,
>                 rtc_alarm64 = rtc_tm_to_time64(&alrm->time) * NSEC_PER_SEC;
>                 writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
>                 writel(rtc_alarm64, base + TIMER_ALARM_LOW);
> +               writel(1, base + TIMER_IRQ_ENABLED);
>         } else {
>                 /*
>                  * if this function was called with enabled=0
> --
> 2.7.0
>
Huacai Chen July 9, 2020, 9:39 a.m. UTC | #2
Hi, Midorag,

Maybe miodrag.dinic@syrmia.com is your new email address? Please
review this patch.
And Alessandro, Alexandre, could you please help to review this patch?

Huacai

On Fri, Jul 3, 2020 at 11:00 AM Huacai Chen <chenhuacai@gmail.com> wrote:
>
> Ping?
>
> On Sat, Jun 20, 2020 at 8:03 PM Huacai Chen <chenhc@lemote.com> wrote:
> >
> > When use goldfish rtc, the "hwclock" command fails with "select() to
> > /dev/rtc to wait for clock tick timed out". This is because "hwclock"
> > need the set_alarm() hook to enable interrupt when alrm->enabled is
> > true. This operation is missing in goldfish rtc (but other rtc drivers,
> > such as cmos rtc, enable interrupt here), so add it.
> >
> > Signed-off-by: Huacai Chen <chenhc@lemote.com>
> > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> > ---
> >  drivers/rtc/rtc-goldfish.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/rtc/rtc-goldfish.c b/drivers/rtc/rtc-goldfish.c
> > index 1a3420e..d5083b0 100644
> > --- a/drivers/rtc/rtc-goldfish.c
> > +++ b/drivers/rtc/rtc-goldfish.c
> > @@ -73,6 +73,7 @@ static int goldfish_rtc_set_alarm(struct device *dev,
> >                 rtc_alarm64 = rtc_tm_to_time64(&alrm->time) * NSEC_PER_SEC;
> >                 writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
> >                 writel(rtc_alarm64, base + TIMER_ALARM_LOW);
> > +               writel(1, base + TIMER_IRQ_ENABLED);
> >         } else {
> >                 /*
> >                  * if this function was called with enabled=0
> > --
> > 2.7.0
> >
Miodrag Dinic July 9, 2020, 10:30 a.m. UTC | #3
Hi Huacai,

Yes, this is my new address. However I haven't been involved in kernel/QEMU community for a while now.
The patch itself looks OK to me, if you made sure the RTC device emulation on the QEMU side is now also inspecting the TIMER_IRQ_ENABLED setting.

OK I see now that you have committed upstream to QEMU the Goldfish RTC device, good job with that.
https://github.com/qemu/qemu/blame/971b2a1e5b1a8cc8f597ac5d7016908f9fa880de/hw/rtc/goldfish_rtc.c

You can add my "reviewed-by".

Glad to see that the "goldfish" project is still alive out there.

Kind regards,
Miodrag

-----Original Message-----
From: Huacai Chen <chenhuacai@gmail.com> 
Sent: Thursday, July 9, 2020 11:40 AM
To: Alessandro Zummo <a.zummo@towertech.it>; Alexandre Belloni <alexandre.belloni@bootlin.com>; Miodrag Dinic <Miodrag.Dinic@syrmia.com>
Cc: linux-rtc@vger.kernel.org; Fuxin Zhang <zhangfx@lemote.com>; Jiaxun Yang <jiaxun.yang@flygoat.com>
Subject: Re: [PATCH] rtc: goldfish: Enable interrupt in set_alarm() when necessary

Hi, Midorag,

Maybe miodrag.dinic@syrmia.com is your new email address? Please review this patch.
And Alessandro, Alexandre, could you please help to review this patch?

Huacai

On Fri, Jul 3, 2020 at 11:00 AM Huacai Chen <chenhuacai@gmail.com> wrote:
>
> Ping?
>
> On Sat, Jun 20, 2020 at 8:03 PM Huacai Chen <chenhc@lemote.com> wrote:
> >
> > When use goldfish rtc, the "hwclock" command fails with "select() to 
> > /dev/rtc to wait for clock tick timed out". This is because "hwclock"
> > need the set_alarm() hook to enable interrupt when alrm->enabled is 
> > true. This operation is missing in goldfish rtc (but other rtc 
> > drivers, such as cmos rtc, enable interrupt here), so add it.
> >
> > Signed-off-by: Huacai Chen <chenhc@lemote.com>
> > Signed-off-by: Jiaxun Yang <jiaxun.yang@flygoat.com>
> > ---
> >  drivers/rtc/rtc-goldfish.c | 1 +
> >  1 file changed, 1 insertion(+)
> >
> > diff --git a/drivers/rtc/rtc-goldfish.c b/drivers/rtc/rtc-goldfish.c 
> > index 1a3420e..d5083b0 100644
> > --- a/drivers/rtc/rtc-goldfish.c
> > +++ b/drivers/rtc/rtc-goldfish.c
> > @@ -73,6 +73,7 @@ static int goldfish_rtc_set_alarm(struct device *dev,
> >                 rtc_alarm64 = rtc_tm_to_time64(&alrm->time) * NSEC_PER_SEC;
> >                 writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
> >                 writel(rtc_alarm64, base + TIMER_ALARM_LOW);
> > +               writel(1, base + TIMER_IRQ_ENABLED);
> >         } else {
> >                 /*
> >                  * if this function was called with enabled=0
> > --
> > 2.7.0
> >
diff mbox series

Patch

diff --git a/drivers/rtc/rtc-goldfish.c b/drivers/rtc/rtc-goldfish.c
index 1a3420e..d5083b0 100644
--- a/drivers/rtc/rtc-goldfish.c
+++ b/drivers/rtc/rtc-goldfish.c
@@ -73,6 +73,7 @@  static int goldfish_rtc_set_alarm(struct device *dev,
 		rtc_alarm64 = rtc_tm_to_time64(&alrm->time) * NSEC_PER_SEC;
 		writel((rtc_alarm64 >> 32), base + TIMER_ALARM_HIGH);
 		writel(rtc_alarm64, base + TIMER_ALARM_LOW);
+		writel(1, base + TIMER_IRQ_ENABLED);
 	} else {
 		/*
 		 * if this function was called with enabled=0