All of lore.kernel.org
 help / color / mirror / Atom feed
From: "Nicholas Piggin" <npiggin@gmail.com>
To: "Chalapathi V" <chalapathi.v@linux.ibm.com>, <qemu-devel@nongnu.org>
Cc: <qemu-ppc@nongnu.org>, <fbarrat@linux.ibm.com>, <clg@kaod.org>,
	<calebs@linux.ibm.com>, <chalapathi.v@ibm.com>,
	<saif.abrar@linux.ibm.com>, <dantan@linux.vnet.ibm.com>,
	<milesg@linux.ibm.com>, <philmd@linaro.org>,
	<alistair@alistair23.me>
Subject: Re: [PATCH v3 3/3] hw/ssi/pnv_spi: Use local var seq_index instead of get_seq_index().
Date: Tue, 08 Oct 2024 18:13:53 +1000	[thread overview]
Message-ID: <D4Q9VWVTUFEG.WMMBR56BBTY5@gmail.com> (raw)
In-Reply-To: <20240918165045.21298-4-chalapathi.v@linux.ibm.com>

On Thu Sep 19, 2024 at 2:50 AM AEST, Chalapathi V wrote:
> Use a local variable seq_index instead of repeatedly caling
> get_seq_index() method.
>
> Signed-off-by: Chalapathi V <chalapathi.v@linux.ibm.com>
> ---
>  hw/ssi/pnv_spi.c | 61 ++++++++++++++++++++++++------------------------
>  1 file changed, 31 insertions(+), 30 deletions(-)
>
> diff --git a/hw/ssi/pnv_spi.c b/hw/ssi/pnv_spi.c
> index 2fd5aa0a96..962115f40f 100644
> --- a/hw/ssi/pnv_spi.c
> +++ b/hw/ssi/pnv_spi.c
> @@ -210,15 +210,8 @@ static void transfer(PnvSpi *s)
>      fifo8_reset(&s->rx_fifo);
>  }
>  
> -static inline uint8_t get_seq_index(PnvSpi *s)
> -{
> -    return GETFIELD(SPI_STS_SEQ_INDEX, s->status);
> -}
> -
>  static inline void next_sequencer_fsm(PnvSpi *s)
>  {
> -    uint8_t seq_index = get_seq_index(s);
> -    s->status = SETFIELD(SPI_STS_SEQ_INDEX, s->status, (seq_index + 1));
>      s->status = SETFIELD(SPI_STS_SEQ_FSM, s->status, SEQ_STATE_INDEX_INCREMENT);
>  }
>  
> @@ -647,6 +640,7 @@ static void operation_sequencer(PnvSpi *s)
>      bool stop = false; /* Flag to stop the sequencer */
>      uint8_t opcode = 0;
>      uint8_t masked_opcode = 0;
> +    uint8_t seq_index;
>  
>      /*
>       * Clear the sequencer FSM error bit - general_SPI_status[3]
> @@ -660,12 +654,13 @@ static void operation_sequencer(PnvSpi *s)
>      if (GETFIELD(SPI_STS_SEQ_FSM, s->status) == SEQ_STATE_IDLE) {
>          s->status = SETFIELD(SPI_STS_SEQ_INDEX, s->status, 0);
>      }
> +    seq_index = GETFIELD(SPI_STS_SEQ_INDEX, s->status);
>      /*
>       * There are only 8 possible operation IDs to iterate through though
>       * some operations may cause more than one frame to be sequenced.
>       */
> -    while (get_seq_index(s) < NUM_SEQ_OPS) {
> -        opcode = s->seq_op[get_seq_index(s)];
> +    while (seq_index < NUM_SEQ_OPS) {
> +        opcode = s->seq_op[seq_index];
>          /* Set sequencer state to decode */
>          s->status = SETFIELD(SPI_STS_SEQ_FSM, s->status, SEQ_STATE_DECODE);
>          /*
> @@ -682,7 +677,7 @@ static void operation_sequencer(PnvSpi *s)
>          case SEQ_OP_STOP:
>              s->status = SETFIELD(SPI_STS_SEQ_FSM, s->status, SEQ_STATE_EXECUTE);
>              /* A stop operation in any position stops the sequencer */
> -            trace_pnv_spi_sequencer_op("STOP", get_seq_index(s));
> +            trace_pnv_spi_sequencer_op("STOP", seq_index);
>  
>              stop = true;
>              s->status = SETFIELD(SPI_STS_SHIFTER_FSM, s->status, FSM_IDLE);
> @@ -693,7 +688,7 @@ static void operation_sequencer(PnvSpi *s)
>  
>          case SEQ_OP_SELECT_SLAVE:
>              s->status = SETFIELD(SPI_STS_SEQ_FSM, s->status, SEQ_STATE_EXECUTE);
> -            trace_pnv_spi_sequencer_op("SELECT_SLAVE", get_seq_index(s));
> +            trace_pnv_spi_sequencer_op("SELECT_SLAVE", seq_index);
>              /*
>               * This device currently only supports a single responder
>               * connection at position 0.  De-selecting a responder is fine
> @@ -704,8 +699,7 @@ static void operation_sequencer(PnvSpi *s)
>              if (s->responder_select == 0) {
>                  trace_pnv_spi_shifter_done();
>                  qemu_set_irq(s->cs_line[0], 1);
> -                s->status = SETFIELD(SPI_STS_SEQ_INDEX, s->status,
> -                                (get_seq_index(s) + 1));
> +                seq_index++;
>                  s->status = SETFIELD(SPI_STS_SHIFTER_FSM, s->status, FSM_DONE);
>              } else if (s->responder_select != 1) {
>                  qemu_log_mask(LOG_GUEST_ERROR, "Slave selection other than 1 "
> @@ -732,13 +726,14 @@ static void operation_sequencer(PnvSpi *s)
>                   * applies once a valid responder select has occurred.
>                   */
>                  s->shift_n1_done = false;
> +                seq_index++;
>                  next_sequencer_fsm(s);

Maybe could just open-code next_sequencer_fsm() now, since a bunch of
other FSM fields seem to be open-coded?

>              }
>              break;
>  
>          case SEQ_OP_SHIFT_N1:
>              s->status = SETFIELD(SPI_STS_SEQ_FSM, s->status, SEQ_STATE_EXECUTE);
> -            trace_pnv_spi_sequencer_op("SHIFT_N1", get_seq_index(s));
> +            trace_pnv_spi_sequencer_op("SHIFT_N1", seq_index);
>              /*
>               * Only allow a shift_n1 when the state is not IDLE or DONE.
>               * In either of those two cases the sequencer is not in a proper
> @@ -770,8 +765,9 @@ static void operation_sequencer(PnvSpi *s)
>                   * transmission to the responder without requiring a refill of
>                   * the TDR between the two operations.
>                   */
> -                if (PNV_SPI_MASKED_OPCODE(s->seq_op[get_seq_index(s) + 1])
> -                                == SEQ_OP_SHIFT_N2) {
> +                if ((seq_index != 7) &&
> +                    PNV_SPI_MASKED_OPCODE(s->seq_op[(seq_index + 1)]) ==
> +                    SEQ_OP_SHIFT_N2) {
>                      send_n1_alone = false;
>                  }
>                  s->status = SETFIELD(SPI_STS_SHIFTER_FSM, s->status,

The seq_index != 7 is a new test? Is that a separate fix, I'm not
seeing how it's related to the seq_index change.

Thanks,
Nick


  reply	other threads:[~2024-10-08  8:15 UTC|newest]

Thread overview: 13+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2024-09-18 16:50 [PATCH-for-9.2 v3 0/3] hw/ssi/pnv_spi: Remove PnvXferBuffer and get_seq_index() Chalapathi V
2024-09-18 16:50 ` [PATCH v3 1/3] MAINTAINERS: Cover PowerPC SPI model in PowerNV section Chalapathi V
2024-10-08  7:44   ` Nicholas Piggin
2024-10-08 17:32     ` Chalapathi V
2024-09-18 16:50 ` [PATCH v3 2/3] hw/ssi/pnv_spi: Replace PnvXferBuffer with Fifo8 structure Chalapathi V
2024-10-08  7:59   ` Nicholas Piggin
2024-10-08 17:18     ` Chalapathi V
2024-09-18 16:50 ` [PATCH v3 3/3] hw/ssi/pnv_spi: Use local var seq_index instead of get_seq_index() Chalapathi V
2024-10-08  8:13   ` Nicholas Piggin [this message]
2024-10-08 17:34     ` Chalapathi V
2024-10-08  7:43 ` [PATCH-for-9.2 v3 0/3] hw/ssi/pnv_spi: Remove PnvXferBuffer and get_seq_index() Nicholas Piggin
2024-10-08 12:44   ` Cédric Le Goater
2024-10-08 17:40     ` Chalapathi V

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=D4Q9VWVTUFEG.WMMBR56BBTY5@gmail.com \
    --to=npiggin@gmail.com \
    --cc=alistair@alistair23.me \
    --cc=calebs@linux.ibm.com \
    --cc=chalapathi.v@ibm.com \
    --cc=chalapathi.v@linux.ibm.com \
    --cc=clg@kaod.org \
    --cc=dantan@linux.vnet.ibm.com \
    --cc=fbarrat@linux.ibm.com \
    --cc=milesg@linux.ibm.com \
    --cc=philmd@linaro.org \
    --cc=qemu-devel@nongnu.org \
    --cc=qemu-ppc@nongnu.org \
    --cc=saif.abrar@linux.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.