[U-Boot] [PATCH v3] x86: baytrail: Configure FSP UPD from device tree

Andrew Bradford andrew at bradfordembedded.com
Fri Aug 7 14:11:40 CEST 2015


Hi Bin,

On 08/07 08:23, Bin Meng wrote:
> Hi Andrew,
> 
> On Fri, Aug 7, 2015 at 4:08 AM, Andrew Bradford
> <andrew at bradfordembedded.com> wrote:
> > From: Andrew Bradford <andrew.bradford at kodakalaris.com>
> >
> > Allow for configuration of FSP UPD from the device tree which will
> > override any settings which the FSP was built with itself.
> >
> > Modify the MinnowMax and BayleyBay boards to transfer sensible UPD
> > settings from the Intel FSPv4 Gold release to the respective dts files,
> > with the condition that the memory-down parameters for MinnowMax are
> > also used.
> >
> 
> Thanks for updating BayleyBay dts as well :)

You're welcome :)
My custom board actually boots with the Bayley Bay configuration, once I
change out the dts to use your D0 stepping microcode patch, so that was
a good check for me.

> > Signed-off-by: Andrew Bradford <andrew.bradford at kodakalaris.com>
> > ---
> 
> Reviewed-by: Bin Meng <bmeng.cn at gmail.com>
> Tested-by: Bin Meng <bmeng.cn at gmail.com>
> 
> But please see some comments/nits below.

Would it be best if I fix your comments/nits and send a v4?

> >
> > Changes from v2:
> > - Switch to using booleans in dts, where appropriate.
> > - Add Bayley Bay dts modifications.
> > - Clarify docs to show bool versus int properties.
> > - Include enable-igt property from FSPv4.
> >
> > Changes from v1:
> > - Use "-" rather than "_" in dt property names.
> > - Use "Bay Trail" for the formal name of the Intel product family.
> > - Use an "fsp," prefix for dt property names for clarity.
> > - Fix minor code indentation issues.
> > - Create a dt subnode for the memory-down-params.
> > - Clarify documentation that dt overrides the FSP's config, so we don't
> >   use booleans.
> >
> >  arch/x86/cpu/baytrail/fsp_configs.c                | 167 +++++++++++++++++----
> >  arch/x86/dts/bayleybay.dts                         |  40 +++++
> >  arch/x86/dts/minnowmax.dts                         |  58 +++++++
> >  .../misc/intel,baytrail-fsp.txt                    | 158 +++++++++++++++++++
> >  include/fdtdec.h                                   |   2 +
> >  lib/fdtdec.c                                       |   2 +
> >  6 files changed, 397 insertions(+), 30 deletions(-)
> >  create mode 100644 doc/device-tree-bindings/misc/intel,baytrail-fsp.txt
> >
> > diff --git a/arch/x86/cpu/baytrail/fsp_configs.c b/arch/x86/cpu/baytrail/fsp_configs.c
> > index 86b6926..1e5656f 100644
> > --- a/arch/x86/cpu/baytrail/fsp_configs.c
> > +++ b/arch/x86/cpu/baytrail/fsp_configs.c
> > @@ -1,14 +1,18 @@
> >  /*
> >   * Copyright (C) 2013, Intel Corporation
> >   * Copyright (C) 2014, Bin Meng <bmeng.cn at gmail.com>
> > + * Copyright (C) 2015, Kodak Alaris, Inc
> >   *
> >   * SPDX-License-Identifier:    Intel
> >   */
> >
> >  #include <common.h>
> > +#include <fdtdec.h>
> >  #include <asm/arch/fsp/azalia.h>
> >  #include <asm/fsp/fsp_support.h>
> >
> > +DECLARE_GLOBAL_DATA_PTR;
> > +
> >  /* ALC262 Verb Table - 10EC0262 */
> >  static const uint32_t verb_table_data13[] = {
> >         /* Pin Complex (NID 0x11) */
> > @@ -116,41 +120,144 @@ const struct pch_azalia_config azalia_config = {
> >         .reset_wait_timer_us = 300
> >  };
> >
> > +/**
> > + * Override the FSP's UPD.
> > + * If the device tree does not specify a integer setting, use the default
> 
> Nits: an integer
> 
> > + * provided in Intel's Baytrail_FSP_Gold4.tgz release FSP/BayleyBayFsp.bsf file.
> > + */
> >  void update_fsp_upd(struct upd_region *fsp_upd)
> >  {
> >         struct memory_down_data *mem;
> > +       const void *blob = gd->fdt_blob;
> > +       int node;
> >
> > -       /*
> > -        * Configure everything here to avoid the poor hard-pressed user
> > -        * needing to run Intel's binary configuration tool. It may also allow
> > -        * us to support the 1GB single core variant easily.
> > -        *
> > -        * TODO(sjg at chromium.org): Move to device tree
> > -        */
> > -       fsp_upd->mrc_init_tseg_size = 8;
> > -       fsp_upd->mrc_init_mmio_size = 0x800;
> 
> One general comment: I think we should replace these hardcoded numbers
> with meaningful macros (eg: 0x800 means MMIO uses 2GB space, that's
> why we see previous the pci does not work on a 4GB DIMM as FSP only
> maps 2GB RAM per this setting). See Intel's Baytrail_FSP_Gold4.tgz
> release FSP/BayleyBayFsp.bsf file, it has the details of how each
> magic number maps to what meaning. Will you do a follow-up patch for
> this? I can do that as well.

I can do this.

For Quark, I see that there's both include/dt-bindings/mrc/quark.h (for
the dts to use) and arch/x86/include/asm/arch-quark/mrc.h (for code to
use).  These two files seem to duplicate some of the same #defines.  For
the FSP on Bay Trail, would it be recommended to follow a similar pair
of header files as are used for MRC on Quark or should there just be a
single header file defining the FSP magic numbers?

Regarding the MMIO region, the other choices in the FSP are 1 GB, 1.5
GB, and 2 GB.  Any of those choices will cause issues when the system
has 4 GB of SDRAM, unless I'm mistaken.  Although I'm fairly sure we
have some u-boot things hard coded to 0x80000000 for the RAM top in 32
bit mode, so changing that FSP configuration may cause issues...

> > -       fsp_upd->emmc_boot_mode = 0xff;
> > -       fsp_upd->enable_sdio = 1;
> > -       fsp_upd->enable_sdcard = 1;
> > -       fsp_upd->enable_hsuart0 = 1;
> >         fsp_upd->azalia_config_ptr = (uint32_t)&azalia_config;
> > -       fsp_upd->enable_i2_c0 = 0;
> > -       fsp_upd->enable_i2_c2 = 0;
> > -       fsp_upd->enable_i2_c3 = 0;
> > -       fsp_upd->enable_i2_c4 = 0;
> > -       fsp_upd->enable_xhci = 0;
> > -       fsp_upd->igd_render_standby = 1;
> > +
> > +       node = fdtdec_next_compatible(blob, 0, COMPAT_INTEL_BAYTRAIL_FSP);
> > +       if (node < 0) {
> > +               debug("%s: Cannot find FSP node\n", __func__);
> > +               return;
> > +       }
> > +
> > +       fsp_upd->mrc_init_tseg_size = fdtdec_get_int(blob, node,
> > +                                                    "fsp,mrc-init-tseg-size",
> > +                                                    0);
> > +       fsp_upd->mrc_init_mmio_size = fdtdec_get_int(blob, node,
> > +                                                    "fsp,mrc-init-mmio-size",
> > +                                                    0x800);
> > +       fsp_upd->mrc_init_spd_addr1 = fdtdec_get_int(blob, node,
> > +                                                    "fsp,mrc-init-spd-addr1",
> > +                                                    0xA0);
> 
> Nits: please use 0xa0 (lower case)
> 
> > +       fsp_upd->mrc_init_spd_addr2 = fdtdec_get_int(blob, node,
> > +                                                    "fsp,mrc-init-spd-addr2",
> > +                                                    0xA2);
> 
> Ditto.
> 
> > +       fsp_upd->emmc_boot_mode = fdtdec_get_int(blob, node,
> > +                                                "fsp,emmc-boot-mode", 2);
> > +       fsp_upd->enable_sdio = fdtdec_get_bool(blob, node, "fsp,enable-sdio");
> > +       fsp_upd->enable_sdcard = fdtdec_get_bool(blob, node,
> > +                                                "fsp,enable-sdcard");
> > +       fsp_upd->enable_hsuart0 = fdtdec_get_bool(blob, node,
> > +                                                 "fsp,enable-hsuart0");
> > +       fsp_upd->enable_hsuart1 = fdtdec_get_bool(blob, node,
> > +                                                 "fsp,enable-hsuart1");
> > +       fsp_upd->enable_spi = fdtdec_get_bool(blob, node, "fsp,enable-spi");
> > +       fsp_upd->enable_sata = fdtdec_get_bool(blob, node, "fsp,enable-sata");
> > +       fsp_upd->sata_mode = fdtdec_get_int(blob, node, "fsp,sata-mode", 1);
> > +       fsp_upd->enable_azalia = fdtdec_get_bool(blob, node,
> > +                                                "fsp,enable-azalia");
> > +       fsp_upd->enable_xhci = fdtdec_get_bool(blob, node, "fsp,enable-xhci");
> > +       fsp_upd->enable_lpe = fdtdec_get_bool(blob, node, "fsp,enable-lpe");
> > +       fsp_upd->lpss_sio_enable_pci_mode = fdtdec_get_bool(blob, node,
> > +                                                          "fsp,lpss-sio-enable-pci-mode");
> > +       fsp_upd->enable_dma0 = fdtdec_get_bool(blob, node, "fsp,enable-dma0");
> > +       fsp_upd->enable_dma1 = fdtdec_get_bool(blob, node, "fsp,enable-dma1");
> > +       fsp_upd->enable_i2_c0 = fdtdec_get_bool(blob, node, "fsp,enable-i2c0");
> > +       fsp_upd->enable_i2_c1 = fdtdec_get_bool(blob, node, "fsp,enable-i2c1");
> > +       fsp_upd->enable_i2_c2 = fdtdec_get_bool(blob, node, "fsp,enable-i2c2");
> > +       fsp_upd->enable_i2_c3 = fdtdec_get_bool(blob, node, "fsp,enable-i2c3");
> > +       fsp_upd->enable_i2_c4 = fdtdec_get_bool(blob, node, "fsp,enable-i2c4");
> > +       fsp_upd->enable_i2_c5 = fdtdec_get_bool(blob, node, "fsp,enable-i2c5");
> > +       fsp_upd->enable_i2_c6 = fdtdec_get_bool(blob, node, "fsp,enable-i2c6");
> > +       fsp_upd->enable_pwm0 = fdtdec_get_bool(blob, node, "fsp,enable-pwm0");
> > +       fsp_upd->enable_pwm1 = fdtdec_get_bool(blob, node, "fsp,enable-pwm1");
> > +       fsp_upd->enable_hsi = fdtdec_get_bool(blob, node, "fsp,enable-hsi");
> > +       fsp_upd->igd_dvmt50_pre_alloc = fdtdec_get_int(blob, node,
> > +                                                      "fsp,igd-dvmt50-pre-alloc",
> > +                                                      2);
> > +       fsp_upd->aperture_size = fdtdec_get_int(blob, node, "fsp,aperture-size",
> > +                                               2);
> > +       fsp_upd->gtt_size = fdtdec_get_int(blob, node, "fsp,gtt-size", 2);
> > +       fsp_upd->serial_debug_port_address = fdtdec_get_int(blob, node,
> > +                                                           "fsp,serial-debug-port-address",
> > +                                                           0x3F8);
> 
> Ditto.
> 
> > +       fsp_upd->serial_debug_port_type = fdtdec_get_int(blob, node,
> > +                                                        "fsp,serial-debug-port-type",
> > +                                                        1);
> > +       fsp_upd->mrc_debug_msg = fdtdec_get_bool(blob, node,
> > +                                                "fsp,mrc-debug-msg");
> > +       fsp_upd->isp_enable = fdtdec_get_bool(blob, node, "fsp,isp-enable");
> > +       fsp_upd->scc_enable_pci_mode = fdtdec_get_bool(blob, node,
> > +                                                      "fsp,scc-enable-pci-mode");
> > +       fsp_upd->igd_render_standby = fdtdec_get_bool(blob, node,
> > +                                                     "fsp,igd-render-standby");
> > +       fsp_upd->txe_uma_enable = fdtdec_get_bool(blob, node,
> > +                                                 "fsp,txe-uma-enable");
> > +       fsp_upd->os_selection = fdtdec_get_int(blob, node, "fsp,os-selection", 4);
> > +       fsp_upd->emmc45_ddr50_enabled = fdtdec_get_bool(blob, node,
> > +                                                       "fsp,emmc45-ddr50-enabled");
> > +       fsp_upd->emmc45_hs200_enabled = fdtdec_get_bool(blob, node,
> > +                                                       "fsp,emmc45-hs200-enabled");
> > +       fsp_upd->emmc45_retune_timer_value = fdtdec_get_int(blob, node,
> > +                                                           "fsp,emmc45-retune-timer-value",
> > +                                                           8);
> > +       fsp_upd->enable_igd = fdtdec_get_bool(blob, node, "fsp,enable-igd");
> >
> >         mem = &fsp_upd->memory_params;
> > -       mem->enable_memory_down = 1;
> > -       mem->dram_speed = 1;
> > -       mem->dimm_width = 1;
> > -       mem->dimm_density = 2;
> > -       mem->dimm_tcl = 0xb;
> > -       mem->dimm_trpt_rcd = 0xb;
> > -       mem->dimm_twr = 0xc;
> > -       mem->dimm_twtr = 6;
> > -       mem->dimm_trrd = 6;
> > -       mem->dimm_trtp = 6;
> > -       mem->dimm_tfaw = 0x14;
> > +       mem->enable_memory_down = fdtdec_get_bool(blob, node,
> > +                                                 "fsp,enable-memory-down");
> > +       if (mem->enable_memory_down) {
> > +               node = fdtdec_next_compatible(blob, node,
> > +                                             COMPAT_INTEL_BAYTRAIL_FSP_MDP);
> > +               if (node < 0) {
> > +                       debug("%s: Cannot find FSP memory-down-params node\n",
> > +                             __func__);
> > +               } else {
> > +                       mem->dram_speed = fdtdec_get_int(blob, node,
> > +                                                        "fsp,dram-speed",
> > +                                                        0x02);
> > +                       mem->dram_type = fdtdec_get_int(blob, node,
> > +                                                       "fsp,dram-type", 0x01);
> > +                       mem->dimm_0_enable = fdtdec_get_bool(blob, node,
> > +                                                            "fsp,dimm-0-enable");
> > +                       mem->dimm_1_enable = fdtdec_get_bool(blob, node,
> > +                                                            "fsp,dimm-1-enable");
> > +                       mem->dimm_width = fdtdec_get_int(blob, node,
> > +                                                        "fsp,dimm-width",
> > +                                                        0x00);
> > +                       mem->dimm_density = fdtdec_get_int(blob, node,
> > +                                                          "fsp,dimm-density",
> > +                                                          0x01);
> > +                       mem->dimm_bus_width = fdtdec_get_int(blob, node,
> > +                                                            "fsp,dimm-bus-width",
> > +                                                            0x03);
> > +                       mem->dimm_sides = fdtdec_get_int(blob, node,
> > +                                                        "fsp,dimm-sides",
> > +                                                        0x00);
> > +                       mem->dimm_tcl = fdtdec_get_int(blob, node,
> > +                                                      "fsp,dimm-tcl", 0x09);
> > +                       mem->dimm_trpt_rcd = fdtdec_get_int(blob, node,
> > +                                                           "fsp,dimm-trpt-rcd",
> > +                                                           0x09);
> > +                       mem->dimm_twr = fdtdec_get_int(blob, node,
> > +                                                      "fsp,dimm-twr", 0x0A);
> > +                       mem->dimm_twtr = fdtdec_get_int(blob, node,
> > +                                                       "fsp,dimm-twtr", 0x05);
> > +                       mem->dimm_trrd = fdtdec_get_int(blob, node,
> > +                                                       "fsp,dimm-trrd", 0x04);
> > +                       mem->dimm_trtp = fdtdec_get_int(blob, node,
> > +                                                       "fsp,dimm-trtp", 0x05);
> > +                       mem->dimm_tfaw = fdtdec_get_int(blob, node,
> > +                                                       "fsp,dimm-tfaw", 0x14);
> > +               }
> > +       }
> >  }
> > diff --git a/arch/x86/dts/bayleybay.dts b/arch/x86/dts/bayleybay.dts
> > index 9f8fa70..0ca7c3e 100644
> > --- a/arch/x86/dts/bayleybay.dts
> > +++ b/arch/x86/dts/bayleybay.dts
> > @@ -188,6 +188,46 @@
> >                 };
> >         };
> >
> > +       fsp {
> > +               compatible = "intel,baytrail-fsp";
> > +               fsp,mrc-init-tseg-size = <0>;
> > +               fsp,mrc-init-mmio-size = <0x800>;
> > +               fsp,mrc-init-spd-addr1 = <0xa0>;
> > +               fsp,mrc-init-spd-addr2 = <0xa2>;
> > +               fsp,emmc-boot-mode = <2>;
> > +               fsp,enable-sdio;
> > +               fsp,enable-sdcard;
> > +               fsp,enable-hsuart1;
> > +               fsp,enable-spi;
> > +               fsp,enable-sata;
> > +               fsp,sata-mode = <1>;
> > +               fsp,enable-xhci;
> > +               fsp,enable-lpe;
> > +               fsp,lpss-sio-enable-pci-mode;
> > +               fsp,enable-dma0;
> > +               fsp,enable-dma1;
> > +               fsp,enable-i2c0;
> > +               fsp,enable-i2c1;
> > +               fsp,enable-i2c2;
> > +               fsp,enable-i2c3;
> > +               fsp,enable-i2c4;
> > +               fsp,enable-i2c5;
> > +               fsp,enable-i2c6;
> > +               fsp,enable-pwm0;
> > +               fsp,enable-pwm1;
> > +               fsp,igd-dvmt50-pre-alloc = <2>;
> > +               fsp,aperture-size = <2>;
> > +               fsp,gtt-size = <2>;
> > +               fsp,serial-debug-port-address = <0x3f8>;
> > +               fsp,serial-debug-port-type = <1>;
> > +               fsp,mrc-debug-msg;
> > +               fsp,scc-enable-pci-mode;
> > +               fsp,os-selection = <4>;
> > +               fsp,emmc45-ddr50-enabled;
> > +               fsp,emmc45-retune-timer-value = <8>;
> > +               fsp,enable-igd;
> > +       };
> > +
> >         microcode {
> >                 update at 0 {
> >  #include "microcode/m0230671117.dtsi"
> > diff --git a/arch/x86/dts/minnowmax.dts b/arch/x86/dts/minnowmax.dts
> > index 9527233..4c9e265 100644
> > --- a/arch/x86/dts/minnowmax.dts
> > +++ b/arch/x86/dts/minnowmax.dts
> > @@ -122,6 +122,64 @@
> >                         0x01000000 0x0 0x2000 0x2000 0 0xe000>;
> >         };
> >
> > +       fsp {
> > +               compatible = "intel,baytrail-fsp";
> > +               fsp,mrc-init-tseg-size = <0>;
> > +               fsp,mrc-init-mmio-size = <0x800>;
> > +               fsp,mrc-init-spd-addr1 = <0xa0>;
> > +               fsp,mrc-init-spd-addr2 = <0xa2>;
> > +               fsp,emmc-boot-mode = <2>;
> > +               fsp,enable-sdio;
> > +               fsp,enable-sdcard;
> > +               fsp,enable-hsuart1;
> > +               fsp,enable-spi;
> > +               fsp,enable-sata;
> > +               fsp,sata-mode = <1>;
> > +               fsp,enable-xhci;
> > +               fsp,enable-lpe;
> > +               fsp,lpss-sio-enable-pci-mode;
> > +               fsp,enable-dma0;
> > +               fsp,enable-dma1;
> > +               fsp,enable-i2c0;
> > +               fsp,enable-i2c1;
> > +               fsp,enable-i2c2;
> > +               fsp,enable-i2c3;
> > +               fsp,enable-i2c4;
> > +               fsp,enable-i2c5;
> > +               fsp,enable-i2c6;
> > +               fsp,enable-pwm0;
> > +               fsp,enable-pwm1;
> > +               fsp,igd-dvmt50-pre-alloc = <2>;
> > +               fsp,aperture-size = <2>;
> > +               fsp,gtt-size = <2>;
> > +               fsp,serial-debug-port-address = <0x3f8>;
> > +               fsp,serial-debug-port-type = <1>;
> > +               fsp,mrc-debug-msg;
> > +               fsp,scc-enable-pci-mode;
> > +               fsp,os-selection = <4>;
> > +               fsp,emmc45-ddr50-enabled;
> > +               fsp,emmc45-retune-timer-value = <8>;
> > +               fsp,enable-igd;
> > +               fsp,enable-memory-down;
> > +               fsp,memory-down-params {
> > +                       compatible = "intel,baytrail-fsp-mdp";
> > +                       fsp,dram-speed = <1>;
> > +                       fsp,dram-type = <1>;
> > +                       fsp,dimm-0-enable;
> > +                       fsp,dimm-width = <1>;
> > +                       fsp,dimm-density = <2>;
> > +                       fsp,dimm-bus-width = <3>;
> > +                       fsp,dimm-sides = <0>;
> > +                       fsp,dimm-tcl = <0xb>;
> > +                       fsp,dimm-trpt-rcd = <0xb>;
> > +                       fsp,dimm-twr = <0xc>;
> > +                       fsp,dimm-twtr = <6>;
> > +                       fsp,dimm-trrd = <6>;
> > +                       fsp,dimm-trtp = <6>;
> > +                       fsp,dimm-tfaw = <0x14>;
> > +               };
> > +       };
> > +
> >         spi {
> >                 #address-cells = <1>;
> >                 #size-cells = <0>;
> > diff --git a/doc/device-tree-bindings/misc/intel,baytrail-fsp.txt b/doc/device-tree-bindings/misc/intel,baytrail-fsp.txt
> > new file mode 100644
> > index 0000000..cb9dd04
> > --- /dev/null
> > +++ b/doc/device-tree-bindings/misc/intel,baytrail-fsp.txt
> > @@ -0,0 +1,158 @@
> > +Intel Bay Trail FSP UPD Binding
> > +==============================
> 
> Nits: please add one more = to align with the end of 'Binding'
> 
> > +
> > +The device tree node which describes the overriding of the Intel Bay Trail FSP
> > +UPD data for configuring the SoC.
> > +
> > +All properties can be found within the `upd-region` struct in
> > +arch/x86/include/asm/arch-baytrail/fsp/fsp-vpd.h, under the same names, and in
> 
> Should be fsp_vpd.h
> 
> > +Intel's FSP Binary Configuration Tool for Bay Trail.  This list of properties is
> > +matched up to Intel's E3800 FSPv4 release.
> > +
> > +# Boolean properties:
> > +
> > +- fsp,enable-sdio
> > +- fsp,enable-sdcard
> > +- fsp,enable-hsuart0
> > +- fsp,enable-hsuart1
> > +- fsp,enable-spi
> > +- fsp,enable-sata
> > +- fsp,enable-azalia
> > +- fsp,enable-xhci
> > +- fsp,enable-lpe
> > +- fsp,lpss-sio-enable-pci-mode
> > +- fsp,enable-dma0
> > +- fsp,enable-dma1
> > +- fsp,enable-i2-c0
> > +- fsp,enable-i2-c1
> > +- fsp,enable-i2-c2
> > +- fsp,enable-i2-c3
> > +- fsp,enable-i2-c4
> > +- fsp,enable-i2-c5
> > +- fsp,enable-i2-c6
> > +- fsp,enable-pwm0
> > +- fsp,enable-pwm1
> > +- fsp,enable-hsi
> > +- fsp,mrc-debug-msg
> > +- fsp,isp-enable
> > +- fsp,scc-enable-pci-mode
> > +- fsp,igd-render-standby
> > +- fsp,txe-uma-enable
> > +- fsp,emmc45-ddr50-enabled
> > +- fsp,emmc45-hs200-enabled
> > +- fsp,enable-igd
> > +- fsp,enable-memory-down
> > +
> > +If you set "fsp,enable-memory-down" you are strongly encouraged to provide an
> > +"fsp,memory-down-params{};" to specify how your memory is configured.  If you do
> > +not set "fsp,enable-memory-down", then the DIMM SPD information will be
> > +discovered by the FSP and used to setup main memory.
> > +
> > +
> > +# Integer properties:
> > +
> > +- fsp,mrc-init-tseg-size
> > +- fsp,mrc-init-mmio-size
> > +- fsp,mrc-init-spd-addr1
> > +- fsp,mrc-init-spd-addr2
> > +- fsp,emmc-boot-mode
> > +- fsp,sata-mode
> > +- fsp,igd-dvmt50-pre-alloc
> > +- fsp,aperture-size
> > +- fsp,gtt-size
> > +- fsp,serial-debug-port-address
> > +- fsp,serial-debug-port-type
> > +- fsp,os-selection
> > +- fsp,emmc45-retune-timer-value
> > +
> > +- fsp,memory-down-params {
> > +
> > +       # Boolean properties:
> > +
> > +       - fsp,dimm-0-enable
> > +       - fsp,dimm-1-enable
> > +
> > +       # Integer properties:
> > +
> > +       - fsp,dram-speed
> > +       - fsp,dram-type
> > +       - fsp,dimm-width
> > +       - fsp,dimm-density
> > +       - fsp,dimm-bus-width
> > +       - fsp,dimm-sides
> > +       - fsp,dimm-tcl
> > +       - fsp,dimm-trpt-rcd
> > +       - fsp,dimm-twr
> > +       - fsp,dimm-twtr
> > +       - fsp,dimm-trrd
> > +       - fsp,dimm-trtp
> > +       - fsp,dimm-tfaw
> > +};
> > +
> > +
> > +Example (from MinnowMax Dual Core):
> > +-----------------------------------
> > +
> > +/ {
> > +       ...
> > +
> > +       fsp {
> > +               compatible = "intel,baytrail-fsp";
> > +               fsp,mrc-init-tseg-size = <0>;
> > +               fsp,mrc-init-mmio-size = <0x800>;
> > +               fsp,mrc-init-spd-addr1 = <0xa0>;
> > +               fsp,mrc-init-spd-addr2 = <0xa2>;
> > +               fsp,emmc-boot-mode = <2>;
> > +               fsp,enable-sdio;
> > +               fsp,enable-sdcard;
> > +               fsp,enable-hsuart1;
> > +               fsp,enable-spi;
> > +               fsp,enable-sata;
> > +               fsp,sata-mode = <1>;
> > +               fsp,enable-xhci;
> > +               fsp,enable-lpe;
> > +               fsp,lpss-sio-enable-pci-mode;
> > +               fsp,enable-dma0;
> > +               fsp,enable-dma1;
> > +               fsp,enable-i2c0;
> > +               fsp,enable-i2c1;
> > +               fsp,enable-i2c2;
> > +               fsp,enable-i2c3;
> > +               fsp,enable-i2c4;
> > +               fsp,enable-i2c5;
> > +               fsp,enable-i2c6;
> > +               fsp,enable-pwm0;
> > +               fsp,enable-pwm1;
> > +               fsp,igd-dvmt50-pre-alloc = <2>;
> > +               fsp,aperture-size = <2>;
> > +               fsp,gtt-size = <2>;
> > +               fsp,serial-debug-port-address = <0x3f8>;
> > +               fsp,serial-debug-port-type = <1>;
> > +               fsp,mrc-debug-msg;
> > +               fsp,scc-enable-pci-mode;
> > +               fsp,os-selection = <4>;
> > +               fsp,emmc45-ddr50-enabled;
> > +               fsp,emmc45-retune-timer-value = <8>;
> > +               fsp,enable-igd;
> > +               fsp,enable-memory-down;
> > +               fsp,memory-down-params {
> > +                       compatible = "intel,baytrail-fsp-mdp";
> > +                       fsp,dram-speed = <1>;
> > +                       fsp,dram-type = <1>;
> > +                       fsp,dimm-0-enable;
> > +                       fsp,dimm-width = <1>;
> > +                       fsp,dimm-density = <2>;
> > +                       fsp,dimm-bus-width = <3>;
> > +                       fsp,dimm-sides = <0>;
> > +                       fsp,dimm-tcl = <0xb>;
> > +                       fsp,dimm-trpt-rcd = <0xb>;
> > +                       fsp,dimm-twr = <0xc>;
> > +                       fsp,dimm-twtr = <6>;
> > +                       fsp,dimm-trrd = <6>;
> > +                       fsp,dimm-trtp = <6>;
> > +                       fsp,dimm-tfaw = <0x14>;
> > +               };
> > +       };
> > +
> > +       ...
> > +};
> > diff --git a/include/fdtdec.h b/include/fdtdec.h
> > index 4b3f8d1..987d51a 100644
> > --- a/include/fdtdec.h
> > +++ b/include/fdtdec.h
> > @@ -186,6 +186,8 @@ enum fdt_compat_id {
> >         COMPAT_SOCIONEXT_XHCI,          /* Socionext UniPhier xHCI */
> >         COMPAT_INTEL_PCH,               /* Intel PCH */
> >         COMPAT_INTEL_IRQ_ROUTER,        /* Intel Interrupt Router */
> > +       COMPAT_INTEL_BAYTRAIL_FSP,      /* Intel Bay Trail FSP */
> > +       COMPAT_INTEL_BAYTRAIL_FSP_MDP,  /* Intel Bay Trail FSP memory-down params */
> >
> >         COMPAT_COUNT,
> >  };
> > diff --git a/lib/fdtdec.c b/lib/fdtdec.c
> > index 48667ef..42e8a8b 100644
> > --- a/lib/fdtdec.c
> > +++ b/lib/fdtdec.c
> > @@ -78,6 +78,8 @@ static const char * const compat_names[COMPAT_COUNT] = {
> >         COMPAT(SOCIONEXT_XHCI, "socionext,uniphier-xhci"),
> >         COMPAT(COMPAT_INTEL_PCH, "intel,bd82x6x"),
> >         COMPAT(COMPAT_INTEL_IRQ_ROUTER, "intel,irq-router"),
> > +       COMPAT(COMPAT_INTEL_BAYTRAIL_FSP, "intel,baytrail-fsp"),
> > +       COMPAT(COMPAT_INTEL_BAYTRAIL_FSP_MDP, "intel,baytrail-fsp-mdp"),
> >  };
> >
> >  const char *fdtdec_get_compatible(enum fdt_compat_id id)
> > --

Thanks for the review! :)
-Andrew


More information about the U-Boot mailing list