diff options
author | Ben Skeggs <bskeggs@redhat.com> | 2013-05-05 21:35:37 -0400 |
---|---|---|
committer | Ben Skeggs <bskeggs@redhat.com> | 2013-06-30 23:50:35 -0400 |
commit | 99bd5537bd22256866d83033e0aab2586616bcc2 (patch) | |
tree | a790d7d925946874d8f9b92a62431eee97cb35f4 | |
parent | c4c7044ffc1ba973e2ec0f0dc94980b49101d877 (diff) |
drm/nve6/gr: update initial register/context values
Signed-off-by: Ben Skeggs <bskeggs@redhat.com>
4 files changed, 383 insertions, 113 deletions
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/ctxnve0.c b/drivers/gpu/drm/nouveau/core/engine/graph/ctxnve0.c index ae27dae3fe38..d4e54745876b 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/ctxnve0.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/ctxnve0.c | |||
@@ -749,31 +749,37 @@ nve0_grctx_generate_icmd(struct nvc0_graph_priv *priv) | |||
749 | nv_icmd(priv, 0x000841, 0x08000080); | 749 | nv_icmd(priv, 0x000841, 0x08000080); |
750 | nv_icmd(priv, 0x000842, 0x00400008); | 750 | nv_icmd(priv, 0x000842, 0x00400008); |
751 | nv_icmd(priv, 0x000843, 0x08000080); | 751 | nv_icmd(priv, 0x000843, 0x08000080); |
752 | nv_icmd(priv, 0x000818, 0x00000000); | 752 | switch (nv_device(priv)->chipset) { |
753 | nv_icmd(priv, 0x000819, 0x00000000); | 753 | case 0xe6: |
754 | nv_icmd(priv, 0x00081a, 0x00000000); | 754 | break; |
755 | nv_icmd(priv, 0x00081b, 0x00000000); | 755 | default: |
756 | nv_icmd(priv, 0x00081c, 0x00000000); | 756 | nv_icmd(priv, 0x000818, 0x00000000); |
757 | nv_icmd(priv, 0x00081d, 0x00000000); | 757 | nv_icmd(priv, 0x000819, 0x00000000); |
758 | nv_icmd(priv, 0x00081e, 0x00000000); | 758 | nv_icmd(priv, 0x00081a, 0x00000000); |
759 | nv_icmd(priv, 0x00081f, 0x00000000); | 759 | nv_icmd(priv, 0x00081b, 0x00000000); |
760 | nv_icmd(priv, 0x000848, 0x00000000); | 760 | nv_icmd(priv, 0x00081c, 0x00000000); |
761 | nv_icmd(priv, 0x000849, 0x00000000); | 761 | nv_icmd(priv, 0x00081d, 0x00000000); |
762 | nv_icmd(priv, 0x00084a, 0x00000000); | 762 | nv_icmd(priv, 0x00081e, 0x00000000); |
763 | nv_icmd(priv, 0x00084b, 0x00000000); | 763 | nv_icmd(priv, 0x00081f, 0x00000000); |
764 | nv_icmd(priv, 0x00084c, 0x00000000); | 764 | nv_icmd(priv, 0x000848, 0x00000000); |
765 | nv_icmd(priv, 0x00084d, 0x00000000); | 765 | nv_icmd(priv, 0x000849, 0x00000000); |
766 | nv_icmd(priv, 0x00084e, 0x00000000); | 766 | nv_icmd(priv, 0x00084a, 0x00000000); |
767 | nv_icmd(priv, 0x00084f, 0x00000000); | 767 | nv_icmd(priv, 0x00084b, 0x00000000); |
768 | nv_icmd(priv, 0x000850, 0x00000000); | 768 | nv_icmd(priv, 0x00084c, 0x00000000); |
769 | nv_icmd(priv, 0x000851, 0x00000000); | 769 | nv_icmd(priv, 0x00084d, 0x00000000); |
770 | nv_icmd(priv, 0x000852, 0x00000000); | 770 | nv_icmd(priv, 0x00084e, 0x00000000); |
771 | nv_icmd(priv, 0x000853, 0x00000000); | 771 | nv_icmd(priv, 0x00084f, 0x00000000); |
772 | nv_icmd(priv, 0x000854, 0x00000000); | 772 | nv_icmd(priv, 0x000850, 0x00000000); |
773 | nv_icmd(priv, 0x000855, 0x00000000); | 773 | nv_icmd(priv, 0x000851, 0x00000000); |
774 | nv_icmd(priv, 0x000856, 0x00000000); | 774 | nv_icmd(priv, 0x000852, 0x00000000); |
775 | nv_icmd(priv, 0x000857, 0x00000000); | 775 | nv_icmd(priv, 0x000853, 0x00000000); |
776 | nv_icmd(priv, 0x000738, 0x00000000); | 776 | nv_icmd(priv, 0x000854, 0x00000000); |
777 | nv_icmd(priv, 0x000855, 0x00000000); | ||
778 | nv_icmd(priv, 0x000856, 0x00000000); | ||
779 | nv_icmd(priv, 0x000857, 0x00000000); | ||
780 | nv_icmd(priv, 0x000738, 0x00000000); | ||
781 | break; | ||
782 | } | ||
777 | nv_icmd(priv, 0x0006aa, 0x00000001); | 783 | nv_icmd(priv, 0x0006aa, 0x00000001); |
778 | nv_icmd(priv, 0x0006ab, 0x00000002); | 784 | nv_icmd(priv, 0x0006ab, 0x00000002); |
779 | nv_icmd(priv, 0x0006ac, 0x00000080); | 785 | nv_icmd(priv, 0x0006ac, 0x00000080); |
@@ -862,31 +868,37 @@ nve0_grctx_generate_icmd(struct nvc0_graph_priv *priv) | |||
862 | nv_icmd(priv, 0x000813, 0x00000006); | 868 | nv_icmd(priv, 0x000813, 0x00000006); |
863 | nv_icmd(priv, 0x000814, 0x00000008); | 869 | nv_icmd(priv, 0x000814, 0x00000008); |
864 | nv_icmd(priv, 0x000957, 0x00000003); | 870 | nv_icmd(priv, 0x000957, 0x00000003); |
865 | nv_icmd(priv, 0x000818, 0x00000000); | 871 | switch (nv_device(priv)->chipset) { |
866 | nv_icmd(priv, 0x000819, 0x00000000); | 872 | case 0xe6: |
867 | nv_icmd(priv, 0x00081a, 0x00000000); | 873 | break; |
868 | nv_icmd(priv, 0x00081b, 0x00000000); | 874 | default: |
869 | nv_icmd(priv, 0x00081c, 0x00000000); | 875 | nv_icmd(priv, 0x000818, 0x00000000); |
870 | nv_icmd(priv, 0x00081d, 0x00000000); | 876 | nv_icmd(priv, 0x000819, 0x00000000); |
871 | nv_icmd(priv, 0x00081e, 0x00000000); | 877 | nv_icmd(priv, 0x00081a, 0x00000000); |
872 | nv_icmd(priv, 0x00081f, 0x00000000); | 878 | nv_icmd(priv, 0x00081b, 0x00000000); |
873 | nv_icmd(priv, 0x000848, 0x00000000); | 879 | nv_icmd(priv, 0x00081c, 0x00000000); |
874 | nv_icmd(priv, 0x000849, 0x00000000); | 880 | nv_icmd(priv, 0x00081d, 0x00000000); |
875 | nv_icmd(priv, 0x00084a, 0x00000000); | 881 | nv_icmd(priv, 0x00081e, 0x00000000); |
876 | nv_icmd(priv, 0x00084b, 0x00000000); | 882 | nv_icmd(priv, 0x00081f, 0x00000000); |
877 | nv_icmd(priv, 0x00084c, 0x00000000); | 883 | nv_icmd(priv, 0x000848, 0x00000000); |
878 | nv_icmd(priv, 0x00084d, 0x00000000); | 884 | nv_icmd(priv, 0x000849, 0x00000000); |
879 | nv_icmd(priv, 0x00084e, 0x00000000); | 885 | nv_icmd(priv, 0x00084a, 0x00000000); |
880 | nv_icmd(priv, 0x00084f, 0x00000000); | 886 | nv_icmd(priv, 0x00084b, 0x00000000); |
881 | nv_icmd(priv, 0x000850, 0x00000000); | 887 | nv_icmd(priv, 0x00084c, 0x00000000); |
882 | nv_icmd(priv, 0x000851, 0x00000000); | 888 | nv_icmd(priv, 0x00084d, 0x00000000); |
883 | nv_icmd(priv, 0x000852, 0x00000000); | 889 | nv_icmd(priv, 0x00084e, 0x00000000); |
884 | nv_icmd(priv, 0x000853, 0x00000000); | 890 | nv_icmd(priv, 0x00084f, 0x00000000); |
885 | nv_icmd(priv, 0x000854, 0x00000000); | 891 | nv_icmd(priv, 0x000850, 0x00000000); |
886 | nv_icmd(priv, 0x000855, 0x00000000); | 892 | nv_icmd(priv, 0x000851, 0x00000000); |
887 | nv_icmd(priv, 0x000856, 0x00000000); | 893 | nv_icmd(priv, 0x000852, 0x00000000); |
888 | nv_icmd(priv, 0x000857, 0x00000000); | 894 | nv_icmd(priv, 0x000853, 0x00000000); |
889 | nv_icmd(priv, 0x000738, 0x00000000); | 895 | nv_icmd(priv, 0x000854, 0x00000000); |
896 | nv_icmd(priv, 0x000855, 0x00000000); | ||
897 | nv_icmd(priv, 0x000856, 0x00000000); | ||
898 | nv_icmd(priv, 0x000857, 0x00000000); | ||
899 | nv_icmd(priv, 0x000738, 0x00000000); | ||
900 | break; | ||
901 | } | ||
890 | nv_icmd(priv, 0x000b07, 0x00000002); | 902 | nv_icmd(priv, 0x000b07, 0x00000002); |
891 | nv_icmd(priv, 0x000b08, 0x00000100); | 903 | nv_icmd(priv, 0x000b08, 0x00000100); |
892 | nv_icmd(priv, 0x000b09, 0x00000100); | 904 | nv_icmd(priv, 0x000b09, 0x00000100); |
@@ -2162,7 +2174,14 @@ nve0_grctx_generate_902d(struct nvc0_graph_priv *priv) | |||
2162 | nv_mthd(priv, 0x902d, 0x0244, 0x00000080); | 2174 | nv_mthd(priv, 0x902d, 0x0244, 0x00000080); |
2163 | nv_mthd(priv, 0x902d, 0x0248, 0x00000100); | 2175 | nv_mthd(priv, 0x902d, 0x0248, 0x00000100); |
2164 | nv_mthd(priv, 0x902d, 0x024c, 0x00000100); | 2176 | nv_mthd(priv, 0x902d, 0x024c, 0x00000100); |
2165 | nv_mthd(priv, 0x902d, 0x3410, 0x00000000); | 2177 | switch (nv_device(priv)->chipset) { |
2178 | case 0xe6: | ||
2179 | nv_mthd(priv, 0x902d, 0x3410, 0x80002006); | ||
2180 | break; | ||
2181 | default: | ||
2182 | nv_mthd(priv, 0x902d, 0x3410, 0x00000000); | ||
2183 | break; | ||
2184 | } | ||
2166 | } | 2185 | } |
2167 | 2186 | ||
2168 | static void | 2187 | static void |
@@ -2310,6 +2329,11 @@ nve0_graph_generate_unk58xx(struct nvc0_graph_priv *priv) | |||
2310 | nv_wr32(priv, 0x405a00, 0x0); | 2329 | nv_wr32(priv, 0x405a00, 0x0); |
2311 | nv_wr32(priv, 0x405a04, 0x0); | 2330 | nv_wr32(priv, 0x405a04, 0x0); |
2312 | nv_wr32(priv, 0x405a18, 0x0); | 2331 | nv_wr32(priv, 0x405a18, 0x0); |
2332 | } | ||
2333 | |||
2334 | static void | ||
2335 | nve0_graph_generate_unk5bxx(struct nvc0_graph_priv *priv) | ||
2336 | { | ||
2313 | nv_wr32(priv, 0x405b00, 0x0); | 2337 | nv_wr32(priv, 0x405b00, 0x0); |
2314 | nv_wr32(priv, 0x405b10, 0x1000); | 2338 | nv_wr32(priv, 0x405b10, 0x1000); |
2315 | } | 2339 | } |
@@ -2394,6 +2418,8 @@ nve0_graph_generate_unk88xx(struct nvc0_graph_priv *priv) | |||
2394 | static void | 2418 | static void |
2395 | nve0_graph_generate_gpc(struct nvc0_graph_priv *priv) | 2419 | nve0_graph_generate_gpc(struct nvc0_graph_priv *priv) |
2396 | { | 2420 | { |
2421 | int i; | ||
2422 | |||
2397 | nv_wr32(priv, 0x418380, 0x16); | 2423 | nv_wr32(priv, 0x418380, 0x16); |
2398 | nv_wr32(priv, 0x418400, 0x38004e00); | 2424 | nv_wr32(priv, 0x418400, 0x38004e00); |
2399 | nv_wr32(priv, 0x418404, 0x71e0ffff); | 2425 | nv_wr32(priv, 0x418404, 0x71e0ffff); |
@@ -2434,62 +2460,15 @@ nve0_graph_generate_gpc(struct nvc0_graph_priv *priv) | |||
2434 | nv_wr32(priv, 0x418924, 0x0); | 2460 | nv_wr32(priv, 0x418924, 0x0); |
2435 | nv_wr32(priv, 0x418928, 0xffff00); | 2461 | nv_wr32(priv, 0x418928, 0xffff00); |
2436 | nv_wr32(priv, 0x41892c, 0xff00); | 2462 | nv_wr32(priv, 0x41892c, 0xff00); |
2437 | nv_wr32(priv, 0x418a00, 0x0); | 2463 | for (i = 0; i < 8; i++) { |
2438 | nv_wr32(priv, 0x418a04, 0x0); | 2464 | nv_wr32(priv, 0x418a00 + (i * 0x20), 0x0); |
2439 | nv_wr32(priv, 0x418a08, 0x0); | 2465 | nv_wr32(priv, 0x418a04 + (i * 0x20), 0x0); |
2440 | nv_wr32(priv, 0x418a0c, 0x10000); | 2466 | nv_wr32(priv, 0x418a08 + (i * 0x20), 0x0); |
2441 | nv_wr32(priv, 0x418a10, 0x0); | 2467 | nv_wr32(priv, 0x418a0c + (i * 0x20), 0x10000); |
2442 | nv_wr32(priv, 0x418a14, 0x0); | 2468 | nv_wr32(priv, 0x418a10 + (i * 0x20), 0x0); |
2443 | nv_wr32(priv, 0x418a18, 0x0); | 2469 | nv_wr32(priv, 0x418a14 + (i * 0x20), 0x0); |
2444 | nv_wr32(priv, 0x418a20, 0x0); | 2470 | nv_wr32(priv, 0x418a18 + (i * 0x20), 0x0); |
2445 | nv_wr32(priv, 0x418a24, 0x0); | 2471 | } |
2446 | nv_wr32(priv, 0x418a28, 0x0); | ||
2447 | nv_wr32(priv, 0x418a2c, 0x10000); | ||
2448 | nv_wr32(priv, 0x418a30, 0x0); | ||
2449 | nv_wr32(priv, 0x418a34, 0x0); | ||
2450 | nv_wr32(priv, 0x418a38, 0x0); | ||
2451 | nv_wr32(priv, 0x418a40, 0x0); | ||
2452 | nv_wr32(priv, 0x418a44, 0x0); | ||
2453 | nv_wr32(priv, 0x418a48, 0x0); | ||
2454 | nv_wr32(priv, 0x418a4c, 0x10000); | ||
2455 | nv_wr32(priv, 0x418a50, 0x0); | ||
2456 | nv_wr32(priv, 0x418a54, 0x0); | ||
2457 | nv_wr32(priv, 0x418a58, 0x0); | ||
2458 | nv_wr32(priv, 0x418a60, 0x0); | ||
2459 | nv_wr32(priv, 0x418a64, 0x0); | ||
2460 | nv_wr32(priv, 0x418a68, 0x0); | ||
2461 | nv_wr32(priv, 0x418a6c, 0x10000); | ||
2462 | nv_wr32(priv, 0x418a70, 0x0); | ||
2463 | nv_wr32(priv, 0x418a74, 0x0); | ||
2464 | nv_wr32(priv, 0x418a78, 0x0); | ||
2465 | nv_wr32(priv, 0x418a80, 0x0); | ||
2466 | nv_wr32(priv, 0x418a84, 0x0); | ||
2467 | nv_wr32(priv, 0x418a88, 0x0); | ||
2468 | nv_wr32(priv, 0x418a8c, 0x10000); | ||
2469 | nv_wr32(priv, 0x418a90, 0x0); | ||
2470 | nv_wr32(priv, 0x418a94, 0x0); | ||
2471 | nv_wr32(priv, 0x418a98, 0x0); | ||
2472 | nv_wr32(priv, 0x418aa0, 0x0); | ||
2473 | nv_wr32(priv, 0x418aa4, 0x0); | ||
2474 | nv_wr32(priv, 0x418aa8, 0x0); | ||
2475 | nv_wr32(priv, 0x418aac, 0x10000); | ||
2476 | nv_wr32(priv, 0x418ab0, 0x0); | ||
2477 | nv_wr32(priv, 0x418ab4, 0x0); | ||
2478 | nv_wr32(priv, 0x418ab8, 0x0); | ||
2479 | nv_wr32(priv, 0x418ac0, 0x0); | ||
2480 | nv_wr32(priv, 0x418ac4, 0x0); | ||
2481 | nv_wr32(priv, 0x418ac8, 0x0); | ||
2482 | nv_wr32(priv, 0x418acc, 0x10000); | ||
2483 | nv_wr32(priv, 0x418ad0, 0x0); | ||
2484 | nv_wr32(priv, 0x418ad4, 0x0); | ||
2485 | nv_wr32(priv, 0x418ad8, 0x0); | ||
2486 | nv_wr32(priv, 0x418ae0, 0x0); | ||
2487 | nv_wr32(priv, 0x418ae4, 0x0); | ||
2488 | nv_wr32(priv, 0x418ae8, 0x0); | ||
2489 | nv_wr32(priv, 0x418aec, 0x10000); | ||
2490 | nv_wr32(priv, 0x418af0, 0x0); | ||
2491 | nv_wr32(priv, 0x418af4, 0x0); | ||
2492 | nv_wr32(priv, 0x418af8, 0x0); | ||
2493 | nv_wr32(priv, 0x418b00, 0x6); | 2472 | nv_wr32(priv, 0x418b00, 0x6); |
2494 | nv_wr32(priv, 0x418b08, 0xa418820); | 2473 | nv_wr32(priv, 0x418b08, 0xa418820); |
2495 | nv_wr32(priv, 0x418b0c, 0x62080e6); | 2474 | nv_wr32(priv, 0x418b0c, 0x62080e6); |
@@ -2567,7 +2546,14 @@ nve0_graph_generate_tpc(struct nvc0_graph_priv *priv) | |||
2567 | nv_wr32(priv, 0x419e90, 0x0); | 2546 | nv_wr32(priv, 0x419e90, 0x0); |
2568 | nv_wr32(priv, 0x419e94, 0x0); | 2547 | nv_wr32(priv, 0x419e94, 0x0); |
2569 | nv_wr32(priv, 0x419e98, 0x0); | 2548 | nv_wr32(priv, 0x419e98, 0x0); |
2570 | nv_wr32(priv, 0x419eac, 0x1fcf); | 2549 | switch (nv_device(priv)->chipset) { |
2550 | case 0xe6: | ||
2551 | nv_wr32(priv, 0x419eac, 0x1f8f); | ||
2552 | break; | ||
2553 | default: | ||
2554 | nv_wr32(priv, 0x419eac, 0x1fcf); | ||
2555 | break; | ||
2556 | } | ||
2571 | nv_wr32(priv, 0x419eb0, 0xd3f); | 2557 | nv_wr32(priv, 0x419eb0, 0xd3f); |
2572 | nv_wr32(priv, 0x419ec8, 0x1304f); | 2558 | nv_wr32(priv, 0x419ec8, 0x1304f); |
2573 | nv_wr32(priv, 0x419f30, 0x0); | 2559 | nv_wr32(priv, 0x419f30, 0x0); |
@@ -2579,7 +2565,21 @@ nve0_graph_generate_tpc(struct nvc0_graph_priv *priv) | |||
2579 | nv_wr32(priv, 0x419f48, 0x0); | 2565 | nv_wr32(priv, 0x419f48, 0x0); |
2580 | nv_wr32(priv, 0x419f4c, 0x0); | 2566 | nv_wr32(priv, 0x419f4c, 0x0); |
2581 | nv_wr32(priv, 0x419f58, 0x0); | 2567 | nv_wr32(priv, 0x419f58, 0x0); |
2568 | switch (nv_device(priv)->chipset) { | ||
2569 | case 0xe6: | ||
2570 | nv_wr32(priv, 0x419f70, 0x0); | ||
2571 | break; | ||
2572 | default: | ||
2573 | break; | ||
2574 | } | ||
2582 | nv_wr32(priv, 0x419f78, 0xb); | 2575 | nv_wr32(priv, 0x419f78, 0xb); |
2576 | switch (nv_device(priv)->chipset) { | ||
2577 | case 0xe6: | ||
2578 | nv_wr32(priv, 0x419f7c, 0x27a); | ||
2579 | break; | ||
2580 | default: | ||
2581 | break; | ||
2582 | } | ||
2583 | } | 2583 | } |
2584 | 2584 | ||
2585 | static void | 2585 | static void |
@@ -2624,6 +2624,7 @@ nve0_grctx_generate(struct nvc0_graph_priv *priv) | |||
2624 | nve0_graph_generate_unk46xx(priv); | 2624 | nve0_graph_generate_unk46xx(priv); |
2625 | nve0_graph_generate_unk47xx(priv); | 2625 | nve0_graph_generate_unk47xx(priv); |
2626 | nve0_graph_generate_unk58xx(priv); | 2626 | nve0_graph_generate_unk58xx(priv); |
2627 | nve0_graph_generate_unk5bxx(priv); | ||
2627 | nve0_graph_generate_unk60xx(priv); | 2628 | nve0_graph_generate_unk60xx(priv); |
2628 | nve0_graph_generate_unk64xx(priv); | 2629 | nve0_graph_generate_unk64xx(priv); |
2629 | nve0_graph_generate_unk70xx(priv); | 2630 | nve0_graph_generate_unk70xx(priv); |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc index 62ab231cd6b6..f58c4d0762d3 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc +++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc | |||
@@ -60,8 +60,8 @@ chipsets: | |||
60 | .b8 0xe6 0 0 0 | 60 | .b8 0xe6 0 0 0 |
61 | .b16 #nve4_gpc_mmio_head | 61 | .b16 #nve4_gpc_mmio_head |
62 | .b16 #nve4_gpc_mmio_tail | 62 | .b16 #nve4_gpc_mmio_tail |
63 | .b16 #nve4_tpc_mmio_head | 63 | .b16 #nve6_tpc_mmio_head |
64 | .b16 #nve4_tpc_mmio_tail | 64 | .b16 #nve6_tpc_mmio_tail |
65 | .b8 0 0 0 0 | 65 | .b8 0 0 0 0 |
66 | 66 | ||
67 | // GPC mmio lists | 67 | // GPC mmio lists |
@@ -123,6 +123,28 @@ mmctx_data(0x000758, 1) | |||
123 | mmctx_data(0x000778, 1) | 123 | mmctx_data(0x000778, 1) |
124 | nve4_tpc_mmio_tail: | 124 | nve4_tpc_mmio_tail: |
125 | 125 | ||
126 | nve6_tpc_mmio_head: | ||
127 | mmctx_data(0x000048, 1) | ||
128 | mmctx_data(0x000064, 1) | ||
129 | mmctx_data(0x000088, 1) | ||
130 | mmctx_data(0x000200, 6) | ||
131 | mmctx_data(0x00021c, 2) | ||
132 | mmctx_data(0x000230, 1) | ||
133 | mmctx_data(0x0002c4, 1) | ||
134 | mmctx_data(0x000400, 3) | ||
135 | mmctx_data(0x000420, 3) | ||
136 | mmctx_data(0x0004e8, 1) | ||
137 | mmctx_data(0x0004f4, 1) | ||
138 | mmctx_data(0x000604, 4) | ||
139 | mmctx_data(0x000644, 22) | ||
140 | mmctx_data(0x0006ac, 2) | ||
141 | mmctx_data(0x0006c8, 1) | ||
142 | mmctx_data(0x000730, 8) | ||
143 | mmctx_data(0x000758, 1) | ||
144 | mmctx_data(0x000770, 1) | ||
145 | mmctx_data(0x000778, 2) | ||
146 | nve6_tpc_mmio_tail: | ||
147 | |||
126 | .section #nve0_grgpc_code | 148 | .section #nve0_grgpc_code |
127 | bra #init | 149 | bra #init |
128 | define(`include_code') | 150 | define(`include_code') |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc.h b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc.h index 09ee4702c8b2..321834f15311 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc.h +++ b/drivers/gpu/drm/nouveau/core/engine/graph/fuc/gpcnve0.fuc.h | |||
@@ -41,7 +41,7 @@ uint32_t nve0_grgpc_data[] = { | |||
41 | 0x01580110, | 41 | 0x01580110, |
42 | 0x000000e6, | 42 | 0x000000e6, |
43 | 0x0110008c, | 43 | 0x0110008c, |
44 | 0x01580110, | 44 | 0x01a40158, |
45 | 0x00000000, | 45 | 0x00000000, |
46 | /* 0x008c: nve4_gpc_mmio_head */ | 46 | /* 0x008c: nve4_gpc_mmio_head */ |
47 | 0x00000380, | 47 | 0x00000380, |
@@ -97,6 +97,27 @@ uint32_t nve0_grgpc_data[] = { | |||
97 | 0x1c000730, | 97 | 0x1c000730, |
98 | 0x00000758, | 98 | 0x00000758, |
99 | 0x00000778, | 99 | 0x00000778, |
100 | /* 0x0158: nve4_tpc_mmio_tail */ | ||
101 | /* 0x0158: nve6_tpc_mmio_head */ | ||
102 | 0x00000048, | ||
103 | 0x00000064, | ||
104 | 0x00000088, | ||
105 | 0x14000200, | ||
106 | 0x0400021c, | ||
107 | 0x00000230, | ||
108 | 0x000002c4, | ||
109 | 0x08000400, | ||
110 | 0x08000420, | ||
111 | 0x000004e8, | ||
112 | 0x000004f4, | ||
113 | 0x0c000604, | ||
114 | 0x54000644, | ||
115 | 0x040006ac, | ||
116 | 0x000006c8, | ||
117 | 0x1c000730, | ||
118 | 0x00000758, | ||
119 | 0x00000770, | ||
120 | 0x04000778, | ||
100 | }; | 121 | }; |
101 | 122 | ||
102 | uint32_t nve0_grgpc_code[] = { | 123 | uint32_t nve0_grgpc_code[] = { |
diff --git a/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c b/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c index 84249f8c99c6..b7324138df02 100644 --- a/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c +++ b/drivers/gpu/drm/nouveau/core/engine/graph/nve0.c | |||
@@ -513,18 +513,223 @@ nve0_graph_init_regs(struct nvc0_graph_priv *priv) | |||
513 | } | 513 | } |
514 | 514 | ||
515 | static void | 515 | static void |
516 | nve0_graph_init_unk40xx(struct nvc0_graph_priv *priv) | ||
517 | { | ||
518 | nv_wr32(priv, 0x40415c, 0x00000000); | ||
519 | nv_wr32(priv, 0x404170, 0x00000000); | ||
520 | } | ||
521 | |||
522 | static void | ||
523 | nve0_graph_init_unk44xx(struct nvc0_graph_priv *priv) | ||
524 | { | ||
525 | nv_wr32(priv, 0x404488, 0x00000000); | ||
526 | nv_wr32(priv, 0x40448c, 0x00000000); | ||
527 | } | ||
528 | |||
529 | static void | ||
530 | nve0_graph_init_unk78xx(struct nvc0_graph_priv *priv) | ||
531 | { | ||
532 | nv_wr32(priv, 0x407808, 0x00000000); | ||
533 | } | ||
534 | |||
535 | static void | ||
536 | nve0_graph_init_unk60xx(struct nvc0_graph_priv *priv) | ||
537 | { | ||
538 | nv_wr32(priv, 0x406024, 0x00000000); | ||
539 | } | ||
540 | |||
541 | static void | ||
542 | nve0_graph_init_unk64xx(struct nvc0_graph_priv *priv) | ||
543 | { | ||
544 | nv_wr32(priv, 0x4064f0, 0x00000000); | ||
545 | nv_wr32(priv, 0x4064f4, 0x00000000); | ||
546 | nv_wr32(priv, 0x4064f8, 0x00000000); | ||
547 | } | ||
548 | |||
549 | static void | ||
550 | nve0_graph_init_unk58xx(struct nvc0_graph_priv *priv) | ||
551 | { | ||
552 | nv_wr32(priv, 0x405844, 0x00ffffff); | ||
553 | nv_wr32(priv, 0x405850, 0x00000000); | ||
554 | nv_wr32(priv, 0x405900, 0x0000ff34); | ||
555 | nv_wr32(priv, 0x405908, 0x00000000); | ||
556 | nv_wr32(priv, 0x405928, 0x00000000); | ||
557 | nv_wr32(priv, 0x40592c, 0x00000000); | ||
558 | } | ||
559 | |||
560 | static void | ||
561 | nve0_graph_init_unk80xx(struct nvc0_graph_priv *priv) | ||
562 | { | ||
563 | nv_wr32(priv, 0x40803c, 0x00000000); | ||
564 | } | ||
565 | |||
566 | static void | ||
567 | nve0_graph_init_unk70xx(struct nvc0_graph_priv *priv) | ||
568 | { | ||
569 | nv_wr32(priv, 0x407010, 0x00000000); | ||
570 | } | ||
571 | |||
572 | static void | ||
573 | nve0_graph_init_unk5bxx(struct nvc0_graph_priv *priv) | ||
574 | { | ||
575 | nv_wr32(priv, 0x405b50, 0x00000000); | ||
576 | } | ||
577 | |||
578 | static void | ||
579 | nve0_graph_init_gpc(struct nvc0_graph_priv *priv) | ||
580 | { | ||
581 | nv_wr32(priv, 0x418408, 0x00000000); | ||
582 | nv_wr32(priv, 0x4184a0, 0x00000000); | ||
583 | nv_wr32(priv, 0x4184a4, 0x00000000); | ||
584 | nv_wr32(priv, 0x4184a8, 0x00000000); | ||
585 | nv_wr32(priv, 0x418604, 0x00000000); | ||
586 | nv_wr32(priv, 0x418680, 0x00000000); | ||
587 | nv_wr32(priv, 0x418714, 0x00000000); | ||
588 | nv_wr32(priv, 0x418384, 0x00000000); | ||
589 | nv_wr32(priv, 0x418814, 0x00000000); | ||
590 | nv_wr32(priv, 0x418818, 0x00000000); | ||
591 | nv_wr32(priv, 0x41881c, 0x00000000); | ||
592 | nv_wr32(priv, 0x418b04, 0x00000000); | ||
593 | nv_wr32(priv, 0x4188c8, 0x00000000); | ||
594 | nv_wr32(priv, 0x4188cc, 0x00000000); | ||
595 | nv_wr32(priv, 0x4188d0, 0x00010000); | ||
596 | nv_wr32(priv, 0x4188d4, 0x00000001); | ||
597 | nv_wr32(priv, 0x418910, 0x00010001); | ||
598 | nv_wr32(priv, 0x418914, 0x00000301); | ||
599 | nv_wr32(priv, 0x418918, 0x00800000); | ||
600 | nv_wr32(priv, 0x418980, 0x77777770); | ||
601 | nv_wr32(priv, 0x418984, 0x77777777); | ||
602 | nv_wr32(priv, 0x418988, 0x77777777); | ||
603 | nv_wr32(priv, 0x41898c, 0x77777777); | ||
604 | nv_wr32(priv, 0x418c04, 0x00000000); | ||
605 | nv_wr32(priv, 0x418c64, 0x00000000); | ||
606 | nv_wr32(priv, 0x418c68, 0x00000000); | ||
607 | nv_wr32(priv, 0x418c88, 0x00000000); | ||
608 | nv_wr32(priv, 0x418cb4, 0x00000000); | ||
609 | nv_wr32(priv, 0x418cb8, 0x00000000); | ||
610 | nv_wr32(priv, 0x418d00, 0x00000000); | ||
611 | nv_wr32(priv, 0x418d28, 0x00000000); | ||
612 | nv_wr32(priv, 0x418d2c, 0x00000000); | ||
613 | nv_wr32(priv, 0x418f00, 0x00000000); | ||
614 | nv_wr32(priv, 0x418f08, 0x00000000); | ||
615 | nv_wr32(priv, 0x418f20, 0x00000000); | ||
616 | nv_wr32(priv, 0x418f24, 0x00000000); | ||
617 | nv_wr32(priv, 0x418e00, 0x00000060); | ||
618 | nv_wr32(priv, 0x418e08, 0x00000000); | ||
619 | nv_wr32(priv, 0x418e1c, 0x00000000); | ||
620 | nv_wr32(priv, 0x418e20, 0x00000000); | ||
621 | nv_wr32(priv, 0x41900c, 0x00000000); | ||
622 | nv_wr32(priv, 0x419018, 0x00000000); | ||
623 | } | ||
624 | |||
625 | static void | ||
626 | nve0_graph_init_tpc(struct nvc0_graph_priv *priv) | ||
627 | { | ||
628 | nv_wr32(priv, 0x419d0c, 0x00000000); | ||
629 | nv_wr32(priv, 0x419d10, 0x00000014); | ||
630 | nv_wr32(priv, 0x419ab0, 0x00000000); | ||
631 | nv_wr32(priv, 0x419ac8, 0x00000000); | ||
632 | nv_wr32(priv, 0x419ab8, 0x000000e7); | ||
633 | nv_wr32(priv, 0x419abc, 0x00000000); | ||
634 | nv_wr32(priv, 0x419ac0, 0x00000000); | ||
635 | nv_wr32(priv, 0x419ab4, 0x00000000); | ||
636 | nv_wr32(priv, 0x41980c, 0x00000010); | ||
637 | nv_wr32(priv, 0x419844, 0x00000000); | ||
638 | nv_wr32(priv, 0x419850, 0x00000004); | ||
639 | nv_wr32(priv, 0x419854, 0x00000000); | ||
640 | nv_wr32(priv, 0x419858, 0x00000000); | ||
641 | nv_wr32(priv, 0x419c98, 0x00000000); | ||
642 | nv_wr32(priv, 0x419ca8, 0x00000000); | ||
643 | nv_wr32(priv, 0x419cb0, 0x01000000); | ||
644 | nv_wr32(priv, 0x419cb4, 0x00000000); | ||
645 | nv_wr32(priv, 0x419cb8, 0x00b08bea); | ||
646 | nv_wr32(priv, 0x419c84, 0x00010384); | ||
647 | nv_wr32(priv, 0x419cbc, 0x28137646); | ||
648 | nv_wr32(priv, 0x419cc0, 0x00000000); | ||
649 | nv_wr32(priv, 0x419cc4, 0x00000000); | ||
650 | nv_wr32(priv, 0x419c80, 0x00020232); | ||
651 | nv_wr32(priv, 0x419c0c, 0x00000000); | ||
652 | nv_wr32(priv, 0x419e00, 0x00000000); | ||
653 | nv_wr32(priv, 0x419ea0, 0x00000000); | ||
654 | nv_wr32(priv, 0x419ee4, 0x00000000); | ||
655 | nv_wr32(priv, 0x419ea4, 0x00000100); | ||
656 | nv_wr32(priv, 0x419ea8, 0x00000000); | ||
657 | nv_wr32(priv, 0x419eb4, 0x00000000); | ||
658 | nv_wr32(priv, 0x419eb8, 0x00000000); | ||
659 | nv_wr32(priv, 0x419ebc, 0x00000000); | ||
660 | nv_wr32(priv, 0x419ec0, 0x00000000); | ||
661 | nv_wr32(priv, 0x419edc, 0x00000000); | ||
662 | nv_wr32(priv, 0x419f00, 0x00000000); | ||
663 | nv_wr32(priv, 0x419f74, 0x00000555); | ||
664 | } | ||
665 | |||
666 | static void | ||
667 | nve0_graph_init_tpcunk(struct nvc0_graph_priv *priv) | ||
668 | { | ||
669 | nv_wr32(priv, 0x41be04, 0x00000000); | ||
670 | nv_wr32(priv, 0x41be08, 0x00000004); | ||
671 | nv_wr32(priv, 0x41be0c, 0x00000000); | ||
672 | nv_wr32(priv, 0x41be10, 0x003b8bc7); | ||
673 | nv_wr32(priv, 0x41be14, 0x00000000); | ||
674 | nv_wr32(priv, 0x41be18, 0x00000000); | ||
675 | nv_wr32(priv, 0x41bfd4, 0x00800000); | ||
676 | nv_wr32(priv, 0x41bfdc, 0x00000000); | ||
677 | nv_wr32(priv, 0x41bff8, 0x00000000); | ||
678 | nv_wr32(priv, 0x41bffc, 0x00000000); | ||
679 | nv_wr32(priv, 0x41becc, 0x00000000); | ||
680 | nv_wr32(priv, 0x41bee8, 0x00000000); | ||
681 | nv_wr32(priv, 0x41beec, 0x00000000); | ||
682 | } | ||
683 | |||
684 | static void | ||
685 | nve0_graph_init_unk88xx(struct nvc0_graph_priv *priv) | ||
686 | { | ||
687 | nv_wr32(priv, 0x40880c, 0x00000000); | ||
688 | nv_wr32(priv, 0x408850, 0x00000004); | ||
689 | nv_wr32(priv, 0x408910, 0x00000000); | ||
690 | nv_wr32(priv, 0x408914, 0x00000000); | ||
691 | nv_wr32(priv, 0x408918, 0x00000000); | ||
692 | nv_wr32(priv, 0x40891c, 0x00000000); | ||
693 | nv_wr32(priv, 0x408920, 0x00000000); | ||
694 | nv_wr32(priv, 0x408924, 0x00000000); | ||
695 | nv_wr32(priv, 0x408928, 0x00000000); | ||
696 | nv_wr32(priv, 0x40892c, 0x00000000); | ||
697 | nv_wr32(priv, 0x408930, 0x00000000); | ||
698 | nv_wr32(priv, 0x408950, 0x00000000); | ||
699 | nv_wr32(priv, 0x408954, 0x0000ffff); | ||
700 | nv_wr32(priv, 0x408958, 0x00000034); | ||
701 | nv_wr32(priv, 0x408984, 0x00000000); | ||
702 | nv_wr32(priv, 0x408988, 0x08040201); | ||
703 | nv_wr32(priv, 0x40898c, 0x80402010); | ||
704 | } | ||
705 | |||
706 | static void | ||
516 | nve0_graph_init_units(struct nvc0_graph_priv *priv) | 707 | nve0_graph_init_units(struct nvc0_graph_priv *priv) |
517 | { | 708 | { |
518 | nv_wr32(priv, 0x409ffc, 0x00000000); | 709 | nv_wr32(priv, 0x409ffc, 0x00000000); |
519 | nv_wr32(priv, 0x409c14, 0x00003e3e); | 710 | nv_wr32(priv, 0x409c14, 0x00003e3e); |
520 | nv_wr32(priv, 0x409c24, 0x000f0000); | 711 | switch (nv_device(priv)->chipset) { |
712 | case 0xe6: | ||
713 | nv_wr32(priv, 0x409c24, 0x000f0001); | ||
714 | break; | ||
715 | default: | ||
716 | nv_wr32(priv, 0x409c24, 0x000f0000); | ||
717 | break; | ||
718 | } | ||
521 | 719 | ||
522 | nv_wr32(priv, 0x404000, 0xc0000000); | 720 | nv_wr32(priv, 0x404000, 0xc0000000); |
523 | nv_wr32(priv, 0x404600, 0xc0000000); | 721 | nv_wr32(priv, 0x404600, 0xc0000000); |
524 | nv_wr32(priv, 0x408030, 0xc0000000); | 722 | nv_wr32(priv, 0x408030, 0xc0000000); |
525 | nv_wr32(priv, 0x404490, 0xc0000000); | 723 | nv_wr32(priv, 0x404490, 0xc0000000); |
526 | nv_wr32(priv, 0x406018, 0xc0000000); | 724 | nv_wr32(priv, 0x406018, 0xc0000000); |
527 | nv_wr32(priv, 0x407020, 0xc0000000); | 725 | switch (nv_device(priv)->chipset) { |
726 | case 0xe6: | ||
727 | nv_wr32(priv, 0x407020, 0x40000000); | ||
728 | break; | ||
729 | default: | ||
730 | nv_wr32(priv, 0x407020, 0xc0000000); | ||
731 | break; | ||
732 | } | ||
528 | nv_wr32(priv, 0x405840, 0xc0000000); | 733 | nv_wr32(priv, 0x405840, 0xc0000000); |
529 | nv_wr32(priv, 0x405844, 0x00ffffff); | 734 | nv_wr32(priv, 0x405844, 0x00ffffff); |
530 | 735 | ||
@@ -760,6 +965,27 @@ nve0_graph_init(struct nouveau_object *object) | |||
760 | 965 | ||
761 | nve0_graph_init_obj418880(priv); | 966 | nve0_graph_init_obj418880(priv); |
762 | nve0_graph_init_regs(priv); | 967 | nve0_graph_init_regs(priv); |
968 | |||
969 | switch (nv_device(priv)->chipset) { | ||
970 | case 0xe6: | ||
971 | nve0_graph_init_unk40xx(priv); | ||
972 | nve0_graph_init_unk44xx(priv); | ||
973 | nve0_graph_init_unk78xx(priv); | ||
974 | nve0_graph_init_unk60xx(priv); | ||
975 | nve0_graph_init_unk64xx(priv); | ||
976 | nve0_graph_init_unk58xx(priv); | ||
977 | nve0_graph_init_unk80xx(priv); | ||
978 | nve0_graph_init_unk70xx(priv); | ||
979 | nve0_graph_init_unk5bxx(priv); | ||
980 | nve0_graph_init_gpc(priv); | ||
981 | nve0_graph_init_tpc(priv); | ||
982 | nve0_graph_init_tpcunk(priv); | ||
983 | nve0_graph_init_unk88xx(priv); | ||
984 | break; | ||
985 | default: | ||
986 | break; | ||
987 | } | ||
988 | |||
763 | nve0_graph_init_gpc_0(priv); | 989 | nve0_graph_init_gpc_0(priv); |
764 | 990 | ||
765 | nv_wr32(priv, 0x400500, 0x00010001); | 991 | nv_wr32(priv, 0x400500, 0x00010001); |