diff options
author | Lei YU <mine260309@gmail.com> | 2016-11-22 01:47:47 +0800 |
---|---|---|
committer | Patrick Williams <patrick@stwcx.xyz> | 2017-01-12 04:34:57 +0000 |
commit | 75a18a232ea7fe25b9a3b0b5b02c202fa0b300ea (patch) | |
tree | 51935becc538a6033aa884b4a7cddf0715d69ecb /op-pwrctl | |
parent | f35a7ddf30c27b796b969acc9f125b82e2de89bf (diff) | |
download | talos-skeleton-75a18a232ea7fe25b9a3b0b5b02c202fa0b300ea.tar.gz talos-skeleton-75a18a232ea7fe25b9a3b0b5b02c202fa0b300ea.zip |
GPIO abstraction for power and host control
In libopenbmc_intf/power_gpio.c there are GPIO abstractions for power
related GPIOs.
Host control related GPIOs need to do the same abstraction.
The changes include:
1. Add host control related GPIOs in gpio_configs and update
system_manager.py
2. Update control_host_obj.c to use the abstracted GPIOs
3. Update GPIO_CONFIGS for all machines and add host control related
GPIOs
power_gpio will be renamed to gpio_configs in next commit;
Resolves openbmc/openbmc#814
Change-Id: I7832065d495d7d64c5df2f5b177005b97e68900a
Signed-off-by: Lei YU <mine260309@gmail.com>
Diffstat (limited to 'op-pwrctl')
-rw-r--r-- | op-pwrctl/power_control_obj.c | 64 |
1 files changed, 32 insertions, 32 deletions
diff --git a/op-pwrctl/power_control_obj.c b/op-pwrctl/power_control_obj.c index 9cf8ce4..493b588 100644 --- a/op-pwrctl/power_control_obj.c +++ b/op-pwrctl/power_control_obj.c @@ -19,7 +19,7 @@ static const gchar* dbus_name = "org.openbmc.control.Power"; static int g_pci_reset_held = 1; -static PowerGpio g_power_gpio; +static GpioConfigs g_gpio_configs; static GDBusObjectManagerServer *manager = NULL; @@ -52,14 +52,14 @@ poll_pgood(gpointer user_data) } uint8_t pgood_state; - int rc = gpio_open(&g_power_gpio.power_good_in); + int rc = gpio_open(&g_gpio_configs.power_gpio.power_good_in); if(rc != GPIO_OK) { g_print("ERROR PowerControl: GPIO open error (gpio=%s,rc=%d)\n", - g_power_gpio.power_good_in.name, rc); + g_gpio_configs.power_gpio.power_good_in.name, rc); return FALSE; } - rc = gpio_read(&g_power_gpio.power_good_in, &pgood_state); - gpio_close(&g_power_gpio.power_good_in); + rc = gpio_read(&g_gpio_configs.power_gpio.power_good_in, &pgood_state); + gpio_close(&g_gpio_configs.power_gpio.power_good_in); if(rc == GPIO_OK) { //if changed, set property and emit signal @@ -80,9 +80,9 @@ poll_pgood(gpointer user_data) control_emit_goto_system_state(control,"HOST_POWERED_ON"); } - for(i = 0; i < g_power_gpio.num_reset_outs; i++) + for(i = 0; i < g_gpio_configs.power_gpio.num_reset_outs; i++) { - GPIO *reset_out = &g_power_gpio.reset_outs[i]; + GPIO *reset_out = &g_gpio_configs.power_gpio.reset_outs[i]; rc = gpio_open(reset_out); if(rc != GPIO_OK) { @@ -91,23 +91,23 @@ poll_pgood(gpointer user_data) continue; } - reset_state = pgood_state ^ g_power_gpio.reset_pols[i]; + reset_state = pgood_state ^ g_gpio_configs.power_gpio.reset_pols[i]; g_print("PowerControl: pgood: %d, setting reset %s to %d\n", - (int)pgood_state, reset_out->name, (int)reset_state); + (int)pgood_state, reset_out->name, (int)reset_state); gpio_write(reset_out, reset_state); gpio_close(reset_out); } - for(i = 0; i < g_power_gpio.num_pci_reset_outs; i++) + for(i = 0; i < g_gpio_configs.power_gpio.num_pci_reset_outs; i++) { - GPIO *pci_reset_out = &g_power_gpio.pci_reset_outs[i]; + GPIO *pci_reset_out = &g_gpio_configs.power_gpio.pci_reset_outs[i]; if(pgood_state == 1) { /* * When powering on, hold PCI reset until * the processor can forward clocks and control reset. */ - if(g_power_gpio.pci_reset_holds[i]) + if(g_gpio_configs.power_gpio.pci_reset_holds[i]) { g_print("Holding pci reset: %s\n", pci_reset_out->name); continue; @@ -121,16 +121,16 @@ poll_pgood(gpointer user_data) continue; } - reset_state = pgood_state ^ g_power_gpio.pci_reset_pols[i]; + reset_state = pgood_state ^ g_gpio_configs.power_gpio.pci_reset_pols[i]; g_print("PowerControl: pgood: %d, setting pci reset %s to %d\n", - (int)pgood_state, pci_reset_out->name, (int)reset_state); + (int)pgood_state, pci_reset_out->name, (int)reset_state); gpio_write(pci_reset_out, reset_state); gpio_close(pci_reset_out); } } } else { g_print("ERROR PowerControl: GPIO read error (gpio=%s,rc=%d)\n", - g_power_gpio.power_good_in.name, rc); + g_gpio_configs.power_gpio.power_good_in.name, rc); //return false so poll won't get called anymore return FALSE; } @@ -177,23 +177,23 @@ on_boot_progress(GDBusConnection *connection, if(strcmp(boot_progress, "FW Progress, Baseboard Init") == 0) return; - rc = gpio_open(&g_power_gpio.power_good_in); + rc = gpio_open(&g_gpio_configs.power_gpio.power_good_in); if(rc != GPIO_OK) { g_print("ERROR PowerControl: on_boot_progress(): GPIO open error (gpio=%s,rc=%d)\n", - g_power_gpio.power_good_in.name, rc); + g_gpio_configs.power_gpio.power_good_in.name, rc); return; } - rc = gpio_read(&g_power_gpio.power_good_in, &pgood_state); - gpio_close(&g_power_gpio.power_good_in); + rc = gpio_read(&g_gpio_configs.power_gpio.power_good_in, &pgood_state); + gpio_close(&g_gpio_configs.power_gpio.power_good_in); if(rc != GPIO_OK || pgood_state != 1) return; - for(i = 0; i < g_power_gpio.num_pci_reset_outs; i++) + for(i = 0; i < g_gpio_configs.power_gpio.num_pci_reset_outs; i++) { - GPIO *pci_reset_out = &g_power_gpio.pci_reset_outs[i]; + GPIO *pci_reset_out = &g_gpio_configs.power_gpio.pci_reset_outs[i]; - if(!g_power_gpio.pci_reset_holds[i]) + if(!g_gpio_configs.power_gpio.pci_reset_holds[i]) continue; rc = gpio_open(pci_reset_out); if(rc != GPIO_OK) @@ -203,9 +203,9 @@ on_boot_progress(GDBusConnection *connection, continue; } - reset_state = pgood_state ^ g_power_gpio.pci_reset_pols[i]; + reset_state = pgood_state ^ g_gpio_configs.power_gpio.pci_reset_pols[i]; g_print("PowerControl: pgood: %d, setting pci reset %s to %d\n", - (int)pgood_state, pci_reset_out->name, (int)reset_state); + (int)pgood_state, pci_reset_out->name, (int)reset_state); gpio_write(pci_reset_out, reset_state); gpio_close(pci_reset_out); g_print("Released pci reset: %s - %s\n", pci_reset_out->name, boot_progress); @@ -244,17 +244,17 @@ on_set_power_state(ControlPower *pwr, } else { control_emit_goto_system_state(control,"HOST_POWERING_OFF"); } - for (i = 0; i < g_power_gpio.num_power_up_outs; i++) { - GPIO *power_pin = &g_power_gpio.power_up_outs[i]; + for (i = 0; i < g_gpio_configs.power_gpio.num_power_up_outs; i++) { + GPIO *power_pin = &g_gpio_configs.power_gpio.power_up_outs[i]; error = gpio_open(power_pin); if(error != GPIO_OK) { g_print("ERROR PowerControl: GPIO open error (gpio=%s,rc=%d)\n", - g_power_gpio.power_up_outs[i].name, error); + g_gpio_configs.power_gpio.power_up_outs[i].name, error); continue; } - power_up_out = state ^ !g_power_gpio.power_up_pols[i]; + power_up_out = state ^ !g_gpio_configs.power_gpio.power_up_pols[i]; g_print("PowerControl: setting power up %s to %d\n", - g_power_gpio.power_up_outs[i].name, (int)power_up_out); + g_gpio_configs.power_gpio.power_up_outs[i].name, (int)power_up_out); error = gpio_write(power_pin, power_up_out); if(error != GPIO_OK) { continue; @@ -429,11 +429,11 @@ on_bus_acquired(GDBusConnection *connection, g_dbus_object_manager_server_export(manager, G_DBUS_OBJECT_SKELETON(object)); g_object_unref(object); - if(read_power_gpio(connection, &g_power_gpio) != TRUE) { + if(read_gpios(connection, &g_gpio_configs) != TRUE) { g_print("ERROR PowerControl: could not read power GPIO configuration\n"); } - int rc = set_up_gpio(connection, &g_power_gpio, control_power); + int rc = set_up_gpio(connection, &g_gpio_configs.power_gpio, control_power); if(rc != GPIO_OK) { g_print("ERROR PowerControl: GPIO setup (rc=%d)\n",rc); } @@ -462,7 +462,7 @@ on_name_lost(GDBusConnection *connection, const gchar *name, gpointer user_data) { - free_power_gpio(&g_power_gpio); + free_gpios(&g_gpio_configs); } /*----------------------------------------------------------------*/ |