qemu-devel.nongnu.org archive mirror
 help / color / mirror / Atom feed
From: David Gibson <david@gibson.dropbear.id.au>
To: Balamuruhan S <bala24@linux.ibm.com>
Cc: maddy@linux.vnet.ibm.com, anju@linux.vnet.ibm.com,
	qemu-devel@nongnu.org, hari@linux.vnet.ibm.com, clg@kaod.org,
	pbonzini@redhat.com
Subject: Re: [Qemu-devel] [RFC PATCH 6/6] hw/ppc/pnv_homer: add python interface support for homer/occ common area
Date: Fri, 9 Aug 2019 14:46:39 +1000	[thread overview]
Message-ID: <20190809044639.GN5465@umbus.fritz.box> (raw)
In-Reply-To: <20190807071445.4109-7-bala24@linux.ibm.com>

[-- Attachment #1: Type: text/plain, Size: 6120 bytes --]

On Wed, Aug 07, 2019 at 12:44:45PM +0530, Balamuruhan S wrote:
> use python interface APIs in homer/occ common area emulation to
> interact with scripts if provided else fallback to normal flow,
> it shows how simple to use the interface to call python methods
> with any number of arguments in any script placed in common
> -module-path provided in qemu commandline.

What's the use case for this?

> 
> Signed-off-by: Balamuruhan S <bala24@linux.ibm.com>
> ---
>  hw/ppc/pnv_homer.c      | 20 ++++++++++++++++++++
>  hw/ppc/pnv_xscom.c      |  9 +++++----
>  include/sysemu/sysemu.h |  4 ++++
>  vl.c                    | 24 ++++++++++++++++++++++++
>  4 files changed, 53 insertions(+), 4 deletions(-)
> 
> diff --git a/hw/ppc/pnv_homer.c b/hw/ppc/pnv_homer.c
> index 73a94856d0..6ae5e74f19 100644
> --- a/hw/ppc/pnv_homer.c
> +++ b/hw/ppc/pnv_homer.c
> @@ -16,7 +16,9 @@
>   * You should have received a copy of the GNU Lesser General Public
>   * License along with this library; if not, see <http://www.gnu.org/licenses/>.
>   */
> +#include "sysemu/python_api.h"
>  #include "qemu/osdep.h"
> +#include "sysemu/sysemu.h"
>  #include "sysemu/hw_accel.h"
>  #include "sysemu/cpus.h"
>  #include "hw/ppc/pnv.h"
> @@ -37,6 +39,15 @@ static bool core_max_array(hwaddr addr)
>  
>  static uint64_t homer_read(void *opaque, hwaddr addr, unsigned width)
>  {
> +    if (homer_module && homer) {
> +        uint64_t homer_ret;
> +        char **address = g_malloc(sizeof(uint64_t));
> +        python_args_init_cast_long(address, addr, 0);
> +        homer_ret = python_callback_int(module_path, homer_module, homer, address, 1);
> +        python_args_clean(address, 1);
> +        g_free(address);
> +        return homer_ret;
> +    }
>      switch (addr) {
>          case 0xe2006:  /* max pstate ultra turbo */
>          case 0xe2018:  /* pstate id for 0 */
> @@ -106,6 +117,15 @@ const MemoryRegionOps pnv_homer_ops = {
>  
>  static uint64_t occ_common_area_read(void *opaque, hwaddr addr, unsigned width)
>  {
> +    if (occ_module && occ) {
> +        uint64_t occ_ret;
> +        char **address = g_malloc(sizeof(uint64_t));
> +        python_args_init_cast_long(address, addr, 0);
> +        occ_ret = python_callback_int(module_path, occ_module, occ, address, 1);
> +        python_args_clean(address, 1);
> +        g_free(address);
> +        return occ_ret;
> +    }
>      switch (addr) {
>          /*
>           * occ-sensor sanity check that asserts the sensor
> diff --git a/hw/ppc/pnv_xscom.c b/hw/ppc/pnv_xscom.c
> index 18a780bcdf..5e41b7c953 100644
> --- a/hw/ppc/pnv_xscom.c
> +++ b/hw/ppc/pnv_xscom.c
> @@ -179,13 +179,14 @@ static uint64_t xscom_read(void *opaque, hwaddr addr, unsigned width)
>      MemTxResult result;
>  
>      if (xscom_module && xscom_readp) {
> -        char **args = g_malloc(2 * sizeof(uint64_t));
> +        char **args = g_malloc(3 * sizeof(uint64_t));
>          PnvChipClass *pcc = PNV_CHIP_GET_CLASS(chip);
>          python_args_init_cast_long(args, pcba, 0);
> -        python_args_init_cast_int(args, pcc->chip_type, 1);
> +        python_args_init_cast_int(args, chip->chip_num, 1);
> +        python_args_init_cast_int(args, pcc->chip_type, 2);
>          val = python_callback_int(module_path, xscom_module, xscom_readp,
> -                                  args, 2);
> -        python_args_clean(args, 2);
> +                                  args, 3);
> +        python_args_clean(args, 3);
>          g_free(args);
>      }
>      else {
> diff --git a/include/sysemu/sysemu.h b/include/sysemu/sysemu.h
> index 9b8dc346d6..3c8119e040 100644
> --- a/include/sysemu/sysemu.h
> +++ b/include/sysemu/sysemu.h
> @@ -121,6 +121,10 @@ extern const char *module_path;
>  extern const char *xscom_module;
>  extern const char *xscom_readp;
>  extern const char *xscom_writep;
> +extern const char *homer_module;
> +extern const char *homer;
> +extern const char *occ_module;
> +extern const char *occ;
>  extern int mem_prealloc;
>  
>  #define MAX_NODES 128
> diff --git a/vl.c b/vl.c
> index 28f0dc1c1b..c96d35d907 100644
> --- a/vl.c
> +++ b/vl.c
> @@ -144,6 +144,10 @@ const char *module_path = NULL;
>  const char *xscom_module = NULL;
>  const char *xscom_readp = NULL;
>  const char *xscom_writep = NULL;
> +const char *homer_module = NULL;
> +const char *homer = NULL;
> +const char *occ_module = NULL;
> +const char *occ = NULL;
>  int mem_prealloc = 0; /* force preallocation of physical target memory */
>  bool enable_mlock = false;
>  bool enable_cpu_pm = false;
> @@ -495,6 +499,22 @@ static QemuOptsList qemu_module_opts = {
>              .name = "xscom_write",
>              .type = QEMU_OPT_STRING,
>          },
> +        {
> +            .name = "homer_module",
> +            .type = QEMU_OPT_STRING,
> +        },
> +        {
> +            .name = "homer",
> +            .type = QEMU_OPT_STRING,
> +        },
> +        {
> +            .name = "occ_module",
> +            .type = QEMU_OPT_STRING,
> +        },
> +        {
> +            .name = "occ",
> +            .type = QEMU_OPT_STRING,
> +        },
>          { /* end of list */ }
>      },
>  };
> @@ -3231,6 +3251,10 @@ int main(int argc, char **argv, char **envp)
>                  xscom_module = qemu_opt_get(opts, "xscom_module");
>                  xscom_readp = qemu_opt_get(opts, "xscom_read");
>                  xscom_writep = qemu_opt_get(opts, "xscom_write");
> +                homer_module = qemu_opt_get(opts, "homer_module");
> +                homer = qemu_opt_get(opts, "homer");
> +                occ_module = qemu_opt_get(opts, "occ_module");
> +                occ = qemu_opt_get(opts, "occ");
>                  break;
>              case QEMU_OPTION_mem_prealloc:
>                  mem_prealloc = 1;

-- 
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

[-- Attachment #2: signature.asc --]
[-- Type: application/pgp-signature, Size: 833 bytes --]

  parent reply	other threads:[~2019-08-09  4:50 UTC|newest]

Thread overview: 45+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-08-07  7:14 [Qemu-devel] [RFC PATCH 0/6] Enhancing Qemu MMIO emulation with scripting interface Balamuruhan S
2019-08-07  7:14 ` [Qemu-devel] [RFC PATCH 1/6] utils/python_api: add scripting interface for Qemu with python lib Balamuruhan S
2019-08-07 10:20   ` Philippe Mathieu-Daudé
2019-08-08 10:10     ` Stefan Hajnoczi
2019-08-08 10:33       ` Philippe Mathieu-Daudé
2019-08-08 10:53       ` Daniel P. Berrangé
2019-08-09  8:46         ` Stefan Hajnoczi
2019-08-12  4:53           ` Balamuruhan S
2019-08-08 10:09   ` Stefan Hajnoczi
2019-08-11  6:39     ` Balamuruhan S
2019-08-08 10:49   ` Daniel P. Berrangé
2019-08-08 12:45     ` Philippe Mathieu-Daudé
2019-08-09  4:39       ` David Gibson
2019-08-12  4:45       ` Balamuruhan S
2019-08-07  7:14 ` [Qemu-devel] [RFC PATCH 2/6] hw/ppc/pnv_xscom: extend xscom to use python interface Balamuruhan S
2019-08-08  9:04   ` Cédric Le Goater
2019-08-07  7:14 ` [Qemu-devel] [RFC PATCH 3/6] hw/ppc/pnv_homer: add homer/occ common area emulation for PowerNV Balamuruhan S
2019-08-07  7:54   ` Cédric Le Goater
2019-08-07 10:07     ` Balamuruhan S
2019-08-08  8:32       ` Cédric Le Goater
2019-08-09  4:44     ` David Gibson
2019-08-11  6:34       ` Balamuruhan S
2019-08-07  7:14 ` [Qemu-devel] [RFC PATCH 4/6] hw/ppc/pnv: initialize and realize homer/occ common area Balamuruhan S
2019-08-07  7:59   ` Cédric Le Goater
2019-08-07 10:12     ` Balamuruhan S
2019-08-08  8:46       ` Cédric Le Goater
2019-08-09  4:45   ` David Gibson
2019-08-07  7:14 ` [Qemu-devel] [RFC PATCH 5/6] hw/ppc/pnv_xscom: retrieve homer/occ base address from PBA BARs Balamuruhan S
2019-08-07  8:01   ` Cédric Le Goater
2019-08-07 10:22     ` Balamuruhan S
2019-08-09  4:45   ` David Gibson
2019-08-07  7:14 ` [Qemu-devel] [RFC PATCH 6/6] hw/ppc/pnv_homer: add python interface support for homer/occ common area Balamuruhan S
2019-08-07 10:27   ` Philippe Mathieu-Daudé
2019-08-11  6:05     ` Balamuruhan S
2019-08-09  4:46   ` David Gibson [this message]
2019-08-11  6:19     ` Balamuruhan S
2019-08-07  7:33 ` [Qemu-devel] [RFC PATCH 0/6] Enhancing Qemu MMIO emulation with scripting interface no-reply
2019-08-07  8:15 ` Cédric Le Goater
2019-08-07 10:16   ` Balamuruhan S
2019-08-09  4:49   ` David Gibson
2019-08-12  5:07     ` Balamuruhan S
2019-08-07  8:51 ` no-reply
2019-08-07  9:18 ` no-reply
2019-08-08 10:25 ` Stefan Hajnoczi
2019-08-12  6:03   ` Balamuruhan S

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to=20190809044639.GN5465@umbus.fritz.box \
    --to=david@gibson.dropbear.id.au \
    --cc=anju@linux.vnet.ibm.com \
    --cc=bala24@linux.ibm.com \
    --cc=clg@kaod.org \
    --cc=hari@linux.vnet.ibm.com \
    --cc=maddy@linux.vnet.ibm.com \
    --cc=pbonzini@redhat.com \
    --cc=qemu-devel@nongnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).