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 v3 047/108] x86: Update mrccache to support multiple caches
Date: Sun, 20 Oct 2019 21:38:12 -0600	[thread overview]
Message-ID: <20191021033913.220758-47-sjg@chromium.org> (raw)
In-Reply-To: <20191021033913.220758-22-sjg@chromium.org>

With apollolake we need to support a normal cache, which almost never
changes and a much smaller 'variable' cache which changes every time.

Update the code to add a cache type, use an array for the caches and use a
for loop to iterate over the caches.

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

Changes in v3:
- Move line related to variable-cache into the next patch

Changes in v2: None

 arch/x86/cpu/broadwell/sdram.c     |  8 ++-
 arch/x86/cpu/ivybridge/sdram.c     |  8 ++-
 arch/x86/cpu/quark/dram.c          |  8 ++-
 arch/x86/include/asm/global_data.h | 21 +++++--
 arch/x86/include/asm/mrccache.h    | 11 +++-
 arch/x86/lib/fsp/fsp_common.c      |  2 +-
 arch/x86/lib/fsp1/fsp_dram.c       |  8 ++-
 arch/x86/lib/mrccache.c            | 88 ++++++++++++++++++++----------
 8 files changed, 106 insertions(+), 48 deletions(-)

diff --git a/arch/x86/cpu/broadwell/sdram.c b/arch/x86/cpu/broadwell/sdram.c
index b31d78c092a..107c04691b0 100644
--- a/arch/x86/cpu/broadwell/sdram.c
+++ b/arch/x86/cpu/broadwell/sdram.c
@@ -82,7 +82,7 @@ static int prepare_mrc_cache(struct pei_data *pei_data)
 	struct mrc_region entry;
 	int ret;
 
-	ret = mrccache_get_region(NULL, &entry);
+	ret = mrccache_get_region(MRC_TYPE_NORMAL, NULL, &entry);
 	if (ret)
 		return ret;
 	mrc_cache = mrccache_find_current(&entry);
@@ -168,12 +168,14 @@ int dram_init(void)
 	      pei_data->data_to_save);
 	/* S3 resume: don't save scrambler seed or MRC data */
 	if (pei_data->boot_mode != SLEEP_STATE_S3) {
+		struct mrc_output *mrc = &gd->arch.mrc[MRC_TYPE_NORMAL];
+
 		/*
 		 * This will be copied to SDRAM in reserve_arch(), then written
 		 * to SPI flash in mrccache_save()
 		 */
-		gd->arch.mrc_output = (char *)pei_data->data_to_save;
-		gd->arch.mrc_output_len = pei_data->data_to_save_size;
+		mrc->buf = (char *)pei_data->data_to_save;
+		mrc->len = pei_data->data_to_save_size;
 	}
 	gd->arch.pei_meminfo = pei_data->meminfo;
 
diff --git a/arch/x86/cpu/ivybridge/sdram.c b/arch/x86/cpu/ivybridge/sdram.c
index 8a58d0383d5..8b03406666e 100644
--- a/arch/x86/cpu/ivybridge/sdram.c
+++ b/arch/x86/cpu/ivybridge/sdram.c
@@ -115,7 +115,7 @@ static int prepare_mrc_cache(struct pei_data *pei_data)
 	ret = read_seed_from_cmos(pei_data);
 	if (ret)
 		return ret;
-	ret = mrccache_get_region(NULL, &entry);
+	ret = mrccache_get_region(MRC_TYPE_NORMAL, NULL, &entry);
 	if (ret)
 		return ret;
 	mrc_cache = mrccache_find_current(&entry);
@@ -537,12 +537,14 @@ int dram_init(void)
 
 	/* S3 resume: don't save scrambler seed or MRC data */
 	if (pei_data->boot_mode != PEI_BOOT_RESUME) {
+		struct mrc_output *mrc = &gd->arch.mrc[MRC_TYPE_NORMAL];
+
 		/*
 		 * This will be copied to SDRAM in reserve_arch(), then written
 		 * to SPI flash in mrccache_save()
 		 */
-		gd->arch.mrc_output = (char *)pei_data->mrc_output;
-		gd->arch.mrc_output_len = pei_data->mrc_output_len;
+		mrc->buf = (char *)pei_data->mrc_output;
+		mrc->len = pei_data->mrc_output_len;
 		ret = write_seeds_to_cmos(pei_data);
 		if (ret)
 			debug("Failed to write seeds to CMOS: %d\n", ret);
diff --git a/arch/x86/cpu/quark/dram.c b/arch/x86/cpu/quark/dram.c
index 51f9659ab15..3994355112b 100644
--- a/arch/x86/cpu/quark/dram.c
+++ b/arch/x86/cpu/quark/dram.c
@@ -22,7 +22,7 @@ static __maybe_unused int prepare_mrc_cache(struct mrc_params *mrc_params)
 	struct mrc_region entry;
 	int ret;
 
-	ret = mrccache_get_region(NULL, &entry);
+	ret = mrccache_get_region(MRC_TYPE_NORMAL, NULL, &entry);
 	if (ret)
 		return ret;
 
@@ -152,9 +152,11 @@ int dram_init(void)
 #ifdef CONFIG_ENABLE_MRC_CACHE
 	cache = malloc(sizeof(struct mrc_timings));
 	if (cache) {
+		struct mrc_output *mrc = &gd->arch.mrc[MRC_TYPE_NORMAL];
+
 		memcpy(cache, &mrc_params.timings, sizeof(struct mrc_timings));
-		gd->arch.mrc_output = cache;
-		gd->arch.mrc_output_len = sizeof(struct mrc_timings);
+		mrc->buf = cache;
+		mrc->len = sizeof(struct mrc_timings);
 	}
 #endif
 
diff --git a/arch/x86/include/asm/global_data.h b/arch/x86/include/asm/global_data.h
index 67d9a38177e..6d21ddc0d1e 100644
--- a/arch/x86/include/asm/global_data.h
+++ b/arch/x86/include/asm/global_data.h
@@ -67,6 +67,21 @@ struct mtrr_request {
 	uint64_t size;
 };
 
+/**
+ * struct mrc_output - holds the MRC data
+ *
+ * @buf: MRC training data to save for the next boot. This is set to point to
+ *	the raw data after SDRAM init is complete. Then mrccache_setup()
+ *	turns it into a proper cache record with a checksum
+ * @len: Length of @buf
+ * @cache: Resulting cache record
+ */
+struct mrc_output {
+	char *buf;
+	uint len;
+	struct mrc_data_container *cache;
+};
+
 /* Architecture-specific global data */
 struct arch_global_data {
 	u64 gdt[X86_GDT_NUM_ENTRIES] __aligned(16);
@@ -91,10 +106,8 @@ struct arch_global_data {
 	struct mtrr_request mtrr_req[MAX_MTRR_REQUESTS];
 	int mtrr_req_count;
 	int has_mtrr;
-	/* MRC training data to save for the next boot */
-	char *mrc_output;
-	unsigned int mrc_output_len;
-	struct mrc_data_container *mrc_cache;
+	/* MRC training data */
+	struct mrc_output mrc[MRC_TYPE_COUNT];
 	ulong table;			/* Table pointer from previous loader */
 	int turbo_state;		/* Current turbo state */
 	struct irq_routing_table *pirq_routing_table;
diff --git a/arch/x86/include/asm/mrccache.h b/arch/x86/include/asm/mrccache.h
index abf58182237..b81e2b2fb6a 100644
--- a/arch/x86/include/asm/mrccache.h
+++ b/arch/x86/include/asm/mrccache.h
@@ -27,6 +27,13 @@ struct mrc_region {
 	u32	length;
 };
 
+/* Types of MRC data */
+enum mrc_type_t {
+	MRC_TYPE_NORMAL,
+
+	MRC_TYPE_COUNT,
+};
+
 struct udevice;
 
 /**
@@ -84,6 +91,7 @@ int mrccache_reserve(void);
  *   triggers PCI bus enumeration during which insufficient memory issue
  *   might be exposed and it causes subsequent SPI flash probe fails).
  *
+ * @type:	Type of MRC data to use
  * @devp:	Returns pointer to the SPI flash device
  * @entry:	Position and size of MRC cache in SPI flash
  * @return 0 if success, -ENOENT if SPI flash node does not exist in the
@@ -91,7 +99,8 @@ int mrccache_reserve(void);
  * tree, -EINVAL if MRC region properties format is incorrect, other error
  * if SPI flash probe failed.
  */
-int mrccache_get_region(struct udevice **devp, struct mrc_region *entry);
+int mrccache_get_region(enum mrc_type_t type, struct udevice **devp,
+			struct mrc_region *entry);
 
 /**
  * mrccache_save() - save MRC data to the SPI flash
diff --git a/arch/x86/lib/fsp/fsp_common.c b/arch/x86/lib/fsp/fsp_common.c
index 40ba866d77c..c1c30ce0eb6 100644
--- a/arch/x86/lib/fsp/fsp_common.c
+++ b/arch/x86/lib/fsp/fsp_common.c
@@ -63,7 +63,7 @@ void *fsp_prepare_mrc_cache(void)
 	struct mrc_region entry;
 	int ret;
 
-	ret = mrccache_get_region(NULL, &entry);
+	ret = mrccache_get_region(MRC_TYPE_NORMAL, NULL, &entry);
 	if (ret)
 		return NULL;
 
diff --git a/arch/x86/lib/fsp1/fsp_dram.c b/arch/x86/lib/fsp1/fsp_dram.c
index 6a3349b42af..5ef89744b94 100644
--- a/arch/x86/lib/fsp1/fsp_dram.c
+++ b/arch/x86/lib/fsp1/fsp_dram.c
@@ -15,9 +15,11 @@ int dram_init(void)
 	if (ret)
 		return ret;
 
-	if (IS_ENABLED(CONFIG_ENABLE_MRC_CACHE))
-		gd->arch.mrc_output = fsp_get_nvs_data(gd->arch.hob_list,
-					       &gd->arch.mrc_output_len);
+	if (IS_ENABLED(CONFIG_ENABLE_MRC_CACHE)) {
+		struct mrc_output *mrc = &gd->arch.mrc[MRC_TYPE_NORMAL];
+
+		mrc->buf = fsp_get_nvs_data(gd->arch.hob_list, &mrc->len);
+	}
 
 	return 0;
 }
diff --git a/arch/x86/lib/mrccache.c b/arch/x86/lib/mrccache.c
index b97bb9b5998..36444048c6c 100644
--- a/arch/x86/lib/mrccache.c
+++ b/arch/x86/lib/mrccache.c
@@ -169,38 +169,45 @@ int mrccache_update(struct udevice *sf, struct mrc_region *entry,
 	return 0;
 }
 
-static void mrccache_setup(void *data)
+static void mrccache_setup(struct mrc_output *mrc, void *data)
 {
 	struct mrc_data_container *cache = data;
 	u16 checksum;
 
 	cache->signature = MRC_DATA_SIGNATURE;
-	cache->data_size = gd->arch.mrc_output_len;
-	checksum = compute_ip_checksum(gd->arch.mrc_output, cache->data_size);
+	cache->data_size = mrc->len;
+	checksum = compute_ip_checksum(mrc->buf, cache->data_size);
 	debug("Saving %d bytes for MRC output data, checksum %04x\n",
 	      cache->data_size, checksum);
 	cache->checksum = checksum;
 	cache->reserved = 0;
-	memcpy(cache->data, gd->arch.mrc_output, cache->data_size);
+	memcpy(cache->data, mrc->buf, cache->data_size);
 
-	gd->arch.mrc_cache = cache;
+	mrc->cache = cache;
 }
 
 int mrccache_reserve(void)
 {
-	if (!gd->arch.mrc_output_len)
-		return 0;
+	int i;
+
+	for (i = 0; i < MRC_TYPE_COUNT; i++) {
+		struct mrc_output *mrc = &gd->arch.mrc[i];
 
-	/* adjust stack pointer to store pure cache data plus the header */
-	gd->start_addr_sp -= (gd->arch.mrc_output_len + MRC_DATA_HEADER_SIZE);
-	mrccache_setup((void *)gd->start_addr_sp);
+		if (!mrc->len)
+			continue;
 
-	gd->start_addr_sp &= ~0xf;
+		/* adjust stack pointer to store pure cache data plus header */
+		gd->start_addr_sp -= (mrc->len + MRC_DATA_HEADER_SIZE);
+		mrccache_setup(mrc, (void *)gd->start_addr_sp);
+
+		gd->start_addr_sp &= ~0xf;
+	}
 
 	return 0;
 }
 
-int mrccache_get_region(struct udevice **devp, struct mrc_region *entry)
+int mrccache_get_region(enum mrc_type_t type, struct udevice **devp,
+			struct mrc_region *entry)
 {
 	struct udevice *dev;
 	ofnode mrc_node;
@@ -241,31 +248,33 @@ int mrccache_get_region(struct udevice **devp, struct mrc_region *entry)
 
 	if (devp)
 		*devp = dev;
-	debug("MRC cache in '%s', offset %x, len %x, base %x\n",
-	      dev->name, entry->offset, entry->length, entry->base);
+	debug("MRC cache type %d in '%s', offset %x, len %x, base %x\n",
+	      type, dev->name, entry->offset, entry->length, entry->base);
 
 	return 0;
 }
 
-int mrccache_save(void)
+static int mrccache_save_type(enum mrc_type_t type)
 {
 	struct mrc_data_container *cache;
+	struct mrc_output *mrc;
 	struct mrc_region entry;
 	struct udevice *sf;
 	int ret;
 
-	if (!gd->arch.mrc_output_len)
+	mrc = &gd->arch.mrc[type];
+	if (!mrc->len)
 		return 0;
-	debug("Saving %#x bytes of MRC output data to SPI flash\n",
-	      gd->arch.mrc_output_len);
-
-	ret = mrccache_get_region(&sf, &entry);
+	log_debug("Saving %#x bytes of MRC output data type %d to SPI flash\n",
+		  mrc->len, type);
+	ret = mrccache_get_region(type, &sf, &entry);
 	if (ret)
 		return log_msg_ret("Cannot get region", ret);
 	ret = device_probe(sf);
 	if (ret)
 		return log_msg_ret("Cannot probe device", ret);
-	cache = gd->arch.mrc_cache;
+	cache = mrc->cache;
+
 	ret = mrccache_update(sf, &entry, cache);
 	if (!ret)
 		debug("Saved MRC data with checksum %04x\n", cache->checksum);
@@ -275,17 +284,36 @@ int mrccache_save(void)
 	return 0;
 }
 
+int mrccache_save(void)
+{
+	int i;
+
+	for (i = 0; i < MRC_TYPE_COUNT; i++) {
+		int ret;
+
+		ret = mrccache_save_type(i);
+		if (ret)
+			return ret;
+	}
+
+	return 0;
+}
+
 int mrccache_spl_save(void)
 {
-	void *data;
-	int size;
-
-	size = gd->arch.mrc_output_len + MRC_DATA_HEADER_SIZE;
-	data = malloc(size);
-	if (!data)
-		return log_msg_ret("Allocate MRC cache block", -ENOMEM);
-	mrccache_setup(data);
-	gd->arch.mrc_output = data;
+	int i;
+
+	for (i = 0; i < MRC_TYPE_COUNT; i++) {
+		struct mrc_output *mrc = &gd->arch.mrc[i];
+		void *data;
+		int size;
+
+		size = mrc->len + MRC_DATA_HEADER_SIZE;
+		data = malloc(size);
+		if (!data)
+			return log_msg_ret("Allocate MRC cache block", -ENOMEM);
+		mrccache_setup(mrc, data);
+	}
 
 	return mrccache_save();
 }
-- 
2.23.0.866.gb869b98d4c-goog

  parent reply	other threads:[~2019-10-21  3:38 UTC|newest]

Thread overview: 201+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2019-10-21  3:37 [U-Boot] [PATCH v3 022/108] x86: timer: Use a separate flag for whether timer is inited Simon Glass
2019-10-21  3:37 ` [U-Boot] [PATCH v3 023/108] x86: timer: Allow a timer base of 0 Simon Glass
2019-10-28 13:02   ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 024/108] x86: spl: Support init of a PUNIT Simon Glass
2019-10-28  7:12   ` Bin Meng
2019-11-02  9:49     ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 025/108] x86: tpl: Add a fake PCI bus Simon Glass
2019-10-21  7:52   ` Andy Shevchenko
2019-10-21 22:53     ` Simon Glass
2019-10-22  8:19       ` Andy Shevchenko
2019-10-22 13:50         ` Simon Glass
2019-10-28  7:12   ` Bin Meng
2019-11-02  9:49     ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 026/108] x86: timer: Reduce timer code size in TPL on Intel CPUs Simon Glass
2019-10-28  7:26   ` Bin Meng
2019-11-02 18:25     ` Simon Glass
2019-10-21  3:37 ` [U-Boot] [PATCH v3 027/108] x86: Drop unnecessary cpu code for TPL Simon Glass
2019-10-28 12:56   ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 028/108] x86: Drop unnecessary interrupt " Simon Glass
2019-10-28  7:49   ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 029/108] x86: Add a CPU init function " Simon Glass
2019-10-28  7:50   ` Bin Meng
2019-11-02  9:58     ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 030/108] x86: Move CPU init to before spl_init() Simon Glass
2019-10-28  7:52   ` Bin Meng
2019-11-02  9:58     ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 031/108] x86: Don't print CPU info in TPL Simon Glass
2019-11-02  5:52   ` Bin Meng
2019-11-02  9:58     ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 032/108] x86: Quieten TPL's jump_to_image_no_args() Simon Glass
2019-11-02  5:52   ` Bin Meng
2019-11-02  9:58     ` Bin Meng
2019-10-21  3:37 ` [U-Boot] [PATCH v3 033/108] x86: power: Add an ACPI PMC uclass Simon Glass
2019-11-02  5:52   ` Bin Meng
2019-11-04  8:02   ` Bin Meng
2019-11-21 13:50     ` Simon Glass
2019-10-21  3:37 ` [U-Boot] [PATCH v3 034/108] x86: sandbox: Add a PMC emulator and test Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 035/108] x86: power: Add a 'pmc' command Simon Glass
2019-10-21  7:48   ` Andy Shevchenko
2019-10-21 22:53     ` Simon Glass
2019-10-22  8:21       ` Andy Shevchenko
2019-10-22 13:50         ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 036/108] pci: Add support for p2sb uclass Simon Glass
2019-11-04  8:23   ` Bin Meng
2019-11-21 13:50     ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 037/108] sandbox: Add PCI driver and test for p2sb Simon Glass
2019-11-04  8:36   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 038/108] x86: Move UCLASS_IRQ into a separate file Simon Glass
2019-11-04  8:41   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 039/108] sandbox: Add a test for IRQ Simon Glass
2019-11-04  8:45   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 040/108] x86: Define the SPL image start Simon Glass
2019-11-04  8:46   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 041/108] x86: Reduce mrccache record alignment size Simon Glass
2019-11-04  8:50   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 042/108] x86: Correct mrccache find_next_mrc_cache() calculation Simon Glass
2019-11-04 15:01   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 043/108] x86: Adjust mrccache_get_region() to use livetree Simon Glass
2019-11-04 15:06   ` Bin Meng
2019-11-12  0:51     ` Simon Glass
2019-11-13 15:16       ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 044/108] x86: Adjust mrccache_get_region() to support get_mmap() Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 045/108] x86: Add a new global_data member for the cache record Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 046/108] x86: Tidy up error handling in mrccache_save() Simon Glass
2019-10-21  3:38 ` Simon Glass [this message]
2019-11-04 15:22   ` [U-Boot] [PATCH v3 047/108] x86: Update mrccache to support multiple caches Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 048/108] x86: Add mrccache support for a 'variable' cache Simon Glass
2019-11-04 15:23   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 049/108] x86: Move fsp_prepare_mrc_cache() to fsp1 directory Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 050/108] x86: Set the DRAM banks to reflect real location Simon Glass
2019-11-04 15:24   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 051/108] x86: Set up the MTRR for SDRAM Simon Glass
2019-11-19  2:23   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 052/108] x86: Don't imply libfdt or SPI flash in TPL Simon Glass
2019-11-19  2:23   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 053/108] x86: Allow removal of standard PCH drivers Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 054/108] x86: Allow interrupt to happen once Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 055/108] x86: fsp: Make graphics support common to FSP1/2 Simon Glass
2019-11-19  2:23   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 056/108] x86: fsp: Correct wrong header inlude in fsp_support.c Simon Glass
2019-11-19  7:25   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 057/108] x86: fsp: Add FSP2 base support Simon Glass
2019-11-19  7:25   ` Bin Meng
2019-11-21 13:50     ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 058/108] x86: fsp: Set up an MTRR for the graphics frame buffer Simon Glass
2019-11-19  7:25   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 059/108] x86: fsp: Add a new arch_fsp_init_r() hook Simon Glass
2019-11-19  7:25   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 060/108] x86: fsp: Allow remembering the location of FSP-S Simon Glass
2019-11-19  7:25   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 061/108] x86: fsp: Make the notify API call common Simon Glass
2019-11-19  8:02   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 062/108] x86: Don't include the BIOS emulator in TPL Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 063/108] x86: Add an option to include a FIT Simon Glass
2019-11-19  8:02   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 064/108] x86: Add support for newer CAR schemes Simon Glass
2019-10-21  8:11   ` Andy Shevchenko
2019-11-19  8:02   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 065/108] x86: Disable microcode section for FSP2 Simon Glass
2019-11-19  8:02   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 066/108] x86: Update the fsp command " Simon Glass
2019-11-19  8:34   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 067/108] x86: Update .dtsi file " Simon Glass
2019-11-19  8:34   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 068/108] x86: Add an option to control the position of U-Boot Simon Glass
2019-11-19  8:34   ` Bin Meng
2019-11-21 13:50     ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 069/108] x86: Add an option to control the position of SPL Simon Glass
2019-11-19  8:34   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 070/108] x86: Add an fdtmap and image-header Simon Glass
2019-11-19  8:34   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 071/108] x86: Don't repeat microcode in U-Boot if not needed Simon Glass
2019-11-19 13:33   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 072/108] x86: Separate out U-Boot and device tree in ROM image Simon Glass
2019-11-19 13:33   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 073/108] x86: Make MSR_PKG_POWER_SKU common Simon Glass
2019-11-19 13:33   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 074/108] spi: Correct operations check in dm_spi_xfer() Simon Glass
2019-11-19 13:33   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 075/108] x86: spi: Don't enable SPI_FLASH_BAR by default Simon Glass
2019-11-19 13:33   ` Bin Meng
2019-11-20  5:22     ` Vignesh Raghavendra
2019-11-21 13:50       ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 076/108] spi: ich: Move init function just above probe() Simon Glass
2019-11-19 13:52   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 077/108] spi: ich: Move the protection/lockdown code into a function Simon Glass
2019-11-19 13:53   ` Bin Meng
2019-11-19 17:53     ` Simon Glass
2019-11-20 12:55       ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 078/108] spi: ich: Convert to livetree Simon Glass
2019-11-19 13:53   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 079/108] spi: ich: Fix header order Simon Glass
2019-11-19 13:53   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 080/108] spi: ich: Various small tidy-ups Simon Glass
2019-11-19 13:53   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 081/108] spi: ich: Add mmio_base to struct ich_spi_platdata Simon Glass
2019-11-19 14:36   ` Bin Meng
2019-11-19 17:53     ` Simon Glass
2019-11-20 12:52       ` Bin Meng
2019-11-21 13:50         ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 082/108] spi: ich: Correct max-size bug in ich_spi_adjust_size() Simon Glass
2019-11-19 14:36   ` Bin Meng
2019-11-21 13:50     ` Simon Glass
2019-11-21 14:04       ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 083/108] spi: ich: Support of-platdata for fast-spi Simon Glass
2019-11-19 14:36   ` Bin Meng
2019-11-19 17:53     ` Simon Glass
2019-11-20 12:48       ` Bin Meng
2019-11-21 13:50         ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 084/108] spi: ich: Support hardware sequencing Simon Glass
2019-11-19 14:36   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 085/108] spi: ich: Add support for get_mmap() method Simon Glass
2019-11-19 14:36   ` Bin Meng
2019-11-21 13:50     ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 086/108] spi: ich: Add TPL support Simon Glass
2019-11-19 14:52   ` Bin Meng
2019-11-21 13:50     ` Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 087/108] spi: ich: Add Apollolake support Simon Glass
2019-11-19 14:52   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 088/108] mtd: spi: Export spi_flash_std_probe() Simon Glass
2019-11-19 14:52   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 089/108] x86: apollolake: Add basic IO addresses Simon Glass
2019-11-19 14:52   ` Bin Meng
2019-10-21  3:38 ` [U-Boot] [PATCH v3 090/108] x86: apollolake: Add PMC driver Simon Glass
2019-10-21  3:38 ` [U-Boot] [PATCH v3 091/108] x86: apollolake: Add low-power subsystem (lpss) support Simon Glass
2019-10-21  8:14   ` Andy Shevchenko
2019-10-21  3:38 ` [U-Boot] [PATCH v3 092/108] x86: apollolake: Add UART driver Simon Glass
2019-10-21  7:46   ` Andy Shevchenko
2019-10-21 22:53     ` Simon Glass
2019-10-22  8:21       ` Andy Shevchenko
2019-10-21  3:38 ` [U-Boot] [PATCH v3 093/108] x86: apollolake: Add GPIO driver Simon Glass
2019-10-21  7:57   ` Andy Shevchenko
2019-10-21  3:38 ` [U-Boot] [PATCH v3 094/108] i2c: designware: Add apollolake support Simon Glass
2019-10-28  4:47   ` Heiko Schocher
2019-10-21  3:39 ` [U-Boot] [PATCH v3 095/108] x86: apollolake: Add systemagent driver Simon Glass
2019-10-21  8:16   ` Andy Shevchenko
2019-10-21  3:39 ` [U-Boot] [PATCH v3 096/108] x86: apollolake: Add hostbridge driver Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 097/108] x86: apollolake: Add ITSS driver Simon Glass
2019-10-21  8:41   ` Andy Shevchenko
2019-10-21  8:43     ` Andy Shevchenko
2019-10-21 22:53       ` Simon Glass
2019-10-22  8:22         ` Andy Shevchenko
2019-10-22 13:50           ` Simon Glass
2019-10-22 18:56             ` Andy Shevchenko
2019-10-21  3:39 ` [U-Boot] [PATCH v3 098/108] x86: apollolake: Add LPC driver Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 099/108] x86: apollolake: Add PCH driver Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 100/108] x86: apollolake: Add PUNIT driver Simon Glass
2019-10-21  8:47   ` Andy Shevchenko
2019-10-21  3:39 ` [U-Boot] [PATCH v3 101/108] x86: apollolake: Add SPL loaders Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 102/108] x86: apollolake: Add a CPU driver Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 103/108] x86: apollolake: Add SPL/TPL init Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 104/108] x86: apollolake: Add P2SB driver Simon Glass
2019-10-21  8:49   ` Andy Shevchenko
2019-10-21 22:53     ` Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 105/108] x86: apollolake: Add Kconfig and Makefile Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 106/108] x86: apollolake: Add FSP structures Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 107/108] x86: apollolake: Add FSP support Simon Glass
2019-10-21  3:39 ` [U-Boot] [PATCH v3 108/108] x86: Add chromebook_coral Simon Glass
2019-10-21 19:15 ` [U-Boot] [PATCH v3 022/108] x86: timer: Use a separate flag for whether timer is inited Park, Aiden
2019-10-28  7:12 ` Bin Meng
2019-11-02  9:47   ` 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=20191021033913.220758-47-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.