* [PATCH v2] hw/rtc/pl031: Send RTC_CHANGE QMP event
@ 2021-09-20 12:25 Eric Auger
2021-09-23 13:29 ` Peter Maydell
0 siblings, 1 reply; 5+ messages in thread
From: Eric Auger @ 2021-09-20 12:25 UTC (permalink / raw)
To: eric.auger.pro, eric.auger, peter.maydell, pbonzini, qemu-arm,
qemu-devel
Cc: drjones, gshan
The PL031 currently is not able to report guest RTC change to the QMP
monitor as opposed to mc146818 or spapr RTCs. This patch adds the call
to qapi_event_send_rtc_change() when the Load Register is written. The
value which is reported corresponds to the difference between the guest
reference time and the reference time kept in softmmu/rtc.c.
For instance adding 20s to the guest RTC value will report 20. Adding
an extra 20s to the guest RTC value will report 20 + 20 = 40.
The inclusion of qapi/qapi-types-misc-target.h in hw/rtl/pl031.c
require to compile the PL031 with specific_ss.add() to avoid
./qapi/qapi-types-misc-target.h:18:13: error: attempt to use poisoned
"TARGET_<ARCH>".
Signed-off-by: Eric Auger <eric.auger@redhat.com>
Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
---
v1 -> v2:
- Use Peter's implementation and remove subsection
Tested with the following script run on guest:
#!/bin/sh
old=$(hwclock --show | cut -f1-7 -d' ')
oldabs=$(date +%s -d "$old")
newabs=$(expr $oldabs + $1)
new=$(date -d @"$newabs")
echo Old: $oldabs $old
echo New: $newabs $new
hwclock --set --date "$new"
and compared with x86 behavior.
---
hw/rtc/meson.build | 2 +-
hw/rtc/pl031.c | 10 +++++++++-
2 files changed, 10 insertions(+), 2 deletions(-)
diff --git a/hw/rtc/meson.build b/hw/rtc/meson.build
index 7cecdee5ddb..8fd8d8f9a71 100644
--- a/hw/rtc/meson.build
+++ b/hw/rtc/meson.build
@@ -2,7 +2,7 @@
softmmu_ss.add(when: 'CONFIG_DS1338', if_true: files('ds1338.c'))
softmmu_ss.add(when: 'CONFIG_M41T80', if_true: files('m41t80.c'))
softmmu_ss.add(when: 'CONFIG_M48T59', if_true: files('m48t59.c'))
-softmmu_ss.add(when: 'CONFIG_PL031', if_true: files('pl031.c'))
+specific_ss.add(when: 'CONFIG_PL031', if_true: files('pl031.c'))
softmmu_ss.add(when: 'CONFIG_TWL92230', if_true: files('twl92230.c'))
softmmu_ss.add(when: ['CONFIG_ISA_BUS', 'CONFIG_M48T59'], if_true: files('m48t59-isa.c'))
softmmu_ss.add(when: 'CONFIG_XLNX_ZYNQMP', if_true: files('xlnx-zynqmp-rtc.c'))
diff --git a/hw/rtc/pl031.c b/hw/rtc/pl031.c
index 2bbb2062ac8..e7ced90b025 100644
--- a/hw/rtc/pl031.c
+++ b/hw/rtc/pl031.c
@@ -24,6 +24,7 @@
#include "qemu/log.h"
#include "qemu/module.h"
#include "trace.h"
+#include "qapi/qapi-events-misc-target.h"
#define RTC_DR 0x00 /* Data read register */
#define RTC_MR 0x04 /* Match register */
@@ -136,10 +137,17 @@ static void pl031_write(void * opaque, hwaddr offset,
trace_pl031_write(offset, value);
switch (offset) {
- case RTC_LR:
+ case RTC_LR: {
+ struct tm tm;
+
s->tick_offset += value - pl031_get_count(s);
+
+ qemu_get_timedate(&tm, s->tick_offset);
+ qapi_event_send_rtc_change(qemu_timedate_diff(&tm));
+
pl031_set_alarm(s);
break;
+ }
case RTC_MR:
s->mr = value;
pl031_set_alarm(s);
--
2.26.3
^ permalink raw reply related [flat|nested] 5+ messages in thread
* Re: [PATCH v2] hw/rtc/pl031: Send RTC_CHANGE QMP event
2021-09-20 12:25 [PATCH v2] hw/rtc/pl031: Send RTC_CHANGE QMP event Eric Auger
@ 2021-09-23 13:29 ` Peter Maydell
2021-11-01 16:04 ` Peter Maydell
0 siblings, 1 reply; 5+ messages in thread
From: Peter Maydell @ 2021-09-23 13:29 UTC (permalink / raw)
To: Eric Auger
Cc: Andrew Jones, Gavin Shan, QEMU Developers, qemu-arm,
Paolo Bonzini, Eric Auger
On Mon, 20 Sept 2021 at 13:25, Eric Auger <eric.auger@redhat.com> wrote:
>
> The PL031 currently is not able to report guest RTC change to the QMP
> monitor as opposed to mc146818 or spapr RTCs. This patch adds the call
> to qapi_event_send_rtc_change() when the Load Register is written. The
> value which is reported corresponds to the difference between the guest
> reference time and the reference time kept in softmmu/rtc.c.
>
> For instance adding 20s to the guest RTC value will report 20. Adding
> an extra 20s to the guest RTC value will report 20 + 20 = 40.
>
> The inclusion of qapi/qapi-types-misc-target.h in hw/rtl/pl031.c
> require to compile the PL031 with specific_ss.add() to avoid
> ./qapi/qapi-types-misc-target.h:18:13: error: attempt to use poisoned
> "TARGET_<ARCH>".
>
> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
Thanks. This looks plausible to me (well, it would ;-)) but
I would appreciate review from Paolo or somebody else who
understands the rtc_change feature and handling.
> ---
>
> v1 -> v2:
> - Use Peter's implementation and remove subsection
>
> Tested with the following script run on guest:
>
> #!/bin/sh
> old=$(hwclock --show | cut -f1-7 -d' ')
> oldabs=$(date +%s -d "$old")
> newabs=$(expr $oldabs + $1)
> new=$(date -d @"$newabs")
> echo Old: $oldabs $old
> echo New: $newabs $new
> hwclock --set --date "$new"
>
> and compared with x86 behavior.
> ---
> hw/rtc/meson.build | 2 +-
> hw/rtc/pl031.c | 10 +++++++++-
> 2 files changed, 10 insertions(+), 2 deletions(-)
>
> diff --git a/hw/rtc/meson.build b/hw/rtc/meson.build
> index 7cecdee5ddb..8fd8d8f9a71 100644
> --- a/hw/rtc/meson.build
> +++ b/hw/rtc/meson.build
> @@ -2,7 +2,7 @@
> softmmu_ss.add(when: 'CONFIG_DS1338', if_true: files('ds1338.c'))
> softmmu_ss.add(when: 'CONFIG_M41T80', if_true: files('m41t80.c'))
> softmmu_ss.add(when: 'CONFIG_M48T59', if_true: files('m48t59.c'))
> -softmmu_ss.add(when: 'CONFIG_PL031', if_true: files('pl031.c'))
> +specific_ss.add(when: 'CONFIG_PL031', if_true: files('pl031.c'))
> softmmu_ss.add(when: 'CONFIG_TWL92230', if_true: files('twl92230.c'))
> softmmu_ss.add(when: ['CONFIG_ISA_BUS', 'CONFIG_M48T59'], if_true: files('m48t59-isa.c'))
> softmmu_ss.add(when: 'CONFIG_XLNX_ZYNQMP', if_true: files('xlnx-zynqmp-rtc.c'))
> diff --git a/hw/rtc/pl031.c b/hw/rtc/pl031.c
> index 2bbb2062ac8..e7ced90b025 100644
> --- a/hw/rtc/pl031.c
> +++ b/hw/rtc/pl031.c
> @@ -24,6 +24,7 @@
> #include "qemu/log.h"
> #include "qemu/module.h"
> #include "trace.h"
> +#include "qapi/qapi-events-misc-target.h"
>
> #define RTC_DR 0x00 /* Data read register */
> #define RTC_MR 0x04 /* Match register */
> @@ -136,10 +137,17 @@ static void pl031_write(void * opaque, hwaddr offset,
> trace_pl031_write(offset, value);
>
> switch (offset) {
> - case RTC_LR:
> + case RTC_LR: {
> + struct tm tm;
> +
> s->tick_offset += value - pl031_get_count(s);
> +
> + qemu_get_timedate(&tm, s->tick_offset);
> + qapi_event_send_rtc_change(qemu_timedate_diff(&tm));
> +
> pl031_set_alarm(s);
> break;
> + }
> case RTC_MR:
> s->mr = value;
> pl031_set_alarm(s);
-- PMM
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] hw/rtc/pl031: Send RTC_CHANGE QMP event
2021-09-23 13:29 ` Peter Maydell
@ 2021-11-01 16:04 ` Peter Maydell
2021-11-15 12:48 ` Paolo Bonzini
0 siblings, 1 reply; 5+ messages in thread
From: Peter Maydell @ 2021-11-01 16:04 UTC (permalink / raw)
To: Eric Auger
Cc: Andrew Jones, Gavin Shan, QEMU Developers, qemu-arm,
Paolo Bonzini, Eric Auger
On Thu, 23 Sept 2021 at 14:29, Peter Maydell <peter.maydell@linaro.org> wrote:
>
> On Mon, 20 Sept 2021 at 13:25, Eric Auger <eric.auger@redhat.com> wrote:
> >
> > The PL031 currently is not able to report guest RTC change to the QMP
> > monitor as opposed to mc146818 or spapr RTCs. This patch adds the call
> > to qapi_event_send_rtc_change() when the Load Register is written. The
> > value which is reported corresponds to the difference between the guest
> > reference time and the reference time kept in softmmu/rtc.c.
> >
> > For instance adding 20s to the guest RTC value will report 20. Adding
> > an extra 20s to the guest RTC value will report 20 + 20 = 40.
> >
> > The inclusion of qapi/qapi-types-misc-target.h in hw/rtl/pl031.c
> > require to compile the PL031 with specific_ss.add() to avoid
> > ./qapi/qapi-types-misc-target.h:18:13: error: attempt to use poisoned
> > "TARGET_<ARCH>".
> >
> > Signed-off-by: Eric Auger <eric.auger@redhat.com>
> > Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>
> Thanks. This looks plausible to me (well, it would ;-)) but
> I would appreciate review from Paolo or somebody else who
> understands the rtc_change feature and handling.
Ping? Review from somebody who understands rtc_change would
still be nice...
-- PMM
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] hw/rtc/pl031: Send RTC_CHANGE QMP event
2021-11-01 16:04 ` Peter Maydell
@ 2021-11-15 12:48 ` Paolo Bonzini
2021-11-15 17:40 ` Peter Maydell
0 siblings, 1 reply; 5+ messages in thread
From: Paolo Bonzini @ 2021-11-15 12:48 UTC (permalink / raw)
To: Peter Maydell, Eric Auger
Cc: Andrew Jones, qemu-arm, Gavin Shan, QEMU Developers, Eric Auger
On 11/1/21 17:04, Peter Maydell wrote:
> On Thu, 23 Sept 2021 at 14:29, Peter Maydell <peter.maydell@linaro.org> wrote:
>>
>> On Mon, 20 Sept 2021 at 13:25, Eric Auger <eric.auger@redhat.com> wrote:
>>>
>>> The PL031 currently is not able to report guest RTC change to the QMP
>>> monitor as opposed to mc146818 or spapr RTCs. This patch adds the call
>>> to qapi_event_send_rtc_change() when the Load Register is written. The
>>> value which is reported corresponds to the difference between the guest
>>> reference time and the reference time kept in softmmu/rtc.c.
>>>
>>> For instance adding 20s to the guest RTC value will report 20. Adding
>>> an extra 20s to the guest RTC value will report 20 + 20 = 40.
>>>
>>> The inclusion of qapi/qapi-types-misc-target.h in hw/rtl/pl031.c
>>> require to compile the PL031 with specific_ss.add() to avoid
>>> ./qapi/qapi-types-misc-target.h:18:13: error: attempt to use poisoned
>>> "TARGET_<ARCH>".
>>>
>>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
>>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
>>
>> Thanks. This looks plausible to me (well, it would ;-)) but
>> I would appreciate review from Paolo or somebody else who
>> understands the rtc_change feature and handling.
>
> Ping? Review from somebody who understands rtc_change would
> still be nice...
The change looks good to me (sorry I missed this v2). x86 also has some
logic in the migration post-load, that might end up sending the event.
However, that's best done separately after understanding and documenting
exactly what x86 is doing.
Paolo
^ permalink raw reply [flat|nested] 5+ messages in thread
* Re: [PATCH v2] hw/rtc/pl031: Send RTC_CHANGE QMP event
2021-11-15 12:48 ` Paolo Bonzini
@ 2021-11-15 17:40 ` Peter Maydell
0 siblings, 0 replies; 5+ messages in thread
From: Peter Maydell @ 2021-11-15 17:40 UTC (permalink / raw)
To: Paolo Bonzini
Cc: Andrew Jones, Gavin Shan, QEMU Developers, Eric Auger, qemu-arm,
Eric Auger
On Mon, 15 Nov 2021 at 12:49, Paolo Bonzini <pbonzini@redhat.com> wrote:
>
> On 11/1/21 17:04, Peter Maydell wrote:
> > On Thu, 23 Sept 2021 at 14:29, Peter Maydell <peter.maydell@linaro.org> wrote:
> >>
> >> On Mon, 20 Sept 2021 at 13:25, Eric Auger <eric.auger@redhat.com> wrote:
> >>>
> >>> The PL031 currently is not able to report guest RTC change to the QMP
> >>> monitor as opposed to mc146818 or spapr RTCs. This patch adds the call
> >>> to qapi_event_send_rtc_change() when the Load Register is written. The
> >>> value which is reported corresponds to the difference between the guest
> >>> reference time and the reference time kept in softmmu/rtc.c.
> >>>
> >>> For instance adding 20s to the guest RTC value will report 20. Adding
> >>> an extra 20s to the guest RTC value will report 20 + 20 = 40.
> >>>
> >>> The inclusion of qapi/qapi-types-misc-target.h in hw/rtl/pl031.c
> >>> require to compile the PL031 with specific_ss.add() to avoid
> >>> ./qapi/qapi-types-misc-target.h:18:13: error: attempt to use poisoned
> >>> "TARGET_<ARCH>".
> >>>
> >>> Signed-off-by: Eric Auger <eric.auger@redhat.com>
> >>> Signed-off-by: Peter Maydell <peter.maydell@linaro.org>
> >>
> >> Thanks. This looks plausible to me (well, it would ;-)) but
> >> I would appreciate review from Paolo or somebody else who
> >> understands the rtc_change feature and handling.
> >
> > Ping? Review from somebody who understands rtc_change would
> > still be nice...
>
> The change looks good to me (sorry I missed this v2). x86 also has some
> logic in the migration post-load, that might end up sending the event.
> However, that's best done separately after understanding and documenting
> exactly what x86 is doing.
Thanks; I've applied this to target-arm.next for 6.2.
-- PMM
^ permalink raw reply [flat|nested] 5+ messages in thread
end of thread, other threads:[~2021-11-15 17:41 UTC | newest]
Thread overview: 5+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2021-09-20 12:25 [PATCH v2] hw/rtc/pl031: Send RTC_CHANGE QMP event Eric Auger
2021-09-23 13:29 ` Peter Maydell
2021-11-01 16:04 ` Peter Maydell
2021-11-15 12:48 ` Paolo Bonzini
2021-11-15 17:40 ` Peter Maydell
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.