All of lore.kernel.org
 help / color / mirror / Atom feed
* [U-Boot]  [v2 PATCH 00/14] cleanup QEMU fw_cfg code
@ 2016-05-18  9:39 Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 01/14] x86: qemu: fix ACPI Kconfig options Miao Yan
                   ` (13 more replies)
  0 siblings, 14 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

This patchset cleans the QEMU fw_cfg code:

  *) split qfw core and qfw command interface
  *) split x86 specific operations from qfw core
  *) move x86 ACPI generation code into qfw core as this can also
     be used by others like ARM64
  *) various cleanups

Changes in v2:

  *) make git format-patch detect renames
  *) add a patch to enable qfw for sandbox_defconfig
  *) address other trivial review comments

Miao Yan (14):
  x86: qemu: fix ACPI Kconfig options
  cmd: qfw: add API to iterate firmware list
  cmd: qfw: remove qemu_fwcfg_free_files()
  cmd: qfw: make fwcfg_present and fwcfg_dma_present public
  x86: qemu: split qfw command interface and qfw core
  x86: qemu: move x86 specific operations out of qfw core
  x86: qemu: add comment about qfw register endianness
  cmd: qfw: rename qemu_fw_cfg.[c|h] to qfw.[c|h]
  cmd: qfw: do not require default macros when building qfw command
  cmd: qfw: do not depend on x86
  cmd: qfw: bring ACPI generation code into qfw core
  x86: qemu: rename qemu/acpi_table.c
  cmd: qfw: rename QEMU_FW_CFG to CMD_QFW
  config: sandbox: enable qfw and cmd_qfw for testing

 arch/x86/Kconfig                                   |  10 +-
 arch/x86/cpu/mp_init.c                             |   6 +-
 arch/x86/cpu/qemu/Makefile                         |   4 +-
 arch/x86/cpu/qemu/cpu.c                            |   2 +-
 arch/x86/cpu/qemu/e820.c                           |  43 ++++
 arch/x86/cpu/qemu/qemu.c                           |  50 ++++-
 arch/x86/lib/Makefile                              |   2 +-
 cmd/Kconfig                                        |   4 +-
 cmd/Makefile                                       |   2 +-
 cmd/{qemu_fw_cfg.c => qfw.c}                       | 189 ++---------------
 configs/qemu-x86_defconfig                         |   2 +-
 configs/sandbox_defconfig                          |   2 +
 drivers/misc/Kconfig                               |   6 +
 drivers/misc/Makefile                              |   1 +
 .../cpu/qemu/acpi_table.c => drivers/misc/qfw.c    | 223 +++++++++++++++++----
 include/{qemu_fw_cfg.h => qfw.h}                   |  28 ++-
 16 files changed, 336 insertions(+), 238 deletions(-)
 create mode 100644 arch/x86/cpu/qemu/e820.c
 rename cmd/{qemu_fw_cfg.c => qfw.c} (54%)
 rename arch/x86/cpu/qemu/acpi_table.c => drivers/misc/qfw.c (57%)
 rename include/{qemu_fw_cfg.h => qfw.h} (84%)

-- 
1.9.1

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot]  [v2 PATCH 01/14] x86: qemu: fix ACPI Kconfig options
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-19  9:05   ` Bin Meng
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 02/14] cmd: qfw: add API to iterate firmware list Miao Yan
                   ` (12 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

CONFIG_GENENRATE_ACPI_TABLE controls the generation of ACPI table which
uses U-Boot's built-in methods and CONFIG_QEMU_ACPI_TABLE controls whether
to load ACPI table from QEMU's fw_cfg interface.

But with commit "697ec431469ce0a4c2fc2c02d8685d907491af84 x86: qemu: Drop
our own ACPI implementation", there is only one way to support ACPI table
for QEMU targets which is the fw_cfg interface. Having two Kconfig options
for this purpose is not necessary any more, so this patch consolidates
the two.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
Changes in v2:
  - fix a wrong macro name

 arch/x86/Kconfig           | 10 +---------
 arch/x86/cpu/qemu/Makefile |  2 +-
 arch/x86/lib/Makefile      |  2 +-
 3 files changed, 3 insertions(+), 11 deletions(-)

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 4ef27dc..3e360ec 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -436,21 +436,13 @@ config GENERATE_MP_TABLE
 config GENERATE_ACPI_TABLE
 	bool "Generate an ACPI (Advanced Configuration and Power Interface) table"
 	default n
+	select CMD_QEMU_FW_CFG if QEMU
 	help
 	  The Advanced Configuration and Power Interface (ACPI) specification
 	  provides an open standard for device configuration and management
 	  by the operating system. It defines platform-independent interfaces
 	  for configuration and power management monitoring.
 
-config QEMU_ACPI_TABLE
-	bool "Load ACPI table from QEMU fw_cfg interface"
-	depends on GENERATE_ACPI_TABLE && QEMU
-	default y
-	help
-	  By default, U-Boot generates its own ACPI tables. This option, if
-	  enabled, disables U-Boot's version and loads ACPI tables generated
-	  by QEMU.
-
 config GENERATE_SMBIOS_TABLE
 	bool "Generate an SMBIOS (System Management BIOS) table"
 	default y
diff --git a/arch/x86/cpu/qemu/Makefile b/arch/x86/cpu/qemu/Makefile
index 97b965c..43ee4bd 100644
--- a/arch/x86/cpu/qemu/Makefile
+++ b/arch/x86/cpu/qemu/Makefile
@@ -8,4 +8,4 @@ ifndef CONFIG_EFI_STUB
 obj-y += car.o dram.o
 endif
 obj-y += cpu.o qemu.o
-obj-$(CONFIG_QEMU_ACPI_TABLE) += acpi_table.o
+obj-$(CONFIG_GENERATE_ACPI_TABLE) += acpi_table.o
diff --git a/arch/x86/lib/Makefile b/arch/x86/lib/Makefile
index dc90df2..ce5eb82 100644
--- a/arch/x86/lib/Makefile
+++ b/arch/x86/lib/Makefile
@@ -31,7 +31,7 @@ obj-$(CONFIG_X86_RAMTEST) += ramtest.o
 obj-y += sfi.o
 obj-$(CONFIG_GENERATE_SMBIOS_TABLE) += smbios.o
 obj-y	+= string.o
-ifndef CONFIG_QEMU_ACPI_TABLE
+ifndef CONFIG_QEMU
 obj-$(CONFIG_GENERATE_ACPI_TABLE) += acpi_table.o
 endif
 obj-y	+= tables.o
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 02/14] cmd: qfw: add API to iterate firmware list
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 01/14] x86: qemu: fix ACPI Kconfig options Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 03/14] cmd: qfw: remove qemu_fwcfg_free_files() Miao Yan
                   ` (11 subsequent siblings)
  13 siblings, 0 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

This patch is part of the refactor work of qfw. It adds 3 APIs to qfw
core to iterate firmware list.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---
 cmd/qemu_fw_cfg.c     | 25 ++++++++++++++++++++++---
 include/qemu_fw_cfg.h |  9 +++++++++
 2 files changed, 31 insertions(+), 3 deletions(-)

diff --git a/cmd/qemu_fw_cfg.c b/cmd/qemu_fw_cfg.c
index 48ae476..192b7d1 100644
--- a/cmd/qemu_fw_cfg.c
+++ b/cmd/qemu_fw_cfg.c
@@ -229,10 +229,27 @@ void qemu_fwcfg_free_files(void)
 	}
 }
 
+struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter)
+{
+	iter->entry = fw_list.next;
+	return list_entry(iter->entry, struct fw_file, list);
+}
+
+struct fw_file *qemu_fwcfg_file_iter_next(struct fw_cfg_file_iter *iter)
+{
+	iter->entry = iter->entry->next;
+	return list_entry(iter->entry, struct fw_file, list);
+}
+
+bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter)
+{
+	return iter->entry == &fw_list;
+}
+
 static int qemu_fwcfg_list_firmware(void)
 {
 	int ret;
-	struct list_head *entry;
+	struct fw_cfg_file_iter iter;
 	struct fw_file *file;
 
 	/* make sure fw_list is loaded */
@@ -240,8 +257,10 @@ static int qemu_fwcfg_list_firmware(void)
 	if (ret)
 		return ret;
 
-	list_for_each(entry, &fw_list) {
-		file = list_entry(entry, struct fw_file, list);
+
+	for (file = qemu_fwcfg_file_iter_init(&iter);
+	     !qemu_fwcfg_file_iter_end(&iter);
+	     file = qemu_fwcfg_file_iter_next(&iter)) {
 		printf("%-56s\n", file->cfg.name);
 	}
 
diff --git a/include/qemu_fw_cfg.h b/include/qemu_fw_cfg.h
index e21f150..19d0ba0 100644
--- a/include/qemu_fw_cfg.h
+++ b/include/qemu_fw_cfg.h
@@ -87,6 +87,10 @@ struct fw_file {
 	struct list_head list;  /* list node to link to fw_list */
 };
 
+struct fw_cfg_file_iter {
+	struct list_head *entry; /* structure to iterate file list */
+};
+
 struct fw_cfg_dma_access {
 	__be32 control;
 	__be32 length;
@@ -159,4 +163,9 @@ void qemu_fwcfg_free_files(void);
  */
 int qemu_fwcfg_online_cpus(void);
 
+/* helper functions to iterate firmware file list */
+struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter);
+struct fw_file *qemu_fwcfg_file_iter_next(struct fw_cfg_file_iter *iter);
+bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter);
+
 #endif
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 03/14] cmd: qfw: remove qemu_fwcfg_free_files()
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 01/14] x86: qemu: fix ACPI Kconfig options Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 02/14] cmd: qfw: add API to iterate firmware list Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-19  9:05   ` Bin Meng
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 04/14] cmd: qfw: make fwcfg_present and fwcfg_dma_present public Miao Yan
                   ` (10 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

This patch is part of the qfw refactor work.

The qemu_fwcfg_free_files() function is only used in error handling in
ACPI table generation, let's not make this a core function and move it
to the right place.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
 arch/x86/cpu/qemu/acpi_table.c | 13 +++++++++++--
 cmd/qemu_fw_cfg.c              | 12 ------------
 include/qemu_fw_cfg.h          |  1 -
 3 files changed, 11 insertions(+), 15 deletions(-)

diff --git a/arch/x86/cpu/qemu/acpi_table.c b/arch/x86/cpu/qemu/acpi_table.c
index 49381ac..b17fa03 100644
--- a/arch/x86/cpu/qemu/acpi_table.c
+++ b/arch/x86/cpu/qemu/acpi_table.c
@@ -235,8 +235,17 @@ u32 write_acpi_tables(u32 addr)
 	}
 
 out:
-	if (ret)
-		qemu_fwcfg_free_files();
+	if (ret) {
+		struct fw_cfg_file_iter iter;
+		for (file = qemu_fwcfg_file_iter_init(&iter);
+		     !qemu_fwcfg_file_iter_end(&iter);
+		     file = qemu_fwcfg_file_iter_next(&iter)) {
+			if (file->addr) {
+				free((void *)file->addr);
+				file->addr = 0;
+			}
+		}
+	}
 
 	free(table_loader);
 	return addr;
diff --git a/cmd/qemu_fw_cfg.c b/cmd/qemu_fw_cfg.c
index 192b7d1..9f03ab6 100644
--- a/cmd/qemu_fw_cfg.c
+++ b/cmd/qemu_fw_cfg.c
@@ -217,18 +217,6 @@ struct fw_file *qemu_fwcfg_find_file(const char *name)
 	return NULL;
 }
 
-void qemu_fwcfg_free_files(void)
-{
-	struct fw_file *file;
-	struct list_head *list;
-
-	list_for_each(list, &fw_list) {
-		file = list_entry(list, struct fw_file, list);
-		if (file->addr)
-			free((void *)file->addr);
-	}
-}
-
 struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter)
 {
 	iter->entry = fw_list.next;
diff --git a/include/qemu_fw_cfg.h b/include/qemu_fw_cfg.h
index 19d0ba0..986f4b2 100644
--- a/include/qemu_fw_cfg.h
+++ b/include/qemu_fw_cfg.h
@@ -154,7 +154,6 @@ void qemu_fwcfg_init(void);
 void qemu_fwcfg_read_entry(uint16_t entry, uint32_t length, void *address);
 int qemu_fwcfg_read_firmware_list(void);
 struct fw_file *qemu_fwcfg_find_file(const char *name);
-void qemu_fwcfg_free_files(void);
 
 /**
  * Get system cpu number
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 04/14] cmd: qfw: make fwcfg_present and fwcfg_dma_present public
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (2 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 03/14] cmd: qfw: remove qemu_fwcfg_free_files() Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 05/14] x86: qemu: split qfw command interface and qfw core Miao Yan
                   ` (9 subsequent siblings)
  13 siblings, 0 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

This patch is part of the qfw refactor work. This patch makes
qemu_fwcfg_present() and qemu_fwcfg_dma_present() public functions.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---
 cmd/qemu_fw_cfg.c     | 37 ++++++++++++++++++++-----------------
 include/qemu_fw_cfg.h |  3 +++
 2 files changed, 23 insertions(+), 17 deletions(-)

diff --git a/cmd/qemu_fw_cfg.c b/cmd/qemu_fw_cfg.c
index 9f03ab6..aab6b1a 100644
--- a/cmd/qemu_fw_cfg.c
+++ b/cmd/qemu_fw_cfg.c
@@ -62,23 +62,14 @@ static void qemu_fwcfg_read_entry_dma(uint16_t entry,
 		__asm__ __volatile__ ("pause");
 }
 
-static bool qemu_fwcfg_present(void)
+bool qemu_fwcfg_present(void)
 {
-	uint32_t qemu;
-
-	qemu_fwcfg_read_entry_pio(FW_CFG_SIGNATURE, 4, &qemu);
-	return be32_to_cpu(qemu) == QEMU_FW_CFG_SIGNATURE;
+	return fwcfg_present;
 }
 
-static bool qemu_fwcfg_dma_present(void)
+bool qemu_fwcfg_dma_present(void)
 {
-	uint8_t dma_enabled;
-
-	qemu_fwcfg_read_entry_pio(FW_CFG_ID, 1, &dma_enabled);
-	if (dma_enabled & FW_CFG_DMA_ENABLED)
-		return true;
-
-	return false;
+	return fwcfg_dma_present;
 }
 
 void qemu_fwcfg_read_entry(uint16_t entry, uint32_t length, void *address)
@@ -257,9 +248,21 @@ static int qemu_fwcfg_list_firmware(void)
 
 void qemu_fwcfg_init(void)
 {
-	fwcfg_present = qemu_fwcfg_present();
-	if (fwcfg_present)
-		fwcfg_dma_present = qemu_fwcfg_dma_present();
+	uint32_t qemu;
+	uint32_t dma_enabled;
+
+	fwcfg_present = false;
+	fwcfg_dma_present = false;
+
+	qemu_fwcfg_read_entry_pio(FW_CFG_SIGNATURE, 4, &qemu);
+	if (be32_to_cpu(qemu) == QEMU_FW_CFG_SIGNATURE)
+		fwcfg_present = true;
+
+	if (fwcfg_present) {
+		qemu_fwcfg_read_entry_pio(FW_CFG_ID, 1, &dma_enabled);
+		if (dma_enabled & FW_CFG_DMA_ENABLED)
+			fwcfg_dma_present = true;
+	}
 }
 
 static int qemu_fwcfg_do_list(cmd_tbl_t *cmdtp, int flag,
@@ -323,7 +326,7 @@ static int do_qemu_fw(cmd_tbl_t *cmdtp, int flag, int argc, char * const argv[])
 	int ret;
 	cmd_tbl_t *fwcfg_cmd;
 
-	if (!fwcfg_present) {
+	if (!qemu_fwcfg_present()) {
 		printf("QEMU fw_cfg interface not found\n");
 		return CMD_RET_USAGE;
 	}
diff --git a/include/qemu_fw_cfg.h b/include/qemu_fw_cfg.h
index 986f4b2..f718e09 100644
--- a/include/qemu_fw_cfg.h
+++ b/include/qemu_fw_cfg.h
@@ -167,4 +167,7 @@ struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter);
 struct fw_file *qemu_fwcfg_file_iter_next(struct fw_cfg_file_iter *iter);
 bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter);
 
+bool qemu_fwcfg_present(void);
+bool qemu_fwcfg_dma_present(void);
+
 #endif
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 05/14] x86: qemu: split qfw command interface and qfw core
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (3 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 04/14] cmd: qfw: make fwcfg_present and fwcfg_dma_present public Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-19  9:06   ` Bin Meng
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 06/14] x86: qemu: move x86 specific operations out of " Miao Yan
                   ` (8 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

This patch splits qfw command interface and qfw core function into two
files, and introduces a new Kconfig option (CONFIG_QFW). for
qfw core.

Now when qfw command interface is enabled, it will automatically select
qfw core. This patch also makes the ACPI table generation select
CONFIG_QFW.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
Changes in v2:
  - do not use #ifdef...#end when including header files
  - cleanup blank line at the end of file
  - rename cmd_qfw.c to qfw.c
 
 arch/x86/Kconfig             |   2 +-
 arch/x86/cpu/mp_init.c       |   4 +-
 arch/x86/cpu/qemu/Makefile   |   3 +-
 arch/x86/cpu/qemu/qemu.c     |   2 +
 cmd/Kconfig                  |   1 +
 cmd/Makefile                 |   2 +-
 cmd/{qemu_fw_cfg.c => qfw.c} | 172 ----------------------------------------
 drivers/misc/Kconfig         |   6 ++
 drivers/misc/Makefile        |   1 +
 drivers/misc/qemu_fw_cfg.c   | 184 +++++++++++++++++++++++++++++++++++++++++++
 10 files changed, 200 insertions(+), 177 deletions(-)
 rename cmd/{qemu_fw_cfg.c => qfw.c} (55%)
 create mode 100644 drivers/misc/qemu_fw_cfg.c

diff --git a/arch/x86/Kconfig b/arch/x86/Kconfig
index 3e360ec..2f63170 100644
--- a/arch/x86/Kconfig
+++ b/arch/x86/Kconfig
@@ -436,7 +436,7 @@ config GENERATE_MP_TABLE
 config GENERATE_ACPI_TABLE
 	bool "Generate an ACPI (Advanced Configuration and Power Interface) table"
 	default n
-	select CMD_QEMU_FW_CFG if QEMU
+	select QFW if QEMU
 	help
 	  The Advanced Configuration and Power Interface (ACPI) specification
 	  provides an open standard for device configuration and management
diff --git a/arch/x86/cpu/mp_init.c b/arch/x86/cpu/mp_init.c
index 13bec7a..c44a286 100644
--- a/arch/x86/cpu/mp_init.c
+++ b/arch/x86/cpu/mp_init.c
@@ -420,7 +420,7 @@ static int init_bsp(struct udevice **devp)
 	return 0;
 }
 
-#ifdef CONFIG_QEMU
+#ifdef CONFIG_QFW
 static int qemu_cpu_fixup(void)
 {
 	int ret;
@@ -496,7 +496,7 @@ int mp_init(struct mp_params *p)
 	if (ret)
 		return ret;
 
-#ifdef CONFIG_QEMU
+#ifdef CONFIG_QFW
 	ret = qemu_cpu_fixup();
 	if (ret)
 		return ret;
diff --git a/arch/x86/cpu/qemu/Makefile b/arch/x86/cpu/qemu/Makefile
index 43ee4bd..7c08c3d 100644
--- a/arch/x86/cpu/qemu/Makefile
+++ b/arch/x86/cpu/qemu/Makefile
@@ -7,5 +7,6 @@
 ifndef CONFIG_EFI_STUB
 obj-y += car.o dram.o
 endif
-obj-y += cpu.o qemu.o
+obj-y += qemu.o
+obj-$(CONFIG_QFW) += cpu.o
 obj-$(CONFIG_GENERATE_ACPI_TABLE) += acpi_table.o
diff --git a/arch/x86/cpu/qemu/qemu.c b/arch/x86/cpu/qemu/qemu.c
index b41e4ec..32a4351 100644
--- a/arch/x86/cpu/qemu/qemu.c
+++ b/arch/x86/cpu/qemu/qemu.c
@@ -88,7 +88,9 @@ static void qemu_chipset_init(void)
 		enable_pm_ich9();
 	}
 
+#ifdef CONFIG_QFW
 	qemu_fwcfg_init();
+#endif
 }
 
 int arch_cpu_init(void)
diff --git a/cmd/Kconfig b/cmd/Kconfig
index c0fffe3..08b761f 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -596,6 +596,7 @@ config CMD_SOUND
 config CMD_QEMU_FW_CFG
 	bool "qfw"
 	depends on X86
+	select QFW
 	help
 	  This provides access to the QEMU firmware interface.  The main
 	  feature is to allow easy loading of files passed to qemu-system
diff --git a/cmd/Makefile b/cmd/Makefile
index f99e67d..0b7f7a2 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -105,7 +105,7 @@ endif
 obj-y += pcmcia.o
 obj-$(CONFIG_CMD_PORTIO) += portio.o
 obj-$(CONFIG_CMD_PXE) += pxe.o
-obj-$(CONFIG_CMD_QEMU_FW_CFG) += qemu_fw_cfg.o
+obj-$(CONFIG_CMD_QEMU_FW_CFG) += qfw.o
 obj-$(CONFIG_CMD_READ) += read.o
 obj-$(CONFIG_CMD_REGINFO) += reginfo.o
 obj-$(CONFIG_CMD_REISER) += reiser.o
diff --git a/cmd/qemu_fw_cfg.c b/cmd/qfw.c
similarity index 55%
rename from cmd/qemu_fw_cfg.c
rename to cmd/qfw.c
index aab6b1a..37f1aa6 100644
--- a/cmd/qemu_fw_cfg.c
+++ b/cmd/qfw.c
@@ -7,90 +7,7 @@
 #include <common.h>
 #include <command.h>
 #include <errno.h>
-#include <malloc.h>
 #include <qemu_fw_cfg.h>
-#include <asm/io.h>
-#include <linux/list.h>
-
-static bool fwcfg_present;
-static bool fwcfg_dma_present;
-
-static LIST_HEAD(fw_list);
-
-/* Read configuration item using fw_cfg PIO interface */
-static void qemu_fwcfg_read_entry_pio(uint16_t entry,
-		uint32_t size, void *address)
-{
-	uint32_t i = 0;
-	uint8_t *data = address;
-
-	/*
-	 * writting FW_CFG_INVALID will cause read operation to resume at
-	 * last offset, otherwise read will start at offset 0
-	 */
-	if (entry != FW_CFG_INVALID)
-		outw(entry, FW_CONTROL_PORT);
-	while (size--)
-		data[i++] = inb(FW_DATA_PORT);
-}
-
-/* Read configuration item using fw_cfg DMA interface */
-static void qemu_fwcfg_read_entry_dma(uint16_t entry,
-		uint32_t size, void *address)
-{
-	struct fw_cfg_dma_access dma;
-
-	dma.length = cpu_to_be32(size);
-	dma.address = cpu_to_be64((uintptr_t)address);
-	dma.control = cpu_to_be32(FW_CFG_DMA_READ);
-
-	/*
-	 * writting FW_CFG_INVALID will cause read operation to resume at
-	 * last offset, otherwise read will start at offset 0
-	 */
-	if (entry != FW_CFG_INVALID)
-		dma.control |= cpu_to_be32(FW_CFG_DMA_SELECT | (entry << 16));
-
-	barrier();
-
-	debug("qemu_fwcfg_dma_read_entry: addr %p, length %u control 0x%x\n",
-	      address, size, be32_to_cpu(dma.control));
-
-	outl(cpu_to_be32((uint32_t)&dma), FW_DMA_PORT_HIGH);
-
-	while (be32_to_cpu(dma.control) & ~FW_CFG_DMA_ERROR)
-		__asm__ __volatile__ ("pause");
-}
-
-bool qemu_fwcfg_present(void)
-{
-	return fwcfg_present;
-}
-
-bool qemu_fwcfg_dma_present(void)
-{
-	return fwcfg_dma_present;
-}
-
-void qemu_fwcfg_read_entry(uint16_t entry, uint32_t length, void *address)
-{
-	if (fwcfg_dma_present)
-		qemu_fwcfg_read_entry_dma(entry, length, address);
-	else
-		qemu_fwcfg_read_entry_pio(entry, length, address);
-}
-
-int qemu_fwcfg_online_cpus(void)
-{
-	uint16_t nb_cpus;
-
-	if (!fwcfg_present)
-		return -ENODEV;
-
-	qemu_fwcfg_read_entry(FW_CFG_NB_CPUS, 2, &nb_cpus);
-
-	return le16_to_cpu(nb_cpus);
-}
 
 /*
  * This function prepares kernel for zboot. It loads kernel data
@@ -155,76 +72,6 @@ static int qemu_fwcfg_setup_kernel(void *load_addr, void *initrd_addr)
 	return 0;
 }
 
-int qemu_fwcfg_read_firmware_list(void)
-{
-	int i;
-	uint32_t count;
-	struct fw_file *file;
-	struct list_head *entry;
-
-	/* don't read it twice */
-	if (!list_empty(&fw_list))
-		return 0;
-
-	qemu_fwcfg_read_entry(FW_CFG_FILE_DIR, 4, &count);
-	if (!count)
-		return 0;
-
-	count = be32_to_cpu(count);
-	for (i = 0; i < count; i++) {
-		file = malloc(sizeof(*file));
-		if (!file) {
-			printf("error: allocating resource\n");
-			goto err;
-		}
-		qemu_fwcfg_read_entry(FW_CFG_INVALID,
-				      sizeof(struct fw_cfg_file), &file->cfg);
-		file->addr = 0;
-		list_add_tail(&file->list, &fw_list);
-	}
-
-	return 0;
-
-err:
-	list_for_each(entry, &fw_list) {
-		file = list_entry(entry, struct fw_file, list);
-		free(file);
-	}
-
-	return -ENOMEM;
-}
-
-struct fw_file *qemu_fwcfg_find_file(const char *name)
-{
-	struct list_head *entry;
-	struct fw_file *file;
-
-	list_for_each(entry, &fw_list) {
-		file = list_entry(entry, struct fw_file, list);
-		if (!strcmp(file->cfg.name, name))
-			return file;
-	}
-
-	return NULL;
-}
-
-struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter)
-{
-	iter->entry = fw_list.next;
-	return list_entry(iter->entry, struct fw_file, list);
-}
-
-struct fw_file *qemu_fwcfg_file_iter_next(struct fw_cfg_file_iter *iter)
-{
-	iter->entry = iter->entry->next;
-	return list_entry(iter->entry, struct fw_file, list);
-}
-
-bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter)
-{
-	return iter->entry == &fw_list;
-}
-
 static int qemu_fwcfg_list_firmware(void)
 {
 	int ret;
@@ -246,25 +93,6 @@ static int qemu_fwcfg_list_firmware(void)
 	return 0;
 }
 
-void qemu_fwcfg_init(void)
-{
-	uint32_t qemu;
-	uint32_t dma_enabled;
-
-	fwcfg_present = false;
-	fwcfg_dma_present = false;
-
-	qemu_fwcfg_read_entry_pio(FW_CFG_SIGNATURE, 4, &qemu);
-	if (be32_to_cpu(qemu) == QEMU_FW_CFG_SIGNATURE)
-		fwcfg_present = true;
-
-	if (fwcfg_present) {
-		qemu_fwcfg_read_entry_pio(FW_CFG_ID, 1, &dma_enabled);
-		if (dma_enabled & FW_CFG_DMA_ENABLED)
-			fwcfg_dma_present = true;
-	}
-}
-
 static int qemu_fwcfg_do_list(cmd_tbl_t *cmdtp, int flag,
 		int argc, char * const argv[])
 {
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index af8667f..fa53700 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -138,4 +138,10 @@ config WINBOND_W83627
 	  legacy UART or other devices in the Winbond Super IO chips
 	  on X86 platforms.
 
+config QFW
+	bool
+	help
+	  Hidden option to enable QEMU fw_cfg interface. This will be selected by
+	  either CONFIG_CMD_QEMU_FW_CFG or CONFIG_GENERATE_ACPI_TABLE.
+
 endmenu
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 5969d34..4893086 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -43,3 +43,4 @@ obj-$(CONFIG_PCA9551_LED) += pca9551_led.o
 obj-$(CONFIG_RESET) += reset-uclass.o
 obj-$(CONFIG_FSL_DEVICE_DISABLE) += fsl_devdis.o
 obj-$(CONFIG_WINBOND_W83627) += winbond_w83627.o
+obj-$(CONFIG_QFW) += qemu_fw_cfg.o
diff --git a/drivers/misc/qemu_fw_cfg.c b/drivers/misc/qemu_fw_cfg.c
new file mode 100644
index 0000000..a574bd1
--- /dev/null
+++ b/drivers/misc/qemu_fw_cfg.c
@@ -0,0 +1,184 @@
+/*
+ * (C) Copyright 2015 Miao Yan <yanmiaobest@gmail.com>
+ *
+ * SPDX-License-Identifier:	GPL-2.0+
+ */
+
+#include <common.h>
+#include <command.h>
+#include <errno.h>
+#include <malloc.h>
+#include <qemu_fw_cfg.h>
+#include <asm/io.h>
+#include <linux/list.h>
+
+static bool fwcfg_present;
+static bool fwcfg_dma_present;
+
+static LIST_HEAD(fw_list);
+
+/* Read configuration item using fw_cfg PIO interface */
+static void qemu_fwcfg_read_entry_pio(uint16_t entry,
+		uint32_t size, void *address)
+{
+	uint32_t i = 0;
+	uint8_t *data = address;
+
+	/*
+	 * writting FW_CFG_INVALID will cause read operation to resume at
+	 * last offset, otherwise read will start at offset 0
+	 */
+	if (entry != FW_CFG_INVALID)
+		outw(entry, FW_CONTROL_PORT);
+	while (size--)
+		data[i++] = inb(FW_DATA_PORT);
+}
+
+/* Read configuration item using fw_cfg DMA interface */
+static void qemu_fwcfg_read_entry_dma(uint16_t entry,
+		uint32_t size, void *address)
+{
+	struct fw_cfg_dma_access dma;
+
+	dma.length = cpu_to_be32(size);
+	dma.address = cpu_to_be64((uintptr_t)address);
+	dma.control = cpu_to_be32(FW_CFG_DMA_READ);
+
+	/*
+	 * writting FW_CFG_INVALID will cause read operation to resume at
+	 * last offset, otherwise read will start at offset 0
+	 */
+	if (entry != FW_CFG_INVALID)
+		dma.control |= cpu_to_be32(FW_CFG_DMA_SELECT | (entry << 16));
+
+	barrier();
+
+	debug("qemu_fwcfg_dma_read_entry: addr %p, length %u control 0x%x\n",
+	      address, size, be32_to_cpu(dma.control));
+
+	outl(cpu_to_be32((uint32_t)&dma), FW_DMA_PORT_HIGH);
+
+	while (be32_to_cpu(dma.control) & ~FW_CFG_DMA_ERROR)
+		__asm__ __volatile__ ("pause");
+}
+
+bool qemu_fwcfg_present(void)
+{
+	return fwcfg_present;
+}
+
+bool qemu_fwcfg_dma_present(void)
+{
+	return fwcfg_dma_present;
+}
+
+void qemu_fwcfg_read_entry(uint16_t entry, uint32_t length, void *address)
+{
+	if (fwcfg_dma_present)
+		qemu_fwcfg_read_entry_dma(entry, length, address);
+	else
+		qemu_fwcfg_read_entry_pio(entry, length, address);
+}
+
+int qemu_fwcfg_online_cpus(void)
+{
+	uint16_t nb_cpus;
+
+	if (!fwcfg_present)
+		return -ENODEV;
+
+	qemu_fwcfg_read_entry(FW_CFG_NB_CPUS, 2, &nb_cpus);
+
+	return le16_to_cpu(nb_cpus);
+}
+
+int qemu_fwcfg_read_firmware_list(void)
+{
+	int i;
+	uint32_t count;
+	struct fw_file *file;
+	struct list_head *entry;
+
+	/* don't read it twice */
+	if (!list_empty(&fw_list))
+		return 0;
+
+	qemu_fwcfg_read_entry(FW_CFG_FILE_DIR, 4, &count);
+	if (!count)
+		return 0;
+
+	count = be32_to_cpu(count);
+	for (i = 0; i < count; i++) {
+		file = malloc(sizeof(*file));
+		if (!file) {
+			printf("error: allocating resource\n");
+			goto err;
+		}
+		qemu_fwcfg_read_entry(FW_CFG_INVALID,
+				      sizeof(struct fw_cfg_file), &file->cfg);
+		file->addr = 0;
+		list_add_tail(&file->list, &fw_list);
+	}
+
+	return 0;
+
+err:
+	list_for_each(entry, &fw_list) {
+		file = list_entry(entry, struct fw_file, list);
+		free(file);
+	}
+
+	return -ENOMEM;
+}
+
+struct fw_file *qemu_fwcfg_find_file(const char *name)
+{
+	struct list_head *entry;
+	struct fw_file *file;
+
+	list_for_each(entry, &fw_list) {
+		file = list_entry(entry, struct fw_file, list);
+		if (!strcmp(file->cfg.name, name))
+			return file;
+	}
+
+	return NULL;
+}
+
+struct fw_file *qemu_fwcfg_file_iter_init(struct fw_cfg_file_iter *iter)
+{
+	iter->entry = fw_list.next;
+	return list_entry((struct list_head *)iter->entry,
+			  struct fw_file, list);
+}
+
+struct fw_file *qemu_fwcfg_file_iter_next(struct fw_cfg_file_iter *iter)
+{
+	iter->entry = ((struct list_head *)iter->entry)->next;
+	return list_entry((struct list_head *)iter->entry,
+			  struct fw_file, list);
+}
+
+bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter)
+{
+	return iter->entry == &fw_list;
+}
+
+void qemu_fwcfg_init(void)
+{
+	uint32_t qemu;
+	uint32_t dma_enabled;
+
+	fwcfg_present = false;
+	fwcfg_dma_present = false;
+
+	qemu_fwcfg_read_entry_pio(FW_CFG_SIGNATURE, 4, &qemu);
+	if (be32_to_cpu(qemu) == QEMU_FW_CFG_SIGNATURE)
+		fwcfg_present = true;
+
+	if (fwcfg_present) {
+		qemu_fwcfg_read_entry_pio(FW_CFG_ID, 1, &dma_enabled);
+		if (dma_enabled & FW_CFG_DMA_ENABLED)
+			fwcfg_dma_present = true;
+	}
+}
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 06/14] x86: qemu: move x86 specific operations out of qfw core
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (4 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 05/14] x86: qemu: split qfw command interface and qfw core Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 07/14] x86: qemu: add comment about qfw register endianness Miao Yan
                   ` (7 subsequent siblings)
  13 siblings, 0 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

The original implementation of qfw includes several x86 specific
operations, like directly calling outb/inb and using some inline
assembly code which prevents it being ported to other architectures.

This patch adds callback functions and moves those to arch/x86/

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---
 arch/x86/cpu/qemu/qemu.c   | 39 ++++++++++++++++++++++++++++++++++++++-
 drivers/misc/qemu_fw_cfg.c | 30 +++++++++++++-----------------
 include/qemu_fw_cfg.h      | 15 +++++++++------
 3 files changed, 60 insertions(+), 24 deletions(-)

diff --git a/arch/x86/cpu/qemu/qemu.c b/arch/x86/cpu/qemu/qemu.c
index 32a4351..6ff9947 100644
--- a/arch/x86/cpu/qemu/qemu.c
+++ b/arch/x86/cpu/qemu/qemu.c
@@ -15,6 +15,43 @@
 
 static bool i440fx;
 
+#ifdef CONFIG_QFW
+
+#define FW_CONTROL_PORT	0x510
+#define FW_DATA_PORT		0x511
+#define FW_DMA_PORT_LOW	0x514
+#define FW_DMA_PORT_HIGH	0x518
+
+static void qemu_x86_fwcfg_read_entry_pio(uint16_t entry,
+		uint32_t size, void *address)
+{
+	uint32_t i = 0;
+	uint8_t *data = address;
+
+	/*
+	 * writting FW_CFG_INVALID will cause read operation to resume at
+	 * last offset, otherwise read will start at offset 0
+	 */
+	if (entry != FW_CFG_INVALID)
+		outw(entry, FW_CONTROL_PORT);
+	while (size--)
+		data[i++] = inb(FW_DATA_PORT);
+}
+
+static void qemu_x86_fwcfg_read_entry_dma(struct fw_cfg_dma_access *dma)
+{
+	outl(cpu_to_be32((uint32_t)dma), FW_DMA_PORT_HIGH);
+
+	while (be32_to_cpu(dma->control) & ~FW_CFG_DMA_ERROR)
+		__asm__ __volatile__ ("pause");
+}
+
+static struct fw_cfg_arch_ops fwcfg_x86_ops = {
+	.arch_read_pio = qemu_x86_fwcfg_read_entry_pio,
+	.arch_read_dma = qemu_x86_fwcfg_read_entry_dma
+};
+#endif
+
 static void enable_pm_piix(void)
 {
 	u8 en;
@@ -89,7 +126,7 @@ static void qemu_chipset_init(void)
 	}
 
 #ifdef CONFIG_QFW
-	qemu_fwcfg_init();
+	qemu_fwcfg_init(&fwcfg_x86_ops);
 #endif
 }
 
diff --git a/drivers/misc/qemu_fw_cfg.c b/drivers/misc/qemu_fw_cfg.c
index a574bd1..0f72549 100644
--- a/drivers/misc/qemu_fw_cfg.c
+++ b/drivers/misc/qemu_fw_cfg.c
@@ -14,6 +14,7 @@
 
 static bool fwcfg_present;
 static bool fwcfg_dma_present;
+static struct fw_cfg_arch_ops *fwcfg_arch_ops;
 
 static LIST_HEAD(fw_list);
 
@@ -21,17 +22,10 @@ static LIST_HEAD(fw_list);
 static void qemu_fwcfg_read_entry_pio(uint16_t entry,
 		uint32_t size, void *address)
 {
-	uint32_t i = 0;
-	uint8_t *data = address;
+	debug("qemu_fwcfg_read_entry_pio: entry 0x%x, size %u address %p\n",
+	      entry, size, address);
 
-	/*
-	 * writting FW_CFG_INVALID will cause read operation to resume at
-	 * last offset, otherwise read will start at offset 0
-	 */
-	if (entry != FW_CFG_INVALID)
-		outw(entry, FW_CONTROL_PORT);
-	while (size--)
-		data[i++] = inb(FW_DATA_PORT);
+	return fwcfg_arch_ops->arch_read_pio(entry, size, address);
 }
 
 /* Read configuration item using fw_cfg DMA interface */
@@ -53,13 +47,10 @@ static void qemu_fwcfg_read_entry_dma(uint16_t entry,
 
 	barrier();
 
-	debug("qemu_fwcfg_dma_read_entry: addr %p, length %u control 0x%x\n",
-	      address, size, be32_to_cpu(dma.control));
-
-	outl(cpu_to_be32((uint32_t)&dma), FW_DMA_PORT_HIGH);
+	debug("qemu_fwcfg_read_entry_dma: entry 0x%x, size %u address %p, control 0x%x\n",
+	      entry, size, address, be32_to_cpu(dma.control));
 
-	while (be32_to_cpu(dma.control) & ~FW_CFG_DMA_ERROR)
-		__asm__ __volatile__ ("pause");
+	fwcfg_arch_ops->arch_read_dma(&dma);
 }
 
 bool qemu_fwcfg_present(void)
@@ -164,13 +155,18 @@ bool qemu_fwcfg_file_iter_end(struct fw_cfg_file_iter *iter)
 	return iter->entry == &fw_list;
 }
 
-void qemu_fwcfg_init(void)
+void qemu_fwcfg_init(struct fw_cfg_arch_ops *ops)
 {
 	uint32_t qemu;
 	uint32_t dma_enabled;
 
 	fwcfg_present = false;
 	fwcfg_dma_present = false;
+	fwcfg_arch_ops = NULL;
+
+	if (!ops || !ops->arch_read_pio || !ops->arch_read_dma)
+		return;
+	fwcfg_arch_ops = ops;
 
 	qemu_fwcfg_read_entry_pio(FW_CFG_SIGNATURE, 4, &qemu);
 	if (be32_to_cpu(qemu) == QEMU_FW_CFG_SIGNATURE)
diff --git a/include/qemu_fw_cfg.h b/include/qemu_fw_cfg.h
index f718e09..b0b3b59 100644
--- a/include/qemu_fw_cfg.h
+++ b/include/qemu_fw_cfg.h
@@ -7,11 +7,6 @@
 #ifndef __FW_CFG__
 #define __FW_CFG__
 
-#define FW_CONTROL_PORT	0x510
-#define FW_DATA_PORT		0x511
-#define FW_DMA_PORT_LOW	0x514
-#define FW_DMA_PORT_HIGH	0x518
-
 #include <linux/list.h>
 
 enum qemu_fwcfg_items {
@@ -97,6 +92,12 @@ struct fw_cfg_dma_access {
 	__be64 address;
 };
 
+struct fw_cfg_arch_ops {
+	void (*arch_read_pio)(uint16_t selector, uint32_t size,
+			void *address);
+	void (*arch_read_dma)(struct fw_cfg_dma_access *dma);
+};
+
 struct bios_linker_entry {
 	__le32 command;
 	union {
@@ -148,8 +149,10 @@ struct bios_linker_entry {
 
 /**
  * Initialize QEMU fw_cfg interface
+ *
+ * @ops: arch specific read operations
  */
-void qemu_fwcfg_init(void);
+void qemu_fwcfg_init(struct fw_cfg_arch_ops *ops);
 
 void qemu_fwcfg_read_entry(uint16_t entry, uint32_t length, void *address);
 int qemu_fwcfg_read_firmware_list(void);
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 07/14] x86: qemu: add comment about qfw register endianness
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (5 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 06/14] x86: qemu: move x86 specific operations out of " Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 08/14] cmd: qfw: rename qemu_fw_cfg.[c|h] to qfw.[c|h] Miao Yan
                   ` (6 subsequent siblings)
  13 siblings, 0 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

This patch adds some comments about qfw register endianness for clarity.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---
 arch/x86/cpu/qemu/qemu.c | 9 ++++++++-
 1 file changed, 8 insertions(+), 1 deletion(-)

diff --git a/arch/x86/cpu/qemu/qemu.c b/arch/x86/cpu/qemu/qemu.c
index 6ff9947..c29add3 100644
--- a/arch/x86/cpu/qemu/qemu.c
+++ b/arch/x86/cpu/qemu/qemu.c
@@ -17,6 +17,7 @@ static bool i440fx;
 
 #ifdef CONFIG_QFW
 
+/* on x86, the qfw registers are all IO ports */
 #define FW_CONTROL_PORT	0x510
 #define FW_DATA_PORT		0x511
 #define FW_DMA_PORT_LOW	0x514
@@ -31,15 +32,21 @@ static void qemu_x86_fwcfg_read_entry_pio(uint16_t entry,
 	/*
 	 * writting FW_CFG_INVALID will cause read operation to resume at
 	 * last offset, otherwise read will start at offset 0
+	 *
+	 * Note: on platform where the control register is IO port, the
+	 * endianness is little endian.
 	 */
 	if (entry != FW_CFG_INVALID)
-		outw(entry, FW_CONTROL_PORT);
+		outw(cpu_to_le16(entry), FW_CONTROL_PORT);
+
+	/* the endianness of data register is string-preserving */
 	while (size--)
 		data[i++] = inb(FW_DATA_PORT);
 }
 
 static void qemu_x86_fwcfg_read_entry_dma(struct fw_cfg_dma_access *dma)
 {
+	/* the DMA address register is big endian */
 	outl(cpu_to_be32((uint32_t)dma), FW_DMA_PORT_HIGH);
 
 	while (be32_to_cpu(dma->control) & ~FW_CFG_DMA_ERROR)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 08/14] cmd: qfw: rename qemu_fw_cfg.[c|h] to qfw.[c|h]
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (6 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 07/14] x86: qemu: add comment about qfw register endianness Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-19  9:08   ` Bin Meng
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 09/14] cmd: qfw: do not require default macros when building qfw command Miao Yan
                   ` (5 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

Make file names aligned with CONFIG_QFW

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
 arch/x86/cpu/mp_init.c                | 2 +-
 arch/x86/cpu/qemu/acpi_table.c        | 2 +-
 arch/x86/cpu/qemu/cpu.c               | 2 +-
 arch/x86/cpu/qemu/qemu.c              | 2 +-
 cmd/qfw.c                             | 2 +-
 drivers/misc/Makefile                 | 2 +-
 drivers/misc/{qemu_fw_cfg.c => qfw.c} | 2 +-
 include/{qemu_fw_cfg.h => qfw.h}      | 0
 8 files changed, 7 insertions(+), 7 deletions(-)
 rename drivers/misc/{qemu_fw_cfg.c => qfw.c} (99%)
 rename include/{qemu_fw_cfg.h => qfw.h} (100%)

diff --git a/arch/x86/cpu/mp_init.c b/arch/x86/cpu/mp_init.c
index c44a286..8207274 100644
--- a/arch/x86/cpu/mp_init.c
+++ b/arch/x86/cpu/mp_init.c
@@ -11,7 +11,7 @@
 #include <dm.h>
 #include <errno.h>
 #include <malloc.h>
-#include <qemu_fw_cfg.h>
+#include <qfw.h>
 #include <asm/atomic.h>
 #include <asm/cpu.h>
 #include <asm/interrupt.h>
diff --git a/arch/x86/cpu/qemu/acpi_table.c b/arch/x86/cpu/qemu/acpi_table.c
index b17fa03..5bb1756 100644
--- a/arch/x86/cpu/qemu/acpi_table.c
+++ b/arch/x86/cpu/qemu/acpi_table.c
@@ -8,7 +8,7 @@
 #include <command.h>
 #include <errno.h>
 #include <malloc.h>
-#include <qemu_fw_cfg.h>
+#include <qfw.h>
 #include <asm/io.h>
 #include <asm/tables.h>
 #include <asm/e820.h>
diff --git a/arch/x86/cpu/qemu/cpu.c b/arch/x86/cpu/qemu/cpu.c
index 4d2989a..b1a965e 100644
--- a/arch/x86/cpu/qemu/cpu.c
+++ b/arch/x86/cpu/qemu/cpu.c
@@ -8,7 +8,7 @@
 #include <cpu.h>
 #include <dm.h>
 #include <errno.h>
-#include <qemu_fw_cfg.h>
+#include <qfw.h>
 #include <asm/cpu.h>
 
 DECLARE_GLOBAL_DATA_PTR;
diff --git a/arch/x86/cpu/qemu/qemu.c b/arch/x86/cpu/qemu/qemu.c
index c29add3..680e558 100644
--- a/arch/x86/cpu/qemu/qemu.c
+++ b/arch/x86/cpu/qemu/qemu.c
@@ -6,7 +6,7 @@
 
 #include <common.h>
 #include <pci.h>
-#include <qemu_fw_cfg.h>
+#include <qfw.h>
 #include <asm/irq.h>
 #include <asm/post.h>
 #include <asm/processor.h>
diff --git a/cmd/qfw.c b/cmd/qfw.c
index 37f1aa6..c6730bf 100644
--- a/cmd/qfw.c
+++ b/cmd/qfw.c
@@ -7,7 +7,7 @@
 #include <common.h>
 #include <command.h>
 #include <errno.h>
-#include <qemu_fw_cfg.h>
+#include <qfw.h>
 
 /*
  * This function prepares kernel for zboot. It loads kernel data
diff --git a/drivers/misc/Makefile b/drivers/misc/Makefile
index 4893086..98704f2 100644
--- a/drivers/misc/Makefile
+++ b/drivers/misc/Makefile
@@ -43,4 +43,4 @@ obj-$(CONFIG_PCA9551_LED) += pca9551_led.o
 obj-$(CONFIG_RESET) += reset-uclass.o
 obj-$(CONFIG_FSL_DEVICE_DISABLE) += fsl_devdis.o
 obj-$(CONFIG_WINBOND_W83627) += winbond_w83627.o
-obj-$(CONFIG_QFW) += qemu_fw_cfg.o
+obj-$(CONFIG_QFW) += qfw.o
diff --git a/drivers/misc/qemu_fw_cfg.c b/drivers/misc/qfw.c
similarity index 99%
rename from drivers/misc/qemu_fw_cfg.c
rename to drivers/misc/qfw.c
index 0f72549..59d9376 100644
--- a/drivers/misc/qemu_fw_cfg.c
+++ b/drivers/misc/qfw.c
@@ -8,7 +8,7 @@
 #include <command.h>
 #include <errno.h>
 #include <malloc.h>
-#include <qemu_fw_cfg.h>
+#include <qfw.h>
 #include <asm/io.h>
 #include <linux/list.h>
 
diff --git a/include/qemu_fw_cfg.h b/include/qfw.h
similarity index 100%
rename from include/qemu_fw_cfg.h
rename to include/qfw.h
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 09/14] cmd: qfw: do not require default macros when building qfw command
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (7 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 08/14] cmd: qfw: rename qemu_fw_cfg.[c|h] to qfw.[c|h] Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 10/14] cmd: qfw: do not depend on x86 Miao Yan
                   ` (4 subsequent siblings)
  13 siblings, 0 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

The qfw command interface makes use of CONFIG_LOADADDR and
CONFIG_RAMDISKADDR to setup kernel. But not all boards have these macro,
which causes build problem on those platforms.

This patch fixes this issue.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---
Changes in v2:
  - fix commit message

 cmd/qfw.c | 13 +++++++++++++
 1 file changed, 13 insertions(+)

diff --git a/cmd/qfw.c b/cmd/qfw.c
index c6730bf..12436ec 100644
--- a/cmd/qfw.c
+++ b/cmd/qfw.c
@@ -126,12 +126,20 @@ static int qemu_fwcfg_do_load(cmd_tbl_t *cmdtp, int flag,
 	env = getenv("loadaddr");
 	load_addr = env ?
 		(void *)simple_strtoul(env, NULL, 16) :
+#ifdef CONFIG_LOADADDR
 		(void *)CONFIG_LOADADDR;
+#else
+		NULL;
+#endif
 
 	env = getenv("ramdiskaddr");
 	initrd_addr = env ?
 		(void *)simple_strtoul(env, NULL, 16) :
+#ifdef CONFIG_RAMDISK_ADDR
 		(void *)CONFIG_RAMDISK_ADDR;
+#else
+		NULL;
+#endif
 
 	if (argc == 2) {
 		load_addr = (void *)simple_strtoul(argv[0], NULL, 16);
@@ -140,6 +148,11 @@ static int qemu_fwcfg_do_load(cmd_tbl_t *cmdtp, int flag,
 		load_addr = (void *)simple_strtoul(argv[0], NULL, 16);
 	}
 
+	if (!load_addr || !initrd_addr) {
+		printf("missing load or initrd address\n");
+		return CMD_RET_FAILURE;
+	}
+
 	return qemu_fwcfg_setup_kernel(load_addr, initrd_addr);
 }
 
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot]  [v2 PATCH 10/14] cmd: qfw: do not depend on x86
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (8 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 09/14] cmd: qfw: do not require default macros when building qfw command Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 11/14] cmd: qfw: bring ACPI generation code into qfw core Miao Yan
                   ` (3 subsequent siblings)
  13 siblings, 0 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

The qfw command interface used to depend on X86, this patch removes
this restriction so it can be built for sandbox for testing. For normal
usage, it can only be used with CONFIG_QEMU.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---
 cmd/Kconfig | 1 -
 1 file changed, 1 deletion(-)

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 08b761f..01870cb 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -595,7 +595,6 @@ config CMD_SOUND
 
 config CMD_QEMU_FW_CFG
 	bool "qfw"
-	depends on X86
 	select QFW
 	help
 	  This provides access to the QEMU firmware interface.  The main
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 11/14] cmd: qfw: bring ACPI generation code into qfw core
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (9 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 10/14] cmd: qfw: do not depend on x86 Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-19  9:08   ` Bin Meng
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 12/14] x86: qemu: rename qemu/acpi_table.c Miao Yan
                   ` (2 subsequent siblings)
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

Loading ACPI table from QEMU's fw_cfg interface is not x86 specific
(ARM64 may also make use of it). So move the code to common place.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
---
 arch/x86/cpu/qemu/acpi_table.c | 209 -----------------------------------------
 drivers/misc/qfw.c             | 206 ++++++++++++++++++++++++++++++++++++++++
 2 files changed, 206 insertions(+), 209 deletions(-)

diff --git a/arch/x86/cpu/qemu/acpi_table.c b/arch/x86/cpu/qemu/acpi_table.c
index 5bb1756..63853e4 100644
--- a/arch/x86/cpu/qemu/acpi_table.c
+++ b/arch/x86/cpu/qemu/acpi_table.c
@@ -5,139 +5,7 @@
  */
 
 #include <common.h>
-#include <command.h>
-#include <errno.h>
-#include <malloc.h>
-#include <qfw.h>
-#include <asm/io.h>
-#include <asm/tables.h>
 #include <asm/e820.h>
-#include <linux/list.h>
-#include <memalign.h>
-
-/*
- * This function allocates memory for ACPI tables
- *
- * @entry : BIOS linker command entry which tells where to allocate memory
- *          (either high memory or low memory)
- * @addr  : The address that should be used for low memory allcation. If the
- *          memory allocation request is 'ZONE_HIGH' then this parameter will
- *          be ignored.
- * @return: 0 on success, or negative value on failure
- */
-static int bios_linker_allocate(struct bios_linker_entry *entry, u32 *addr)
-{
-	uint32_t size, align;
-	struct fw_file *file;
-	unsigned long aligned_addr;
-
-	align = le32_to_cpu(entry->alloc.align);
-	/* align must be power of 2 */
-	if (align & (align - 1)) {
-		printf("error: wrong alignment %u\n", align);
-		return -EINVAL;
-	}
-
-	file = qemu_fwcfg_find_file(entry->alloc.file);
-	if (!file) {
-		printf("error: can't find file %s\n", entry->alloc.file);
-		return -ENOENT;
-	}
-
-	size = be32_to_cpu(file->cfg.size);
-
-	/*
-	 * ZONE_HIGH means we need to allocate from high memory, since
-	 * malloc space is already at the end of RAM, so we directly use it.
-	 * If allocation zone is ZONE_FSEG, then we use the 'addr' passed
-	 * in which is low memory
-	 */
-	if (entry->alloc.zone == BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH) {
-		aligned_addr = (unsigned long)memalign(align, size);
-		if (!aligned_addr) {
-			printf("error: allocating resource\n");
-			return -ENOMEM;
-		}
-	} else if (entry->alloc.zone == BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG) {
-		aligned_addr = ALIGN(*addr, align);
-	} else {
-		printf("error: invalid allocation zone\n");
-		return -EINVAL;
-	}
-
-	debug("bios_linker_allocate: allocate file %s, size %u, zone %d, align %u, addr 0x%lx\n",
-	      file->cfg.name, size, entry->alloc.zone, align, aligned_addr);
-
-	qemu_fwcfg_read_entry(be16_to_cpu(file->cfg.select),
-			      size, (void *)aligned_addr);
-	file->addr = aligned_addr;
-
-	/* adjust address for low memory allocation */
-	if (entry->alloc.zone == BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG)
-		*addr = (aligned_addr + size);
-
-	return 0;
-}
-
-/*
- * This function patches ACPI tables previously loaded
- * by bios_linker_allocate()
- *
- * @entry : BIOS linker command entry which tells how to patch
- *          ACPI tables
- * @return: 0 on success, or negative value on failure
- */
-static int bios_linker_add_pointer(struct bios_linker_entry *entry)
-{
-	struct fw_file *dest, *src;
-	uint32_t offset = le32_to_cpu(entry->pointer.offset);
-	uint64_t pointer = 0;
-
-	dest = qemu_fwcfg_find_file(entry->pointer.dest_file);
-	if (!dest || !dest->addr)
-		return -ENOENT;
-	src = qemu_fwcfg_find_file(entry->pointer.src_file);
-	if (!src || !src->addr)
-		return -ENOENT;
-
-	debug("bios_linker_add_pointer: dest->addr 0x%lx, src->addr 0x%lx, offset 0x%x size %u, 0x%llx\n",
-	      dest->addr, src->addr, offset, entry->pointer.size, pointer);
-
-	memcpy(&pointer, (char *)dest->addr + offset, entry->pointer.size);
-	pointer	= le64_to_cpu(pointer);
-	pointer += (unsigned long)src->addr;
-	pointer	= cpu_to_le64(pointer);
-	memcpy((char *)dest->addr + offset, &pointer, entry->pointer.size);
-
-	return 0;
-}
-
-/*
- * This function updates checksum fields of ACPI tables previously loaded
- * by bios_linker_allocate()
- *
- * @entry : BIOS linker command entry which tells where to update ACPI table
- *          checksums
- * @return: 0 on success, or negative value on failure
- */
-static int bios_linker_add_checksum(struct bios_linker_entry *entry)
-{
-	struct fw_file *file;
-	uint8_t *data, cksum = 0;
-	uint8_t *cksum_start;
-
-	file = qemu_fwcfg_find_file(entry->cksum.file);
-	if (!file || !file->addr)
-		return -ENOENT;
-
-	data = (uint8_t *)(file->addr + le32_to_cpu(entry->cksum.offset));
-	cksum_start = (uint8_t *)(file->addr + le32_to_cpu(entry->cksum.start));
-	cksum = table_compute_checksum(cksum_start,
-				       le32_to_cpu(entry->cksum.length));
-	*data = cksum;
-
-	return 0;
-}
 
 unsigned install_e820_map(unsigned max_entries, struct e820entry *entries)
 {
@@ -173,80 +41,3 @@ unsigned install_e820_map(unsigned max_entries, struct e820entry *entries)
 
 	return 6;
 }
-
-/* This function loads and patches ACPI tables provided by QEMU */
-u32 write_acpi_tables(u32 addr)
-{
-	int i, ret = 0;
-	struct fw_file *file;
-	struct bios_linker_entry *table_loader;
-	struct bios_linker_entry *entry;
-	uint32_t size;
-
-	/* make sure fw_list is loaded */
-	ret = qemu_fwcfg_read_firmware_list();
-	if (ret) {
-		printf("error: can't read firmware file list\n");
-		return addr;
-	}
-
-	file = qemu_fwcfg_find_file("etc/table-loader");
-	if (!file) {
-		printf("error: can't find etc/table-loader\n");
-		return addr;
-	}
-
-	size = be32_to_cpu(file->cfg.size);
-	if ((size % sizeof(*entry)) != 0) {
-		printf("error: table-loader maybe corrupted\n");
-		return addr;
-	}
-
-	table_loader = malloc(size);
-	if (!table_loader) {
-		printf("error: no memory for table-loader\n");
-		return addr;
-	}
-
-	qemu_fwcfg_read_entry(be16_to_cpu(file->cfg.select),
-			      size, table_loader);
-
-	for (i = 0; i < (size / sizeof(*entry)); i++) {
-		entry = table_loader + i;
-		switch (le32_to_cpu(entry->command)) {
-		case BIOS_LINKER_LOADER_COMMAND_ALLOCATE:
-			ret = bios_linker_allocate(entry, &addr);
-			if (ret)
-				goto out;
-			break;
-		case BIOS_LINKER_LOADER_COMMAND_ADD_POINTER:
-			ret = bios_linker_add_pointer(entry);
-			if (ret)
-				goto out;
-			break;
-		case BIOS_LINKER_LOADER_COMMAND_ADD_CHECKSUM:
-			ret = bios_linker_add_checksum(entry);
-			if (ret)
-				goto out;
-			break;
-		default:
-			break;
-		}
-	}
-
-out:
-	if (ret) {
-		struct fw_cfg_file_iter iter;
-		for (file = qemu_fwcfg_file_iter_init(&iter);
-		     !qemu_fwcfg_file_iter_end(&iter);
-		     file = qemu_fwcfg_file_iter_next(&iter)) {
-			if (file->addr) {
-				free((void *)file->addr);
-				file->addr = 0;
-			}
-		}
-	}
-
-	free(table_loader);
-	return addr;
-}
diff --git a/drivers/misc/qfw.c b/drivers/misc/qfw.c
index 59d9376..d43d1d3 100644
--- a/drivers/misc/qfw.c
+++ b/drivers/misc/qfw.c
@@ -10,6 +10,9 @@
 #include <malloc.h>
 #include <qfw.h>
 #include <asm/io.h>
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+#include <asm/tables.h>
+#endif
 #include <linux/list.h>
 
 static bool fwcfg_present;
@@ -18,6 +21,209 @@ static struct fw_cfg_arch_ops *fwcfg_arch_ops;
 
 static LIST_HEAD(fw_list);
 
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+/*
+ * This function allocates memory for ACPI tables
+ *
+ * @entry : BIOS linker command entry which tells where to allocate memory
+ *          (either high memory or low memory)
+ * @addr  : The address that should be used for low memory allcation. If the
+ *          memory allocation request is 'ZONE_HIGH' then this parameter will
+ *          be ignored.
+ * @return: 0 on success, or negative value on failure
+ */
+static int bios_linker_allocate(struct bios_linker_entry *entry, u32 *addr)
+{
+	uint32_t size, align;
+	struct fw_file *file;
+	unsigned long aligned_addr;
+
+	align = le32_to_cpu(entry->alloc.align);
+	/* align must be power of 2 */
+	if (align & (align - 1)) {
+		printf("error: wrong alignment %u\n", align);
+		return -EINVAL;
+	}
+
+	file = qemu_fwcfg_find_file(entry->alloc.file);
+	if (!file) {
+		printf("error: can't find file %s\n", entry->alloc.file);
+		return -ENOENT;
+	}
+
+	size = be32_to_cpu(file->cfg.size);
+
+	/*
+	 * ZONE_HIGH means we need to allocate from high memory, since
+	 * malloc space is already at the end of RAM, so we directly use it.
+	 * If allocation zone is ZONE_FSEG, then we use the 'addr' passed
+	 * in which is low memory
+	 */
+	if (entry->alloc.zone == BIOS_LINKER_LOADER_ALLOC_ZONE_HIGH) {
+		aligned_addr = (unsigned long)memalign(align, size);
+		if (!aligned_addr) {
+			printf("error: allocating resource\n");
+			return -ENOMEM;
+		}
+	} else if (entry->alloc.zone == BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG) {
+		aligned_addr = ALIGN(*addr, align);
+	} else {
+		printf("error: invalid allocation zone\n");
+		return -EINVAL;
+	}
+
+	debug("bios_linker_allocate: allocate file %s, size %u, zone %d, align %u, addr 0x%lx\n",
+	      file->cfg.name, size, entry->alloc.zone, align, aligned_addr);
+
+	qemu_fwcfg_read_entry(be16_to_cpu(file->cfg.select),
+			      size, (void *)aligned_addr);
+	file->addr = aligned_addr;
+
+	/* adjust address for low memory allocation */
+	if (entry->alloc.zone == BIOS_LINKER_LOADER_ALLOC_ZONE_FSEG)
+		*addr = (aligned_addr + size);
+
+	return 0;
+}
+
+/*
+ * This function patches ACPI tables previously loaded
+ * by bios_linker_allocate()
+ *
+ * @entry : BIOS linker command entry which tells how to patch
+ *          ACPI tables
+ * @return: 0 on success, or negative value on failure
+ */
+static int bios_linker_add_pointer(struct bios_linker_entry *entry)
+{
+	struct fw_file *dest, *src;
+	uint32_t offset = le32_to_cpu(entry->pointer.offset);
+	uint64_t pointer = 0;
+
+	dest = qemu_fwcfg_find_file(entry->pointer.dest_file);
+	if (!dest || !dest->addr)
+		return -ENOENT;
+	src = qemu_fwcfg_find_file(entry->pointer.src_file);
+	if (!src || !src->addr)
+		return -ENOENT;
+
+	debug("bios_linker_add_pointer: dest->addr 0x%lx, src->addr 0x%lx, offset 0x%x size %u, 0x%llx\n",
+	      dest->addr, src->addr, offset, entry->pointer.size, pointer);
+
+	memcpy(&pointer, (char *)dest->addr + offset, entry->pointer.size);
+	pointer	= le64_to_cpu(pointer);
+	pointer += (unsigned long)src->addr;
+	pointer	= cpu_to_le64(pointer);
+	memcpy((char *)dest->addr + offset, &pointer, entry->pointer.size);
+
+	return 0;
+}
+
+/*
+ * This function updates checksum fields of ACPI tables previously loaded
+ * by bios_linker_allocate()
+ *
+ * @entry : BIOS linker command entry which tells where to update ACPI table
+ *          checksums
+ * @return: 0 on success, or negative value on failure
+ */
+static int bios_linker_add_checksum(struct bios_linker_entry *entry)
+{
+	struct fw_file *file;
+	uint8_t *data, cksum = 0;
+	uint8_t *cksum_start;
+
+	file = qemu_fwcfg_find_file(entry->cksum.file);
+	if (!file || !file->addr)
+		return -ENOENT;
+
+	data = (uint8_t *)(file->addr + le32_to_cpu(entry->cksum.offset));
+	cksum_start = (uint8_t *)(file->addr + le32_to_cpu(entry->cksum.start));
+	cksum = table_compute_checksum(cksum_start,
+				       le32_to_cpu(entry->cksum.length));
+	*data = cksum;
+
+	return 0;
+}
+
+/* This function loads and patches ACPI tables provided by QEMU */
+u32 write_acpi_tables(u32 addr)
+{
+	int i, ret = 0;
+	struct fw_file *file;
+	struct bios_linker_entry *table_loader;
+	struct bios_linker_entry *entry;
+	uint32_t size;
+
+	/* make sure fw_list is loaded */
+	ret = qemu_fwcfg_read_firmware_list();
+	if (ret) {
+		printf("error: can't read firmware file list\n");
+		return addr;
+	}
+
+	file = qemu_fwcfg_find_file("etc/table-loader");
+	if (!file) {
+		printf("error: can't find etc/table-loader\n");
+		return addr;
+	}
+
+	size = be32_to_cpu(file->cfg.size);
+	if ((size % sizeof(*entry)) != 0) {
+		printf("error: table-loader maybe corrupted\n");
+		return addr;
+	}
+
+	table_loader = malloc(size);
+	if (!table_loader) {
+		printf("error: no memory for table-loader\n");
+		return addr;
+	}
+
+	qemu_fwcfg_read_entry(be16_to_cpu(file->cfg.select),
+			      size, table_loader);
+
+	for (i = 0; i < (size / sizeof(*entry)); i++) {
+		entry = table_loader + i;
+		switch (le32_to_cpu(entry->command)) {
+		case BIOS_LINKER_LOADER_COMMAND_ALLOCATE:
+			ret = bios_linker_allocate(entry, &addr);
+			if (ret)
+				goto out;
+			break;
+		case BIOS_LINKER_LOADER_COMMAND_ADD_POINTER:
+			ret = bios_linker_add_pointer(entry);
+			if (ret)
+				goto out;
+			break;
+		case BIOS_LINKER_LOADER_COMMAND_ADD_CHECKSUM:
+			ret = bios_linker_add_checksum(entry);
+			if (ret)
+				goto out;
+			break;
+		default:
+			break;
+		}
+	}
+
+out:
+	if (ret) {
+		struct fw_cfg_file_iter iter;
+		for (file = qemu_fwcfg_file_iter_init(&iter);
+		     !qemu_fwcfg_file_iter_end(&iter);
+		     file = qemu_fwcfg_file_iter_next(&iter)) {
+			if (file->addr) {
+				free((void *)file->addr);
+				file->addr = 0;
+			}
+		}
+	}
+
+	free(table_loader);
+	return addr;
+}
+#endif
+
 /* Read configuration item using fw_cfg PIO interface */
 static void qemu_fwcfg_read_entry_pio(uint16_t entry,
 		uint32_t size, void *address)
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot]  [v2 PATCH 12/14] x86: qemu: rename qemu/acpi_table.c
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (10 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 11/14] cmd: qfw: bring ACPI generation code into qfw core Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-19  9:08   ` Bin Meng
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW Miao Yan
  2016-05-18  9:40 ` [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing Miao Yan
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

Rename  qemu/acpi_table.c to qemu/e820.c, because ACPI stuff is moved
to qfw core, this file only contains code for installing e820 table.

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
 arch/x86/cpu/qemu/Makefile                 | 3 +--
 arch/x86/cpu/qemu/{acpi_table.c => e820.c} | 0
 2 files changed, 1 insertion(+), 2 deletions(-)
 rename arch/x86/cpu/qemu/{acpi_table.c => e820.c} (100%)

diff --git a/arch/x86/cpu/qemu/Makefile b/arch/x86/cpu/qemu/Makefile
index 7c08c3d..a080c5e 100644
--- a/arch/x86/cpu/qemu/Makefile
+++ b/arch/x86/cpu/qemu/Makefile
@@ -8,5 +8,4 @@ ifndef CONFIG_EFI_STUB
 obj-y += car.o dram.o
 endif
 obj-y += qemu.o
-obj-$(CONFIG_QFW) += cpu.o
-obj-$(CONFIG_GENERATE_ACPI_TABLE) += acpi_table.o
+obj-$(CONFIG_QFW) += cpu.o e820.o
diff --git a/arch/x86/cpu/qemu/acpi_table.c b/arch/x86/cpu/qemu/e820.c
similarity index 100%
rename from arch/x86/cpu/qemu/acpi_table.c
rename to arch/x86/cpu/qemu/e820.c
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (11 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 12/14] x86: qemu: rename qemu/acpi_table.c Miao Yan
@ 2016-05-18  9:39 ` Miao Yan
  2016-05-19  9:08   ` Bin Meng
  2016-05-18  9:40 ` [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing Miao Yan
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:39 UTC (permalink / raw)
  To: u-boot

Align macro names with the rest of qfw code

Signed-off-by: Miao Yan <yanmiaobest@gmai.com>
---
 cmd/Kconfig                | 2 +-
 cmd/Makefile               | 2 +-
 configs/qemu-x86_defconfig | 2 +-
 drivers/misc/Kconfig       | 2 +-
 4 files changed, 4 insertions(+), 4 deletions(-)

diff --git a/cmd/Kconfig b/cmd/Kconfig
index 01870cb..d51645c 100644
--- a/cmd/Kconfig
+++ b/cmd/Kconfig
@@ -593,7 +593,7 @@ config CMD_SOUND
 	     sound init   - set up sound system
 	     sound play   - play a sound
 
-config CMD_QEMU_FW_CFG
+config CMD_QFW
 	bool "qfw"
 	select QFW
 	help
diff --git a/cmd/Makefile b/cmd/Makefile
index 0b7f7a2..1bbd14f 100644
--- a/cmd/Makefile
+++ b/cmd/Makefile
@@ -105,7 +105,7 @@ endif
 obj-y += pcmcia.o
 obj-$(CONFIG_CMD_PORTIO) += portio.o
 obj-$(CONFIG_CMD_PXE) += pxe.o
-obj-$(CONFIG_CMD_QEMU_FW_CFG) += qfw.o
+obj-$(CONFIG_CMD_QFW) += qfw.o
 obj-$(CONFIG_CMD_READ) += read.o
 obj-$(CONFIG_CMD_REGINFO) += reginfo.o
 obj-$(CONFIG_CMD_REISER) += reiser.o
diff --git a/configs/qemu-x86_defconfig b/configs/qemu-x86_defconfig
index a813e5b..45bb3ec 100644
--- a/configs/qemu-x86_defconfig
+++ b/configs/qemu-x86_defconfig
@@ -20,7 +20,7 @@ CONFIG_CMD_DHCP=y
 # CONFIG_CMD_NFS is not set
 CONFIG_CMD_PING=y
 CONFIG_CMD_TIME=y
-CONFIG_CMD_QEMU_FW_CFG=y
+CONFIG_CMD_QFW=y
 CONFIG_CMD_BOOTSTAGE=y
 CONFIG_CMD_EXT2=y
 CONFIG_CMD_EXT4=y
diff --git a/drivers/misc/Kconfig b/drivers/misc/Kconfig
index fa53700..c40f6b5 100644
--- a/drivers/misc/Kconfig
+++ b/drivers/misc/Kconfig
@@ -142,6 +142,6 @@ config QFW
 	bool
 	help
 	  Hidden option to enable QEMU fw_cfg interface. This will be selected by
-	  either CONFIG_CMD_QEMU_FW_CFG or CONFIG_GENERATE_ACPI_TABLE.
+	  either CONFIG_CMD_QFW or CONFIG_GENERATE_ACPI_TABLE.
 
 endmenu
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing
  2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
                   ` (12 preceding siblings ...)
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW Miao Yan
@ 2016-05-18  9:40 ` Miao Yan
  2016-05-19  9:08   ` Bin Meng
  13 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-18  9:40 UTC (permalink / raw)
  To: u-boot

This patch enables qfw and cmd_qfw on sandbox for build coverage test

Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
---
 configs/sandbox_defconfig | 2 ++
 1 file changed, 2 insertions(+)

diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
index afdf4a3..f19308d 100644
--- a/configs/sandbox_defconfig
+++ b/configs/sandbox_defconfig
@@ -167,3 +167,5 @@ CONFIG_UNIT_TEST=y
 CONFIG_UT_TIME=y
 CONFIG_UT_DM=y
 CONFIG_UT_ENV=y
+CONFIG_QFW=y
+CONFIG_CMD_QFW=y
-- 
1.9.1

^ permalink raw reply related	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 01/14] x86: qemu: fix ACPI Kconfig options
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 01/14] x86: qemu: fix ACPI Kconfig options Miao Yan
@ 2016-05-19  9:05   ` Bin Meng
  0 siblings, 0 replies; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:05 UTC (permalink / raw)
  To: u-boot

On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> CONFIG_GENENRATE_ACPI_TABLE controls the generation of ACPI table which
> uses U-Boot's built-in methods and CONFIG_QEMU_ACPI_TABLE controls whether
> to load ACPI table from QEMU's fw_cfg interface.
>
> But with commit "697ec431469ce0a4c2fc2c02d8685d907491af84 x86: qemu: Drop
> our own ACPI implementation", there is only one way to support ACPI table
> for QEMU targets which is the fw_cfg interface. Having two Kconfig options
> for this purpose is not necessary any more, so this patch consolidates
> the two.
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> ---
> Changes in v2:
>   - fix a wrong macro name
>
>  arch/x86/Kconfig           | 10 +---------
>  arch/x86/cpu/qemu/Makefile |  2 +-
>  arch/x86/lib/Makefile      |  2 +-
>  3 files changed, 3 insertions(+), 11 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 03/14] cmd: qfw: remove qemu_fwcfg_free_files()
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 03/14] cmd: qfw: remove qemu_fwcfg_free_files() Miao Yan
@ 2016-05-19  9:05   ` Bin Meng
  0 siblings, 0 replies; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:05 UTC (permalink / raw)
  To: u-boot

On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> This patch is part of the qfw refactor work.
>
> The qemu_fwcfg_free_files() function is only used in error handling in
> ACPI table generation, let's not make this a core function and move it
> to the right place.
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> ---
>  arch/x86/cpu/qemu/acpi_table.c | 13 +++++++++++--
>  cmd/qemu_fw_cfg.c              | 12 ------------
>  include/qemu_fw_cfg.h          |  1 -
>  3 files changed, 11 insertions(+), 15 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 05/14] x86: qemu: split qfw command interface and qfw core
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 05/14] x86: qemu: split qfw command interface and qfw core Miao Yan
@ 2016-05-19  9:06   ` Bin Meng
  0 siblings, 0 replies; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:06 UTC (permalink / raw)
  To: u-boot

On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> This patch splits qfw command interface and qfw core function into two
> files, and introduces a new Kconfig option (CONFIG_QFW). for

nits: . should be removed

I can fix when applying

> qfw core.
>
> Now when qfw command interface is enabled, it will automatically select
> qfw core. This patch also makes the ACPI table generation select
> CONFIG_QFW.
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> ---
> Changes in v2:
>   - do not use #ifdef...#end when including header files
>   - cleanup blank line at the end of file
>   - rename cmd_qfw.c to qfw.c
>
>  arch/x86/Kconfig             |   2 +-
>  arch/x86/cpu/mp_init.c       |   4 +-
>  arch/x86/cpu/qemu/Makefile   |   3 +-
>  arch/x86/cpu/qemu/qemu.c     |   2 +
>  cmd/Kconfig                  |   1 +
>  cmd/Makefile                 |   2 +-
>  cmd/{qemu_fw_cfg.c => qfw.c} | 172 ----------------------------------------
>  drivers/misc/Kconfig         |   6 ++
>  drivers/misc/Makefile        |   1 +
>  drivers/misc/qemu_fw_cfg.c   | 184 +++++++++++++++++++++++++++++++++++++++++++
>  10 files changed, 200 insertions(+), 177 deletions(-)
>  rename cmd/{qemu_fw_cfg.c => qfw.c} (55%)
>  create mode 100644 drivers/misc/qemu_fw_cfg.c
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW Miao Yan
@ 2016-05-19  9:08   ` Bin Meng
  2016-05-20  2:07     ` Miao Yan
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:08 UTC (permalink / raw)
  To: u-boot

Hi Miao,

the title should say: CMD_QEMU_FW_CFG

I can fix this when applying.

On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Align macro names with the rest of qfw code
>

and I believe it's better to squash this commit into patch#8 in this
series, as they both rename QEMU_FW_CFG to QFW.

> Signed-off-by: Miao Yan <yanmiaobest@gmai.com>
> ---
>  cmd/Kconfig                | 2 +-
>  cmd/Makefile               | 2 +-
>  configs/qemu-x86_defconfig | 2 +-
>  drivers/misc/Kconfig       | 2 +-
>  4 files changed, 4 insertions(+), 4 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

[snip]

Regards,
Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 08/14] cmd: qfw: rename qemu_fw_cfg.[c|h] to qfw.[c|h]
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 08/14] cmd: qfw: rename qemu_fw_cfg.[c|h] to qfw.[c|h] Miao Yan
@ 2016-05-19  9:08   ` Bin Meng
  0 siblings, 0 replies; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:08 UTC (permalink / raw)
  To: u-boot

On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Make file names aligned with CONFIG_QFW
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> ---
>  arch/x86/cpu/mp_init.c                | 2 +-
>  arch/x86/cpu/qemu/acpi_table.c        | 2 +-
>  arch/x86/cpu/qemu/cpu.c               | 2 +-
>  arch/x86/cpu/qemu/qemu.c              | 2 +-
>  cmd/qfw.c                             | 2 +-
>  drivers/misc/Makefile                 | 2 +-
>  drivers/misc/{qemu_fw_cfg.c => qfw.c} | 2 +-
>  include/{qemu_fw_cfg.h => qfw.h}      | 0
>  8 files changed, 7 insertions(+), 7 deletions(-)
>  rename drivers/misc/{qemu_fw_cfg.c => qfw.c} (99%)
>  rename include/{qemu_fw_cfg.h => qfw.h} (100%)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 11/14] cmd: qfw: bring ACPI generation code into qfw core
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 11/14] cmd: qfw: bring ACPI generation code into qfw core Miao Yan
@ 2016-05-19  9:08   ` Bin Meng
  0 siblings, 0 replies; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:08 UTC (permalink / raw)
  To: u-boot

On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Loading ACPI table from QEMU's fw_cfg interface is not x86 specific
> (ARM64 may also make use of it). So move the code to common place.
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
> ---
>  arch/x86/cpu/qemu/acpi_table.c | 209 -----------------------------------------
>  drivers/misc/qfw.c             | 206 ++++++++++++++++++++++++++++++++++++++++
>  2 files changed, 206 insertions(+), 209 deletions(-)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 12/14] x86: qemu: rename qemu/acpi_table.c
  2016-05-18  9:39 ` [U-Boot] [v2 PATCH 12/14] x86: qemu: rename qemu/acpi_table.c Miao Yan
@ 2016-05-19  9:08   ` Bin Meng
  0 siblings, 0 replies; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:08 UTC (permalink / raw)
  To: u-boot

On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Rename  qemu/acpi_table.c to qemu/e820.c, because ACPI stuff is moved
> to qfw core, this file only contains code for installing e820 table.
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> ---
>  arch/x86/cpu/qemu/Makefile                 | 3 +--
>  arch/x86/cpu/qemu/{acpi_table.c => e820.c} | 0
>  2 files changed, 1 insertion(+), 2 deletions(-)
>  rename arch/x86/cpu/qemu/{acpi_table.c => e820.c} (100%)
>

Reviewed-by: Bin Meng <bmeng.cn@gmail.com>

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing
  2016-05-18  9:40 ` [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing Miao Yan
@ 2016-05-19  9:08   ` Bin Meng
  2016-05-20  2:06     ` Miao Yan
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2016-05-19  9:08 UTC (permalink / raw)
  To: u-boot

Hi Miao,

On Wed, May 18, 2016 at 5:40 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> This patch enables qfw and cmd_qfw on sandbox for build coverage test
>
> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
> ---
>  configs/sandbox_defconfig | 2 ++
>  1 file changed, 2 insertions(+)
>
> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
> index afdf4a3..f19308d 100644
> --- a/configs/sandbox_defconfig
> +++ b/configs/sandbox_defconfig
> @@ -167,3 +167,5 @@ CONFIG_UNIT_TEST=y
>  CONFIG_UT_TIME=y
>  CONFIG_UT_DM=y
>  CONFIG_UT_ENV=y
> +CONFIG_QFW=y
> +CONFIG_CMD_QFW=y
> --

Please do a 'make savedefconfig' and check the Kconfig options.

Regards,
Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing
  2016-05-19  9:08   ` Bin Meng
@ 2016-05-20  2:06     ` Miao Yan
  2016-05-20  2:29       ` Bin Meng
  0 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-20  2:06 UTC (permalink / raw)
  To: u-boot

Hi Bin,

2016-05-19 17:08 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
> Hi Miao,
>
> On Wed, May 18, 2016 at 5:40 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>> This patch enables qfw and cmd_qfw on sandbox for build coverage test
>>
>> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
>> ---
>>  configs/sandbox_defconfig | 2 ++
>>  1 file changed, 2 insertions(+)
>>
>> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
>> index afdf4a3..f19308d 100644
>> --- a/configs/sandbox_defconfig
>> +++ b/configs/sandbox_defconfig
>> @@ -167,3 +167,5 @@ CONFIG_UNIT_TEST=y
>>  CONFIG_UT_TIME=y
>>  CONFIG_UT_DM=y
>>  CONFIG_UT_ENV=y
>> +CONFIG_QFW=y
>> +CONFIG_CMD_QFW=y
>> --
>
> Please do a 'make savedefconfig' and check the Kconfig options.

I did a 'make savedefconfig' and there was a file generated
'defconfig' but with zero content. So what am I supposed to check ?
Did you find something wrong with this one ?

Thanks,
Miao


>
> Regards,
> Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW
  2016-05-19  9:08   ` Bin Meng
@ 2016-05-20  2:07     ` Miao Yan
  2016-05-20  2:30       ` Bin Meng
  0 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-20  2:07 UTC (permalink / raw)
  To: u-boot

Hi Bin,

2016-05-19 17:08 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
> Hi Miao,
>
> the title should say: CMD_QEMU_FW_CFG
>
> I can fix this when applying.
>
> On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>> Align macro names with the rest of qfw code
>>
>
> and I believe it's better to squash this commit into patch#8 in this
> series, as they both rename QEMU_FW_CFG to QFW.

Thanks. Do I need a v3 ?


Thanks,
Miao


>
>> Signed-off-by: Miao Yan <yanmiaobest@gmai.com>
>> ---
>>  cmd/Kconfig                | 2 +-
>>  cmd/Makefile               | 2 +-
>>  configs/qemu-x86_defconfig | 2 +-
>>  drivers/misc/Kconfig       | 2 +-
>>  4 files changed, 4 insertions(+), 4 deletions(-)
>>
>
> Reviewed-by: Bin Meng <bmeng.cn@gmail.com>
>
> [snip]
>
> Regards,
> Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing
  2016-05-20  2:06     ` Miao Yan
@ 2016-05-20  2:29       ` Bin Meng
  2016-05-20  6:58         ` Miao Yan
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2016-05-20  2:29 UTC (permalink / raw)
  To: u-boot

Hi Miao,

On Fri, May 20, 2016 at 10:06 AM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Hi Bin,
>
> 2016-05-19 17:08 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
>> Hi Miao,
>>
>> On Wed, May 18, 2016 at 5:40 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>>> This patch enables qfw and cmd_qfw on sandbox for build coverage test
>>>
>>> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
>>> ---
>>>  configs/sandbox_defconfig | 2 ++
>>>  1 file changed, 2 insertions(+)
>>>
>>> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
>>> index afdf4a3..f19308d 100644
>>> --- a/configs/sandbox_defconfig
>>> +++ b/configs/sandbox_defconfig
>>> @@ -167,3 +167,5 @@ CONFIG_UNIT_TEST=y
>>>  CONFIG_UT_TIME=y
>>>  CONFIG_UT_DM=y
>>>  CONFIG_UT_ENV=y
>>> +CONFIG_QFW=y
>>> +CONFIG_CMD_QFW=y
>>> --
>>
>> Please do a 'make savedefconfig' and check the Kconfig options.
>
> I did a 'make savedefconfig' and there was a file generated
> 'defconfig' but with zero content. So what am I supposed to check ?
> Did you find something wrong with this one ?
>

We need make sure the option order is correct in a defconfig file.

We can do it like this:

$ make sandbox_defconfig
$ make savedefconfig

Then check the difference between our updated sandbox_defconfig and
defconfig files.

Regards,
Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW
  2016-05-20  2:07     ` Miao Yan
@ 2016-05-20  2:30       ` Bin Meng
  2016-05-20  2:43         ` Miao Yan
  0 siblings, 1 reply; 30+ messages in thread
From: Bin Meng @ 2016-05-20  2:30 UTC (permalink / raw)
  To: u-boot

Hi Miao,

On Fri, May 20, 2016 at 10:07 AM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Hi Bin,
>
> 2016-05-19 17:08 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
>> Hi Miao,
>>
>> the title should say: CMD_QEMU_FW_CFG
>>
>> I can fix this when applying.
>>
>> On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>>> Align macro names with the rest of qfw code
>>>
>>
>> and I believe it's better to squash this commit into patch#8 in this
>> series, as they both rename QEMU_FW_CFG to QFW.
>
> Thanks. Do I need a v3 ?
>

If you have time, let's do a v3 which saves my time. Sorry :(

Regards,
Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW
  2016-05-20  2:30       ` Bin Meng
@ 2016-05-20  2:43         ` Miao Yan
  0 siblings, 0 replies; 30+ messages in thread
From: Miao Yan @ 2016-05-20  2:43 UTC (permalink / raw)
  To: u-boot

2016-05-20 10:30 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
> Hi Miao,
>
> On Fri, May 20, 2016 at 10:07 AM, Miao Yan <yanmiaobest@gmail.com> wrote:
>> Hi Bin,
>>
>> 2016-05-19 17:08 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
>>> Hi Miao,
>>>
>>> the title should say: CMD_QEMU_FW_CFG
>>>
>>> I can fix this when applying.
>>>
>>> On Wed, May 18, 2016 at 5:39 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>>>> Align macro names with the rest of qfw code
>>>>
>>>
>>> and I believe it's better to squash this commit into patch#8 in this
>>> series, as they both rename QEMU_FW_CFG to QFW.
>>
>> Thanks. Do I need a v3 ?
>>
>
> If you have time, let's do a v3 which saves my time. Sorry :(

OK, no problem.

Miao

>
> Regards,
> Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing
  2016-05-20  2:29       ` Bin Meng
@ 2016-05-20  6:58         ` Miao Yan
  2016-05-20  7:02           ` Bin Meng
  0 siblings, 1 reply; 30+ messages in thread
From: Miao Yan @ 2016-05-20  6:58 UTC (permalink / raw)
  To: u-boot

Hi Bin,

2016-05-20 10:29 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
> Hi Miao,
>
> On Fri, May 20, 2016 at 10:06 AM, Miao Yan <yanmiaobest@gmail.com> wrote:
>> Hi Bin,
>>
>> 2016-05-19 17:08 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
>>> Hi Miao,
>>>
>>> On Wed, May 18, 2016 at 5:40 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>>>> This patch enables qfw and cmd_qfw on sandbox for build coverage test
>>>>
>>>> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
>>>> ---
>>>>  configs/sandbox_defconfig | 2 ++
>>>>  1 file changed, 2 insertions(+)
>>>>
>>>> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
>>>> index afdf4a3..f19308d 100644
>>>> --- a/configs/sandbox_defconfig
>>>> +++ b/configs/sandbox_defconfig
>>>> @@ -167,3 +167,5 @@ CONFIG_UNIT_TEST=y
>>>>  CONFIG_UT_TIME=y
>>>>  CONFIG_UT_DM=y
>>>>  CONFIG_UT_ENV=y
>>>> +CONFIG_QFW=y
>>>> +CONFIG_CMD_QFW=y
>>>> --
>>>
>>> Please do a 'make savedefconfig' and check the Kconfig options.
>>
>> I did a 'make savedefconfig' and there was a file generated
>> 'defconfig' but with zero content. So what am I supposed to check ?
>> Did you find something wrong with this one ?
>>
>
> We need make sure the option order is correct in a defconfig file.

Can you elaborate on this, what're the rules to add new config in
sandbox_defconfig ? Is is based on the order in kconfig file ?


>
> We can do it like this:
>
> $ make sandbox_defconfig
> $ make savedefconfig
>
> Then check the difference between our updated sandbox_defconfig and
> defconfig files.

And they are supposed to be identical ?

Thanks,
Miao


>
> Regards,
> Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

* [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing
  2016-05-20  6:58         ` Miao Yan
@ 2016-05-20  7:02           ` Bin Meng
  0 siblings, 0 replies; 30+ messages in thread
From: Bin Meng @ 2016-05-20  7:02 UTC (permalink / raw)
  To: u-boot

Hi Miao,

On Fri, May 20, 2016 at 2:58 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
> Hi Bin,
>
> 2016-05-20 10:29 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
>> Hi Miao,
>>
>> On Fri, May 20, 2016 at 10:06 AM, Miao Yan <yanmiaobest@gmail.com> wrote:
>>> Hi Bin,
>>>
>>> 2016-05-19 17:08 GMT+08:00 Bin Meng <bmeng.cn@gmail.com>:
>>>> Hi Miao,
>>>>
>>>> On Wed, May 18, 2016 at 5:40 PM, Miao Yan <yanmiaobest@gmail.com> wrote:
>>>>> This patch enables qfw and cmd_qfw on sandbox for build coverage test
>>>>>
>>>>> Signed-off-by: Miao Yan <yanmiaobest@gmail.com>
>>>>> ---
>>>>>  configs/sandbox_defconfig | 2 ++
>>>>>  1 file changed, 2 insertions(+)
>>>>>
>>>>> diff --git a/configs/sandbox_defconfig b/configs/sandbox_defconfig
>>>>> index afdf4a3..f19308d 100644
>>>>> --- a/configs/sandbox_defconfig
>>>>> +++ b/configs/sandbox_defconfig
>>>>> @@ -167,3 +167,5 @@ CONFIG_UNIT_TEST=y
>>>>>  CONFIG_UT_TIME=y
>>>>>  CONFIG_UT_DM=y
>>>>>  CONFIG_UT_ENV=y
>>>>> +CONFIG_QFW=y
>>>>> +CONFIG_CMD_QFW=y
>>>>> --
>>>>
>>>> Please do a 'make savedefconfig' and check the Kconfig options.
>>>
>>> I did a 'make savedefconfig' and there was a file generated
>>> 'defconfig' but with zero content. So what am I supposed to check ?
>>> Did you find something wrong with this one ?
>>>
>>
>> We need make sure the option order is correct in a defconfig file.
>
> Can you elaborate on this, what're the rules to add new config in
> sandbox_defconfig ? Is is based on the order in kconfig file ?
>

Yes, we should add new config in defconfig files according to their
order in Kconfig files.

>>
>> We can do it like this:
>>
>> $ make sandbox_defconfig
>> $ make savedefconfig
>>
>> Then check the difference between our updated sandbox_defconfig and
>> defconfig files.
>
> And they are supposed to be identical ?
>

The one generated by 'make savedefconfig' is supposed to have the
correct order, and without any redundant options.

Regards,
Bin

^ permalink raw reply	[flat|nested] 30+ messages in thread

end of thread, other threads:[~2016-05-20  7:02 UTC | newest]

Thread overview: 30+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2016-05-18  9:39 [U-Boot] [v2 PATCH 00/14] cleanup QEMU fw_cfg code Miao Yan
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 01/14] x86: qemu: fix ACPI Kconfig options Miao Yan
2016-05-19  9:05   ` Bin Meng
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 02/14] cmd: qfw: add API to iterate firmware list Miao Yan
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 03/14] cmd: qfw: remove qemu_fwcfg_free_files() Miao Yan
2016-05-19  9:05   ` Bin Meng
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 04/14] cmd: qfw: make fwcfg_present and fwcfg_dma_present public Miao Yan
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 05/14] x86: qemu: split qfw command interface and qfw core Miao Yan
2016-05-19  9:06   ` Bin Meng
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 06/14] x86: qemu: move x86 specific operations out of " Miao Yan
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 07/14] x86: qemu: add comment about qfw register endianness Miao Yan
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 08/14] cmd: qfw: rename qemu_fw_cfg.[c|h] to qfw.[c|h] Miao Yan
2016-05-19  9:08   ` Bin Meng
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 09/14] cmd: qfw: do not require default macros when building qfw command Miao Yan
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 10/14] cmd: qfw: do not depend on x86 Miao Yan
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 11/14] cmd: qfw: bring ACPI generation code into qfw core Miao Yan
2016-05-19  9:08   ` Bin Meng
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 12/14] x86: qemu: rename qemu/acpi_table.c Miao Yan
2016-05-19  9:08   ` Bin Meng
2016-05-18  9:39 ` [U-Boot] [v2 PATCH 13/14] cmd: qfw: rename QEMU_FW_CFG to CMD_QFW Miao Yan
2016-05-19  9:08   ` Bin Meng
2016-05-20  2:07     ` Miao Yan
2016-05-20  2:30       ` Bin Meng
2016-05-20  2:43         ` Miao Yan
2016-05-18  9:40 ` [U-Boot] [v2 PATCH 14/14] config: sandbox: enable qfw and cmd_qfw for testing Miao Yan
2016-05-19  9:08   ` Bin Meng
2016-05-20  2:06     ` Miao Yan
2016-05-20  2:29       ` Bin Meng
2016-05-20  6:58         ` Miao Yan
2016-05-20  7:02           ` Bin Meng

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.