88#include "dcp.h"
99#include "dcp_iboot.h"
1010#include "fb.h"
11+ #include "firmware.h"
1112#include "memory.h"
1213#include "soc.h"
1314#include "string.h"
@@ -31,6 +32,7 @@ static u64 fb_dva;
3132static u64 fb_size ;
3233bool display_is_external ;
3334bool display_is_dptx ;
35+ bool display_needs_power_cycle ;
3436
3537static const display_config_t display_config_m1 = {
3638 .dcp = "/arm-io/dcp" ,
@@ -401,6 +403,11 @@ int display_configure(const char *config)
401403 }
402404
403405 if (!display_is_external ) {
406+ // Sequoia bug workaround: Force power cycle
407+ if (display_needs_power_cycle ) {
408+ if ((ret = dcp_ib_set_power (iboot , false)) < 0 )
409+ printf ("display: failed to set power off (continuing anyway)\n" );
410+ }
404411 // Sonoma bug workaround: Power on internal panel early
405412 if ((ret = dcp_ib_set_power (iboot , true)) < 0 )
406413 printf ("display: failed to set power on (continuing anyway)\n" );
@@ -615,6 +622,12 @@ int display_init(void)
615622 "reconfiguring\n" );
616623 fb_clear_direct (); // Old m1n1 stage1 ends up with an ugly logo situation, clear it.
617624 return display_configure (NULL );
625+ #ifndef CHAINLOADING
626+ } else if ((chip_id == T8103 || chip_id == T8112 ) && firmware_sfw_in_range (V15_0B1 , FW_MAX )) {
627+ printf ("display: Internal display on t8103 or t8112 with Sequoia SFW, power cycling\n" );
628+ display_needs_power_cycle = true;
629+ return display_configure (NULL );
630+ #endif
618631 } else {
619632 printf ("display: Display is already initialized (%ldx%ld)\n" , cur_boot_args .video .width ,
620633 cur_boot_args .video .height );
0 commit comments