diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2013-03-30 07:56:26 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2013-04-26 01:37:47 -0400 |
commit | 3f196a045e2f7e0b7c5302d359a9772c1567d55b (patch) | |
tree | dbbecb145408cacad12c2e8bbeb5f8d096cd5792 | |
parent | 8cb303a85b5782c337fe75d2525ca1638b30f057 (diff) |
drm/nve0: magic up some support for GF117
Seen in the wild, don't have the hardware but this hacks things up to
treat it the same as GF119 for now.
Should be relatively safe, I'd be very surprised if anything major
changed outside of PGRAPH. PGRAPH (3D etc) is disabled by default
however until it's confirmed working.
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
6 files changed, 63 insertions, 25 deletions
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc0.c b/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc0.c index 0b7951a85943..ebc9caa951f6 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc0.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/ctxnvc0.c | |||
@@ -1399,7 +1399,7 @@ nvc0_grctx_generate_90c0(struct nvc0_graph_priv *priv) | |||
1399 | { | 1399 | { |
1400 | int i; | 1400 | int i; |
1401 | 1401 | ||
1402 | for (i = 0; nv_device(priv)->chipset == 0xd9 && i < 4; i++) { | 1402 | for (i = 0; nv_device(priv)->chipset >= 0xd0 && i < 4; i++) { |
1403 | nv_mthd(priv, 0x90c0, 0x2700 + (i * 0x40), 0x00000000); | 1403 | nv_mthd(priv, 0x90c0, 0x2700 + (i * 0x40), 0x00000000); |
1404 | nv_mthd(priv, 0x90c0, 0x2720 + (i * 0x40), 0x00000000); | 1404 | nv_mthd(priv, 0x90c0, 0x2720 + (i * 0x40), 0x00000000); |
1405 | nv_mthd(priv, 0x90c0, 0x2704 + (i * 0x40), 0x00000000); | 1405 | nv_mthd(priv, 0x90c0, 0x2704 + (i * 0x40), 0x00000000); |
@@ -1415,7 +1415,7 @@ nvc0_grctx_generate_90c0(struct nvc0_graph_priv *priv) | |||
1415 | nv_mthd(priv, 0x90c0, 0x27ac, 0x00000000); | 1415 | nv_mthd(priv, 0x90c0, 0x27ac, 0x00000000); |
1416 | nv_mthd(priv, 0x90c0, 0x27cc, 0x00000000); | 1416 | nv_mthd(priv, 0x90c0, 0x27cc, 0x00000000); |
1417 | nv_mthd(priv, 0x90c0, 0x27ec, 0x00000000); | 1417 | nv_mthd(priv, 0x90c0, 0x27ec, 0x00000000); |
1418 | for (i = 0; nv_device(priv)->chipset == 0xd9 && i < 4; i++) { | 1418 | for (i = 0; nv_device(priv)->chipset >= 0xd0 && i < 4; i++) { |
1419 | nv_mthd(priv, 0x90c0, 0x2710 + (i * 0x40), 0x00014000); | 1419 | nv_mthd(priv, 0x90c0, 0x2710 + (i * 0x40), 0x00014000); |
1420 | nv_mthd(priv, 0x90c0, 0x2730 + (i * 0x40), 0x00014000); | 1420 | nv_mthd(priv, 0x90c0, 0x2730 + (i * 0x40), 0x00014000); |
1421 | nv_mthd(priv, 0x90c0, 0x2714 + (i * 0x40), 0x00000040); | 1421 | nv_mthd(priv, 0x90c0, 0x2714 + (i * 0x40), 0x00000040); |
@@ -1615,7 +1615,7 @@ static void | |||
1615 | nvc0_grctx_generate_shaders(struct nvc0_graph_priv *priv) | 1615 | nvc0_grctx_generate_shaders(struct nvc0_graph_priv *priv) |
1616 | { | 1616 | { |
1617 | 1617 | ||
1618 | if (nv_device(priv)->chipset == 0xd9) { | 1618 | if (nv_device(priv)->chipset >= 0xd0) { |
1619 | nv_wr32(priv, 0x405800, 0x0f8000bf); | 1619 | nv_wr32(priv, 0x405800, 0x0f8000bf); |
1620 | nv_wr32(priv, 0x405830, 0x02180218); | 1620 | nv_wr32(priv, 0x405830, 0x02180218); |
1621 | nv_wr32(priv, 0x405834, 0x08000000); | 1621 | nv_wr32(priv, 0x405834, 0x08000000); |
@@ -1658,10 +1658,10 @@ nvc0_grctx_generate_unk64xx(struct nvc0_graph_priv *priv) | |||
1658 | nv_wr32(priv, 0x4064ac, 0x00003fff); | 1658 | nv_wr32(priv, 0x4064ac, 0x00003fff); |
1659 | nv_wr32(priv, 0x4064b4, 0x00000000); | 1659 | nv_wr32(priv, 0x4064b4, 0x00000000); |
1660 | nv_wr32(priv, 0x4064b8, 0x00000000); | 1660 | nv_wr32(priv, 0x4064b8, 0x00000000); |
1661 | if (nv_device(priv)->chipset == 0xd9) | 1661 | if (nv_device(priv)->chipset >= 0xd0) |
1662 | nv_wr32(priv, 0x4064bc, 0x00000000); | 1662 | nv_wr32(priv, 0x4064bc, 0x00000000); |
1663 | if (nv_device(priv)->chipset == 0xc1 || | 1663 | if (nv_device(priv)->chipset == 0xc1 || |
1664 | nv_device(priv)->chipset == 0xd9) { | 1664 | nv_device(priv)->chipset >= 0xd0) { |
1665 | nv_wr32(priv, 0x4064c0, 0x80140078); | 1665 | nv_wr32(priv, 0x4064c0, 0x80140078); |
1666 | nv_wr32(priv, 0x4064c4, 0x0086ffff); | 1666 | nv_wr32(priv, 0x4064c4, 0x0086ffff); |
1667 | } | 1667 | } |
@@ -1701,7 +1701,7 @@ nvc0_grctx_generate_rop(struct nvc0_graph_priv *priv) | |||
1701 | /* ROPC_BROADCAST */ | 1701 | /* ROPC_BROADCAST */ |
1702 | nv_wr32(priv, 0x408800, 0x02802a3c); | 1702 | nv_wr32(priv, 0x408800, 0x02802a3c); |
1703 | nv_wr32(priv, 0x408804, 0x00000040); | 1703 | nv_wr32(priv, 0x408804, 0x00000040); |
1704 | if (chipset == 0xd9) { | 1704 | if (chipset >= 0xd0) { |
1705 | nv_wr32(priv, 0x408808, 0x1043e005); | 1705 | nv_wr32(priv, 0x408808, 0x1043e005); |
1706 | nv_wr32(priv, 0x408900, 0x3080b801); | 1706 | nv_wr32(priv, 0x408900, 0x3080b801); |
1707 | nv_wr32(priv, 0x408904, 0x1043e005); | 1707 | nv_wr32(priv, 0x408904, 0x1043e005); |
@@ -1735,7 +1735,7 @@ nvc0_grctx_generate_gpc(struct nvc0_graph_priv *priv) | |||
1735 | nv_wr32(priv, 0x418408, 0x00000000); | 1735 | nv_wr32(priv, 0x418408, 0x00000000); |
1736 | nv_wr32(priv, 0x41840c, 0x00001008); | 1736 | nv_wr32(priv, 0x41840c, 0x00001008); |
1737 | nv_wr32(priv, 0x418410, 0x0fff0fff); | 1737 | nv_wr32(priv, 0x418410, 0x0fff0fff); |
1738 | nv_wr32(priv, 0x418414, chipset != 0xd9 ? 0x00200fff : 0x02200fff); | 1738 | nv_wr32(priv, 0x418414, chipset < 0xd0 ? 0x00200fff : 0x02200fff); |
1739 | nv_wr32(priv, 0x418450, 0x00000000); | 1739 | nv_wr32(priv, 0x418450, 0x00000000); |
1740 | nv_wr32(priv, 0x418454, 0x00000000); | 1740 | nv_wr32(priv, 0x418454, 0x00000000); |
1741 | nv_wr32(priv, 0x418458, 0x00000000); | 1741 | nv_wr32(priv, 0x418458, 0x00000000); |
@@ -1750,14 +1750,14 @@ nvc0_grctx_generate_gpc(struct nvc0_graph_priv *priv) | |||
1750 | nv_wr32(priv, 0x418700, 0x00000002); | 1750 | nv_wr32(priv, 0x418700, 0x00000002); |
1751 | nv_wr32(priv, 0x418704, 0x00000080); | 1751 | nv_wr32(priv, 0x418704, 0x00000080); |
1752 | nv_wr32(priv, 0x418708, 0x00000000); | 1752 | nv_wr32(priv, 0x418708, 0x00000000); |
1753 | nv_wr32(priv, 0x41870c, chipset != 0xd9 ? 0x07c80000 : 0x00000000); | 1753 | nv_wr32(priv, 0x41870c, chipset < 0xd0 ? 0x07c80000 : 0x00000000); |
1754 | nv_wr32(priv, 0x418710, 0x00000000); | 1754 | nv_wr32(priv, 0x418710, 0x00000000); |
1755 | nv_wr32(priv, 0x418800, chipset != 0xd9 ? 0x0006860a : 0x7006860a); | 1755 | nv_wr32(priv, 0x418800, chipset < 0xd0 ? 0x0006860a : 0x7006860a); |
1756 | nv_wr32(priv, 0x418808, 0x00000000); | 1756 | nv_wr32(priv, 0x418808, 0x00000000); |
1757 | nv_wr32(priv, 0x41880c, 0x00000000); | 1757 | nv_wr32(priv, 0x41880c, 0x00000000); |
1758 | nv_wr32(priv, 0x418810, 0x00000000); | 1758 | nv_wr32(priv, 0x418810, 0x00000000); |
1759 | nv_wr32(priv, 0x418828, 0x00008442); | 1759 | nv_wr32(priv, 0x418828, 0x00008442); |
1760 | if (chipset == 0xc1 || chipset == 0xd9) | 1760 | if (chipset == 0xc1 || chipset >= 0xd0) |
1761 | nv_wr32(priv, 0x418830, 0x10000001); | 1761 | nv_wr32(priv, 0x418830, 0x10000001); |
1762 | else | 1762 | else |
1763 | nv_wr32(priv, 0x418830, 0x00000001); | 1763 | nv_wr32(priv, 0x418830, 0x00000001); |
@@ -1768,7 +1768,7 @@ nvc0_grctx_generate_gpc(struct nvc0_graph_priv *priv) | |||
1768 | nv_wr32(priv, 0x4188f0, 0x00000000); | 1768 | nv_wr32(priv, 0x4188f0, 0x00000000); |
1769 | nv_wr32(priv, 0x4188f4, 0x00000000); | 1769 | nv_wr32(priv, 0x4188f4, 0x00000000); |
1770 | nv_wr32(priv, 0x4188f8, 0x00000000); | 1770 | nv_wr32(priv, 0x4188f8, 0x00000000); |
1771 | if (chipset == 0xd9) | 1771 | if (chipset >= 0xd0) |
1772 | nv_wr32(priv, 0x4188fc, 0x20100008); | 1772 | nv_wr32(priv, 0x4188fc, 0x20100008); |
1773 | else if (chipset == 0xc1) | 1773 | else if (chipset == 0xc1) |
1774 | nv_wr32(priv, 0x4188fc, 0x00100018); | 1774 | nv_wr32(priv, 0x4188fc, 0x00100018); |
@@ -1787,7 +1787,7 @@ nvc0_grctx_generate_gpc(struct nvc0_graph_priv *priv) | |||
1787 | nv_wr32(priv, 0x418a14 + (i * 0x20), 0x00000000); | 1787 | nv_wr32(priv, 0x418a14 + (i * 0x20), 0x00000000); |
1788 | nv_wr32(priv, 0x418a18 + (i * 0x20), 0x00000000); | 1788 | nv_wr32(priv, 0x418a18 + (i * 0x20), 0x00000000); |
1789 | } | 1789 | } |
1790 | nv_wr32(priv, 0x418b00, chipset != 0xd9 ? 0x00000000 : 0x00000006); | 1790 | nv_wr32(priv, 0x418b00, chipset < 0xd0 ? 0x00000000 : 0x00000006); |
1791 | nv_wr32(priv, 0x418b08, 0x0a418820); | 1791 | nv_wr32(priv, 0x418b08, 0x0a418820); |
1792 | nv_wr32(priv, 0x418b0c, 0x062080e6); | 1792 | nv_wr32(priv, 0x418b0c, 0x062080e6); |
1793 | nv_wr32(priv, 0x418b10, 0x020398a4); | 1793 | nv_wr32(priv, 0x418b10, 0x020398a4); |
@@ -1804,7 +1804,7 @@ nvc0_grctx_generate_gpc(struct nvc0_graph_priv *priv) | |||
1804 | nv_wr32(priv, 0x418c24, 0x00000000); | 1804 | nv_wr32(priv, 0x418c24, 0x00000000); |
1805 | nv_wr32(priv, 0x418c28, 0x00000000); | 1805 | nv_wr32(priv, 0x418c28, 0x00000000); |
1806 | nv_wr32(priv, 0x418c2c, 0x00000000); | 1806 | nv_wr32(priv, 0x418c2c, 0x00000000); |
1807 | if (chipset == 0xc1 || chipset == 0xd9) | 1807 | if (chipset == 0xc1 || chipset >= 0xd0) |
1808 | nv_wr32(priv, 0x418c6c, 0x00000001); | 1808 | nv_wr32(priv, 0x418c6c, 0x00000001); |
1809 | nv_wr32(priv, 0x418c80, 0x20200004); | 1809 | nv_wr32(priv, 0x418c80, 0x20200004); |
1810 | nv_wr32(priv, 0x418c8c, 0x00000001); | 1810 | nv_wr32(priv, 0x418c8c, 0x00000001); |
@@ -1823,7 +1823,7 @@ nvc0_grctx_generate_tp(struct nvc0_graph_priv *priv) | |||
1823 | nv_wr32(priv, 0x419818, 0x00000000); | 1823 | nv_wr32(priv, 0x419818, 0x00000000); |
1824 | nv_wr32(priv, 0x41983c, 0x00038bc7); | 1824 | nv_wr32(priv, 0x41983c, 0x00038bc7); |
1825 | nv_wr32(priv, 0x419848, 0x00000000); | 1825 | nv_wr32(priv, 0x419848, 0x00000000); |
1826 | if (chipset == 0xc1 || chipset == 0xd9) | 1826 | if (chipset == 0xc1 || chipset >= 0xd0) |
1827 | nv_wr32(priv, 0x419864, 0x00000129); | 1827 | nv_wr32(priv, 0x419864, 0x00000129); |
1828 | else | 1828 | else |
1829 | nv_wr32(priv, 0x419864, 0x0000012a); | 1829 | nv_wr32(priv, 0x419864, 0x0000012a); |
@@ -1836,7 +1836,7 @@ nvc0_grctx_generate_tp(struct nvc0_graph_priv *priv) | |||
1836 | nv_wr32(priv, 0x419a14, 0x00000200); | 1836 | nv_wr32(priv, 0x419a14, 0x00000200); |
1837 | nv_wr32(priv, 0x419a1c, 0x00000000); | 1837 | nv_wr32(priv, 0x419a1c, 0x00000000); |
1838 | nv_wr32(priv, 0x419a20, 0x00000800); | 1838 | nv_wr32(priv, 0x419a20, 0x00000800); |
1839 | if (chipset == 0xd9) | 1839 | if (chipset >= 0xd0) |
1840 | nv_wr32(priv, 0x00419ac4, 0x0017f440); | 1840 | nv_wr32(priv, 0x00419ac4, 0x0017f440); |
1841 | else if (chipset != 0xc0 && chipset != 0xc8) | 1841 | else if (chipset != 0xc0 && chipset != 0xc8) |
1842 | nv_wr32(priv, 0x00419ac4, 0x0007f440); | 1842 | nv_wr32(priv, 0x00419ac4, 0x0007f440); |
@@ -1847,16 +1847,16 @@ nvc0_grctx_generate_tp(struct nvc0_graph_priv *priv) | |||
1847 | nv_wr32(priv, 0x419b10, 0x0a418820); | 1847 | nv_wr32(priv, 0x419b10, 0x0a418820); |
1848 | nv_wr32(priv, 0x419b14, 0x000000e6); | 1848 | nv_wr32(priv, 0x419b14, 0x000000e6); |
1849 | nv_wr32(priv, 0x419bd0, 0x00900103); | 1849 | nv_wr32(priv, 0x419bd0, 0x00900103); |
1850 | if (chipset == 0xc1 || chipset == 0xd9) | 1850 | if (chipset == 0xc1 || chipset >= 0xd0) |
1851 | nv_wr32(priv, 0x419be0, 0x00400001); | 1851 | nv_wr32(priv, 0x419be0, 0x00400001); |
1852 | else | 1852 | else |
1853 | nv_wr32(priv, 0x419be0, 0x00000001); | 1853 | nv_wr32(priv, 0x419be0, 0x00000001); |
1854 | nv_wr32(priv, 0x419be4, 0x00000000); | 1854 | nv_wr32(priv, 0x419be4, 0x00000000); |
1855 | nv_wr32(priv, 0x419c00, chipset != 0xd9 ? 0x00000002 : 0x0000000a); | 1855 | nv_wr32(priv, 0x419c00, chipset < 0xd0 ? 0x00000002 : 0x0000000a); |
1856 | nv_wr32(priv, 0x419c04, 0x00000006); | 1856 | nv_wr32(priv, 0x419c04, 0x00000006); |
1857 | nv_wr32(priv, 0x419c08, 0x00000002); | 1857 | nv_wr32(priv, 0x419c08, 0x00000002); |
1858 | nv_wr32(priv, 0x419c20, 0x00000000); | 1858 | nv_wr32(priv, 0x419c20, 0x00000000); |
1859 | if (nv_device(priv)->chipset == 0xd9) { | 1859 | if (nv_device(priv)->chipset >= 0xd0) { |
1860 | nv_wr32(priv, 0x419c24, 0x00084210); | 1860 | nv_wr32(priv, 0x419c24, 0x00084210); |
1861 | nv_wr32(priv, 0x419c28, 0x3cf3cf3c); | 1861 | nv_wr32(priv, 0x419c28, 0x3cf3cf3c); |
1862 | nv_wr32(priv, 0x419cb0, 0x00020048); | 1862 | nv_wr32(priv, 0x419cb0, 0x00020048); |
@@ -1868,12 +1868,12 @@ nvc0_grctx_generate_tp(struct nvc0_graph_priv *priv) | |||
1868 | } | 1868 | } |
1869 | nv_wr32(priv, 0x419ce8, 0x00000000); | 1869 | nv_wr32(priv, 0x419ce8, 0x00000000); |
1870 | nv_wr32(priv, 0x419cf4, 0x00000183); | 1870 | nv_wr32(priv, 0x419cf4, 0x00000183); |
1871 | if (chipset == 0xc1 || chipset == 0xd9) | 1871 | if (chipset == 0xc1 || chipset >= 0xd0) |
1872 | nv_wr32(priv, 0x419d20, 0x12180000); | 1872 | nv_wr32(priv, 0x419d20, 0x12180000); |
1873 | else | 1873 | else |
1874 | nv_wr32(priv, 0x419d20, 0x02180000); | 1874 | nv_wr32(priv, 0x419d20, 0x02180000); |
1875 | nv_wr32(priv, 0x419d24, 0x00001fff); | 1875 | nv_wr32(priv, 0x419d24, 0x00001fff); |
1876 | if (chipset == 0xc1 || chipset == 0xd9) | 1876 | if (chipset == 0xc1 || chipset >= 0xd0) |
1877 | nv_wr32(priv, 0x419d44, 0x02180218); | 1877 | nv_wr32(priv, 0x419d44, 0x02180218); |
1878 | nv_wr32(priv, 0x419e04, 0x00000000); | 1878 | nv_wr32(priv, 0x419e04, 0x00000000); |
1879 | nv_wr32(priv, 0x419e08, 0x00000000); | 1879 | nv_wr32(priv, 0x419e08, 0x00000000); |
@@ -2210,7 +2210,7 @@ nvc0_grctx_generate(struct nvc0_graph_priv *priv) | |||
2210 | nv_icmd(priv, 0x00000215, 0x00000040); | 2210 | nv_icmd(priv, 0x00000215, 0x00000040); |
2211 | nv_icmd(priv, 0x00000216, 0x00000040); | 2211 | nv_icmd(priv, 0x00000216, 0x00000040); |
2212 | nv_icmd(priv, 0x00000217, 0x00000040); | 2212 | nv_icmd(priv, 0x00000217, 0x00000040); |
2213 | if (nv_device(priv)->chipset == 0xd9) { | 2213 | if (nv_device(priv)->chipset >= 0xd0) { |
2214 | for (i = 0x0400; i <= 0x0417; i++) | 2214 | for (i = 0x0400; i <= 0x0417; i++) |
2215 | nv_icmd(priv, i, 0x00000040); | 2215 | nv_icmd(priv, i, 0x00000040); |
2216 | } | 2216 | } |
@@ -2222,7 +2222,7 @@ nvc0_grctx_generate(struct nvc0_graph_priv *priv) | |||
2222 | nv_icmd(priv, 0x0000021d, 0x0000c080); | 2222 | nv_icmd(priv, 0x0000021d, 0x0000c080); |
2223 | nv_icmd(priv, 0x0000021e, 0x0000c080); | 2223 | nv_icmd(priv, 0x0000021e, 0x0000c080); |
2224 | nv_icmd(priv, 0x0000021f, 0x0000c080); | 2224 | nv_icmd(priv, 0x0000021f, 0x0000c080); |
2225 | if (nv_device(priv)->chipset == 0xd9) { | 2225 | if (nv_device(priv)->chipset >= 0xd0) { |
2226 | for (i = 0x0440; i <= 0x0457; i++) | 2226 | for (i = 0x0440; i <= 0x0457; i++) |
2227 | nv_icmd(priv, i, 0x0000c080); | 2227 | nv_icmd(priv, i, 0x0000c080); |
2228 | } | 2228 | } |
@@ -2789,7 +2789,7 @@ nvc0_grctx_generate(struct nvc0_graph_priv *priv) | |||
2789 | nv_icmd(priv, 0x00000585, 0x0000003f); | 2789 | nv_icmd(priv, 0x00000585, 0x0000003f); |
2790 | nv_icmd(priv, 0x00000576, 0x00000003); | 2790 | nv_icmd(priv, 0x00000576, 0x00000003); |
2791 | if (nv_device(priv)->chipset == 0xc1 || | 2791 | if (nv_device(priv)->chipset == 0xc1 || |
2792 | nv_device(priv)->chipset == 0xd9) | 2792 | nv_device(priv)->chipset >= 0xd0) |
2793 | nv_icmd(priv, 0x0000057b, 0x00000059); | 2793 | nv_icmd(priv, 0x0000057b, 0x00000059); |
2794 | nv_icmd(priv, 0x00000586, 0x00000040); | 2794 | nv_icmd(priv, 0x00000586, 0x00000040); |
2795 | nv_icmd(priv, 0x00000582, 0x00000080); | 2795 | nv_icmd(priv, 0x00000582, 0x00000080); |
@@ -2891,7 +2891,7 @@ nvc0_grctx_generate(struct nvc0_graph_priv *priv) | |||
2891 | nv_icmd(priv, 0x00000957, 0x00000003); | 2891 | nv_icmd(priv, 0x00000957, 0x00000003); |
2892 | nv_icmd(priv, 0x0000095e, 0x20164010); | 2892 | nv_icmd(priv, 0x0000095e, 0x20164010); |
2893 | nv_icmd(priv, 0x0000095f, 0x00000020); | 2893 | nv_icmd(priv, 0x0000095f, 0x00000020); |
2894 | if (nv_device(priv)->chipset == 0xd9) | 2894 | if (nv_device(priv)->chipset >= 0xd0) |
2895 | nv_icmd(priv, 0x0000097d, 0x00000020); | 2895 | nv_icmd(priv, 0x0000097d, 0x00000020); |
2896 | nv_icmd(priv, 0x00000683, 0x00000006); | 2896 | nv_icmd(priv, 0x00000683, 0x00000006); |
2897 | nv_icmd(priv, 0x00000685, 0x003fffff); | 2897 | nv_icmd(priv, 0x00000685, 0x003fffff); |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc index b86cc60dcd56..f7055af0f2a6 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc +++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnvc0.fuc | |||
@@ -87,6 +87,11 @@ chipsets: | |||
87 | .b16 #nvd9_gpc_mmio_tail | 87 | .b16 #nvd9_gpc_mmio_tail |
88 | .b16 #nvd9_tpc_mmio_head | 88 | .b16 #nvd9_tpc_mmio_head |
89 | .b16 #nvd9_tpc_mmio_tail | 89 | .b16 #nvd9_tpc_mmio_tail |
90 | .b8 0xd7 0 0 0 | ||
91 | .b16 #nvd9_gpc_mmio_head | ||
92 | .b16 #nvd9_gpc_mmio_tail | ||
93 | .b16 #nvd9_tpc_mmio_head | ||
94 | .b16 #nvd9_tpc_mmio_tail | ||
90 | .b8 0 0 0 0 | 95 | .b8 0 0 0 0 |
91 | 96 | ||
92 | // GPC mmio lists | 97 | // GPC mmio lists |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc index 0bcfa4d447e5..7fbdebb2bafb 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc +++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/hubnvc0.fuc | |||
@@ -62,6 +62,9 @@ chipsets: | |||
62 | .b8 0xd9 0 0 0 | 62 | .b8 0xd9 0 0 0 |
63 | .b16 #nvd9_hub_mmio_head | 63 | .b16 #nvd9_hub_mmio_head |
64 | .b16 #nvd9_hub_mmio_tail | 64 | .b16 #nvd9_hub_mmio_tail |
65 | .b8 0xd7 0 0 0 | ||
66 | .b16 #nvd9_hub_mmio_head | ||
67 | .b16 #nvd9_hub_mmio_tail | ||
65 | .b8 0 0 0 0 | 68 | .b8 0 0 0 0 |
66 | 69 | ||
67 | nvc0_hub_mmio_head: | 70 | nvc0_hub_mmio_head: |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c index 5ce49412e482..2dcd13796188 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.c | |||
@@ -531,9 +531,10 @@ nvc0_graph_ctor(struct nouveau_object *parent, struct nouveau_object *engine, | |||
531 | { | 531 | { |
532 | struct nouveau_device *device = nv_device(parent); | 532 | struct nouveau_device *device = nv_device(parent); |
533 | struct nvc0_graph_priv *priv; | 533 | struct nvc0_graph_priv *priv; |
534 | bool enable = device->chipset != 0xd7; | ||
534 | int ret, i; | 535 | int ret, i; |
535 | 536 | ||
536 | ret = nouveau_graph_create(parent, engine, oclass, true, &priv); | 537 | ret = nouveau_graph_create(parent, engine, oclass, enable, &priv); |
537 | *pobject = nv_object(priv); | 538 | *pobject = nv_object(priv); |
538 | if (ret) | 539 | if (ret) |
539 | return ret; | 540 | return ret; |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.h b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.h index af033dc24440..c870dad0f670 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.h +++ b/drivers/gpu/drm/nouveau/core/engine/graph/nvc0.h | |||
@@ -118,6 +118,7 @@ nvc0_graph_class(void *obj) | |||
118 | return 0x9197; | 118 | return 0x9197; |
119 | case 0xc8: | 119 | case 0xc8: |
120 | case 0xd9: | 120 | case 0xd9: |
121 | case 0xd7: | ||
121 | return 0x9297; | 122 | return 0x9297; |
122 | case 0xe4: | 123 | case 0xe4: |
123 | case 0xe7: | 124 | case 0xe7: |
diff --git a/drivers/gpu/drm/nouveau/core/subdev/device/nvc0.c b/drivers/gpu/drm/nouveau/core/subdev/device/nvc0.c index 4393eb4d6564..00f869ee53e3 100644 --- a/drivers/gpu/drm/nouveau/core/subdev/device/nvc0.c +++ b/drivers/gpu/drm/nouveau/core/subdev/device/nvc0.c | |||
@@ -285,6 +285,34 @@ nvc0_identify(struct nouveau_device *device) | |||
285 | device->oclass[NVDEV_ENGINE_COPY0 ] = &nvc0_copy0_oclass; | 285 | device->oclass[NVDEV_ENGINE_COPY0 ] = &nvc0_copy0_oclass; |
286 | device->oclass[NVDEV_ENGINE_DISP ] = &nvd0_disp_oclass; | 286 | device->oclass[NVDEV_ENGINE_DISP ] = &nvd0_disp_oclass; |
287 | break; | 287 | break; |
288 | case 0xd7: | ||
289 | device->cname = "GF117"; | ||
290 | device->oclass[NVDEV_SUBDEV_VBIOS ] = &nouveau_bios_oclass; | ||
291 | device->oclass[NVDEV_SUBDEV_GPIO ] = &nvd0_gpio_oclass; | ||
292 | device->oclass[NVDEV_SUBDEV_I2C ] = &nvd0_i2c_oclass; | ||
293 | device->oclass[NVDEV_SUBDEV_CLOCK ] = &nvc0_clock_oclass; | ||
294 | device->oclass[NVDEV_SUBDEV_THERM ] = &nvd0_therm_oclass; | ||
295 | device->oclass[NVDEV_SUBDEV_MXM ] = &nv50_mxm_oclass; | ||
296 | device->oclass[NVDEV_SUBDEV_DEVINIT] = &nv50_devinit_oclass; | ||
297 | device->oclass[NVDEV_SUBDEV_MC ] = &nvc0_mc_oclass; | ||
298 | device->oclass[NVDEV_SUBDEV_BUS ] = &nvc0_bus_oclass; | ||
299 | device->oclass[NVDEV_SUBDEV_TIMER ] = &nv04_timer_oclass; | ||
300 | device->oclass[NVDEV_SUBDEV_FB ] = &nvc0_fb_oclass; | ||
301 | device->oclass[NVDEV_SUBDEV_LTCG ] = &nvc0_ltcg_oclass; | ||
302 | device->oclass[NVDEV_SUBDEV_IBUS ] = &nvc0_ibus_oclass; | ||
303 | device->oclass[NVDEV_SUBDEV_INSTMEM] = &nv50_instmem_oclass; | ||
304 | device->oclass[NVDEV_SUBDEV_VM ] = &nvc0_vmmgr_oclass; | ||
305 | device->oclass[NVDEV_SUBDEV_BAR ] = &nvc0_bar_oclass; | ||
306 | device->oclass[NVDEV_ENGINE_DMAOBJ ] = &nvd0_dmaeng_oclass; | ||
307 | device->oclass[NVDEV_ENGINE_FIFO ] = &nvc0_fifo_oclass; | ||
308 | device->oclass[NVDEV_ENGINE_SW ] = &nvc0_software_oclass; | ||
309 | device->oclass[NVDEV_ENGINE_GR ] = &nvc0_graph_oclass; | ||
310 | device->oclass[NVDEV_ENGINE_VP ] = &nvc0_vp_oclass; | ||
311 | device->oclass[NVDEV_ENGINE_BSP ] = &nvc0_bsp_oclass; | ||
312 | device->oclass[NVDEV_ENGINE_PPP ] = &nvc0_ppp_oclass; | ||
313 | device->oclass[NVDEV_ENGINE_COPY0 ] = &nvc0_copy0_oclass; | ||
314 | device->oclass[NVDEV_ENGINE_DISP ] = &nvd0_disp_oclass; | ||
315 | break; | ||
288 | default: | 316 | default: |
289 | nv_fatal(device, "unknown Fermi chipset\n"); | 317 | nv_fatal(device, "unknown Fermi chipset\n"); |
290 | return -EINVAL; | 318 | return -EINVAL; |