Skip to content

Commit 4479103

Browse files
committed
hx30.fix pd update not reconfiguring controller
we were calling cypd_enque_evt with a non zero time in cypd_handle_state This would block for the time, and return a bitmap of task events which were dropped. This would cause us to lose previous events such as configuring the other PD controller Signed-off-by: Kieran Levin <ktl@frame.work>
1 parent 371d539 commit 4479103

2 files changed

Lines changed: 24 additions & 40 deletions

File tree

board/hx30/cypress5525.c

Lines changed: 24 additions & 38 deletions
Original file line numberDiff line numberDiff line change
@@ -398,16 +398,6 @@ void cypd_reset_source_ports(void)
398398
}
399399
}
400400

401-
enum power_state saved_bb_power_state = POWER_S0;
402-
403-
void cypd_set_retimer_power(enum power_state power)
404-
{
405-
if (power != saved_bb_power_state) {
406-
saved_bb_power_state = power;
407-
cypd_enque_evt(CYPD_EVT_RETIMER_PWR, 0);
408-
}
409-
}
410-
411401

412402
void cypd_set_power_active(enum power_state power)
413403
{
@@ -1046,6 +1036,20 @@ int cyp5525_device_int(int controller)
10461036
return EC_SUCCESS;
10471037
}
10481038

1039+
1040+
void pd0_update_state_deferred(void)
1041+
{
1042+
task_set_event(TASK_ID_CYPD, CYPD_EVT_STATE_CTRL_0, 0);
1043+
}
1044+
DECLARE_DEFERRED(pd0_update_state_deferred);
1045+
1046+
void pd1_update_state_deferred(void)
1047+
{
1048+
task_set_event(TASK_ID_CYPD, CYPD_EVT_STATE_CTRL_1, 0);
1049+
1050+
}
1051+
DECLARE_DEFERRED(pd1_update_state_deferred);
1052+
10491053
void cypd_handle_state(int controller)
10501054
{
10511055
int data;
@@ -1070,25 +1074,22 @@ void cypd_handle_state(int controller)
10701074
}
10711075
}
10721076
/*try again in a while*/
1073-
cypd_enque_evt(4<<controller, delay);
1077+
if (delay) {
1078+
if (controller == 0 ) {
1079+
hook_call_deferred(&pd0_update_state_deferred_data, delay);
1080+
} else {
1081+
hook_call_deferred(&pd1_update_state_deferred_data, delay);
1082+
}
1083+
} else {
1084+
cypd_enque_evt(CYPD_EVT_STATE_CTRL_0<<controller, 0);
1085+
}
10741086
break;
10751087

10761088
case CYP5525_STATE_APP_SETUP:
10771089
gpio_disable_interrupt(pd_chip_config[controller].gpio);
10781090
cyp5525_get_version(controller);
10791091
cypd_write_reg8_wait_ack(controller, CYP5225_USER_MAINBOARD_VERSION, board_get_version());
10801092

1081-
/*for(i=0; i < 50;i++) {
1082-
if (gpio_get_level(GPIO_PWR_3V5V_PG) &&
1083-
((charger_current_battery_params()->is_present == BP_YES &&
1084-
!(charger_current_battery_params()->flags & BATT_FLAG_BAD_ANY))
1085-
)
1086-
)
1087-
break;
1088-
usleep(MSEC);
1089-
1090-
}*/
1091-
10921093
cypd_update_power_status();
10931094

10941095
cypd_set_power_state(CYP5525_POWERSTATE_S5);
@@ -1103,12 +1104,6 @@ void cypd_handle_state(int controller)
11031104
cypd_write_reg16_wait_ack(controller, CYP5225_USER_BB_POWER_EVT, RT_EVT_VSYS_ADDED);
11041105
update_system_power_state();
11051106

1106-
//if (power_get_state() == POWER_S0 ||
1107-
// power_get_state() == POWER_S0ix) {
1108-
/*Handle unexpected PD controller resets when we are powered on*/
1109-
// cypd_enque_evt(CYPD_EVT_RETIMER_PWR, 0);
1110-
//}
1111-
11121107
CPRINTS("CYPD %d Ready!", controller);
11131108
pd_chip_config[controller].state = CYP5525_STATE_READY;
11141109
break;
@@ -1281,15 +1276,6 @@ void cypd_interrupt_handler_task(void *p)
12811276
CPRINTS("PD Event Platform Reset!");
12821277
}
12831278

1284-
if (evt & CYPD_EVT_RETIMER_PWR) {
1285-
if (saved_bb_power_state == POWER_G3S5) {
1286-
cypd_bb_retimer_cmd(RT_EVT_VSYS_ADDED);
1287-
}
1288-
if (saved_bb_power_state == POWER_G3) {
1289-
cypd_bb_retimer_cmd(RT_EVT_VSYS_REMOVED);
1290-
}
1291-
}
1292-
12931279
if (evt & CYPD_EVT_PORT_DISABLE) {
12941280
CPRINTS("CYPD_EVT_PORT_DISABLE");
12951281
cypd_reconnect_port_disable(0);
@@ -1640,6 +1626,7 @@ int pd_port_configuration_change(int port, enum pd_port_role port_role)
16401626

16411627
static void update_power_limit_deferred(void)
16421628
{
1629+
cypd_enque_evt(CYPD_EVT_UPDATE_PWRSTAT, 0);
16431630
update_soc_power_limit(false, false);
16441631
}
16451632
DECLARE_DEFERRED(update_power_limit_deferred);
@@ -1685,7 +1672,6 @@ int board_set_active_charge_port(int charge_port)
16851672
cypd_write_reg8(1, CYP5525_CUST_C_CTRL_CONTROL_REG, CYP5525_P0P1_CONTROL_BY_CY);
16861673
}
16871674

1688-
cypd_enque_evt(CYPD_EVT_UPDATE_PWRSTAT, 100);
16891675
hook_call_deferred(&update_power_limit_deferred_data, 100 * MSEC);
16901676
CPRINTS("Updating %s port %d", __func__, charge_port);
16911677

board/hx30/power_sequence.c

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -202,8 +202,6 @@ int board_chipset_power_on(void)
202202
gpio_set_level(GPIO_PCH_PWR_EN, 1);
203203

204204
msleep(10);
205-
/* Need to configure the retimer recovery path before RSMRST is released but after PCH_PWR_EN is up */
206-
cypd_set_retimer_power(POWER_G3S5);
207205

208206
gpio_set_level(GPIO_PCH_PWRBTN_L, 1);
209207

0 commit comments

Comments
 (0)