From mboxrd@z Thu Jan 1 00:00:00 1970 From: Simon Glass Date: Fri, 11 Oct 2019 20:55:30 -0600 Subject: [U-Boot] [PATCH v2 36/38] x86: Add support for booting from Fast SPI In-Reply-To: References: <20190925141147.191166-1-sjg@chromium.org> <20190925141147.191166-37-sjg@chromium.org> Message-ID: List-Id: MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit To: u-boot@lists.denx.de Hi Bin, On Wed, 2 Oct 2019 at 08:08, Bin Meng wrote: > > On Wed, Sep 25, 2019 at 10:13 PM Simon Glass 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 > > --- > > > > 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 > > +#include > > +#include > > +#include > > +#include > > + > > +/* > > + * 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