Tip / Sign in to post questions, reply, level up, and achieve exciting badges. Know more

USB EZ-PD™ Type-C Forum Discussions

Level 3
Level 3
25 sign-ins 10 replies posted 10 questions asked

Hi Cypress,  

We have a design that is using the CYPD5225 with TGL and a burnside bridge retimer on each port, however after the system exits S4/S5 after the first boot we cannot enumerate usb3/DP alt mode/thunderbolt unless we physically unplug/replug. 

This is based on the CYPD5225-96BZXI_notebook_tbt project based on sdk 3.4.0. 

After some discussion, we have a workaround of issuing a port reset command based on the system power state changes written to SYS_PWR_STATE register from the EC. (This was disabled on the project due to BC1.2 being disabled due to size requirements. 

So I shortened the callback handler for this in app.c app_update_sys_pwr_state to only trigger dpm_typec_command (i, DPM_CMD_TYPEC_ERR_RECOVERY, NULL); 


This fixes the issue of devices not being recognized after resume, however it will reset power to the device - which we want to avoid, as we cannot resume/hibernate etc without the device resetting. 

Is there a way to trigger only re-configuring the retimer/SOC on resume? 

I have noticed the following: 
It seems the SDK code monitors VSYS - and will trigger retimer_set_evt(param_1,RT_EVT_VSYS_ADDED); for each retimer when VSYS is restored. However in our design the retimer is on a different supply than the CCG5225 (which is always on). So I do not think this will get triggered. 

I tried to manually call this from our power state transition handler: 
retimer_set_evt(TYPEC_PORT_0_IDX,RT_EVT_VSYS_ADDED);  and RT_EVT_VSYS_REMOVED when we would enter/exit S0 (using the EC command handler app_update_sys_pwr_state)  for each port, however this does not seem to enable the alternate modes through the retimer. 

I did some additional digging and thinking, and I also wondered if the PD controller needs to notify the SOC to configure alt modes as well? perhaps through the call ridge_force_status_update or some other method? 

4 Replies
10 likes given 250 sign-ins 1000 replies posted


Recommend you have a define for SYS_PWR_STATE register,

#define SYSTEM_STATE_S0 (0)
#define SYSTEM_STATE_S3 (1)
#define SYSTEM_STATE_S4 (2)
#define SYSTEM_STATE_S5 (3)

And then, Adding below work around for case APP_EVT_TYPE_C_ERROR_RECOVERY:  and under if (!typec_only)

/* Turn the retimer off after it's been written to */
if(gl_system_state != SYSTEM_STATE_S0)
timer_start(port, APP_RETIMER_DISABLE_WAIT_TIMER, APP_RETIMER_DISABLE_DELAY, app_retimer_disable_cbk);
is_system_state_changed[port] = false;

is_retimer_configured = false;
#endif /* BB_RETIMER_ENABLE */


Best Regards,



Hi Lisa, 

Thanks for your response, 

I tried this, however none of these three items are defined in the SDK I have. 




Also the symbol is_retimer_configured only builds for the backup firmware, it is undefined for the main firmware. 

--------------- Build Started: 03/31/2021 17:53:52 Project: CYPD5225-96BZXI_notebook_tbt, Configuration: ARM MDK Generic Release ---------------

ERROR: L6218E: Undefined symbol is_retimer_configured (referred from app.o). 


Maybe I should do what was done elsewhere in the firmware? 

retimer_disable (port, (gl_system_state != NB_SYS_PWR_STATE_S0)); 

Screenshot from 2021-03-31 17-48-19.png

Level 3
Level 3
25 sign-ins 10 replies posted 10 questions asked

@ShifangZ_26 do you have any other suggestions for resolving this? Since the current SDK is missing components you suggested to modify. 


Hello Kyle,


Recommend you contact local FAE/AE to get further support. Otherwise, you have to customize the firmware for S3 and S4 state based on SDK example code. 

Best Regards,