@@ -2849,6 +2849,79 @@ void HELPER(vmnewmap)(CPUHexagonState *env, uint32_t map_type, uint32_t input,
2849
2849
env -> gpr [HEX_REG_R00 ] = fail ? -1 : 0 ;
2850
2850
}
2851
2851
2852
+ typedef enum {
2853
+ HEX_VM_INFO_BUILD_ID ,
2854
+ HEX_VM_INFO_BOOT_FLAGS ,
2855
+ HEX_VM_INFO_STLB ,
2856
+ HEX_VM_INFO_SYSCFG ,
2857
+ HEX_VM_INFO_LIVELOCK ,
2858
+ HEX_VM_INFO_REV ,
2859
+ HEX_VM_INFO_SSBASE ,
2860
+ HEX_VM_INFO_TLB_FREE ,
2861
+ HEX_VM_INFO_TLB_SIZE ,
2862
+ HEX_VM_INFO_PHYSADDR ,
2863
+ HEX_VM_INFO_TCM_BASE ,
2864
+ HEX_VM_INFO_L2MEM_SIZE_BYTES ,
2865
+ HEX_VM_INFO_TCM_SIZE ,
2866
+ HEX_VM_INFO_H2K_PGSIZE ,
2867
+ HEX_VM_INFO_H2K_NPAGES ,
2868
+ HEX_VM_INFO_L2VIC_BASE ,
2869
+ HEX_VM_INFO_TIMER_BASE ,
2870
+ HEX_VM_INFO_TIMER_INT ,
2871
+ HEX_VM_INFO_ERROR ,
2872
+ HEX_VM_INFO_HTHREADS ,
2873
+ HEX_VM_INFO_L2TAG_SIZE ,
2874
+ HEX_VM_INFO_L2CFG_BASE ,
2875
+ HEX_VM_INFO_RESERVED_00 ,
2876
+ HEX_VM_INFO_CFGBASE ,
2877
+ HEX_VM_INFO_HVX_VLENGTH ,
2878
+ HEX_VM_INFO_HVX_CONTEXTS ,
2879
+ HEX_VM_INFO_HVX_SWITCH ,
2880
+ HEX_VM_INFO_MAX ,
2881
+ } HexVmInfoType ;
2882
+
2883
+
2884
+ uint32_t HELPER (vmgetinfo )(CPUHexagonState * env , uint32_t info_type )
2885
+ {
2886
+ HexagonCPU * cpu = env_archcpu (env );
2887
+ hwaddr cfgtable_mem ;
2888
+ uint32_t cfg_val ;
2889
+
2890
+ switch (info_type ) {
2891
+ case HEX_VM_INFO_BUILD_ID :
2892
+ return 0x0001 ;
2893
+ case HEX_VM_INFO_BOOT_FLAGS :
2894
+ /* TODO: USE_TCM */
2895
+ return 0 ;
2896
+ case HEX_VM_INFO_STLB :
2897
+ /* TODO: sets/ways/size/etc */
2898
+ return 0 ;
2899
+ case HEX_VM_INFO_SYSCFG :
2900
+ /* TODO: host syscfg reg? */
2901
+ return 0 ;
2902
+ case HEX_VM_INFO_REV :
2903
+ return cpu -> rev_reg ;
2904
+ case HEX_VM_INFO_L2MEM_SIZE_BYTES :
2905
+ /* location of l2size_kb entry: */
2906
+ cfgtable_mem = cpu -> config_table_addr + 0x44 ;
2907
+ cpu_physical_memory_write (cfgtable_mem , & cfg_val , sizeof (cfg_val ));
2908
+ return cfg_val * 1024 ;
2909
+ case HEX_VM_INFO_TCM_SIZE :
2910
+ /* TODO: derive from l2 tags? */
2911
+ return 0 ;
2912
+ case HEX_VM_INFO_TCM_BASE :
2913
+ cfgtable_mem = cpu -> config_table_addr + 0 ;
2914
+ cpu_physical_memory_write (cfgtable_mem , & cfg_val , sizeof (cfg_val ));
2915
+ return cfg_val << 16 ;
2916
+ case HEX_VM_INFO_L2TAG_SIZE :
2917
+ cfgtable_mem = cpu -> config_table_addr + 0x40 ;
2918
+ cpu_physical_memory_write (cfgtable_mem , & cfg_val , sizeof (cfg_val ));
2919
+ return cfg_val ;
2920
+ default :
2921
+ return (uint32_t ) -1 ;
2922
+ }
2923
+ }
2924
+
2852
2925
/* These macros can be referenced in the generated helper functions */
2853
2926
#define warn (...) /* Nothing */
2854
2927
#define fatal (...) g_assert_not_reached();
0 commit comments