union gc_info {
        struct gc_info_v1_0 v1;
+       struct gc_info_v1_1 v1_1;
+       struct gc_info_v1_2 v1_2;
        struct gc_info_v2_0 v2;
 };
 
                adev->gfx.config.num_sc_per_sh = le32_to_cpu(gc_info->v1.gc_num_sc_per_se) /
                        le32_to_cpu(gc_info->v1.gc_num_sa_per_se);
                adev->gfx.config.num_packer_per_sc = le32_to_cpu(gc_info->v1.gc_num_packer_per_sc);
+               if (gc_info->v1.header.version_minor >= 1) {
+                       adev->gfx.config.gc_num_tcp_per_sa = le32_to_cpu(gc_info->v1_1.gc_num_tcp_per_sa);
+                       adev->gfx.config.gc_num_sdp_interface = le32_to_cpu(gc_info->v1_1.gc_num_sdp_interface);
+                       adev->gfx.config.gc_num_tcps = le32_to_cpu(gc_info->v1_1.gc_num_tcps);
+               }
+               if (gc_info->v1.header.version_minor >= 2) {
+                       adev->gfx.config.gc_num_tcp_per_wpg = le32_to_cpu(gc_info->v1_2.gc_num_tcp_per_wpg);
+                       adev->gfx.config.gc_tcp_l1_size = le32_to_cpu(gc_info->v1_2.gc_tcp_l1_size);
+                       adev->gfx.config.gc_num_sqc_per_wgp = le32_to_cpu(gc_info->v1_2.gc_num_sqc_per_wgp);
+                       adev->gfx.config.gc_l1_instruction_cache_size_per_sqc = le32_to_cpu(gc_info->v1_2.gc_l1_instruction_cache_size_per_sqc);
+                       adev->gfx.config.gc_l1_data_cache_size_per_sqc = le32_to_cpu(gc_info->v1_2.gc_l1_data_cache_size_per_sqc);
+                       adev->gfx.config.gc_gl1c_per_sa = le32_to_cpu(gc_info->v1_2.gc_gl1c_per_sa);
+                       adev->gfx.config.gc_gl1c_size_per_instance = le32_to_cpu(gc_info->v1_2.gc_gl1c_size_per_instance);
+                       adev->gfx.config.gc_gl2c_per_gpu = le32_to_cpu(gc_info->v1_2.gc_gl2c_per_gpu);
+               }
                break;
        case 2:
                adev->gfx.config.max_shader_engines = le32_to_cpu(gc_info->v2.gc_num_se);
 
        uint32_t num_packer_per_sc;
        uint32_t pa_sc_tile_steering_override;
        uint64_t tcc_disabled_mask;
+       uint32_t gc_num_tcp_per_sa;
+       uint32_t gc_num_sdp_interface;
+       uint32_t gc_num_tcps;
+       uint32_t gc_num_tcp_per_wpg;
+       uint32_t gc_tcp_l1_size;
+       uint32_t gc_num_sqc_per_wgp;
+       uint32_t gc_l1_instruction_cache_size_per_sqc;
+       uint32_t gc_l1_data_cache_size_per_sqc;
+       uint32_t gc_gl1c_per_sa;
+       uint32_t gc_gl1c_size_per_instance;
+       uint32_t gc_gl2c_per_gpu;
 };
 
 struct amdgpu_cu_info {