All of lore.kernel.org
 help / color / mirror / Atom feed
From: Simon Glass <sjg@chromium.org>
To: u-boot@lists.denx.de
Subject: [U-Boot] [PATCH v4 083/100] x86: apl: Add PMC driver
Date: Thu, 21 Nov 2019 21:18:48 -0700	[thread overview]
Message-ID: <20191122041905.224686-62-sjg@chromium.org> (raw)
In-Reply-To: <20191122041905.224686-1-sjg@chromium.org>

Add a driver for the Apollo Lake SoC. It supports the basic operations and
can use device tree or of-platdata.

Signed-off-by: Simon Glass <sjg@chromium.org>
---

Changes in v4:
- Fix Makefile copyright message
- Fix incorrect mask check in pmc_gpe_init()
- Switch over to use pinctrl for pad init/config
- Tidy up header guards
- Use pci_ofplat_get_devfn()
- apollolake -> Apollo Lake

Changes in v3:
- Use pci_get_devfn()

Changes in v2: None

 arch/x86/cpu/apollolake/Makefile          |   5 +
 arch/x86/cpu/apollolake/pmc.c             | 216 ++++++++++++++++++++++
 arch/x86/include/asm/arch-apollolake/pm.h |  19 ++
 drivers/power/acpi_pmc/acpi-pmc-uclass.c  |  56 ++++++
 4 files changed, 296 insertions(+)
 create mode 100644 arch/x86/cpu/apollolake/Makefile
 create mode 100644 arch/x86/cpu/apollolake/pmc.c
 create mode 100644 arch/x86/include/asm/arch-apollolake/pm.h

diff --git a/arch/x86/cpu/apollolake/Makefile b/arch/x86/cpu/apollolake/Makefile
new file mode 100644
index 0000000000..5e136b6515
--- /dev/null
+++ b/arch/x86/cpu/apollolake/Makefile
@@ -0,0 +1,5 @@
+# SPDX-License-Identifier: GPL-2.0+
+#
+# Copyright 2019 Google LLC
+
+obj-y += pmc.o
diff --git a/arch/x86/cpu/apollolake/pmc.c b/arch/x86/cpu/apollolake/pmc.c
new file mode 100644
index 0000000000..683c6082f2
--- /dev/null
+++ b/arch/x86/cpu/apollolake/pmc.c
@@ -0,0 +1,216 @@
+// SPDX-License-Identifier: GPL-2.0
+/*
+ * Copyright (C) 2017 Intel Corporation.
+ * Copyright 2019 Google LLC
+ *
+ * Modified from coreboot pmclib.c, pmc.c and pmutil.c
+ */
+
+#define LOG_CATEGORY UCLASS_ACPI_PMC
+
+#include <common.h>
+#include <acpi_s3.h>
+#include <dt-structs.h>
+#include <dm.h>
+#include <spl.h>
+#include <asm/io.h>
+#include <asm/pci.h>
+#include <power/acpi_pmc.h>
+
+#define GPIO_GPE_CFG		0x1050
+
+/* Memory mapped IO registers behind PMC_BASE_ADDRESS */
+#define PRSTS			0x1000
+#define GEN_PMCON1		0x1020
+#define  COLD_BOOT_STS		BIT(27)
+#define  COLD_RESET_STS		BIT(26)
+#define  WARM_RESET_STS		BIT(25)
+#define  GLOBAL_RESET_STS	BIT(24)
+#define  SRS			BIT(20)
+#define  MS4V			BIT(18)
+#define  RPS			BIT(2)
+#define GEN_PMCON1_CLR1_BITS	(COLD_BOOT_STS | COLD_RESET_STS | \
+				 WARM_RESET_STS | GLOBAL_RESET_STS | \
+				 SRS | MS4V)
+#define GEN_PMCON2		0x1024
+#define GEN_PMCON3		0x1028
+
+/* Offset of TCO registers from ACPI base I/O address */
+#define TCO_REG_OFFSET		0x60
+#define TCO1_STS	0x64
+#define   DMISCI_STS	BIT(9)
+#define   BOOT_STS	BIT(18)
+#define TCO2_STS	0x66
+#define TCO1_CNT	0x68
+#define   TCO_LOCK	BIT(12)
+#define TCO2_CNT	0x6a
+
+enum {
+	ETR		= 0x1048,
+	CF9_LOCK        = 1UL << 31,
+	CF9_GLB_RST	= 1 << 20,
+};
+
+struct apl_pmc_platdata {
+#if CONFIG_IS_ENABLED(OF_PLATDATA)
+	struct dtd_intel_apl_pmc dtplat;
+#endif
+	pci_dev_t bdf;
+};
+
+static int apl_pmc_fill_power_state(struct udevice *dev)
+{
+	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
+
+	upriv->tco1_sts = inw(upriv->acpi_base + TCO1_STS);
+	upriv->tco2_sts = inw(upriv->acpi_base + TCO2_STS);
+
+	upriv->prsts = readl(upriv->pmc_bar0 + PRSTS);
+	upriv->gen_pmcon1 = readl(upriv->pmc_bar0 + GEN_PMCON1);
+	upriv->gen_pmcon2 = readl(upriv->pmc_bar0 + GEN_PMCON2);
+	upriv->gen_pmcon3 = readl(upriv->pmc_bar0 + GEN_PMCON3);
+
+	return 0;
+}
+
+static int apl_prev_sleep_state(struct udevice *dev, int prev_sleep_state)
+{
+	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
+
+	/* WAK_STS bit will not be set when waking from G3 state */
+	if (!(upriv->pm1_sts & WAK_STS) &&
+	    (upriv->gen_pmcon1 & COLD_BOOT_STS))
+		prev_sleep_state = ACPI_S5;
+
+	return prev_sleep_state;
+}
+
+static int apl_disable_tco(struct udevice *dev)
+{
+	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
+
+	pmc_disable_tco_base(upriv->acpi_base + TCO_REG_OFFSET);
+
+	return 0;
+}
+
+static int apl_global_reset_set_enable(struct udevice *dev, bool enable)
+{
+	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
+
+	if (enable)
+		setbits_le32(upriv->pmc_bar0 + ETR, CF9_GLB_RST);
+	else
+		clrbits_le32(upriv->pmc_bar0 + ETR, CF9_GLB_RST);
+
+	return 0;
+}
+
+int apl_pmc_ofdata_to_uc_platdata(struct udevice *dev)
+{
+	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
+	struct apl_pmc_platdata *plat = dev_get_platdata(dev);
+
+#if !CONFIG_IS_ENABLED(OF_PLATDATA)
+	u32 base[6];
+	int size;
+	int ret;
+
+	ret = dev_read_u32_array(dev, "early-regs", base, ARRAY_SIZE(base));
+	if (ret)
+		return log_msg_ret("Missing/short early-regs", ret);
+	upriv->pmc_bar0 = (void *)base[0];
+	upriv->pmc_bar2 = (void *)base[2];
+	upriv->acpi_base = base[4];
+
+	/* Since PCI is not enabled, we must get the BDF manually */
+	plat->bdf = pci_get_devfn(dev);
+	if (plat->bdf < 0)
+		return log_msg_ret("Cannot get PMC PCI address", plat->bdf);
+
+	/* Get the dwX values for pmc gpe settings */
+	size = dev_read_size(dev, "gpe0-dw");
+	if (size < 0)
+		return log_msg_ret("Cannot read gpe0-dm", size);
+	upriv->gpe0_count = size / sizeof(u32);
+	ret = dev_read_u32_array(dev, "gpe0-dw", upriv->gpe0_dw,
+				 upriv->gpe0_count);
+	if (ret)
+		return log_msg_ret("Bad gpe0-dw", ret);
+
+	return pmc_ofdata_to_uc_platdata(dev);
+#else
+	struct dtd_intel_apl_pmc *dtplat = &plat->dtplat;
+
+	plat->bdf = pci_ofplat_get_devfn(dtplat->reg[0]);
+	upriv->pmc_bar0 = (void *)dtplat->early_regs[0];
+	upriv->pmc_bar2 = (void *)dtplat->early_regs[2];
+	upriv->acpi_base = dtplat->early_regs[4];
+	upriv->gpe0_dwx_mask = dtplat->gpe0_dwx_mask;
+	upriv->gpe0_dwx_shift_base = dtplat->gpe0_dwx_shift_base;
+	upriv->gpe0_sts_reg = dtplat->gpe0_sts;
+	upriv->gpe0_sts_reg += upriv->acpi_base;
+	upriv->gpe0_en_reg = dtplat->gpe0_en;
+	upriv->gpe0_en_reg += upriv->acpi_base;
+	upriv->gpe0_count = min((int)ARRAY_SIZE(dtplat->gpe0_dw), GPE0_REG_MAX);
+	memcpy(upriv->gpe0_dw, dtplat->gpe0_dw, sizeof(dtplat->gpe0_dw));
+#endif
+	upriv->gpe_cfg = (u32 *)(upriv->pmc_bar0 + GPIO_GPE_CFG);
+
+	return 0;
+}
+
+static int enable_pmcbar(struct udevice *dev)
+{
+	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
+	struct apl_pmc_platdata *priv = dev_get_platdata(dev);
+	pci_dev_t pmc = priv->bdf;
+
+	/*
+	 * Set PMC base addresses and enable decoding. BARs 1 and 3 are 64-bit
+	 * BARs.
+	 */
+	pci_x86_write_config(pmc, PCI_BASE_ADDRESS_0, (ulong)upriv->pmc_bar0,
+			     PCI_SIZE_32);
+	pci_x86_write_config(pmc, PCI_BASE_ADDRESS_1, 0, PCI_SIZE_32);
+	pci_x86_write_config(pmc, PCI_BASE_ADDRESS_2, (ulong)upriv->pmc_bar2,
+			     PCI_SIZE_32);
+	pci_x86_write_config(pmc, PCI_BASE_ADDRESS_3, 0, PCI_SIZE_32);
+	pci_x86_write_config(pmc, PCI_BASE_ADDRESS_4, upriv->acpi_base,
+			     PCI_SIZE_16);
+	pci_x86_write_config(pmc, PCI_COMMAND, PCI_COMMAND_IO |
+			     PCI_COMMAND_MEMORY | PCI_COMMAND_MASTER,
+			     PCI_SIZE_16);
+
+	return 0;
+}
+
+static int apl_pmc_probe(struct udevice *dev)
+{
+	if (spl_phase() == PHASE_TPL)
+		return enable_pmcbar(dev);
+
+	return 0;
+}
+
+static struct acpi_pmc_ops apl_pmc_ops = {
+	.init			= apl_pmc_fill_power_state,
+	.prev_sleep_state	= apl_prev_sleep_state,
+	.disable_tco		= apl_disable_tco,
+	.global_reset_set_enable = apl_global_reset_set_enable,
+};
+
+static const struct udevice_id apl_pmc_ids[] = {
+	{ .compatible = "intel,apl-pmc" },
+	{ }
+};
+
+U_BOOT_DRIVER(apl_pmc) = {
+	.name		= "intel_apl_pmc",
+	.id		= UCLASS_ACPI_PMC,
+	.of_match	= apl_pmc_ids,
+	.ofdata_to_platdata = apl_pmc_ofdata_to_uc_platdata,
+	.probe		= apl_pmc_probe,
+	.ops		= &apl_pmc_ops,
+	.platdata_auto_alloc_size = sizeof(struct apl_pmc_platdata),
+};
diff --git a/arch/x86/include/asm/arch-apollolake/pm.h b/arch/x86/include/asm/arch-apollolake/pm.h
new file mode 100644
index 0000000000..557fb9538e
--- /dev/null
+++ b/arch/x86/include/asm/arch-apollolake/pm.h
@@ -0,0 +1,19 @@
+/* SPDX-License-Identifier: GPL-2.0 */
+/*
+ * Copyright (C) 2015-2016 Intel Corp.
+ * (Written by Lance Zhao <lijian.zhao@intel.com> for Intel Corp.)
+ */
+
+#ifndef _ASM_ARCH_PM_H
+#define _ASM_ARCH_PM_H
+
+#define  PMC_GPE_SW_31_0	0
+#define  PMC_GPE_SW_63_32	1
+#define  PMC_GPE_NW_31_0	3
+#define  PMC_GPE_NW_63_32	4
+#define  PMC_GPE_NW_95_64	5
+#define  PMC_GPE_N_31_0		6
+#define  PMC_GPE_N_63_32	7
+#define  PMC_GPE_W_31_0		9
+
+#endif
diff --git a/drivers/power/acpi_pmc/acpi-pmc-uclass.c b/drivers/power/acpi_pmc/acpi-pmc-uclass.c
index 653c71b948..d43de87126 100644
--- a/drivers/power/acpi_pmc/acpi-pmc-uclass.c
+++ b/drivers/power/acpi_pmc/acpi-pmc-uclass.c
@@ -9,6 +9,9 @@
 #include <acpi_s3.h>
 #include <dm.h>
 #include <log.h>
+#ifdef CONFIG_X86
+#include <asm/intel_pinctrl.h>
+#endif
 #include <asm/io.h>
 #include <power/acpi_pmc.h>
 
@@ -34,6 +37,59 @@ enum {
 	TCO1_CNT_HLT			= 1 << 11,
 };
 
+#ifdef CONFIG_X86
+static int gpe0_shift(struct acpi_pmc_upriv *upriv, int regnum)
+{
+	return upriv->gpe0_dwx_shift_base + regnum * 4;
+}
+
+int pmc_gpe_init(struct udevice *dev)
+{
+	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
+	struct udevice *itss;
+	u32 *dw;
+	u32 gpio_cfg_mask;
+	u32 gpio_cfg;
+	int ret, i;
+	u32 mask;
+
+	if (device_get_uclass_id(dev) != UCLASS_ACPI_PMC)
+		return log_msg_ret("uclass", -EPROTONOSUPPORT);
+	dw = upriv->gpe0_dw;
+	mask = upriv->gpe0_dwx_mask;
+	gpio_cfg_mask = 0;
+	for (i = 0; i < upriv->gpe0_count; i++) {
+		gpio_cfg_mask |= mask << gpe0_shift(upriv, i);
+		if (dw[i] & ~mask)
+			return log_msg_ret("Base GPE0 value", -EINVAL);
+	}
+
+	/*
+	 * Route the GPIOs to the GPE0 block. Determine that all values
+	 * are different and if they aren't, use the reset values.
+	 */
+	if (dw[0] == dw[1] || dw[1] == dw[2]) {
+		log_info("PMC: Using default GPE route");
+		gpio_cfg = readl(upriv->gpe_cfg);
+		for (i = 0; i < upriv->gpe0_count; i++)
+			dw[i] = gpio_cfg >> gpe0_shift(upriv, i);
+	} else {
+		gpio_cfg = 0;
+		for (i = 0; i < upriv->gpe0_count; i++)
+			gpio_cfg |= dw[i] << gpe0_shift(upriv, i);
+		clrsetbits_le32(upriv->gpe_cfg, gpio_cfg_mask, gpio_cfg);
+	}
+
+	/* Set the routes in the GPIO communities as well */
+	ret = uclass_first_device_err(UCLASS_IRQ, &itss);
+	if (ret)
+		return log_msg_ret("Cannot find itss", ret);
+	pinctrl_route_gpe(itss, dw[0], dw[1], dw[2]);
+
+	return 0;
+}
+#endif /* CONFIG_X86 */
+
 static void pmc_fill_pm_reg_info(struct udevice *dev)
 {
 	struct acpi_pmc_upriv *upriv = dev_get_uclass_priv(dev);
-- 
2.24.0.432.g9d3f5f5b63-goog

  parent reply	other threads:[~2019-11-22  4:18 UTC|newest]

Thread overview: 104+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-11-22  4:17 [U-Boot] [PATCH v4 000/100] x86: Add initial support for apollolake Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 001/100] binman: Add a library to access binman entries Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 002/100] dm: gpio: Allow control of GPIO uclass in SPL Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 003/100] dm: core: Fix offset_to_ofnode() with invalid offset Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 004/100] dm: pci: Allow delaying auto-config until after relocation Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 005/100] dm: pci: Move pci_get_devfn() into a common file Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 006/100] net: Move the checksum functions to lib/ Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 007/100] i2c: designware: Tidy up PCI support Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 008/100] i2c: designware: Avoid using static data Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 009/100] i2c: designware: Support use in SPL Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 010/100] x86: spi: Add helper functions for Intel Fast SPI Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 011/100] fdt: Show the preprocessed .dts file on error Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 012/100] board_r: Move early-timer init later Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 013/100] RFC: sandbox: net: Suppress the MAC-address warnings Simon Glass
2019-11-22 21:11   ` Joe Hershberger
2019-11-22  4:17 ` [U-Boot] [PATCH v4 014/100] Revert "RFC: sandbox: net: Suppress the MAC-address warnings" Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 015/100] x86: timer: use a timer base of 0 Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 016/100] x86: timer: Reduce timer code size in TPL on Intel CPUs Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 017/100] x86: Drop unnecessary cpu code for TPL Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 018/100] x86: Drop unnecessary interrupt " Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 019/100] x86: power: Add an ACPI PMC uclass Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 020/100] x86: sandbox: Add a PMC emulator and test Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 021/100] x86: power: Add a 'pmc' command Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 022/100] pci: Add support for p2sb uclass Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 023/100] sandbox: Disable mmio by default in tests Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 024/100] sandbox: Add PCI driver and test for p2sb Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 025/100] x86: Move UCLASS_IRQ into a separate file Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 026/100] sandbox: Add a test for IRQ Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 027/100] x86: Define the SPL image start Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 028/100] x86: Reduce mrccache record alignment size Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 029/100] x86: Correct mrccache find_next_mrc_cache() calculation Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 030/100] x86: Adjust mrccache_get_region() to use livetree Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 031/100] x86: Adjust mrccache_get_region() to support get_mmap() Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 032/100] x86: Add a new global_data member for the cache record Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 033/100] x86: Tidy up error handling in mrccache_save() Simon Glass
2019-11-22  4:17 ` [U-Boot] [PATCH v4 034/100] x86: Update mrccache to support multiple caches Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 035/100] x86: Add mrccache support for a 'variable' cache Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 036/100] x86: Don't export mrccache_update() Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 037/100] x86: Move fsp_prepare_mrc_cache() to fsp1 directory Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 038/100] x86: Set the DRAM banks to reflect real location Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 039/100] x86: Set up the MTRR for SDRAM Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 040/100] x86: Don't imply libfdt or SPI flash in TPL Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 041/100] x86: Allow removal of standard PCH drivers Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 042/100] x86: Allow interrupt to happen once Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 043/100] x86: fsp: Make graphics support common to FSP1/2 Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 044/100] x86: fsp: Correct wrong header inlude in fsp_support.c Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 045/100] x86: fsp: Add FSP2 base support Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 046/100] x86: fsp: Set up an MTRR for the graphics frame buffer Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 047/100] x86: fsp: Add a new arch_fsp_init_r() hook Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 048/100] x86: fsp: Allow remembering the location of FSP-S Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 049/100] x86: fsp: Make the notify API call common Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 050/100] x86: Don't include the BIOS emulator in TPL Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 051/100] x86: Add an option to include a FIT Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 052/100] x86: Add support for newer CAR schemes Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 053/100] x86: Disable microcode section for FSP2 Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 054/100] x86: Update the fsp command " Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 055/100] x86: Update .dtsi file " Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 056/100] x86: Add an option to control the position of U-Boot Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 057/100] x86: Add an option to control the position of SPL Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 058/100] x86: Add an fdtmap and image-header Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 059/100] x86: Don't repeat microcode in U-Boot if not needed Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 060/100] x86: Separate out U-Boot and device tree in ROM image Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 061/100] x86: Make MSR_PKG_POWER_SKU common Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 062/100] spi: Correct operations check in dm_spi_xfer() Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 063/100] x86: spi: Don't enable SPI_FLASH_BAR by default Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 064/100] spi: ich: Move init function just above probe() Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 065/100] spi: ich: Move the protection/lockdown code into a function Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 066/100] spi: ich: Convert to livetree Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 067/100] spi: ich: Fix header order Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 068/100] spi: ich: Various small tidy-ups Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 069/100] spi: ich: Add mmio_base to struct ich_spi_platdata Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 070/100] dm: doc: Add a note about of-platdata and header files Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 071/100] spi: ich: Correct max-size bug in ich_spi_adjust_size() Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 072/100] spi: ich: Support of-platdata for fast-spi Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 073/100] spi: ich: Support hardware sequencing Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 074/100] spi: ich: Add support for get_mmap() method Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 075/100] spi: ich: Add TPL support Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 076/100] spi: ich: Add Apollo Lake support Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 077/100] mtd: spi: Export spi_flash_std_probe() Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 078/100] x86: Enable pinctrl in SPL and TPL Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 079/100] x86: Add low-power subsystem (lpss) support Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 080/100] x86: Add a generic Intel pinctrl driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 081/100] x86: Add a generic Intel GPIO driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 082/100] x86: apl: Add basic IO addresses Simon Glass
2019-11-22  4:18 ` Simon Glass [this message]
2019-11-22  4:18 ` [U-Boot] [PATCH v4 084/100] x86: apl: Add UART driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 085/100] x86: apl: Add pinctrl driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 086/100] i2c: designware: Add Apollo Lake support Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 087/100] x86: apl: Add systemagent driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 088/100] x86: apl: Add hostbridge driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 089/100] x86: apl: Add ITSS driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 090/100] x86: apl: Add LPC driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 091/100] x86: apl: Add PCH driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 092/100] x86: apl: Add PUNIT driver Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 093/100] x86: apl: Add SPL loaders Simon Glass
2019-11-22  4:18 ` [U-Boot] [PATCH v4 094/100] x86: apl: Add a CPU driver Simon Glass
2019-11-22  4:19 ` [U-Boot] [PATCH v4 095/100] x86: apl: Add SPL/TPL init Simon Glass
2019-11-22  4:19 ` [U-Boot] [PATCH v4 096/100] x86: apl: Add P2SB driver Simon Glass
2019-11-22  4:19 ` [U-Boot] [PATCH v4 097/100] x86: apl: Add Kconfig and Makefile Simon Glass
2019-11-22  4:19 ` [U-Boot] [PATCH v4 098/100] x86: apl: Add FSP structures Simon Glass
2019-11-22  4:19 ` [U-Boot] [PATCH v4 099/100] x86: apl: Add FSP support Simon Glass
2019-11-22  4:19 ` [U-Boot] [PATCH v4 100/100] x86: Add chromebook_coral Simon Glass
2019-11-22 12:25 ` [U-Boot] [PATCH v4 000/100] x86: Add initial support for apollolake Simon Glass
2019-11-23 12:58   ` Bin Meng

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=20191122041905.224686-62-sjg@chromium.org \
    --to=sjg@chromium.org \
    --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.