On Fri, Aug 28, 2015 at 05:15:18PM +1000, Gavin Shan wrote: > This introduces rtas_ldq() to load 64-bits parameter from continuous > two 4-bytes memory chunk of RTAS parameter buffer, to simplify the > code. > > Signed-off-by: Gavin Shan <gws...@linux.vnet.ibm.com> > Reviewed-by: Thomas Huth <th...@redhat.com>
Looks good. Since this doesn't depend on the other patches, I've merged it into spapr-next already. > --- > hw/ppc/spapr_pci.c | 20 ++++++++++---------- > include/hw/ppc/spapr.h | 5 +++++ > 2 files changed, 15 insertions(+), 10 deletions(-) > > diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c > index 9d41060..bc30631 100644 > --- a/hw/ppc/spapr_pci.c > +++ b/hw/ppc/spapr_pci.c > @@ -140,7 +140,7 @@ static void rtas_ibm_read_pci_config(PowerPCCPU *cpu, > sPAPRMachineState *spapr, > return; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > size = rtas_ld(args, 3); > addr = rtas_ld(args, 0); > > @@ -206,7 +206,7 @@ static void rtas_ibm_write_pci_config(PowerPCCPU *cpu, > sPAPRMachineState *spapr, > return; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > val = rtas_ld(args, 4); > size = rtas_ld(args, 3); > addr = rtas_ld(args, 0); > @@ -269,7 +269,7 @@ static void rtas_ibm_change_msi(PowerPCCPU *cpu, > sPAPRMachineState *spapr, > target_ulong rets) > { > uint32_t config_addr = rtas_ld(args, 0); > - uint64_t buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + uint64_t buid = rtas_ldq(args, 1); > unsigned int func = rtas_ld(args, 3); > unsigned int req_num = rtas_ld(args, 4); /* 0 == remove all */ > unsigned int seq_num = rtas_ld(args, 5); > @@ -391,7 +391,7 @@ static void > rtas_ibm_query_interrupt_source_number(PowerPCCPU *cpu, > target_ulong rets) > { > uint32_t config_addr = rtas_ld(args, 0); > - uint64_t buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + uint64_t buid = rtas_ldq(args, 1); > unsigned int intr_src_num = -1, ioa_intr_num = rtas_ld(args, 3); > sPAPRPHBState *phb = NULL; > PCIDevice *pdev = NULL; > @@ -440,7 +440,7 @@ static void rtas_ibm_set_eeh_option(PowerPCCPU *cpu, > goto param_error_exit; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > addr = rtas_ld(args, 0); > option = rtas_ld(args, 3); > > @@ -484,7 +484,7 @@ static void rtas_ibm_get_config_addr_info2(PowerPCCPU > *cpu, > goto param_error_exit; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > sphb = spapr_pci_find_phb(spapr, buid); > if (!sphb) { > goto param_error_exit; > @@ -539,7 +539,7 @@ static void rtas_ibm_read_slot_reset_state2(PowerPCCPU > *cpu, > goto param_error_exit; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > sphb = spapr_pci_find_phb(spapr, buid); > if (!sphb) { > goto param_error_exit; > @@ -584,7 +584,7 @@ static void rtas_ibm_set_slot_reset(PowerPCCPU *cpu, > goto param_error_exit; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > option = rtas_ld(args, 3); > sphb = spapr_pci_find_phb(spapr, buid); > if (!sphb) { > @@ -619,7 +619,7 @@ static void rtas_ibm_configure_pe(PowerPCCPU *cpu, > goto param_error_exit; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > sphb = spapr_pci_find_phb(spapr, buid); > if (!sphb) { > goto param_error_exit; > @@ -654,7 +654,7 @@ static void rtas_ibm_slot_error_detail(PowerPCCPU *cpu, > goto param_error_exit; > } > > - buid = ((uint64_t)rtas_ld(args, 1) << 32) | rtas_ld(args, 2); > + buid = rtas_ldq(args, 1); > sphb = spapr_pci_find_phb(spapr, buid); > if (!sphb) { > goto param_error_exit; > diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h > index d87c6d4..c75cc5e 100644 > --- a/include/hw/ppc/spapr.h > +++ b/include/hw/ppc/spapr.h > @@ -492,6 +492,11 @@ static inline uint32_t rtas_ld(target_ulong phys, int n) > return ldl_be_phys(&address_space_memory, ppc64_phys_to_real(phys + > 4*n)); > } > > +static inline uint64_t rtas_ldq(target_ulong phys, int n) > +{ > + return (uint64_t)rtas_ld(phys, n) << 32 | rtas_ld(phys, n + 1); > +} > + > static inline void rtas_st(target_ulong phys, int n, uint32_t val) > { > stl_be_phys(&address_space_memory, ppc64_phys_to_real(phys + 4*n), 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
pgpYV3enzfwgL.pgp
Description: PGP signature