Rev 1414 | Rev 1963 | Go to most recent revision | Show entire file | Regard whitespace | Details | Blame | Last modification | View Log | RSS feed
Rev 1414 | Rev 1430 | ||
---|---|---|---|
Line 193... | Line 193... | ||
193 | 193 | ||
194 | int r100_pci_gart_enable(struct radeon_device *rdev) |
194 | int r100_pci_gart_enable(struct radeon_device *rdev) |
195 | { |
195 | { |
Line -... | Line 196... | ||
- | 196 | uint32_t tmp; |
|
196 | uint32_t tmp; |
197 | |
197 | 198 | radeon_gart_restore(rdev); |
|
198 | /* discard memory request outside of configured range */ |
199 | /* discard memory request outside of configured range */ |
199 | tmp = RREG32(RADEON_AIC_CNTL) | RADEON_DIS_OUT_OF_PCI_GART_ACCESS; |
200 | tmp = RREG32(RADEON_AIC_CNTL) | RADEON_DIS_OUT_OF_PCI_GART_ACCESS; |
200 | WREG32(RADEON_AIC_CNTL, tmp); |
201 | WREG32(RADEON_AIC_CNTL, tmp); |
201 | /* set address range for PCI address translate */ |
- | |
202 | WREG32(RADEON_AIC_LO_ADDR, rdev->mc.gtt_location); |
202 | /* set address range for PCI address translate */ |
203 | tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1; |
203 | WREG32(RADEON_AIC_LO_ADDR, rdev->mc.gtt_start); |
204 | WREG32(RADEON_AIC_HI_ADDR, tmp); |
204 | WREG32(RADEON_AIC_HI_ADDR, rdev->mc.gtt_end); |
205 | /* set PCI GART page-table base address */ |
205 | /* set PCI GART page-table base address */ |
206 | WREG32(RADEON_AIC_PT_BASE, rdev->gart.table_addr); |
206 | WREG32(RADEON_AIC_PT_BASE, rdev->gart.table_addr); |
207 | tmp = RREG32(RADEON_AIC_CNTL) | RADEON_PCIGART_TRANSLATE_EN; |
207 | tmp = RREG32(RADEON_AIC_CNTL) | RADEON_PCIGART_TRANSLATE_EN; |
Line 282... | Line 282... | ||
282 | radeon_ring_write(rdev, PACKET0(RADEON_RB3D_DSTCACHE_CTLSTAT, 0)); |
282 | radeon_ring_write(rdev, PACKET0(RADEON_RB3D_DSTCACHE_CTLSTAT, 0)); |
283 | radeon_ring_write(rdev, RADEON_RB3D_DC_FLUSH_ALL); |
283 | radeon_ring_write(rdev, RADEON_RB3D_DC_FLUSH_ALL); |
284 | radeon_ring_write(rdev, PACKET0(RADEON_RB3D_ZCACHE_CTLSTAT, 0)); |
284 | radeon_ring_write(rdev, PACKET0(RADEON_RB3D_ZCACHE_CTLSTAT, 0)); |
285 | radeon_ring_write(rdev, RADEON_RB3D_ZC_FLUSH_ALL); |
285 | radeon_ring_write(rdev, RADEON_RB3D_ZC_FLUSH_ALL); |
286 | /* Wait until IDLE & CLEAN */ |
286 | /* Wait until IDLE & CLEAN */ |
287 | radeon_ring_write(rdev, PACKET0(0x1720, 0)); |
287 | radeon_ring_write(rdev, PACKET0(RADEON_WAIT_UNTIL, 0)); |
288 | radeon_ring_write(rdev, (1 << 16) | (1 << 17)); |
288 | radeon_ring_write(rdev, RADEON_WAIT_2D_IDLECLEAN | RADEON_WAIT_3D_IDLECLEAN); |
289 | radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); |
289 | radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); |
290 | radeon_ring_write(rdev, rdev->config.r100.hdp_cntl | |
290 | radeon_ring_write(rdev, rdev->config.r100.hdp_cntl | |
291 | RADEON_HDP_READ_BUFFER_INVALIDATE); |
291 | RADEON_HDP_READ_BUFFER_INVALIDATE); |
292 | radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); |
292 | radeon_ring_write(rdev, PACKET0(RADEON_HOST_PATH_CNTL, 0)); |
293 | radeon_ring_write(rdev, rdev->config.r100.hdp_cntl); |
293 | radeon_ring_write(rdev, rdev->config.r100.hdp_cntl); |
Line 708... | Line 708... | ||
708 | { |
708 | { |
709 | uint32_t tmp; |
709 | uint32_t tmp; |
710 | bool reinit_cp; |
710 | bool reinit_cp; |
711 | int i; |
711 | int i; |
Line 712... | Line -... | ||
712 | - | ||
713 | ENTER(); |
- | |
714 | 712 | ||
715 | reinit_cp = rdev->cp.ready; |
713 | reinit_cp = rdev->cp.ready; |
716 | rdev->cp.ready = false; |
714 | rdev->cp.ready = false; |
717 | WREG32(RADEON_CP_CSQ_MODE, 0); |
715 | WREG32(RADEON_CP_CSQ_MODE, 0); |
718 | WREG32(RADEON_CP_CSQ_CNTL, 0); |
716 | WREG32(RADEON_CP_CSQ_CNTL, 0); |
Line 1628... | Line 1626... | ||
1628 | printk(KERN_WARNING "radeon: wait for empty RBBM fifo failed !" |
1626 | printk(KERN_WARNING "radeon: wait for empty RBBM fifo failed !" |
1629 | " Bad things might happen.\n"); |
1627 | " Bad things might happen.\n"); |
1630 | } |
1628 | } |
1631 | for (i = 0; i < rdev->usec_timeout; i++) { |
1629 | for (i = 0; i < rdev->usec_timeout; i++) { |
1632 | tmp = RREG32(RADEON_RBBM_STATUS); |
1630 | tmp = RREG32(RADEON_RBBM_STATUS); |
1633 | if (!(tmp & (1 << 31))) { |
1631 | if (!(tmp & RADEON_RBBM_ACTIVE)) { |
1634 | return 0; |
1632 | return 0; |
1635 | } |
1633 | } |
1636 | DRM_UDELAY(1); |
1634 | DRM_UDELAY(1); |
1637 | } |
1635 | } |
1638 | return -1; |
1636 | return -1; |
Line 1643... | Line 1641... | ||
1643 | unsigned i; |
1641 | unsigned i; |
1644 | uint32_t tmp; |
1642 | uint32_t tmp; |
Line 1645... | Line 1643... | ||
1645 | 1643 | ||
1646 | for (i = 0; i < rdev->usec_timeout; i++) { |
1644 | for (i = 0; i < rdev->usec_timeout; i++) { |
1647 | /* read MC_STATUS */ |
1645 | /* read MC_STATUS */ |
1648 | tmp = RREG32(0x0150); |
1646 | tmp = RREG32(RADEON_MC_STATUS); |
1649 | if (tmp & (1 << 2)) { |
1647 | if (tmp & RADEON_MC_IDLE) { |
1650 | return 0; |
1648 | return 0; |
1651 | } |
1649 | } |
1652 | DRM_UDELAY(1); |
1650 | DRM_UDELAY(1); |
1653 | } |
1651 | } |
Line 1662... | Line 1660... | ||
1662 | 1660 | ||
1663 | void r100_hdp_reset(struct radeon_device *rdev) |
1661 | void r100_hdp_reset(struct radeon_device *rdev) |
1664 | { |
1662 | { |
Line 1665... | Line -... | ||
1665 | uint32_t tmp; |
- | |
1666 | - | ||
1667 | ENTER(); |
1663 | uint32_t tmp; |
1668 | 1664 | ||
1669 | tmp = RREG32(RADEON_HOST_PATH_CNTL) & RADEON_HDP_APER_CNTL; |
1665 | tmp = RREG32(RADEON_HOST_PATH_CNTL) & RADEON_HDP_APER_CNTL; |
1670 | tmp |= (7 << 28); |
1666 | tmp |= (7 << 28); |
1671 | WREG32(RADEON_HOST_PATH_CNTL, tmp | RADEON_HDP_SOFT_RESET | RADEON_HDP_READ_BUFFER_INVALIDATE); |
1667 | WREG32(RADEON_HOST_PATH_CNTL, tmp | RADEON_HDP_SOFT_RESET | RADEON_HDP_READ_BUFFER_INVALIDATE); |
Line 1679... | Line 1675... | ||
1679 | int r100_rb2d_reset(struct radeon_device *rdev) |
1675 | int r100_rb2d_reset(struct radeon_device *rdev) |
1680 | { |
1676 | { |
1681 | uint32_t tmp; |
1677 | uint32_t tmp; |
1682 | int i; |
1678 | int i; |
Line 1683... | Line -... | ||
1683 | - | ||
1684 | ENTER(); |
- | |
1685 | 1679 | ||
1686 | WREG32(RADEON_RBBM_SOFT_RESET, RADEON_SOFT_RESET_E2); |
1680 | WREG32(RADEON_RBBM_SOFT_RESET, RADEON_SOFT_RESET_E2); |
1687 | (void)RREG32(RADEON_RBBM_SOFT_RESET); |
1681 | (void)RREG32(RADEON_RBBM_SOFT_RESET); |
1688 | udelay(200); |
1682 | udelay(200); |
1689 | WREG32(RADEON_RBBM_SOFT_RESET, 0); |
1683 | WREG32(RADEON_RBBM_SOFT_RESET, 0); |
Line 1721... | Line 1715... | ||
1721 | if (status & (1 << 16)) { |
1715 | if (status & (1 << 16)) { |
1722 | r100_cp_reset(rdev); |
1716 | r100_cp_reset(rdev); |
1723 | } |
1717 | } |
1724 | /* Check if GPU is idle */ |
1718 | /* Check if GPU is idle */ |
1725 | status = RREG32(RADEON_RBBM_STATUS); |
1719 | status = RREG32(RADEON_RBBM_STATUS); |
1726 | if (status & (1 << 31)) { |
1720 | if (status & RADEON_RBBM_ACTIVE) { |
1727 | DRM_ERROR("Failed to reset GPU (RBBM_STATUS=0x%08X)\n", status); |
1721 | DRM_ERROR("Failed to reset GPU (RBBM_STATUS=0x%08X)\n", status); |
1728 | return -1; |
1722 | return -1; |
1729 | } |
1723 | } |
1730 | DRM_INFO("GPU reset succeed (RBBM_STATUS=0x%08X)\n", status); |
1724 | DRM_INFO("GPU reset succeed (RBBM_STATUS=0x%08X)\n", status); |
1731 | return 0; |
1725 | return 0; |
1732 | } |
1726 | } |
Line 1733... | Line 1727... | ||
1733 | 1727 | ||
1734 | void r100_set_common_regs(struct radeon_device *rdev) |
1728 | void r100_set_common_regs(struct radeon_device *rdev) |
- | 1729 | { |
|
- | 1730 | struct drm_device *dev = rdev->ddev; |
|
- | 1731 | bool force_dac2 = false; |
|
1735 | { |
1732 | |
1736 | /* set these so they don't interfere with anything */ |
1733 | /* set these so they don't interfere with anything */ |
1737 | WREG32(RADEON_OV0_SCALE_CNTL, 0); |
1734 | WREG32(RADEON_OV0_SCALE_CNTL, 0); |
1738 | WREG32(RADEON_SUBPIC_CNTL, 0); |
1735 | WREG32(RADEON_SUBPIC_CNTL, 0); |
1739 | WREG32(RADEON_VIPH_CONTROL, 0); |
1736 | WREG32(RADEON_VIPH_CONTROL, 0); |
1740 | WREG32(RADEON_I2C_CNTL_1, 0); |
1737 | WREG32(RADEON_I2C_CNTL_1, 0); |
1741 | WREG32(RADEON_DVI_I2C_CNTL_1, 0); |
1738 | WREG32(RADEON_DVI_I2C_CNTL_1, 0); |
1742 | WREG32(RADEON_CAP0_TRIG_CNTL, 0); |
1739 | WREG32(RADEON_CAP0_TRIG_CNTL, 0); |
- | 1740 | WREG32(RADEON_CAP1_TRIG_CNTL, 0); |
|
- | 1741 | ||
- | 1742 | /* always set up dac2 on rn50 and some rv100 as lots |
|
- | 1743 | * of servers seem to wire it up to a VGA port but |
|
- | 1744 | * don't report it in the bios connector |
|
- | 1745 | * table. |
|
- | 1746 | */ |
|
- | 1747 | switch (dev->pdev->device) { |
|
- | 1748 | /* RN50 */ |
|
- | 1749 | case 0x515e: |
|
- | 1750 | case 0x5969: |
|
- | 1751 | force_dac2 = true; |
|
- | 1752 | break; |
|
- | 1753 | /* RV100*/ |
|
- | 1754 | case 0x5159: |
|
- | 1755 | case 0x515a: |
|
- | 1756 | /* DELL triple head servers */ |
|
- | 1757 | if ((dev->pdev->subsystem_vendor == 0x1028 /* DELL */) && |
|
- | 1758 | ((dev->pdev->subsystem_device == 0x016c) || |
|
- | 1759 | (dev->pdev->subsystem_device == 0x016d) || |
|
- | 1760 | (dev->pdev->subsystem_device == 0x016e) || |
|
- | 1761 | (dev->pdev->subsystem_device == 0x016f) || |
|
- | 1762 | (dev->pdev->subsystem_device == 0x0170) || |
|
- | 1763 | (dev->pdev->subsystem_device == 0x017d) || |
|
- | 1764 | (dev->pdev->subsystem_device == 0x017e) || |
|
- | 1765 | (dev->pdev->subsystem_device == 0x0183) || |
|
- | 1766 | (dev->pdev->subsystem_device == 0x018a) || |
|
- | 1767 | (dev->pdev->subsystem_device == 0x019a))) |
|
- | 1768 | force_dac2 = true; |
|
- | 1769 | break; |
|
- | 1770 | } |
|
- | 1771 | ||
- | 1772 | if (force_dac2) { |
|
- | 1773 | u32 disp_hw_debug = RREG32(RADEON_DISP_HW_DEBUG); |
|
- | 1774 | u32 tv_dac_cntl = RREG32(RADEON_TV_DAC_CNTL); |
|
- | 1775 | u32 dac2_cntl = RREG32(RADEON_DAC_CNTL2); |
|
- | 1776 | ||
- | 1777 | /* For CRT on DAC2, don't turn it on if BIOS didn't |
|
- | 1778 | enable it, even it's detected. |
|
- | 1779 | */ |
|
- | 1780 | ||
- | 1781 | /* force it to crtc0 */ |
|
- | 1782 | dac2_cntl &= ~RADEON_DAC2_DAC_CLK_SEL; |
|
- | 1783 | dac2_cntl |= RADEON_DAC2_DAC2_CLK_SEL; |
|
- | 1784 | disp_hw_debug |= RADEON_CRT2_DISP1_SEL; |
|
- | 1785 | ||
- | 1786 | /* set up the TV DAC */ |
|
- | 1787 | tv_dac_cntl &= ~(RADEON_TV_DAC_PEDESTAL | |
|
- | 1788 | RADEON_TV_DAC_STD_MASK | |
|
- | 1789 | RADEON_TV_DAC_RDACPD | |
|
- | 1790 | RADEON_TV_DAC_GDACPD | |
|
- | 1791 | RADEON_TV_DAC_BDACPD | |
|
- | 1792 | RADEON_TV_DAC_BGADJ_MASK | |
|
- | 1793 | RADEON_TV_DAC_DACADJ_MASK); |
|
- | 1794 | tv_dac_cntl |= (RADEON_TV_DAC_NBLANK | |
|
- | 1795 | RADEON_TV_DAC_NHOLD | |
|
- | 1796 | RADEON_TV_DAC_STD_PS2 | |
|
- | 1797 | (0x58 << 16)); |
|
- | 1798 | ||
- | 1799 | WREG32(RADEON_TV_DAC_CNTL, tv_dac_cntl); |
|
- | 1800 | WREG32(RADEON_DISP_HW_DEBUG, disp_hw_debug); |
|
- | 1801 | WREG32(RADEON_DAC_CNTL2, dac2_cntl); |
|
1743 | WREG32(RADEON_CAP1_TRIG_CNTL, 0); |
1802 | } |
Line 1744... | Line 1803... | ||
1744 | } |
1803 | } |
1745 | 1804 | ||
1746 | /* |
1805 | /* |
Line 1820... | Line 1879... | ||
1820 | } |
1879 | } |
Line 1821... | Line 1880... | ||
1821 | 1880 | ||
1822 | void r100_vram_init_sizes(struct radeon_device *rdev) |
1881 | void r100_vram_init_sizes(struct radeon_device *rdev) |
1823 | { |
1882 | { |
1824 | u64 config_aper_size; |
- | |
Line -... | Line 1883... | ||
- | 1883 | u64 config_aper_size; |
|
- | 1884 | ||
- | 1885 | /* work out accessible VRAM */ |
|
- | 1886 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); |
|
- | 1887 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); |
|
- | 1888 | rdev->mc.visible_vram_size = r100_get_accessible_vram(rdev); |
|
- | 1889 | /* FIXME we don't use the second aperture yet when we could use it */ |
|
1825 | u32 accessible; |
1890 | if (rdev->mc.visible_vram_size > rdev->mc.aper_size) |
1826 | - | ||
1827 | config_aper_size = RREG32(RADEON_CONFIG_APER_SIZE); |
1891 | rdev->mc.visible_vram_size = rdev->mc.aper_size; |
1828 | 1892 | config_aper_size = RREG32(RADEON_CONFIG_APER_SIZE); |
|
1829 | if (rdev->flags & RADEON_IS_IGP) { |
1893 | if (rdev->flags & RADEON_IS_IGP) { |
1830 | uint32_t tom; |
1894 | uint32_t tom; |
1831 | /* read NB_TOM to get the amount of ram stolen for the GPU */ |
1895 | /* read NB_TOM to get the amount of ram stolen for the GPU */ |
1832 | tom = RREG32(RADEON_NB_TOM); |
- | |
1833 | rdev->mc.real_vram_size = (((tom >> 16) - (tom & 0xffff) + 1) << 16); |
- | |
1834 | /* for IGPs we need to keep VRAM where it was put by the BIOS */ |
1896 | tom = RREG32(RADEON_NB_TOM); |
1835 | rdev->mc.vram_location = (tom & 0xffff) << 16; |
1897 | rdev->mc.real_vram_size = (((tom >> 16) - (tom & 0xffff) + 1) << 16); |
1836 | WREG32(RADEON_CONFIG_MEMSIZE, rdev->mc.real_vram_size); |
1898 | WREG32(RADEON_CONFIG_MEMSIZE, rdev->mc.real_vram_size); |
1837 | rdev->mc.mc_vram_size = rdev->mc.real_vram_size; |
1899 | rdev->mc.mc_vram_size = rdev->mc.real_vram_size; |
1838 | } else { |
1900 | } else { |
Line 1842... | Line 1904... | ||
1842 | */ |
1904 | */ |
1843 | if (rdev->mc.real_vram_size == 0) { |
1905 | if (rdev->mc.real_vram_size == 0) { |
1844 | rdev->mc.real_vram_size = 8192 * 1024; |
1906 | rdev->mc.real_vram_size = 8192 * 1024; |
1845 | WREG32(RADEON_CONFIG_MEMSIZE, rdev->mc.real_vram_size); |
1907 | WREG32(RADEON_CONFIG_MEMSIZE, rdev->mc.real_vram_size); |
1846 | } |
1908 | } |
1847 | /* let driver place VRAM */ |
- | |
1848 | rdev->mc.vram_location = 0xFFFFFFFFUL; |
- | |
1849 | /* Fix for RN50, M6, M7 with 8/16/32(??) MBs of VRAM - |
1909 | /* Fix for RN50, M6, M7 with 8/16/32(??) MBs of VRAM - |
1850 | * Novell bug 204882 + along with lots of ubuntu ones */ |
1910 | * Novell bug 204882 + along with lots of ubuntu ones |
- | 1911 | */ |
|
1851 | if (config_aper_size > rdev->mc.real_vram_size) |
1912 | if (config_aper_size > rdev->mc.real_vram_size) |
1852 | rdev->mc.mc_vram_size = config_aper_size; |
1913 | rdev->mc.mc_vram_size = config_aper_size; |
1853 | else |
1914 | else |
1854 | rdev->mc.mc_vram_size = rdev->mc.real_vram_size; |
1915 | rdev->mc.mc_vram_size = rdev->mc.real_vram_size; |
1855 | } |
1916 | } |
1856 | - | ||
1857 | /* work out accessible VRAM */ |
1917 | /* FIXME remove this once we support unmappable VRAM */ |
1858 | accessible = r100_get_accessible_vram(rdev); |
- | |
1859 | - | ||
1860 | rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0); |
- | |
1861 | rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0); |
- | |
1862 | - | ||
1863 | if (accessible > rdev->mc.aper_size) |
- | |
1864 | accessible = rdev->mc.aper_size; |
- | |
1865 | - | ||
1866 | if (rdev->mc.mc_vram_size > rdev->mc.aper_size) |
1918 | if (rdev->mc.mc_vram_size > rdev->mc.aper_size) { |
1867 | rdev->mc.mc_vram_size = rdev->mc.aper_size; |
1919 | rdev->mc.mc_vram_size = rdev->mc.aper_size; |
1868 | - | ||
1869 | if (rdev->mc.real_vram_size > rdev->mc.aper_size) |
- | |
1870 | rdev->mc.real_vram_size = rdev->mc.aper_size; |
1920 | rdev->mc.real_vram_size = rdev->mc.aper_size; |
1871 | } |
1921 | } |
- | 1922 | } |
|
Line 1872... | Line 1923... | ||
1872 | 1923 | ||
1873 | void r100_vga_set_state(struct radeon_device *rdev, bool state) |
1924 | void r100_vga_set_state(struct radeon_device *rdev, bool state) |
1874 | { |
1925 | { |
Line 1882... | Line 1933... | ||
1882 | temp &= ~(1<<9); |
1933 | temp &= ~(1<<9); |
1883 | } |
1934 | } |
1884 | WREG32(RADEON_CONFIG_CNTL, temp); |
1935 | WREG32(RADEON_CONFIG_CNTL, temp); |
1885 | } |
1936 | } |
Line 1886... | Line 1937... | ||
1886 | 1937 | ||
1887 | void r100_vram_info(struct radeon_device *rdev) |
1938 | void r100_mc_init(struct radeon_device *rdev) |
1888 | { |
1939 | { |
Line -... | Line 1940... | ||
- | 1940 | u64 base; |
|
1889 | r100_vram_get_type(rdev); |
1941 | |
- | 1942 | r100_vram_get_type(rdev); |
|
- | 1943 | r100_vram_init_sizes(rdev); |
|
- | 1944 | base = rdev->mc.aper_base; |
|
- | 1945 | if (rdev->flags & RADEON_IS_IGP) |
|
- | 1946 | base = (RREG32(RADEON_NB_TOM) & 0xffff) << 16; |
|
- | 1947 | radeon_vram_location(rdev, &rdev->mc, base); |
|
1890 | 1948 | if (!(rdev->flags & RADEON_IS_AGP)) |
|
Line 1891... | Line 1949... | ||
1891 | r100_vram_init_sizes(rdev); |
1949 | radeon_gtt_location(rdev, &rdev->mc); |
1892 | } |
1950 | } |
Line 2751... | Line 2809... | ||
2751 | } |
2809 | } |
Line 2752... | Line 2810... | ||
2752 | 2810 | ||
2753 | void r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save) |
2811 | void r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save) |
2754 | { |
2812 | { |
2755 | /* Update base address for crtc */ |
2813 | /* Update base address for crtc */ |
2756 | WREG32(R_00023C_DISPLAY_BASE_ADDR, rdev->mc.vram_location); |
2814 | WREG32(R_00023C_DISPLAY_BASE_ADDR, rdev->mc.vram_start); |
2757 | if (!(rdev->flags & RADEON_SINGLE_CRTC)) { |
2815 | if (!(rdev->flags & RADEON_SINGLE_CRTC)) { |
2758 | WREG32(R_00033C_CRTC2_DISPLAY_BASE_ADDR, |
- | |
2759 | rdev->mc.vram_location); |
2816 | WREG32(R_00033C_CRTC2_DISPLAY_BASE_ADDR, rdev->mc.vram_start); |
2760 | } |
2817 | } |
2761 | /* Restore CRTC registers */ |
2818 | /* Restore CRTC registers */ |
2762 | WREG8(R_0003C2_GENMO_WT, save->GENMO_WT); |
2819 | WREG8(R_0003C2_GENMO_WT, save->GENMO_WT); |
2763 | WREG32(R_000054_CRTC_EXT_CNTL, save->CRTC_EXT_CNTL); |
2820 | WREG32(R_000054_CRTC_EXT_CNTL, save->CRTC_EXT_CNTL); |
Line 2881... | Line 2938... | ||
2881 | // } |
2938 | // } |
2882 | return 0; |
2939 | return 0; |
2883 | } |
2940 | } |
Line 2884... | Line -... | ||
2884 | - | ||
2885 | - | ||
2886 | int r100_mc_init(struct radeon_device *rdev) |
- | |
2887 | { |
- | |
2888 | int r; |
- | |
2889 | u32 tmp; |
- | |
2890 | - | ||
2891 | /* Setup GPU memory space */ |
- | |
2892 | rdev->mc.vram_location = 0xFFFFFFFFUL; |
- | |
2893 | rdev->mc.gtt_location = 0xFFFFFFFFUL; |
- | |
2894 | if (rdev->flags & RADEON_IS_IGP) { |
- | |
2895 | tmp = G_00015C_MC_FB_START(RREG32(R_00015C_NB_TOM)); |
- | |
2896 | rdev->mc.vram_location = tmp << 16; |
- | |
2897 | } |
- | |
2898 | if (rdev->flags & RADEON_IS_AGP) { |
- | |
2899 | r = radeon_agp_init(rdev); |
- | |
2900 | if (r) { |
- | |
2901 | radeon_agp_disable(rdev); |
- | |
2902 | } else { |
- | |
2903 | rdev->mc.gtt_location = rdev->mc.agp_base; |
- | |
2904 | } |
- | |
2905 | } |
- | |
2906 | r = radeon_mc_setup(rdev); |
- | |
2907 | if (r) |
- | |
2908 | return r; |
- | |
Line 2909... | Line 2941... | ||
2909 | return 0; |
2941 | |
2910 | } |
2942 | |
2911 | 2943 | ||
Line 2949... | Line 2981... | ||
2949 | r100_errata(rdev); |
2981 | r100_errata(rdev); |
2950 | /* Initialize clocks */ |
2982 | /* Initialize clocks */ |
2951 | radeon_get_clock_info(rdev->ddev); |
2983 | radeon_get_clock_info(rdev->ddev); |
2952 | /* Initialize power management */ |
2984 | /* Initialize power management */ |
2953 | radeon_pm_init(rdev); |
2985 | radeon_pm_init(rdev); |
2954 | /* Get vram informations */ |
2986 | /* initialize AGP */ |
2955 | r100_vram_info(rdev); |
- | |
2956 | /* Initialize memory controller (also test AGP) */ |
2987 | if (rdev->flags & RADEON_IS_AGP) { |
2957 | r = r100_mc_init(rdev); |
2988 | r = radeon_agp_init(rdev); |
2958 | dbgprintf("mc vram location %x\n", rdev->mc.vram_location); |
- | |
2959 | if (r) |
2989 | if (r) { |
- | 2990 | radeon_agp_disable(rdev); |
|
- | 2991 | } |
|
- | 2992 | } |
|
- | 2993 | /* initialize VRAM */ |
|
2960 | return r; |
2994 | r100_mc_init(rdev); |
2961 | /* Fence driver */ |
2995 | /* Fence driver */ |
2962 | // r = radeon_fence_driver_init(rdev); |
2996 | // r = radeon_fence_driver_init(rdev); |
2963 | // if (r) |
2997 | // if (r) |
2964 | // return r; |
2998 | // return r; |
2965 | // r = radeon_irq_kms_init(rdev); |
2999 | // r = radeon_irq_kms_init(rdev); |