Skip to content

Commit 260221d

Browse files
LeoCX-Tsaikiram9
authored andcommitted
hx30: modify retimer fw update flow
Signed-off-by: LeoCX_Tsai <[email protected]>
1 parent 7941362 commit 260221d

File tree

3 files changed

+51
-9
lines changed

3 files changed

+51
-9
lines changed

board/hx30/cypress5525.c

Lines changed: 45 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -259,6 +259,24 @@ int cypd_write_reg8_wait_ack(int controller, int reg, int data, int delay_ms)
259259
default:
260260
CPRINTS("Check AC get unknown event 0x%04x", event);
261261
}
262+
} else if (data == CYP5525_ICL_CTRL_REG ||
263+
data == CYP5525_ICL_BB_RETIMER_CMD_REG ||
264+
data == CYP5525_ICL_BB_RETIMER_DAT_REG) {
265+
rv = cypd_read_reg8(controller, CYP5525_RESPONSE_REG, &event);
266+
if (rv != EC_SUCCESS)
267+
CPRINTS("fail to read response");
268+
switch (event) {
269+
case CYPD_RESPONSE_SUCCESS:
270+
rv = EC_SUCCESS;
271+
break;
272+
case CYPD_RESPONSE_INVALID_ARGUMENTS:
273+
CPRINTS("CYPD_RESPONSE_INVALID_ARGUMENTS cmd:%x", data);
274+
rv = EC_ERROR_INVAL;
275+
break;
276+
default:
277+
rv = EC_ERROR_INVAL;
278+
CPRINTS("Check AC get unknown event 0x%04x", event);
279+
}
262280
}
263281
cypd_clear_int(controller, CYP5525_DEV_INTR);
264282
}
@@ -390,24 +408,46 @@ void disable_compliance_mode(int controller)
390408
CPRINTS("Write CYP5525_ICL_BB_RETIMER_CMD_REG fail");
391409
}
392410

393-
void entry_tbt_mode(int controller)
411+
int entry_tbt_mode(int controller)
394412
{
395413
int rv;
396414
uint8_t force_tbt_mode = 0x01;
415+
int force_retimer_power = 0x0100;
397416

398-
rv = cypd_write_reg8(controller, CYP5525_ICL_CTRL_REG, force_tbt_mode);
417+
/* Write 0x0100 to address 0x0046 */
418+
rv = cypd_write_reg16(controller, CYP5525_ICL_BB_RETIMER_CMD_REG, force_retimer_power);
419+
if (rv != EC_SUCCESS) {
420+
CPRINTS("Write CYP5525_ICL_BB_RETIMER_CMD_REG fail");
421+
return rv;
422+
}
423+
424+
/* according to HPI spec after write 0x40 need wait 100~125ms */
425+
rv = cypd_write_reg8_wait_ack(controller, CYP5525_ICL_CTRL_REG, force_tbt_mode, 110);
399426
if (rv != EC_SUCCESS)
400427
CPRINTS("Write CYP5525_ICL_CTRL_REG fail");
428+
429+
return rv;
401430
}
402431

403-
void exit_tbt_mode(int controller)
432+
int exit_tbt_mode(int controller)
404433
{
405434
int rv;
406435
uint8_t force_tbt_mode = 0x00;
436+
int force_retimer_power = 0x0000;
407437

408-
rv = cypd_write_reg8(controller, CYP5525_ICL_CTRL_REG, force_tbt_mode);
409-
if (rv != EC_SUCCESS)
438+
/* according to HPI spec after write 0x40 need wait 100~125ms */
439+
rv = cypd_write_reg8_wait_ack(controller, CYP5525_ICL_CTRL_REG, force_tbt_mode, 110);
440+
if (rv != EC_SUCCESS) {
410441
CPRINTS("Write CYP5525_ICL_CTRL_REG fail");
442+
return rv;
443+
}
444+
445+
/* Write 0x0000 to address 0x0046 */
446+
rv = cypd_write_reg16(controller, CYP5525_ICL_BB_RETIMER_CMD_REG, force_retimer_power);
447+
if (rv != EC_SUCCESS)
448+
CPRINTS("Write CYP5525_ICL_BB_RETIMER_CMD_REG fail");
449+
450+
return rv;
411451
}
412452

413453
int check_tbt_mode(int controller)

board/hx30/cypress5525.h

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -467,9 +467,9 @@ void cypd_enque_evt(int evt, int delay);
467467
void enable_compliance_mode(int controller);
468468
void disable_compliance_mode(int controller);
469469

470-
void entry_tbt_mode(int controller);
470+
int entry_tbt_mode(int controller);
471471

472-
void exit_tbt_mode(int controller);
472+
int exit_tbt_mode(int controller);
473473

474474
int check_tbt_mode(int controller);
475475

board/hx30/host_command_customization.c

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -279,10 +279,12 @@ static enum ec_status bb_retimer_control(struct host_cmd_handler_args *args)
279279

280280
switch (p->modes) {
281281
case BB_ENTRY_FW_UPDATE_MODE:
282-
entry_tbt_mode(p->controller);
282+
r->status = entry_tbt_mode(p->controller);
283+
args->response_size = sizeof(*r);
283284
break;
284285
case BB_EXIT_FW_UPDATE_MODE:
285-
exit_tbt_mode(p->controller);
286+
r->status = exit_tbt_mode(p->controller);
287+
args->response_size = sizeof(*r);
286288
break;
287289
case BB_ENABLE_COMPLIANCE_MODE:
288290
enable_compliance_mode(p->controller);

0 commit comments

Comments
 (0)