summaryrefslogtreecommitdiff
path: root/include
diff options
context:
space:
mode:
authorTom Rini <trini@konsulko.com>2020-11-06 16:41:49 +0300
committerTom Rini <trini@konsulko.com>2020-11-06 17:46:43 +0300
commitd062c1344cefb6c368b96efea4c2a20e63657b8d (patch)
tree56dcc373217bbcb248c35f7253c9478c1ba7e715 /include
parent71d3fa7efa4fc07e6f161c742397ddbe4466c631 (diff)
parente4f8e543f1a905857a753a1d411997a81f4f52aa (diff)
downloadu-boot-d062c1344cefb6c368b96efea4c2a20e63657b8d.tar.xz
Merge https://gitlab.denx.de/u-boot/custodians/u-boot-x86
- Add a new SMBIOS parser and enable it when booting from coreboot - Fix up various driver names to avoid dtoc warnings - Fully enable ACPI support on Google Chromebook Coral - Add a way to set SMBIOS properties using the devicetree - Update existing boards to use devicetree for SMBIOS using a new default sysinfo driver
Diffstat (limited to 'include')
-rw-r--r--include/acpi/acpi_table.h10
-rw-r--r--include/asm-generic/global_data.h13
-rw-r--r--include/bloblist.h2
-rw-r--r--include/configs/chromebook_coral.h9
-rw-r--r--include/dm/acpi.h9
-rw-r--r--include/dm/uclass-id.h2
-rw-r--r--include/linux/bitops.h4
-rw-r--r--include/log.h1
-rw-r--r--include/smbios.h32
-rw-r--r--include/sysinfo.h (renamed from include/board.h)80
10 files changed, 117 insertions, 45 deletions
diff --git a/include/acpi/acpi_table.h b/include/acpi/acpi_table.h
index abbca6530d..a28eb71f4d 100644
--- a/include/acpi/acpi_table.h
+++ b/include/acpi/acpi_table.h
@@ -688,6 +688,16 @@ int acpi_add_table(struct acpi_ctx *ctx, void *table);
*/
void acpi_setup_base_tables(struct acpi_ctx *ctx, void *start);
+/**
+ * acpi_write_rsdp() - Write out an RSDP indicating where the ACPI tables are
+ *
+ * @rsdp: Address to write RSDP
+ * @rsdt: Address of RSDT
+ * @xsdt: Address of XSDT
+ */
+void acpi_write_rsdp(struct acpi_rsdp *rsdp, struct acpi_rsdt *rsdt,
+ struct acpi_xsdt *xsdt);
+
#endif /* !__ACPI__*/
#include <asm/acpi_table.h>
diff --git a/include/asm-generic/global_data.h b/include/asm-generic/global_data.h
index f392043796..87d827d0f4 100644
--- a/include/asm-generic/global_data.h
+++ b/include/asm-generic/global_data.h
@@ -24,6 +24,7 @@
#include <membuff.h>
#include <linux/list.h>
+struct acpi_ctx;
struct driver_rt;
typedef struct global_data gd_t;
@@ -420,6 +421,12 @@ struct global_data {
*/
struct udevice *watchdog_dev;
#endif
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+ /**
+ * @acpi_ctx: ACPI context pointer
+ */
+ struct acpi_ctx *acpi_ctx;
+#endif
};
/**
@@ -452,6 +459,12 @@ struct global_data {
#define gd_dm_driver_rt() NULL
#endif
+#ifdef CONFIG_GENERATE_ACPI_TABLE
+#define gd_acpi_ctx() gd->acpi_ctx
+#else
+#define gd_acpi_ctx() NULL
+#endif
+
/**
* enum gd_flags - global data flags
*
diff --git a/include/bloblist.h b/include/bloblist.h
index 2b4b669689..8cdce61187 100644
--- a/include/bloblist.h
+++ b/include/bloblist.h
@@ -36,6 +36,8 @@ enum bloblist_tag_t {
BLOBLISTT_INTEL_VBT, /* Intel Video-BIOS table */
BLOBLISTT_TPM2_TCG_LOG, /* TPM v2 log space */
BLOBLISTT_TCPA_LOG, /* TPM log space */
+ BLOBLISTT_ACPI_TABLES, /* ACPI tables for x86 */
+ BLOBLISTT_SMBIOS_TABLES, /* SMBIOS tables for x86 */
BLOBLISTT_COUNT
};
diff --git a/include/configs/chromebook_coral.h b/include/configs/chromebook_coral.h
index a63c3c9eea..d4d32758e9 100644
--- a/include/configs/chromebook_coral.h
+++ b/include/configs/chromebook_coral.h
@@ -11,7 +11,14 @@
#define __CONFIG_H
#define CONFIG_BOOTCOMMAND \
- "fatload mmc 1:c 1000000 syslinux/vmlinuz.A; zboot 1000000"
+ "tpm init; tpm startup TPM2_SU_CLEAR; " \
+ "read mmc 2:2 100000 0 80; setexpr loader *001004f0; " \
+ "setexpr size *00100518; setexpr blocks $size / 200; " \
+ "read mmc 2:2 100000 80 $blocks; setexpr setup $loader - 1000; " \
+ "setexpr cmdline $loader - 2000; " \
+ "part uuid mmc 2:2 uuid; setenv bootargs_U $uuid; " \
+ "zboot start 100000 0 0 0 $setup $cmdline; " \
+ "zboot load; zboot setup; zboot dump; zboot go"
#include <configs/x86-common.h>
#include <configs/x86-chromebook.h>
diff --git a/include/dm/acpi.h b/include/dm/acpi.h
index e8b0336f6d..e6951b6a25 100644
--- a/include/dm/acpi.h
+++ b/include/dm/acpi.h
@@ -226,6 +226,15 @@ void acpi_dump_items(enum acpi_dump_option option);
*/
int acpi_get_path(const struct udevice *dev, char *out_path, int maxlen);
+/**
+ * acpi_reset_items() - Reset the list of ACPI items to empty
+ *
+ * This list keeps track of DSDT and SSDT items that are generated
+ * programmatically. The 'acpi items' command shows the list. Use this function
+ * to empty the list, before writing new items.
+ */
+void acpi_reset_items(void);
+
#endif /* __ACPI__ */
#endif
diff --git a/include/dm/uclass-id.h b/include/dm/uclass-id.h
index 17542de2f3..e952a9967c 100644
--- a/include/dm/uclass-id.h
+++ b/include/dm/uclass-id.h
@@ -36,7 +36,6 @@ enum uclass_id {
UCLASS_AUDIO_CODEC, /* Audio codec with control and data path */
UCLASS_AXI, /* AXI bus */
UCLASS_BLK, /* Block device */
- UCLASS_BOARD, /* Device information from hardware */
UCLASS_BOOTCOUNT, /* Bootcount backing store */
UCLASS_BUTTON, /* Button */
UCLASS_CACHE, /* Cache controller */
@@ -107,6 +106,7 @@ enum uclass_id {
UCLASS_SPI_GENERIC, /* Generic SPI flash target */
UCLASS_SPMI, /* System Power Management Interface bus */
UCLASS_SYSCON, /* System configuration device */
+ UCLASS_SYSINFO, /* Device information from hardware */
UCLASS_SYSRESET, /* System reset device */
UCLASS_TEE, /* Trusted Execution Environment device */
UCLASS_THERMAL, /* Thermal sensor */
diff --git a/include/linux/bitops.h b/include/linux/bitops.h
index 6b509dce58..16f28993f5 100644
--- a/include/linux/bitops.h
+++ b/include/linux/bitops.h
@@ -1,7 +1,7 @@
#ifndef _LINUX_BITOPS_H
#define _LINUX_BITOPS_H
-#ifndef USE_HOSTCC
+#if !defined(USE_HOSTCC) && !defined(__ASSEMBLY__)
#include <asm/types.h>
#include <asm-generic/bitsperlong.h>
@@ -218,6 +218,6 @@ static inline void generic_clear_bit(int nr, volatile unsigned long *addr)
*p &= ~mask;
}
-#endif /* !USE_HOSTCC */
+#endif /* !USE_HOSTCC && !__ASSEMBLY__ */
#endif
diff --git a/include/log.h b/include/log.h
index 4d0692f155..29f18a82dc 100644
--- a/include/log.h
+++ b/include/log.h
@@ -96,6 +96,7 @@ enum log_category_t {
LOGC_DEVRES,
/** @LOGC_ACPI: Advanced Configuration and Power Interface (ACPI) */
LOGC_ACPI,
+ LOGC_BOOT, /* Related to boot process / boot image processing */
/** @LOGC_COUNT: Number of log categories */
LOGC_COUNT,
diff --git a/include/smbios.h b/include/smbios.h
index 97b9ddce23..1846607c3c 100644
--- a/include/smbios.h
+++ b/include/smbios.h
@@ -8,6 +8,8 @@
#ifndef _SMBIOS_H_
#define _SMBIOS_H_
+#include <dm/ofnode.h>
+
/* SMBIOS spec version implemented */
#define SMBIOS_MAJOR_VER 3
#define SMBIOS_MINOR_VER 0
@@ -222,9 +224,10 @@ static inline void fill_smbios_header(void *table, int type,
*
* @addr: start address to write the structure
* @handle: the structure's handle, a unique 16-bit number
+ * @node: node containing the information to write (ofnode_null() if none)
* @return: size of the structure
*/
-typedef int (*smbios_write_type)(ulong *addr, int handle);
+typedef int (*smbios_write_type)(ulong *addr, int handle, ofnode node);
/**
* write_smbios_table() - Write SMBIOS table
@@ -237,4 +240,31 @@ typedef int (*smbios_write_type)(ulong *addr, int handle);
*/
ulong write_smbios_table(ulong addr);
+/**
+ * smbios_entry() - Get a valid struct smbios_entry pointer
+ *
+ * @address: address where smbios tables is located
+ * @size: size of smbios table
+ * @return: NULL or a valid pointer to a struct smbios_entry
+ */
+const struct smbios_entry *smbios_entry(u64 address, u32 size);
+
+/**
+ * smbios_header() - Search for SMBIOS header type
+ *
+ * @entry: pointer to a struct smbios_entry
+ * @type: SMBIOS type
+ * @return: NULL or a valid pointer to a struct smbios_header
+ */
+const struct smbios_header *smbios_header(const struct smbios_entry *entry, int type);
+
+/**
+ * smbios_string() - Return string from SMBIOS
+ *
+ * @header: pointer to struct smbios_header
+ * @index: string index
+ * @return: NULL or a valid const char pointer
+ */
+const char *smbios_string(const struct smbios_header *header, int index);
+
#endif /* _SMBIOS_H_ */
diff --git a/include/board.h b/include/sysinfo.h
index 678b652b0a..c045d316b0 100644
--- a/include/board.h
+++ b/include/sysinfo.h
@@ -6,23 +6,23 @@
/*
* This uclass encapsulates hardware methods to gather information about a
- * board or a specific device such as hard-wired GPIOs on GPIO expanders,
+ * sysinfo or a specific device such as hard-wired GPIOs on GPIO expanders,
* read-only data in flash ICs, or similar.
*
* The interface offers functions to read the usual standard data types (bool,
* int, string) from the device, each of which is identified by a static
* numeric ID (which will usually be defined as a enum in a header file).
*
- * If for example the board had a read-only serial number flash IC, we could
+ * If for example the sysinfo had a read-only serial number flash IC, we could
* call
*
- * ret = board_detect(dev);
+ * ret = sysinfo_detect(dev);
* if (ret) {
- * debug("board device not found.");
+ * debug("sysinfo device not found.");
* return ret;
* }
*
- * ret = board_get_int(dev, ID_SERIAL_NUMBER, &serial);
+ * ret = sysinfo_get_int(dev, ID_SERIAL_NUMBER, &serial);
* if (ret) {
* debug("Error when reading serial number from device.");
* return ret;
@@ -31,8 +31,8 @@
* to read the serial number.
*/
-#if CONFIG_IS_ENABLED(BOARD)
-struct board_ops {
+#if CONFIG_IS_ENABLED(SYSINFO)
+struct sysinfo_ops {
/**
* detect() - Run the hardware info detection procedure for this
* device.
@@ -50,7 +50,7 @@ struct board_ops {
/**
* get_bool() - Read a specific bool data value that describes the
* hardware setup.
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @id: A unique identifier for the bool value to be read.
* @val: Pointer to a buffer that receives the value read.
*
@@ -61,7 +61,7 @@ struct board_ops {
/**
* get_int() - Read a specific int data value that describes the
* hardware setup.
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @id: A unique identifier for the int value to be read.
* @val: Pointer to a buffer that receives the value read.
*
@@ -72,7 +72,7 @@ struct board_ops {
/**
* get_str() - Read a specific string data value that describes the
* hardware setup.
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @id: A unique identifier for the string value to be read.
* @size: The size of the buffer to receive the string data.
* @val: Pointer to a buffer that receives the value read.
@@ -87,7 +87,7 @@ struct board_ops {
* detection. A classic use-case would when DTBOs are used to describe
* additionnal daughter cards.
*
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @index: Index of the image. Starts at 0 and gets incremented
* after each call to this function.
* @type: The type of image. For example, "fdt" for DTBs
@@ -100,70 +100,70 @@ struct board_ops {
const char *type, const char **strp);
};
-#define board_get_ops(dev) ((struct board_ops *)(dev)->driver->ops)
+#define sysinfo_get_ops(dev) ((struct sysinfo_ops *)(dev)->driver->ops)
/**
- * board_detect() - Run the hardware info detection procedure for this device.
+ * sysinfo_detect() - Run the hardware info detection procedure for this device.
*
* @dev: The device containing the information
*
* Return: 0 if OK, -ve on error.
*/
-int board_detect(struct udevice *dev);
+int sysinfo_detect(struct udevice *dev);
/**
- * board_get_bool() - Read a specific bool data value that describes the
+ * sysinfo_get_bool() - Read a specific bool data value that describes the
* hardware setup.
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @id: A unique identifier for the bool value to be read.
* @val: Pointer to a buffer that receives the value read.
*
* Return: 0 if OK, -ve on error.
*/
-int board_get_bool(struct udevice *dev, int id, bool *val);
+int sysinfo_get_bool(struct udevice *dev, int id, bool *val);
/**
- * board_get_int() - Read a specific int data value that describes the
+ * sysinfo_get_int() - Read a specific int data value that describes the
* hardware setup.
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @id: A unique identifier for the int value to be read.
* @val: Pointer to a buffer that receives the value read.
*
* Return: 0 if OK, -ve on error.
*/
-int board_get_int(struct udevice *dev, int id, int *val);
+int sysinfo_get_int(struct udevice *dev, int id, int *val);
/**
- * board_get_str() - Read a specific string data value that describes the
+ * sysinfo_get_str() - Read a specific string data value that describes the
* hardware setup.
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @id: A unique identifier for the string value to be read.
* @size: The size of the buffer to receive the string data.
* @val: Pointer to a buffer that receives the value read.
*
* Return: 0 if OK, -ve on error.
*/
-int board_get_str(struct udevice *dev, int id, size_t size, char *val);
+int sysinfo_get_str(struct udevice *dev, int id, size_t size, char *val);
/**
- * board_get() - Return the board device for the board in question.
- * @devp: Pointer to structure to receive the board device.
+ * sysinfo_get() - Return the sysinfo device for the sysinfo in question.
+ * @devp: Pointer to structure to receive the sysinfo device.
*
- * Since there can only be at most one board instance, the API can supply a
+ * Since there can only be at most one sysinfo instance, the API can supply a
* function that returns the unique device. This is especially useful for use
- * in board files.
+ * in sysinfo files.
*
* Return: 0 if OK, -ve on error.
*/
-int board_get(struct udevice **devp);
+int sysinfo_get(struct udevice **devp);
/**
- * board_get_fit_loadable - Get the name of an image to load from FIT
+ * sysinfo_get_fit_loadable - Get the name of an image to load from FIT
* This function can be used to provide the image names based on runtime
* detection. A classic use-case would when DTBOs are used to describe
* additionnal daughter cards.
*
- * @dev: The board instance to gather the data.
+ * @dev: The sysinfo instance to gather the data.
* @index: Index of the image. Starts at 0 and gets incremented
* after each call to this function.
* @type: The type of image. For example, "fdt" for DTBs
@@ -173,39 +173,39 @@ int board_get(struct udevice **devp);
* Return: 0 if OK, -ENOENT if no loadable is available else -ve on
* error.
*/
-int board_get_fit_loadable(struct udevice *dev, int index,
- const char *type, const char **strp);
+int sysinfo_get_fit_loadable(struct udevice *dev, int index, const char *type,
+ const char **strp);
#else
-static inline int board_detect(struct udevice *dev)
+static inline int sysinfo_detect(struct udevice *dev)
{
return -ENOSYS;
}
-static inline int board_get_bool(struct udevice *dev, int id, bool *val)
+static inline int sysinfo_get_bool(struct udevice *dev, int id, bool *val)
{
return -ENOSYS;
}
-static inline int board_get_int(struct udevice *dev, int id, int *val)
+static inline int sysinfo_get_int(struct udevice *dev, int id, int *val)
{
return -ENOSYS;
}
-static inline int board_get_str(struct udevice *dev, int id, size_t size,
- char *val)
+static inline int sysinfo_get_str(struct udevice *dev, int id, size_t size,
+ char *val)
{
return -ENOSYS;
}
-static inline int board_get(struct udevice **devp)
+static inline int sysinfo_get(struct udevice **devp)
{
return -ENOSYS;
}
-static inline int board_get_fit_loadable(struct udevice *dev, int index,
- const char *type, const char **strp)
+static inline int sysinfo_get_fit_loadable(struct udevice *dev, int index,
+ const char *type, const char **strp)
{
return -ENOSYS;
}