[U-Boot] [PATCH] spi: cadence_qspi: Enable quad mode for read and programming

Jagan Teki jteki at openedev.com
Wed Aug 26 16:52:37 CEST 2015


On 26 August 2015 at 20:14, Marek Vasut <marex at denx.de> wrote:
> On Wednesday, August 26, 2015 at 04:39:40 PM, Jagan Teki wrote:
>> On 26 August 2015 at 19:29, Marek Vasut <marex at denx.de> wrote:
>> > On Wednesday, August 26, 2015 at 03:47:28 PM, Jagan Teki wrote:
>> >> On 26 August 2015 at 13:00, Chin Liang See <clsee at altera.com> wrote:
>> >> > On Wed, 2015-08-26 at 08:57 +0200, marex at denx.de wrote:
>> >> >> On Wednesday, August 26, 2015 at 02:09:55 AM, Chin Liang See wrote:
>> >> >> > Enable the quad output fast read and quad input fast program
>> >> >> > support. Quad mode is supported by Cadence QSPI controller.
>> >> >> >
>> >> >> > Signed-off-by: Chin Liang See <clsee at altera.com>
>> >> >> > Cc: Dinh Nguyen <dinguyen at opensource.altera.com>
>> >> >> > Cc: Stefan Roese <sr at denx.de>
>> >> >> > Cc: Vikas Manocha <vikas.manocha at st.com>
>> >> >> > Cc: Jagannadh Teki <jteki at openedev.com>
>> >> >> > Cc: Pavel Machek <pavel at denx.de>
>> >> >> > Cc: Marek Vasut <marex at denx.de>
>> >> >> > ---
>> >> >> >
>> >> >> >  drivers/spi/cadence_qspi.c     |   11 +++++++++++
>> >> >> >  drivers/spi/cadence_qspi_apb.c |   16 ++++++++++++----
>> >> >> >  2 files changed, 23 insertions(+), 4 deletions(-)
>> >> >> >
>> >> >> > diff --git a/drivers/spi/cadence_qspi.c
>> >> >> > b/drivers/spi/cadence_qspi.c index 34a0f46..c6b69c4 100644
>> >> >> > --- a/drivers/spi/cadence_qspi.c
>> >> >> > +++ b/drivers/spi/cadence_qspi.c
>> >> >> > @@ -318,6 +318,16 @@ static int
>> >> >> > cadence_spi_ofdata_to_platdata(struct udevice *bus) return 0;
>> >> >> >
>> >> >> >  }
>> >> >> >
>> >> >> > +static int cadence_spi_child_pre_probe(struct udevice *dev)
>> >> >> > +{
>> >> >> > +   struct spi_slave *slave = dev_get_parentdata(dev);
>> >> >> > +
>> >> >> > +   /* Cadence QSPI controller can support quad read and program */
>> >> >> > +   slave->op_mode_rx = SPI_OPM_RX_QOF;
>> >> >> > +   slave->op_mode_tx = SPI_OPM_TX_QPP;
>> >> >> > +   return 0;
>> >> >> > +}
>> >> >> > +
>> >> >> >
>> >> >> >  static const struct dm_spi_ops cadence_spi_ops = {
>> >> >> >
>> >> >> >     .xfer           = cadence_spi_xfer,
>> >> >> >     .set_speed      = cadence_spi_set_speed,
>> >> >> >
>> >> >> > @@ -341,5 +351,6 @@ U_BOOT_DRIVER(cadence_spi) = {
>> >> >> >
>> >> >> >     .ofdata_to_platdata = cadence_spi_ofdata_to_platdata,
>> >> >> >     .platdata_auto_alloc_size = sizeof(struct
>> >> >> >     cadence_spi_platdata), .priv_auto_alloc_size = sizeof(struct
>> >> >> >     cadence_spi_priv),
>> >> >> >
>> >> >> > +   .child_pre_probe = cadence_spi_child_pre_probe,
>> >> >> >
>> >> >> >     .probe = cadence_spi_probe,
>> >> >> >
>> >> >> >  };
>> >> >>
>> >> >> Simon, can you please check if this DM bit is correct ?
>> >> >>
>> >> >> > diff --git a/drivers/spi/cadence_qspi_apb.c
>> >> >> > b/drivers/spi/cadence_qspi_apb.c index d053407..deffb6b 100644
>> >> >> > --- a/drivers/spi/cadence_qspi_apb.c
>> >> >> > +++ b/drivers/spi/cadence_qspi_apb.c
>> >> >> > @@ -29,6 +29,9 @@
>> >> >> >
>> >> >> >  #include <asm/io.h>
>> >> >> >  #include <asm/errno.h>
>> >> >> >  #include "cadence_qspi.h"
>> >> >> >
>> >> >> > +#include <spi.h>
>> >> >> > +#include <spi_flash.h>
>> >> >> > +#include "../mtd/spi/sf_internal.h"
>> >> >>
>> >> >> Why do you need this include ?
>> >> >
>> >> > Actually I am comparing the opcode to determine whether its a quad
>> >> > command. If yes, we need to setup the controller accordingly.
>> >>
>> >> Sorry, this I wouldn't recommend as of now please assign quad directly
>> >> instead setting up controller based on the flash stuff, Yes things
>> >> need to change it on u-boot like spi-nor framework and currently we
>> >> are working on it[1] will defiantly back with proper solution.
>> >>
>> >> [1]
>> >> http://git.denx.de/?p=u-boot/u-boot-spi.git;a=shortlog;h=refs/heads/spi-
>> >> no r
>> >
>> > Is this stuff in any way compatible with the spi-nor stuff in Linux ?
>>
>> Main intention is to compatible with Linux spi-nor, but instead of
>> direct porting - this way is to make
>> enhancements step by step.
>
> Why can't you port the SPI-NOR from Linux directly ?

There are some features that are not added in Linux, yet like BAR,
dual_flash and way of handling
ops like erase/read/write logic need to compatible to these features.
I'm planning to make these ops logic sits as it is and add spi-nor on
top it.

This way looks better for testing as I experienced so-far, and I'm
hoping at the end these no much significant difference between Linux
vs U-Boot except these feature sets.

thanks!
-- 
Jagan | openedev.


More information about the U-Boot mailing list