@@ -482,6 +482,13 @@ static int ec_slave_config(ec_slave_t *slave)
482482 }
483483
484484 if (slave -> requested_state == EC_SLAVE_STATE_BOOT ) {
485+ if (!(slave -> sii .mailbox_protocols & EC_MBXPROT_FOE )) {
486+ EC_SLAVE_LOG_ERR ("Slave %u does not support BOOT mailbox protocol\n" , slave -> index );
487+ ret = - EC_ERR_NOSUPP ;
488+ step = 5 ;
489+ goto errorout ;
490+ }
491+
485492 ec_sm_info_t sm_info [2 ];
486493
487494 sm_info [0 ].physical_start_address = slave -> sii .boot_rx_mailbox_offset ;
@@ -656,36 +663,32 @@ static int ec_slave_config(ec_slave_t *slave)
656663 }
657664 }
658665
659- // preop state done
660- if (slave -> current_state == slave -> requested_state ) {
661- ret = 0 ;
662- goto errorout ;
663- }
664-
665- // Config process data sm
666- ec_datagram_fpwr (datagram , slave -> station_address ,
667- ESCREG_OF (ESCREG -> SYNCM [pdo_sm_offset ]), EC_SYNC_PAGE_SIZE * pdo_sm_count );
668- ec_datagram_zero (datagram );
669- for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
670- ec_slave_sm_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_SYNC_PAGE_SIZE * i );
671- }
672- datagram -> netdev_idx = slave -> netdev_idx ;
673- ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
674- if (ret < 0 ) {
675- step = 21 ;
676- goto errorout ;
677- }
666+ if (slave -> config ) {
667+ // Config process data sm
668+ ec_datagram_fpwr (datagram , slave -> station_address ,
669+ ESCREG_OF (ESCREG -> SYNCM [pdo_sm_offset ]), EC_SYNC_PAGE_SIZE * pdo_sm_count );
670+ ec_datagram_zero (datagram );
671+ for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
672+ ec_slave_sm_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_SYNC_PAGE_SIZE * i );
673+ }
674+ datagram -> netdev_idx = slave -> netdev_idx ;
675+ ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
676+ if (ret < 0 ) {
677+ step = 21 ;
678+ goto errorout ;
679+ }
678680
679- ec_datagram_fpwr (datagram , slave -> station_address , ESCREG_OF (ESCREG -> FMMU [0 ]), EC_FMMU_PAGE_SIZE * pdo_sm_count );
680- ec_datagram_zero (datagram );
681- for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
682- ec_slave_fmmu_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_FMMU_PAGE_SIZE * i );
683- }
684- datagram -> netdev_idx = slave -> netdev_idx ;
685- ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
686- if (ret < 0 ) {
687- step = 22 ;
688- goto errorout ;
681+ ec_datagram_fpwr (datagram , slave -> station_address , ESCREG_OF (ESCREG -> FMMU [0 ]), EC_FMMU_PAGE_SIZE * pdo_sm_count );
682+ ec_datagram_zero (datagram );
683+ for (uint8_t i = 0 ; i < pdo_sm_count ; i ++ ) {
684+ ec_slave_fmmu_config (& slave -> sm_info [pdo_sm_offset + i ], datagram -> data + EC_FMMU_PAGE_SIZE * i );
685+ }
686+ datagram -> netdev_idx = slave -> netdev_idx ;
687+ ret = ec_master_queue_ext_datagram (slave -> master , datagram , true, true);
688+ if (ret < 0 ) {
689+ step = 22 ;
690+ goto errorout ;
691+ }
689692 }
690693
691694 if (slave -> config && slave -> config -> dc_assign_activate ) {
@@ -762,6 +765,12 @@ static int ec_slave_config(ec_slave_t *slave)
762765 }
763766 }
764767
768+ // preop state done
769+ if (slave -> current_state == slave -> requested_state ) {
770+ ret = 0 ;
771+ goto errorout ;
772+ }
773+
765774 ret = ec_slave_state_change (slave , EC_SLAVE_STATE_SAFEOP );
766775 if (ret < 0 ) {
767776 step = 28 ;
0 commit comments