Lines Matching refs:rinfo

40 static void radeon_reinitialize_M10(struct radeonfb_info *rinfo);
98 static int radeon_apply_workarounds(struct radeonfb_info *rinfo)
103 if ((id->subsystem_vendor == rinfo->pdev->subsystem_vendor ) &&
104 (id->subsystem_device == rinfo->pdev->subsystem_device )) {
110 rinfo->pm_mode |= id->pm_mode_modifier;
113 rinfo->reinit_func = id->new_reinit_func;
121 static inline int radeon_apply_workarounds(struct radeonfb_info *rinfo)
129 static void radeon_pm_disable_dynamic_mode(struct radeonfb_info *rinfo)
134 if ((rinfo->family == CHIP_FAMILY_RV100) && (!rinfo->is_mobility)) {
135 if (rinfo->has_CRTC2) {
152 if (!rinfo->has_CRTC2) {
165 if (rinfo->family == CHIP_FAMILY_RV350) {
231 if (rinfo->is_mobility) {
248 else if (rinfo->family == CHIP_FAMILY_R300 ||
249 rinfo->family == CHIP_FAMILY_R350) {
260 if (rinfo->family == CHIP_FAMILY_R300 || rinfo->family == CHIP_FAMILY_R350) {
274 if (rinfo->is_IGP) {
285 else if (rinfo->is_mobility) {
303 if (rinfo->is_mobility) {
330 static void radeon_pm_enable_dynamic_mode(struct radeonfb_info *rinfo)
335 if (!rinfo->has_CRTC2) {
350 if (rinfo->family == CHIP_FAMILY_RV350) {
420 if (rinfo->vram_width == 64) {
435 if (rinfo->family == CHIP_FAMILY_R300 || rinfo->family == CHIP_FAMILY_R350) {
472 if ((rinfo->family == CHIP_FAMILY_RV250 &&
474 ((rinfo->family == CHIP_FAMILY_RV100) &&
482 if ((rinfo->family == CHIP_FAMILY_RV200) ||
483 (rinfo->family == CHIP_FAMILY_RV250) ||
484 (rinfo->family == CHIP_FAMILY_RV280)) {
489 if (((rinfo->family == CHIP_FAMILY_RV200) ||
490 (rinfo->family == CHIP_FAMILY_RV250)) &&
500 if (((rinfo->family == CHIP_FAMILY_RV200) ||
501 (rinfo->family == CHIP_FAMILY_RV250)) &&
527 if (rinfo->is_mobility) {
549 static void OUTMC( struct radeonfb_info *rinfo, u8 indx, u32 value)
555 static u32 INMC(struct radeonfb_info *rinfo, u8 indx)
561 static void radeon_pm_save_regs(struct radeonfb_info *rinfo, int saving_for_d3)
563 rinfo->save_regs[0] = INPLL(PLL_PWRMGT_CNTL);
564 rinfo->save_regs[1] = INPLL(CLK_PWRMGT_CNTL);
565 rinfo->save_regs[2] = INPLL(MCLK_CNTL);
566 rinfo->save_regs[3] = INPLL(SCLK_CNTL);
567 rinfo->save_regs[4] = INPLL(CLK_PIN_CNTL);
568 rinfo->save_regs[5] = INPLL(VCLK_ECP_CNTL);
569 rinfo->save_regs[6] = INPLL(PIXCLKS_CNTL);
570 rinfo->save_regs[7] = INPLL(MCLK_MISC);
571 rinfo->save_regs[8] = INPLL(P2PLL_CNTL);
573 rinfo->save_regs[9] = INREG(DISP_MISC_CNTL);
574 rinfo->save_regs[10] = INREG(DISP_PWR_MAN);
575 rinfo->save_regs[11] = INREG(LVDS_GEN_CNTL);
576 rinfo->save_regs[13] = INREG(TV_DAC_CNTL);
577 rinfo->save_regs[14] = INREG(BUS_CNTL1);
578 rinfo->save_regs[15] = INREG(CRTC_OFFSET_CNTL);
579 rinfo->save_regs[16] = INREG(AGP_CNTL);
580 rinfo->save_regs[17] = (INREG(CRTC_GEN_CNTL) & 0xfdffffff) | 0x04000000;
581 rinfo->save_regs[18] = (INREG(CRTC2_GEN_CNTL) & 0xfdffffff) | 0x04000000;
582 rinfo->save_regs[19] = INREG(GPIOPAD_A);
583 rinfo->save_regs[20] = INREG(GPIOPAD_EN);
584 rinfo->save_regs[21] = INREG(GPIOPAD_MASK);
585 rinfo->save_regs[22] = INREG(ZV_LCDPAD_A);
586 rinfo->save_regs[23] = INREG(ZV_LCDPAD_EN);
587 rinfo->save_regs[24] = INREG(ZV_LCDPAD_MASK);
588 rinfo->save_regs[25] = INREG(GPIO_VGA_DDC);
589 rinfo->save_regs[26] = INREG(GPIO_DVI_DDC);
590 rinfo->save_regs[27] = INREG(GPIO_MONID);
591 rinfo->save_regs[28] = INREG(GPIO_CRT2_DDC);
593 rinfo->save_regs[29] = INREG(SURFACE_CNTL);
594 rinfo->save_regs[30] = INREG(MC_FB_LOCATION);
595 rinfo->save_regs[31] = INREG(DISPLAY_BASE_ADDR);
596 rinfo->save_regs[32] = INREG(MC_AGP_LOCATION);
597 rinfo->save_regs[33] = INREG(CRTC2_DISPLAY_BASE_ADDR);
599 rinfo->save_regs[34] = INPLL(SCLK_MORE_CNTL);
600 rinfo->save_regs[35] = INREG(MEM_SDRAM_MODE_REG);
601 rinfo->save_regs[36] = INREG(BUS_CNTL);
602 rinfo->save_regs[39] = INREG(RBBM_CNTL);
603 rinfo->save_regs[40] = INREG(DAC_CNTL);
604 rinfo->save_regs[41] = INREG(HOST_PATH_CNTL);
605 rinfo->save_regs[37] = INREG(MPP_TB_CONFIG);
606 rinfo->save_regs[38] = INREG(FCP_CNTL);
608 if (rinfo->is_mobility) {
609 rinfo->save_regs[12] = INREG(LVDS_PLL_CNTL);
610 rinfo->save_regs[43] = INPLL(pllSSPLL_CNTL);
611 rinfo->save_regs[44] = INPLL(pllSSPLL_REF_DIV);
612 rinfo->save_regs[45] = INPLL(pllSSPLL_DIV_0);
613 rinfo->save_regs[90] = INPLL(pllSS_INT_CNTL);
614 rinfo->save_regs[91] = INPLL(pllSS_TST_CNTL);
615 rinfo->save_regs[81] = INREG(LVDS_GEN_CNTL);
618 if (rinfo->family >= CHIP_FAMILY_RV200) {
619 rinfo->save_regs[42] = INREG(MEM_REFRESH_CNTL);
620 rinfo->save_regs[46] = INREG(MC_CNTL);
621 rinfo->save_regs[47] = INREG(MC_INIT_GFX_LAT_TIMER);
622 rinfo->save_regs[48] = INREG(MC_INIT_MISC_LAT_TIMER);
623 rinfo->save_regs[49] = INREG(MC_TIMING_CNTL);
624 rinfo->save_regs[50] = INREG(MC_READ_CNTL_AB);
625 rinfo->save_regs[51] = INREG(MC_IOPAD_CNTL);
626 rinfo->save_regs[52] = INREG(MC_CHIP_IO_OE_CNTL_AB);
627 rinfo->save_regs[53] = INREG(MC_DEBUG);
629 rinfo->save_regs[54] = INREG(PAMAC0_DLY_CNTL);
630 rinfo->save_regs[55] = INREG(PAMAC1_DLY_CNTL);
631 rinfo->save_regs[56] = INREG(PAD_CTLR_MISC);
632 rinfo->save_regs[57] = INREG(FW_CNTL);
634 if (rinfo->family >= CHIP_FAMILY_R300) {
635 rinfo->save_regs[58] = INMC(rinfo, ixR300_MC_MC_INIT_WR_LAT_TIMER);
636 rinfo->save_regs[59] = INMC(rinfo, ixR300_MC_IMP_CNTL);
637 rinfo->save_regs[60] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_C0);
638 rinfo->save_regs[61] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_C1);
639 rinfo->save_regs[62] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_D0);
640 rinfo->save_regs[63] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_D1);
641 rinfo->save_regs[64] = INMC(rinfo, ixR300_MC_BIST_CNTL_3);
642 rinfo->save_regs[65] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_A0);
643 rinfo->save_regs[66] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_A1);
644 rinfo->save_regs[67] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_B0);
645 rinfo->save_regs[68] = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_B1);
646 rinfo->save_regs[69] = INMC(rinfo, ixR300_MC_DEBUG_CNTL);
647 rinfo->save_regs[70] = INMC(rinfo, ixR300_MC_DLL_CNTL);
648 rinfo->save_regs[71] = INMC(rinfo, ixR300_MC_IMP_CNTL_0);
649 rinfo->save_regs[72] = INMC(rinfo, ixR300_MC_ELPIDA_CNTL);
650 rinfo->save_regs[96] = INMC(rinfo, ixR300_MC_READ_CNTL_CD);
652 rinfo->save_regs[59] = INMC(rinfo, ixMC_IMP_CNTL);
653 rinfo->save_regs[65] = INMC(rinfo, ixMC_CHP_IO_CNTL_A0);
654 rinfo->save_regs[66] = INMC(rinfo, ixMC_CHP_IO_CNTL_A1);
655 rinfo->save_regs[67] = INMC(rinfo, ixMC_CHP_IO_CNTL_B0);
656 rinfo->save_regs[68] = INMC(rinfo, ixMC_CHP_IO_CNTL_B1);
657 rinfo->save_regs[71] = INMC(rinfo, ixMC_IMP_CNTL_0);
660 rinfo->save_regs[73] = INPLL(pllMPLL_CNTL);
661 rinfo->save_regs[74] = INPLL(pllSPLL_CNTL);
662 rinfo->save_regs[75] = INPLL(pllMPLL_AUX_CNTL);
663 rinfo->save_regs[76] = INPLL(pllSPLL_AUX_CNTL);
664 rinfo->save_regs[77] = INPLL(pllM_SPLL_REF_FB_DIV);
665 rinfo->save_regs[78] = INPLL(pllAGP_PLL_CNTL);
666 rinfo->save_regs[79] = INREG(PAMAC2_DLY_CNTL);
668 rinfo->save_regs[80] = INREG(OV0_BASE_ADDR);
669 rinfo->save_regs[82] = INREG(FP_GEN_CNTL);
670 rinfo->save_regs[83] = INREG(FP2_GEN_CNTL);
671 rinfo->save_regs[84] = INREG(TMDS_CNTL);
672 rinfo->save_regs[85] = INREG(TMDS_TRANSMITTER_CNTL);
673 rinfo->save_regs[86] = INREG(DISP_OUTPUT_CNTL);
674 rinfo->save_regs[87] = INREG(DISP_HW_DEBUG);
675 rinfo->save_regs[88] = INREG(TV_MASTER_CNTL);
676 rinfo->save_regs[89] = INPLL(pllP2PLL_REF_DIV);
677 rinfo->save_regs[92] = INPLL(pllPPLL_DIV_0);
678 rinfo->save_regs[93] = INPLL(pllPPLL_CNTL);
679 rinfo->save_regs[94] = INREG(GRPH_BUFFER_CNTL);
680 rinfo->save_regs[95] = INREG(GRPH2_BUFFER_CNTL);
681 rinfo->save_regs[96] = INREG(HDP_DEBUG);
682 rinfo->save_regs[97] = INPLL(pllMDLL_CKO);
683 rinfo->save_regs[98] = INPLL(pllMDLL_RDCKA);
684 rinfo->save_regs[99] = INPLL(pllMDLL_RDCKB);
687 static void radeon_pm_restore_regs(struct radeonfb_info *rinfo)
689 OUTPLL(P2PLL_CNTL, rinfo->save_regs[8] & 0xFFFFFFFE); /* First */
691 OUTPLL(PLL_PWRMGT_CNTL, rinfo->save_regs[0]);
692 OUTPLL(CLK_PWRMGT_CNTL, rinfo->save_regs[1]);
693 OUTPLL(MCLK_CNTL, rinfo->save_regs[2]);
694 OUTPLL(SCLK_CNTL, rinfo->save_regs[3]);
695 OUTPLL(CLK_PIN_CNTL, rinfo->save_regs[4]);
696 OUTPLL(VCLK_ECP_CNTL, rinfo->save_regs[5]);
697 OUTPLL(PIXCLKS_CNTL, rinfo->save_regs[6]);
698 OUTPLL(MCLK_MISC, rinfo->save_regs[7]);
699 if (rinfo->family == CHIP_FAMILY_RV350)
700 OUTPLL(SCLK_MORE_CNTL, rinfo->save_regs[34]);
702 OUTREG(SURFACE_CNTL, rinfo->save_regs[29]);
703 OUTREG(MC_FB_LOCATION, rinfo->save_regs[30]);
704 OUTREG(DISPLAY_BASE_ADDR, rinfo->save_regs[31]);
705 OUTREG(MC_AGP_LOCATION, rinfo->save_regs[32]);
706 OUTREG(CRTC2_DISPLAY_BASE_ADDR, rinfo->save_regs[33]);
707 OUTREG(CNFG_MEMSIZE, rinfo->video_ram);
709 OUTREG(DISP_MISC_CNTL, rinfo->save_regs[9]);
710 OUTREG(DISP_PWR_MAN, rinfo->save_regs[10]);
711 OUTREG(LVDS_GEN_CNTL, rinfo->save_regs[11]);
712 OUTREG(LVDS_PLL_CNTL,rinfo->save_regs[12]);
713 OUTREG(TV_DAC_CNTL, rinfo->save_regs[13]);
714 OUTREG(BUS_CNTL1, rinfo->save_regs[14]);
715 OUTREG(CRTC_OFFSET_CNTL, rinfo->save_regs[15]);
716 OUTREG(AGP_CNTL, rinfo->save_regs[16]);
717 OUTREG(CRTC_GEN_CNTL, rinfo->save_regs[17]);
718 OUTREG(CRTC2_GEN_CNTL, rinfo->save_regs[18]);
719 OUTPLL(P2PLL_CNTL, rinfo->save_regs[8]);
721 OUTREG(GPIOPAD_A, rinfo->save_regs[19]);
722 OUTREG(GPIOPAD_EN, rinfo->save_regs[20]);
723 OUTREG(GPIOPAD_MASK, rinfo->save_regs[21]);
724 OUTREG(ZV_LCDPAD_A, rinfo->save_regs[22]);
725 OUTREG(ZV_LCDPAD_EN, rinfo->save_regs[23]);
726 OUTREG(ZV_LCDPAD_MASK, rinfo->save_regs[24]);
727 OUTREG(GPIO_VGA_DDC, rinfo->save_regs[25]);
728 OUTREG(GPIO_DVI_DDC, rinfo->save_regs[26]);
729 OUTREG(GPIO_MONID, rinfo->save_regs[27]);
730 OUTREG(GPIO_CRT2_DDC, rinfo->save_regs[28]);
733 static void radeon_pm_disable_iopad(struct radeonfb_info *rinfo)
747 static void radeon_pm_program_v2clk(struct radeonfb_info *rinfo)
750 if (rinfo->family <= CHIP_FAMILY_RV280) {
752 __INPLL(rinfo, pllPIXCLKS_CNTL)
777 static void radeon_pm_low_current(struct radeonfb_info *rinfo)
782 if (rinfo->family <= CHIP_FAMILY_RV280) {
821 static void radeon_pm_setup_for_suspend(struct radeonfb_info *rinfo)
862 if (rinfo->family <= CHIP_FAMILY_RV280)
962 if (rinfo->family <= CHIP_FAMILY_RV280) {
1059 static void radeon_pm_yclk_mclk_sync(struct radeonfb_info *rinfo)
1063 mc_chp_io_cntl_a1 = INMC( rinfo, ixMC_CHP_IO_CNTL_A1)
1065 mc_chp_io_cntl_b1 = INMC( rinfo, ixMC_CHP_IO_CNTL_B1)
1068 OUTMC( rinfo, ixMC_CHP_IO_CNTL_A1, mc_chp_io_cntl_a1
1070 OUTMC( rinfo, ixMC_CHP_IO_CNTL_B1, mc_chp_io_cntl_b1
1073 OUTMC( rinfo, ixMC_CHP_IO_CNTL_A1, mc_chp_io_cntl_a1);
1074 OUTMC( rinfo, ixMC_CHP_IO_CNTL_B1, mc_chp_io_cntl_b1);
1079 static void radeon_pm_yclk_mclk_sync_m10(struct radeonfb_info *rinfo)
1083 mc_chp_io_cntl_a1 = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_A1)
1085 mc_chp_io_cntl_b1 = INMC(rinfo, ixR300_MC_CHP_IO_CNTL_B1)
1088 OUTMC( rinfo, ixR300_MC_CHP_IO_CNTL_A1,
1090 OUTMC( rinfo, ixR300_MC_CHP_IO_CNTL_B1,
1093 OUTMC( rinfo, ixR300_MC_CHP_IO_CNTL_A1, mc_chp_io_cntl_a1);
1094 OUTMC( rinfo, ixR300_MC_CHP_IO_CNTL_B1, mc_chp_io_cntl_b1);
1099 static void radeon_pm_program_mode_reg(struct radeonfb_info *rinfo, u16 value,
1133 static void radeon_pm_m10_program_mode_wait(struct radeonfb_info *rinfo)
1146 static void radeon_pm_enable_dll(struct radeonfb_info *rinfo)
1193 static void radeon_pm_enable_dll_m10(struct radeonfb_info *rinfo)
1203 OUTMC(rinfo, ixR300_MC_DLL_CNTL, rinfo->save_regs[70]);
1247 static void radeon_pm_full_reset_sdram(struct radeonfb_info *rinfo)
1268 if (rinfo->family == CHIP_FAMILY_RV350) {
1269 u32 sdram_mode_reg = rinfo->save_regs[35];
1291 radeon_pm_enable_dll_m10(rinfo);
1292 radeon_pm_yclk_mclk_sync_m10(rinfo);
1295 if (rinfo->of_node != NULL) {
1298 mrtable = of_get_property(rinfo->of_node, "ATY,MRT", &size);
1311 radeon_pm_m10_program_mode_wait(rinfo);
1329 else if (!rinfo->is_mobility && rinfo->family == CHIP_FAMILY_RV200) {
1341 radeon_pm_program_mode_reg(rinfo, 0x2002, 2);
1342 radeon_pm_program_mode_reg(rinfo, 0x0132, 2);
1343 radeon_pm_program_mode_reg(rinfo, 0x0032, 2);
1352 else if (rinfo->is_mobility && rinfo->family == CHIP_FAMILY_RV100) {
1363 radeon_pm_enable_dll(rinfo);
1366 radeon_pm_yclk_mclk_sync(rinfo);
1369 radeon_pm_program_mode_reg(rinfo, 0x2000, 1);
1370 radeon_pm_program_mode_reg(rinfo, 0x2001, 1);
1371 radeon_pm_program_mode_reg(rinfo, 0x2002, 1);
1372 radeon_pm_program_mode_reg(rinfo, 0x0132, 1);
1373 radeon_pm_program_mode_reg(rinfo, 0x0032, 1);
1382 else if (rinfo->is_mobility) {
1396 radeon_pm_enable_dll(rinfo);
1399 radeon_pm_yclk_mclk_sync(rinfo);
1402 if (rinfo->family <= CHIP_FAMILY_RV250) {
1403 radeon_pm_program_mode_reg(rinfo, 0x2000, 1);
1404 radeon_pm_program_mode_reg(rinfo, 0x2001, 1);
1405 radeon_pm_program_mode_reg(rinfo, 0x2002, 1);
1406 radeon_pm_program_mode_reg(rinfo, 0x0132, 1);
1407 radeon_pm_program_mode_reg(rinfo, 0x0032, 1);
1410 else if (rinfo->family == CHIP_FAMILY_RV280) {
1411 radeon_pm_program_mode_reg(rinfo, 0x2000, 1);
1412 radeon_pm_program_mode_reg(rinfo, 0x0132, 1);
1413 radeon_pm_program_mode_reg(rinfo, 0x0032, 1);
1434 static void radeon_pm_reset_pad_ctlr_strength(struct radeonfb_info *rinfo)
1459 static void radeon_pm_all_ppls_off(struct radeonfb_info *rinfo)
1473 static void radeon_pm_start_mclk_sclk(struct radeonfb_info *rinfo)
1484 radeon_pll_errata_after_index(rinfo);
1486 radeon_pll_errata_after_data(rinfo);
1490 tmp = (tmp & 0xff00fffful) | (rinfo->save_regs[77] & 0x00ff0000ul);
1510 tmp |= rinfo->save_regs[3] & SCLK_CNTL__SCLK_SRC_SEL_MASK;
1519 radeon_pll_errata_after_index(rinfo);
1521 radeon_pll_errata_after_data(rinfo);
1525 tmp = (tmp & 0xffff00fful) | (rinfo->save_regs[77] & 0x0000ff00ul);
1544 tmp |= rinfo->save_regs[2] & 0xffff;
1551 static void radeon_pm_m10_disable_spread_spectrum(struct radeonfb_info *rinfo)
1569 OUTPLL(pllSS_INT_CNTL, rinfo->save_regs[90] & ~3);
1580 static void radeon_pm_m10_enable_lvds_spread_spectrum(struct radeonfb_info *rinfo)
1593 OUTPLL(pllSSPLL_CNTL, rinfo->save_regs[43] | 3);
1596 OUTPLL(pllSSPLL_REF_DIV, rinfo->save_regs[44]);
1597 OUTPLL(pllSSPLL_DIV_0, rinfo->save_regs[45]);
1605 OUTPLL(pllSS_INT_CNTL, rinfo->save_regs[90]);
1621 OUTPLL(pllSCLK_MORE_CNTL, rinfo->save_regs[34]);
1622 OUTPLL(pllSS_TST_CNTL, rinfo->save_regs[91]);
1635 static void radeon_pm_restore_pixel_pll(struct radeonfb_info *rinfo)
1640 radeon_pll_errata_after_index(rinfo);
1642 radeon_pll_errata_after_data(rinfo);
1649 tmp = (tmp & ~PPLL_REF_DIV_MASK) | rinfo->pll.ref_div;
1658 radeon_pll_errata_after_index(rinfo);
1660 radeon_pll_errata_after_data(rinfo);
1665 OUTPLL(pllPPLL_DIV_0, rinfo->save_regs[92]);
1685 radeon_pll_errata_after_index(rinfo);
1686 radeon_pll_errata_after_data(rinfo);
1689 static void radeon_pm_m10_reconfigure_mc(struct radeonfb_info *rinfo)
1691 OUTREG(MC_CNTL, rinfo->save_regs[46]);
1692 OUTREG(MC_INIT_GFX_LAT_TIMER, rinfo->save_regs[47]);
1693 OUTREG(MC_INIT_MISC_LAT_TIMER, rinfo->save_regs[48]);
1695 rinfo->save_regs[35] & ~MEM_SDRAM_MODE_REG__MC_INIT_COMPLETE);
1696 OUTREG(MC_TIMING_CNTL, rinfo->save_regs[49]);
1697 OUTREG(MEM_REFRESH_CNTL, rinfo->save_regs[42]);
1698 OUTREG(MC_READ_CNTL_AB, rinfo->save_regs[50]);
1699 OUTREG(MC_CHIP_IO_OE_CNTL_AB, rinfo->save_regs[52]);
1700 OUTREG(MC_IOPAD_CNTL, rinfo->save_regs[51]);
1701 OUTREG(MC_DEBUG, rinfo->save_regs[53]);
1703 OUTMC(rinfo, ixR300_MC_MC_INIT_WR_LAT_TIMER, rinfo->save_regs[58]);
1704 OUTMC(rinfo, ixR300_MC_IMP_CNTL, rinfo->save_regs[59]);
1705 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_C0, rinfo->save_regs[60]);
1706 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_C1, rinfo->save_regs[61]);
1707 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_D0, rinfo->save_regs[62]);
1708 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_D1, rinfo->save_regs[63]);
1709 OUTMC(rinfo, ixR300_MC_BIST_CNTL_3, rinfo->save_regs[64]);
1710 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_A0, rinfo->save_regs[65]);
1711 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_A1, rinfo->save_regs[66]);
1712 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_B0, rinfo->save_regs[67]);
1713 OUTMC(rinfo, ixR300_MC_CHP_IO_CNTL_B1, rinfo->save_regs[68]);
1714 OUTMC(rinfo, ixR300_MC_DEBUG_CNTL, rinfo->save_regs[69]);
1715 OUTMC(rinfo, ixR300_MC_DLL_CNTL, rinfo->save_regs[70]);
1716 OUTMC(rinfo, ixR300_MC_IMP_CNTL_0, rinfo->save_regs[71]);
1717 OUTMC(rinfo, ixR300_MC_ELPIDA_CNTL, rinfo->save_regs[72]);
1718 OUTMC(rinfo, ixR300_MC_READ_CNTL_CD, rinfo->save_regs[96]);
1722 static void radeon_reinitialize_M10(struct radeonfb_info *rinfo)
1727 OUTREG(MC_AGP_LOCATION, rinfo->save_regs[32]);
1728 OUTREG(DISPLAY_BASE_ADDR, rinfo->save_regs[31]);
1729 OUTREG(CRTC2_DISPLAY_BASE_ADDR, rinfo->save_regs[33]);
1730 OUTREG(MC_FB_LOCATION, rinfo->save_regs[30]);
1731 OUTREG(OV0_BASE_ADDR, rinfo->save_regs[80]);
1732 OUTREG(CNFG_MEMSIZE, rinfo->video_ram);
1733 OUTREG(BUS_CNTL, rinfo->save_regs[36]);
1734 OUTREG(BUS_CNTL1, rinfo->save_regs[14]);
1735 OUTREG(MPP_TB_CONFIG, rinfo->save_regs[37]);
1736 OUTREG(FCP_CNTL, rinfo->save_regs[38]);
1737 OUTREG(RBBM_CNTL, rinfo->save_regs[39]);
1738 OUTREG(DAC_CNTL, rinfo->save_regs[40]);
1746 radeon_pm_reset_pad_ctlr_strength(rinfo);
1752 radeon_pm_all_ppls_off(rinfo);
1770 OUTREG(AGP_CNTL, rinfo->save_regs[16]);
1771 OUTREG(HOST_PATH_CNTL, rinfo->save_regs[41]);
1772 OUTREG(DISP_MISC_CNTL, rinfo->save_regs[9]);
1775 tmp = rinfo->save_regs[1]
1780 OUTREG(PAD_CTLR_MISC, rinfo->save_regs[56]);
1781 OUTREG(FW_CNTL, rinfo->save_regs[57]);
1782 OUTREG(HDP_DEBUG, rinfo->save_regs[96]);
1783 OUTREG(PAMAC0_DLY_CNTL, rinfo->save_regs[54]);
1784 OUTREG(PAMAC1_DLY_CNTL, rinfo->save_regs[55]);
1785 OUTREG(PAMAC2_DLY_CNTL, rinfo->save_regs[79]);
1788 radeon_pm_m10_reconfigure_mc(rinfo);
1802 OUTPLL(pllCLK_PIN_CNTL, rinfo->save_regs[4]);
1805 tmp = rinfo->save_regs[2] & 0xff000000;
1854 OUTPLL(pllM_SPLL_REF_FB_DIV, rinfo->save_regs[77]);
1855 OUTPLL(pllMPLL_AUX_CNTL, rinfo->save_regs[75]);
1856 OUTPLL(pllSPLL_AUX_CNTL, rinfo->save_regs[76]);
1859 OUTPLL(pllPPLL_CNTL, rinfo->save_regs[93] | 0x3);
1860 OUTPLL(pllP2PLL_CNTL, rinfo->save_regs[8] | 0x3);
1861 OUTPLL(pllMPLL_CNTL, rinfo->save_regs[73] | 0x03);
1862 OUTPLL(pllSPLL_CNTL, rinfo->save_regs[74] | 0x03);
1865 OUTMC(rinfo, ixR300_MC_DLL_CNTL, rinfo->save_regs[70]);
1868 OUTPLL(pllMDLL_RDCKA, rinfo->save_regs[98] | 0xff);
1874 OUTPLL(pllPLL_PWRMGT_CNTL, rinfo->save_regs[0]);
1891 radeon_pm_start_mclk_sclk(rinfo);
1894 radeon_pm_full_reset_sdram(rinfo);
1909 OUTREG(FP_GEN_CNTL, rinfo->save_regs[82]);
1910 OUTREG(FP2_GEN_CNTL, rinfo->save_regs[83]);
1913 OUTREG(LVDS_GEN_CNTL, rinfo->save_regs[11] &
1915 OUTREG(LVDS_PLL_CNTL, (rinfo->save_regs[12] & ~0xf0000) | 0x20000);
1917 OUTREG(DISP_OUTPUT_CNTL, rinfo->save_regs[86]);
1920 OUTREG(GPIOPAD_A, rinfo->save_regs[19]);
1921 OUTREG(GPIOPAD_EN, rinfo->save_regs[20]);
1922 OUTREG(GPIOPAD_MASK, rinfo->save_regs[21]);
1926 writeb(0, rinfo->fb_base + i);
1933 OUTREG(GRPH_BUFFER_CNTL, rinfo->save_regs[94]);
1934 OUTREG(GRPH2_BUFFER_CNTL, rinfo->save_regs[95]);
1937 radeon_pm_m10_disable_spread_spectrum(rinfo);
1938 radeon_pm_restore_pixel_pll(rinfo);
1944 radeon_pm_m10_enable_lvds_spread_spectrum(rinfo);
1950 static void radeon_pm_m9p_reconfigure_mc(struct radeonfb_info *rinfo)
1952 OUTREG(MC_CNTL, rinfo->save_regs[46]);
1953 OUTREG(MC_INIT_GFX_LAT_TIMER, rinfo->save_regs[47]);
1954 OUTREG(MC_INIT_MISC_LAT_TIMER, rinfo->save_regs[48]);
1956 rinfo->save_regs[35] & ~MEM_SDRAM_MODE_REG__MC_INIT_COMPLETE);
1957 OUTREG(MC_TIMING_CNTL, rinfo->save_regs[49]);
1958 OUTREG(MC_READ_CNTL_AB, rinfo->save_regs[50]);
1959 OUTREG(MEM_REFRESH_CNTL, rinfo->save_regs[42]);
1960 OUTREG(MC_IOPAD_CNTL, rinfo->save_regs[51]);
1961 OUTREG(MC_DEBUG, rinfo->save_regs[53]);
1962 OUTREG(MC_CHIP_IO_OE_CNTL_AB, rinfo->save_regs[52]);
1964 OUTMC(rinfo, ixMC_IMP_CNTL, rinfo->save_regs[59] /*0x00f460d6*/);
1965 OUTMC(rinfo, ixMC_CHP_IO_CNTL_A0, rinfo->save_regs[65] /*0xfecfa666*/);
1966 OUTMC(rinfo, ixMC_CHP_IO_CNTL_A1, rinfo->save_regs[66] /*0x141555ff*/);
1967 OUTMC(rinfo, ixMC_CHP_IO_CNTL_B0, rinfo->save_regs[67] /*0xfecfa666*/);
1968 OUTMC(rinfo, ixMC_CHP_IO_CNTL_B1, rinfo->save_regs[68] /*0x141555ff*/);
1969 OUTMC(rinfo, ixMC_IMP_CNTL_0, rinfo->save_regs[71] /*0x00009249*/);
1971 OUTREG(CNFG_MEMSIZE, rinfo->video_ram);
1976 static void radeon_reinitialize_M9P(struct radeonfb_info *rinfo)
1981 OUTREG(SURFACE_CNTL, rinfo->save_regs[29]);
1982 OUTREG(MC_AGP_LOCATION, rinfo->save_regs[32]);
1983 OUTREG(DISPLAY_BASE_ADDR, rinfo->save_regs[31]);
1984 OUTREG(CRTC2_DISPLAY_BASE_ADDR, rinfo->save_regs[33]);
1985 OUTREG(MC_FB_LOCATION, rinfo->save_regs[30]);
1986 OUTREG(OV0_BASE_ADDR, rinfo->save_regs[80]);
1987 OUTREG(BUS_CNTL, rinfo->save_regs[36]);
1988 OUTREG(BUS_CNTL1, rinfo->save_regs[14]);
1989 OUTREG(MPP_TB_CONFIG, rinfo->save_regs[37]);
1990 OUTREG(FCP_CNTL, rinfo->save_regs[38]);
1991 OUTREG(RBBM_CNTL, rinfo->save_regs[39]);
1993 OUTREG(DAC_CNTL, rinfo->save_regs[40]);
1997 radeon_pm_reset_pad_ctlr_strength(rinfo);
2003 radeon_pm_all_ppls_off(rinfo);
2020 OUTPLL(pllAGP_PLL_CNTL, rinfo->save_regs[78]);
2022 OUTREG(PAMAC0_DLY_CNTL, rinfo->save_regs[54]);
2023 OUTREG(PAMAC1_DLY_CNTL, rinfo->save_regs[55]);
2024 OUTREG(PAMAC2_DLY_CNTL, rinfo->save_regs[79]);
2026 OUTREG(AGP_CNTL, rinfo->save_regs[16]);
2027 OUTREG(HOST_PATH_CNTL, rinfo->save_regs[41]); /* MacOS sets that to 0 !!! */
2028 OUTREG(DISP_MISC_CNTL, rinfo->save_regs[9]);
2030 tmp = rinfo->save_regs[1]
2035 OUTREG(FW_CNTL, rinfo->save_regs[57]);
2042 OUTPLL(pllCLK_PIN_CNTL, rinfo->save_regs[4]);
2045 tmp = rinfo->save_regs[2] & 0xff000000;
2084 OUTPLL(pllM_SPLL_REF_FB_DIV, rinfo->save_regs[77]);
2085 OUTPLL(pllMPLL_AUX_CNTL, rinfo->save_regs[75]);
2086 OUTPLL(pllSPLL_AUX_CNTL, rinfo->save_regs[76]);
2089 OUTPLL(pllPPLL_CNTL, rinfo->save_regs[93] | 0x3);
2090 OUTPLL(pllP2PLL_CNTL, rinfo->save_regs[8] | 0x3);
2093 OUTPLL(pllMPLL_CNTL, rinfo->save_regs[73] | 0x03);
2094 OUTPLL(pllSPLL_CNTL, rinfo->save_regs[74] | 0x03);
2103 tmp = rinfo->save_regs[0];
2120 radeon_pm_m9p_reconfigure_mc(rinfo);
2123 radeon_pm_start_mclk_sclk(rinfo);
2126 radeon_pm_full_reset_sdram(rinfo);
2141 OUTREG(TV_MASTER_CNTL, rinfo->save_regs[88]);
2142 OUTREG(TV_DAC_CNTL, rinfo->save_regs[13] | 0x07000000);
2149 OUTREG(GPIOPAD_A, rinfo->save_regs[19]);
2150 OUTREG(GPIOPAD_EN, rinfo->save_regs[20]);
2151 OUTREG(GPIOPAD_MASK, rinfo->save_regs[21]);
2157 tmp |= rinfo->save_regs[34] & 0xffff0000;
2162 tmp |= rinfo->save_regs[34] & 0xffff0000;
2166 OUTREG(LVDS_GEN_CNTL, rinfo->save_regs[11] &
2169 OUTREG(LVDS_PLL_CNTL, (rinfo->save_regs[12] & ~0xf0000) | 0x20000);
2174 writeb(0, rinfo->fb_base + i);
2177 OUTPLL(pllSSPLL_REF_DIV, rinfo->save_regs[44] /*0x3f */);
2178 OUTPLL(pllSSPLL_DIV_0, rinfo->save_regs[45] /*0x000081bb */);
2190 OUTPLL(pllSS_INT_CNTL, rinfo->save_regs[90] & ~3);/*0x0020300c*/
2194 OUTPLL(pllPPLL_REF_DIV, rinfo->pll.ref_div);
2195 OUTPLL(pllPPLL_DIV_0, rinfo->save_regs[92]);
2202 OUTREG(GRPH_BUFFER_CNTL, rinfo->save_regs[94]);
2203 OUTREG(GRPH2_BUFFER_CNTL, rinfo->save_regs[95]);
2206 radeon_pm_m10_disable_spread_spectrum(rinfo);
2207 radeon_pm_restore_pixel_pll(rinfo);
2208 radeon_pm_m10_enable_lvds_spread_spectrum(rinfo);
2213 static void radeon_reinitialize_QW(struct radeonfb_info *rinfo)
2220 OUTREG(MC_AGP_LOCATION, rinfo->save_regs[32]);
2221 OUTREG(DISPLAY_BASE_ADDR, rinfo->save_regs[31]);
2222 OUTREG(CRTC2_DISPLAY_BASE_ADDR, rinfo->save_regs[33]);
2223 OUTREG(MC_FB_LOCATION, rinfo->save_regs[30]);
2224 OUTREG(BUS_CNTL, rinfo->save_regs[36]);
2225 OUTREG(RBBM_CNTL, rinfo->save_regs[39]);
2241 OUTREG(SURFACE_CNTL, rinfo->save_regs[29]);
2242 OUTREG(AGP_CNTL, rinfo->save_regs[16]);
2243 OUTREG(HOST_PATH_CNTL, rinfo->save_regs[41]);
2244 OUTREG(DISP_MISC_CNTL, rinfo->save_regs[9]);
2246 OUTMC(rinfo, ixMC_CHP_IO_CNTL_A0, 0xf7bb4433);
2248 OUTMC(rinfo, ixMC_CHP_IO_CNTL_B0, 0xf7bb4433);
2278 radeon_pll_errata_after_index(rinfo);
2280 radeon_pll_errata_after_data(rinfo);
2301 radeon_pll_errata_after_index(rinfo);
2303 radeon_pll_errata_after_data(rinfo);
2344 OUTMC(rinfo, ixMC_CHP_IO_CNTL_A1, 0x151550ff);
2346 OUTMC(rinfo, ixMC_CHP_IO_CNTL_B1, 0x151550ff);
2349 OUTMC(rinfo, ixMC_CHP_IO_CNTL_A1, 0x141550ff);
2351 OUTMC(rinfo, ixMC_CHP_IO_CNTL_B1, 0x141550ff);
2367 OUTMC(rinfo, ixMC_IMP_CNTL, 0x00f460d6);
2369 OUTMC(rinfo, ixMC_IMP_CNTL_0, 0x00009249);
2372 OUTREG(CNFG_MEMSIZE, rinfo->video_ram);
2374 radeon_pm_full_reset_sdram(rinfo);
2386 OUTPLL(CLK_PIN_CNTL, rinfo->save_regs[4]);
2387 OUTPLL(CLK_PWRMGT_CNTL, rinfo->save_regs[1]);
2388 OUTPLL(PLL_PWRMGT_CNTL, rinfo->save_regs[0]);
2431 radeon_pll_errata_after_index(rinfo);
2433 radeon_pll_errata_after_data(rinfo);
2450 tmp = (tmp & ~PPLL_REF_DIV_MASK) | rinfo->pll.ref_div;
2455 radeon_pll_errata_after_index(rinfo);
2457 radeon_pll_errata_after_data(rinfo);
2460 radeon_pll_errata_after_index(rinfo);
2462 radeon_pll_errata_after_index(rinfo);
2463 radeon_pll_errata_after_data(rinfo);
2518 static void radeonfb_whack_power_state(struct radeonfb_info *rinfo, pci_power_t state)
2523 pci_read_config_word(rinfo->pdev,
2524 rinfo->pdev->pm_cap + PCI_PM_CTRL,
2529 pci_write_config_word(rinfo->pdev,
2530 rinfo->pdev->pm_cap + PCI_PM_CTRL,
2534 rinfo->pdev->current_state = state;
2537 static void radeon_set_suspend(struct radeonfb_info *rinfo, int suspend)
2541 if (!rinfo->pdev->pm_cap)
2550 pci_name(rinfo->pdev));
2555 radeon_pm_disable_dynamic_mode(rinfo);
2558 radeon_pm_save_regs(rinfo, 0);
2562 if (rinfo->is_mobility) {
2564 radeon_pm_program_v2clk(rinfo);
2567 radeon_pm_disable_iopad(rinfo);
2570 radeon_pm_low_current(rinfo);
2573 radeon_pm_setup_for_suspend(rinfo);
2575 if (rinfo->family <= CHIP_FAMILY_RV280) {
2586 pci_disable_device(rinfo->pdev);
2587 pci_save_state(rinfo->pdev);
2592 radeonfb_whack_power_state(rinfo, PCI_D2);
2593 pci_platform_power_transition(rinfo->pdev, PCI_D2);
2596 pci_name(rinfo->pdev));
2598 if (rinfo->family <= CHIP_FAMILY_RV250) {
2600 radeon_pm_full_reset_sdram(rinfo);
2603 radeon_pm_restore_regs(rinfo);
2606 radeon_pm_restore_regs(rinfo);
2608 radeon_pm_full_reset_sdram(rinfo);
2617 struct radeonfb_info *rinfo = info->par;
2643 radeonfb_engine_reset(rinfo);
2648 radeon_screen_blank(rinfo, FB_BLANK_POWERDOWN, 1);
2651 rinfo->asleep = 1;
2652 rinfo->lock_blank = 1;
2653 del_timer_sync(&rinfo->lvds_timer);
2666 if (rinfo->pm_mode & radeon_pm_off) {
2673 radeon_pm_disable_dynamic_mode(rinfo);
2675 radeon_pm_save_regs(rinfo, 1);
2677 if (rinfo->is_mobility && !(rinfo->pm_mode & radeon_pm_d2)) {
2691 if (rinfo->pm_mode & radeon_pm_d2)
2692 radeon_set_suspend(rinfo, 1);
2717 static int radeon_check_power_loss(struct radeonfb_info *rinfo)
2719 return rinfo->save_regs[4] != INPLL(CLK_PIN_CNTL) ||
2720 rinfo->save_regs[2] != INPLL(MCLK_CNTL) ||
2721 rinfo->save_regs[3] != INPLL(SCLK_CNTL);
2728 struct radeonfb_info *rinfo = info->par;
2734 if (rinfo->no_schedule) {
2749 if ((rinfo->pm_mode & radeon_pm_off) && radeon_check_power_loss(rinfo)) {
2750 if (rinfo->reinit_func != NULL)
2751 rinfo->reinit_func(rinfo);
2763 else if (rinfo->pm_mode & radeon_pm_d2)
2764 radeon_set_suspend(rinfo, 0);
2766 rinfo->asleep = 0;
2771 radeon_write_mode (rinfo, &rinfo->state, 1);
2773 radeonfb_engine_init (rinfo);
2782 rinfo->lock_blank = 0;
2783 radeon_screen_blank(rinfo, FB_BLANK_UNBLANK, 1);
2795 if (rinfo->dynclk == 1)
2796 radeon_pm_enable_dynamic_mode(rinfo);
2797 else if (rinfo->dynclk == 0)
2798 radeon_pm_disable_dynamic_mode(rinfo);
2820 struct radeonfb_info *rinfo = data;
2822 rinfo->no_schedule = 1;
2823 pci_restore_state(rinfo->pdev);
2824 radeonfb_pci_resume(rinfo->pdev);
2825 rinfo->no_schedule = 0;
2831 void radeonfb_pm_init(struct radeonfb_info *rinfo, int dynclk, int ignore_devlist, int force_sleep)
2834 if (rinfo->family == CHIP_FAMILY_RS480)
2835 rinfo->dynclk = -1;
2837 rinfo->dynclk = dynclk;
2839 if (rinfo->dynclk == 1) {
2840 radeon_pm_enable_dynamic_mode(rinfo);
2842 } else if (rinfo->dynclk == 0) {
2843 radeon_pm_disable_dynamic_mode(rinfo);
2855 if (machine_is(powermac) && rinfo->of_node) {
2856 if (rinfo->is_mobility && rinfo->pdev->pm_cap &&
2857 rinfo->family <= CHIP_FAMILY_RV250)
2858 rinfo->pm_mode |= radeon_pm_d2;
2864 if (of_node_name_eq(rinfo->of_node, "ATY,JasperParent") ||
2865 of_node_name_eq(rinfo->of_node, "ATY,SnowyParent")) {
2866 rinfo->reinit_func = radeon_reinitialize_M10;
2867 rinfo->pm_mode |= radeon_pm_off;
2870 if (!strcmp(rinfo->of_node->name, "ATY,BlueStoneParent")) {
2871 rinfo->reinit_func = radeon_reinitialize_QW;
2872 rinfo->pm_mode |= radeon_pm_off;
2875 if (of_node_name_eq(rinfo->of_node, "ATY,ViaParent")) {
2876 rinfo->reinit_func = radeon_reinitialize_M9P;
2877 rinfo->pm_mode |= radeon_pm_off;
2885 if (rinfo->pm_mode != radeon_pm_none) {
2886 pmac_call_feature(PMAC_FTR_DEVICE_CAN_WAKE, rinfo->of_node, 0, 1);
2893 pmac_set_early_video_resume(radeonfb_early_resume, rinfo);
2912 radeon_apply_workarounds(rinfo);
2917 rinfo->pm_mode |= radeon_pm_d2;
2921 void radeonfb_pm_exit(struct radeonfb_info *rinfo)
2924 if (rinfo->pm_mode != radeon_pm_none)