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>
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 int g_pci_reset_held = 1;
-static PowerGpio g_power_gpio;
+static GpioConfigs g_gpio_configs;
static GDBusObjectManagerServer *manager = NULL;
@@ -52,14 +52,14 @@
}
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 @@
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 @@
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 @@
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 @@
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 @@
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 @@
} 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 @@
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 @@
const gchar *name,
gpointer user_data)
{
- free_power_gpio(&g_power_gpio);
+ free_gpios(&g_gpio_configs);
}
/*----------------------------------------------------------------*/