[U-Boot] [PATCH v2 12/38] x86: spi: Add a driver for the Intel Fast SPI interface

Simon Glass sjg at chromium.org
Sat Oct 19 02:43:59 UTC 2019


Hi Bin,

On Wed, 9 Oct 2019 at 07:10, Bin Meng <bmeng.cn at gmail.com> wrote:

> Hi Simon,
>
> On Wed, Sep 25, 2019 at 10:12 PM Simon Glass <sjg at chromium.org> wrote:
> >
> > This provides access to SPI flash both through a read-only memory map and
> > with operations to erase and write flash. It supports 4KB or 64KB erase
> > sizes.
> >
>
> I read the SPI controller chapter in the datasheet of apollolake as
> well as some latest x86 desktop processors and believe they are
> compatible with the existing LPC SPI controller, the one used in ICH7
> and ICH9. In fact, in Linux, these SPI controllers are supported by
> the same intel-spi-pci.c driver (probe interface, PCI), and is
> actually using the same intel-spi.c core driver.
>
> So I think we should consider expanding the existing ICH SPI driver in
> U-Boot to support the PCI variants too.
>

As discussed elsewhere I'll give this another try.

>
> > This driver is used by Apollolake.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > Changes in v2:
> > - Add the missing header file
> > - Add support for of-platdata for TPL
> >
> >  drivers/mtd/spi/Kconfig          |   9 +
> >  drivers/mtd/spi/Makefile         |   1 +
> >  drivers/mtd/spi/intel_fast_spi.c | 360 +++++++++++++++++++++++++++++++
> >  3 files changed, 370 insertions(+)
> >  create mode 100644 drivers/mtd/spi/intel_fast_spi.c
> >
>

[..]


> > +static void fast_spi_early_init(struct udevice *dev)
> > +{
> > +       struct fast_spi_platdata *plat = dev_get_platdata(dev);
> > +       pci_dev_t pdev = plat->bdf;
> > +
> > +       /* Clear BIT 1-2 SPI Command Register */
> > +       //remove
> > +       pci_x86_clrset_config(pdev, PCI_COMMAND, PCI_COMMAND_MASTER |
> > +                             PCI_COMMAND_MEMORY, 0, PCI_SIZE_8);
> > +
> > +       /* Program Temporary BAR for SPI */
> > +       pci_x86_write_config(pdev, PCI_BASE_ADDRESS_0,
> > +                            plat->mmio_base |
> PCI_BASE_ADDRESS_SPACE_MEMORY,
> > +                            PCI_SIZE_32);
> > +
> > +       /* Enable Bus Master and MMIO Space */
> > +       pci_x86_clrset_config(pdev, PCI_COMMAND, 0, PCI_COMMAND_MASTER |
> > +                             PCI_COMMAND_MEMORY, PCI_SIZE_8);
> > +
> > +       /*
> > +        * Disable the BIOS write protect so write commands are allowed.
> > +        * Enable Prefetching and caching.
> > +        */
> > +       pci_x86_clrset_config(pdev, SPIBAR_BIOS_CONTROL,
> > +                             SPIBAR_BIOS_CONTROL_EISS |
> > +                             SPIBAR_BIOS_CONTROL_CACHE_DISABLE,
> > +                             SPIBAR_BIOS_CONTROL_WPD |
> > +                             SPIBAR_BIOS_CONTROL_PREFETCH_ENABLE,
> PCI_SIZE_8);
>
> I wonder why are these needed, IIUC we rely on FSP2 to initialize the
> SoC and I believe for SPI these are some basic settings and registers
> should have already be programmed to sane values, no?
>

Which part of the FSP2? This code is executed in TPL so no part of the FSP
has been executed yet. Even when we figure out how to run FSP-T (which will
run befor ethis code) I am not sure that the FSP will do this.

Regards,
Simon


More information about the U-Boot mailing list