union igp_info {
        struct atom_integrated_system_info_v1_11 v11;
+       struct atom_integrated_system_info_v1_12 v12;
 };
 
 union umc_info {
                                (mode_info->atom_context->bios + data_offset);
                        switch (crev) {
                        case 11:
-                       case 12:
                                mem_channel_number = igp_info->v11.umachannelnumber;
                                /* channel width is 64 */
                                if (vram_width)
                                if (vram_type)
                                        *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
                                break;
+                       case 12:
+                               mem_channel_number = igp_info->v12.umachannelnumber;
+                               /* channel width is 64 */
+                               if (vram_width)
+                                       *vram_width = mem_channel_number * 64;
+                               mem_type = igp_info->v12.memorytype;
+                               if (vram_type)
+                                       *vram_type = convert_atom_mem_type_to_vram_type(adev, mem_type);
+                               break;
                        default:
                                return -EINVAL;
                        }