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

Simon Glass sjg at chromium.org
Fri Jul 10 14:53:33 CEST 2015


Hi,

On 8 July 2015 at 05:30, Andrew Bradford <andrew at bradfordembedded.com> wrote:
> Hi Bin,
>
> On 07/08 11:18, Bin Meng wrote:
>> Hi Andrew,
>>
>> On Wed, Jul 8, 2015 at 3:16 AM,  <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 if the device
>> > tree settings exist, otherwise simply trust the FSP's defaults.
>> >
>> > Modifies the MinnowMax board to transfer the FSP UPD hard-coded settings
>> > to the MinnowMax dts.
>> >
>> > Signed-off-by: Andrew Bradford <andrew.bradford at kodakalaris.com>
>> > ---
>> >
>> > 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                | 188 +++++++++++++++++----
>> >  arch/x86/dts/minnowmax.dts                         |  30 ++++
>> >  .../misc/intel,baytrail-fsp.txt                    | 119 +++++++++++++
>> >  include/fdtdec.h                                   |   2 +
>> >  lib/fdtdec.c                                       |   2 +
>> >  5 files changed, 311 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..fce76e6 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,165 @@ const struct pch_azalia_config azalia_config = {
>> >         .reset_wait_timer_us = 300
>> >  };
>> >
>> > +/**
>> > + * Update the FSP's UPD.  The FSP itself can be configured for defaults to
>> > + * store in UPD through Intel's GUI configurator but likely a specific board
>> > + * will want to update these from u-boot, so allow for that via device tree.
>> > + * If the device tree does not specify a setting, trust the FSP's default.
>> > + */
>> >  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;
>> > -       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-int-tseg-size",
>>
>> mrc-int? Guess it is mrc-init.
>
> Yes, thank you for catching this.  Will fix in v3.
>
>> > +                                                    fsp_upd->mrc_init_tseg_size);
>> > +       fsp_upd->mrc_init_mmio_size = fdtdec_get_int(blob, node,
>> > +                                                    "fsp,mrc-init-mmio-size",
>> > +                                                    fsp_upd->mrc_init_mmio_size);
>> > +       fsp_upd->mrc_init_spd_addr1 = fdtdec_get_int(blob, node,
>> > +                                                    "fsp,mrc-init-spd-addr1",
>> > +                                                    fsp_upd->mrc_init_spd_addr1);
>> > +       fsp_upd->mrc_init_spd_addr2 = fdtdec_get_int(blob, node,
>> > +                                                    "fsp,mrc-init-spd-addr2",
>> > +                                                    fsp_upd->mrc_init_spd_addr2);
>> > +       fsp_upd->emmc_boot_mode = fdtdec_get_int(blob, node, "fsp,emmc-boot-mode",
>> > +                                                fsp_upd->emmc_boot_mode);
>> > +       fsp_upd->enable_sdio = fdtdec_get_int(blob, node, "fsp,enable-sdio",
>> > +                                             fsp_upd->enable_sdio);
>>
>> I think we agreed that all these 'enable' should be accessed using
>> fdtdec_get_bool().
>
> I was under the impression that we decided to keep these as non-bool so
> that the FSP could be overridden as needed (or you can fully specify all
> the properties in dt if you want) as per Simon's comments [1] along with
> adding additional comments in this version of my patch to clarify this..
>
> [1]:http://lists.denx.de/pipermail/u-boot/2015-June/217802.html
>
> But I'm open to changing this to use bools.  Additional thoughts on this
> below...
>
>> > +       fsp_upd->enable_sdcard = fdtdec_get_int(blob, node, "fsp,enable-sdcard",
>> > +                                               fsp_upd->enable_sdcard);
>> > +       fsp_upd->enable_hsuart0 = fdtdec_get_int(blob, node, "fsp,enable-hsuart0",
>> > +                                                fsp_upd->enable_hsuart0);
>> > +       fsp_upd->enable_hsuart1 = fdtdec_get_int(blob, node, "fsp,enable-hsuart1",
>> > +                                                fsp_upd->enable_hsuart1);
>> > +       fsp_upd->enable_spi = fdtdec_get_int(blob, node, "fsp,enable-spi",
>> > +                                            fsp_upd->enable_spi);
>> > +       fsp_upd->enable_sata = fdtdec_get_int(blob, node, "fsp,enable-sata",
>> > +                                             fsp_upd->enable_sata);
>> > +       fsp_upd->enable_azalia = fdtdec_get_int(blob, node, "fsp,enable-azalia",
>> > +                                               fsp_upd->enable_azalia);
>> > +       fsp_upd->enable_xhci = fdtdec_get_int(blob, node, "fsp,enable-xhci",
>> > +                                             fsp_upd->enable_xhci);
>> > +       fsp_upd->enable_lpe = fdtdec_get_int(blob, node, "fsp,enable-lpe",
>> > +                                            fsp_upd->enable_lpe);
>> > +       fsp_upd->lpss_sio_enable_pci_mode = fdtdec_get_int(blob, node,
>> > +                                                          "fsp,lpss-sio-enable-pci-mode",
>> > +                                                          fsp_upd->lpss_sio_enable_pci_mode);
>> > +       fsp_upd->enable_dma0 = fdtdec_get_int(blob, node, "fsp,enable-dma0",
>> > +                                             fsp_upd->enable_dma0);
>> > +       fsp_upd->enable_dma1 = fdtdec_get_int(blob, node, "fsp,enable-dma1",
>> > +                                             fsp_upd->enable_dma1);
>> > +       fsp_upd->enable_i2_c0 = fdtdec_get_int(blob, node, "fsp,enable-i2-c0",
>> > +                                              fsp_upd->enable_i2_c0);
>> > +       fsp_upd->enable_i2_c1 = fdtdec_get_int(blob, node, "fsp,enable-i2-c1",
>> > +                                              fsp_upd->enable_i2_c1);
>> > +       fsp_upd->enable_i2_c2 = fdtdec_get_int(blob, node, "fsp,enable-i2-c2",
>> > +                                              fsp_upd->enable_i2_c2);
>> > +       fsp_upd->enable_i2_c3 = fdtdec_get_int(blob, node, "fsp,enable-i2-c3",
>> > +                                              fsp_upd->enable_i2_c3);
>> > +       fsp_upd->enable_i2_c4 = fdtdec_get_int(blob, node, "fsp,enable-i2-c4",
>> > +                                              fsp_upd->enable_i2_c4);
>> > +       fsp_upd->enable_i2_c5 = fdtdec_get_int(blob, node, "fsp,enable-i2-c5",
>> > +                                              fsp_upd->enable_i2_c5);
>> > +       fsp_upd->enable_i2_c6 = fdtdec_get_int(blob, node, "fsp,enable-i2-c6",
>> > +                                              fsp_upd->enable_i2_c6);
>> > +       fsp_upd->enable_pwm0 = fdtdec_get_int(blob, node, "fsp,enable-pwm0",
>> > +                                             fsp_upd->enable_pwm0);
>> > +       fsp_upd->enable_pwm1 = fdtdec_get_int(blob, node, "fsp,enable-pwm1",
>> > +                                             fsp_upd->enable_pwm1);
>> > +       fsp_upd->enable_hsi = fdtdec_get_int(blob, node, "fsp,enable-hsi",
>> > +                                            fsp_upd->enable_hsi);
>> > +       fsp_upd->igd_dvmt50_pre_alloc = fdtdec_get_int(blob, node,
>> > +                                                      "fsp,igd-dvmt50-pre-alloc",
>> > +                                                      fsp_upd->igd_dvmt50_pre_alloc);
>> > +       fsp_upd->aperture_size = fdtdec_get_int(blob, node, "fsp,aperture-size",
>> > +                                               fsp_upd->aperture_size);
>> > +       fsp_upd->gtt_size = fdtdec_get_int(blob, node, "fsp,gtt-size",
>> > +                                          fsp_upd->gtt_size);
>> > +       fsp_upd->serial_debug_port_address = fdtdec_get_int(blob, node,
>> > +                                                           "fsp,serial-debug-port-address",
>> > +                                                           fsp_upd->serial_debug_port_address);
>> > +       fsp_upd->serial_debug_port_type = fdtdec_get_int(blob, node,
>> > +                                                        "fsp,serial-debug-port-type",
>> > +                                                        fsp_upd->serial_debug_port_type);
>> > +       fsp_upd->mrc_debug_msg = fdtdec_get_int(blob, node, "fsp,mrc-debug-msg",
>> > +                                               fsp_upd->mrc_debug_msg);
>> > +       fsp_upd->isp_enable = fdtdec_get_int(blob, node, "fsp,isp-enable",
>> > +                                            fsp_upd->isp_enable);
>> > +       fsp_upd->scc_enable_pci_mode = fdtdec_get_int(blob, node,
>> > +                                                     "fsp,scc-enable-pci-mode",
>> > +                                                     fsp_upd->scc_enable_pci_mode);
>> > +       fsp_upd->igd_render_standby = fdtdec_get_int(blob, node,
>> > +                                                    "fsp,igd-render-standby",
>> > +                                                    fsp_upd->igd_render_standby);
>> > +       fsp_upd->txe_uma_enable = fdtdec_get_int(blob, node, "fsp,txe-uma-enable",
>> > +                                                fsp_upd->txe_uma_enable);
>> > +       fsp_upd->os_selection = fdtdec_get_int(blob, node, "fsp,os-selection",
>> > +                                              fsp_upd->os_selection);
>> > +       fsp_upd->emmc45_ddr50_enabled = fdtdec_get_int(blob, node,
>> > +                                                      "fsp,emmc45-ddr50-enabled",
>> > +                                                      fsp_upd->emmc45_ddr50_enabled);
>> > +       fsp_upd->emmc45_hs200_enabled = fdtdec_get_int(blob, node,
>> > +                                                      "fsp,emmc45-hs200-enabled",
>> > +                                                      fsp_upd->emmc45_hs200_enabled);
>> > +       fsp_upd->emmc45_retune_timer_value = fdtdec_get_int(blob, node,
>> > +                                                           "fsp,emmc45-retune-timer-value",
>> > +                                                           fsp_upd->emmc45_retune_timer_value);
>> > +       fsp_upd->igd_render_standby = fdtdec_get_int(blob, node,
>> > +                                                    "fsp,igd-render-standby",
>> > +                                                    fsp_upd->igd_render_standby);
>> >
>> >         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_int(blob, node,
>> > +                                                "fsp,enable-memory-down",
>> > +                                                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",
>> > +                                                mem->dram_speed);
>> > +               mem->dram_type = fdtdec_get_int(blob, node, "fsp,dram-type",
>> > +                                               mem->dram_type);
>> > +               mem->dimm_0_enable = fdtdec_get_int(blob, node, "fsp,dimm-0-enable",
>> > +                                                   mem->dimm_0_enable);
>> > +               mem->dimm_1_enable = fdtdec_get_int(blob, node, "fsp,dimm-1-enable",
>> > +                                                   mem->dimm_1_enable);
>> > +               mem->dimm_width = fdtdec_get_int(blob, node, "fsp,dimm-width",
>> > +                                                mem->dimm_width);
>> > +               mem->dimm_density = fdtdec_get_int(blob, node,
>> > +                                                  "fsp,dimm-density",
>> > +                                                  mem->dimm_density);
>> > +               mem->dimm_bus_width = fdtdec_get_int(blob, node,
>> > +                                                    "fsp,dimm-bus-width",
>> > +                                                    mem->dimm_bus_width);
>> > +               mem->dimm_sides = fdtdec_get_int(blob, node, "fsp,dimm-sides",
>> > +                                                mem->dimm_sides);
>> > +               mem->dimm_tcl = fdtdec_get_int(blob, node, "fsp,dimm-tcl",
>> > +                                              mem->dimm_tcl);
>> > +               mem->dimm_trpt_rcd = fdtdec_get_int(blob, node, "fsp,dimm-trpt-rcd",
>> > +                                                   mem->dimm_trpt_rcd);
>> > +               mem->dimm_twr = fdtdec_get_int(blob, node, "fsp,dimm-twr",
>> > +                                              mem->dimm_twr);
>> > +               mem->dimm_twtr = fdtdec_get_int(blob, node, "fsp,dimm-twtr",
>> > +                                               mem->dimm_twtr);
>> > +               mem->dimm_trrd = fdtdec_get_int(blob, node, "fsp,dimm-trrd",
>> > +                                               mem->dimm_trrd);
>> > +               mem->dimm_trtp = fdtdec_get_int(blob, node, "fsp,dimm-trtp",
>> > +                                               mem->dimm_trtp);
>> > +               mem->dimm_tfaw = fdtdec_get_int(blob, node, "fsp,dimm-tfaw",
>> > +                                               mem->dimm_tfaw);
>> > +       }
>> >  }
>> > diff --git a/arch/x86/dts/minnowmax.dts b/arch/x86/dts/minnowmax.dts
>> > index 0e59b18..279d08d 100644
>> > --- a/arch/x86/dts/minnowmax.dts
>> > +++ b/arch/x86/dts/minnowmax.dts
>> > @@ -121,6 +121,36 @@
>> >                         0x01000000 0x0 0x2000 0x2000 0 0xe000>;
>> >         };
>> >
>> > +       fsp {
>> > +               compatible = "intel,baytrail-fsp";
>> > +               fsp,mrc-init-tseg-size = <8>;
>> > +               fsp,mrc-init-mmio-size = <0x800>;
>> > +               fsp,emmc-boot-mode = <0xff>;
>> > +               fsp,enable-sdio = <1>;
>> > +               fsp,enable-sdcard = <1>;
>> > +               fsp,enable-hsuart0 = <1>;
>> > +               fsp,enable-i2-c0 = <0>;
>> > +               fsp,enable-i2-c2 = <0>;
>> > +               fsp,enable-i2-c3 = <0>;
>> > +               fsp,enable-i2-c4 = <0>;
>> > +               fsp,enable-xhci = <0>;
>> > +               fsp,igd-render-standby = <1>;
>> > +               fsp,enable-memory-down = <1>;
>> > +               fsp,memory-down-params {
>> > +                       compatible = "intel,baytrail-fsp-mdp";
>> > +                       fsp,dram-speed = <1>;
>> > +                       fsp,dimm-width = <1>;
>> > +                       fsp,dimm-density = <2>;
>> > +                       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..979d646
>> > --- /dev/null
>> > +++ b/doc/device-tree-bindings/misc/intel,baytrail-fsp.txt
>> > @@ -0,0 +1,119 @@
>> > +Intel Bay Trail FSP UPD Binding
>> > +==============================
>> > +
>> > +The device tree node which describes the overriding of the Intel Bay Trail FSP
>> > +UPD data for configuring the SoC.
>> > +
>> > +All properties are optional, if a property is unspecified then the FSP's
>> > +preconfigured choices will be used.  For this reason, using normal boolean
>> > +properties is not desired as the lack of a boolean property would disable a
>> > +given property and force the user to include all properties they wish to enable.
>> > +
>>
>> My understanding is that we either use device tree or the FSP
>> defaults. So if we describe an FSP node in device tree, then we go
>> with device tree as U-Boot's configuration. We cannot use partial
>> configuration from device tree and partial from FSP defaults. That's
>> confusing.
>
> I agree that it could be confusing, even just in writing this patch and
> trying to test it I've run into the fact that in order to see if I'm
> properly overriding the FSP's configuration that I would need to build a
> bunch of different FSP configurations in Intel's Binary Configuration
> Tool.  I've not done this as it would be extremely time consuming.
>
> I'm open to making the properties into bools and then overriding all of
> the FSP's UPD fields with sane defaults if the device tree does not
> specify a non-bool property.  I now think this might be a more sane
> approach for the long run, but I would need some assistance to know what
> the proper settings are for MinnowMax as I do not have one to test with
> and I do not know the full backstory as to why the FSP that shipped with
> MinnowMax was found to need to have its UPD overridden prior to my
> patch.

It is mostly that the FSP can be set to anything since it is
configured by a proprietary binary tool. Having configuration in two
places, particularly where one is uncertain, does seem confusing.

So I think Bin's proposal is that we either override everything and
don't use the FSP config, or we override nothing and use the entire
FSP config.

Re the Minnowmax settings, I can dump out the list of current settings
if you like.

>
>> > +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
>> > +Intel's FSP Binary Configuration Tool for Bay Trail.
>> > +
>> > +Optional 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,enable-sdio
>> > +- fsp,enable-sdcard
>> > +- fsp,enable-hsuart0
>> > +- fsp,enable-hsuart1
>> > +- fsp,enable-spi
>> > +- fsp,enable-sata
>> > +- fsp,sata-mode
>> > +- 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,igd-dvmt50-pre-alloc
>> > +- fsp,aperture-size
>> > +- fsp,gtt-size
>> > +- fsp,serial-debug-port-address
>> > +- fsp,serial-debug-port-type
>> > +- fsp,mrc-debug-msg
>> > +- fsp,isp-enable
>> > +- fsp,scc-enable-pci-mode
>> > +- fsp,igd-render-standby
>> > +- fsp,txe-uma-enable
>> > +- fsp,os-selection
>> > +- fsp,emmc45-ddr50-enabled
>> > +- fsp,emmc45-hs200-enabled
>> > +- fsp,emmc45-retune-timer-value
>> > +- fsp,enable-memory-down
>> > +
>> > +- fsp,memory-down-params {
>> > +
>> > +       The following are only used if enable-memory-down is set, otherwise
>> > +       the FSP will use the DIMM's SPD information to configure the memory:
>> > +       - fsp,dram-speed
>> > +       - fsp,dram-type
>> > +       - fsp,dimm-0-enable
>> > +       - fsp,dimm-1-enable
>> > +       - 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 = <8>;
>> > +               fsp,mrc-init-mmio-size = <0x800>;
>> > +               fsp,emmc-boot-mode = <0xff>;
>> > +               fsp,enable-sdio = <1>;
>> > +               fsp,enable-sdcard = <1>;
>> > +               fsp,enable-hsuart0 = <1>;
>> > +               fsp,enable-i2-c0 = <0>;
>> > +               fsp,enable-i2-c2 = <0>;
>> > +               fsp,enable-i2-c3 = <0>;
>> > +               fsp,enable-i2-c4 = <0>;
>> > +               fsp,enable-xhci = <0>;
>> > +               fsp,igd-render-standby = <1>;
>> > +               fsp,memory-down-params {
>> > +                       compatible = "intel,baytrail-fsp-mdp";
>> > +                       fsp,dram-speed = <1>;
>> > +                       fsp,dimm-width = <1>;
>> > +                       fsp,dimm-density = <2>;
>> > +                       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 2323603..76d07eb 100644
>> > --- a/include/fdtdec.h
>> > +++ b/include/fdtdec.h
>> > @@ -183,6 +183,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 9877849..1e48b82 100644
>> > --- a/lib/fdtdec.c
>> > +++ b/lib/fdtdec.c
>> > @@ -76,6 +76,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)
>> > --
>>
>> Regards,
>> Bin
>
> Thanks for taking the time to review! I appreciate it :)
> -Andrew

Regards,
Simon


More information about the U-Boot mailing list