Linux kernel mirror (for testing) git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
kernel os linux
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

Merge branch 'drm-radeon-mullins' of git://people.freedesktop.org/~airlied/linux

Pull radeon mullins support from Dave Airlie:
"This is support for the new AMD mullins APU, it pretty much just adds
support to the driver in the all the right places, and is pretty low
risk wrt other GPUs"

Oh well. I guess it ends up fitting under "support new hardware" for
merging late.

* 'drm-radeon-mullins' of git://people.freedesktop.org/~airlied/linux:
drm/radeon: add pci ids for Mullins
drm/radeon: add Mullins VCE support
drm/radeon: modesetting updates for Mullins.
drm/radeon: dpm updates for KV/KB
drm/radeon: add Mullins dpm support.
drm/radeon: add Mullins UVD support.
drm/radeon: update cik init for Mullins.
drm/radeon: add Mullins chip family

+203 -31
+3 -2
drivers/gpu/drm/radeon/atombios_crtc.c
··· 1736 1736 } 1737 1737 /* otherwise, pick one of the plls */ 1738 1738 if ((rdev->family == CHIP_KAVERI) || 1739 - (rdev->family == CHIP_KABINI)) { 1740 - /* KB/KV has PPLL1 and PPLL2 */ 1739 + (rdev->family == CHIP_KABINI) || 1740 + (rdev->family == CHIP_MULLINS)) { 1741 + /* KB/KV/ML has PPLL1 and PPLL2 */ 1741 1742 pll_in_use = radeon_get_pll_use_mask(crtc); 1742 1743 if (!(pll_in_use & (1 << ATOM_PPLL2))) 1743 1744 return ATOM_PPLL2;
+71
drivers/gpu/drm/radeon/cik.c
··· 63 63 MODULE_FIRMWARE("radeon/KABINI_mec.bin"); 64 64 MODULE_FIRMWARE("radeon/KABINI_rlc.bin"); 65 65 MODULE_FIRMWARE("radeon/KABINI_sdma.bin"); 66 + MODULE_FIRMWARE("radeon/MULLINS_pfp.bin"); 67 + MODULE_FIRMWARE("radeon/MULLINS_me.bin"); 68 + MODULE_FIRMWARE("radeon/MULLINS_ce.bin"); 69 + MODULE_FIRMWARE("radeon/MULLINS_mec.bin"); 70 + MODULE_FIRMWARE("radeon/MULLINS_rlc.bin"); 71 + MODULE_FIRMWARE("radeon/MULLINS_sdma.bin"); 66 72 67 73 extern int r600_ih_ring_alloc(struct radeon_device *rdev); 68 74 extern void r600_ih_ring_fini(struct radeon_device *rdev); ··· 1479 1473 0xd80c, 0xff000ff0, 0x00000100 1480 1474 }; 1481 1475 1476 + static const u32 godavari_golden_registers[] = 1477 + { 1478 + 0x55e4, 0xff607fff, 0xfc000100, 1479 + 0x6ed8, 0x00010101, 0x00010000, 1480 + 0x9830, 0xffffffff, 0x00000000, 1481 + 0x98302, 0xf00fffff, 0x00000400, 1482 + 0x6130, 0xffffffff, 0x00010000, 1483 + 0x5bb0, 0x000000f0, 0x00000070, 1484 + 0x5bc0, 0xf0311fff, 0x80300000, 1485 + 0x98f8, 0x73773777, 0x12010001, 1486 + 0x98fc, 0xffffffff, 0x00000010, 1487 + 0x8030, 0x00001f0f, 0x0000100a, 1488 + 0x2f48, 0x73773777, 0x12010001, 1489 + 0x2408, 0x000fffff, 0x000c007f, 1490 + 0x8a14, 0xf000003f, 0x00000007, 1491 + 0x8b24, 0xffffffff, 0x00ff0fff, 1492 + 0x30a04, 0x0000ff0f, 0x00000000, 1493 + 0x28a4c, 0x07ffffff, 0x06000000, 1494 + 0x4d8, 0x00000fff, 0x00000100, 1495 + 0xd014, 0x00010000, 0x00810001, 1496 + 0xd814, 0x00010000, 0x00810001, 1497 + 0x3e78, 0x00000001, 0x00000002, 1498 + 0xc768, 0x00000008, 0x00000008, 1499 + 0xc770, 0x00000f00, 0x00000800, 1500 + 0xc774, 0x00000f00, 0x00000800, 1501 + 0xc798, 0x00ffffff, 0x00ff7fbf, 1502 + 0xc79c, 0x00ffffff, 0x00ff7faf, 1503 + 0x8c00, 0x000000ff, 0x00000001, 1504 + 0x214f8, 0x01ff01ff, 0x00000002, 1505 + 0x21498, 0x007ff800, 0x00200000, 1506 + 0x2015c, 0xffffffff, 0x00000f40, 1507 + 0x88c4, 0x001f3ae3, 0x00000082, 1508 + 0x88d4, 0x0000001f, 0x00000010, 1509 + 0x30934, 0xffffffff, 0x00000000 1510 + }; 1511 + 1512 + 1482 1513 static void cik_init_golden_registers(struct radeon_device *rdev) 1483 1514 { 1484 1515 switch (rdev->family) { ··· 1540 1497 radeon_program_register_sequence(rdev, 1541 1498 kalindi_golden_registers, 1542 1499 (const u32)ARRAY_SIZE(kalindi_golden_registers)); 1500 + radeon_program_register_sequence(rdev, 1501 + kalindi_golden_common_registers, 1502 + (const u32)ARRAY_SIZE(kalindi_golden_common_registers)); 1503 + radeon_program_register_sequence(rdev, 1504 + kalindi_golden_spm_registers, 1505 + (const u32)ARRAY_SIZE(kalindi_golden_spm_registers)); 1506 + break; 1507 + case CHIP_MULLINS: 1508 + radeon_program_register_sequence(rdev, 1509 + kalindi_mgcg_cgcg_init, 1510 + (const u32)ARRAY_SIZE(kalindi_mgcg_cgcg_init)); 1511 + radeon_program_register_sequence(rdev, 1512 + godavari_golden_registers, 1513 + (const u32)ARRAY_SIZE(godavari_golden_registers)); 1543 1514 radeon_program_register_sequence(rdev, 1544 1515 kalindi_golden_common_registers, 1545 1516 (const u32)ARRAY_SIZE(kalindi_golden_common_registers)); ··· 1889 1832 ce_req_size = CIK_CE_UCODE_SIZE * 4; 1890 1833 mec_req_size = CIK_MEC_UCODE_SIZE * 4; 1891 1834 rlc_req_size = KB_RLC_UCODE_SIZE * 4; 1835 + sdma_req_size = CIK_SDMA_UCODE_SIZE * 4; 1836 + break; 1837 + case CHIP_MULLINS: 1838 + chip_name = "MULLINS"; 1839 + pfp_req_size = CIK_PFP_UCODE_SIZE * 4; 1840 + me_req_size = CIK_ME_UCODE_SIZE * 4; 1841 + ce_req_size = CIK_CE_UCODE_SIZE * 4; 1842 + mec_req_size = CIK_MEC_UCODE_SIZE * 4; 1843 + rlc_req_size = ML_RLC_UCODE_SIZE * 4; 1892 1844 sdma_req_size = CIK_SDMA_UCODE_SIZE * 4; 1893 1845 break; 1894 1846 default: BUG(); ··· 3338 3272 gb_addr_config = BONAIRE_GB_ADDR_CONFIG_GOLDEN; 3339 3273 break; 3340 3274 case CHIP_KABINI: 3275 + case CHIP_MULLINS: 3341 3276 default: 3342 3277 rdev->config.cik.max_shader_engines = 1; 3343 3278 rdev->config.cik.max_tile_pipes = 2; ··· 5868 5801 case CHIP_KABINI: 5869 5802 size = KB_RLC_UCODE_SIZE; 5870 5803 break; 5804 + case CHIP_MULLINS: 5805 + size = ML_RLC_UCODE_SIZE; 5806 + break; 5871 5807 } 5872 5808 5873 5809 cik_rlc_stop(rdev); ··· 6619 6549 buffer[count++] = cpu_to_le32(0x00000000); 6620 6550 break; 6621 6551 case CHIP_KABINI: 6552 + case CHIP_MULLINS: 6622 6553 buffer[count++] = cpu_to_le32(0x00000000); /* XXX */ 6623 6554 buffer[count++] = cpu_to_le32(0x00000000); 6624 6555 break;
+106 -29
drivers/gpu/drm/radeon/kv_dpm.c
··· 546 546 return 0; 547 547 } 548 548 549 + static u32 kv_convert_vid2_to_vid7(struct radeon_device *rdev, 550 + struct sumo_vid_mapping_table *vid_mapping_table, 551 + u32 vid_2bit) 552 + { 553 + struct radeon_clock_voltage_dependency_table *vddc_sclk_table = 554 + &rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk; 555 + u32 i; 556 + 557 + if (vddc_sclk_table && vddc_sclk_table->count) { 558 + if (vid_2bit < vddc_sclk_table->count) 559 + return vddc_sclk_table->entries[vid_2bit].v; 560 + else 561 + return vddc_sclk_table->entries[vddc_sclk_table->count - 1].v; 562 + } else { 563 + for (i = 0; i < vid_mapping_table->num_entries; i++) { 564 + if (vid_mapping_table->entries[i].vid_2bit == vid_2bit) 565 + return vid_mapping_table->entries[i].vid_7bit; 566 + } 567 + return vid_mapping_table->entries[vid_mapping_table->num_entries - 1].vid_7bit; 568 + } 569 + } 570 + 571 + static u32 kv_convert_vid7_to_vid2(struct radeon_device *rdev, 572 + struct sumo_vid_mapping_table *vid_mapping_table, 573 + u32 vid_7bit) 574 + { 575 + struct radeon_clock_voltage_dependency_table *vddc_sclk_table = 576 + &rdev->pm.dpm.dyn_state.vddc_dependency_on_sclk; 577 + u32 i; 578 + 579 + if (vddc_sclk_table && vddc_sclk_table->count) { 580 + for (i = 0; i < vddc_sclk_table->count; i++) { 581 + if (vddc_sclk_table->entries[i].v == vid_7bit) 582 + return i; 583 + } 584 + return vddc_sclk_table->count - 1; 585 + } else { 586 + for (i = 0; i < vid_mapping_table->num_entries; i++) { 587 + if (vid_mapping_table->entries[i].vid_7bit == vid_7bit) 588 + return vid_mapping_table->entries[i].vid_2bit; 589 + } 590 + 591 + return vid_mapping_table->entries[vid_mapping_table->num_entries - 1].vid_2bit; 592 + } 593 + } 594 + 549 595 static u16 kv_convert_8bit_index_to_voltage(struct radeon_device *rdev, 550 596 u16 voltage) 551 597 { ··· 602 556 u32 vid_2bit) 603 557 { 604 558 struct kv_power_info *pi = kv_get_pi(rdev); 605 - u32 vid_8bit = sumo_convert_vid2_to_vid7(rdev, 606 - &pi->sys_info.vid_mapping_table, 607 - vid_2bit); 559 + u32 vid_8bit = kv_convert_vid2_to_vid7(rdev, 560 + &pi->sys_info.vid_mapping_table, 561 + vid_2bit); 608 562 609 563 return kv_convert_8bit_index_to_voltage(rdev, (u16)vid_8bit); 610 564 } ··· 685 639 686 640 static int kv_unforce_levels(struct radeon_device *rdev) 687 641 { 688 - if (rdev->family == CHIP_KABINI) 642 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) 689 643 return kv_notify_message_to_smu(rdev, PPSMC_MSG_NoForcedLevel); 690 644 else 691 645 return kv_set_enabled_levels(rdev); ··· 1408 1362 struct radeon_uvd_clock_voltage_dependency_table *table = 1409 1363 &rdev->pm.dpm.dyn_state.uvd_clock_voltage_dependency_table; 1410 1364 int ret; 1365 + u32 mask; 1411 1366 1412 1367 if (!gate) { 1413 - if (!pi->caps_uvd_dpm || table->count || pi->caps_stable_p_state) 1368 + if (table->count) 1414 1369 pi->uvd_boot_level = table->count - 1; 1415 1370 else 1416 1371 pi->uvd_boot_level = 0; 1372 + 1373 + if (!pi->caps_uvd_dpm || pi->caps_stable_p_state) { 1374 + mask = 1 << pi->uvd_boot_level; 1375 + } else { 1376 + mask = 0x1f; 1377 + } 1417 1378 1418 1379 ret = kv_copy_bytes_to_smc(rdev, 1419 1380 pi->dpm_table_start + ··· 1430 1377 if (ret) 1431 1378 return ret; 1432 1379 1433 - if (!pi->caps_uvd_dpm || 1434 - pi->caps_stable_p_state) 1435 - kv_send_msg_to_smc_with_parameter(rdev, 1436 - PPSMC_MSG_UVDDPM_SetEnabledMask, 1437 - (1 << pi->uvd_boot_level)); 1380 + kv_send_msg_to_smc_with_parameter(rdev, 1381 + PPSMC_MSG_UVDDPM_SetEnabledMask, 1382 + mask); 1438 1383 } 1439 1384 1440 1385 return kv_enable_uvd_dpm(rdev, !gate); ··· 1668 1617 if (pi->acp_power_gated == gate) 1669 1618 return; 1670 1619 1671 - if (rdev->family == CHIP_KABINI) 1620 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) 1672 1621 return; 1673 1622 1674 1623 pi->acp_power_gated = gate; ··· 1837 1786 } 1838 1787 } 1839 1788 1840 - if (rdev->family == CHIP_KABINI) { 1789 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) { 1841 1790 if (pi->enable_dpm) { 1842 1791 kv_set_valid_clock_range(rdev, new_ps); 1843 1792 kv_update_dfs_bypass_settings(rdev, new_ps); ··· 1863 1812 return ret; 1864 1813 } 1865 1814 kv_update_sclk_t(rdev); 1815 + if (rdev->family == CHIP_MULLINS) 1816 + kv_enable_nb_dpm(rdev); 1866 1817 } 1867 1818 } else { 1868 1819 if (pi->enable_dpm) { ··· 1915 1862 { 1916 1863 struct kv_power_info *pi = kv_get_pi(rdev); 1917 1864 1918 - if (rdev->family == CHIP_KABINI) { 1865 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) { 1919 1866 kv_force_lowest_valid(rdev); 1920 1867 kv_init_graphics_levels(rdev); 1921 1868 kv_program_bootup_state(rdev); ··· 1954 1901 static void kv_patch_voltage_values(struct radeon_device *rdev) 1955 1902 { 1956 1903 int i; 1957 - struct radeon_uvd_clock_voltage_dependency_table *table = 1904 + struct radeon_uvd_clock_voltage_dependency_table *uvd_table = 1958 1905 &rdev->pm.dpm.dyn_state.uvd_clock_voltage_dependency_table; 1906 + struct radeon_vce_clock_voltage_dependency_table *vce_table = 1907 + &rdev->pm.dpm.dyn_state.vce_clock_voltage_dependency_table; 1908 + struct radeon_clock_voltage_dependency_table *samu_table = 1909 + &rdev->pm.dpm.dyn_state.samu_clock_voltage_dependency_table; 1910 + struct radeon_clock_voltage_dependency_table *acp_table = 1911 + &rdev->pm.dpm.dyn_state.acp_clock_voltage_dependency_table; 1959 1912 1960 - if (table->count) { 1961 - for (i = 0; i < table->count; i++) 1962 - table->entries[i].v = 1913 + if (uvd_table->count) { 1914 + for (i = 0; i < uvd_table->count; i++) 1915 + uvd_table->entries[i].v = 1963 1916 kv_convert_8bit_index_to_voltage(rdev, 1964 - table->entries[i].v); 1917 + uvd_table->entries[i].v); 1918 + } 1919 + 1920 + if (vce_table->count) { 1921 + for (i = 0; i < vce_table->count; i++) 1922 + vce_table->entries[i].v = 1923 + kv_convert_8bit_index_to_voltage(rdev, 1924 + vce_table->entries[i].v); 1925 + } 1926 + 1927 + if (samu_table->count) { 1928 + for (i = 0; i < samu_table->count; i++) 1929 + samu_table->entries[i].v = 1930 + kv_convert_8bit_index_to_voltage(rdev, 1931 + samu_table->entries[i].v); 1932 + } 1933 + 1934 + if (acp_table->count) { 1935 + for (i = 0; i < acp_table->count; i++) 1936 + acp_table->entries[i].v = 1937 + kv_convert_8bit_index_to_voltage(rdev, 1938 + acp_table->entries[i].v); 1965 1939 } 1966 1940 1967 1941 } ··· 2021 1941 break; 2022 1942 } 2023 1943 2024 - if (rdev->family == CHIP_KABINI) 1944 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) 2025 1945 return kv_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_DPM_ForceState, i); 2026 1946 else 2027 1947 return kv_set_enabled_level(rdev, i); ··· 2041 1961 break; 2042 1962 } 2043 1963 2044 - if (rdev->family == CHIP_KABINI) 1964 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) 2045 1965 return kv_send_msg_to_smc_with_parameter(rdev, PPSMC_MSG_DPM_ForceState, i); 2046 1966 else 2047 1967 return kv_set_enabled_level(rdev, i); ··· 2198 2118 else 2199 2119 pi->battery_state = false; 2200 2120 2201 - if (rdev->family == CHIP_KABINI) { 2121 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) { 2202 2122 ps->dpm0_pg_nb_ps_lo = 0x1; 2203 2123 ps->dpm0_pg_nb_ps_hi = 0x0; 2204 2124 ps->dpmx_nb_ps_lo = 0x1; ··· 2259 2179 if (pi->lowest_valid > pi->highest_valid) 2260 2180 return -EINVAL; 2261 2181 2262 - if (rdev->family == CHIP_KABINI) { 2182 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) { 2263 2183 for (i = pi->lowest_valid; i <= pi->highest_valid; i++) { 2264 2184 pi->graphics_level[i].GnbSlow = 1; 2265 2185 pi->graphics_level[i].ForceNbPs1 = 0; ··· 2333 2253 break; 2334 2254 2335 2255 kv_set_divider_value(rdev, i, table->entries[i].clk); 2336 - vid_2bit = sumo_convert_vid7_to_vid2(rdev, 2337 - &pi->sys_info.vid_mapping_table, 2338 - table->entries[i].v); 2256 + vid_2bit = kv_convert_vid7_to_vid2(rdev, 2257 + &pi->sys_info.vid_mapping_table, 2258 + table->entries[i].v); 2339 2259 kv_set_vid(rdev, i, vid_2bit); 2340 2260 kv_set_at(rdev, i, pi->at[i]); 2341 2261 kv_dpm_power_level_enabled_for_throttle(rdev, i, true); ··· 2404 2324 struct kv_power_info *pi = kv_get_pi(rdev); 2405 2325 u32 nbdpmconfig1; 2406 2326 2407 - if (rdev->family == CHIP_KABINI) 2327 + if (rdev->family == CHIP_KABINI || rdev->family == CHIP_MULLINS) 2408 2328 return; 2409 2329 2410 2330 if (pi->sys_info.nb_dpm_enable) { ··· 2710 2630 pi->at[i] = TRINITY_AT_DFLT; 2711 2631 2712 2632 pi->sram_end = SMC_RAM_END; 2713 - 2714 - if (rdev->family == CHIP_KABINI) 2715 - pi->high_voltage_t = 4001; 2716 2633 2717 2634 pi->enable_nb_dpm = true; 2718 2635
+1
drivers/gpu/drm/radeon/radeon_asic.c
··· 2516 2516 break; 2517 2517 case CHIP_KAVERI: 2518 2518 case CHIP_KABINI: 2519 + case CHIP_MULLINS: 2519 2520 rdev->asic = &kv_asic; 2520 2521 /* set num crtcs */ 2521 2522 if (rdev->family == CHIP_KAVERI) {
+1
drivers/gpu/drm/radeon/radeon_device.c
··· 99 99 "KAVERI", 100 100 "KABINI", 101 101 "HAWAII", 102 + "MULLINS", 102 103 "LAST", 103 104 }; 104 105
+1
drivers/gpu/drm/radeon/radeon_family.h
··· 97 97 CHIP_KAVERI, 98 98 CHIP_KABINI, 99 99 CHIP_HAWAII, 100 + CHIP_MULLINS, 100 101 CHIP_LAST, 101 102 }; 102 103
+1
drivers/gpu/drm/radeon/radeon_pm.c
··· 1300 1300 case CHIP_KABINI: 1301 1301 case CHIP_KAVERI: 1302 1302 case CHIP_HAWAII: 1303 + case CHIP_MULLINS: 1303 1304 /* DPM requires the RLC, RV770+ dGPU requires SMC */ 1304 1305 if (!rdev->rlc_fw) 1305 1306 rdev->pm.pm_method = PM_METHOD_PROFILE;
+1
drivers/gpu/drm/radeon/radeon_ucode.h
··· 52 52 #define BONAIRE_RLC_UCODE_SIZE 2048 53 53 #define KB_RLC_UCODE_SIZE 2560 54 54 #define KV_RLC_UCODE_SIZE 2560 55 + #define ML_RLC_UCODE_SIZE 2560 55 56 56 57 /* MC */ 57 58 #define BTC_MC_UCODE_SIZE 6024
+1
drivers/gpu/drm/radeon/radeon_uvd.c
··· 99 99 case CHIP_KABINI: 100 100 case CHIP_KAVERI: 101 101 case CHIP_HAWAII: 102 + case CHIP_MULLINS: 102 103 fw_name = FIRMWARE_BONAIRE; 103 104 break; 104 105
+1
drivers/gpu/drm/radeon/radeon_vce.c
··· 66 66 case CHIP_BONAIRE: 67 67 case CHIP_KAVERI: 68 68 case CHIP_KABINI: 69 + case CHIP_MULLINS: 69 70 fw_name = FIRMWARE_BONAIRE; 70 71 break; 71 72
+16
include/drm/drm_pciids.h
··· 637 637 {0x1002, 0x983d, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_KABINI|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 638 638 {0x1002, 0x983e, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_KABINI|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 639 639 {0x1002, 0x983f, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_KABINI|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 640 + {0x1002, 0x9850, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 641 + {0x1002, 0x9851, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 642 + {0x1002, 0x9852, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 643 + {0x1002, 0x9853, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 644 + {0x1002, 0x9854, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 645 + {0x1002, 0x9855, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 646 + {0x1002, 0x9856, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 647 + {0x1002, 0x9857, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 648 + {0x1002, 0x9858, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 649 + {0x1002, 0x9859, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 650 + {0x1002, 0x985A, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 651 + {0x1002, 0x985B, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 652 + {0x1002, 0x985C, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 653 + {0x1002, 0x985D, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 654 + {0x1002, 0x985E, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 655 + {0x1002, 0x985F, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_MULLINS|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 640 656 {0x1002, 0x9900, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 641 657 {0x1002, 0x9901, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \ 642 658 {0x1002, 0x9903, PCI_ANY_ID, PCI_ANY_ID, 0, 0, CHIP_ARUBA|RADEON_IS_MOBILITY|RADEON_NEW_MEMMAP|RADEON_IS_IGP}, \