summaryrefslogtreecommitdiffstats
path: root/op-pwrctl
diff options
context:
space:
mode:
authorLei YU <mine260309@gmail.com>2016-11-22 01:47:47 +0800
committerPatrick Williams <patrick@stwcx.xyz>2017-01-12 04:34:57 +0000
commit75a18a232ea7fe25b9a3b0b5b02c202fa0b300ea (patch)
tree51935becc538a6033aa884b4a7cddf0715d69ecb /op-pwrctl
parentf35a7ddf30c27b796b969acc9f125b82e2de89bf (diff)
downloadtalos-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.c64
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);
}
/*----------------------------------------------------------------*/
OpenPOWER on IntegriCloud