[U-Boot] [PATCH v3 085/108] spi: ich: Add support for get_mmap() method

Simon Glass sjg at chromium.org
Thu Nov 21 13:50:18 UTC 2019


Hi BIn,

On Tue, 19 Nov 2019 at 07:37, Bin Meng <bmeng.cn at gmail.com> wrote:
>
> Hi Simon,
>
> On Mon, Oct 21, 2019 at 11:40 AM Simon Glass <sjg at chromium.org> wrote:
> >
> > Add this method so that the memory-mapped location of the SPI flash can
> > be queried.
> >
> > Signed-off-by: Simon Glass <sjg at chromium.org>
> > ---
> >
> > Changes in v3: None
> > Changes in v2: None
> >
> >  drivers/spi/ich.c | 32 ++++++++++++++++++++++++++++++++
> >  1 file changed, 32 insertions(+)
> >
> > diff --git a/drivers/spi/ich.c b/drivers/spi/ich.c
> > index ae1dc64bde8..ec0f77f6e40 100644
> > --- a/drivers/spi/ich.c
> > +++ b/drivers/spi/ich.c
> > @@ -610,6 +610,37 @@ static int ich_spi_exec_op(struct spi_slave *slave, const struct spi_mem_op *op)
> >         return ret;
> >  }
> >
> > +static int ich_get_mmap_bus(struct udevice *bus, ulong *map_basep,
> > +                           uint *map_sizep, uint *offsetp)
> > +{
> > +       pci_dev_t spi_bdf;
> > +
> > +#if !CONFIG_IS_ENABLED(OF_PLATDATA)
> > +       struct pci_child_platdata *pplat = dev_get_parent_platdata(bus);
> > +
> > +       spi_bdf = pplat->devfn;
> > +#else
> > +       struct ich_spi_platdata *plat = dev_get_platdata(bus);
> > +
> > +       /*
> > +        * We cannot rely on plat->bdf being set up yet since this method can
> > +        * be called before the device is probed. Use the of-platdata directly
> > +        * instead.
> > +        */
> > +       spi_bdf = pci_x86_ofplat_get_devfn(plat->dtplat.reg[0]);
> > +#endif
> > +
> > +       return fast_spi_get_bios_mmap(spi_bdf, map_basep, map_sizep, offsetp);
>
> I think we should move fast_spi_get_bios_mmap() to this driver,
> instead of having the ICH driver depend on something external.

The problem is that this function is needed in APL's cpu_spl.c to
cache the BIOS region.and also by rom_load_image() to read from the
mapped SPI flash.

This driver is in fact not normally included in TPL, since it is quite
large and not needed.

So we have to call these functions from outside the driver and
therefore it is best to have them in the arch-specific code.

It is in intel_common so is shared.

Regards,
Simon


More information about the U-Boot mailing list