[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Re: [PATCH 3/6] ppc/pegasos2: Implement get-time-of-day RTAS function wi
From: |
David Gibson |
Subject: |
Re: [PATCH 3/6] ppc/pegasos2: Implement get-time-of-day RTAS function with VOF |
Date: |
Fri, 15 Oct 2021 14:17:26 +1100 |
On Thu, Oct 14, 2021 at 09:50:19PM +0200, BALATON Zoltan wrote:
> This is needed for Linux to access RTC time.
>
> Signed-off-by: BALATON Zoltan <balaton@eik.bme.hu>
> ---
> hw/ppc/pegasos2.c | 25 +++++++++++++++++++++++++
> 1 file changed, 25 insertions(+)
>
> diff --git a/hw/ppc/pegasos2.c b/hw/ppc/pegasos2.c
> index a1dd1f6752..a9e3625f56 100644
> --- a/hw/ppc/pegasos2.c
> +++ b/hw/ppc/pegasos2.c
> @@ -31,6 +31,8 @@
> #include "sysemu/kvm.h"
> #include "kvm_ppc.h"
> #include "exec/address-spaces.h"
> +#include "qom/qom-qobject.h"
> +#include "qapi/qmp/qdict.h"
> #include "trace.h"
> #include "qemu/datadir.h"
> #include "sysemu/device_tree.h"
> @@ -369,6 +371,29 @@ static target_ulong pegasos2_rtas(PowerPCCPU *cpu,
> Pegasos2MachineState *pm,
> return H_PARAMETER;
> }
> switch (token) {
> + case RTAS_GET_TIME_OF_DAY:
> + {
> + QObject *qo = object_property_get_qobject(qdev_get_machine(),
> + "rtc-time", &error_fatal);
> + QDict *qd = qobject_to(QDict, qo);
> +
> + if (nargs != 0 || nrets != 8 || !qd) {
> + stl_be_phys(as, rets, -1);
> + qobject_unref(qo);
> + return H_PARAMETER;
> + }
> +
> + stl_be_phys(as, rets, 0);
> + stl_be_phys(as, rets + 4, qdict_get_int(qd, "tm_year") + 1900);
> + stl_be_phys(as, rets + 8, qdict_get_int(qd, "tm_mon") + 1);
> + stl_be_phys(as, rets + 12, qdict_get_int(qd, "tm_mday"));
> + stl_be_phys(as, rets + 16, qdict_get_int(qd, "tm_hour"));
> + stl_be_phys(as, rets + 20, qdict_get_int(qd, "tm_min"));
> + stl_be_phys(as, rets + 24, qdict_get_int(qd, "tm_sec"));
Doing a separate dictionary lookup for every component seems like it
might be pretty expensive. You might want to look at how spapr does
this.
However, you're maintainer for pegasos, so really it's your call -
applied, thanks.
> + stl_be_phys(as, rets + 28, 0);
> + qobject_unref(qo);
> + return H_SUCCESS;
> + }
> case RTAS_READ_PCI_CONFIG:
> {
> uint32_t addr, len, val;
--
David Gibson | I'll have my music baroque, and my code
david AT gibson.dropbear.id.au | minimalist, thank you. NOT _the_ _other_
| _way_ _around_!
http://www.ozlabs.org/~dgibson
signature.asc
Description: PGP signature
- [PATCH 0/6] Misc pegasos2 patches, BALATON Zoltan, 2021/10/14
- [PATCH 1/6] ppc/pegasos2: Restrict memory to 2 gigabytes, BALATON Zoltan, 2021/10/14
- [PATCH 5/6] ppc/pegasos2: Add constants for PCI config addresses, BALATON Zoltan, 2021/10/14
- [PATCH 2/6] ppc/pegasos2: Warn when using VOF but no kernel is specified, BALATON Zoltan, 2021/10/14
- [PATCH 4/6] ppc/pegasos2: Access MV64361 registers via their memory region, BALATON Zoltan, 2021/10/14
- [PATCH 3/6] ppc/pegasos2: Implement get-time-of-day RTAS function with VOF, BALATON Zoltan, 2021/10/14
- Re: [PATCH 3/6] ppc/pegasos2: Implement get-time-of-day RTAS function with VOF,
David Gibson <=
- [PATCH 6/6] ppc/pegasos2: Implement power-off RTAS function with VOF, BALATON Zoltan, 2021/10/14
- Re: [PATCH 0/6] Misc pegasos2 patches, David Gibson, 2021/10/15