On Mon, 16 Mar 2020 12:18:41 +1100 Alexey Kardashevskiy <a...@ozlabs.ru> wrote:
> At the moment SLOF reserves space for RTAS and instantiates the RTAS blob > which is 20 bytes binary blob calling an hypercall. The rest of the RTAS > area is a log which SLOF has no idea about but QEMU does. > > This moves RTAS sizing to QEMU and this overrides the size from SLOF. > The only remaining problem is that SLOF copies the number of bytes it > reserved (2KB for now) so QEMU needs to reserve at least this much; > SLOF will be fixed separately to check that rtas-size from QEMU is > enough for those 20 bytes the H_RTAS hcall. 20 bytes >for< the H_RTAS hcall ? Reviewed-by: Greg Kurz <gr...@kaod.org> > > Signed-off-by: Alexey Kardashevskiy <a...@ozlabs.ru> > --- > include/hw/ppc/spapr.h | 1 + > hw/ppc/spapr.c | 1 + > 2 files changed, 2 insertions(+) > > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h > index 2015e37ac5c8..35b489a54929 100644 > --- a/include/hw/ppc/spapr.h > +++ b/include/hw/ppc/spapr.h > @@ -736,6 +736,7 @@ void spapr_load_rtas(SpaprMachineState *spapr, void *fdt, > hwaddr addr); > #define SPAPR_IS_PCI_LIOBN(liobn) (!!((liobn) & 0x80000000)) > #define SPAPR_PCI_DMA_WINDOW_NUM(liobn) ((liobn) & 0xff) > > +#define RTAS_SIZE 2048 > #define RTAS_ERROR_LOG_MAX 2048 > > /* Offset from rtas-base where error log is placed */ > diff --git a/hw/ppc/spapr.c b/hw/ppc/spapr.c > index 64bc8b83e91e..d3db3ec56e9c 100644 > --- a/hw/ppc/spapr.c > +++ b/hw/ppc/spapr.c > @@ -967,6 +967,7 @@ static void spapr_dt_rtas(SpaprMachineState *spapr, void > *fdt) > _FDT(fdt_setprop(fdt, rtas, "ibm,max-associativity-domains", > maxdomains, sizeof(maxdomains))); > > + _FDT(fdt_setprop_cell(fdt, rtas, "rtas-size", RTAS_SIZE)); > _FDT(fdt_setprop_cell(fdt, rtas, "rtas-error-log-max", > RTAS_ERROR_LOG_MAX)); > _FDT(fdt_setprop_cell(fdt, rtas, "rtas-event-scan-rate",