mirror of
https://source.denx.de/u-boot/u-boot.git
synced 2026-06-13 15:03:58 +03:00
Merge branch 'next' of https://gitlab.denx.de/u-boot/custodians/u-boot-x86 into next
- Enhance the 'zboot' command to be more like 'bootm' with sub-commands - The last series of ACPI core changes for programmatic generation of ACPI tables - Add all required ACPI tables for ApolloLake and enable ACPIGEN on Chromebook Coral - A feature minor enhancements to the 'hob' command - Intel edison: Support for writing an xFSTK image via binman
This commit is contained in:
@@ -10,7 +10,9 @@
|
||||
#define __ACPI_DEVICE_H
|
||||
|
||||
#include <i2c.h>
|
||||
#include <irq.h>
|
||||
#include <spi.h>
|
||||
#include <asm-generic/gpio.h>
|
||||
#include <linux/bitops.h>
|
||||
|
||||
struct acpi_ctx;
|
||||
@@ -28,6 +30,9 @@ struct udevice;
|
||||
/* Length of a full path to an ACPI device */
|
||||
#define ACPI_PATH_MAX 30
|
||||
|
||||
/* UUID for an I2C _DSM method */
|
||||
#define ACPI_DSM_I2C_HID_UUID "3cdff6f7-4267-4555-ad05-b30a3d8938de"
|
||||
|
||||
/* Values that can be returned for ACPI device _STA method */
|
||||
enum acpi_dev_status {
|
||||
ACPI_DSTATUS_PRESENT = BIT(0),
|
||||
@@ -165,6 +170,28 @@ enum acpi_gpio_polarity {
|
||||
* @io_shared; true if GPIO is shared
|
||||
* @io_restrict: I/O restriction setting
|
||||
* @polarity: GPIO polarity
|
||||
*
|
||||
* Note that GpioIo doesn't have any means of Active Low / High setting, so a
|
||||
* _DSD must be provided to mitigate this.
|
||||
*
|
||||
* GpioIo doesn't properly communicate the initial state of the output pin,
|
||||
* thus Linux assumes the simple rule:
|
||||
*
|
||||
* Pull Bias Polarity Requested...
|
||||
*
|
||||
* Implicit x AS IS (assumed firmware configured for us)
|
||||
* Explicit x (no _DSD) as Pull Bias (Up == High, Down == Low),
|
||||
* assuming non-active (Polarity = !Pull Bias)
|
||||
*
|
||||
* Down Low as low, assuming active
|
||||
* Down High as high, assuming non-active
|
||||
* Up Low as high, assuming non-active
|
||||
* Up High as high, assuming active
|
||||
*
|
||||
* GpioIo() can be used as interrupt and in this case the IoRestriction mustn't
|
||||
* be OutputOnly. It also requires active_low flag from _DSD in cases where it's
|
||||
* needed (better to always provide than rely on above assumption made on OS
|
||||
* level).
|
||||
*/
|
||||
struct acpi_gpio {
|
||||
int pin_count;
|
||||
@@ -232,6 +259,59 @@ struct acpi_spi {
|
||||
const char *resource;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_i2c_priv - Information read from device tree
|
||||
*
|
||||
* This is used by devices which want to specify various pieces of ACPI
|
||||
* information, including power control. It allows a generic function to
|
||||
* generate the information for ACPI, based on device-tree properties.
|
||||
*
|
||||
* @disable_gpio_export_in_crs: Don't export GPIOs in the CRS
|
||||
* @reset_gpio: GPIO used to assert reset to the device
|
||||
* @enable_gpio: GPIO used to enable the device
|
||||
* @stop_gpio: GPIO used to stop the device
|
||||
* @irq_gpio: GPIO used for interrupt (if @irq is not used)
|
||||
* @irq: IRQ used for interrupt (if @irq_gpio is not used)
|
||||
* @hid: _HID value for device (required)
|
||||
* @uid: _UID value for device
|
||||
* @desc: _DDN value for device
|
||||
* @wake: Wake event, e.g. GPE0_DW1_15; 0 if none
|
||||
* @property_count: Number of other DSD properties (currently always 0)
|
||||
* @probed: true set set 'linux,probed' property
|
||||
* @compat_string: Device tree compatible string to report through ACPI
|
||||
* @has_power_resource: true if this device has a power resource
|
||||
* @reset_delay_ms: Delay after de-asserting reset, in ms
|
||||
* @reset_off_delay_ms: Delay after asserting reset (during power off)
|
||||
* @enable_delay_ms: Delay after asserting enable
|
||||
* @enable_off_delay_ms: Delay after de-asserting enable (during power off)
|
||||
* @stop_delay_ms: Delay after de-aserting stop
|
||||
* @stop_off_delay_ms: Delay after asserting stop (during power off)
|
||||
* @hid_desc_reg_offset: HID register offset (for Human Interface Devices)
|
||||
*/
|
||||
struct acpi_i2c_priv {
|
||||
bool disable_gpio_export_in_crs;
|
||||
struct gpio_desc reset_gpio;
|
||||
struct gpio_desc enable_gpio;
|
||||
struct gpio_desc irq_gpio;
|
||||
struct gpio_desc stop_gpio;
|
||||
struct irq irq;
|
||||
const char *hid;
|
||||
u32 uid;
|
||||
const char *desc;
|
||||
u32 wake;
|
||||
u32 property_count;
|
||||
bool probed;
|
||||
const char *compat_string;
|
||||
bool has_power_resource;
|
||||
u32 reset_delay_ms;
|
||||
u32 reset_off_delay_ms;
|
||||
u32 enable_delay_ms;
|
||||
u32 enable_off_delay_ms;
|
||||
u32 stop_delay_ms;
|
||||
u32 stop_off_delay_ms;
|
||||
u32 hid_desc_reg_offset;
|
||||
};
|
||||
|
||||
/**
|
||||
* acpi_device_path() - Get the full path to an ACPI device
|
||||
*
|
||||
@@ -319,10 +399,21 @@ int acpi_device_write_gpio_desc(struct acpi_ctx *ctx,
|
||||
int acpi_device_write_interrupt_or_gpio(struct acpi_ctx *ctx,
|
||||
struct udevice *dev, const char *prop);
|
||||
|
||||
/**
|
||||
* acpi_device_write_dsm_i2c_hid() - Write a device-specific method for HID
|
||||
*
|
||||
* This writes a DSM for an I2C Human-Interface Device based on the config
|
||||
* provided
|
||||
*
|
||||
* @hid_desc_reg_offset: HID register offset
|
||||
*/
|
||||
int acpi_device_write_dsm_i2c_hid(struct acpi_ctx *ctx,
|
||||
int hid_desc_reg_offset);
|
||||
|
||||
/**
|
||||
* acpi_device_write_i2c_dev() - Write an I2C device to ACPI
|
||||
*
|
||||
* This creates a I2cSerialBus descriptor for an I2C device, including
|
||||
* This creates a I2cSerialBusV2 descriptor for an I2C device, including
|
||||
* information ACPI needs to use it.
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
|
||||
@@ -221,7 +221,7 @@ struct acpi_dp *acpi_dp_add_child(struct acpi_dp *dp, const char *name,
|
||||
*/
|
||||
struct acpi_dp *acpi_dp_add_gpio(struct acpi_dp *dp, const char *name,
|
||||
const char *ref, int index, int pin,
|
||||
enum acpi_irq_polarity polarity);
|
||||
enum acpi_gpio_polarity polarity);
|
||||
|
||||
/**
|
||||
* acpi_dp_write() - Write Device Property hierarchy and clean up resources
|
||||
|
||||
@@ -28,6 +28,10 @@
|
||||
#define SLP_TYP_S4 6
|
||||
#define SLP_TYP_S5 7
|
||||
|
||||
/* PM1_STS register */
|
||||
#define RTC_EN BIT(10)
|
||||
#define PWRBTN_EN BIT(8)
|
||||
|
||||
/* Memory size reserved for S3 resume */
|
||||
#define S3_RESERVE_SIZE 0x1000
|
||||
|
||||
|
||||
@@ -13,18 +13,23 @@
|
||||
#ifndef __ACPI_TABLE_H__
|
||||
#define __ACPI_TABLE_H__
|
||||
|
||||
#include <linux/bitops.h>
|
||||
#include <dm/acpi.h>
|
||||
|
||||
#define RSDP_SIG "RSD PTR " /* RSDP pointer signature */
|
||||
#define OEM_ID "U-BOOT" /* U-Boot */
|
||||
#define OEM_TABLE_ID "U-BOOTBL" /* U-Boot Table */
|
||||
#define ASLC_ID "INTL" /* Intel ASL Compiler */
|
||||
|
||||
/* TODO(sjg@chromium.org): Figure out how to get compiler revision */
|
||||
#define ASL_REVISION 0
|
||||
|
||||
#define ACPI_RSDP_REV_ACPI_1_0 0
|
||||
#define ACPI_RSDP_REV_ACPI_2_0 2
|
||||
|
||||
#if !defined(__ACPI__)
|
||||
|
||||
#include <linux/bitops.h>
|
||||
|
||||
struct acpi_ctx;
|
||||
|
||||
/*
|
||||
@@ -45,7 +50,7 @@ struct acpi_rsdp {
|
||||
|
||||
/* Generic ACPI header, provided by (almost) all tables */
|
||||
struct __packed acpi_table_header {
|
||||
char signature[4]; /* ACPI signature (4 ASCII characters) */
|
||||
char signature[ACPI_NAME_LEN]; /* ACPI signature (4 ASCII chars) */
|
||||
u32 length; /* Table length in bytes (incl. header) */
|
||||
u8 revision; /* Table version (not ACPI version!) */
|
||||
volatile u8 checksum; /* To make sum of entire table == 0 */
|
||||
@@ -56,6 +61,15 @@ struct __packed acpi_table_header {
|
||||
u32 aslc_revision; /* ASL compiler revision number */
|
||||
};
|
||||
|
||||
struct acpi_gen_regaddr {
|
||||
u8 space_id; /* Address space ID */
|
||||
u8 bit_width; /* Register size in bits */
|
||||
u8 bit_offset; /* Register bit offset */
|
||||
u8 access_size; /* Access size */
|
||||
u32 addrl; /* Register address, low 32 bits */
|
||||
u32 addrh; /* Register address, high 32 bits */
|
||||
};
|
||||
|
||||
/* A maximum number of 32 ACPI tables ought to be enough for now */
|
||||
#define MAX_ACPI_TABLES 32
|
||||
|
||||
@@ -71,6 +85,34 @@ struct acpi_xsdt {
|
||||
u64 entry[MAX_ACPI_TABLES];
|
||||
};
|
||||
|
||||
/* HPET timers */
|
||||
struct __packed acpi_hpet {
|
||||
struct acpi_table_header header;
|
||||
u32 id;
|
||||
struct acpi_gen_regaddr addr;
|
||||
u8 number;
|
||||
u16 min_tick;
|
||||
u8 attributes;
|
||||
};
|
||||
|
||||
struct __packed acpi_tpm2 {
|
||||
struct acpi_table_header header;
|
||||
u16 platform_class;
|
||||
u8 reserved[2];
|
||||
u64 control_area;
|
||||
u32 start_method;
|
||||
u8 msp[12];
|
||||
u32 laml;
|
||||
u64 lasa;
|
||||
};
|
||||
|
||||
struct __packed acpi_tcpa {
|
||||
struct acpi_table_header header;
|
||||
u16 platform_class;
|
||||
u32 laml;
|
||||
u64 lasa;
|
||||
};
|
||||
|
||||
/* FADT Preferred Power Management Profile */
|
||||
enum acpi_pm_profile {
|
||||
ACPI_PM_UNSPECIFIED = 0,
|
||||
@@ -138,15 +180,6 @@ enum acpi_address_space_size {
|
||||
ACPI_ACCESS_SIZE_QWORD_ACCESS
|
||||
};
|
||||
|
||||
struct acpi_gen_regaddr {
|
||||
u8 space_id; /* Address space ID */
|
||||
u8 bit_width; /* Register size in bits */
|
||||
u8 bit_offset; /* Register bit offset */
|
||||
u8 access_size; /* Access size */
|
||||
u32 addrl; /* Register address, low 32 bits */
|
||||
u32 addrh; /* Register address, high 32 bits */
|
||||
};
|
||||
|
||||
/* FADT (Fixed ACPI Description Table) */
|
||||
struct __packed acpi_fadt {
|
||||
struct acpi_table_header header;
|
||||
@@ -232,7 +265,7 @@ struct __packed acpi_fadt {
|
||||
|
||||
/* FACS (Firmware ACPI Control Structure) */
|
||||
struct acpi_facs {
|
||||
char signature[4]; /* "FACS" */
|
||||
char signature[ACPI_NAME_LEN]; /* "FACS" */
|
||||
u32 length; /* Length in bytes (>= 64) */
|
||||
u32 hardware_signature; /* Hardware signature */
|
||||
u32 firmware_waking_vector; /* Firmware waking vector */
|
||||
@@ -364,6 +397,49 @@ struct acpi_csrt_shared_info {
|
||||
u32 max_block_size;
|
||||
};
|
||||
|
||||
/* Port types for ACPI _UPC object */
|
||||
enum acpi_upc_type {
|
||||
UPC_TYPE_A,
|
||||
UPC_TYPE_MINI_AB,
|
||||
UPC_TYPE_EXPRESSCARD,
|
||||
UPC_TYPE_USB3_A,
|
||||
UPC_TYPE_USB3_B,
|
||||
UPC_TYPE_USB3_MICRO_B,
|
||||
UPC_TYPE_USB3_MICRO_AB,
|
||||
UPC_TYPE_USB3_POWER_B,
|
||||
UPC_TYPE_C_USB2_ONLY,
|
||||
UPC_TYPE_C_USB2_SS_SWITCH,
|
||||
UPC_TYPE_C_USB2_SS,
|
||||
UPC_TYPE_PROPRIETARY = 0xff,
|
||||
/*
|
||||
* The following types are not directly defined in the ACPI
|
||||
* spec but are used by coreboot to identify a USB device type.
|
||||
*/
|
||||
UPC_TYPE_INTERNAL = 0xff,
|
||||
UPC_TYPE_UNUSED,
|
||||
UPC_TYPE_HUB
|
||||
};
|
||||
|
||||
enum dev_scope_type {
|
||||
SCOPE_PCI_ENDPOINT = 1,
|
||||
SCOPE_PCI_SUB = 2,
|
||||
SCOPE_IOAPIC = 3,
|
||||
SCOPE_MSI_HPET = 4,
|
||||
SCOPE_ACPI_NAMESPACE_DEVICE = 5
|
||||
};
|
||||
|
||||
struct __packed dev_scope {
|
||||
u8 type;
|
||||
u8 length;
|
||||
u8 reserved[2];
|
||||
u8 enumeration;
|
||||
u8 start_bus;
|
||||
struct {
|
||||
u8 dev;
|
||||
u8 fn;
|
||||
} __packed path[0];
|
||||
};
|
||||
|
||||
enum dmar_type {
|
||||
DMAR_DRHD = 0,
|
||||
DMAR_RMRR = 1,
|
||||
@@ -435,6 +511,29 @@ struct __packed acpi_dmar {
|
||||
|
||||
#define ACPI_DBG2_UNKNOWN 0x00FF
|
||||
|
||||
/* DBG2: Microsoft Debug Port Table 2 header */
|
||||
struct __packed acpi_dbg2_header {
|
||||
struct acpi_table_header header;
|
||||
u32 devices_offset;
|
||||
u32 devices_count;
|
||||
};
|
||||
|
||||
/* DBG2: Microsoft Debug Port Table 2 device entry */
|
||||
struct __packed acpi_dbg2_device {
|
||||
u8 revision;
|
||||
u16 length;
|
||||
u8 address_count;
|
||||
u16 namespace_string_length;
|
||||
u16 namespace_string_offset;
|
||||
u16 oem_data_length;
|
||||
u16 oem_data_offset;
|
||||
u16 port_type;
|
||||
u16 port_subtype;
|
||||
u8 reserved[2];
|
||||
u16 base_address_offset;
|
||||
u16 address_size_offset;
|
||||
};
|
||||
|
||||
/* SPCR (Serial Port Console Redirection table) */
|
||||
struct __packed acpi_spcr {
|
||||
struct acpi_table_header header;
|
||||
@@ -509,6 +608,23 @@ int acpi_get_table_revision(enum acpi_tables table);
|
||||
*/
|
||||
int acpi_create_dmar(struct acpi_dmar *dmar, enum dmar_flags flags);
|
||||
|
||||
/**
|
||||
* acpi_create_dbg2() - Create a DBG2 table
|
||||
*
|
||||
* This table describes how to access the debug UART
|
||||
*
|
||||
* @dbg2: Place to put information
|
||||
* @port_type: Serial port type (see ACPI_DBG2_...)
|
||||
* @port_subtype: Serial port sub-type (see ACPI_DBG2_...)
|
||||
* @address: ACPI address of port
|
||||
* @address_size: Size of address space
|
||||
* @device_path: Path of device (created using acpi_device_path())
|
||||
*/
|
||||
void acpi_create_dbg2(struct acpi_dbg2_header *dbg2,
|
||||
int port_type, int port_subtype,
|
||||
struct acpi_gen_regaddr *address, uint32_t address_size,
|
||||
const char *device_path);
|
||||
|
||||
/**
|
||||
* acpi_fill_header() - Set up a new table header
|
||||
*
|
||||
|
||||
@@ -10,8 +10,10 @@
|
||||
#ifndef __ACPI_ACPIGEN_H
|
||||
#define __ACPI_ACPIGEN_H
|
||||
|
||||
#include <acpi/acpi_table.h>
|
||||
#include <linux/types.h>
|
||||
|
||||
struct acpi_cstate;
|
||||
struct acpi_ctx;
|
||||
struct acpi_gen_regaddr;
|
||||
struct acpi_gpio;
|
||||
@@ -52,15 +54,88 @@ enum {
|
||||
LOCAL5_OP = 0x65,
|
||||
LOCAL6_OP = 0x66,
|
||||
LOCAL7_OP = 0x67,
|
||||
ARG0_OP = 0x68,
|
||||
ARG1_OP = 0x69,
|
||||
ARG2_OP = 0x6a,
|
||||
ARG3_OP = 0x6b,
|
||||
ARG4_OP = 0x6c,
|
||||
ARG5_OP = 0x6d,
|
||||
ARG6_OP = 0x6e,
|
||||
STORE_OP = 0x70,
|
||||
AND_OP = 0x7b,
|
||||
OR_OP = 0x7d,
|
||||
NOT_OP = 0x80,
|
||||
DEVICE_OP = 0x82,
|
||||
PROCESSOR_OP = 0x83,
|
||||
POWER_RES_OP = 0x84,
|
||||
NOTIFY_OP = 0x86,
|
||||
LEQUAL_OP = 0x93,
|
||||
TO_BUFFER_OP = 0x96,
|
||||
TO_INTEGER_OP = 0x99,
|
||||
IF_OP = 0xa0,
|
||||
ELSE_OP = 0xa1,
|
||||
RETURN_OP = 0xa4,
|
||||
};
|
||||
|
||||
/**
|
||||
* enum psd_coord - Coordination types for P-states
|
||||
*
|
||||
* The type of coordination that exists (hardware) or is required (software) as
|
||||
* a result of the underlying hardware dependency
|
||||
*/
|
||||
enum psd_coord {
|
||||
SW_ALL = 0xfc,
|
||||
SW_ANY = 0xfd,
|
||||
HW_ALL = 0xfe
|
||||
};
|
||||
|
||||
/**
|
||||
* enum csd_coord - Coordination types for C-states
|
||||
*
|
||||
* The type of coordination that exists (hardware) or is required (software) as
|
||||
* a result of the underlying hardware dependency
|
||||
*/
|
||||
enum csd_coord {
|
||||
CSD_HW_ALL = 0xfe,
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_cstate - Information about a C-State
|
||||
*
|
||||
* @ctype: C State type (1=C1, 2=C2, 3=C3)
|
||||
* @latency: Worst-case latency to enter and exit the C State (in uS)
|
||||
* @power: Average power consumption of the processor when in this C-State (mW)
|
||||
* @resource: Register to read to place the processor in this state
|
||||
*/
|
||||
struct acpi_cstate {
|
||||
uint ctype;
|
||||
uint latency;
|
||||
uint power;
|
||||
struct acpi_gen_regaddr resource;
|
||||
};
|
||||
|
||||
/**
|
||||
* struct acpi_tstate - Information about a Throttling Supported State
|
||||
*
|
||||
* See ACPI v6.3 section 8.4.5.2: _TSS (Throttling Supported States)
|
||||
*
|
||||
* @percent: Percent of the core CPU operating frequency that will be
|
||||
* available when this throttling state is invoked
|
||||
* @power: Throttling state’s maximum power dissipation (mw)
|
||||
* @latency: Worst-case latency (uS) that the CPU is unavailable during a
|
||||
* transition from any throttling state to this throttling state
|
||||
* @control: Value to be written to the Processor Control Register
|
||||
* (THROTTLE_CTRL) to initiate a transition to this throttling state
|
||||
* @status: Value in THROTTLE_STATUS when in this state
|
||||
*/
|
||||
struct acpi_tstate {
|
||||
uint percent;
|
||||
uint power;
|
||||
uint latency;
|
||||
uint control;
|
||||
uint status;
|
||||
};
|
||||
|
||||
/**
|
||||
* acpigen_get_current() - Get the current ACPI code output pointer
|
||||
*
|
||||
@@ -563,4 +638,344 @@ int acpigen_set_enable_tx_gpio(struct acpi_ctx *ctx, u32 tx_state_val,
|
||||
const char *dw0_read, const char *dw0_write,
|
||||
struct acpi_gpio *gpio, bool enable);
|
||||
|
||||
/**
|
||||
* acpigen_write_prw() - Write a power resource for wake (_PRW)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @wake: GPE that wakes up the device
|
||||
* @level: Deepest power system sleeping state that can be entered while still
|
||||
* providing wake functionality
|
||||
*/
|
||||
void acpigen_write_prw(struct acpi_ctx *ctx, uint wake, uint level);
|
||||
|
||||
/**
|
||||
* acpigen_write_if() - Write an If block
|
||||
*
|
||||
* This requires a call to acpigen_pop_len() to complete the block
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_if(struct acpi_ctx *ctx);
|
||||
|
||||
/**
|
||||
* acpigen_write_if_lequal_op_int() - Write comparison between op and integer
|
||||
*
|
||||
* Generates ACPI code for checking if operand1 and operand2 are equal
|
||||
*
|
||||
* If (Lequal (op, val))
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @op: Operand to check
|
||||
* @val: Value to check against
|
||||
*/
|
||||
void acpigen_write_if_lequal_op_int(struct acpi_ctx *ctx, uint op, u64 val);
|
||||
|
||||
/**
|
||||
* acpigen_write_else() - Write an Ef block
|
||||
*
|
||||
* This requires a call to acpigen_pop_len() to complete the block
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_else(struct acpi_ctx *ctx);
|
||||
|
||||
/**
|
||||
* acpigen_write_to_buffer() - Write a ToBuffer operation
|
||||
*
|
||||
* E.g.: to generate: ToBuffer (Arg0, Local0)
|
||||
* use acpigen_write_to_buffer(ctx, ARG0_OP, LOCAL0_OP)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @src: Source argument
|
||||
* @dst: Destination argument
|
||||
*/
|
||||
void acpigen_write_to_buffer(struct acpi_ctx *ctx, uint src, uint dst);
|
||||
|
||||
/**
|
||||
* acpigen_write_to_integer() - Write a ToInteger operation
|
||||
*
|
||||
* E.g.: to generate: ToInteger (Arg0, Local0)
|
||||
* use acpigen_write_to_integer(ctx, ARG0_OP, LOCAL0_OP)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @src: Source argument
|
||||
* @dst: Destination argument
|
||||
*/
|
||||
void acpigen_write_to_integer(struct acpi_ctx *ctx, uint src, uint dst);
|
||||
|
||||
/**
|
||||
* acpigen_write_return_byte_buffer() - Write a return of a byte buffer
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @arr: Array of bytes to return
|
||||
* @size: Number of bytes
|
||||
*/
|
||||
void acpigen_write_return_byte_buffer(struct acpi_ctx *ctx, u8 *arr,
|
||||
size_t size);
|
||||
|
||||
/**
|
||||
* acpigen_write_return_singleton_buffer() - Write a return of a 1-byte buffer
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @arg: Byte to return
|
||||
*/
|
||||
void acpigen_write_return_singleton_buffer(struct acpi_ctx *ctx, uint arg);
|
||||
|
||||
/**
|
||||
* acpigen_write_return_byte() - Write a return of a byte
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @arg: Byte to return
|
||||
*/
|
||||
void acpigen_write_return_byte(struct acpi_ctx *ctx, uint arg);
|
||||
|
||||
/**
|
||||
* acpigen_write_dsm_start() - Start a _DSM method
|
||||
*
|
||||
* Generate ACPI AML code to start the _DSM method.
|
||||
*
|
||||
* The functions need to be called in the correct sequence as below.
|
||||
*
|
||||
* Within the <generate-code-here> region, Local0 and Local1 must be are left
|
||||
* untouched, but Local2-Local7 can be used
|
||||
*
|
||||
* Arguments passed into _DSM method:
|
||||
* Arg0 = UUID
|
||||
* Arg1 = Revision
|
||||
* Arg2 = Function index
|
||||
* Arg3 = Function-specific arguments
|
||||
*
|
||||
* AML code generated looks like this:
|
||||
* Method (_DSM, 4, Serialized) { -- acpigen_write_dsm_start)
|
||||
* ToBuffer (Arg0, Local0)
|
||||
* If (LEqual (Local0, ToUUID(uuid))) { -- acpigen_write_dsm_uuid_start
|
||||
* ToInteger (Arg2, Local1)
|
||||
* If (LEqual (Local1, 0)) { -- acpigen_write_dsm_uuid_start_cond
|
||||
* <generate-code-here>
|
||||
* } -- acpigen_write_dsm_uuid_end_cond
|
||||
* ...
|
||||
* If (LEqual (Local1, n)) { -- acpigen_write_dsm_uuid_start_cond
|
||||
* <generate-code-here>
|
||||
* } -- acpigen_write_dsm_uuid_end_cond
|
||||
* Return (Buffer (One) { 0x0 })
|
||||
* } -- acpigen_write_dsm_uuid_end
|
||||
* ...
|
||||
* If (LEqual (Local0, ToUUID(uuidn))) {
|
||||
* ...
|
||||
* }
|
||||
* Return (Buffer (One) { 0x0 }) -- acpigen_write_dsm_end
|
||||
* }
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_dsm_start(struct acpi_ctx *ctx);
|
||||
|
||||
/**
|
||||
* acpigen_write_dsm_uuid_start() - Start a new UUID block
|
||||
*
|
||||
* This starts generation of code to handle a particular UUID:
|
||||
*
|
||||
* If (LEqual (Local0, ToUUID(uuid))) {
|
||||
* ToInteger (Arg2, Local1)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
int acpigen_write_dsm_uuid_start(struct acpi_ctx *ctx, const char *uuid);
|
||||
|
||||
/**
|
||||
* acpigen_write_dsm_uuid_start_cond() - Start a new condition block
|
||||
*
|
||||
* This starts generation of condition-checking code to handle a particular
|
||||
* function:
|
||||
*
|
||||
* If (LEqual (Local1, i))
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_dsm_uuid_start_cond(struct acpi_ctx *ctx, int seq);
|
||||
|
||||
/**
|
||||
* acpigen_write_dsm_uuid_end_cond() - Start a new condition block
|
||||
*
|
||||
* This ends generation of condition-checking code to handle a particular
|
||||
* function:
|
||||
*
|
||||
* }
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_dsm_uuid_end_cond(struct acpi_ctx *ctx);
|
||||
|
||||
/**
|
||||
* acpigen_write_dsm_uuid_end() - End a UUID block
|
||||
*
|
||||
* This ends generation of code to handle a particular UUID:
|
||||
*
|
||||
* Return (Buffer (One) { 0x0 })
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_dsm_uuid_end(struct acpi_ctx *ctx);
|
||||
|
||||
/**
|
||||
* acpigen_write_dsm_end() - End a _DSM method
|
||||
*
|
||||
* This ends generates of the _DSM block:
|
||||
*
|
||||
* Return (Buffer (One) { 0x0 })
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_dsm_end(struct acpi_ctx *ctx);
|
||||
|
||||
/**
|
||||
* acpigen_write_processor() - Write a Processor package
|
||||
*
|
||||
* This emits a Processor package header with the required information. The
|
||||
* caller must complete the information and call acpigen_pop_len() at the end
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @cpuindex: CPU number
|
||||
* @pblock_addr: PBlk system IO address
|
||||
* @pblock_len: PBlk length
|
||||
*/
|
||||
void acpigen_write_processor(struct acpi_ctx *ctx, uint cpuindex,
|
||||
u32 pblock_addr, uint pblock_len);
|
||||
|
||||
/**
|
||||
* acpigen_write_processor_package() - Write a package containing the processors
|
||||
*
|
||||
* The package containins the name of each processor in the SoC
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @name: Package name (.e.g "PPKG")
|
||||
* @first_core: Number of the first core (e.g. 0)
|
||||
* @core_count: Number of cores (e.g. 4)
|
||||
*/
|
||||
void acpigen_write_processor_package(struct acpi_ctx *ctx, const char *name,
|
||||
uint first_core, uint core_count);
|
||||
|
||||
/**
|
||||
* acpigen_write_processor_cnot() - Write a processor notification method
|
||||
*
|
||||
* This writes a method that notifies all CPU cores
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @num_cores: Number of CPU cores
|
||||
*/
|
||||
void acpigen_write_processor_cnot(struct acpi_ctx *ctx, const uint num_cores);
|
||||
|
||||
/**
|
||||
* acpigen_write_ppc() - generates a function returning max P-states
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @num_pstates: Number of pstates to return
|
||||
*/
|
||||
void acpigen_write_ppc(struct acpi_ctx *ctx, uint num_pstates);
|
||||
|
||||
/**
|
||||
* acpigen_write_ppc() - generates a function returning PPCM
|
||||
*
|
||||
* This returns the maximum number of supported P-states, as saved in the
|
||||
* variable PPCM
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
*/
|
||||
void acpigen_write_ppc_nvs(struct acpi_ctx *ctx);
|
||||
|
||||
/**
|
||||
* acpigen_write_tpc() - Write a _TPC method that returns the TPC limit
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @gnvs_tpc_limit: Variable that holds the TPC limit
|
||||
*/
|
||||
void acpigen_write_tpc(struct acpi_ctx *ctx, const char *gnvs_tpc_limit);
|
||||
|
||||
/**
|
||||
* acpigen_write_pss_package() - Write a PSS package
|
||||
*
|
||||
* See ACPI v6.3 section 8.4.6: Processor Performance Control
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @corefreq: CPU core frequency in MHz
|
||||
* @translat: worst-case latency in uS that the CPU is unavailable during a
|
||||
* transition from any performance state to this performance state
|
||||
* @busmlat: worst-case latency in microseconds that Bus Masters are prevented
|
||||
* from accessing memory during a transition from any performance state to
|
||||
* this performance state
|
||||
* @control: Value to write to PERF_CTRL to move to this performance state
|
||||
* @status: Expected PERF_STATUS value when in this state
|
||||
*/
|
||||
void acpigen_write_pss_package(struct acpi_ctx *ctx, uint corefreq, uint power,
|
||||
uint translat, uint busmlat, uint control,
|
||||
uint status);
|
||||
|
||||
/**
|
||||
* acpigen_write_psd_package() - Write a PSD package
|
||||
*
|
||||
* Writes a P-State dependency package
|
||||
*
|
||||
* See ACPI v6.3 section 8.4.6.5: _PSD (P-State Dependency)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @domain: Dependency domain number to which this P state entry belongs
|
||||
* @numprocs: Number of processors belonging to the domain for this logical
|
||||
* processor’s P-states
|
||||
* @coordtype: Coordination type
|
||||
*/
|
||||
void acpigen_write_psd_package(struct acpi_ctx *ctx, uint domain, uint numprocs,
|
||||
enum psd_coord coordtype);
|
||||
|
||||
/**
|
||||
* acpigen_write_cst_package() - Write a _CST package
|
||||
*
|
||||
* See ACPI v6.3 section 8.4.2.1: _CST (C States)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @entry: Array of entries
|
||||
* @nentries; Number of entries
|
||||
*/
|
||||
void acpigen_write_cst_package(struct acpi_ctx *ctx,
|
||||
const struct acpi_cstate *entry, int nentries);
|
||||
|
||||
/**
|
||||
* acpigen_write_csd_package() - Write a _CSD Package
|
||||
*
|
||||
* See ACPI v6.3 section 8.4.2.2: _CSD (C-State Dependency)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @domain: dependency domain number to which this C state entry belongs
|
||||
* @numprocs: number of processors belonging to the domain for the particular
|
||||
* C-state
|
||||
* @coordtype: Co-ordination type
|
||||
* @index: Index of the C-State entry in the _CST object for which the
|
||||
* dependency applies
|
||||
*/
|
||||
void acpigen_write_csd_package(struct acpi_ctx *ctx, uint domain, uint numprocs,
|
||||
enum csd_coord coordtype, uint index);
|
||||
|
||||
/**
|
||||
* acpigen_write_tss_package() - Write a _TSS package
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @entry: Entries to write
|
||||
* @nentries: Number of entries to write
|
||||
*/
|
||||
void acpigen_write_tss_package(struct acpi_ctx *ctx,
|
||||
struct acpi_tstate *entry, int nentries);
|
||||
|
||||
/**
|
||||
* acpigen_write_tsd_package() - Write a _TSD package
|
||||
*
|
||||
* See ACPI v6.3 section 8.4.5.4: _TSD (T-State Dependency)
|
||||
*
|
||||
* @ctx: ACPI context pointer
|
||||
* @domain: dependency domain number to which this T state entry belongs
|
||||
* @numprocs: Number of processors belonging to the domain for this logical
|
||||
* processor’s T-states
|
||||
* @coordtype: Coordination type
|
||||
*/
|
||||
void acpigen_write_tsd_package(struct acpi_ctx *ctx, uint domain, uint numprocs,
|
||||
enum psd_coord coordtype);
|
||||
|
||||
#endif
|
||||
|
||||
@@ -27,6 +27,14 @@ enum bloblist_tag_t {
|
||||
BLOBLISTT_SPL_HANDOFF, /* Hand-off info from SPL */
|
||||
BLOBLISTT_VBOOT_CTX, /* Chromium OS verified boot context */
|
||||
BLOBLISTT_VBOOT_HANDOFF, /* Chromium OS internal handoff info */
|
||||
/*
|
||||
* Advanced Configuration and Power Interface Global Non-Volatile
|
||||
* Sleeping table. This forms part of the ACPI tables passed to Linux.
|
||||
*/
|
||||
BLOBLISTT_ACPI_GNVS,
|
||||
BLOBLISTT_INTEL_VBT, /* Intel Video-BIOS table */
|
||||
BLOBLISTT_TPM2_TCG_LOG, /* TPM v2 log space */
|
||||
BLOBLISTT_TCPA_LOG, /* TPM log space */
|
||||
};
|
||||
|
||||
/**
|
||||
|
||||
@@ -58,6 +58,12 @@ enum i2c_address_mode {
|
||||
I2C_MODE_10_BIT
|
||||
};
|
||||
|
||||
/** enum i2c_device_t - Types of I2C devices, used for compatible strings */
|
||||
enum i2c_device_t {
|
||||
I2C_DEVICE_GENERIC,
|
||||
I2C_DEVICE_HID_OVER_I2C,
|
||||
};
|
||||
|
||||
struct udevice;
|
||||
/**
|
||||
* struct dm_i2c_chip - information about an i2c chip
|
||||
@@ -558,6 +564,23 @@ int i2c_emul_find(struct udevice *dev, struct udevice **emulp);
|
||||
*/
|
||||
struct udevice *i2c_emul_get_device(struct udevice *emul);
|
||||
|
||||
/* ACPI operations for generic I2C devices */
|
||||
extern struct acpi_ops i2c_acpi_ops;
|
||||
|
||||
/**
|
||||
* acpi_i2c_ofdata_to_platdata() - Read properties intended for ACPI
|
||||
*
|
||||
* This reads the generic I2C properties from the device tree, so that these
|
||||
* can be used to create ACPI information for the device.
|
||||
*
|
||||
* See the i2c/generic-acpi.txt binding file for information about the
|
||||
* properties.
|
||||
*
|
||||
* @dev: I2C device to process
|
||||
* @return 0 if OK, -EINVAL if acpi,hid is not present
|
||||
*/
|
||||
int acpi_i2c_ofdata_to_platdata(struct udevice *dev);
|
||||
|
||||
#ifndef CONFIG_DM_I2C
|
||||
|
||||
/*
|
||||
|
||||
@@ -10,6 +10,12 @@
|
||||
/* Port Id lives in bits 23:16 and register offset lives in 15:0 of address */
|
||||
#define PCR_PORTID_SHIFT 16
|
||||
|
||||
#if !defined(__ACPI__)
|
||||
|
||||
/* These registers contain IOAPIC and HPET devfn */
|
||||
#define PCH_P2SB_IBDF 0x6c
|
||||
#define PCH_P2SB_HBDF 0x70
|
||||
|
||||
/**
|
||||
* struct p2sb_child_platdata - Information about each child of a p2sb device
|
||||
*
|
||||
@@ -164,4 +170,6 @@ int p2sb_get_port_id(struct udevice *dev);
|
||||
*/
|
||||
void *pcr_reg_address(struct udevice *dev, uint offset);
|
||||
|
||||
#endif /* !__ACPI__ */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -6,7 +6,7 @@
|
||||
#ifndef __ACPI_PMC_H
|
||||
#define __ACPI_PMC_H
|
||||
|
||||
#ifndef __ACPI__
|
||||
#ifndef __ASSEMBLY__
|
||||
|
||||
enum {
|
||||
GPE0_REG_MAX = 4,
|
||||
@@ -194,6 +194,6 @@ void pmc_dump_info(struct udevice *dev);
|
||||
*/
|
||||
int pmc_gpe_init(struct udevice *dev);
|
||||
|
||||
#endif /* !__ACPI__ */
|
||||
#endif /* !__ASSEMBLY__ */
|
||||
|
||||
#endif
|
||||
|
||||
@@ -13,8 +13,6 @@
|
||||
#ifndef _VIDEO_H_
|
||||
#define _VIDEO_H_
|
||||
|
||||
#ifdef CONFIG_DM_VIDEO
|
||||
|
||||
#include <stdio_dev.h>
|
||||
|
||||
struct udevice;
|
||||
@@ -140,6 +138,7 @@ struct video_ops {
|
||||
*/
|
||||
int video_reserve(ulong *addrp);
|
||||
|
||||
#ifdef CONFIG_DM_VIDEO
|
||||
/**
|
||||
* video_clear() - Clear a device's frame buffer to background color.
|
||||
*
|
||||
@@ -147,6 +146,7 @@ int video_reserve(ulong *addrp);
|
||||
* @return 0
|
||||
*/
|
||||
int video_clear(struct udevice *dev);
|
||||
#endif /* CONFIG_DM_VIDEO */
|
||||
|
||||
/**
|
||||
* video_sync() - Sync a device's frame buffer with its hardware
|
||||
@@ -243,8 +243,6 @@ static inline int video_sync_copy(struct udevice *dev, void *from, void *to)
|
||||
}
|
||||
#endif
|
||||
|
||||
#endif /* CONFIG_DM_VIDEO */
|
||||
|
||||
#ifndef CONFIG_DM_VIDEO
|
||||
|
||||
/* Video functions */
|
||||
|
||||
Reference in New Issue
Block a user