Skip to content

Commit 526d6c9

Browse files
committed
PD add more response logging to wait_for_ack
to see when we might incorrectly process a response cleanup formatting Signed-off-by: Kieran Levin <ktl@frame.work>
1 parent 3307d16 commit 526d6c9

File tree

1 file changed

+32
-11
lines changed

1 file changed

+32
-11
lines changed

zephyr/program/lotus/src/cypress_pd_common.c

Lines changed: 32 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -203,8 +203,7 @@ int cypd_wait_for_ack(int controller, int timeout_ms)
203203
timestamp_t start = get_time();
204204

205205
/* wait for interrupt ack to be asserted */
206-
do
207-
{
206+
do {
208207
if (gpio_pin_get_dt(intr) == 0)
209208
break;
210209
usleep(100);
@@ -226,6 +225,7 @@ static int cypd_write_reg8_wait_ack(int controller, int reg, int data)
226225
int cmd_port = -1;
227226
int ack_mask = 0;
228227
int expected_ack_mask = 0;
228+
const struct gpio_dt_spec *intr = gpio_get_dt_spec(pd_chip_config[controller].gpio);
229229

230230
if (reg < 0x1000) {
231231
expected_ack_mask = CCG_DEV_INTR;
@@ -238,6 +238,20 @@ static int cypd_write_reg8_wait_ack(int controller, int reg, int data)
238238
cmd_port = 1;
239239
}
240240

241+
if (gpio_pin_get_dt(intr) == 0) {
242+
/* we may have a pending interrupt */
243+
rv = cypd_get_int(controller, &intr_status);
244+
CPRINTS("%s pre 0x%x ", __func__, intr_status);
245+
if (intr_status & CCG_DEV_INTR) {
246+
rv = cypd_read_reg16(controller, CCG_RESPONSE_REG, &event);
247+
if (event < 0x80) {
248+
cypd_clear_int(controller, CCG_DEV_INTR);
249+
}
250+
usleep(50);
251+
}
252+
}
253+
254+
241255
rv = cypd_write_reg8(controller, reg, data);
242256
if (rv != EC_SUCCESS)
243257
CPRINTS("Write Reg8 0x%x fail!", reg);
@@ -268,6 +282,12 @@ static int cypd_write_reg8_wait_ack(int controller, int reg, int data)
268282
} else {
269283
CPRINTS("%s C:%d Unexpected response 0x%x to reg 0x%x",
270284
__func__, controller, intr_status, reg);
285+
rv = cypd_read_reg16(controller, CCG_RESPONSE_REG, &event);
286+
CPRINTS("Dev 0x%x", event);
287+
rv = cypd_read_reg16(controller, CCG_PORT_PD_RESPONSE_REG(0), &event);
288+
CPRINTS("P0 0x%x", event);
289+
rv = cypd_read_reg16(controller, CCG_PORT_PD_RESPONSE_REG(1), &event);
290+
CPRINTS("P1 0x%x", event);
271291
}
272292

273293
/* only clear response code let main task handle event code */
@@ -1246,11 +1266,12 @@ static void perform_error_recovery(int controller)
12461266
for (i = 0; i < 2; i++) {
12471267
if (!((controller*2 + i) == prev_charge_port &&
12481268
battery_get_disconnect_state() != BATTERY_NOT_DISCONNECTED)) {
1249-
data[0] = PORT_TO_CONTROLLER_PORT(i);
1250-
cypd_write_reg_block(PORT_TO_CONTROLLER(i),
1251-
CCG_DPM_CMD_REG,
1252-
data, 2);
1253-
}
1269+
1270+
data[0] = PORT_TO_CONTROLLER_PORT(i);
1271+
cypd_write_reg_block(PORT_TO_CONTROLLER(i),
1272+
CCG_DPM_CMD_REG,
1273+
data, 2);
1274+
}
12541275
}
12551276
else {
12561277
/* Hard reset all ports that are not supplying power in dead battery mode */
@@ -1657,9 +1678,9 @@ void cypd_port_int(int controller, int port)
16571678
case CCG_RESPONSE_HARD_RESET_RX:
16581679
case CCG_RESPONSE_TYPE_C_ERROR_RECOVERY:
16591680
if (data2[0] == CCG_RESPONSE_HARD_RESET_RX)
1660-
CPRINTS("HARD_RESET_RX");
1681+
CPRINTS("HARD_RESET_RX");
16611682
if (data2[0] == CCG_RESPONSE_TYPE_C_ERROR_RECOVERY)
1662-
CPRINTS("TYPE_C_ERROR_RECOVERY");
1683+
CPRINTS("TYPE_C_ERROR_RECOVERY");
16631684

16641685
cypd_update_port_state(controller, port);
16651686
cypd_release_port(controller, port);
@@ -2095,8 +2116,8 @@ static int cmd_cypd_get_status(int argc, const char **argv)
20952116
current_level[(data >> 6) & 0x03]);
20962117
cypd_read_reg8(i, CCG_PORT_VBUS_FET_CONTROL(p), &data);
20972118
CPRINTS(" VBUS_FET : %s %s",
2098-
data & 0x1 ? "EC" : "Auto",
2099-
data & 0x2 ? "On" : "Off");
2119+
data & 0x1 ? "EC" : "Auto",
2120+
data & 0x2 ? "On" : "Off");
21002121
cypd_read_reg_block(i, CCG_CURRENT_RDO_REG(p), data16, 4);
21012122
CPRINTS(" RDO : Current:%dmA MaxCurrent%dmA 0x%08x",
21022123
((data16[0] + (data16[1]<<8)) & 0x3FF)*10,

0 commit comments

Comments
 (0)