[coreboot-gerrit] Patch set updated for coreboot: arch/x86/acpigen: Add support for interacting with GPIOs

Furquan Shaikh (furquan@google.com) gerrit at coreboot.org
Sat Oct 22 05:06:35 CEST 2016


Furquan Shaikh (furquan at google.com) just uploaded a new patch set to gerrit, which you can find at https://review.coreboot.org/17080

-gerrit

commit 139e272fa560c3262802c85fefc08b66374ff2b1
Author: Furquan Shaikh <furquan at chromium.org>
Date:   Thu Oct 20 07:12:49 2016 -0700

    arch/x86/acpigen: Add support for interacting with GPIOs
    
    Since reading/toggling of GPIOs is platform-dependent task, provide an
    interface with common functions to generate ACPI AML code for
    manipulating GPIOs:
    1. acpigen_soc_read_rx_gpio
    2. acpigen_soc_get_tx_gpio
    3. acpigen_soc_set_tx_gpio
    4. acpigen_soc_clear_tx_gpio
    
    Provide weak implementations of above functions. These functions are
    expected to be implemented by every SoC that uses ACPI. This allows
    drivers to easily generate ACPI AML code to interact GPIOs.
    
    BUG=chrome-os-partner:55988
    
    Change-Id: I3564f15a1cb50e6ca6132638447529648589aa0e
    Signed-off-by: Furquan Shaikh <furquan at chromium.org>
---
 src/arch/x86/acpigen.c              | 29 +++++++++++++++++++++++++++++
 src/arch/x86/include/arch/acpigen.h | 22 ++++++++++++++++++++++
 2 files changed, 51 insertions(+)

diff --git a/src/arch/x86/acpigen.c b/src/arch/x86/acpigen.c
index e0e957a..0a57263 100644
--- a/src/arch/x86/acpigen.c
+++ b/src/arch/x86/acpigen.c
@@ -992,3 +992,32 @@ void acpigen_write_else(void)
 	acpigen_emit_byte(ELSE_OP);
 	acpigen_write_len_f();
 }
+
+/* Soc-implemented functions -- weak definitions. */
+int __attribute__((weak)) acpigen_soc_read_rx_gpio(unsigned int gpio_num)
+{
+	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
+	acpigen_write_debug_string("read_rx_gpio not available");
+	return -1;
+}
+
+int __attribute__((weak)) acpigen_soc_get_tx_gpio(unsigned int gpio_num)
+{
+	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
+	acpigen_write_debug_string("get_tx_gpio not available");
+	return -1;
+}
+
+int __attribute__((weak)) acpigen_soc_set_tx_gpio(unsigned int gpio_num)
+{
+	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
+	acpigen_write_debug_string("set_tx_gpio not available");
+	return -1;
+}
+
+int __attribute__((weak)) acpigen_soc_clear_tx_gpio(unsigned int gpio_num)
+{
+	printk(BIOS_ERR, "ERROR: %s not implemented\n", __func__);
+	acpigen_write_debug_string("clear_tx_gpio not available");
+	return -1;
+}
diff --git a/src/arch/x86/include/arch/acpigen.h b/src/arch/x86/include/arch/acpigen.h
index c2936e2..0c515da 100644
--- a/src/arch/x86/include/arch/acpigen.h
+++ b/src/arch/x86/include/arch/acpigen.h
@@ -160,4 +160,26 @@ void acpigen_write_else(void);
 
 int get_cst_entries(acpi_cstate_t **);
 
+/*
+ * Soc-implemented functions for generating ACPI AML code for GPIO handling. All
+ * these functions are expected to use only Local5, Local6 and Local7
+ * variables. If the functions call into another ACPI method, then there is no
+ * restriction on the use of Local variables. In case of get/read functions,
+ * return value is expected to be stored in Local0 variable.
+ *
+ * All functions return 0 on success and -1 on error.
+ */
+
+/* Generate ACPI AML code to return Rx value of GPIO in Local0. */
+int acpigen_soc_read_rx_gpio(unsigned int gpio_num);
+
+/* Generate ACPI AML code to return Tx value of GPIO in Local0. */
+int acpigen_soc_get_tx_gpio(unsigned int gpio_num);
+
+/* Generate ACPI AML code to set Tx value of GPIO to 1. */
+int acpigen_soc_set_tx_gpio(unsigned int gpio_num);
+
+/* Generate ACPI AML code to set Tx value of GPIO to 0. */
+int acpigen_soc_clear_tx_gpio(unsigned int gpio_num);
+
 #endif



More information about the coreboot-gerrit mailing list