Re: [U-Boot] [PATCH v4] x86: ich-spi: Convert driver to spi-mem ops

2019-08-08 Thread Bin Meng
On Thu, Aug 8, 2019 at 9:50 PM Bin Meng  wrote:
>
> On Fri, Aug 2, 2019 at 2:38 PM Bernhard Messerklinger
>  wrote:
> >
> > With the introduction of the new spi-mem model operations changed
> > slightly. The new spi-mem operations make things a bit easier to
> > handle for ich-spi flash interface. This patch converts the ich-spi
> > driver by using spi-mem operations.
> >
> > Signed-off-by: Bernhard Messerklinger 
> > 
> > ---
> >
> > Changes in v4:
> > - fix changelog; fix local variable types and order
> > Changes in v3:
> > - update erase op code handling to work with latest master
> > spi-nor driver
> > Changes in v2:
> > - make 2 routines static; update commit message a little bit
> >
> >  drivers/spi/ich.c | 258 +-
> >  drivers/spi/ich.h |   9 +-
> >  2 files changed, 95 insertions(+), 172 deletions(-)
> >
>
> Reviewed-by: Bin Meng 
>
> Tested on Intel CrownBay and MinnowMax
> Tested-by: Bin Meng 

applied to u-boot-x86, thanks!
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


Re: [U-Boot] [PATCH v4] x86: ich-spi: Convert driver to spi-mem ops

2019-08-08 Thread Bin Meng
On Fri, Aug 2, 2019 at 2:38 PM Bernhard Messerklinger
 wrote:
>
> With the introduction of the new spi-mem model operations changed
> slightly. The new spi-mem operations make things a bit easier to
> handle for ich-spi flash interface. This patch converts the ich-spi
> driver by using spi-mem operations.
>
> Signed-off-by: Bernhard Messerklinger 
> 
> ---
>
> Changes in v4:
> - fix changelog; fix local variable types and order
> Changes in v3:
> - update erase op code handling to work with latest master
> spi-nor driver
> Changes in v2:
> - make 2 routines static; update commit message a little bit
>
>  drivers/spi/ich.c | 258 +-
>  drivers/spi/ich.h |   9 +-
>  2 files changed, 95 insertions(+), 172 deletions(-)
>

Reviewed-by: Bin Meng 

Tested on Intel CrownBay and MinnowMax
Tested-by: Bin Meng 
___
U-Boot mailing list
U-Boot@lists.denx.de
https://lists.denx.de/listinfo/u-boot


[U-Boot] [PATCH v4] x86: ich-spi: Convert driver to spi-mem ops

2019-08-02 Thread Bernhard Messerklinger
With the introduction of the new spi-mem model operations changed
slightly. The new spi-mem operations make things a bit easier to
handle for ich-spi flash interface. This patch converts the ich-spi
driver by using spi-mem operations.

Signed-off-by: Bernhard Messerklinger 
---

Changes in v4:
- fix changelog; fix local variable types and order
Changes in v3:
- update erase op code handling to work with latest master
spi-nor driver
Changes in v2:
- make 2 routines static; update commit message a little bit

 drivers/spi/ich.c | 258 +-
 drivers/spi/ich.h |   9 +-
 2 files changed, 95 insertions(+), 172 deletions(-)

diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c
index 03531a8c0c..60589dfb61 100644
--- a/drivers/spi/ich.c
+++ b/drivers/spi/ich.c
@@ -14,6 +14,8 @@
 #include 
 #include 
 #include 
+#include 
+#include 
 
 #include "ich.h"
 
@@ -171,18 +173,6 @@ static int ich_init_controller(struct udevice *dev,
return 0;
 }
 
-static inline void spi_use_out(struct spi_trans *trans, unsigned bytes)
-{
-   trans->out += bytes;
-   trans->bytesout -= bytes;
-}
-
-static inline void spi_use_in(struct spi_trans *trans, unsigned bytes)
-{
-   trans->in += bytes;
-   trans->bytesin -= bytes;
-}
-
 static void spi_lock_down(struct ich_spi_platdata *plat, void *sbase)
 {
if (plat->ich_version == ICHV_7) {
@@ -213,47 +203,12 @@ static bool spi_lock_status(struct ich_spi_platdata 
*plat, void *sbase)
return lock != 0;
 }
 
-static void spi_setup_type(struct spi_trans *trans, int data_bytes)
-{
-   trans->type = 0xFF;
-
-   /* Try to guess spi type from read/write sizes */
-   if (trans->bytesin == 0) {
-   if (trans->bytesout + data_bytes > 4)
-   /*
-* If bytesin = 0 and bytesout > 4, we presume this is
-* a write data operation, which is accompanied by an
-* address.
-*/
-   trans->type = SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS;
-   else
-   trans->type = SPI_OPCODE_TYPE_WRITE_NO_ADDRESS;
-   return;
-   }
-
-   if (trans->bytesout == 1) { /* and bytesin is > 0 */
-   trans->type = SPI_OPCODE_TYPE_READ_NO_ADDRESS;
-   return;
-   }
-
-   if (trans->bytesout == 4)   /* and bytesin is > 0 */
-   trans->type = SPI_OPCODE_TYPE_READ_WITH_ADDRESS;
-
-   /* Fast read command is called with 5 bytes instead of 4 */
-   if (trans->out[0] == SPI_OPCODE_FAST_READ && trans->bytesout == 5) {
-   trans->type = SPI_OPCODE_TYPE_READ_WITH_ADDRESS;
-   --trans->bytesout;
-   }
-}
-
 static int spi_setup_opcode(struct ich_spi_priv *ctlr, struct spi_trans *trans,
bool lock)
 {
uint16_t optypes;
uint8_t opmenu[ctlr->menubytes];
 
-   trans->opcode = trans->out[0];
-   spi_use_out(trans, 1);
if (!lock) {
/* The lock is off, so just use index 0. */
ich_writeb(ctlr, trans->opcode, ctlr->opmenu);
@@ -285,12 +240,7 @@ static int spi_setup_opcode(struct ich_spi_priv *ctlr, 
struct spi_trans *trans,
 
optypes = ich_readw(ctlr, ctlr->optype);
optype = (optypes >> (opcode_index * 2)) & 0x3;
-   if (trans->type == SPI_OPCODE_TYPE_WRITE_NO_ADDRESS &&
-   optype == SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS &&
-   trans->bytesout >= 3) {
-   /* We guessed wrong earlier. Fix it up. */
-   trans->type = optype;
-   }
+
if (optype != trans->type) {
printf("ICH SPI: Transaction doesn't fit type %d\n",
   optype);
@@ -300,26 +250,6 @@ static int spi_setup_opcode(struct ich_spi_priv *ctlr, 
struct spi_trans *trans,
}
 }
 
-static int spi_setup_offset(struct spi_trans *trans)
-{
-   /* Separate the SPI address and data */
-   switch (trans->type) {
-   case SPI_OPCODE_TYPE_READ_NO_ADDRESS:
-   case SPI_OPCODE_TYPE_WRITE_NO_ADDRESS:
-   return 0;
-   case SPI_OPCODE_TYPE_READ_WITH_ADDRESS:
-   case SPI_OPCODE_TYPE_WRITE_WITH_ADDRESS:
-   trans->offset = ((uint32_t)trans->out[0] << 16) |
-   ((uint32_t)trans->out[1] << 8) |
-   ((uint32_t)trans->out[2] << 0);
-   spi_use_out(trans, 3);
-   return 1;
-   default:
-   printf("Unrecognized SPI transaction type %#x\n", trans->type);
-   return -EPROTO;
-   }
-}
-
 /*
  * Wait for up to 6s til status register bit(s) turn 1 (in case wait_til_set
  * below is true) or 0. In case the wait was for the bit(s) to set - write
@@ -350,7 +280,7 @@ static int ich_status_poll(struct ich_spi_priv *ctlr, u16