@@ -18,11 +18,12 @@ Abstract:
18
18
core:: arch:: global_asm!( include_str!( "ext_intr.S" ) ) ;
19
19
20
20
use caliptra_cfi_lib_git:: CfiCounter ;
21
- use caliptra_common:: { cprintln, handle_fatal_error} ;
21
+ use caliptra_common:: { cprintln, handle_fatal_error, FirmwareHandoffTable } ;
22
22
use caliptra_cpu:: { log_trap_record, TrapRecord } ;
23
23
use caliptra_error:: CaliptraError ;
24
+ use caliptra_image_types:: ImageManifest ;
24
25
use caliptra_registers:: soc_ifc:: SocIfcReg ;
25
- use caliptra_runtime:: Drivers ;
26
+ use caliptra_runtime:: { compatibility , Drivers } ;
26
27
use core:: hint:: black_box;
27
28
28
29
#[ cfg( feature = "std" ) ]
@@ -76,11 +77,19 @@ pub extern "C" fn entry_point() -> ! {
76
77
handle_fatal_error ( e. into ( ) ) ;
77
78
} ) ;
78
79
79
- if !drivers. persistent_data . get ( ) . fht . is_valid ( ) {
80
- cprintln ! ( "[rt] RT can't load FHT" ) ;
80
+ let fht: & FirmwareHandoffTable = & drivers. persistent_data . get ( ) . fht ;
81
+ if !fht. is_valid ( ) {
82
+ cprintln ! ( "[rt] Runtime can't load FHT" ) ;
81
83
handle_fatal_error ( caliptra_drivers:: CaliptraError :: RUNTIME_HANDOFF_FHT_NOT_LOADED . into ( ) ) ;
82
84
}
83
- cprintln ! ( "[rt] RT listening for mailbox commands..." ) ;
85
+
86
+ let manifest: & ImageManifest = & drivers. persistent_data . get ( ) . manifest1 ;
87
+ if !compatibility:: is_fmc_compatible ( fht, manifest) {
88
+ cprintln ! ( "[rt] Runtime is not compatible with FMC" ) ;
89
+ handle_fatal_error ( caliptra_drivers:: CaliptraError :: RUNTIME_FMC_NOT_COMPATIBLE . into ( ) ) ;
90
+ }
91
+
92
+ cprintln ! ( "[rt] Runtime listening for mailbox commands..." ) ;
84
93
if let Err ( e) = caliptra_runtime:: handle_mailbox_commands ( & mut drivers) {
85
94
handle_fatal_error ( e. into ( ) ) ;
86
95
}
0 commit comments