summaryrefslogtreecommitdiffstats
path: root/meta-openbmc-machines/meta-openpower/meta-ibm/meta-garrison/recipes-phosphor/skeleton/skeleton/0001-Add-power-control-support-for-the-Garrison-system.patch
blob: ac546553280d60c27ead8ad3b31aa9bb6052d9d5 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
From c2f1b1115f6a7f814a05622a33984f5a4797fede Mon Sep 17 00:00:00 2001
From: Brad Bishop <bradleyb@fuzziesquirrel.com>
Date: Wed, 15 Jun 2016 21:16:43 -0400
Subject: [PATCH] Add power control support for the Garrison system

Signed-off-by: Brad Bishop <bradleyb@fuzziesquirrel.com>
---
 op-pwrctl/power_control_obj.c | 70 +++++++++++++++++++++++++++++--------------
 1 file changed, 48 insertions(+), 22 deletions(-)

diff --git a/op-pwrctl/power_control_obj.c b/op-pwrctl/power_control_obj.c
index 85a8cff..f6bc996 100644
--- a/git/op-pwrctl/power_control_obj.c
+++ b/git/op-pwrctl/power_control_obj.c
@@ -17,11 +17,15 @@ static const gchar* instance_name = "power0";
 static const gchar* dbus_name = "org.openbmc.control.Power";
 
 //This object will use these GPIOs
-GPIO power_pin    = (GPIO){ "POWER_PIN" };
-GPIO pgood        = (GPIO){ "PGOOD" };
-GPIO usb_reset    = (GPIO){ "USB_RESET" };
-GPIO pcie_reset   = (GPIO){ "PCIE_RESET" };
-
+GPIO power_pin = (GPIO){ "BMC_POWER_UP" };
+GPIO pgood = (GPIO){ "SYS_PWROK_BUFF" };
+GPIO bmc_wd_clear_pulse_n = (GPIO){ "BMC_WD_CLEAR_PULSE_N" };
+GPIO cm1_oe_r_n = (GPIO){ "CM1_OE_R_N" };
+GPIO bmc_cp0_reset_n = (GPIO){ "BMC_CP0_RESET_N" };
+GPIO bmc_cfam_reset_n_r = (GPIO){ "BMC_CFAM_RESET_N_R" };
+GPIO pcie_reset = (GPIO){ "PEX8718_DEVICES_RESET_N" };
+GPIO cp0_devices_reset_n = (GPIO){ "CP0_DEVICES_RESET_N" };
+GPIO cp1_devices_reset_n = (GPIO){ "CP1_DEVICES_RESET_N" };
 
 static GDBusObjectManagerServer *manager = NULL;
 
@@ -67,27 +71,36 @@ poll_pgood(gpointer user_data)
 			{
 				control_power_emit_power_lost(control_power);
 				control_emit_goto_system_state(control,"HOST_POWERED_OFF");
-				rc = gpio_open(&pcie_reset);
-				rc = gpio_write(&pcie_reset,0);
-				gpio_close(&pcie_reset);
-
-				rc = gpio_open(&usb_reset);
-				rc = gpio_write(&usb_reset,0);
-				gpio_close(&usb_reset);
-
 			}
 			else
 			{
 				control_power_emit_power_good(control_power);
 				control_emit_goto_system_state(control,"HOST_POWERED_ON");
-				rc = gpio_open(&pcie_reset);
-				rc = gpio_write(&pcie_reset,1);
-				gpio_close(&pcie_reset);
-
-				rc = gpio_open(&usb_reset);
-				rc = gpio_write(&usb_reset,1);
-				gpio_close(&usb_reset);
 			}
+
+			gpio_open(&cm1_oe_r_n);
+			gpio_write(&cm1_oe_r_n, !gpio);
+			gpio_close(&cm1_oe_r_n);
+
+			gpio_open(&bmc_cp0_reset_n);
+			gpio_write(&bmc_cp0_reset_n, gpio);
+			gpio_close(&bmc_cp0_reset_n);
+
+			gpio_open(&bmc_cfam_reset_n_r);
+			gpio_write(&bmc_cfam_reset_n_r, gpio);
+			gpio_close(&bmc_cfam_reset_n_r);
+
+			gpio_open(&pcie_reset);
+			gpio_write(&pcie_reset, gpio);
+			gpio_close(&pcie_reset);
+
+			gpio_open(&cp0_devices_reset_n);
+			gpio_write(&cp0_devices_reset_n, gpio);
+			gpio_close(&cp0_devices_reset_n);
+
+			gpio_open(&cp1_devices_reset_n);
+			gpio_write(&cp1_devices_reset_n, gpio);
+			gpio_close(&cp1_devices_reset_n);
 		}
 	} else {
 		printf("ERROR PowerControl: GPIO read error (gpio=%s,rc=%d)\n",pgood.name,rc);
@@ -138,11 +151,13 @@ on_set_power_state(ControlPower *pwr,
 			} else {
 				control_emit_goto_system_state(control,"HOST_POWERING_OFF");
 			}
+
 			error = gpio_open(&power_pin);
 			if(error != GPIO_OK) { break;	}
-			error = gpio_write(&power_pin,!state);
+			error = gpio_write(&power_pin, state);
 			if(error != GPIO_OK) { break;	}
 			gpio_close(&power_pin);
+
 			control_power_set_state(pwr,state);
 		} while(0);
 		if(error != GPIO_OK)
@@ -230,10 +245,21 @@ on_bus_acquired(GDBusConnection *connection,
 		if(rc != GPIO_OK) { break; }
 		rc = gpio_init(connection,&pgood);
 		if(rc != GPIO_OK) { break; }
+		rc = gpio_init(connection,&bmc_wd_clear_pulse_n);
+		if(rc != GPIO_OK) { break; }
+		rc = gpio_init(connection,&cm1_oe_r_n);
+		if(rc != GPIO_OK) { break; }
+		rc = gpio_init(connection,&bmc_cp0_reset_n);
+		if(rc != GPIO_OK) { break; }
+		rc = gpio_init(connection,&bmc_cfam_reset_n_r);
+		if(rc != GPIO_OK) { break; }
 		rc = gpio_init(connection,&pcie_reset);
 		if(rc != GPIO_OK) { break; }
-		rc = gpio_init(connection,&usb_reset);
+		rc = gpio_init(connection,&cp0_devices_reset_n);
 		if(rc != GPIO_OK) { break; }
+		rc = gpio_init(connection,&cp1_devices_reset_n );
+		if(rc != GPIO_OK) { break; }
+
 
 		uint8_t gpio;
 		rc = gpio_open(&pgood);
-- 
2.1.4

OpenPOWER on IntegriCloud