diff options
author | Duncan Laurie <dlaurie@google.com> | 2020-05-27 12:32:30 -0700 |
---|---|---|
committer | Furquan Shaikh <furquan@google.com> | 2020-06-04 20:08:32 +0000 |
commit | e530d816ccf8b805ed1d4fd6e4fc757cbe61fa23 (patch) | |
tree | 0dca5029420ee049d30e86ebd0f2409c3873008d /src/drivers/uart/acpi/chip.h | |
parent | dccef0da0cba93c0cbd35a5916e76db0a8c1e0c4 (diff) |
drivers/uart/acpi: Add new device driver for UART attached devices
This driver generates an ACPI device object for a UART attached device
with all of the expected device support handlers like different interrupt
sources and power control GPIOs.
Example use:
chip drivers/uart/acpi
register "name" = ""UDEV""
register "desc" = ""UART Attached Device""
register "hid" = "ACPI_DT_NAMESPACE_HID"
register "compat_string" = ""google,cros-ec-uart""
register "irq_gpio" = "ACPI_GPIO_IRQ_LEVEL_LOW_WAKE(GPP_C20)"
register "uart" = "ACPI_UART_RAW_DEVICE(115200, 64)"
device generic 0 on end
end
Resulting in this ACPI device:
Device (UDEV)
{
Name (_HID, "PRP0001")
Name (_UID, Zero)
Name (_DDN, "UART Attached Device")
Method (_STA, 0, NotSerialized)
{
Return (0x0F)
}
Name (_CRS, ResourceTemplate ()
{
UartSerialBusV2 (0x0001C200, DataBitsEight, StopBitsOne,
0x00, LittleEndian, ParityTypeNone, FlowControlNone,
0x0040, 0x0040, "\\_SB.PCI0.UAR2",
0x00, ResourceConsumer, , Exclusive)
GpioInt (Level, ActiveLow, ExclusiveAndWake, PullDefault, 0x0000,
"\\_SB.PCI0.GPIO", 0x00, ResourceConsumer)
{
0x0114
}
})
Name (_DSD, Package (0x02)
{
ToUUID ("daffd814-6eba-4d8c-8a91-bc9bbf4aa301"),
Package (0x01)
{
Package (0x02)
{
"compatible",
"google,cros-ec-uart"
}
}
})
}
Change-Id: Idfd2d9d2ab6990a82ddd401734c0d9b1b0b8f82d
Signed-off-by: Duncan Laurie <dlaurie@google.com>
Reviewed-on: https://review.coreboot.org/c/coreboot/+/41793
Tested-by: build bot (Jenkins) <no-reply@coreboot.org>
Reviewed-by: Furquan Shaikh <furquan@google.com>
Reviewed-by: Paul Menzel <paulepanter@users.sourceforge.net>
Diffstat (limited to 'src/drivers/uart/acpi/chip.h')
-rw-r--r-- | src/drivers/uart/acpi/chip.h | 48 |
1 files changed, 48 insertions, 0 deletions
diff --git a/src/drivers/uart/acpi/chip.h b/src/drivers/uart/acpi/chip.h new file mode 100644 index 0000000000..03111650eb --- /dev/null +++ b/src/drivers/uart/acpi/chip.h @@ -0,0 +1,48 @@ +/* SPDX-License-Identifier: GPL-2.0-or-later */ + +#ifndef __DRIVERS_UART_ACPI_H__ +#define __DRIVERS_UART_ACPI_H__ + +#include <acpi/acpi_device.h> + +struct drivers_uart_acpi_config { + const char *hid; /* ACPI _HID (required) */ + const char *cid; /* ACPI _CID */ + const char *name; /* ACPI Device Name */ + const char *desc; /* Device Description */ + unsigned int uid; /* ACPI _UID */ + unsigned int wake; /* Wake GPE */ + const char *compat_string; /* Compatible string for _HID=PRP0001 */ + struct acpi_irq irq; /* PIRQ */ + struct acpi_gpio irq_gpio; /* GPIO to be used instead of PIRQ */ + struct acpi_uart uart; /* UART device information */ + + /* Disable reset and enable GPIO export in _CRS */ + bool disable_gpio_export_in_crs; + + /* Does the device have a power resource? */ + bool has_power_resource; + + /* GPIO used to take device out of reset or to put it into reset. */ + struct acpi_gpio reset_gpio; + /* Delay to be inserted after device is taken out of reset. */ + unsigned int reset_delay_ms; + /* Delay to be inserted after device is put into reset. */ + unsigned int reset_off_delay_ms; + + /* GPIO used to enable device. */ + struct acpi_gpio enable_gpio; + /* Delay to be inserted after device is enabled. */ + unsigned int enable_delay_ms; + /* Delay to be inserted after device is disabled. */ + unsigned int enable_off_delay_ms; + + /* GPIO used to stop operation of device. */ + struct acpi_gpio stop_gpio; + /* Delay to be inserted after disabling stop. */ + unsigned int stop_delay_ms; + /* Delay to be inserted after enabling stop. */ + unsigned int stop_off_delay_ms; +}; + +#endif /* __DRIVERS_UART_ACPI_H__ */ |