All of lore.kernel.org
 help / color / mirror / Atom feed
From: Bin Meng <bmeng.cn@gmail.com>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH 097/126] x86: Add support for newer CAR schemes
Date: Thu, 10 Oct 2019 17:50:00 +0800	[thread overview]
Message-ID: <CAEUhbmU4AmX4d7KstAmk=BtF+yHeR6_4a4SENbmA8bTjR5mdjw@mail.gmail.com> (raw)
In-Reply-To: <20190925145750.200592-98-sjg@chromium.org>

Hi Simon,

On Wed, Sep 25, 2019 at 10:59 PM Simon Glass <sjg@chromium.org> wrote:
>
> Newer Intel SoCs have different ways of setting up cache-as-ram (CAR).
> Add support for these along with suitable configuration options.
>

I wonder why do we need do this in U-Boot. Isn't FSP-T doing the CAR for us?

> Signed-off-by: Simon Glass <sjg@chromium.org>
> ---
>
>  arch/x86/Kconfig                        |  16 +
>  arch/x86/cpu/intel_common/Kconfig       |  18 +
>  arch/x86/cpu/intel_common/Makefile      |   8 +
>  arch/x86/cpu/intel_common/car2.S        | 490 ++++++++++++++++++++++++
>  arch/x86/cpu/intel_common/car2_uninit.S |  87 +++++
>  5 files changed, 619 insertions(+)
>  create mode 100644 arch/x86/cpu/intel_common/Kconfig
>  create mode 100644 arch/x86/cpu/intel_common/car2.S
>  create mode 100644 arch/x86/cpu/intel_common/car2_uninit.S
>
> diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
> index 556e26080de..e34c71ec4cb 100644
> --- a/arch/x86/Kconfig
> +++ b/arch/x86/Kconfig
> @@ -876,4 +876,20 @@ config HIGH_TABLE_SIZE
>           Increse it if the default size does not fit the board's needs.
>           This is most likely due to a large ACPI DSDT table is used.
>
> +config INTEL_CAR_CQOS
> +       bool "Support Intel Cache Quality of Service"
> +       help
> +         Cache Quality of Service allows more fine-grained control of cache
> +         usage. As result, it is possible to set up a portion of L2 cache for
> +         CAR and use the remainder for actual caching.
> +
> +#
> +# Each bit in QOS mask controls this many bytes. This is calculated as:
> +# (CACHE_WAYS / CACHE_BITS_PER_MASK) * CACHE_LINE_SIZE * CACHE_SETS
> +#
> +config CACHE_QOS_SIZE_PER_BIT
> +       hex
> +       depends on INTEL_CAR_CQOS
> +       default 0x20000 # 128 KB
> +
>  endmenu
> diff --git a/arch/x86/cpu/intel_common/Kconfig b/arch/x86/cpu/intel_common/Kconfig
> new file mode 100644
> index 00000000000..a4f46b1108b
> --- /dev/null
> +++ b/arch/x86/cpu/intel_common/Kconfig
> @@ -0,0 +1,18 @@
> +config INTEL_PMC
> +       bool "Intel Power-management Controller"
> +       select POWER_MGR
> +       help
> +         Enable support for the common Intel power-management controller which
> +         provides features including checking whether the system started from
> +         resume, powering off the system and enabling/disabling the reset
> +         mechanism.
> +
> +config SPL_INTEL_PMC
> +       bool "Intel Power-management Controller in SPL"
> +       default y if SPL && INTEL_PMC
> +       select SPL_POWER_MGR
> +       help
> +         Enable support for the common Intel power-management controller which
> +         provides features including checking whether the system started from
> +         resume, powering off the system and enabling/disabling the reset
> +         mechanism.

I think the above 2 should not be in this patch

> diff --git a/arch/x86/cpu/intel_common/Makefile b/arch/x86/cpu/intel_common/Makefile
> index 2de567dd9fe..f620747a7d2 100644
> --- a/arch/x86/cpu/intel_common/Makefile
> +++ b/arch/x86/cpu/intel_common/Makefile
> @@ -8,6 +8,14 @@ obj-$(CONFIG_$(SPL_TPL_)X86_32BIT_INIT) += me_status.o
>  obj-$(CONFIG_$(SPL_TPL_)X86_32BIT_INIT) += report_platform.o
>  obj-$(CONFIG_$(SPL_TPL_)X86_32BIT_INIT) += mrc.o
>  endif
> +
> +ifdef CONFIG_FSP_VERSION2
> +obj-$(CONFIG_TPL_BUILD) += car2.o
> +ifndef CONFIG_SPL_BUILD
> +obj-y += car2_uninit.o
> +endif
> +endif
> +
>  obj-y += cpu.o
>  obj-$(CONFIG_SPI_FLASH_INTEL_FAST) += fast_spi.o
>  obj-y += lpc.o
> diff --git a/arch/x86/cpu/intel_common/car2.S b/arch/x86/cpu/intel_common/car2.S
> new file mode 100644
> index 00000000000..ac07fe5ea6a
> --- /dev/null
> +++ b/arch/x86/cpu/intel_common/car2.S
> @@ -0,0 +1,490 @@
> +/* SPDX-License-Identifier: GPL-2.0+ */
> +/*
> + * This file is part of the coreboot project.
> + *
> + * Copyright (C) 2015-2016 Intel Corp.
> + *
> + * This program is free software; you can redistribute it and/or modify
> + * it under the terms of the GNU General Public License as published by
> + * the Free Software Foundation; version 2 of the License.
> + *
> + * This program is distributed in the hope that it will be useful,
> + * but WITHOUT ANY WARRANTY; without even the implied warranty of
> + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
> + * GNU General Public License for more details.
> + *

nits: there is already SPDX license

> + */
> +
> +#include <config.h>
> +#include <asm/msr-index.h>
> +#include <asm/mtrr.h>
> +#include <asm/post.h>
> +#include <asm/processor-flags.h>
> +
> +#define KiB 1024
> +
> +.global car_init
> +car_init:
> +       post_code(0x20)
> +
> +       /*
> +        * Use the MTRR default type MSR as a proxy for detecting INIT#.
> +        * Reset the system if any known bits are set in that MSR. That is
> +        * an indication of the CPU not being properly reset.
> +        */
> +check_for_clean_reset:
> +       mov     $MTRR_DEF_TYPE_MSR, %ecx
> +       rdmsr
> +       and     $(MTRR_DEF_TYPE_EN | MTRR_DEF_TYPE_FIX_EN), %eax
> +       cmp     $0, %eax
> +       jz      no_reset
> +       /* perform warm reset */
> +       movw    $0xcf9, %dx
> +       movb    $0x06, %al
> +       outb    %al, %dx
> +
> +no_reset:
> +       post_code(0x21)

Can we use values from post.h?

> +
> +       /* Clear/disable fixed MTRRs */
> +       mov     $fixed_mtrr_list_size, %ebx
> +       xor     %eax, %eax
> +       xor     %edx, %edx
> +
> +clear_fixed_mtrr:
> +       add     $-2, %ebx
> +       movzwl  fixed_mtrr_list(%ebx), %ecx
> +       wrmsr
> +       jnz     clear_fixed_mtrr
> +
> +       post_code(0x22)
> +
> +       /* Figure put how many MTRRs we have, and clear them out */
> +       mov     $MTRR_CAP_MSR, %ecx
> +       rdmsr
> +       movzb   %al, %ebx               /* Number of variable MTRRs */
> +       mov     $MTRR_PHYS_BASE_MSR(0), %ecx
> +       xor     %eax, %eax
> +       xor     %edx, %edx
> +
> +clear_var_mtrr:
> +       wrmsr
> +       inc     %ecx
> +       wrmsr
> +       inc     %ecx
> +       dec     %ebx
> +       jnz     clear_var_mtrr
> +
> +       post_code(0x23)
> +
> +       /* Configure default memory type to uncacheable (UC) */
> +       mov     $MTRR_DEF_TYPE_MSR, %ecx
> +       rdmsr
> +       /* Clear enable bits and set default type to UC. */
> +       and     $~(MTRR_DEF_TYPE_MASK | MTRR_DEF_TYPE_EN | \
> +                MTRR_DEF_TYPE_FIX_EN), %eax
> +       wrmsr
> +
> +       /* Configure MTRR_PHYS_MASK_HIGH for proper addressing above 4GB

nits: wrong multi-line comment format

> +        * based on the physical address size supported for this processor
> +        * This is based on read from CPUID EAX = 080000008h, EAX bits [7:0]
> +        *
> +        * Examples:
> +        *  MTRR_PHYS_MASK_HIGH = 00000000Fh  For 36 bit addressing
> +        *  MTRR_PHYS_MASK_HIGH = 0000000FFh  For 40 bit addressing
> +        */
> +
> +       movl    $0x80000008, %eax       /* Address sizes leaf */
> +       cpuid
> +       sub     $32, %al
> +       movzx   %al, %eax
> +       xorl    %esi, %esi
> +       bts     %eax, %esi
> +       dec     %esi                    /* esi <- MTRR_PHYS_MASK_HIGH */
> +
> +       post_code(0x24)
> +
> +#if ((CONFIG_DCACHE_RAM_SIZE & (CONFIG_DCACHE_RAM_SIZE - 1)) == 0)
> +       /* Configure CAR region as write-back (WB) */
> +       mov     $MTRR_PHYS_BASE_MSR(0), %ecx
> +       mov     $CONFIG_DCACHE_RAM_BASE, %eax
> +       or      $MTRR_TYPE_WRBACK, %eax
> +       xor     %edx,%edx
> +       wrmsr
> +
> +       /* Configure the MTRR mask for the size region */
> +       mov     $MTRR_PHYS_MASK(0), %ecx
> +       mov     $CONFIG_DCACHE_RAM_SIZE, %eax   /* size mask */
> +       dec     %eax
> +       not     %eax
> +       or      $MTRR_PHYS_MASK_VALID, %eax
> +       movl    %esi, %edx      /* edx <- MTRR_PHYS_MASK_HIGH */
> +       wrmsr
> +#elif (CONFIG_DCACHE_RAM_SIZE == 768 * KiB) /* 768 KiB */
> +       /* Configure CAR region as write-back (WB) */
> +       mov     $MTRR_PHYS_BASE_MSR(0), %ecx
> +       mov     $CONFIG_DCACHE_RAM_BASE, %eax
> +       or      $MTRR_TYPE_WRBACK, %eax
> +       xor     %edx,%edx
> +       wrmsr
> +
> +       mov     $MTRR_PHYS_MASK_MSR(0), %ecx
> +       mov     $(512 * KiB), %eax      /* size mask */
> +       dec     %eax
> +       not     %eax
> +       or      $MTRR_PHYS_MASK_VALID, %eax
> +       movl    %esi, %edx      /* edx <- MTRR_PHYS_MASK_HIGH */
> +       wrmsr
> +
> +       mov     $MTRR_PHYS_BASE_MSR(1), %ecx
> +       mov     $(CONFIG_DCACHE_RAM_BASE + 512 * KiB), %eax
> +       or      $MTRR_TYPE_WRBACK, %eax
> +       xor     %edx,%edx
> +       wrmsr
> +
> +       mov     $MTRR_PHYS_MASK_MSR(1), %ecx
> +       mov     $(256 * KiB), %eax      /* size mask */
> +       dec     %eax
> +       not     %eax
> +       or      $MTRR_PHYS_MASK_VALID, %eax
> +       movl    %esi, %edx      /* edx <- MTRR_PHYS_MASK_HIGH */
> +       wrmsr
> +#else
> +#error "DCACHE_RAM_SIZE is not a power of 2 and setup code is missing"
> +#endif
> +       post_code(0x25)
> +
> +       /* start */
> +/*     mov     $0xffff80a8, %ebx */
> +/*     jmp     *%ebx */
> +.globl _from_bb
> +_from_bb:
> +/*     jmp     car_init_ret */
> +       /* end */
> +
> +       /* Enable variable MTRRs */
> +       mov     $MTRR_DEF_TYPE_MSR, %ecx
> +       rdmsr
> +       or      $MTRR_DEF_TYPE_EN, %eax
> +       wrmsr
> +
> +       /* Enable caching */
> +       mov     %cr0, %eax
> +       and     $~(X86_CR0_CD | X86_CR0_NW), %eax
> +       invd
> +       mov     %eax, %cr0
> +
> +#if IS_ENABLED(CONFIG_INTEL_CAR_NEM)
> +       jmp car_nem
> +#elif IS_ENABLED(CONFIG_INTEL_CAR_CQOS)
> +       jmp car_cqos
> +#elif IS_ENABLED(CONFIG_INTEL_CAR_NEM_ENHANCED)
> +       jmp car_nem_enhanced
> +#else
> +#error "No CAR mechanism selected:
> +#endif
> +       jmp     car_init_ret
> +
> +#if 0
> +.global car_init_done
> +car_init_done:
> +
> +       post_code(0x29)
> +
> +       /* Setup bootblock stack */
> +       mov     $_car_stack_end, %esp
> +
> +       /* Need to align stack to 16 bytes at call instruction. Account for
> +          the two pushes below. */
> +       andl    $0xfffffff0, %esp
> +       sub     $8, %esp
> +
> +       /*push TSC value to stack*/
> +       movd    %mm2, %eax
> +       pushl   %eax    /* tsc[63:32] */
> +       movd    %mm1, %eax
> +       pushl   %eax    /* tsc[31:0] */
> +
> +before_carstage:
> +       post_code(0x2A)
> +
> +       call    bootblock_c_entry

where is this function?

> +       /* Never reached */
> +#endif
> +
> +fixed_mtrr_list:
> +       .word   MTRR_FIX_64K_00000_MSR
> +       .word   MTRR_FIX_16K_80000_MSR
> +       .word   MTRR_FIX_16K_A0000_MSR
> +       .word   MTRR_FIX_4K_C0000_MSR
> +       .word   MTRR_FIX_4K_C8000_MSR
> +       .word   MTRR_FIX_4K_D0000_MSR
> +       .word   MTRR_FIX_4K_D8000_MSR
> +       .word   MTRR_FIX_4K_E0000_MSR
> +       .word   MTRR_FIX_4K_E8000_MSR
> +       .word   MTRR_FIX_4K_F0000_MSR
> +       .word   MTRR_FIX_4K_F8000_MSR
> +fixed_mtrr_list_size = . - fixed_mtrr_list
> +
> +#if IS_ENABLED(CONFIG_INTEL_CAR_NEM)
> +.global car_nem
> +car_nem:
> +       /* Disable cache eviction (setup stage) */
> +       mov     $MSR_EVICT_CTL, %ecx
> +       rdmsr
> +       or      $0x1, %eax
> +       wrmsr
> +
> +       post_code(0x26)
> +
> +       /* Clear the cache memory region. This will also fill up the cache */
> +       movl    $CONFIG_DCACHE_RAM_BASE, %edi
> +       movl    $CONFIG_DCACHE_RAM_SIZE, %ecx
> +       shr     $0x02, %ecx
> +       xor     %eax, %eax
> +       cld
> +       rep     stosl
> +
> +       post_code(0x27)
> +
> +       /* Disable cache eviction (run stage) */
> +       mov     $MSR_EVICT_CTL, %ecx
> +       rdmsr
> +       or      $0x2, %eax
> +       wrmsr
> +
> +       post_code(0x28)
> +
> +       jmp car_init_done
> +
> +#elif IS_ENABLED(CONFIG_INTEL_CAR_CQOS)
> +.global car_cqos
> +car_cqos:
> +       /*
> +        * Create CBM_LEN_MASK based on CBM_LEN
> +        * Get CPUID.(EAX=10H, ECX=2H):EAX.CBM_LEN[bits 4:0]
> +        */
> +       mov $0x10, %eax
> +       mov $0x2,  %ecx
> +       cpuid
> +       and $0x1F, %eax
> +       add $1, %al
> +
> +       mov $1, %ebx
> +       mov %al, %cl
> +       shl %cl, %ebx
> +       sub $1, %ebx
> +
> +       /* Store the CBM_LEN_MASK in mm3 for later use. */
> +       movd %ebx, %mm3
> +
> +       /*
> +        * Disable both L1 and L2 prefetcher. For yet-to-understood reason,
> +        * prefetchers slow down filling cache with rep stos in CQOS mode.
> +        */
> +       mov     $MSR_PREFETCH_CTL, %ecx
> +       rdmsr
> +       or      $(PREFETCH_L1_DISABLE | PREFETCH_L2_DISABLE), %eax
> +       wrmsr
> +
> +#if (CONFIG_DCACHE_RAM_SIZE == CONFIG_L2_CACHE_SIZE)
> +/*
> + * If CAR size is set to full L2 size, mask is calculated as all-zeros.
> + * This is not supported by the CPU/uCode.
> + */
> +#error "CQOS CAR may not use whole L2 cache area"
> +#endif
> +
> +       /* Calculate how many bits to be used for CAR */
> +       xor     %edx, %edx
> +       mov     $CONFIG_DCACHE_RAM_SIZE, %eax   /* dividend */
> +       mov     $CONFIG_CACHE_QOS_SIZE_PER_BIT, %ecx    /* divisor */
> +       div     %ecx            /* result is in eax */
> +       mov     %eax, %ecx      /* save to ecx */
> +       mov     $1, %ebx
> +       shl     %cl, %ebx
> +       sub     $1, %ebx        /* resulting mask is is in ebx */
> +
> +       /* Set this mask for initial cache fill */
> +       mov     $MSR_L2_QOS_MASK(0), %ecx
> +       rdmsr
> +       mov     %ebx, %eax
> +       wrmsr
> +
> +       /* Set CLOS selector to 0 */
> +       mov     $MSR_IA32_PQR_ASSOC, %ecx
> +       rdmsr
> +       and     $~MSR_IA32_PQR_ASSOC_MASK, %edx /* select mask 0 */
> +       wrmsr
> +
> +       /* We will need to block CAR region from evicts */
> +       mov     $MSR_L2_QOS_MASK(1), %ecx
> +       rdmsr
> +       /* Invert bits that are to be used for cache */
> +       mov     %ebx, %eax
> +       xor     $~0, %eax                       /* invert 32 bits */
> +
> +       /*
> +        * Use CBM_LEN_MASK stored in mm3 to set bits based on Capacity Bit
> +        * Mask Length.
> +        */
> +       movd    %mm3, %ebx
> +       and     %ebx, %eax
> +       wrmsr
> +
> +       post_code(0x26)
> +
> +       /* Clear the cache memory region. This will also fill up the cache */
> +       movl    $CONFIG_DCACHE_RAM_BASE, %edi
> +       movl    $CONFIG_DCACHE_RAM_SIZE, %ecx
> +       shr     $0x02, %ecx
> +       xor     %eax, %eax
> +       cld
> +       rep     stosl
> +
> +       post_code(0x27)
> +
> +       /* Cache is populated. Use mask 1 that will block evicts */
> +       mov     $MSR_IA32_PQR_ASSOC, %ecx
> +       rdmsr
> +       and     $~MSR_IA32_PQR_ASSOC_MASK, %edx /* clear index bits first */
> +       or      $1, %edx                        /* select mask 1 */
> +       wrmsr
> +
> +       /* Enable prefetchers */
> +       mov     $MSR_PREFETCH_CTL, %ecx
> +       rdmsr
> +       and     $~(PREFETCH_L1_DISABLE | PREFETCH_L2_DISABLE), %eax
> +       wrmsr
> +
> +       post_code(0x28)
> +
> +/*     jmp car_init_done */
> +       jmp     car_init_ret
> +
> +#elif IS_ENABLED(CONFIG_INTEL_CAR_NEM_ENHANCED)
> +.global car_nem_enhanced
> +car_nem_enhanced:
> +       /* Disable cache eviction (setup stage) */
> +       mov     $MSR_EVICT_CTL, %ecx
> +       rdmsr
> +       or      $0x1, %eax
> +       wrmsr
> +       post_code(0x26)
> +
> +       /* Create n-way set associativity of cache */
> +       xorl    %edi, %edi
> +find_llc_subleaf:
> +       movl    %edi, %ecx
> +       movl    $0x04, %eax
> +       cpuid
> +       inc     %edi
> +       and     $0xe0, %al      /* EAX[7:5] = Cache Level */
> +       cmp     $0x60, %al      /* Check to see if it is LLC */
> +       jnz     find_llc_subleaf
> +
> +       /*
> +        * Set MSR 0xC91 IA32_L3_MASK_! = 0xE/0xFE/0xFFE/0xFFFE
> +        * for 4/8/16 way of LLC
> +       */
> +       shr     $22, %ebx
> +       inc     %ebx
> +       /* Calculate n-way associativity of LLC */
> +       mov     %bl, %cl
> +
> +       /*
> +        * Maximizing RO cacheability while locking in the CAR to a
> +        * single way since that particular way won't be victim candidate
> +        * for evictions.
> +        * This has been done after programing LLC_WAY_MASK_1 MSR
> +        * with desired LLC way as mentioned below.
> +        *
> +        * Hence create Code and Data Size as per request
> +        * Code Size (RO) : Up to 16M
> +        * Data Size (RW) : Up to 256K
> +        */
> +       movl    $0x01, %eax
> +       /*
> +        * LLC Ways -> LLC_WAY_MASK_1:
> +        *  4: 0x000E
> +        *  8: 0x00FE
> +        * 12: 0x0FFE
> +        * 16: 0xFFFE
> +        *
> +        * These MSRs contain one bit per each way of LLC
> +        * - If this bit is '0' - the way is protected from eviction
> +        * - If this bit is '1' - the way is not protected from eviction
> +        */
> +       shl     %cl, %eax
> +       subl    $0x02, %eax
> +       movl    $MSR_IA32_L3_MASK_1, %ecx
> +       xorl    %edx, %edx
> +       wrmsr
> +       /*
> +        * Set MSR 0xC92 IA32_L3_MASK_2 = 0x1
> +        *
> +        * For SKL SOC, data size remains 256K consistently.
> +        * Hence, creating 1-way associative cache for Data
> +       */
> +       mov     $MSR_IA32_L3_MASK_2, %ecx
> +       mov     $0x01, %eax
> +       xorl    %edx, %edx
> +       wrmsr
> +       /*
> +        * Set MSR_IA32_PQR_ASSOC = 0x02
> +        *
> +        * Possible values:
> +        * 0: Default value, no way mask should be applied
> +        * 1: Apply way mask 1 to LLC
> +        * 2: Apply way mask 2 to LLC
> +        * 3: Shouldn't be use in NEM Mode
> +        */
> +       movl    $MSR_IA32_PQR_ASSOC, %ecx
> +       movl    $0x02, %eax
> +       xorl    %edx, %edx
> +       wrmsr
> +
> +       movl    $CONFIG_DCACHE_RAM_BASE, %edi
> +       movl    $CONFIG_DCACHE_RAM_SIZE, %ecx
> +       shr     $0x02, %ecx
> +       xor     %eax, %eax
> +       cld
> +       rep     stosl
> +       /*
> +        * Set MSR_IA32_PQR_ASSOC = 0x01
> +        * At this stage we apply LLC_WAY_MASK_1 to the cache.
> +        * i.e. way 0 is protected from eviction.
> +       */
> +       movl    $MSR_IA32_PQR_ASSOC, %ecx
> +       movl    $0x01, %eax
> +       xorl    %edx, %edx
> +       wrmsr
> +
> +       post_code(0x27)
> +       /*
> +        * Enable No-Eviction Mode Run State by setting
> +        * NO_EVICT_MODE MSR 2E0h bit [1] = '1'.
> +        */
> +
> +       movl    $MSR_EVICT_CTL, %ecx
> +       rdmsr
> +       orl     $0x02, %eax
> +       wrmsr
> +
> +       post_code(0x28)
> +
> +       jmp car_init_done
> +#endif
> +
> +#if CONFIG_IS_ENABLED(X86_16BIT_INIT)
> +_dt_ucode_base_size:
> +       /* These next two fields are filled in by binman */
> +.globl ucode_base
> +ucode_base:    /* Declared in microcode.h */
> +       .long   0                       /* microcode base */
> +.globl ucode_size
> +ucode_size:    /* Declared in microcode.h */
> +       .long   0                       /* microcode size */
> +       .long   CONFIG_SYS_MONITOR_BASE /* code region base */
> +       .long   CONFIG_SYS_MONITOR_LEN  /* code region size */
> +#endif
> diff --git a/arch/x86/cpu/intel_common/car2_uninit.S b/arch/x86/cpu/intel_common/car2_uninit.S
> new file mode 100644
> index 00000000000..4797ac04279
> --- /dev/null
> +++ b/arch/x86/cpu/intel_common/car2_uninit.S
> @@ -0,0 +1,87 @@
> +/* SPDX-License-Identifier: GPL-2.0 */
> +/*
> + * Copyright 2017 Intel Corp.
> + * Copyright 2019 Google LLC
> + * Taken from coreboot file exit_car.S
> + */
> +
> +#include <config.h>
> +#include <asm/msr-index.h>
> +#include <asm/mtrr.h>
> +
> +.text
> +.global car_uninit
> +car_uninit:
> +
> +       /*
> +        * Retrieve return address from stack as it will get trashed below if
> +        * execution is utilizing the cache-as-ram stack.
> +        */
> +       pop     %ebx
> +
> +       /* Disable MTRRs. */
> +       mov     $(MTRR_DEF_TYPE_MSR), %ecx
> +       rdmsr
> +       and     $(~(MTRR_DEF_TYPE_EN | MTRR_DEF_TYPE_FIX_EN)), %eax
> +       wrmsr
> +
> +#ifdef CONFIG_INTEL_CAR_NEM
> +.global car_nem_teardown
> +car_nem_teardown:
> +
> +       /* invalidate cache contents. */
> +       invd
> +
> +       /* Knock down bit 1 then bit 0 of NEM control not combining steps. */
> +       mov     $(MSR_EVICT_CTL), %ecx
> +       rdmsr
> +       and     $(~(1 << 1)), %eax
> +       wrmsr
> +       and     $(~(1 << 0)), %eax
> +       wrmsr
> +
> +#elif IS_ENABLED(CONFIG_INTEL_CAR_CQOS)
> +.global car_cqos_teardown
> +car_cqos_teardown:
> +
> +       /* Go back to all-evicting mode, set both masks to all-1s */
> +       mov     $MSR_L2_QOS_MASK(0), %ecx
> +       rdmsr
> +       mov     $~0, %al
> +       wrmsr
> +
> +       mov     $MSR_L2_QOS_MASK(1), %ecx
> +       rdmsr
> +       mov     $~0, %al
> +       wrmsr
> +
> +       /* Reset CLOS selector to 0 */
> +       mov     $MSR_IA32_PQR_ASSOC, %ecx
> +       rdmsr
> +       and     $~MSR_IA32_PQR_ASSOC_MASK, %edx
> +       wrmsr
> +
> +#elif IS_ENABLED(CONFIG_INTEL_CAR_NEM_ENHANCED)
> +.global car_nem_enhanced_teardown
> +car_nem_enhanced_teardown:
> +
> +       /* invalidate cache contents. */
> +       invd
> +
> +       /* Knock down bit 1 then bit 0 of NEM control not combining steps. */
> +       mov     $(MSR_EVICT_CTL), %ecx
> +       rdmsr
> +       and     $(~(1 << 1)), %eax
> +       wrmsr
> +       and     $(~(1 << 0)), %eax
> +       wrmsr
> +
> +       /* Reset CLOS selector to 0 */
> +       mov     $IA32_PQR_ASSOC, %ecx
> +       rdmsr
> +       and     $~IA32_PQR_ASSOC_MASK, %edx
> +       wrmsr
> +#endif
> +
> +       /* Return to caller. */
> +       jmp     *%ebx
> --

I was not fully convinced we need this in U-Boot if we are using FSP.

Regards,
Bin

  reply	other threads:[~2019-10-10  9:50 UTC|newest]

Thread overview: 311+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-09-25 14:55 [U-Boot] [PATCH 000/126] x86: Add initial support for apollolake Simon Glass
2019-09-25 14:55 ` [U-Boot] [PATCH 001/126] dm: core: Use U-Boot logging instead of pr_debug() Simon Glass
2019-10-03 12:47   ` Bin Meng
2019-10-06  9:15     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 002/126] dm: core: Correct low cell in ofnode_read_pci_addr() Simon Glass
2019-09-25 16:12   ` Stephen Warren
2019-10-03 12:47   ` Bin Meng
2019-10-03 13:13     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 003/126] dm: core: Drop a few early returns Simon Glass
2019-10-03 12:47   ` Bin Meng
2019-10-06  9:15     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 004/126] dm: core: Add documentation on how to debug driver model Simon Glass
2019-10-03 12:47   ` Bin Meng
2019-10-06  9:15     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 005/126] dm: core: Don't include ofnode functions with of-platdata Simon Glass
2019-10-03 12:48   ` Bin Meng
2019-10-06  9:15     ` Bin Meng
2019-10-07  1:40       ` Bin Meng
2019-10-13 18:24         ` Simon Glass
2019-09-25 14:55 ` [U-Boot] [PATCH 006/126] dm: core: Correct bad cast in ofnode_get_addr_size_index() Simon Glass
2019-10-03 12:48   ` Bin Meng
2019-10-03 13:14     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 007/126] dm: test: Fix running of multiple test from command line Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-06  9:15     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 008/126] dm: test: Don't fail when tests are skipped due to build Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-06  9:15     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 009/126] dm: core: Call ofdata_to_platdata() with of-platdata Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-06  9:15     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 010/126] dm: doc: Correct of-platdata CONFIG_IS_ENABLED() condition Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-13 15:03     ` Simon Glass
2019-09-25 14:55 ` [U-Boot] [PATCH 011/126] dm: core: Correct the return value for uclass_find_first_device() Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-06  9:27     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 012/126] dm: core: Add device_foreach_child() Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-06  9:27     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 013/126] dm: test: Correct a stray backslash in dm_test_destroy() Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-06  9:27     ` Bin Meng
2019-09-25 14:55 ` [U-Boot] [PATCH 014/126] fdt: Show the preprocessed .dts file on error Simon Glass
2019-10-04  9:44   ` Bin Meng
2019-10-13 15:03     ` Simon Glass
2019-09-25 14:55 ` [U-Boot] [PATCH 015/126] sandbox: spmi: Add ranges property for address translation Simon Glass
2019-10-05  1:58   ` Bin Meng
2019-10-06  9:27     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 016/126] sandbox: mmc: Fix up MMC emulator for valgrind Simon Glass
2019-10-05  1:58   ` Bin Meng
2019-10-06  9:27     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 017/126] sandbox: Rename PCI ID for swap_case to be more specific Simon Glass
2019-10-05  1:58   ` Bin Meng
2019-10-06  9:27     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 018/126] sandbox: Add support for clrsetio_32() and friends Simon Glass
2019-10-05  2:01   ` Bin Meng
2019-10-06  9:27     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 019/126] sandbox: swap_case: Use statics where possible Simon Glass
2019-10-05  2:01   ` Bin Meng
2019-10-06  9:28     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 020/126] sandbox: pci: Drop the get_devfn() method Simon Glass
2019-10-05  2:01   ` Bin Meng
2019-10-06  9:28     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 021/126] sandbox: net: Suppress the MAC-address warnings Simon Glass
2019-10-05  2:10   ` Bin Meng
2019-10-05  2:16   ` Bin Meng
2019-10-05  2:26     ` Bin Meng
2019-10-06  1:05       ` Joe Hershberger
2019-10-06  2:12         ` Bin Meng
2019-10-06  2:41           ` Joe Hershberger
2019-10-14 20:02             ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 022/126] sandbox: pci: Move pci_offset_to_barnum() to pci.h Simon Glass
2019-10-05  2:17   ` Bin Meng
2019-10-06 10:03     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 023/126] sandbox: Add a -T flag to use the test device tree Simon Glass
2019-10-05  3:13   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 024/126] sandbox: pci: Increase the memory space Simon Glass
2019-10-05  3:14   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 025/126] sandbox: Allow use of real I/O with readl(), etc Simon Glass
2019-10-05  3:30   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-10-07  1:40       ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 026/126] pci: sandbox: Move the emulators into their own node Simon Glass
2019-10-05  5:03   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 027/126] pci: sandbox: Probe PCI emulation devices when used Simon Glass
2019-10-05  5:03   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 028/126] pci: Show the result of binding a device Simon Glass
2019-10-05  5:03   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 029/126] pci: Disable autoconfig in SPL Simon Glass
2019-10-05  5:03   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 030/126] pci: Correct 'specifified' and 'Plese' typos Simon Glass
2019-10-05  5:03   ` Bin Meng
2019-10-06 10:04     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 031/126] pci: Add more debug detail when resources are exhausted Simon Glass
2019-10-05 13:12   ` Bin Meng
2019-10-06 11:19     ` Bin Meng
2019-10-07  1:40       ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 032/126] pci: Show a message if PCI autoconfig fails Simon Glass
2019-10-05 13:12   ` Bin Meng
2019-10-06 11:19     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 033/126] dm: pci: Add a function to read a PCI BAR Simon Glass
2019-10-05 13:12   ` Bin Meng
2019-10-06 11:19     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 034/126] serial: ns16550: Add a PCI device/function field Simon Glass
2019-10-05 13:12   ` Bin Meng
2019-10-06 11:19     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 035/126] binman: Allow verbose output with all commands Simon Glass
2019-10-05 13:12   ` Bin Meng
2019-10-06 11:19     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 036/126] binman: Add a base implementation of Entry.ReadChildData() Simon Glass
2019-10-05 14:41   ` Bin Meng
2019-10-06 11:20     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 037/126] binman: Handle reading data for end-at-4gb sections Simon Glass
2019-10-05 14:42   ` Bin Meng
2019-10-06 11:20     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 038/126] binman: Take account of skip-at-start with image-header Simon Glass
2019-10-05 14:42   ` Bin Meng
2019-10-06 11:20     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 039/126] log: Add log_nop() to avoid unused-variable warnings Simon Glass
2019-10-05 14:42   ` Bin Meng
2019-10-06 11:20     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 040/126] cros_ec: Add MEC_EMI_BASE and size to the header file Simon Glass
2019-10-05 14:42   ` Bin Meng
2019-10-06 11:20     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 041/126] iod: Enhance to support display of multiple values Simon Glass
2019-10-05 15:18   ` Bin Meng
2019-10-07  1:00     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 042/126] arm: mxs: Correct CONFIG_SPL_NO_CPU_SUPPORT option Simon Glass
2019-10-05 15:18   ` Bin Meng
2019-10-07  1:00     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 043/126] spl: Allow tiny printf() to be controlled in SPL and TPL Simon Glass
2019-10-05 15:18   ` Bin Meng
2019-10-07  1:00     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 044/126] spl: Convert CONFIG_SPL_LIMIT to hex Simon Glass
2019-09-26 12:26   ` Simon Goldschmidt
2019-10-05 15:18   ` Bin Meng
2019-10-07  1:00     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 045/126] spl: Add a size check for TPL Simon Glass
2019-09-26 12:22   ` Simon Goldschmidt
2019-10-11 23:47     ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 046/126] spl: Allow distinguishing between two phases in U-Boot Simon Glass
2019-10-05 15:30   ` Bin Meng
2019-10-07  1:55     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 047/126] spl: Allow SPL/TPL to use of-platdata without libfdt Simon Glass
2019-10-05 15:30   ` Bin Meng
2019-10-07  1:55     ` Bin Meng
2019-10-08  5:46       ` Bin Meng
2019-10-13 18:30         ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 048/126] x86: Move acpi_s3.h to a common location Simon Glass
2019-10-05 15:33   ` Bin Meng
2019-10-07  1:55     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 049/126] x86: pci: Drop the first parameter in pci_x86_r/w_config() Simon Glass
2019-10-07 12:24   ` Bin Meng
2019-10-07 12:26     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 050/126] x86: timer: Reduce timer code size in TPL on Intel CPUs Simon Glass
2019-10-05 15:36   ` Bin Meng
2019-10-10 17:06     ` Simon Glass
2019-10-11 13:19       ` Bin Meng
2019-10-12  3:37         ` Simon Glass
2019-10-12  5:18           ` Bin Meng
2019-10-12 17:55             ` Simon Glass
2019-10-14  2:00               ` Bin Meng
2019-10-16  3:40                 ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 051/126] x86: Use a common definition of MSR_IA32_PERF_CTL Simon Glass
2019-10-06 16:08   ` Bin Meng
2019-10-07 12:52     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 052/126] x86: Add a common function to set CPU thermal target Simon Glass
2019-10-06 16:08   ` Bin Meng
2019-10-07 12:52     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 053/126] x86: Use a common bus clock for Intel CPUs Simon Glass
2019-10-06 16:09   ` Bin Meng
2019-10-07 12:52     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 054/126] x86: Add common functions for TDP and perf control Simon Glass
2019-10-06 16:09   ` Bin Meng
2019-10-06 16:15     ` Bin Meng
2019-10-07 12:52       ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 055/126] x86: Tidy up some duplicate MSR defines Simon Glass
2019-10-06 16:09   ` Bin Meng
2019-10-07 12:53     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 056/126] x86: Add new common CPU functions for turbo/burst mode Simon Glass
2019-10-07  0:32   ` Bin Meng
2019-10-07 12:53     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 057/126] dm: core: Drop fdtdec_get_pci_addr() Simon Glass
2019-10-07  0:32   ` Bin Meng
2019-10-07 12:53     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 058/126] sandbox: pci: Create a new sandbox_pci_read_bar() function Simon Glass
2019-10-07  0:32   ` Bin Meng
2019-10-07 12:53     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 059/126] x86: Allow the PCH and LPC uclasses to work with of-platdata Simon Glass
2019-10-07  0:32   ` Bin Meng
2019-10-07 12:53     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 060/126] x86: timer: Set up the timer in timer_early_get_count() Simon Glass
2019-10-07  0:32   ` Bin Meng
2019-10-12  3:37     ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 061/126] x86: Refactor mtrr_commit() to allow for shared code Simon Glass
2019-10-07 13:53   ` Bin Meng
2019-10-07 14:08     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 062/126] x86: Add a function to set variable MTRRs Simon Glass
2019-10-07 13:53   ` Bin Meng
2019-10-07 14:09     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 063/126] x86: pci: Add a function to decode a PCI BDF Simon Glass
2019-10-07 13:53   ` Bin Meng
2019-10-13 15:03     ` Simon Glass
2019-10-14  1:53       ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 064/126] x86: cpu: Don't include the cpu driver in TPL Simon Glass
2019-10-07 13:53   ` Bin Meng
2019-10-07 14:09     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 065/126] x86: Use mtrr_commit() with FSP2 Simon Glass
2019-10-07 13:53   ` Bin Meng
2019-10-07 14:09     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 066/126] x86: spl: Support init of a PUNIT Simon Glass
2019-10-09 14:01   ` Bin Meng
2019-10-14 20:02     ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 067/126] x86: Panic when SPL or TPL fail Simon Glass
2019-10-09 14:02   ` Bin Meng
2019-10-11  3:33     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 068/126] x86: tpl: Add a fake PCI bus Simon Glass
2019-10-09 14:20   ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 069/126] sandbox: pci: Remember the device being emulated Simon Glass
2019-10-09 14:27   ` Bin Meng
2019-10-11  8:26     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 070/126] x86: power: Add a PMC uclass Simon Glass
2019-10-10  3:10   ` Bin Meng
2019-10-12  3:37     ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 071/126] x86: sandbox: Add a PMC emulator and test Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 072/126] x86: power: Add a 'pmc' command Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 073/126] trace: Remove the const from write functions Simon Glass
2019-10-10  3:20   ` Bin Meng
2019-10-11  8:27     ` Bin Meng
2019-09-25 14:56 ` [U-Boot] [PATCH 074/126] pci: Add support for p2sb uclass Simon Glass
2019-10-10  4:57   ` Bin Meng
2019-10-12  3:37     ` Simon Glass
2019-10-12 20:57       ` Simon Glass
2019-09-25 14:56 ` [U-Boot] [PATCH 075/126] sandbox: Add PCI driver and test for p2sb Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 076/126] x86: Add a uclass for ITSS Simon Glass
2019-10-10  2:27   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 077/126] sandbox: Add a test " Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 078/126] x86: Define the SPL image start Simon Glass
2019-10-10  7:09   ` Bin Meng
2019-10-10 17:06     ` Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 079/126] x86: Reduce mrccache record alignment size Simon Glass
2019-10-10  5:09   ` Bin Meng
2019-10-10 17:06     ` Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 080/126] x86: Add a function to find the size of an mrccache record Simon Glass
2019-10-10  5:09   ` Bin Meng
2019-10-11  8:28     ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 081/126] x86: Correct mrccache find_next_mrc_cache() calculation Simon Glass
2019-10-10  6:23   ` Bin Meng
2019-10-12  3:37     ` Simon Glass
2019-10-12  4:44       ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 082/126] x86: Adjust mrccache_get_region() to use livetree Simon Glass
2019-10-10  6:45   ` Bin Meng
2019-10-16  3:40     ` Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 083/126] x86: Add a new global_data member for the cache record Simon Glass
2019-10-10  7:00   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 084/126] x86: Tidy up error handling in mrccache_save() Simon Glass
2019-10-10  7:07   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 085/126] x86: Update mrccache to support multiple caches Simon Glass
2019-10-10  7:39   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 086/126] x86: Add mrccache support for a 'variable' cache Simon Glass
2019-10-10  7:40   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 087/126] x86: Move fsp_prepare_mrc_cache() to fsp1 directory Simon Glass
2019-10-10  7:43   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 088/126] x86: Set the DRAM banks to reflect real location Simon Glass
2019-10-10  9:03   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 089/126] x86: Set up the MTRR for SDRAM Simon Glass
2019-10-10  9:18   ` Bin Meng
2019-10-12  3:37     ` Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 090/126] x86: Update Kconfig options for FSP1 Simon Glass
2019-10-10  9:19   ` Bin Meng
2019-10-11  8:34     ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 091/126] x86: Don't imply TPL_OF_LIBFDT Simon Glass
2019-10-10  9:23   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 092/126] x86: Allow removal of standard PCH drivers Simon Glass
2019-10-10  9:25   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 093/126] x86: Allow interrupt to happen once Simon Glass
2019-10-10  9:26   ` Bin Meng
2019-10-11  8:35     ` Bin Meng
2019-10-11  9:06       ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 094/126] x86: Add FSP2 base support Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 095/126] x86: Don't include the BIOS emulator in TPL Simon Glass
2019-10-10  9:36   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 096/126] x86: Add an option to include a FIT Simon Glass
2019-10-10  9:39   ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 097/126] x86: Add support for newer CAR schemes Simon Glass
2019-10-10  9:50   ` Bin Meng [this message]
2019-10-12  3:37     ` Simon Glass
2019-10-12  4:47       ` Bin Meng
2019-10-12 17:53         ` Simon Glass
2019-10-14  1:58           ` Bin Meng
2019-10-14 20:51             ` Simon Glass
2019-09-25 14:57 ` [U-Boot] [PATCH 098/126] x86: Drop RESET_BASE Simon Glass
2019-10-10  9:56   ` Bin Meng
2019-10-11  8:36     ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 099/126] x86: Drop RESET_SEG_SIZE Simon Glass
2019-10-10  9:57   ` Bin Meng
2019-10-11  8:37     ` Bin Meng
2019-09-25 14:57 ` [U-Boot] [PATCH 100/126] x86: Disable microcode section for FSP2 Simon Glass
2019-10-10  9:59   ` Bin Meng
2019-10-02  2:15 ` [U-Boot] [PATCH 000/126] x86: Add initial support for apollolake Simon Glass
2019-10-02 12:34   ` Bin Meng
2019-10-07 14:30     ` Bin Meng
2019-10-10 17:06       ` Simon Glass
2019-10-16  3:43         ` Simon Glass

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='CAEUhbmU4AmX4d7KstAmk=BtF+yHeR6_4a4SENbmA8bTjR5mdjw@mail.gmail.com' \
    --to=bmeng.cn@gmail.com \
    --cc=u-boot@lists.denx.de \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.