[U-Boot] [PATCH v2 36/38] x86: Add support for booting from Fast SPI

Simon Glass sjg at chromium.org
Sat Oct 12 02:55:30 UTC 2019


Hi Bin,

On Wed, 2 Oct 2019 at 08:08, Bin Meng <bmeng.cn at gmail.com> wrote:
>
> On Wed, Sep 25, 2019 at 10:13 PM Simon Glass <sjg at chromium.org> wrote:
> >
> > Most x86 CPUs use a mechanism where the SPI flash is mapped into the very
> > top of 32-bit address space, so that it can be executed in place and read
> > simply by copying from memory. For an 8MB ROM the mapping starts at
> > 0xff800000.
> >
> > However some recent Intel CPUs do not use a simple 1:1 memory map. Instead
> > the map starts at a different address and not all of the SPI flash is
> > accessible through the map. This 'Fast SPI' feature requires that U-Boot
> > check the location of the map. It is also possible (optionally) to read
> > from the SPI flash using a driver.
> >
> > Add support for booting from Fast SPI. The memory-mapped version is used
> > by both TPL and SPL on apollolake.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > Changes in v2:
> > - Rename the fast SPI headers
> >
> >  arch/x86/cpu/intel_common/Makefile   |  1 +
> >  arch/x86/cpu/intel_common/fast_spi.c | 48 ++++++++++++++++++++++++++++
> >  arch/x86/include/asm/spl.h           |  1 +
> >  3 files changed, 50 insertions(+)
> >  create mode 100644 arch/x86/cpu/intel_common/fast_spi.c
> >
> > diff --git a/arch/x86/cpu/intel_common/Makefile b/arch/x86/cpu/intel_common/Makefile
> > index 07f27c29ec7..2de567dd9fe 100644
> > --- a/arch/x86/cpu/intel_common/Makefile
> > +++ b/arch/x86/cpu/intel_common/Makefile
> > @@ -9,6 +9,7 @@ obj-$(CONFIG_$(SPL_TPL_)X86_32BIT_INIT) += report_platform.o
> >  obj-$(CONFIG_$(SPL_TPL_)X86_32BIT_INIT) += mrc.o
> >  endif
> >  obj-y += cpu.o
> > +obj-$(CONFIG_SPI_FLASH_INTEL_FAST) += fast_spi.o
> >  obj-y += lpc.o
> >  ifndef CONFIG_TARGET_EFI_APP
> >  obj-$(CONFIG_$(SPL_TPL_)X86_32BIT_INIT) += microcode.o
> > diff --git a/arch/x86/cpu/intel_common/fast_spi.c b/arch/x86/cpu/intel_common/fast_spi.c
> > new file mode 100644
> > index 00000000000..a7334ecf1a3
> > --- /dev/null
> > +++ b/arch/x86/cpu/intel_common/fast_spi.c
> > @@ -0,0 +1,48 @@
> > +// SPDX-License-Identifier: GPL-2.0
> > +/*
> > + * Copyright 2019 Google LLC
> > + */
> > +
> > +#include <common.h>
> > +#include <asm/io.h>
> > +#include <asm/pci.h>
> > +#include <asm/arch/fast_spi.h>
> > +#include <asm/arch/iomap.h>
> > +
> > +/*
> > + * Returns bios_start and fills in size of the BIOS region.
> > + */
> > +ulong fast_spi_get_bios_region(struct fast_spi_regs *regs, size_t *bios_size)
>
> I suspect we need a public header file for these 2 APIs?

Yes but I've added it in a separate patch since it is apollolake-specific.

But based on your other comments I wonder if I can fix that and use
the generic driver.

Regards,
Simon


More information about the U-Boot mailing list