summaryrefslogtreecommitdiffstats
path: root/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h
diff options
context:
space:
mode:
authorDeepak Goyal <dgoyal@nvidia.com>2017-11-15 01:10:54 -0500
committermobile promotions <svcmobile_promotions@nvidia.com>2017-12-14 12:03:45 -0500
commit49be5d49292c9c853f5b6ad53c32d59f866322ec (patch)
tree8e34c42aff1cad6ea0fe4e2d9885dcd9043ef1ab /drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h
parent1bf9b91c05ceebf872171a536c2660ee69fa5f64 (diff)
gpu: nvgpu: gv11b: implement ecc scrubber
Check the availability of ecc units by checking relevant ecc fuse and fuse overrides. During gpu boot, initialize ecc units by scrubbing individual ecc units available. ECC initialization should be done before gr initialization. Following ecc units are scrubbed: SM LRF SM L1 DATA SM L1 TAG SM CBU SM ICACHE Bug 200339497 Change-Id: I54bf8cc1fce639a9993bf80984dafc28dca0dba3 Signed-off-by: Deepak Goyal <dgoyal@nvidia.com> Signed-off-by: seshendra Gadagottu <sgadagottu@nvidia.com> Reviewed-on: https://git-master.nvidia.com/r/1612734 Reviewed-by: mobile promotions <svcmobile_promotions@nvidia.com> Tested-by: mobile promotions <svcmobile_promotions@nvidia.com>
Diffstat (limited to 'drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h')
-rw-r--r--drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h410
1 files changed, 407 insertions, 3 deletions
diff --git a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h
index 805d8b0e..29999163 100644
--- a/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h
+++ b/drivers/gpu/nvgpu/include/nvgpu/hw/gv11b/hw_gr_gv11b.h
@@ -916,6 +916,366 @@ static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_uncorrected_err_count_total_v(u32
916{ 916{
917 return (r >> 0U) & 0xffffU; 917 return (r >> 0U) & 0xffffU;
918} 918}
919static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_r(void)
920{
921 return 0x00419b54U;
922}
923static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp0_f(u32 v)
924{
925 return (v & 0x1U) << 0U;
926}
927static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp0_task_f(void)
928{
929 return 0x1U;
930}
931static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp1_f(u32 v)
932{
933 return (v & 0x1U) << 1U;
934}
935static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp1_task_f(void)
936{
937 return 0x2U;
938}
939static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp2_f(u32 v)
940{
941 return (v & 0x1U) << 2U;
942}
943static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp2_task_f(void)
944{
945 return 0x4U;
946}
947static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp3_f(u32 v)
948{
949 return (v & 0x1U) << 3U;
950}
951static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp3_task_f(void)
952{
953 return 0x8U;
954}
955static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp4_f(u32 v)
956{
957 return (v & 0x1U) << 4U;
958}
959static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp4_task_f(void)
960{
961 return 0x10U;
962}
963static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp5_f(u32 v)
964{
965 return (v & 0x1U) << 5U;
966}
967static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp5_task_f(void)
968{
969 return 0x20U;
970}
971static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp6_f(u32 v)
972{
973 return (v & 0x1U) << 6U;
974}
975static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp6_task_f(void)
976{
977 return 0x40U;
978}
979static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp7_f(u32 v)
980{
981 return (v & 0x1U) << 7U;
982}
983static inline u32 gr_pri_gpcs_tpcs_sm_lrf_ecc_control_scrub_qrfdp7_task_f(void)
984{
985 return 0x80U;
986}
987static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_r(void)
988{
989 return 0x00504354U;
990}
991static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp0_f(u32 v)
992{
993 return (v & 0x1U) << 0U;
994}
995static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp0_init_f(void)
996{
997 return 0x0U;
998}
999static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp1_f(u32 v)
1000{
1001 return (v & 0x1U) << 1U;
1002}
1003static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp1_init_f(void)
1004{
1005 return 0x0U;
1006}
1007static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp2_f(u32 v)
1008{
1009 return (v & 0x1U) << 2U;
1010}
1011static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp2_init_f(void)
1012{
1013 return 0x0U;
1014}
1015static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp3_f(u32 v)
1016{
1017 return (v & 0x1U) << 3U;
1018}
1019static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp3_init_f(void)
1020{
1021 return 0x0U;
1022}
1023static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp4_f(u32 v)
1024{
1025 return (v & 0x1U) << 4U;
1026}
1027static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp4_init_f(void)
1028{
1029 return 0x0U;
1030}
1031static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp5_f(u32 v)
1032{
1033 return (v & 0x1U) << 5U;
1034}
1035static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp5_init_f(void)
1036{
1037 return 0x0U;
1038}
1039static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp6_f(u32 v)
1040{
1041 return (v & 0x1U) << 6U;
1042}
1043static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp6_init_f(void)
1044{
1045 return 0x0U;
1046}
1047static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp7_f(u32 v)
1048{
1049 return (v & 0x1U) << 7U;
1050}
1051static inline u32 gr_pri_gpc0_tpc0_sm_lrf_ecc_control_scrub_qrfdp7_init_f(void)
1052{
1053 return 0x0U;
1054}
1055static inline u32 gr_pri_gpcs_tpcs_sm_l1_data_ecc_control_r(void)
1056{
1057 return 0x00419b68U;
1058}
1059static inline u32 gr_pri_gpcs_tpcs_sm_l1_data_ecc_control_scrub_el1_0_f(u32 v)
1060{
1061 return (v & 0x1U) << 0U;
1062}
1063static inline u32 gr_pri_gpcs_tpcs_sm_l1_data_ecc_control_scrub_el1_0_task_f(void)
1064{
1065 return 0x1U;
1066}
1067static inline u32 gr_pri_gpcs_tpcs_sm_l1_data_ecc_control_scrub_el1_1_f(u32 v)
1068{
1069 return (v & 0x1U) << 1U;
1070}
1071static inline u32 gr_pri_gpcs_tpcs_sm_l1_data_ecc_control_scrub_el1_1_task_f(void)
1072{
1073 return 0x2U;
1074}
1075static inline u32 gr_pri_gpc0_tpc0_sm_l1_data_ecc_control_r(void)
1076{
1077 return 0x00504368U;
1078}
1079static inline u32 gr_pri_gpc0_tpc0_sm_l1_data_ecc_control_scrub_el1_0_f(u32 v)
1080{
1081 return (v & 0x1U) << 0U;
1082}
1083static inline u32 gr_pri_gpc0_tpc0_sm_l1_data_ecc_control_scrub_el1_0_init_f(void)
1084{
1085 return 0x0U;
1086}
1087static inline u32 gr_pri_gpc0_tpc0_sm_l1_data_ecc_control_scrub_el1_1_f(u32 v)
1088{
1089 return (v & 0x1U) << 1U;
1090}
1091static inline u32 gr_pri_gpc0_tpc0_sm_l1_data_ecc_control_scrub_el1_1_init_f(void)
1092{
1093 return 0x0U;
1094}
1095static inline u32 gr_pri_gpcs_tpcs_sm_l1_tag_ecc_control_r(void)
1096{
1097 return 0x00419e20U;
1098}
1099static inline u32 gr_pri_gpcs_tpcs_sm_l1_tag_ecc_control_scrub_el1_0_f(u32 v)
1100{
1101 return (v & 0x1U) << 0U;
1102}
1103static inline u32 gr_pri_gpcs_tpcs_sm_l1_tag_ecc_control_scrub_el1_0_task_f(void)
1104{
1105 return 0x1U;
1106}
1107static inline u32 gr_pri_gpcs_tpcs_sm_l1_tag_ecc_control_scrub_el1_1_f(u32 v)
1108{
1109 return (v & 0x1U) << 1U;
1110}
1111static inline u32 gr_pri_gpcs_tpcs_sm_l1_tag_ecc_control_scrub_el1_1_task_f(void)
1112{
1113 return 0x2U;
1114}
1115static inline u32 gr_pri_gpc0_tpc0_sm_l1_tag_ecc_control_r(void)
1116{
1117 return 0x00504620U;
1118}
1119static inline u32 gr_pri_gpc0_tpc0_sm_l1_tag_ecc_control_scrub_el1_0_f(u32 v)
1120{
1121 return (v & 0x1U) << 0U;
1122}
1123static inline u32 gr_pri_gpc0_tpc0_sm_l1_tag_ecc_control_scrub_el1_0_init_f(void)
1124{
1125 return 0x0U;
1126}
1127static inline u32 gr_pri_gpc0_tpc0_sm_l1_tag_ecc_control_scrub_el1_1_f(u32 v)
1128{
1129 return (v & 0x1U) << 1U;
1130}
1131static inline u32 gr_pri_gpc0_tpc0_sm_l1_tag_ecc_control_scrub_el1_1_init_f(void)
1132{
1133 return 0x0U;
1134}
1135static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_r(void)
1136{
1137 return 0x00419e34U;
1138}
1139static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_warp_sm0_f(u32 v)
1140{
1141 return (v & 0x1U) << 0U;
1142}
1143static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_warp_sm0_task_f(void)
1144{
1145 return 0x1U;
1146}
1147static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_warp_sm1_f(u32 v)
1148{
1149 return (v & 0x1U) << 1U;
1150}
1151static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_warp_sm1_task_f(void)
1152{
1153 return 0x2U;
1154}
1155static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_barrier_sm0_f(u32 v)
1156{
1157 return (v & 0x1U) << 2U;
1158}
1159static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_barrier_sm0_task_f(void)
1160{
1161 return 0x4U;
1162}
1163static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_barrier_sm1_f(u32 v)
1164{
1165 return (v & 0x1U) << 3U;
1166}
1167static inline u32 gr_pri_gpcs_tpcs_sm_cbu_ecc_control_scrub_barrier_sm1_task_f(void)
1168{
1169 return 0x8U;
1170}
1171static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_r(void)
1172{
1173 return 0x00504634U;
1174}
1175static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_warp_sm0_f(u32 v)
1176{
1177 return (v & 0x1U) << 0U;
1178}
1179static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_warp_sm0_init_f(void)
1180{
1181 return 0x0U;
1182}
1183static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_warp_sm1_f(u32 v)
1184{
1185 return (v & 0x1U) << 1U;
1186}
1187static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_warp_sm1_init_f(void)
1188{
1189 return 0x0U;
1190}
1191static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_barrier_sm0_f(u32 v)
1192{
1193 return (v & 0x1U) << 2U;
1194}
1195static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_barrier_sm0_init_f(void)
1196{
1197 return 0x0U;
1198}
1199static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_barrier_sm1_f(u32 v)
1200{
1201 return (v & 0x1U) << 3U;
1202}
1203static inline u32 gr_pri_gpc0_tpc0_sm_cbu_ecc_control_scrub_barrier_sm1_init_f(void)
1204{
1205 return 0x0U;
1206}
1207static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_r(void)
1208{
1209 return 0x00419e48U;
1210}
1211static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l0_data_f(u32 v)
1212{
1213 return (v & 0x1U) << 0U;
1214}
1215static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l0_data_task_f(void)
1216{
1217 return 0x1U;
1218}
1219static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l0_predecode_f(u32 v)
1220{
1221 return (v & 0x1U) << 1U;
1222}
1223static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l0_predecode_task_f(void)
1224{
1225 return 0x2U;
1226}
1227static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l1_data_f(u32 v)
1228{
1229 return (v & 0x1U) << 2U;
1230}
1231static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l1_data_task_f(void)
1232{
1233 return 0x4U;
1234}
1235static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l1_predecode_f(u32 v)
1236{
1237 return (v & 0x1U) << 3U;
1238}
1239static inline u32 gr_pri_gpcs_tpcs_sm_icache_ecc_control_scrub_l1_predecode_task_f(void)
1240{
1241 return 0x8U;
1242}
1243static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_r(void)
1244{
1245 return 0x00504648U;
1246}
1247static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l0_data_f(u32 v)
1248{
1249 return (v & 0x1U) << 0U;
1250}
1251static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l0_data_init_f(void)
1252{
1253 return 0x0U;
1254}
1255static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l0_predecode_f(u32 v)
1256{
1257 return (v & 0x1U) << 1U;
1258}
1259static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l0_predecode_init_f(void)
1260{
1261 return 0x0U;
1262}
1263static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l1_data_f(u32 v)
1264{
1265 return (v & 0x1U) << 2U;
1266}
1267static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l1_data_init_f(void)
1268{
1269 return 0x0U;
1270}
1271static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l1_predecode_f(u32 v)
1272{
1273 return (v & 0x1U) << 3U;
1274}
1275static inline u32 gr_pri_gpc0_tpc0_sm_icache_ecc_control_scrub_l1_predecode_init_f(void)
1276{
1277 return 0x0U;
1278}
919static inline u32 gr_pri_gpc0_tpc0_tex_m_routing_r(void) 1279static inline u32 gr_pri_gpc0_tpc0_tex_m_routing_r(void)
920{ 1280{
921 return 0x005042c4U; 1281 return 0x005042c4U;
@@ -1920,21 +2280,65 @@ static inline u32 gr_fecs_feature_override_ecc_r(void)
1920{ 2280{
1921 return 0x00409658U; 2281 return 0x00409658U;
1922} 2282}
2283static inline u32 gr_fecs_feature_override_ecc_sm_lrf_v(u32 r)
2284{
2285 return (r >> 0U) & 0x1U;
2286}
1923static inline u32 gr_fecs_feature_override_ecc_sm_lrf_override_v(u32 r) 2287static inline u32 gr_fecs_feature_override_ecc_sm_lrf_override_v(u32 r)
1924{ 2288{
1925 return (r >> 3U) & 0x1U; 2289 return (r >> 3U) & 0x1U;
1926} 2290}
2291static inline u32 gr_fecs_feature_override_ecc_sm_l1_data_v(u32 r)
2292{
2293 return (r >> 4U) & 0x1U;
2294}
2295static inline u32 gr_fecs_feature_override_ecc_sm_l1_data_override_v(u32 r)
2296{
2297 return (r >> 7U) & 0x1U;
2298}
2299static inline u32 gr_fecs_feature_override_ecc_sm_l1_tag_v(u32 r)
2300{
2301 return (r >> 8U) & 0x1U;
2302}
2303static inline u32 gr_fecs_feature_override_ecc_sm_l1_tag_override_v(u32 r)
2304{
2305 return (r >> 11U) & 0x1U;
2306}
2307static inline u32 gr_fecs_feature_override_ecc_ltc_v(u32 r)
2308{
2309 return (r >> 12U) & 0x1U;
2310}
1927static inline u32 gr_fecs_feature_override_ecc_ltc_override_v(u32 r) 2311static inline u32 gr_fecs_feature_override_ecc_ltc_override_v(u32 r)
1928{ 2312{
1929 return (r >> 15U) & 0x1U; 2313 return (r >> 15U) & 0x1U;
1930} 2314}
1931static inline u32 gr_fecs_feature_override_ecc_sm_lrf_v(u32 r) 2315static inline u32 gr_fecs_feature_override_ecc_sm_cbu_v(u32 r)
2316{
2317 return (r >> 20U) & 0x1U;
2318}
2319static inline u32 gr_fecs_feature_override_ecc_sm_cbu_override_v(u32 r)
2320{
2321 return (r >> 23U) & 0x1U;
2322}
2323static inline u32 gr_fecs_feature_override_ecc_1_r(void)
2324{
2325 return 0x0040965cU;
2326}
2327static inline u32 gr_fecs_feature_override_ecc_1_sm_l0_icache_v(u32 r)
1932{ 2328{
1933 return (r >> 0U) & 0x1U; 2329 return (r >> 0U) & 0x1U;
1934} 2330}
1935static inline u32 gr_fecs_feature_override_ecc_ltc_v(u32 r) 2331static inline u32 gr_fecs_feature_override_ecc_1_sm_l0_icache_override_v(u32 r)
1936{ 2332{
1937 return (r >> 12U) & 0x1U; 2333 return (r >> 1U) & 0x1U;
2334}
2335static inline u32 gr_fecs_feature_override_ecc_1_sm_l1_icache_v(u32 r)
2336{
2337 return (r >> 2U) & 0x1U;
2338}
2339static inline u32 gr_fecs_feature_override_ecc_1_sm_l1_icache_override_v(u32 r)
2340{
2341 return (r >> 3U) & 0x1U;
1938} 2342}
1939static inline u32 gr_gpc0_gpccs_ctxsw_idlestate_r(void) 2343static inline u32 gr_gpc0_gpccs_ctxsw_idlestate_r(void)
1940{ 2344{