[flashrom] [PATCH 5/5] introduce a global variable to save the maximum number of bytes in an SPI transaction supported by this programmer and use that to simplify code

Stefan Tauner stefan.tauner at student.tuwien.ac.at
Fri May 20 03:00:48 CEST 2011


On Wed, 18 May 2011 00:31:52 +0200
Stefan Tauner <stefan.tauner at student.tuwien.ac.at> wrote:

parts of this are superseded by the "kill central list of SPI
programmers"-patch, namely the declaration of and writes to the global value.
the new max_data_read/write fields of the spi_programmer struct can be
used instead to simplify the code. (which one should i use in the case
that part is even wanted by you?)

> 
> Signed-off-by: Stefan Tauner <stefan.tauner at student.tuwien.ac.at>
> ---
>  ichspi.c |   45 +++++++++++++++++++++------------------------
>  1 files changed, 21 insertions(+), 24 deletions(-)
> 
> diff --git a/ichspi.c b/ichspi.c
> index aaf4df8..ab6af18 100644
> --- a/ichspi.c
> +++ b/ichspi.c
> @@ -155,6 +155,9 @@
>  /* ICH SPI configuration lock-down. May be set during chipset enabling. */
>  static int ichspi_lock = 0;
>  
> +/* Indicates maximum number of data bytes for each SPI transaction. */
> +static int ichspi_maxdata = -1;
> +
>  uint32_t ichspi_bbar = 0;
>  
>  static void *ich_spibar = NULL;
> @@ -911,37 +914,28 @@ static int ich9_run_opcode(OPCODE op, uint32_t offset,
>  static int run_opcode(OPCODE op, uint32_t offset,
>  		      uint8_t datalength, uint8_t * data)
>  {
> +	if (spi_programmer->type == SPI_CONTROLLER_NONE) {
> +		msg_perr("%s: unsupported chipset\n", __func__);
> +		return -1;
> +	}
> +
> +	if (datalength > ichspi_maxdata) {
> +		msg_perr("%s: Internal command size error for "
> +			"opcode 0x%02x, got datalength=%i, want <=%i\n",
> +			__func__, op.opcode, datalength, ichspi_maxdata);
> +		return SPI_INVALID_LENGTH;
> +	}
> +
>  	switch (spi_programmer->type) {
>  	case SPI_CONTROLLER_VIA:
> -		if (datalength > 16) {
> -			msg_perr("%s: Internal command size error for "
> -				"opcode 0x%02x, got datalength=%i, want <=16\n",
> -				__func__, op.opcode, datalength);
> -			return SPI_INVALID_LENGTH;
> -		}
> -		return ich7_run_opcode(op, offset, datalength, data, 16);
>  	case SPI_CONTROLLER_ICH7:
> -		if (datalength > 64) {
> -			msg_perr("%s: Internal command size error for "
> -				"opcode 0x%02x, got datalength=%i, want <=16\n",
> -				__func__, op.opcode, datalength);
> -			return SPI_INVALID_LENGTH;
> -		}
> -		return ich7_run_opcode(op, offset, datalength, data, 64);
> +		return ich7_run_opcode(op, offset, datalength, data, ichspi_maxdata);
>  	case SPI_CONTROLLER_ICH9:
> -		if (datalength > 64) {
> -			msg_perr("%s: Internal command size error for "
> -				"opcode 0x%02x, got datalength=%i, want <=16\n",
> -				__func__, op.opcode, datalength);
> -			return SPI_INVALID_LENGTH;
> -		}
>  		return ich9_run_opcode(op, offset, datalength, data);
>  	default:
> -		msg_perr("%s: unsupported chipset\n", __func__);
> +		/* If we ever get here, something really weird happened */
> +		return -1;
>  	}
> -
> -	/* If we ever get here, something really weird happened */
> -	return -1;
>  }
>  
>  static int ich_spi_send_command(unsigned int writecnt, unsigned int readcnt,
> @@ -1206,6 +1200,8 @@ int ich_init_spi(struct pci_dev *dev, uint32_t base, void *rcrb,
>  		break;
>  	}
>  
> +	ichspi_maxdata = 64;
> +
>  	/* SPIBAR is at RCRB+0x3020 for ICH[78] and RCRB+0x3800 for ICH9. */
>  	msg_pdbg("SPIBAR = 0x%x + 0x%04x\n", base, spibar_offset);
>  
> @@ -1356,6 +1352,7 @@ int via_init_spi(struct pci_dev *dev)
>  	/* Not sure if it speaks all these bus protocols. */
>  	buses_supported = CHIP_BUSTYPE_LPC | CHIP_BUSTYPE_FWH;
>  	register_spi_programmer(&spi_programmer_via);
> +	ichspi_maxdata = 16;
>  
>  	msg_pdbg("0x00: 0x%04x     (SPIS)\n", mmio_readw(ich_spibar + 0));
>  	msg_pdbg("0x02: 0x%04x     (SPIC)\n", mmio_readw(ich_spibar + 2));
> -- 
> 1.7.1
> 


-- 
Kind regards/Mit freundlichen Grüßen, Stefan Tauner




More information about the flashrom mailing list