All of lore.kernel.org
 help / color / mirror / Atom feed
From: Alexey Kardashevskiy <aik@ozlabs.ru>
To: Michael Roth <mdroth@linux.vnet.ibm.com>, qemu-devel@nongnu.org
Cc: agraf@suse.de, ncmike@ncultra.org, paulus@samba.org,
	tyreld@linux.vnet.ibm.com, nfont@linux.vnet.ibm.com,
	qemu-ppc@nongnu.org
Subject: Re: [Qemu-devel] [PATCH 03/14] spapr_pci: add get-sensor-state RTAS interface
Date: Thu, 05 Dec 2013 13:47:52 +1100	[thread overview]
Message-ID: <529FE958.2010905@ozlabs.ru> (raw)
In-Reply-To: <1386206394-21092-4-git-send-email-mdroth@linux.vnet.ibm.com>

On 12/05/2013 12:19 PM, Michael Roth wrote:
> From: Mike Day <ncmike@ncultra.org>
> 
> Signed-off-by: Mike Day <ncmike@ncultra.org>
> Signed-off-by: Michael Roth <mdroth@linux.vnet.ibm.com>
> ---
>  hw/ppc/spapr_pci.c     |   72 ++++++++++++++++++++++++++++++++++++++++++++++++
>  include/hw/ppc/spapr.h |    6 +++-
>  2 files changed, 77 insertions(+), 1 deletion(-)
> 
> diff --git a/hw/ppc/spapr_pci.c b/hw/ppc/spapr_pci.c
> index 64077f9..95336f7 100644
> --- a/hw/ppc/spapr_pci.c
> +++ b/hw/ppc/spapr_pci.c
> @@ -498,6 +498,77 @@ static void rtas_get_power_level(PowerPCCPU *cpu, sPAPREnvironment *spapr,
>      rtas_st(rets, 1, 100);
>  }
>  
> +static void rtas_get_sensor_state(PowerPCCPU *cpu, sPAPREnvironment *spapr,
> +                                  uint32_t token, uint32_t nargs,
> +                                  target_ulong args, uint32_t nret,
> +                                  target_ulong rets)
> +{
> +    uint32_t sensor = rtas_ld(args, 0);
> +    uint32_t drc_index = rtas_ld(args, 1);
> +    uint32_t sensor_state = 0, decoded = 0, ccode = NO_SUCH_INDICATOR;
> +    uint32_t shift = 0, mask = 0;
> +    DrcEntry *drc_entry = NULL;
> +
> +    if (drc_index == 0) {  /* platform state sensor/indicator */
> +        sensor_state = spapr->state;
> +    } else { /* we should have a drc entry */
> +        drc_entry = spapr_find_drc_entry(drc_index);
> +        if (!drc_entry) {
> +            g_warning("unable to find DRC entry for index %x", drc_index);


I did not see QEMU using g_warning(), it is error_report() or custom
defined DPRINTF or fprintf(stderr,...) or a trace point from ./trace-events
(traces which can be switched on/off in run-time).

It the case like this, I'd make it DPRINTF or trace-event, the current RTAS
handlers do not print error messages on errors by default.



> +            sensor_state = 0; /* empty */
> +            /* ccode is already set to -3 */
> +            rtas_st(rets, 0, ccode);
> +            return;
> +        }
> +        sensor_state = drc_entry->state;
> +    }
> +    switch (sensor) {
> +    case 9:  /* EPOW */
> +        shift = INDICATOR_EPOW_SHIFT;
> +        mask = INDICATOR_EPOW_MASK;
> +        break;
> +    case 9001: /* Isolation state */
> +        /* encode the new value into the correct bit field */
> +        shift = INDICATOR_ISOLATION_SHIFT;
> +        mask = INDICATOR_ISOLATION_MASK;
> +        break;
> +    case 9002: /* DR */
> +        shift = INDICATOR_DR_SHIFT;
> +        mask = INDICATOR_DR_MASK;
> +        break;
> +    case 9003: /* entity sense */
> +        shift = SENSOR_ENTITY_SENSE_SHIFT;
> +        mask = SENSOR_ENTITY_SENSE_MASK;
> +        break;
> +    case 9005: /* global interrupt */
> +        shift = INDICATOR_GLOBAL_INTERRUPT_SHIFT;
> +        mask = INDICATOR_GLOBAL_INTERRUPT_MASK;
> +        break;
> +    case 9006: /* error log */
> +        shift = INDICATOR_ERROR_LOG_SHIFT;
> +        mask = INDICATOR_ERROR_LOG_MASK;
> +        break;
> +    case 9007: /* identify */
> +        shift = INDICATOR_IDENTIFY_SHIFT;
> +        mask = INDICATOR_IDENTIFY_MASK;
> +        break;
> +    case 9009: /* reset */
> +        shift = INDICATOR_RESET_SHIFT;
> +        mask = INDICATOR_RESET_MASK;
> +        break;
> +    default:
> +        g_warning("rtas_get_sensor_state: sensor not implemented: %d",
> +                  sensor);
> +        rtas_st(rets, 0, -3);
> +        return;
> +    }
> +
> +    decoded = DECODE_DRC_STATE(sensor_state, mask, shift);
> +    ccode = 0;
> +    rtas_st(rets, 0, ccode);
> +    rtas_st(rets, 1, decoded);
> +}
> +
>  static int pci_spapr_swizzle(int slot, int pin)
>  {
>      return (slot + pin) % PCI_NUM_PINS;
> @@ -961,6 +1032,7 @@ void spapr_pci_rtas_init(void)
>      spapr_rtas_register("set-indicator", rtas_set_indicator);
>      spapr_rtas_register("set-power-level", rtas_set_power_level);
>      spapr_rtas_register("get-power-level", rtas_get_power_level);
> +    spapr_rtas_register("get-sensor-state", rtas_get_sensor_state);
>  }
>  
>  static void spapr_pci_register_types(void)
> diff --git a/include/hw/ppc/spapr.h b/include/hw/ppc/spapr.h
> index d8c7de4..cadf95f 100644
> --- a/include/hw/ppc/spapr.h
> +++ b/include/hw/ppc/spapr.h
> @@ -302,7 +302,7 @@ typedef struct sPAPREnvironment {
>  #define KVMPPC_H_LOGICAL_MEMOP  (KVMPPC_HCALL_BASE + 0x1)
>  #define KVMPPC_HCALL_MAX        KVMPPC_H_LOGICAL_MEMOP
>  
> -/* For set-indicator RTAS interface */
> +/* For set-indicator/get-sensor-state RTAS interfaces */
>  #define INDICATOR_ISOLATION_MASK            0x0001   /* 9001 one bit */
>  #define INDICATOR_GLOBAL_INTERRUPT_MASK     0x0002   /* 9005 one bit */
>  #define INDICATOR_ERROR_LOG_MASK            0x0004   /* 9006 one bit */
> @@ -311,6 +311,7 @@ typedef struct sPAPREnvironment {
>  #define INDICATOR_DR_MASK                   0x00e0   /* 9002 three bits */
>  #define INDICATOR_ALLOCATION_MASK           0x0300   /* 9003 two bits */
>  #define INDICATOR_EPOW_MASK                 0x1c00   /* 9 three bits */
> +#define SENSOR_ENTITY_SENSE_MASK            0xe000   /* 9003 three bits */


This one starts with "SENSOR_" when others with "INDICATOR_". Is it for a
reason?


>  #define INDICATOR_ISOLATION_SHIFT           0x00     /* bit 0 */
>  #define INDICATOR_GLOBAL_INTERRUPT_SHIFT    0x01     /* bit 1 */
> @@ -320,8 +321,11 @@ typedef struct sPAPREnvironment {
>  #define INDICATOR_DR_SHIFT                  0x05     /* bits 5-7 */
>  #define INDICATOR_ALLOCATION_SHIFT          0x08     /* bits 8-9 */
>  #define INDICATOR_EPOW_SHIFT                0x0a     /* bits 10-12 */
> +#define SENSOR_ENTITY_SENSE_SHIFT           0x0d     /* bits 13-15 */
>  
>  #define NO_SUCH_INDICATOR -3
> +#define DR_ENTITY_SENSE_EMPTY 0
> +#define DR_ENTITY_SENSE_PRESENT 1
>  
>  #define DECODE_DRC_STATE(state, m, s)                  \
>      ((((uint32_t)(state) & (uint32_t)(m))) >> (s))
> 


-- 
Alexey

  reply	other threads:[~2013-12-05  2:48 UTC|newest]

Thread overview: 21+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2013-12-05  1:19 [Qemu-devel] [PATCH 00/14] spapr: add support for pci hotplug Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 01/14] spapr_pci: add set-indicator RTAS interface Michael Roth
2013-12-05  2:33   ` Alexey Kardashevskiy
2013-12-05 17:05     ` Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 02/14] spapr_pci: add get/set-power-level RTAS interfaces Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 03/14] spapr_pci: add get-sensor-state RTAS interface Michael Roth
2013-12-05  2:47   ` Alexey Kardashevskiy [this message]
2013-12-05 17:29     ` Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 04/14] spapr_pci: add ibm, configure-connector " Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 05/14] spapr: populate DRC entries for root dt node Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 06/14] spapr_pci: populate DRC dt entries for PHBs Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 07/14] spapr: add helper to retrieve a PHB/device DrcEntry Michael Roth
2013-12-05  2:30   ` Alexey Kardashevskiy
2013-12-05 17:29     ` Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 08/14] memory: add memory_region_find_subregion Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 09/14] pci: make pci_bar useable outside pci.c Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 10/14] pci: allow 0 address for PCI IO regions Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 11/14] spapr_pci: enable basic hotplug operations Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 12/14] spapr_events: re-use EPOW event infrastructure for hotplug events Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 13/14] spapr_events: event-scan RTAS interface Michael Roth
2013-12-05  1:19 ` [Qemu-devel] [PATCH 14/14] spapr_pci: emit hotplug add/remove events during hotplug Michael Roth

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=529FE958.2010905@ozlabs.ru \
    --to=aik@ozlabs.ru \
    --cc=agraf@suse.de \
    --cc=mdroth@linux.vnet.ibm.com \
    --cc=ncmike@ncultra.org \
    --cc=nfont@linux.vnet.ibm.com \
    --cc=paulus@samba.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=tyreld@linux.vnet.ibm.com \
    /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 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.