summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authoreisnerd <eisnerd@localhost>2009-10-18 09:19:16 +0000
committereisnerd <eisnerd@localhost>2009-10-18 09:19:16 +0000
commit8bb5ff1b10dac99dae00e459b26e3f85b4c837a0 (patch)
tree295494aae7857b96ac49b263d049ecf5347da6c8
parentfix nls doins in headless mode (diff)
downloadjokey-8bb5ff1b10dac99dae00e459b26e3f85b4c837a0.tar.gz
jokey-8bb5ff1b10dac99dae00e459b26e3f85b4c837a0.tar.bz2
jokey-8bb5ff1b10dac99dae00e459b26e3f85b4c837a0.zip
sys-kernel/thinkpad-sources: Bump to 2.6.31, cleaning all older versions, it is a incomplete inbetween release, so please inform me if you miss something. The ~* -r1 version applies some drm-next patches, really experimental, I may get some newer patches if some one like to have them
svn path=/trunk/; revision=736
-rw-r--r--sys-kernel/thinkpad-sources/ChangeLog27
-rw-r--r--sys-kernel/thinkpad-sources/Manifest44
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.27/01-disk-protect-for-2.6.27.2.patch966
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.27/colored-printk-2.6.26.patch355
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.27/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch554
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.27/power-off-unused-ports.patch133
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.28/02-ipw2200-inject-for-2.6.27.patch86
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.28/power-off-unused-ports.patch133
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.31/02-ipw2200-inject-for-2.6.27.patch (renamed from sys-kernel/thinkpad-sources/files/2.6.27/02-ipw2200-inject-for-2.6.27.patch)0
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.31/colored-printk-2.6.30.patch (renamed from sys-kernel/thinkpad-sources/files/2.6.28/colored-printk-2.6.26.patch)102
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.31/drm-next.patch88389
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.31/linux-phc-0.3.2-2.6.31.patch (renamed from sys-kernel/thinkpad-sources/files/2.6.28/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch)31
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.31/mac80211.compat08082009.wl_frag+ack_v1.patch (renamed from sys-kernel/thinkpad-sources/files/2.6.28/01-mac80211_2.6.28-rc4-wl_frag+ack_v2.patch)8
-rw-r--r--sys-kernel/thinkpad-sources/files/2.6.31/thinkpad-acpi-0.23-20090920-fix1.patch.gzbin0 -> 731 bytes
-rw-r--r--sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.272393
-rw-r--r--sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.31 (renamed from sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.28-r1)624
-rw-r--r--sys-kernel/thinkpad-sources/thinkpad-sources-2.6.27-r2.ebuild70
-rw-r--r--sys-kernel/thinkpad-sources/thinkpad-sources-2.6.31-r1.ebuild (renamed from sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r1.ebuild)34
-rw-r--r--sys-kernel/thinkpad-sources/thinkpad-sources-2.6.31.ebuild (renamed from sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r2.ebuild)26
19 files changed, 88959 insertions, 5016 deletions
diff --git a/sys-kernel/thinkpad-sources/ChangeLog b/sys-kernel/thinkpad-sources/ChangeLog
index d97ef38..e527870 100644
--- a/sys-kernel/thinkpad-sources/ChangeLog
+++ b/sys-kernel/thinkpad-sources/ChangeLog
@@ -2,6 +2,33 @@
# Copyright 1999-2009 Gentoo Foundation; Distributed under the GPL v2
# $Header: $
+ 18 Oct 2009; Florian Manschwetus <florianmanschwetus@gmx.de>
+ -files/2.6.27/colored-printk-2.6.26.patch,
+ -files/configs/config-for-core-2.6.27, -thinkpad-sources-2.6.27-r2.ebuild,
+ -files/2.6.27, -files/2.6.28/01-mac80211_2.6.28-rc4-wl_frag+ack_v2.patch,
+ +files/2.6.31, -files/2.6.28/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch,
+ +files/2.6.31/mac80211.compat08082009.wl_frag+ack_v1.patch,
+ +files/2.6.31/linux-phc-0.3.2-2.6.31.patch,
+ +files/2.6.31/thinkpad-acpi-0.23-20090920-fix1.patch.gz,
+ -files/2.6.27/01-disk-protect-for-2.6.27.2.patch,
+ +files/2.6.31/02-ipw2200-inject-for-2.6.27.patch,
+ -files/2.6.28/02-ipw2200-inject-for-2.6.27.patch,
+ -thinkpad-sources-2.6.28-r1.ebuild, -files/2.6.28,
+ -files/configs/config-for-core-2.6.28-r1,
+ -thinkpad-sources-2.6.28-r2.ebuild,
+ -files/2.6.28/power-off-unused-ports.patch, +files/2.6.31/drm-next.patch,
+ -files/2.6.28/colored-printk-2.6.26.patch,
+ -files/2.6.27/02-ipw2200-inject-for-2.6.27.patch,
+ +files/2.6.31/colored-printk-2.6.30.patch,
+ +files/configs/config-for-core-2.6.31, +thinkpad-sources-2.6.31.ebuild,
+ -files/2.6.27/power-off-unused-ports.patch,
+ -files/2.6.27/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch,
+ +thinkpad-sources-2.6.31-r1.ebuild:
+ Bump to 2.6.31, cleaning all older versions, it is a incomplete inbetween
+ release, so please inform me if you miss something. The ~* -r1 version
+ applies some drm-next patches, really experimental, I may get some newer
+ patches if some one like to have them
+
05 Feb 2009; Florian Manschwetus <florianmanschwetus@gmx.de>
+thinkpad-sources-2.6.28-r2.ebuild:
pumb to 2.6.28-r2
diff --git a/sys-kernel/thinkpad-sources/Manifest b/sys-kernel/thinkpad-sources/Manifest
index be15142..3843219 100644
--- a/sys-kernel/thinkpad-sources/Manifest
+++ b/sys-kernel/thinkpad-sources/Manifest
@@ -1,30 +1,16 @@
-AUX 2.6.27/01-disk-protect-for-2.6.27.2.patch 32538 RMD160 fbe408c71c006dc5f344f20ef1cfa886191ea91c SHA1 e927b4ecb17b74a0a6b0809d3d8facac251f9ee1 SHA256 bc4690bc2fb40fb82765a68d47288134e0fc62770db8b058b4c8eb9ca7d63be6
-AUX 2.6.27/02-ipw2200-inject-for-2.6.27.patch 2376 RMD160 4856f02093faa941a51dafe54d34c27b6c4a21db SHA1 328c8947089c84fb3ce78fe20400ad03f51ac381 SHA256 01b4f715de58660ab779abc0e28398d348fe31344c300bdd9eaeca73c6090cb0
-AUX 2.6.27/colored-printk-2.6.26.patch 11265 RMD160 1e520168b8813754906513317f5c683dbec2b31b SHA1 d321509ccc286b29b8c0fac9ae18205705fea332 SHA256 e8afce0c43cd534a6f707dc9f8769d0ba03322efccd55e3dc3edc3375e44c4ba
-AUX 2.6.27/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch 16865 RMD160 f5795436830ec3302c2a32c14a17ab52e089c8e2 SHA1 d24375cb01431b785228fae77682e9ee09286bf4 SHA256 e1fbb0909cee3cfb7623adae6ddd1384c95c977d111db8b5afc466aeab447f67
-AUX 2.6.27/power-off-unused-ports.patch 4722 RMD160 2c5928c6a9d24e965d3f84bb2f1b157347d90d7c SHA1 77e39d8d99ac1045e3fb2db82e1c0ab2049c89d9 SHA256 9134a0e89a583d51f84bab2df3fe015fadb92a6d44655b7e3f1d3da1d21f0067
-AUX 2.6.28/01-mac80211_2.6.28-rc4-wl_frag+ack_v2.patch 1061 RMD160 071a0580487d29076083c37194617ce9bf184f51 SHA1 7e0bac3781840ea47f3cc72b29437f29d94e70c0 SHA256 6781652b6ecdd12024d6638ad206fff365c0ebedfd755b1aa65ea4d66a75978f
-AUX 2.6.28/02-ipw2200-inject-for-2.6.27.patch 2376 RMD160 4856f02093faa941a51dafe54d34c27b6c4a21db SHA1 328c8947089c84fb3ce78fe20400ad03f51ac381 SHA256 01b4f715de58660ab779abc0e28398d348fe31344c300bdd9eaeca73c6090cb0
-AUX 2.6.28/colored-printk-2.6.26.patch 11265 RMD160 1e520168b8813754906513317f5c683dbec2b31b SHA1 d321509ccc286b29b8c0fac9ae18205705fea332 SHA256 e8afce0c43cd534a6f707dc9f8769d0ba03322efccd55e3dc3edc3375e44c4ba
-AUX 2.6.28/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch 16865 RMD160 f5795436830ec3302c2a32c14a17ab52e089c8e2 SHA1 d24375cb01431b785228fae77682e9ee09286bf4 SHA256 e1fbb0909cee3cfb7623adae6ddd1384c95c977d111db8b5afc466aeab447f67
-AUX 2.6.28/power-off-unused-ports.patch 4722 RMD160 2c5928c6a9d24e965d3f84bb2f1b157347d90d7c SHA1 77e39d8d99ac1045e3fb2db82e1c0ab2049c89d9 SHA256 9134a0e89a583d51f84bab2df3fe015fadb92a6d44655b7e3f1d3da1d21f0067
-AUX configs/config-for-core-2.6.27 59869 RMD160 d319df13c5dc9d2d4c997b4af53583686c0f6ea3 SHA1 b01ce0e0529d2c3f7c9cf2674fd58175e346f6b0 SHA256 e9bf5afde95a14366cc4ee60e343569163a52fca79e6a070a1aa0fc076fd13d8
-AUX configs/config-for-core-2.6.28-r1 57980 RMD160 38a821bd0f9c441bace8be799c0657c726d5ba57 SHA1 10a3a0858ad31c1953bc7b26628c42ef4061685e SHA256 dd72447c9be91b97dfcea99ced3636cda6264ad59e7ae8a31c26592b4e4ac2ee
-DIST genpatches-2.6.27-9.base.tar.bz2 165591 RMD160 d2be1a56b8bafd7de330379f322699d2b05d6e7f SHA1 7303a1ff17427fc70b8e1e8ab41cdc8d74b2f296 SHA256 426891253109b520da1fe308e8544bdefd14255402fd72d3646ced48b64d2858
-DIST genpatches-2.6.27-9.extras.tar.bz2 41456 RMD160 bd6e5fc57d4895c23401f22892f630097174aead SHA1 35a86799ee1d4f55e347b2f01f64e4abbda8a7ae SHA256 384ecb94815261a960dd57b942206d73e2a7ad0e4d883400860a47f01573bd41
-DIST genpatches-2.6.28-1.base.tar.bz2 7410 RMD160 70f0b01b5e5cae6f01cfa202219b1e5503c6fea2 SHA1 de553ff85be1619f5679c9a6c3eaf867380ead3d SHA256 fedfe7b685786733f259bbed106bf37c85e8561cb4b5a28e3c3902bf9e8bc361
-DIST genpatches-2.6.28-1.extras.tar.bz2 41314 RMD160 58a67311e49d68a62256143af166d362e501f43d SHA1 8219f7c373341bf07651960490a8ec636254ed64 SHA256 a19f6757e0a70c076012f51bfc366efe95f61d5f402d407cac95c13b919397dd
-DIST genpatches-2.6.28-2.base.tar.bz2 61118 RMD160 892e3dceb49fa7df420222df2d5e5a3bce949fde SHA1 11d6835dbe9d77885568294237e2e27e0ef84b30 SHA256 4f0770074806d66b1636e352a9ffb4fed3ab69908a5919cfcf2baf08ee726245
-DIST genpatches-2.6.28-2.extras.tar.bz2 41314 RMD160 58a67311e49d68a62256143af166d362e501f43d SHA1 8219f7c373341bf07651960490a8ec636254ed64 SHA256 a19f6757e0a70c076012f51bfc366efe95f61d5f402d407cac95c13b919397dd
-DIST linux-2.6.27.tar.bz2 50355835 RMD160 5be4595ad824a4af67c1ec0c692838ad0c31f0c0 SHA1 8425ec3be2652f9d511911ff4fcf99039d4574be SHA256 0e99bf9e83f4d1ae0c656741a84dfddfa9c4d2469cf35475f5939d02dc3e4393
-DIST linux-2.6.28.tar.bz2 52665364 RMD160 47e8925220e29e239f9478228fc53543c1f7b300 SHA1 4f40f8bf3fd110b0cc6e1fea5f539c98f9959e94 SHA256 ae0d97c55efe7fce01273c97f8152af0deff5541e3bbf5b9ad98689112b54380
-DIST thinkpad-acpi-0.21-20081111_v2.6.27.5.patch.gz 19706 RMD160 fcc9678ae6c3d4c5493d2b1380ba408272711689 SHA1 1ad13938e7f3bd5e0b28664b3780b2b964079ea6 SHA256 d92c26efe3ecd578eab3a2547dfe359829dca7cf94bf196e563b56638a46527e
-DIST thinkpad-acpi-0.21-20081111_v2.6.28-rc7.patch.gz 15025 RMD160 9a6fe67f8b2520f50f59e496054c14a3ce8cd32f SHA1 353a520941c5c4ce8241f0898f0720e58715cf89 SHA256 4b0bd280a5958be637ff418279623ac56c71f950294777f8b04ce1c59cb1f3a1
-DIST thinkpad-acpi-0.22_v2.6.28.gz 91175 RMD160 af5dcb84a071ae8e6a138c802ecf180d5ff88ede SHA1 2ed12eec35c874a624ef62976d53d697046d5ebd SHA256 9208b3f17d69a1f9d32084b7748137c24b4f97852c6edb3a1da4e6ba65f5ef46
-DIST tuxonice-3.0-rc8-for-2.6.27.patch.bz2 111585 RMD160 7c595a96917ca3868068b56a2d9024cf07403a73 SHA1 7606aba9bab9878763e34dab3e1a0f01f0663bb5 SHA256 9724f4c851ca4276054236c4df32c7486a7a3040391285092737241026c1e2f9
-DIST tuxonice-3.0-rc8-for-2.6.28.patch.bz2 111532 RMD160 808d33d1484ee30f75606831c2df38e5e70e40ba SHA1 cb8564cbc9579361daa58da1c2abbcd814dfe737 SHA256 c7d72a964926e063ca9ff79adee7be90ab49c131c91ebf40ac9fc7c7cd852657
-EBUILD thinkpad-sources-2.6.27-r2.ebuild 2764 RMD160 f6de699f826f9aef3c21743ee1f0e8edb877334e SHA1 2d41c152d66ff8ada20c7983e151442119420e0a SHA256 893b3f085fbaf198bbfe8af2ea66c4f8dfd8c3d1b815c8de172a6b3711310f21
-EBUILD thinkpad-sources-2.6.28-r1.ebuild 2775 RMD160 49fef15362cd11abcc9a430507b6bcb663d7810d SHA1 c3f17582050d0f2836bd3ce3b7d34aef64ee5c60 SHA256 2d10cd69b484001db36f33c03272a84e2cc757c5d4f89ffd07c81f0a725bcd22
-EBUILD thinkpad-sources-2.6.28-r2.ebuild 2759 RMD160 c904dfcc600287c3700bfddb7101cc363f6d48d4 SHA1 618b20d45d8533d3a7b57068ed749b37a5ca8cd0 SHA256 d7329515d6e8a0d45c722ab245f5a5ad3ec21b7153ca80f1e53825ff6d3afd51
-MISC ChangeLog 1481 RMD160 7348e30065a1383af4cd3479cb6b5289e1e1c27e SHA1 f14fe6fe0cef252160b5b93612ea485b85d04f98 SHA256 136ff6bd719547ce65c7e5a06c5237a4ac7cf5f871c1685794480d467bebeaa4
+AUX 2.6.31/02-ipw2200-inject-for-2.6.27.patch 2376 RMD160 4856f02093faa941a51dafe54d34c27b6c4a21db SHA1 328c8947089c84fb3ce78fe20400ad03f51ac381 SHA256 01b4f715de58660ab779abc0e28398d348fe31344c300bdd9eaeca73c6090cb0
+AUX 2.6.31/colored-printk-2.6.30.patch 11432 RMD160 7cc66e37fc129ea7b7f588273a5409d43e9b5b60 SHA1 dbf0570a1d8ccc1fab3cd7976e5767444b3ddf7d SHA256 015f416ce7b7d643e4f72ad46a8483fb051352b6e60f8906ef3a30bb24aa55a5
+AUX 2.6.31/drm-next.patch 2775965 RMD160 0d92465453e90e7b8f73a0f1bef3d0b52c4f2c30 SHA1 b891c31557d25e52073325a99f985e1291e475cb SHA256 2aa08c589d99dc0255b1212bd3f7f23303824e51762266b40fc5fe3a7dbda5a9
+AUX 2.6.31/linux-phc-0.3.2-2.6.31.patch 16746 RMD160 05f0c6935543070c46747f15f6c814ea0e1d530d SHA1 d60ac35a4e39e1062bffc81eb556ca99673c5c9b SHA256 3ff2b9bfff8e431d3579a4deccfd95694d21e8afa35931bb5155587b0e9c0320
+AUX 2.6.31/mac80211.compat08082009.wl_frag+ack_v1.patch 1049 RMD160 e864ee2e0c70ce344000baa8ee5fca3b23c3305a SHA1 85f7a1b141549b774f5631fba259bc414aeeffb8 SHA256 e04ed9997e1578cc1becd4ef9d9f2f6f606590aa91a56e42835963913e1b0f52
+AUX 2.6.31/thinkpad-acpi-0.23-20090920-fix1.patch.gz 731 RMD160 a77fb839eaea078c8623066ad09ff20cc54b954a SHA1 0548feff11d7043de347ae3872225d905ae30def SHA256 9ccaf71e20b49924014d2e030b8fe29bbf2ffe7459601f4bad031331ed5e1851
+AUX configs/config-for-core-2.6.31 64902 RMD160 5bff5c63ff7600db2a45c850c39abc857ccb5176 SHA1 180f497a661ed0bfac14fac0f38063b1f81a24f1 SHA256 8d28e63780e3a60f66ccb7a697ad7b23381eed85aaf0e59eb95cd19f1e5b11aa
+DIST current-tuxonice-for-2.6.31.patch-20090911-v1.bz2 114786 RMD160 aa41c159ebe826fc9312b5a21f1ed8cc74e88503 SHA1 f711554205de079a429c6cee620ee818399b246e SHA256 1b55326ee385bc4486302fdee5b2f0436b8183455ad26915f78d60518d466578
+DIST genpatches-2.6.31-2.base.tar.bz2 23763 RMD160 6cade8251df85907c1f4f7d02b5d3272932dd0a3 SHA1 b2fbb60bafaa7cf0bc9d690f5a4194f76af18320 SHA256 824e031f36cfae7c69d48bb6f0e4f99e8c2475beb051da48a6546d89513c66f5
+DIST genpatches-2.6.31-2.extras.tar.bz2 24978 RMD160 3d7efe69b70580343927b031460b225b2987791a SHA1 ad6d1b383ae3c9073c45dab6ce355695bdbf0e83 SHA256 ad111e0117f15d54a514add96a08bb15db6726fb19085e27a9d270e36e458c1d
+DIST linux-2.6.31.tar.bz2 61494822 RMD160 c0d88e63740abf0d4f9d82557260a31643f5a01b SHA1 c6e0e6b473ba2b80d164e37cfabf294e783c03d9 SHA256 0acd83f7b85db7ee18c2b0b7505e1ba6fd722c36f49a8870a831c851660e3512
+DIST thinkpad-acpi-0.23-20090920_v2.6.31.patch.gz 15913 RMD160 737d633b36a33a52b71d0380dfb636ece5223454 SHA1 305e5675379685dd738541d79d3a677b14412ba5 SHA256 7288c5708f2a87e8d9711c3332d5958a5b074adf7acbcd0778897aa15b244364
+EBUILD thinkpad-sources-2.6.31-r1.ebuild 2827 RMD160 877e3a92cc781b32d641928d6d8b61e5386e8c6c SHA1 fe7e832f2d092606e2c5c16a86935f66048c9783 SHA256 dca41105b0c1e2010ce2e6c37f5c144b8481ed6f733aff375ee00f3c70543bf4
+EBUILD thinkpad-sources-2.6.31.ebuild 2777 RMD160 01daee397a75c2cd574de7d654d1b049864d86c6 SHA1 a4f4ff243df7429c8359a716b8d35dc9688fa7c9 SHA256 8f53c3578c08bfbaf63d5b218e62d62cdd95beb6d3efcce79399a91f2e3408a9
+MISC ChangeLog 2978 RMD160 1d4107081e039c972c158ca2c0953bb578eef35f SHA1 b65d5072ee152cbc15f41cb5d2659cc2cf7296dd SHA256 185ca0ff22b19b0f5a4a82682884de6bfdd0a8ffd942c6ced5956916560fb8bf
MISC metadata.xml 284 RMD160 5062b08f804b7eaf9e1765c0d38b7fc95bc467e4 SHA1 687ba9103e597aad8a7231ff9a470d841f7121df SHA256 6ca83c8927bd3516baac49bc9ea82ddbeeddbe38a5a98b637d6eb1f1d436c84a
diff --git a/sys-kernel/thinkpad-sources/files/2.6.27/01-disk-protect-for-2.6.27.2.patch b/sys-kernel/thinkpad-sources/files/2.6.27/01-disk-protect-for-2.6.27.2.patch
deleted file mode 100644
index 2be4a67..0000000
--- a/sys-kernel/thinkpad-sources/files/2.6.27/01-disk-protect-for-2.6.27.2.patch
+++ /dev/null
@@ -1,966 +0,0 @@
----
-
- Documentation/laptops/disk-shock-protection.txt | 149 +++++++++++++++++++++++
- drivers/ata/ahci.c | 1
- drivers/ata/libata-core.c | 1
- drivers/ata/libata-eh.c | 126 +++++++++++++++++++
- drivers/ata/libata-scsi.c | 109 +++++++++++++++++
- drivers/ide/Makefile | 2
- drivers/ide/ide-io.c | 27 ++++
- drivers/ide/ide-iops.c | 28 ++++
- drivers/ide/ide-park.c | 120 +++++++++++++++++++
- drivers/ide/ide-probe.c | 5 +
- drivers/ide/ide-taskfile.c | 34 +++++
- drivers/ide/ide.c | 1
- include/linux/ata.h | 9 +
- include/linux/ide.h | 12 ++
- include/linux/libata.h | 13 ++
- 15 files changed, 631 insertions(+), 6 deletions(-)
- create mode 100644 Documentation/laptops/disk-shock-protection.txt
- create mode 100644 drivers/ide/ide-park.c
-
-diff --git a/Documentation/laptops/disk-shock-protection.txt b/Documentation/laptops/disk-shock-protection.txt
-new file mode 100644
-index 0000000..0e6ba26
---- /dev/null
-+++ b/Documentation/laptops/disk-shock-protection.txt
-@@ -0,0 +1,149 @@
-+Hard disk shock protection
-+==========================
-+
-+Author: Elias Oltmanns <eo@nebensachen.de>
-+Last modified: 2008-10-03
-+
-+
-+0. Contents
-+-----------
-+
-+1. Intro
-+2. The interface
-+3. References
-+4. CREDITS
-+
-+
-+1. Intro
-+--------
-+
-+ATA/ATAPI-7 specifies the IDLE IMMEDIATE command with unload feature.
-+Issuing this command should cause the drive to switch to idle mode and
-+unload disk heads. This feature is being used in modern laptops in
-+conjunction with accelerometers and appropriate software to implement
-+a shock protection facility. The idea is to stop all I/O operations on
-+the internal hard drive and park its heads on the ramp when critical
-+situations are anticipated. The desire to have such a feature
-+available on GNU/Linux systems has been the original motivation to
-+implement a generic disk head parking interface in the Linux kernel.
-+Please note, however, that other components have to be set up on your
-+system in order to get disk shock protection working (see
-+section 3. References below for pointers to more information about
-+that).
-+
-+
-+2. The interface
-+----------------
-+
-+For each ATA device, the kernel exports the file
-+block/*/device/unload_heads in sysfs (here assumed to be mounted under
-+/sys). Access to /sys/block/*/device/unload_heads is denied with
-+-EOPNOTSUPP if the device does not support the unload feature.
-+Otherwise, writing an integer value to this file will take the heads
-+of the respective drive off the platter and block all I/O operations
-+for the specified number of milliseconds. When the timeout expires and
-+no further disk head park request has been issued in the meantime,
-+normal operation will be resumed. The maximal value accepted for a
-+timeout is 30000 milliseconds. Exceeding this limit will return
-+-EOVERFLOW, but heads will be parked anyway and the timeout will be
-+set to 30 seconds. However, you can always change a timeout to any
-+value between 0 and 30000 by issuing a subsequent head park request
-+before the timeout of the previous one has expired. In particular, the
-+total timeout can exceed 30 seconds and, more importantly, you can
-+cancel a previously set timeout and resume normal operation
-+immediately by specifying a timeout of 0. Values below -2 are rejected
-+with -EINVAL (see below for the special meaning of -1 and -2). If the
-+timeout specified for a recent head park request has not yet expired,
-+reading from /sys/block/*/device/unload_heads will report the number
-+of milliseconds remaining until normal operation will be resumed;
-+otherwise, reading the unload_heads attribute will return 0.
-+
-+For example, do the following in order to park the heads of drive
-+/dev/sda and stop all I/O operations for five seconds:
-+
-+# echo 5000 > /sys/block/sda/device/unload_heads
-+
-+A simple
-+
-+# cat /sys/block/sda/device/unload_heads
-+
-+will show you how many milliseconds are left before normal operation
-+will be resumed.
-+
-+A word of caution: The fact that the interface operates on a basis of
-+milliseconds may raise expectations that cannot be satisfied in
-+reality. In fact, the ATA specs clearly state that the time for an
-+unload operation to complete is vendor specific. The hint in ATA-7
-+that this will typically be within 500 milliseconds apparently has
-+been dropped in ATA-8.
-+
-+There is a technical detail of this implementation that may cause some
-+confusion and should be discussed here. When a head park request has
-+been issued to a device successfully, all I/O operations on the
-+controller port this device is attached to will be deferred. That is
-+to say, any other device that may be connected to the same port will
-+be affected too. The only exception is that a subsequent head unload
-+request to that other device will be executed immediately. Further
-+operations on that port will be deferred until the timeout specified
-+for either device on the port has expired. As far as PATA (old style
-+IDE) configurations are concerned, there can only be two devices
-+attached to any single port. In SATA world we have port multipliers
-+which means that a user-issued head parking request to one device may
-+actually result in stopping I/O to a whole bunch of devices. However,
-+since this feature is supposed to be used on laptops and does not seem
-+to be very useful in any other environment, there will be mostly one
-+device per port. Even if the CD/DVD writer happens to be connected to
-+the same port as the hard drive, it generally *should* recover just
-+fine from the occasional buffer under-run incurred by a head park
-+request to the HD. Actually, when you are using an ide driver rather
-+than its libata counterpart (i.e. your disk is called /dev/hda
-+instead of /dev/sda), then parking the heads of one drive (drive X)
-+will generally not affect the mode of operation of another drive
-+(drive Y) on the same port as described above. It is only when a port
-+reset is required to recover from an exception on drive Y that further
-+I/O operations on that drive (and the reset itself) will be delayed
-+until drive X is no longer in the parked state.
-+
-+Finally, there are some hard drives that only comply with an earlier
-+version of the ATA standard than ATA-7, but do support the unload
-+feature nonetheless. Unfortunately, there is no safe way Linux can
-+detect these devices, so you won't be able to write to the
-+unload_heads attribute. If you know that your device really does
-+support the unload feature (for instance, because the vendor of your
-+laptop or the hard drive itself told you so), then you can tell the
-+kernel to enable the usage of this feature for that drive by writing
-+the special value -1 to the unload_heads attribute:
-+
-+# echo -1 > /sys/block/sda/device/unload_heads
-+
-+will enable the feature for /dev/sda, and giving -2 instead of -1 will
-+disable it again.
-+
-+
-+3. References
-+-------------
-+
-+There are several laptops from different vendors featuring shock
-+protection capabilities. As manufacturers have refused to support open
-+source development of the required software components so far, Linux
-+support for shock protection varies considerably between different
-+hardware implementations. Ideally, this section should contain a list
-+of pointers at different projects aiming at an implementation of shock
-+protection on different systems. Unfortunately, I only know of a
-+single project which, although still considered experimental, is fit
-+for use. Please feel free to add projects that have been the victims
-+of my ignorance.
-+
-+- http://www.thinkwiki.org/wiki/HDAPS
-+ See this page for information about Linux support of the hard disk
-+ active protection system as implemented in IBM/Lenovo Thinkpads.
-+
-+
-+4. CREDITS
-+----------
-+
-+This implementation of disk head parking has been inspired by a patch
-+originally published by Jon Escombe <lists@dresco.co.uk>. My efforts
-+to develop an implementation of this feature that is fit to be merged
-+into mainline have been aided by various kernel developers, in
-+particular by Tejun Heo and Bartlomiej Zolnierkiewicz.
-diff --git a/drivers/ata/ahci.c b/drivers/ata/ahci.c
-index 2e1a7cb..fd813fa 100644
---- a/drivers/ata/ahci.c
-+++ b/drivers/ata/ahci.c
-@@ -316,6 +316,7 @@ static struct device_attribute *ahci_shost_attrs[] = {
-
- static struct device_attribute *ahci_sdev_attrs[] = {
- &dev_attr_sw_activity,
-+ &dev_attr_unload_heads,
- NULL
- };
-
-diff --git a/drivers/ata/libata-core.c b/drivers/ata/libata-core.c
-index 79e3a8e..b8102d7 100644
---- a/drivers/ata/libata-core.c
-+++ b/drivers/ata/libata-core.c
-@@ -5264,6 +5264,7 @@ struct ata_port *ata_port_alloc(struct ata_host *host)
- INIT_WORK(&ap->scsi_rescan_task, ata_scsi_dev_rescan);
- INIT_LIST_HEAD(&ap->eh_done_q);
- init_waitqueue_head(&ap->eh_wait_q);
-+ init_completion(&ap->park_req_pending);
- init_timer_deferrable(&ap->fastdrain_timer);
- ap->fastdrain_timer.function = ata_eh_fastdrain_timerfn;
- ap->fastdrain_timer.data = (unsigned long)ap;
-diff --git a/drivers/ata/libata-eh.c b/drivers/ata/libata-eh.c
-index c1db2f2..2efe3ae 100644
---- a/drivers/ata/libata-eh.c
-+++ b/drivers/ata/libata-eh.c
-@@ -2446,6 +2446,80 @@ int ata_eh_reset(struct ata_link *link, int classify,
- goto retry;
- }
-
-+static inline void ata_eh_pull_park_action(struct ata_port *ap)
-+{
-+ struct ata_link *link;
-+ struct ata_device *dev;
-+ unsigned long flags;
-+
-+ /*
-+ * This function can be thought of as an extended version of
-+ * ata_eh_about_to_do() specially crafted to accommodate the
-+ * requirements of ATA_EH_PARK handling. Since the EH thread
-+ * does not leave the do {} while () loop in ata_eh_recover as
-+ * long as the timeout for a park request to *one* device on
-+ * the port has not expired, and since we still want to pick
-+ * up park requests to other devices on the same port or
-+ * timeout updates for the same device, we have to pull
-+ * ATA_EH_PARK actions from eh_info into eh_context.i
-+ * ourselves at the beginning of each pass over the loop.
-+ *
-+ * Additionally, all write accesses to &ap->park_req_pending
-+ * through INIT_COMPLETION() (see below) or complete_all()
-+ * (see ata_scsi_park_store()) are protected by the host lock.
-+ * As a result we have that park_req_pending.done is zero on
-+ * exit from this function, i.e. when ATA_EH_PARK actions for
-+ * *all* devices on port ap have been pulled into the
-+ * respective eh_context structs. If, and only if,
-+ * park_req_pending.done is non-zero by the time we reach
-+ * wait_for_completion_timeout(), another ATA_EH_PARK action
-+ * has been scheduled for at least one of the devices on port
-+ * ap and we have to cycle over the do {} while () loop in
-+ * ata_eh_recover() again.
-+ */
-+
-+ spin_lock_irqsave(ap->lock, flags);
-+ INIT_COMPLETION(ap->park_req_pending);
-+ ata_port_for_each_link(link, ap) {
-+ ata_link_for_each_dev(dev, link) {
-+ struct ata_eh_info *ehi = &link->eh_info;
-+
-+ link->eh_context.i.dev_action[dev->devno] |=
-+ ehi->dev_action[dev->devno] & ATA_EH_PARK;
-+ ata_eh_clear_action(link, dev, ehi, ATA_EH_PARK);
-+ }
-+ }
-+ spin_unlock_irqrestore(ap->lock, flags);
-+}
-+
-+static void ata_eh_park_issue_cmd(struct ata_device *dev, int park)
-+{
-+ struct ata_eh_context *ehc = &dev->link->eh_context;
-+ struct ata_taskfile tf;
-+ unsigned int err_mask;
-+
-+ ata_tf_init(dev, &tf);
-+ if (park) {
-+ ehc->unloaded_mask |= 1 << dev->devno;
-+ tf.command = ATA_CMD_IDLEIMMEDIATE;
-+ tf.feature = 0x44;
-+ tf.lbal = 0x4c;
-+ tf.lbam = 0x4e;
-+ tf.lbah = 0x55;
-+ } else {
-+ ehc->unloaded_mask &= ~(1 << dev->devno);
-+ tf.command = ATA_CMD_CHK_POWER;
-+ }
-+
-+ tf.flags |= ATA_TFLAG_DEVICE | ATA_TFLAG_ISADDR;
-+ tf.protocol |= ATA_PROT_NODATA;
-+ err_mask = ata_exec_internal(dev, &tf, NULL, DMA_NONE, NULL, 0, 0);
-+ if (park && (err_mask || tf.lbal != 0xc4)) {
-+ ata_dev_printk(dev, KERN_ERR, "head unload failed!\n");
-+ ehc->unloaded_mask &= ~(1 << dev->devno);
-+ }
-+}
-+
- static int ata_eh_revalidate_and_attach(struct ata_link *link,
- struct ata_device **r_failed_dev)
- {
-@@ -2755,7 +2829,7 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
- struct ata_device *dev;
- int nr_failed_devs;
- int rc;
-- unsigned long flags;
-+ unsigned long flags, deadline;
-
- DPRINTK("ENTER\n");
-
-@@ -2829,6 +2903,56 @@ int ata_eh_recover(struct ata_port *ap, ata_prereset_fn_t prereset,
- }
- }
-
-+ do {
-+ unsigned long now;
-+
-+ /*
-+ * clears ATA_EH_PARK in eh_info and resets
-+ * ap->park_req_pending
-+ */
-+ ata_eh_pull_park_action(ap);
-+
-+ deadline = jiffies;
-+ ata_port_for_each_link(link, ap) {
-+ ata_link_for_each_dev(dev, link) {
-+ struct ata_eh_context *ehc = &link->eh_context;
-+ unsigned long tmp;
-+
-+ if (dev->class != ATA_DEV_ATA)
-+ continue;
-+ if (!(ehc->i.dev_action[dev->devno] &
-+ ATA_EH_PARK))
-+ continue;
-+ tmp = dev->unpark_deadline;
-+ if (time_before(deadline, tmp))
-+ deadline = tmp;
-+ else if (time_before_eq(tmp, jiffies))
-+ continue;
-+ if (ehc->unloaded_mask & (1 << dev->devno))
-+ continue;
-+
-+ ata_eh_park_issue_cmd(dev, 1);
-+ }
-+ }
-+
-+ now = jiffies;
-+ if (time_before_eq(deadline, now))
-+ break;
-+
-+ deadline = wait_for_completion_timeout(&ap->park_req_pending,
-+ deadline - now);
-+ } while (deadline);
-+ ata_port_for_each_link(link, ap) {
-+ ata_link_for_each_dev(dev, link) {
-+ if (!(link->eh_context.unloaded_mask &
-+ (1 << dev->devno)))
-+ continue;
-+
-+ ata_eh_park_issue_cmd(dev, 0);
-+ ata_eh_done(link, dev, ATA_EH_PARK);
-+ }
-+ }
-+
- /* the rest */
- ata_port_for_each_link(link, ap) {
- struct ata_eh_context *ehc = &link->eh_context;
-diff --git a/drivers/ata/libata-scsi.c b/drivers/ata/libata-scsi.c
-index b9d3ba4..e1f916f 100644
---- a/drivers/ata/libata-scsi.c
-+++ b/drivers/ata/libata-scsi.c
-@@ -183,6 +183,106 @@ DEVICE_ATTR(link_power_management_policy, S_IRUGO | S_IWUSR,
- ata_scsi_lpm_show, ata_scsi_lpm_put);
- EXPORT_SYMBOL_GPL(dev_attr_link_power_management_policy);
-
-+static ssize_t ata_scsi_park_show(struct device *device,
-+ struct device_attribute *attr, char *buf)
-+{
-+ struct scsi_device *sdev = to_scsi_device(device);
-+ struct ata_port *ap;
-+ struct ata_link *link;
-+ struct ata_device *dev;
-+ unsigned long flags, now;
-+ unsigned int uninitialized_var(msecs);
-+ int rc = 0;
-+
-+ ap = ata_shost_to_port(sdev->host);
-+
-+ spin_lock_irqsave(ap->lock, flags);
-+ dev = ata_scsi_find_dev(ap, sdev);
-+ if (!dev) {
-+ rc = -ENODEV;
-+ goto unlock;
-+ }
-+ if (dev->flags & ATA_DFLAG_NO_UNLOAD) {
-+ rc = -EOPNOTSUPP;
-+ goto unlock;
-+ }
-+
-+ link = dev->link;
-+ now = jiffies;
-+ if (ap->pflags & ATA_PFLAG_EH_IN_PROGRESS &&
-+ link->eh_context.unloaded_mask & (1 << dev->devno) &&
-+ time_after(dev->unpark_deadline, now))
-+ msecs = jiffies_to_msecs(dev->unpark_deadline - now);
-+ else
-+ msecs = 0;
-+
-+unlock:
-+ spin_unlock_irq(ap->lock);
-+
-+ return rc ? rc : snprintf(buf, 20, "%u\n", msecs);
-+}
-+
-+static ssize_t ata_scsi_park_store(struct device *device,
-+ struct device_attribute *attr,
-+ const char *buf, size_t len)
-+{
-+ struct scsi_device *sdev = to_scsi_device(device);
-+ struct ata_port *ap;
-+ struct ata_device *dev;
-+ long int input;
-+ unsigned long flags;
-+ int rc;
-+
-+ rc = strict_strtol(buf, 10, &input);
-+ if (rc || input < -2)
-+ return -EINVAL;
-+ if (input > ATA_TMOUT_MAX_PARK) {
-+ rc = -EOVERFLOW;
-+ input = ATA_TMOUT_MAX_PARK;
-+ }
-+
-+ ap = ata_shost_to_port(sdev->host);
-+
-+ spin_lock_irqsave(ap->lock, flags);
-+ dev = ata_scsi_find_dev(ap, sdev);
-+ if (unlikely(!dev)) {
-+ rc = -ENODEV;
-+ goto unlock;
-+ }
-+ if (dev->class != ATA_DEV_ATA) {
-+ rc = -EOPNOTSUPP;
-+ goto unlock;
-+ }
-+
-+ if (input >= 0) {
-+ if (dev->flags & ATA_DFLAG_NO_UNLOAD) {
-+ rc = -EOPNOTSUPP;
-+ goto unlock;
-+ }
-+
-+ dev->unpark_deadline = ata_deadline(jiffies, input);
-+ dev->link->eh_info.dev_action[dev->devno] |= ATA_EH_PARK;
-+ ata_port_schedule_eh(ap);
-+ complete(&ap->park_req_pending);
-+ } else {
-+ switch (input) {
-+ case -1:
-+ dev->flags &= ~ATA_DFLAG_NO_UNLOAD;
-+ break;
-+ case -2:
-+ dev->flags |= ATA_DFLAG_NO_UNLOAD;
-+ break;
-+ }
-+ }
-+unlock:
-+ spin_unlock_irqrestore(ap->lock, flags);
-+
-+ return rc ? rc : len;
-+}
-+DEVICE_ATTR(unload_heads, S_IRUGO | S_IWUSR,
-+ ata_scsi_park_show, ata_scsi_park_store);
-+EXPORT_SYMBOL_GPL(dev_attr_unload_heads);
-+
- static void ata_scsi_set_sense(struct scsi_cmnd *cmd, u8 sk, u8 asc, u8 ascq)
- {
- cmd->result = (DRIVER_SENSE << 24) | SAM_STAT_CHECK_CONDITION;
-@@ -269,6 +369,12 @@ DEVICE_ATTR(sw_activity, S_IWUGO | S_IRUGO, ata_scsi_activity_show,
- ata_scsi_activity_store);
- EXPORT_SYMBOL_GPL(dev_attr_sw_activity);
-
-+struct device_attribute *ata_common_sdev_attrs[] = {
-+ &dev_attr_unload_heads,
-+ NULL
-+};
-+EXPORT_SYMBOL_GPL(ata_common_sdev_attrs);
-+
- static void ata_scsi_invalid_field(struct scsi_cmnd *cmd,
- void (*done)(struct scsi_cmnd *))
- {
-@@ -954,6 +1060,9 @@ static int atapi_drain_needed(struct request *rq)
- static int ata_scsi_dev_config(struct scsi_device *sdev,
- struct ata_device *dev)
- {
-+ if (!ata_id_has_unload(dev->id))
-+ dev->flags |= ATA_DFLAG_NO_UNLOAD;
-+
- /* configure max sectors */
- blk_queue_max_sectors(sdev->request_queue, dev->max_sectors);
-
-diff --git a/drivers/ide/Makefile b/drivers/ide/Makefile
-index 64e0ecd..564bf9d 100644
---- a/drivers/ide/Makefile
-+++ b/drivers/ide/Makefile
-@@ -5,7 +5,7 @@
- EXTRA_CFLAGS += -Idrivers/ide
-
- ide-core-y += ide.o ide-io.o ide-iops.o ide-lib.o ide-probe.o ide-taskfile.o \
-- ide-pio-blacklist.o
-+ ide-park.o ide-pio-blacklist.o
-
- # core IDE code
- ide-core-$(CONFIG_IDE_TIMINGS) += ide-timings.o
-diff --git a/drivers/ide/ide-io.c b/drivers/ide/ide-io.c
-index a896a28..c83e9f0 100644
---- a/drivers/ide/ide-io.c
-+++ b/drivers/ide/ide-io.c
-@@ -718,7 +718,31 @@ static ide_startstop_t execute_drive_cmd (ide_drive_t *drive,
-
- static ide_startstop_t ide_special_rq(ide_drive_t *drive, struct request *rq)
- {
-- switch (rq->cmd[0]) {
-+ u8 cmd = rq->cmd[0];
-+
-+ if (cmd == REQ_PARK_HEADS || cmd == REQ_UNPARK_HEADS) {
-+ ide_task_t task;
-+ struct ide_taskfile *tf = &task.tf;
-+
-+ memset(&task, 0, sizeof(task));
-+ if (cmd == REQ_PARK_HEADS) {
-+ drive->sleep = *(unsigned long *)rq->special;
-+ drive->sleeping = 1;
-+ tf->command = WIN_IDLEIMMEDIATE;
-+ tf->feature = 0x44;
-+ tf->lbal = 0x4c;
-+ tf->lbam = 0x4e;
-+ tf->lbah = 0x55;
-+ } else /* cmd == REQ_UNPARK_HEADS */
-+ tf->command = WIN_CHECKPOWERMODE1;
-+
-+ task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE |
-+ IDE_TFLAG_CUSTOM_HANDLER;
-+ drive->hwif->data_phase = task.data_phase = TASKFILE_NO_DATA;
-+ return do_rw_taskfile(drive, &task);
-+ }
-+
-+ switch (cmd) {
- case REQ_DRIVE_RESET:
- return ide_do_reset(drive);
- default:
-@@ -1047,6 +1071,7 @@ static void ide_do_request (ide_hwgroup_t *hwgroup, int masked_irq)
- hwgroup->hwif = hwif;
- hwgroup->drive = drive;
- drive->sleeping = 0;
-+ drive->parked = 0;
- drive->service_start = jiffies;
-
- if (blk_queue_plugged(drive->queue)) {
-diff --git a/drivers/ide/ide-iops.c b/drivers/ide/ide-iops.c
-index 2cbadff..446ec28 100644
---- a/drivers/ide/ide-iops.c
-+++ b/drivers/ide/ide-iops.c
-@@ -1108,6 +1108,7 @@ static void ide_disk_pre_reset(ide_drive_t *drive)
- drive->special.b.set_geometry = legacy;
- drive->special.b.recalibrate = legacy;
- drive->mult_count = 0;
-+ drive->parked = 0;
- if (!drive->keep_settings && !drive->using_dma)
- drive->mult_req = 0;
- if (drive->mult_req != drive->mult_count)
-@@ -1164,12 +1165,13 @@ static void pre_reset(ide_drive_t *drive)
- static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
- {
- unsigned int unit;
-- unsigned long flags;
-+ unsigned long flags, timeout;
- ide_hwif_t *hwif;
- ide_hwgroup_t *hwgroup;
- struct ide_io_ports *io_ports;
- const struct ide_tp_ops *tp_ops;
- const struct ide_port_ops *port_ops;
-+ DEFINE_WAIT(wait);
-
- spin_lock_irqsave(&ide_lock, flags);
- hwif = HWIF(drive);
-@@ -1196,6 +1198,30 @@ static ide_startstop_t do_reset1 (ide_drive_t *drive, int do_not_try_atapi)
- return ide_started;
- }
-
-+ /* We must not disturb devices in the parked state. */
-+ do {
-+ unsigned long now;
-+
-+ prepare_to_wait(&ide_park_wq, &wait, TASK_UNINTERRUPTIBLE);
-+ timeout = jiffies;
-+ for (unit = 0; unit < MAX_DRIVES; unit++) {
-+ ide_drive_t *tdrive = &hwif->drives[unit];
-+
-+ if (tdrive->present && tdrive->parked &&
-+ time_after(tdrive->sleep, timeout))
-+ timeout = tdrive->sleep;
-+ }
-+
-+ now = jiffies;
-+ if (time_before_eq(timeout, now))
-+ break;
-+
-+ spin_unlock_irqrestore(&ide_lock, flags);
-+ timeout = schedule_timeout_uninterruptible(timeout - now);
-+ spin_lock_irqsave(&ide_lock, flags);
-+ } while (timeout);
-+ finish_wait(&ide_park_wq, &wait);
-+
- /*
- * First, reset any device state data we were maintaining
- * for any of the drives on this interface.
-diff --git a/drivers/ide/ide-park.c b/drivers/ide/ide-park.c
-new file mode 100644
-index 0000000..18adda6
---- /dev/null
-+++ b/drivers/ide/ide-park.c
-@@ -0,0 +1,120 @@
-+#include <linux/kernel.h>
-+#include <linux/ide.h>
-+#include <linux/jiffies.h>
-+#include <linux/blkdev.h>
-+
-+DECLARE_WAIT_QUEUE_HEAD(ide_park_wq);
-+
-+static void issue_park_cmd(ide_drive_t *drive, unsigned long timeout)
-+{
-+ struct request_queue *q = drive->queue;
-+ struct request *rq;
-+ int rc;
-+
-+ timeout += jiffies;
-+ spin_lock_irq(&ide_lock);
-+ if (drive->parked) {
-+ ide_hwgroup_t *hwgroup = drive->hwif->hwgroup;
-+ int reset_timer;
-+
-+ reset_timer = time_before(timeout, drive->sleep);
-+ drive->sleep = timeout;
-+ wake_up_all(&ide_park_wq);
-+ if (reset_timer && hwgroup->sleeping &&
-+ del_timer(&hwgroup->timer)) {
-+ hwgroup->sleeping = 0;
-+ hwgroup->busy = 0;
-+ blk_start_queueing(q);
-+ }
-+ spin_unlock_irq(&ide_lock);
-+ return;
-+ }
-+ spin_unlock_irq(&ide_lock);
-+
-+ rq = blk_get_request(q, READ, __GFP_WAIT);
-+ rq->cmd[0] = REQ_PARK_HEADS;
-+ rq->cmd_len = 1;
-+ rq->cmd_type = REQ_TYPE_SPECIAL;
-+ rq->special = &timeout;
-+ rc = blk_execute_rq(q, NULL, rq, 1);
-+ blk_put_request(rq);
-+ if (rc)
-+ goto out;
-+
-+ /*
-+ * Make sure that *some* command is sent to the drive after the
-+ * timeout has expired, so power management will be reenabled.
-+ */
-+ rq = blk_get_request(q, READ, GFP_NOWAIT);
-+ if (unlikely(!rq))
-+ goto out;
-+
-+ rq->cmd[0] = REQ_UNPARK_HEADS;
-+ rq->cmd_len = 1;
-+ rq->cmd_type = REQ_TYPE_SPECIAL;
-+ elv_add_request(q, rq, ELEVATOR_INSERT_FRONT, 1);
-+
-+out:
-+ return;
-+}
-+
-+ssize_t ide_park_show(struct device *dev, struct device_attribute *attr,
-+ char *buf)
-+{
-+ ide_drive_t *drive = to_ide_device(dev);
-+ unsigned long now;
-+ unsigned int msecs;
-+
-+ if (drive->no_unload)
-+ return -EOPNOTSUPP;
-+
-+ spin_lock_irq(&ide_lock);
-+ now = jiffies;
-+ if (drive->parked && time_after(drive->sleep, now))
-+ msecs = jiffies_to_msecs(drive->sleep - now);
-+ else
-+ msecs = 0;
-+ spin_unlock_irq(&ide_lock);
-+
-+ return snprintf(buf, 20, "%u\n", msecs);
-+}
-+
-+ssize_t ide_park_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t len)
-+{
-+#define MAX_PARK_TIMEOUT 30000
-+ ide_drive_t *drive = to_ide_device(dev);
-+ long int input;
-+ int rc;
-+
-+ rc = strict_strtol(buf, 10, &input);
-+ if (rc || input < -2)
-+ return -EINVAL;
-+ if (input > MAX_PARK_TIMEOUT) {
-+ input = MAX_PARK_TIMEOUT;
-+ rc = -EOVERFLOW;
-+ }
-+
-+ mutex_lock(&ide_setting_mtx);
-+ if (input >= 0) {
-+ if (drive->no_unload)
-+ rc = -EOPNOTSUPP;
-+ else if (input || drive->parked)
-+ issue_park_cmd(drive, msecs_to_jiffies(input));
-+ } else {
-+ if (drive->media == ide_disk)
-+ switch (input) {
-+ case -1:
-+ drive->no_unload = 0;
-+ break;
-+ case -2:
-+ drive->no_unload = 1;
-+ break;
-+ }
-+ else
-+ rc = -EOPNOTSUPP;
-+ }
-+ mutex_unlock(&ide_setting_mtx);
-+
-+ return rc ? rc : len;
-+}
-diff --git a/drivers/ide/ide-probe.c b/drivers/ide/ide-probe.c
-index a51a30e..0df3c91 100644
---- a/drivers/ide/ide-probe.c
-+++ b/drivers/ide/ide-probe.c
-@@ -210,6 +210,8 @@ static inline void do_identify (ide_drive_t *drive, u8 cmd)
- drive->media = type;
- /* an ATAPI device ignores DRDY */
- drive->ready_stat = 0;
-+ /* we don't do head unloading on ATAPI devices */
-+ drive->no_unload = 1;
- return;
- }
-
-@@ -227,6 +229,9 @@ static inline void do_identify (ide_drive_t *drive, u8 cmd)
-
- drive->media = ide_disk;
-
-+ if (!ata_id_has_unload((const u16 *)drive->id))
-+ drive->no_unload = 1;
-+
- printk(KERN_CONT "%s DISK drive\n",
- (id->config == 0x848a) ? "CFA" : "ATA");
-
-diff --git a/drivers/ide/ide-taskfile.c b/drivers/ide/ide-taskfile.c
-index 7fb6f1c..255c960 100644
---- a/drivers/ide/ide-taskfile.c
-+++ b/drivers/ide/ide-taskfile.c
-@@ -56,6 +56,7 @@ static ide_startstop_t task_no_data_intr(ide_drive_t *);
- static ide_startstop_t set_geometry_intr(ide_drive_t *);
- static ide_startstop_t recal_intr(ide_drive_t *);
- static ide_startstop_t set_multmode_intr(ide_drive_t *);
-+static ide_startstop_t park_intr(ide_drive_t *);
- static ide_startstop_t pre_task_out_intr(ide_drive_t *, struct request *);
- static ide_startstop_t task_in_intr(ide_drive_t *);
-
-@@ -105,6 +106,8 @@ ide_startstop_t do_rw_taskfile (ide_drive_t *drive, ide_task_t *task)
- case WIN_SPECIFY: handler = set_geometry_intr; break;
- case WIN_RESTORE: handler = recal_intr; break;
- case WIN_SETMULT: handler = set_multmode_intr; break;
-+ case WIN_IDLEIMMEDIATE: /* fall through */
-+ case WIN_CHECKPOWERMODE1: handler = park_intr; break;
- }
- }
- ide_execute_command(drive, tf->command, handler,
-@@ -186,6 +189,37 @@ static ide_startstop_t recal_intr(ide_drive_t *drive)
- }
-
- /*
-+ * park_intr() is invoked on completion of a REQ_PARK_HEADS cmd.
-+ */
-+static ide_startstop_t park_intr(ide_drive_t *drive)
-+{
-+ ide_hwif_t *hwif = drive->hwif;
-+ u8 stat;
-+
-+ local_irq_enable_in_hardirq();
-+ stat = hwif->tp_ops->read_status(hwif);
-+
-+ if (!OK_STAT(stat, READY_STAT, BAD_STAT))
-+ return ide_error(drive, "park_intr", stat);
-+
-+ if (hwif->hwgroup->rq->cmd[0] == REQ_PARK_HEADS) {
-+ ide_task_t task;
-+
-+ task.tf_flags = IDE_TFLAG_TF | IDE_TFLAG_DEVICE;
-+ hwif->tp_ops->tf_read(drive, &task);
-+ if (task.tf.lbal != 0xc4) {
-+ printk(KERN_ERR "%s: head unload failed!\n",
-+ drive->name);
-+ ide_tf_dump(drive->name, &task.tf);
-+ } else
-+ drive->parked = 1;
-+ }
-+
-+ ide_end_drive_cmd(drive, stat, ide_read_error(drive));
-+ return ide_stopped;
-+}
-+
-+/*
- * Handler for commands without a data phase
- */
- static ide_startstop_t task_no_data_intr(ide_drive_t *drive)
-diff --git a/drivers/ide/ide.c b/drivers/ide/ide.c
-index 7724516..9416ffb 100644
---- a/drivers/ide/ide.c
-+++ b/drivers/ide/ide.c
-@@ -734,6 +734,7 @@ static struct device_attribute ide_dev_attrs[] = {
- __ATTR_RO(model),
- __ATTR_RO(firmware),
- __ATTR(serial, 0400, serial_show, NULL),
-+ __ATTR(unload_heads, 0644, ide_park_show, ide_park_store),
- __ATTR_NULL
- };
-
-diff --git a/include/linux/ata.h b/include/linux/ata.h
-index 8a12d71..a26ebd2 100644
---- a/include/linux/ata.h
-+++ b/include/linux/ata.h
-@@ -667,6 +667,15 @@ static inline int ata_id_has_dword_io(const u16 *id)
- return 0;
- }
-
-+static inline int ata_id_has_unload(const u16 *id)
-+{
-+ if (ata_id_major_version(id) >= 7 &&
-+ (id[ATA_ID_CFSSE] & 0xC000) == 0x4000 &&
-+ id[ATA_ID_CFSSE] & (1 << 13))
-+ return 1;
-+ return 0;
-+}
-+
- static inline int ata_id_current_chs_valid(const u16 *id)
- {
- /* For ATA-1 devices, if the INITIALIZE DEVICE PARAMETERS command
-diff --git a/include/linux/ide.h b/include/linux/ide.h
-index 6514db8..03b6dea 100644
---- a/include/linux/ide.h
-+++ b/include/linux/ide.h
-@@ -143,6 +143,8 @@ struct ide_io_ports {
- * Values should be in the range of 0x20 to 0x3f.
- */
- #define REQ_DRIVE_RESET 0x20
-+#define REQ_PARK_HEADS 0x22
-+#define REQ_UNPARK_HEADS 0x23
-
- /*
- * Check for an interrupt and acknowledge the interrupt status
-@@ -423,6 +425,8 @@ struct ide_drive_s {
- unsigned sleeping : 1; /* 1=sleeping & sleep field valid */
- unsigned post_reset : 1;
- unsigned udma33_warned : 1;
-+ unsigned no_unload : 1; /* no support for unload feature */
-+ unsigned parked : 1; /* device parked, heads unloaded */
-
- u8 addressing; /* 0=28-bit, 1=48-bit, 2=48-bit doing 28-bit */
- u8 quirk_list; /* considered quirky, set for a specific host */
-@@ -1061,6 +1065,7 @@ extern int drive_is_ready(ide_drive_t *);
-
- void ide_pktcmd_tf_load(ide_drive_t *, u32, u16, u8);
-
-+
- ide_startstop_t ide_pc_intr(ide_drive_t *drive, struct ide_atapi_pc *pc,
- ide_handler_t *handler, unsigned int timeout, ide_expiry_t *expiry,
- void (*update_buffers)(ide_drive_t *, struct ide_atapi_pc *),
-@@ -1072,6 +1077,13 @@ ide_startstop_t ide_transfer_pc(ide_drive_t *, struct ide_atapi_pc *,
- ide_startstop_t ide_issue_pc(ide_drive_t *, struct ide_atapi_pc *,
- ide_handler_t *, unsigned int, ide_expiry_t *);
-
-+/* Disk head parking */
-+extern wait_queue_head_t ide_park_wq;
-+ssize_t ide_park_show(struct device *dev, struct device_attribute *attr,
-+ char *buf);
-+ssize_t ide_park_store(struct device *dev, struct device_attribute *attr,
-+ const char *buf, size_t len);
-+
- ide_startstop_t do_rw_taskfile(ide_drive_t *, ide_task_t *);
-
- void task_end_request(ide_drive_t *, struct request *, u8);
-diff --git a/include/linux/libata.h b/include/linux/libata.h
-index 225bfc5..adc16cf 100644
---- a/include/linux/libata.h
-+++ b/include/linux/libata.h
-@@ -146,6 +146,7 @@ enum {
- ATA_DFLAG_SPUNDOWN = (1 << 14), /* XXX: for spindown_compat */
- ATA_DFLAG_SLEEPING = (1 << 15), /* device is sleeping */
- ATA_DFLAG_DUBIOUS_XFER = (1 << 16), /* data transfer not verified */
-+ ATA_DFLAG_NO_UNLOAD = (1 << 17), /* device doesn't support unload */
- ATA_DFLAG_INIT_MASK = (1 << 24) - 1,
-
- ATA_DFLAG_DETACH = (1 << 24),
-@@ -244,6 +245,7 @@ enum {
- ATA_TMOUT_BOOT = 30000, /* heuristic */
- ATA_TMOUT_BOOT_QUICK = 7000, /* heuristic */
- ATA_TMOUT_INTERNAL_QUICK = 5000,
-+ ATA_TMOUT_MAX_PARK = 30000,
-
- /* FIXME: GoVault needs 2s but we can't afford that without
- * parallel probing. 800ms is enough for iVDR disk
-@@ -319,8 +321,9 @@ enum {
- ATA_EH_RESET = ATA_EH_SOFTRESET | ATA_EH_HARDRESET,
- ATA_EH_ENABLE_LINK = (1 << 3),
- ATA_EH_LPM = (1 << 4), /* link power management action */
-+ ATA_EH_PARK = (1 << 5), /* unload heads and stop I/O */
-
-- ATA_EH_PERDEV_MASK = ATA_EH_REVALIDATE,
-+ ATA_EH_PERDEV_MASK = ATA_EH_REVALIDATE | ATA_EH_PARK,
-
- /* ata_eh_info->flags */
- ATA_EHI_HOTPLUGGED = (1 << 0), /* could have been hotplugged */
-@@ -452,6 +455,7 @@ enum link_pm {
- MEDIUM_POWER,
- };
- extern struct device_attribute dev_attr_link_power_management_policy;
-+extern struct device_attribute dev_attr_unload_heads;
- extern struct device_attribute dev_attr_em_message_type;
- extern struct device_attribute dev_attr_em_message;
- extern struct device_attribute dev_attr_sw_activity;
-@@ -564,6 +568,7 @@ struct ata_device {
- /* n_sector is used as CLEAR_OFFSET, read comment above CLEAR_OFFSET */
- u64 n_sectors; /* size of device, if ATA */
- unsigned int class; /* ATA_DEV_xxx */
-+ unsigned long unpark_deadline;
-
- u8 pio_mode;
- u8 dma_mode;
-@@ -621,6 +626,7 @@ struct ata_eh_context {
- [ATA_EH_CMD_TIMEOUT_TABLE_SIZE];
- unsigned int classes[ATA_MAX_DEVICES];
- unsigned int did_probe_mask;
-+ unsigned int unloaded_mask;
- unsigned int saved_ncq_enabled;
- u8 saved_xfer_mode[ATA_MAX_DEVICES];
- /* timestamp for the last reset attempt or success */
-@@ -709,6 +715,7 @@ struct ata_port {
- struct list_head eh_done_q;
- wait_queue_head_t eh_wait_q;
- int eh_tries;
-+ struct completion park_req_pending;
-
- pm_message_t pm_mesg;
- int *pm_result;
-@@ -1098,6 +1105,7 @@ extern void ata_std_error_handler(struct ata_port *ap);
- */
- extern const struct ata_port_operations ata_base_port_ops;
- extern const struct ata_port_operations sata_port_ops;
-+extern struct device_attribute *ata_common_sdev_attrs[];
-
- #define ATA_BASE_SHT(drv_name) \
- .module = THIS_MODULE, \
-@@ -1112,7 +1120,8 @@ extern const struct ata_port_operations sata_port_ops;
- .proc_name = drv_name, \
- .slave_configure = ata_scsi_slave_config, \
- .slave_destroy = ata_scsi_slave_destroy, \
-- .bios_param = ata_std_bios_param
-+ .bios_param = ata_std_bios_param, \
-+ .sdev_attrs = ata_common_sdev_attrs
-
- #define ATA_NCQ_SHT(drv_name) \
- ATA_BASE_SHT(drv_name), \
diff --git a/sys-kernel/thinkpad-sources/files/2.6.27/colored-printk-2.6.26.patch b/sys-kernel/thinkpad-sources/files/2.6.27/colored-printk-2.6.26.patch
deleted file mode 100644
index dc97636..0000000
--- a/sys-kernel/thinkpad-sources/files/2.6.27/colored-printk-2.6.26.patch
+++ /dev/null
@@ -1,355 +0,0 @@
-diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
-index 643fd86..837f3c2 100644
---- a/arch/x86/kernel/early_printk.c
-+++ b/arch/x86/kernel/early_printk.c
-@@ -15,7 +15,8 @@
- static int max_ypos = 25, max_xpos = 80;
- static int current_ypos = 25, current_xpos;
-
--static void early_vga_write(struct console *con, const char *str, unsigned n)
-+static void early_vga_write(struct console *con, const char *str, unsigned n,
-+ unsigned int loglevel)
- {
- char c;
- int i, k, j;
-@@ -84,7 +85,8 @@ static int early_serial_putc(unsigned char ch)
- return timeout ? 0 : -1;
- }
-
--static void early_serial_write(struct console *con, const char *s, unsigned n)
-+static void early_serial_write(struct console *con, const char *s, unsigned n,
-+ unsigned int loglevel)
- {
- while (*s && n-- > 0) {
- if (*s == '\n')
-@@ -180,7 +182,8 @@ static void __init simnow_init(char *str)
- simnow_fd = simnow(XOPEN, (unsigned long)fn, O_WRONLY|O_APPEND|O_CREAT, 0644);
- }
-
--static void simnow_write(struct console *con, const char *s, unsigned n)
-+static void simnow_write(struct console *con, const char *s, unsigned n,
-+ unsigned int loglevel)
- {
- simnow(XWRITE, simnow_fd, (unsigned long)s, n);
- }
-@@ -204,7 +207,7 @@ void early_printk(const char *fmt, ...)
-
- va_start(ap, fmt);
- n = vscnprintf(buf, 512, fmt, ap);
-- early_console->write(early_console, buf, n);
-+ early_console->write(early_console, buf, n, 0);
- va_end(ap);
- }
-
-diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
-index 57ba5c2..10556dd 100644
---- a/drivers/char/Kconfig
-+++ b/drivers/char/Kconfig
-@@ -71,6 +71,111 @@ config NR_TTY_DEVICES
-
- If unsure, say 63.
-
-+menuconfig VT_CKO
-+ bool "Colored kernel message output"
-+ depends on VT_CONSOLE
-+ ---help---
-+ This option enables kernel messages to be emitted in
-+ colors other than the default.
-+
-+ The color value you need to enter is composed (OR-ed)
-+ of a foreground and a background color.
-+
-+ Foreground:
-+ 0x00 = black, 0x08 = dark gray,
-+ 0x01 = red, 0x09 = light red,
-+ 0x02 = green, 0x0A = light green,
-+ 0x03 = brown, 0x0B = yellow,
-+ 0x04 = blue, 0x0C = light blue,
-+ 0x05 = magenta, 0x0D = light magenta,
-+ 0x06 = cyan, 0x0E = light cyan,
-+ 0x07 = gray, 0x0F = white,
-+
-+ (Foreground colors 0x08 to 0x0F do not work when a VGA
-+ console font with 512 glyphs is used.)
-+
-+ Background:
-+ 0x00 = black, 0x40 = blue,
-+ 0x10 = red, 0x50 = magenta,
-+ 0x20 = green, 0x60 = cyan,
-+ 0x30 = brown, 0x70 = gray,
-+
-+ For example, 0x1F would yield white on red.
-+
-+ If unsure, say N.
-+
-+config VT_PRINTK_EMERG_COLOR
-+ hex "Emergency messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel emergency messages will
-+ be printed to the console.
-+
-+config VT_PRINTK_ALERT_COLOR
-+ hex "Alert messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel alert messages will
-+ be printed to the console.
-+
-+config VT_PRINTK_CRIT_COLOR
-+ hex "Critical messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel critical messages will
-+ be printed to the console.
-+
-+config VT_PRINTK_ERR_COLOR
-+ hex "Error messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel error messages will
-+ be printed to the console.
-+
-+config VT_PRINTK_WARNING_COLOR
-+ hex "Warning messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel warning messages will
-+ be printed to the console.
-+
-+config VT_PRINTK_NOTICE_COLOR
-+ hex "Notice messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel notice messages will
-+ be printed to the console.
-+
-+config VT_PRINTK_INFO_COLOR
-+ hex "Information messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel information messages will
-+ be printed to the console.
-+
-+config VT_PRINTK_DEBUG_COLOR
-+ hex "Debug messages color"
-+ range 0x00 0xFF
-+ depends on VT_CKO
-+ default 0x07
-+ ---help---
-+ This option defines with which color kernel debug messages will
-+ be printed to the console.
-+
- config HW_CONSOLE
- bool
- depends on VT && !S390 && !UML
-diff --git a/drivers/char/vt.c b/drivers/char/vt.c
-index 935f1c2..1fee2dc 100644
---- a/drivers/char/vt.c
-+++ b/drivers/char/vt.c
-@@ -73,6 +73,7 @@
- */
-
- #include <linux/module.h>
-+#include <linux/moduleparam.h>
- #include <linux/types.h>
- #include <linux/sched.h>
- #include <linux/tty.h>
-@@ -2409,17 +2410,45 @@ struct tty_driver *console_driver;
-
- #ifdef CONFIG_VT_CONSOLE
-
-+#ifdef CONFIG_VT_CKO
-+static unsigned int printk_color[8] __read_mostly = {
-+ CONFIG_VT_PRINTK_EMERG_COLOR, /* KERN_EMERG */
-+ CONFIG_VT_PRINTK_ALERT_COLOR, /* KERN_ALERT */
-+ CONFIG_VT_PRINTK_CRIT_COLOR, /* KERN_CRIT */
-+ CONFIG_VT_PRINTK_ERR_COLOR, /* KERN_ERR */
-+ CONFIG_VT_PRINTK_WARNING_COLOR, /* KERN_WARNING */
-+ CONFIG_VT_PRINTK_NOTICE_COLOR, /* KERN_NOTICE */
-+ CONFIG_VT_PRINTK_INFO_COLOR, /* KERN_INFO */
-+ CONFIG_VT_PRINTK_DEBUG_COLOR, /* KERN_DEBUG */
-+};
-+module_param_array(printk_color, uint, NULL, S_IRUGO | S_IWUSR);
-+
-+static inline void vc_set_color(struct vc_data *vc, unsigned char color)
-+{
-+ vc->vc_color = color_table[color & 0xF] |
-+ (color_table[(color >> 4) & 0x7] << 4) |
-+ (color & 0x80);
-+ update_attr(vc);
-+}
-+#else
-+static unsigned int printk_color[8];
-+static inline void vc_set_color(const struct vc_data *vc, unsigned char c)
-+{
-+}
-+#endif
-+
- /*
- * Console on virtual terminal
- *
- * The console must be locked when we get here.
- */
-
--static void vt_console_print(struct console *co, const char *b, unsigned count)
-+static void vt_console_print(struct console *co, const char *b, unsigned count,
-+ unsigned int loglevel)
- {
- struct vc_data *vc = vc_cons[fg_console].d;
-- unsigned char c;
- static DEFINE_SPINLOCK(printing_lock);
-+ unsigned char current_color, c;
- const ushort *start;
- ushort cnt = 0;
- ushort myx;
-@@ -2452,11 +2481,19 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
-
- start = (ushort *)vc->vc_pos;
-
-+ /*
-+ * We always get a valid loglevel - <8> and "no level" is transformed
-+ * to <4> in the typical kernel.
-+ */
-+ current_color = printk_color[loglevel];
-+ vc_set_color(vc, current_color);
-+
- /* Contrived structure to try to emulate original need_wrap behaviour
- * Problems caused when we have need_wrap set on '\n' character */
- while (count--) {
- c = *b++;
- if (c == 10 || c == 13 || c == 8 || vc->vc_need_wrap) {
-+ vc_set_color(vc, vc->vc_def_color);
- if (cnt > 0) {
- if (CON_IS_VISIBLE(vc))
- vc->vc_sw->con_putcs(vc, start, cnt, vc->vc_y, vc->vc_x);
-@@ -2469,6 +2506,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
- bs(vc);
- start = (ushort *)vc->vc_pos;
- myx = vc->vc_x;
-+ vc_set_color(vc, current_color);
- continue;
- }
- if (c != 13)
-@@ -2476,6 +2514,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
- cr(vc);
- start = (ushort *)vc->vc_pos;
- myx = vc->vc_x;
-+ vc_set_color(vc, current_color);
- if (c == 10 || c == 13)
- continue;
- }
-@@ -2498,6 +2537,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
- vc->vc_need_wrap = 1;
- }
- }
-+ vc_set_color(vc, vc->vc_def_color);
- set_cursor(vc);
- notify_update(vc);
-
-diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
-index 665341e..4c27de8 100644
---- a/drivers/net/netconsole.c
-+++ b/drivers/net/netconsole.c
-@@ -694,7 +694,8 @@ static struct notifier_block netconsole_netdev_notifier = {
- .notifier_call = netconsole_netdev_event,
- };
-
--static void write_msg(struct console *con, const char *msg, unsigned int len)
-+static void write_msg(struct console *con, const char *msg, unsigned int len,
-+ unsigned int loglevel)
- {
- int frag, left;
- unsigned long flags;
-diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
-index 1bc00b7..b4f1b6f 100644
---- a/drivers/serial/8250.c
-+++ b/drivers/serial/8250.c
-@@ -2527,7 +2527,8 @@ static void serial8250_console_putchar(struct uart_port *port, int ch)
- * The console_lock must be held when we get here.
- */
- static void
--serial8250_console_write(struct console *co, const char *s, unsigned int count)
-+serial8250_console_write(struct console *co, const char *s, unsigned int count,
-+ unsigned int loglevel)
- {
- struct uart_8250_port *up = &serial8250_ports[co->index];
- unsigned long flags;
-diff --git a/drivers/serial/8250_early.c b/drivers/serial/8250_early.c
-index f279745..2a928bd 100644
---- a/drivers/serial/8250_early.c
-+++ b/drivers/serial/8250_early.c
-@@ -83,7 +83,7 @@ static void __init serial_putc(struct uart_port *port, int c)
- }
-
- static void __init early_serial8250_write(struct console *console,
-- const char *s, unsigned int count)
-+ const char *s, unsigned int count, unsigned int loglevel)
- {
- struct uart_port *port = &early_device.port;
- unsigned int ier;
-diff --git a/include/linux/console.h b/include/linux/console.h
-index a4f27fb..46fcfd3 100644
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -95,7 +95,7 @@ void give_up_console(const struct consw *sw);
-
- struct console {
- char name[16];
-- void (*write)(struct console *, const char *, unsigned);
-+ void (*write)(struct console *, const char *, unsigned, unsigned int);
- int (*read)(struct console *, char *, unsigned);
- struct tty_driver *(*device)(struct console *, int *);
- void (*unblank)(void);
-diff --git a/kernel/printk.c b/kernel/printk.c
-index 6e920ce..a1aaa3f 100644
---- a/kernel/printk.c
-+++ b/kernel/printk.c
-@@ -444,7 +444,8 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len)
- /*
- * Call the console drivers on a range of log_buf
- */
--static void __call_console_drivers(unsigned start, unsigned end)
-+static void __call_console_drivers(unsigned start, unsigned end,
-+ unsigned int loglevel)
- {
- struct console *con;
-
-@@ -452,7 +453,7 @@ static void __call_console_drivers(unsigned start, unsigned end)
- if ((con->flags & CON_ENABLED) && con->write &&
- (cpu_online(smp_processor_id()) ||
- (con->flags & CON_ANYTIME)))
-- con->write(con, &LOG_BUF(start), end - start);
-+ con->write(con, &LOG_BUF(start), end - start, loglevel);
- }
- }
-
-@@ -479,10 +480,11 @@ static void _call_console_drivers(unsigned start,
- if ((start & LOG_BUF_MASK) > (end & LOG_BUF_MASK)) {
- /* wrapped write */
- __call_console_drivers(start & LOG_BUF_MASK,
-- log_buf_len);
-- __call_console_drivers(0, end & LOG_BUF_MASK);
-+ log_buf_len, msg_log_level);
-+ __call_console_drivers(0, end & LOG_BUF_MASK,
-+ msg_log_level);
- } else {
-- __call_console_drivers(start, end);
-+ __call_console_drivers(start, end, msg_log_level);
- }
- }
- }
diff --git a/sys-kernel/thinkpad-sources/files/2.6.27/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch b/sys-kernel/thinkpad-sources/files/2.6.27/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch
deleted file mode 100644
index 4a4db8b..0000000
--- a/sys-kernel/thinkpad-sources/files/2.6.27/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch
+++ /dev/null
@@ -1,554 +0,0 @@
-diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c linux-source-2.6.26-rc9-custom8/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
---- linux-source-2.6.26-rc9_orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2008-07-09 16:59:37.000000000 +0200
-+++ linux-source-2.6.26-rc9-custom8/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2008-07-09 12:41:37.000000000 +0200
-@@ -23,10 +23,14 @@
- * 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
- *
- * ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
- */
-
-+/* This file has been patched with Linux PHC: http://phc.athousandnights.de
-+ * Patch version: linux-phc-0.3.1-kernel-vanilla-2.6.26.patch
-+ */
-+
- #include <linux/kernel.h>
- #include <linux/module.h>
- #include <linux/init.h>
- #include <linux/smp.h>
- #include <linux/sched.h>
-@@ -56,17 +60,22 @@
- SYSTEM_IO_CAPABLE,
- };
-
- #define INTEL_MSR_RANGE (0xffff)
- #define CPUID_6_ECX_APERFMPERF_CAPABILITY (0x1)
-+#define INTEL_MSR_VID_MASK (0x00ff)
-+#define INTEL_MSR_FID_MASK (0xff00)
-+#define INTEL_MSR_FID_SHIFT (0x8)
-+#define PHC_VERSION_STRING "0.3.2:1"
-
- struct acpi_cpufreq_data {
- struct acpi_processor_performance *acpi_data;
- struct cpufreq_frequency_table *freq_table;
- unsigned int max_freq;
- unsigned int resume;
- unsigned int cpu_feature;
-+ acpi_integer *original_controls;
- };
-
- static DEFINE_PER_CPU(struct acpi_cpufreq_data *, drv_data);
-
- /* acpi_perf_data is a pointer to percpu data. */
-@@ -102,17 +111,18 @@
- }
-
- static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data)
- {
- int i;
-+ u32 fid;
- struct acpi_processor_performance *perf;
-
-- msr &= INTEL_MSR_RANGE;
-+ fid = msr & INTEL_MSR_FID_MASK;
- perf = data->acpi_data;
-
- for (i=0; data->freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
-- if (msr == perf->states[data->freq_table[i].index].status)
-+ if (fid == (perf->states[data->freq_table[i].index].status & INTEL_MSR_FID_MASK))
- return data->freq_table[i].frequency;
- }
- return data->freq_table[0].frequency;
- }
-
-@@ -740,10 +750,12 @@
- if (data) {
- cpufreq_frequency_table_put_attr(policy->cpu);
- per_cpu(drv_data, policy->cpu) = NULL;
- acpi_processor_unregister_performance(data->acpi_data,
- policy->cpu);
-+ if (data->original_controls)
-+ kfree(data->original_controls);
- kfree(data);
- }
-
- return 0;
- }
-@@ -757,12 +769,477 @@
- data->resume = 1;
-
- return 0;
- }
-
-+
-+
-+
-+/* sysfs interface to change operating points voltages */
-+
-+static unsigned int extract_fid_from_control(unsigned int control)
-+{
-+ return ((control & INTEL_MSR_FID_MASK) >> INTEL_MSR_FID_SHIFT);
-+}
-+
-+static unsigned int extract_vid_from_control(unsigned int control)
-+{
-+ return (control & INTEL_MSR_VID_MASK);
-+}
-+
-+
-+static bool check_cpu_control_capability(struct acpi_cpufreq_data *data) {
-+ /* check if the cpu we are running on is capable of setting new control data
-+ *
-+ */
-+ if (unlikely(data == NULL ||
-+ data->acpi_data == NULL ||
-+ data->freq_table == NULL ||
-+ data->cpu_feature != SYSTEM_INTEL_MSR_CAPABLE)) {
-+ return false;
-+ } else {
-+ return true;
-+ };
-+}
-+
-+
-+static ssize_t check_origial_table (struct acpi_cpufreq_data *data)
-+{
-+
-+ struct acpi_processor_performance *acpi_data;
-+ struct cpufreq_frequency_table *freq_table;
-+ unsigned int state_index;
-+
-+ acpi_data = data->acpi_data;
-+ freq_table = data->freq_table;
-+
-+ if (data->original_controls == NULL) {
-+ // Backup original control values
-+ data->original_controls = kcalloc(acpi_data->state_count,
-+ sizeof(acpi_integer), GFP_KERNEL);
-+ if (data->original_controls == NULL) {
-+ printk("failed to allocate memory for original control values\n");
-+ return -ENOMEM;
-+ }
-+ for (state_index = 0; state_index < acpi_data->state_count; state_index++) {
-+ data->original_controls[state_index] = acpi_data->states[state_index].control;
-+ }
-+ }
-+ return 0;
-+}
-+
-+static ssize_t show_freq_attr_vids(struct cpufreq_policy *policy, char *buf)
-+ /* display phc's voltage id's
-+ *
-+ */
-+{
-+ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu);
-+ struct acpi_processor_performance *acpi_data;
-+ struct cpufreq_frequency_table *freq_table;
-+ unsigned int i;
-+ unsigned int vid;
-+ ssize_t count = 0;
-+
-+ if (!check_cpu_control_capability(data)) return -ENODEV; //check if CPU is capable of changing controls
-+
-+ acpi_data = data->acpi_data;
-+ freq_table = data->freq_table;
-+
-+ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
-+ vid = extract_vid_from_control(acpi_data->states[freq_table[i].index].control);
-+ count += sprintf(&buf[count], "%u ", vid);
-+ }
-+ count += sprintf(&buf[count], "\n");
-+
-+ return count;
-+}
-+
-+static ssize_t show_freq_attr_default_vids(struct cpufreq_policy *policy, char *buf)
-+ /* display acpi's default voltage id's
-+ *
-+ */
-+{
-+ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu);
-+ struct cpufreq_frequency_table *freq_table;
-+ unsigned int i;
-+ unsigned int vid;
-+ ssize_t count = 0;
-+ ssize_t retval;
-+
-+ if (!check_cpu_control_capability(data)) return -ENODEV; //check if CPU is capable of changing controls
-+
-+ retval = check_origial_table(data);
-+ if (0 != retval)
-+ return retval;
-+
-+ freq_table = data->freq_table;
-+
-+ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
-+ vid = extract_vid_from_control(data->original_controls[freq_table[i].index]);
-+ count += sprintf(&buf[count], "%u ", vid);
-+ }
-+ count += sprintf(&buf[count], "\n");
-+
-+ return count;
-+}
-+
-+static ssize_t show_freq_attr_fids(struct cpufreq_policy *policy, char *buf)
-+ /* display phc's frequeny id's
-+ *
-+ */
-+{
-+ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu);
-+ struct acpi_processor_performance *acpi_data;
-+ struct cpufreq_frequency_table *freq_table;
-+ unsigned int i;
-+ unsigned int fid;
-+ ssize_t count = 0;
-+
-+ if (!check_cpu_control_capability(data)) return -ENODEV; //check if CPU is capable of changing controls
-+
-+ acpi_data = data->acpi_data;
-+ freq_table = data->freq_table;
-+
-+ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
-+ fid = extract_fid_from_control(acpi_data->states[freq_table[i].index].control);
-+ count += sprintf(&buf[count], "%u ", fid);
-+ }
-+ count += sprintf(&buf[count], "\n");
-+
-+ return count;
-+}
-+
-+static ssize_t show_freq_attr_controls(struct cpufreq_policy *policy, char *buf)
-+ /* display phc's controls for the cpu (frequency id's and related voltage id's)
-+ *
-+ */
-+{
-+ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu);
-+ struct acpi_processor_performance *acpi_data;
-+ struct cpufreq_frequency_table *freq_table;
-+ unsigned int i;
-+ unsigned int fid;
-+ unsigned int vid;
-+ ssize_t count = 0;
-+
-+ if (!check_cpu_control_capability(data)) return -ENODEV; //check if CPU is capable of changing controls
-+
-+ acpi_data = data->acpi_data;
-+ freq_table = data->freq_table;
-+
-+ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
-+ fid = extract_fid_from_control(acpi_data->states[freq_table[i].index].control);
-+ vid = extract_vid_from_control(acpi_data->states[freq_table[i].index].control);
-+ count += sprintf(&buf[count], "%u:%u ", fid, vid);
-+ }
-+ count += sprintf(&buf[count], "\n");
-+
-+ return count;
-+}
-+
-+static ssize_t show_freq_attr_default_controls(struct cpufreq_policy *policy, char *buf)
-+ /* display acpi's default controls for the cpu (frequency id's and related voltage id's)
-+ *
-+ */
-+{
-+ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu);
-+ struct cpufreq_frequency_table *freq_table;
-+ unsigned int i;
-+ unsigned int fid;
-+ unsigned int vid;
-+ ssize_t count = 0;
-+ ssize_t retval;
-+
-+ if (!check_cpu_control_capability(data)) return -ENODEV; //check if CPU is capable of changing controls
-+
-+ retval = check_origial_table(data);
-+ if (0 != retval)
-+ return retval;
-+
-+ freq_table = data->freq_table;
-+
-+ for (i = 0; freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
-+ fid = extract_fid_from_control(data->original_controls[freq_table[i].index]);
-+ vid = extract_vid_from_control(data->original_controls[freq_table[i].index]);
-+ count += sprintf(&buf[count], "%u:%u ", fid, vid);
-+ }
-+ count += sprintf(&buf[count], "\n");
-+
-+ return count;
-+}
-+
-+
-+static ssize_t store_freq_attr_vids(struct cpufreq_policy *policy, const char *buf, size_t count)
-+ /* store the voltage id's for the related frequency
-+ * We are going to do some sanity checks here to prevent users
-+ * from setting higher voltages than the default one.
-+ */
-+{
-+ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu);
-+ struct acpi_processor_performance *acpi_data;
-+ struct cpufreq_frequency_table *freq_table;
-+ unsigned int freq_index;
-+ unsigned int state_index;
-+ unsigned int new_vid;
-+ unsigned int original_vid;
-+ unsigned int new_control;
-+ unsigned int original_control;
-+ const char *curr_buf = buf;
-+ char *next_buf;
-+ ssize_t retval;
-+
-+ if (!check_cpu_control_capability(data)) return -ENODEV; //check if CPU is capable of changing controls
-+
-+ retval = check_origial_table(data);
-+ if (0 != retval)
-+ return retval;
-+
-+ acpi_data = data->acpi_data;
-+ freq_table = data->freq_table;
-+
-+ /* for each value taken from the sysfs interfalce (phc_vids) get entrys and convert them to unsigned long integers*/
-+ for (freq_index = 0; freq_table[freq_index].frequency != CPUFREQ_TABLE_END; freq_index++) {
-+ new_vid = simple_strtoul(curr_buf, &next_buf, 10);
-+ if (next_buf == curr_buf) {
-+ if ((curr_buf - buf == count - 1) && (*curr_buf == '\n')) { //end of line?
-+ curr_buf++;
-+ break;
-+ }
-+ //if we didn't got end of line but there is nothing more to read something went wrong...
-+ printk("failed to parse vid value at %i (%s)\n", freq_index, curr_buf);
-+ return -EINVAL;
-+ }
-+
-+ state_index = freq_table[freq_index].index;
-+ original_control = data->original_controls[state_index];
-+ original_vid = original_control & INTEL_MSR_VID_MASK;
-+
-+ /* before we store the values we do some checks to prevent
-+ * users to set up values higher than the default one
-+ */
-+ if (new_vid <= original_vid) {
-+ new_control = (original_control & ~INTEL_MSR_VID_MASK) | new_vid;
-+ dprintk("setting control at %i to %x (default is %x)\n",
-+ freq_index, new_control, original_control);
-+ acpi_data->states[state_index].control = new_control;
-+
-+ } else {
-+ printk("skipping vid at %i, %u is greater than default %u\n",
-+ freq_index, new_vid, original_vid);
-+ }
-+
-+ curr_buf = next_buf;
-+ /* jump over value seperators (space or comma).
-+ * There could be more than one space or comma character
-+ * to separate two values so we better do it using a loop.
-+ */
-+ while ((curr_buf - buf < count) && ((*curr_buf == ' ') || (*curr_buf == ','))) {
-+ curr_buf++;
-+ }
-+ }
-+
-+ /* set new voltage for current frequency */
-+ data->resume = 1;
-+ acpi_cpufreq_target(policy, get_cur_freq_on_cpu(policy->cpu), CPUFREQ_RELATION_L);
-+
-+ return curr_buf - buf;
-+}
-+
-+static ssize_t store_freq_attr_controls(struct cpufreq_policy *policy, const char *buf, size_t count)
-+ /* store the controls (frequency id's and related voltage id's)
-+ * We are going to do some sanity checks here to prevent users
-+ * from setting higher voltages than the default one.
-+ */
-+{
-+ struct acpi_cpufreq_data *data = per_cpu(drv_data, policy->cpu);
-+ struct acpi_processor_performance *acpi_data;
-+ struct cpufreq_frequency_table *freq_table;
-+ const char *curr_buf;
-+ unsigned int op_count;
-+ unsigned int state_index;
-+ int isok;
-+ char *next_buf;
-+ ssize_t retval;
-+ unsigned int new_vid;
-+ unsigned int original_vid;
-+ unsigned int new_fid;
-+ unsigned int old_fid;
-+ unsigned int original_control;
-+ unsigned int old_control;
-+ unsigned int new_control;
-+ int found;
-+
-+ if (!check_cpu_control_capability(data)) return -ENODEV;
-+
-+ retval = check_origial_table(data);
-+ if (0 != retval)
-+ return retval;
-+
-+ acpi_data = data->acpi_data;
-+ freq_table = data->freq_table;
-+
-+ op_count = 0;
-+ curr_buf = buf;
-+ next_buf = NULL;
-+ isok = 1;
-+
-+ while ( (isok) && (curr_buf != NULL) )
-+ {
-+ op_count++;
-+ // Parse fid
-+ new_fid = simple_strtoul(curr_buf, &next_buf, 10);
-+ if ((next_buf != curr_buf) && (next_buf != NULL))
-+ {
-+ // Parse separator between frequency and voltage
-+ curr_buf = next_buf;
-+ next_buf = NULL;
-+ if (*curr_buf==':')
-+ {
-+ curr_buf++;
-+ // Parse vid
-+ new_vid = simple_strtoul(curr_buf, &next_buf, 10);
-+ if ((next_buf != curr_buf) && (next_buf != NULL))
-+ {
-+ found = 0;
-+ for (state_index = 0; state_index < acpi_data->state_count; state_index++) {
-+ old_control = acpi_data->states[state_index].control;
-+ old_fid = extract_fid_from_control(old_control);
-+ if (new_fid == old_fid)
-+ {
-+ found = 1;
-+ original_control = data->original_controls[state_index];
-+ original_vid = extract_vid_from_control(original_control);
-+ if (new_vid <= original_vid)
-+ {
-+ new_control = (original_control & ~INTEL_MSR_VID_MASK) | new_vid;
-+ dprintk("setting control at %i to %x (default is %x)\n",
-+ state_index, new_control, original_control);
-+ acpi_data->states[state_index].control = new_control;
-+
-+ } else {
-+ printk("skipping vid at %i, %u is greater than default %u\n",
-+ state_index, new_vid, original_vid);
-+ }
-+ }
-+ }
-+
-+ if (found == 0)
-+ {
-+ printk("operating point # %u not found (FID = %u)\n", op_count, new_fid);
-+ isok = 0;
-+ }
-+
-+ // Parse seprator before next operating point, if any
-+ curr_buf = next_buf;
-+ next_buf = NULL;
-+ if ((*curr_buf == ',') || (*curr_buf == ' '))
-+ curr_buf++;
-+ else
-+ curr_buf = NULL;
-+ }
-+ else
-+ {
-+ printk("failed to parse VID of operating point # %u (%s)\n", op_count, curr_buf);
-+ isok = 0;
-+ }
-+ }
-+ else
-+ {
-+ printk("failed to parse operating point # %u (%s)\n", op_count, curr_buf);
-+ isok = 0;
-+ }
-+ }
-+ else
-+ {
-+ printk("failed to parse FID of operating point # %u (%s)\n", op_count, curr_buf);
-+ isok = 0;
-+ }
-+ }
-+
-+ if (isok)
-+ {
-+ retval = count;
-+ /* set new voltage at current frequency */
-+ data->resume = 1;
-+ acpi_cpufreq_target(policy, get_cur_freq_on_cpu(policy->cpu), CPUFREQ_RELATION_L);
-+ }
-+ else
-+ {
-+ retval = -EINVAL;
-+ }
-+
-+ return retval;
-+}
-+
-+static ssize_t show_freq_attr_phc_version(struct cpufreq_policy *policy, char *buf)
-+ /* print out the phc version string set at the beginning of that file
-+ */
-+{
-+ ssize_t count = 0;
-+ count += sprintf(&buf[count], "%s\n", PHC_VERSION_STRING);
-+ return count;
-+}
-+
-+
-+
-+static struct freq_attr cpufreq_freq_attr_phc_version =
-+{
-+ /*display phc's version string*/
-+ .attr = { .name = "phc_version", .mode = 0444, .owner = THIS_MODULE },
-+ .show = show_freq_attr_phc_version,
-+ .store = NULL,
-+};
-+
-+static struct freq_attr cpufreq_freq_attr_vids =
-+{
-+ /*display phc's voltage id's for the cpu*/
-+ .attr = { .name = "phc_vids", .mode = 0644, .owner = THIS_MODULE },
-+ .show = show_freq_attr_vids,
-+ .store = store_freq_attr_vids,
-+};
-+
-+static struct freq_attr cpufreq_freq_attr_default_vids =
-+{
-+ /*display acpi's default frequency id's for the cpu*/
-+ .attr = { .name = "phc_default_vids", .mode = 0444, .owner = THIS_MODULE },
-+ .show = show_freq_attr_default_vids,
-+ .store = NULL,
-+};
-+
-+static struct freq_attr cpufreq_freq_attr_fids =
-+{
-+ /*display phc's default frequency id's for the cpu*/
-+ .attr = { .name = "phc_fids", .mode = 0444, .owner = THIS_MODULE },
-+ .show = show_freq_attr_fids,
-+ .store = NULL,
-+};
-+
-+static struct freq_attr cpufreq_freq_attr_controls =
-+{
-+ /*display phc's current voltage/frequency controls for the cpu*/
-+ .attr = { .name = "phc_controls", .mode = 0644, .owner = THIS_MODULE },
-+ .show = show_freq_attr_controls,
-+ .store = store_freq_attr_controls,
-+};
-+
-+static struct freq_attr cpufreq_freq_attr_default_controls =
-+{
-+ /*display acpi's default voltage/frequency controls for the cpu*/
-+ .attr = { .name = "phc_default_controls", .mode = 0444, .owner = THIS_MODULE },
-+ .show = show_freq_attr_default_controls,
-+ .store = NULL,
-+};
-+
-+
- static struct freq_attr *acpi_cpufreq_attr[] = {
-- &cpufreq_freq_attr_scaling_available_freqs,
-+ &cpufreq_freq_attr_phc_version,
-+ &cpufreq_freq_attr_scaling_available_freqs,
-+ &cpufreq_freq_attr_vids,
-+ &cpufreq_freq_attr_default_vids,
-+ &cpufreq_freq_attr_fids,
-+ &cpufreq_freq_attr_controls,
-+ &cpufreq_freq_attr_default_controls,
- NULL,
- };
-
- static struct cpufreq_driver acpi_cpufreq_driver = {
- .verify = acpi_cpufreq_verify,
diff --git a/sys-kernel/thinkpad-sources/files/2.6.27/power-off-unused-ports.patch b/sys-kernel/thinkpad-sources/files/2.6.27/power-off-unused-ports.patch
deleted file mode 100644
index d7225a2..0000000
--- a/sys-kernel/thinkpad-sources/files/2.6.27/power-off-unused-ports.patch
+++ /dev/null
@@ -1,133 +0,0 @@
- drivers/ata/ahci.c | 21 +++++++++++++++++++++
- drivers/ata/libata-core.c | 24 ++++++++++++++++++++++++
- include/linux/libata.h | 1 +
- 3 files changed, 46 insertions(+)
-
-Index: linux-ahci-phy/drivers/ata/ahci.c
-===================================================================
---- linux-ahci-phy.orig/drivers/ata/ahci.c 2008-05-08 14:29:02.000000000 -0700
-+++ linux-ahci-phy/drivers/ata/ahci.c 2008-05-08 14:31:05.000000000 -0700
-@@ -53,14 +53,18 @@ static int ahci_skip_host_reset;
- module_param_named(skip_host_reset, ahci_skip_host_reset, int, 0444);
- MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)");
-
-+static int ahci_power_save = 1;
-+module_param_named(power_save, ahci_power_save, int, 0444);
-+MODULE_PARM_DESC(power_save, "Power off unused ports (0=don't power off, 1=power off)");
- static int ahci_enable_alpm(struct ata_port *ap,
- enum link_pm policy);
- static void ahci_disable_alpm(struct ata_port *ap);
- static ssize_t ahci_led_show(struct ata_port *ap, char *buf);
- static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
- size_t size);
- static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
- ssize_t size);
-+static int ahci_is_hotplug_capable(struct ata_port *ap);
- #define MAX_SLOTS 8
-
- enum {
-@@ -166,6 +170,8 @@ enum {
- PORT_CMD_ASP = (1 << 27), /* Aggressive Slumber/Partial */
- PORT_CMD_ALPE = (1 << 26), /* Aggressive Link PM enable */
- PORT_CMD_ATAPI = (1 << 24), /* Device is ATAPI */
-+ PORT_CMD_ESP = (1 << 21), /* External SATA Port */
-+ PORT_CMD_HPCP = (1 << 18), /* port is hot plug capable */
- PORT_CMD_PMP = (1 << 17), /* PMP attached */
- PORT_CMD_LIST_ON = (1 << 15), /* cmd list DMA engine running */
- PORT_CMD_FIS_ON = (1 << 14), /* FIS DMA engine running */
-@@ -1900,6 +1906,18 @@ static int ahci_pci_device_resume(struct
- }
- #endif
-
-+static int ahci_is_hotplug_capable(struct ata_port *ap)
-+{
-+ void __iomem *port_mmio = ahci_port_base(ap);
-+ u8 cmd;
-+
-+ if (!ahci_power_save)
-+ return 1;
-+
-+ cmd = readl(port_mmio + PORT_CMD);
-+ return ((cmd & PORT_CMD_HPCP) || (cmd & PORT_CMD_ESP));
-+}
-+
- static int ahci_port_start(struct ata_port *ap)
- {
- struct device *dev = ap->host->dev;
-@@ -1951,6 +1969,9 @@ static int ahci_port_start(struct ata_po
-
- ap->private_data = pp;
-
-+ /* set some flags based on port capabilities */
-+ if (!ahci_is_hotplug_capable(ap))
-+ ap->flags |= ATA_FLAG_NO_HOTPLUG;
- /* engage engines, captain */
- return ahci_port_resume(ap);
- }
-Index: linux-ahci-phy/drivers/ata/libata-core.c
-===================================================================
---- linux-ahci-phy.orig/drivers/ata/libata-core.c 2008-05-08 14:28:57.000000000 -0700
-+++ linux-ahci-phy/drivers/ata/libata-core.c 2008-05-08 14:29:50.000000000 -0700
-@@ -162,6 +162,19 @@ MODULE_DESCRIPTION("Library module for A
- MODULE_LICENSE("GPL");
- MODULE_VERSION(DRV_VERSION);
-
-+static void ata_phy_offline(struct ata_link *link)
-+{
-+ u32 scontrol;
-+ int rc;
-+
-+ /* set DET to 4 */
-+ rc = sata_scr_read(link, SCR_CONTROL, &scontrol);
-+ if (rc)
-+ return;
-+ scontrol &= ~0xf;
-+ scontrol |= (1 << 2);
-+ sata_scr_write(link, SCR_CONTROL, scontrol);
-+}
-
- /**
- * ata_force_cbl - force cable type according to libata.force
-@@ -2671,6 +2684,7 @@ void ata_port_disable(struct ata_port *a
- ap->link.device[0].class = ATA_DEV_NONE;
- ap->link.device[1].class = ATA_DEV_NONE;
- ap->flags |= ATA_FLAG_DISABLED;
-+ ata_phy_offline(&ap->link);
- }
-
- /**
-@@ -5609,6 +5623,8 @@ int ata_host_register(struct ata_host *h
- if (ap->ops->error_handler) {
- struct ata_eh_info *ehi = &ap->link.eh_info;
- unsigned long flags;
-+ int device_attached = 0;
-+ struct ata_device *dev;
-
- ata_port_probe(ap);
-
-@@ -5627,6 +5643,14 @@ int ata_host_register(struct ata_host *h
-
- /* wait for EH to finish */
- ata_port_wait_eh(ap);
-+ ata_link_for_each_dev(dev, &ap->link)
-+ if (ata_dev_enabled(dev))
-+ device_attached++;
-+ if (!device_attached &&
-+ (ap->flags & ATA_FLAG_NO_HOTPLUG)) {
-+ /* no device present, disable port */
-+ ata_port_disable(ap);
-+ }
- } else {
- DPRINTK("ata%u: bus probe begin\n", ap->print_id);
- rc = ata_bus_probe(ap);
-Index: linux-ahci-phy/include/linux/libata.h
-===================================================================
---- linux-ahci-phy.orig/include/linux/libata.h 2008-05-08 14:28:57.000000000 -0700
-+++ linux-ahci-phy/include/linux/libata.h 2008-05-08 14:29:50.000000000 -0700
-@@ -207,4 +207,6 @@ ATA_FLAG_DISABLED = (1 << 23), /* port is disabled, ignore it */
-
- /* bits 24:31 of ap->flags are reserved for LLD specific flags */
-+
-+ ATA_FLAG_NO_HOTPLUG = (1 << 32), /* port doesn't support HP */
-
- /* struct ata_port pflags */
diff --git a/sys-kernel/thinkpad-sources/files/2.6.28/02-ipw2200-inject-for-2.6.27.patch b/sys-kernel/thinkpad-sources/files/2.6.28/02-ipw2200-inject-for-2.6.27.patch
deleted file mode 100644
index ec44f16..0000000
--- a/sys-kernel/thinkpad-sources/files/2.6.28/02-ipw2200-inject-for-2.6.27.patch
+++ /dev/null
@@ -1,86 +0,0 @@
---- a/drivers/net/wireless/ipw2200.c 2007-10-07 12:41:29.000000000 +0200
-+++ b/drivers/net/wireless/ipw2200.c 2007-10-07 12:50:43.000000000 +0200
-@@ -31,7 +31,7 @@
- ******************************************************************************/
-
- #include "ipw2200.h"
--
-+#include <linux/version.h>
-
- #ifndef KBUILD_EXTMOD
- #define VK "k"
-@@ -1862,6 +1862,66 @@
- static DEVICE_ATTR(net_stats, S_IWUSR | S_IRUGO,
- show_net_stats, store_net_stats);
-
-+static int ipw_tx_skb(struct ipw_priv *priv, struct ieee80211_txb *txb, int pri);
-+
-+/* SYSFS INJECT */
-+static ssize_t store_inject(struct device *d,
-+#if LINUX_VERSION_CODE > KERNEL_VERSION(2,6,12)
-+ struct device_attribute *attr,
-+#endif
-+ const char *buf, size_t count)
-+{
-+ struct ipw_priv *priv = (struct ipw_priv *)d->driver_data;
-+ struct ieee80211_device *ieee = priv->ieee;
-+ struct ieee80211_txb * txb;
-+ struct sk_buff *skb_frag;
-+ unsigned char * newbuf;
-+ unsigned long flags;
-+
-+ // should test (ieee->is_queue_full)
-+
-+ // Fw only accepts data, so avoid accidental fw errors.
-+ if ( (buf[0]&0x0c) != '\x08') {
-+ //printk("ipw2200: inject: discarding non-data frame (type=%02X)\n",(int)(unsigned char)buf[0]);
-+ return count;
-+ }
-+
-+ if (count>1500) {
-+ count=1500;
-+ printk("ipw2200: inject: cutting down frame to 1500 bytes\n");
-+ }
-+
-+ spin_lock_irqsave(&priv->lock, flags);
-+
-+ // Create a txb with one skb
-+ txb = kmalloc(sizeof(struct ieee80211_txb) + sizeof(u8 *), GFP_ATOMIC);
-+ if (!txb)
-+ goto nosepuede;
-+ txb->nr_frags=1;
-+ txb->frag_size = ieee->tx_headroom;
-+ txb->fragments[0]=__dev_alloc_skb(count + ieee->tx_headroom, GFP_ATOMIC);
-+ if (!txb->fragments[0]) {
-+ kfree(txb);
-+ goto nosepuede;
-+ }
-+ skb_reserve(txb->fragments[0], ieee->tx_headroom);
-+ txb->encrypted=0;
-+ txb->payload_size=count;
-+ skb_frag = txb->fragments[0];
-+ newbuf=skb_put(skb_frag, count);
-+
-+ // copy data into txb->skb and send it
-+ memcpy(newbuf, buf, count);
-+
-+ ipw_tx_skb(priv, txb, 0);
-+
-+nosepuede:
-+ spin_unlock_irqrestore(&priv->lock, flags);
-+ return count;
-+}
-+
-+static DEVICE_ATTR(inject, S_IWUSR, NULL, store_inject);
-+
- static ssize_t show_channels(struct device *d,
- struct device_attribute *attr,
- char *buf)
-@@ -11478,6 +11538,7 @@
- #ifdef CONFIG_IPW2200_PROMISCUOUS
- &dev_attr_rtap_iface.attr,
- &dev_attr_rtap_filter.attr,
-+ &dev_attr_inject.attr,
- #endif
- NULL
- };
diff --git a/sys-kernel/thinkpad-sources/files/2.6.28/power-off-unused-ports.patch b/sys-kernel/thinkpad-sources/files/2.6.28/power-off-unused-ports.patch
deleted file mode 100644
index d7225a2..0000000
--- a/sys-kernel/thinkpad-sources/files/2.6.28/power-off-unused-ports.patch
+++ /dev/null
@@ -1,133 +0,0 @@
- drivers/ata/ahci.c | 21 +++++++++++++++++++++
- drivers/ata/libata-core.c | 24 ++++++++++++++++++++++++
- include/linux/libata.h | 1 +
- 3 files changed, 46 insertions(+)
-
-Index: linux-ahci-phy/drivers/ata/ahci.c
-===================================================================
---- linux-ahci-phy.orig/drivers/ata/ahci.c 2008-05-08 14:29:02.000000000 -0700
-+++ linux-ahci-phy/drivers/ata/ahci.c 2008-05-08 14:31:05.000000000 -0700
-@@ -53,14 +53,18 @@ static int ahci_skip_host_reset;
- module_param_named(skip_host_reset, ahci_skip_host_reset, int, 0444);
- MODULE_PARM_DESC(skip_host_reset, "skip global host reset (0=don't skip, 1=skip)");
-
-+static int ahci_power_save = 1;
-+module_param_named(power_save, ahci_power_save, int, 0444);
-+MODULE_PARM_DESC(power_save, "Power off unused ports (0=don't power off, 1=power off)");
- static int ahci_enable_alpm(struct ata_port *ap,
- enum link_pm policy);
- static void ahci_disable_alpm(struct ata_port *ap);
- static ssize_t ahci_led_show(struct ata_port *ap, char *buf);
- static ssize_t ahci_led_store(struct ata_port *ap, const char *buf,
- size_t size);
- static ssize_t ahci_transmit_led_message(struct ata_port *ap, u32 state,
- ssize_t size);
-+static int ahci_is_hotplug_capable(struct ata_port *ap);
- #define MAX_SLOTS 8
-
- enum {
-@@ -166,6 +170,8 @@ enum {
- PORT_CMD_ASP = (1 << 27), /* Aggressive Slumber/Partial */
- PORT_CMD_ALPE = (1 << 26), /* Aggressive Link PM enable */
- PORT_CMD_ATAPI = (1 << 24), /* Device is ATAPI */
-+ PORT_CMD_ESP = (1 << 21), /* External SATA Port */
-+ PORT_CMD_HPCP = (1 << 18), /* port is hot plug capable */
- PORT_CMD_PMP = (1 << 17), /* PMP attached */
- PORT_CMD_LIST_ON = (1 << 15), /* cmd list DMA engine running */
- PORT_CMD_FIS_ON = (1 << 14), /* FIS DMA engine running */
-@@ -1900,6 +1906,18 @@ static int ahci_pci_device_resume(struct
- }
- #endif
-
-+static int ahci_is_hotplug_capable(struct ata_port *ap)
-+{
-+ void __iomem *port_mmio = ahci_port_base(ap);
-+ u8 cmd;
-+
-+ if (!ahci_power_save)
-+ return 1;
-+
-+ cmd = readl(port_mmio + PORT_CMD);
-+ return ((cmd & PORT_CMD_HPCP) || (cmd & PORT_CMD_ESP));
-+}
-+
- static int ahci_port_start(struct ata_port *ap)
- {
- struct device *dev = ap->host->dev;
-@@ -1951,6 +1969,9 @@ static int ahci_port_start(struct ata_po
-
- ap->private_data = pp;
-
-+ /* set some flags based on port capabilities */
-+ if (!ahci_is_hotplug_capable(ap))
-+ ap->flags |= ATA_FLAG_NO_HOTPLUG;
- /* engage engines, captain */
- return ahci_port_resume(ap);
- }
-Index: linux-ahci-phy/drivers/ata/libata-core.c
-===================================================================
---- linux-ahci-phy.orig/drivers/ata/libata-core.c 2008-05-08 14:28:57.000000000 -0700
-+++ linux-ahci-phy/drivers/ata/libata-core.c 2008-05-08 14:29:50.000000000 -0700
-@@ -162,6 +162,19 @@ MODULE_DESCRIPTION("Library module for A
- MODULE_LICENSE("GPL");
- MODULE_VERSION(DRV_VERSION);
-
-+static void ata_phy_offline(struct ata_link *link)
-+{
-+ u32 scontrol;
-+ int rc;
-+
-+ /* set DET to 4 */
-+ rc = sata_scr_read(link, SCR_CONTROL, &scontrol);
-+ if (rc)
-+ return;
-+ scontrol &= ~0xf;
-+ scontrol |= (1 << 2);
-+ sata_scr_write(link, SCR_CONTROL, scontrol);
-+}
-
- /**
- * ata_force_cbl - force cable type according to libata.force
-@@ -2671,6 +2684,7 @@ void ata_port_disable(struct ata_port *a
- ap->link.device[0].class = ATA_DEV_NONE;
- ap->link.device[1].class = ATA_DEV_NONE;
- ap->flags |= ATA_FLAG_DISABLED;
-+ ata_phy_offline(&ap->link);
- }
-
- /**
-@@ -5609,6 +5623,8 @@ int ata_host_register(struct ata_host *h
- if (ap->ops->error_handler) {
- struct ata_eh_info *ehi = &ap->link.eh_info;
- unsigned long flags;
-+ int device_attached = 0;
-+ struct ata_device *dev;
-
- ata_port_probe(ap);
-
-@@ -5627,6 +5643,14 @@ int ata_host_register(struct ata_host *h
-
- /* wait for EH to finish */
- ata_port_wait_eh(ap);
-+ ata_link_for_each_dev(dev, &ap->link)
-+ if (ata_dev_enabled(dev))
-+ device_attached++;
-+ if (!device_attached &&
-+ (ap->flags & ATA_FLAG_NO_HOTPLUG)) {
-+ /* no device present, disable port */
-+ ata_port_disable(ap);
-+ }
- } else {
- DPRINTK("ata%u: bus probe begin\n", ap->print_id);
- rc = ata_bus_probe(ap);
-Index: linux-ahci-phy/include/linux/libata.h
-===================================================================
---- linux-ahci-phy.orig/include/linux/libata.h 2008-05-08 14:28:57.000000000 -0700
-+++ linux-ahci-phy/include/linux/libata.h 2008-05-08 14:29:50.000000000 -0700
-@@ -207,4 +207,6 @@ ATA_FLAG_DISABLED = (1 << 23), /* port is disabled, ignore it */
-
- /* bits 24:31 of ap->flags are reserved for LLD specific flags */
-+
-+ ATA_FLAG_NO_HOTPLUG = (1 << 32), /* port doesn't support HP */
-
- /* struct ata_port pflags */
diff --git a/sys-kernel/thinkpad-sources/files/2.6.27/02-ipw2200-inject-for-2.6.27.patch b/sys-kernel/thinkpad-sources/files/2.6.31/02-ipw2200-inject-for-2.6.27.patch
index ec44f16..ec44f16 100644
--- a/sys-kernel/thinkpad-sources/files/2.6.27/02-ipw2200-inject-for-2.6.27.patch
+++ b/sys-kernel/thinkpad-sources/files/2.6.31/02-ipw2200-inject-for-2.6.27.patch
diff --git a/sys-kernel/thinkpad-sources/files/2.6.28/colored-printk-2.6.26.patch b/sys-kernel/thinkpad-sources/files/2.6.31/colored-printk-2.6.30.patch
index dc97636..d48f769 100644
--- a/sys-kernel/thinkpad-sources/files/2.6.28/colored-printk-2.6.26.patch
+++ b/sys-kernel/thinkpad-sources/files/2.6.31/colored-printk-2.6.30.patch
@@ -1,8 +1,7 @@
-diff --git a/arch/x86/kernel/early_printk.c b/arch/x86/kernel/early_printk.c
-index 643fd86..837f3c2 100644
---- a/arch/x86/kernel/early_printk.c
-+++ b/arch/x86/kernel/early_printk.c
-@@ -15,7 +15,8 @@
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/arch/x86/kernel/early_printk.c linux-2.6.29.3-cprintk/arch/x86/kernel/early_printk.c
+--- a/arch/x86/kernel/early_printk.c 2009-03-24 00:12:14.000000000 +0100
++++ b/arch/x86/kernel/early_printk.c 2009-05-09 16:10:36.000000000 +0200
+@@ -23,7 +23,8 @@
static int max_ypos = 25, max_xpos = 80;
static int current_ypos = 25, current_xpos;
@@ -12,7 +11,7 @@ index 643fd86..837f3c2 100644
{
char c;
int i, k, j;
-@@ -84,7 +85,8 @@ static int early_serial_putc(unsigned char ch)
+@@ -93,7 +94,8 @@ static int early_serial_putc(unsigned ch
return timeout ? 0 : -1;
}
@@ -22,32 +21,21 @@ index 643fd86..837f3c2 100644
{
while (*s && n-- > 0) {
if (*s == '\n')
-@@ -180,7 +182,8 @@ static void __init simnow_init(char *str)
- simnow_fd = simnow(XOPEN, (unsigned long)fn, O_WRONLY|O_APPEND|O_CREAT, 0644);
- }
-
--static void simnow_write(struct console *con, const char *s, unsigned n)
-+static void simnow_write(struct console *con, const char *s, unsigned n,
-+ unsigned int loglevel)
- {
- simnow(XWRITE, simnow_fd, (unsigned long)s, n);
- }
-@@ -204,7 +207,7 @@ void early_printk(const char *fmt, ...)
+@@ -887,7 +889,7 @@ asmlinkage void early_printk(const char
va_start(ap, fmt);
- n = vscnprintf(buf, 512, fmt, ap);
+ n = vscnprintf(buf, sizeof(buf), fmt, ap);
- early_console->write(early_console, buf, n);
+ early_console->write(early_console, buf, n, 0);
va_end(ap);
}
-diff --git a/drivers/char/Kconfig b/drivers/char/Kconfig
-index 57ba5c2..10556dd 100644
---- a/drivers/char/Kconfig
-+++ b/drivers/char/Kconfig
-@@ -71,6 +71,111 @@ config NR_TTY_DEVICES
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/drivers/char/Kconfig linux-2.6.29.3-cprintk/drivers/char/Kconfig
+--- a/drivers/char/Kconfig 2009-03-24 00:12:14.000000000 +0100
++++ b/drivers/char/Kconfig 2009-05-09 14:43:48.000000000 +0200
+@@ -66,6 +66,111 @@ config VT_CONSOLE
- If unsure, say 63.
+ If unsure, say Y.
+menuconfig VT_CKO
+ bool "Colored kernel message output"
@@ -157,10 +145,9 @@ index 57ba5c2..10556dd 100644
config HW_CONSOLE
bool
depends on VT && !S390 && !UML
-diff --git a/drivers/char/vt.c b/drivers/char/vt.c
-index 935f1c2..1fee2dc 100644
---- a/drivers/char/vt.c
-+++ b/drivers/char/vt.c
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/drivers/char/vt.c linux-2.6.29.3-cprintk/drivers/char/vt.c
+--- a/drivers/char/vt.c 2009-05-09 10:46:57.000000000 +0200
++++ b/drivers/char/vt.c 2009-05-09 14:43:48.000000000 +0200
@@ -73,6 +73,7 @@
*/
@@ -169,7 +156,7 @@ index 935f1c2..1fee2dc 100644
#include <linux/types.h>
#include <linux/sched.h>
#include <linux/tty.h>
-@@ -2409,17 +2410,45 @@ struct tty_driver *console_driver;
+@@ -2431,17 +2432,45 @@ struct tty_driver *console_driver;
#ifdef CONFIG_VT_CONSOLE
@@ -217,7 +204,7 @@ index 935f1c2..1fee2dc 100644
const ushort *start;
ushort cnt = 0;
ushort myx;
-@@ -2452,11 +2481,19 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
+@@ -2474,11 +2503,19 @@ static void vt_console_print(struct cons
start = (ushort *)vc->vc_pos;
@@ -237,7 +224,7 @@ index 935f1c2..1fee2dc 100644
if (cnt > 0) {
if (CON_IS_VISIBLE(vc))
vc->vc_sw->con_putcs(vc, start, cnt, vc->vc_y, vc->vc_x);
-@@ -2469,6 +2506,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
+@@ -2491,6 +2528,7 @@ static void vt_console_print(struct cons
bs(vc);
start = (ushort *)vc->vc_pos;
myx = vc->vc_x;
@@ -245,7 +232,7 @@ index 935f1c2..1fee2dc 100644
continue;
}
if (c != 13)
-@@ -2476,6 +2514,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
+@@ -2498,6 +2536,7 @@ static void vt_console_print(struct cons
cr(vc);
start = (ushort *)vc->vc_pos;
myx = vc->vc_x;
@@ -253,7 +240,7 @@ index 935f1c2..1fee2dc 100644
if (c == 10 || c == 13)
continue;
}
-@@ -2498,6 +2537,7 @@ static void vt_console_print(struct console *co, const char *b, unsigned count)
+@@ -2520,6 +2559,7 @@ static void vt_console_print(struct cons
vc->vc_need_wrap = 1;
}
}
@@ -261,11 +248,10 @@ index 935f1c2..1fee2dc 100644
set_cursor(vc);
notify_update(vc);
-diff --git a/drivers/net/netconsole.c b/drivers/net/netconsole.c
-index 665341e..4c27de8 100644
---- a/drivers/net/netconsole.c
-+++ b/drivers/net/netconsole.c
-@@ -694,7 +694,8 @@ static struct notifier_block netconsole_netdev_notifier = {
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/drivers/net/netconsole.c linux-2.6.29.3-cprintk/drivers/net/netconsole.c
+--- a/drivers/net/netconsole.c 2009-03-24 00:12:14.000000000 +0100
++++ b/drivers/net/netconsole.c 2009-05-09 14:43:48.000000000 +0200
+@@ -691,7 +691,8 @@ static struct notifier_block netconsole_
.notifier_call = netconsole_netdev_event,
};
@@ -275,11 +261,10 @@ index 665341e..4c27de8 100644
{
int frag, left;
unsigned long flags;
-diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c
-index 1bc00b7..b4f1b6f 100644
---- a/drivers/serial/8250.c
-+++ b/drivers/serial/8250.c
-@@ -2527,7 +2527,8 @@ static void serial8250_console_putchar(struct uart_port *port, int ch)
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/drivers/serial/8250.c linux-2.6.29.3-cprintk/drivers/serial/8250.c
+--- a/drivers/serial/8250.c 2009-03-24 00:12:14.000000000 +0100
++++ b/drivers/serial/8250.c 2009-05-09 14:43:48.000000000 +0200
+@@ -2698,7 +2698,8 @@ static void serial8250_console_putchar(s
* The console_lock must be held when we get here.
*/
static void
@@ -289,11 +274,10 @@ index 1bc00b7..b4f1b6f 100644
{
struct uart_8250_port *up = &serial8250_ports[co->index];
unsigned long flags;
-diff --git a/drivers/serial/8250_early.c b/drivers/serial/8250_early.c
-index f279745..2a928bd 100644
---- a/drivers/serial/8250_early.c
-+++ b/drivers/serial/8250_early.c
-@@ -83,7 +83,7 @@ static void __init serial_putc(struct uart_port *port, int c)
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/drivers/serial/8250_early.c linux-2.6.29.3-cprintk/drivers/serial/8250_early.c
+--- a/drivers/serial/8250_early.c 2009-03-24 00:12:14.000000000 +0100
++++ b/drivers/serial/8250_early.c 2009-05-09 14:43:48.000000000 +0200
+@@ -83,7 +83,7 @@ static void __init serial_putc(struct ua
}
static void __init early_serial8250_write(struct console *console,
@@ -302,11 +286,10 @@ index f279745..2a928bd 100644
{
struct uart_port *port = &early_device.port;
unsigned int ier;
-diff --git a/include/linux/console.h b/include/linux/console.h
-index a4f27fb..46fcfd3 100644
---- a/include/linux/console.h
-+++ b/include/linux/console.h
-@@ -95,7 +95,7 @@ void give_up_console(const struct consw *sw);
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/include/linux/console.h linux-2.6.29.3-cprintk/include/linux/console.h
+--- a/include/linux/console.h 2009-03-24 00:12:14.000000000 +0100
++++ b/include/linux/console.h 2009-05-09 14:43:48.000000000 +0200
+@@ -95,7 +95,7 @@ void give_up_console(const struct consw
struct console {
char name[16];
@@ -315,11 +298,10 @@ index a4f27fb..46fcfd3 100644
int (*read)(struct console *, char *, unsigned);
struct tty_driver *(*device)(struct console *, int *);
void (*unblank)(void);
-diff --git a/kernel/printk.c b/kernel/printk.c
-index 6e920ce..a1aaa3f 100644
---- a/kernel/printk.c
-+++ b/kernel/printk.c
-@@ -444,7 +444,8 @@ asmlinkage long sys_syslog(int type, char __user *buf, int len)
+diff -pruN -X linux/Documentation/dontdiff linux-2.6.29.3/kernel/printk.c linux-2.6.29.3-cprintk/kernel/printk.c
+--- a/kernel/printk.c 2009-03-24 00:12:14.000000000 +0100
++++ b/kernel/printk.c 2009-05-09 14:43:48.000000000 +0200
+@@ -389,7 +389,8 @@ SYSCALL_DEFINE3(syslog, int, type, char
/*
* Call the console drivers on a range of log_buf
*/
@@ -329,7 +311,7 @@ index 6e920ce..a1aaa3f 100644
{
struct console *con;
-@@ -452,7 +453,7 @@ static void __call_console_drivers(unsigned start, unsigned end)
+@@ -397,7 +398,7 @@ static void __call_console_drivers(unsig
if ((con->flags & CON_ENABLED) && con->write &&
(cpu_online(smp_processor_id()) ||
(con->flags & CON_ANYTIME)))
@@ -338,7 +320,7 @@ index 6e920ce..a1aaa3f 100644
}
}
-@@ -479,10 +480,11 @@ static void _call_console_drivers(unsigned start,
+@@ -424,10 +425,11 @@ static void _call_console_drivers(unsign
if ((start & LOG_BUF_MASK) > (end & LOG_BUF_MASK)) {
/* wrapped write */
__call_console_drivers(start & LOG_BUF_MASK,
diff --git a/sys-kernel/thinkpad-sources/files/2.6.31/drm-next.patch b/sys-kernel/thinkpad-sources/files/2.6.31/drm-next.patch
new file mode 100644
index 0000000..5bb0323
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/files/2.6.31/drm-next.patch
@@ -0,0 +1,88389 @@
+diff --git a/drivers/gpu/drm/Kconfig b/drivers/gpu/drm/Kconfig
+index 39b393d..e4d971c 100644
+--- a/drivers/gpu/drm/Kconfig
++++ b/drivers/gpu/drm/Kconfig
+@@ -18,6 +18,14 @@ menuconfig DRM
+ details. You should also select and configure AGP
+ (/dev/agpgart) support.
+
++config DRM_KMS_HELPER
++ tristate
++ depends on DRM
++ select FB
++ select FRAMEBUFFER_CONSOLE if !EMBEDDED
++ help
++ FB and CRTC helpers for KMS drivers.
++
+ config DRM_TTM
+ tristate
+ depends on DRM
+@@ -36,6 +44,7 @@ config DRM_TDFX
+ config DRM_R128
+ tristate "ATI Rage 128"
+ depends on DRM && PCI
++ select FW_LOADER
+ help
+ Choose this option if you have an ATI Rage 128 graphics card. If M
+ is selected, the module will be called r128. AGP support for
+@@ -47,8 +56,9 @@ config DRM_RADEON
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
+- select FB
+- select FRAMEBUFFER_CONSOLE if !EMBEDDED
++ select FW_LOADER
++ select DRM_KMS_HELPER
++ select DRM_TTM
+ help
+ Choose this option if you have an ATI Radeon graphics card. There
+ are both PCI and AGP versions. You don't need to choose this to
+@@ -82,11 +92,10 @@ config DRM_I830
+ config DRM_I915
+ tristate "i915 driver"
+ depends on AGP_INTEL
++ select DRM_KMS_HELPER
+ select FB_CFB_FILLRECT
+ select FB_CFB_COPYAREA
+ select FB_CFB_IMAGEBLIT
+- select FB
+- select FRAMEBUFFER_CONSOLE if !EMBEDDED
+ # i915 depends on ACPI_VIDEO when ACPI is enabled
+ # but for select to work, need to select ACPI_VIDEO's dependencies, ick
+ select VIDEO_OUTPUT_CONTROL if ACPI
+@@ -116,6 +125,7 @@ endchoice
+ config DRM_MGA
+ tristate "Matrox g200/g400"
+ depends on DRM
++ select FW_LOADER
+ help
+ Choose this option if you have a Matrox G200, G400 or G450 graphics
+ card. If M is selected, the module will be called mga. AGP
+diff --git a/drivers/gpu/drm/Makefile b/drivers/gpu/drm/Makefile
+index fe23f29..3c8827a 100644
+--- a/drivers/gpu/drm/Makefile
++++ b/drivers/gpu/drm/Makefile
+@@ -10,11 +10,15 @@ drm-y := drm_auth.o drm_bufs.o drm_cache.o \
+ drm_lock.o drm_memory.o drm_proc.o drm_stub.o drm_vm.o \
+ drm_agpsupport.o drm_scatter.o ati_pcigart.o drm_pci.o \
+ drm_sysfs.o drm_hashtab.o drm_sman.o drm_mm.o \
+- drm_crtc.o drm_crtc_helper.o drm_modes.o drm_edid.o \
+- drm_info.o drm_debugfs.o
++ drm_crtc.o drm_modes.o drm_edid.o \
++ drm_info.o drm_debugfs.o drm_encoder_slave.o
+
+ drm-$(CONFIG_COMPAT) += drm_ioc32.o
+
++drm_kms_helper-y := drm_fb_helper.o drm_crtc_helper.o
++
++obj-$(CONFIG_DRM_KMS_HELPER) += drm_kms_helper.o
++
+ obj-$(CONFIG_DRM) += drm.o
+ obj-$(CONFIG_DRM_TTM) += ttm/
+ obj-$(CONFIG_DRM_TDFX) += tdfx/
+diff --git a/drivers/gpu/drm/drm_bufs.c b/drivers/gpu/drm/drm_bufs.c
+index 6246e3f..3d09e30 100644
+--- a/drivers/gpu/drm/drm_bufs.c
++++ b/drivers/gpu/drm/drm_bufs.c
+@@ -310,10 +310,10 @@ static int drm_addmap_core(struct drm_device * dev, resource_size_t offset,
+ (unsigned long long)map->offset, map->size);
+
+ break;
++ }
+ case _DRM_GEM:
+- DRM_ERROR("tried to rmmap GEM object\n");
++ DRM_ERROR("tried to addmap GEM object\n");
+ break;
+- }
+ case _DRM_SCATTER_GATHER:
+ if (!dev->sg) {
+ kfree(map);
+diff --git a/drivers/gpu/drm/drm_cache.c b/drivers/gpu/drm/drm_cache.c
+index 0e994a0..0e3bd5b 100644
+--- a/drivers/gpu/drm/drm_cache.c
++++ b/drivers/gpu/drm/drm_cache.c
+@@ -45,6 +45,23 @@ drm_clflush_page(struct page *page)
+ clflush(page_virtual + i);
+ kunmap_atomic(page_virtual, KM_USER0);
+ }
++
++static void drm_cache_flush_clflush(struct page *pages[],
++ unsigned long num_pages)
++{
++ unsigned long i;
++
++ mb();
++ for (i = 0; i < num_pages; i++)
++ drm_clflush_page(*pages++);
++ mb();
++}
++
++static void
++drm_clflush_ipi_handler(void *null)
++{
++ wbinvd();
++}
+ #endif
+
+ void
+@@ -53,17 +70,30 @@ drm_clflush_pages(struct page *pages[], unsigned long num_pages)
+
+ #if defined(CONFIG_X86)
+ if (cpu_has_clflush) {
+- unsigned long i;
+-
+- mb();
+- for (i = 0; i < num_pages; ++i)
+- drm_clflush_page(*pages++);
+- mb();
+-
++ drm_cache_flush_clflush(pages, num_pages);
+ return;
+ }
+
+- wbinvd();
++ if (on_each_cpu(drm_clflush_ipi_handler, NULL, 1) != 0)
++ printk(KERN_ERR "Timed out waiting for cache flush.\n");
++
++#elif defined(__powerpc__)
++ unsigned long i;
++ for (i = 0; i < num_pages; i++) {
++ struct page *page = pages[i];
++ void *page_virtual;
++
++ if (unlikely(page == NULL))
++ continue;
++
++ page_virtual = kmap_atomic(page, KM_USER0);
++ flush_dcache_range((unsigned long)page_virtual,
++ (unsigned long)page_virtual + PAGE_SIZE);
++ kunmap_atomic(page_virtual, KM_USER0);
++ }
++#else
++ printk(KERN_ERR "Architecture has no drm_cache.c support\n");
++ WARN_ON_ONCE(1);
+ #endif
+ }
+ EXPORT_SYMBOL(drm_clflush_pages);
+diff --git a/drivers/gpu/drm/drm_crtc.c b/drivers/gpu/drm/drm_crtc.c
+index 2f631c7..8e7b0eb 100644
+--- a/drivers/gpu/drm/drm_crtc.c
++++ b/drivers/gpu/drm/drm_crtc.c
+@@ -68,10 +68,10 @@ DRM_ENUM_NAME_FN(drm_get_dpms_name, drm_dpms_enum_list)
+ */
+ static struct drm_prop_enum_list drm_scaling_mode_enum_list[] =
+ {
+- { DRM_MODE_SCALE_NON_GPU, "Non-GPU" },
+- { DRM_MODE_SCALE_FULLSCREEN, "Fullscreen" },
+- { DRM_MODE_SCALE_NO_SCALE, "No scale" },
+- { DRM_MODE_SCALE_ASPECT, "Aspect" },
++ { DRM_MODE_SCALE_NONE, "None" },
++ { DRM_MODE_SCALE_FULLSCREEN, "Full" },
++ { DRM_MODE_SCALE_CENTER, "Center" },
++ { DRM_MODE_SCALE_ASPECT, "Full aspect" },
+ };
+
+ static struct drm_prop_enum_list drm_dithering_mode_enum_list[] =
+@@ -108,6 +108,7 @@ static struct drm_prop_enum_list drm_tv_select_enum_list[] =
+ { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
++ { DRM_MODE_SUBCONNECTOR_SCART, "SCART" }, /* TV-out */
+ };
+
+ DRM_ENUM_NAME_FN(drm_get_tv_select_name, drm_tv_select_enum_list)
+@@ -118,6 +119,7 @@ static struct drm_prop_enum_list drm_tv_subconnector_enum_list[] =
+ { DRM_MODE_SUBCONNECTOR_Composite, "Composite" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_SVIDEO, "SVIDEO" }, /* TV-out */
+ { DRM_MODE_SUBCONNECTOR_Component, "Component" }, /* TV-out */
++ { DRM_MODE_SUBCONNECTOR_SCART, "SCART" }, /* TV-out */
+ };
+
+ DRM_ENUM_NAME_FN(drm_get_tv_subconnector_name,
+@@ -146,6 +148,7 @@ static struct drm_conn_prop_enum_list drm_connector_enum_list[] =
+ { DRM_MODE_CONNECTOR_DisplayPort, "DisplayPort", 0 },
+ { DRM_MODE_CONNECTOR_HDMIA, "HDMI Type A", 0 },
+ { DRM_MODE_CONNECTOR_HDMIB, "HDMI Type B", 0 },
++ { DRM_MODE_CONNECTOR_TV, "TV", 0 },
+ };
+
+ static struct drm_prop_enum_list drm_encoder_enum_list[] =
+@@ -165,6 +168,7 @@ char *drm_get_encoder_name(struct drm_encoder *encoder)
+ encoder->base.id);
+ return buf;
+ }
++EXPORT_SYMBOL(drm_get_encoder_name);
+
+ char *drm_get_connector_name(struct drm_connector *connector)
+ {
+@@ -478,6 +482,7 @@ void drm_connector_cleanup(struct drm_connector *connector)
+ list_for_each_entry_safe(mode, t, &connector->user_modes, head)
+ drm_mode_remove(connector, mode);
+
++ kfree(connector->fb_helper_private);
+ mutex_lock(&dev->mode_config.mutex);
+ drm_mode_object_put(dev, &connector->base);
+ list_del(&connector->head);
+@@ -699,6 +704,42 @@ int drm_mode_create_tv_properties(struct drm_device *dev, int num_modes,
+ drm_property_add_enum(dev->mode_config.tv_mode_property, i,
+ i, modes[i]);
+
++ dev->mode_config.tv_brightness_property =
++ drm_property_create(dev, DRM_MODE_PROP_RANGE,
++ "brightness", 2);
++ dev->mode_config.tv_brightness_property->values[0] = 0;
++ dev->mode_config.tv_brightness_property->values[1] = 100;
++
++ dev->mode_config.tv_contrast_property =
++ drm_property_create(dev, DRM_MODE_PROP_RANGE,
++ "contrast", 2);
++ dev->mode_config.tv_contrast_property->values[0] = 0;
++ dev->mode_config.tv_contrast_property->values[1] = 100;
++
++ dev->mode_config.tv_flicker_reduction_property =
++ drm_property_create(dev, DRM_MODE_PROP_RANGE,
++ "flicker reduction", 2);
++ dev->mode_config.tv_flicker_reduction_property->values[0] = 0;
++ dev->mode_config.tv_flicker_reduction_property->values[1] = 100;
++
++ dev->mode_config.tv_overscan_property =
++ drm_property_create(dev, DRM_MODE_PROP_RANGE,
++ "overscan", 2);
++ dev->mode_config.tv_overscan_property->values[0] = 0;
++ dev->mode_config.tv_overscan_property->values[1] = 100;
++
++ dev->mode_config.tv_saturation_property =
++ drm_property_create(dev, DRM_MODE_PROP_RANGE,
++ "saturation", 2);
++ dev->mode_config.tv_saturation_property->values[0] = 0;
++ dev->mode_config.tv_saturation_property->values[1] = 100;
++
++ dev->mode_config.tv_hue_property =
++ drm_property_create(dev, DRM_MODE_PROP_RANGE,
++ "hue", 2);
++ dev->mode_config.tv_hue_property->values[0] = 0;
++ dev->mode_config.tv_hue_property->values[1] = 100;
++
+ return 0;
+ }
+ EXPORT_SYMBOL(drm_mode_create_tv_properties);
+@@ -1044,7 +1085,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
+ if (file_priv->master->minor->type == DRM_MINOR_CONTROL) {
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list,
+ head) {
+- DRM_DEBUG("CRTC ID is %d\n", crtc->base.id);
++ DRM_DEBUG_KMS("CRTC ID is %d\n", crtc->base.id);
+ if (put_user(crtc->base.id, crtc_id + copied)) {
+ ret = -EFAULT;
+ goto out;
+@@ -1072,7 +1113,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
+ list_for_each_entry(encoder,
+ &dev->mode_config.encoder_list,
+ head) {
+- DRM_DEBUG("ENCODER ID is %d\n",
++ DRM_DEBUG_KMS("ENCODER ID is %d\n",
+ encoder->base.id);
+ if (put_user(encoder->base.id, encoder_id +
+ copied)) {
+@@ -1103,7 +1144,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
+ list_for_each_entry(connector,
+ &dev->mode_config.connector_list,
+ head) {
+- DRM_DEBUG("CONNECTOR ID is %d\n",
++ DRM_DEBUG_KMS("CONNECTOR ID is %d\n",
+ connector->base.id);
+ if (put_user(connector->base.id,
+ connector_id + copied)) {
+@@ -1127,7 +1168,7 @@ int drm_mode_getresources(struct drm_device *dev, void *data,
+ }
+ card_res->count_connectors = connector_count;
+
+- DRM_DEBUG("Counted %d %d %d\n", card_res->count_crtcs,
++ DRM_DEBUG_KMS("Counted %d %d %d\n", card_res->count_crtcs,
+ card_res->count_connectors, card_res->count_encoders);
+
+ out:
+@@ -1230,7 +1271,7 @@ int drm_mode_getconnector(struct drm_device *dev, void *data,
+
+ memset(&u_mode, 0, sizeof(struct drm_mode_modeinfo));
+
+- DRM_DEBUG("connector id %d:\n", out_resp->connector_id);
++ DRM_DEBUG_KMS("connector id %d:\n", out_resp->connector_id);
+
+ mutex_lock(&dev->mode_config.mutex);
+
+@@ -1406,7 +1447,7 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
+ obj = drm_mode_object_find(dev, crtc_req->crtc_id,
+ DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+- DRM_DEBUG("Unknown CRTC ID %d\n", crtc_req->crtc_id);
++ DRM_DEBUG_KMS("Unknown CRTC ID %d\n", crtc_req->crtc_id);
+ ret = -EINVAL;
+ goto out;
+ }
+@@ -1419,7 +1460,8 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
+ list_for_each_entry(crtcfb,
+ &dev->mode_config.crtc_list, head) {
+ if (crtcfb == crtc) {
+- DRM_DEBUG("Using current fb for setmode\n");
++ DRM_DEBUG_KMS("Using current fb for "
++ "setmode\n");
+ fb = crtc->fb;
+ }
+ }
+@@ -1427,7 +1469,8 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
+ obj = drm_mode_object_find(dev, crtc_req->fb_id,
+ DRM_MODE_OBJECT_FB);
+ if (!obj) {
+- DRM_DEBUG("Unknown FB ID%d\n", crtc_req->fb_id);
++ DRM_DEBUG_KMS("Unknown FB ID%d\n",
++ crtc_req->fb_id);
+ ret = -EINVAL;
+ goto out;
+ }
+@@ -1440,13 +1483,13 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
+ }
+
+ if (crtc_req->count_connectors == 0 && mode) {
+- DRM_DEBUG("Count connectors is 0 but mode set\n");
++ DRM_DEBUG_KMS("Count connectors is 0 but mode set\n");
+ ret = -EINVAL;
+ goto out;
+ }
+
+ if (crtc_req->count_connectors > 0 && (!mode || !fb)) {
+- DRM_DEBUG("Count connectors is %d but no mode or fb set\n",
++ DRM_DEBUG_KMS("Count connectors is %d but no mode or fb set\n",
+ crtc_req->count_connectors);
+ ret = -EINVAL;
+ goto out;
+@@ -1479,7 +1522,8 @@ int drm_mode_setcrtc(struct drm_device *dev, void *data,
+ obj = drm_mode_object_find(dev, out_id,
+ DRM_MODE_OBJECT_CONNECTOR);
+ if (!obj) {
+- DRM_DEBUG("Connector id %d unknown\n", out_id);
++ DRM_DEBUG_KMS("Connector id %d unknown\n",
++ out_id);
+ ret = -EINVAL;
+ goto out;
+ }
+@@ -1512,7 +1556,7 @@ int drm_mode_cursor_ioctl(struct drm_device *dev,
+ struct drm_crtc *crtc;
+ int ret = 0;
+
+- DRM_DEBUG("\n");
++ DRM_DEBUG_KMS("\n");
+
+ if (!req->flags) {
+ DRM_ERROR("no operation set\n");
+@@ -1522,7 +1566,7 @@ int drm_mode_cursor_ioctl(struct drm_device *dev,
+ mutex_lock(&dev->mode_config.mutex);
+ obj = drm_mode_object_find(dev, req->crtc_id, DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+- DRM_DEBUG("Unknown CRTC ID %d\n", req->crtc_id);
++ DRM_DEBUG_KMS("Unknown CRTC ID %d\n", req->crtc_id);
+ ret = -EINVAL;
+ goto out;
+ }
+diff --git a/drivers/gpu/drm/drm_crtc_helper.c b/drivers/gpu/drm/drm_crtc_helper.c
+index 6aaa2cb..1fe4e1d 100644
+--- a/drivers/gpu/drm/drm_crtc_helper.c
++++ b/drivers/gpu/drm/drm_crtc_helper.c
+@@ -32,15 +32,7 @@
+ #include "drmP.h"
+ #include "drm_crtc.h"
+ #include "drm_crtc_helper.h"
+-
+-/*
+- * Detailed mode info for 800x600@60Hz
+- */
+-static struct drm_display_mode std_modes[] = {
+- { DRM_MODE("800x600", DRM_MODE_TYPE_DEFAULT, 40000, 800, 840,
+- 968, 1056, 0, 600, 601, 605, 628, 0,
+- DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
+-};
++#include "drm_fb_helper.h"
+
+ static void drm_mode_validate_flag(struct drm_connector *connector,
+ int flags)
+@@ -94,23 +86,33 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
+ int count = 0;
+ int mode_flags = 0;
+
+- DRM_DEBUG("%s\n", drm_get_connector_name(connector));
++ DRM_DEBUG_KMS("%s\n", drm_get_connector_name(connector));
+ /* set all modes to the unverified state */
+ list_for_each_entry_safe(mode, t, &connector->modes, head)
+ mode->status = MODE_UNVERIFIED;
+
+- connector->status = connector->funcs->detect(connector);
++ if (connector->force) {
++ if (connector->force == DRM_FORCE_ON)
++ connector->status = connector_status_connected;
++ else
++ connector->status = connector_status_disconnected;
++ if (connector->funcs->force)
++ connector->funcs->force(connector);
++ } else
++ connector->status = connector->funcs->detect(connector);
+
+ if (connector->status == connector_status_disconnected) {
+- DRM_DEBUG("%s is disconnected\n",
++ DRM_DEBUG_KMS("%s is disconnected\n",
+ drm_get_connector_name(connector));
+- /* TODO set EDID to NULL */
+- return 0;
++ goto prune;
+ }
+
+ count = (*connector_funcs->get_modes)(connector);
+- if (!count)
+- return 0;
++ if (!count) {
++ count = drm_add_modes_noedid(connector, 800, 600);
++ if (!count)
++ return 0;
++ }
+
+ drm_mode_connector_list_update(connector);
+
+@@ -130,7 +132,7 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
+ mode);
+ }
+
+-
++prune:
+ drm_mode_prune_invalid(dev, &connector->modes, true);
+
+ if (list_empty(&connector->modes))
+@@ -138,7 +140,8 @@ int drm_helper_probe_single_connector_modes(struct drm_connector *connector,
+
+ drm_mode_sort(&connector->modes);
+
+- DRM_DEBUG("Probed modes for %s\n", drm_get_connector_name(connector));
++ DRM_DEBUG_KMS("Probed modes for %s\n",
++ drm_get_connector_name(connector));
+ list_for_each_entry_safe(mode, t, &connector->modes, head) {
+ mode->vrefresh = drm_mode_vrefresh(mode);
+
+@@ -165,39 +168,6 @@ int drm_helper_probe_connector_modes(struct drm_device *dev, uint32_t maxX,
+ }
+ EXPORT_SYMBOL(drm_helper_probe_connector_modes);
+
+-static void drm_helper_add_std_modes(struct drm_device *dev,
+- struct drm_connector *connector)
+-{
+- struct drm_display_mode *mode, *t;
+- int i;
+-
+- for (i = 0; i < ARRAY_SIZE(std_modes); i++) {
+- struct drm_display_mode *stdmode;
+-
+- /*
+- * When no valid EDID modes are available we end up
+- * here and bailed in the past, now we add some standard
+- * modes and move on.
+- */
+- stdmode = drm_mode_duplicate(dev, &std_modes[i]);
+- drm_mode_probed_add(connector, stdmode);
+- drm_mode_list_concat(&connector->probed_modes,
+- &connector->modes);
+-
+- DRM_DEBUG("Adding mode %s to %s\n", stdmode->name,
+- drm_get_connector_name(connector));
+- }
+- drm_mode_sort(&connector->modes);
+-
+- DRM_DEBUG("Added std modes on %s\n", drm_get_connector_name(connector));
+- list_for_each_entry_safe(mode, t, &connector->modes, head) {
+- mode->vrefresh = drm_mode_vrefresh(mode);
+-
+- drm_mode_set_crtcinfo(mode, CRTC_INTERLACE_HALVE_V);
+- drm_mode_debug_printmodeline(mode);
+- }
+-}
+-
+ /**
+ * drm_helper_encoder_in_use - check if a given encoder is in use
+ * @encoder: encoder to check
+@@ -258,13 +228,27 @@ EXPORT_SYMBOL(drm_helper_crtc_in_use);
+ void drm_helper_disable_unused_functions(struct drm_device *dev)
+ {
+ struct drm_encoder *encoder;
++ struct drm_connector *connector;
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct drm_crtc *crtc;
+
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ if (!connector->encoder)
++ continue;
++ if (connector->status == connector_status_disconnected)
++ connector->encoder = NULL;
++ }
++
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ encoder_funcs = encoder->helper_private;
+- if (!drm_helper_encoder_in_use(encoder))
+- (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF);
++ if (!drm_helper_encoder_in_use(encoder)) {
++ if (encoder_funcs->disable)
++ (*encoder_funcs->disable)(encoder);
++ else
++ (*encoder_funcs->dpms)(encoder, DRM_MODE_DPMS_OFF);
++ /* disconnector encoder from any connector */
++ encoder->crtc = NULL;
++ }
+ }
+
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+@@ -292,6 +276,65 @@ static struct drm_display_mode *drm_has_preferred_mode(struct drm_connector *con
+ return NULL;
+ }
+
++static bool drm_has_cmdline_mode(struct drm_connector *connector)
++{
++ struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
++ struct drm_fb_helper_cmdline_mode *cmdline_mode;
++
++ if (!fb_help_conn)
++ return false;
++
++ cmdline_mode = &fb_help_conn->cmdline_mode;
++ return cmdline_mode->specified;
++}
++
++static struct drm_display_mode *drm_pick_cmdline_mode(struct drm_connector *connector, int width, int height)
++{
++ struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
++ struct drm_fb_helper_cmdline_mode *cmdline_mode;
++ struct drm_display_mode *mode = NULL;
++
++ if (!fb_help_conn)
++ return mode;
++
++ cmdline_mode = &fb_help_conn->cmdline_mode;
++ if (cmdline_mode->specified == false)
++ return mode;
++
++ /* attempt to find a matching mode in the list of modes
++ * we have gotten so far, if not add a CVT mode that conforms
++ */
++ if (cmdline_mode->rb || cmdline_mode->margins)
++ goto create_mode;
++
++ list_for_each_entry(mode, &connector->modes, head) {
++ /* check width/height */
++ if (mode->hdisplay != cmdline_mode->xres ||
++ mode->vdisplay != cmdline_mode->yres)
++ continue;
++
++ if (cmdline_mode->refresh_specified) {
++ if (mode->vrefresh != cmdline_mode->refresh)
++ continue;
++ }
++
++ if (cmdline_mode->interlace) {
++ if (!(mode->flags & DRM_MODE_FLAG_INTERLACE))
++ continue;
++ }
++ return mode;
++ }
++
++create_mode:
++ mode = drm_cvt_mode(connector->dev, cmdline_mode->xres,
++ cmdline_mode->yres,
++ cmdline_mode->refresh_specified ? cmdline_mode->refresh : 60,
++ cmdline_mode->rb, cmdline_mode->interlace,
++ cmdline_mode->margins);
++ list_add(&mode->head, &connector->modes);
++ return mode;
++}
++
+ static bool drm_connector_enabled(struct drm_connector *connector, bool strict)
+ {
+ bool enable;
+@@ -312,7 +355,7 @@ static void drm_enable_connectors(struct drm_device *dev, bool *enabled)
+
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ enabled[i] = drm_connector_enabled(connector, true);
+- DRM_DEBUG("connector %d enabled? %s\n", connector->base.id,
++ DRM_DEBUG_KMS("connector %d enabled? %s\n", connector->base.id,
+ enabled[i] ? "yes" : "no");
+ any_enabled |= enabled[i];
+ i++;
+@@ -342,16 +385,22 @@ static bool drm_target_preferred(struct drm_device *dev,
+ continue;
+ }
+
+- DRM_DEBUG("looking for preferred mode on connector %d\n",
+- connector->base.id);
++ DRM_DEBUG_KMS("looking for cmdline mode on connector %d\n",
++ connector->base.id);
+
+- modes[i] = drm_has_preferred_mode(connector, width, height);
++ /* got for command line mode first */
++ modes[i] = drm_pick_cmdline_mode(connector, width, height);
++ if (!modes[i]) {
++ DRM_DEBUG_KMS("looking for preferred mode on connector %d\n",
++ connector->base.id);
++ modes[i] = drm_has_preferred_mode(connector, width, height);
++ }
+ /* No preferred modes, pick one off the list */
+ if (!modes[i] && !list_empty(&connector->modes)) {
+ list_for_each_entry(modes[i], &connector->modes, head)
+ break;
+ }
+- DRM_DEBUG("found mode %s\n", modes[i] ? modes[i]->name :
++ DRM_DEBUG_KMS("found mode %s\n", modes[i] ? modes[i]->name :
+ "none");
+ i++;
+ }
+@@ -394,6 +443,8 @@ static int drm_pick_crtcs(struct drm_device *dev,
+ my_score = 1;
+ if (connector->status == connector_status_connected)
+ my_score++;
++ if (drm_has_cmdline_mode(connector))
++ my_score++;
+ if (drm_has_preferred_mode(connector, width, height))
+ my_score++;
+
+@@ -409,7 +460,7 @@ static int drm_pick_crtcs(struct drm_device *dev,
+ c = 0;
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+
+- if ((connector->encoder->possible_crtcs & (1 << c)) == 0) {
++ if ((encoder->possible_crtcs & (1 << c)) == 0) {
+ c++;
+ continue;
+ }
+@@ -452,7 +503,7 @@ static void drm_setup_crtcs(struct drm_device *dev)
+ int width, height;
+ int i, ret;
+
+- DRM_DEBUG("\n");
++ DRM_DEBUG_KMS("\n");
+
+ width = dev->mode_config.max_width;
+ height = dev->mode_config.max_height;
+@@ -475,7 +526,7 @@ static void drm_setup_crtcs(struct drm_device *dev)
+ if (!ret)
+ DRM_ERROR("Unable to find initial modes\n");
+
+- DRM_DEBUG("picking CRTCs for %dx%d config\n", width, height);
++ DRM_DEBUG_KMS("picking CRTCs for %dx%d config\n", width, height);
+
+ drm_pick_crtcs(dev, crtcs, modes, 0, width, height);
+
+@@ -490,12 +541,14 @@ static void drm_setup_crtcs(struct drm_device *dev)
+ }
+
+ if (mode && crtc) {
+- DRM_DEBUG("desired mode %s set on crtc %d\n",
++ DRM_DEBUG_KMS("desired mode %s set on crtc %d\n",
+ mode->name, crtc->base.id);
+ crtc->desired_mode = mode;
+ connector->encoder->crtc = crtc;
+- } else
++ } else {
+ connector->encoder->crtc = NULL;
++ connector->encoder = NULL;
++ }
+ i++;
+ }
+
+@@ -702,18 +755,17 @@ EXPORT_SYMBOL(drm_crtc_helper_set_mode);
+ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ {
+ struct drm_device *dev;
+- struct drm_crtc **save_crtcs, *new_crtc;
+- struct drm_encoder **save_encoders, *new_encoder;
++ struct drm_crtc *save_crtcs, *new_crtc, *crtc;
++ struct drm_encoder *save_encoders, *new_encoder, *encoder;
+ struct drm_framebuffer *old_fb = NULL;
+- bool save_enabled;
+ bool mode_changed = false; /* if true do a full mode set */
+ bool fb_changed = false; /* if true and !mode_changed just do a flip */
+- struct drm_connector *connector;
++ struct drm_connector *save_connectors, *connector;
+ int count = 0, ro, fail = 0;
+ struct drm_crtc_helper_funcs *crtc_funcs;
+ int ret = 0;
+
+- DRM_DEBUG("\n");
++ DRM_DEBUG_KMS("\n");
+
+ if (!set)
+ return -EINVAL;
+@@ -726,37 +778,60 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+
+ crtc_funcs = set->crtc->helper_private;
+
+- DRM_DEBUG("crtc: %p %d fb: %p connectors: %p num_connectors: %d (x, y) (%i, %i)\n",
++ DRM_DEBUG_KMS("crtc: %p %d fb: %p connectors: %p num_connectors:"
++ " %d (x, y) (%i, %i)\n",
+ set->crtc, set->crtc->base.id, set->fb, set->connectors,
+ (int)set->num_connectors, set->x, set->y);
+
+ dev = set->crtc->dev;
+
+- /* save previous config */
+- save_enabled = set->crtc->enabled;
+-
+- /*
+- * We do mode_config.num_connectors here since we'll look at the
+- * CRTC and encoder associated with each connector later.
+- */
+- save_crtcs = kzalloc(dev->mode_config.num_connector *
+- sizeof(struct drm_crtc *), GFP_KERNEL);
++ /* Allocate space for the backup of all (non-pointer) crtc, encoder and
++ * connector data. */
++ save_crtcs = kzalloc(dev->mode_config.num_crtc *
++ sizeof(struct drm_crtc), GFP_KERNEL);
+ if (!save_crtcs)
+ return -ENOMEM;
+
+- save_encoders = kzalloc(dev->mode_config.num_connector *
+- sizeof(struct drm_encoders *), GFP_KERNEL);
++ save_encoders = kzalloc(dev->mode_config.num_encoder *
++ sizeof(struct drm_encoder), GFP_KERNEL);
+ if (!save_encoders) {
+ kfree(save_crtcs);
+ return -ENOMEM;
+ }
+
++ save_connectors = kzalloc(dev->mode_config.num_connector *
++ sizeof(struct drm_connector), GFP_KERNEL);
++ if (!save_connectors) {
++ kfree(save_crtcs);
++ kfree(save_encoders);
++ return -ENOMEM;
++ }
++
++ /* Copy data. Note that driver private data is not affected.
++ * Should anything bad happen only the expected state is
++ * restored, not the drivers personal bookkeeping.
++ */
++ count = 0;
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ save_crtcs[count++] = *crtc;
++ }
++
++ count = 0;
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ save_encoders[count++] = *encoder;
++ }
++
++ count = 0;
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ save_connectors[count++] = *connector;
++ }
++
+ /* We should be able to check here if the fb has the same properties
+ * and then just flip_or_move it */
+ if (set->crtc->fb != set->fb) {
+ /* If we have no fb then treat it as a full mode set */
+ if (set->crtc->fb == NULL) {
+- DRM_DEBUG("crtc has no fb, full mode set\n");
++ DRM_DEBUG_KMS("crtc has no fb, full mode set\n");
+ mode_changed = true;
+ } else if (set->fb == NULL) {
+ mode_changed = true;
+@@ -772,7 +847,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ fb_changed = true;
+
+ if (set->mode && !drm_mode_equal(set->mode, &set->crtc->mode)) {
+- DRM_DEBUG("modes are different, full mode set\n");
++ DRM_DEBUG_KMS("modes are different, full mode set\n");
+ drm_mode_debug_printmodeline(&set->crtc->mode);
+ drm_mode_debug_printmodeline(set->mode);
+ mode_changed = true;
+@@ -783,7 +858,6 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+ struct drm_connector_helper_funcs *connector_funcs =
+ connector->helper_private;
+- save_encoders[count++] = connector->encoder;
+ new_encoder = connector->encoder;
+ for (ro = 0; ro < set->num_connectors; ro++) {
+ if (set->connectors[ro] == connector) {
+@@ -798,15 +872,20 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ }
+
+ if (new_encoder != connector->encoder) {
+- DRM_DEBUG("encoder changed, full mode switch\n");
++ DRM_DEBUG_KMS("encoder changed, full mode switch\n");
+ mode_changed = true;
++ /* If the encoder is reused for another connector, then
++ * the appropriate crtc will be set later.
++ */
++ if (connector->encoder)
++ connector->encoder->crtc = NULL;
+ connector->encoder = new_encoder;
+ }
+ }
+
+ if (fail) {
+ ret = -EINVAL;
+- goto fail_no_encoder;
++ goto fail;
+ }
+
+ count = 0;
+@@ -814,8 +893,6 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ if (!connector->encoder)
+ continue;
+
+- save_crtcs[count++] = connector->encoder->crtc;
+-
+ if (connector->encoder->crtc == set->crtc)
+ new_crtc = NULL;
+ else
+@@ -830,14 +907,14 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ if (new_crtc &&
+ !drm_encoder_crtc_ok(connector->encoder, new_crtc)) {
+ ret = -EINVAL;
+- goto fail_set_mode;
++ goto fail;
+ }
+ if (new_crtc != connector->encoder->crtc) {
+- DRM_DEBUG("crtc changed, full mode switch\n");
++ DRM_DEBUG_KMS("crtc changed, full mode switch\n");
+ mode_changed = true;
+ connector->encoder->crtc = new_crtc;
+ }
+- DRM_DEBUG("setting connector %d crtc to %p\n",
++ DRM_DEBUG_KMS("setting connector %d crtc to %p\n",
+ connector->base.id, new_crtc);
+ }
+
+@@ -850,7 +927,8 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ set->crtc->fb = set->fb;
+ set->crtc->enabled = (set->mode != NULL);
+ if (set->mode != NULL) {
+- DRM_DEBUG("attempting to set mode from userspace\n");
++ DRM_DEBUG_KMS("attempting to set mode from"
++ " userspace\n");
+ drm_mode_debug_printmodeline(set->mode);
+ if (!drm_crtc_helper_set_mode(set->crtc, set->mode,
+ set->x, set->y,
+@@ -858,7 +936,7 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ DRM_ERROR("failed to set mode on crtc %p\n",
+ set->crtc);
+ ret = -EINVAL;
+- goto fail_set_mode;
++ goto fail;
+ }
+ /* TODO are these needed? */
+ set->crtc->desired_x = set->x;
+@@ -867,43 +945,50 @@ int drm_crtc_helper_set_config(struct drm_mode_set *set)
+ }
+ drm_helper_disable_unused_functions(dev);
+ } else if (fb_changed) {
++ set->crtc->x = set->x;
++ set->crtc->y = set->y;
++
+ old_fb = set->crtc->fb;
+ if (set->crtc->fb != set->fb)
+ set->crtc->fb = set->fb;
+ ret = crtc_funcs->mode_set_base(set->crtc,
+ set->x, set->y, old_fb);
+ if (ret != 0)
+- goto fail_set_mode;
++ goto fail;
+ }
+
++ kfree(save_connectors);
+ kfree(save_encoders);
+ kfree(save_crtcs);
+ return 0;
+
+-fail_set_mode:
+- set->crtc->enabled = save_enabled;
+- set->crtc->fb = old_fb;
++fail:
++ /* Restore all previous data. */
+ count = 0;
+- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- if (!connector->encoder)
+- continue;
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ *crtc = save_crtcs[count++];
++ }
+
+- connector->encoder->crtc = save_crtcs[count++];
++ count = 0;
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ *encoder = save_encoders[count++];
+ }
+-fail_no_encoder:
+- kfree(save_crtcs);
++
+ count = 0;
+ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- connector->encoder = save_encoders[count++];
++ *connector = save_connectors[count++];
+ }
++
++ kfree(save_connectors);
+ kfree(save_encoders);
++ kfree(save_crtcs);
+ return ret;
+ }
+ EXPORT_SYMBOL(drm_crtc_helper_set_config);
+
+ bool drm_helper_plugged_event(struct drm_device *dev)
+ {
+- DRM_DEBUG("\n");
++ DRM_DEBUG_KMS("\n");
+
+ drm_helper_probe_connector_modes(dev, dev->mode_config.max_width,
+ dev->mode_config.max_height);
+@@ -932,24 +1017,18 @@ bool drm_helper_plugged_event(struct drm_device *dev)
+ */
+ bool drm_helper_initial_config(struct drm_device *dev)
+ {
+- struct drm_connector *connector;
+ int count = 0;
+
++ drm_fb_helper_parse_command_line(dev);
++
+ count = drm_helper_probe_connector_modes(dev,
+ dev->mode_config.max_width,
+ dev->mode_config.max_height);
+
+ /*
+- * None of the available connectors had any modes, so add some
+- * and try to light them up anyway
++ * we shouldn't end up with no modes here.
+ */
+- if (!count) {
+- DRM_ERROR("connectors have no modes, using standard modes\n");
+- list_for_each_entry(connector,
+- &dev->mode_config.connector_list,
+- head)
+- drm_helper_add_std_modes(dev, connector);
+- }
++ WARN(!count, "No connectors reported connected with modes\n");
+
+ drm_setup_crtcs(dev);
+
+diff --git a/drivers/gpu/drm/drm_drv.c b/drivers/gpu/drm/drm_drv.c
+index b39d7bf..a75ca63 100644
+--- a/drivers/gpu/drm/drm_drv.c
++++ b/drivers/gpu/drm/drm_drv.c
+@@ -63,12 +63,12 @@ static struct drm_ioctl_desc drm_ioctls[] = {
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_MAP, drm_getmap, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_CLIENT, drm_getclient, 0),
+ DRM_IOCTL_DEF(DRM_IOCTL_GET_STATS, drm_getstats, 0),
+- DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER|DRM_ROOT_ONLY),
++ DRM_IOCTL_DEF(DRM_IOCTL_SET_VERSION, drm_setversion, DRM_MASTER),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_SET_UNIQUE, drm_setunique, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_BLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_UNBLOCK, drm_noop, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+- DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
++ DRM_IOCTL_DEF(DRM_IOCTL_AUTH_MAGIC, drm_authmagic, DRM_AUTH|DRM_MASTER),
+
+ DRM_IOCTL_DEF(DRM_IOCTL_ADD_MAP, drm_addmap_ioctl, DRM_AUTH|DRM_MASTER|DRM_ROOT_ONLY),
+ DRM_IOCTL_DEF(DRM_IOCTL_RM_MAP, drm_rmmap_ioctl, DRM_AUTH),
+diff --git a/drivers/gpu/drm/drm_edid.c b/drivers/gpu/drm/drm_edid.c
+index 7f2728b..3c0d2b3 100644
+--- a/drivers/gpu/drm/drm_edid.c
++++ b/drivers/gpu/drm/drm_edid.c
+@@ -60,6 +60,12 @@
+ #define EDID_QUIRK_FIRST_DETAILED_PREFERRED (1 << 5)
+ /* use +hsync +vsync for detailed mode */
+ #define EDID_QUIRK_DETAILED_SYNC_PP (1 << 6)
++/* define the number of Extension EDID block */
++#define MAX_EDID_EXT_NUM 4
++
++#define LEVEL_DMT 0
++#define LEVEL_GTF 1
++#define LEVEL_CVT 2
+
+ static struct edid_quirk {
+ char *vendor;
+@@ -103,7 +109,9 @@ static struct edid_quirk {
+
+
+ /* Valid EDID header has these bytes */
+-static u8 edid_header[] = { 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00 };
++static const u8 edid_header[] = {
++ 0x00, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0x00
++};
+
+ /**
+ * edid_is_valid - sanity check EDID data
+@@ -237,39 +245,345 @@ static void edid_fixup_preferred(struct drm_connector *connector,
+ preferred_mode->type |= DRM_MODE_TYPE_PREFERRED;
+ }
+
++/*
++ * Add the Autogenerated from the DMT spec.
++ * This table is copied from xfree86/modes/xf86EdidModes.c.
++ * But the mode with Reduced blank feature is deleted.
++ */
++static struct drm_display_mode drm_dmt_modes[] = {
++ /* 640x350@85Hz */
++ { DRM_MODE("640x350", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
++ 736, 832, 0, 350, 382, 385, 445, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 640x400@85Hz */
++ { DRM_MODE("640x400", DRM_MODE_TYPE_DRIVER, 31500, 640, 672,
++ 736, 832, 0, 400, 401, 404, 445, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 720x400@85Hz */
++ { DRM_MODE("720x400", DRM_MODE_TYPE_DRIVER, 35500, 720, 756,
++ 828, 936, 0, 400, 401, 404, 446, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 640x480@60Hz */
++ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 25175, 640, 656,
++ 752, 800, 0, 480, 489, 492, 525, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 640x480@72Hz */
++ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 664,
++ 704, 832, 0, 480, 489, 492, 520, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 640x480@75Hz */
++ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 31500, 640, 656,
++ 720, 840, 0, 480, 481, 484, 500, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 640x480@85Hz */
++ { DRM_MODE("640x480", DRM_MODE_TYPE_DRIVER, 36000, 640, 696,
++ 752, 832, 0, 480, 481, 484, 509, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 800x600@56Hz */
++ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 36000, 800, 824,
++ 896, 1024, 0, 600, 601, 603, 625, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 800x600@60Hz */
++ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 40000, 800, 840,
++ 968, 1056, 0, 600, 601, 605, 628, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 800x600@72Hz */
++ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 50000, 800, 856,
++ 976, 1040, 0, 600, 637, 643, 666, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 800x600@75Hz */
++ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 49500, 800, 816,
++ 896, 1056, 0, 600, 601, 604, 625, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 800x600@85Hz */
++ { DRM_MODE("800x600", DRM_MODE_TYPE_DRIVER, 56250, 800, 832,
++ 896, 1048, 0, 600, 601, 604, 631, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 848x480@60Hz */
++ { DRM_MODE("848x480", DRM_MODE_TYPE_DRIVER, 33750, 848, 864,
++ 976, 1088, 0, 480, 486, 494, 517, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1024x768@43Hz, interlace */
++ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 44900, 1024, 1032,
++ 1208, 1264, 0, 768, 768, 772, 817, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC |
++ DRM_MODE_FLAG_INTERLACE) },
++ /* 1024x768@60Hz */
++ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 65000, 1024, 1048,
++ 1184, 1344, 0, 768, 771, 777, 806, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 1024x768@70Hz */
++ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 75000, 1024, 1048,
++ 1184, 1328, 0, 768, 771, 777, 806, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 1024x768@75Hz */
++ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 78750, 1024, 1040,
++ 1136, 1312, 0, 768, 769, 772, 800, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1024x768@85Hz */
++ { DRM_MODE("1024x768", DRM_MODE_TYPE_DRIVER, 94500, 1024, 1072,
++ 1072, 1376, 0, 768, 769, 772, 808, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1152x864@75Hz */
++ { DRM_MODE("1152x864", DRM_MODE_TYPE_DRIVER, 108000, 1152, 1216,
++ 1344, 1600, 0, 864, 865, 868, 900, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x768@60Hz */
++ { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 79500, 1280, 1344,
++ 1472, 1664, 0, 768, 771, 778, 798, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x768@75Hz */
++ { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 102250, 1280, 1360,
++ 1488, 1696, 0, 768, 771, 778, 805, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 1280x768@85Hz */
++ { DRM_MODE("1280x768", DRM_MODE_TYPE_DRIVER, 117500, 1280, 1360,
++ 1496, 1712, 0, 768, 771, 778, 809, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x800@60Hz */
++ { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 83500, 1280, 1352,
++ 1480, 1680, 0, 800, 803, 809, 831, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_NVSYNC) },
++ /* 1280x800@75Hz */
++ { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 106500, 1280, 1360,
++ 1488, 1696, 0, 800, 803, 809, 838, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x800@85Hz */
++ { DRM_MODE("1280x800", DRM_MODE_TYPE_DRIVER, 122500, 1280, 1360,
++ 1496, 1712, 0, 800, 803, 809, 843, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x960@60Hz */
++ { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1376,
++ 1488, 1800, 0, 960, 961, 964, 1000, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x960@85Hz */
++ { DRM_MODE("1280x960", DRM_MODE_TYPE_DRIVER, 148500, 1280, 1344,
++ 1504, 1728, 0, 960, 961, 964, 1011, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x1024@60Hz */
++ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 108000, 1280, 1328,
++ 1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x1024@75Hz */
++ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 135000, 1280, 1296,
++ 1440, 1688, 0, 1024, 1025, 1028, 1066, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1280x1024@85Hz */
++ { DRM_MODE("1280x1024", DRM_MODE_TYPE_DRIVER, 157500, 1280, 1344,
++ 1504, 1728, 0, 1024, 1025, 1028, 1072, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1360x768@60Hz */
++ { DRM_MODE("1360x768", DRM_MODE_TYPE_DRIVER, 85500, 1360, 1424,
++ 1536, 1792, 0, 768, 771, 777, 795, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1440x1050@60Hz */
++ { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 121750, 1400, 1488,
++ 1632, 1864, 0, 1050, 1053, 1057, 1089, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1440x1050@75Hz */
++ { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 156000, 1400, 1504,
++ 1648, 1896, 0, 1050, 1053, 1057, 1099, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1440x1050@85Hz */
++ { DRM_MODE("1400x1050", DRM_MODE_TYPE_DRIVER, 179500, 1400, 1504,
++ 1656, 1912, 0, 1050, 1053, 1057, 1105, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1440x900@60Hz */
++ { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 106500, 1440, 1520,
++ 1672, 1904, 0, 900, 903, 909, 934, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1440x900@75Hz */
++ { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 136750, 1440, 1536,
++ 1688, 1936, 0, 900, 903, 909, 942, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1440x900@85Hz */
++ { DRM_MODE("1440x900", DRM_MODE_TYPE_DRIVER, 157000, 1440, 1544,
++ 1696, 1952, 0, 900, 903, 909, 948, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1600x1200@60Hz */
++ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 162000, 1600, 1664,
++ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1600x1200@65Hz */
++ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 175500, 1600, 1664,
++ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1600x1200@70Hz */
++ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 189000, 1600, 1664,
++ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1600x1200@75Hz */
++ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 2025000, 1600, 1664,
++ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1600x1200@85Hz */
++ { DRM_MODE("1600x1200", DRM_MODE_TYPE_DRIVER, 229500, 1600, 1664,
++ 1856, 2160, 0, 1200, 1201, 1204, 1250, 0,
++ DRM_MODE_FLAG_PHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1680x1050@60Hz */
++ { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 146250, 1680, 1784,
++ 1960, 2240, 0, 1050, 1053, 1059, 1089, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1680x1050@75Hz */
++ { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 187000, 1680, 1800,
++ 1976, 2272, 0, 1050, 1053, 1059, 1099, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1680x1050@85Hz */
++ { DRM_MODE("1680x1050", DRM_MODE_TYPE_DRIVER, 214750, 1680, 1808,
++ 1984, 2288, 0, 1050, 1053, 1059, 1105, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1792x1344@60Hz */
++ { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 204750, 1792, 1920,
++ 2120, 2448, 0, 1344, 1345, 1348, 1394, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1729x1344@75Hz */
++ { DRM_MODE("1792x1344", DRM_MODE_TYPE_DRIVER, 261000, 1792, 1888,
++ 2104, 2456, 0, 1344, 1345, 1348, 1417, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1853x1392@60Hz */
++ { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 218250, 1856, 1952,
++ 2176, 2528, 0, 1392, 1393, 1396, 1439, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1856x1392@75Hz */
++ { DRM_MODE("1856x1392", DRM_MODE_TYPE_DRIVER, 288000, 1856, 1984,
++ 2208, 2560, 0, 1392, 1395, 1399, 1500, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1920x1200@60Hz */
++ { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 193250, 1920, 2056,
++ 2256, 2592, 0, 1200, 1203, 1209, 1245, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1920x1200@75Hz */
++ { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 245250, 1920, 2056,
++ 2264, 2608, 0, 1200, 1203, 1209, 1255, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1920x1200@85Hz */
++ { DRM_MODE("1920x1200", DRM_MODE_TYPE_DRIVER, 281250, 1920, 2064,
++ 2272, 2624, 0, 1200, 1203, 1209, 1262, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1920x1440@60Hz */
++ { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 234000, 1920, 2048,
++ 2256, 2600, 0, 1440, 1441, 1444, 1500, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 1920x1440@75Hz */
++ { DRM_MODE("1920x1440", DRM_MODE_TYPE_DRIVER, 297000, 1920, 2064,
++ 2288, 2640, 0, 1440, 1441, 1444, 1500, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 2560x1600@60Hz */
++ { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 348500, 2560, 2752,
++ 3032, 3504, 0, 1600, 1603, 1609, 1658, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 2560x1600@75HZ */
++ { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 443250, 2560, 2768,
++ 3048, 3536, 0, 1600, 1603, 1609, 1672, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++ /* 2560x1600@85HZ */
++ { DRM_MODE("2560x1600", DRM_MODE_TYPE_DRIVER, 505250, 2560, 2768,
++ 3048, 3536, 0, 1600, 1603, 1609, 1682, 0,
++ DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC) },
++};
++
++static struct drm_display_mode *drm_find_dmt(struct drm_device *dev,
++ int hsize, int vsize, int fresh)
++{
++ int i, count;
++ struct drm_display_mode *ptr, *mode;
++
++ count = sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
++ mode = NULL;
++ for (i = 0; i < count; i++) {
++ ptr = &drm_dmt_modes[i];
++ if (hsize == ptr->hdisplay &&
++ vsize == ptr->vdisplay &&
++ fresh == drm_mode_vrefresh(ptr)) {
++ /* get the expected default mode */
++ mode = drm_mode_duplicate(dev, ptr);
++ break;
++ }
++ }
++ return mode;
++}
++
++/*
++ * 0 is reserved. The spec says 0x01 fill for unused timings. Some old
++ * monitors fill with ascii space (0x20) instead.
++ */
++static int
++bad_std_timing(u8 a, u8 b)
++{
++ return (a == 0x00 && b == 0x00) ||
++ (a == 0x01 && b == 0x01) ||
++ (a == 0x20 && b == 0x20);
++}
++
+ /**
+ * drm_mode_std - convert standard mode info (width, height, refresh) into mode
+ * @t: standard timing params
++ * @timing_level: standard timing level
+ *
+ * Take the standard timing params (in this case width, aspect, and refresh)
+- * and convert them into a real mode using CVT.
++ * and convert them into a real mode using CVT/GTF/DMT.
+ *
+ * Punts for now, but should eventually use the FB layer's CVT based mode
+ * generation code.
+ */
+ struct drm_display_mode *drm_mode_std(struct drm_device *dev,
+- struct std_timing *t)
++ struct std_timing *t,
++ int revision,
++ int timing_level)
+ {
+ struct drm_display_mode *mode;
+- int hsize = t->hsize * 8 + 248, vsize;
++ int hsize, vsize;
++ int vrefresh_rate;
+ unsigned aspect_ratio = (t->vfreq_aspect & EDID_TIMING_ASPECT_MASK)
+ >> EDID_TIMING_ASPECT_SHIFT;
++ unsigned vfreq = (t->vfreq_aspect & EDID_TIMING_VFREQ_MASK)
++ >> EDID_TIMING_VFREQ_SHIFT;
+
+- mode = drm_mode_create(dev);
+- if (!mode)
++ if (bad_std_timing(t->hsize, t->vfreq_aspect))
+ return NULL;
+
+- if (aspect_ratio == 0)
+- vsize = (hsize * 10) / 16;
+- else if (aspect_ratio == 1)
++ /* According to the EDID spec, the hdisplay = hsize * 8 + 248 */
++ hsize = t->hsize * 8 + 248;
++ /* vrefresh_rate = vfreq + 60 */
++ vrefresh_rate = vfreq + 60;
++ /* the vdisplay is calculated based on the aspect ratio */
++ if (aspect_ratio == 0) {
++ if (revision < 3)
++ vsize = hsize;
++ else
++ vsize = (hsize * 10) / 16;
++ } else if (aspect_ratio == 1)
+ vsize = (hsize * 3) / 4;
+ else if (aspect_ratio == 2)
+ vsize = (hsize * 4) / 5;
+ else
+ vsize = (hsize * 9) / 16;
+-
+- drm_mode_set_name(mode);
+-
++ /* HDTV hack */
++ if (hsize == 1360 && vsize == 765 && vrefresh_rate == 60) {
++ mode = drm_cvt_mode(dev, hsize, vsize, vrefresh_rate, 0, 0,
++ false);
++ mode->hdisplay = 1366;
++ mode->vsync_start = mode->vsync_start - 1;
++ mode->vsync_end = mode->vsync_end - 1;
++ return mode;
++ }
++ mode = NULL;
++ /* check whether it can be found in default mode table */
++ mode = drm_find_dmt(dev, hsize, vsize, vrefresh_rate);
++ if (mode)
++ return mode;
++
++ switch (timing_level) {
++ case LEVEL_DMT:
++ break;
++ case LEVEL_GTF:
++ mode = drm_gtf_mode(dev, hsize, vsize, vrefresh_rate, 0, 0);
++ break;
++ case LEVEL_CVT:
++ mode = drm_cvt_mode(dev, hsize, vsize, vrefresh_rate, 0, 0,
++ false);
++ break;
++ }
+ return mode;
+ }
+
+@@ -451,6 +765,19 @@ static int add_established_modes(struct drm_connector *connector, struct edid *e
+
+ return modes;
+ }
++/**
++ * stanard_timing_level - get std. timing level(CVT/GTF/DMT)
++ * @edid: EDID block to scan
++ */
++static int standard_timing_level(struct edid *edid)
++{
++ if (edid->revision >= 2) {
++ if (edid->revision >= 4 && (edid->features & DRM_EDID_FEATURE_DEFAULT_GTF))
++ return LEVEL_CVT;
++ return LEVEL_GTF;
++ }
++ return LEVEL_DMT;
++}
+
+ /**
+ * add_standard_modes - get std. modes from EDID and add them
+@@ -463,6 +790,9 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
+ {
+ struct drm_device *dev = connector->dev;
+ int i, modes = 0;
++ int timing_level;
++
++ timing_level = standard_timing_level(edid);
+
+ for (i = 0; i < EDID_STD_TIMINGS; i++) {
+ struct std_timing *t = &edid->standard_timings[i];
+@@ -472,7 +802,8 @@ static int add_standard_modes(struct drm_connector *connector, struct edid *edid
+ if (t->hsize == 1 && t->vfreq_aspect == 1)
+ continue;
+
+- newmode = drm_mode_std(dev, &edid->standard_timings[i]);
++ newmode = drm_mode_std(dev, &edid->standard_timings[i],
++ edid->revision, timing_level);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ modes++;
+@@ -496,6 +827,9 @@ static int add_detailed_info(struct drm_connector *connector,
+ {
+ struct drm_device *dev = connector->dev;
+ int i, j, modes = 0;
++ int timing_level;
++
++ timing_level = standard_timing_level(edid);
+
+ for (i = 0; i < EDID_DETAILED_TIMINGS; i++) {
+ struct detailed_timing *timing = &edid->detailed_timings[i];
+@@ -519,13 +853,14 @@ static int add_detailed_info(struct drm_connector *connector,
+ case EDID_DETAIL_MONITOR_CPDATA:
+ break;
+ case EDID_DETAIL_STD_MODES:
+- /* Five modes per detailed section */
+- for (j = 0; j < 5; i++) {
++ for (j = 0; j < 6; i++) {
+ struct std_timing *std;
+ struct drm_display_mode *newmode;
+
+ std = &data->data.timings[j];
+- newmode = drm_mode_std(dev, std);
++ newmode = drm_mode_std(dev, std,
++ edid->revision,
++ timing_level);
+ if (newmode) {
+ drm_mode_probed_add(connector, newmode);
+ modes++;
+@@ -551,6 +886,124 @@ static int add_detailed_info(struct drm_connector *connector,
+
+ return modes;
+ }
++/**
++ * add_detailed_mode_eedid - get detailed mode info from addtional timing
++ * EDID block
++ * @connector: attached connector
++ * @edid: EDID block to scan(It is only to get addtional timing EDID block)
++ * @quirks: quirks to apply
++ *
++ * Some of the detailed timing sections may contain mode information. Grab
++ * it and add it to the list.
++ */
++static int add_detailed_info_eedid(struct drm_connector *connector,
++ struct edid *edid, u32 quirks)
++{
++ struct drm_device *dev = connector->dev;
++ int i, j, modes = 0;
++ char *edid_ext = NULL;
++ struct detailed_timing *timing;
++ struct detailed_non_pixel *data;
++ struct drm_display_mode *newmode;
++ int edid_ext_num;
++ int start_offset, end_offset;
++ int timing_level;
++
++ if (edid->version == 1 && edid->revision < 3) {
++ /* If the EDID version is less than 1.3, there is no
++ * extension EDID.
++ */
++ return 0;
++ }
++ if (!edid->extensions) {
++ /* if there is no extension EDID, it is unnecessary to
++ * parse the E-EDID to get detailed info
++ */
++ return 0;
++ }
++
++ /* Chose real EDID extension number */
++ edid_ext_num = edid->extensions > MAX_EDID_EXT_NUM ?
++ MAX_EDID_EXT_NUM : edid->extensions;
++
++ /* Find CEA extension */
++ for (i = 0; i < edid_ext_num; i++) {
++ edid_ext = (char *)edid + EDID_LENGTH * (i + 1);
++ /* This block is CEA extension */
++ if (edid_ext[0] == 0x02)
++ break;
++ }
++
++ if (i == edid_ext_num) {
++ /* if there is no additional timing EDID block, return */
++ return 0;
++ }
++
++ /* Get the start offset of detailed timing block */
++ start_offset = edid_ext[2];
++ if (start_offset == 0) {
++ /* If the start_offset is zero, it means that neither detailed
++ * info nor data block exist. In such case it is also
++ * unnecessary to parse the detailed timing info.
++ */
++ return 0;
++ }
++
++ timing_level = standard_timing_level(edid);
++ end_offset = EDID_LENGTH;
++ end_offset -= sizeof(struct detailed_timing);
++ for (i = start_offset; i < end_offset;
++ i += sizeof(struct detailed_timing)) {
++ timing = (struct detailed_timing *)(edid_ext + i);
++ data = &timing->data.other_data;
++ /* Detailed mode timing */
++ if (timing->pixel_clock) {
++ newmode = drm_mode_detailed(dev, edid, timing, quirks);
++ if (!newmode)
++ continue;
++
++ drm_mode_probed_add(connector, newmode);
++
++ modes++;
++ continue;
++ }
++
++ /* Other timing or info */
++ switch (data->type) {
++ case EDID_DETAIL_MONITOR_SERIAL:
++ break;
++ case EDID_DETAIL_MONITOR_STRING:
++ break;
++ case EDID_DETAIL_MONITOR_RANGE:
++ /* Get monitor range data */
++ break;
++ case EDID_DETAIL_MONITOR_NAME:
++ break;
++ case EDID_DETAIL_MONITOR_CPDATA:
++ break;
++ case EDID_DETAIL_STD_MODES:
++ /* Five modes per detailed section */
++ for (j = 0; j < 5; i++) {
++ struct std_timing *std;
++ struct drm_display_mode *newmode;
++
++ std = &data->data.timings[j];
++ newmode = drm_mode_std(dev, std,
++ edid->revision,
++ timing_level);
++ if (newmode) {
++ drm_mode_probed_add(connector, newmode);
++ modes++;
++ }
++ }
++ break;
++ default:
++ break;
++ }
++ }
++
++ return modes;
++}
+
+ #define DDC_ADDR 0x50
+ /**
+@@ -584,7 +1037,6 @@ int drm_do_probe_ddc_edid(struct i2c_adapter *adapter,
+ if (i2c_transfer(adapter, msgs, 2) == 2)
+ return 0;
+
+- dev_info(&adapter->dev, "unable to read EDID block.\n");
+ return -1;
+ }
+ EXPORT_SYMBOL(drm_do_probe_ddc_edid);
+@@ -597,8 +1049,6 @@ static int drm_ddc_read_edid(struct drm_connector *connector,
+
+ ret = drm_do_probe_ddc_edid(adapter, buf, len);
+ if (ret != 0) {
+- dev_info(&connector->dev->pdev->dev, "%s: no EDID data\n",
+- drm_get_connector_name(connector));
+ goto end;
+ }
+ if (!edid_is_valid((struct edid *)buf)) {
+@@ -610,7 +1060,6 @@ end:
+ return ret;
+ }
+
+-#define MAX_EDID_EXT_NUM 4
+ /**
+ * drm_get_edid - get EDID data, if available
+ * @connector: connector we're probing
+@@ -763,6 +1212,7 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
+ num_modes += add_established_modes(connector, edid);
+ num_modes += add_standard_modes(connector, edid);
+ num_modes += add_detailed_info(connector, edid, quirks);
++ num_modes += add_detailed_info_eedid(connector, edid, quirks);
+
+ if (quirks & (EDID_QUIRK_PREFER_LARGE_60 | EDID_QUIRK_PREFER_LARGE_75))
+ edid_fixup_preferred(connector, quirks);
+@@ -788,3 +1238,49 @@ int drm_add_edid_modes(struct drm_connector *connector, struct edid *edid)
+ return num_modes;
+ }
+ EXPORT_SYMBOL(drm_add_edid_modes);
++
++/**
++ * drm_add_modes_noedid - add modes for the connectors without EDID
++ * @connector: connector we're probing
++ * @hdisplay: the horizontal display limit
++ * @vdisplay: the vertical display limit
++ *
++ * Add the specified modes to the connector's mode list. Only when the
++ * hdisplay/vdisplay is not beyond the given limit, it will be added.
++ *
++ * Return number of modes added or 0 if we couldn't find any.
++ */
++int drm_add_modes_noedid(struct drm_connector *connector,
++ int hdisplay, int vdisplay)
++{
++ int i, count, num_modes = 0;
++ struct drm_display_mode *mode, *ptr;
++ struct drm_device *dev = connector->dev;
++
++ count = sizeof(drm_dmt_modes) / sizeof(struct drm_display_mode);
++ if (hdisplay < 0)
++ hdisplay = 0;
++ if (vdisplay < 0)
++ vdisplay = 0;
++
++ for (i = 0; i < count; i++) {
++ ptr = &drm_dmt_modes[i];
++ if (hdisplay && vdisplay) {
++ /*
++ * Only when two are valid, they will be used to check
++ * whether the mode should be added to the mode list of
++ * the connector.
++ */
++ if (ptr->hdisplay > hdisplay ||
++ ptr->vdisplay > vdisplay)
++ continue;
++ }
++ mode = drm_mode_duplicate(dev, ptr);
++ if (mode) {
++ drm_mode_probed_add(connector, mode);
++ num_modes++;
++ }
++ }
++ return num_modes;
++}
++EXPORT_SYMBOL(drm_add_modes_noedid);
+diff --git a/drivers/gpu/drm/drm_encoder_slave.c b/drivers/gpu/drm/drm_encoder_slave.c
+new file mode 100644
+index 0000000..f018469
+--- /dev/null
++++ b/drivers/gpu/drm/drm_encoder_slave.c
+@@ -0,0 +1,116 @@
++/*
++ * Copyright (C) 2009 Francisco Jerez.
++ * All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial
++ * portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
++ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++
++#include "drm_encoder_slave.h"
++
++/**
++ * drm_i2c_encoder_init - Initialize an I2C slave encoder
++ * @dev: DRM device.
++ * @encoder: Encoder to be attached to the I2C device. You aren't
++ * required to have called drm_encoder_init() before.
++ * @adap: I2C adapter that will be used to communicate with
++ * the device.
++ * @info: Information that will be used to create the I2C device.
++ * Required fields are @addr and @type.
++ *
++ * Create an I2C device on the specified bus (the module containing its
++ * driver is transparently loaded) and attach it to the specified
++ * &drm_encoder_slave. The @slave_funcs field will be initialized with
++ * the hooks provided by the slave driver.
++ *
++ * Returns 0 on success or a negative errno on failure, in particular,
++ * -ENODEV is returned when no matching driver is found.
++ */
++int drm_i2c_encoder_init(struct drm_device *dev,
++ struct drm_encoder_slave *encoder,
++ struct i2c_adapter *adap,
++ const struct i2c_board_info *info)
++{
++ char modalias[sizeof(I2C_MODULE_PREFIX)
++ + I2C_NAME_SIZE];
++ struct module *module = NULL;
++ struct i2c_client *client;
++ struct drm_i2c_encoder_driver *encoder_drv;
++ int err = 0;
++
++ snprintf(modalias, sizeof(modalias),
++ "%s%s", I2C_MODULE_PREFIX, info->type);
++ request_module(modalias);
++
++ client = i2c_new_device(adap, info);
++ if (!client) {
++ err = -ENOMEM;
++ goto fail;
++ }
++
++ if (!client->driver) {
++ err = -ENODEV;
++ goto fail_unregister;
++ }
++
++ module = client->driver->driver.owner;
++ if (!try_module_get(module)) {
++ err = -ENODEV;
++ goto fail_unregister;
++ }
++
++ encoder->bus_priv = client;
++
++ encoder_drv = to_drm_i2c_encoder_driver(client->driver);
++
++ err = encoder_drv->encoder_init(client, dev, encoder);
++ if (err)
++ goto fail_unregister;
++
++ return 0;
++
++fail_unregister:
++ i2c_unregister_device(client);
++ module_put(module);
++fail:
++ return err;
++}
++EXPORT_SYMBOL(drm_i2c_encoder_init);
++
++/**
++ * drm_i2c_encoder_destroy - Unregister the I2C device backing an encoder
++ * @drm_encoder: Encoder to be unregistered.
++ *
++ * This should be called from the @destroy method of an I2C slave
++ * encoder driver once I2C access is no longer needed.
++ */
++void drm_i2c_encoder_destroy(struct drm_encoder *drm_encoder)
++{
++ struct drm_encoder_slave *encoder = to_encoder_slave(drm_encoder);
++ struct i2c_client *client = drm_i2c_encoder_get_client(drm_encoder);
++ struct module *module = client->driver->driver.owner;
++
++ i2c_unregister_device(client);
++ encoder->bus_priv = NULL;
++
++ module_put(module);
++}
++EXPORT_SYMBOL(drm_i2c_encoder_destroy);
+diff --git a/drivers/gpu/drm/drm_fb_helper.c b/drivers/gpu/drm/drm_fb_helper.c
+new file mode 100644
+index 0000000..819ddcb
+--- /dev/null
++++ b/drivers/gpu/drm/drm_fb_helper.c
+@@ -0,0 +1,940 @@
++/*
++ * Copyright (c) 2006-2009 Red Hat Inc.
++ * Copyright (c) 2006-2008 Intel Corporation
++ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
++ *
++ * DRM framebuffer helper functions
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the name of the copyright holders not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission. The copyright holders make no representations
++ * about the suitability of this software for any purpose. It is provided "as
++ * is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
++ * OF THIS SOFTWARE.
++ *
++ * Authors:
++ * Dave Airlie <airlied@linux.ie>
++ * Jesse Barnes <jesse.barnes@intel.com>
++ */
++#include <linux/sysrq.h>
++#include <linux/fb.h>
++#include "drmP.h"
++#include "drm_crtc.h"
++#include "drm_fb_helper.h"
++#include "drm_crtc_helper.h"
++
++MODULE_AUTHOR("David Airlie, Jesse Barnes");
++MODULE_DESCRIPTION("DRM KMS helper");
++MODULE_LICENSE("GPL and additional rights");
++
++static LIST_HEAD(kernel_fb_helper_list);
++
++int drm_fb_helper_add_connector(struct drm_connector *connector)
++{
++ connector->fb_helper_private = kzalloc(sizeof(struct drm_fb_helper_connector), GFP_KERNEL);
++ if (!connector->fb_helper_private)
++ return -ENOMEM;
++
++ return 0;
++}
++EXPORT_SYMBOL(drm_fb_helper_add_connector);
++
++static int my_atoi(const char *name)
++{
++ int val = 0;
++
++ for (;; name++) {
++ switch (*name) {
++ case '0' ... '9':
++ val = 10*val+(*name-'0');
++ break;
++ default:
++ return val;
++ }
++ }
++}
++
++/**
++ * drm_fb_helper_connector_parse_command_line - parse command line for connector
++ * @connector - connector to parse line for
++ * @mode_option - per connector mode option
++ *
++ * This parses the connector specific then generic command lines for
++ * modes and options to configure the connector.
++ *
++ * This uses the same parameters as the fb modedb.c, except for extra
++ * <xres>x<yres>[M][R][-<bpp>][@<refresh>][i][m][eDd]
++ *
++ * enable/enable Digital/disable bit at the end
++ */
++static bool drm_fb_helper_connector_parse_command_line(struct drm_connector *connector,
++ const char *mode_option)
++{
++ const char *name;
++ unsigned int namelen;
++ int res_specified = 0, bpp_specified = 0, refresh_specified = 0;
++ unsigned int xres = 0, yres = 0, bpp = 32, refresh = 0;
++ int yres_specified = 0, cvt = 0, rb = 0, interlace = 0, margins = 0;
++ int i;
++ enum drm_connector_force force = DRM_FORCE_UNSPECIFIED;
++ struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
++ struct drm_fb_helper_cmdline_mode *cmdline_mode;
++
++ if (!fb_help_conn)
++ return false;
++
++ cmdline_mode = &fb_help_conn->cmdline_mode;
++ if (!mode_option)
++ mode_option = fb_mode_option;
++
++ if (!mode_option) {
++ cmdline_mode->specified = false;
++ return false;
++ }
++
++ name = mode_option;
++ namelen = strlen(name);
++ for (i = namelen-1; i >= 0; i--) {
++ switch (name[i]) {
++ case '@':
++ namelen = i;
++ if (!refresh_specified && !bpp_specified &&
++ !yres_specified) {
++ refresh = my_atoi(&name[i+1]);
++ refresh_specified = 1;
++ if (cvt || rb)
++ cvt = 0;
++ } else
++ goto done;
++ break;
++ case '-':
++ namelen = i;
++ if (!bpp_specified && !yres_specified) {
++ bpp = my_atoi(&name[i+1]);
++ bpp_specified = 1;
++ if (cvt || rb)
++ cvt = 0;
++ } else
++ goto done;
++ break;
++ case 'x':
++ if (!yres_specified) {
++ yres = my_atoi(&name[i+1]);
++ yres_specified = 1;
++ } else
++ goto done;
++ case '0' ... '9':
++ break;
++ case 'M':
++ if (!yres_specified)
++ cvt = 1;
++ break;
++ case 'R':
++ if (!cvt)
++ rb = 1;
++ break;
++ case 'm':
++ if (!cvt)
++ margins = 1;
++ break;
++ case 'i':
++ if (!cvt)
++ interlace = 1;
++ break;
++ case 'e':
++ force = DRM_FORCE_ON;
++ break;
++ case 'D':
++ if ((connector->connector_type != DRM_MODE_CONNECTOR_DVII) ||
++ (connector->connector_type != DRM_MODE_CONNECTOR_HDMIB))
++ force = DRM_FORCE_ON;
++ else
++ force = DRM_FORCE_ON_DIGITAL;
++ break;
++ case 'd':
++ force = DRM_FORCE_OFF;
++ break;
++ default:
++ goto done;
++ }
++ }
++ if (i < 0 && yres_specified) {
++ xres = my_atoi(name);
++ res_specified = 1;
++ }
++done:
++
++ DRM_DEBUG_KMS("cmdline mode for connector %s %dx%d@%dHz%s%s%s\n",
++ drm_get_connector_name(connector), xres, yres,
++ (refresh) ? refresh : 60, (rb) ? " reduced blanking" :
++ "", (margins) ? " with margins" : "", (interlace) ?
++ " interlaced" : "");
++
++ if (force) {
++ const char *s;
++ switch (force) {
++ case DRM_FORCE_OFF: s = "OFF"; break;
++ case DRM_FORCE_ON_DIGITAL: s = "ON - dig"; break;
++ default:
++ case DRM_FORCE_ON: s = "ON"; break;
++ }
++
++ DRM_INFO("forcing %s connector %s\n",
++ drm_get_connector_name(connector), s);
++ connector->force = force;
++ }
++
++ if (res_specified) {
++ cmdline_mode->specified = true;
++ cmdline_mode->xres = xres;
++ cmdline_mode->yres = yres;
++ }
++
++ if (refresh_specified) {
++ cmdline_mode->refresh_specified = true;
++ cmdline_mode->refresh = refresh;
++ }
++
++ if (bpp_specified) {
++ cmdline_mode->bpp_specified = true;
++ cmdline_mode->bpp = bpp;
++ }
++ cmdline_mode->rb = rb ? true : false;
++ cmdline_mode->cvt = cvt ? true : false;
++ cmdline_mode->interlace = interlace ? true : false;
++
++ return true;
++}
++
++int drm_fb_helper_parse_command_line(struct drm_device *dev)
++{
++ struct drm_connector *connector;
++
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ char *option = NULL;
++
++ /* do something on return - turn off connector maybe */
++ if (fb_get_options(drm_get_connector_name(connector), &option))
++ continue;
++
++ drm_fb_helper_connector_parse_command_line(connector, option);
++ }
++ return 0;
++}
++
++bool drm_fb_helper_force_kernel_mode(void)
++{
++ int i = 0;
++ bool ret, error = false;
++ struct drm_fb_helper *helper;
++
++ if (list_empty(&kernel_fb_helper_list))
++ return false;
++
++ list_for_each_entry(helper, &kernel_fb_helper_list, kernel_fb_list) {
++ for (i = 0; i < helper->crtc_count; i++) {
++ struct drm_mode_set *mode_set = &helper->crtc_info[i].mode_set;
++ ret = drm_crtc_helper_set_config(mode_set);
++ if (ret)
++ error = true;
++ }
++ }
++ return error;
++}
++
++int drm_fb_helper_panic(struct notifier_block *n, unsigned long ununsed,
++ void *panic_str)
++{
++ DRM_ERROR("panic occurred, switching back to text console\n");
++ return drm_fb_helper_force_kernel_mode();
++ return 0;
++}
++EXPORT_SYMBOL(drm_fb_helper_panic);
++
++static struct notifier_block paniced = {
++ .notifier_call = drm_fb_helper_panic,
++};
++
++/**
++ * drm_fb_helper_restore - restore the framebuffer console (kernel) config
++ *
++ * Restore's the kernel's fbcon mode, used for lastclose & panic paths.
++ */
++void drm_fb_helper_restore(void)
++{
++ bool ret;
++ ret = drm_fb_helper_force_kernel_mode();
++ if (ret == true)
++ DRM_ERROR("Failed to restore crtc configuration\n");
++}
++EXPORT_SYMBOL(drm_fb_helper_restore);
++
++#ifdef CONFIG_MAGIC_SYSRQ
++static void drm_fb_helper_restore_work_fn(struct work_struct *ignored)
++{
++ drm_fb_helper_restore();
++}
++static DECLARE_WORK(drm_fb_helper_restore_work, drm_fb_helper_restore_work_fn);
++
++static void drm_fb_helper_sysrq(int dummy1, struct tty_struct *dummy3)
++{
++ schedule_work(&drm_fb_helper_restore_work);
++}
++
++static struct sysrq_key_op sysrq_drm_fb_helper_restore_op = {
++ .handler = drm_fb_helper_sysrq,
++ .help_msg = "force-fb(V)",
++ .action_msg = "Restore framebuffer console",
++};
++#endif
++
++static void drm_fb_helper_on(struct fb_info *info)
++{
++ struct drm_fb_helper *fb_helper = info->par;
++ struct drm_device *dev = fb_helper->dev;
++ struct drm_crtc *crtc;
++ struct drm_encoder *encoder;
++ int i;
++
++ /*
++ * For each CRTC in this fb, turn the crtc on then,
++ * find all associated encoders and turn them on.
++ */
++ for (i = 0; i < fb_helper->crtc_count; i++) {
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct drm_crtc_helper_funcs *crtc_funcs =
++ crtc->helper_private;
++
++ /* Only mess with CRTCs in this fb */
++ if (crtc->base.id != fb_helper->crtc_info[i].crtc_id ||
++ !crtc->enabled)
++ continue;
++
++ mutex_lock(&dev->mode_config.mutex);
++ crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
++ mutex_unlock(&dev->mode_config.mutex);
++
++ /* Found a CRTC on this fb, now find encoders */
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ if (encoder->crtc == crtc) {
++ struct drm_encoder_helper_funcs *encoder_funcs;
++
++ encoder_funcs = encoder->helper_private;
++ mutex_lock(&dev->mode_config.mutex);
++ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
++ mutex_unlock(&dev->mode_config.mutex);
++ }
++ }
++ }
++ }
++}
++
++static void drm_fb_helper_off(struct fb_info *info, int dpms_mode)
++{
++ struct drm_fb_helper *fb_helper = info->par;
++ struct drm_device *dev = fb_helper->dev;
++ struct drm_crtc *crtc;
++ struct drm_encoder *encoder;
++ int i;
++
++ /*
++ * For each CRTC in this fb, find all associated encoders
++ * and turn them off, then turn off the CRTC.
++ */
++ for (i = 0; i < fb_helper->crtc_count; i++) {
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct drm_crtc_helper_funcs *crtc_funcs =
++ crtc->helper_private;
++
++ /* Only mess with CRTCs in this fb */
++ if (crtc->base.id != fb_helper->crtc_info[i].crtc_id ||
++ !crtc->enabled)
++ continue;
++
++ /* Found a CRTC on this fb, now find encoders */
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ if (encoder->crtc == crtc) {
++ struct drm_encoder_helper_funcs *encoder_funcs;
++
++ encoder_funcs = encoder->helper_private;
++ mutex_lock(&dev->mode_config.mutex);
++ encoder_funcs->dpms(encoder, dpms_mode);
++ mutex_unlock(&dev->mode_config.mutex);
++ }
++ }
++ if (dpms_mode == DRM_MODE_DPMS_OFF) {
++ mutex_lock(&dev->mode_config.mutex);
++ crtc_funcs->dpms(crtc, dpms_mode);
++ mutex_unlock(&dev->mode_config.mutex);
++ }
++ }
++ }
++}
++
++int drm_fb_helper_blank(int blank, struct fb_info *info)
++{
++ switch (blank) {
++ case FB_BLANK_UNBLANK:
++ drm_fb_helper_on(info);
++ break;
++ case FB_BLANK_NORMAL:
++ drm_fb_helper_off(info, DRM_MODE_DPMS_STANDBY);
++ break;
++ case FB_BLANK_HSYNC_SUSPEND:
++ drm_fb_helper_off(info, DRM_MODE_DPMS_STANDBY);
++ break;
++ case FB_BLANK_VSYNC_SUSPEND:
++ drm_fb_helper_off(info, DRM_MODE_DPMS_SUSPEND);
++ break;
++ case FB_BLANK_POWERDOWN:
++ drm_fb_helper_off(info, DRM_MODE_DPMS_OFF);
++ break;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(drm_fb_helper_blank);
++
++static void drm_fb_helper_crtc_free(struct drm_fb_helper *helper)
++{
++ int i;
++
++ for (i = 0; i < helper->crtc_count; i++)
++ kfree(helper->crtc_info[i].mode_set.connectors);
++ kfree(helper->crtc_info);
++}
++
++int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count, int max_conn_count)
++{
++ struct drm_device *dev = helper->dev;
++ struct drm_crtc *crtc;
++ int ret = 0;
++ int i;
++
++ helper->crtc_info = kcalloc(crtc_count, sizeof(struct drm_fb_helper_crtc), GFP_KERNEL);
++ if (!helper->crtc_info)
++ return -ENOMEM;
++
++ helper->crtc_count = crtc_count;
++
++ for (i = 0; i < crtc_count; i++) {
++ helper->crtc_info[i].mode_set.connectors =
++ kcalloc(max_conn_count,
++ sizeof(struct drm_connector *),
++ GFP_KERNEL);
++
++ if (!helper->crtc_info[i].mode_set.connectors) {
++ ret = -ENOMEM;
++ goto out_free;
++ }
++ helper->crtc_info[i].mode_set.num_connectors = 0;
++ }
++
++ i = 0;
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ helper->crtc_info[i].crtc_id = crtc->base.id;
++ helper->crtc_info[i].mode_set.crtc = crtc;
++ i++;
++ }
++ helper->conn_limit = max_conn_count;
++ return 0;
++out_free:
++ drm_fb_helper_crtc_free(helper);
++ return -ENOMEM;
++}
++EXPORT_SYMBOL(drm_fb_helper_init_crtc_count);
++
++int drm_fb_helper_setcolreg(unsigned regno,
++ unsigned red,
++ unsigned green,
++ unsigned blue,
++ unsigned transp,
++ struct fb_info *info)
++{
++ struct drm_fb_helper *fb_helper = info->par;
++ struct drm_device *dev = fb_helper->dev;
++ struct drm_crtc *crtc;
++ int i;
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ struct drm_framebuffer *fb = fb_helper->fb;
++
++ for (i = 0; i < fb_helper->crtc_count; i++) {
++ if (crtc->base.id == fb_helper->crtc_info[i].crtc_id)
++ break;
++ }
++ if (i == fb_helper->crtc_count)
++ continue;
++
++ if (regno > 255)
++ return 1;
++
++ if (fb->depth == 8) {
++ fb_helper->funcs->gamma_set(crtc, red, green, blue, regno);
++ return 0;
++ }
++
++ if (regno < 16) {
++ switch (fb->depth) {
++ case 15:
++ fb->pseudo_palette[regno] = ((red & 0xf800) >> 1) |
++ ((green & 0xf800) >> 6) |
++ ((blue & 0xf800) >> 11);
++ break;
++ case 16:
++ fb->pseudo_palette[regno] = (red & 0xf800) |
++ ((green & 0xfc00) >> 5) |
++ ((blue & 0xf800) >> 11);
++ break;
++ case 24:
++ case 32:
++ fb->pseudo_palette[regno] =
++ (((red >> 8) & 0xff) << info->var.red.offset) |
++ (((green >> 8) & 0xff) << info->var.green.offset) |
++ (((blue >> 8) & 0xff) << info->var.blue.offset);
++ break;
++ }
++ }
++ }
++ return 0;
++}
++EXPORT_SYMBOL(drm_fb_helper_setcolreg);
++
++int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ struct drm_fb_helper *fb_helper = info->par;
++ struct drm_framebuffer *fb = fb_helper->fb;
++ int depth;
++
++ if (var->pixclock == -1 || !var->pixclock)
++ return -EINVAL;
++
++ /* Need to resize the fb object !!! */
++ if (var->xres > fb->width || var->yres > fb->height) {
++ DRM_ERROR("Requested width/height is greater than current fb "
++ "object %dx%d > %dx%d\n", var->xres, var->yres,
++ fb->width, fb->height);
++ DRM_ERROR("Need resizing code.\n");
++ return -EINVAL;
++ }
++
++ switch (var->bits_per_pixel) {
++ case 16:
++ depth = (var->green.length == 6) ? 16 : 15;
++ break;
++ case 32:
++ depth = (var->transp.length > 0) ? 32 : 24;
++ break;
++ default:
++ depth = var->bits_per_pixel;
++ break;
++ }
++
++ switch (depth) {
++ case 8:
++ var->red.offset = 0;
++ var->green.offset = 0;
++ var->blue.offset = 0;
++ var->red.length = 8;
++ var->green.length = 8;
++ var->blue.length = 8;
++ var->transp.length = 0;
++ var->transp.offset = 0;
++ break;
++ case 15:
++ var->red.offset = 10;
++ var->green.offset = 5;
++ var->blue.offset = 0;
++ var->red.length = 5;
++ var->green.length = 5;
++ var->blue.length = 5;
++ var->transp.length = 1;
++ var->transp.offset = 15;
++ break;
++ case 16:
++ var->red.offset = 11;
++ var->green.offset = 5;
++ var->blue.offset = 0;
++ var->red.length = 5;
++ var->green.length = 6;
++ var->blue.length = 5;
++ var->transp.length = 0;
++ var->transp.offset = 0;
++ break;
++ case 24:
++ var->red.offset = 16;
++ var->green.offset = 8;
++ var->blue.offset = 0;
++ var->red.length = 8;
++ var->green.length = 8;
++ var->blue.length = 8;
++ var->transp.length = 0;
++ var->transp.offset = 0;
++ break;
++ case 32:
++ var->red.offset = 16;
++ var->green.offset = 8;
++ var->blue.offset = 0;
++ var->red.length = 8;
++ var->green.length = 8;
++ var->blue.length = 8;
++ var->transp.length = 8;
++ var->transp.offset = 24;
++ break;
++ default:
++ return -EINVAL;
++ }
++ return 0;
++}
++EXPORT_SYMBOL(drm_fb_helper_check_var);
++
++/* this will let fbcon do the mode init */
++int drm_fb_helper_set_par(struct fb_info *info)
++{
++ struct drm_fb_helper *fb_helper = info->par;
++ struct drm_device *dev = fb_helper->dev;
++ struct fb_var_screeninfo *var = &info->var;
++ struct drm_crtc *crtc;
++ int ret;
++ int i;
++
++ if (var->pixclock != -1) {
++ DRM_ERROR("PIXEL CLCOK SET\n");
++ return -EINVAL;
++ }
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++
++ for (i = 0; i < fb_helper->crtc_count; i++) {
++ if (crtc->base.id == fb_helper->crtc_info[i].crtc_id)
++ break;
++ }
++ if (i == fb_helper->crtc_count)
++ continue;
++
++ if (crtc->fb == fb_helper->crtc_info[i].mode_set.fb) {
++ mutex_lock(&dev->mode_config.mutex);
++ ret = crtc->funcs->set_config(&fb_helper->crtc_info->mode_set);
++ mutex_unlock(&dev->mode_config.mutex);
++ if (ret)
++ return ret;
++ }
++ }
++ return 0;
++}
++EXPORT_SYMBOL(drm_fb_helper_set_par);
++
++int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info)
++{
++ struct drm_fb_helper *fb_helper = info->par;
++ struct drm_device *dev = fb_helper->dev;
++ struct drm_mode_set *modeset;
++ struct drm_crtc *crtc;
++ int ret = 0;
++ int i;
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ for (i = 0; i < fb_helper->crtc_count; i++) {
++ if (crtc->base.id == fb_helper->crtc_info[i].crtc_id)
++ break;
++ }
++
++ if (i == fb_helper->crtc_count)
++ continue;
++
++ modeset = &fb_helper->crtc_info[i].mode_set;
++
++ modeset->x = var->xoffset;
++ modeset->y = var->yoffset;
++
++ if (modeset->num_connectors) {
++ mutex_lock(&dev->mode_config.mutex);
++ ret = crtc->funcs->set_config(modeset);
++ mutex_unlock(&dev->mode_config.mutex);
++ if (!ret) {
++ info->var.xoffset = var->xoffset;
++ info->var.yoffset = var->yoffset;
++ }
++ }
++ }
++ return ret;
++}
++EXPORT_SYMBOL(drm_fb_helper_pan_display);
++
++int drm_fb_helper_single_fb_probe(struct drm_device *dev,
++ int (*fb_create)(struct drm_device *dev,
++ uint32_t fb_width,
++ uint32_t fb_height,
++ uint32_t surface_width,
++ uint32_t surface_height,
++ uint32_t surface_depth,
++ uint32_t surface_bpp,
++ struct drm_framebuffer **fb_ptr))
++{
++ struct drm_crtc *crtc;
++ struct drm_connector *connector;
++ unsigned int fb_width = (unsigned)-1, fb_height = (unsigned)-1;
++ unsigned int surface_width = 0, surface_height = 0;
++ int new_fb = 0;
++ int crtc_count = 0;
++ int ret, i, conn_count = 0;
++ struct fb_info *info;
++ struct drm_framebuffer *fb;
++ struct drm_mode_set *modeset = NULL;
++ struct drm_fb_helper *fb_helper;
++ uint32_t surface_depth = 24, surface_bpp = 32;
++
++ /* first up get a count of crtcs now in use and new min/maxes width/heights */
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ struct drm_fb_helper_connector *fb_help_conn = connector->fb_helper_private;
++
++ struct drm_fb_helper_cmdline_mode *cmdline_mode;
++
++ if (!fb_help_conn)
++ continue;
++
++ cmdline_mode = &fb_help_conn->cmdline_mode;
++
++ if (cmdline_mode->bpp_specified) {
++ switch (cmdline_mode->bpp) {
++ case 8:
++ surface_depth = surface_bpp = 8;
++ break;
++ case 15:
++ surface_depth = 15;
++ surface_bpp = 16;
++ break;
++ case 16:
++ surface_depth = surface_bpp = 16;
++ break;
++ case 24:
++ surface_depth = surface_bpp = 24;
++ break;
++ case 32:
++ surface_depth = 24;
++ surface_bpp = 32;
++ break;
++ }
++ break;
++ }
++ }
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ if (drm_helper_crtc_in_use(crtc)) {
++ if (crtc->desired_mode) {
++ if (crtc->desired_mode->hdisplay < fb_width)
++ fb_width = crtc->desired_mode->hdisplay;
++
++ if (crtc->desired_mode->vdisplay < fb_height)
++ fb_height = crtc->desired_mode->vdisplay;
++
++ if (crtc->desired_mode->hdisplay > surface_width)
++ surface_width = crtc->desired_mode->hdisplay;
++
++ if (crtc->desired_mode->vdisplay > surface_height)
++ surface_height = crtc->desired_mode->vdisplay;
++ }
++ crtc_count++;
++ }
++ }
++
++ if (crtc_count == 0 || fb_width == -1 || fb_height == -1) {
++ /* hmm everyone went away - assume VGA cable just fell out
++ and will come back later. */
++ return 0;
++ }
++
++ /* do we have an fb already? */
++ if (list_empty(&dev->mode_config.fb_kernel_list)) {
++ ret = (*fb_create)(dev, fb_width, fb_height, surface_width,
++ surface_height, surface_depth, surface_bpp,
++ &fb);
++ if (ret)
++ return -EINVAL;
++ new_fb = 1;
++ } else {
++ fb = list_first_entry(&dev->mode_config.fb_kernel_list,
++ struct drm_framebuffer, filp_head);
++
++ /* if someone hotplugs something bigger than we have already allocated, we are pwned.
++ As really we can't resize an fbdev that is in the wild currently due to fbdev
++ not really being designed for the lower layers moving stuff around under it.
++ - so in the grand style of things - punt. */
++ if ((fb->width < surface_width) ||
++ (fb->height < surface_height)) {
++ DRM_ERROR("Framebuffer not large enough to scale console onto.\n");
++ return -EINVAL;
++ }
++ }
++
++ info = fb->fbdev;
++ fb_helper = info->par;
++
++ crtc_count = 0;
++ /* okay we need to setup new connector sets in the crtcs */
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ modeset = &fb_helper->crtc_info[crtc_count].mode_set;
++ modeset->fb = fb;
++ conn_count = 0;
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ if (connector->encoder)
++ if (connector->encoder->crtc == modeset->crtc) {
++ modeset->connectors[conn_count] = connector;
++ conn_count++;
++ if (conn_count > fb_helper->conn_limit)
++ BUG();
++ }
++ }
++
++ for (i = conn_count; i < fb_helper->conn_limit; i++)
++ modeset->connectors[i] = NULL;
++
++ modeset->crtc = crtc;
++ crtc_count++;
++
++ modeset->num_connectors = conn_count;
++ if (modeset->crtc->desired_mode) {
++ if (modeset->mode)
++ drm_mode_destroy(dev, modeset->mode);
++ modeset->mode = drm_mode_duplicate(dev,
++ modeset->crtc->desired_mode);
++ }
++ }
++ fb_helper->crtc_count = crtc_count;
++ fb_helper->fb = fb;
++
++ if (new_fb) {
++ info->var.pixclock = -1;
++ if (register_framebuffer(info) < 0)
++ return -EINVAL;
++ } else {
++ drm_fb_helper_set_par(info);
++ }
++ printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
++ info->fix.id);
++
++ /* Switch back to kernel console on panic */
++ /* multi card linked list maybe */
++ if (list_empty(&kernel_fb_helper_list)) {
++ printk(KERN_INFO "registered panic notifier\n");
++ atomic_notifier_chain_register(&panic_notifier_list,
++ &paniced);
++ register_sysrq_key('v', &sysrq_drm_fb_helper_restore_op);
++ }
++ list_add(&fb_helper->kernel_fb_list, &kernel_fb_helper_list);
++ return 0;
++}
++EXPORT_SYMBOL(drm_fb_helper_single_fb_probe);
++
++void drm_fb_helper_free(struct drm_fb_helper *helper)
++{
++ list_del(&helper->kernel_fb_list);
++ if (list_empty(&kernel_fb_helper_list)) {
++ printk(KERN_INFO "unregistered panic notifier\n");
++ atomic_notifier_chain_unregister(&panic_notifier_list,
++ &paniced);
++ unregister_sysrq_key('v', &sysrq_drm_fb_helper_restore_op);
++ }
++ drm_fb_helper_crtc_free(helper);
++}
++EXPORT_SYMBOL(drm_fb_helper_free);
++
++void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch)
++{
++ info->fix.type = FB_TYPE_PACKED_PIXELS;
++ info->fix.visual = FB_VISUAL_TRUECOLOR;
++ info->fix.type_aux = 0;
++ info->fix.xpanstep = 1; /* doing it in hw */
++ info->fix.ypanstep = 1; /* doing it in hw */
++ info->fix.ywrapstep = 0;
++ info->fix.accel = FB_ACCEL_NONE;
++ info->fix.type_aux = 0;
++
++ info->fix.line_length = pitch;
++ return;
++}
++EXPORT_SYMBOL(drm_fb_helper_fill_fix);
++
++void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb,
++ uint32_t fb_width, uint32_t fb_height)
++{
++ info->pseudo_palette = fb->pseudo_palette;
++ info->var.xres_virtual = fb->width;
++ info->var.yres_virtual = fb->height;
++ info->var.bits_per_pixel = fb->bits_per_pixel;
++ info->var.xoffset = 0;
++ info->var.yoffset = 0;
++ info->var.activate = FB_ACTIVATE_NOW;
++ info->var.height = -1;
++ info->var.width = -1;
++
++ switch (fb->depth) {
++ case 8:
++ info->var.red.offset = 0;
++ info->var.green.offset = 0;
++ info->var.blue.offset = 0;
++ info->var.red.length = 8; /* 8bit DAC */
++ info->var.green.length = 8;
++ info->var.blue.length = 8;
++ info->var.transp.offset = 0;
++ info->var.transp.length = 0;
++ break;
++ case 15:
++ info->var.red.offset = 10;
++ info->var.green.offset = 5;
++ info->var.blue.offset = 0;
++ info->var.red.length = 5;
++ info->var.green.length = 5;
++ info->var.blue.length = 5;
++ info->var.transp.offset = 15;
++ info->var.transp.length = 1;
++ break;
++ case 16:
++ info->var.red.offset = 11;
++ info->var.green.offset = 5;
++ info->var.blue.offset = 0;
++ info->var.red.length = 5;
++ info->var.green.length = 6;
++ info->var.blue.length = 5;
++ info->var.transp.offset = 0;
++ break;
++ case 24:
++ info->var.red.offset = 16;
++ info->var.green.offset = 8;
++ info->var.blue.offset = 0;
++ info->var.red.length = 8;
++ info->var.green.length = 8;
++ info->var.blue.length = 8;
++ info->var.transp.offset = 0;
++ info->var.transp.length = 0;
++ break;
++ case 32:
++ info->var.red.offset = 16;
++ info->var.green.offset = 8;
++ info->var.blue.offset = 0;
++ info->var.red.length = 8;
++ info->var.green.length = 8;
++ info->var.blue.length = 8;
++ info->var.transp.offset = 24;
++ info->var.transp.length = 8;
++ break;
++ default:
++ break;
++ }
++
++ info->var.xres = fb_width;
++ info->var.yres = fb_height;
++}
++EXPORT_SYMBOL(drm_fb_helper_fill_var);
+diff --git a/drivers/gpu/drm/drm_gem.c b/drivers/gpu/drm/drm_gem.c
+index ffe8f43..230c9ff 100644
+--- a/drivers/gpu/drm/drm_gem.c
++++ b/drivers/gpu/drm/drm_gem.c
+@@ -164,7 +164,7 @@ EXPORT_SYMBOL(drm_gem_object_alloc);
+ * Removes the mapping from handle to filp for this object.
+ */
+ static int
+-drm_gem_handle_delete(struct drm_file *filp, int handle)
++drm_gem_handle_delete(struct drm_file *filp, u32 handle)
+ {
+ struct drm_device *dev;
+ struct drm_gem_object *obj;
+@@ -207,7 +207,7 @@ drm_gem_handle_delete(struct drm_file *filp, int handle)
+ int
+ drm_gem_handle_create(struct drm_file *file_priv,
+ struct drm_gem_object *obj,
+- int *handlep)
++ u32 *handlep)
+ {
+ int ret;
+
+@@ -221,7 +221,7 @@ again:
+
+ /* do the allocation under our spinlock */
+ spin_lock(&file_priv->table_lock);
+- ret = idr_get_new_above(&file_priv->object_idr, obj, 1, handlep);
++ ret = idr_get_new_above(&file_priv->object_idr, obj, 1, (int *)handlep);
+ spin_unlock(&file_priv->table_lock);
+ if (ret == -EAGAIN)
+ goto again;
+@@ -237,7 +237,7 @@ EXPORT_SYMBOL(drm_gem_handle_create);
+ /** Returns a reference to the object named by the handle. */
+ struct drm_gem_object *
+ drm_gem_object_lookup(struct drm_device *dev, struct drm_file *filp,
+- int handle)
++ u32 handle)
+ {
+ struct drm_gem_object *obj;
+
+@@ -344,7 +344,7 @@ drm_gem_open_ioctl(struct drm_device *dev, void *data,
+ struct drm_gem_open *args = data;
+ struct drm_gem_object *obj;
+ int ret;
+- int handle;
++ u32 handle;
+
+ if (!(dev->driver->driver_features & DRIVER_GEM))
+ return -ENODEV;
+@@ -539,7 +539,6 @@ int drm_gem_mmap(struct file *filp, struct vm_area_struct *vma)
+ vma->vm_flags |= VM_RESERVED | VM_IO | VM_PFNMAP | VM_DONTEXPAND;
+ vma->vm_ops = obj->dev->driver->gem_vm_ops;
+ vma->vm_private_data = map->handle;
+- /* FIXME: use pgprot_writecombine when available */
+ vma->vm_page_prot = pgprot_writecombine(vma->vm_page_prot);
+
+ /* Take a ref for this mapping of the object, so that the fault
+diff --git a/drivers/gpu/drm/drm_mm.c b/drivers/gpu/drm/drm_mm.c
+index 3e47869..c861d80 100644
+--- a/drivers/gpu/drm/drm_mm.c
++++ b/drivers/gpu/drm/drm_mm.c
+@@ -44,6 +44,7 @@
+ #include "drmP.h"
+ #include "drm_mm.h"
+ #include <linux/slab.h>
++#include <linux/seq_file.h>
+
+ #define MM_UNUSED_TARGET 4
+
+@@ -370,3 +371,23 @@ void drm_mm_takedown(struct drm_mm * mm)
+ BUG_ON(mm->num_unused != 0);
+ }
+ EXPORT_SYMBOL(drm_mm_takedown);
++
++#if defined(CONFIG_DEBUG_FS)
++int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm)
++{
++ struct drm_mm_node *entry;
++ int total_used = 0, total_free = 0, total = 0;
++
++ list_for_each_entry(entry, &mm->ml_entry, ml_entry) {
++ seq_printf(m, "0x%08lx-0x%08lx: 0x%08lx: %s\n", entry->start, entry->start + entry->size, entry->size, entry->free ? "free" : "used");
++ total += entry->size;
++ if (entry->free)
++ total_free += entry->size;
++ else
++ total_used += entry->size;
++ }
++ seq_printf(m, "total: %d, used %d free %d\n", total, total_free, total_used);
++ return 0;
++}
++EXPORT_SYMBOL(drm_mm_dump_table);
++#endif
+diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c
+index 7914097..51f6772 100644
+--- a/drivers/gpu/drm/drm_modes.c
++++ b/drivers/gpu/drm/drm_modes.c
+@@ -8,6 +8,8 @@
+ * Copyright © 2007 Dave Airlie
+ * Copyright © 2007-2008 Intel Corporation
+ * Jesse Barnes <jesse.barnes@intel.com>
++ * Copyright 2005-2006 Luc Verhaegen
++ * Copyright (c) 2001, Andy Ritger aritger@nvidia.com
+ *
+ * Permission is hereby granted, free of charge, to any person obtaining a
+ * copy of this software and associated documentation files (the "Software"),
+@@ -38,7 +40,6 @@
+ #include "drm.h"
+ #include "drm_crtc.h"
+
+-#define DRM_MODESET_DEBUG "drm_mode"
+ /**
+ * drm_mode_debug_printmodeline - debug print a mode
+ * @dev: DRM device
+@@ -51,8 +52,8 @@
+ */
+ void drm_mode_debug_printmodeline(struct drm_display_mode *mode)
+ {
+- DRM_DEBUG_MODE(DRM_MODESET_DEBUG,
+- "Modeline %d:\"%s\" %d %d %d %d %d %d %d %d %d %d 0x%x 0x%x\n",
++ DRM_DEBUG_KMS("Modeline %d:\"%s\" %d %d %d %d %d %d %d %d %d %d "
++ "0x%x 0x%x\n",
+ mode->base.id, mode->name, mode->vrefresh, mode->clock,
+ mode->hdisplay, mode->hsync_start,
+ mode->hsync_end, mode->htotal,
+@@ -62,6 +63,419 @@ void drm_mode_debug_printmodeline(struct drm_display_mode *mode)
+ EXPORT_SYMBOL(drm_mode_debug_printmodeline);
+
+ /**
++ * drm_cvt_mode -create a modeline based on CVT algorithm
++ * @dev: DRM device
++ * @hdisplay: hdisplay size
++ * @vdisplay: vdisplay size
++ * @vrefresh : vrefresh rate
++ * @reduced : Whether the GTF calculation is simplified
++ * @interlaced:Whether the interlace is supported
++ *
++ * LOCKING:
++ * none.
++ *
++ * return the modeline based on CVT algorithm
++ *
++ * This function is called to generate the modeline based on CVT algorithm
++ * according to the hdisplay, vdisplay, vrefresh.
++ * It is based from the VESA(TM) Coordinated Video Timing Generator by
++ * Graham Loveridge April 9, 2003 available at
++ * http://www.vesa.org/public/CVT/CVTd6r1.xls
++ *
++ * And it is copied from xf86CVTmode in xserver/hw/xfree86/modes/xf86cvt.c.
++ * What I have done is to translate it by using integer calculation.
++ */
++#define HV_FACTOR 1000
++struct drm_display_mode *drm_cvt_mode(struct drm_device *dev, int hdisplay,
++ int vdisplay, int vrefresh,
++ bool reduced, bool interlaced, bool margins)
++{
++ /* 1) top/bottom margin size (% of height) - default: 1.8, */
++#define CVT_MARGIN_PERCENTAGE 18
++ /* 2) character cell horizontal granularity (pixels) - default 8 */
++#define CVT_H_GRANULARITY 8
++ /* 3) Minimum vertical porch (lines) - default 3 */
++#define CVT_MIN_V_PORCH 3
++ /* 4) Minimum number of vertical back porch lines - default 6 */
++#define CVT_MIN_V_BPORCH 6
++ /* Pixel Clock step (kHz) */
++#define CVT_CLOCK_STEP 250
++ struct drm_display_mode *drm_mode;
++ unsigned int vfieldrate, hperiod;
++ int hdisplay_rnd, hmargin, vdisplay_rnd, vmargin, vsync;
++ int interlace;
++
++ /* allocate the drm_display_mode structure. If failure, we will
++ * return directly
++ */
++ drm_mode = drm_mode_create(dev);
++ if (!drm_mode)
++ return NULL;
++
++ /* the CVT default refresh rate is 60Hz */
++ if (!vrefresh)
++ vrefresh = 60;
++
++ /* the required field fresh rate */
++ if (interlaced)
++ vfieldrate = vrefresh * 2;
++ else
++ vfieldrate = vrefresh;
++
++ /* horizontal pixels */
++ hdisplay_rnd = hdisplay - (hdisplay % CVT_H_GRANULARITY);
++
++ /* determine the left&right borders */
++ hmargin = 0;
++ if (margins) {
++ hmargin = hdisplay_rnd * CVT_MARGIN_PERCENTAGE / 1000;
++ hmargin -= hmargin % CVT_H_GRANULARITY;
++ }
++ /* find the total active pixels */
++ drm_mode->hdisplay = hdisplay_rnd + 2 * hmargin;
++
++ /* find the number of lines per field */
++ if (interlaced)
++ vdisplay_rnd = vdisplay / 2;
++ else
++ vdisplay_rnd = vdisplay;
++
++ /* find the top & bottom borders */
++ vmargin = 0;
++ if (margins)
++ vmargin = vdisplay_rnd * CVT_MARGIN_PERCENTAGE / 1000;
++
++ drm_mode->vdisplay = vdisplay + 2 * vmargin;
++
++ /* Interlaced */
++ if (interlaced)
++ interlace = 1;
++ else
++ interlace = 0;
++
++ /* Determine VSync Width from aspect ratio */
++ if (!(vdisplay % 3) && ((vdisplay * 4 / 3) == hdisplay))
++ vsync = 4;
++ else if (!(vdisplay % 9) && ((vdisplay * 16 / 9) == hdisplay))
++ vsync = 5;
++ else if (!(vdisplay % 10) && ((vdisplay * 16 / 10) == hdisplay))
++ vsync = 6;
++ else if (!(vdisplay % 4) && ((vdisplay * 5 / 4) == hdisplay))
++ vsync = 7;
++ else if (!(vdisplay % 9) && ((vdisplay * 15 / 9) == hdisplay))
++ vsync = 7;
++ else /* custom */
++ vsync = 10;
++
++ if (!reduced) {
++ /* simplify the GTF calculation */
++ /* 4) Minimum time of vertical sync + back porch interval (µs)
++ * default 550.0
++ */
++ int tmp1, tmp2;
++#define CVT_MIN_VSYNC_BP 550
++ /* 3) Nominal HSync width (% of line period) - default 8 */
++#define CVT_HSYNC_PERCENTAGE 8
++ unsigned int hblank_percentage;
++ int vsyncandback_porch, vback_porch, hblank;
++
++ /* estimated the horizontal period */
++ tmp1 = HV_FACTOR * 1000000 -
++ CVT_MIN_VSYNC_BP * HV_FACTOR * vfieldrate;
++ tmp2 = (vdisplay_rnd + 2 * vmargin + CVT_MIN_V_PORCH) * 2 +
++ interlace;
++ hperiod = tmp1 * 2 / (tmp2 * vfieldrate);
++
++ tmp1 = CVT_MIN_VSYNC_BP * HV_FACTOR / hperiod + 1;
++ /* 9. Find number of lines in sync + backporch */
++ if (tmp1 < (vsync + CVT_MIN_V_PORCH))
++ vsyncandback_porch = vsync + CVT_MIN_V_PORCH;
++ else
++ vsyncandback_porch = tmp1;
++ /* 10. Find number of lines in back porch */
++ vback_porch = vsyncandback_porch - vsync;
++ drm_mode->vtotal = vdisplay_rnd + 2 * vmargin +
++ vsyncandback_porch + CVT_MIN_V_PORCH;
++ /* 5) Definition of Horizontal blanking time limitation */
++ /* Gradient (%/kHz) - default 600 */
++#define CVT_M_FACTOR 600
++ /* Offset (%) - default 40 */
++#define CVT_C_FACTOR 40
++ /* Blanking time scaling factor - default 128 */
++#define CVT_K_FACTOR 128
++ /* Scaling factor weighting - default 20 */
++#define CVT_J_FACTOR 20
++#define CVT_M_PRIME (CVT_M_FACTOR * CVT_K_FACTOR / 256)
++#define CVT_C_PRIME ((CVT_C_FACTOR - CVT_J_FACTOR) * CVT_K_FACTOR / 256 + \
++ CVT_J_FACTOR)
++ /* 12. Find ideal blanking duty cycle from formula */
++ hblank_percentage = CVT_C_PRIME * HV_FACTOR - CVT_M_PRIME *
++ hperiod / 1000;
++ /* 13. Blanking time */
++ if (hblank_percentage < 20 * HV_FACTOR)
++ hblank_percentage = 20 * HV_FACTOR;
++ hblank = drm_mode->hdisplay * hblank_percentage /
++ (100 * HV_FACTOR - hblank_percentage);
++ hblank -= hblank % (2 * CVT_H_GRANULARITY);
++ /* 14. find the total pixes per line */
++ drm_mode->htotal = drm_mode->hdisplay + hblank;
++ drm_mode->hsync_end = drm_mode->hdisplay + hblank / 2;
++ drm_mode->hsync_start = drm_mode->hsync_end -
++ (drm_mode->htotal * CVT_HSYNC_PERCENTAGE) / 100;
++ drm_mode->hsync_start += CVT_H_GRANULARITY -
++ drm_mode->hsync_start % CVT_H_GRANULARITY;
++ /* fill the Vsync values */
++ drm_mode->vsync_start = drm_mode->vdisplay + CVT_MIN_V_PORCH;
++ drm_mode->vsync_end = drm_mode->vsync_start + vsync;
++ } else {
++ /* Reduced blanking */
++ /* Minimum vertical blanking interval time (µs)- default 460 */
++#define CVT_RB_MIN_VBLANK 460
++ /* Fixed number of clocks for horizontal sync */
++#define CVT_RB_H_SYNC 32
++ /* Fixed number of clocks for horizontal blanking */
++#define CVT_RB_H_BLANK 160
++ /* Fixed number of lines for vertical front porch - default 3*/
++#define CVT_RB_VFPORCH 3
++ int vbilines;
++ int tmp1, tmp2;
++ /* 8. Estimate Horizontal period. */
++ tmp1 = HV_FACTOR * 1000000 -
++ CVT_RB_MIN_VBLANK * HV_FACTOR * vfieldrate;
++ tmp2 = vdisplay_rnd + 2 * vmargin;
++ hperiod = tmp1 / (tmp2 * vfieldrate);
++ /* 9. Find number of lines in vertical blanking */
++ vbilines = CVT_RB_MIN_VBLANK * HV_FACTOR / hperiod + 1;
++ /* 10. Check if vertical blanking is sufficient */
++ if (vbilines < (CVT_RB_VFPORCH + vsync + CVT_MIN_V_BPORCH))
++ vbilines = CVT_RB_VFPORCH + vsync + CVT_MIN_V_BPORCH;
++ /* 11. Find total number of lines in vertical field */
++ drm_mode->vtotal = vdisplay_rnd + 2 * vmargin + vbilines;
++ /* 12. Find total number of pixels in a line */
++ drm_mode->htotal = drm_mode->hdisplay + CVT_RB_H_BLANK;
++ /* Fill in HSync values */
++ drm_mode->hsync_end = drm_mode->hdisplay + CVT_RB_H_BLANK / 2;
++ drm_mode->hsync_start = drm_mode->hsync_end = CVT_RB_H_SYNC;
++ }
++ /* 15/13. Find pixel clock frequency (kHz for xf86) */
++ drm_mode->clock = drm_mode->htotal * HV_FACTOR * 1000 / hperiod;
++ drm_mode->clock -= drm_mode->clock % CVT_CLOCK_STEP;
++ /* 18/16. Find actual vertical frame frequency */
++ /* ignore - just set the mode flag for interlaced */
++ if (interlaced)
++ drm_mode->vtotal *= 2;
++ /* Fill the mode line name */
++ drm_mode_set_name(drm_mode);
++ if (reduced)
++ drm_mode->flags |= (DRM_MODE_FLAG_PHSYNC |
++ DRM_MODE_FLAG_NVSYNC);
++ else
++ drm_mode->flags |= (DRM_MODE_FLAG_PVSYNC |
++ DRM_MODE_FLAG_NHSYNC);
++ if (interlaced)
++ drm_mode->flags |= DRM_MODE_FLAG_INTERLACE;
++
++ return drm_mode;
++}
++EXPORT_SYMBOL(drm_cvt_mode);
++
++/**
++ * drm_gtf_mode - create the modeline based on GTF algorithm
++ *
++ * @dev :drm device
++ * @hdisplay :hdisplay size
++ * @vdisplay :vdisplay size
++ * @vrefresh :vrefresh rate.
++ * @interlaced :whether the interlace is supported
++ * @margins :whether the margin is supported
++ *
++ * LOCKING.
++ * none.
++ *
++ * return the modeline based on GTF algorithm
++ *
++ * This function is to create the modeline based on the GTF algorithm.
++ * Generalized Timing Formula is derived from:
++ * GTF Spreadsheet by Andy Morrish (1/5/97)
++ * available at http://www.vesa.org
++ *
++ * And it is copied from the file of xserver/hw/xfree86/modes/xf86gtf.c.
++ * What I have done is to translate it by using integer calculation.
++ * I also refer to the function of fb_get_mode in the file of
++ * drivers/video/fbmon.c
++ */
++struct drm_display_mode *drm_gtf_mode(struct drm_device *dev, int hdisplay,
++ int vdisplay, int vrefresh,
++ bool interlaced, int margins)
++{
++ /* 1) top/bottom margin size (% of height) - default: 1.8, */
++#define GTF_MARGIN_PERCENTAGE 18
++ /* 2) character cell horizontal granularity (pixels) - default 8 */
++#define GTF_CELL_GRAN 8
++ /* 3) Minimum vertical porch (lines) - default 3 */
++#define GTF_MIN_V_PORCH 1
++ /* width of vsync in lines */
++#define V_SYNC_RQD 3
++ /* width of hsync as % of total line */
++#define H_SYNC_PERCENT 8
++ /* min time of vsync + back porch (microsec) */
++#define MIN_VSYNC_PLUS_BP 550
++ /* blanking formula gradient */
++#define GTF_M 600
++ /* blanking formula offset */
++#define GTF_C 40
++ /* blanking formula scaling factor */
++#define GTF_K 128
++ /* blanking formula scaling factor */
++#define GTF_J 20
++ /* C' and M' are part of the Blanking Duty Cycle computation */
++#define GTF_C_PRIME (((GTF_C - GTF_J) * GTF_K / 256) + GTF_J)
++#define GTF_M_PRIME (GTF_K * GTF_M / 256)
++ struct drm_display_mode *drm_mode;
++ unsigned int hdisplay_rnd, vdisplay_rnd, vfieldrate_rqd;
++ int top_margin, bottom_margin;
++ int interlace;
++ unsigned int hfreq_est;
++ int vsync_plus_bp, vback_porch;
++ unsigned int vtotal_lines, vfieldrate_est, hperiod;
++ unsigned int vfield_rate, vframe_rate;
++ int left_margin, right_margin;
++ unsigned int total_active_pixels, ideal_duty_cycle;
++ unsigned int hblank, total_pixels, pixel_freq;
++ int hsync, hfront_porch, vodd_front_porch_lines;
++ unsigned int tmp1, tmp2;
++
++ drm_mode = drm_mode_create(dev);
++ if (!drm_mode)
++ return NULL;
++
++ /* 1. In order to give correct results, the number of horizontal
++ * pixels requested is first processed to ensure that it is divisible
++ * by the character size, by rounding it to the nearest character
++ * cell boundary:
++ */
++ hdisplay_rnd = (hdisplay + GTF_CELL_GRAN / 2) / GTF_CELL_GRAN;
++ hdisplay_rnd = hdisplay_rnd * GTF_CELL_GRAN;
++
++ /* 2. If interlace is requested, the number of vertical lines assumed
++ * by the calculation must be halved, as the computation calculates
++ * the number of vertical lines per field.
++ */
++ if (interlaced)
++ vdisplay_rnd = vdisplay / 2;
++ else
++ vdisplay_rnd = vdisplay;
++
++ /* 3. Find the frame rate required: */
++ if (interlaced)
++ vfieldrate_rqd = vrefresh * 2;
++ else
++ vfieldrate_rqd = vrefresh;
++
++ /* 4. Find number of lines in Top margin: */
++ top_margin = 0;
++ if (margins)
++ top_margin = (vdisplay_rnd * GTF_MARGIN_PERCENTAGE + 500) /
++ 1000;
++ /* 5. Find number of lines in bottom margin: */
++ bottom_margin = top_margin;
++
++ /* 6. If interlace is required, then set variable interlace: */
++ if (interlaced)
++ interlace = 1;
++ else
++ interlace = 0;
++
++ /* 7. Estimate the Horizontal frequency */
++ {
++ tmp1 = (1000000 - MIN_VSYNC_PLUS_BP * vfieldrate_rqd) / 500;
++ tmp2 = (vdisplay_rnd + 2 * top_margin + GTF_MIN_V_PORCH) *
++ 2 + interlace;
++ hfreq_est = (tmp2 * 1000 * vfieldrate_rqd) / tmp1;
++ }
++
++ /* 8. Find the number of lines in V sync + back porch */
++ /* [V SYNC+BP] = RINT(([MIN VSYNC+BP] * hfreq_est / 1000000)) */
++ vsync_plus_bp = MIN_VSYNC_PLUS_BP * hfreq_est / 1000;
++ vsync_plus_bp = (vsync_plus_bp + 500) / 1000;
++ /* 9. Find the number of lines in V back porch alone: */
++ vback_porch = vsync_plus_bp - V_SYNC_RQD;
++ /* 10. Find the total number of lines in Vertical field period: */
++ vtotal_lines = vdisplay_rnd + top_margin + bottom_margin +
++ vsync_plus_bp + GTF_MIN_V_PORCH;
++ /* 11. Estimate the Vertical field frequency: */
++ vfieldrate_est = hfreq_est / vtotal_lines;
++ /* 12. Find the actual horizontal period: */
++ hperiod = 1000000 / (vfieldrate_rqd * vtotal_lines);
++
++ /* 13. Find the actual Vertical field frequency: */
++ vfield_rate = hfreq_est / vtotal_lines;
++ /* 14. Find the Vertical frame frequency: */
++ if (interlaced)
++ vframe_rate = vfield_rate / 2;
++ else
++ vframe_rate = vfield_rate;
++ /* 15. Find number of pixels in left margin: */
++ if (margins)
++ left_margin = (hdisplay_rnd * GTF_MARGIN_PERCENTAGE + 500) /
++ 1000;
++ else
++ left_margin = 0;
++
++ /* 16.Find number of pixels in right margin: */
++ right_margin = left_margin;
++ /* 17.Find total number of active pixels in image and left and right */
++ total_active_pixels = hdisplay_rnd + left_margin + right_margin;
++ /* 18.Find the ideal blanking duty cycle from blanking duty cycle */
++ ideal_duty_cycle = GTF_C_PRIME * 1000 -
++ (GTF_M_PRIME * 1000000 / hfreq_est);
++ /* 19.Find the number of pixels in the blanking time to the nearest
++ * double character cell: */
++ hblank = total_active_pixels * ideal_duty_cycle /
++ (100000 - ideal_duty_cycle);
++ hblank = (hblank + GTF_CELL_GRAN) / (2 * GTF_CELL_GRAN);
++ hblank = hblank * 2 * GTF_CELL_GRAN;
++ /* 20.Find total number of pixels: */
++ total_pixels = total_active_pixels + hblank;
++ /* 21.Find pixel clock frequency: */
++ pixel_freq = total_pixels * hfreq_est / 1000;
++ /* Stage 1 computations are now complete; I should really pass
++ * the results to another function and do the Stage 2 computations,
++ * but I only need a few more values so I'll just append the
++ * computations here for now */
++ /* 17. Find the number of pixels in the horizontal sync period: */
++ hsync = H_SYNC_PERCENT * total_pixels / 100;
++ hsync = (hsync + GTF_CELL_GRAN / 2) / GTF_CELL_GRAN;
++ hsync = hsync * GTF_CELL_GRAN;
++ /* 18. Find the number of pixels in horizontal front porch period */
++ hfront_porch = hblank / 2 - hsync;
++ /* 36. Find the number of lines in the odd front porch period: */
++ vodd_front_porch_lines = GTF_MIN_V_PORCH ;
++
++ /* finally, pack the results in the mode struct */
++ drm_mode->hdisplay = hdisplay_rnd;
++ drm_mode->hsync_start = hdisplay_rnd + hfront_porch;
++ drm_mode->hsync_end = drm_mode->hsync_start + hsync;
++ drm_mode->htotal = total_pixels;
++ drm_mode->vdisplay = vdisplay_rnd;
++ drm_mode->vsync_start = vdisplay_rnd + vodd_front_porch_lines;
++ drm_mode->vsync_end = drm_mode->vsync_start + V_SYNC_RQD;
++ drm_mode->vtotal = vtotal_lines;
++
++ drm_mode->clock = pixel_freq;
++
++ drm_mode_set_name(drm_mode);
++ drm_mode->flags = DRM_MODE_FLAG_NHSYNC | DRM_MODE_FLAG_PVSYNC;
++
++ if (interlaced) {
++ drm_mode->vtotal *= 2;
++ drm_mode->flags |= DRM_MODE_FLAG_INTERLACE;
++ }
++
++ return drm_mode;
++}
++EXPORT_SYMBOL(drm_gtf_mode);
++/**
+ * drm_mode_set_name - set the name on a mode
+ * @mode: name will be set in this mode
+ *
+@@ -151,7 +565,9 @@ EXPORT_SYMBOL(drm_mode_height);
+ * FIXME: why is this needed? shouldn't vrefresh be set already?
+ *
+ * RETURNS:
+- * Vertical refresh rate of @mode x 1000. For precision reasons.
++ * Vertical refresh rate. It will be the result of actual value plus 0.5.
++ * If it is 70.288, it will return 70Hz.
++ * If it is 59.6, it will return 60Hz.
+ */
+ int drm_mode_vrefresh(struct drm_display_mode *mode)
+ {
+@@ -161,14 +577,13 @@ int drm_mode_vrefresh(struct drm_display_mode *mode)
+ if (mode->vrefresh > 0)
+ refresh = mode->vrefresh;
+ else if (mode->htotal > 0 && mode->vtotal > 0) {
++ int vtotal;
++ vtotal = mode->vtotal;
+ /* work out vrefresh the value will be x1000 */
+ calc_val = (mode->clock * 1000);
+-
+ calc_val /= mode->htotal;
+- calc_val *= 1000;
+- calc_val /= mode->vtotal;
++ refresh = (calc_val + vtotal / 2) / vtotal;
+
+- refresh = calc_val;
+ if (mode->flags & DRM_MODE_FLAG_INTERLACE)
+ refresh *= 2;
+ if (mode->flags & DRM_MODE_FLAG_DBLSCAN)
+@@ -403,8 +818,7 @@ void drm_mode_prune_invalid(struct drm_device *dev,
+ list_del(&mode->head);
+ if (verbose) {
+ drm_mode_debug_printmodeline(mode);
+- DRM_DEBUG_MODE(DRM_MODESET_DEBUG,
+- "Not using %s mode %d\n",
++ DRM_DEBUG_KMS("Not using %s mode %d\n",
+ mode->name, mode->status);
+ }
+ drm_mode_destroy(dev, mode);
+diff --git a/drivers/gpu/drm/drm_proc.c b/drivers/gpu/drm/drm_proc.c
+index bbd4b3d..d379c4f 100644
+--- a/drivers/gpu/drm/drm_proc.c
++++ b/drivers/gpu/drm/drm_proc.c
+@@ -106,20 +106,25 @@ int drm_proc_create_files(struct drm_info_list *files, int count,
+ continue;
+
+ tmp = kmalloc(sizeof(struct drm_info_node), GFP_KERNEL);
+- ent = create_proc_entry(files[i].name, S_IFREG | S_IRUGO, root);
++ if (tmp == NULL) {
++ ret = -1;
++ goto fail;
++ }
++ tmp->minor = minor;
++ tmp->info_ent = &files[i];
++ list_add(&tmp->list, &minor->proc_nodes.list);
++
++ ent = proc_create_data(files[i].name, S_IRUGO, root,
++ &drm_proc_fops, tmp);
+ if (!ent) {
+ DRM_ERROR("Cannot create /proc/dri/%s/%s\n",
+ name, files[i].name);
++ list_del(&tmp->list);
+ kfree(tmp);
+ ret = -1;
+ goto fail;
+ }
+
+- ent->proc_fops = &drm_proc_fops;
+- ent->data = tmp;
+- tmp->minor = minor;
+- tmp->info_ent = &files[i];
+- list_add(&(tmp->list), &(minor->proc_nodes.list));
+ }
+ return 0;
+
+diff --git a/drivers/gpu/drm/drm_sysfs.c b/drivers/gpu/drm/drm_sysfs.c
+index f7a615b..5161172 100644
+--- a/drivers/gpu/drm/drm_sysfs.c
++++ b/drivers/gpu/drm/drm_sysfs.c
+@@ -16,6 +16,7 @@
+ #include <linux/kdev_t.h>
+ #include <linux/err.h>
+
++#include "drm_sysfs.h"
+ #include "drm_core.h"
+ #include "drmP.h"
+
+@@ -253,6 +254,7 @@ static ssize_t subconnector_show(struct device *device,
+ case DRM_MODE_CONNECTOR_Composite:
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ case DRM_MODE_CONNECTOR_Component:
++ case DRM_MODE_CONNECTOR_TV:
+ prop = dev->mode_config.tv_subconnector_property;
+ is_tv = 1;
+ break;
+@@ -293,6 +295,7 @@ static ssize_t select_subconnector_show(struct device *device,
+ case DRM_MODE_CONNECTOR_Composite:
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ case DRM_MODE_CONNECTOR_Component:
++ case DRM_MODE_CONNECTOR_TV:
+ prop = dev->mode_config.tv_select_subconnector_property;
+ is_tv = 1;
+ break;
+@@ -391,6 +394,7 @@ int drm_sysfs_connector_add(struct drm_connector *connector)
+ case DRM_MODE_CONNECTOR_Composite:
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ case DRM_MODE_CONNECTOR_Component:
++ case DRM_MODE_CONNECTOR_TV:
+ for (i = 0; i < ARRAY_SIZE(connector_attrs_opt1); i++) {
+ ret = device_create_file(&connector->kdev, &connector_attrs_opt1[i]);
+ if (ret)
+@@ -519,3 +523,27 @@ void drm_sysfs_device_remove(struct drm_minor *minor)
+ {
+ device_unregister(&minor->kdev);
+ }
++
++
++/**
++ * drm_class_device_register - Register a struct device in the drm class.
++ *
++ * @dev: pointer to struct device to register.
++ *
++ * @dev should have all relevant members pre-filled with the exception
++ * of the class member. In particular, the device_type member must
++ * be set.
++ */
++
++int drm_class_device_register(struct device *dev)
++{
++ dev->class = drm_class;
++ return device_register(dev);
++}
++EXPORT_SYMBOL_GPL(drm_class_device_register);
++
++void drm_class_device_unregister(struct device *dev)
++{
++ return device_unregister(dev);
++}
++EXPORT_SYMBOL_GPL(drm_class_device_unregister);
+diff --git a/drivers/gpu/drm/i915/Makefile b/drivers/gpu/drm/i915/Makefile
+index 30d6b99..5269dfa 100644
+--- a/drivers/gpu/drm/i915/Makefile
++++ b/drivers/gpu/drm/i915/Makefile
+@@ -4,10 +4,10 @@
+
+ ccflags-y := -Iinclude/drm
+ i915-y := i915_drv.o i915_dma.o i915_irq.o i915_mem.o \
++ i915_debugfs.o \
+ i915_suspend.o \
+ i915_gem.o \
+ i915_gem_debug.o \
+- i915_gem_debugfs.o \
+ i915_gem_tiling.o \
+ intel_display.o \
+ intel_crt.o \
+diff --git a/drivers/gpu/drm/i915/i915_debugfs.c b/drivers/gpu/drm/i915/i915_debugfs.c
+new file mode 100644
+index 0000000..1e3bdce
+--- /dev/null
++++ b/drivers/gpu/drm/i915/i915_debugfs.c
+@@ -0,0 +1,445 @@
++/*
++ * Copyright © 2008 Intel Corporation
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
++ * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
++ * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
++ * IN THE SOFTWARE.
++ *
++ * Authors:
++ * Eric Anholt <eric@anholt.net>
++ * Keith Packard <keithp@keithp.com>
++ *
++ */
++
++#include <linux/seq_file.h>
++#include "drmP.h"
++#include "drm.h"
++#include "i915_drm.h"
++#include "i915_drv.h"
++
++#define DRM_I915_RING_DEBUG 1
++
++
++#if defined(CONFIG_DEBUG_FS)
++
++#define ACTIVE_LIST 1
++#define FLUSHING_LIST 2
++#define INACTIVE_LIST 3
++
++static const char *get_pin_flag(struct drm_i915_gem_object *obj_priv)
++{
++ if (obj_priv->user_pin_count > 0)
++ return "P";
++ else if (obj_priv->pin_count > 0)
++ return "p";
++ else
++ return " ";
++}
++
++static const char *get_tiling_flag(struct drm_i915_gem_object *obj_priv)
++{
++ switch (obj_priv->tiling_mode) {
++ default:
++ case I915_TILING_NONE: return " ";
++ case I915_TILING_X: return "X";
++ case I915_TILING_Y: return "Y";
++ }
++}
++
++static int i915_gem_object_list_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ uintptr_t list = (uintptr_t) node->info_ent->data;
++ struct list_head *head;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ struct drm_i915_gem_object *obj_priv;
++ spinlock_t *lock = NULL;
++
++ switch (list) {
++ case ACTIVE_LIST:
++ seq_printf(m, "Active:\n");
++ lock = &dev_priv->mm.active_list_lock;
++ head = &dev_priv->mm.active_list;
++ break;
++ case INACTIVE_LIST:
++ seq_printf(m, "Inactive:\n");
++ head = &dev_priv->mm.inactive_list;
++ break;
++ case FLUSHING_LIST:
++ seq_printf(m, "Flushing:\n");
++ head = &dev_priv->mm.flushing_list;
++ break;
++ default:
++ DRM_INFO("Ooops, unexpected list\n");
++ return 0;
++ }
++
++ if (lock)
++ spin_lock(lock);
++ list_for_each_entry(obj_priv, head, list)
++ {
++ struct drm_gem_object *obj = obj_priv->obj;
++
++ seq_printf(m, " %p: %s %08x %08x %d",
++ obj,
++ get_pin_flag(obj_priv),
++ obj->read_domains, obj->write_domain,
++ obj_priv->last_rendering_seqno);
++
++ if (obj->name)
++ seq_printf(m, " (name: %d)", obj->name);
++ if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
++ seq_printf(m, " (fence: %d)", obj_priv->fence_reg);
++ if (obj_priv->gtt_space != NULL)
++ seq_printf(m, " (gtt_offset: %08x)", obj_priv->gtt_offset);
++
++ seq_printf(m, "\n");
++ }
++
++ if (lock)
++ spin_unlock(lock);
++ return 0;
++}
++
++static int i915_gem_request_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ struct drm_i915_gem_request *gem_request;
++
++ seq_printf(m, "Request:\n");
++ list_for_each_entry(gem_request, &dev_priv->mm.request_list, list) {
++ seq_printf(m, " %d @ %d\n",
++ gem_request->seqno,
++ (int) (jiffies - gem_request->emitted_jiffies));
++ }
++ return 0;
++}
++
++static int i915_gem_seqno_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++
++ if (dev_priv->hw_status_page != NULL) {
++ seq_printf(m, "Current sequence: %d\n",
++ i915_get_gem_seqno(dev));
++ } else {
++ seq_printf(m, "Current sequence: hws uninitialized\n");
++ }
++ seq_printf(m, "Waiter sequence: %d\n",
++ dev_priv->mm.waiting_gem_seqno);
++ seq_printf(m, "IRQ sequence: %d\n", dev_priv->mm.irq_gem_seqno);
++ return 0;
++}
++
++
++static int i915_interrupt_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++
++ if (!IS_IGDNG(dev)) {
++ seq_printf(m, "Interrupt enable: %08x\n",
++ I915_READ(IER));
++ seq_printf(m, "Interrupt identity: %08x\n",
++ I915_READ(IIR));
++ seq_printf(m, "Interrupt mask: %08x\n",
++ I915_READ(IMR));
++ seq_printf(m, "Pipe A stat: %08x\n",
++ I915_READ(PIPEASTAT));
++ seq_printf(m, "Pipe B stat: %08x\n",
++ I915_READ(PIPEBSTAT));
++ } else {
++ seq_printf(m, "North Display Interrupt enable: %08x\n",
++ I915_READ(DEIER));
++ seq_printf(m, "North Display Interrupt identity: %08x\n",
++ I915_READ(DEIIR));
++ seq_printf(m, "North Display Interrupt mask: %08x\n",
++ I915_READ(DEIMR));
++ seq_printf(m, "South Display Interrupt enable: %08x\n",
++ I915_READ(SDEIER));
++ seq_printf(m, "South Display Interrupt identity: %08x\n",
++ I915_READ(SDEIIR));
++ seq_printf(m, "South Display Interrupt mask: %08x\n",
++ I915_READ(SDEIMR));
++ seq_printf(m, "Graphics Interrupt enable: %08x\n",
++ I915_READ(GTIER));
++ seq_printf(m, "Graphics Interrupt identity: %08x\n",
++ I915_READ(GTIIR));
++ seq_printf(m, "Graphics Interrupt mask: %08x\n",
++ I915_READ(GTIMR));
++ }
++ seq_printf(m, "Interrupts received: %d\n",
++ atomic_read(&dev_priv->irq_received));
++ if (dev_priv->hw_status_page != NULL) {
++ seq_printf(m, "Current sequence: %d\n",
++ i915_get_gem_seqno(dev));
++ } else {
++ seq_printf(m, "Current sequence: hws uninitialized\n");
++ }
++ seq_printf(m, "Waiter sequence: %d\n",
++ dev_priv->mm.waiting_gem_seqno);
++ seq_printf(m, "IRQ sequence: %d\n",
++ dev_priv->mm.irq_gem_seqno);
++ return 0;
++}
++
++static int i915_gem_fence_regs_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ int i;
++
++ seq_printf(m, "Reserved fences = %d\n", dev_priv->fence_reg_start);
++ seq_printf(m, "Total fences = %d\n", dev_priv->num_fence_regs);
++ for (i = 0; i < dev_priv->num_fence_regs; i++) {
++ struct drm_gem_object *obj = dev_priv->fence_regs[i].obj;
++
++ if (obj == NULL) {
++ seq_printf(m, "Fenced object[%2d] = unused\n", i);
++ } else {
++ struct drm_i915_gem_object *obj_priv;
++
++ obj_priv = obj->driver_private;
++ seq_printf(m, "Fenced object[%2d] = %p: %s "
++ "%08x %08zx %08x %s %08x %08x %d",
++ i, obj, get_pin_flag(obj_priv),
++ obj_priv->gtt_offset,
++ obj->size, obj_priv->stride,
++ get_tiling_flag(obj_priv),
++ obj->read_domains, obj->write_domain,
++ obj_priv->last_rendering_seqno);
++ if (obj->name)
++ seq_printf(m, " (name: %d)", obj->name);
++ seq_printf(m, "\n");
++ }
++ }
++
++ return 0;
++}
++
++static int i915_hws_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ int i;
++ volatile u32 *hws;
++
++ hws = (volatile u32 *)dev_priv->hw_status_page;
++ if (hws == NULL)
++ return 0;
++
++ for (i = 0; i < 4096 / sizeof(u32) / 4; i += 4) {
++ seq_printf(m, "0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
++ i * 4,
++ hws[i], hws[i + 1], hws[i + 2], hws[i + 3]);
++ }
++ return 0;
++}
++
++static void i915_dump_pages(struct seq_file *m, struct page **pages, int page_count)
++{
++ int page, i;
++ uint32_t *mem;
++
++ for (page = 0; page < page_count; page++) {
++ mem = kmap(pages[page]);
++ for (i = 0; i < PAGE_SIZE; i += 4)
++ seq_printf(m, "%08x : %08x\n", i, mem[i / 4]);
++ kunmap(pages[page]);
++ }
++}
++
++static int i915_batchbuffer_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ struct drm_gem_object *obj;
++ struct drm_i915_gem_object *obj_priv;
++ int ret;
++
++ spin_lock(&dev_priv->mm.active_list_lock);
++
++ list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) {
++ obj = obj_priv->obj;
++ if (obj->read_domains & I915_GEM_DOMAIN_COMMAND) {
++ ret = i915_gem_object_get_pages(obj);
++ if (ret) {
++ DRM_ERROR("Failed to get pages: %d\n", ret);
++ spin_unlock(&dev_priv->mm.active_list_lock);
++ return ret;
++ }
++
++ seq_printf(m, "--- gtt_offset = 0x%08x\n", obj_priv->gtt_offset);
++ i915_dump_pages(m, obj_priv->pages, obj->size / PAGE_SIZE);
++
++ i915_gem_object_put_pages(obj);
++ }
++ }
++
++ spin_unlock(&dev_priv->mm.active_list_lock);
++
++ return 0;
++}
++
++static int i915_ringbuffer_data(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ u8 *virt;
++ uint32_t *ptr, off;
++
++ if (!dev_priv->ring.ring_obj) {
++ seq_printf(m, "No ringbuffer setup\n");
++ return 0;
++ }
++
++ virt = dev_priv->ring.virtual_start;
++
++ for (off = 0; off < dev_priv->ring.Size; off += 4) {
++ ptr = (uint32_t *)(virt + off);
++ seq_printf(m, "%08x : %08x\n", off, *ptr);
++ }
++
++ return 0;
++}
++
++static int i915_ringbuffer_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ unsigned int head, tail;
++
++ head = I915_READ(PRB0_HEAD) & HEAD_ADDR;
++ tail = I915_READ(PRB0_TAIL) & TAIL_ADDR;
++
++ seq_printf(m, "RingHead : %08x\n", head);
++ seq_printf(m, "RingTail : %08x\n", tail);
++ seq_printf(m, "RingSize : %08lx\n", dev_priv->ring.Size);
++ seq_printf(m, "Acthd : %08x\n", I915_READ(IS_I965G(dev) ? ACTHD_I965 : ACTHD));
++
++ return 0;
++}
++
++static int i915_error_state(struct seq_file *m, void *unused)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ struct drm_i915_error_state *error;
++ unsigned long flags;
++
++ spin_lock_irqsave(&dev_priv->error_lock, flags);
++ if (!dev_priv->first_error) {
++ seq_printf(m, "no error state collected\n");
++ goto out;
++ }
++
++ error = dev_priv->first_error;
++
++ seq_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
++ error->time.tv_usec);
++ seq_printf(m, "EIR: 0x%08x\n", error->eir);
++ seq_printf(m, " PGTBL_ER: 0x%08x\n", error->pgtbl_er);
++ seq_printf(m, " INSTPM: 0x%08x\n", error->instpm);
++ seq_printf(m, " IPEIR: 0x%08x\n", error->ipeir);
++ seq_printf(m, " IPEHR: 0x%08x\n", error->ipehr);
++ seq_printf(m, " INSTDONE: 0x%08x\n", error->instdone);
++ seq_printf(m, " ACTHD: 0x%08x\n", error->acthd);
++ if (IS_I965G(dev)) {
++ seq_printf(m, " INSTPS: 0x%08x\n", error->instps);
++ seq_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1);
++ }
++
++out:
++ spin_unlock_irqrestore(&dev_priv->error_lock, flags);
++
++ return 0;
++}
++
++static int i915_registers_info(struct seq_file *m, void *data) {
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ uint32_t reg;
++
++#define DUMP_RANGE(start, end) \
++ for (reg=start; reg < end; reg += 4) \
++ seq_printf(m, "%08x\t%08x\n", reg, I915_READ(reg));
++
++ DUMP_RANGE(0x00000, 0x00fff); /* VGA registers */
++ DUMP_RANGE(0x02000, 0x02fff); /* instruction, memory, interrupt control registers */
++ DUMP_RANGE(0x03000, 0x031ff); /* FENCE and PPGTT control registers */
++ DUMP_RANGE(0x03200, 0x03fff); /* frame buffer compression registers */
++ DUMP_RANGE(0x05000, 0x05fff); /* I/O control registers */
++ DUMP_RANGE(0x06000, 0x06fff); /* clock control registers */
++ DUMP_RANGE(0x07000, 0x07fff); /* 3D internal debug registers */
++ DUMP_RANGE(0x07400, 0x088ff); /* GPE debug registers */
++ DUMP_RANGE(0x0a000, 0x0afff); /* display palette registers */
++ DUMP_RANGE(0x10000, 0x13fff); /* MMIO MCHBAR */
++ DUMP_RANGE(0x30000, 0x3ffff); /* overlay registers */
++ DUMP_RANGE(0x60000, 0x6ffff); /* display engine pipeline registers */
++ DUMP_RANGE(0x70000, 0x72fff); /* display and cursor registers */
++ DUMP_RANGE(0x73000, 0x73fff); /* performance counters */
++
++ return 0;
++}
++
++
++static struct drm_info_list i915_debugfs_list[] = {
++ {"i915_regs", i915_registers_info, 0},
++ {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST},
++ {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST},
++ {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST},
++ {"i915_gem_request", i915_gem_request_info, 0},
++ {"i915_gem_seqno", i915_gem_seqno_info, 0},
++ {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
++ {"i915_gem_interrupt", i915_interrupt_info, 0},
++ {"i915_gem_hws", i915_hws_info, 0},
++ {"i915_ringbuffer_data", i915_ringbuffer_data, 0},
++ {"i915_ringbuffer_info", i915_ringbuffer_info, 0},
++ {"i915_batchbuffers", i915_batchbuffer_info, 0},
++ {"i915_error_state", i915_error_state, 0},
++};
++#define I915_DEBUGFS_ENTRIES ARRAY_SIZE(i915_debugfs_list)
++
++int i915_debugfs_init(struct drm_minor *minor)
++{
++ return drm_debugfs_create_files(i915_debugfs_list,
++ I915_DEBUGFS_ENTRIES,
++ minor->debugfs_root, minor);
++}
++
++void i915_debugfs_cleanup(struct drm_minor *minor)
++{
++ drm_debugfs_remove_files(i915_debugfs_list,
++ I915_DEBUGFS_ENTRIES, minor);
++}
++
++#endif /* CONFIG_DEBUG_FS */
++
+diff --git a/drivers/gpu/drm/i915/i915_dma.c b/drivers/gpu/drm/i915/i915_dma.c
+index 50d1f78..9909505 100644
+--- a/drivers/gpu/drm/i915/i915_dma.c
++++ b/drivers/gpu/drm/i915/i915_dma.c
+@@ -29,12 +29,11 @@
+ #include "drmP.h"
+ #include "drm.h"
+ #include "drm_crtc_helper.h"
++#include "drm_fb_helper.h"
+ #include "intel_drv.h"
+ #include "i915_drm.h"
+ #include "i915_drv.h"
+
+-#define I915_DRV "i915_drv"
+-
+ /* Really want an OS-independent resettable timer. Would like to have
+ * this loop run for (eg) 3 sec, but have the timer reset every time
+ * the head pointer changes, so that EBUSY only happens if the ring
+@@ -80,6 +79,34 @@ int i915_wait_ring(struct drm_device * dev, int n, const char *caller)
+ return -EBUSY;
+ }
+
++/* As a ringbuffer is only allowed to wrap between instructions, fill
++ * the tail with NOOPs.
++ */
++int i915_wrap_ring(struct drm_device *dev)
++{
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ volatile unsigned int *virt;
++ int rem;
++
++ rem = dev_priv->ring.Size - dev_priv->ring.tail;
++ if (dev_priv->ring.space < rem) {
++ int ret = i915_wait_ring(dev, rem, __func__);
++ if (ret)
++ return ret;
++ }
++ dev_priv->ring.space -= rem;
++
++ virt = (unsigned int *)
++ (dev_priv->ring.virtual_start + dev_priv->ring.tail);
++ rem /= 4;
++ while (rem--)
++ *virt++ = MI_NOOP;
++
++ dev_priv->ring.tail = 0;
++
++ return 0;
++}
++
+ /**
+ * Sets up the hardware status page for devices that need a physical address
+ * in the register.
+@@ -101,7 +128,7 @@ static int i915_init_phys_hws(struct drm_device *dev)
+ memset(dev_priv->hw_status_page, 0, PAGE_SIZE);
+
+ I915_WRITE(HWS_PGA, dev_priv->dma_status_page);
+- DRM_DEBUG_DRIVER(I915_DRV, "Enabled hardware status page\n");
++ DRM_DEBUG_DRIVER("Enabled hardware status page\n");
+ return 0;
+ }
+
+@@ -187,8 +214,7 @@ static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init)
+ master_priv->sarea_priv = (drm_i915_sarea_t *)
+ ((u8 *)master_priv->sarea->handle + init->sarea_priv_offset);
+ } else {
+- DRM_DEBUG_DRIVER(I915_DRV,
+- "sarea not found assuming DRI2 userspace\n");
++ DRM_DEBUG_DRIVER("sarea not found assuming DRI2 userspace\n");
+ }
+
+ if (init->ring_size != 0) {
+@@ -200,7 +226,6 @@ static int i915_initialize(struct drm_device * dev, drm_i915_init_t * init)
+ }
+
+ dev_priv->ring.Size = init->ring_size;
+- dev_priv->ring.tail_mask = dev_priv->ring.Size - 1;
+
+ dev_priv->ring.map.offset = init->ring_start;
+ dev_priv->ring.map.size = init->ring_size;
+@@ -238,7 +263,7 @@ static int i915_dma_resume(struct drm_device * dev)
+ {
+ drm_i915_private_t *dev_priv = (drm_i915_private_t *) dev->dev_private;
+
+- DRM_DEBUG_DRIVER(I915_DRV, "%s\n", __func__);
++ DRM_DEBUG_DRIVER("%s\n", __func__);
+
+ if (dev_priv->ring.map.handle == NULL) {
+ DRM_ERROR("can not ioremap virtual address for"
+@@ -251,14 +276,14 @@ static int i915_dma_resume(struct drm_device * dev)
+ DRM_ERROR("Can not find hardware status page\n");
+ return -EINVAL;
+ }
+- DRM_DEBUG_DRIVER(I915_DRV, "hw status page @ %p\n",
++ DRM_DEBUG_DRIVER("hw status page @ %p\n",
+ dev_priv->hw_status_page);
+
+ if (dev_priv->status_gfx_addr != 0)
+ I915_WRITE(HWS_PGA, dev_priv->status_gfx_addr);
+ else
+ I915_WRITE(HWS_PGA, dev_priv->dma_status_page);
+- DRM_DEBUG_DRIVER(I915_DRV, "Enabled hardware status page\n");
++ DRM_DEBUG_DRIVER("Enabled hardware status page\n");
+
+ return 0;
+ }
+@@ -552,7 +577,7 @@ static int i915_dispatch_flip(struct drm_device * dev)
+ if (!master_priv->sarea_priv)
+ return -EINVAL;
+
+- DRM_DEBUG_DRIVER(I915_DRV, "%s: page=%d pfCurrentPage=%d\n",
++ DRM_DEBUG_DRIVER("%s: page=%d pfCurrentPage=%d\n",
+ __func__,
+ dev_priv->current_page,
+ master_priv->sarea_priv->pf_current_page);
+@@ -633,8 +658,7 @@ static int i915_batchbuffer(struct drm_device *dev, void *data,
+ return -EINVAL;
+ }
+
+- DRM_DEBUG_DRIVER(I915_DRV,
+- "i915 batchbuffer, start %x used %d cliprects %d\n",
++ DRM_DEBUG_DRIVER("i915 batchbuffer, start %x used %d cliprects %d\n",
+ batch->start, batch->used, batch->num_cliprects);
+
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+@@ -681,8 +705,7 @@ static int i915_cmdbuffer(struct drm_device *dev, void *data,
+ void *batch_data;
+ int ret;
+
+- DRM_DEBUG_DRIVER(I915_DRV,
+- "i915 cmdbuffer, buf %p sz %d cliprects %d\n",
++ DRM_DEBUG_DRIVER("i915 cmdbuffer, buf %p sz %d cliprects %d\n",
+ cmdbuf->buf, cmdbuf->sz, cmdbuf->num_cliprects);
+
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+@@ -735,7 +758,7 @@ static int i915_flip_bufs(struct drm_device *dev, void *data,
+ {
+ int ret;
+
+- DRM_DEBUG_DRIVER(I915_DRV, "%s\n", __func__);
++ DRM_DEBUG_DRIVER("%s\n", __func__);
+
+ RING_LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+@@ -778,7 +801,7 @@ static int i915_getparam(struct drm_device *dev, void *data,
+ value = dev_priv->num_fence_regs - dev_priv->fence_reg_start;
+ break;
+ default:
+- DRM_DEBUG_DRIVER(I915_DRV, "Unknown parameter %d\n",
++ DRM_DEBUG_DRIVER("Unknown parameter %d\n",
+ param->param);
+ return -EINVAL;
+ }
+@@ -819,7 +842,7 @@ static int i915_setparam(struct drm_device *dev, void *data,
+ dev_priv->fence_reg_start = param->value;
+ break;
+ default:
+- DRM_DEBUG_DRIVER(I915_DRV, "unknown parameter %d\n",
++ DRM_DEBUG_DRIVER("unknown parameter %d\n",
+ param->param);
+ return -EINVAL;
+ }
+@@ -846,7 +869,7 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
+ return 0;
+ }
+
+- DRM_DEBUG("set status page addr 0x%08x\n", (u32)hws->addr);
++ DRM_DEBUG_DRIVER("set status page addr 0x%08x\n", (u32)hws->addr);
+
+ dev_priv->status_gfx_addr = hws->addr & (0x1ffff<<12);
+
+@@ -868,13 +891,25 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
+
+ memset(dev_priv->hw_status_page, 0, PAGE_SIZE);
+ I915_WRITE(HWS_PGA, dev_priv->status_gfx_addr);
+- DRM_DEBUG_DRIVER(I915_DRV, "load hws HWS_PGA with gfx mem 0x%x\n",
++ DRM_DEBUG_DRIVER("load hws HWS_PGA with gfx mem 0x%x\n",
+ dev_priv->status_gfx_addr);
+- DRM_DEBUG_DRIVER(I915_DRV, "load hws at %p\n",
++ DRM_DEBUG_DRIVER("load hws at %p\n",
+ dev_priv->hw_status_page);
+ return 0;
+ }
+
++static int i915_get_bridge_dev(struct drm_device *dev)
++{
++ struct drm_i915_private *dev_priv = dev->dev_private;
++
++ dev_priv->bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
++ if (!dev_priv->bridge_dev) {
++ DRM_ERROR("bridge device not found\n");
++ return -1;
++ }
++ return 0;
++}
++
+ /**
+ * i915_probe_agp - get AGP bootup configuration
+ * @pdev: PCI device
+@@ -888,20 +923,13 @@ static int i915_set_status_page(struct drm_device *dev, void *data,
+ static int i915_probe_agp(struct drm_device *dev, uint32_t *aperture_size,
+ uint32_t *preallocated_size)
+ {
+- struct pci_dev *bridge_dev;
++ struct drm_i915_private *dev_priv = dev->dev_private;
+ u16 tmp = 0;
+ unsigned long overhead;
+ unsigned long stolen;
+
+- bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
+- if (!bridge_dev) {
+- DRM_ERROR("bridge device not found\n");
+- return -1;
+- }
+-
+ /* Get the fb aperture size and "stolen" memory amount. */
+- pci_read_config_word(bridge_dev, INTEL_GMCH_CTRL, &tmp);
+- pci_dev_put(bridge_dev);
++ pci_read_config_word(dev_priv->bridge_dev, INTEL_GMCH_CTRL, &tmp);
+
+ *aperture_size = 1024 * 1024;
+ *preallocated_size = 1024 * 1024;
+@@ -1153,11 +1181,16 @@ int i915_driver_load(struct drm_device *dev, unsigned long flags)
+ base = drm_get_resource_start(dev, mmio_bar);
+ size = drm_get_resource_len(dev, mmio_bar);
+
++ if (i915_get_bridge_dev(dev)) {
++ ret = -EIO;
++ goto free_priv;
++ }
++
+ dev_priv->regs = ioremap(base, size);
+ if (!dev_priv->regs) {
+ DRM_ERROR("failed to map registers\n");
+ ret = -EIO;
+- goto free_priv;
++ goto put_bridge;
+ }
+
+ dev_priv->mm.gtt_mapping =
+@@ -1269,6 +1302,8 @@ out_iomapfree:
+ io_mapping_free(dev_priv->mm.gtt_mapping);
+ out_rmmap:
+ iounmap(dev_priv->regs);
++put_bridge:
++ pci_dev_put(dev_priv->bridge_dev);
+ free_priv:
+ kfree(dev_priv);
+ return ret;
+@@ -1312,6 +1347,7 @@ int i915_driver_unload(struct drm_device *dev)
+ i915_gem_lastclose(dev);
+ }
+
++ pci_dev_put(dev_priv->bridge_dev);
+ kfree(dev->dev_private);
+
+ return 0;
+@@ -1321,7 +1357,7 @@ int i915_driver_open(struct drm_device *dev, struct drm_file *file_priv)
+ {
+ struct drm_i915_file_private *i915_file_priv;
+
+- DRM_DEBUG_DRIVER(I915_DRV, "\n");
++ DRM_DEBUG_DRIVER("\n");
+ i915_file_priv = (struct drm_i915_file_private *)
+ kmalloc(sizeof(*i915_file_priv), GFP_KERNEL);
+
+@@ -1352,7 +1388,7 @@ void i915_driver_lastclose(struct drm_device * dev)
+ drm_i915_private_t *dev_priv = dev->dev_private;
+
+ if (!dev_priv || drm_core_check_feature(dev, DRIVER_MODESET)) {
+- intelfb_restore();
++ drm_fb_helper_restore();
+ return;
+ }
+
+diff --git a/drivers/gpu/drm/i915/i915_drv.c b/drivers/gpu/drm/i915/i915_drv.c
+index fc4b68a..dbe568c 100644
+--- a/drivers/gpu/drm/i915/i915_drv.c
++++ b/drivers/gpu/drm/i915/i915_drv.c
+@@ -37,12 +37,15 @@
+ #include <linux/console.h>
+ #include "drm_crtc_helper.h"
+
+-static unsigned int i915_modeset = -1;
++static int i915_modeset = -1;
+ module_param_named(modeset, i915_modeset, int, 0400);
+
+ unsigned int i915_fbpercrtc = 0;
+ module_param_named(fbpercrtc, i915_fbpercrtc, int, 0400);
+
++unsigned int i915_powersave = 1;
++module_param_named(powersave, i915_powersave, int, 0400);
++
+ static struct drm_driver driver;
+
+ static struct pci_device_id pciidlist[] = {
+@@ -188,8 +191,8 @@ static struct drm_driver driver = {
+ .master_create = i915_master_create,
+ .master_destroy = i915_master_destroy,
+ #if defined(CONFIG_DEBUG_FS)
+- .debugfs_init = i915_gem_debugfs_init,
+- .debugfs_cleanup = i915_gem_debugfs_cleanup,
++ .debugfs_init = i915_debugfs_init,
++ .debugfs_cleanup = i915_debugfs_cleanup,
+ #endif
+ .gem_init_object = i915_gem_init_object,
+ .gem_free_object = i915_gem_free_object,
+diff --git a/drivers/gpu/drm/i915/i915_drv.h b/drivers/gpu/drm/i915/i915_drv.h
+index 5b4f87e..77ed060 100644
+--- a/drivers/gpu/drm/i915/i915_drv.h
++++ b/drivers/gpu/drm/i915/i915_drv.h
+@@ -85,7 +85,6 @@ struct drm_i915_gem_phys_object {
+ };
+
+ typedef struct _drm_i915_ring_buffer {
+- int tail_mask;
+ unsigned long Size;
+ u8 *virtual_start;
+ int head;
+@@ -156,6 +155,7 @@ typedef struct drm_i915_private {
+
+ void __iomem *regs;
+
++ struct pci_dev *bridge_dev;
+ drm_i915_ring_buffer_t ring;
+
+ drm_dma_handle_t *status_page_dmah;
+@@ -311,7 +311,7 @@ typedef struct drm_i915_private {
+ u32 saveIMR;
+ u32 saveCACHE_MODE_0;
+ u32 saveD_STATE;
+- u32 saveCG_2D_DIS;
++ u32 saveDSPCLK_GATE_D;
+ u32 saveMI_ARB_STATE;
+ u32 saveSWF0[16];
+ u32 saveSWF1[16];
+@@ -443,6 +443,14 @@ typedef struct drm_i915_private {
+ struct drm_i915_gem_phys_object *phys_objs[I915_MAX_PHYS_OBJECT];
+ } mm;
+ struct sdvo_device_mapping sdvo_mappings[2];
++
++ /* Reclocking support */
++ bool render_reclock_avail;
++ bool lvds_downclock_avail;
++ struct work_struct idle_work;
++ struct timer_list idle_timer;
++ bool busy;
++ u16 orig_clock;
+ } drm_i915_private_t;
+
+ /** driver private structure attached to each drm_gem_object */
+@@ -575,6 +583,7 @@ enum intel_chip_family {
+ extern struct drm_ioctl_desc i915_ioctls[];
+ extern int i915_max_ioctl;
+ extern unsigned int i915_fbpercrtc;
++extern unsigned int i915_powersave;
+
+ extern int i915_master_create(struct drm_device *dev, struct drm_master *master);
+ extern void i915_master_destroy(struct drm_device *dev, struct drm_master *master);
+@@ -730,8 +739,8 @@ void i915_gem_dump_object(struct drm_gem_object *obj, int len,
+ void i915_dump_lru(struct drm_device *dev, const char *where);
+
+ /* i915_debugfs.c */
+-int i915_gem_debugfs_init(struct drm_minor *minor);
+-void i915_gem_debugfs_cleanup(struct drm_minor *minor);
++int i915_debugfs_init(struct drm_minor *minor);
++void i915_debugfs_cleanup(struct drm_minor *minor);
+
+ /* i915_suspend.c */
+ extern int i915_save_state(struct drm_device *dev);
+@@ -781,33 +790,32 @@ extern void intel_modeset_cleanup(struct drm_device *dev);
+
+ #define I915_VERBOSE 0
+
+-#define RING_LOCALS unsigned int outring, ringmask, outcount; \
+- volatile char *virt;
+-
+-#define BEGIN_LP_RING(n) do { \
+- if (I915_VERBOSE) \
+- DRM_DEBUG("BEGIN_LP_RING(%d)\n", (n)); \
+- if (dev_priv->ring.space < (n)*4) \
+- i915_wait_ring(dev, (n)*4, __func__); \
+- outcount = 0; \
+- outring = dev_priv->ring.tail; \
+- ringmask = dev_priv->ring.tail_mask; \
+- virt = dev_priv->ring.virtual_start; \
++#define RING_LOCALS volatile unsigned int *ring_virt__;
++
++#define BEGIN_LP_RING(n) do { \
++ int bytes__ = 4*(n); \
++ if (I915_VERBOSE) DRM_DEBUG("BEGIN_LP_RING(%d)\n", (n)); \
++ /* a wrap must occur between instructions so pad beforehand */ \
++ if (unlikely (dev_priv->ring.tail + bytes__ > dev_priv->ring.Size)) \
++ i915_wrap_ring(dev); \
++ if (unlikely (dev_priv->ring.space < bytes__)) \
++ i915_wait_ring(dev, bytes__, __func__); \
++ ring_virt__ = (unsigned int *) \
++ (dev_priv->ring.virtual_start + dev_priv->ring.tail); \
++ dev_priv->ring.tail += bytes__; \
++ dev_priv->ring.tail &= dev_priv->ring.Size - 1; \
++ dev_priv->ring.space -= bytes__; \
+ } while (0)
+
+-#define OUT_RING(n) do { \
++#define OUT_RING(n) do { \
+ if (I915_VERBOSE) DRM_DEBUG(" OUT_RING %x\n", (int)(n)); \
+- *(volatile unsigned int *)(virt + outring) = (n); \
+- outcount++; \
+- outring += 4; \
+- outring &= ringmask; \
++ *ring_virt__++ = (n); \
+ } while (0)
+
+ #define ADVANCE_LP_RING() do { \
+- if (I915_VERBOSE) DRM_DEBUG("ADVANCE_LP_RING %x\n", outring); \
+- dev_priv->ring.tail = outring; \
+- dev_priv->ring.space -= outcount * 4; \
+- I915_WRITE(PRB0_TAIL, outring); \
++ if (I915_VERBOSE) \
++ DRM_DEBUG("ADVANCE_LP_RING %x\n", dev_priv->ring.tail); \
++ I915_WRITE(PRB0_TAIL, dev_priv->ring.tail); \
+ } while(0)
+
+ /**
+@@ -830,6 +838,7 @@ extern void intel_modeset_cleanup(struct drm_device *dev);
+ #define I915_GEM_HWS_INDEX 0x20
+ #define I915_BREADCRUMB_INDEX 0x21
+
++extern int i915_wrap_ring(struct drm_device * dev);
+ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
+
+ #define IS_I830(dev) ((dev)->pci_device == 0x3577)
+@@ -903,6 +912,9 @@ extern int i915_wait_ring(struct drm_device * dev, int n, const char *caller);
+ /* dsparb controlled by hw only */
+ #define DSPARB_HWCONTROL(dev) (IS_G4X(dev) || IS_IGDNG(dev))
+
++#define HAS_FW_BLC(dev) (IS_I9XX(dev) || IS_G4X(dev) || IS_IGDNG(dev))
++#define HAS_PIPE_CXSR(dev) (IS_G4X(dev) || IS_IGDNG(dev))
++
+ #define PRIMARY_RINGBUFFER_SIZE (128*1024)
+
+ #endif
+diff --git a/drivers/gpu/drm/i915/i915_gem.c b/drivers/gpu/drm/i915/i915_gem.c
+index 80e5ba4..c673171 100644
+--- a/drivers/gpu/drm/i915/i915_gem.c
++++ b/drivers/gpu/drm/i915/i915_gem.c
+@@ -29,6 +29,7 @@
+ #include "drm.h"
+ #include "i915_drm.h"
+ #include "i915_drv.h"
++#include "intel_drv.h"
+ #include <linux/swap.h>
+ #include <linux/pci.h>
+
+@@ -111,7 +112,8 @@ i915_gem_create_ioctl(struct drm_device *dev, void *data,
+ {
+ struct drm_i915_gem_create *args = data;
+ struct drm_gem_object *obj;
+- int handle, ret;
++ int ret;
++ u32 handle;
+
+ args->size = roundup(args->size, PAGE_SIZE);
+
+@@ -981,6 +983,7 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct drm_i915_gem_set_domain *args = data;
+ struct drm_gem_object *obj;
++ struct drm_i915_gem_object *obj_priv;
+ uint32_t read_domains = args->read_domains;
+ uint32_t write_domain = args->write_domain;
+ int ret;
+@@ -1004,15 +1007,17 @@ i915_gem_set_domain_ioctl(struct drm_device *dev, void *data,
+ obj = drm_gem_object_lookup(dev, file_priv, args->handle);
+ if (obj == NULL)
+ return -EBADF;
++ obj_priv = obj->driver_private;
+
+ mutex_lock(&dev->struct_mutex);
++
++ intel_mark_busy(dev, obj);
++
+ #if WATCH_BUF
+ DRM_INFO("set_domain_ioctl %p(%zd), %08x %08x\n",
+ obj, obj->size, read_domains, write_domain);
+ #endif
+ if (read_domains & I915_GEM_DOMAIN_GTT) {
+- struct drm_i915_gem_object *obj_priv = obj->driver_private;
+-
+ ret = i915_gem_object_set_to_gtt_domain(obj, write_domain != 0);
+
+ /* Update the LRU on the fence for the CPU access that's
+@@ -2776,6 +2781,8 @@ i915_gem_object_set_to_gpu_domain(struct drm_gem_object *obj)
+ BUG_ON(obj->pending_read_domains & I915_GEM_DOMAIN_CPU);
+ BUG_ON(obj->pending_write_domain == I915_GEM_DOMAIN_CPU);
+
++ intel_mark_busy(dev, obj);
++
+ #if WATCH_BUF
+ DRM_INFO("%s: object %p read %08x -> %08x write %08x -> %08x\n",
+ __func__, obj,
+@@ -4093,7 +4100,6 @@ i915_gem_init_ringbuffer(struct drm_device *dev)
+
+ /* Set up the kernel mapping for the ring. */
+ ring->Size = obj->size;
+- ring->tail_mask = obj->size - 1;
+
+ ring->map.offset = dev->agp->base + obj_priv->gtt_offset;
+ ring->map.size = obj->size;
+diff --git a/drivers/gpu/drm/i915/i915_gem_debugfs.c b/drivers/gpu/drm/i915/i915_gem_debugfs.c
+deleted file mode 100644
+index cb3b974..0000000
+--- a/drivers/gpu/drm/i915/i915_gem_debugfs.c
++++ /dev/null
+@@ -1,396 +0,0 @@
+-/*
+- * Copyright © 2008 Intel Corporation
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice (including the next
+- * paragraph) shall be included in all copies or substantial portions of the
+- * Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
+- * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING
+- * FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS
+- * IN THE SOFTWARE.
+- *
+- * Authors:
+- * Eric Anholt <eric@anholt.net>
+- * Keith Packard <keithp@keithp.com>
+- *
+- */
+-
+-#include <linux/seq_file.h>
+-#include "drmP.h"
+-#include "drm.h"
+-#include "i915_drm.h"
+-#include "i915_drv.h"
+-
+-#define DRM_I915_RING_DEBUG 1
+-
+-
+-#if defined(CONFIG_DEBUG_FS)
+-
+-#define ACTIVE_LIST 1
+-#define FLUSHING_LIST 2
+-#define INACTIVE_LIST 3
+-
+-static const char *get_pin_flag(struct drm_i915_gem_object *obj_priv)
+-{
+- if (obj_priv->user_pin_count > 0)
+- return "P";
+- else if (obj_priv->pin_count > 0)
+- return "p";
+- else
+- return " ";
+-}
+-
+-static const char *get_tiling_flag(struct drm_i915_gem_object *obj_priv)
+-{
+- switch (obj_priv->tiling_mode) {
+- default:
+- case I915_TILING_NONE: return " ";
+- case I915_TILING_X: return "X";
+- case I915_TILING_Y: return "Y";
+- }
+-}
+-
+-static int i915_gem_object_list_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- uintptr_t list = (uintptr_t) node->info_ent->data;
+- struct list_head *head;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- struct drm_i915_gem_object *obj_priv;
+- spinlock_t *lock = NULL;
+-
+- switch (list) {
+- case ACTIVE_LIST:
+- seq_printf(m, "Active:\n");
+- lock = &dev_priv->mm.active_list_lock;
+- head = &dev_priv->mm.active_list;
+- break;
+- case INACTIVE_LIST:
+- seq_printf(m, "Inactive:\n");
+- head = &dev_priv->mm.inactive_list;
+- break;
+- case FLUSHING_LIST:
+- seq_printf(m, "Flushing:\n");
+- head = &dev_priv->mm.flushing_list;
+- break;
+- default:
+- DRM_INFO("Ooops, unexpected list\n");
+- return 0;
+- }
+-
+- if (lock)
+- spin_lock(lock);
+- list_for_each_entry(obj_priv, head, list)
+- {
+- struct drm_gem_object *obj = obj_priv->obj;
+-
+- seq_printf(m, " %p: %s %08x %08x %d",
+- obj,
+- get_pin_flag(obj_priv),
+- obj->read_domains, obj->write_domain,
+- obj_priv->last_rendering_seqno);
+-
+- if (obj->name)
+- seq_printf(m, " (name: %d)", obj->name);
+- if (obj_priv->fence_reg != I915_FENCE_REG_NONE)
+- seq_printf(m, " (fence: %d)", obj_priv->fence_reg);
+- if (obj_priv->gtt_space != NULL)
+- seq_printf(m, " (gtt_offset: %08x)", obj_priv->gtt_offset);
+-
+- seq_printf(m, "\n");
+- }
+-
+- if (lock)
+- spin_unlock(lock);
+- return 0;
+-}
+-
+-static int i915_gem_request_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- struct drm_i915_gem_request *gem_request;
+-
+- seq_printf(m, "Request:\n");
+- list_for_each_entry(gem_request, &dev_priv->mm.request_list, list) {
+- seq_printf(m, " %d @ %d\n",
+- gem_request->seqno,
+- (int) (jiffies - gem_request->emitted_jiffies));
+- }
+- return 0;
+-}
+-
+-static int i915_gem_seqno_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+-
+- if (dev_priv->hw_status_page != NULL) {
+- seq_printf(m, "Current sequence: %d\n",
+- i915_get_gem_seqno(dev));
+- } else {
+- seq_printf(m, "Current sequence: hws uninitialized\n");
+- }
+- seq_printf(m, "Waiter sequence: %d\n",
+- dev_priv->mm.waiting_gem_seqno);
+- seq_printf(m, "IRQ sequence: %d\n", dev_priv->mm.irq_gem_seqno);
+- return 0;
+-}
+-
+-
+-static int i915_interrupt_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+-
+- seq_printf(m, "Interrupt enable: %08x\n",
+- I915_READ(IER));
+- seq_printf(m, "Interrupt identity: %08x\n",
+- I915_READ(IIR));
+- seq_printf(m, "Interrupt mask: %08x\n",
+- I915_READ(IMR));
+- seq_printf(m, "Pipe A stat: %08x\n",
+- I915_READ(PIPEASTAT));
+- seq_printf(m, "Pipe B stat: %08x\n",
+- I915_READ(PIPEBSTAT));
+- seq_printf(m, "Interrupts received: %d\n",
+- atomic_read(&dev_priv->irq_received));
+- if (dev_priv->hw_status_page != NULL) {
+- seq_printf(m, "Current sequence: %d\n",
+- i915_get_gem_seqno(dev));
+- } else {
+- seq_printf(m, "Current sequence: hws uninitialized\n");
+- }
+- seq_printf(m, "Waiter sequence: %d\n",
+- dev_priv->mm.waiting_gem_seqno);
+- seq_printf(m, "IRQ sequence: %d\n",
+- dev_priv->mm.irq_gem_seqno);
+- return 0;
+-}
+-
+-static int i915_gem_fence_regs_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- int i;
+-
+- seq_printf(m, "Reserved fences = %d\n", dev_priv->fence_reg_start);
+- seq_printf(m, "Total fences = %d\n", dev_priv->num_fence_regs);
+- for (i = 0; i < dev_priv->num_fence_regs; i++) {
+- struct drm_gem_object *obj = dev_priv->fence_regs[i].obj;
+-
+- if (obj == NULL) {
+- seq_printf(m, "Fenced object[%2d] = unused\n", i);
+- } else {
+- struct drm_i915_gem_object *obj_priv;
+-
+- obj_priv = obj->driver_private;
+- seq_printf(m, "Fenced object[%2d] = %p: %s "
+- "%08x %08zx %08x %s %08x %08x %d",
+- i, obj, get_pin_flag(obj_priv),
+- obj_priv->gtt_offset,
+- obj->size, obj_priv->stride,
+- get_tiling_flag(obj_priv),
+- obj->read_domains, obj->write_domain,
+- obj_priv->last_rendering_seqno);
+- if (obj->name)
+- seq_printf(m, " (name: %d)", obj->name);
+- seq_printf(m, "\n");
+- }
+- }
+-
+- return 0;
+-}
+-
+-static int i915_hws_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- int i;
+- volatile u32 *hws;
+-
+- hws = (volatile u32 *)dev_priv->hw_status_page;
+- if (hws == NULL)
+- return 0;
+-
+- for (i = 0; i < 4096 / sizeof(u32) / 4; i += 4) {
+- seq_printf(m, "0x%08x: 0x%08x 0x%08x 0x%08x 0x%08x\n",
+- i * 4,
+- hws[i], hws[i + 1], hws[i + 2], hws[i + 3]);
+- }
+- return 0;
+-}
+-
+-static void i915_dump_pages(struct seq_file *m, struct page **pages, int page_count)
+-{
+- int page, i;
+- uint32_t *mem;
+-
+- for (page = 0; page < page_count; page++) {
+- mem = kmap(pages[page]);
+- for (i = 0; i < PAGE_SIZE; i += 4)
+- seq_printf(m, "%08x : %08x\n", i, mem[i / 4]);
+- kunmap(pages[page]);
+- }
+-}
+-
+-static int i915_batchbuffer_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- struct drm_gem_object *obj;
+- struct drm_i915_gem_object *obj_priv;
+- int ret;
+-
+- spin_lock(&dev_priv->mm.active_list_lock);
+-
+- list_for_each_entry(obj_priv, &dev_priv->mm.active_list, list) {
+- obj = obj_priv->obj;
+- if (obj->read_domains & I915_GEM_DOMAIN_COMMAND) {
+- ret = i915_gem_object_get_pages(obj);
+- if (ret) {
+- DRM_ERROR("Failed to get pages: %d\n", ret);
+- spin_unlock(&dev_priv->mm.active_list_lock);
+- return ret;
+- }
+-
+- seq_printf(m, "--- gtt_offset = 0x%08x\n", obj_priv->gtt_offset);
+- i915_dump_pages(m, obj_priv->pages, obj->size / PAGE_SIZE);
+-
+- i915_gem_object_put_pages(obj);
+- }
+- }
+-
+- spin_unlock(&dev_priv->mm.active_list_lock);
+-
+- return 0;
+-}
+-
+-static int i915_ringbuffer_data(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- u8 *virt;
+- uint32_t *ptr, off;
+-
+- if (!dev_priv->ring.ring_obj) {
+- seq_printf(m, "No ringbuffer setup\n");
+- return 0;
+- }
+-
+- virt = dev_priv->ring.virtual_start;
+-
+- for (off = 0; off < dev_priv->ring.Size; off += 4) {
+- ptr = (uint32_t *)(virt + off);
+- seq_printf(m, "%08x : %08x\n", off, *ptr);
+- }
+-
+- return 0;
+-}
+-
+-static int i915_ringbuffer_info(struct seq_file *m, void *data)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- unsigned int head, tail, mask;
+-
+- head = I915_READ(PRB0_HEAD) & HEAD_ADDR;
+- tail = I915_READ(PRB0_TAIL) & TAIL_ADDR;
+- mask = dev_priv->ring.tail_mask;
+-
+- seq_printf(m, "RingHead : %08x\n", head);
+- seq_printf(m, "RingTail : %08x\n", tail);
+- seq_printf(m, "RingMask : %08x\n", mask);
+- seq_printf(m, "RingSize : %08lx\n", dev_priv->ring.Size);
+- seq_printf(m, "Acthd : %08x\n", I915_READ(IS_I965G(dev) ? ACTHD_I965 : ACTHD));
+-
+- return 0;
+-}
+-
+-static int i915_error_state(struct seq_file *m, void *unused)
+-{
+- struct drm_info_node *node = (struct drm_info_node *) m->private;
+- struct drm_device *dev = node->minor->dev;
+- drm_i915_private_t *dev_priv = dev->dev_private;
+- struct drm_i915_error_state *error;
+- unsigned long flags;
+-
+- spin_lock_irqsave(&dev_priv->error_lock, flags);
+- if (!dev_priv->first_error) {
+- seq_printf(m, "no error state collected\n");
+- goto out;
+- }
+-
+- error = dev_priv->first_error;
+-
+- seq_printf(m, "Time: %ld s %ld us\n", error->time.tv_sec,
+- error->time.tv_usec);
+- seq_printf(m, "EIR: 0x%08x\n", error->eir);
+- seq_printf(m, " PGTBL_ER: 0x%08x\n", error->pgtbl_er);
+- seq_printf(m, " INSTPM: 0x%08x\n", error->instpm);
+- seq_printf(m, " IPEIR: 0x%08x\n", error->ipeir);
+- seq_printf(m, " IPEHR: 0x%08x\n", error->ipehr);
+- seq_printf(m, " INSTDONE: 0x%08x\n", error->instdone);
+- seq_printf(m, " ACTHD: 0x%08x\n", error->acthd);
+- if (IS_I965G(dev)) {
+- seq_printf(m, " INSTPS: 0x%08x\n", error->instps);
+- seq_printf(m, " INSTDONE1: 0x%08x\n", error->instdone1);
+- }
+-
+-out:
+- spin_unlock_irqrestore(&dev_priv->error_lock, flags);
+-
+- return 0;
+-}
+-
+-static struct drm_info_list i915_gem_debugfs_list[] = {
+- {"i915_gem_active", i915_gem_object_list_info, 0, (void *) ACTIVE_LIST},
+- {"i915_gem_flushing", i915_gem_object_list_info, 0, (void *) FLUSHING_LIST},
+- {"i915_gem_inactive", i915_gem_object_list_info, 0, (void *) INACTIVE_LIST},
+- {"i915_gem_request", i915_gem_request_info, 0},
+- {"i915_gem_seqno", i915_gem_seqno_info, 0},
+- {"i915_gem_fence_regs", i915_gem_fence_regs_info, 0},
+- {"i915_gem_interrupt", i915_interrupt_info, 0},
+- {"i915_gem_hws", i915_hws_info, 0},
+- {"i915_ringbuffer_data", i915_ringbuffer_data, 0},
+- {"i915_ringbuffer_info", i915_ringbuffer_info, 0},
+- {"i915_batchbuffers", i915_batchbuffer_info, 0},
+- {"i915_error_state", i915_error_state, 0},
+-};
+-#define I915_GEM_DEBUGFS_ENTRIES ARRAY_SIZE(i915_gem_debugfs_list)
+-
+-int i915_gem_debugfs_init(struct drm_minor *minor)
+-{
+- return drm_debugfs_create_files(i915_gem_debugfs_list,
+- I915_GEM_DEBUGFS_ENTRIES,
+- minor->debugfs_root, minor);
+-}
+-
+-void i915_gem_debugfs_cleanup(struct drm_minor *minor)
+-{
+- drm_debugfs_remove_files(i915_gem_debugfs_list,
+- I915_GEM_DEBUGFS_ENTRIES, minor);
+-}
+-
+-#endif /* CONFIG_DEBUG_FS */
+-
+diff --git a/drivers/gpu/drm/i915/i915_gem_tiling.c b/drivers/gpu/drm/i915/i915_gem_tiling.c
+index a2d527b..200e398 100644
+--- a/drivers/gpu/drm/i915/i915_gem_tiling.c
++++ b/drivers/gpu/drm/i915/i915_gem_tiling.c
+@@ -94,23 +94,15 @@
+ static int
+ intel_alloc_mchbar_resource(struct drm_device *dev)
+ {
+- struct pci_dev *bridge_dev;
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ int reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915;
+ u32 temp_lo, temp_hi = 0;
+ u64 mchbar_addr;
+ int ret = 0;
+
+- bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
+- if (!bridge_dev) {
+- DRM_DEBUG("no bridge dev?!\n");
+- ret = -ENODEV;
+- goto out;
+- }
+-
+ if (IS_I965G(dev))
+- pci_read_config_dword(bridge_dev, reg + 4, &temp_hi);
+- pci_read_config_dword(bridge_dev, reg, &temp_lo);
++ pci_read_config_dword(dev_priv->bridge_dev, reg + 4, &temp_hi);
++ pci_read_config_dword(dev_priv->bridge_dev, reg, &temp_lo);
+ mchbar_addr = ((u64)temp_hi << 32) | temp_lo;
+
+ /* If ACPI doesn't have it, assume we need to allocate it ourselves */
+@@ -118,30 +110,28 @@ intel_alloc_mchbar_resource(struct drm_device *dev)
+ if (mchbar_addr &&
+ pnp_range_reserved(mchbar_addr, mchbar_addr + MCHBAR_SIZE)) {
+ ret = 0;
+- goto out_put;
++ goto out;
+ }
+ #endif
+
+ /* Get some space for it */
+- ret = pci_bus_alloc_resource(bridge_dev->bus, &dev_priv->mch_res,
++ ret = pci_bus_alloc_resource(dev_priv->bridge_dev->bus, &dev_priv->mch_res,
+ MCHBAR_SIZE, MCHBAR_SIZE,
+ PCIBIOS_MIN_MEM,
+ 0, pcibios_align_resource,
+- bridge_dev);
++ dev_priv->bridge_dev);
+ if (ret) {
+ DRM_DEBUG("failed bus alloc: %d\n", ret);
+ dev_priv->mch_res.start = 0;
+- goto out_put;
++ goto out;
+ }
+
+ if (IS_I965G(dev))
+- pci_write_config_dword(bridge_dev, reg + 4,
++ pci_write_config_dword(dev_priv->bridge_dev, reg + 4,
+ upper_32_bits(dev_priv->mch_res.start));
+
+- pci_write_config_dword(bridge_dev, reg,
++ pci_write_config_dword(dev_priv->bridge_dev, reg,
+ lower_32_bits(dev_priv->mch_res.start));
+-out_put:
+- pci_dev_put(bridge_dev);
+ out:
+ return ret;
+ }
+@@ -150,44 +140,36 @@ out:
+ static bool
+ intel_setup_mchbar(struct drm_device *dev)
+ {
+- struct pci_dev *bridge_dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
+ int mchbar_reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915;
+ u32 temp;
+ bool need_disable = false, enabled;
+
+- bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
+- if (!bridge_dev) {
+- DRM_DEBUG("no bridge dev?!\n");
+- goto out;
+- }
+-
+ if (IS_I915G(dev) || IS_I915GM(dev)) {
+- pci_read_config_dword(bridge_dev, DEVEN_REG, &temp);
++ pci_read_config_dword(dev_priv->bridge_dev, DEVEN_REG, &temp);
+ enabled = !!(temp & DEVEN_MCHBAR_EN);
+ } else {
+- pci_read_config_dword(bridge_dev, mchbar_reg, &temp);
++ pci_read_config_dword(dev_priv->bridge_dev, mchbar_reg, &temp);
+ enabled = temp & 1;
+ }
+
+ /* If it's already enabled, don't have to do anything */
+ if (enabled)
+- goto out_put;
++ goto out;
+
+ if (intel_alloc_mchbar_resource(dev))
+- goto out_put;
++ goto out;
+
+ need_disable = true;
+
+ /* Space is allocated or reserved, so enable it. */
+ if (IS_I915G(dev) || IS_I915GM(dev)) {
+- pci_write_config_dword(bridge_dev, DEVEN_REG,
++ pci_write_config_dword(dev_priv->bridge_dev, DEVEN_REG,
+ temp | DEVEN_MCHBAR_EN);
+ } else {
+- pci_read_config_dword(bridge_dev, mchbar_reg, &temp);
+- pci_write_config_dword(bridge_dev, mchbar_reg, temp | 1);
++ pci_read_config_dword(dev_priv->bridge_dev, mchbar_reg, &temp);
++ pci_write_config_dword(dev_priv->bridge_dev, mchbar_reg, temp | 1);
+ }
+-out_put:
+- pci_dev_put(bridge_dev);
+ out:
+ return need_disable;
+ }
+@@ -196,25 +178,18 @@ static void
+ intel_teardown_mchbar(struct drm_device *dev, bool disable)
+ {
+ drm_i915_private_t *dev_priv = dev->dev_private;
+- struct pci_dev *bridge_dev;
+ int mchbar_reg = IS_I965G(dev) ? MCHBAR_I965 : MCHBAR_I915;
+ u32 temp;
+
+- bridge_dev = pci_get_bus_and_slot(0, PCI_DEVFN(0,0));
+- if (!bridge_dev) {
+- DRM_DEBUG("no bridge dev?!\n");
+- return;
+- }
+-
+ if (disable) {
+ if (IS_I915G(dev) || IS_I915GM(dev)) {
+- pci_read_config_dword(bridge_dev, DEVEN_REG, &temp);
++ pci_read_config_dword(dev_priv->bridge_dev, DEVEN_REG, &temp);
+ temp &= ~DEVEN_MCHBAR_EN;
+- pci_write_config_dword(bridge_dev, DEVEN_REG, temp);
++ pci_write_config_dword(dev_priv->bridge_dev, DEVEN_REG, temp);
+ } else {
+- pci_read_config_dword(bridge_dev, mchbar_reg, &temp);
++ pci_read_config_dword(dev_priv->bridge_dev, mchbar_reg, &temp);
+ temp &= ~1;
+- pci_write_config_dword(bridge_dev, mchbar_reg, temp);
++ pci_write_config_dword(dev_priv->bridge_dev, mchbar_reg, temp);
+ }
+ }
+
+@@ -234,7 +209,13 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
+ uint32_t swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
+ bool need_disable;
+
+- if (!IS_I9XX(dev)) {
++ if (IS_IGDNG(dev)) {
++ /* On IGDNG whatever DRAM config, GPU always do
++ * same swizzling setup.
++ */
++ swizzle_x = I915_BIT_6_SWIZZLE_9_10;
++ swizzle_y = I915_BIT_6_SWIZZLE_9;
++ } else if (!IS_I9XX(dev)) {
+ /* As far as we know, the 865 doesn't have these bit 6
+ * swizzling issues.
+ */
+@@ -317,13 +298,6 @@ i915_gem_detect_bit_6_swizzle(struct drm_device *dev)
+ }
+ }
+
+- /* FIXME: check with memory config on IGDNG */
+- if (IS_IGDNG(dev)) {
+- DRM_ERROR("disable tiling on IGDNG...\n");
+- swizzle_x = I915_BIT_6_SWIZZLE_UNKNOWN;
+- swizzle_y = I915_BIT_6_SWIZZLE_UNKNOWN;
+- }
+-
+ dev_priv->mm.bit_6_swizzle_x = swizzle_x;
+ dev_priv->mm.bit_6_swizzle_y = swizzle_y;
+ }
+diff --git a/drivers/gpu/drm/i915/i915_irq.c b/drivers/gpu/drm/i915/i915_irq.c
+index 7ebc84c..6c89f2f 100644
+--- a/drivers/gpu/drm/i915/i915_irq.c
++++ b/drivers/gpu/drm/i915/i915_irq.c
+@@ -565,6 +565,27 @@ irqreturn_t i915_driver_irq_handler(DRM_IRQ_ARGS)
+
+ I915_WRITE(PORT_HOTPLUG_STAT, hotplug_status);
+ I915_READ(PORT_HOTPLUG_STAT);
++
++ /* EOS interrupts occurs */
++ if (IS_IGD(dev) &&
++ (hotplug_status & CRT_EOS_INT_STATUS)) {
++ u32 temp;
++
++ DRM_DEBUG("EOS interrupt occurs\n");
++ /* status is already cleared */
++ temp = I915_READ(ADPA);
++ temp &= ~ADPA_DAC_ENABLE;
++ I915_WRITE(ADPA, temp);
++
++ temp = I915_READ(PORT_HOTPLUG_EN);
++ temp &= ~CRT_EOS_INT_EN;
++ I915_WRITE(PORT_HOTPLUG_EN, temp);
++
++ temp = I915_READ(PORT_HOTPLUG_STAT);
++ if (temp & CRT_EOS_INT_STATUS)
++ I915_WRITE(PORT_HOTPLUG_STAT,
++ CRT_EOS_INT_STATUS);
++ }
+ }
+
+ I915_WRITE(IIR, iir);
+diff --git a/drivers/gpu/drm/i915/i915_reg.h b/drivers/gpu/drm/i915/i915_reg.h
+index 2955083..e38cd21 100644
+--- a/drivers/gpu/drm/i915/i915_reg.h
++++ b/drivers/gpu/drm/i915/i915_reg.h
+@@ -55,7 +55,7 @@
+ /* PCI config space */
+
+ #define HPLLCC 0xc0 /* 855 only */
+-#define GC_CLOCK_CONTROL_MASK (3 << 0)
++#define GC_CLOCK_CONTROL_MASK (0xf << 0)
+ #define GC_CLOCK_133_200 (0 << 0)
+ #define GC_CLOCK_100_200 (1 << 0)
+ #define GC_CLOCK_100_133 (2 << 0)
+@@ -65,6 +65,25 @@
+ #define GC_DISPLAY_CLOCK_190_200_MHZ (0 << 4)
+ #define GC_DISPLAY_CLOCK_333_MHZ (4 << 4)
+ #define GC_DISPLAY_CLOCK_MASK (7 << 4)
++#define GM45_GC_RENDER_CLOCK_MASK (0xf << 0)
++#define GM45_GC_RENDER_CLOCK_266_MHZ (8 << 0)
++#define GM45_GC_RENDER_CLOCK_320_MHZ (9 << 0)
++#define GM45_GC_RENDER_CLOCK_400_MHZ (0xb << 0)
++#define GM45_GC_RENDER_CLOCK_533_MHZ (0xc << 0)
++#define I965_GC_RENDER_CLOCK_MASK (0xf << 0)
++#define I965_GC_RENDER_CLOCK_267_MHZ (2 << 0)
++#define I965_GC_RENDER_CLOCK_333_MHZ (3 << 0)
++#define I965_GC_RENDER_CLOCK_444_MHZ (4 << 0)
++#define I965_GC_RENDER_CLOCK_533_MHZ (5 << 0)
++#define I945_GC_RENDER_CLOCK_MASK (7 << 0)
++#define I945_GC_RENDER_CLOCK_166_MHZ (0 << 0)
++#define I945_GC_RENDER_CLOCK_200_MHZ (1 << 0)
++#define I945_GC_RENDER_CLOCK_250_MHZ (3 << 0)
++#define I945_GC_RENDER_CLOCK_400_MHZ (5 << 0)
++#define I915_GC_RENDER_CLOCK_MASK (7 << 0)
++#define I915_GC_RENDER_CLOCK_166_MHZ (0 << 0)
++#define I915_GC_RENDER_CLOCK_200_MHZ (1 << 0)
++#define I915_GC_RENDER_CLOCK_333_MHZ (4 << 0)
+ #define LBB 0xf4
+
+ /* VGA stuff */
+@@ -553,9 +572,118 @@
+ #define DPLLA_TEST_M_BYPASS (1 << 2)
+ #define DPLLA_INPUT_BUFFER_ENABLE (1 << 0)
+ #define D_STATE 0x6104
+-#define CG_2D_DIS 0x6200
+-#define DPCUNIT_CLOCK_GATE_DISABLE (1 << 24)
+-#define CG_3D_DIS 0x6204
++#define DSTATE_PLL_D3_OFF (1<<3)
++#define DSTATE_GFX_CLOCK_GATING (1<<1)
++#define DSTATE_DOT_CLOCK_GATING (1<<0)
++#define DSPCLK_GATE_D 0x6200
++# define DPUNIT_B_CLOCK_GATE_DISABLE (1 << 30) /* 965 */
++# define VSUNIT_CLOCK_GATE_DISABLE (1 << 29) /* 965 */
++# define VRHUNIT_CLOCK_GATE_DISABLE (1 << 28) /* 965 */
++# define VRDUNIT_CLOCK_GATE_DISABLE (1 << 27) /* 965 */
++# define AUDUNIT_CLOCK_GATE_DISABLE (1 << 26) /* 965 */
++# define DPUNIT_A_CLOCK_GATE_DISABLE (1 << 25) /* 965 */
++# define DPCUNIT_CLOCK_GATE_DISABLE (1 << 24) /* 965 */
++# define TVRUNIT_CLOCK_GATE_DISABLE (1 << 23) /* 915-945 */
++# define TVCUNIT_CLOCK_GATE_DISABLE (1 << 22) /* 915-945 */
++# define TVFUNIT_CLOCK_GATE_DISABLE (1 << 21) /* 915-945 */
++# define TVEUNIT_CLOCK_GATE_DISABLE (1 << 20) /* 915-945 */
++# define DVSUNIT_CLOCK_GATE_DISABLE (1 << 19) /* 915-945 */
++# define DSSUNIT_CLOCK_GATE_DISABLE (1 << 18) /* 915-945 */
++# define DDBUNIT_CLOCK_GATE_DISABLE (1 << 17) /* 915-945 */
++# define DPRUNIT_CLOCK_GATE_DISABLE (1 << 16) /* 915-945 */
++# define DPFUNIT_CLOCK_GATE_DISABLE (1 << 15) /* 915-945 */
++# define DPBMUNIT_CLOCK_GATE_DISABLE (1 << 14) /* 915-945 */
++# define DPLSUNIT_CLOCK_GATE_DISABLE (1 << 13) /* 915-945 */
++# define DPLUNIT_CLOCK_GATE_DISABLE (1 << 12) /* 915-945 */
++# define DPOUNIT_CLOCK_GATE_DISABLE (1 << 11)
++# define DPBUNIT_CLOCK_GATE_DISABLE (1 << 10)
++# define DCUNIT_CLOCK_GATE_DISABLE (1 << 9)
++# define DPUNIT_CLOCK_GATE_DISABLE (1 << 8)
++# define VRUNIT_CLOCK_GATE_DISABLE (1 << 7) /* 915+: reserved */
++# define OVHUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 830-865 */
++# define DPIOUNIT_CLOCK_GATE_DISABLE (1 << 6) /* 915-945 */
++# define OVFUNIT_CLOCK_GATE_DISABLE (1 << 5)
++# define OVBUNIT_CLOCK_GATE_DISABLE (1 << 4)
++/**
++ * This bit must be set on the 830 to prevent hangs when turning off the
++ * overlay scaler.
++ */
++# define OVRUNIT_CLOCK_GATE_DISABLE (1 << 3)
++# define OVCUNIT_CLOCK_GATE_DISABLE (1 << 2)
++# define OVUUNIT_CLOCK_GATE_DISABLE (1 << 1)
++# define ZVUNIT_CLOCK_GATE_DISABLE (1 << 0) /* 830 */
++# define OVLUNIT_CLOCK_GATE_DISABLE (1 << 0) /* 845,865 */
++
++#define RENCLK_GATE_D1 0x6204
++# define BLITTER_CLOCK_GATE_DISABLE (1 << 13) /* 945GM only */
++# define MPEG_CLOCK_GATE_DISABLE (1 << 12) /* 945GM only */
++# define PC_FE_CLOCK_GATE_DISABLE (1 << 11)
++# define PC_BE_CLOCK_GATE_DISABLE (1 << 10)
++# define WINDOWER_CLOCK_GATE_DISABLE (1 << 9)
++# define INTERPOLATOR_CLOCK_GATE_DISABLE (1 << 8)
++# define COLOR_CALCULATOR_CLOCK_GATE_DISABLE (1 << 7)
++# define MOTION_COMP_CLOCK_GATE_DISABLE (1 << 6)
++# define MAG_CLOCK_GATE_DISABLE (1 << 5)
++/** This bit must be unset on 855,865 */
++# define MECI_CLOCK_GATE_DISABLE (1 << 4)
++# define DCMP_CLOCK_GATE_DISABLE (1 << 3)
++# define MEC_CLOCK_GATE_DISABLE (1 << 2)
++# define MECO_CLOCK_GATE_DISABLE (1 << 1)
++/** This bit must be set on 855,865. */
++# define SV_CLOCK_GATE_DISABLE (1 << 0)
++# define I915_MPEG_CLOCK_GATE_DISABLE (1 << 16)
++# define I915_VLD_IP_PR_CLOCK_GATE_DISABLE (1 << 15)
++# define I915_MOTION_COMP_CLOCK_GATE_DISABLE (1 << 14)
++# define I915_BD_BF_CLOCK_GATE_DISABLE (1 << 13)
++# define I915_SF_SE_CLOCK_GATE_DISABLE (1 << 12)
++# define I915_WM_CLOCK_GATE_DISABLE (1 << 11)
++# define I915_IZ_CLOCK_GATE_DISABLE (1 << 10)
++# define I915_PI_CLOCK_GATE_DISABLE (1 << 9)
++# define I915_DI_CLOCK_GATE_DISABLE (1 << 8)
++# define I915_SH_SV_CLOCK_GATE_DISABLE (1 << 7)
++# define I915_PL_DG_QC_FT_CLOCK_GATE_DISABLE (1 << 6)
++# define I915_SC_CLOCK_GATE_DISABLE (1 << 5)
++# define I915_FL_CLOCK_GATE_DISABLE (1 << 4)
++# define I915_DM_CLOCK_GATE_DISABLE (1 << 3)
++# define I915_PS_CLOCK_GATE_DISABLE (1 << 2)
++# define I915_CC_CLOCK_GATE_DISABLE (1 << 1)
++# define I915_BY_CLOCK_GATE_DISABLE (1 << 0)
++
++# define I965_RCZ_CLOCK_GATE_DISABLE (1 << 30)
++/** This bit must always be set on 965G/965GM */
++# define I965_RCC_CLOCK_GATE_DISABLE (1 << 29)
++# define I965_RCPB_CLOCK_GATE_DISABLE (1 << 28)
++# define I965_DAP_CLOCK_GATE_DISABLE (1 << 27)
++# define I965_ROC_CLOCK_GATE_DISABLE (1 << 26)
++# define I965_GW_CLOCK_GATE_DISABLE (1 << 25)
++# define I965_TD_CLOCK_GATE_DISABLE (1 << 24)
++/** This bit must always be set on 965G */
++# define I965_ISC_CLOCK_GATE_DISABLE (1 << 23)
++# define I965_IC_CLOCK_GATE_DISABLE (1 << 22)
++# define I965_EU_CLOCK_GATE_DISABLE (1 << 21)
++# define I965_IF_CLOCK_GATE_DISABLE (1 << 20)
++# define I965_TC_CLOCK_GATE_DISABLE (1 << 19)
++# define I965_SO_CLOCK_GATE_DISABLE (1 << 17)
++# define I965_FBC_CLOCK_GATE_DISABLE (1 << 16)
++# define I965_MARI_CLOCK_GATE_DISABLE (1 << 15)
++# define I965_MASF_CLOCK_GATE_DISABLE (1 << 14)
++# define I965_MAWB_CLOCK_GATE_DISABLE (1 << 13)
++# define I965_EM_CLOCK_GATE_DISABLE (1 << 12)
++# define I965_UC_CLOCK_GATE_DISABLE (1 << 11)
++# define I965_SI_CLOCK_GATE_DISABLE (1 << 6)
++# define I965_MT_CLOCK_GATE_DISABLE (1 << 5)
++# define I965_PL_CLOCK_GATE_DISABLE (1 << 4)
++# define I965_DG_CLOCK_GATE_DISABLE (1 << 3)
++# define I965_QC_CLOCK_GATE_DISABLE (1 << 2)
++# define I965_FT_CLOCK_GATE_DISABLE (1 << 1)
++# define I965_DM_CLOCK_GATE_DISABLE (1 << 0)
++
++#define RENCLK_GATE_D2 0x6208
++#define VF_UNIT_CLOCK_GATE_DISABLE (1 << 9)
++#define GS_UNIT_CLOCK_GATE_DISABLE (1 << 7)
++#define CL_UNIT_CLOCK_GATE_DISABLE (1 << 6)
++#define RAMCLK_GATE_D 0x6210 /* CRL only */
++#define DEUC 0x6214 /* CRL only */
+
+ /*
+ * Palette regs
+@@ -683,6 +811,7 @@
+ #define SDVOB_HOTPLUG_INT_EN (1 << 26)
+ #define SDVOC_HOTPLUG_INT_EN (1 << 25)
+ #define TV_HOTPLUG_INT_EN (1 << 18)
++#define CRT_EOS_INT_EN (1 << 10)
+ #define CRT_HOTPLUG_INT_EN (1 << 9)
+ #define CRT_HOTPLUG_FORCE_DETECT (1 << 3)
+ #define CRT_HOTPLUG_ACTIVATION_PERIOD_32 (0 << 8)
+@@ -717,6 +846,7 @@
+ #define DPC_HOTPLUG_INT_STATUS (1 << 28)
+ #define HDMID_HOTPLUG_INT_STATUS (1 << 27)
+ #define DPD_HOTPLUG_INT_STATUS (1 << 27)
++#define CRT_EOS_INT_STATUS (1 << 12)
+ #define CRT_HOTPLUG_INT_STATUS (1 << 11)
+ #define TV_HOTPLUG_INT_STATUS (1 << 10)
+ #define CRT_HOTPLUG_MONITOR_MASK (3 << 8)
+@@ -1586,6 +1716,7 @@
+ #define PIPECONF_PROGRESSIVE (0 << 21)
+ #define PIPECONF_INTERLACE_W_FIELD_INDICATION (6 << 21)
+ #define PIPECONF_INTERLACE_FIELD_0_ONLY (7 << 21)
++#define PIPECONF_CXSR_DOWNCLOCK (1<<16)
+ #define PIPEASTAT 0x70024
+ #define PIPE_FIFO_UNDERRUN_STATUS (1UL<<31)
+ #define PIPE_CRC_ERROR_ENABLE (1UL<<29)
+@@ -1733,6 +1864,7 @@
+ #define DISPPLANE_NO_LINE_DOUBLE 0
+ #define DISPPLANE_STEREO_POLARITY_FIRST 0
+ #define DISPPLANE_STEREO_POLARITY_SECOND (1<<18)
++#define DISPPLANE_TRICKLE_FEED_DISABLE (1<<14) /* IGDNG */
+ #define DISPPLANE_TILED (1<<10)
+ #define DSPAADDR 0x70184
+ #define DSPASTRIDE 0x70188
+@@ -1913,6 +2045,9 @@
+ #define GTIIR 0x44018
+ #define GTIER 0x4401c
+
++#define DISP_ARB_CTL 0x45000
++#define DISP_TILE_SURFACE_SWIZZLING (1<<13)
++
+ /* PCH */
+
+ /* south display engine interrupt */
+diff --git a/drivers/gpu/drm/i915/i915_suspend.c b/drivers/gpu/drm/i915/i915_suspend.c
+index 1d04e19..20d4d19 100644
+--- a/drivers/gpu/drm/i915/i915_suspend.c
++++ b/drivers/gpu/drm/i915/i915_suspend.c
+@@ -461,7 +461,7 @@ int i915_save_state(struct drm_device *dev)
+
+ /* Clock gating state */
+ dev_priv->saveD_STATE = I915_READ(D_STATE);
+- dev_priv->saveCG_2D_DIS = I915_READ(CG_2D_DIS);
++ dev_priv->saveDSPCLK_GATE_D = I915_READ(DSPCLK_GATE_D);
+
+ /* Cache mode state */
+ dev_priv->saveCACHE_MODE_0 = I915_READ(CACHE_MODE_0);
+@@ -588,7 +588,7 @@ int i915_restore_state(struct drm_device *dev)
+
+ /* Clock gating state */
+ I915_WRITE (D_STATE, dev_priv->saveD_STATE);
+- I915_WRITE (CG_2D_DIS, dev_priv->saveCG_2D_DIS);
++ I915_WRITE (DSPCLK_GATE_D, dev_priv->saveDSPCLK_GATE_D);
+
+ /* Cache mode state */
+ I915_WRITE (CACHE_MODE_0, dev_priv->saveCACHE_MODE_0 | 0xffff0000);
+diff --git a/drivers/gpu/drm/i915/intel_bios.c b/drivers/gpu/drm/i915/intel_bios.c
+index f806fcc..1e28c16 100644
+--- a/drivers/gpu/drm/i915/intel_bios.c
++++ b/drivers/gpu/drm/i915/intel_bios.c
+@@ -355,8 +355,14 @@ parse_driver_features(struct drm_i915_private *dev_priv,
+ }
+
+ driver = find_section(bdb, BDB_DRIVER_FEATURES);
+- if (driver && driver->lvds_config == BDB_DRIVER_FEATURE_EDP)
++ if (!driver)
++ return;
++
++ if (driver->lvds_config == BDB_DRIVER_FEATURE_EDP)
+ dev_priv->edp_support = 1;
++
++ if (driver->dual_frequency)
++ dev_priv->render_reclock_avail = true;
+ }
+
+ /**
+diff --git a/drivers/gpu/drm/i915/intel_crt.c b/drivers/gpu/drm/i915/intel_crt.c
+index 590f81c..88814fa 100644
+--- a/drivers/gpu/drm/i915/intel_crt.c
++++ b/drivers/gpu/drm/i915/intel_crt.c
+@@ -64,6 +64,34 @@ static void intel_crt_dpms(struct drm_encoder *encoder, int mode)
+ }
+
+ I915_WRITE(reg, temp);
++
++ if (IS_IGD(dev)) {
++ if (mode == DRM_MODE_DPMS_OFF) {
++ /* turn off DAC */
++ temp = I915_READ(PORT_HOTPLUG_EN);
++ temp &= ~CRT_EOS_INT_EN;
++ I915_WRITE(PORT_HOTPLUG_EN, temp);
++
++ temp = I915_READ(PORT_HOTPLUG_STAT);
++ if (temp & CRT_EOS_INT_STATUS)
++ I915_WRITE(PORT_HOTPLUG_STAT,
++ CRT_EOS_INT_STATUS);
++ } else {
++ /* turn on DAC. EOS interrupt must be enabled after DAC
++ * is enabled, so it sounds not good to enable it in
++ * i915_driver_irq_postinstall()
++ * wait 12.5ms after DAC is enabled
++ */
++ msleep(13);
++ temp = I915_READ(PORT_HOTPLUG_STAT);
++ if (temp & CRT_EOS_INT_STATUS)
++ I915_WRITE(PORT_HOTPLUG_STAT,
++ CRT_EOS_INT_STATUS);
++ temp = I915_READ(PORT_HOTPLUG_EN);
++ temp |= CRT_EOS_INT_EN;
++ I915_WRITE(PORT_HOTPLUG_EN, temp);
++ }
++ }
+ }
+
+ static int intel_crt_mode_valid(struct drm_connector *connector,
+diff --git a/drivers/gpu/drm/i915/intel_display.c b/drivers/gpu/drm/i915/intel_display.c
+index 748ed50..155719f 100644
+--- a/drivers/gpu/drm/i915/intel_display.c
++++ b/drivers/gpu/drm/i915/intel_display.c
+@@ -38,6 +38,7 @@
+
+ bool intel_pipe_has_type (struct drm_crtc *crtc, int type);
+ static void intel_update_watermarks(struct drm_device *dev);
++static void intel_increase_pllclock(struct drm_crtc *crtc, bool schedule);
+
+ typedef struct {
+ /* given values */
+@@ -67,6 +68,8 @@ struct intel_limit {
+ intel_p2_t p2;
+ bool (* find_pll)(const intel_limit_t *, struct drm_crtc *,
+ int, int, intel_clock_t *);
++ bool (* find_reduced_pll)(const intel_limit_t *, struct drm_crtc *,
++ int, int, intel_clock_t *);
+ };
+
+ #define I8XX_DOT_MIN 25000
+@@ -261,6 +264,9 @@ static bool
+ intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *best_clock);
+ static bool
++intel_find_best_reduced_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
++ int target, int refclk, intel_clock_t *best_clock);
++static bool
+ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *best_clock);
+ static bool
+@@ -286,6 +292,7 @@ static const intel_limit_t intel_limits_i8xx_dvo = {
+ .p2 = { .dot_limit = I8XX_P2_SLOW_LIMIT,
+ .p2_slow = I8XX_P2_SLOW, .p2_fast = I8XX_P2_FAST },
+ .find_pll = intel_find_best_PLL,
++ .find_reduced_pll = intel_find_best_reduced_PLL,
+ };
+
+ static const intel_limit_t intel_limits_i8xx_lvds = {
+@@ -300,6 +307,7 @@ static const intel_limit_t intel_limits_i8xx_lvds = {
+ .p2 = { .dot_limit = I8XX_P2_SLOW_LIMIT,
+ .p2_slow = I8XX_P2_LVDS_SLOW, .p2_fast = I8XX_P2_LVDS_FAST },
+ .find_pll = intel_find_best_PLL,
++ .find_reduced_pll = intel_find_best_reduced_PLL,
+ };
+
+ static const intel_limit_t intel_limits_i9xx_sdvo = {
+@@ -314,6 +322,7 @@ static const intel_limit_t intel_limits_i9xx_sdvo = {
+ .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT,
+ .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST },
+ .find_pll = intel_find_best_PLL,
++ .find_reduced_pll = intel_find_best_reduced_PLL,
+ };
+
+ static const intel_limit_t intel_limits_i9xx_lvds = {
+@@ -331,6 +340,7 @@ static const intel_limit_t intel_limits_i9xx_lvds = {
+ .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT,
+ .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_FAST },
+ .find_pll = intel_find_best_PLL,
++ .find_reduced_pll = intel_find_best_reduced_PLL,
+ };
+
+ /* below parameter and function is for G4X Chipset Family*/
+@@ -348,6 +358,7 @@ static const intel_limit_t intel_limits_g4x_sdvo = {
+ .p2_fast = G4X_P2_SDVO_FAST
+ },
+ .find_pll = intel_g4x_find_best_PLL,
++ .find_reduced_pll = intel_g4x_find_best_PLL,
+ };
+
+ static const intel_limit_t intel_limits_g4x_hdmi = {
+@@ -364,6 +375,7 @@ static const intel_limit_t intel_limits_g4x_hdmi = {
+ .p2_fast = G4X_P2_HDMI_DAC_FAST
+ },
+ .find_pll = intel_g4x_find_best_PLL,
++ .find_reduced_pll = intel_g4x_find_best_PLL,
+ };
+
+ static const intel_limit_t intel_limits_g4x_single_channel_lvds = {
+@@ -388,6 +400,7 @@ static const intel_limit_t intel_limits_g4x_single_channel_lvds = {
+ .p2_fast = G4X_P2_SINGLE_CHANNEL_LVDS_FAST
+ },
+ .find_pll = intel_g4x_find_best_PLL,
++ .find_reduced_pll = intel_g4x_find_best_PLL,
+ };
+
+ static const intel_limit_t intel_limits_g4x_dual_channel_lvds = {
+@@ -412,6 +425,7 @@ static const intel_limit_t intel_limits_g4x_dual_channel_lvds = {
+ .p2_fast = G4X_P2_DUAL_CHANNEL_LVDS_FAST
+ },
+ .find_pll = intel_g4x_find_best_PLL,
++ .find_reduced_pll = intel_g4x_find_best_PLL,
+ };
+
+ static const intel_limit_t intel_limits_g4x_display_port = {
+@@ -449,6 +463,7 @@ static const intel_limit_t intel_limits_igd_sdvo = {
+ .p2 = { .dot_limit = I9XX_P2_SDVO_DAC_SLOW_LIMIT,
+ .p2_slow = I9XX_P2_SDVO_DAC_SLOW, .p2_fast = I9XX_P2_SDVO_DAC_FAST },
+ .find_pll = intel_find_best_PLL,
++ .find_reduced_pll = intel_find_best_reduced_PLL,
+ };
+
+ static const intel_limit_t intel_limits_igd_lvds = {
+@@ -464,6 +479,7 @@ static const intel_limit_t intel_limits_igd_lvds = {
+ .p2 = { .dot_limit = I9XX_P2_LVDS_SLOW_LIMIT,
+ .p2_slow = I9XX_P2_LVDS_SLOW, .p2_fast = I9XX_P2_LVDS_SLOW },
+ .find_pll = intel_find_best_PLL,
++ .find_reduced_pll = intel_find_best_reduced_PLL,
+ };
+
+ static const intel_limit_t intel_limits_igdng_sdvo = {
+@@ -688,15 +704,16 @@ intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+
+ memset (best_clock, 0, sizeof (*best_clock));
+
+- for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) {
+- for (clock.m2 = limit->m2.min; clock.m2 <= limit->m2.max; clock.m2++) {
+- /* m1 is always 0 in IGD */
+- if (clock.m2 >= clock.m1 && !IS_IGD(dev))
+- break;
+- for (clock.n = limit->n.min; clock.n <= limit->n.max;
+- clock.n++) {
+- for (clock.p1 = limit->p1.min;
+- clock.p1 <= limit->p1.max; clock.p1++) {
++ for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
++ for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max;
++ clock.m1++) {
++ for (clock.m2 = limit->m2.min;
++ clock.m2 <= limit->m2.max; clock.m2++) {
++ /* m1 is always 0 in IGD */
++ if (clock.m2 >= clock.m1 && !IS_IGD(dev))
++ break;
++ for (clock.n = limit->n.min;
++ clock.n <= limit->n.max; clock.n++) {
+ int this_err;
+
+ intel_clock(dev, refclk, &clock);
+@@ -717,6 +734,46 @@ intel_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ return (err != target);
+ }
+
++
++static bool
++intel_find_best_reduced_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
++ int target, int refclk, intel_clock_t *best_clock)
++
++{
++ struct drm_device *dev = crtc->dev;
++ intel_clock_t clock;
++ int err = target;
++ bool found = false;
++
++ memcpy(&clock, best_clock, sizeof(intel_clock_t));
++
++ for (clock.m1 = limit->m1.min; clock.m1 <= limit->m1.max; clock.m1++) {
++ for (clock.m2 = limit->m2.min; clock.m2 <= limit->m2.max; clock.m2++) {
++ /* m1 is always 0 in IGD */
++ if (clock.m2 >= clock.m1 && !IS_IGD(dev))
++ break;
++ for (clock.n = limit->n.min; clock.n <= limit->n.max;
++ clock.n++) {
++ int this_err;
++
++ intel_clock(dev, refclk, &clock);
++
++ if (!intel_PLL_is_valid(crtc, &clock))
++ continue;
++
++ this_err = abs(clock.dot - target);
++ if (this_err < err) {
++ *best_clock = clock;
++ err = this_err;
++ found = true;
++ }
++ }
++ }
++ }
++
++ return found;
++}
++
+ static bool
+ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ int target, int refclk, intel_clock_t *best_clock)
+@@ -747,7 +804,7 @@ intel_g4x_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+ max_n = limit->n.max;
+ /* based on hardware requriment prefer smaller n to precision */
+ for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
+- /* based on hardware requirment prefere larger m1,m2, p1 */
++ /* based on hardware requirment prefere larger m1,m2 */
+ for (clock.m1 = limit->m1.max;
+ clock.m1 >= limit->m1.min; clock.m1--) {
+ for (clock.m2 = limit->m2.max;
+@@ -832,15 +889,14 @@ intel_igdng_find_best_PLL(const intel_limit_t *limit, struct drm_crtc *crtc,
+
+ memset(best_clock, 0, sizeof(*best_clock));
+ max_n = limit->n.max;
+- /* based on hardware requriment prefer smaller n to precision */
+- for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
+- /* based on hardware requirment prefere larger m1,m2, p1 */
+- for (clock.m1 = limit->m1.max;
+- clock.m1 >= limit->m1.min; clock.m1--) {
+- for (clock.m2 = limit->m2.max;
+- clock.m2 >= limit->m2.min; clock.m2--) {
+- for (clock.p1 = limit->p1.max;
+- clock.p1 >= limit->p1.min; clock.p1--) {
++ for (clock.p1 = limit->p1.max; clock.p1 >= limit->p1.min; clock.p1--) {
++ /* based on hardware requriment prefer smaller n to precision */
++ for (clock.n = limit->n.min; clock.n <= max_n; clock.n++) {
++ /* based on hardware requirment prefere larger m1,m2 */
++ for (clock.m1 = limit->m1.max;
++ clock.m1 >= limit->m1.min; clock.m1--) {
++ for (clock.m2 = limit->m2.max;
++ clock.m2 >= limit->m2.min; clock.m2--) {
+ int this_err;
+
+ intel_clock(dev, refclk, &clock);
+@@ -1008,6 +1064,10 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
+ dspcntr &= ~DISPPLANE_TILED;
+ }
+
++ if (IS_IGDNG(dev))
++ /* must disable */
++ dspcntr |= DISPPLANE_TRICKLE_FEED_DISABLE;
++
+ I915_WRITE(dspcntr_reg, dspcntr);
+
+ Start = obj_priv->gtt_offset;
+@@ -1030,8 +1090,11 @@ intel_pipe_set_base(struct drm_crtc *crtc, int x, int y,
+
+ if (old_fb) {
+ intel_fb = to_intel_framebuffer(old_fb);
++ obj_priv = intel_fb->obj->driver_private;
+ i915_gem_object_unpin(intel_fb->obj);
+ }
++ intel_increase_pllclock(crtc, true);
++
+ mutex_unlock(&dev->struct_mutex);
+
+ if (!dev->primary->master)
+@@ -1581,6 +1644,8 @@ static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
+ else
+ i9xx_crtc_dpms(crtc, mode);
+
++ intel_crtc->dpms_mode = mode;
++
+ if (!dev->primary->master)
+ return;
+
+@@ -1603,8 +1668,6 @@ static void intel_crtc_dpms(struct drm_crtc *crtc, int mode)
+ DRM_ERROR("Can't update pipe %d in SAREA\n", pipe);
+ break;
+ }
+-
+- intel_crtc->dpms_mode = mode;
+ }
+
+ static void intel_crtc_prepare (struct drm_crtc *crtc)
+@@ -2054,6 +2117,18 @@ static int intel_get_fifo_size(struct drm_device *dev, int plane)
+ return size;
+ }
+
++static void g4x_update_wm(struct drm_device *dev)
++{
++ struct drm_i915_private *dev_priv = dev->dev_private;
++ u32 fw_blc_self = I915_READ(FW_BLC_SELF);
++
++ if (i915_powersave)
++ fw_blc_self |= FW_BLC_SELF_EN;
++ else
++ fw_blc_self &= ~FW_BLC_SELF_EN;
++ I915_WRITE(FW_BLC_SELF, fw_blc_self);
++}
++
+ static void i965_update_wm(struct drm_device *dev)
+ {
+ struct drm_i915_private *dev_priv = dev->dev_private;
+@@ -2105,7 +2180,8 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
+ cwm = 2;
+
+ /* Calc sr entries for one plane configs */
+- if (sr_hdisplay && (!planea_clock || !planeb_clock)) {
++ if (HAS_FW_BLC(dev) && sr_hdisplay &&
++ (!planea_clock || !planeb_clock)) {
+ /* self-refresh has much higher latency */
+ const static int sr_latency_ns = 6000;
+
+@@ -2120,8 +2196,7 @@ static void i9xx_update_wm(struct drm_device *dev, int planea_clock,
+ srwm = total_size - sr_entries;
+ if (srwm < 0)
+ srwm = 1;
+- if (IS_I9XX(dev))
+- I915_WRITE(FW_BLC_SELF, (srwm & 0x3f));
++ I915_WRITE(FW_BLC_SELF, FW_BLC_SELF_EN | (srwm & 0x3f));
+ }
+
+ DRM_DEBUG("Setting FIFO watermarks - A: %d, B: %d, C: %d, SR %d\n",
+@@ -2195,9 +2270,6 @@ static void intel_update_watermarks(struct drm_device *dev)
+ unsigned long planea_clock = 0, planeb_clock = 0, sr_clock = 0;
+ int enabled = 0, pixel_size = 0;
+
+- if (DSPARB_HWCONTROL(dev))
+- return;
+-
+ /* Get the clock config from both planes */
+ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+ intel_crtc = to_intel_crtc(crtc);
+@@ -2230,7 +2302,9 @@ static void intel_update_watermarks(struct drm_device *dev)
+ else if (IS_IGD(dev))
+ igd_disable_cxsr(dev);
+
+- if (IS_I965G(dev))
++ if (IS_G4X(dev))
++ g4x_update_wm(dev);
++ else if (IS_I965G(dev))
+ i965_update_wm(dev);
+ else if (IS_I9XX(dev) || IS_MOBILE(dev))
+ i9xx_update_wm(dev, planea_clock, planeb_clock, sr_hdisplay,
+@@ -2264,9 +2338,9 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+ int dsppos_reg = (pipe == 0) ? DSPAPOS : DSPBPOS;
+ int pipesrc_reg = (pipe == 0) ? PIPEASRC : PIPEBSRC;
+ int refclk, num_outputs = 0;
+- intel_clock_t clock;
+- u32 dpll = 0, fp = 0, dspcntr, pipeconf;
+- bool ok, is_sdvo = false, is_dvo = false;
++ intel_clock_t clock, reduced_clock;
++ u32 dpll = 0, fp = 0, fp2 = 0, dspcntr, pipeconf;
++ bool ok, has_reduced_clock = false, is_sdvo = false, is_dvo = false;
+ bool is_crt = false, is_lvds = false, is_tv = false, is_dp = false;
+ bool is_edp = false;
+ struct drm_mode_config *mode_config = &dev->mode_config;
+@@ -2349,6 +2423,14 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+ return -EINVAL;
+ }
+
++ if (limit->find_reduced_pll && dev_priv->lvds_downclock_avail) {
++ memcpy(&reduced_clock, &clock, sizeof(intel_clock_t));
++ has_reduced_clock = limit->find_reduced_pll(limit, crtc,
++ (adjusted_mode->clock*3/4),
++ refclk,
++ &reduced_clock);
++ }
++
+ /* SDVO TV has fixed PLL values depend on its clock range,
+ this mirrors vbios setting. */
+ if (is_sdvo && is_tv) {
+@@ -2394,10 +2476,17 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+ link_bw, &m_n);
+ }
+
+- if (IS_IGD(dev))
++ if (IS_IGD(dev)) {
+ fp = (1 << clock.n) << 16 | clock.m1 << 8 | clock.m2;
+- else
++ if (has_reduced_clock)
++ fp2 = (1 << reduced_clock.n) << 16 |
++ reduced_clock.m1 << 8 | reduced_clock.m2;
++ } else {
+ fp = clock.n << 16 | clock.m1 << 8 | clock.m2;
++ if (has_reduced_clock)
++ fp2 = reduced_clock.n << 16 | reduced_clock.m1 << 8 |
++ reduced_clock.m2;
++ }
+
+ if (!IS_IGDNG(dev))
+ dpll = DPLL_VGA_MODE_DIS;
+@@ -2426,6 +2515,8 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+ /* also FPA1 */
+ if (IS_IGDNG(dev))
+ dpll |= (1 << (clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
++ if (IS_G4X(dev) && has_reduced_clock)
++ dpll |= (1 << (reduced_clock.p1 - 1)) << DPLL_FPA1_P1_POST_DIV_SHIFT;
+ }
+ switch (clock.p2) {
+ case 5:
+@@ -2573,6 +2664,22 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+ udelay(150);
+ }
+
++ if (is_lvds && has_reduced_clock && i915_powersave) {
++ I915_WRITE(fp_reg + 4, fp2);
++ intel_crtc->lowfreq_avail = true;
++ if (HAS_PIPE_CXSR(dev)) {
++ DRM_DEBUG("enabling CxSR downclocking\n");
++ pipeconf |= PIPECONF_CXSR_DOWNCLOCK;
++ }
++ } else {
++ I915_WRITE(fp_reg + 4, fp);
++ intel_crtc->lowfreq_avail = false;
++ if (HAS_PIPE_CXSR(dev)) {
++ DRM_DEBUG("disabling CxSR downclocking\n");
++ pipeconf &= ~PIPECONF_CXSR_DOWNCLOCK;
++ }
++ }
++
+ I915_WRITE(htot_reg, (adjusted_mode->crtc_hdisplay - 1) |
+ ((adjusted_mode->crtc_htotal - 1) << 16));
+ I915_WRITE(hblank_reg, (adjusted_mode->crtc_hblank_start - 1) |
+@@ -2616,6 +2723,12 @@ static int intel_crtc_mode_set(struct drm_crtc *crtc,
+
+ intel_wait_for_vblank(dev);
+
++ if (IS_IGDNG(dev)) {
++ /* enable address swizzle for tiling buffer */
++ temp = I915_READ(DISP_ARB_CTL);
++ I915_WRITE(DISP_ARB_CTL, temp | DISP_TILE_SURFACE_SWIZZLING);
++ }
++
+ I915_WRITE(dspcntr_reg, dspcntr);
+
+ /* Flush the plane changes */
+@@ -2769,10 +2882,16 @@ static int intel_crtc_cursor_move(struct drm_crtc *crtc, int x, int y)
+ struct drm_device *dev = crtc->dev;
+ struct drm_i915_private *dev_priv = dev->dev_private;
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
++ struct intel_framebuffer *intel_fb;
+ int pipe = intel_crtc->pipe;
+ uint32_t temp = 0;
+ uint32_t adder;
+
++ if (crtc->fb) {
++ intel_fb = to_intel_framebuffer(crtc->fb);
++ intel_mark_busy(dev, intel_fb->obj);
++ }
++
+ if (x < 0) {
+ temp |= CURSOR_POS_SIGN << CURSOR_X_SHIFT;
+ x = -x;
+@@ -3070,12 +3189,319 @@ struct drm_display_mode *intel_crtc_mode_get(struct drm_device *dev,
+ return mode;
+ }
+
++#define GPU_IDLE_TIMEOUT 500 /* ms */
++
++/* When this timer fires, we've been idle for awhile */
++static void intel_gpu_idle_timer(unsigned long arg)
++{
++ struct drm_device *dev = (struct drm_device *)arg;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++
++ DRM_DEBUG("idle timer fired, downclocking\n");
++
++ dev_priv->busy = false;
++
++ queue_work(dev_priv->wq, &dev_priv->idle_work);
++}
++
++void intel_increase_renderclock(struct drm_device *dev, bool schedule)
++{
++ drm_i915_private_t *dev_priv = dev->dev_private;
++
++ if (IS_IGDNG(dev))
++ return;
++
++ if (!dev_priv->render_reclock_avail) {
++ DRM_DEBUG("not reclocking render clock\n");
++ return;
++ }
++
++ /* Restore render clock frequency to original value */
++ if (IS_G4X(dev) || IS_I9XX(dev))
++ pci_write_config_word(dev->pdev, GCFGC, dev_priv->orig_clock);
++ else if (IS_I85X(dev))
++ pci_write_config_word(dev->pdev, HPLLCC, dev_priv->orig_clock);
++ DRM_DEBUG("increasing render clock frequency\n");
++
++ /* Schedule downclock */
++ if (schedule)
++ mod_timer(&dev_priv->idle_timer, jiffies +
++ msecs_to_jiffies(GPU_IDLE_TIMEOUT));
++}
++
++void intel_decrease_renderclock(struct drm_device *dev)
++{
++ drm_i915_private_t *dev_priv = dev->dev_private;
++
++ if (IS_IGDNG(dev))
++ return;
++
++ if (!dev_priv->render_reclock_avail) {
++ DRM_DEBUG("not reclocking render clock\n");
++ return;
++ }
++
++ if (IS_G4X(dev)) {
++ u16 gcfgc;
++
++ /* Adjust render clock... */
++ pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
++
++ /* Down to minimum... */
++ gcfgc &= ~GM45_GC_RENDER_CLOCK_MASK;
++ gcfgc |= GM45_GC_RENDER_CLOCK_266_MHZ;
++
++ pci_write_config_word(dev->pdev, GCFGC, gcfgc);
++ } else if (IS_I965G(dev)) {
++ u16 gcfgc;
++
++ /* Adjust render clock... */
++ pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
++
++ /* Down to minimum... */
++ gcfgc &= ~I965_GC_RENDER_CLOCK_MASK;
++ gcfgc |= I965_GC_RENDER_CLOCK_267_MHZ;
++
++ pci_write_config_word(dev->pdev, GCFGC, gcfgc);
++ } else if (IS_I945G(dev) || IS_I945GM(dev)) {
++ u16 gcfgc;
++
++ /* Adjust render clock... */
++ pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
++
++ /* Down to minimum... */
++ gcfgc &= ~I945_GC_RENDER_CLOCK_MASK;
++ gcfgc |= I945_GC_RENDER_CLOCK_166_MHZ;
++
++ pci_write_config_word(dev->pdev, GCFGC, gcfgc);
++ } else if (IS_I915G(dev)) {
++ u16 gcfgc;
++
++ /* Adjust render clock... */
++ pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
++
++ /* Down to minimum... */
++ gcfgc &= ~I915_GC_RENDER_CLOCK_MASK;
++ gcfgc |= I915_GC_RENDER_CLOCK_166_MHZ;
++
++ pci_write_config_word(dev->pdev, GCFGC, gcfgc);
++ } else if (IS_I85X(dev)) {
++ u16 hpllcc;
++
++ /* Adjust render clock... */
++ pci_read_config_word(dev->pdev, HPLLCC, &hpllcc);
++
++ /* Up to maximum... */
++ hpllcc &= ~GC_CLOCK_CONTROL_MASK;
++ hpllcc |= GC_CLOCK_133_200;
++
++ pci_write_config_word(dev->pdev, HPLLCC, hpllcc);
++ }
++ DRM_DEBUG("decreasing render clock frequency\n");
++}
++
++/* Note that no increase function is needed for this - increase_renderclock()
++ * will also rewrite these bits
++ */
++void intel_decrease_displayclock(struct drm_device *dev)
++{
++ if (IS_IGDNG(dev))
++ return;
++
++ if (IS_I945G(dev) || IS_I945GM(dev) || IS_I915G(dev) ||
++ IS_I915GM(dev)) {
++ u16 gcfgc;
++
++ /* Adjust render clock... */
++ pci_read_config_word(dev->pdev, GCFGC, &gcfgc);
++
++ /* Down to minimum... */
++ gcfgc &= ~0xf0;
++ gcfgc |= 0x80;
++
++ pci_write_config_word(dev->pdev, GCFGC, gcfgc);
++ }
++}
++
++#define CRTC_IDLE_TIMEOUT 1000 /* ms */
++
++static void intel_crtc_idle_timer(unsigned long arg)
++{
++ struct intel_crtc *intel_crtc = (struct intel_crtc *)arg;
++ struct drm_crtc *crtc = &intel_crtc->base;
++ drm_i915_private_t *dev_priv = crtc->dev->dev_private;
++
++ DRM_DEBUG("idle timer fired, downclocking\n");
++
++ intel_crtc->busy = false;
++
++ queue_work(dev_priv->wq, &dev_priv->idle_work);
++}
++
++static void intel_increase_pllclock(struct drm_crtc *crtc, bool schedule)
++{
++ struct drm_device *dev = crtc->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
++ int pipe = intel_crtc->pipe;
++ int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B;
++ int dpll = I915_READ(dpll_reg);
++
++ if (IS_IGDNG(dev))
++ return;
++
++ if (!dev_priv->lvds_downclock_avail)
++ return;
++
++ if (!HAS_PIPE_CXSR(dev) && (dpll & DISPLAY_RATE_SELECT_FPA1)) {
++ DRM_DEBUG("upclocking LVDS\n");
++
++ /* Unlock panel regs */
++ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) | (0xabcd << 16));
++
++ dpll &= ~DISPLAY_RATE_SELECT_FPA1;
++ I915_WRITE(dpll_reg, dpll);
++ dpll = I915_READ(dpll_reg);
++ intel_wait_for_vblank(dev);
++ dpll = I915_READ(dpll_reg);
++ if (dpll & DISPLAY_RATE_SELECT_FPA1)
++ DRM_DEBUG("failed to upclock LVDS!\n");
++
++ /* ...and lock them again */
++ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) & 0x3);
++ }
++
++ /* Schedule downclock */
++ if (schedule)
++ mod_timer(&intel_crtc->idle_timer, jiffies +
++ msecs_to_jiffies(CRTC_IDLE_TIMEOUT));
++}
++
++static void intel_decrease_pllclock(struct drm_crtc *crtc)
++{
++ struct drm_device *dev = crtc->dev;
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
++ int pipe = intel_crtc->pipe;
++ int dpll_reg = (pipe == 0) ? DPLL_A : DPLL_B;
++ int dpll = I915_READ(dpll_reg);
++
++ if (IS_IGDNG(dev))
++ return;
++
++ if (!dev_priv->lvds_downclock_avail)
++ return;
++
++ /*
++ * Since this is called by a timer, we should never get here in
++ * the manual case.
++ */
++ if (!HAS_PIPE_CXSR(dev) && intel_crtc->lowfreq_avail) {
++ DRM_DEBUG("downclocking LVDS\n");
++
++ /* Unlock panel regs */
++ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) | (0xabcd << 16));
++
++ dpll |= DISPLAY_RATE_SELECT_FPA1;
++ I915_WRITE(dpll_reg, dpll);
++ dpll = I915_READ(dpll_reg);
++ intel_wait_for_vblank(dev);
++ dpll = I915_READ(dpll_reg);
++ if (!(dpll & DISPLAY_RATE_SELECT_FPA1))
++ DRM_DEBUG("failed to downclock LVDS!\n");
++
++ /* ...and lock them again */
++ I915_WRITE(PP_CONTROL, I915_READ(PP_CONTROL) & 0x3);
++ }
++
++}
++
++/**
++ * intel_idle_update - adjust clocks for idleness
++ * @work: work struct
++ *
++ * Either the GPU or display (or both) went idle. Check the busy status
++ * here and adjust the CRTC and GPU clocks as necessary.
++ */
++static void intel_idle_update(struct work_struct *work)
++{
++ drm_i915_private_t *dev_priv = container_of(work, drm_i915_private_t,
++ idle_work);
++ struct drm_device *dev = dev_priv->dev;
++ struct drm_crtc *crtc;
++ struct intel_crtc *intel_crtc;
++
++ if (!i915_powersave)
++ return;
++
++ mutex_lock(&dev->struct_mutex);
++
++ /* GPU isn't processing, downclock it. */
++ if (!dev_priv->busy) {
++ intel_decrease_renderclock(dev);
++ intel_decrease_displayclock(dev);
++ }
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ /* Skip inactive CRTCs */
++ if (!crtc->fb)
++ continue;
++
++ intel_crtc = to_intel_crtc(crtc);
++ if (!intel_crtc->busy)
++ intel_decrease_pllclock(crtc);
++ }
++
++ mutex_unlock(&dev->struct_mutex);
++}
++
++/**
++ * intel_mark_busy - mark the GPU and possibly the display busy
++ * @dev: drm device
++ * @obj: object we're operating on
++ *
++ * Callers can use this function to indicate that the GPU is busy processing
++ * commands. If @obj matches one of the CRTC objects (i.e. it's a scanout
++ * buffer), we'll also mark the display as busy, so we know to increase its
++ * clock frequency.
++ */
++void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj)
++{
++ drm_i915_private_t *dev_priv = dev->dev_private;
++ struct drm_crtc *crtc = NULL;
++ struct intel_framebuffer *intel_fb;
++ struct intel_crtc *intel_crtc;
++
++ if (!drm_core_check_feature(dev, DRIVER_MODESET))
++ return;
++
++ dev_priv->busy = true;
++ intel_increase_renderclock(dev, true);
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ if (!crtc->fb)
++ continue;
++
++ intel_crtc = to_intel_crtc(crtc);
++ intel_fb = to_intel_framebuffer(crtc->fb);
++ if (intel_fb->obj == obj) {
++ if (!intel_crtc->busy) {
++ /* Non-busy -> busy, upclock */
++ intel_increase_pllclock(crtc, true);
++ intel_crtc->busy = true;
++ } else {
++ /* Busy -> busy, put off timer */
++ mod_timer(&intel_crtc->idle_timer, jiffies +
++ msecs_to_jiffies(CRTC_IDLE_TIMEOUT));
++ }
++ }
++ }
++}
++
+ static void intel_crtc_destroy(struct drm_crtc *crtc)
+ {
+ struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+
+- if (intel_crtc->mode_set.mode)
+- drm_mode_destroy(crtc->dev, intel_crtc->mode_set.mode);
+ drm_crtc_cleanup(crtc);
+ kfree(intel_crtc);
+ }
+@@ -3122,15 +3548,10 @@ static void intel_crtc_init(struct drm_device *dev, int pipe)
+ intel_crtc->dpms_mode = DRM_MODE_DPMS_OFF;
+ drm_crtc_helper_add(&intel_crtc->base, &intel_helper_funcs);
+
+- intel_crtc->mode_set.crtc = &intel_crtc->base;
+- intel_crtc->mode_set.connectors = (struct drm_connector **)(intel_crtc + 1);
+- intel_crtc->mode_set.num_connectors = 0;
+-
+- if (i915_fbpercrtc) {
+-
++ intel_crtc->busy = false;
+
+-
+- }
++ setup_timer(&intel_crtc->idle_timer, intel_crtc_idle_timer,
++ (unsigned long)intel_crtc);
+ }
+
+ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
+@@ -3138,30 +3559,26 @@ int intel_get_pipe_from_crtc_id(struct drm_device *dev, void *data,
+ {
+ drm_i915_private_t *dev_priv = dev->dev_private;
+ struct drm_i915_get_pipe_from_crtc_id *pipe_from_crtc_id = data;
+- struct drm_crtc *crtc = NULL;
+- int pipe = -1;
++ struct drm_mode_object *drmmode_obj;
++ struct intel_crtc *crtc;
+
+ if (!dev_priv) {
+ DRM_ERROR("called with no initialization\n");
+ return -EINVAL;
+ }
+
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+- if (crtc->base.id == pipe_from_crtc_id->crtc_id) {
+- pipe = intel_crtc->pipe;
+- break;
+- }
+- }
++ drmmode_obj = drm_mode_object_find(dev, pipe_from_crtc_id->crtc_id,
++ DRM_MODE_OBJECT_CRTC);
+
+- if (pipe == -1) {
++ if (!drmmode_obj) {
+ DRM_ERROR("no such CRTC id\n");
+ return -EINVAL;
+ }
+
+- pipe_from_crtc_id->pipe = pipe;
++ crtc = to_intel_crtc(obj_to_crtc(drmmode_obj));
++ pipe_from_crtc_id->pipe = crtc->pipe;
+
+- return 0;
++ return 0;
+ }
+
+ struct drm_crtc *intel_get_crtc_from_pipe(struct drm_device *dev, int pipe)
+@@ -3362,8 +3779,56 @@ static const struct drm_mode_config_funcs intel_mode_funcs = {
+ .fb_changed = intelfb_probe,
+ };
+
++void intel_init_clock_gating(struct drm_device *dev)
++{
++ struct drm_i915_private *dev_priv = dev->dev_private;
++
++ /*
++ * Disable clock gating reported to work incorrectly according to the
++ * specs, but enable as much else as we can.
++ */
++ if (IS_G4X(dev)) {
++ uint32_t dspclk_gate;
++ I915_WRITE(RENCLK_GATE_D1, 0);
++ I915_WRITE(RENCLK_GATE_D2, VF_UNIT_CLOCK_GATE_DISABLE |
++ GS_UNIT_CLOCK_GATE_DISABLE |
++ CL_UNIT_CLOCK_GATE_DISABLE);
++ I915_WRITE(RAMCLK_GATE_D, 0);
++ dspclk_gate = VRHUNIT_CLOCK_GATE_DISABLE |
++ OVRUNIT_CLOCK_GATE_DISABLE |
++ OVCUNIT_CLOCK_GATE_DISABLE;
++ if (IS_GM45(dev))
++ dspclk_gate |= DSSUNIT_CLOCK_GATE_DISABLE;
++ I915_WRITE(DSPCLK_GATE_D, dspclk_gate);
++ } else if (IS_I965GM(dev)) {
++ I915_WRITE(RENCLK_GATE_D1, I965_RCC_CLOCK_GATE_DISABLE);
++ I915_WRITE(RENCLK_GATE_D2, 0);
++ I915_WRITE(DSPCLK_GATE_D, 0);
++ I915_WRITE(RAMCLK_GATE_D, 0);
++ I915_WRITE16(DEUC, 0);
++ } else if (IS_I965G(dev)) {
++ I915_WRITE(RENCLK_GATE_D1, I965_RCZ_CLOCK_GATE_DISABLE |
++ I965_RCC_CLOCK_GATE_DISABLE |
++ I965_RCPB_CLOCK_GATE_DISABLE |
++ I965_ISC_CLOCK_GATE_DISABLE |
++ I965_FBC_CLOCK_GATE_DISABLE);
++ I915_WRITE(RENCLK_GATE_D2, 0);
++ } else if (IS_I9XX(dev)) {
++ u32 dstate = I915_READ(D_STATE);
++
++ dstate |= DSTATE_PLL_D3_OFF | DSTATE_GFX_CLOCK_GATING |
++ DSTATE_DOT_CLOCK_GATING;
++ I915_WRITE(D_STATE, dstate);
++ } else if (IS_I855(dev) || IS_I865G(dev)) {
++ I915_WRITE(RENCLK_GATE_D1, SV_CLOCK_GATE_DISABLE);
++ } else if (IS_I830(dev)) {
++ I915_WRITE(DSPCLK_GATE_D, OVRUNIT_CLOCK_GATE_DISABLE);
++ }
++}
++
+ void intel_modeset_init(struct drm_device *dev)
+ {
++ struct drm_i915_private *dev_priv = dev->dev_private;
+ int num_pipe;
+ int i;
+
+@@ -3398,15 +3863,47 @@ void intel_modeset_init(struct drm_device *dev)
+ DRM_DEBUG("%d display pipe%s available.\n",
+ num_pipe, num_pipe > 1 ? "s" : "");
+
++ if (IS_I85X(dev))
++ pci_read_config_word(dev->pdev, HPLLCC, &dev_priv->orig_clock);
++ else if (IS_I9XX(dev) || IS_G4X(dev))
++ pci_read_config_word(dev->pdev, GCFGC, &dev_priv->orig_clock);
++
+ for (i = 0; i < num_pipe; i++) {
+ intel_crtc_init(dev, i);
+ }
+
+ intel_setup_outputs(dev);
++
++ intel_init_clock_gating(dev);
++
++ INIT_WORK(&dev_priv->idle_work, intel_idle_update);
++ setup_timer(&dev_priv->idle_timer, intel_gpu_idle_timer,
++ (unsigned long)dev);
+ }
+
+ void intel_modeset_cleanup(struct drm_device *dev)
+ {
++ struct drm_i915_private *dev_priv = dev->dev_private;
++ struct drm_crtc *crtc;
++ struct intel_crtc *intel_crtc;
++
++ mutex_lock(&dev->struct_mutex);
++
++ list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
++ /* Skip inactive CRTCs */
++ if (!crtc->fb)
++ continue;
++
++ intel_crtc = to_intel_crtc(crtc);
++ intel_increase_pllclock(crtc, false);
++ del_timer_sync(&intel_crtc->idle_timer);
++ }
++
++ intel_increase_renderclock(dev, false);
++ del_timer_sync(&dev_priv->idle_timer);
++
++ mutex_unlock(&dev->struct_mutex);
++
+ drm_mode_config_cleanup(dev);
+ }
+
+diff --git a/drivers/gpu/drm/i915/intel_drv.h b/drivers/gpu/drm/i915/intel_drv.h
+index 26a6227..51eec1b 100644
+--- a/drivers/gpu/drm/i915/intel_drv.h
++++ b/drivers/gpu/drm/i915/intel_drv.h
+@@ -117,9 +117,9 @@ struct intel_crtc {
+ uint32_t cursor_addr;
+ u8 lut_r[256], lut_g[256], lut_b[256];
+ int dpms_mode;
+- struct intel_framebuffer *fbdev_fb;
+- /* a mode_set for fbdev users on this crtc */
+- struct drm_mode_set mode_set;
++ bool busy; /* is scanout buffer being updated frequently? */
++ struct timer_list idle_timer;
++ bool lowfreq_avail;
+ };
+
+ #define to_intel_crtc(x) container_of(x, struct intel_crtc, base)
+@@ -138,6 +138,7 @@ extern void intel_hdmi_init(struct drm_device *dev, int sdvox_reg);
+ extern bool intel_sdvo_init(struct drm_device *dev, int output_device);
+ extern void intel_dvo_init(struct drm_device *dev);
+ extern void intel_tv_init(struct drm_device *dev);
++extern void intel_mark_busy(struct drm_device *dev, struct drm_gem_object *obj);
+ extern void intel_lvds_init(struct drm_device *dev);
+ extern void intel_dp_init(struct drm_device *dev, int dp_reg);
+ void
+diff --git a/drivers/gpu/drm/i915/intel_fb.c b/drivers/gpu/drm/i915/intel_fb.c
+index 1d30802..e85d7e9 100644
+--- a/drivers/gpu/drm/i915/intel_fb.c
++++ b/drivers/gpu/drm/i915/intel_fb.c
+@@ -39,339 +39,34 @@
+ #include "drmP.h"
+ #include "drm.h"
+ #include "drm_crtc.h"
++#include "drm_fb_helper.h"
+ #include "intel_drv.h"
+ #include "i915_drm.h"
+ #include "i915_drv.h"
+
+ struct intelfb_par {
+- struct drm_device *dev;
+- struct drm_display_mode *our_mode;
++ struct drm_fb_helper helper;
+ struct intel_framebuffer *intel_fb;
+- int crtc_count;
+- /* crtc currently bound to this */
+- uint32_t crtc_ids[2];
++ struct drm_display_mode *our_mode;
+ };
+
+-static int intelfb_setcolreg(unsigned regno, unsigned red, unsigned green,
+- unsigned blue, unsigned transp,
+- struct fb_info *info)
+-{
+- struct intelfb_par *par = info->par;
+- struct drm_device *dev = par->dev;
+- struct drm_crtc *crtc;
+- int i;
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+- struct drm_mode_set *modeset = &intel_crtc->mode_set;
+- struct drm_framebuffer *fb = modeset->fb;
+-
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
+-
+- if (i == par->crtc_count)
+- continue;
+-
+-
+- if (regno > 255)
+- return 1;
+-
+- if (fb->depth == 8) {
+- intel_crtc_fb_gamma_set(crtc, red, green, blue, regno);
+- return 0;
+- }
+-
+- if (regno < 16) {
+- switch (fb->depth) {
+- case 15:
+- fb->pseudo_palette[regno] = ((red & 0xf800) >> 1) |
+- ((green & 0xf800) >> 6) |
+- ((blue & 0xf800) >> 11);
+- break;
+- case 16:
+- fb->pseudo_palette[regno] = (red & 0xf800) |
+- ((green & 0xfc00) >> 5) |
+- ((blue & 0xf800) >> 11);
+- break;
+- case 24:
+- case 32:
+- fb->pseudo_palette[regno] = ((red & 0xff00) << 8) |
+- (green & 0xff00) |
+- ((blue & 0xff00) >> 8);
+- break;
+- }
+- }
+- }
+- return 0;
+-}
+-
+-static int intelfb_check_var(struct fb_var_screeninfo *var,
+- struct fb_info *info)
+-{
+- struct intelfb_par *par = info->par;
+- struct intel_framebuffer *intel_fb = par->intel_fb;
+- struct drm_framebuffer *fb = &intel_fb->base;
+- int depth;
+-
+- if (var->pixclock == -1 || !var->pixclock)
+- return -EINVAL;
+-
+- /* Need to resize the fb object !!! */
+- if (var->xres > fb->width || var->yres > fb->height) {
+- DRM_ERROR("Requested width/height is greater than current fb object %dx%d > %dx%d\n",var->xres,var->yres,fb->width,fb->height);
+- DRM_ERROR("Need resizing code.\n");
+- return -EINVAL;
+- }
+-
+- switch (var->bits_per_pixel) {
+- case 16:
+- depth = (var->green.length == 6) ? 16 : 15;
+- break;
+- case 32:
+- depth = (var->transp.length > 0) ? 32 : 24;
+- break;
+- default:
+- depth = var->bits_per_pixel;
+- break;
+- }
+-
+- switch (depth) {
+- case 8:
+- var->red.offset = 0;
+- var->green.offset = 0;
+- var->blue.offset = 0;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 0;
+- var->transp.offset = 0;
+- break;
+- case 15:
+- var->red.offset = 10;
+- var->green.offset = 5;
+- var->blue.offset = 0;
+- var->red.length = 5;
+- var->green.length = 5;
+- var->blue.length = 5;
+- var->transp.length = 1;
+- var->transp.offset = 15;
+- break;
+- case 16:
+- var->red.offset = 11;
+- var->green.offset = 5;
+- var->blue.offset = 0;
+- var->red.length = 5;
+- var->green.length = 6;
+- var->blue.length = 5;
+- var->transp.length = 0;
+- var->transp.offset = 0;
+- break;
+- case 24:
+- var->red.offset = 16;
+- var->green.offset = 8;
+- var->blue.offset = 0;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 0;
+- var->transp.offset = 0;
+- break;
+- case 32:
+- var->red.offset = 16;
+- var->green.offset = 8;
+- var->blue.offset = 0;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 8;
+- var->transp.offset = 24;
+- break;
+- default:
+- return -EINVAL;
+- }
+-
+- return 0;
+-}
+-
+-/* this will let fbcon do the mode init */
+-/* FIXME: take mode config lock? */
+-static int intelfb_set_par(struct fb_info *info)
+-{
+- struct intelfb_par *par = info->par;
+- struct drm_device *dev = par->dev;
+- struct fb_var_screeninfo *var = &info->var;
+- int i;
+-
+- DRM_DEBUG("%d %d\n", var->xres, var->pixclock);
+-
+- if (var->pixclock != -1) {
+-
+- DRM_ERROR("PIXEL CLOCK SET\n");
+- return -EINVAL;
+- } else {
+- struct drm_crtc *crtc;
+- int ret;
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+-
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
+-
+- if (i == par->crtc_count)
+- continue;
+-
+- if (crtc->fb == intel_crtc->mode_set.fb) {
+- mutex_lock(&dev->mode_config.mutex);
+- ret = crtc->funcs->set_config(&intel_crtc->mode_set);
+- mutex_unlock(&dev->mode_config.mutex);
+- if (ret)
+- return ret;
+- }
+- }
+- return 0;
+- }
+-}
+-
+-static int intelfb_pan_display(struct fb_var_screeninfo *var,
+- struct fb_info *info)
+-{
+- struct intelfb_par *par = info->par;
+- struct drm_device *dev = par->dev;
+- struct drm_mode_set *modeset;
+- struct drm_crtc *crtc;
+- struct intel_crtc *intel_crtc;
+- int ret = 0;
+- int i;
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
+-
+- if (i == par->crtc_count)
+- continue;
+-
+- intel_crtc = to_intel_crtc(crtc);
+- modeset = &intel_crtc->mode_set;
+-
+- modeset->x = var->xoffset;
+- modeset->y = var->yoffset;
+-
+- if (modeset->num_connectors) {
+- mutex_lock(&dev->mode_config.mutex);
+- ret = crtc->funcs->set_config(modeset);
+- mutex_unlock(&dev->mode_config.mutex);
+- if (!ret) {
+- info->var.xoffset = var->xoffset;
+- info->var.yoffset = var->yoffset;
+- }
+- }
+- }
+-
+- return ret;
+-}
+-
+-static void intelfb_on(struct fb_info *info)
+-{
+- struct intelfb_par *par = info->par;
+- struct drm_device *dev = par->dev;
+- struct drm_crtc *crtc;
+- struct drm_encoder *encoder;
+- int i;
+-
+- /*
+- * For each CRTC in this fb, find all associated encoders
+- * and turn them off, then turn off the CRTC.
+- */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+-
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
+-
+- crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
+-
+- /* Found a CRTC on this fb, now find encoders */
+- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+- if (encoder->crtc == crtc) {
+- struct drm_encoder_helper_funcs *encoder_funcs;
+- encoder_funcs = encoder->helper_private;
+- encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
+- }
+- }
+- }
+-}
+-
+-static void intelfb_off(struct fb_info *info, int dpms_mode)
+-{
+- struct intelfb_par *par = info->par;
+- struct drm_device *dev = par->dev;
+- struct drm_crtc *crtc;
+- struct drm_encoder *encoder;
+- int i;
+-
+- /*
+- * For each CRTC in this fb, find all associated encoders
+- * and turn them off, then turn off the CRTC.
+- */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+-
+- for (i = 0; i < par->crtc_count; i++)
+- if (crtc->base.id == par->crtc_ids[i])
+- break;
+-
+- /* Found a CRTC on this fb, now find encoders */
+- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+- if (encoder->crtc == crtc) {
+- struct drm_encoder_helper_funcs *encoder_funcs;
+- encoder_funcs = encoder->helper_private;
+- encoder_funcs->dpms(encoder, dpms_mode);
+- }
+- }
+- if (dpms_mode == DRM_MODE_DPMS_OFF)
+- crtc_funcs->dpms(crtc, dpms_mode);
+- }
+-}
+-
+-static int intelfb_blank(int blank, struct fb_info *info)
+-{
+- switch (blank) {
+- case FB_BLANK_UNBLANK:
+- intelfb_on(info);
+- break;
+- case FB_BLANK_NORMAL:
+- intelfb_off(info, DRM_MODE_DPMS_STANDBY);
+- break;
+- case FB_BLANK_HSYNC_SUSPEND:
+- intelfb_off(info, DRM_MODE_DPMS_STANDBY);
+- break;
+- case FB_BLANK_VSYNC_SUSPEND:
+- intelfb_off(info, DRM_MODE_DPMS_SUSPEND);
+- break;
+- case FB_BLANK_POWERDOWN:
+- intelfb_off(info, DRM_MODE_DPMS_OFF);
+- break;
+- }
+- return 0;
+-}
+-
+ static struct fb_ops intelfb_ops = {
+ .owner = THIS_MODULE,
+- .fb_check_var = intelfb_check_var,
+- .fb_set_par = intelfb_set_par,
+- .fb_setcolreg = intelfb_setcolreg,
++ .fb_check_var = drm_fb_helper_check_var,
++ .fb_set_par = drm_fb_helper_set_par,
++ .fb_setcolreg = drm_fb_helper_setcolreg,
+ .fb_fillrect = cfb_fillrect,
+ .fb_copyarea = cfb_copyarea,
+ .fb_imageblit = cfb_imageblit,
+- .fb_pan_display = intelfb_pan_display,
+- .fb_blank = intelfb_blank,
++ .fb_pan_display = drm_fb_helper_pan_display,
++ .fb_blank = drm_fb_helper_blank,
+ };
+
++static struct drm_fb_helper_funcs intel_fb_helper_funcs = {
++ .gamma_set = intel_crtc_fb_gamma_set,
++};
++
++
+ /**
+ * Curretly it is assumed that the old framebuffer is reused.
+ *
+@@ -412,25 +107,11 @@ int intelfb_resize(struct drm_device *dev, struct drm_crtc *crtc)
+ }
+ EXPORT_SYMBOL(intelfb_resize);
+
+-static struct drm_mode_set kernelfb_mode;
+-
+-static int intelfb_panic(struct notifier_block *n, unsigned long ununsed,
+- void *panic_str)
+-{
+- DRM_ERROR("panic occurred, switching back to text console\n");
+-
+- intelfb_restore();
+- return 0;
+-}
+-
+-static struct notifier_block paniced = {
+- .notifier_call = intelfb_panic,
+-};
+-
+ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,
+ uint32_t fb_height, uint32_t surface_width,
+ uint32_t surface_height,
+- struct intel_framebuffer **intel_fb_p)
++ uint32_t surface_depth, uint32_t surface_bpp,
++ struct drm_framebuffer **fb_p)
+ {
+ struct fb_info *info;
+ struct intelfb_par *par;
+@@ -445,9 +126,9 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,
+ mode_cmd.width = surface_width;
+ mode_cmd.height = surface_height;
+
+- mode_cmd.bpp = 32;
++ mode_cmd.bpp = surface_bpp;
+ mode_cmd.pitch = ALIGN(mode_cmd.width * ((mode_cmd.bpp + 1) / 8), 64);
+- mode_cmd.depth = 24;
++ mode_cmd.depth = surface_depth;
+
+ size = mode_cmd.pitch * mode_cmd.height;
+ size = ALIGN(size, PAGE_SIZE);
+@@ -479,7 +160,7 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,
+ list_add(&fb->filp_head, &dev->mode_config.fb_kernel_list);
+
+ intel_fb = to_intel_framebuffer(fb);
+- *intel_fb_p = intel_fb;
++ *fb_p = fb;
+
+ info = framebuffer_alloc(sizeof(struct intelfb_par), device);
+ if (!info) {
+@@ -489,21 +170,19 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,
+
+ par = info->par;
+
++ par->helper.funcs = &intel_fb_helper_funcs;
++ par->helper.dev = dev;
++ ret = drm_fb_helper_init_crtc_count(&par->helper, 2,
++ INTELFB_CONN_LIMIT);
++ if (ret)
++ goto out_unref;
++
+ strcpy(info->fix.id, "inteldrmfb");
+- info->fix.type = FB_TYPE_PACKED_PIXELS;
+- info->fix.visual = FB_VISUAL_TRUECOLOR;
+- info->fix.type_aux = 0;
+- info->fix.xpanstep = 1; /* doing it in hw */
+- info->fix.ypanstep = 1; /* doing it in hw */
+- info->fix.ywrapstep = 0;
+- info->fix.accel = FB_ACCEL_I830;
+- info->fix.type_aux = 0;
+
+ info->flags = FBINFO_DEFAULT;
+
+ info->fbops = &intelfb_ops;
+
+- info->fix.line_length = fb->pitch;
+
+ /* setup aperture base/size for vesafb takeover */
+ info->aperture_base = dev->mode_config.fb_base;
+@@ -527,18 +206,8 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,
+
+ // memset(info->screen_base, 0, size);
+
+- info->pseudo_palette = fb->pseudo_palette;
+- info->var.xres_virtual = fb->width;
+- info->var.yres_virtual = fb->height;
+- info->var.bits_per_pixel = fb->bits_per_pixel;
+- info->var.xoffset = 0;
+- info->var.yoffset = 0;
+- info->var.activate = FB_ACTIVATE_NOW;
+- info->var.height = -1;
+- info->var.width = -1;
+-
+- info->var.xres = fb_width;
+- info->var.yres = fb_height;
++ drm_fb_helper_fill_fix(info, fb->pitch);
++ drm_fb_helper_fill_var(info, fb, fb_width, fb_height);
+
+ /* FIXME: we really shouldn't expose mmio space at all */
+ info->fix.mmio_start = pci_resource_start(dev->pdev, mmio_bar);
+@@ -550,64 +219,9 @@ static int intelfb_create(struct drm_device *dev, uint32_t fb_width,
+ info->pixmap.flags = FB_PIXMAP_SYSTEM;
+ info->pixmap.scan_align = 1;
+
+- switch(fb->depth) {
+- case 8:
+- info->var.red.offset = 0;
+- info->var.green.offset = 0;
+- info->var.blue.offset = 0;
+- info->var.red.length = 8; /* 8bit DAC */
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 0;
+- info->var.transp.length = 0;
+- break;
+- case 15:
+- info->var.red.offset = 10;
+- info->var.green.offset = 5;
+- info->var.blue.offset = 0;
+- info->var.red.length = 5;
+- info->var.green.length = 5;
+- info->var.blue.length = 5;
+- info->var.transp.offset = 15;
+- info->var.transp.length = 1;
+- break;
+- case 16:
+- info->var.red.offset = 11;
+- info->var.green.offset = 5;
+- info->var.blue.offset = 0;
+- info->var.red.length = 5;
+- info->var.green.length = 6;
+- info->var.blue.length = 5;
+- info->var.transp.offset = 0;
+- break;
+- case 24:
+- info->var.red.offset = 16;
+- info->var.green.offset = 8;
+- info->var.blue.offset = 0;
+- info->var.red.length = 8;
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 0;
+- info->var.transp.length = 0;
+- break;
+- case 32:
+- info->var.red.offset = 16;
+- info->var.green.offset = 8;
+- info->var.blue.offset = 0;
+- info->var.red.length = 8;
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 24;
+- info->var.transp.length = 8;
+- break;
+- default:
+- break;
+- }
+-
+ fb->fbdev = info;
+
+ par->intel_fb = intel_fb;
+- par->dev = dev;
+
+ /* To allow resizeing without swapping buffers */
+ DRM_DEBUG("allocated %dx%d fb: 0x%08x, bo %p\n", intel_fb->base.width,
+@@ -625,307 +239,12 @@ out:
+ return ret;
+ }
+
+-static int intelfb_multi_fb_probe_crtc(struct drm_device *dev, struct drm_crtc *crtc)
+-{
+- struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+- struct intel_framebuffer *intel_fb;
+- struct drm_framebuffer *fb;
+- struct drm_connector *connector;
+- struct fb_info *info;
+- struct intelfb_par *par;
+- struct drm_mode_set *modeset;
+- unsigned int width, height;
+- int new_fb = 0;
+- int ret, i, conn_count;
+-
+- if (!drm_helper_crtc_in_use(crtc))
+- return 0;
+-
+- if (!crtc->desired_mode)
+- return 0;
+-
+- width = crtc->desired_mode->hdisplay;
+- height = crtc->desired_mode->vdisplay;
+-
+- /* is there an fb bound to this crtc already */
+- if (!intel_crtc->mode_set.fb) {
+- ret = intelfb_create(dev, width, height, width, height, &intel_fb);
+- if (ret)
+- return -EINVAL;
+- new_fb = 1;
+- } else {
+- fb = intel_crtc->mode_set.fb;
+- intel_fb = to_intel_framebuffer(fb);
+- if ((intel_fb->base.width < width) || (intel_fb->base.height < height))
+- return -EINVAL;
+- }
+-
+- info = intel_fb->base.fbdev;
+- par = info->par;
+-
+- modeset = &intel_crtc->mode_set;
+- modeset->fb = &intel_fb->base;
+- conn_count = 0;
+- list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
+- if (connector->encoder)
+- if (connector->encoder->crtc == modeset->crtc) {
+- modeset->connectors[conn_count] = connector;
+- conn_count++;
+- if (conn_count > INTELFB_CONN_LIMIT)
+- BUG();
+- }
+- }
+-
+- for (i = conn_count; i < INTELFB_CONN_LIMIT; i++)
+- modeset->connectors[i] = NULL;
+-
+- par->crtc_ids[0] = crtc->base.id;
+-
+- modeset->num_connectors = conn_count;
+- if (modeset->crtc->desired_mode) {
+- if (modeset->mode)
+- drm_mode_destroy(dev, modeset->mode);
+- modeset->mode = drm_mode_duplicate(dev,
+- modeset->crtc->desired_mode);
+- }
+-
+- par->crtc_count = 1;
+-
+- if (new_fb) {
+- info->var.pixclock = -1;
+- if (register_framebuffer(info) < 0)
+- return -EINVAL;
+- } else
+- intelfb_set_par(info);
+-
+- DRM_INFO("fb%d: %s frame buffer device\n", info->node,
+- info->fix.id);
+-
+- /* Switch back to kernel console on panic */
+- kernelfb_mode = *modeset;
+- atomic_notifier_chain_register(&panic_notifier_list, &paniced);
+- DRM_DEBUG("registered panic notifier\n");
+-
+- return 0;
+-}
+-
+-static int intelfb_multi_fb_probe(struct drm_device *dev)
+-{
+-
+- struct drm_crtc *crtc;
+- int ret = 0;
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- ret = intelfb_multi_fb_probe_crtc(dev, crtc);
+- if (ret)
+- return ret;
+- }
+- return ret;
+-}
+-
+-static int intelfb_single_fb_probe(struct drm_device *dev)
+-{
+- struct drm_crtc *crtc;
+- struct drm_connector *connector;
+- unsigned int fb_width = (unsigned)-1, fb_height = (unsigned)-1;
+- unsigned int surface_width = 0, surface_height = 0;
+- int new_fb = 0;
+- int crtc_count = 0;
+- int ret, i, conn_count = 0;
+- struct intel_framebuffer *intel_fb;
+- struct fb_info *info;
+- struct intelfb_par *par;
+- struct drm_mode_set *modeset = NULL;
+-
+- DRM_DEBUG("\n");
+-
+- /* Get a count of crtcs now in use and new min/maxes width/heights */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- if (!drm_helper_crtc_in_use(crtc))
+- continue;
+-
+- crtc_count++;
+- if (!crtc->desired_mode)
+- continue;
+-
+- /* Smallest mode determines console size... */
+- if (crtc->desired_mode->hdisplay < fb_width)
+- fb_width = crtc->desired_mode->hdisplay;
+-
+- if (crtc->desired_mode->vdisplay < fb_height)
+- fb_height = crtc->desired_mode->vdisplay;
+-
+- /* ... but largest for memory allocation dimensions */
+- if (crtc->desired_mode->hdisplay > surface_width)
+- surface_width = crtc->desired_mode->hdisplay;
+-
+- if (crtc->desired_mode->vdisplay > surface_height)
+- surface_height = crtc->desired_mode->vdisplay;
+- }
+-
+- if (crtc_count == 0 || fb_width == -1 || fb_height == -1) {
+- /* hmm everyone went away - assume VGA cable just fell out
+- and will come back later. */
+- DRM_DEBUG("no CRTCs available?\n");
+- return 0;
+- }
+-
+-//fail
+- /* Find the fb for our new config */
+- if (list_empty(&dev->mode_config.fb_kernel_list)) {
+- DRM_DEBUG("creating new fb (console size %dx%d, "
+- "buffer size %dx%d)\n", fb_width, fb_height,
+- surface_width, surface_height);
+- ret = intelfb_create(dev, fb_width, fb_height, surface_width,
+- surface_height, &intel_fb);
+- if (ret)
+- return -EINVAL;
+- new_fb = 1;
+- } else {
+- struct drm_framebuffer *fb;
+-
+- fb = list_first_entry(&dev->mode_config.fb_kernel_list,
+- struct drm_framebuffer, filp_head);
+- intel_fb = to_intel_framebuffer(fb);
+-
+- /* if someone hotplugs something bigger than we have already
+- * allocated, we are pwned. As really we can't resize an
+- * fbdev that is in the wild currently due to fbdev not really
+- * being designed for the lower layers moving stuff around
+- * under it.
+- * - so in the grand style of things - punt.
+- */
+- if ((fb->width < surface_width) ||
+- (fb->height < surface_height)) {
+- DRM_ERROR("fb not large enough for console\n");
+- return -EINVAL;
+- }
+- }
+-// fail
+-
+- info = intel_fb->base.fbdev;
+- par = info->par;
+-
+- crtc_count = 0;
+- /*
+- * For each CRTC, set up the connector list for the CRTC's mode
+- * set configuration.
+- */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct intel_crtc *intel_crtc = to_intel_crtc(crtc);
+-
+- modeset = &intel_crtc->mode_set;
+- modeset->fb = &intel_fb->base;
+- conn_count = 0;
+- list_for_each_entry(connector, &dev->mode_config.connector_list,
+- head) {
+- if (!connector->encoder)
+- continue;
+-
+- if(connector->encoder->crtc == modeset->crtc) {
+- modeset->connectors[conn_count++] = connector;
+- if (conn_count > INTELFB_CONN_LIMIT)
+- BUG();
+- }
+- }
+-
+- /* Zero out remaining connector pointers */
+- for (i = conn_count; i < INTELFB_CONN_LIMIT; i++)
+- modeset->connectors[i] = NULL;
+-
+- par->crtc_ids[crtc_count++] = crtc->base.id;
+-
+- modeset->num_connectors = conn_count;
+- if (modeset->crtc->desired_mode) {
+- if (modeset->mode)
+- drm_mode_destroy(dev, modeset->mode);
+- modeset->mode = drm_mode_duplicate(dev,
+- modeset->crtc->desired_mode);
+- }
+- }
+- par->crtc_count = crtc_count;
+-
+- if (new_fb) {
+- info->var.pixclock = -1;
+- if (register_framebuffer(info) < 0)
+- return -EINVAL;
+- } else
+- intelfb_set_par(info);
+-
+- DRM_INFO("fb%d: %s frame buffer device\n", info->node,
+- info->fix.id);
+-
+- /* Switch back to kernel console on panic */
+- kernelfb_mode = *modeset;
+- atomic_notifier_chain_register(&panic_notifier_list, &paniced);
+- DRM_DEBUG("registered panic notifier\n");
+-
+- return 0;
+-}
+-
+-/**
+- * intelfb_restore - restore the framebuffer console (kernel) config
+- *
+- * Restore's the kernel's fbcon mode, used for lastclose & panic paths.
+- */
+-void intelfb_restore(void)
+-{
+- int ret;
+- if ((ret = drm_crtc_helper_set_config(&kernelfb_mode)) != 0) {
+- DRM_ERROR("Failed to restore crtc configuration: %d\n",
+- ret);
+- }
+-}
+-
+-static void intelfb_restore_work_fn(struct work_struct *ignored)
+-{
+- intelfb_restore();
+-}
+-static DECLARE_WORK(intelfb_restore_work, intelfb_restore_work_fn);
+-
+-static void intelfb_sysrq(int dummy1, struct tty_struct *dummy3)
+-{
+- schedule_work(&intelfb_restore_work);
+-}
+-
+-static struct sysrq_key_op sysrq_intelfb_restore_op = {
+- .handler = intelfb_sysrq,
+- .help_msg = "force-fb(V)",
+- .action_msg = "Restore framebuffer console",
+-};
+-
+ int intelfb_probe(struct drm_device *dev)
+ {
+ int ret;
+
+ DRM_DEBUG("\n");
+-
+- /* something has changed in the lower levels of hell - deal with it
+- here */
+-
+- /* two modes : a) 1 fb to rule all crtcs.
+- b) one fb per crtc.
+- two actions 1) new connected device
+- 2) device removed.
+- case a/1 : if the fb surface isn't big enough - resize the surface fb.
+- if the fb size isn't big enough - resize fb into surface.
+- if everything big enough configure the new crtc/etc.
+- case a/2 : undo the configuration
+- possibly resize down the fb to fit the new configuration.
+- case b/1 : see if it is on a new crtc - setup a new fb and add it.
+- case b/2 : teardown the new fb.
+- */
+-
+- /* mode a first */
+- /* search for an fb */
+- if (i915_fbpercrtc == 1) {
+- ret = intelfb_multi_fb_probe(dev);
+- } else {
+- ret = intelfb_single_fb_probe(dev);
+- }
+-
+- register_sysrq_key('v', &sysrq_intelfb_restore_op);
+-
++ ret = drm_fb_helper_single_fb_probe(dev, intelfb_create);
+ return ret;
+ }
+ EXPORT_SYMBOL(intelfb_probe);
+@@ -940,13 +259,14 @@ int intelfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
+ info = fb->fbdev;
+
+ if (info) {
++ struct intelfb_par *par = info->par;
+ unregister_framebuffer(info);
+ iounmap(info->screen_base);
++ if (info->par)
++ drm_fb_helper_free(&par->helper);
+ framebuffer_release(info);
+ }
+
+- atomic_notifier_chain_unregister(&panic_notifier_list, &paniced);
+- memset(&kernelfb_mode, 0, sizeof(struct drm_mode_set));
+ return 0;
+ }
+ EXPORT_SYMBOL(intelfb_remove);
+diff --git a/drivers/gpu/drm/i915/intel_i2c.c b/drivers/gpu/drm/i915/intel_i2c.c
+index 62b8bea..c7eab72 100644
+--- a/drivers/gpu/drm/i915/intel_i2c.c
++++ b/drivers/gpu/drm/i915/intel_i2c.c
+@@ -42,11 +42,11 @@ void intel_i2c_quirk_set(struct drm_device *dev, bool enable)
+ if (!IS_IGD(dev))
+ return;
+ if (enable)
+- I915_WRITE(CG_2D_DIS,
+- I915_READ(CG_2D_DIS) | DPCUNIT_CLOCK_GATE_DISABLE);
++ I915_WRITE(DSPCLK_GATE_D,
++ I915_READ(DSPCLK_GATE_D) | DPCUNIT_CLOCK_GATE_DISABLE);
+ else
+- I915_WRITE(CG_2D_DIS,
+- I915_READ(CG_2D_DIS) & (~DPCUNIT_CLOCK_GATE_DISABLE));
++ I915_WRITE(DSPCLK_GATE_D,
++ I915_READ(DSPCLK_GATE_D) & (~DPCUNIT_CLOCK_GATE_DISABLE));
+ }
+
+ /*
+diff --git a/drivers/gpu/drm/i915/intel_lvds.c b/drivers/gpu/drm/i915/intel_lvds.c
+index 8df02ef..dafc0da 100644
+--- a/drivers/gpu/drm/i915/intel_lvds.c
++++ b/drivers/gpu/drm/i915/intel_lvds.c
+@@ -38,16 +38,6 @@
+ #include "i915_drv.h"
+ #include <linux/acpi.h>
+
+-#define I915_LVDS "i915_lvds"
+-
+-/*
+- * the following four scaling options are defined.
+- * #define DRM_MODE_SCALE_NON_GPU 0
+- * #define DRM_MODE_SCALE_FULLSCREEN 1
+- * #define DRM_MODE_SCALE_NO_SCALE 2
+- * #define DRM_MODE_SCALE_ASPECT 3
+- */
+-
+ /* Private structure for the integrated LVDS support */
+ struct intel_lvds_priv {
+ int fitting_mode;
+@@ -336,7 +326,7 @@ static bool intel_lvds_mode_fixup(struct drm_encoder *encoder,
+ I915_WRITE(BCLRPAT_B, 0);
+
+ switch (lvds_priv->fitting_mode) {
+- case DRM_MODE_SCALE_NO_SCALE:
++ case DRM_MODE_SCALE_CENTER:
+ /*
+ * For centered modes, we have to calculate border widths &
+ * heights and modify the values programmed into the CRTC.
+@@ -672,9 +662,8 @@ static int intel_lvds_set_property(struct drm_connector *connector,
+ connector->encoder) {
+ struct drm_crtc *crtc = connector->encoder->crtc;
+ struct intel_lvds_priv *lvds_priv = intel_output->dev_priv;
+- if (value == DRM_MODE_SCALE_NON_GPU) {
+- DRM_DEBUG_KMS(I915_LVDS,
+- "non_GPU property is unsupported\n");
++ if (value == DRM_MODE_SCALE_NONE) {
++ DRM_DEBUG_KMS("no scaling not supported\n");
+ return 0;
+ }
+ if (lvds_priv->fitting_mode == value) {
+@@ -731,8 +720,7 @@ static const struct drm_encoder_funcs intel_lvds_enc_funcs = {
+
+ static int __init intel_no_lvds_dmi_callback(const struct dmi_system_id *id)
+ {
+- DRM_DEBUG_KMS(I915_LVDS,
+- "Skipping LVDS initialization for %s\n", id->ident);
++ DRM_DEBUG_KMS("Skipping LVDS initialization for %s\n", id->ident);
+ return 1;
+ }
+
+@@ -1027,7 +1015,7 @@ out:
+ return;
+
+ failed:
+- DRM_DEBUG_KMS(I915_LVDS, "No LVDS modes found, disabling.\n");
++ DRM_DEBUG_KMS("No LVDS modes found, disabling.\n");
+ if (intel_output->ddc_bus)
+ intel_i2c_destroy(intel_output->ddc_bus);
+ drm_connector_cleanup(connector);
+diff --git a/drivers/gpu/drm/i915/intel_sdvo.c b/drivers/gpu/drm/i915/intel_sdvo.c
+index d3b74ba..0bf28ef 100644
+--- a/drivers/gpu/drm/i915/intel_sdvo.c
++++ b/drivers/gpu/drm/i915/intel_sdvo.c
+@@ -37,7 +37,19 @@
+ #include "intel_sdvo_regs.h"
+
+ #undef SDVO_DEBUG
+-#define I915_SDVO "i915_sdvo"
++
++static char *tv_format_names[] = {
++ "NTSC_M" , "NTSC_J" , "NTSC_443",
++ "PAL_B" , "PAL_D" , "PAL_G" ,
++ "PAL_H" , "PAL_I" , "PAL_M" ,
++ "PAL_N" , "PAL_NC" , "PAL_60" ,
++ "SECAM_B" , "SECAM_D" , "SECAM_G" ,
++ "SECAM_K" , "SECAM_K1", "SECAM_L" ,
++ "SECAM_60"
++};
++
++#define TV_FORMAT_NUM (sizeof(tv_format_names) / sizeof(*tv_format_names))
++
+ struct intel_sdvo_priv {
+ u8 slave_addr;
+
+@@ -71,6 +83,15 @@ struct intel_sdvo_priv {
+ */
+ bool is_tv;
+
++ /* This is for current tv format name */
++ char *tv_format_name;
++
++ /* This contains all current supported TV format */
++ char *tv_format_supported[TV_FORMAT_NUM];
++ int format_supported_num;
++ struct drm_property *tv_format_property;
++ struct drm_property *tv_format_name_property[TV_FORMAT_NUM];
++
+ /**
+ * This is set if we treat the device as HDMI, instead of DVI.
+ */
+@@ -97,14 +118,6 @@ struct intel_sdvo_priv {
+ */
+ struct intel_sdvo_sdtv_resolution_reply sdtv_resolutions;
+
+- /**
+- * Current selected TV format.
+- *
+- * This is stored in the same structure that's passed to the device, for
+- * convenience.
+- */
+- struct intel_sdvo_tv_format tv_format;
+-
+ /*
+ * supported encoding mode, used to determine whether HDMI is
+ * supported
+@@ -114,6 +127,9 @@ struct intel_sdvo_priv {
+ /* DDC bus used by this SDVO output */
+ uint8_t ddc_bus;
+
++ /* Mac mini hack -- use the same DDC as the analog connector */
++ struct i2c_adapter *analog_ddc_bus;
++
+ int save_sdvo_mult;
+ u16 save_active_outputs;
+ struct intel_sdvo_dtd save_input_dtd_1, save_input_dtd_2;
+@@ -188,7 +204,7 @@ static bool intel_sdvo_read_byte(struct intel_output *intel_output, u8 addr,
+ return true;
+ }
+
+- DRM_DEBUG("i2c transfer returned %d\n", ret);
++ DRM_DEBUG_KMS("i2c transfer returned %d\n", ret);
+ return false;
+ }
+
+@@ -298,7 +314,7 @@ static void intel_sdvo_debug_write(struct intel_output *intel_output, u8 cmd,
+ struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
+ int i;
+
+- DRM_DEBUG_KMS(I915_SDVO, "%s: W: %02X ",
++ DRM_DEBUG_KMS("%s: W: %02X ",
+ SDVO_NAME(sdvo_priv), cmd);
+ for (i = 0; i < args_len; i++)
+ DRM_LOG_KMS("%02X ", ((u8 *)args)[i]);
+@@ -351,7 +367,7 @@ static void intel_sdvo_debug_response(struct intel_output *intel_output,
+ struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
+ int i;
+
+- DRM_DEBUG_KMS(I915_SDVO, "%s: R: ", SDVO_NAME(sdvo_priv));
++ DRM_DEBUG_KMS("%s: R: ", SDVO_NAME(sdvo_priv));
+ for (i = 0; i < response_len; i++)
+ DRM_LOG_KMS("%02X ", ((u8 *)response)[i]);
+ for (; i < 8; i++)
+@@ -668,10 +684,10 @@ static int intel_sdvo_get_clock_rate_mult(struct intel_output *intel_output)
+ status = intel_sdvo_read_response(intel_output, &response, 1);
+
+ if (status != SDVO_CMD_STATUS_SUCCESS) {
+- DRM_DEBUG("Couldn't get SDVO clock rate multiplier\n");
++ DRM_DEBUG_KMS("Couldn't get SDVO clock rate multiplier\n");
+ return SDVO_CLOCK_RATE_MULT_1X;
+ } else {
+- DRM_DEBUG("Current clock rate multiplier: %d\n", response);
++ DRM_DEBUG_KMS("Current clock rate multiplier: %d\n", response);
+ }
+
+ return response;
+@@ -945,23 +961,28 @@ static void intel_sdvo_set_avi_infoframe(struct intel_output *output,
+
+ static void intel_sdvo_set_tv_format(struct intel_output *output)
+ {
++
++ struct intel_sdvo_tv_format format;
+ struct intel_sdvo_priv *sdvo_priv = output->dev_priv;
+- struct intel_sdvo_tv_format *format, unset;
+- u8 status;
++ uint32_t format_map, i;
++ uint8_t status;
+
+- format = &sdvo_priv->tv_format;
+- memset(&unset, 0, sizeof(unset));
+- if (memcmp(format, &unset, sizeof(*format))) {
+- DRM_DEBUG("%s: Choosing default TV format of NTSC-M\n",
+- SDVO_NAME(sdvo_priv));
+- format->ntsc_m = 1;
+- intel_sdvo_write_cmd(output, SDVO_CMD_SET_TV_FORMAT, format,
+- sizeof(*format));
+- status = intel_sdvo_read_response(output, NULL, 0);
+- if (status != SDVO_CMD_STATUS_SUCCESS)
+- DRM_DEBUG("%s: Failed to set TV format\n",
+- SDVO_NAME(sdvo_priv));
+- }
++ for (i = 0; i < TV_FORMAT_NUM; i++)
++ if (tv_format_names[i] == sdvo_priv->tv_format_name)
++ break;
++
++ format_map = 1 << i;
++ memset(&format, 0, sizeof(format));
++ memcpy(&format, &format_map, sizeof(format_map) > sizeof(format) ?
++ sizeof(format) : sizeof(format_map));
++
++ intel_sdvo_write_cmd(output, SDVO_CMD_SET_TV_FORMAT, &format_map,
++ sizeof(format));
++
++ status = intel_sdvo_read_response(output, NULL, 0);
++ if (status != SDVO_CMD_STATUS_SUCCESS)
++ DRM_DEBUG("%s: Failed to set TV format\n",
++ SDVO_NAME(sdvo_priv));
+ }
+
+ static bool intel_sdvo_mode_fixup(struct drm_encoder *encoder,
+@@ -1230,8 +1251,8 @@ static void intel_sdvo_dpms(struct drm_encoder *encoder, int mode)
+ * a given it the status is a success, we succeeded.
+ */
+ if (status == SDVO_CMD_STATUS_SUCCESS && !input1) {
+- DRM_DEBUG("First %s output reported failure to sync\n",
+- SDVO_NAME(sdvo_priv));
++ DRM_DEBUG_KMS("First %s output reported failure to "
++ "sync\n", SDVO_NAME(sdvo_priv));
+ }
+
+ if (0)
+@@ -1326,8 +1347,8 @@ static void intel_sdvo_restore(struct drm_connector *connector)
+ intel_wait_for_vblank(dev);
+ status = intel_sdvo_get_trained_inputs(intel_output, &input1, &input2);
+ if (status == SDVO_CMD_STATUS_SUCCESS && !input1)
+- DRM_DEBUG("First %s output reported failure to sync\n",
+- SDVO_NAME(sdvo_priv));
++ DRM_DEBUG_KMS("First %s output reported failure to "
++ "sync\n", SDVO_NAME(sdvo_priv));
+ }
+
+ intel_sdvo_set_active_outputs(intel_output, sdvo_priv->save_active_outputs);
+@@ -1405,7 +1426,7 @@ int intel_sdvo_supports_hotplug(struct drm_connector *connector)
+ u8 response[2];
+ u8 status;
+ struct intel_output *intel_output;
+- DRM_DEBUG("\n");
++ DRM_DEBUG_KMS("\n");
+
+ if (!connector)
+ return 0;
+@@ -1478,6 +1499,36 @@ intel_sdvo_multifunc_encoder(struct intel_output *intel_output)
+ return (caps > 1);
+ }
+
++static struct drm_connector *
++intel_find_analog_connector(struct drm_device *dev)
++{
++ struct drm_connector *connector;
++ struct intel_output *intel_output;
++
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ intel_output = to_intel_output(connector);
++ if (intel_output->type == INTEL_OUTPUT_ANALOG)
++ return connector;
++ }
++ return NULL;
++}
++
++static int
++intel_analog_is_connected(struct drm_device *dev)
++{
++ struct drm_connector *analog_connector;
++ analog_connector = intel_find_analog_connector(dev);
++
++ if (!analog_connector)
++ return false;
++
++ if (analog_connector->funcs->detect(analog_connector) ==
++ connector_status_disconnected)
++ return false;
++
++ return true;
++}
++
+ enum drm_connector_status
+ intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)
+ {
+@@ -1488,6 +1539,15 @@ intel_sdvo_hdmi_sink_detect(struct drm_connector *connector, u16 response)
+
+ edid = drm_get_edid(&intel_output->base,
+ intel_output->ddc_bus);
++
++ /* when there is no edid and no monitor is connected with VGA
++ * port, try to use the CRT ddc to read the EDID for DVI-connector
++ */
++ if (edid == NULL &&
++ sdvo_priv->analog_ddc_bus &&
++ !intel_analog_is_connected(intel_output->base.dev))
++ edid = drm_get_edid(&intel_output->base,
++ sdvo_priv->analog_ddc_bus);
+ if (edid != NULL) {
+ /* Don't report the output as connected if it's a DVI-I
+ * connector with a non-digital EDID coming out.
+@@ -1516,10 +1576,11 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect
+ struct intel_output *intel_output = to_intel_output(connector);
+ struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
+
+- intel_sdvo_write_cmd(intel_output, SDVO_CMD_GET_ATTACHED_DISPLAYS, NULL, 0);
++ intel_sdvo_write_cmd(intel_output,
++ SDVO_CMD_GET_ATTACHED_DISPLAYS, NULL, 0);
+ status = intel_sdvo_read_response(intel_output, &response, 2);
+
+- DRM_DEBUG("SDVO response %d %d\n", response & 0xff, response >> 8);
++ DRM_DEBUG_KMS("SDVO response %d %d\n", response & 0xff, response >> 8);
+
+ if (status != SDVO_CMD_STATUS_SUCCESS)
+ return connector_status_unknown;
+@@ -1540,50 +1601,32 @@ static enum drm_connector_status intel_sdvo_detect(struct drm_connector *connect
+ static void intel_sdvo_get_ddc_modes(struct drm_connector *connector)
+ {
+ struct intel_output *intel_output = to_intel_output(connector);
++ struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
++ int num_modes;
+
+ /* set the bus switch and get the modes */
+- intel_ddc_get_modes(intel_output);
++ num_modes = intel_ddc_get_modes(intel_output);
+
+-#if 0
+- struct drm_device *dev = encoder->dev;
+- struct drm_i915_private *dev_priv = dev->dev_private;
+- /* Mac mini hack. On this device, I get DDC through the analog, which
+- * load-detects as disconnected. I fail to DDC through the SDVO DDC,
+- * but it does load-detect as connected. So, just steal the DDC bits
+- * from analog when we fail at finding it the right way.
++ /*
++ * Mac mini hack. On this device, the DVI-I connector shares one DDC
++ * link between analog and digital outputs. So, if the regular SDVO
++ * DDC fails, check to see if the analog output is disconnected, in
++ * which case we'll look there for the digital DDC data.
+ */
+- crt = xf86_config->output[0];
+- intel_output = crt->driver_private;
+- if (intel_output->type == I830_OUTPUT_ANALOG &&
+- crt->funcs->detect(crt) == XF86OutputStatusDisconnected) {
+- I830I2CInit(pScrn, &intel_output->pDDCBus, GPIOA, "CRTDDC_A");
+- edid_mon = xf86OutputGetEDID(crt, intel_output->pDDCBus);
+- xf86DestroyI2CBusRec(intel_output->pDDCBus, true, true);
+- }
+- if (edid_mon) {
+- xf86OutputSetEDID(output, edid_mon);
+- modes = xf86OutputGetEDIDModes(output);
+- }
+-#endif
+-}
++ if (num_modes == 0 &&
++ sdvo_priv->analog_ddc_bus &&
++ !intel_analog_is_connected(intel_output->base.dev)) {
++ struct i2c_adapter *digital_ddc_bus;
+
+-/**
+- * This function checks the current TV format, and chooses a default if
+- * it hasn't been set.
+- */
+-static void
+-intel_sdvo_check_tv_format(struct intel_output *output)
+-{
+- struct intel_sdvo_priv *dev_priv = output->dev_priv;
+- struct intel_sdvo_tv_format format;
+- uint8_t status;
++ /* Switch to the analog ddc bus and try that
++ */
++ digital_ddc_bus = intel_output->ddc_bus;
++ intel_output->ddc_bus = sdvo_priv->analog_ddc_bus;
+
+- intel_sdvo_write_cmd(output, SDVO_CMD_GET_TV_FORMAT, NULL, 0);
+- status = intel_sdvo_read_response(output, &format, sizeof(format));
+- if (status != SDVO_CMD_STATUS_SUCCESS)
+- return;
++ (void) intel_ddc_get_modes(intel_output);
+
+- memcpy(&dev_priv->tv_format, &format, sizeof(format));
++ intel_output->ddc_bus = digital_ddc_bus;
++ }
+ }
+
+ /*
+@@ -1656,17 +1699,26 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector)
+ struct intel_output *output = to_intel_output(connector);
+ struct intel_sdvo_priv *sdvo_priv = output->dev_priv;
+ struct intel_sdvo_sdtv_resolution_request tv_res;
+- uint32_t reply = 0;
++ uint32_t reply = 0, format_map = 0;
++ int i;
+ uint8_t status;
+- int i = 0;
+
+- intel_sdvo_check_tv_format(output);
+
+ /* Read the list of supported input resolutions for the selected TV
+ * format.
+ */
+- memset(&tv_res, 0, sizeof(tv_res));
+- memcpy(&tv_res, &sdvo_priv->tv_format, sizeof(tv_res));
++ for (i = 0; i < TV_FORMAT_NUM; i++)
++ if (tv_format_names[i] == sdvo_priv->tv_format_name)
++ break;
++
++ format_map = (1 << i);
++ memcpy(&tv_res, &format_map,
++ sizeof(struct intel_sdvo_sdtv_resolution_request) >
++ sizeof(format_map) ? sizeof(format_map) :
++ sizeof(struct intel_sdvo_sdtv_resolution_request));
++
++ intel_sdvo_set_target_output(output, sdvo_priv->controlled_output);
++
+ intel_sdvo_write_cmd(output, SDVO_CMD_GET_SDTV_RESOLUTION_SUPPORT,
+ &tv_res, sizeof(tv_res));
+ status = intel_sdvo_read_response(output, &reply, 3);
+@@ -1681,6 +1733,7 @@ static void intel_sdvo_get_tv_modes(struct drm_connector *connector)
+ if (nmode)
+ drm_mode_probed_add(connector, nmode);
+ }
++
+ }
+
+ static void intel_sdvo_get_lvds_modes(struct drm_connector *connector)
+@@ -1748,17 +1801,62 @@ static void intel_sdvo_destroy(struct drm_connector *connector)
+ intel_i2c_destroy(intel_output->i2c_bus);
+ if (intel_output->ddc_bus)
+ intel_i2c_destroy(intel_output->ddc_bus);
++ if (sdvo_priv->analog_ddc_bus)
++ intel_i2c_destroy(sdvo_priv->analog_ddc_bus);
+
+ if (sdvo_priv->sdvo_lvds_fixed_mode != NULL)
+ drm_mode_destroy(connector->dev,
+ sdvo_priv->sdvo_lvds_fixed_mode);
+
++ if (sdvo_priv->tv_format_property)
++ drm_property_destroy(connector->dev,
++ sdvo_priv->tv_format_property);
++
+ drm_sysfs_connector_remove(connector);
+ drm_connector_cleanup(connector);
+
+ kfree(intel_output);
+ }
+
++static int
++intel_sdvo_set_property(struct drm_connector *connector,
++ struct drm_property *property,
++ uint64_t val)
++{
++ struct intel_output *intel_output = to_intel_output(connector);
++ struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
++ struct drm_encoder *encoder = &intel_output->enc;
++ struct drm_crtc *crtc = encoder->crtc;
++ int ret = 0;
++ bool changed = false;
++
++ ret = drm_connector_property_set_value(connector, property, val);
++ if (ret < 0)
++ goto out;
++
++ if (property == sdvo_priv->tv_format_property) {
++ if (val >= TV_FORMAT_NUM) {
++ ret = -EINVAL;
++ goto out;
++ }
++ if (sdvo_priv->tv_format_name ==
++ sdvo_priv->tv_format_supported[val])
++ goto out;
++
++ sdvo_priv->tv_format_name = sdvo_priv->tv_format_supported[val];
++ changed = true;
++ } else {
++ ret = -EINVAL;
++ goto out;
++ }
++
++ if (changed && crtc)
++ drm_crtc_helper_set_mode(crtc, &crtc->mode, crtc->x,
++ crtc->y, crtc->fb);
++out:
++ return ret;
++}
++
+ static const struct drm_encoder_helper_funcs intel_sdvo_helper_funcs = {
+ .dpms = intel_sdvo_dpms,
+ .mode_fixup = intel_sdvo_mode_fixup,
+@@ -1773,6 +1871,7 @@ static const struct drm_connector_funcs intel_sdvo_connector_funcs = {
+ .restore = intel_sdvo_restore,
+ .detect = intel_sdvo_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
++ .set_property = intel_sdvo_set_property,
+ .destroy = intel_sdvo_destroy,
+ };
+
+@@ -2013,10 +2112,9 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
+
+ sdvo_priv->controlled_output = 0;
+ memcpy(bytes, &sdvo_priv->caps.output_flags, 2);
+- DRM_DEBUG_KMS(I915_SDVO,
+- "%s: Unknown SDVO output type (0x%02x%02x)\n",
+- SDVO_NAME(sdvo_priv),
+- bytes[0], bytes[1]);
++ DRM_DEBUG_KMS("%s: Unknown SDVO output type (0x%02x%02x)\n",
++ SDVO_NAME(sdvo_priv),
++ bytes[0], bytes[1]);
+ ret = false;
+ }
+ intel_output->crtc_mask = (1 << 0) | (1 << 1);
+@@ -2029,6 +2127,55 @@ intel_sdvo_output_setup(struct intel_output *intel_output, uint16_t flags)
+
+ }
+
++static void intel_sdvo_tv_create_property(struct drm_connector *connector)
++{
++ struct intel_output *intel_output = to_intel_output(connector);
++ struct intel_sdvo_priv *sdvo_priv = intel_output->dev_priv;
++ struct intel_sdvo_tv_format format;
++ uint32_t format_map, i;
++ uint8_t status;
++
++ intel_sdvo_set_target_output(intel_output,
++ sdvo_priv->controlled_output);
++
++ intel_sdvo_write_cmd(intel_output,
++ SDVO_CMD_GET_SUPPORTED_TV_FORMATS, NULL, 0);
++ status = intel_sdvo_read_response(intel_output,
++ &format, sizeof(format));
++ if (status != SDVO_CMD_STATUS_SUCCESS)
++ return;
++
++ memcpy(&format_map, &format, sizeof(format) > sizeof(format_map) ?
++ sizeof(format_map) : sizeof(format));
++
++ if (format_map == 0)
++ return;
++
++ sdvo_priv->format_supported_num = 0;
++ for (i = 0 ; i < TV_FORMAT_NUM; i++)
++ if (format_map & (1 << i)) {
++ sdvo_priv->tv_format_supported
++ [sdvo_priv->format_supported_num++] =
++ tv_format_names[i];
++ }
++
++
++ sdvo_priv->tv_format_property =
++ drm_property_create(
++ connector->dev, DRM_MODE_PROP_ENUM,
++ "mode", sdvo_priv->format_supported_num);
++
++ for (i = 0; i < sdvo_priv->format_supported_num; i++)
++ drm_property_add_enum(
++ sdvo_priv->tv_format_property, i,
++ i, sdvo_priv->tv_format_supported[i]);
++
++ sdvo_priv->tv_format_name = sdvo_priv->tv_format_supported[0];
++ drm_connector_attach_property(
++ connector, sdvo_priv->tv_format_property, 0);
++
++}
++
+ bool intel_sdvo_init(struct drm_device *dev, int output_device)
+ {
+ struct drm_connector *connector;
+@@ -2066,18 +2213,22 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)
+ /* Read the regs to test if we can talk to the device */
+ for (i = 0; i < 0x40; i++) {
+ if (!intel_sdvo_read_byte(intel_output, i, &ch[i])) {
+- DRM_DEBUG_KMS(I915_SDVO,
+- "No SDVO device found on SDVO%c\n",
++ DRM_DEBUG_KMS("No SDVO device found on SDVO%c\n",
+ output_device == SDVOB ? 'B' : 'C');
+ goto err_i2c;
+ }
+ }
+
+ /* setup the DDC bus. */
+- if (output_device == SDVOB)
++ if (output_device == SDVOB) {
+ intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOB DDC BUS");
+- else
++ sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA,
++ "SDVOB/VGA DDC BUS");
++ } else {
+ intel_output->ddc_bus = intel_i2c_create(dev, GPIOE, "SDVOC DDC BUS");
++ sdvo_priv->analog_ddc_bus = intel_i2c_create(dev, GPIOA,
++ "SDVOC/VGA DDC BUS");
++ }
+
+ if (intel_output->ddc_bus == NULL)
+ goto err_i2c;
+@@ -2090,7 +2241,7 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)
+
+ if (intel_sdvo_output_setup(intel_output,
+ sdvo_priv->caps.output_flags) != true) {
+- DRM_DEBUG("SDVO output failed to setup on SDVO%c\n",
++ DRM_DEBUG_KMS("SDVO output failed to setup on SDVO%c\n",
+ output_device == SDVOB ? 'B' : 'C');
+ goto err_i2c;
+ }
+@@ -2111,6 +2262,8 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)
+ drm_encoder_helper_add(&intel_output->enc, &intel_sdvo_helper_funcs);
+
+ drm_mode_connector_attach_encoder(&intel_output->base, &intel_output->enc);
++ if (sdvo_priv->is_tv)
++ intel_sdvo_tv_create_property(connector);
+ drm_sysfs_connector_add(connector);
+
+ intel_sdvo_select_ddc_bus(sdvo_priv);
+@@ -2123,7 +2276,7 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)
+ &sdvo_priv->pixel_clock_max);
+
+
+- DRM_DEBUG_KMS(I915_SDVO, "%s device VID/DID: %02X:%02X.%02X, "
++ DRM_DEBUG_KMS("%s device VID/DID: %02X:%02X.%02X, "
+ "clock range %dMHz - %dMHz, "
+ "input 1: %c, input 2: %c, "
+ "output 1: %c, output 2: %c\n",
+@@ -2143,6 +2296,8 @@ bool intel_sdvo_init(struct drm_device *dev, int output_device)
+ return true;
+
+ err_i2c:
++ if (sdvo_priv->analog_ddc_bus != NULL)
++ intel_i2c_destroy(sdvo_priv->analog_ddc_bus);
+ if (intel_output->ddc_bus != NULL)
+ intel_i2c_destroy(intel_output->ddc_bus);
+ if (intel_output->i2c_bus != NULL)
+diff --git a/drivers/gpu/drm/i915/intel_tv.c b/drivers/gpu/drm/i915/intel_tv.c
+index 5b1c9e9..c64eab4 100644
+--- a/drivers/gpu/drm/i915/intel_tv.c
++++ b/drivers/gpu/drm/i915/intel_tv.c
+@@ -1437,6 +1437,35 @@ intel_tv_detect_type (struct drm_crtc *crtc, struct intel_output *intel_output)
+ return type;
+ }
+
++/*
++ * Here we set accurate tv format according to connector type
++ * i.e Component TV should not be assigned by NTSC or PAL
++ */
++static void intel_tv_find_better_format(struct drm_connector *connector)
++{
++ struct intel_output *intel_output = to_intel_output(connector);
++ struct intel_tv_priv *tv_priv = intel_output->dev_priv;
++ const struct tv_mode *tv_mode = intel_tv_mode_find(intel_output);
++ int i;
++
++ if ((tv_priv->type == DRM_MODE_CONNECTOR_Component) ==
++ tv_mode->component_only)
++ return;
++
++
++ for (i = 0; i < sizeof(tv_modes) / sizeof(*tv_modes); i++) {
++ tv_mode = tv_modes + i;
++
++ if ((tv_priv->type == DRM_MODE_CONNECTOR_Component) ==
++ tv_mode->component_only)
++ break;
++ }
++
++ tv_priv->tv_format = tv_mode->name;
++ drm_connector_property_set_value(connector,
++ connector->dev->mode_config.tv_mode_property, i);
++}
++
+ /**
+ * Detect the TV connection.
+ *
+@@ -1473,6 +1502,7 @@ intel_tv_detect(struct drm_connector *connector)
+ if (type < 0)
+ return connector_status_disconnected;
+
++ intel_tv_find_better_format(connector);
+ return connector_status_connected;
+ }
+
+diff --git a/drivers/gpu/drm/mga/mga_dma.c b/drivers/gpu/drm/mga/mga_dma.c
+index 6c67a02..3c917fb 100644
+--- a/drivers/gpu/drm/mga/mga_dma.c
++++ b/drivers/gpu/drm/mga/mga_dma.c
+@@ -444,7 +444,7 @@ static int mga_do_agp_dma_bootstrap(struct drm_device * dev,
+ {
+ drm_mga_private_t *const dev_priv =
+ (drm_mga_private_t *) dev->dev_private;
+- unsigned int warp_size = mga_warp_microcode_size(dev_priv);
++ unsigned int warp_size = MGA_WARP_UCODE_SIZE;
+ int err;
+ unsigned offset;
+ const unsigned secondary_size = dma_bs->secondary_bin_count
+@@ -619,7 +619,7 @@ static int mga_do_pci_dma_bootstrap(struct drm_device * dev,
+ {
+ drm_mga_private_t *const dev_priv =
+ (drm_mga_private_t *) dev->dev_private;
+- unsigned int warp_size = mga_warp_microcode_size(dev_priv);
++ unsigned int warp_size = MGA_WARP_UCODE_SIZE;
+ unsigned int primary_size;
+ unsigned int bin_count;
+ int err;
+diff --git a/drivers/gpu/drm/mga/mga_drv.h b/drivers/gpu/drm/mga/mga_drv.h
+index 3d264f2..be6c6b9 100644
+--- a/drivers/gpu/drm/mga/mga_drv.h
++++ b/drivers/gpu/drm/mga/mga_drv.h
+@@ -177,7 +177,6 @@ extern void mga_do_dma_wrap_end(drm_mga_private_t * dev_priv);
+ extern int mga_freelist_put(struct drm_device * dev, struct drm_buf * buf);
+
+ /* mga_warp.c */
+-extern unsigned int mga_warp_microcode_size(const drm_mga_private_t * dev_priv);
+ extern int mga_warp_install_microcode(drm_mga_private_t * dev_priv);
+ extern int mga_warp_init(drm_mga_private_t * dev_priv);
+
+diff --git a/drivers/gpu/drm/mga/mga_ucode.h b/drivers/gpu/drm/mga/mga_ucode.h
+deleted file mode 100644
+index b611e27..0000000
+--- a/drivers/gpu/drm/mga/mga_ucode.h
++++ /dev/null
+@@ -1,11645 +0,0 @@
+-/* mga_ucode.h -- Matrox G200/G400 WARP engine microcode -*- linux-c -*-
+- * Created: Thu Jan 11 21:20:43 2001 by gareth@valinux.com
+- *
+- * Copyright 1999 Matrox Graphics Inc.
+- * All Rights Reserved.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included
+- * in all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
+- * OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * MATROX GRAPHICS INC., OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
+- * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
+- * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
+- * OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Kernel-based WARP engine management:
+- * Gareth Hughes <gareth@valinux.com>
+- */
+-
+-/*
+- * WARP pipes are named according to the functions they perform, where:
+- *
+- * - T stands for computation of texture stage 0
+- * - T2 stands for computation of both texture stage 0 and texture stage 1
+- * - G stands for computation of triangle intensity (Gouraud interpolation)
+- * - Z stands for computation of Z buffer interpolation
+- * - S stands for computation of specular highlight
+- * - A stands for computation of the alpha channel
+- * - F stands for computation of vertex fog interpolation
+- */
+-
+-static unsigned char warp_g200_tgz[] = {
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x72, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x60, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x03, 0x80, 0x0A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x57, 0x39, 0x20, 0xE9,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0x2B, 0x32, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0xB3, 0x05,
+- 0x00, 0xE0,
+- 0x16, 0x28, 0x20, 0xE9,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x1E, 0x2B, 0x20, 0xE9,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x85, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x84, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x82, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x7F, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g200_tgza[] = {
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x7D, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x6B, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2D, 0x44, 0x4C, 0xB6,
+- 0x25, 0x44, 0x54, 0xB6,
+-
+- 0x03, 0x80, 0x2A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x2D, 0x20,
+- 0x25, 0x20,
+- 0x07, 0xC0, 0x44, 0xC6,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x1F, 0x62, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x3F, 0x3D, 0x5D, 0x9F,
+- 0x00, 0xE0,
+- 0x07, 0x20,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0xB3, 0x05,
+- 0x00, 0xE0,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0x26, 0x1F, 0xDF,
+- 0x9D, 0x1F, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x9E, 0x3F, 0x4F, 0xE9,
+-
+- 0x07, 0x07, 0x1F, 0xAF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x9C, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x57, 0x39, 0x20, 0xE9,
+-
+- 0x16, 0x28, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0x1E, 0x2B, 0x20, 0xE9,
+- 0x2B, 0x32, 0x20, 0xE9,
+-
+- 0x1C, 0x23, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x7A, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x79, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x77, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x74, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g200_tgzaf[] = {
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x83, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x21, 0x45, 0x80, 0xE8,
+- 0x1A, 0x4D, 0x80, 0xE8,
+-
+- 0x31, 0x55, 0x80, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x6F, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0D, 0x21, 0x1A, 0xB6,
+- 0x05, 0x21, 0x31, 0xB6,
+-
+- 0x2D, 0x44, 0x4C, 0xB6,
+- 0x25, 0x44, 0x54, 0xB6,
+-
+- 0x03, 0x80, 0x2A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x0D, 0x20,
+- 0x05, 0x20,
+- 0x2F, 0xC0, 0x21, 0xC6,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x07, 0xC0, 0x44, 0xC6,
+-
+- 0x17, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x2D, 0x20,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0xE0,
+- 0x2F, 0x20,
+-
+- 0x1F, 0x62, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x07, 0x20,
+-
+- 0x3F, 0x3D, 0x5D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0xB3, 0x05,
+- 0x00, 0xE0,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x35, 0x17, 0x4F, 0xE9,
+-
+- 0x1F, 0x26, 0x1F, 0xDF,
+- 0x9D, 0x1F, 0x4F, 0xE9,
+-
+- 0x9E, 0x3F, 0x4F, 0xE9,
+- 0x39, 0x37, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x17, 0xAF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x07, 0x07, 0x1F, 0xAF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x31, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x9C, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x57, 0x39, 0x20, 0xE9,
+-
+- 0x16, 0x28, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0x1E, 0x2B, 0x20, 0xE9,
+- 0x2B, 0x32, 0x20, 0xE9,
+-
+- 0x1C, 0x23, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x74, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x73, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x71, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6E, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g200_tgzf[] = {
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x7F, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x21, 0x45, 0x80, 0xE8,
+- 0x1A, 0x4D, 0x80, 0xE8,
+-
+- 0x31, 0x55, 0x80, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x6B, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0D, 0x21, 0x1A, 0xB6,
+- 0x05, 0x21, 0x31, 0xB6,
+-
+- 0x03, 0x80, 0x2A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x0D, 0x20,
+- 0x05, 0x20,
+- 0x2F, 0xC0, 0x21, 0xC6,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x17, 0x50, 0x56, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0xE0,
+- 0x2F, 0x20,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0xB3, 0x05,
+- 0x00, 0xE0,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x17, 0x26, 0x17, 0xDF,
+- 0x35, 0x17, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x39, 0x37, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x17, 0xAF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x31, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x57, 0x39, 0x20, 0xE9,
+-
+- 0x16, 0x28, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0x1E, 0x2B, 0x20, 0xE9,
+- 0x2B, 0x32, 0x20, 0xE9,
+-
+- 0x1C, 0x23, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x78, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x77, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x75, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x72, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g200_tgzs[] = {
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x8B, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x21, 0x45, 0x80, 0xE8,
+- 0x1A, 0x4D, 0x80, 0xE8,
+-
+- 0x31, 0x55, 0x80, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x77, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2D, 0x21, 0x1A, 0xB0,
+- 0x25, 0x21, 0x31, 0xB0,
+-
+- 0x0D, 0x21, 0x1A, 0xB2,
+- 0x05, 0x21, 0x31, 0xB2,
+-
+- 0x03, 0x80, 0x2A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x2D, 0x20,
+- 0x25, 0x20,
+- 0x05, 0x20,
+- 0x0D, 0x20,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x2F, 0xC0, 0x21, 0xC0,
+-
+- 0x16, 0x42, 0x56, 0x9F,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x1E, 0x62, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x21, 0x31, 0xB4,
+- 0x2D, 0x21, 0x1A, 0xB4,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0x05,
+- 0x00, 0xE0,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0xE0,
+- 0x2F, 0x20,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x1E, 0x26, 0x1E, 0xDF,
+-
+- 0xA7, 0x1E, 0x4F, 0xE9,
+- 0x17, 0x26, 0x16, 0xDF,
+-
+- 0x2D, 0x20,
+- 0x00, 0xE0,
+- 0xA8, 0x3F, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x1E, 0xAF,
+- 0x25, 0x20,
+- 0x00, 0xE0,
+-
+- 0xA4, 0x16, 0x4F, 0xE9,
+- 0x0F, 0xC0, 0x21, 0xC2,
+-
+- 0xA6, 0x80, 0x4F, 0xE9,
+- 0x1F, 0x62, 0x57, 0x9F,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0xE0,
+- 0x8F, 0x20,
+-
+- 0xA5, 0x37, 0x4F, 0xE9,
+- 0x0F, 0x17, 0x0F, 0xAF,
+-
+- 0x06, 0xC0, 0x21, 0xC4,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0xA3, 0x80, 0x4F, 0xE9,
+-
+- 0x06, 0x20,
+- 0x00, 0xE0,
+- 0x1F, 0x26, 0x1F, 0xDF,
+-
+- 0xA1, 0x1F, 0x4F, 0xE9,
+- 0xA2, 0x3F, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x06, 0x06, 0x1F, 0xAF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x57, 0x39, 0x20, 0xE9,
+-
+- 0x16, 0x28, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0x1E, 0x2B, 0x20, 0xE9,
+- 0x2B, 0x32, 0x20, 0xE9,
+-
+- 0x1C, 0x23, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x6C, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6B, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x69, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g200_tgzsa[] = {
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x8F, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x21, 0x45, 0x80, 0xE8,
+- 0x1A, 0x4D, 0x80, 0xE8,
+-
+- 0x31, 0x55, 0x80, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x7B, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2D, 0x21, 0x1A, 0xB0,
+- 0x25, 0x21, 0x31, 0xB0,
+-
+- 0x0D, 0x21, 0x1A, 0xB2,
+- 0x05, 0x21, 0x31, 0xB2,
+-
+- 0x03, 0x80, 0x2A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x2D, 0x20,
+- 0x25, 0x20,
+- 0x05, 0x20,
+- 0x0D, 0x20,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x2F, 0xC0, 0x21, 0xC0,
+-
+- 0x16, 0x42, 0x56, 0x9F,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x1E, 0x62, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x21, 0x31, 0xB4,
+- 0x2D, 0x21, 0x1A, 0xB4,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0x05,
+- 0x00, 0xE0,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0x0D, 0x44, 0x4C, 0xB6,
+- 0x05, 0x44, 0x54, 0xB6,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0xE0,
+- 0x2F, 0x20,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x1E, 0x26, 0x1E, 0xDF,
+-
+- 0xA7, 0x1E, 0x4F, 0xE9,
+- 0x17, 0x26, 0x16, 0xDF,
+-
+- 0x2D, 0x20,
+- 0x00, 0xE0,
+- 0xA8, 0x3F, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x1E, 0xAF,
+- 0x25, 0x20,
+- 0x00, 0xE0,
+-
+- 0xA4, 0x16, 0x4F, 0xE9,
+- 0x0F, 0xC0, 0x21, 0xC2,
+-
+- 0xA6, 0x80, 0x4F, 0xE9,
+- 0x1F, 0x62, 0x57, 0x9F,
+-
+- 0x0D, 0x20,
+- 0x05, 0x20,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0xE0,
+- 0x0F, 0x20,
+-
+- 0x17, 0x50, 0x56, 0x9F,
+- 0xA5, 0x37, 0x4F, 0xE9,
+-
+- 0x06, 0xC0, 0x21, 0xC4,
+- 0x0F, 0x17, 0x0F, 0xAF,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2F, 0xC0, 0x44, 0xC6,
+- 0xA3, 0x80, 0x4F, 0xE9,
+-
+- 0x06, 0x20,
+- 0x00, 0xE0,
+- 0x1F, 0x26, 0x1F, 0xDF,
+-
+- 0x17, 0x26, 0x17, 0xDF,
+- 0x9D, 0x17, 0x4F, 0xE9,
+-
+- 0xA1, 0x1F, 0x4F, 0xE9,
+- 0xA2, 0x3F, 0x4F, 0xE9,
+-
+- 0x06, 0x06, 0x1F, 0xAF,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x9E, 0x37, 0x4F, 0xE9,
+- 0x2F, 0x17, 0x2F, 0xAF,
+-
+- 0xA0, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x9C, 0x80, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x57, 0x39, 0x20, 0xE9,
+-
+- 0x16, 0x28, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0x1E, 0x2B, 0x20, 0xE9,
+- 0x2B, 0x32, 0x20, 0xE9,
+-
+- 0x1C, 0x23, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x68, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x67, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x65, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x62, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g200_tgzsaf[] = {
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x94, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x21, 0x45, 0x80, 0xE8,
+- 0x1A, 0x4D, 0x80, 0xE8,
+-
+- 0x31, 0x55, 0x80, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x80, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2D, 0x21, 0x1A, 0xB0,
+- 0x25, 0x21, 0x31, 0xB0,
+-
+- 0x0D, 0x21, 0x1A, 0xB2,
+- 0x05, 0x21, 0x31, 0xB2,
+-
+- 0x03, 0x80, 0x2A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x2D, 0x20,
+- 0x25, 0x20,
+- 0x05, 0x20,
+- 0x0D, 0x20,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x2F, 0xC0, 0x21, 0xC0,
+-
+- 0x16, 0x42, 0x56, 0x9F,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x1E, 0x62, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x21, 0x31, 0xB4,
+- 0x2D, 0x21, 0x1A, 0xB4,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0x05,
+- 0x00, 0xE0,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0x0D, 0x21, 0x1A, 0xB6,
+- 0x05, 0x21, 0x31, 0xB6,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0xE0,
+- 0x2F, 0x20,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x1E, 0x26, 0x1E, 0xDF,
+-
+- 0xA7, 0x1E, 0x4F, 0xE9,
+- 0x17, 0x26, 0x16, 0xDF,
+-
+- 0x2D, 0x20,
+- 0x00, 0xE0,
+- 0xA8, 0x3F, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x1E, 0xAF,
+- 0x25, 0x20,
+- 0x00, 0xE0,
+-
+- 0xA4, 0x16, 0x4F, 0xE9,
+- 0x0F, 0xC0, 0x21, 0xC2,
+-
+- 0xA6, 0x80, 0x4F, 0xE9,
+- 0x1F, 0x62, 0x57, 0x9F,
+-
+- 0x0D, 0x20,
+- 0x05, 0x20,
+- 0x2F, 0xC0, 0x21, 0xC6,
+-
+- 0x2D, 0x44, 0x4C, 0xB6,
+- 0x25, 0x44, 0x54, 0xB6,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0xE0,
+- 0x0F, 0x20,
+-
+- 0x2D, 0x20,
+- 0x25, 0x20,
+- 0x07, 0xC0, 0x44, 0xC6,
+-
+- 0x17, 0x50, 0x56, 0x9F,
+- 0xA5, 0x37, 0x4F, 0xE9,
+-
+- 0x06, 0xC0, 0x21, 0xC4,
+- 0x0F, 0x17, 0x0F, 0xAF,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1E, 0x62, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x3E, 0x3D, 0x5D, 0x9F,
+- 0x00, 0xE0,
+- 0x07, 0x20,
+-
+- 0x2F, 0x20,
+- 0x00, 0xE0,
+- 0xA3, 0x0F, 0x4F, 0xE9,
+-
+- 0x06, 0x20,
+- 0x00, 0xE0,
+- 0x1F, 0x26, 0x1F, 0xDF,
+-
+- 0x17, 0x26, 0x17, 0xDF,
+- 0xA1, 0x1F, 0x4F, 0xE9,
+-
+- 0x1E, 0x26, 0x1E, 0xDF,
+- 0x9D, 0x1E, 0x4F, 0xE9,
+-
+- 0x35, 0x17, 0x4F, 0xE9,
+- 0xA2, 0x3F, 0x4F, 0xE9,
+-
+- 0x06, 0x06, 0x1F, 0xAF,
+- 0x39, 0x37, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x17, 0xAF,
+- 0x07, 0x07, 0x1E, 0xAF,
+-
+- 0xA0, 0x80, 0x4F, 0xE9,
+- 0x9E, 0x3E, 0x4F, 0xE9,
+-
+- 0x31, 0x80, 0x4F, 0xE9,
+- 0x9C, 0x80, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x57, 0x39, 0x20, 0xE9,
+-
+- 0x16, 0x28, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0x1E, 0x2B, 0x20, 0xE9,
+- 0x2B, 0x32, 0x20, 0xE9,
+-
+- 0x1C, 0x23, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x63, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x62, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x60, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x5D, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g200_tgzsf[] = {
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x98, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x81, 0x04,
+- 0x89, 0x04,
+- 0x01, 0x04,
+- 0x09, 0x04,
+-
+- 0xC9, 0x41, 0xC0, 0xEC,
+- 0x11, 0x04,
+- 0x00, 0xE0,
+-
+- 0x41, 0xCC, 0x41, 0xCD,
+- 0x49, 0xCC, 0x49, 0xCD,
+-
+- 0xD1, 0x41, 0xC0, 0xEC,
+- 0x51, 0xCC, 0x51, 0xCD,
+-
+- 0x80, 0x04,
+- 0x10, 0x04,
+- 0x08, 0x04,
+- 0x00, 0xE0,
+-
+- 0x00, 0xCC, 0xC0, 0xCD,
+- 0xD1, 0x49, 0xC0, 0xEC,
+-
+- 0x8A, 0x1F, 0x20, 0xE9,
+- 0x8B, 0x3F, 0x20, 0xE9,
+-
+- 0x41, 0x3C, 0x41, 0xAD,
+- 0x49, 0x3C, 0x49, 0xAD,
+-
+- 0x10, 0xCC, 0x10, 0xCD,
+- 0x08, 0xCC, 0x08, 0xCD,
+-
+- 0xB9, 0x41, 0x49, 0xBB,
+- 0x1F, 0xF0, 0x41, 0xCD,
+-
+- 0x51, 0x3C, 0x51, 0xAD,
+- 0x00, 0x98, 0x80, 0xE9,
+-
+- 0x8F, 0x80, 0x07, 0xEA,
+- 0x24, 0x1F, 0x20, 0xE9,
+-
+- 0x21, 0x45, 0x80, 0xE8,
+- 0x1A, 0x4D, 0x80, 0xE8,
+-
+- 0x31, 0x55, 0x80, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0x41, 0x49, 0xBD,
+- 0x1D, 0x41, 0x51, 0xBD,
+-
+- 0x2E, 0x41, 0x2A, 0xB8,
+- 0x34, 0x53, 0xA0, 0xE8,
+-
+- 0x15, 0x30,
+- 0x1D, 0x30,
+- 0x58, 0xE3,
+- 0x00, 0xE0,
+-
+- 0xB5, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x24, 0x43, 0xA0, 0xE8,
+- 0x2C, 0x4B, 0xA0, 0xE8,
+-
+- 0x15, 0x72,
+- 0x09, 0xE3,
+- 0x00, 0xE0,
+- 0x1D, 0x72,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0x97, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x6C, 0x64, 0xC8, 0xEC,
+- 0x98, 0xE1,
+- 0xB5, 0x05,
+-
+- 0xBD, 0x05,
+- 0x2E, 0x30,
+- 0x32, 0xC0, 0xA0, 0xE8,
+-
+- 0x33, 0xC0, 0xA0, 0xE8,
+- 0x74, 0x64, 0xC8, 0xEC,
+-
+- 0x40, 0x3C, 0x40, 0xAD,
+- 0x32, 0x6A,
+- 0x2A, 0x30,
+-
+- 0x20, 0x73,
+- 0x33, 0x6A,
+- 0x00, 0xE0,
+- 0x28, 0x73,
+-
+- 0x1C, 0x72,
+- 0x83, 0xE2,
+- 0x7B, 0x80, 0x15, 0xEA,
+-
+- 0xB8, 0x3D, 0x28, 0xDF,
+- 0x30, 0x35, 0x20, 0xDF,
+-
+- 0x40, 0x30,
+- 0x00, 0xE0,
+- 0xCC, 0xE2,
+- 0x64, 0x72,
+-
+- 0x25, 0x42, 0x52, 0xBF,
+- 0x2D, 0x42, 0x4A, 0xBF,
+-
+- 0x30, 0x2E, 0x30, 0xDF,
+- 0x38, 0x2E, 0x38, 0xDF,
+-
+- 0x18, 0x1D, 0x45, 0xE9,
+- 0x1E, 0x15, 0x45, 0xE9,
+-
+- 0x2B, 0x49, 0x51, 0xBD,
+- 0x00, 0xE0,
+- 0x1F, 0x73,
+-
+- 0x38, 0x38, 0x40, 0xAF,
+- 0x30, 0x30, 0x40, 0xAF,
+-
+- 0x24, 0x1F, 0x24, 0xDF,
+- 0x1D, 0x32, 0x20, 0xE9,
+-
+- 0x2C, 0x1F, 0x2C, 0xDF,
+- 0x1A, 0x33, 0x20, 0xE9,
+-
+- 0xB0, 0x10,
+- 0x08, 0xE3,
+- 0x40, 0x10,
+- 0xB8, 0x10,
+-
+- 0x26, 0xF0, 0x30, 0xCD,
+- 0x2F, 0xF0, 0x38, 0xCD,
+-
+- 0x2B, 0x80, 0x20, 0xE9,
+- 0x2A, 0x80, 0x20, 0xE9,
+-
+- 0xA6, 0x20,
+- 0x88, 0xE2,
+- 0x00, 0xE0,
+- 0xAF, 0x20,
+-
+- 0x28, 0x2A, 0x26, 0xAF,
+- 0x20, 0x2A, 0xC0, 0xAF,
+-
+- 0x34, 0x1F, 0x34, 0xDF,
+- 0x46, 0x24, 0x46, 0xDF,
+-
+- 0x28, 0x30, 0x80, 0xBF,
+- 0x20, 0x38, 0x80, 0xBF,
+-
+- 0x47, 0x24, 0x47, 0xDF,
+- 0x4E, 0x2C, 0x4E, 0xDF,
+-
+- 0x4F, 0x2C, 0x4F, 0xDF,
+- 0x56, 0x34, 0x56, 0xDF,
+-
+- 0x28, 0x15, 0x28, 0xDF,
+- 0x20, 0x1D, 0x20, 0xDF,
+-
+- 0x57, 0x34, 0x57, 0xDF,
+- 0x00, 0xE0,
+- 0x1D, 0x05,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x89, 0xE2,
+- 0x2B, 0x30,
+-
+- 0x3F, 0xC1, 0x1D, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x68,
+- 0xBF, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x20, 0xC0, 0x20, 0xAF,
+- 0x28, 0x05,
+- 0x97, 0x74,
+-
+- 0x00, 0xE0,
+- 0x2A, 0x10,
+- 0x16, 0xC0, 0x20, 0xE9,
+-
+- 0x04, 0x80, 0x10, 0xEA,
+- 0x8C, 0xE2,
+- 0x95, 0x05,
+-
+- 0x28, 0xC1, 0x28, 0xAD,
+- 0x1F, 0xC1, 0x15, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA8, 0x67,
+- 0x9F, 0x6B,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x28, 0xC0, 0x28, 0xAD,
+- 0x1D, 0x25,
+- 0x20, 0x05,
+-
+- 0x28, 0x32, 0x80, 0xAD,
+- 0x40, 0x2A, 0x40, 0xBD,
+-
+- 0x1C, 0x80, 0x20, 0xE9,
+- 0x20, 0x33, 0x20, 0xAD,
+-
+- 0x20, 0x73,
+- 0x00, 0xE0,
+- 0xB6, 0x49, 0x51, 0xBB,
+-
+- 0x26, 0x2F, 0xB0, 0xE8,
+- 0x19, 0x20, 0x20, 0xE9,
+-
+- 0x35, 0x20, 0x35, 0xDF,
+- 0x3D, 0x20, 0x3D, 0xDF,
+-
+- 0x15, 0x20, 0x15, 0xDF,
+- 0x1D, 0x20, 0x1D, 0xDF,
+-
+- 0x26, 0xD0, 0x26, 0xCD,
+- 0x29, 0x49, 0x2A, 0xB8,
+-
+- 0x26, 0x40, 0x80, 0xBD,
+- 0x3B, 0x48, 0x50, 0xBD,
+-
+- 0x3E, 0x54, 0x57, 0x9F,
+- 0x00, 0xE0,
+- 0x82, 0xE1,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x26, 0x30,
+- 0x29, 0x30,
+- 0x48, 0x3C, 0x48, 0xAD,
+-
+- 0x2B, 0x72,
+- 0xC2, 0xE1,
+- 0x2C, 0xC0, 0x44, 0xC2,
+-
+- 0x05, 0x24, 0x34, 0xBF,
+- 0x0D, 0x24, 0x2C, 0xBF,
+-
+- 0x2D, 0x46, 0x4E, 0xBF,
+- 0x25, 0x46, 0x56, 0xBF,
+-
+- 0x20, 0x1D, 0x6F, 0x8F,
+- 0x32, 0x3E, 0x5F, 0xE9,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x30,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x33, 0x1E, 0x5F, 0xE9,
+-
+- 0x05, 0x44, 0x54, 0xB2,
+- 0x0D, 0x44, 0x4C, 0xB2,
+-
+- 0x19, 0xC0, 0xB0, 0xE8,
+- 0x34, 0xC0, 0x44, 0xC4,
+-
+- 0x33, 0x73,
+- 0x00, 0xE0,
+- 0x3E, 0x62, 0x57, 0x9F,
+-
+- 0x1E, 0xAF, 0x59, 0x9F,
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+-
+- 0x84, 0x3E, 0x58, 0xE9,
+- 0x28, 0x1D, 0x6F, 0x8F,
+-
+- 0x05, 0x20,
+- 0x00, 0xE0,
+- 0x85, 0x1E, 0x58, 0xE9,
+-
+- 0x9B, 0x3B, 0x33, 0xDF,
+- 0x20, 0x20, 0x42, 0xAF,
+-
+- 0x30, 0x42, 0x56, 0x9F,
+- 0x80, 0x3E, 0x57, 0xE9,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x30, 0x80, 0x5F, 0xE9,
+-
+- 0x28, 0x28, 0x24, 0xAF,
+- 0x81, 0x1E, 0x57, 0xE9,
+-
+- 0x05, 0x47, 0x57, 0xBF,
+- 0x0D, 0x47, 0x4F, 0xBF,
+-
+- 0x88, 0x80, 0x58, 0xE9,
+- 0x1B, 0x29, 0x1B, 0xDF,
+-
+- 0x30, 0x1D, 0x6F, 0x8F,
+- 0x3A, 0x30, 0x4F, 0xE9,
+-
+- 0x1C, 0x30, 0x26, 0xDF,
+- 0x09, 0xE3,
+- 0x3B, 0x05,
+-
+- 0x3E, 0x50, 0x56, 0x9F,
+- 0x3B, 0x3F, 0x4F, 0xE9,
+-
+- 0x1E, 0x8F, 0x51, 0x9F,
+- 0x00, 0xE0,
+- 0xAC, 0x20,
+-
+- 0x2D, 0x44, 0x4C, 0xB4,
+- 0x2C, 0x1C, 0xC0, 0xAF,
+-
+- 0x25, 0x44, 0x54, 0xB4,
+- 0x00, 0xE0,
+- 0xC8, 0x30,
+-
+- 0x30, 0x46, 0x30, 0xAF,
+- 0x1B, 0x1B, 0x48, 0xAF,
+-
+- 0x00, 0xE0,
+- 0x25, 0x20,
+- 0x38, 0x2C, 0x4F, 0xE9,
+-
+- 0x86, 0x80, 0x57, 0xE9,
+- 0x38, 0x1D, 0x6F, 0x8F,
+-
+- 0x28, 0x74,
+- 0x00, 0xE0,
+- 0x0D, 0x44, 0x4C, 0xB0,
+-
+- 0x05, 0x44, 0x54, 0xB0,
+- 0x2D, 0x20,
+- 0x9B, 0x10,
+-
+- 0x82, 0x3E, 0x57, 0xE9,
+- 0x32, 0xF0, 0x1B, 0xCD,
+-
+- 0x1E, 0xBD, 0x59, 0x9F,
+- 0x83, 0x1E, 0x57, 0xE9,
+-
+- 0x38, 0x47, 0x38, 0xAF,
+- 0x34, 0x20,
+- 0x2A, 0x30,
+-
+- 0x00, 0xE0,
+- 0x0D, 0x20,
+- 0x32, 0x20,
+- 0x05, 0x20,
+-
+- 0x87, 0x80, 0x57, 0xE9,
+- 0x1F, 0x54, 0x57, 0x9F,
+-
+- 0x17, 0x42, 0x56, 0x9F,
+- 0x00, 0xE0,
+- 0x3B, 0x6A,
+-
+- 0x3F, 0x8F, 0x51, 0x9F,
+- 0x37, 0x1E, 0x4F, 0xE9,
+-
+- 0x37, 0x32, 0x2A, 0xAF,
+- 0x00, 0xE0,
+- 0x32, 0x00,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x27, 0xC0, 0x44, 0xC0,
+-
+- 0x36, 0x1F, 0x4F, 0xE9,
+- 0x1F, 0x1F, 0x26, 0xDF,
+-
+- 0x37, 0x1B, 0x37, 0xBF,
+- 0x17, 0x26, 0x17, 0xDF,
+-
+- 0x3E, 0x17, 0x4F, 0xE9,
+- 0x3F, 0x3F, 0x4F, 0xE9,
+-
+- 0x34, 0x1F, 0x34, 0xAF,
+- 0x2B, 0x05,
+- 0xA7, 0x20,
+-
+- 0x33, 0x2B, 0x37, 0xDF,
+- 0x27, 0x17, 0xC0, 0xAF,
+-
+- 0x34, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2D, 0x21, 0x1A, 0xB0,
+- 0x25, 0x21, 0x31, 0xB0,
+-
+- 0x0D, 0x21, 0x1A, 0xB2,
+- 0x05, 0x21, 0x31, 0xB2,
+-
+- 0x03, 0x80, 0x2A, 0xEA,
+- 0x17, 0xC1, 0x2B, 0xBD,
+-
+- 0x2D, 0x20,
+- 0x25, 0x20,
+- 0x05, 0x20,
+- 0x0D, 0x20,
+-
+- 0xB3, 0x68,
+- 0x97, 0x25,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0xC0, 0x33, 0xAF,
+- 0x2F, 0xC0, 0x21, 0xC0,
+-
+- 0x16, 0x42, 0x56, 0x9F,
+- 0x3C, 0x27, 0x4F, 0xE9,
+-
+- 0x1E, 0x62, 0x57, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x21, 0x31, 0xB4,
+- 0x2D, 0x21, 0x1A, 0xB4,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x33, 0x05,
+- 0x00, 0xE0,
+- 0x28, 0x19, 0x60, 0xEC,
+-
+- 0x0D, 0x21, 0x1A, 0xB6,
+- 0x05, 0x21, 0x31, 0xB6,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0xE0,
+- 0x2F, 0x20,
+-
+- 0x23, 0x3B, 0x33, 0xAD,
+- 0x1E, 0x26, 0x1E, 0xDF,
+-
+- 0xA7, 0x1E, 0x4F, 0xE9,
+- 0x17, 0x26, 0x16, 0xDF,
+-
+- 0x2D, 0x20,
+- 0x00, 0xE0,
+- 0xA8, 0x3F, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x1E, 0xAF,
+- 0x25, 0x20,
+- 0x00, 0xE0,
+-
+- 0xA4, 0x16, 0x4F, 0xE9,
+- 0x0F, 0xC0, 0x21, 0xC2,
+-
+- 0xA6, 0x80, 0x4F, 0xE9,
+- 0x1F, 0x62, 0x57, 0x9F,
+-
+- 0x0D, 0x20,
+- 0x05, 0x20,
+- 0x2F, 0xC0, 0x21, 0xC6,
+-
+- 0x3F, 0x2F, 0x5D, 0x9F,
+- 0x00, 0xE0,
+- 0x0F, 0x20,
+-
+- 0x17, 0x50, 0x56, 0x9F,
+- 0xA5, 0x37, 0x4F, 0xE9,
+-
+- 0x06, 0xC0, 0x21, 0xC4,
+- 0x0F, 0x17, 0x0F, 0xAF,
+-
+- 0x37, 0x0F, 0x5C, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2F, 0x20,
+- 0x00, 0xE0,
+- 0xA3, 0x80, 0x4F, 0xE9,
+-
+- 0x06, 0x20,
+- 0x00, 0xE0,
+- 0x1F, 0x26, 0x1F, 0xDF,
+-
+- 0x17, 0x26, 0x17, 0xDF,
+- 0x35, 0x17, 0x4F, 0xE9,
+-
+- 0xA1, 0x1F, 0x4F, 0xE9,
+- 0xA2, 0x3F, 0x4F, 0xE9,
+-
+- 0x06, 0x06, 0x1F, 0xAF,
+- 0x39, 0x37, 0x4F, 0xE9,
+-
+- 0x2F, 0x2F, 0x17, 0xAF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xA0, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x31, 0x80, 0x4F, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x57, 0x39, 0x20, 0xE9,
+-
+- 0x16, 0x28, 0x20, 0xE9,
+- 0x1D, 0x3B, 0x20, 0xE9,
+-
+- 0x1E, 0x2B, 0x20, 0xE9,
+- 0x2B, 0x32, 0x20, 0xE9,
+-
+- 0x1C, 0x23, 0x20, 0xE9,
+- 0x57, 0x36, 0x20, 0xE9,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x40, 0x40, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x90, 0xE2,
+- 0x00, 0xE0,
+-
+- 0x68, 0xFF, 0x20, 0xEA,
+- 0x19, 0xC8, 0xC1, 0xCD,
+-
+- 0x1F, 0xD7, 0x18, 0xBD,
+- 0x3F, 0xD7, 0x22, 0xBD,
+-
+- 0x9F, 0x41, 0x49, 0xBD,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x25, 0x41, 0x49, 0xBD,
+- 0x2D, 0x41, 0x51, 0xBD,
+-
+- 0x0D, 0x80, 0x07, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x35, 0x40, 0x48, 0xBD,
+- 0x3D, 0x40, 0x50, 0xBD,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x25, 0x30,
+- 0x2D, 0x30,
+-
+- 0x35, 0x30,
+- 0xB5, 0x30,
+- 0xBD, 0x30,
+- 0x3D, 0x30,
+-
+- 0x9C, 0xA7, 0x5B, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x67, 0xFF, 0x0A, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC9, 0x41, 0xC8, 0xEC,
+- 0x42, 0xE1,
+- 0x00, 0xE0,
+-
+- 0x65, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xC8, 0x40, 0xC0, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x62, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+-};
+-
+-static unsigned char warp_g400_t2gz[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x78, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x69, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x34, 0x80, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x25, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x3D, 0xCF, 0x74, 0xC2,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2A, 0x44, 0x54, 0xB4,
+- 0x1A, 0x44, 0x64, 0xB4,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x9F, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xBE, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x7D, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_t2gza[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x7C, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x6D, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x34, 0x80, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x29, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x0F, 0xCF, 0x74, 0xC6,
+- 0x3D, 0xCF, 0x74, 0xC2,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x0F, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x54, 0xB4,
+- 0x02, 0x44, 0x64, 0xB4,
+-
+- 0x2A, 0x44, 0x54, 0xB6,
+- 0x1A, 0x44, 0x64, 0xB6,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x20,
+- 0x02, 0x20,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x36, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x37, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x9B, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xBA, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x79, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_t2gzaf[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x81, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x72, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x2E, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x3D, 0xCF, 0x74, 0xC2,
+- 0x0F, 0xCF, 0x74, 0xC6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x0F, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x54, 0xB4,
+- 0x02, 0x44, 0x64, 0xB4,
+-
+- 0x2A, 0x44, 0x54, 0xB6,
+- 0x1A, 0x44, 0x64, 0xB6,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x20,
+- 0x02, 0x20,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x3D, 0xCF, 0x75, 0xC6,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x45, 0x55, 0xB6,
+- 0x02, 0x45, 0x65, 0xB6,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x3D, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x38, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x96, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xB5, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x74, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_t2gzf[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x7D, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x6E, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x34, 0x80, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0F, 0xCF, 0x75, 0xC6,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x28, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x3D, 0xCF, 0x74, 0xC2,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x31, 0x0F, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x54, 0xB4,
+- 0x02, 0x44, 0x64, 0xB4,
+-
+- 0x2A, 0x45, 0x55, 0xB6,
+- 0x1A, 0x45, 0x65, 0xB6,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x20,
+- 0x02, 0x20,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x36, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x37, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x9A, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xBB, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x78, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_t2gzs[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x85, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x76, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x0F, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x31, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x0F, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB4,
+- 0x1A, 0x44, 0x64, 0xB4,
+-
+- 0x0A, 0x45, 0x55, 0xB0,
+- 0x02, 0x45, 0x65, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x55, 0xB2,
+- 0x1A, 0x45, 0x65, 0xB2,
+-
+- 0x0A, 0x45, 0x55, 0xB4,
+- 0x02, 0x45, 0x65, 0xB4,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0xA7, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x92, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xB2, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x70, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_t2gzsa[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x8A, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x7B, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x0F, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x36, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x0F, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB4,
+- 0x1A, 0x44, 0x64, 0xB4,
+-
+- 0x0A, 0x45, 0x55, 0xB0,
+- 0x02, 0x45, 0x65, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x55, 0xB2,
+- 0x1A, 0x45, 0x65, 0xB2,
+-
+- 0x0A, 0x45, 0x55, 0xB4,
+- 0x02, 0x45, 0x65, 0xB4,
+-
+- 0x0F, 0xCF, 0x74, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA7, 0x30, 0x4F, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB6,
+- 0x1A, 0x44, 0x64, 0xB6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x8D, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xAD, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x6B, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_t2gzsaf[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x8E, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x7F, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x0F, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x3A, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x0F, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB4,
+- 0x1A, 0x44, 0x64, 0xB4,
+-
+- 0x0A, 0x45, 0x55, 0xB0,
+- 0x02, 0x45, 0x65, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x55, 0xB2,
+- 0x1A, 0x45, 0x65, 0xB2,
+-
+- 0x0A, 0x45, 0x55, 0xB4,
+- 0x02, 0x45, 0x65, 0xB4,
+-
+- 0x0F, 0xCF, 0x74, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA7, 0x30, 0x4F, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB6,
+- 0x1A, 0x44, 0x64, 0xB6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x45, 0x55, 0xB6,
+- 0x02, 0x45, 0x65, 0xB6,
+-
+- 0x3D, 0xCF, 0x75, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x3D, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x89, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xA9, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x67, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_t2gzsf[] = {
+-
+- 0x00, 0x8A, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x0A, 0x40, 0x50, 0xBF,
+- 0x2A, 0x40, 0x60, 0xBF,
+-
+- 0x32, 0x41, 0x51, 0xBF,
+- 0x3A, 0x41, 0x61, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xD3, 0x6B,
+- 0x00, 0x8A, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x23, 0x9F,
+- 0x00, 0xE0,
+- 0x51, 0x04,
+-
+- 0x90, 0xE2,
+- 0x61, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x51, 0x41, 0xE0, 0xEC,
+- 0x39, 0x67, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x63, 0xA0, 0xE8,
+-
+- 0x61, 0x41, 0xE0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x8A, 0x80, 0x15, 0xEA,
+- 0x10, 0x04,
+- 0x20, 0x04,
+-
+- 0x61, 0x51, 0xE0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x52, 0xBF,
+- 0x0F, 0x52, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x62, 0xBF,
+- 0x1E, 0x51, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x0E, 0x61, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x50, 0xBD,
+- 0x22, 0x40, 0x60, 0xBD,
+-
+- 0x12, 0x41, 0x51, 0xBD,
+- 0x3A, 0x41, 0x61, 0xBD,
+-
+- 0xBF, 0x2F, 0x0E, 0xBD,
+- 0x97, 0xE2,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x35, 0x48, 0xB1, 0xE8,
+- 0x3D, 0x59, 0xB1, 0xE8,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x56, 0x31, 0x56, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x66, 0x31, 0x66, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x57, 0x39, 0x57, 0xBF,
+- 0x67, 0x39, 0x67, 0xBF,
+-
+- 0x7B, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x35, 0x00,
+- 0x3D, 0x00,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0x8D, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x75, 0xF8, 0xEC,
+- 0x35, 0x20,
+- 0x3D, 0x20,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x53, 0x53, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x0E, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x48, 0x35, 0x48, 0xBF,
+- 0x58, 0x35, 0x58, 0xBF,
+-
+- 0x68, 0x35, 0x68, 0xBF,
+- 0x49, 0x3D, 0x49, 0xBF,
+-
+- 0x59, 0x3D, 0x59, 0xBF,
+- 0x69, 0x3D, 0x69, 0xBF,
+-
+- 0x63, 0x63, 0x2D, 0xDF,
+- 0x4D, 0x7D, 0xF8, 0xEC,
+-
+- 0x59, 0xE3,
+- 0x00, 0xE0,
+- 0xB8, 0x38, 0x33, 0xBF,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x18, 0x3A, 0x41, 0xE9,
+-
+- 0x3F, 0x53, 0xA0, 0xE8,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x63, 0xA0, 0xE8,
+-
+- 0x50, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x50, 0x3C, 0xE9,
+-
+- 0x1F, 0x0F, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x59, 0x78, 0xF8, 0xEC,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x56, 0x3F, 0x56, 0xDF,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x66, 0x3D, 0x66, 0xDF,
+-
+- 0x1D, 0x32, 0x41, 0xE9,
+- 0x67, 0x3D, 0x67, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3F, 0x57, 0xDF,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x59, 0x3F, 0x59, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x69, 0x3D, 0x69, 0xDF,
+-
+- 0x48, 0x37, 0x48, 0xDF,
+- 0x58, 0x3F, 0x58, 0xDF,
+-
+- 0x68, 0x3D, 0x68, 0xDF,
+- 0x49, 0x37, 0x49, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x0F, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x54, 0xB0,
+- 0x02, 0x44, 0x64, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB2,
+- 0x1A, 0x44, 0x64, 0xB2,
+-
+- 0x36, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x0F, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x54, 0xB4,
+- 0x1A, 0x44, 0x64, 0xB4,
+-
+- 0x0A, 0x45, 0x55, 0xB0,
+- 0x02, 0x45, 0x65, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x55, 0xB2,
+- 0x1A, 0x45, 0x65, 0xB2,
+-
+- 0x0A, 0x45, 0x55, 0xB4,
+- 0x02, 0x45, 0x65, 0xB4,
+-
+- 0x0F, 0xCF, 0x75, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA7, 0x30, 0x4F, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x31, 0x0F, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x55, 0xB6,
+- 0x1A, 0x45, 0x65, 0xB6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x56, 0xBF,
+- 0x1A, 0x46, 0x66, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x57, 0xBF,
+- 0x02, 0x47, 0x67, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x53, 0xBF,
+- 0x1A, 0x43, 0x63, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x48, 0x58, 0xBF,
+- 0x02, 0x48, 0x68, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x2A, 0x49, 0x59, 0xBF,
+- 0x1A, 0x49, 0x69, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x82, 0x30, 0x57, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x83, 0x38, 0x57, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x84, 0x31, 0x5E, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x85, 0x39, 0x5E, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x87, 0x77, 0x57, 0xE9,
+- 0x8B, 0x3E, 0xBF, 0xEA,
+-
+- 0x80, 0x30, 0x57, 0xE9,
+- 0x81, 0x38, 0x57, 0xE9,
+-
+- 0x82, 0x31, 0x57, 0xE9,
+- 0x86, 0x78, 0x57, 0xE9,
+-
+- 0x83, 0x39, 0x57, 0xE9,
+- 0x87, 0x79, 0x57, 0xE9,
+-
+- 0x30, 0x1F, 0x5F, 0xE9,
+- 0x8A, 0x34, 0x20, 0xE9,
+-
+- 0x8B, 0x3C, 0x20, 0xE9,
+- 0x37, 0x50, 0x60, 0xBD,
+-
+- 0x57, 0x0D, 0x20, 0xE9,
+- 0x35, 0x51, 0x61, 0xBD,
+-
+- 0x2B, 0x50, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x0E, 0x77,
+-
+- 0x24, 0x51, 0x20, 0xE9,
+- 0x8D, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x0E, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x0B, 0x46, 0xA0, 0xE8,
+- 0x1B, 0x56, 0xA0, 0xE8,
+-
+- 0x2B, 0x66, 0xA0, 0xE8,
+- 0x0C, 0x47, 0xA0, 0xE8,
+-
+- 0x1C, 0x57, 0xA0, 0xE8,
+- 0x2C, 0x67, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x57, 0x80, 0x57, 0xCF,
+-
+- 0x66, 0x33, 0x66, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x67, 0x3B, 0x67, 0xCF,
+-
+- 0x0B, 0x48, 0xA0, 0xE8,
+- 0x1B, 0x58, 0xA0, 0xE8,
+-
+- 0x2B, 0x68, 0xA0, 0xE8,
+- 0x0C, 0x49, 0xA0, 0xE8,
+-
+- 0x1C, 0x59, 0xA0, 0xE8,
+- 0x2C, 0x69, 0xA0, 0xE8,
+-
+- 0x0B, 0x00,
+- 0x1B, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x00,
+- 0x1C, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x65,
+- 0x1B, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0C, 0x65,
+- 0x1C, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x0B, 0x1B, 0x60, 0xEC,
+- 0x34, 0xD7, 0x34, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x0C, 0x1C, 0x60, 0xEC,
+-
+- 0x3C, 0xD7, 0x3C, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x0B, 0x2B, 0xDE, 0xE8,
+- 0x1B, 0x80, 0xDE, 0xE8,
+-
+- 0x34, 0x80, 0x34, 0xBD,
+- 0x3C, 0x80, 0x3C, 0xBD,
+-
+- 0x33, 0xD7, 0x0B, 0xBD,
+- 0x3B, 0xD7, 0x1B, 0xBD,
+-
+- 0x48, 0x80, 0x48, 0xCF,
+- 0x59, 0x80, 0x59, 0xCF,
+-
+- 0x68, 0x33, 0x68, 0xCF,
+- 0x49, 0x3B, 0x49, 0xCF,
+-
+- 0xAD, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x58, 0x33, 0x58, 0xCF,
+- 0x69, 0x3B, 0x69, 0xCF,
+-
+- 0x6B, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgz[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x58, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x4A, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x34, 0x80, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x1D, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x3D, 0xCF, 0x74, 0xC2,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x2A, 0x44, 0x4C, 0xB4,
+- 0x1A, 0x44, 0x54, 0xB4,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0xAF, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xD6, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x9D, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgza[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x5C, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x4E, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x34, 0x80, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x27, 0xCF, 0x74, 0xC6,
+- 0x3D, 0xCF, 0x74, 0xC2,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x20, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x27, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x4C, 0xB4,
+- 0x02, 0x44, 0x54, 0xB4,
+-
+- 0x2A, 0x44, 0x4C, 0xB6,
+- 0x1A, 0x44, 0x54, 0xB6,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x20,
+- 0x02, 0x20,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x36, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x37, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0xAB, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xD3, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x99, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgzaf[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x61, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x53, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x26, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x3D, 0xCF, 0x74, 0xC2,
+- 0x27, 0xCF, 0x74, 0xC6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x27, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x4C, 0xB4,
+- 0x02, 0x44, 0x54, 0xB4,
+-
+- 0x2A, 0x44, 0x4C, 0xB6,
+- 0x1A, 0x44, 0x54, 0xB6,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x20,
+- 0x02, 0x20,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x3D, 0xCF, 0x75, 0xC6,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x45, 0x4D, 0xB6,
+- 0x02, 0x45, 0x55, 0xB6,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x3D, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x38, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x38, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0xA6, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xCD, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x94, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgzf[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x5D, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x4F, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x34, 0x80, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x27, 0xCF, 0x75, 0xC6,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x20, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x3D, 0xCF, 0x74, 0xC2,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x31, 0x27, 0x20, 0xE9,
+-
+- 0x0A, 0x44, 0x4C, 0xB4,
+- 0x02, 0x44, 0x54, 0xB4,
+-
+- 0x2A, 0x45, 0x4D, 0xB6,
+- 0x1A, 0x45, 0x55, 0xB6,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x38, 0x3D, 0x20, 0xE9,
+-
+- 0x0A, 0x20,
+- 0x02, 0x20,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x36, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x37, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0xAA, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xD3, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x98, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgzs[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x65, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x57, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x27, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x29, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x27, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB4,
+- 0x1A, 0x44, 0x54, 0xB4,
+-
+- 0x0A, 0x45, 0x4D, 0xB0,
+- 0x02, 0x45, 0x55, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x4D, 0xB2,
+- 0x1A, 0x45, 0x55, 0xB2,
+-
+- 0x0A, 0x45, 0x4D, 0xB4,
+- 0x02, 0x45, 0x55, 0xB4,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x20,
+- 0x02, 0x20,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0xA7, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0xA2, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xCA, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x90, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgzsa[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x6A, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x5C, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x27, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x2E, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x27, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB4,
+- 0x1A, 0x44, 0x54, 0xB4,
+-
+- 0x0A, 0x45, 0x4D, 0xB0,
+- 0x02, 0x45, 0x55, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x4D, 0xB2,
+- 0x1A, 0x45, 0x55, 0xB2,
+-
+- 0x0A, 0x45, 0x4D, 0xB4,
+- 0x02, 0x45, 0x55, 0xB4,
+-
+- 0x27, 0xCF, 0x74, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA7, 0x30, 0x4F, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB6,
+- 0x1A, 0x44, 0x54, 0xB6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0x9D, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xC5, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x8B, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgzsaf[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x6E, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x60, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x27, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x32, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x27, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB4,
+- 0x1A, 0x44, 0x54, 0xB4,
+-
+- 0x0A, 0x45, 0x4D, 0xB0,
+- 0x02, 0x45, 0x55, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x4D, 0xB2,
+- 0x1A, 0x45, 0x55, 0xB2,
+-
+- 0x0A, 0x45, 0x4D, 0xB4,
+- 0x02, 0x45, 0x55, 0xB4,
+-
+- 0x27, 0xCF, 0x74, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA7, 0x30, 0x4F, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9C, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB6,
+- 0x1A, 0x44, 0x54, 0xB6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x45, 0x4D, 0xB6,
+- 0x02, 0x45, 0x55, 0xB6,
+-
+- 0x3D, 0xCF, 0x75, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x3D, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x9D, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x9E, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x30, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x38, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0x99, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xC1, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x87, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+-
+-static unsigned char warp_g400_tgzsf[] = {
+-
+- 0x00, 0x88, 0x98, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+- 0xFF, 0x80, 0xC0, 0xE9,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x22, 0x40, 0x48, 0xBF,
+- 0x2A, 0x40, 0x50, 0xBF,
+-
+- 0x32, 0x41, 0x49, 0xBF,
+- 0x3A, 0x41, 0x51, 0xBF,
+-
+- 0xC3, 0x6B,
+- 0xCB, 0x6B,
+- 0x00, 0x88, 0x98, 0xE9,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x96, 0xE2,
+- 0x41, 0x04,
+-
+- 0x7B, 0x43, 0xA0, 0xE8,
+- 0x73, 0x4B, 0xA0, 0xE8,
+-
+- 0xAD, 0xEE, 0x29, 0x9F,
+- 0x00, 0xE0,
+- 0x49, 0x04,
+-
+- 0x90, 0xE2,
+- 0x51, 0x04,
+- 0x31, 0x46, 0xB1, 0xE8,
+-
+- 0x49, 0x41, 0xC0, 0xEC,
+- 0x39, 0x57, 0xB1, 0xE8,
+-
+- 0x00, 0x04,
+- 0x46, 0xE2,
+- 0x73, 0x53, 0xA0, 0xE8,
+-
+- 0x51, 0x41, 0xC0, 0xEC,
+- 0x31, 0x00,
+- 0x39, 0x00,
+-
+- 0x6A, 0x80, 0x15, 0xEA,
+- 0x08, 0x04,
+- 0x10, 0x04,
+-
+- 0x51, 0x49, 0xC0, 0xEC,
+- 0x2F, 0x41, 0x60, 0xEA,
+-
+- 0x31, 0x20,
+- 0x39, 0x20,
+- 0x1F, 0x42, 0xA0, 0xE8,
+-
+- 0x2A, 0x42, 0x4A, 0xBF,
+- 0x27, 0x4A, 0xA0, 0xE8,
+-
+- 0x1A, 0x42, 0x52, 0xBF,
+- 0x1E, 0x49, 0x60, 0xEA,
+-
+- 0x73, 0x7B, 0xC8, 0xEC,
+- 0x26, 0x51, 0x60, 0xEA,
+-
+- 0x32, 0x40, 0x48, 0xBD,
+- 0x22, 0x40, 0x50, 0xBD,
+-
+- 0x12, 0x41, 0x49, 0xBD,
+- 0x3A, 0x41, 0x51, 0xBD,
+-
+- 0xBF, 0x2F, 0x26, 0xBD,
+- 0x00, 0xE0,
+- 0x7B, 0x72,
+-
+- 0x32, 0x20,
+- 0x22, 0x20,
+- 0x12, 0x20,
+- 0x3A, 0x20,
+-
+- 0x46, 0x31, 0x46, 0xBF,
+- 0x4E, 0x31, 0x4E, 0xBF,
+-
+- 0xB3, 0xE2, 0x2D, 0x9F,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x56, 0x31, 0x56, 0xBF,
+- 0x47, 0x39, 0x47, 0xBF,
+-
+- 0x4F, 0x39, 0x4F, 0xBF,
+- 0x57, 0x39, 0x57, 0xBF,
+-
+- 0x5C, 0x80, 0x07, 0xEA,
+- 0x24, 0x41, 0x20, 0xE9,
+-
+- 0x42, 0x73, 0xF8, 0xEC,
+- 0x00, 0xE0,
+- 0x2D, 0x73,
+-
+- 0x33, 0x72,
+- 0x0C, 0xE3,
+- 0xA5, 0x2F, 0x1E, 0xBD,
+-
+- 0x43, 0x43, 0x2D, 0xDF,
+- 0x4B, 0x4B, 0x2D, 0xDF,
+-
+- 0xAE, 0x1E, 0x26, 0xBD,
+- 0x58, 0xE3,
+- 0x33, 0x66,
+-
+- 0x53, 0x53, 0x2D, 0xDF,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0xB8, 0x38, 0x33, 0xBF,
+- 0x00, 0xE0,
+- 0x59, 0xE3,
+-
+- 0x1E, 0x12, 0x41, 0xE9,
+- 0x1A, 0x22, 0x41, 0xE9,
+-
+- 0x2B, 0x40, 0x3D, 0xE9,
+- 0x3F, 0x4B, 0xA0, 0xE8,
+-
+- 0x2D, 0x73,
+- 0x30, 0x76,
+- 0x05, 0x80, 0x3D, 0xEA,
+-
+- 0x37, 0x43, 0xA0, 0xE8,
+- 0x3D, 0x53, 0xA0, 0xE8,
+-
+- 0x48, 0x70, 0xF8, 0xEC,
+- 0x2B, 0x48, 0x3C, 0xE9,
+-
+- 0x1F, 0x27, 0xBC, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x15, 0xC0, 0x20, 0xE9,
+- 0x15, 0xC0, 0x20, 0xE9,
+-
+- 0x18, 0x3A, 0x41, 0xE9,
+- 0x1D, 0x32, 0x41, 0xE9,
+-
+- 0x2A, 0x40, 0x20, 0xE9,
+- 0x56, 0x3D, 0x56, 0xDF,
+-
+- 0x46, 0x37, 0x46, 0xDF,
+- 0x4E, 0x3F, 0x4E, 0xDF,
+-
+- 0x16, 0x30, 0x20, 0xE9,
+- 0x4F, 0x3F, 0x4F, 0xDF,
+-
+- 0x47, 0x37, 0x47, 0xDF,
+- 0x57, 0x3D, 0x57, 0xDF,
+-
+- 0x32, 0x32, 0x2D, 0xDF,
+- 0x22, 0x22, 0x2D, 0xDF,
+-
+- 0x12, 0x12, 0x2D, 0xDF,
+- 0x3A, 0x3A, 0x2D, 0xDF,
+-
+- 0x27, 0xCF, 0x74, 0xC2,
+- 0x37, 0xCF, 0x74, 0xC4,
+-
+- 0x0A, 0x44, 0x4C, 0xB0,
+- 0x02, 0x44, 0x54, 0xB0,
+-
+- 0x3D, 0xCF, 0x74, 0xC0,
+- 0x34, 0x37, 0x20, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x38, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3C, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB2,
+- 0x1A, 0x44, 0x54, 0xB2,
+-
+- 0x2E, 0x80, 0x3A, 0xEA,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x27, 0xCF, 0x75, 0xC0,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x32, 0x31, 0x5F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x33, 0x39, 0x5F, 0xE9,
+-
+- 0x3D, 0xCF, 0x75, 0xC2,
+- 0x37, 0xCF, 0x75, 0xC4,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA6, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA3, 0x3D, 0x20, 0xE9,
+-
+- 0x2A, 0x44, 0x4C, 0xB4,
+- 0x1A, 0x44, 0x54, 0xB4,
+-
+- 0x0A, 0x45, 0x4D, 0xB0,
+- 0x02, 0x45, 0x55, 0xB0,
+-
+- 0x88, 0x73, 0x5E, 0xE9,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA0, 0x37, 0x20, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x3E, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x3F, 0x38, 0x4F, 0xE9,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x3A, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x3B, 0x39, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x4D, 0xB2,
+- 0x1A, 0x45, 0x55, 0xB2,
+-
+- 0x0A, 0x45, 0x4D, 0xB4,
+- 0x02, 0x45, 0x55, 0xB4,
+-
+- 0x27, 0xCF, 0x75, 0xC6,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0xA7, 0x30, 0x4F, 0xE9,
+- 0x0A, 0x20,
+- 0x02, 0x20,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x31, 0x27, 0x20, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA8, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x45, 0x4D, 0xB6,
+- 0x1A, 0x45, 0x55, 0xB6,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x36, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x37, 0x39, 0x4F, 0xE9,
+-
+- 0x00, 0x80, 0x00, 0xE8,
+- 0x2A, 0x20,
+- 0x1A, 0x20,
+-
+- 0x2A, 0x46, 0x4E, 0xBF,
+- 0x1A, 0x46, 0x56, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA4, 0x31, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA5, 0x39, 0x4F, 0xE9,
+-
+- 0x0A, 0x47, 0x4F, 0xBF,
+- 0x02, 0x47, 0x57, 0xBF,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0xA1, 0x30, 0x4F, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0xA2, 0x38, 0x4F, 0xE9,
+-
+- 0x2A, 0x43, 0x4B, 0xBF,
+- 0x1A, 0x43, 0x53, 0xBF,
+-
+- 0x30, 0x50, 0x2E, 0x9F,
+- 0x35, 0x31, 0x4F, 0xE9,
+-
+- 0x38, 0x21, 0x2C, 0x9F,
+- 0x39, 0x39, 0x4F, 0xE9,
+-
+- 0x31, 0x53, 0x2F, 0x9F,
+- 0x80, 0x31, 0x57, 0xE9,
+-
+- 0x39, 0xE5, 0x2C, 0x9F,
+- 0x81, 0x39, 0x57, 0xE9,
+-
+- 0x37, 0x48, 0x50, 0xBD,
+- 0x8A, 0x36, 0x20, 0xE9,
+-
+- 0x86, 0x76, 0x57, 0xE9,
+- 0x8B, 0x3E, 0x20, 0xE9,
+-
+- 0x82, 0x30, 0x57, 0xE9,
+- 0x87, 0x77, 0x57, 0xE9,
+-
+- 0x83, 0x38, 0x57, 0xE9,
+- 0x35, 0x49, 0x51, 0xBD,
+-
+- 0x84, 0x31, 0x5E, 0xE9,
+- 0x30, 0x1F, 0x5F, 0xE9,
+-
+- 0x85, 0x39, 0x5E, 0xE9,
+- 0x57, 0x25, 0x20, 0xE9,
+-
+- 0x2B, 0x48, 0x20, 0xE9,
+- 0x1D, 0x37, 0xE1, 0xEA,
+-
+- 0x1E, 0x35, 0xE1, 0xEA,
+- 0x00, 0xE0,
+- 0x26, 0x77,
+-
+- 0x24, 0x49, 0x20, 0xE9,
+- 0x9D, 0xFF, 0x20, 0xEA,
+-
+- 0x16, 0x26, 0x20, 0xE9,
+- 0x57, 0x2E, 0xBF, 0xEA,
+-
+- 0x1C, 0x46, 0xA0, 0xE8,
+- 0x23, 0x4E, 0xA0, 0xE8,
+-
+- 0x2B, 0x56, 0xA0, 0xE8,
+- 0x1D, 0x47, 0xA0, 0xE8,
+-
+- 0x24, 0x4F, 0xA0, 0xE8,
+- 0x2C, 0x57, 0xA0, 0xE8,
+-
+- 0x1C, 0x00,
+- 0x23, 0x00,
+- 0x2B, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x00,
+- 0x24, 0x00,
+- 0x2C, 0x00,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x65,
+- 0x23, 0x65,
+- 0x2B, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1D, 0x65,
+- 0x24, 0x65,
+- 0x2C, 0x65,
+- 0x00, 0xE0,
+-
+- 0x1C, 0x23, 0x60, 0xEC,
+- 0x36, 0xD7, 0x36, 0xAD,
+-
+- 0x2B, 0x80, 0x60, 0xEC,
+- 0x1D, 0x24, 0x60, 0xEC,
+-
+- 0x3E, 0xD7, 0x3E, 0xAD,
+- 0x2C, 0x80, 0x60, 0xEC,
+-
+- 0x1C, 0x2B, 0xDE, 0xE8,
+- 0x23, 0x80, 0xDE, 0xE8,
+-
+- 0x36, 0x80, 0x36, 0xBD,
+- 0x3E, 0x80, 0x3E, 0xBD,
+-
+- 0x33, 0xD7, 0x1C, 0xBD,
+- 0x3B, 0xD7, 0x23, 0xBD,
+-
+- 0x46, 0x80, 0x46, 0xCF,
+- 0x4F, 0x80, 0x4F, 0xCF,
+-
+- 0x56, 0x33, 0x56, 0xCF,
+- 0x47, 0x3B, 0x47, 0xCF,
+-
+- 0xC5, 0xFF, 0x20, 0xEA,
+- 0x00, 0x80, 0x00, 0xE8,
+-
+- 0x4E, 0x33, 0x4E, 0xCF,
+- 0x57, 0x3B, 0x57, 0xCF,
+-
+- 0x8B, 0xFF, 0x20, 0xEA,
+- 0x57, 0xC0, 0xBF, 0xEA,
+-
+- 0x00, 0x80, 0xA0, 0xE9,
+- 0x00, 0x00, 0xD8, 0xEC,
+-
+-};
+diff --git a/drivers/gpu/drm/mga/mga_warp.c b/drivers/gpu/drm/mga/mga_warp.c
+index 651b93c..9aad484 100644
+--- a/drivers/gpu/drm/mga/mga_warp.c
++++ b/drivers/gpu/drm/mga/mga_warp.c
+@@ -27,132 +27,108 @@
+ * Gareth Hughes <gareth@valinux.com>
+ */
+
++#include <linux/firmware.h>
++#include <linux/ihex.h>
++#include <linux/platform_device.h>
++
+ #include "drmP.h"
+ #include "drm.h"
+ #include "mga_drm.h"
+ #include "mga_drv.h"
+-#include "mga_ucode.h"
++
++#define FIRMWARE_G200 "matrox/g200_warp.fw"
++#define FIRMWARE_G400 "matrox/g400_warp.fw"
++
++MODULE_FIRMWARE(FIRMWARE_G200);
++MODULE_FIRMWARE(FIRMWARE_G400);
+
+ #define MGA_WARP_CODE_ALIGN 256 /* in bytes */
+
+-#define WARP_UCODE_SIZE( which ) \
+- ((sizeof(which) / MGA_WARP_CODE_ALIGN + 1) * MGA_WARP_CODE_ALIGN)
+-
+-#define WARP_UCODE_INSTALL( which, where ) \
+-do { \
+- DRM_DEBUG( " pcbase = 0x%08lx vcbase = %p\n", pcbase, vcbase );\
+- dev_priv->warp_pipe_phys[where] = pcbase; \
+- memcpy( vcbase, which, sizeof(which) ); \
+- pcbase += WARP_UCODE_SIZE( which ); \
+- vcbase += WARP_UCODE_SIZE( which ); \
+-} while (0)
+-
+-static const unsigned int mga_warp_g400_microcode_size =
+- (WARP_UCODE_SIZE(warp_g400_tgz) +
+- WARP_UCODE_SIZE(warp_g400_tgza) +
+- WARP_UCODE_SIZE(warp_g400_tgzaf) +
+- WARP_UCODE_SIZE(warp_g400_tgzf) +
+- WARP_UCODE_SIZE(warp_g400_tgzs) +
+- WARP_UCODE_SIZE(warp_g400_tgzsa) +
+- WARP_UCODE_SIZE(warp_g400_tgzsaf) +
+- WARP_UCODE_SIZE(warp_g400_tgzsf) +
+- WARP_UCODE_SIZE(warp_g400_t2gz) +
+- WARP_UCODE_SIZE(warp_g400_t2gza) +
+- WARP_UCODE_SIZE(warp_g400_t2gzaf) +
+- WARP_UCODE_SIZE(warp_g400_t2gzf) +
+- WARP_UCODE_SIZE(warp_g400_t2gzs) +
+- WARP_UCODE_SIZE(warp_g400_t2gzsa) +
+- WARP_UCODE_SIZE(warp_g400_t2gzsaf) + WARP_UCODE_SIZE(warp_g400_t2gzsf));
+-
+-static const unsigned int mga_warp_g200_microcode_size =
+- (WARP_UCODE_SIZE(warp_g200_tgz) +
+- WARP_UCODE_SIZE(warp_g200_tgza) +
+- WARP_UCODE_SIZE(warp_g200_tgzaf) +
+- WARP_UCODE_SIZE(warp_g200_tgzf) +
+- WARP_UCODE_SIZE(warp_g200_tgzs) +
+- WARP_UCODE_SIZE(warp_g200_tgzsa) +
+- WARP_UCODE_SIZE(warp_g200_tgzsaf) + WARP_UCODE_SIZE(warp_g200_tgzsf));
+-
+-unsigned int mga_warp_microcode_size(const drm_mga_private_t * dev_priv)
++#define WARP_UCODE_SIZE(size) ALIGN(size, MGA_WARP_CODE_ALIGN)
++
++int mga_warp_install_microcode(drm_mga_private_t * dev_priv)
+ {
++ unsigned char *vcbase = dev_priv->warp->handle;
++ unsigned long pcbase = dev_priv->warp->offset;
++ const char *firmware_name;
++ struct platform_device *pdev;
++ const struct firmware *fw = NULL;
++ const struct ihex_binrec *rec;
++ unsigned int size;
++ int n_pipes, where;
++ int rc = 0;
++
+ switch (dev_priv->chipset) {
+ case MGA_CARD_TYPE_G400:
+ case MGA_CARD_TYPE_G550:
+- return PAGE_ALIGN(mga_warp_g400_microcode_size);
++ firmware_name = FIRMWARE_G400;
++ n_pipes = MGA_MAX_G400_PIPES;
++ break;
+ case MGA_CARD_TYPE_G200:
+- return PAGE_ALIGN(mga_warp_g200_microcode_size);
++ firmware_name = FIRMWARE_G200;
++ n_pipes = MGA_MAX_G200_PIPES;
++ break;
+ default:
+- return 0;
++ return -EINVAL;
+ }
+-}
+-
+-static int mga_warp_install_g400_microcode(drm_mga_private_t * dev_priv)
+-{
+- unsigned char *vcbase = dev_priv->warp->handle;
+- unsigned long pcbase = dev_priv->warp->offset;
+-
+- memset(dev_priv->warp_pipe_phys, 0, sizeof(dev_priv->warp_pipe_phys));
+-
+- WARP_UCODE_INSTALL(warp_g400_tgz, MGA_WARP_TGZ);
+- WARP_UCODE_INSTALL(warp_g400_tgzf, MGA_WARP_TGZF);
+- WARP_UCODE_INSTALL(warp_g400_tgza, MGA_WARP_TGZA);
+- WARP_UCODE_INSTALL(warp_g400_tgzaf, MGA_WARP_TGZAF);
+- WARP_UCODE_INSTALL(warp_g400_tgzs, MGA_WARP_TGZS);
+- WARP_UCODE_INSTALL(warp_g400_tgzsf, MGA_WARP_TGZSF);
+- WARP_UCODE_INSTALL(warp_g400_tgzsa, MGA_WARP_TGZSA);
+- WARP_UCODE_INSTALL(warp_g400_tgzsaf, MGA_WARP_TGZSAF);
+-
+- WARP_UCODE_INSTALL(warp_g400_t2gz, MGA_WARP_T2GZ);
+- WARP_UCODE_INSTALL(warp_g400_t2gzf, MGA_WARP_T2GZF);
+- WARP_UCODE_INSTALL(warp_g400_t2gza, MGA_WARP_T2GZA);
+- WARP_UCODE_INSTALL(warp_g400_t2gzaf, MGA_WARP_T2GZAF);
+- WARP_UCODE_INSTALL(warp_g400_t2gzs, MGA_WARP_T2GZS);
+- WARP_UCODE_INSTALL(warp_g400_t2gzsf, MGA_WARP_T2GZSF);
+- WARP_UCODE_INSTALL(warp_g400_t2gzsa, MGA_WARP_T2GZSA);
+- WARP_UCODE_INSTALL(warp_g400_t2gzsaf, MGA_WARP_T2GZSAF);
+-
+- return 0;
+-}
+-
+-static int mga_warp_install_g200_microcode(drm_mga_private_t * dev_priv)
+-{
+- unsigned char *vcbase = dev_priv->warp->handle;
+- unsigned long pcbase = dev_priv->warp->offset;
+-
+- memset(dev_priv->warp_pipe_phys, 0, sizeof(dev_priv->warp_pipe_phys));
+-
+- WARP_UCODE_INSTALL(warp_g200_tgz, MGA_WARP_TGZ);
+- WARP_UCODE_INSTALL(warp_g200_tgzf, MGA_WARP_TGZF);
+- WARP_UCODE_INSTALL(warp_g200_tgza, MGA_WARP_TGZA);
+- WARP_UCODE_INSTALL(warp_g200_tgzaf, MGA_WARP_TGZAF);
+- WARP_UCODE_INSTALL(warp_g200_tgzs, MGA_WARP_TGZS);
+- WARP_UCODE_INSTALL(warp_g200_tgzsf, MGA_WARP_TGZSF);
+- WARP_UCODE_INSTALL(warp_g200_tgzsa, MGA_WARP_TGZSA);
+- WARP_UCODE_INSTALL(warp_g200_tgzsaf, MGA_WARP_TGZSAF);
+
+- return 0;
+-}
++ pdev = platform_device_register_simple("mga_warp", 0, NULL, 0);
++ if (IS_ERR(pdev)) {
++ DRM_ERROR("mga: Failed to register microcode\n");
++ return PTR_ERR(pdev);
++ }
++ rc = request_ihex_firmware(&fw, firmware_name, &pdev->dev);
++ platform_device_unregister(pdev);
++ if (rc) {
++ DRM_ERROR("mga: Failed to load microcode \"%s\"\n",
++ firmware_name);
++ return rc;
++ }
+
+-int mga_warp_install_microcode(drm_mga_private_t * dev_priv)
+-{
+- const unsigned int size = mga_warp_microcode_size(dev_priv);
++ size = 0;
++ where = 0;
++ for (rec = (const struct ihex_binrec *)fw->data;
++ rec;
++ rec = ihex_next_binrec(rec)) {
++ size += WARP_UCODE_SIZE(be16_to_cpu(rec->len));
++ where++;
++ }
+
++ if (where != n_pipes) {
++ DRM_ERROR("mga: Invalid microcode \"%s\"\n", firmware_name);
++ rc = -EINVAL;
++ goto out;
++ }
++ size = PAGE_ALIGN(size);
+ DRM_DEBUG("MGA ucode size = %d bytes\n", size);
+ if (size > dev_priv->warp->size) {
+ DRM_ERROR("microcode too large! (%u > %lu)\n",
+ size, dev_priv->warp->size);
+- return -ENOMEM;
++ rc = -ENOMEM;
++ goto out;
+ }
+
+- switch (dev_priv->chipset) {
+- case MGA_CARD_TYPE_G400:
+- case MGA_CARD_TYPE_G550:
+- return mga_warp_install_g400_microcode(dev_priv);
+- case MGA_CARD_TYPE_G200:
+- return mga_warp_install_g200_microcode(dev_priv);
+- default:
+- return -EINVAL;
++ memset(dev_priv->warp_pipe_phys, 0, sizeof(dev_priv->warp_pipe_phys));
++
++ where = 0;
++ for (rec = (const struct ihex_binrec *)fw->data;
++ rec;
++ rec = ihex_next_binrec(rec)) {
++ unsigned int src_size, dst_size;
++
++ DRM_DEBUG(" pcbase = 0x%08lx vcbase = %p\n", pcbase, vcbase);
++ dev_priv->warp_pipe_phys[where] = pcbase;
++ src_size = be16_to_cpu(rec->len);
++ dst_size = WARP_UCODE_SIZE(src_size);
++ memcpy(vcbase, rec->data, src_size);
++ pcbase += dst_size;
++ vcbase += dst_size;
++ where++;
+ }
++
++out:
++ release_firmware(fw);
++ return rc;
+ }
+
+ #define WMISC_EXPECTED (MGA_WUCODECACHE_ENABLE | MGA_WMASTER_ENABLE)
+diff --git a/drivers/gpu/drm/r128/r128_cce.c b/drivers/gpu/drm/r128/r128_cce.c
+index c75fd35..4c39a40 100644
+--- a/drivers/gpu/drm/r128/r128_cce.c
++++ b/drivers/gpu/drm/r128/r128_cce.c
+@@ -29,6 +29,9 @@
+ * Gareth Hughes <gareth@valinux.com>
+ */
+
++#include <linux/firmware.h>
++#include <linux/platform_device.h>
++
+ #include "drmP.h"
+ #include "drm.h"
+ #include "r128_drm.h"
+@@ -36,50 +39,9 @@
+
+ #define R128_FIFO_DEBUG 0
+
+-/* CCE microcode (from ATI) */
+-static u32 r128_cce_microcode[] = {
+- 0, 276838400, 0, 268449792, 2, 142, 2, 145, 0, 1076765731, 0,
+- 1617039951, 0, 774592877, 0, 1987540286, 0, 2307490946U, 0,
+- 599558925, 0, 589505315, 0, 596487092, 0, 589505315, 1,
+- 11544576, 1, 206848, 1, 311296, 1, 198656, 2, 912273422, 11,
+- 262144, 0, 0, 1, 33559837, 1, 7438, 1, 14809, 1, 6615, 12, 28,
+- 1, 6614, 12, 28, 2, 23, 11, 18874368, 0, 16790922, 1, 409600, 9,
+- 30, 1, 147854772, 16, 420483072, 3, 8192, 0, 10240, 1, 198656,
+- 1, 15630, 1, 51200, 10, 34858, 9, 42, 1, 33559823, 2, 10276, 1,
+- 15717, 1, 15718, 2, 43, 1, 15936948, 1, 570480831, 1, 14715071,
+- 12, 322123831, 1, 33953125, 12, 55, 1, 33559908, 1, 15718, 2,
+- 46, 4, 2099258, 1, 526336, 1, 442623, 4, 4194365, 1, 509952, 1,
+- 459007, 3, 0, 12, 92, 2, 46, 12, 176, 1, 15734, 1, 206848, 1,
+- 18432, 1, 133120, 1, 100670734, 1, 149504, 1, 165888, 1,
+- 15975928, 1, 1048576, 6, 3145806, 1, 15715, 16, 2150645232U, 2,
+- 268449859, 2, 10307, 12, 176, 1, 15734, 1, 15735, 1, 15630, 1,
+- 15631, 1, 5253120, 6, 3145810, 16, 2150645232U, 1, 15864, 2, 82,
+- 1, 343310, 1, 1064207, 2, 3145813, 1, 15728, 1, 7817, 1, 15729,
+- 3, 15730, 12, 92, 2, 98, 1, 16168, 1, 16167, 1, 16002, 1, 16008,
+- 1, 15974, 1, 15975, 1, 15990, 1, 15976, 1, 15977, 1, 15980, 0,
+- 15981, 1, 10240, 1, 5253120, 1, 15720, 1, 198656, 6, 110, 1,
+- 180224, 1, 103824738, 2, 112, 2, 3145839, 0, 536885440, 1,
+- 114880, 14, 125, 12, 206975, 1, 33559995, 12, 198784, 0,
+- 33570236, 1, 15803, 0, 15804, 3, 294912, 1, 294912, 3, 442370,
+- 1, 11544576, 0, 811612160, 1, 12593152, 1, 11536384, 1,
+- 14024704, 7, 310382726, 0, 10240, 1, 14796, 1, 14797, 1, 14793,
+- 1, 14794, 0, 14795, 1, 268679168, 1, 9437184, 1, 268449792, 1,
+- 198656, 1, 9452827, 1, 1075854602, 1, 1075854603, 1, 557056, 1,
+- 114880, 14, 159, 12, 198784, 1, 1109409213, 12, 198783, 1,
+- 1107312059, 12, 198784, 1, 1109409212, 2, 162, 1, 1075854781, 1,
+- 1073757627, 1, 1075854780, 1, 540672, 1, 10485760, 6, 3145894,
+- 16, 274741248, 9, 168, 3, 4194304, 3, 4209949, 0, 0, 0, 256, 14,
+- 174, 1, 114857, 1, 33560007, 12, 176, 0, 10240, 1, 114858, 1,
+- 33560018, 1, 114857, 3, 33560007, 1, 16008, 1, 114874, 1,
+- 33560360, 1, 114875, 1, 33560154, 0, 15963, 0, 256, 0, 4096, 1,
+- 409611, 9, 188, 0, 10240, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
+- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0
+-};
++#define FIRMWARE_NAME "r128/r128_cce.bin"
++
++MODULE_FIRMWARE(FIRMWARE_NAME);
+
+ static int R128_READ_PLL(struct drm_device * dev, int addr)
+ {
+@@ -176,20 +138,50 @@ static int r128_do_wait_for_idle(drm_r128_private_t * dev_priv)
+ */
+
+ /* Load the microcode for the CCE */
+-static void r128_cce_load_microcode(drm_r128_private_t * dev_priv)
++static int r128_cce_load_microcode(drm_r128_private_t *dev_priv)
+ {
+- int i;
++ struct platform_device *pdev;
++ const struct firmware *fw;
++ const __be32 *fw_data;
++ int rc, i;
+
+ DRM_DEBUG("\n");
+
++ pdev = platform_device_register_simple("r128_cce", 0, NULL, 0);
++ if (IS_ERR(pdev)) {
++ printk(KERN_ERR "r128_cce: Failed to register firmware\n");
++ return PTR_ERR(pdev);
++ }
++ rc = request_firmware(&fw, FIRMWARE_NAME, &pdev->dev);
++ platform_device_unregister(pdev);
++ if (rc) {
++ printk(KERN_ERR "r128_cce: Failed to load firmware \"%s\"\n",
++ FIRMWARE_NAME);
++ return rc;
++ }
++
++ if (fw->size != 256 * 8) {
++ printk(KERN_ERR
++ "r128_cce: Bogus length %zu in firmware \"%s\"\n",
++ fw->size, FIRMWARE_NAME);
++ rc = -EINVAL;
++ goto out_release;
++ }
++
+ r128_do_wait_for_idle(dev_priv);
+
++ fw_data = (const __be32 *)fw->data;
+ R128_WRITE(R128_PM4_MICROCODE_ADDR, 0);
+ for (i = 0; i < 256; i++) {
+- R128_WRITE(R128_PM4_MICROCODE_DATAH, r128_cce_microcode[i * 2]);
++ R128_WRITE(R128_PM4_MICROCODE_DATAH,
++ be32_to_cpup(&fw_data[i * 2]));
+ R128_WRITE(R128_PM4_MICROCODE_DATAL,
+- r128_cce_microcode[i * 2 + 1]);
++ be32_to_cpup(&fw_data[i * 2 + 1]));
+ }
++
++out_release:
++ release_firmware(fw);
++ return rc;
+ }
+
+ /* Flush any pending commands to the CCE. This should only be used just
+@@ -350,9 +342,15 @@ static void r128_cce_init_ring_buffer(struct drm_device * dev,
+ static int r128_do_init_cce(struct drm_device * dev, drm_r128_init_t * init)
+ {
+ drm_r128_private_t *dev_priv;
++ int rc;
+
+ DRM_DEBUG("\n");
+
++ if (dev->dev_private) {
++ DRM_DEBUG("called when already initialized\n");
++ return -EINVAL;
++ }
++
+ dev_priv = kzalloc(sizeof(drm_r128_private_t), GFP_KERNEL);
+ if (dev_priv == NULL)
+ return -ENOMEM;
+@@ -575,13 +573,18 @@ static int r128_do_init_cce(struct drm_device * dev, drm_r128_init_t * init)
+ #endif
+
+ r128_cce_init_ring_buffer(dev, dev_priv);
+- r128_cce_load_microcode(dev_priv);
++ rc = r128_cce_load_microcode(dev_priv);
+
+ dev->dev_private = (void *)dev_priv;
+
+ r128_do_engine_reset(dev);
+
+- return 0;
++ if (rc) {
++ DRM_ERROR("Failed to load firmware!\n");
++ r128_do_cleanup_cce(dev);
++ }
++
++ return rc;
+ }
+
+ int r128_do_cleanup_cce(struct drm_device * dev)
+@@ -649,6 +652,8 @@ int r128_cce_start(struct drm_device *dev, void *data, struct drm_file *file_pri
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ if (dev_priv->cce_running || dev_priv->cce_mode == R128_PM4_NONPM4) {
+ DRM_DEBUG("while CCE running\n");
+ return 0;
+@@ -671,6 +676,8 @@ int r128_cce_stop(struct drm_device *dev, void *data, struct drm_file *file_priv
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ /* Flush any pending CCE commands. This ensures any outstanding
+ * commands are exectuted by the engine before we turn it off.
+ */
+@@ -708,10 +715,7 @@ int r128_cce_reset(struct drm_device *dev, void *data, struct drm_file *file_pri
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+- if (!dev_priv) {
+- DRM_DEBUG("called before init done\n");
+- return -EINVAL;
+- }
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
+
+ r128_do_cce_reset(dev_priv);
+
+@@ -728,6 +732,8 @@ int r128_cce_idle(struct drm_device *dev, void *data, struct drm_file *file_priv
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ if (dev_priv->cce_running) {
+ r128_do_cce_flush(dev_priv);
+ }
+@@ -741,6 +747,8 @@ int r128_engine_reset(struct drm_device *dev, void *data, struct drm_file *file_
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev->dev_private);
++
+ return r128_do_engine_reset(dev);
+ }
+
+diff --git a/drivers/gpu/drm/r128/r128_drv.h b/drivers/gpu/drm/r128/r128_drv.h
+index 797a26c..3c60829 100644
+--- a/drivers/gpu/drm/r128/r128_drv.h
++++ b/drivers/gpu/drm/r128/r128_drv.h
+@@ -422,6 +422,14 @@ static __inline__ void r128_update_ring_snapshot(drm_r128_private_t * dev_priv)
+ * Misc helper macros
+ */
+
++#define DEV_INIT_TEST_WITH_RETURN(_dev_priv) \
++do { \
++ if (!_dev_priv) { \
++ DRM_ERROR("called with no initialization\n"); \
++ return -EINVAL; \
++ } \
++} while (0)
++
+ #define RING_SPACE_TEST_WITH_RETURN( dev_priv ) \
+ do { \
+ drm_r128_ring_buffer_t *ring = &dev_priv->ring; int i; \
+diff --git a/drivers/gpu/drm/r128/r128_state.c b/drivers/gpu/drm/r128/r128_state.c
+index 026a48c..af2665c 100644
+--- a/drivers/gpu/drm/r128/r128_state.c
++++ b/drivers/gpu/drm/r128/r128_state.c
+@@ -1244,14 +1244,18 @@ static void r128_cce_dispatch_stipple(struct drm_device * dev, u32 * stipple)
+ static int r128_cce_clear(struct drm_device *dev, void *data, struct drm_file *file_priv)
+ {
+ drm_r128_private_t *dev_priv = dev->dev_private;
+- drm_r128_sarea_t *sarea_priv = dev_priv->sarea_priv;
++ drm_r128_sarea_t *sarea_priv;
+ drm_r128_clear_t *clear = data;
+ DRM_DEBUG("\n");
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ RING_SPACE_TEST_WITH_RETURN(dev_priv);
+
++ sarea_priv = dev_priv->sarea_priv;
++
+ if (sarea_priv->nbox > R128_NR_SAREA_CLIPRECTS)
+ sarea_priv->nbox = R128_NR_SAREA_CLIPRECTS;
+
+@@ -1312,6 +1316,8 @@ static int r128_cce_flip(struct drm_device *dev, void *data, struct drm_file *fi
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ RING_SPACE_TEST_WITH_RETURN(dev_priv);
+
+ if (!dev_priv->page_flipping)
+@@ -1331,6 +1337,8 @@ static int r128_cce_swap(struct drm_device *dev, void *data, struct drm_file *fi
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ RING_SPACE_TEST_WITH_RETURN(dev_priv);
+
+ if (sarea_priv->nbox > R128_NR_SAREA_CLIPRECTS)
+@@ -1354,10 +1362,7 @@ static int r128_cce_vertex(struct drm_device *dev, void *data, struct drm_file *
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+- if (!dev_priv) {
+- DRM_ERROR("called with no initialization\n");
+- return -EINVAL;
+- }
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
+
+ DRM_DEBUG("pid=%d index=%d count=%d discard=%d\n",
+ DRM_CURRENTPID, vertex->idx, vertex->count, vertex->discard);
+@@ -1410,10 +1415,7 @@ static int r128_cce_indices(struct drm_device *dev, void *data, struct drm_file
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+- if (!dev_priv) {
+- DRM_ERROR("called with no initialization\n");
+- return -EINVAL;
+- }
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
+
+ DRM_DEBUG("pid=%d buf=%d s=%d e=%d d=%d\n", DRM_CURRENTPID,
+ elts->idx, elts->start, elts->end, elts->discard);
+@@ -1476,6 +1478,8 @@ static int r128_cce_blit(struct drm_device *dev, void *data, struct drm_file *fi
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ DRM_DEBUG("pid=%d index=%d\n", DRM_CURRENTPID, blit->idx);
+
+ if (blit->idx < 0 || blit->idx >= dma->buf_count) {
+@@ -1501,6 +1505,8 @@ static int r128_cce_depth(struct drm_device *dev, void *data, struct drm_file *f
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ RING_SPACE_TEST_WITH_RETURN(dev_priv);
+
+ ret = -EINVAL;
+@@ -1531,6 +1537,8 @@ static int r128_cce_stipple(struct drm_device *dev, void *data, struct drm_file
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
++
+ if (DRM_COPY_FROM_USER(&mask, stipple->mask, 32 * sizeof(u32)))
+ return -EFAULT;
+
+@@ -1555,10 +1563,7 @@ static int r128_cce_indirect(struct drm_device *dev, void *data, struct drm_file
+
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+- if (!dev_priv) {
+- DRM_ERROR("called with no initialization\n");
+- return -EINVAL;
+- }
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
+
+ DRM_DEBUG("idx=%d s=%d e=%d d=%d\n",
+ indirect->idx, indirect->start, indirect->end,
+@@ -1620,10 +1625,7 @@ static int r128_getparam(struct drm_device *dev, void *data, struct drm_file *fi
+ drm_r128_getparam_t *param = data;
+ int value;
+
+- if (!dev_priv) {
+- DRM_ERROR("called with no initialization\n");
+- return -EINVAL;
+- }
++ DEV_INIT_TEST_WITH_RETURN(dev_priv);
+
+ DRM_DEBUG("pid=%d\n", DRM_CURRENTPID);
+
+diff --git a/drivers/gpu/drm/radeon/.gitignore b/drivers/gpu/drm/radeon/.gitignore
+new file mode 100644
+index 0000000..403eb3a
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/.gitignore
+@@ -0,0 +1,3 @@
++mkregtable
++*_reg_safe.h
++
+diff --git a/drivers/gpu/drm/radeon/Kconfig b/drivers/gpu/drm/radeon/Kconfig
+index 2168d67..5982321 100644
+--- a/drivers/gpu/drm/radeon/Kconfig
++++ b/drivers/gpu/drm/radeon/Kconfig
+@@ -1,7 +1,6 @@
+ config DRM_RADEON_KMS
+ bool "Enable modesetting on radeon by default"
+ depends on DRM_RADEON
+- select DRM_TTM
+ help
+ Choose this option if you want kernel modesetting enabled by default,
+ and you have a new enough userspace to support this. Running old
+diff --git a/drivers/gpu/drm/radeon/Makefile b/drivers/gpu/drm/radeon/Makefile
+index 013d380..09a2892 100644
+--- a/drivers/gpu/drm/radeon/Makefile
++++ b/drivers/gpu/drm/radeon/Makefile
+@@ -3,18 +3,53 @@
+ # Direct Rendering Infrastructure (DRI) in XFree86 4.1.0 and higher.
+
+ ccflags-y := -Iinclude/drm
++
++hostprogs-y := mkregtable
++
++quiet_cmd_mkregtable = MKREGTABLE $@
++ cmd_mkregtable = $(obj)/mkregtable $< > $@
++
++$(obj)/rn50_reg_safe.h: $(src)/reg_srcs/rn50 $(obj)/mkregtable
++ $(call if_changed,mkregtable)
++
++$(obj)/r100_reg_safe.h: $(src)/reg_srcs/r100 $(obj)/mkregtable
++ $(call if_changed,mkregtable)
++
++$(obj)/r200_reg_safe.h: $(src)/reg_srcs/r200 $(obj)/mkregtable
++ $(call if_changed,mkregtable)
++
++$(obj)/rv515_reg_safe.h: $(src)/reg_srcs/rv515 $(obj)/mkregtable
++ $(call if_changed,mkregtable)
++
++$(obj)/r300_reg_safe.h: $(src)/reg_srcs/r300 $(obj)/mkregtable
++ $(call if_changed,mkregtable)
++
++$(obj)/rs600_reg_safe.h: $(src)/reg_srcs/rs600 $(obj)/mkregtable
++ $(call if_changed,mkregtable)
++
++$(obj)/r100.o: $(obj)/r100_reg_safe.h $(obj)/rn50_reg_safe.h
++
++$(obj)/r200.o: $(obj)/r200_reg_safe.h
++
++$(obj)/rv515.o: $(obj)/rv515_reg_safe.h
++
++$(obj)/r300.o: $(obj)/r300_reg_safe.h
++
++$(obj)/rs600.o: $(obj)/rs600_reg_safe.h
++
+ radeon-y := radeon_drv.o radeon_cp.o radeon_state.o radeon_mem.o \
+ radeon_irq.o r300_cmdbuf.o r600_cp.o
+-
+-radeon-$(CONFIG_DRM_RADEON_KMS) += radeon_device.o radeon_kms.o \
++# add KMS driver
++radeon-y += radeon_device.o radeon_kms.o \
+ radeon_atombios.o radeon_agp.o atombios_crtc.o radeon_combios.o \
+ atom.o radeon_fence.o radeon_ttm.o radeon_object.o radeon_gart.o \
+ radeon_legacy_crtc.o radeon_legacy_encoders.o radeon_connectors.o \
+ radeon_encoders.o radeon_display.o radeon_cursor.o radeon_i2c.o \
+ radeon_clocks.o radeon_fb.o radeon_gem.o radeon_ring.o radeon_irq_kms.o \
+ radeon_cs.o radeon_bios.o radeon_benchmark.o r100.o r300.o r420.o \
+- rs400.o rs600.o rs690.o rv515.o r520.o r600.o rs780.o rv770.o \
+- radeon_test.o
++ rs400.o rs600.o rs690.o rv515.o r520.o r600.o rv770.o radeon_test.o \
++ r200.o radeon_legacy_tv.o r600_cs.o r600_blit.o r600_blit_shaders.o \
++ r600_blit_kms.o
+
+ radeon-$(CONFIG_COMPAT) += radeon_ioc32.o
+
+diff --git a/drivers/gpu/drm/radeon/atombios.h b/drivers/gpu/drm/radeon/atombios.h
+index cf67928..5d40208 100644
+--- a/drivers/gpu/drm/radeon/atombios.h
++++ b/drivers/gpu/drm/radeon/atombios.h
+@@ -2374,6 +2374,17 @@ typedef struct _ATOM_ANALOG_TV_INFO {
+ ATOM_MODE_TIMING aModeTimings[MAX_SUPPORTED_TV_TIMING];
+ } ATOM_ANALOG_TV_INFO;
+
++#define MAX_SUPPORTED_TV_TIMING_V1_2 3
++
++typedef struct _ATOM_ANALOG_TV_INFO_V1_2 {
++ ATOM_COMMON_TABLE_HEADER sHeader;
++ UCHAR ucTV_SupportedStandard;
++ UCHAR ucTV_BootUpDefaultStandard;
++ UCHAR ucExt_TV_ASIC_ID;
++ UCHAR ucExt_TV_ASIC_SlaveAddr;
++ ATOM_DTD_FORMAT aModeTimings[MAX_SUPPORTED_TV_TIMING];
++} ATOM_ANALOG_TV_INFO_V1_2;
++
+ /**************************************************************************/
+ /* VRAM usage and their defintions */
+
+diff --git a/drivers/gpu/drm/radeon/atombios_crtc.c b/drivers/gpu/drm/radeon/atombios_crtc.c
+index 74d034f..6a01592 100644
+--- a/drivers/gpu/drm/radeon/atombios_crtc.c
++++ b/drivers/gpu/drm/radeon/atombios_crtc.c
+@@ -31,6 +31,10 @@
+ #include "atom.h"
+ #include "atom-bits.h"
+
++/* evil but including atombios.h is much worse */
++bool radeon_atom_get_tv_timings(struct radeon_device *rdev, int index,
++ SET_CRTC_TIMING_PARAMETERS_PS_ALLOCATION *crtc_timing,
++ int32_t *pixel_clock);
+ static void atombios_overscan_setup(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode)
+@@ -89,17 +93,32 @@ static void atombios_scaler_setup(struct drm_crtc *crtc)
+ struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
+ ENABLE_SCALER_PS_ALLOCATION args;
+ int index = GetIndexIntoMasterTable(COMMAND, EnableScaler);
++
+ /* fixme - fill in enc_priv for atom dac */
+ enum radeon_tv_std tv_std = TV_STD_NTSC;
++ bool is_tv = false, is_cv = false;
++ struct drm_encoder *encoder;
+
+ if (!ASIC_IS_AVIVO(rdev) && radeon_crtc->crtc_id)
+ return;
+
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ /* find tv std */
++ if (encoder->crtc == crtc) {
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ if (radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT) {
++ struct radeon_encoder_atom_dac *tv_dac = radeon_encoder->enc_priv;
++ tv_std = tv_dac->tv_std;
++ is_tv = true;
++ }
++ }
++ }
++
+ memset(&args, 0, sizeof(args));
+
+ args.ucScaler = radeon_crtc->crtc_id;
+
+- if (radeon_crtc->devices & (ATOM_DEVICE_TV_SUPPORT)) {
++ if (is_tv) {
+ switch (tv_std) {
+ case TV_STD_NTSC:
+ default:
+@@ -128,7 +147,7 @@ static void atombios_scaler_setup(struct drm_crtc *crtc)
+ break;
+ }
+ args.ucEnable = SCALER_ENABLE_MULTITAP_MODE;
+- } else if (radeon_crtc->devices & (ATOM_DEVICE_CV_SUPPORT)) {
++ } else if (is_cv) {
+ args.ucTVStandard = ATOM_TV_CV;
+ args.ucEnable = SCALER_ENABLE_MULTITAP_MODE;
+ } else {
+@@ -151,9 +170,9 @@ static void atombios_scaler_setup(struct drm_crtc *crtc)
+ }
+ }
+ atom_execute_table(rdev->mode_info.atom_context, index, (uint32_t *)&args);
+- if (radeon_crtc->devices & (ATOM_DEVICE_CV_SUPPORT | ATOM_DEVICE_TV_SUPPORT)
+- && rdev->family >= CHIP_RV515 && rdev->family <= CHIP_RV570) {
+- atom_rv515_force_tv_scaler(rdev);
++ if ((is_tv || is_cv)
++ && rdev->family >= CHIP_RV515 && rdev->family <= CHIP_R580) {
++ atom_rv515_force_tv_scaler(rdev, radeon_crtc);
+ }
+ }
+
+@@ -370,6 +389,7 @@ void atombios_crtc_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
+ pll_flags |= RADEON_PLL_USE_REF_DIV;
+ }
+ radeon_encoder = to_radeon_encoder(encoder);
++ break;
+ }
+ }
+
+@@ -468,6 +488,11 @@ int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
+ }
+
+ switch (crtc->fb->bits_per_pixel) {
++ case 8:
++ fb_format =
++ AVIVO_D1GRPH_CONTROL_DEPTH_8BPP |
++ AVIVO_D1GRPH_CONTROL_8BPP_INDEXED;
++ break;
+ case 15:
+ fb_format =
+ AVIVO_D1GRPH_CONTROL_DEPTH_16BPP |
+@@ -551,42 +576,68 @@ int atombios_crtc_mode_set(struct drm_crtc *crtc,
+ struct radeon_device *rdev = dev->dev_private;
+ struct drm_encoder *encoder;
+ SET_CRTC_TIMING_PARAMETERS_PS_ALLOCATION crtc_timing;
++ int need_tv_timings = 0;
++ bool ret;
+
+ /* TODO color tiling */
+ memset(&crtc_timing, 0, sizeof(crtc_timing));
+
+- /* TODO tv */
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+-
++ /* find tv std */
++ if (encoder->crtc == crtc) {
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++
++ if (radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT) {
++ struct radeon_encoder_atom_dac *tv_dac = radeon_encoder->enc_priv;
++ if (tv_dac) {
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M)
++ need_tv_timings = 1;
++ else
++ need_tv_timings = 2;
++ break;
++ }
++ }
++ }
+ }
+
+ crtc_timing.ucCRTC = radeon_crtc->crtc_id;
+- crtc_timing.usH_Total = adjusted_mode->crtc_htotal;
+- crtc_timing.usH_Disp = adjusted_mode->crtc_hdisplay;
+- crtc_timing.usH_SyncStart = adjusted_mode->crtc_hsync_start;
+- crtc_timing.usH_SyncWidth =
+- adjusted_mode->crtc_hsync_end - adjusted_mode->crtc_hsync_start;
++ if (need_tv_timings) {
++ ret = radeon_atom_get_tv_timings(rdev, need_tv_timings - 1,
++ &crtc_timing, &adjusted_mode->clock);
++ if (ret == false)
++ need_tv_timings = 0;
++ }
+
+- crtc_timing.usV_Total = adjusted_mode->crtc_vtotal;
+- crtc_timing.usV_Disp = adjusted_mode->crtc_vdisplay;
+- crtc_timing.usV_SyncStart = adjusted_mode->crtc_vsync_start;
+- crtc_timing.usV_SyncWidth =
+- adjusted_mode->crtc_vsync_end - adjusted_mode->crtc_vsync_start;
++ if (!need_tv_timings) {
++ crtc_timing.usH_Total = adjusted_mode->crtc_htotal;
++ crtc_timing.usH_Disp = adjusted_mode->crtc_hdisplay;
++ crtc_timing.usH_SyncStart = adjusted_mode->crtc_hsync_start;
++ crtc_timing.usH_SyncWidth =
++ adjusted_mode->crtc_hsync_end - adjusted_mode->crtc_hsync_start;
+
+- if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC)
+- crtc_timing.susModeMiscInfo.usAccess |= ATOM_VSYNC_POLARITY;
++ crtc_timing.usV_Total = adjusted_mode->crtc_vtotal;
++ crtc_timing.usV_Disp = adjusted_mode->crtc_vdisplay;
++ crtc_timing.usV_SyncStart = adjusted_mode->crtc_vsync_start;
++ crtc_timing.usV_SyncWidth =
++ adjusted_mode->crtc_vsync_end - adjusted_mode->crtc_vsync_start;
+
+- if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC)
+- crtc_timing.susModeMiscInfo.usAccess |= ATOM_HSYNC_POLARITY;
++ if (adjusted_mode->flags & DRM_MODE_FLAG_NVSYNC)
++ crtc_timing.susModeMiscInfo.usAccess |= ATOM_VSYNC_POLARITY;
+
+- if (adjusted_mode->flags & DRM_MODE_FLAG_CSYNC)
+- crtc_timing.susModeMiscInfo.usAccess |= ATOM_COMPOSITESYNC;
++ if (adjusted_mode->flags & DRM_MODE_FLAG_NHSYNC)
++ crtc_timing.susModeMiscInfo.usAccess |= ATOM_HSYNC_POLARITY;
+
+- if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
+- crtc_timing.susModeMiscInfo.usAccess |= ATOM_INTERLACE;
++ if (adjusted_mode->flags & DRM_MODE_FLAG_CSYNC)
++ crtc_timing.susModeMiscInfo.usAccess |= ATOM_COMPOSITESYNC;
+
+- if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
+- crtc_timing.susModeMiscInfo.usAccess |= ATOM_DOUBLE_CLOCK_MODE;
++ if (adjusted_mode->flags & DRM_MODE_FLAG_INTERLACE)
++ crtc_timing.susModeMiscInfo.usAccess |= ATOM_INTERLACE;
++
++ if (adjusted_mode->flags & DRM_MODE_FLAG_DBLSCAN)
++ crtc_timing.susModeMiscInfo.usAccess |= ATOM_DOUBLE_CLOCK_MODE;
++ }
+
+ atombios_crtc_set_pll(crtc, adjusted_mode);
+ atombios_crtc_set_timing(crtc, &crtc_timing);
+diff --git a/drivers/gpu/drm/radeon/avivod.h b/drivers/gpu/drm/radeon/avivod.h
+new file mode 100644
+index 0000000..d4e6e6e
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/avivod.h
+@@ -0,0 +1,60 @@
++/*
++ * Copyright 2009 Advanced Micro Devices, Inc.
++ * Copyright 2009 Red Hat Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef AVIVOD_H
++#define AVIVOD_H
++
++
++#define D1CRTC_CONTROL 0x6080
++#define CRTC_EN (1 << 0)
++#define D1CRTC_UPDATE_LOCK 0x60E8
++#define D1GRPH_PRIMARY_SURFACE_ADDRESS 0x6110
++#define D1GRPH_SECONDARY_SURFACE_ADDRESS 0x6118
++
++#define D2CRTC_CONTROL 0x6880
++#define D2CRTC_UPDATE_LOCK 0x68E8
++#define D2GRPH_PRIMARY_SURFACE_ADDRESS 0x6910
++#define D2GRPH_SECONDARY_SURFACE_ADDRESS 0x6918
++
++#define D1VGA_CONTROL 0x0330
++#define DVGA_CONTROL_MODE_ENABLE (1 << 0)
++#define DVGA_CONTROL_TIMING_SELECT (1 << 8)
++#define DVGA_CONTROL_SYNC_POLARITY_SELECT (1 << 9)
++#define DVGA_CONTROL_OVERSCAN_TIMING_SELECT (1 << 10)
++#define DVGA_CONTROL_OVERSCAN_COLOR_EN (1 << 16)
++#define DVGA_CONTROL_ROTATE (1 << 24)
++#define D2VGA_CONTROL 0x0338
++
++#define VGA_HDP_CONTROL 0x328
++#define VGA_MEM_PAGE_SELECT_EN (1 << 0)
++#define VGA_MEMORY_DISABLE (1 << 4)
++#define VGA_RBBM_LOCK_DISABLE (1 << 8)
++#define VGA_SOFT_RESET (1 << 16)
++#define VGA_MEMORY_BASE_ADDRESS 0x0310
++#define VGA_RENDER_CONTROL 0x0300
++#define VGA_VSTATUS_CNTL_MASK 0x00030000
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/mkregtable.c b/drivers/gpu/drm/radeon/mkregtable.c
+new file mode 100644
+index 0000000..fb211e5
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/mkregtable.c
+@@ -0,0 +1,720 @@
++/* utility to create the register check tables
++ * this includes inlined list.h safe for userspace.
++ *
++ * Copyright 2009 Jerome Glisse
++ * Copyright 2009 Red Hat Inc.
++ *
++ * Authors:
++ * Jerome Glisse
++ * Dave Airlie
++ */
++
++#include <sys/types.h>
++#include <stdlib.h>
++#include <string.h>
++#include <stdio.h>
++#include <regex.h>
++#include <libgen.h>
++
++#define offsetof(TYPE, MEMBER) ((size_t) &((TYPE *)0)->MEMBER)
++/**
++ * container_of - cast a member of a structure out to the containing structure
++ * @ptr: the pointer to the member.
++ * @type: the type of the container struct this is embedded in.
++ * @member: the name of the member within the struct.
++ *
++ */
++#define container_of(ptr, type, member) ({ \
++ const typeof(((type *)0)->member)*__mptr = (ptr); \
++ (type *)((char *)__mptr - offsetof(type, member)); })
++
++/*
++ * Simple doubly linked list implementation.
++ *
++ * Some of the internal functions ("__xxx") are useful when
++ * manipulating whole lists rather than single entries, as
++ * sometimes we already know the next/prev entries and we can
++ * generate better code by using them directly rather than
++ * using the generic single-entry routines.
++ */
++
++struct list_head {
++ struct list_head *next, *prev;
++};
++
++#define LIST_HEAD_INIT(name) { &(name), &(name) }
++
++#define LIST_HEAD(name) \
++ struct list_head name = LIST_HEAD_INIT(name)
++
++static inline void INIT_LIST_HEAD(struct list_head *list)
++{
++ list->next = list;
++ list->prev = list;
++}
++
++/*
++ * Insert a new entry between two known consecutive entries.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++#ifndef CONFIG_DEBUG_LIST
++static inline void __list_add(struct list_head *new,
++ struct list_head *prev, struct list_head *next)
++{
++ next->prev = new;
++ new->next = next;
++ new->prev = prev;
++ prev->next = new;
++}
++#else
++extern void __list_add(struct list_head *new,
++ struct list_head *prev, struct list_head *next);
++#endif
++
++/**
++ * list_add - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it after
++ *
++ * Insert a new entry after the specified head.
++ * This is good for implementing stacks.
++ */
++static inline void list_add(struct list_head *new, struct list_head *head)
++{
++ __list_add(new, head, head->next);
++}
++
++/**
++ * list_add_tail - add a new entry
++ * @new: new entry to be added
++ * @head: list head to add it before
++ *
++ * Insert a new entry before the specified head.
++ * This is useful for implementing queues.
++ */
++static inline void list_add_tail(struct list_head *new, struct list_head *head)
++{
++ __list_add(new, head->prev, head);
++}
++
++/*
++ * Delete a list entry by making the prev/next entries
++ * point to each other.
++ *
++ * This is only for internal list manipulation where we know
++ * the prev/next entries already!
++ */
++static inline void __list_del(struct list_head *prev, struct list_head *next)
++{
++ next->prev = prev;
++ prev->next = next;
++}
++
++/**
++ * list_del - deletes entry from list.
++ * @entry: the element to delete from the list.
++ * Note: list_empty() on entry does not return true after this, the entry is
++ * in an undefined state.
++ */
++#ifndef CONFIG_DEBUG_LIST
++static inline void list_del(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ entry->next = (void *)0xDEADBEEF;
++ entry->prev = (void *)0xBEEFDEAD;
++}
++#else
++extern void list_del(struct list_head *entry);
++#endif
++
++/**
++ * list_replace - replace old entry by new one
++ * @old : the element to be replaced
++ * @new : the new element to insert
++ *
++ * If @old was empty, it will be overwritten.
++ */
++static inline void list_replace(struct list_head *old, struct list_head *new)
++{
++ new->next = old->next;
++ new->next->prev = new;
++ new->prev = old->prev;
++ new->prev->next = new;
++}
++
++static inline void list_replace_init(struct list_head *old,
++ struct list_head *new)
++{
++ list_replace(old, new);
++ INIT_LIST_HEAD(old);
++}
++
++/**
++ * list_del_init - deletes entry from list and reinitialize it.
++ * @entry: the element to delete from the list.
++ */
++static inline void list_del_init(struct list_head *entry)
++{
++ __list_del(entry->prev, entry->next);
++ INIT_LIST_HEAD(entry);
++}
++
++/**
++ * list_move - delete from one list and add as another's head
++ * @list: the entry to move
++ * @head: the head that will precede our entry
++ */
++static inline void list_move(struct list_head *list, struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add(list, head);
++}
++
++/**
++ * list_move_tail - delete from one list and add as another's tail
++ * @list: the entry to move
++ * @head: the head that will follow our entry
++ */
++static inline void list_move_tail(struct list_head *list,
++ struct list_head *head)
++{
++ __list_del(list->prev, list->next);
++ list_add_tail(list, head);
++}
++
++/**
++ * list_is_last - tests whether @list is the last entry in list @head
++ * @list: the entry to test
++ * @head: the head of the list
++ */
++static inline int list_is_last(const struct list_head *list,
++ const struct list_head *head)
++{
++ return list->next == head;
++}
++
++/**
++ * list_empty - tests whether a list is empty
++ * @head: the list to test.
++ */
++static inline int list_empty(const struct list_head *head)
++{
++ return head->next == head;
++}
++
++/**
++ * list_empty_careful - tests whether a list is empty and not being modified
++ * @head: the list to test
++ *
++ * Description:
++ * tests whether a list is empty _and_ checks that no other CPU might be
++ * in the process of modifying either member (next or prev)
++ *
++ * NOTE: using list_empty_careful() without synchronization
++ * can only be safe if the only activity that can happen
++ * to the list entry is list_del_init(). Eg. it cannot be used
++ * if another CPU could re-list_add() it.
++ */
++static inline int list_empty_careful(const struct list_head *head)
++{
++ struct list_head *next = head->next;
++ return (next == head) && (next == head->prev);
++}
++
++/**
++ * list_is_singular - tests whether a list has just one entry.
++ * @head: the list to test.
++ */
++static inline int list_is_singular(const struct list_head *head)
++{
++ return !list_empty(head) && (head->next == head->prev);
++}
++
++static inline void __list_cut_position(struct list_head *list,
++ struct list_head *head,
++ struct list_head *entry)
++{
++ struct list_head *new_first = entry->next;
++ list->next = head->next;
++ list->next->prev = list;
++ list->prev = entry;
++ entry->next = list;
++ head->next = new_first;
++ new_first->prev = head;
++}
++
++/**
++ * list_cut_position - cut a list into two
++ * @list: a new list to add all removed entries
++ * @head: a list with entries
++ * @entry: an entry within head, could be the head itself
++ * and if so we won't cut the list
++ *
++ * This helper moves the initial part of @head, up to and
++ * including @entry, from @head to @list. You should
++ * pass on @entry an element you know is on @head. @list
++ * should be an empty list or a list you do not care about
++ * losing its data.
++ *
++ */
++static inline void list_cut_position(struct list_head *list,
++ struct list_head *head,
++ struct list_head *entry)
++{
++ if (list_empty(head))
++ return;
++ if (list_is_singular(head) && (head->next != entry && head != entry))
++ return;
++ if (entry == head)
++ INIT_LIST_HEAD(list);
++ else
++ __list_cut_position(list, head, entry);
++}
++
++static inline void __list_splice(const struct list_head *list,
++ struct list_head *prev, struct list_head *next)
++{
++ struct list_head *first = list->next;
++ struct list_head *last = list->prev;
++
++ first->prev = prev;
++ prev->next = first;
++
++ last->next = next;
++ next->prev = last;
++}
++
++/**
++ * list_splice - join two lists, this is designed for stacks
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ */
++static inline void list_splice(const struct list_head *list,
++ struct list_head *head)
++{
++ if (!list_empty(list))
++ __list_splice(list, head, head->next);
++}
++
++/**
++ * list_splice_tail - join two lists, each list being a queue
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ */
++static inline void list_splice_tail(struct list_head *list,
++ struct list_head *head)
++{
++ if (!list_empty(list))
++ __list_splice(list, head->prev, head);
++}
++
++/**
++ * list_splice_init - join two lists and reinitialise the emptied list.
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ *
++ * The list at @list is reinitialised
++ */
++static inline void list_splice_init(struct list_head *list,
++ struct list_head *head)
++{
++ if (!list_empty(list)) {
++ __list_splice(list, head, head->next);
++ INIT_LIST_HEAD(list);
++ }
++}
++
++/**
++ * list_splice_tail_init - join two lists and reinitialise the emptied list
++ * @list: the new list to add.
++ * @head: the place to add it in the first list.
++ *
++ * Each of the lists is a queue.
++ * The list at @list is reinitialised
++ */
++static inline void list_splice_tail_init(struct list_head *list,
++ struct list_head *head)
++{
++ if (!list_empty(list)) {
++ __list_splice(list, head->prev, head);
++ INIT_LIST_HEAD(list);
++ }
++}
++
++/**
++ * list_entry - get the struct for this entry
++ * @ptr: the &struct list_head pointer.
++ * @type: the type of the struct this is embedded in.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_entry(ptr, type, member) \
++ container_of(ptr, type, member)
++
++/**
++ * list_first_entry - get the first element from a list
++ * @ptr: the list head to take the element from.
++ * @type: the type of the struct this is embedded in.
++ * @member: the name of the list_struct within the struct.
++ *
++ * Note, that list is expected to be not empty.
++ */
++#define list_first_entry(ptr, type, member) \
++ list_entry((ptr)->next, type, member)
++
++/**
++ * list_for_each - iterate over a list
++ * @pos: the &struct list_head to use as a loop cursor.
++ * @head: the head for your list.
++ */
++#define list_for_each(pos, head) \
++ for (pos = (head)->next; prefetch(pos->next), pos != (head); \
++ pos = pos->next)
++
++/**
++ * __list_for_each - iterate over a list
++ * @pos: the &struct list_head to use as a loop cursor.
++ * @head: the head for your list.
++ *
++ * This variant differs from list_for_each() in that it's the
++ * simplest possible list iteration code, no prefetching is done.
++ * Use this for code that knows the list to be very short (empty
++ * or 1 entry) most of the time.
++ */
++#define __list_for_each(pos, head) \
++ for (pos = (head)->next; pos != (head); pos = pos->next)
++
++/**
++ * list_for_each_prev - iterate over a list backwards
++ * @pos: the &struct list_head to use as a loop cursor.
++ * @head: the head for your list.
++ */
++#define list_for_each_prev(pos, head) \
++ for (pos = (head)->prev; prefetch(pos->prev), pos != (head); \
++ pos = pos->prev)
++
++/**
++ * list_for_each_safe - iterate over a list safe against removal of list entry
++ * @pos: the &struct list_head to use as a loop cursor.
++ * @n: another &struct list_head to use as temporary storage
++ * @head: the head for your list.
++ */
++#define list_for_each_safe(pos, n, head) \
++ for (pos = (head)->next, n = pos->next; pos != (head); \
++ pos = n, n = pos->next)
++
++/**
++ * list_for_each_prev_safe - iterate over a list backwards safe against removal of list entry
++ * @pos: the &struct list_head to use as a loop cursor.
++ * @n: another &struct list_head to use as temporary storage
++ * @head: the head for your list.
++ */
++#define list_for_each_prev_safe(pos, n, head) \
++ for (pos = (head)->prev, n = pos->prev; \
++ prefetch(pos->prev), pos != (head); \
++ pos = n, n = pos->prev)
++
++/**
++ * list_for_each_entry - iterate over list of given type
++ * @pos: the type * to use as a loop cursor.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry(pos, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_reverse - iterate backwards over list of given type.
++ * @pos: the type * to use as a loop cursor.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_reverse(pos, head, member) \
++ for (pos = list_entry((head)->prev, typeof(*pos), member); \
++ prefetch(pos->member.prev), &pos->member != (head); \
++ pos = list_entry(pos->member.prev, typeof(*pos), member))
++
++/**
++ * list_prepare_entry - prepare a pos entry for use in list_for_each_entry_continue()
++ * @pos: the type * to use as a start point
++ * @head: the head of the list
++ * @member: the name of the list_struct within the struct.
++ *
++ * Prepares a pos entry for use as a start point in list_for_each_entry_continue().
++ */
++#define list_prepare_entry(pos, head, member) \
++ ((pos) ? : list_entry(head, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_continue - continue iteration over list of given type
++ * @pos: the type * to use as a loop cursor.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ *
++ * Continue to iterate over list of given type, continuing after
++ * the current position.
++ */
++#define list_for_each_entry_continue(pos, head, member) \
++ for (pos = list_entry(pos->member.next, typeof(*pos), member); \
++ prefetch(pos->member.next), &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_continue_reverse - iterate backwards from the given point
++ * @pos: the type * to use as a loop cursor.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ *
++ * Start to iterate over list of given type backwards, continuing after
++ * the current position.
++ */
++#define list_for_each_entry_continue_reverse(pos, head, member) \
++ for (pos = list_entry(pos->member.prev, typeof(*pos), member); \
++ prefetch(pos->member.prev), &pos->member != (head); \
++ pos = list_entry(pos->member.prev, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_from - iterate over list of given type from the current point
++ * @pos: the type * to use as a loop cursor.
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ *
++ * Iterate over list of given type, continuing from current position.
++ */
++#define list_for_each_entry_from(pos, head, member) \
++ for (; prefetch(pos->member.next), &pos->member != (head); \
++ pos = list_entry(pos->member.next, typeof(*pos), member))
++
++/**
++ * list_for_each_entry_safe - iterate over list of given type safe against removal of list entry
++ * @pos: the type * to use as a loop cursor.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ */
++#define list_for_each_entry_safe(pos, n, head, member) \
++ for (pos = list_entry((head)->next, typeof(*pos), member), \
++ n = list_entry(pos->member.next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.next, typeof(*n), member))
++
++/**
++ * list_for_each_entry_safe_continue
++ * @pos: the type * to use as a loop cursor.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ *
++ * Iterate over list of given type, continuing after current point,
++ * safe against removal of list entry.
++ */
++#define list_for_each_entry_safe_continue(pos, n, head, member) \
++ for (pos = list_entry(pos->member.next, typeof(*pos), member), \
++ n = list_entry(pos->member.next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.next, typeof(*n), member))
++
++/**
++ * list_for_each_entry_safe_from
++ * @pos: the type * to use as a loop cursor.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ *
++ * Iterate over list of given type from current point, safe against
++ * removal of list entry.
++ */
++#define list_for_each_entry_safe_from(pos, n, head, member) \
++ for (n = list_entry(pos->member.next, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.next, typeof(*n), member))
++
++/**
++ * list_for_each_entry_safe_reverse
++ * @pos: the type * to use as a loop cursor.
++ * @n: another type * to use as temporary storage
++ * @head: the head for your list.
++ * @member: the name of the list_struct within the struct.
++ *
++ * Iterate backwards over list of given type, safe against removal
++ * of list entry.
++ */
++#define list_for_each_entry_safe_reverse(pos, n, head, member) \
++ for (pos = list_entry((head)->prev, typeof(*pos), member), \
++ n = list_entry(pos->member.prev, typeof(*pos), member); \
++ &pos->member != (head); \
++ pos = n, n = list_entry(n->member.prev, typeof(*n), member))
++
++struct offset {
++ struct list_head list;
++ unsigned offset;
++};
++
++struct table {
++ struct list_head offsets;
++ unsigned offset_max;
++ unsigned nentry;
++ unsigned *table;
++ char *gpu_prefix;
++};
++
++struct offset *offset_new(unsigned o)
++{
++ struct offset *offset;
++
++ offset = (struct offset *)malloc(sizeof(struct offset));
++ if (offset) {
++ INIT_LIST_HEAD(&offset->list);
++ offset->offset = o;
++ }
++ return offset;
++}
++
++void table_offset_add(struct table *t, struct offset *offset)
++{
++ list_add_tail(&offset->list, &t->offsets);
++}
++
++void table_init(struct table *t)
++{
++ INIT_LIST_HEAD(&t->offsets);
++ t->offset_max = 0;
++ t->nentry = 0;
++ t->table = NULL;
++}
++
++void table_print(struct table *t)
++{
++ unsigned nlloop, i, j, n, c, id;
++
++ nlloop = (t->nentry + 3) / 4;
++ c = t->nentry;
++ printf("static const unsigned %s_reg_safe_bm[%d] = {\n", t->gpu_prefix,
++ t->nentry);
++ for (i = 0, id = 0; i < nlloop; i++) {
++ n = 4;
++ if (n > c)
++ n = c;
++ c -= n;
++ for (j = 0; j < n; j++) {
++ if (j == 0)
++ printf("\t");
++ else
++ printf(" ");
++ printf("0x%08X,", t->table[id++]);
++ }
++ printf("\n");
++ }
++ printf("};\n");
++}
++
++int table_build(struct table *t)
++{
++ struct offset *offset;
++ unsigned i, m;
++
++ t->nentry = ((t->offset_max >> 2) + 31) / 32;
++ t->table = (unsigned *)malloc(sizeof(unsigned) * t->nentry);
++ if (t->table == NULL)
++ return -1;
++ memset(t->table, 0xff, sizeof(unsigned) * t->nentry);
++ list_for_each_entry(offset, &t->offsets, list) {
++ i = (offset->offset >> 2) / 32;
++ m = (offset->offset >> 2) & 31;
++ m = 1 << m;
++ t->table[i] ^= m;
++ }
++ return 0;
++}
++
++static char gpu_name[10];
++int parser_auth(struct table *t, const char *filename)
++{
++ FILE *file;
++ regex_t mask_rex;
++ regmatch_t match[4];
++ char buf[1024];
++ size_t end;
++ int len;
++ int done = 0;
++ int r;
++ unsigned o;
++ struct offset *offset;
++ char last_reg_s[10];
++ int last_reg;
++
++ if (regcomp
++ (&mask_rex, "(0x[0-9a-fA-F]*) *([_a-zA-Z0-9]*)", REG_EXTENDED)) {
++ fprintf(stderr, "Failed to compile regular expression\n");
++ return -1;
++ }
++ file = fopen(filename, "r");
++ if (file == NULL) {
++ fprintf(stderr, "Failed to open: %s\n", filename);
++ return -1;
++ }
++ fseek(file, 0, SEEK_END);
++ end = ftell(file);
++ fseek(file, 0, SEEK_SET);
++
++ /* get header */
++ if (fgets(buf, 1024, file) == NULL)
++ return -1;
++
++ /* first line will contain the last register
++ * and gpu name */
++ sscanf(buf, "%s %s", gpu_name, last_reg_s);
++ t->gpu_prefix = gpu_name;
++ last_reg = strtol(last_reg_s, NULL, 16);
++
++ do {
++ if (fgets(buf, 1024, file) == NULL)
++ return -1;
++ len = strlen(buf);
++ if (ftell(file) == end)
++ done = 1;
++ if (len) {
++ r = regexec(&mask_rex, buf, 4, match, 0);
++ if (r == REG_NOMATCH) {
++ } else if (r) {
++ fprintf(stderr,
++ "Error matching regular expression %d in %s\n",
++ r, filename);
++ return -1;
++ } else {
++ buf[match[0].rm_eo] = 0;
++ buf[match[1].rm_eo] = 0;
++ buf[match[2].rm_eo] = 0;
++ o = strtol(&buf[match[1].rm_so], NULL, 16);
++ offset = offset_new(o);
++ table_offset_add(t, offset);
++ if (o > t->offset_max)
++ t->offset_max = o;
++ }
++ }
++ } while (!done);
++ fclose(file);
++ if (t->offset_max < last_reg)
++ t->offset_max = last_reg;
++ return table_build(t);
++}
++
++int main(int argc, char *argv[])
++{
++ struct table t;
++
++ if (argc != 2) {
++ fprintf(stderr, "Usage: %s <authfile>\n", argv[0]);
++ exit(1);
++ }
++ table_init(&t);
++ if (parser_auth(&t, argv[1])) {
++ fprintf(stderr, "Failed to parse file %s\n", argv[1]);
++ return -1;
++ }
++ table_print(&t);
++ return 0;
++}
+diff --git a/drivers/gpu/drm/radeon/r100.c b/drivers/gpu/drm/radeon/r100.c
+index 68e728e..d209914 100644
+--- a/drivers/gpu/drm/radeon/r100.c
++++ b/drivers/gpu/drm/radeon/r100.c
+@@ -29,15 +29,41 @@
+ #include "drmP.h"
+ #include "drm.h"
+ #include "radeon_drm.h"
+-#include "radeon_microcode.h"
+ #include "radeon_reg.h"
+ #include "radeon.h"
++#include "r100d.h"
++
++#include <linux/firmware.h>
++#include <linux/platform_device.h>
++
++#include "r100_reg_safe.h"
++#include "rn50_reg_safe.h"
++
++/* Firmware Names */
++#define FIRMWARE_R100 "radeon/R100_cp.bin"
++#define FIRMWARE_R200 "radeon/R200_cp.bin"
++#define FIRMWARE_R300 "radeon/R300_cp.bin"
++#define FIRMWARE_R420 "radeon/R420_cp.bin"
++#define FIRMWARE_RS690 "radeon/RS690_cp.bin"
++#define FIRMWARE_RS600 "radeon/RS600_cp.bin"
++#define FIRMWARE_R520 "radeon/R520_cp.bin"
++
++MODULE_FIRMWARE(FIRMWARE_R100);
++MODULE_FIRMWARE(FIRMWARE_R200);
++MODULE_FIRMWARE(FIRMWARE_R300);
++MODULE_FIRMWARE(FIRMWARE_R420);
++MODULE_FIRMWARE(FIRMWARE_RS690);
++MODULE_FIRMWARE(FIRMWARE_RS600);
++MODULE_FIRMWARE(FIRMWARE_R520);
++
++#include "r100_track.h"
+
+ /* This files gather functions specifics to:
+ * r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280
+ *
+ * Some of these functions might be used by newer ASICs.
+ */
++int r200_init(struct radeon_device *rdev);
+ void r100_hdp_reset(struct radeon_device *rdev);
+ void r100_gpu_init(struct radeon_device *rdev);
+ int r100_gui_wait_for_idle(struct radeon_device *rdev);
+@@ -58,23 +84,28 @@ void r100_pci_gart_tlb_flush(struct radeon_device *rdev)
+ * could end up in wrong address. */
+ }
+
+-int r100_pci_gart_enable(struct radeon_device *rdev)
++int r100_pci_gart_init(struct radeon_device *rdev)
+ {
+- uint32_t tmp;
+ int r;
+
++ if (rdev->gart.table.ram.ptr) {
++ WARN(1, "R100 PCI GART already initialized.\n");
++ return 0;
++ }
+ /* Initialize common gart structure */
+ r = radeon_gart_init(rdev);
+- if (r) {
++ if (r)
+ return r;
+- }
+- if (rdev->gart.table.ram.ptr == NULL) {
+- rdev->gart.table_size = rdev->gart.num_gpu_pages * 4;
+- r = radeon_gart_table_ram_alloc(rdev);
+- if (r) {
+- return r;
+- }
+- }
++ rdev->gart.table_size = rdev->gart.num_gpu_pages * 4;
++ rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush;
++ rdev->asic->gart_set_page = &r100_pci_gart_set_page;
++ return radeon_gart_table_ram_alloc(rdev);
++}
++
++int r100_pci_gart_enable(struct radeon_device *rdev)
++{
++ uint32_t tmp;
++
+ /* discard memory request outside of configured range */
+ tmp = RREG32(RADEON_AIC_CNTL) | RADEON_DIS_OUT_OF_PCI_GART_ACCESS;
+ WREG32(RADEON_AIC_CNTL, tmp);
+@@ -114,13 +145,11 @@ int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr)
+ return 0;
+ }
+
+-int r100_gart_enable(struct radeon_device *rdev)
++void r100_pci_gart_fini(struct radeon_device *rdev)
+ {
+- if (rdev->flags & RADEON_IS_AGP) {
+- r100_pci_gart_disable(rdev);
+- return 0;
+- }
+- return r100_pci_gart_enable(rdev);
++ r100_pci_gart_disable(rdev);
++ radeon_gart_table_ram_free(rdev);
++ radeon_gart_fini(rdev);
+ }
+
+
+@@ -247,9 +276,6 @@ int r100_mc_init(struct radeon_device *rdev)
+
+ void r100_mc_fini(struct radeon_device *rdev)
+ {
+- r100_pci_gart_disable(rdev);
+- radeon_gart_table_ram_free(rdev);
+- radeon_gart_fini(rdev);
+ }
+
+
+@@ -273,6 +299,17 @@ int r100_irq_set(struct radeon_device *rdev)
+ return 0;
+ }
+
++void r100_irq_disable(struct radeon_device *rdev)
++{
++ u32 tmp;
++
++ WREG32(R_000040_GEN_INT_CNTL, 0);
++ /* Wait and acknowledge irq */
++ mdelay(1);
++ tmp = RREG32(R_000044_GEN_INT_STATUS);
++ WREG32(R_000044_GEN_INT_STATUS, tmp);
++}
++
+ static inline uint32_t r100_irq_ack(struct radeon_device *rdev)
+ {
+ uint32_t irqs = RREG32(RADEON_GEN_INT_STATUS);
+@@ -293,6 +330,9 @@ int r100_irq_process(struct radeon_device *rdev)
+ if (!status) {
+ return IRQ_NONE;
+ }
++ if (rdev->shutdown) {
++ return IRQ_NONE;
++ }
+ while (status) {
+ /* SW interrupt */
+ if (status & RADEON_SW_INT_TEST) {
+@@ -367,14 +407,21 @@ int r100_wb_init(struct radeon_device *rdev)
+ return r;
+ }
+ }
+- WREG32(0x774, rdev->wb.gpu_addr);
+- WREG32(0x70C, rdev->wb.gpu_addr + 1024);
+- WREG32(0x770, 0xff);
++ WREG32(R_000774_SCRATCH_ADDR, rdev->wb.gpu_addr);
++ WREG32(R_00070C_CP_RB_RPTR_ADDR,
++ S_00070C_RB_RPTR_ADDR((rdev->wb.gpu_addr + 1024) >> 2));
++ WREG32(R_000770_SCRATCH_UMSK, 0xff);
+ return 0;
+ }
+
++void r100_wb_disable(struct radeon_device *rdev)
++{
++ WREG32(R_000770_SCRATCH_UMSK, 0);
++}
++
+ void r100_wb_fini(struct radeon_device *rdev)
+ {
++ r100_wb_disable(rdev);
+ if (rdev->wb.wb_obj) {
+ radeon_object_kunmap(rdev->wb.wb_obj);
+ radeon_object_unpin(rdev->wb.wb_obj);
+@@ -461,6 +508,21 @@ int r100_copy_blit(struct radeon_device *rdev,
+ /*
+ * CP
+ */
++static int r100_cp_wait_for_idle(struct radeon_device *rdev)
++{
++ unsigned i;
++ u32 tmp;
++
++ for (i = 0; i < rdev->usec_timeout; i++) {
++ tmp = RREG32(R_000E40_RBBM_STATUS);
++ if (!G_000E40_CP_CMDSTRM_BUSY(tmp)) {
++ return 0;
++ }
++ udelay(1);
++ }
++ return -1;
++}
++
+ void r100_ring_start(struct radeon_device *rdev)
+ {
+ int r;
+@@ -478,33 +540,33 @@ void r100_ring_start(struct radeon_device *rdev)
+ radeon_ring_unlock_commit(rdev);
+ }
+
+-static void r100_cp_load_microcode(struct radeon_device *rdev)
++
++/* Load the microcode for the CP */
++static int r100_cp_init_microcode(struct radeon_device *rdev)
+ {
+- int i;
++ struct platform_device *pdev;
++ const char *fw_name = NULL;
++ int err;
+
+- if (r100_gui_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait GUI idle while "
+- "programming pipes. Bad things might happen.\n");
+- }
++ DRM_DEBUG("\n");
+
+- WREG32(RADEON_CP_ME_RAM_ADDR, 0);
++ pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
++ err = IS_ERR(pdev);
++ if (err) {
++ printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
++ return -EINVAL;
++ }
+ if ((rdev->family == CHIP_R100) || (rdev->family == CHIP_RV100) ||
+ (rdev->family == CHIP_RV200) || (rdev->family == CHIP_RS100) ||
+ (rdev->family == CHIP_RS200)) {
+ DRM_INFO("Loading R100 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- WREG32(RADEON_CP_ME_RAM_DATAH, R100_cp_microcode[i][1]);
+- WREG32(RADEON_CP_ME_RAM_DATAL, R100_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R100;
+ } else if ((rdev->family == CHIP_R200) ||
+ (rdev->family == CHIP_RV250) ||
+ (rdev->family == CHIP_RV280) ||
+ (rdev->family == CHIP_RS300)) {
+ DRM_INFO("Loading R200 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- WREG32(RADEON_CP_ME_RAM_DATAH, R200_cp_microcode[i][1]);
+- WREG32(RADEON_CP_ME_RAM_DATAL, R200_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R200;
+ } else if ((rdev->family == CHIP_R300) ||
+ (rdev->family == CHIP_R350) ||
+ (rdev->family == CHIP_RV350) ||
+@@ -512,31 +574,19 @@ static void r100_cp_load_microcode(struct radeon_device *rdev)
+ (rdev->family == CHIP_RS400) ||
+ (rdev->family == CHIP_RS480)) {
+ DRM_INFO("Loading R300 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- WREG32(RADEON_CP_ME_RAM_DATAH, R300_cp_microcode[i][1]);
+- WREG32(RADEON_CP_ME_RAM_DATAL, R300_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R300;
+ } else if ((rdev->family == CHIP_R420) ||
+ (rdev->family == CHIP_R423) ||
+ (rdev->family == CHIP_RV410)) {
+ DRM_INFO("Loading R400 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- WREG32(RADEON_CP_ME_RAM_DATAH, R420_cp_microcode[i][1]);
+- WREG32(RADEON_CP_ME_RAM_DATAL, R420_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R420;
+ } else if ((rdev->family == CHIP_RS690) ||
+ (rdev->family == CHIP_RS740)) {
+ DRM_INFO("Loading RS690/RS740 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- WREG32(RADEON_CP_ME_RAM_DATAH, RS690_cp_microcode[i][1]);
+- WREG32(RADEON_CP_ME_RAM_DATAL, RS690_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_RS690;
+ } else if (rdev->family == CHIP_RS600) {
+ DRM_INFO("Loading RS600 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- WREG32(RADEON_CP_ME_RAM_DATAH, RS600_cp_microcode[i][1]);
+- WREG32(RADEON_CP_ME_RAM_DATAL, RS600_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_RS600;
+ } else if ((rdev->family == CHIP_RV515) ||
+ (rdev->family == CHIP_R520) ||
+ (rdev->family == CHIP_RV530) ||
+@@ -544,9 +594,43 @@ static void r100_cp_load_microcode(struct radeon_device *rdev)
+ (rdev->family == CHIP_RV560) ||
+ (rdev->family == CHIP_RV570)) {
+ DRM_INFO("Loading R500 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- WREG32(RADEON_CP_ME_RAM_DATAH, R520_cp_microcode[i][1]);
+- WREG32(RADEON_CP_ME_RAM_DATAL, R520_cp_microcode[i][0]);
++ fw_name = FIRMWARE_R520;
++ }
++
++ err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
++ platform_device_unregister(pdev);
++ if (err) {
++ printk(KERN_ERR "radeon_cp: Failed to load firmware \"%s\"\n",
++ fw_name);
++ } else if (rdev->me_fw->size % 8) {
++ printk(KERN_ERR
++ "radeon_cp: Bogus length %zu in firmware \"%s\"\n",
++ rdev->me_fw->size, fw_name);
++ err = -EINVAL;
++ release_firmware(rdev->me_fw);
++ rdev->me_fw = NULL;
++ }
++ return err;
++}
++static void r100_cp_load_microcode(struct radeon_device *rdev)
++{
++ const __be32 *fw_data;
++ int i, size;
++
++ if (r100_gui_wait_for_idle(rdev)) {
++ printk(KERN_WARNING "Failed to wait GUI idle while "
++ "programming pipes. Bad things might happen.\n");
++ }
++
++ if (rdev->me_fw) {
++ size = rdev->me_fw->size / 4;
++ fw_data = (const __be32 *)&rdev->me_fw->data[0];
++ WREG32(RADEON_CP_ME_RAM_ADDR, 0);
++ for (i = 0; i < size; i += 2) {
++ WREG32(RADEON_CP_ME_RAM_DATAH,
++ be32_to_cpup(&fw_data[i]));
++ WREG32(RADEON_CP_ME_RAM_DATAL,
++ be32_to_cpup(&fw_data[i + 1]));
+ }
+ }
+ }
+@@ -585,6 +669,15 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
+ } else {
+ DRM_INFO("radeon: cp idle (0x%08X)\n", tmp);
+ }
++
++ if (!rdev->me_fw) {
++ r = r100_cp_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++
+ /* Align ring size */
+ rb_bufsz = drm_order(ring_size / 8);
+ ring_size = (1 << (rb_bufsz + 1)) * 4;
+@@ -658,9 +751,11 @@ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size)
+
+ void r100_cp_fini(struct radeon_device *rdev)
+ {
++ if (r100_cp_wait_for_idle(rdev)) {
++ DRM_ERROR("Wait for CP idle timeout, shutting down CP.\n");
++ }
+ /* Disable ring */
+- rdev->cp.ready = false;
+- WREG32(RADEON_CP_CSQ_CNTL, 0);
++ r100_cp_disable(rdev);
+ radeon_ring_fini(rdev);
+ DRM_INFO("radeon: cp finalized\n");
+ }
+@@ -710,6 +805,12 @@ int r100_cp_reset(struct radeon_device *rdev)
+ return -1;
+ }
+
++void r100_cp_commit(struct radeon_device *rdev)
++{
++ WREG32(RADEON_CP_RB_WPTR, rdev->cp.wptr);
++ (void)RREG32(RADEON_CP_RB_WPTR);
++}
++
+
+ /*
+ * CS functions
+@@ -762,13 +863,11 @@ int r100_cs_parse_packet0(struct radeon_cs_parser *p,
+ void r100_cs_dump_packet(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ volatile uint32_t *ib;
+ unsigned i;
+ unsigned idx;
+
+ ib = p->ib->ptr;
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
+ idx = pkt->idx;
+ for (i = 0; i <= (pkt->count + 1); i++, idx++) {
+ DRM_INFO("ib[%d]=0x%08X\n", idx, ib[idx]);
+@@ -795,7 +894,7 @@ int r100_cs_packet_parse(struct radeon_cs_parser *p,
+ idx, ib_chunk->length_dw);
+ return -EINVAL;
+ }
+- header = ib_chunk->kdata[idx];
++ header = radeon_get_ib_value(p, idx);
+ pkt->idx = idx;
+ pkt->type = CP_PACKET_GET_TYPE(header);
+ pkt->count = CP_PACKET_GET_COUNT(header);
+@@ -838,7 +937,6 @@ int r100_cs_packet_parse(struct radeon_cs_parser *p,
+ */
+ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ struct drm_mode_object *obj;
+ struct drm_crtc *crtc;
+ struct radeon_crtc *radeon_crtc;
+@@ -846,8 +944,9 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
+ int crtc_id;
+ int r;
+ uint32_t header, h_idx, reg;
++ volatile uint32_t *ib;
+
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
++ ib = p->ib->ptr;
+
+ /* parse the wait until */
+ r = r100_cs_packet_parse(p, &waitreloc, p->idx);
+@@ -862,24 +961,24 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
+ return r;
+ }
+
+- if (ib_chunk->kdata[waitreloc.idx + 1] != RADEON_WAIT_CRTC_VLINE) {
++ if (radeon_get_ib_value(p, waitreloc.idx + 1) != RADEON_WAIT_CRTC_VLINE) {
+ DRM_ERROR("vline wait had illegal wait until\n");
+ r = -EINVAL;
+ return r;
+ }
+
+ /* jump over the NOP */
+- r = r100_cs_packet_parse(p, &p3reloc, p->idx);
++ r = r100_cs_packet_parse(p, &p3reloc, p->idx + waitreloc.count + 2);
+ if (r)
+ return r;
+
+ h_idx = p->idx - 2;
+- p->idx += waitreloc.count;
+- p->idx += p3reloc.count;
++ p->idx += waitreloc.count + 2;
++ p->idx += p3reloc.count + 2;
+
+- header = ib_chunk->kdata[h_idx];
+- crtc_id = ib_chunk->kdata[h_idx + 5];
+- reg = ib_chunk->kdata[h_idx] >> 2;
++ header = radeon_get_ib_value(p, h_idx);
++ crtc_id = radeon_get_ib_value(p, h_idx + 5);
++ reg = header >> 2;
+ mutex_lock(&p->rdev->ddev->mode_config.mutex);
+ obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
+ if (!obj) {
+@@ -893,16 +992,16 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
+
+ if (!crtc->enabled) {
+ /* if the CRTC isn't enabled - we need to nop out the wait until */
+- ib_chunk->kdata[h_idx + 2] = PACKET2(0);
+- ib_chunk->kdata[h_idx + 3] = PACKET2(0);
++ ib[h_idx + 2] = PACKET2(0);
++ ib[h_idx + 3] = PACKET2(0);
+ } else if (crtc_id == 1) {
+ switch (reg) {
+ case AVIVO_D1MODE_VLINE_START_END:
+- header &= R300_CP_PACKET0_REG_MASK;
++ header &= ~R300_CP_PACKET0_REG_MASK;
+ header |= AVIVO_D2MODE_VLINE_START_END >> 2;
+ break;
+ case RADEON_CRTC_GUI_TRIG_VLINE:
+- header &= R300_CP_PACKET0_REG_MASK;
++ header &= ~R300_CP_PACKET0_REG_MASK;
+ header |= RADEON_CRTC2_GUI_TRIG_VLINE >> 2;
+ break;
+ default:
+@@ -910,8 +1009,8 @@ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p)
+ r = -EINVAL;
+ goto out;
+ }
+- ib_chunk->kdata[h_idx] = header;
+- ib_chunk->kdata[h_idx + 3] |= RADEON_ENG_DISPLAY_SELECT_CRTC1;
++ ib[h_idx] = header;
++ ib[h_idx + 3] |= RADEON_ENG_DISPLAY_SELECT_CRTC1;
+ }
+ out:
+ mutex_unlock(&p->rdev->ddev->mode_config.mutex);
+@@ -932,7 +1031,6 @@ out:
+ int r100_cs_packet_next_reloc(struct radeon_cs_parser *p,
+ struct radeon_cs_reloc **cs_reloc)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ struct radeon_cs_chunk *relocs_chunk;
+ struct radeon_cs_packet p3reloc;
+ unsigned idx;
+@@ -943,7 +1041,6 @@ int r100_cs_packet_next_reloc(struct radeon_cs_parser *p,
+ return -EINVAL;
+ }
+ *cs_reloc = NULL;
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
+ relocs_chunk = &p->chunks[p->chunk_relocs_idx];
+ r = r100_cs_packet_parse(p, &p3reloc, p->idx);
+ if (r) {
+@@ -956,7 +1053,7 @@ int r100_cs_packet_next_reloc(struct radeon_cs_parser *p,
+ r100_cs_dump_packet(p, &p3reloc);
+ return -EINVAL;
+ }
+- idx = ib_chunk->kdata[p3reloc.idx + 1];
++ idx = radeon_get_ib_value(p, p3reloc.idx + 1);
+ if (idx >= relocs_chunk->length_dw) {
+ DRM_ERROR("Relocs at %d after relocations chunk end %d !\n",
+ idx, relocs_chunk->length_dw);
+@@ -968,147 +1065,357 @@ int r100_cs_packet_next_reloc(struct radeon_cs_parser *p,
+ return 0;
+ }
+
++static int r100_get_vtx_size(uint32_t vtx_fmt)
++{
++ int vtx_size;
++ vtx_size = 2;
++ /* ordered according to bits in spec */
++ if (vtx_fmt & RADEON_SE_VTX_FMT_W0)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_FPCOLOR)
++ vtx_size += 3;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_FPALPHA)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_PKCOLOR)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_FPSPEC)
++ vtx_size += 3;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_FPFOG)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_PKSPEC)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_ST0)
++ vtx_size += 2;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_ST1)
++ vtx_size += 2;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_Q1)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_ST2)
++ vtx_size += 2;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_Q2)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_ST3)
++ vtx_size += 2;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_Q3)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_Q0)
++ vtx_size++;
++ /* blend weight */
++ if (vtx_fmt & (0x7 << 15))
++ vtx_size += (vtx_fmt >> 15) & 0x7;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_N0)
++ vtx_size += 3;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_XY1)
++ vtx_size += 2;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_Z1)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_W1)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_N1)
++ vtx_size++;
++ if (vtx_fmt & RADEON_SE_VTX_FMT_Z)
++ vtx_size++;
++ return vtx_size;
++}
++
+ static int r100_packet0_check(struct radeon_cs_parser *p,
+- struct radeon_cs_packet *pkt)
++ struct radeon_cs_packet *pkt,
++ unsigned idx, unsigned reg)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ struct radeon_cs_reloc *reloc;
++ struct r100_cs_track *track;
+ volatile uint32_t *ib;
+ uint32_t tmp;
+- unsigned reg;
+- unsigned i;
+- unsigned idx;
+- bool onereg;
+ int r;
++ int i, face;
+ u32 tile_flags = 0;
++ u32 idx_value;
+
+ ib = p->ib->ptr;
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
+- idx = pkt->idx + 1;
+- reg = pkt->reg;
+- onereg = false;
+- if (CP_PACKET0_GET_ONE_REG_WR(ib_chunk->kdata[pkt->idx])) {
+- onereg = true;
+- }
+- for (i = 0; i <= pkt->count; i++, idx++, reg += 4) {
+- switch (reg) {
+- case RADEON_CRTC_GUI_TRIG_VLINE:
+- r = r100_cs_packet_parse_vline(p);
+- if (r) {
+- DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
+- idx, reg);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- break;
++ track = (struct r100_cs_track *)p->track;
++
++ idx_value = radeon_get_ib_value(p, idx);
++
++ switch (reg) {
++ case RADEON_CRTC_GUI_TRIG_VLINE:
++ r = r100_cs_packet_parse_vline(p);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ break;
+ /* FIXME: only allow PACKET3 blit? easier to check for out of
+ * range access */
+- case RADEON_DST_PITCH_OFFSET:
+- case RADEON_SRC_PITCH_OFFSET:
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
+- idx, reg);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- tmp = ib_chunk->kdata[idx] & 0x003fffff;
+- tmp += (((u32)reloc->lobj.gpu_offset) >> 10);
+-
+- if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO)
+- tile_flags |= RADEON_DST_TILE_MACRO;
+- if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO) {
+- if (reg == RADEON_SRC_PITCH_OFFSET) {
+- DRM_ERROR("Cannot src blit from microtiled surface\n");
+- r100_cs_dump_packet(p, pkt);
+- return -EINVAL;
+- }
+- tile_flags |= RADEON_DST_TILE_MICRO;
+- }
++ case RADEON_DST_PITCH_OFFSET:
++ case RADEON_SRC_PITCH_OFFSET:
++ r = r100_reloc_pitch_offset(p, pkt, idx, reg);
++ if (r)
++ return r;
++ break;
++ case RADEON_RB3D_DEPTHOFFSET:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->zb.robj = reloc->robj;
++ track->zb.offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ break;
++ case RADEON_RB3D_COLOROFFSET:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->cb[0].robj = reloc->robj;
++ track->cb[0].offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ break;
++ case RADEON_PP_TXOFFSET_0:
++ case RADEON_PP_TXOFFSET_1:
++ case RADEON_PP_TXOFFSET_2:
++ i = (reg - RADEON_PP_TXOFFSET_0) / 24;
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ track->textures[i].robj = reloc->robj;
++ break;
++ case RADEON_PP_CUBIC_OFFSET_T0_0:
++ case RADEON_PP_CUBIC_OFFSET_T0_1:
++ case RADEON_PP_CUBIC_OFFSET_T0_2:
++ case RADEON_PP_CUBIC_OFFSET_T0_3:
++ case RADEON_PP_CUBIC_OFFSET_T0_4:
++ i = (reg - RADEON_PP_CUBIC_OFFSET_T0_0) / 4;
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->textures[0].cube_info[i].offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ track->textures[0].cube_info[i].robj = reloc->robj;
++ break;
++ case RADEON_PP_CUBIC_OFFSET_T1_0:
++ case RADEON_PP_CUBIC_OFFSET_T1_1:
++ case RADEON_PP_CUBIC_OFFSET_T1_2:
++ case RADEON_PP_CUBIC_OFFSET_T1_3:
++ case RADEON_PP_CUBIC_OFFSET_T1_4:
++ i = (reg - RADEON_PP_CUBIC_OFFSET_T1_0) / 4;
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->textures[1].cube_info[i].offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ track->textures[1].cube_info[i].robj = reloc->robj;
++ break;
++ case RADEON_PP_CUBIC_OFFSET_T2_0:
++ case RADEON_PP_CUBIC_OFFSET_T2_1:
++ case RADEON_PP_CUBIC_OFFSET_T2_2:
++ case RADEON_PP_CUBIC_OFFSET_T2_3:
++ case RADEON_PP_CUBIC_OFFSET_T2_4:
++ i = (reg - RADEON_PP_CUBIC_OFFSET_T2_0) / 4;
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->textures[2].cube_info[i].offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ track->textures[2].cube_info[i].robj = reloc->robj;
++ break;
++ case RADEON_RE_WIDTH_HEIGHT:
++ track->maxy = ((idx_value >> 16) & 0x7FF);
++ break;
++ case RADEON_RB3D_COLORPITCH:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
+
+- tmp |= tile_flags;
+- ib[idx] = (ib_chunk->kdata[idx] & 0x3fc00000) | tmp;
+- break;
+- case RADEON_RB3D_DEPTHOFFSET:
+- case RADEON_RB3D_COLOROFFSET:
+- case R300_RB3D_COLOROFFSET0:
+- case R300_ZB_DEPTHOFFSET:
+- case R200_PP_TXOFFSET_0:
+- case R200_PP_TXOFFSET_1:
+- case R200_PP_TXOFFSET_2:
+- case R200_PP_TXOFFSET_3:
+- case R200_PP_TXOFFSET_4:
+- case R200_PP_TXOFFSET_5:
+- case RADEON_PP_TXOFFSET_0:
+- case RADEON_PP_TXOFFSET_1:
+- case RADEON_PP_TXOFFSET_2:
+- case R300_TX_OFFSET_0:
+- case R300_TX_OFFSET_0+4:
+- case R300_TX_OFFSET_0+8:
+- case R300_TX_OFFSET_0+12:
+- case R300_TX_OFFSET_0+16:
+- case R300_TX_OFFSET_0+20:
+- case R300_TX_OFFSET_0+24:
+- case R300_TX_OFFSET_0+28:
+- case R300_TX_OFFSET_0+32:
+- case R300_TX_OFFSET_0+36:
+- case R300_TX_OFFSET_0+40:
+- case R300_TX_OFFSET_0+44:
+- case R300_TX_OFFSET_0+48:
+- case R300_TX_OFFSET_0+52:
+- case R300_TX_OFFSET_0+56:
+- case R300_TX_OFFSET_0+60:
+- /* rn50 has no 3D engine so fail on any 3d setup */
+- if (ASIC_IS_RN50(p->rdev)) {
+- DRM_ERROR("attempt to use RN50 3D engine failed\n");
+- return -EINVAL;
+- }
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
+- idx, reg);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset);
+- break;
+- case R300_RB3D_COLORPITCH0:
+- case RADEON_RB3D_COLORPITCH:
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
+- idx, reg);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
++ if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO)
++ tile_flags |= RADEON_COLOR_TILE_ENABLE;
++ if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO)
++ tile_flags |= RADEON_COLOR_MICROTILE_ENABLE;
+
+- if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO)
+- tile_flags |= RADEON_COLOR_TILE_ENABLE;
+- if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO)
+- tile_flags |= RADEON_COLOR_MICROTILE_ENABLE;
++ tmp = idx_value & ~(0x7 << 16);
++ tmp |= tile_flags;
++ ib[idx] = tmp;
+
+- tmp = ib_chunk->kdata[idx] & ~(0x7 << 16);
+- tmp |= tile_flags;
+- ib[idx] = tmp;
++ track->cb[0].pitch = idx_value & RADEON_COLORPITCH_MASK;
++ break;
++ case RADEON_RB3D_DEPTHPITCH:
++ track->zb.pitch = idx_value & RADEON_DEPTHPITCH_MASK;
++ break;
++ case RADEON_RB3D_CNTL:
++ switch ((idx_value >> RADEON_RB3D_COLOR_FORMAT_SHIFT) & 0x1f) {
++ case 7:
++ case 8:
++ case 9:
++ case 11:
++ case 12:
++ track->cb[0].cpp = 1;
+ break;
+- case RADEON_RB3D_ZPASS_ADDR:
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
+- idx, reg);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset);
++ case 3:
++ case 4:
++ case 15:
++ track->cb[0].cpp = 2;
++ break;
++ case 6:
++ track->cb[0].cpp = 4;
++ break;
++ default:
++ DRM_ERROR("Invalid color buffer format (%d) !\n",
++ ((idx_value >> RADEON_RB3D_COLOR_FORMAT_SHIFT) & 0x1f));
++ return -EINVAL;
++ }
++ track->z_enabled = !!(idx_value & RADEON_Z_ENABLE);
++ break;
++ case RADEON_RB3D_ZSTENCILCNTL:
++ switch (idx_value & 0xf) {
++ case 0:
++ track->zb.cpp = 2;
++ break;
++ case 2:
++ case 3:
++ case 4:
++ case 5:
++ case 9:
++ case 11:
++ track->zb.cpp = 4;
+ break;
+ default:
+- /* FIXME: we don't want to allow anyothers packet */
+ break;
+ }
+- if (onereg) {
+- /* FIXME: forbid onereg write to register on relocate */
++ break;
++ case RADEON_RB3D_ZPASS_ADDR:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ break;
++ case RADEON_PP_CNTL:
++ {
++ uint32_t temp = idx_value >> 4;
++ for (i = 0; i < track->num_texture; i++)
++ track->textures[i].enabled = !!(temp & (1 << i));
++ }
++ break;
++ case RADEON_SE_VF_CNTL:
++ track->vap_vf_cntl = idx_value;
++ break;
++ case RADEON_SE_VTX_FMT:
++ track->vtx_size = r100_get_vtx_size(idx_value);
++ break;
++ case RADEON_PP_TEX_SIZE_0:
++ case RADEON_PP_TEX_SIZE_1:
++ case RADEON_PP_TEX_SIZE_2:
++ i = (reg - RADEON_PP_TEX_SIZE_0) / 8;
++ track->textures[i].width = (idx_value & RADEON_TEX_USIZE_MASK) + 1;
++ track->textures[i].height = ((idx_value & RADEON_TEX_VSIZE_MASK) >> RADEON_TEX_VSIZE_SHIFT) + 1;
++ break;
++ case RADEON_PP_TEX_PITCH_0:
++ case RADEON_PP_TEX_PITCH_1:
++ case RADEON_PP_TEX_PITCH_2:
++ i = (reg - RADEON_PP_TEX_PITCH_0) / 8;
++ track->textures[i].pitch = idx_value + 32;
++ break;
++ case RADEON_PP_TXFILTER_0:
++ case RADEON_PP_TXFILTER_1:
++ case RADEON_PP_TXFILTER_2:
++ i = (reg - RADEON_PP_TXFILTER_0) / 24;
++ track->textures[i].num_levels = ((idx_value & RADEON_MAX_MIP_LEVEL_MASK)
++ >> RADEON_MAX_MIP_LEVEL_SHIFT);
++ tmp = (idx_value >> 23) & 0x7;
++ if (tmp == 2 || tmp == 6)
++ track->textures[i].roundup_w = false;
++ tmp = (idx_value >> 27) & 0x7;
++ if (tmp == 2 || tmp == 6)
++ track->textures[i].roundup_h = false;
++ break;
++ case RADEON_PP_TXFORMAT_0:
++ case RADEON_PP_TXFORMAT_1:
++ case RADEON_PP_TXFORMAT_2:
++ i = (reg - RADEON_PP_TXFORMAT_0) / 24;
++ if (idx_value & RADEON_TXFORMAT_NON_POWER2) {
++ track->textures[i].use_pitch = 1;
++ } else {
++ track->textures[i].use_pitch = 0;
++ track->textures[i].width = 1 << ((idx_value >> RADEON_TXFORMAT_WIDTH_SHIFT) & RADEON_TXFORMAT_WIDTH_MASK);
++ track->textures[i].height = 1 << ((idx_value >> RADEON_TXFORMAT_HEIGHT_SHIFT) & RADEON_TXFORMAT_HEIGHT_MASK);
++ }
++ if (idx_value & RADEON_TXFORMAT_CUBIC_MAP_ENABLE)
++ track->textures[i].tex_coord_type = 2;
++ switch ((idx_value & RADEON_TXFORMAT_FORMAT_MASK)) {
++ case RADEON_TXFORMAT_I8:
++ case RADEON_TXFORMAT_RGB332:
++ case RADEON_TXFORMAT_Y8:
++ track->textures[i].cpp = 1;
++ break;
++ case RADEON_TXFORMAT_AI88:
++ case RADEON_TXFORMAT_ARGB1555:
++ case RADEON_TXFORMAT_RGB565:
++ case RADEON_TXFORMAT_ARGB4444:
++ case RADEON_TXFORMAT_VYUY422:
++ case RADEON_TXFORMAT_YVYU422:
++ case RADEON_TXFORMAT_DXT1:
++ case RADEON_TXFORMAT_SHADOW16:
++ case RADEON_TXFORMAT_LDUDV655:
++ case RADEON_TXFORMAT_DUDV88:
++ track->textures[i].cpp = 2;
++ break;
++ case RADEON_TXFORMAT_ARGB8888:
++ case RADEON_TXFORMAT_RGBA8888:
++ case RADEON_TXFORMAT_DXT23:
++ case RADEON_TXFORMAT_DXT45:
++ case RADEON_TXFORMAT_SHADOW32:
++ case RADEON_TXFORMAT_LDUDUV8888:
++ track->textures[i].cpp = 4;
+ break;
+ }
++ track->textures[i].cube_info[4].width = 1 << ((idx_value >> 16) & 0xf);
++ track->textures[i].cube_info[4].height = 1 << ((idx_value >> 20) & 0xf);
++ break;
++ case RADEON_PP_CUBIC_FACES_0:
++ case RADEON_PP_CUBIC_FACES_1:
++ case RADEON_PP_CUBIC_FACES_2:
++ tmp = idx_value;
++ i = (reg - RADEON_PP_CUBIC_FACES_0) / 4;
++ for (face = 0; face < 4; face++) {
++ track->textures[i].cube_info[face].width = 1 << ((tmp >> (face * 8)) & 0xf);
++ track->textures[i].cube_info[face].height = 1 << ((tmp >> ((face * 8) + 4)) & 0xf);
++ }
++ break;
++ default:
++ printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n",
++ reg, idx);
++ return -EINVAL;
+ }
+ return 0;
+ }
+@@ -1117,15 +1424,14 @@ int r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt,
+ struct radeon_object *robj)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ unsigned idx;
+-
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
++ u32 value;
+ idx = pkt->idx + 1;
+- if ((ib_chunk->kdata[idx+2] + 1) > radeon_object_size(robj)) {
++ value = radeon_get_ib_value(p, idx + 2);
++ if ((value + 1) > radeon_object_size(robj)) {
+ DRM_ERROR("[drm] Buffer too small for PACKET3 INDX_BUFFER "
+ "(need %u have %lu) !\n",
+- ib_chunk->kdata[idx+2] + 1,
++ value + 1,
+ radeon_object_size(robj));
+ return -EINVAL;
+ }
+@@ -1135,47 +1441,20 @@ int r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p,
+ static int r100_packet3_check(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ struct radeon_cs_reloc *reloc;
++ struct r100_cs_track *track;
+ unsigned idx;
+- unsigned i, c;
+ volatile uint32_t *ib;
+ int r;
+
+ ib = p->ib->ptr;
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
+ idx = pkt->idx + 1;
++ track = (struct r100_cs_track *)p->track;
+ switch (pkt->opcode) {
+ case PACKET3_3D_LOAD_VBPNTR:
+- c = ib_chunk->kdata[idx++];
+- for (i = 0; i < (c - 1); i += 2, idx += 3) {
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for packet3 %d\n",
+- pkt->opcode);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx+1] = ib_chunk->kdata[idx+1] + ((u32)reloc->lobj.gpu_offset);
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for packet3 %d\n",
+- pkt->opcode);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx+2] = ib_chunk->kdata[idx+2] + ((u32)reloc->lobj.gpu_offset);
+- }
+- if (c & 1) {
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for packet3 %d\n",
+- pkt->opcode);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx+1] = ib_chunk->kdata[idx+1] + ((u32)reloc->lobj.gpu_offset);
+- }
++ r = r100_packet3_load_vbpntr(p, pkt, idx);
++ if (r)
++ return r;
+ break;
+ case PACKET3_INDX_BUFFER:
+ r = r100_cs_packet_next_reloc(p, &reloc);
+@@ -1184,14 +1463,13 @@ static int r100_packet3_check(struct radeon_cs_parser *p,
+ r100_cs_dump_packet(p, pkt);
+ return r;
+ }
+- ib[idx+1] = ib_chunk->kdata[idx+1] + ((u32)reloc->lobj.gpu_offset);
++ ib[idx+1] = radeon_get_ib_value(p, idx+1) + ((u32)reloc->lobj.gpu_offset);
+ r = r100_cs_track_check_pkt3_indx_buffer(p, pkt, reloc->robj);
+ if (r) {
+ return r;
+ }
+ break;
+ case 0x23:
+- /* FIXME: cleanup */
+ /* 3D_RNDR_GEN_INDX_PRIM on r100/r200 */
+ r = r100_cs_packet_next_reloc(p, &reloc);
+ if (r) {
+@@ -1199,19 +1477,72 @@ static int r100_packet3_check(struct radeon_cs_parser *p,
+ r100_cs_dump_packet(p, pkt);
+ return r;
+ }
+- ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset);
++ ib[idx] = radeon_get_ib_value(p, idx) + ((u32)reloc->lobj.gpu_offset);
++ track->num_arrays = 1;
++ track->vtx_size = r100_get_vtx_size(radeon_get_ib_value(p, idx + 2));
++
++ track->arrays[0].robj = reloc->robj;
++ track->arrays[0].esize = track->vtx_size;
++
++ track->max_indx = radeon_get_ib_value(p, idx+1);
++
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx+3);
++ track->immd_dwords = pkt->count - 1;
++ r = r100_cs_track_check(p->rdev, track);
++ if (r)
++ return r;
+ break;
+ case PACKET3_3D_DRAW_IMMD:
++ if (((radeon_get_ib_value(p, idx + 1) >> 4) & 0x3) != 3) {
++ DRM_ERROR("PRIM_WALK must be 3 for IMMD draw\n");
++ return -EINVAL;
++ }
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1);
++ track->immd_dwords = pkt->count - 1;
++ r = r100_cs_track_check(p->rdev, track);
++ if (r)
++ return r;
++ break;
+ /* triggers drawing using in-packet vertex data */
+ case PACKET3_3D_DRAW_IMMD_2:
++ if (((radeon_get_ib_value(p, idx) >> 4) & 0x3) != 3) {
++ DRM_ERROR("PRIM_WALK must be 3 for IMMD draw\n");
++ return -EINVAL;
++ }
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx);
++ track->immd_dwords = pkt->count;
++ r = r100_cs_track_check(p->rdev, track);
++ if (r)
++ return r;
++ break;
+ /* triggers drawing using in-packet vertex data */
+ case PACKET3_3D_DRAW_VBUF_2:
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx);
++ r = r100_cs_track_check(p->rdev, track);
++ if (r)
++ return r;
++ break;
+ /* triggers drawing of vertex buffers setup elsewhere */
+ case PACKET3_3D_DRAW_INDX_2:
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx);
++ r = r100_cs_track_check(p->rdev, track);
++ if (r)
++ return r;
++ break;
+ /* triggers drawing using indices to vertex buffer */
+ case PACKET3_3D_DRAW_VBUF:
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1);
++ r = r100_cs_track_check(p->rdev, track);
++ if (r)
++ return r;
++ break;
+ /* triggers drawing of vertex buffers setup elsewhere */
+ case PACKET3_3D_DRAW_INDX:
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1);
++ r = r100_cs_track_check(p->rdev, track);
++ if (r)
++ return r;
++ break;
+ /* triggers drawing using indices to vertex buffer */
+ case PACKET3_NOP:
+ break;
+@@ -1225,8 +1556,12 @@ static int r100_packet3_check(struct radeon_cs_parser *p,
+ int r100_cs_parse(struct radeon_cs_parser *p)
+ {
+ struct radeon_cs_packet pkt;
++ struct r100_cs_track *track;
+ int r;
+
++ track = kzalloc(sizeof(*track), GFP_KERNEL);
++ r100_cs_track_clear(p->rdev, track);
++ p->track = track;
+ do {
+ r = r100_cs_packet_parse(p, &pkt, p->idx);
+ if (r) {
+@@ -1235,7 +1570,16 @@ int r100_cs_parse(struct radeon_cs_parser *p)
+ p->idx += pkt.count + 2;
+ switch (pkt.type) {
+ case PACKET_TYPE0:
+- r = r100_packet0_check(p, &pkt);
++ if (p->rdev->family >= CHIP_R200)
++ r = r100_cs_parse_packet0(p, &pkt,
++ p->rdev->config.r100.reg_safe_bm,
++ p->rdev->config.r100.reg_safe_bm_size,
++ &r200_packet0_check);
++ else
++ r = r100_cs_parse_packet0(p, &pkt,
++ p->rdev->config.r100.reg_safe_bm,
++ p->rdev->config.r100.reg_safe_bm_size,
++ &r100_packet0_check);
+ break;
+ case PACKET_TYPE2:
+ break;
+@@ -1634,6 +1978,15 @@ void r100_pll_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
+
+ int r100_init(struct radeon_device *rdev)
+ {
++ if (ASIC_IS_RN50(rdev)) {
++ rdev->config.r100.reg_safe_bm = rn50_reg_safe_bm;
++ rdev->config.r100.reg_safe_bm_size = ARRAY_SIZE(rn50_reg_safe_bm);
++ } else if (rdev->family < CHIP_R200) {
++ rdev->config.r100.reg_safe_bm = r100_reg_safe_bm;
++ rdev->config.r100.reg_safe_bm_size = ARRAY_SIZE(r100_reg_safe_bm);
++ } else {
++ return r200_init(rdev);
++ }
+ return 0;
+ }
+
+@@ -1839,6 +2192,11 @@ int r100_set_surface_reg(struct radeon_device *rdev, int reg,
+ flags |= R300_SURF_TILE_MICRO;
+ }
+
++ if (tiling_flags & RADEON_TILING_SWAP_16BIT)
++ flags |= RADEON_SURF_AP0_SWP_16BPP | RADEON_SURF_AP1_SWP_16BPP;
++ if (tiling_flags & RADEON_TILING_SWAP_32BIT)
++ flags |= RADEON_SURF_AP0_SWP_32BPP | RADEON_SURF_AP1_SWP_32BPP;
++
+ DRM_DEBUG("writing surface %d %d %x %x\n", reg, flags, offset, offset+obj_size-1);
+ WREG32(RADEON_SURFACE0_INFO + surf_index, flags);
+ WREG32(RADEON_SURFACE0_LOWER_BOUND + surf_index, offset);
+@@ -2334,3 +2692,460 @@ void r100_bandwidth_update(struct radeon_device *rdev)
+ (unsigned int)RREG32(RADEON_GRPH2_BUFFER_CNTL));
+ }
+ }
++
++static inline void r100_cs_track_texture_print(struct r100_cs_track_texture *t)
++{
++ DRM_ERROR("pitch %d\n", t->pitch);
++ DRM_ERROR("width %d\n", t->width);
++ DRM_ERROR("height %d\n", t->height);
++ DRM_ERROR("num levels %d\n", t->num_levels);
++ DRM_ERROR("depth %d\n", t->txdepth);
++ DRM_ERROR("bpp %d\n", t->cpp);
++ DRM_ERROR("coordinate type %d\n", t->tex_coord_type);
++ DRM_ERROR("width round to power of 2 %d\n", t->roundup_w);
++ DRM_ERROR("height round to power of 2 %d\n", t->roundup_h);
++}
++
++static int r100_cs_track_cube(struct radeon_device *rdev,
++ struct r100_cs_track *track, unsigned idx)
++{
++ unsigned face, w, h;
++ struct radeon_object *cube_robj;
++ unsigned long size;
++
++ for (face = 0; face < 5; face++) {
++ cube_robj = track->textures[idx].cube_info[face].robj;
++ w = track->textures[idx].cube_info[face].width;
++ h = track->textures[idx].cube_info[face].height;
++
++ size = w * h;
++ size *= track->textures[idx].cpp;
++
++ size += track->textures[idx].cube_info[face].offset;
++
++ if (size > radeon_object_size(cube_robj)) {
++ DRM_ERROR("Cube texture offset greater than object size %lu %lu\n",
++ size, radeon_object_size(cube_robj));
++ r100_cs_track_texture_print(&track->textures[idx]);
++ return -1;
++ }
++ }
++ return 0;
++}
++
++static int r100_cs_track_texture_check(struct radeon_device *rdev,
++ struct r100_cs_track *track)
++{
++ struct radeon_object *robj;
++ unsigned long size;
++ unsigned u, i, w, h;
++ int ret;
++
++ for (u = 0; u < track->num_texture; u++) {
++ if (!track->textures[u].enabled)
++ continue;
++ robj = track->textures[u].robj;
++ if (robj == NULL) {
++ DRM_ERROR("No texture bound to unit %u\n", u);
++ return -EINVAL;
++ }
++ size = 0;
++ for (i = 0; i <= track->textures[u].num_levels; i++) {
++ if (track->textures[u].use_pitch) {
++ if (rdev->family < CHIP_R300)
++ w = (track->textures[u].pitch / track->textures[u].cpp) / (1 << i);
++ else
++ w = track->textures[u].pitch / (1 << i);
++ } else {
++ w = track->textures[u].width / (1 << i);
++ if (rdev->family >= CHIP_RV515)
++ w |= track->textures[u].width_11;
++ if (track->textures[u].roundup_w)
++ w = roundup_pow_of_two(w);
++ }
++ h = track->textures[u].height / (1 << i);
++ if (rdev->family >= CHIP_RV515)
++ h |= track->textures[u].height_11;
++ if (track->textures[u].roundup_h)
++ h = roundup_pow_of_two(h);
++ size += w * h;
++ }
++ size *= track->textures[u].cpp;
++ switch (track->textures[u].tex_coord_type) {
++ case 0:
++ break;
++ case 1:
++ size *= (1 << track->textures[u].txdepth);
++ break;
++ case 2:
++ if (track->separate_cube) {
++ ret = r100_cs_track_cube(rdev, track, u);
++ if (ret)
++ return ret;
++ } else
++ size *= 6;
++ break;
++ default:
++ DRM_ERROR("Invalid texture coordinate type %u for unit "
++ "%u\n", track->textures[u].tex_coord_type, u);
++ return -EINVAL;
++ }
++ if (size > radeon_object_size(robj)) {
++ DRM_ERROR("Texture of unit %u needs %lu bytes but is "
++ "%lu\n", u, size, radeon_object_size(robj));
++ r100_cs_track_texture_print(&track->textures[u]);
++ return -EINVAL;
++ }
++ }
++ return 0;
++}
++
++int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track)
++{
++ unsigned i;
++ unsigned long size;
++ unsigned prim_walk;
++ unsigned nverts;
++
++ for (i = 0; i < track->num_cb; i++) {
++ if (track->cb[i].robj == NULL) {
++ DRM_ERROR("[drm] No buffer for color buffer %d !\n", i);
++ return -EINVAL;
++ }
++ size = track->cb[i].pitch * track->cb[i].cpp * track->maxy;
++ size += track->cb[i].offset;
++ if (size > radeon_object_size(track->cb[i].robj)) {
++ DRM_ERROR("[drm] Buffer too small for color buffer %d "
++ "(need %lu have %lu) !\n", i, size,
++ radeon_object_size(track->cb[i].robj));
++ DRM_ERROR("[drm] color buffer %d (%u %u %u %u)\n",
++ i, track->cb[i].pitch, track->cb[i].cpp,
++ track->cb[i].offset, track->maxy);
++ return -EINVAL;
++ }
++ }
++ if (track->z_enabled) {
++ if (track->zb.robj == NULL) {
++ DRM_ERROR("[drm] No buffer for z buffer !\n");
++ return -EINVAL;
++ }
++ size = track->zb.pitch * track->zb.cpp * track->maxy;
++ size += track->zb.offset;
++ if (size > radeon_object_size(track->zb.robj)) {
++ DRM_ERROR("[drm] Buffer too small for z buffer "
++ "(need %lu have %lu) !\n", size,
++ radeon_object_size(track->zb.robj));
++ DRM_ERROR("[drm] zbuffer (%u %u %u %u)\n",
++ track->zb.pitch, track->zb.cpp,
++ track->zb.offset, track->maxy);
++ return -EINVAL;
++ }
++ }
++ prim_walk = (track->vap_vf_cntl >> 4) & 0x3;
++ nverts = (track->vap_vf_cntl >> 16) & 0xFFFF;
++ switch (prim_walk) {
++ case 1:
++ for (i = 0; i < track->num_arrays; i++) {
++ size = track->arrays[i].esize * track->max_indx * 4;
++ if (track->arrays[i].robj == NULL) {
++ DRM_ERROR("(PW %u) Vertex array %u no buffer "
++ "bound\n", prim_walk, i);
++ return -EINVAL;
++ }
++ if (size > radeon_object_size(track->arrays[i].robj)) {
++ DRM_ERROR("(PW %u) Vertex array %u need %lu dwords "
++ "have %lu dwords\n", prim_walk, i,
++ size >> 2,
++ radeon_object_size(track->arrays[i].robj) >> 2);
++ DRM_ERROR("Max indices %u\n", track->max_indx);
++ return -EINVAL;
++ }
++ }
++ break;
++ case 2:
++ for (i = 0; i < track->num_arrays; i++) {
++ size = track->arrays[i].esize * (nverts - 1) * 4;
++ if (track->arrays[i].robj == NULL) {
++ DRM_ERROR("(PW %u) Vertex array %u no buffer "
++ "bound\n", prim_walk, i);
++ return -EINVAL;
++ }
++ if (size > radeon_object_size(track->arrays[i].robj)) {
++ DRM_ERROR("(PW %u) Vertex array %u need %lu dwords "
++ "have %lu dwords\n", prim_walk, i, size >> 2,
++ radeon_object_size(track->arrays[i].robj) >> 2);
++ return -EINVAL;
++ }
++ }
++ break;
++ case 3:
++ size = track->vtx_size * nverts;
++ if (size != track->immd_dwords) {
++ DRM_ERROR("IMMD draw %u dwors but needs %lu dwords\n",
++ track->immd_dwords, size);
++ DRM_ERROR("VAP_VF_CNTL.NUM_VERTICES %u, VTX_SIZE %u\n",
++ nverts, track->vtx_size);
++ return -EINVAL;
++ }
++ break;
++ default:
++ DRM_ERROR("[drm] Invalid primitive walk %d for VAP_VF_CNTL\n",
++ prim_walk);
++ return -EINVAL;
++ }
++ return r100_cs_track_texture_check(rdev, track);
++}
++
++void r100_cs_track_clear(struct radeon_device *rdev, struct r100_cs_track *track)
++{
++ unsigned i, face;
++
++ if (rdev->family < CHIP_R300) {
++ track->num_cb = 1;
++ if (rdev->family <= CHIP_RS200)
++ track->num_texture = 3;
++ else
++ track->num_texture = 6;
++ track->maxy = 2048;
++ track->separate_cube = 1;
++ } else {
++ track->num_cb = 4;
++ track->num_texture = 16;
++ track->maxy = 4096;
++ track->separate_cube = 0;
++ }
++
++ for (i = 0; i < track->num_cb; i++) {
++ track->cb[i].robj = NULL;
++ track->cb[i].pitch = 8192;
++ track->cb[i].cpp = 16;
++ track->cb[i].offset = 0;
++ }
++ track->z_enabled = true;
++ track->zb.robj = NULL;
++ track->zb.pitch = 8192;
++ track->zb.cpp = 4;
++ track->zb.offset = 0;
++ track->vtx_size = 0x7F;
++ track->immd_dwords = 0xFFFFFFFFUL;
++ track->num_arrays = 11;
++ track->max_indx = 0x00FFFFFFUL;
++ for (i = 0; i < track->num_arrays; i++) {
++ track->arrays[i].robj = NULL;
++ track->arrays[i].esize = 0x7F;
++ }
++ for (i = 0; i < track->num_texture; i++) {
++ track->textures[i].pitch = 16536;
++ track->textures[i].width = 16536;
++ track->textures[i].height = 16536;
++ track->textures[i].width_11 = 1 << 11;
++ track->textures[i].height_11 = 1 << 11;
++ track->textures[i].num_levels = 12;
++ if (rdev->family <= CHIP_RS200) {
++ track->textures[i].tex_coord_type = 0;
++ track->textures[i].txdepth = 0;
++ } else {
++ track->textures[i].txdepth = 16;
++ track->textures[i].tex_coord_type = 1;
++ }
++ track->textures[i].cpp = 64;
++ track->textures[i].robj = NULL;
++ /* CS IB emission code makes sure texture unit are disabled */
++ track->textures[i].enabled = false;
++ track->textures[i].roundup_w = true;
++ track->textures[i].roundup_h = true;
++ if (track->separate_cube)
++ for (face = 0; face < 5; face++) {
++ track->textures[i].cube_info[face].robj = NULL;
++ track->textures[i].cube_info[face].width = 16536;
++ track->textures[i].cube_info[face].height = 16536;
++ track->textures[i].cube_info[face].offset = 0;
++ }
++ }
++}
++
++int r100_ring_test(struct radeon_device *rdev)
++{
++ uint32_t scratch;
++ uint32_t tmp = 0;
++ unsigned i;
++ int r;
++
++ r = radeon_scratch_get(rdev, &scratch);
++ if (r) {
++ DRM_ERROR("radeon: cp failed to get scratch reg (%d).\n", r);
++ return r;
++ }
++ WREG32(scratch, 0xCAFEDEAD);
++ r = radeon_ring_lock(rdev, 2);
++ if (r) {
++ DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
++ radeon_scratch_free(rdev, scratch);
++ return r;
++ }
++ radeon_ring_write(rdev, PACKET0(scratch, 0));
++ radeon_ring_write(rdev, 0xDEADBEEF);
++ radeon_ring_unlock_commit(rdev);
++ for (i = 0; i < rdev->usec_timeout; i++) {
++ tmp = RREG32(scratch);
++ if (tmp == 0xDEADBEEF) {
++ break;
++ }
++ DRM_UDELAY(1);
++ }
++ if (i < rdev->usec_timeout) {
++ DRM_INFO("ring test succeeded in %d usecs\n", i);
++ } else {
++ DRM_ERROR("radeon: ring test failed (sracth(0x%04X)=0x%08X)\n",
++ scratch, tmp);
++ r = -EINVAL;
++ }
++ radeon_scratch_free(rdev, scratch);
++ return r;
++}
++
++void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib)
++{
++ radeon_ring_write(rdev, PACKET0(RADEON_CP_IB_BASE, 1));
++ radeon_ring_write(rdev, ib->gpu_addr);
++ radeon_ring_write(rdev, ib->length_dw);
++}
++
++int r100_ib_test(struct radeon_device *rdev)
++{
++ struct radeon_ib *ib;
++ uint32_t scratch;
++ uint32_t tmp = 0;
++ unsigned i;
++ int r;
++
++ r = radeon_scratch_get(rdev, &scratch);
++ if (r) {
++ DRM_ERROR("radeon: failed to get scratch reg (%d).\n", r);
++ return r;
++ }
++ WREG32(scratch, 0xCAFEDEAD);
++ r = radeon_ib_get(rdev, &ib);
++ if (r) {
++ return r;
++ }
++ ib->ptr[0] = PACKET0(scratch, 0);
++ ib->ptr[1] = 0xDEADBEEF;
++ ib->ptr[2] = PACKET2(0);
++ ib->ptr[3] = PACKET2(0);
++ ib->ptr[4] = PACKET2(0);
++ ib->ptr[5] = PACKET2(0);
++ ib->ptr[6] = PACKET2(0);
++ ib->ptr[7] = PACKET2(0);
++ ib->length_dw = 8;
++ r = radeon_ib_schedule(rdev, ib);
++ if (r) {
++ radeon_scratch_free(rdev, scratch);
++ radeon_ib_free(rdev, &ib);
++ return r;
++ }
++ r = radeon_fence_wait(ib->fence, false);
++ if (r) {
++ return r;
++ }
++ for (i = 0; i < rdev->usec_timeout; i++) {
++ tmp = RREG32(scratch);
++ if (tmp == 0xDEADBEEF) {
++ break;
++ }
++ DRM_UDELAY(1);
++ }
++ if (i < rdev->usec_timeout) {
++ DRM_INFO("ib test succeeded in %u usecs\n", i);
++ } else {
++ DRM_ERROR("radeon: ib test failed (sracth(0x%04X)=0x%08X)\n",
++ scratch, tmp);
++ r = -EINVAL;
++ }
++ radeon_scratch_free(rdev, scratch);
++ radeon_ib_free(rdev, &ib);
++ return r;
++}
++
++void r100_ib_fini(struct radeon_device *rdev)
++{
++ radeon_ib_pool_fini(rdev);
++}
++
++int r100_ib_init(struct radeon_device *rdev)
++{
++ int r;
++
++ r = radeon_ib_pool_init(rdev);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing IB pool (%d).\n", r);
++ r100_ib_fini(rdev);
++ return r;
++ }
++ r = r100_ib_test(rdev);
++ if (r) {
++ dev_err(rdev->dev, "failled testing IB (%d).\n", r);
++ r100_ib_fini(rdev);
++ return r;
++ }
++ return 0;
++}
++
++void r100_mc_stop(struct radeon_device *rdev, struct r100_mc_save *save)
++{
++ /* Shutdown CP we shouldn't need to do that but better be safe than
++ * sorry
++ */
++ rdev->cp.ready = false;
++ WREG32(R_000740_CP_CSQ_CNTL, 0);
++
++ /* Save few CRTC registers */
++ save->GENMO_WT = RREG32(R_0003C0_GENMO_WT);
++ save->CRTC_EXT_CNTL = RREG32(R_000054_CRTC_EXT_CNTL);
++ save->CRTC_GEN_CNTL = RREG32(R_000050_CRTC_GEN_CNTL);
++ save->CUR_OFFSET = RREG32(R_000260_CUR_OFFSET);
++ if (!(rdev->flags & RADEON_SINGLE_CRTC)) {
++ save->CRTC2_GEN_CNTL = RREG32(R_0003F8_CRTC2_GEN_CNTL);
++ save->CUR2_OFFSET = RREG32(R_000360_CUR2_OFFSET);
++ }
++
++ /* Disable VGA aperture access */
++ WREG32(R_0003C0_GENMO_WT, C_0003C0_VGA_RAM_EN & save->GENMO_WT);
++ /* Disable cursor, overlay, crtc */
++ WREG32(R_000260_CUR_OFFSET, save->CUR_OFFSET | S_000260_CUR_LOCK(1));
++ WREG32(R_000054_CRTC_EXT_CNTL, save->CRTC_EXT_CNTL |
++ S_000054_CRTC_DISPLAY_DIS(1));
++ WREG32(R_000050_CRTC_GEN_CNTL,
++ (C_000050_CRTC_CUR_EN & save->CRTC_GEN_CNTL) |
++ S_000050_CRTC_DISP_REQ_EN_B(1));
++ WREG32(R_000420_OV0_SCALE_CNTL,
++ C_000420_OV0_OVERLAY_EN & RREG32(R_000420_OV0_SCALE_CNTL));
++ WREG32(R_000260_CUR_OFFSET, C_000260_CUR_LOCK & save->CUR_OFFSET);
++ if (!(rdev->flags & RADEON_SINGLE_CRTC)) {
++ WREG32(R_000360_CUR2_OFFSET, save->CUR2_OFFSET |
++ S_000360_CUR2_LOCK(1));
++ WREG32(R_0003F8_CRTC2_GEN_CNTL,
++ (C_0003F8_CRTC2_CUR_EN & save->CRTC2_GEN_CNTL) |
++ S_0003F8_CRTC2_DISPLAY_DIS(1) |
++ S_0003F8_CRTC2_DISP_REQ_EN_B(1));
++ WREG32(R_000360_CUR2_OFFSET,
++ C_000360_CUR2_LOCK & save->CUR2_OFFSET);
++ }
++}
++
++void r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save)
++{
++ /* Update base address for crtc */
++ WREG32(R_00023C_DISPLAY_BASE_ADDR, rdev->mc.vram_location);
++ if (!(rdev->flags & RADEON_SINGLE_CRTC)) {
++ WREG32(R_00033C_CRTC2_DISPLAY_BASE_ADDR,
++ rdev->mc.vram_location);
++ }
++ /* Restore CRTC registers */
++ WREG32(R_0003C0_GENMO_WT, save->GENMO_WT);
++ WREG32(R_000054_CRTC_EXT_CNTL, save->CRTC_EXT_CNTL);
++ WREG32(R_000050_CRTC_GEN_CNTL, save->CRTC_GEN_CNTL);
++ if (!(rdev->flags & RADEON_SINGLE_CRTC)) {
++ WREG32(R_0003F8_CRTC2_GEN_CNTL, save->CRTC2_GEN_CNTL);
++ }
++}
+diff --git a/drivers/gpu/drm/radeon/r100_track.h b/drivers/gpu/drm/radeon/r100_track.h
+new file mode 100644
+index 0000000..0daf0d7
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r100_track.h
+@@ -0,0 +1,183 @@
++
++#define R100_TRACK_MAX_TEXTURE 3
++#define R200_TRACK_MAX_TEXTURE 6
++#define R300_TRACK_MAX_TEXTURE 16
++
++#define R100_MAX_CB 1
++#define R300_MAX_CB 4
++
++/*
++ * CS functions
++ */
++struct r100_cs_track_cb {
++ struct radeon_object *robj;
++ unsigned pitch;
++ unsigned cpp;
++ unsigned offset;
++};
++
++struct r100_cs_track_array {
++ struct radeon_object *robj;
++ unsigned esize;
++};
++
++struct r100_cs_cube_info {
++ struct radeon_object *robj;
++ unsigned offset;
++ unsigned width;
++ unsigned height;
++};
++
++struct r100_cs_track_texture {
++ struct radeon_object *robj;
++ struct r100_cs_cube_info cube_info[5]; /* info for 5 non-primary faces */
++ unsigned pitch;
++ unsigned width;
++ unsigned height;
++ unsigned num_levels;
++ unsigned cpp;
++ unsigned tex_coord_type;
++ unsigned txdepth;
++ unsigned width_11;
++ unsigned height_11;
++ bool use_pitch;
++ bool enabled;
++ bool roundup_w;
++ bool roundup_h;
++};
++
++struct r100_cs_track_limits {
++ unsigned num_cb;
++ unsigned num_texture;
++ unsigned max_levels;
++};
++
++struct r100_cs_track {
++ struct radeon_device *rdev;
++ unsigned num_cb;
++ unsigned num_texture;
++ unsigned maxy;
++ unsigned vtx_size;
++ unsigned vap_vf_cntl;
++ unsigned immd_dwords;
++ unsigned num_arrays;
++ unsigned max_indx;
++ struct r100_cs_track_array arrays[11];
++ struct r100_cs_track_cb cb[R300_MAX_CB];
++ struct r100_cs_track_cb zb;
++ struct r100_cs_track_texture textures[R300_TRACK_MAX_TEXTURE];
++ bool z_enabled;
++ bool separate_cube;
++
++};
++
++int r100_cs_track_check(struct radeon_device *rdev, struct r100_cs_track *track);
++void r100_cs_track_clear(struct radeon_device *rdev, struct r100_cs_track *track);
++int r100_cs_packet_next_reloc(struct radeon_cs_parser *p,
++ struct radeon_cs_reloc **cs_reloc);
++void r100_cs_dump_packet(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt);
++
++int r100_cs_packet_parse_vline(struct radeon_cs_parser *p);
++
++int r200_packet0_check(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt,
++ unsigned idx, unsigned reg);
++
++
++
++static inline int r100_reloc_pitch_offset(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt,
++ unsigned idx,
++ unsigned reg)
++{
++ int r;
++ u32 tile_flags = 0;
++ u32 tmp;
++ struct radeon_cs_reloc *reloc;
++ u32 value;
++
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ value = radeon_get_ib_value(p, idx);
++ tmp = value & 0x003fffff;
++ tmp += (((u32)reloc->lobj.gpu_offset) >> 10);
++
++ if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO)
++ tile_flags |= RADEON_DST_TILE_MACRO;
++ if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO) {
++ if (reg == RADEON_SRC_PITCH_OFFSET) {
++ DRM_ERROR("Cannot src blit from microtiled surface\n");
++ r100_cs_dump_packet(p, pkt);
++ return -EINVAL;
++ }
++ tile_flags |= RADEON_DST_TILE_MICRO;
++ }
++
++ tmp |= tile_flags;
++ p->ib->ptr[idx] = (value & 0x3fc00000) | tmp;
++ return 0;
++}
++
++static inline int r100_packet3_load_vbpntr(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt,
++ int idx)
++{
++ unsigned c, i;
++ struct radeon_cs_reloc *reloc;
++ struct r100_cs_track *track;
++ int r = 0;
++ volatile uint32_t *ib;
++ u32 idx_value;
++
++ ib = p->ib->ptr;
++ track = (struct r100_cs_track *)p->track;
++ c = radeon_get_ib_value(p, idx++) & 0x1F;
++ track->num_arrays = c;
++ for (i = 0; i < (c - 1); i+=2, idx+=3) {
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for packet3 %d\n",
++ pkt->opcode);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ idx_value = radeon_get_ib_value(p, idx);
++ ib[idx+1] = radeon_get_ib_value(p, idx + 1) + ((u32)reloc->lobj.gpu_offset);
++
++ track->arrays[i + 0].esize = idx_value >> 8;
++ track->arrays[i + 0].robj = reloc->robj;
++ track->arrays[i + 0].esize &= 0x7F;
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for packet3 %d\n",
++ pkt->opcode);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ ib[idx+2] = radeon_get_ib_value(p, idx + 2) + ((u32)reloc->lobj.gpu_offset);
++ track->arrays[i + 1].robj = reloc->robj;
++ track->arrays[i + 1].esize = idx_value >> 24;
++ track->arrays[i + 1].esize &= 0x7F;
++ }
++ if (c & 1) {
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for packet3 %d\n",
++ pkt->opcode);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ idx_value = radeon_get_ib_value(p, idx);
++ ib[idx+1] = radeon_get_ib_value(p, idx + 1) + ((u32)reloc->lobj.gpu_offset);
++ track->arrays[i + 0].robj = reloc->robj;
++ track->arrays[i + 0].esize = idx_value >> 8;
++ track->arrays[i + 0].esize &= 0x7F;
++ }
++ return r;
++}
+diff --git a/drivers/gpu/drm/radeon/r100d.h b/drivers/gpu/drm/radeon/r100d.h
+new file mode 100644
+index 0000000..c4b257e
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r100d.h
+@@ -0,0 +1,607 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef __R100D_H__
++#define __R100D_H__
++
++#define CP_PACKET0 0x00000000
++#define PACKET0_BASE_INDEX_SHIFT 0
++#define PACKET0_BASE_INDEX_MASK (0x1ffff << 0)
++#define PACKET0_COUNT_SHIFT 16
++#define PACKET0_COUNT_MASK (0x3fff << 16)
++#define CP_PACKET1 0x40000000
++#define CP_PACKET2 0x80000000
++#define PACKET2_PAD_SHIFT 0
++#define PACKET2_PAD_MASK (0x3fffffff << 0)
++#define CP_PACKET3 0xC0000000
++#define PACKET3_IT_OPCODE_SHIFT 8
++#define PACKET3_IT_OPCODE_MASK (0xff << 8)
++#define PACKET3_COUNT_SHIFT 16
++#define PACKET3_COUNT_MASK (0x3fff << 16)
++/* PACKET3 op code */
++#define PACKET3_NOP 0x10
++#define PACKET3_3D_DRAW_VBUF 0x28
++#define PACKET3_3D_DRAW_IMMD 0x29
++#define PACKET3_3D_DRAW_INDX 0x2A
++#define PACKET3_3D_LOAD_VBPNTR 0x2F
++#define PACKET3_INDX_BUFFER 0x33
++#define PACKET3_3D_DRAW_VBUF_2 0x34
++#define PACKET3_3D_DRAW_IMMD_2 0x35
++#define PACKET3_3D_DRAW_INDX_2 0x36
++#define PACKET3_BITBLT_MULTI 0x9B
++
++#define PACKET0(reg, n) (CP_PACKET0 | \
++ REG_SET(PACKET0_BASE_INDEX, (reg) >> 2) | \
++ REG_SET(PACKET0_COUNT, (n)))
++#define PACKET2(v) (CP_PACKET2 | REG_SET(PACKET2_PAD, (v)))
++#define PACKET3(op, n) (CP_PACKET3 | \
++ REG_SET(PACKET3_IT_OPCODE, (op)) | \
++ REG_SET(PACKET3_COUNT, (n)))
++
++#define PACKET_TYPE0 0
++#define PACKET_TYPE1 1
++#define PACKET_TYPE2 2
++#define PACKET_TYPE3 3
++
++#define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3)
++#define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF)
++#define CP_PACKET0_GET_REG(h) (((h) & 0x1FFF) << 2)
++#define CP_PACKET0_GET_ONE_REG_WR(h) (((h) >> 15) & 1)
++#define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF)
++
++/* Registers */
++#define R_000040_GEN_INT_CNTL 0x000040
++#define S_000040_CRTC_VBLANK(x) (((x) & 0x1) << 0)
++#define G_000040_CRTC_VBLANK(x) (((x) >> 0) & 0x1)
++#define C_000040_CRTC_VBLANK 0xFFFFFFFE
++#define S_000040_CRTC_VLINE(x) (((x) & 0x1) << 1)
++#define G_000040_CRTC_VLINE(x) (((x) >> 1) & 0x1)
++#define C_000040_CRTC_VLINE 0xFFFFFFFD
++#define S_000040_CRTC_VSYNC(x) (((x) & 0x1) << 2)
++#define G_000040_CRTC_VSYNC(x) (((x) >> 2) & 0x1)
++#define C_000040_CRTC_VSYNC 0xFFFFFFFB
++#define S_000040_SNAPSHOT(x) (((x) & 0x1) << 3)
++#define G_000040_SNAPSHOT(x) (((x) >> 3) & 0x1)
++#define C_000040_SNAPSHOT 0xFFFFFFF7
++#define S_000040_FP_DETECT(x) (((x) & 0x1) << 4)
++#define G_000040_FP_DETECT(x) (((x) >> 4) & 0x1)
++#define C_000040_FP_DETECT 0xFFFFFFEF
++#define S_000040_CRTC2_VLINE(x) (((x) & 0x1) << 5)
++#define G_000040_CRTC2_VLINE(x) (((x) >> 5) & 0x1)
++#define C_000040_CRTC2_VLINE 0xFFFFFFDF
++#define S_000040_DMA_VIPH0_INT_EN(x) (((x) & 0x1) << 12)
++#define G_000040_DMA_VIPH0_INT_EN(x) (((x) >> 12) & 0x1)
++#define C_000040_DMA_VIPH0_INT_EN 0xFFFFEFFF
++#define S_000040_CRTC2_VSYNC(x) (((x) & 0x1) << 6)
++#define G_000040_CRTC2_VSYNC(x) (((x) >> 6) & 0x1)
++#define C_000040_CRTC2_VSYNC 0xFFFFFFBF
++#define S_000040_SNAPSHOT2(x) (((x) & 0x1) << 7)
++#define G_000040_SNAPSHOT2(x) (((x) >> 7) & 0x1)
++#define C_000040_SNAPSHOT2 0xFFFFFF7F
++#define S_000040_CRTC2_VBLANK(x) (((x) & 0x1) << 9)
++#define G_000040_CRTC2_VBLANK(x) (((x) >> 9) & 0x1)
++#define C_000040_CRTC2_VBLANK 0xFFFFFDFF
++#define S_000040_FP2_DETECT(x) (((x) & 0x1) << 10)
++#define G_000040_FP2_DETECT(x) (((x) >> 10) & 0x1)
++#define C_000040_FP2_DETECT 0xFFFFFBFF
++#define S_000040_VSYNC_DIFF_OVER_LIMIT(x) (((x) & 0x1) << 11)
++#define G_000040_VSYNC_DIFF_OVER_LIMIT(x) (((x) >> 11) & 0x1)
++#define C_000040_VSYNC_DIFF_OVER_LIMIT 0xFFFFF7FF
++#define S_000040_DMA_VIPH1_INT_EN(x) (((x) & 0x1) << 13)
++#define G_000040_DMA_VIPH1_INT_EN(x) (((x) >> 13) & 0x1)
++#define C_000040_DMA_VIPH1_INT_EN 0xFFFFDFFF
++#define S_000040_DMA_VIPH2_INT_EN(x) (((x) & 0x1) << 14)
++#define G_000040_DMA_VIPH2_INT_EN(x) (((x) >> 14) & 0x1)
++#define C_000040_DMA_VIPH2_INT_EN 0xFFFFBFFF
++#define S_000040_DMA_VIPH3_INT_EN(x) (((x) & 0x1) << 15)
++#define G_000040_DMA_VIPH3_INT_EN(x) (((x) >> 15) & 0x1)
++#define C_000040_DMA_VIPH3_INT_EN 0xFFFF7FFF
++#define S_000040_I2C_INT_EN(x) (((x) & 0x1) << 17)
++#define G_000040_I2C_INT_EN(x) (((x) >> 17) & 0x1)
++#define C_000040_I2C_INT_EN 0xFFFDFFFF
++#define S_000040_GUI_IDLE(x) (((x) & 0x1) << 19)
++#define G_000040_GUI_IDLE(x) (((x) >> 19) & 0x1)
++#define C_000040_GUI_IDLE 0xFFF7FFFF
++#define S_000040_VIPH_INT_EN(x) (((x) & 0x1) << 24)
++#define G_000040_VIPH_INT_EN(x) (((x) >> 24) & 0x1)
++#define C_000040_VIPH_INT_EN 0xFEFFFFFF
++#define S_000040_SW_INT_EN(x) (((x) & 0x1) << 25)
++#define G_000040_SW_INT_EN(x) (((x) >> 25) & 0x1)
++#define C_000040_SW_INT_EN 0xFDFFFFFF
++#define S_000040_GEYSERVILLE(x) (((x) & 0x1) << 27)
++#define G_000040_GEYSERVILLE(x) (((x) >> 27) & 0x1)
++#define C_000040_GEYSERVILLE 0xF7FFFFFF
++#define S_000040_HDCP_AUTHORIZED_INT(x) (((x) & 0x1) << 28)
++#define G_000040_HDCP_AUTHORIZED_INT(x) (((x) >> 28) & 0x1)
++#define C_000040_HDCP_AUTHORIZED_INT 0xEFFFFFFF
++#define S_000040_DVI_I2C_INT(x) (((x) & 0x1) << 29)
++#define G_000040_DVI_I2C_INT(x) (((x) >> 29) & 0x1)
++#define C_000040_DVI_I2C_INT 0xDFFFFFFF
++#define S_000040_GUIDMA(x) (((x) & 0x1) << 30)
++#define G_000040_GUIDMA(x) (((x) >> 30) & 0x1)
++#define C_000040_GUIDMA 0xBFFFFFFF
++#define S_000040_VIDDMA(x) (((x) & 0x1) << 31)
++#define G_000040_VIDDMA(x) (((x) >> 31) & 0x1)
++#define C_000040_VIDDMA 0x7FFFFFFF
++#define R_000044_GEN_INT_STATUS 0x000044
++#define S_000044_CRTC_VBLANK_STAT(x) (((x) & 0x1) << 0)
++#define G_000044_CRTC_VBLANK_STAT(x) (((x) >> 0) & 0x1)
++#define C_000044_CRTC_VBLANK_STAT 0xFFFFFFFE
++#define S_000044_CRTC_VBLANK_STAT_AK(x) (((x) & 0x1) << 0)
++#define G_000044_CRTC_VBLANK_STAT_AK(x) (((x) >> 0) & 0x1)
++#define C_000044_CRTC_VBLANK_STAT_AK 0xFFFFFFFE
++#define S_000044_CRTC_VLINE_STAT(x) (((x) & 0x1) << 1)
++#define G_000044_CRTC_VLINE_STAT(x) (((x) >> 1) & 0x1)
++#define C_000044_CRTC_VLINE_STAT 0xFFFFFFFD
++#define S_000044_CRTC_VLINE_STAT_AK(x) (((x) & 0x1) << 1)
++#define G_000044_CRTC_VLINE_STAT_AK(x) (((x) >> 1) & 0x1)
++#define C_000044_CRTC_VLINE_STAT_AK 0xFFFFFFFD
++#define S_000044_CRTC_VSYNC_STAT(x) (((x) & 0x1) << 2)
++#define G_000044_CRTC_VSYNC_STAT(x) (((x) >> 2) & 0x1)
++#define C_000044_CRTC_VSYNC_STAT 0xFFFFFFFB
++#define S_000044_CRTC_VSYNC_STAT_AK(x) (((x) & 0x1) << 2)
++#define G_000044_CRTC_VSYNC_STAT_AK(x) (((x) >> 2) & 0x1)
++#define C_000044_CRTC_VSYNC_STAT_AK 0xFFFFFFFB
++#define S_000044_SNAPSHOT_STAT(x) (((x) & 0x1) << 3)
++#define G_000044_SNAPSHOT_STAT(x) (((x) >> 3) & 0x1)
++#define C_000044_SNAPSHOT_STAT 0xFFFFFFF7
++#define S_000044_SNAPSHOT_STAT_AK(x) (((x) & 0x1) << 3)
++#define G_000044_SNAPSHOT_STAT_AK(x) (((x) >> 3) & 0x1)
++#define C_000044_SNAPSHOT_STAT_AK 0xFFFFFFF7
++#define S_000044_FP_DETECT_STAT(x) (((x) & 0x1) << 4)
++#define G_000044_FP_DETECT_STAT(x) (((x) >> 4) & 0x1)
++#define C_000044_FP_DETECT_STAT 0xFFFFFFEF
++#define S_000044_FP_DETECT_STAT_AK(x) (((x) & 0x1) << 4)
++#define G_000044_FP_DETECT_STAT_AK(x) (((x) >> 4) & 0x1)
++#define C_000044_FP_DETECT_STAT_AK 0xFFFFFFEF
++#define S_000044_CRTC2_VLINE_STAT(x) (((x) & 0x1) << 5)
++#define G_000044_CRTC2_VLINE_STAT(x) (((x) >> 5) & 0x1)
++#define C_000044_CRTC2_VLINE_STAT 0xFFFFFFDF
++#define S_000044_CRTC2_VLINE_STAT_AK(x) (((x) & 0x1) << 5)
++#define G_000044_CRTC2_VLINE_STAT_AK(x) (((x) >> 5) & 0x1)
++#define C_000044_CRTC2_VLINE_STAT_AK 0xFFFFFFDF
++#define S_000044_CRTC2_VSYNC_STAT(x) (((x) & 0x1) << 6)
++#define G_000044_CRTC2_VSYNC_STAT(x) (((x) >> 6) & 0x1)
++#define C_000044_CRTC2_VSYNC_STAT 0xFFFFFFBF
++#define S_000044_CRTC2_VSYNC_STAT_AK(x) (((x) & 0x1) << 6)
++#define G_000044_CRTC2_VSYNC_STAT_AK(x) (((x) >> 6) & 0x1)
++#define C_000044_CRTC2_VSYNC_STAT_AK 0xFFFFFFBF
++#define S_000044_SNAPSHOT2_STAT(x) (((x) & 0x1) << 7)
++#define G_000044_SNAPSHOT2_STAT(x) (((x) >> 7) & 0x1)
++#define C_000044_SNAPSHOT2_STAT 0xFFFFFF7F
++#define S_000044_SNAPSHOT2_STAT_AK(x) (((x) & 0x1) << 7)
++#define G_000044_SNAPSHOT2_STAT_AK(x) (((x) >> 7) & 0x1)
++#define C_000044_SNAPSHOT2_STAT_AK 0xFFFFFF7F
++#define S_000044_CAP0_INT_ACTIVE(x) (((x) & 0x1) << 8)
++#define G_000044_CAP0_INT_ACTIVE(x) (((x) >> 8) & 0x1)
++#define C_000044_CAP0_INT_ACTIVE 0xFFFFFEFF
++#define S_000044_CRTC2_VBLANK_STAT(x) (((x) & 0x1) << 9)
++#define G_000044_CRTC2_VBLANK_STAT(x) (((x) >> 9) & 0x1)
++#define C_000044_CRTC2_VBLANK_STAT 0xFFFFFDFF
++#define S_000044_CRTC2_VBLANK_STAT_AK(x) (((x) & 0x1) << 9)
++#define G_000044_CRTC2_VBLANK_STAT_AK(x) (((x) >> 9) & 0x1)
++#define C_000044_CRTC2_VBLANK_STAT_AK 0xFFFFFDFF
++#define S_000044_FP2_DETECT_STAT(x) (((x) & 0x1) << 10)
++#define G_000044_FP2_DETECT_STAT(x) (((x) >> 10) & 0x1)
++#define C_000044_FP2_DETECT_STAT 0xFFFFFBFF
++#define S_000044_FP2_DETECT_STAT_AK(x) (((x) & 0x1) << 10)
++#define G_000044_FP2_DETECT_STAT_AK(x) (((x) >> 10) & 0x1)
++#define C_000044_FP2_DETECT_STAT_AK 0xFFFFFBFF
++#define S_000044_VSYNC_DIFF_OVER_LIMIT_STAT(x) (((x) & 0x1) << 11)
++#define G_000044_VSYNC_DIFF_OVER_LIMIT_STAT(x) (((x) >> 11) & 0x1)
++#define C_000044_VSYNC_DIFF_OVER_LIMIT_STAT 0xFFFFF7FF
++#define S_000044_VSYNC_DIFF_OVER_LIMIT_STAT_AK(x) (((x) & 0x1) << 11)
++#define G_000044_VSYNC_DIFF_OVER_LIMIT_STAT_AK(x) (((x) >> 11) & 0x1)
++#define C_000044_VSYNC_DIFF_OVER_LIMIT_STAT_AK 0xFFFFF7FF
++#define S_000044_DMA_VIPH0_INT(x) (((x) & 0x1) << 12)
++#define G_000044_DMA_VIPH0_INT(x) (((x) >> 12) & 0x1)
++#define C_000044_DMA_VIPH0_INT 0xFFFFEFFF
++#define S_000044_DMA_VIPH0_INT_AK(x) (((x) & 0x1) << 12)
++#define G_000044_DMA_VIPH0_INT_AK(x) (((x) >> 12) & 0x1)
++#define C_000044_DMA_VIPH0_INT_AK 0xFFFFEFFF
++#define S_000044_DMA_VIPH1_INT(x) (((x) & 0x1) << 13)
++#define G_000044_DMA_VIPH1_INT(x) (((x) >> 13) & 0x1)
++#define C_000044_DMA_VIPH1_INT 0xFFFFDFFF
++#define S_000044_DMA_VIPH1_INT_AK(x) (((x) & 0x1) << 13)
++#define G_000044_DMA_VIPH1_INT_AK(x) (((x) >> 13) & 0x1)
++#define C_000044_DMA_VIPH1_INT_AK 0xFFFFDFFF
++#define S_000044_DMA_VIPH2_INT(x) (((x) & 0x1) << 14)
++#define G_000044_DMA_VIPH2_INT(x) (((x) >> 14) & 0x1)
++#define C_000044_DMA_VIPH2_INT 0xFFFFBFFF
++#define S_000044_DMA_VIPH2_INT_AK(x) (((x) & 0x1) << 14)
++#define G_000044_DMA_VIPH2_INT_AK(x) (((x) >> 14) & 0x1)
++#define C_000044_DMA_VIPH2_INT_AK 0xFFFFBFFF
++#define S_000044_DMA_VIPH3_INT(x) (((x) & 0x1) << 15)
++#define G_000044_DMA_VIPH3_INT(x) (((x) >> 15) & 0x1)
++#define C_000044_DMA_VIPH3_INT 0xFFFF7FFF
++#define S_000044_DMA_VIPH3_INT_AK(x) (((x) & 0x1) << 15)
++#define G_000044_DMA_VIPH3_INT_AK(x) (((x) >> 15) & 0x1)
++#define C_000044_DMA_VIPH3_INT_AK 0xFFFF7FFF
++#define S_000044_I2C_INT(x) (((x) & 0x1) << 17)
++#define G_000044_I2C_INT(x) (((x) >> 17) & 0x1)
++#define C_000044_I2C_INT 0xFFFDFFFF
++#define S_000044_I2C_INT_AK(x) (((x) & 0x1) << 17)
++#define G_000044_I2C_INT_AK(x) (((x) >> 17) & 0x1)
++#define C_000044_I2C_INT_AK 0xFFFDFFFF
++#define S_000044_GUI_IDLE_STAT(x) (((x) & 0x1) << 19)
++#define G_000044_GUI_IDLE_STAT(x) (((x) >> 19) & 0x1)
++#define C_000044_GUI_IDLE_STAT 0xFFF7FFFF
++#define S_000044_GUI_IDLE_STAT_AK(x) (((x) & 0x1) << 19)
++#define G_000044_GUI_IDLE_STAT_AK(x) (((x) >> 19) & 0x1)
++#define C_000044_GUI_IDLE_STAT_AK 0xFFF7FFFF
++#define S_000044_VIPH_INT(x) (((x) & 0x1) << 24)
++#define G_000044_VIPH_INT(x) (((x) >> 24) & 0x1)
++#define C_000044_VIPH_INT 0xFEFFFFFF
++#define S_000044_SW_INT(x) (((x) & 0x1) << 25)
++#define G_000044_SW_INT(x) (((x) >> 25) & 0x1)
++#define C_000044_SW_INT 0xFDFFFFFF
++#define S_000044_SW_INT_AK(x) (((x) & 0x1) << 25)
++#define G_000044_SW_INT_AK(x) (((x) >> 25) & 0x1)
++#define C_000044_SW_INT_AK 0xFDFFFFFF
++#define S_000044_SW_INT_SET(x) (((x) & 0x1) << 26)
++#define G_000044_SW_INT_SET(x) (((x) >> 26) & 0x1)
++#define C_000044_SW_INT_SET 0xFBFFFFFF
++#define S_000044_GEYSERVILLE_STAT(x) (((x) & 0x1) << 27)
++#define G_000044_GEYSERVILLE_STAT(x) (((x) >> 27) & 0x1)
++#define C_000044_GEYSERVILLE_STAT 0xF7FFFFFF
++#define S_000044_GEYSERVILLE_STAT_AK(x) (((x) & 0x1) << 27)
++#define G_000044_GEYSERVILLE_STAT_AK(x) (((x) >> 27) & 0x1)
++#define C_000044_GEYSERVILLE_STAT_AK 0xF7FFFFFF
++#define S_000044_HDCP_AUTHORIZED_INT_STAT(x) (((x) & 0x1) << 28)
++#define G_000044_HDCP_AUTHORIZED_INT_STAT(x) (((x) >> 28) & 0x1)
++#define C_000044_HDCP_AUTHORIZED_INT_STAT 0xEFFFFFFF
++#define S_000044_HDCP_AUTHORIZED_INT_AK(x) (((x) & 0x1) << 28)
++#define G_000044_HDCP_AUTHORIZED_INT_AK(x) (((x) >> 28) & 0x1)
++#define C_000044_HDCP_AUTHORIZED_INT_AK 0xEFFFFFFF
++#define S_000044_DVI_I2C_INT_STAT(x) (((x) & 0x1) << 29)
++#define G_000044_DVI_I2C_INT_STAT(x) (((x) >> 29) & 0x1)
++#define C_000044_DVI_I2C_INT_STAT 0xDFFFFFFF
++#define S_000044_DVI_I2C_INT_AK(x) (((x) & 0x1) << 29)
++#define G_000044_DVI_I2C_INT_AK(x) (((x) >> 29) & 0x1)
++#define C_000044_DVI_I2C_INT_AK 0xDFFFFFFF
++#define S_000044_GUIDMA_STAT(x) (((x) & 0x1) << 30)
++#define G_000044_GUIDMA_STAT(x) (((x) >> 30) & 0x1)
++#define C_000044_GUIDMA_STAT 0xBFFFFFFF
++#define S_000044_GUIDMA_AK(x) (((x) & 0x1) << 30)
++#define G_000044_GUIDMA_AK(x) (((x) >> 30) & 0x1)
++#define C_000044_GUIDMA_AK 0xBFFFFFFF
++#define S_000044_VIDDMA_STAT(x) (((x) & 0x1) << 31)
++#define G_000044_VIDDMA_STAT(x) (((x) >> 31) & 0x1)
++#define C_000044_VIDDMA_STAT 0x7FFFFFFF
++#define S_000044_VIDDMA_AK(x) (((x) & 0x1) << 31)
++#define G_000044_VIDDMA_AK(x) (((x) >> 31) & 0x1)
++#define C_000044_VIDDMA_AK 0x7FFFFFFF
++#define R_000050_CRTC_GEN_CNTL 0x000050
++#define S_000050_CRTC_DBL_SCAN_EN(x) (((x) & 0x1) << 0)
++#define G_000050_CRTC_DBL_SCAN_EN(x) (((x) >> 0) & 0x1)
++#define C_000050_CRTC_DBL_SCAN_EN 0xFFFFFFFE
++#define S_000050_CRTC_INTERLACE_EN(x) (((x) & 0x1) << 1)
++#define G_000050_CRTC_INTERLACE_EN(x) (((x) >> 1) & 0x1)
++#define C_000050_CRTC_INTERLACE_EN 0xFFFFFFFD
++#define S_000050_CRTC_C_SYNC_EN(x) (((x) & 0x1) << 4)
++#define G_000050_CRTC_C_SYNC_EN(x) (((x) >> 4) & 0x1)
++#define C_000050_CRTC_C_SYNC_EN 0xFFFFFFEF
++#define S_000050_CRTC_PIX_WIDTH(x) (((x) & 0xF) << 8)
++#define G_000050_CRTC_PIX_WIDTH(x) (((x) >> 8) & 0xF)
++#define C_000050_CRTC_PIX_WIDTH 0xFFFFF0FF
++#define S_000050_CRTC_ICON_EN(x) (((x) & 0x1) << 15)
++#define G_000050_CRTC_ICON_EN(x) (((x) >> 15) & 0x1)
++#define C_000050_CRTC_ICON_EN 0xFFFF7FFF
++#define S_000050_CRTC_CUR_EN(x) (((x) & 0x1) << 16)
++#define G_000050_CRTC_CUR_EN(x) (((x) >> 16) & 0x1)
++#define C_000050_CRTC_CUR_EN 0xFFFEFFFF
++#define S_000050_CRTC_VSTAT_MODE(x) (((x) & 0x3) << 17)
++#define G_000050_CRTC_VSTAT_MODE(x) (((x) >> 17) & 0x3)
++#define C_000050_CRTC_VSTAT_MODE 0xFFF9FFFF
++#define S_000050_CRTC_CUR_MODE(x) (((x) & 0x7) << 20)
++#define G_000050_CRTC_CUR_MODE(x) (((x) >> 20) & 0x7)
++#define C_000050_CRTC_CUR_MODE 0xFF8FFFFF
++#define S_000050_CRTC_EXT_DISP_EN(x) (((x) & 0x1) << 24)
++#define G_000050_CRTC_EXT_DISP_EN(x) (((x) >> 24) & 0x1)
++#define C_000050_CRTC_EXT_DISP_EN 0xFEFFFFFF
++#define S_000050_CRTC_EN(x) (((x) & 0x1) << 25)
++#define G_000050_CRTC_EN(x) (((x) >> 25) & 0x1)
++#define C_000050_CRTC_EN 0xFDFFFFFF
++#define S_000050_CRTC_DISP_REQ_EN_B(x) (((x) & 0x1) << 26)
++#define G_000050_CRTC_DISP_REQ_EN_B(x) (((x) >> 26) & 0x1)
++#define C_000050_CRTC_DISP_REQ_EN_B 0xFBFFFFFF
++#define R_000054_CRTC_EXT_CNTL 0x000054
++#define S_000054_CRTC_VGA_XOVERSCAN(x) (((x) & 0x1) << 0)
++#define G_000054_CRTC_VGA_XOVERSCAN(x) (((x) >> 0) & 0x1)
++#define C_000054_CRTC_VGA_XOVERSCAN 0xFFFFFFFE
++#define S_000054_VGA_BLINK_RATE(x) (((x) & 0x3) << 1)
++#define G_000054_VGA_BLINK_RATE(x) (((x) >> 1) & 0x3)
++#define C_000054_VGA_BLINK_RATE 0xFFFFFFF9
++#define S_000054_VGA_ATI_LINEAR(x) (((x) & 0x1) << 3)
++#define G_000054_VGA_ATI_LINEAR(x) (((x) >> 3) & 0x1)
++#define C_000054_VGA_ATI_LINEAR 0xFFFFFFF7
++#define S_000054_VGA_128KAP_PAGING(x) (((x) & 0x1) << 4)
++#define G_000054_VGA_128KAP_PAGING(x) (((x) >> 4) & 0x1)
++#define C_000054_VGA_128KAP_PAGING 0xFFFFFFEF
++#define S_000054_VGA_TEXT_132(x) (((x) & 0x1) << 5)
++#define G_000054_VGA_TEXT_132(x) (((x) >> 5) & 0x1)
++#define C_000054_VGA_TEXT_132 0xFFFFFFDF
++#define S_000054_VGA_XCRT_CNT_EN(x) (((x) & 0x1) << 6)
++#define G_000054_VGA_XCRT_CNT_EN(x) (((x) >> 6) & 0x1)
++#define C_000054_VGA_XCRT_CNT_EN 0xFFFFFFBF
++#define S_000054_CRTC_HSYNC_DIS(x) (((x) & 0x1) << 8)
++#define G_000054_CRTC_HSYNC_DIS(x) (((x) >> 8) & 0x1)
++#define C_000054_CRTC_HSYNC_DIS 0xFFFFFEFF
++#define S_000054_CRTC_VSYNC_DIS(x) (((x) & 0x1) << 9)
++#define G_000054_CRTC_VSYNC_DIS(x) (((x) >> 9) & 0x1)
++#define C_000054_CRTC_VSYNC_DIS 0xFFFFFDFF
++#define S_000054_CRTC_DISPLAY_DIS(x) (((x) & 0x1) << 10)
++#define G_000054_CRTC_DISPLAY_DIS(x) (((x) >> 10) & 0x1)
++#define C_000054_CRTC_DISPLAY_DIS 0xFFFFFBFF
++#define S_000054_CRTC_SYNC_TRISTATE(x) (((x) & 0x1) << 11)
++#define G_000054_CRTC_SYNC_TRISTATE(x) (((x) >> 11) & 0x1)
++#define C_000054_CRTC_SYNC_TRISTATE 0xFFFFF7FF
++#define S_000054_CRTC_HSYNC_TRISTATE(x) (((x) & 0x1) << 12)
++#define G_000054_CRTC_HSYNC_TRISTATE(x) (((x) >> 12) & 0x1)
++#define C_000054_CRTC_HSYNC_TRISTATE 0xFFFFEFFF
++#define S_000054_CRTC_VSYNC_TRISTATE(x) (((x) & 0x1) << 13)
++#define G_000054_CRTC_VSYNC_TRISTATE(x) (((x) >> 13) & 0x1)
++#define C_000054_CRTC_VSYNC_TRISTATE 0xFFFFDFFF
++#define S_000054_CRT_ON(x) (((x) & 0x1) << 15)
++#define G_000054_CRT_ON(x) (((x) >> 15) & 0x1)
++#define C_000054_CRT_ON 0xFFFF7FFF
++#define S_000054_VGA_CUR_B_TEST(x) (((x) & 0x1) << 17)
++#define G_000054_VGA_CUR_B_TEST(x) (((x) >> 17) & 0x1)
++#define C_000054_VGA_CUR_B_TEST 0xFFFDFFFF
++#define S_000054_VGA_PACK_DIS(x) (((x) & 0x1) << 18)
++#define G_000054_VGA_PACK_DIS(x) (((x) >> 18) & 0x1)
++#define C_000054_VGA_PACK_DIS 0xFFFBFFFF
++#define S_000054_VGA_MEM_PS_EN(x) (((x) & 0x1) << 19)
++#define G_000054_VGA_MEM_PS_EN(x) (((x) >> 19) & 0x1)
++#define C_000054_VGA_MEM_PS_EN 0xFFF7FFFF
++#define S_000054_VCRTC_IDX_MASTER(x) (((x) & 0x7F) << 24)
++#define G_000054_VCRTC_IDX_MASTER(x) (((x) >> 24) & 0x7F)
++#define C_000054_VCRTC_IDX_MASTER 0x80FFFFFF
++#define R_00023C_DISPLAY_BASE_ADDR 0x00023C
++#define S_00023C_DISPLAY_BASE_ADDR(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_00023C_DISPLAY_BASE_ADDR(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_00023C_DISPLAY_BASE_ADDR 0x00000000
++#define R_000260_CUR_OFFSET 0x000260
++#define S_000260_CUR_OFFSET(x) (((x) & 0x7FFFFFF) << 0)
++#define G_000260_CUR_OFFSET(x) (((x) >> 0) & 0x7FFFFFF)
++#define C_000260_CUR_OFFSET 0xF8000000
++#define S_000260_CUR_LOCK(x) (((x) & 0x1) << 31)
++#define G_000260_CUR_LOCK(x) (((x) >> 31) & 0x1)
++#define C_000260_CUR_LOCK 0x7FFFFFFF
++#define R_00033C_CRTC2_DISPLAY_BASE_ADDR 0x00033C
++#define S_00033C_CRTC2_DISPLAY_BASE_ADDR(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_00033C_CRTC2_DISPLAY_BASE_ADDR(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_00033C_CRTC2_DISPLAY_BASE_ADDR 0x00000000
++#define R_000360_CUR2_OFFSET 0x000360
++#define S_000360_CUR2_OFFSET(x) (((x) & 0x7FFFFFF) << 0)
++#define G_000360_CUR2_OFFSET(x) (((x) >> 0) & 0x7FFFFFF)
++#define C_000360_CUR2_OFFSET 0xF8000000
++#define S_000360_CUR2_LOCK(x) (((x) & 0x1) << 31)
++#define G_000360_CUR2_LOCK(x) (((x) >> 31) & 0x1)
++#define C_000360_CUR2_LOCK 0x7FFFFFFF
++#define R_0003C0_GENMO_WT 0x0003C0
++#define S_0003C0_GENMO_MONO_ADDRESS_B(x) (((x) & 0x1) << 0)
++#define G_0003C0_GENMO_MONO_ADDRESS_B(x) (((x) >> 0) & 0x1)
++#define C_0003C0_GENMO_MONO_ADDRESS_B 0xFFFFFFFE
++#define S_0003C0_VGA_RAM_EN(x) (((x) & 0x1) << 1)
++#define G_0003C0_VGA_RAM_EN(x) (((x) >> 1) & 0x1)
++#define C_0003C0_VGA_RAM_EN 0xFFFFFFFD
++#define S_0003C0_VGA_CKSEL(x) (((x) & 0x3) << 2)
++#define G_0003C0_VGA_CKSEL(x) (((x) >> 2) & 0x3)
++#define C_0003C0_VGA_CKSEL 0xFFFFFFF3
++#define S_0003C0_ODD_EVEN_MD_PGSEL(x) (((x) & 0x1) << 5)
++#define G_0003C0_ODD_EVEN_MD_PGSEL(x) (((x) >> 5) & 0x1)
++#define C_0003C0_ODD_EVEN_MD_PGSEL 0xFFFFFFDF
++#define S_0003C0_VGA_HSYNC_POL(x) (((x) & 0x1) << 6)
++#define G_0003C0_VGA_HSYNC_POL(x) (((x) >> 6) & 0x1)
++#define C_0003C0_VGA_HSYNC_POL 0xFFFFFFBF
++#define S_0003C0_VGA_VSYNC_POL(x) (((x) & 0x1) << 7)
++#define G_0003C0_VGA_VSYNC_POL(x) (((x) >> 7) & 0x1)
++#define C_0003C0_VGA_VSYNC_POL 0xFFFFFF7F
++#define R_0003F8_CRTC2_GEN_CNTL 0x0003F8
++#define S_0003F8_CRTC2_DBL_SCAN_EN(x) (((x) & 0x1) << 0)
++#define G_0003F8_CRTC2_DBL_SCAN_EN(x) (((x) >> 0) & 0x1)
++#define C_0003F8_CRTC2_DBL_SCAN_EN 0xFFFFFFFE
++#define S_0003F8_CRTC2_INTERLACE_EN(x) (((x) & 0x1) << 1)
++#define G_0003F8_CRTC2_INTERLACE_EN(x) (((x) >> 1) & 0x1)
++#define C_0003F8_CRTC2_INTERLACE_EN 0xFFFFFFFD
++#define S_0003F8_CRTC2_SYNC_TRISTATE(x) (((x) & 0x1) << 4)
++#define G_0003F8_CRTC2_SYNC_TRISTATE(x) (((x) >> 4) & 0x1)
++#define C_0003F8_CRTC2_SYNC_TRISTATE 0xFFFFFFEF
++#define S_0003F8_CRTC2_HSYNC_TRISTATE(x) (((x) & 0x1) << 5)
++#define G_0003F8_CRTC2_HSYNC_TRISTATE(x) (((x) >> 5) & 0x1)
++#define C_0003F8_CRTC2_HSYNC_TRISTATE 0xFFFFFFDF
++#define S_0003F8_CRTC2_VSYNC_TRISTATE(x) (((x) & 0x1) << 6)
++#define G_0003F8_CRTC2_VSYNC_TRISTATE(x) (((x) >> 6) & 0x1)
++#define C_0003F8_CRTC2_VSYNC_TRISTATE 0xFFFFFFBF
++#define S_0003F8_CRT2_ON(x) (((x) & 0x1) << 7)
++#define G_0003F8_CRT2_ON(x) (((x) >> 7) & 0x1)
++#define C_0003F8_CRT2_ON 0xFFFFFF7F
++#define S_0003F8_CRTC2_PIX_WIDTH(x) (((x) & 0xF) << 8)
++#define G_0003F8_CRTC2_PIX_WIDTH(x) (((x) >> 8) & 0xF)
++#define C_0003F8_CRTC2_PIX_WIDTH 0xFFFFF0FF
++#define S_0003F8_CRTC2_ICON_EN(x) (((x) & 0x1) << 15)
++#define G_0003F8_CRTC2_ICON_EN(x) (((x) >> 15) & 0x1)
++#define C_0003F8_CRTC2_ICON_EN 0xFFFF7FFF
++#define S_0003F8_CRTC2_CUR_EN(x) (((x) & 0x1) << 16)
++#define G_0003F8_CRTC2_CUR_EN(x) (((x) >> 16) & 0x1)
++#define C_0003F8_CRTC2_CUR_EN 0xFFFEFFFF
++#define S_0003F8_CRTC2_CUR_MODE(x) (((x) & 0x7) << 20)
++#define G_0003F8_CRTC2_CUR_MODE(x) (((x) >> 20) & 0x7)
++#define C_0003F8_CRTC2_CUR_MODE 0xFF8FFFFF
++#define S_0003F8_CRTC2_DISPLAY_DIS(x) (((x) & 0x1) << 23)
++#define G_0003F8_CRTC2_DISPLAY_DIS(x) (((x) >> 23) & 0x1)
++#define C_0003F8_CRTC2_DISPLAY_DIS 0xFF7FFFFF
++#define S_0003F8_CRTC2_EN(x) (((x) & 0x1) << 25)
++#define G_0003F8_CRTC2_EN(x) (((x) >> 25) & 0x1)
++#define C_0003F8_CRTC2_EN 0xFDFFFFFF
++#define S_0003F8_CRTC2_DISP_REQ_EN_B(x) (((x) & 0x1) << 26)
++#define G_0003F8_CRTC2_DISP_REQ_EN_B(x) (((x) >> 26) & 0x1)
++#define C_0003F8_CRTC2_DISP_REQ_EN_B 0xFBFFFFFF
++#define S_0003F8_CRTC2_C_SYNC_EN(x) (((x) & 0x1) << 27)
++#define G_0003F8_CRTC2_C_SYNC_EN(x) (((x) >> 27) & 0x1)
++#define C_0003F8_CRTC2_C_SYNC_EN 0xF7FFFFFF
++#define S_0003F8_CRTC2_HSYNC_DIS(x) (((x) & 0x1) << 28)
++#define G_0003F8_CRTC2_HSYNC_DIS(x) (((x) >> 28) & 0x1)
++#define C_0003F8_CRTC2_HSYNC_DIS 0xEFFFFFFF
++#define S_0003F8_CRTC2_VSYNC_DIS(x) (((x) & 0x1) << 29)
++#define G_0003F8_CRTC2_VSYNC_DIS(x) (((x) >> 29) & 0x1)
++#define C_0003F8_CRTC2_VSYNC_DIS 0xDFFFFFFF
++#define R_000420_OV0_SCALE_CNTL 0x000420
++#define S_000420_OV0_NO_READ_BEHIND_SCAN(x) (((x) & 0x1) << 1)
++#define G_000420_OV0_NO_READ_BEHIND_SCAN(x) (((x) >> 1) & 0x1)
++#define C_000420_OV0_NO_READ_BEHIND_SCAN 0xFFFFFFFD
++#define S_000420_OV0_HORZ_PICK_NEAREST(x) (((x) & 0x1) << 2)
++#define G_000420_OV0_HORZ_PICK_NEAREST(x) (((x) >> 2) & 0x1)
++#define C_000420_OV0_HORZ_PICK_NEAREST 0xFFFFFFFB
++#define S_000420_OV0_VERT_PICK_NEAREST(x) (((x) & 0x1) << 3)
++#define G_000420_OV0_VERT_PICK_NEAREST(x) (((x) >> 3) & 0x1)
++#define C_000420_OV0_VERT_PICK_NEAREST 0xFFFFFFF7
++#define S_000420_OV0_SIGNED_UV(x) (((x) & 0x1) << 4)
++#define G_000420_OV0_SIGNED_UV(x) (((x) >> 4) & 0x1)
++#define C_000420_OV0_SIGNED_UV 0xFFFFFFEF
++#define S_000420_OV0_GAMMA_SEL(x) (((x) & 0x7) << 5)
++#define G_000420_OV0_GAMMA_SEL(x) (((x) >> 5) & 0x7)
++#define C_000420_OV0_GAMMA_SEL 0xFFFFFF1F
++#define S_000420_OV0_SURFACE_FORMAT(x) (((x) & 0xF) << 8)
++#define G_000420_OV0_SURFACE_FORMAT(x) (((x) >> 8) & 0xF)
++#define C_000420_OV0_SURFACE_FORMAT 0xFFFFF0FF
++#define S_000420_OV0_ADAPTIVE_DEINT(x) (((x) & 0x1) << 12)
++#define G_000420_OV0_ADAPTIVE_DEINT(x) (((x) >> 12) & 0x1)
++#define C_000420_OV0_ADAPTIVE_DEINT 0xFFFFEFFF
++#define S_000420_OV0_CRTC_SEL(x) (((x) & 0x1) << 14)
++#define G_000420_OV0_CRTC_SEL(x) (((x) >> 14) & 0x1)
++#define C_000420_OV0_CRTC_SEL 0xFFFFBFFF
++#define S_000420_OV0_BURST_PER_PLANE(x) (((x) & 0x7F) << 16)
++#define G_000420_OV0_BURST_PER_PLANE(x) (((x) >> 16) & 0x7F)
++#define C_000420_OV0_BURST_PER_PLANE 0xFF80FFFF
++#define S_000420_OV0_DOUBLE_BUFFER_REGS(x) (((x) & 0x1) << 24)
++#define G_000420_OV0_DOUBLE_BUFFER_REGS(x) (((x) >> 24) & 0x1)
++#define C_000420_OV0_DOUBLE_BUFFER_REGS 0xFEFFFFFF
++#define S_000420_OV0_BANDWIDTH(x) (((x) & 0x1) << 26)
++#define G_000420_OV0_BANDWIDTH(x) (((x) >> 26) & 0x1)
++#define C_000420_OV0_BANDWIDTH 0xFBFFFFFF
++#define S_000420_OV0_LIN_TRANS_BYPASS(x) (((x) & 0x1) << 28)
++#define G_000420_OV0_LIN_TRANS_BYPASS(x) (((x) >> 28) & 0x1)
++#define C_000420_OV0_LIN_TRANS_BYPASS 0xEFFFFFFF
++#define S_000420_OV0_INT_EMU(x) (((x) & 0x1) << 29)
++#define G_000420_OV0_INT_EMU(x) (((x) >> 29) & 0x1)
++#define C_000420_OV0_INT_EMU 0xDFFFFFFF
++#define S_000420_OV0_OVERLAY_EN(x) (((x) & 0x1) << 30)
++#define G_000420_OV0_OVERLAY_EN(x) (((x) >> 30) & 0x1)
++#define C_000420_OV0_OVERLAY_EN 0xBFFFFFFF
++#define S_000420_OV0_SOFT_RESET(x) (((x) & 0x1) << 31)
++#define G_000420_OV0_SOFT_RESET(x) (((x) >> 31) & 0x1)
++#define C_000420_OV0_SOFT_RESET 0x7FFFFFFF
++#define R_00070C_CP_RB_RPTR_ADDR 0x00070C
++#define S_00070C_RB_RPTR_SWAP(x) (((x) & 0x3) << 0)
++#define G_00070C_RB_RPTR_SWAP(x) (((x) >> 0) & 0x3)
++#define C_00070C_RB_RPTR_SWAP 0xFFFFFFFC
++#define S_00070C_RB_RPTR_ADDR(x) (((x) & 0x3FFFFFFF) << 2)
++#define G_00070C_RB_RPTR_ADDR(x) (((x) >> 2) & 0x3FFFFFFF)
++#define C_00070C_RB_RPTR_ADDR 0x00000003
++#define R_000740_CP_CSQ_CNTL 0x000740
++#define S_000740_CSQ_CNT_PRIMARY(x) (((x) & 0xFF) << 0)
++#define G_000740_CSQ_CNT_PRIMARY(x) (((x) >> 0) & 0xFF)
++#define C_000740_CSQ_CNT_PRIMARY 0xFFFFFF00
++#define S_000740_CSQ_CNT_INDIRECT(x) (((x) & 0xFF) << 8)
++#define G_000740_CSQ_CNT_INDIRECT(x) (((x) >> 8) & 0xFF)
++#define C_000740_CSQ_CNT_INDIRECT 0xFFFF00FF
++#define S_000740_CSQ_MODE(x) (((x) & 0xF) << 28)
++#define G_000740_CSQ_MODE(x) (((x) >> 28) & 0xF)
++#define C_000740_CSQ_MODE 0x0FFFFFFF
++#define R_000770_SCRATCH_UMSK 0x000770
++#define S_000770_SCRATCH_UMSK(x) (((x) & 0x3F) << 0)
++#define G_000770_SCRATCH_UMSK(x) (((x) >> 0) & 0x3F)
++#define C_000770_SCRATCH_UMSK 0xFFFFFFC0
++#define S_000770_SCRATCH_SWAP(x) (((x) & 0x3) << 16)
++#define G_000770_SCRATCH_SWAP(x) (((x) >> 16) & 0x3)
++#define C_000770_SCRATCH_SWAP 0xFFFCFFFF
++#define R_000774_SCRATCH_ADDR 0x000774
++#define S_000774_SCRATCH_ADDR(x) (((x) & 0x7FFFFFF) << 5)
++#define G_000774_SCRATCH_ADDR(x) (((x) >> 5) & 0x7FFFFFF)
++#define C_000774_SCRATCH_ADDR 0x0000001F
++#define R_000E40_RBBM_STATUS 0x000E40
++#define S_000E40_CMDFIFO_AVAIL(x) (((x) & 0x7F) << 0)
++#define G_000E40_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x7F)
++#define C_000E40_CMDFIFO_AVAIL 0xFFFFFF80
++#define S_000E40_HIRQ_ON_RBB(x) (((x) & 0x1) << 8)
++#define G_000E40_HIRQ_ON_RBB(x) (((x) >> 8) & 0x1)
++#define C_000E40_HIRQ_ON_RBB 0xFFFFFEFF
++#define S_000E40_CPRQ_ON_RBB(x) (((x) & 0x1) << 9)
++#define G_000E40_CPRQ_ON_RBB(x) (((x) >> 9) & 0x1)
++#define C_000E40_CPRQ_ON_RBB 0xFFFFFDFF
++#define S_000E40_CFRQ_ON_RBB(x) (((x) & 0x1) << 10)
++#define G_000E40_CFRQ_ON_RBB(x) (((x) >> 10) & 0x1)
++#define C_000E40_CFRQ_ON_RBB 0xFFFFFBFF
++#define S_000E40_HIRQ_IN_RTBUF(x) (((x) & 0x1) << 11)
++#define G_000E40_HIRQ_IN_RTBUF(x) (((x) >> 11) & 0x1)
++#define C_000E40_HIRQ_IN_RTBUF 0xFFFFF7FF
++#define S_000E40_CPRQ_IN_RTBUF(x) (((x) & 0x1) << 12)
++#define G_000E40_CPRQ_IN_RTBUF(x) (((x) >> 12) & 0x1)
++#define C_000E40_CPRQ_IN_RTBUF 0xFFFFEFFF
++#define S_000E40_CFRQ_IN_RTBUF(x) (((x) & 0x1) << 13)
++#define G_000E40_CFRQ_IN_RTBUF(x) (((x) >> 13) & 0x1)
++#define C_000E40_CFRQ_IN_RTBUF 0xFFFFDFFF
++#define S_000E40_CF_PIPE_BUSY(x) (((x) & 0x1) << 14)
++#define G_000E40_CF_PIPE_BUSY(x) (((x) >> 14) & 0x1)
++#define C_000E40_CF_PIPE_BUSY 0xFFFFBFFF
++#define S_000E40_ENG_EV_BUSY(x) (((x) & 0x1) << 15)
++#define G_000E40_ENG_EV_BUSY(x) (((x) >> 15) & 0x1)
++#define C_000E40_ENG_EV_BUSY 0xFFFF7FFF
++#define S_000E40_CP_CMDSTRM_BUSY(x) (((x) & 0x1) << 16)
++#define G_000E40_CP_CMDSTRM_BUSY(x) (((x) >> 16) & 0x1)
++#define C_000E40_CP_CMDSTRM_BUSY 0xFFFEFFFF
++#define S_000E40_E2_BUSY(x) (((x) & 0x1) << 17)
++#define G_000E40_E2_BUSY(x) (((x) >> 17) & 0x1)
++#define C_000E40_E2_BUSY 0xFFFDFFFF
++#define S_000E40_RB2D_BUSY(x) (((x) & 0x1) << 18)
++#define G_000E40_RB2D_BUSY(x) (((x) >> 18) & 0x1)
++#define C_000E40_RB2D_BUSY 0xFFFBFFFF
++#define S_000E40_RB3D_BUSY(x) (((x) & 0x1) << 19)
++#define G_000E40_RB3D_BUSY(x) (((x) >> 19) & 0x1)
++#define C_000E40_RB3D_BUSY 0xFFF7FFFF
++#define S_000E40_SE_BUSY(x) (((x) & 0x1) << 20)
++#define G_000E40_SE_BUSY(x) (((x) >> 20) & 0x1)
++#define C_000E40_SE_BUSY 0xFFEFFFFF
++#define S_000E40_RE_BUSY(x) (((x) & 0x1) << 21)
++#define G_000E40_RE_BUSY(x) (((x) >> 21) & 0x1)
++#define C_000E40_RE_BUSY 0xFFDFFFFF
++#define S_000E40_TAM_BUSY(x) (((x) & 0x1) << 22)
++#define G_000E40_TAM_BUSY(x) (((x) >> 22) & 0x1)
++#define C_000E40_TAM_BUSY 0xFFBFFFFF
++#define S_000E40_TDM_BUSY(x) (((x) & 0x1) << 23)
++#define G_000E40_TDM_BUSY(x) (((x) >> 23) & 0x1)
++#define C_000E40_TDM_BUSY 0xFF7FFFFF
++#define S_000E40_PB_BUSY(x) (((x) & 0x1) << 24)
++#define G_000E40_PB_BUSY(x) (((x) >> 24) & 0x1)
++#define C_000E40_PB_BUSY 0xFEFFFFFF
++#define S_000E40_GUI_ACTIVE(x) (((x) & 0x1) << 31)
++#define G_000E40_GUI_ACTIVE(x) (((x) >> 31) & 0x1)
++#define C_000E40_GUI_ACTIVE 0x7FFFFFFF
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/r200.c b/drivers/gpu/drm/radeon/r200.c
+new file mode 100644
+index 0000000..cf7fea5
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r200.c
+@@ -0,0 +1,455 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#include "drmP.h"
++#include "drm.h"
++#include "radeon_drm.h"
++#include "radeon_reg.h"
++#include "radeon.h"
++
++#include "r200_reg_safe.h"
++
++#include "r100_track.h"
++
++static int r200_get_vtx_size_0(uint32_t vtx_fmt_0)
++{
++ int vtx_size, i;
++ vtx_size = 2;
++
++ if (vtx_fmt_0 & R200_VTX_Z0)
++ vtx_size++;
++ if (vtx_fmt_0 & R200_VTX_W0)
++ vtx_size++;
++ /* blend weight */
++ if (vtx_fmt_0 & (0x7 << R200_VTX_WEIGHT_COUNT_SHIFT))
++ vtx_size += (vtx_fmt_0 >> R200_VTX_WEIGHT_COUNT_SHIFT) & 0x7;
++ if (vtx_fmt_0 & R200_VTX_PV_MATRIX_SEL)
++ vtx_size++;
++ if (vtx_fmt_0 & R200_VTX_N0)
++ vtx_size += 3;
++ if (vtx_fmt_0 & R200_VTX_POINT_SIZE)
++ vtx_size++;
++ if (vtx_fmt_0 & R200_VTX_DISCRETE_FOG)
++ vtx_size++;
++ if (vtx_fmt_0 & R200_VTX_SHININESS_0)
++ vtx_size++;
++ if (vtx_fmt_0 & R200_VTX_SHININESS_1)
++ vtx_size++;
++ for (i = 0; i < 8; i++) {
++ int color_size = (vtx_fmt_0 >> (11 + 2*i)) & 0x3;
++ switch (color_size) {
++ case 0: break;
++ case 1: vtx_size++; break;
++ case 2: vtx_size += 3; break;
++ case 3: vtx_size += 4; break;
++ }
++ }
++ if (vtx_fmt_0 & R200_VTX_XY1)
++ vtx_size += 2;
++ if (vtx_fmt_0 & R200_VTX_Z1)
++ vtx_size++;
++ if (vtx_fmt_0 & R200_VTX_W1)
++ vtx_size++;
++ if (vtx_fmt_0 & R200_VTX_N1)
++ vtx_size += 3;
++ return vtx_size;
++}
++
++static int r200_get_vtx_size_1(uint32_t vtx_fmt_1)
++{
++ int vtx_size, i, tex_size;
++ vtx_size = 0;
++ for (i = 0; i < 6; i++) {
++ tex_size = (vtx_fmt_1 >> (i * 3)) & 0x7;
++ if (tex_size > 4)
++ continue;
++ vtx_size += tex_size;
++ }
++ return vtx_size;
++}
++
++int r200_packet0_check(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt,
++ unsigned idx, unsigned reg)
++{
++ struct radeon_cs_reloc *reloc;
++ struct r100_cs_track *track;
++ volatile uint32_t *ib;
++ uint32_t tmp;
++ int r;
++ int i;
++ int face;
++ u32 tile_flags = 0;
++ u32 idx_value;
++
++ ib = p->ib->ptr;
++ track = (struct r100_cs_track *)p->track;
++ idx_value = radeon_get_ib_value(p, idx);
++ switch (reg) {
++ case RADEON_CRTC_GUI_TRIG_VLINE:
++ r = r100_cs_packet_parse_vline(p);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ break;
++ /* FIXME: only allow PACKET3 blit? easier to check for out of
++ * range access */
++ case RADEON_DST_PITCH_OFFSET:
++ case RADEON_SRC_PITCH_OFFSET:
++ r = r100_reloc_pitch_offset(p, pkt, idx, reg);
++ if (r)
++ return r;
++ break;
++ case RADEON_RB3D_DEPTHOFFSET:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->zb.robj = reloc->robj;
++ track->zb.offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ break;
++ case RADEON_RB3D_COLOROFFSET:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->cb[0].robj = reloc->robj;
++ track->cb[0].offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ break;
++ case R200_PP_TXOFFSET_0:
++ case R200_PP_TXOFFSET_1:
++ case R200_PP_TXOFFSET_2:
++ case R200_PP_TXOFFSET_3:
++ case R200_PP_TXOFFSET_4:
++ case R200_PP_TXOFFSET_5:
++ i = (reg - R200_PP_TXOFFSET_0) / 24;
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ track->textures[i].robj = reloc->robj;
++ break;
++ case R200_PP_CUBIC_OFFSET_F1_0:
++ case R200_PP_CUBIC_OFFSET_F2_0:
++ case R200_PP_CUBIC_OFFSET_F3_0:
++ case R200_PP_CUBIC_OFFSET_F4_0:
++ case R200_PP_CUBIC_OFFSET_F5_0:
++ case R200_PP_CUBIC_OFFSET_F1_1:
++ case R200_PP_CUBIC_OFFSET_F2_1:
++ case R200_PP_CUBIC_OFFSET_F3_1:
++ case R200_PP_CUBIC_OFFSET_F4_1:
++ case R200_PP_CUBIC_OFFSET_F5_1:
++ case R200_PP_CUBIC_OFFSET_F1_2:
++ case R200_PP_CUBIC_OFFSET_F2_2:
++ case R200_PP_CUBIC_OFFSET_F3_2:
++ case R200_PP_CUBIC_OFFSET_F4_2:
++ case R200_PP_CUBIC_OFFSET_F5_2:
++ case R200_PP_CUBIC_OFFSET_F1_3:
++ case R200_PP_CUBIC_OFFSET_F2_3:
++ case R200_PP_CUBIC_OFFSET_F3_3:
++ case R200_PP_CUBIC_OFFSET_F4_3:
++ case R200_PP_CUBIC_OFFSET_F5_3:
++ case R200_PP_CUBIC_OFFSET_F1_4:
++ case R200_PP_CUBIC_OFFSET_F2_4:
++ case R200_PP_CUBIC_OFFSET_F3_4:
++ case R200_PP_CUBIC_OFFSET_F4_4:
++ case R200_PP_CUBIC_OFFSET_F5_4:
++ case R200_PP_CUBIC_OFFSET_F1_5:
++ case R200_PP_CUBIC_OFFSET_F2_5:
++ case R200_PP_CUBIC_OFFSET_F3_5:
++ case R200_PP_CUBIC_OFFSET_F4_5:
++ case R200_PP_CUBIC_OFFSET_F5_5:
++ i = (reg - R200_PP_TXOFFSET_0) / 24;
++ face = (reg - ((i * 24) + R200_PP_TXOFFSET_0)) / 4;
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ track->textures[i].cube_info[face - 1].offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ track->textures[i].cube_info[face - 1].robj = reloc->robj;
++ break;
++ case RADEON_RE_WIDTH_HEIGHT:
++ track->maxy = ((idx_value >> 16) & 0x7FF);
++ break;
++ case RADEON_RB3D_COLORPITCH:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++
++ if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO)
++ tile_flags |= RADEON_COLOR_TILE_ENABLE;
++ if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO)
++ tile_flags |= RADEON_COLOR_MICROTILE_ENABLE;
++
++ tmp = idx_value & ~(0x7 << 16);
++ tmp |= tile_flags;
++ ib[idx] = tmp;
++
++ track->cb[0].pitch = idx_value & RADEON_COLORPITCH_MASK;
++ break;
++ case RADEON_RB3D_DEPTHPITCH:
++ track->zb.pitch = idx_value & RADEON_DEPTHPITCH_MASK;
++ break;
++ case RADEON_RB3D_CNTL:
++ switch ((idx_value >> RADEON_RB3D_COLOR_FORMAT_SHIFT) & 0x1f) {
++ case 7:
++ case 8:
++ case 9:
++ case 11:
++ case 12:
++ track->cb[0].cpp = 1;
++ break;
++ case 3:
++ case 4:
++ case 15:
++ track->cb[0].cpp = 2;
++ break;
++ case 6:
++ track->cb[0].cpp = 4;
++ break;
++ default:
++ DRM_ERROR("Invalid color buffer format (%d) !\n",
++ ((idx_value >> RADEON_RB3D_COLOR_FORMAT_SHIFT) & 0x1f));
++ return -EINVAL;
++ }
++ if (idx_value & RADEON_DEPTHXY_OFFSET_ENABLE) {
++ DRM_ERROR("No support for depth xy offset in kms\n");
++ return -EINVAL;
++ }
++
++ track->z_enabled = !!(idx_value & RADEON_Z_ENABLE);
++ break;
++ case RADEON_RB3D_ZSTENCILCNTL:
++ switch (idx_value & 0xf) {
++ case 0:
++ track->zb.cpp = 2;
++ break;
++ case 2:
++ case 3:
++ case 4:
++ case 5:
++ case 9:
++ case 11:
++ track->zb.cpp = 4;
++ break;
++ default:
++ break;
++ }
++ break;
++ case RADEON_RB3D_ZPASS_ADDR:
++ r = r100_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ r100_cs_dump_packet(p, pkt);
++ return r;
++ }
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
++ break;
++ case RADEON_PP_CNTL:
++ {
++ uint32_t temp = idx_value >> 4;
++ for (i = 0; i < track->num_texture; i++)
++ track->textures[i].enabled = !!(temp & (1 << i));
++ }
++ break;
++ case RADEON_SE_VF_CNTL:
++ track->vap_vf_cntl = idx_value;
++ break;
++ case 0x210c:
++ /* VAP_VF_MAX_VTX_INDX */
++ track->max_indx = idx_value & 0x00FFFFFFUL;
++ break;
++ case R200_SE_VTX_FMT_0:
++ track->vtx_size = r200_get_vtx_size_0(idx_value);
++ break;
++ case R200_SE_VTX_FMT_1:
++ track->vtx_size += r200_get_vtx_size_1(idx_value);
++ break;
++ case R200_PP_TXSIZE_0:
++ case R200_PP_TXSIZE_1:
++ case R200_PP_TXSIZE_2:
++ case R200_PP_TXSIZE_3:
++ case R200_PP_TXSIZE_4:
++ case R200_PP_TXSIZE_5:
++ i = (reg - R200_PP_TXSIZE_0) / 32;
++ track->textures[i].width = (idx_value & RADEON_TEX_USIZE_MASK) + 1;
++ track->textures[i].height = ((idx_value & RADEON_TEX_VSIZE_MASK) >> RADEON_TEX_VSIZE_SHIFT) + 1;
++ break;
++ case R200_PP_TXPITCH_0:
++ case R200_PP_TXPITCH_1:
++ case R200_PP_TXPITCH_2:
++ case R200_PP_TXPITCH_3:
++ case R200_PP_TXPITCH_4:
++ case R200_PP_TXPITCH_5:
++ i = (reg - R200_PP_TXPITCH_0) / 32;
++ track->textures[i].pitch = idx_value + 32;
++ break;
++ case R200_PP_TXFILTER_0:
++ case R200_PP_TXFILTER_1:
++ case R200_PP_TXFILTER_2:
++ case R200_PP_TXFILTER_3:
++ case R200_PP_TXFILTER_4:
++ case R200_PP_TXFILTER_5:
++ i = (reg - R200_PP_TXFILTER_0) / 32;
++ track->textures[i].num_levels = ((idx_value & R200_MAX_MIP_LEVEL_MASK)
++ >> R200_MAX_MIP_LEVEL_SHIFT);
++ tmp = (idx_value >> 23) & 0x7;
++ if (tmp == 2 || tmp == 6)
++ track->textures[i].roundup_w = false;
++ tmp = (idx_value >> 27) & 0x7;
++ if (tmp == 2 || tmp == 6)
++ track->textures[i].roundup_h = false;
++ break;
++ case R200_PP_TXMULTI_CTL_0:
++ case R200_PP_TXMULTI_CTL_1:
++ case R200_PP_TXMULTI_CTL_2:
++ case R200_PP_TXMULTI_CTL_3:
++ case R200_PP_TXMULTI_CTL_4:
++ case R200_PP_TXMULTI_CTL_5:
++ i = (reg - R200_PP_TXMULTI_CTL_0) / 32;
++ break;
++ case R200_PP_TXFORMAT_X_0:
++ case R200_PP_TXFORMAT_X_1:
++ case R200_PP_TXFORMAT_X_2:
++ case R200_PP_TXFORMAT_X_3:
++ case R200_PP_TXFORMAT_X_4:
++ case R200_PP_TXFORMAT_X_5:
++ i = (reg - R200_PP_TXFORMAT_X_0) / 32;
++ track->textures[i].txdepth = idx_value & 0x7;
++ tmp = (idx_value >> 16) & 0x3;
++ /* 2D, 3D, CUBE */
++ switch (tmp) {
++ case 0:
++ case 5:
++ case 6:
++ case 7:
++ track->textures[i].tex_coord_type = 0;
++ break;
++ case 1:
++ track->textures[i].tex_coord_type = 1;
++ break;
++ case 2:
++ track->textures[i].tex_coord_type = 2;
++ break;
++ }
++ break;
++ case R200_PP_TXFORMAT_0:
++ case R200_PP_TXFORMAT_1:
++ case R200_PP_TXFORMAT_2:
++ case R200_PP_TXFORMAT_3:
++ case R200_PP_TXFORMAT_4:
++ case R200_PP_TXFORMAT_5:
++ i = (reg - R200_PP_TXFORMAT_0) / 32;
++ if (idx_value & R200_TXFORMAT_NON_POWER2) {
++ track->textures[i].use_pitch = 1;
++ } else {
++ track->textures[i].use_pitch = 0;
++ track->textures[i].width = 1 << ((idx_value >> RADEON_TXFORMAT_WIDTH_SHIFT) & RADEON_TXFORMAT_WIDTH_MASK);
++ track->textures[i].height = 1 << ((idx_value >> RADEON_TXFORMAT_HEIGHT_SHIFT) & RADEON_TXFORMAT_HEIGHT_MASK);
++ }
++ switch ((idx_value & RADEON_TXFORMAT_FORMAT_MASK)) {
++ case R200_TXFORMAT_I8:
++ case R200_TXFORMAT_RGB332:
++ case R200_TXFORMAT_Y8:
++ track->textures[i].cpp = 1;
++ break;
++ case R200_TXFORMAT_DXT1:
++ case R200_TXFORMAT_AI88:
++ case R200_TXFORMAT_ARGB1555:
++ case R200_TXFORMAT_RGB565:
++ case R200_TXFORMAT_ARGB4444:
++ case R200_TXFORMAT_VYUY422:
++ case R200_TXFORMAT_YVYU422:
++ case R200_TXFORMAT_LDVDU655:
++ case R200_TXFORMAT_DVDU88:
++ case R200_TXFORMAT_AVYU4444:
++ track->textures[i].cpp = 2;
++ break;
++ case R200_TXFORMAT_ARGB8888:
++ case R200_TXFORMAT_RGBA8888:
++ case R200_TXFORMAT_ABGR8888:
++ case R200_TXFORMAT_BGR111110:
++ case R200_TXFORMAT_LDVDU8888:
++ case R200_TXFORMAT_DXT23:
++ case R200_TXFORMAT_DXT45:
++ track->textures[i].cpp = 4;
++ break;
++ }
++ track->textures[i].cube_info[4].width = 1 << ((idx_value >> 16) & 0xf);
++ track->textures[i].cube_info[4].height = 1 << ((idx_value >> 20) & 0xf);
++ break;
++ case R200_PP_CUBIC_FACES_0:
++ case R200_PP_CUBIC_FACES_1:
++ case R200_PP_CUBIC_FACES_2:
++ case R200_PP_CUBIC_FACES_3:
++ case R200_PP_CUBIC_FACES_4:
++ case R200_PP_CUBIC_FACES_5:
++ tmp = idx_value;
++ i = (reg - R200_PP_CUBIC_FACES_0) / 32;
++ for (face = 0; face < 4; face++) {
++ track->textures[i].cube_info[face].width = 1 << ((tmp >> (face * 8)) & 0xf);
++ track->textures[i].cube_info[face].height = 1 << ((tmp >> ((face * 8) + 4)) & 0xf);
++ }
++ break;
++ default:
++ printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n",
++ reg, idx);
++ return -EINVAL;
++ }
++ return 0;
++}
++
++int r200_init(struct radeon_device *rdev)
++{
++ rdev->config.r100.reg_safe_bm = r200_reg_safe_bm;
++ rdev->config.r100.reg_safe_bm_size = ARRAY_SIZE(r200_reg_safe_bm);
++ return 0;
++}
+diff --git a/drivers/gpu/drm/radeon/r300.c b/drivers/gpu/drm/radeon/r300.c
+index 051bca6..1ebea8c 100644
+--- a/drivers/gpu/drm/radeon/r300.c
++++ b/drivers/gpu/drm/radeon/r300.c
+@@ -31,7 +31,10 @@
+ #include "radeon_reg.h"
+ #include "radeon.h"
+ #include "radeon_drm.h"
+-#include "radeon_share.h"
++#include "r100_track.h"
++#include "r300d.h"
++
++#include "r300_reg_safe.h"
+
+ /* r300,r350,rv350,rv370,rv380 depends on : */
+ void r100_hdp_reset(struct radeon_device *rdev);
+@@ -39,7 +42,6 @@ int r100_cp_reset(struct radeon_device *rdev);
+ int r100_rb2d_reset(struct radeon_device *rdev);
+ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
+ int r100_pci_gart_enable(struct radeon_device *rdev);
+-void r100_pci_gart_disable(struct radeon_device *rdev);
+ void r100_mc_setup(struct radeon_device *rdev);
+ void r100_mc_disable_clients(struct radeon_device *rdev);
+ int r100_gui_wait_for_idle(struct radeon_device *rdev);
+@@ -47,14 +49,10 @@ int r100_cs_packet_parse(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt,
+ unsigned idx);
+ int r100_cs_packet_parse_vline(struct radeon_cs_parser *p);
+-int r100_cs_packet_next_reloc(struct radeon_cs_parser *p,
+- struct radeon_cs_reloc **cs_reloc);
+ int r100_cs_parse_packet0(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt,
+ const unsigned *auth, unsigned n,
+ radeon_packet0_check_t check);
+-void r100_cs_dump_packet(struct radeon_cs_parser *p,
+- struct radeon_cs_packet *pkt);
+ int r100_cs_track_check_pkt3_indx_buffer(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt,
+ struct radeon_object *robj);
+@@ -87,26 +85,57 @@ void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev)
+ mb();
+ }
+
+-int rv370_pcie_gart_enable(struct radeon_device *rdev)
++int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr)
++{
++ void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;
++
++ if (i < 0 || i > rdev->gart.num_gpu_pages) {
++ return -EINVAL;
++ }
++ addr = (lower_32_bits(addr) >> 8) |
++ ((upper_32_bits(addr) & 0xff) << 24) |
++ 0xc;
++ /* on x86 we want this to be CPU endian, on powerpc
++ * on powerpc without HW swappers, it'll get swapped on way
++ * into VRAM - so no need for cpu_to_le32 on VRAM tables */
++ writel(addr, ((void __iomem *)ptr) + (i * 4));
++ return 0;
++}
++
++int rv370_pcie_gart_init(struct radeon_device *rdev)
+ {
+- uint32_t table_addr;
+- uint32_t tmp;
+ int r;
+
++ if (rdev->gart.table.vram.robj) {
++ WARN(1, "RV370 PCIE GART already initialized.\n");
++ return 0;
++ }
+ /* Initialize common gart structure */
+ r = radeon_gart_init(rdev);
+- if (r) {
++ if (r)
+ return r;
+- }
+ r = rv370_debugfs_pcie_gart_info_init(rdev);
+- if (r) {
++ if (r)
+ DRM_ERROR("Failed to register debugfs file for PCIE gart !\n");
+- }
+ rdev->gart.table_size = rdev->gart.num_gpu_pages * 4;
+- r = radeon_gart_table_vram_alloc(rdev);
+- if (r) {
+- return r;
++ rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
++ rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
++ return radeon_gart_table_vram_alloc(rdev);
++}
++
++int rv370_pcie_gart_enable(struct radeon_device *rdev)
++{
++ uint32_t table_addr;
++ uint32_t tmp;
++ int r;
++
++ if (rdev->gart.table.vram.robj == NULL) {
++ dev_err(rdev->dev, "No VRAM object for PCIE GART.\n");
++ return -EINVAL;
+ }
++ r = radeon_gart_table_vram_pin(rdev);
++ if (r)
++ return r;
+ /* discard memory request outside of configured range */
+ tmp = RADEON_PCIE_TX_GART_UNMAPPED_ACCESS_DISCARD;
+ WREG32_PCIE(RADEON_PCIE_TX_GART_CNTL, tmp);
+@@ -128,7 +157,7 @@ int rv370_pcie_gart_enable(struct radeon_device *rdev)
+ WREG32_PCIE(RADEON_PCIE_TX_GART_CNTL, tmp);
+ rv370_pcie_gart_tlb_flush(rdev);
+ DRM_INFO("PCIE GART of %uM enabled (table at 0x%08X).\n",
+- rdev->mc.gtt_size >> 20, table_addr);
++ (unsigned)(rdev->mc.gtt_size >> 20), table_addr);
+ rdev->gart.ready = true;
+ return 0;
+ }
+@@ -146,45 +175,13 @@ void rv370_pcie_gart_disable(struct radeon_device *rdev)
+ }
+ }
+
+-int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr)
+-{
+- void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;
+-
+- if (i < 0 || i > rdev->gart.num_gpu_pages) {
+- return -EINVAL;
+- }
+- addr = (lower_32_bits(addr) >> 8) |
+- ((upper_32_bits(addr) & 0xff) << 24) |
+- 0xc;
+- /* on x86 we want this to be CPU endian, on powerpc
+- * on powerpc without HW swappers, it'll get swapped on way
+- * into VRAM - so no need for cpu_to_le32 on VRAM tables */
+- writel(addr, ((void __iomem *)ptr) + (i * 4));
+- return 0;
+-}
+-
+-int r300_gart_enable(struct radeon_device *rdev)
++void rv370_pcie_gart_fini(struct radeon_device *rdev)
+ {
+-#if __OS_HAS_AGP
+- if (rdev->flags & RADEON_IS_AGP) {
+- if (rdev->family > CHIP_RV350) {
+- rv370_pcie_gart_disable(rdev);
+- } else {
+- r100_pci_gart_disable(rdev);
+- }
+- return 0;
+- }
+-#endif
+- if (rdev->flags & RADEON_IS_PCIE) {
+- rdev->asic->gart_disable = &rv370_pcie_gart_disable;
+- rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
+- rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
+- return rv370_pcie_gart_enable(rdev);
+- }
+- return r100_pci_gart_enable(rdev);
++ rv370_pcie_gart_disable(rdev);
++ radeon_gart_table_vram_free(rdev);
++ radeon_gart_fini(rdev);
+ }
+
+-
+ /*
+ * MC
+ */
+@@ -232,14 +229,6 @@ int r300_mc_init(struct radeon_device *rdev)
+
+ void r300_mc_fini(struct radeon_device *rdev)
+ {
+- if (rdev->flags & RADEON_IS_PCIE) {
+- rv370_pcie_gart_disable(rdev);
+- radeon_gart_table_vram_free(rdev);
+- } else {
+- r100_pci_gart_disable(rdev);
+- radeon_gart_table_ram_free(rdev);
+- }
+- radeon_gart_fini(rdev);
+ }
+
+
+@@ -704,315 +693,22 @@ int rv370_debugfs_pcie_gart_info_init(struct radeon_device *rdev)
+ /*
+ * CS functions
+ */
+-struct r300_cs_track_cb {
+- struct radeon_object *robj;
+- unsigned pitch;
+- unsigned cpp;
+- unsigned offset;
+-};
+-
+-struct r300_cs_track_array {
+- struct radeon_object *robj;
+- unsigned esize;
+-};
+-
+-struct r300_cs_track_texture {
+- struct radeon_object *robj;
+- unsigned pitch;
+- unsigned width;
+- unsigned height;
+- unsigned num_levels;
+- unsigned cpp;
+- unsigned tex_coord_type;
+- unsigned txdepth;
+- unsigned width_11;
+- unsigned height_11;
+- bool use_pitch;
+- bool enabled;
+- bool roundup_w;
+- bool roundup_h;
+-};
+-
+-struct r300_cs_track {
+- unsigned num_cb;
+- unsigned maxy;
+- unsigned vtx_size;
+- unsigned vap_vf_cntl;
+- unsigned immd_dwords;
+- unsigned num_arrays;
+- unsigned max_indx;
+- struct r300_cs_track_array arrays[11];
+- struct r300_cs_track_cb cb[4];
+- struct r300_cs_track_cb zb;
+- struct r300_cs_track_texture textures[16];
+- bool z_enabled;
+-};
+-
+-static inline void r300_cs_track_texture_print(struct r300_cs_track_texture *t)
+-{
+- DRM_ERROR("pitch %d\n", t->pitch);
+- DRM_ERROR("width %d\n", t->width);
+- DRM_ERROR("height %d\n", t->height);
+- DRM_ERROR("num levels %d\n", t->num_levels);
+- DRM_ERROR("depth %d\n", t->txdepth);
+- DRM_ERROR("bpp %d\n", t->cpp);
+- DRM_ERROR("coordinate type %d\n", t->tex_coord_type);
+- DRM_ERROR("width round to power of 2 %d\n", t->roundup_w);
+- DRM_ERROR("height round to power of 2 %d\n", t->roundup_h);
+-}
+-
+-static inline int r300_cs_track_texture_check(struct radeon_device *rdev,
+- struct r300_cs_track *track)
+-{
+- struct radeon_object *robj;
+- unsigned long size;
+- unsigned u, i, w, h;
+-
+- for (u = 0; u < 16; u++) {
+- if (!track->textures[u].enabled)
+- continue;
+- robj = track->textures[u].robj;
+- if (robj == NULL) {
+- DRM_ERROR("No texture bound to unit %u\n", u);
+- return -EINVAL;
+- }
+- size = 0;
+- for (i = 0; i <= track->textures[u].num_levels; i++) {
+- if (track->textures[u].use_pitch) {
+- w = track->textures[u].pitch / (1 << i);
+- } else {
+- w = track->textures[u].width / (1 << i);
+- if (rdev->family >= CHIP_RV515)
+- w |= track->textures[u].width_11;
+- if (track->textures[u].roundup_w)
+- w = roundup_pow_of_two(w);
+- }
+- h = track->textures[u].height / (1 << i);
+- if (rdev->family >= CHIP_RV515)
+- h |= track->textures[u].height_11;
+- if (track->textures[u].roundup_h)
+- h = roundup_pow_of_two(h);
+- size += w * h;
+- }
+- size *= track->textures[u].cpp;
+- switch (track->textures[u].tex_coord_type) {
+- case 0:
+- break;
+- case 1:
+- size *= (1 << track->textures[u].txdepth);
+- break;
+- case 2:
+- size *= 6;
+- break;
+- default:
+- DRM_ERROR("Invalid texture coordinate type %u for unit "
+- "%u\n", track->textures[u].tex_coord_type, u);
+- return -EINVAL;
+- }
+- if (size > radeon_object_size(robj)) {
+- DRM_ERROR("Texture of unit %u needs %lu bytes but is "
+- "%lu\n", u, size, radeon_object_size(robj));
+- r300_cs_track_texture_print(&track->textures[u]);
+- return -EINVAL;
+- }
+- }
+- return 0;
+-}
+-
+-int r300_cs_track_check(struct radeon_device *rdev, struct r300_cs_track *track)
+-{
+- unsigned i;
+- unsigned long size;
+- unsigned prim_walk;
+- unsigned nverts;
+-
+- for (i = 0; i < track->num_cb; i++) {
+- if (track->cb[i].robj == NULL) {
+- DRM_ERROR("[drm] No buffer for color buffer %d !\n", i);
+- return -EINVAL;
+- }
+- size = track->cb[i].pitch * track->cb[i].cpp * track->maxy;
+- size += track->cb[i].offset;
+- if (size > radeon_object_size(track->cb[i].robj)) {
+- DRM_ERROR("[drm] Buffer too small for color buffer %d "
+- "(need %lu have %lu) !\n", i, size,
+- radeon_object_size(track->cb[i].robj));
+- DRM_ERROR("[drm] color buffer %d (%u %u %u %u)\n",
+- i, track->cb[i].pitch, track->cb[i].cpp,
+- track->cb[i].offset, track->maxy);
+- return -EINVAL;
+- }
+- }
+- if (track->z_enabled) {
+- if (track->zb.robj == NULL) {
+- DRM_ERROR("[drm] No buffer for z buffer !\n");
+- return -EINVAL;
+- }
+- size = track->zb.pitch * track->zb.cpp * track->maxy;
+- size += track->zb.offset;
+- if (size > radeon_object_size(track->zb.robj)) {
+- DRM_ERROR("[drm] Buffer too small for z buffer "
+- "(need %lu have %lu) !\n", size,
+- radeon_object_size(track->zb.robj));
+- return -EINVAL;
+- }
+- }
+- prim_walk = (track->vap_vf_cntl >> 4) & 0x3;
+- nverts = (track->vap_vf_cntl >> 16) & 0xFFFF;
+- switch (prim_walk) {
+- case 1:
+- for (i = 0; i < track->num_arrays; i++) {
+- size = track->arrays[i].esize * track->max_indx * 4;
+- if (track->arrays[i].robj == NULL) {
+- DRM_ERROR("(PW %u) Vertex array %u no buffer "
+- "bound\n", prim_walk, i);
+- return -EINVAL;
+- }
+- if (size > radeon_object_size(track->arrays[i].robj)) {
+- DRM_ERROR("(PW %u) Vertex array %u need %lu dwords "
+- "have %lu dwords\n", prim_walk, i,
+- size >> 2,
+- radeon_object_size(track->arrays[i].robj) >> 2);
+- DRM_ERROR("Max indices %u\n", track->max_indx);
+- return -EINVAL;
+- }
+- }
+- break;
+- case 2:
+- for (i = 0; i < track->num_arrays; i++) {
+- size = track->arrays[i].esize * (nverts - 1) * 4;
+- if (track->arrays[i].robj == NULL) {
+- DRM_ERROR("(PW %u) Vertex array %u no buffer "
+- "bound\n", prim_walk, i);
+- return -EINVAL;
+- }
+- if (size > radeon_object_size(track->arrays[i].robj)) {
+- DRM_ERROR("(PW %u) Vertex array %u need %lu dwords "
+- "have %lu dwords\n", prim_walk, i, size >> 2,
+- radeon_object_size(track->arrays[i].robj) >> 2);
+- return -EINVAL;
+- }
+- }
+- break;
+- case 3:
+- size = track->vtx_size * nverts;
+- if (size != track->immd_dwords) {
+- DRM_ERROR("IMMD draw %u dwors but needs %lu dwords\n",
+- track->immd_dwords, size);
+- DRM_ERROR("VAP_VF_CNTL.NUM_VERTICES %u, VTX_SIZE %u\n",
+- nverts, track->vtx_size);
+- return -EINVAL;
+- }
+- break;
+- default:
+- DRM_ERROR("[drm] Invalid primitive walk %d for VAP_VF_CNTL\n",
+- prim_walk);
+- return -EINVAL;
+- }
+- return r300_cs_track_texture_check(rdev, track);
+-}
+-
+-static inline void r300_cs_track_clear(struct r300_cs_track *track)
+-{
+- unsigned i;
+-
+- track->num_cb = 4;
+- track->maxy = 4096;
+- for (i = 0; i < track->num_cb; i++) {
+- track->cb[i].robj = NULL;
+- track->cb[i].pitch = 8192;
+- track->cb[i].cpp = 16;
+- track->cb[i].offset = 0;
+- }
+- track->z_enabled = true;
+- track->zb.robj = NULL;
+- track->zb.pitch = 8192;
+- track->zb.cpp = 4;
+- track->zb.offset = 0;
+- track->vtx_size = 0x7F;
+- track->immd_dwords = 0xFFFFFFFFUL;
+- track->num_arrays = 11;
+- track->max_indx = 0x00FFFFFFUL;
+- for (i = 0; i < track->num_arrays; i++) {
+- track->arrays[i].robj = NULL;
+- track->arrays[i].esize = 0x7F;
+- }
+- for (i = 0; i < 16; i++) {
+- track->textures[i].pitch = 16536;
+- track->textures[i].width = 16536;
+- track->textures[i].height = 16536;
+- track->textures[i].width_11 = 1 << 11;
+- track->textures[i].height_11 = 1 << 11;
+- track->textures[i].num_levels = 12;
+- track->textures[i].txdepth = 16;
+- track->textures[i].cpp = 64;
+- track->textures[i].tex_coord_type = 1;
+- track->textures[i].robj = NULL;
+- /* CS IB emission code makes sure texture unit are disabled */
+- track->textures[i].enabled = false;
+- track->textures[i].roundup_w = true;
+- track->textures[i].roundup_h = true;
+- }
+-}
+-
+-static const unsigned r300_reg_safe_bm[159] = {
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0x17FF1FFF, 0xFFFFFFFC, 0xFFFFFFFF, 0xFF30FFBF,
+- 0xFFFFFFF8, 0xC3E6FFFF, 0xFFFFF6DF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF03F,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFEFCE, 0xF00EBFFF, 0x007C0000,
+- 0xF0000078, 0xFF000009, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFF7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFC78, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF,
+- 0x38FF8F50, 0xFFF88082, 0xF000000C, 0xFAE009FF,
+- 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000,
+- 0x00000000, 0x0000C100, 0x00000000, 0x00000000,
+- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+- 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFF80FFFF,
+- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+- 0x0003FC01, 0xFFFFFCF8, 0xFF800B19,
+-};
+-
+ static int r300_packet0_check(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt,
+ unsigned idx, unsigned reg)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ struct radeon_cs_reloc *reloc;
+- struct r300_cs_track *track;
++ struct r100_cs_track *track;
+ volatile uint32_t *ib;
+ uint32_t tmp, tile_flags = 0;
+ unsigned i;
+ int r;
++ u32 idx_value;
+
+ ib = p->ib->ptr;
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
+- track = (struct r300_cs_track*)p->track;
++ track = (struct r100_cs_track *)p->track;
++ idx_value = radeon_get_ib_value(p, idx);
++
+ switch(reg) {
+ case AVIVO_D1MODE_VLINE_START_END:
+ case RADEON_CRTC_GUI_TRIG_VLINE:
+@@ -1026,28 +722,9 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ break;
+ case RADEON_DST_PITCH_OFFSET:
+ case RADEON_SRC_PITCH_OFFSET:
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
+- idx, reg);
+- r100_cs_dump_packet(p, pkt);
++ r = r100_reloc_pitch_offset(p, pkt, idx, reg);
++ if (r)
+ return r;
+- }
+- tmp = ib_chunk->kdata[idx] & 0x003fffff;
+- tmp += (((u32)reloc->lobj.gpu_offset) >> 10);
+-
+- if (reloc->lobj.tiling_flags & RADEON_TILING_MACRO)
+- tile_flags |= RADEON_DST_TILE_MACRO;
+- if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO) {
+- if (reg == RADEON_SRC_PITCH_OFFSET) {
+- DRM_ERROR("Cannot src blit from microtiled surface\n");
+- r100_cs_dump_packet(p, pkt);
+- return -EINVAL;
+- }
+- tile_flags |= RADEON_DST_TILE_MICRO;
+- }
+- tmp |= tile_flags;
+- ib[idx] = (ib_chunk->kdata[idx] & 0x3fc00000) | tmp;
+ break;
+ case R300_RB3D_COLOROFFSET0:
+ case R300_RB3D_COLOROFFSET1:
+@@ -1062,8 +739,8 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ return r;
+ }
+ track->cb[i].robj = reloc->robj;
+- track->cb[i].offset = ib_chunk->kdata[idx];
+- ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset);
++ track->cb[i].offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
+ break;
+ case R300_ZB_DEPTHOFFSET:
+ r = r100_cs_packet_next_reloc(p, &reloc);
+@@ -1074,8 +751,8 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ return r;
+ }
+ track->zb.robj = reloc->robj;
+- track->zb.offset = ib_chunk->kdata[idx];
+- ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset);
++ track->zb.offset = idx_value;
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
+ break;
+ case R300_TX_OFFSET_0:
+ case R300_TX_OFFSET_0+4:
+@@ -1101,32 +778,32 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ r100_cs_dump_packet(p, pkt);
+ return r;
+ }
+- ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset);
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
+ track->textures[i].robj = reloc->robj;
+ break;
+ /* Tracked registers */
+ case 0x2084:
+ /* VAP_VF_CNTL */
+- track->vap_vf_cntl = ib_chunk->kdata[idx];
++ track->vap_vf_cntl = idx_value;
+ break;
+ case 0x20B4:
+ /* VAP_VTX_SIZE */
+- track->vtx_size = ib_chunk->kdata[idx] & 0x7F;
++ track->vtx_size = idx_value & 0x7F;
+ break;
+ case 0x2134:
+ /* VAP_VF_MAX_VTX_INDX */
+- track->max_indx = ib_chunk->kdata[idx] & 0x00FFFFFFUL;
++ track->max_indx = idx_value & 0x00FFFFFFUL;
+ break;
+ case 0x43E4:
+ /* SC_SCISSOR1 */
+- track->maxy = ((ib_chunk->kdata[idx] >> 13) & 0x1FFF) + 1;
++ track->maxy = ((idx_value >> 13) & 0x1FFF) + 1;
+ if (p->rdev->family < CHIP_RV515) {
+ track->maxy -= 1440;
+ }
+ break;
+ case 0x4E00:
+ /* RB3D_CCTL */
+- track->num_cb = ((ib_chunk->kdata[idx] >> 5) & 0x3) + 1;
++ track->num_cb = ((idx_value >> 5) & 0x3) + 1;
+ break;
+ case 0x4E38:
+ case 0x4E3C:
+@@ -1149,13 +826,13 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO)
+ tile_flags |= R300_COLOR_MICROTILE_ENABLE;
+
+- tmp = ib_chunk->kdata[idx] & ~(0x7 << 16);
++ tmp = idx_value & ~(0x7 << 16);
+ tmp |= tile_flags;
+ ib[idx] = tmp;
+
+ i = (reg - 0x4E38) >> 2;
+- track->cb[i].pitch = ib_chunk->kdata[idx] & 0x3FFE;
+- switch (((ib_chunk->kdata[idx] >> 21) & 0xF)) {
++ track->cb[i].pitch = idx_value & 0x3FFE;
++ switch (((idx_value >> 21) & 0xF)) {
+ case 9:
+ case 11:
+ case 12:
+@@ -1178,13 +855,13 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ break;
+ default:
+ DRM_ERROR("Invalid color buffer format (%d) !\n",
+- ((ib_chunk->kdata[idx] >> 21) & 0xF));
++ ((idx_value >> 21) & 0xF));
+ return -EINVAL;
+ }
+ break;
+ case 0x4F00:
+ /* ZB_CNTL */
+- if (ib_chunk->kdata[idx] & 2) {
++ if (idx_value & 2) {
+ track->z_enabled = true;
+ } else {
+ track->z_enabled = false;
+@@ -1192,7 +869,7 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ break;
+ case 0x4F10:
+ /* ZB_FORMAT */
+- switch ((ib_chunk->kdata[idx] & 0xF)) {
++ switch ((idx_value & 0xF)) {
+ case 0:
+ case 1:
+ track->zb.cpp = 2;
+@@ -1202,7 +879,7 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ break;
+ default:
+ DRM_ERROR("Invalid z buffer format (%d) !\n",
+- (ib_chunk->kdata[idx] & 0xF));
++ (idx_value & 0xF));
+ return -EINVAL;
+ }
+ break;
+@@ -1221,17 +898,17 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ if (reloc->lobj.tiling_flags & RADEON_TILING_MICRO)
+ tile_flags |= R300_DEPTHMICROTILE_TILED;;
+
+- tmp = ib_chunk->kdata[idx] & ~(0x7 << 16);
++ tmp = idx_value & ~(0x7 << 16);
+ tmp |= tile_flags;
+ ib[idx] = tmp;
+
+- track->zb.pitch = ib_chunk->kdata[idx] & 0x3FFC;
++ track->zb.pitch = idx_value & 0x3FFC;
+ break;
+ case 0x4104:
+ for (i = 0; i < 16; i++) {
+ bool enabled;
+
+- enabled = !!(ib_chunk->kdata[idx] & (1 << i));
++ enabled = !!(idx_value & (1 << i));
+ track->textures[i].enabled = enabled;
+ }
+ break;
+@@ -1253,50 +930,49 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ case 0x44FC:
+ /* TX_FORMAT1_[0-15] */
+ i = (reg - 0x44C0) >> 2;
+- tmp = (ib_chunk->kdata[idx] >> 25) & 0x3;
++ tmp = (idx_value >> 25) & 0x3;
+ track->textures[i].tex_coord_type = tmp;
+- switch ((ib_chunk->kdata[idx] & 0x1F)) {
+- case 0:
+- case 2:
+- case 5:
+- case 18:
+- case 20:
+- case 21:
++ switch ((idx_value & 0x1F)) {
++ case R300_TX_FORMAT_X8:
++ case R300_TX_FORMAT_Y4X4:
++ case R300_TX_FORMAT_Z3Y3X2:
+ track->textures[i].cpp = 1;
+ break;
+- case 1:
+- case 3:
+- case 6:
+- case 7:
+- case 10:
+- case 11:
+- case 19:
+- case 22:
+- case 24:
++ case R300_TX_FORMAT_X16:
++ case R300_TX_FORMAT_Y8X8:
++ case R300_TX_FORMAT_Z5Y6X5:
++ case R300_TX_FORMAT_Z6Y5X5:
++ case R300_TX_FORMAT_W4Z4Y4X4:
++ case R300_TX_FORMAT_W1Z5Y5X5:
++ case R300_TX_FORMAT_DXT1:
++ case R300_TX_FORMAT_D3DMFT_CxV8U8:
++ case R300_TX_FORMAT_B8G8_B8G8:
++ case R300_TX_FORMAT_G8R8_G8B8:
+ track->textures[i].cpp = 2;
+ break;
+- case 4:
+- case 8:
+- case 9:
+- case 12:
+- case 13:
+- case 23:
+- case 25:
+- case 27:
+- case 30:
++ case R300_TX_FORMAT_Y16X16:
++ case R300_TX_FORMAT_Z11Y11X10:
++ case R300_TX_FORMAT_Z10Y11X11:
++ case R300_TX_FORMAT_W8Z8Y8X8:
++ case R300_TX_FORMAT_W2Z10Y10X10:
++ case 0x17:
++ case R300_TX_FORMAT_FL_I32:
++ case 0x1e:
++ case R300_TX_FORMAT_DXT3:
++ case R300_TX_FORMAT_DXT5:
+ track->textures[i].cpp = 4;
+ break;
+- case 14:
+- case 26:
+- case 28:
++ case R300_TX_FORMAT_W16Z16Y16X16:
++ case R300_TX_FORMAT_FL_R16G16B16A16:
++ case R300_TX_FORMAT_FL_I32A32:
+ track->textures[i].cpp = 8;
+ break;
+- case 29:
++ case R300_TX_FORMAT_FL_R32G32B32A32:
+ track->textures[i].cpp = 16;
+ break;
+ default:
+ DRM_ERROR("Invalid texture format %u\n",
+- (ib_chunk->kdata[idx] & 0x1F));
++ (idx_value & 0x1F));
+ return -EINVAL;
+ break;
+ }
+@@ -1319,11 +995,11 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ case 0x443C:
+ /* TX_FILTER0_[0-15] */
+ i = (reg - 0x4400) >> 2;
+- tmp = ib_chunk->kdata[idx] & 0x7;;
++ tmp = idx_value & 0x7;
+ if (tmp == 2 || tmp == 4 || tmp == 6) {
+ track->textures[i].roundup_w = false;
+ }
+- tmp = (ib_chunk->kdata[idx] >> 3) & 0x7;;
++ tmp = (idx_value >> 3) & 0x7;
+ if (tmp == 2 || tmp == 4 || tmp == 6) {
+ track->textures[i].roundup_h = false;
+ }
+@@ -1346,12 +1022,12 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ case 0x453C:
+ /* TX_FORMAT2_[0-15] */
+ i = (reg - 0x4500) >> 2;
+- tmp = ib_chunk->kdata[idx] & 0x3FFF;
++ tmp = idx_value & 0x3FFF;
+ track->textures[i].pitch = tmp + 1;
+ if (p->rdev->family >= CHIP_RV515) {
+- tmp = ((ib_chunk->kdata[idx] >> 15) & 1) << 11;
++ tmp = ((idx_value >> 15) & 1) << 11;
+ track->textures[i].width_11 = tmp;
+- tmp = ((ib_chunk->kdata[idx] >> 16) & 1) << 11;
++ tmp = ((idx_value >> 16) & 1) << 11;
+ track->textures[i].height_11 = tmp;
+ }
+ break;
+@@ -1373,15 +1049,15 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ case 0x44BC:
+ /* TX_FORMAT0_[0-15] */
+ i = (reg - 0x4480) >> 2;
+- tmp = ib_chunk->kdata[idx] & 0x7FF;
++ tmp = idx_value & 0x7FF;
+ track->textures[i].width = tmp + 1;
+- tmp = (ib_chunk->kdata[idx] >> 11) & 0x7FF;
++ tmp = (idx_value >> 11) & 0x7FF;
+ track->textures[i].height = tmp + 1;
+- tmp = (ib_chunk->kdata[idx] >> 26) & 0xF;
++ tmp = (idx_value >> 26) & 0xF;
+ track->textures[i].num_levels = tmp;
+- tmp = ib_chunk->kdata[idx] & (1 << 31);
++ tmp = idx_value & (1 << 31);
+ track->textures[i].use_pitch = !!tmp;
+- tmp = (ib_chunk->kdata[idx] >> 22) & 0xF;
++ tmp = (idx_value >> 22) & 0xF;
+ track->textures[i].txdepth = tmp;
+ break;
+ case R300_ZB_ZPASS_ADDR:
+@@ -1392,7 +1068,7 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ r100_cs_dump_packet(p, pkt);
+ return r;
+ }
+- ib[idx] = ib_chunk->kdata[idx] + ((u32)reloc->lobj.gpu_offset);
++ ib[idx] = idx_value + ((u32)reloc->lobj.gpu_offset);
+ break;
+ case 0x4be8:
+ /* valid register only on RV530 */
+@@ -1410,59 +1086,20 @@ static int r300_packet0_check(struct radeon_cs_parser *p,
+ static int r300_packet3_check(struct radeon_cs_parser *p,
+ struct radeon_cs_packet *pkt)
+ {
+- struct radeon_cs_chunk *ib_chunk;
+ struct radeon_cs_reloc *reloc;
+- struct r300_cs_track *track;
++ struct r100_cs_track *track;
+ volatile uint32_t *ib;
+ unsigned idx;
+- unsigned i, c;
+ int r;
+
+ ib = p->ib->ptr;
+- ib_chunk = &p->chunks[p->chunk_ib_idx];
+ idx = pkt->idx + 1;
+- track = (struct r300_cs_track*)p->track;
++ track = (struct r100_cs_track *)p->track;
+ switch(pkt->opcode) {
+ case PACKET3_3D_LOAD_VBPNTR:
+- c = ib_chunk->kdata[idx++] & 0x1F;
+- track->num_arrays = c;
+- for (i = 0; i < (c - 1); i+=2, idx+=3) {
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for packet3 %d\n",
+- pkt->opcode);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx+1] = ib_chunk->kdata[idx+1] + ((u32)reloc->lobj.gpu_offset);
+- track->arrays[i + 0].robj = reloc->robj;
+- track->arrays[i + 0].esize = ib_chunk->kdata[idx] >> 8;
+- track->arrays[i + 0].esize &= 0x7F;
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for packet3 %d\n",
+- pkt->opcode);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx+2] = ib_chunk->kdata[idx+2] + ((u32)reloc->lobj.gpu_offset);
+- track->arrays[i + 1].robj = reloc->robj;
+- track->arrays[i + 1].esize = ib_chunk->kdata[idx] >> 24;
+- track->arrays[i + 1].esize &= 0x7F;
+- }
+- if (c & 1) {
+- r = r100_cs_packet_next_reloc(p, &reloc);
+- if (r) {
+- DRM_ERROR("No reloc for packet3 %d\n",
+- pkt->opcode);
+- r100_cs_dump_packet(p, pkt);
+- return r;
+- }
+- ib[idx+1] = ib_chunk->kdata[idx+1] + ((u32)reloc->lobj.gpu_offset);
+- track->arrays[i + 0].robj = reloc->robj;
+- track->arrays[i + 0].esize = ib_chunk->kdata[idx] >> 8;
+- track->arrays[i + 0].esize &= 0x7F;
+- }
++ r = r100_packet3_load_vbpntr(p, pkt, idx);
++ if (r)
++ return r;
+ break;
+ case PACKET3_INDX_BUFFER:
+ r = r100_cs_packet_next_reloc(p, &reloc);
+@@ -1471,7 +1108,7 @@ static int r300_packet3_check(struct radeon_cs_parser *p,
+ r100_cs_dump_packet(p, pkt);
+ return r;
+ }
+- ib[idx+1] = ib_chunk->kdata[idx+1] + ((u32)reloc->lobj.gpu_offset);
++ ib[idx+1] = radeon_get_ib_value(p, idx + 1) + ((u32)reloc->lobj.gpu_offset);
+ r = r100_cs_track_check_pkt3_indx_buffer(p, pkt, reloc->robj);
+ if (r) {
+ return r;
+@@ -1482,13 +1119,13 @@ static int r300_packet3_check(struct radeon_cs_parser *p,
+ /* Number of dwords is vtx_size * (num_vertices - 1)
+ * PRIM_WALK must be equal to 3 vertex data in embedded
+ * in cmd stream */
+- if (((ib_chunk->kdata[idx+1] >> 4) & 0x3) != 3) {
++ if (((radeon_get_ib_value(p, idx + 1) >> 4) & 0x3) != 3) {
+ DRM_ERROR("PRIM_WALK must be 3 for IMMD draw\n");
+ return -EINVAL;
+ }
+- track->vap_vf_cntl = ib_chunk->kdata[idx+1];
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1);
+ track->immd_dwords = pkt->count - 1;
+- r = r300_cs_track_check(p->rdev, track);
++ r = r100_cs_track_check(p->rdev, track);
+ if (r) {
+ return r;
+ }
+@@ -1497,41 +1134,41 @@ static int r300_packet3_check(struct radeon_cs_parser *p,
+ /* Number of dwords is vtx_size * (num_vertices - 1)
+ * PRIM_WALK must be equal to 3 vertex data in embedded
+ * in cmd stream */
+- if (((ib_chunk->kdata[idx] >> 4) & 0x3) != 3) {
++ if (((radeon_get_ib_value(p, idx) >> 4) & 0x3) != 3) {
+ DRM_ERROR("PRIM_WALK must be 3 for IMMD draw\n");
+ return -EINVAL;
+ }
+- track->vap_vf_cntl = ib_chunk->kdata[idx];
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx);
+ track->immd_dwords = pkt->count;
+- r = r300_cs_track_check(p->rdev, track);
++ r = r100_cs_track_check(p->rdev, track);
+ if (r) {
+ return r;
+ }
+ break;
+ case PACKET3_3D_DRAW_VBUF:
+- track->vap_vf_cntl = ib_chunk->kdata[idx + 1];
+- r = r300_cs_track_check(p->rdev, track);
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1);
++ r = r100_cs_track_check(p->rdev, track);
+ if (r) {
+ return r;
+ }
+ break;
+ case PACKET3_3D_DRAW_VBUF_2:
+- track->vap_vf_cntl = ib_chunk->kdata[idx];
+- r = r300_cs_track_check(p->rdev, track);
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx);
++ r = r100_cs_track_check(p->rdev, track);
+ if (r) {
+ return r;
+ }
+ break;
+ case PACKET3_3D_DRAW_INDX:
+- track->vap_vf_cntl = ib_chunk->kdata[idx + 1];
+- r = r300_cs_track_check(p->rdev, track);
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx + 1);
++ r = r100_cs_track_check(p->rdev, track);
+ if (r) {
+ return r;
+ }
+ break;
+ case PACKET3_3D_DRAW_INDX_2:
+- track->vap_vf_cntl = ib_chunk->kdata[idx];
+- r = r300_cs_track_check(p->rdev, track);
++ track->vap_vf_cntl = radeon_get_ib_value(p, idx);
++ r = r100_cs_track_check(p->rdev, track);
+ if (r) {
+ return r;
+ }
+@@ -1548,11 +1185,12 @@ static int r300_packet3_check(struct radeon_cs_parser *p,
+ int r300_cs_parse(struct radeon_cs_parser *p)
+ {
+ struct radeon_cs_packet pkt;
+- struct r300_cs_track track;
++ struct r100_cs_track *track;
+ int r;
+
+- r300_cs_track_clear(&track);
+- p->track = &track;
++ track = kzalloc(sizeof(*track), GFP_KERNEL);
++ r100_cs_track_clear(p->rdev, track);
++ p->track = track;
+ do {
+ r = r100_cs_packet_parse(p, &pkt, p->idx);
+ if (r) {
+@@ -1582,9 +1220,48 @@ int r300_cs_parse(struct radeon_cs_parser *p)
+ return 0;
+ }
+
+-int r300_init(struct radeon_device *rdev)
++void r300_set_reg_safe(struct radeon_device *rdev)
+ {
+ rdev->config.r300.reg_safe_bm = r300_reg_safe_bm;
+ rdev->config.r300.reg_safe_bm_size = ARRAY_SIZE(r300_reg_safe_bm);
++}
++
++int r300_init(struct radeon_device *rdev)
++{
++ r300_set_reg_safe(rdev);
+ return 0;
+ }
++
++void r300_mc_program(struct radeon_device *rdev)
++{
++ struct r100_mc_save save;
++ int r;
++
++ r = r100_debugfs_mc_info_init(rdev);
++ if (r) {
++ dev_err(rdev->dev, "Failed to create r100_mc debugfs file.\n");
++ }
++
++ /* Stops all mc clients */
++ r100_mc_stop(rdev, &save);
++ if (rdev->flags & RADEON_IS_AGP) {
++ WREG32(R_00014C_MC_AGP_LOCATION,
++ S_00014C_MC_AGP_START(rdev->mc.gtt_start >> 16) |
++ S_00014C_MC_AGP_TOP(rdev->mc.gtt_end >> 16));
++ WREG32(R_000170_AGP_BASE, lower_32_bits(rdev->mc.agp_base));
++ WREG32(R_00015C_AGP_BASE_2,
++ upper_32_bits(rdev->mc.agp_base) & 0xff);
++ } else {
++ WREG32(R_00014C_MC_AGP_LOCATION, 0x0FFFFFFF);
++ WREG32(R_000170_AGP_BASE, 0);
++ WREG32(R_00015C_AGP_BASE_2, 0);
++ }
++ /* Wait for mc idle */
++ if (r300_mc_wait_for_idle(rdev))
++ DRM_INFO("Failed to wait MC idle before programming MC.\n");
++ /* Program MC, should be a 32bits limited address space */
++ WREG32(R_000148_MC_FB_LOCATION,
++ S_000148_MC_FB_START(rdev->mc.vram_start >> 16) |
++ S_000148_MC_FB_TOP(rdev->mc.vram_end >> 16));
++ r100_mc_resume(rdev, &save);
++}
+diff --git a/drivers/gpu/drm/radeon/r300.h b/drivers/gpu/drm/radeon/r300.h
+deleted file mode 100644
+index 8486b4d..0000000
+--- a/drivers/gpu/drm/radeon/r300.h
++++ /dev/null
+@@ -1,36 +0,0 @@
+-/*
+- * Copyright 2008 Advanced Micro Devices, Inc.
+- * Copyright 2008 Red Hat Inc.
+- * Copyright 2009 Jerome Glisse.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: Dave Airlie
+- * Alex Deucher
+- * Jerome Glisse
+- */
+-#ifndef R300_H
+-#define R300_H
+-
+-struct r300_asic {
+- const unsigned *reg_safe_bm;
+- unsigned reg_safe_bm_size;
+-};
+-
+-#endif
+diff --git a/drivers/gpu/drm/radeon/r300d.h b/drivers/gpu/drm/radeon/r300d.h
+new file mode 100644
+index 0000000..d4fa3eb
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r300d.h
+@@ -0,0 +1,101 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef __R300D_H__
++#define __R300D_H__
++
++#define CP_PACKET0 0x00000000
++#define PACKET0_BASE_INDEX_SHIFT 0
++#define PACKET0_BASE_INDEX_MASK (0x1ffff << 0)
++#define PACKET0_COUNT_SHIFT 16
++#define PACKET0_COUNT_MASK (0x3fff << 16)
++#define CP_PACKET1 0x40000000
++#define CP_PACKET2 0x80000000
++#define PACKET2_PAD_SHIFT 0
++#define PACKET2_PAD_MASK (0x3fffffff << 0)
++#define CP_PACKET3 0xC0000000
++#define PACKET3_IT_OPCODE_SHIFT 8
++#define PACKET3_IT_OPCODE_MASK (0xff << 8)
++#define PACKET3_COUNT_SHIFT 16
++#define PACKET3_COUNT_MASK (0x3fff << 16)
++/* PACKET3 op code */
++#define PACKET3_NOP 0x10
++#define PACKET3_3D_DRAW_VBUF 0x28
++#define PACKET3_3D_DRAW_IMMD 0x29
++#define PACKET3_3D_DRAW_INDX 0x2A
++#define PACKET3_3D_LOAD_VBPNTR 0x2F
++#define PACKET3_INDX_BUFFER 0x33
++#define PACKET3_3D_DRAW_VBUF_2 0x34
++#define PACKET3_3D_DRAW_IMMD_2 0x35
++#define PACKET3_3D_DRAW_INDX_2 0x36
++#define PACKET3_BITBLT_MULTI 0x9B
++
++#define PACKET0(reg, n) (CP_PACKET0 | \
++ REG_SET(PACKET0_BASE_INDEX, (reg) >> 2) | \
++ REG_SET(PACKET0_COUNT, (n)))
++#define PACKET2(v) (CP_PACKET2 | REG_SET(PACKET2_PAD, (v)))
++#define PACKET3(op, n) (CP_PACKET3 | \
++ REG_SET(PACKET3_IT_OPCODE, (op)) | \
++ REG_SET(PACKET3_COUNT, (n)))
++
++#define PACKET_TYPE0 0
++#define PACKET_TYPE1 1
++#define PACKET_TYPE2 2
++#define PACKET_TYPE3 3
++
++#define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3)
++#define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF)
++#define CP_PACKET0_GET_REG(h) (((h) & 0x1FFF) << 2)
++#define CP_PACKET0_GET_ONE_REG_WR(h) (((h) >> 15) & 1)
++#define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF)
++
++/* Registers */
++#define R_000148_MC_FB_LOCATION 0x000148
++#define S_000148_MC_FB_START(x) (((x) & 0xFFFF) << 0)
++#define G_000148_MC_FB_START(x) (((x) >> 0) & 0xFFFF)
++#define C_000148_MC_FB_START 0xFFFF0000
++#define S_000148_MC_FB_TOP(x) (((x) & 0xFFFF) << 16)
++#define G_000148_MC_FB_TOP(x) (((x) >> 16) & 0xFFFF)
++#define C_000148_MC_FB_TOP 0x0000FFFF
++#define R_00014C_MC_AGP_LOCATION 0x00014C
++#define S_00014C_MC_AGP_START(x) (((x) & 0xFFFF) << 0)
++#define G_00014C_MC_AGP_START(x) (((x) >> 0) & 0xFFFF)
++#define C_00014C_MC_AGP_START 0xFFFF0000
++#define S_00014C_MC_AGP_TOP(x) (((x) & 0xFFFF) << 16)
++#define G_00014C_MC_AGP_TOP(x) (((x) >> 16) & 0xFFFF)
++#define C_00014C_MC_AGP_TOP 0x0000FFFF
++#define R_00015C_AGP_BASE_2 0x00015C
++#define S_00015C_AGP_BASE_ADDR_2(x) (((x) & 0xF) << 0)
++#define G_00015C_AGP_BASE_ADDR_2(x) (((x) >> 0) & 0xF)
++#define C_00015C_AGP_BASE_ADDR_2 0xFFFFFFF0
++#define R_000170_AGP_BASE 0x000170
++#define S_000170_AGP_BASE_ADDR(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_000170_AGP_BASE_ADDR(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_000170_AGP_BASE_ADDR 0x00000000
++
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/r420.c b/drivers/gpu/drm/radeon/r420.c
+index 97426a6..49a2fdc 100644
+--- a/drivers/gpu/drm/radeon/r420.c
++++ b/drivers/gpu/drm/radeon/r420.c
+@@ -29,47 +29,13 @@
+ #include "drmP.h"
+ #include "radeon_reg.h"
+ #include "radeon.h"
++#include "atom.h"
++#include "r420d.h"
+
+-/* r420,r423,rv410 depends on : */
+-void r100_pci_gart_disable(struct radeon_device *rdev);
+-void r100_hdp_reset(struct radeon_device *rdev);
+-void r100_mc_setup(struct radeon_device *rdev);
+-int r100_gui_wait_for_idle(struct radeon_device *rdev);
+-void r100_mc_disable_clients(struct radeon_device *rdev);
+-void r300_vram_info(struct radeon_device *rdev);
+-int r300_mc_wait_for_idle(struct radeon_device *rdev);
+-int rv370_pcie_gart_enable(struct radeon_device *rdev);
+-void rv370_pcie_gart_disable(struct radeon_device *rdev);
+-
+-/* This files gather functions specifics to :
+- * r420,r423,rv410
+- *
+- * Some of these functions might be used by newer ASICs.
+- */
+-void r420_gpu_init(struct radeon_device *rdev);
+-int r420_debugfs_pipes_info_init(struct radeon_device *rdev);
+-
+-
+-/*
+- * MC
+- */
+ int r420_mc_init(struct radeon_device *rdev)
+ {
+ int r;
+
+- if (r100_debugfs_rbbm_init(rdev)) {
+- DRM_ERROR("Failed to register debugfs file for RBBM !\n");
+- }
+- if (r420_debugfs_pipes_info_init(rdev)) {
+- DRM_ERROR("Failed to register debugfs file for pipes !\n");
+- }
+-
+- r420_gpu_init(rdev);
+- r100_pci_gart_disable(rdev);
+- if (rdev->flags & RADEON_IS_PCIE) {
+- rv370_pcie_gart_disable(rdev);
+- }
+-
+ /* Setup GPU memory space */
+ rdev->mc.vram_location = 0xFFFFFFFFUL;
+ rdev->mc.gtt_location = 0xFFFFFFFFUL;
+@@ -87,33 +53,9 @@ int r420_mc_init(struct radeon_device *rdev)
+ if (r) {
+ return r;
+ }
+-
+- /* Program GPU memory space */
+- r100_mc_disable_clients(rdev);
+- if (r300_mc_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait MC idle while "
+- "programming pipes. Bad things might happen.\n");
+- }
+- r100_mc_setup(rdev);
+ return 0;
+ }
+
+-void r420_mc_fini(struct radeon_device *rdev)
+-{
+- rv370_pcie_gart_disable(rdev);
+- radeon_gart_table_vram_free(rdev);
+- radeon_gart_fini(rdev);
+-}
+-
+-
+-/*
+- * Global GPU functions
+- */
+-void r420_errata(struct radeon_device *rdev)
+-{
+- rdev->pll_errata = 0;
+-}
+-
+ void r420_pipes_init(struct radeon_device *rdev)
+ {
+ unsigned tmp;
+@@ -122,6 +64,11 @@ void r420_pipes_init(struct radeon_device *rdev)
+
+ /* GA_ENHANCE workaround TCL deadlock issue */
+ WREG32(0x4274, (1 << 0) | (1 << 1) | (1 << 2) | (1 << 3));
++ /* add idle wait as per freedesktop.org bug 24041 */
++ if (r100_gui_wait_for_idle(rdev)) {
++ printk(KERN_WARNING "Failed to wait GUI idle while "
++ "programming pipes. Bad things might happen.\n");
++ }
+ /* get max number of pipes */
+ gb_pipe_select = RREG32(0x402C);
+ num_pipes = ((gb_pipe_select >> 12) & 3) + 1;
+@@ -179,25 +126,239 @@ void r420_pipes_init(struct radeon_device *rdev)
+ rdev->num_gb_pipes, rdev->num_z_pipes);
+ }
+
+-void r420_gpu_init(struct radeon_device *rdev)
++u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg)
++{
++ u32 r;
++
++ WREG32(R_0001F8_MC_IND_INDEX, S_0001F8_MC_IND_ADDR(reg));
++ r = RREG32(R_0001FC_MC_IND_DATA);
++ return r;
++}
++
++void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v)
++{
++ WREG32(R_0001F8_MC_IND_INDEX, S_0001F8_MC_IND_ADDR(reg) |
++ S_0001F8_MC_IND_WR_EN(1));
++ WREG32(R_0001FC_MC_IND_DATA, v);
++}
++
++static void r420_debugfs(struct radeon_device *rdev)
++{
++ if (r100_debugfs_rbbm_init(rdev)) {
++ DRM_ERROR("Failed to register debugfs file for RBBM !\n");
++ }
++ if (r420_debugfs_pipes_info_init(rdev)) {
++ DRM_ERROR("Failed to register debugfs file for pipes !\n");
++ }
++}
++
++static void r420_clock_resume(struct radeon_device *rdev)
++{
++ u32 sclk_cntl;
++ sclk_cntl = RREG32_PLL(R_00000D_SCLK_CNTL);
++ sclk_cntl |= S_00000D_FORCE_CP(1) | S_00000D_FORCE_VIP(1);
++ if (rdev->family == CHIP_R420)
++ sclk_cntl |= S_00000D_FORCE_PX(1) | S_00000D_FORCE_TX(1);
++ WREG32_PLL(R_00000D_SCLK_CNTL, sclk_cntl);
++}
++
++static int r420_startup(struct radeon_device *rdev)
+ {
+- r100_hdp_reset(rdev);
++ int r;
++
++ r300_mc_program(rdev);
++ /* Initialize GART (initialize after TTM so we can allocate
++ * memory through TTM but finalize after TTM) */
++ if (rdev->flags & RADEON_IS_PCIE) {
++ r = rv370_pcie_gart_enable(rdev);
++ if (r)
++ return r;
++ }
++ if (rdev->flags & RADEON_IS_PCI) {
++ r = r100_pci_gart_enable(rdev);
++ if (r)
++ return r;
++ }
+ r420_pipes_init(rdev);
+- if (r300_mc_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait MC idle while "
+- "programming pipes. Bad things might happen.\n");
++ /* Enable IRQ */
++ rdev->irq.sw_int = true;
++ r100_irq_set(rdev);
++ /* 1M ring buffer */
++ r = r100_cp_init(rdev, 1024 * 1024);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing CP (%d).\n", r);
++ return r;
++ }
++ r = r100_wb_init(rdev);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing WB (%d).\n", r);
++ }
++ r = r100_ib_init(rdev);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing IB (%d).\n", r);
++ return r;
+ }
++ return 0;
+ }
+
++int r420_resume(struct radeon_device *rdev)
++{
++ /* Make sur GART are not working */
++ if (rdev->flags & RADEON_IS_PCIE)
++ rv370_pcie_gart_disable(rdev);
++ if (rdev->flags & RADEON_IS_PCI)
++ r100_pci_gart_disable(rdev);
++ /* Resume clock before doing reset */
++ r420_clock_resume(rdev);
++ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
++ if (radeon_gpu_reset(rdev)) {
++ dev_warn(rdev->dev, "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n",
++ RREG32(R_000E40_RBBM_STATUS),
++ RREG32(R_0007C0_CP_STAT));
++ }
++ /* check if cards are posted or not */
++ if (rdev->is_atom_bios) {
++ atom_asic_init(rdev->mode_info.atom_context);
++ } else {
++ radeon_combios_asic_init(rdev->ddev);
++ }
++ /* Resume clock after posting */
++ r420_clock_resume(rdev);
+
+-/*
+- * r420,r423,rv410 VRAM info
+- */
+-void r420_vram_info(struct radeon_device *rdev)
++ return r420_startup(rdev);
++}
++
++int r420_suspend(struct radeon_device *rdev)
+ {
+- r300_vram_info(rdev);
++ r100_cp_disable(rdev);
++ r100_wb_disable(rdev);
++ r100_irq_disable(rdev);
++ if (rdev->flags & RADEON_IS_PCIE)
++ rv370_pcie_gart_disable(rdev);
++ if (rdev->flags & RADEON_IS_PCI)
++ r100_pci_gart_disable(rdev);
++ return 0;
++}
++
++void r420_fini(struct radeon_device *rdev)
++{
++ r100_cp_fini(rdev);
++ r100_wb_fini(rdev);
++ r100_ib_fini(rdev);
++ radeon_gem_fini(rdev);
++ if (rdev->flags & RADEON_IS_PCIE)
++ rv370_pcie_gart_fini(rdev);
++ if (rdev->flags & RADEON_IS_PCI)
++ r100_pci_gart_fini(rdev);
++ radeon_agp_fini(rdev);
++ radeon_irq_kms_fini(rdev);
++ radeon_fence_driver_fini(rdev);
++ radeon_object_fini(rdev);
++ if (rdev->is_atom_bios) {
++ radeon_atombios_fini(rdev);
++ } else {
++ radeon_combios_fini(rdev);
++ }
++ kfree(rdev->bios);
++ rdev->bios = NULL;
+ }
+
++int r420_init(struct radeon_device *rdev)
++{
++ int r;
++
++ rdev->new_init_path = true;
++ /* Initialize scratch registers */
++ radeon_scratch_init(rdev);
++ /* Initialize surface registers */
++ radeon_surface_init(rdev);
++ /* TODO: disable VGA need to use VGA request */
++ /* BIOS*/
++ if (!radeon_get_bios(rdev)) {
++ if (ASIC_IS_AVIVO(rdev))
++ return -EINVAL;
++ }
++ if (rdev->is_atom_bios) {
++ r = radeon_atombios_init(rdev);
++ if (r) {
++ return r;
++ }
++ } else {
++ r = radeon_combios_init(rdev);
++ if (r) {
++ return r;
++ }
++ }
++ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
++ if (radeon_gpu_reset(rdev)) {
++ dev_warn(rdev->dev,
++ "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n",
++ RREG32(R_000E40_RBBM_STATUS),
++ RREG32(R_0007C0_CP_STAT));
++ }
++ /* check if cards are posted or not */
++ if (!radeon_card_posted(rdev) && rdev->bios) {
++ DRM_INFO("GPU not posted. posting now...\n");
++ if (rdev->is_atom_bios) {
++ atom_asic_init(rdev->mode_info.atom_context);
++ } else {
++ radeon_combios_asic_init(rdev->ddev);
++ }
++ }
++ /* Initialize clocks */
++ radeon_get_clock_info(rdev->ddev);
++ /* Get vram informations */
++ r300_vram_info(rdev);
++ /* Initialize memory controller (also test AGP) */
++ r = r420_mc_init(rdev);
++ if (r) {
++ return r;
++ }
++ r420_debugfs(rdev);
++ /* Fence driver */
++ r = radeon_fence_driver_init(rdev);
++ if (r) {
++ return r;
++ }
++ r = radeon_irq_kms_init(rdev);
++ if (r) {
++ return r;
++ }
++ /* Memory manager */
++ r = radeon_object_init(rdev);
++ if (r) {
++ return r;
++ }
++ if (rdev->flags & RADEON_IS_PCIE) {
++ r = rv370_pcie_gart_init(rdev);
++ if (r)
++ return r;
++ }
++ if (rdev->flags & RADEON_IS_PCI) {
++ r = r100_pci_gart_init(rdev);
++ if (r)
++ return r;
++ }
++ r300_set_reg_safe(rdev);
++ rdev->accel_working = true;
++ r = r420_startup(rdev);
++ if (r) {
++ /* Somethings want wront with the accel init stop accel */
++ dev_err(rdev->dev, "Disabling GPU acceleration\n");
++ r420_suspend(rdev);
++ r100_cp_fini(rdev);
++ r100_wb_fini(rdev);
++ r100_ib_fini(rdev);
++ if (rdev->flags & RADEON_IS_PCIE)
++ rv370_pcie_gart_fini(rdev);
++ if (rdev->flags & RADEON_IS_PCI)
++ r100_pci_gart_fini(rdev);
++ radeon_agp_fini(rdev);
++ radeon_irq_kms_fini(rdev);
++ rdev->accel_working = false;
++ }
++ return 0;
++}
+
+ /*
+ * Debugfs info
+diff --git a/drivers/gpu/drm/radeon/r420d.h b/drivers/gpu/drm/radeon/r420d.h
+new file mode 100644
+index 0000000..a48a7db
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r420d.h
+@@ -0,0 +1,249 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef R420D_H
++#define R420D_H
++
++#define R_0001F8_MC_IND_INDEX 0x0001F8
++#define S_0001F8_MC_IND_ADDR(x) (((x) & 0x7F) << 0)
++#define G_0001F8_MC_IND_ADDR(x) (((x) >> 0) & 0x7F)
++#define C_0001F8_MC_IND_ADDR 0xFFFFFF80
++#define S_0001F8_MC_IND_WR_EN(x) (((x) & 0x1) << 8)
++#define G_0001F8_MC_IND_WR_EN(x) (((x) >> 8) & 0x1)
++#define C_0001F8_MC_IND_WR_EN 0xFFFFFEFF
++#define R_0001FC_MC_IND_DATA 0x0001FC
++#define S_0001FC_MC_IND_DATA(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_0001FC_MC_IND_DATA(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_0001FC_MC_IND_DATA 0x00000000
++#define R_0007C0_CP_STAT 0x0007C0
++#define S_0007C0_MRU_BUSY(x) (((x) & 0x1) << 0)
++#define G_0007C0_MRU_BUSY(x) (((x) >> 0) & 0x1)
++#define C_0007C0_MRU_BUSY 0xFFFFFFFE
++#define S_0007C0_MWU_BUSY(x) (((x) & 0x1) << 1)
++#define G_0007C0_MWU_BUSY(x) (((x) >> 1) & 0x1)
++#define C_0007C0_MWU_BUSY 0xFFFFFFFD
++#define S_0007C0_RSIU_BUSY(x) (((x) & 0x1) << 2)
++#define G_0007C0_RSIU_BUSY(x) (((x) >> 2) & 0x1)
++#define C_0007C0_RSIU_BUSY 0xFFFFFFFB
++#define S_0007C0_RCIU_BUSY(x) (((x) & 0x1) << 3)
++#define G_0007C0_RCIU_BUSY(x) (((x) >> 3) & 0x1)
++#define C_0007C0_RCIU_BUSY 0xFFFFFFF7
++#define S_0007C0_CSF_PRIMARY_BUSY(x) (((x) & 0x1) << 9)
++#define G_0007C0_CSF_PRIMARY_BUSY(x) (((x) >> 9) & 0x1)
++#define C_0007C0_CSF_PRIMARY_BUSY 0xFFFFFDFF
++#define S_0007C0_CSF_INDIRECT_BUSY(x) (((x) & 0x1) << 10)
++#define G_0007C0_CSF_INDIRECT_BUSY(x) (((x) >> 10) & 0x1)
++#define C_0007C0_CSF_INDIRECT_BUSY 0xFFFFFBFF
++#define S_0007C0_CSQ_PRIMARY_BUSY(x) (((x) & 0x1) << 11)
++#define G_0007C0_CSQ_PRIMARY_BUSY(x) (((x) >> 11) & 0x1)
++#define C_0007C0_CSQ_PRIMARY_BUSY 0xFFFFF7FF
++#define S_0007C0_CSQ_INDIRECT_BUSY(x) (((x) & 0x1) << 12)
++#define G_0007C0_CSQ_INDIRECT_BUSY(x) (((x) >> 12) & 0x1)
++#define C_0007C0_CSQ_INDIRECT_BUSY 0xFFFFEFFF
++#define S_0007C0_CSI_BUSY(x) (((x) & 0x1) << 13)
++#define G_0007C0_CSI_BUSY(x) (((x) >> 13) & 0x1)
++#define C_0007C0_CSI_BUSY 0xFFFFDFFF
++#define S_0007C0_CSF_INDIRECT2_BUSY(x) (((x) & 0x1) << 14)
++#define G_0007C0_CSF_INDIRECT2_BUSY(x) (((x) >> 14) & 0x1)
++#define C_0007C0_CSF_INDIRECT2_BUSY 0xFFFFBFFF
++#define S_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) & 0x1) << 15)
++#define G_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) >> 15) & 0x1)
++#define C_0007C0_CSQ_INDIRECT2_BUSY 0xFFFF7FFF
++#define S_0007C0_GUIDMA_BUSY(x) (((x) & 0x1) << 28)
++#define G_0007C0_GUIDMA_BUSY(x) (((x) >> 28) & 0x1)
++#define C_0007C0_GUIDMA_BUSY 0xEFFFFFFF
++#define S_0007C0_VIDDMA_BUSY(x) (((x) & 0x1) << 29)
++#define G_0007C0_VIDDMA_BUSY(x) (((x) >> 29) & 0x1)
++#define C_0007C0_VIDDMA_BUSY 0xDFFFFFFF
++#define S_0007C0_CMDSTRM_BUSY(x) (((x) & 0x1) << 30)
++#define G_0007C0_CMDSTRM_BUSY(x) (((x) >> 30) & 0x1)
++#define C_0007C0_CMDSTRM_BUSY 0xBFFFFFFF
++#define S_0007C0_CP_BUSY(x) (((x) & 0x1) << 31)
++#define G_0007C0_CP_BUSY(x) (((x) >> 31) & 0x1)
++#define C_0007C0_CP_BUSY 0x7FFFFFFF
++#define R_000E40_RBBM_STATUS 0x000E40
++#define S_000E40_CMDFIFO_AVAIL(x) (((x) & 0x7F) << 0)
++#define G_000E40_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x7F)
++#define C_000E40_CMDFIFO_AVAIL 0xFFFFFF80
++#define S_000E40_HIRQ_ON_RBB(x) (((x) & 0x1) << 8)
++#define G_000E40_HIRQ_ON_RBB(x) (((x) >> 8) & 0x1)
++#define C_000E40_HIRQ_ON_RBB 0xFFFFFEFF
++#define S_000E40_CPRQ_ON_RBB(x) (((x) & 0x1) << 9)
++#define G_000E40_CPRQ_ON_RBB(x) (((x) >> 9) & 0x1)
++#define C_000E40_CPRQ_ON_RBB 0xFFFFFDFF
++#define S_000E40_CFRQ_ON_RBB(x) (((x) & 0x1) << 10)
++#define G_000E40_CFRQ_ON_RBB(x) (((x) >> 10) & 0x1)
++#define C_000E40_CFRQ_ON_RBB 0xFFFFFBFF
++#define S_000E40_HIRQ_IN_RTBUF(x) (((x) & 0x1) << 11)
++#define G_000E40_HIRQ_IN_RTBUF(x) (((x) >> 11) & 0x1)
++#define C_000E40_HIRQ_IN_RTBUF 0xFFFFF7FF
++#define S_000E40_CPRQ_IN_RTBUF(x) (((x) & 0x1) << 12)
++#define G_000E40_CPRQ_IN_RTBUF(x) (((x) >> 12) & 0x1)
++#define C_000E40_CPRQ_IN_RTBUF 0xFFFFEFFF
++#define S_000E40_CFRQ_IN_RTBUF(x) (((x) & 0x1) << 13)
++#define G_000E40_CFRQ_IN_RTBUF(x) (((x) >> 13) & 0x1)
++#define C_000E40_CFRQ_IN_RTBUF 0xFFFFDFFF
++#define S_000E40_CF_PIPE_BUSY(x) (((x) & 0x1) << 14)
++#define G_000E40_CF_PIPE_BUSY(x) (((x) >> 14) & 0x1)
++#define C_000E40_CF_PIPE_BUSY 0xFFFFBFFF
++#define S_000E40_ENG_EV_BUSY(x) (((x) & 0x1) << 15)
++#define G_000E40_ENG_EV_BUSY(x) (((x) >> 15) & 0x1)
++#define C_000E40_ENG_EV_BUSY 0xFFFF7FFF
++#define S_000E40_CP_CMDSTRM_BUSY(x) (((x) & 0x1) << 16)
++#define G_000E40_CP_CMDSTRM_BUSY(x) (((x) >> 16) & 0x1)
++#define C_000E40_CP_CMDSTRM_BUSY 0xFFFEFFFF
++#define S_000E40_E2_BUSY(x) (((x) & 0x1) << 17)
++#define G_000E40_E2_BUSY(x) (((x) >> 17) & 0x1)
++#define C_000E40_E2_BUSY 0xFFFDFFFF
++#define S_000E40_RB2D_BUSY(x) (((x) & 0x1) << 18)
++#define G_000E40_RB2D_BUSY(x) (((x) >> 18) & 0x1)
++#define C_000E40_RB2D_BUSY 0xFFFBFFFF
++#define S_000E40_RB3D_BUSY(x) (((x) & 0x1) << 19)
++#define G_000E40_RB3D_BUSY(x) (((x) >> 19) & 0x1)
++#define C_000E40_RB3D_BUSY 0xFFF7FFFF
++#define S_000E40_VAP_BUSY(x) (((x) & 0x1) << 20)
++#define G_000E40_VAP_BUSY(x) (((x) >> 20) & 0x1)
++#define C_000E40_VAP_BUSY 0xFFEFFFFF
++#define S_000E40_RE_BUSY(x) (((x) & 0x1) << 21)
++#define G_000E40_RE_BUSY(x) (((x) >> 21) & 0x1)
++#define C_000E40_RE_BUSY 0xFFDFFFFF
++#define S_000E40_TAM_BUSY(x) (((x) & 0x1) << 22)
++#define G_000E40_TAM_BUSY(x) (((x) >> 22) & 0x1)
++#define C_000E40_TAM_BUSY 0xFFBFFFFF
++#define S_000E40_TDM_BUSY(x) (((x) & 0x1) << 23)
++#define G_000E40_TDM_BUSY(x) (((x) >> 23) & 0x1)
++#define C_000E40_TDM_BUSY 0xFF7FFFFF
++#define S_000E40_PB_BUSY(x) (((x) & 0x1) << 24)
++#define G_000E40_PB_BUSY(x) (((x) >> 24) & 0x1)
++#define C_000E40_PB_BUSY 0xFEFFFFFF
++#define S_000E40_TIM_BUSY(x) (((x) & 0x1) << 25)
++#define G_000E40_TIM_BUSY(x) (((x) >> 25) & 0x1)
++#define C_000E40_TIM_BUSY 0xFDFFFFFF
++#define S_000E40_GA_BUSY(x) (((x) & 0x1) << 26)
++#define G_000E40_GA_BUSY(x) (((x) >> 26) & 0x1)
++#define C_000E40_GA_BUSY 0xFBFFFFFF
++#define S_000E40_CBA2D_BUSY(x) (((x) & 0x1) << 27)
++#define G_000E40_CBA2D_BUSY(x) (((x) >> 27) & 0x1)
++#define C_000E40_CBA2D_BUSY 0xF7FFFFFF
++#define S_000E40_GUI_ACTIVE(x) (((x) & 0x1) << 31)
++#define G_000E40_GUI_ACTIVE(x) (((x) >> 31) & 0x1)
++#define C_000E40_GUI_ACTIVE 0x7FFFFFFF
++
++/* CLK registers */
++#define R_00000D_SCLK_CNTL 0x00000D
++#define S_00000D_SCLK_SRC_SEL(x) (((x) & 0x7) << 0)
++#define G_00000D_SCLK_SRC_SEL(x) (((x) >> 0) & 0x7)
++#define C_00000D_SCLK_SRC_SEL 0xFFFFFFF8
++#define S_00000D_CP_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 3)
++#define G_00000D_CP_MAX_DYN_STOP_LAT(x) (((x) >> 3) & 0x1)
++#define C_00000D_CP_MAX_DYN_STOP_LAT 0xFFFFFFF7
++#define S_00000D_HDP_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 4)
++#define G_00000D_HDP_MAX_DYN_STOP_LAT(x) (((x) >> 4) & 0x1)
++#define C_00000D_HDP_MAX_DYN_STOP_LAT 0xFFFFFFEF
++#define S_00000D_TV_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 5)
++#define G_00000D_TV_MAX_DYN_STOP_LAT(x) (((x) >> 5) & 0x1)
++#define C_00000D_TV_MAX_DYN_STOP_LAT 0xFFFFFFDF
++#define S_00000D_E2_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 6)
++#define G_00000D_E2_MAX_DYN_STOP_LAT(x) (((x) >> 6) & 0x1)
++#define C_00000D_E2_MAX_DYN_STOP_LAT 0xFFFFFFBF
++#define S_00000D_SE_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 7)
++#define G_00000D_SE_MAX_DYN_STOP_LAT(x) (((x) >> 7) & 0x1)
++#define C_00000D_SE_MAX_DYN_STOP_LAT 0xFFFFFF7F
++#define S_00000D_IDCT_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 8)
++#define G_00000D_IDCT_MAX_DYN_STOP_LAT(x) (((x) >> 8) & 0x1)
++#define C_00000D_IDCT_MAX_DYN_STOP_LAT 0xFFFFFEFF
++#define S_00000D_VIP_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 9)
++#define G_00000D_VIP_MAX_DYN_STOP_LAT(x) (((x) >> 9) & 0x1)
++#define C_00000D_VIP_MAX_DYN_STOP_LAT 0xFFFFFDFF
++#define S_00000D_RE_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 10)
++#define G_00000D_RE_MAX_DYN_STOP_LAT(x) (((x) >> 10) & 0x1)
++#define C_00000D_RE_MAX_DYN_STOP_LAT 0xFFFFFBFF
++#define S_00000D_PB_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 11)
++#define G_00000D_PB_MAX_DYN_STOP_LAT(x) (((x) >> 11) & 0x1)
++#define C_00000D_PB_MAX_DYN_STOP_LAT 0xFFFFF7FF
++#define S_00000D_TAM_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 12)
++#define G_00000D_TAM_MAX_DYN_STOP_LAT(x) (((x) >> 12) & 0x1)
++#define C_00000D_TAM_MAX_DYN_STOP_LAT 0xFFFFEFFF
++#define S_00000D_TDM_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 13)
++#define G_00000D_TDM_MAX_DYN_STOP_LAT(x) (((x) >> 13) & 0x1)
++#define C_00000D_TDM_MAX_DYN_STOP_LAT 0xFFFFDFFF
++#define S_00000D_RB_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 14)
++#define G_00000D_RB_MAX_DYN_STOP_LAT(x) (((x) >> 14) & 0x1)
++#define C_00000D_RB_MAX_DYN_STOP_LAT 0xFFFFBFFF
++#define S_00000D_FORCE_DISP2(x) (((x) & 0x1) << 15)
++#define G_00000D_FORCE_DISP2(x) (((x) >> 15) & 0x1)
++#define C_00000D_FORCE_DISP2 0xFFFF7FFF
++#define S_00000D_FORCE_CP(x) (((x) & 0x1) << 16)
++#define G_00000D_FORCE_CP(x) (((x) >> 16) & 0x1)
++#define C_00000D_FORCE_CP 0xFFFEFFFF
++#define S_00000D_FORCE_HDP(x) (((x) & 0x1) << 17)
++#define G_00000D_FORCE_HDP(x) (((x) >> 17) & 0x1)
++#define C_00000D_FORCE_HDP 0xFFFDFFFF
++#define S_00000D_FORCE_DISP1(x) (((x) & 0x1) << 18)
++#define G_00000D_FORCE_DISP1(x) (((x) >> 18) & 0x1)
++#define C_00000D_FORCE_DISP1 0xFFFBFFFF
++#define S_00000D_FORCE_TOP(x) (((x) & 0x1) << 19)
++#define G_00000D_FORCE_TOP(x) (((x) >> 19) & 0x1)
++#define C_00000D_FORCE_TOP 0xFFF7FFFF
++#define S_00000D_FORCE_E2(x) (((x) & 0x1) << 20)
++#define G_00000D_FORCE_E2(x) (((x) >> 20) & 0x1)
++#define C_00000D_FORCE_E2 0xFFEFFFFF
++#define S_00000D_FORCE_SE(x) (((x) & 0x1) << 21)
++#define G_00000D_FORCE_SE(x) (((x) >> 21) & 0x1)
++#define C_00000D_FORCE_SE 0xFFDFFFFF
++#define S_00000D_FORCE_IDCT(x) (((x) & 0x1) << 22)
++#define G_00000D_FORCE_IDCT(x) (((x) >> 22) & 0x1)
++#define C_00000D_FORCE_IDCT 0xFFBFFFFF
++#define S_00000D_FORCE_VIP(x) (((x) & 0x1) << 23)
++#define G_00000D_FORCE_VIP(x) (((x) >> 23) & 0x1)
++#define C_00000D_FORCE_VIP 0xFF7FFFFF
++#define S_00000D_FORCE_RE(x) (((x) & 0x1) << 24)
++#define G_00000D_FORCE_RE(x) (((x) >> 24) & 0x1)
++#define C_00000D_FORCE_RE 0xFEFFFFFF
++#define S_00000D_FORCE_PB(x) (((x) & 0x1) << 25)
++#define G_00000D_FORCE_PB(x) (((x) >> 25) & 0x1)
++#define C_00000D_FORCE_PB 0xFDFFFFFF
++#define S_00000D_FORCE_PX(x) (((x) & 0x1) << 26)
++#define G_00000D_FORCE_PX(x) (((x) >> 26) & 0x1)
++#define C_00000D_FORCE_PX 0xFBFFFFFF
++#define S_00000D_FORCE_TX(x) (((x) & 0x1) << 27)
++#define G_00000D_FORCE_TX(x) (((x) >> 27) & 0x1)
++#define C_00000D_FORCE_TX 0xF7FFFFFF
++#define S_00000D_FORCE_RB(x) (((x) & 0x1) << 28)
++#define G_00000D_FORCE_RB(x) (((x) >> 28) & 0x1)
++#define C_00000D_FORCE_RB 0xEFFFFFFF
++#define S_00000D_FORCE_TV_SCLK(x) (((x) & 0x1) << 29)
++#define G_00000D_FORCE_TV_SCLK(x) (((x) >> 29) & 0x1)
++#define C_00000D_FORCE_TV_SCLK 0xDFFFFFFF
++#define S_00000D_FORCE_SUBPIC(x) (((x) & 0x1) << 30)
++#define G_00000D_FORCE_SUBPIC(x) (((x) >> 30) & 0x1)
++#define C_00000D_FORCE_SUBPIC 0xBFFFFFFF
++#define S_00000D_FORCE_OV0(x) (((x) & 0x1) << 31)
++#define G_00000D_FORCE_OV0(x) (((x) >> 31) & 0x1)
++#define C_00000D_FORCE_OV0 0x7FFFFFFF
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/r500_reg.h b/drivers/gpu/drm/radeon/r500_reg.h
+index e1d5e03..868add6 100644
+--- a/drivers/gpu/drm/radeon/r500_reg.h
++++ b/drivers/gpu/drm/radeon/r500_reg.h
+@@ -445,6 +445,8 @@
+ #define AVIVO_D1MODE_VBLANK_STATUS 0x6534
+ # define AVIVO_VBLANK_ACK (1 << 4)
+ #define AVIVO_D1MODE_VLINE_START_END 0x6538
++#define AVIVO_D1MODE_VLINE_STATUS 0x653c
++# define AVIVO_D1MODE_VLINE_STAT (1 << 12)
+ #define AVIVO_DxMODE_INT_MASK 0x6540
+ # define AVIVO_D1MODE_INT_MASK (1 << 0)
+ # define AVIVO_D2MODE_INT_MASK (1 << 8)
+@@ -502,6 +504,7 @@
+
+ #define AVIVO_D2MODE_VBLANK_STATUS 0x6d34
+ #define AVIVO_D2MODE_VLINE_START_END 0x6d38
++#define AVIVO_D2MODE_VLINE_STATUS 0x6d3c
+ #define AVIVO_D2MODE_VIEWPORT_START 0x6d80
+ #define AVIVO_D2MODE_VIEWPORT_SIZE 0x6d84
+ #define AVIVO_D2MODE_EXT_OVERSCAN_LEFT_RIGHT 0x6d88
+diff --git a/drivers/gpu/drm/radeon/r520.c b/drivers/gpu/drm/radeon/r520.c
+index ebd6b0f..0bf13fc 100644
+--- a/drivers/gpu/drm/radeon/r520.c
++++ b/drivers/gpu/drm/radeon/r520.c
+@@ -26,114 +26,13 @@
+ * Jerome Glisse
+ */
+ #include "drmP.h"
+-#include "radeon_reg.h"
+ #include "radeon.h"
+-#include "radeon_share.h"
+-
+-/* r520,rv530,rv560,rv570,r580 depends on : */
+-void r100_hdp_reset(struct radeon_device *rdev);
+-int rv370_pcie_gart_enable(struct radeon_device *rdev);
+-void rv370_pcie_gart_disable(struct radeon_device *rdev);
+-void r420_pipes_init(struct radeon_device *rdev);
+-void rs600_mc_disable_clients(struct radeon_device *rdev);
+-void rs600_disable_vga(struct radeon_device *rdev);
+-int rv515_debugfs_pipes_info_init(struct radeon_device *rdev);
+-int rv515_debugfs_ga_info_init(struct radeon_device *rdev);
+-
+-/* This files gather functions specifics to:
+- * r520,rv530,rv560,rv570,r580
+- *
+- * Some of these functions might be used by newer ASICs.
+- */
+-void r520_gpu_init(struct radeon_device *rdev);
+-int r520_mc_wait_for_idle(struct radeon_device *rdev);
+-
+-
+-/*
+- * MC
+- */
+-int r520_mc_init(struct radeon_device *rdev)
+-{
+- uint32_t tmp;
+- int r;
+-
+- if (r100_debugfs_rbbm_init(rdev)) {
+- DRM_ERROR("Failed to register debugfs file for RBBM !\n");
+- }
+- if (rv515_debugfs_pipes_info_init(rdev)) {
+- DRM_ERROR("Failed to register debugfs file for pipes !\n");
+- }
+- if (rv515_debugfs_ga_info_init(rdev)) {
+- DRM_ERROR("Failed to register debugfs file for pipes !\n");
+- }
+-
+- r520_gpu_init(rdev);
+- rv370_pcie_gart_disable(rdev);
+-
+- /* Setup GPU memory space */
+- rdev->mc.vram_location = 0xFFFFFFFFUL;
+- rdev->mc.gtt_location = 0xFFFFFFFFUL;
+- if (rdev->flags & RADEON_IS_AGP) {
+- r = radeon_agp_init(rdev);
+- if (r) {
+- printk(KERN_WARNING "[drm] Disabling AGP\n");
+- rdev->flags &= ~RADEON_IS_AGP;
+- rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
+- } else {
+- rdev->mc.gtt_location = rdev->mc.agp_base;
+- }
+- }
+- r = radeon_mc_setup(rdev);
+- if (r) {
+- return r;
+- }
+-
+- /* Program GPU memory space */
+- rs600_mc_disable_clients(rdev);
+- if (r520_mc_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait MC idle while "
+- "programming pipes. Bad things might happen.\n");
+- }
+- /* Write VRAM size in case we are limiting it */
+- WREG32(RADEON_CONFIG_MEMSIZE, rdev->mc.real_vram_size);
+- tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1;
+- tmp = REG_SET(R520_MC_FB_TOP, tmp >> 16);
+- tmp |= REG_SET(R520_MC_FB_START, rdev->mc.vram_location >> 16);
+- WREG32_MC(R520_MC_FB_LOCATION, tmp);
+- WREG32(RS690_HDP_FB_LOCATION, rdev->mc.vram_location >> 16);
+- WREG32(0x310, rdev->mc.vram_location);
+- if (rdev->flags & RADEON_IS_AGP) {
+- tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1;
+- tmp = REG_SET(R520_MC_AGP_TOP, tmp >> 16);
+- tmp |= REG_SET(R520_MC_AGP_START, rdev->mc.gtt_location >> 16);
+- WREG32_MC(R520_MC_AGP_LOCATION, tmp);
+- WREG32_MC(R520_MC_AGP_BASE, rdev->mc.agp_base);
+- WREG32_MC(R520_MC_AGP_BASE_2, 0);
+- } else {
+- WREG32_MC(R520_MC_AGP_LOCATION, 0x0FFFFFFF);
+- WREG32_MC(R520_MC_AGP_BASE, 0);
+- WREG32_MC(R520_MC_AGP_BASE_2, 0);
+- }
+- return 0;
+-}
+-
+-void r520_mc_fini(struct radeon_device *rdev)
+-{
+- rv370_pcie_gart_disable(rdev);
+- radeon_gart_table_vram_free(rdev);
+- radeon_gart_fini(rdev);
+-}
++#include "atom.h"
++#include "r520d.h"
+
++/* This files gather functions specifics to: r520,rv530,rv560,rv570,r580 */
+
+-/*
+- * Global GPU functions
+- */
+-void r520_errata(struct radeon_device *rdev)
+-{
+- rdev->pll_errata = 0;
+-}
+-
+-int r520_mc_wait_for_idle(struct radeon_device *rdev)
++static int r520_mc_wait_for_idle(struct radeon_device *rdev)
+ {
+ unsigned i;
+ uint32_t tmp;
+@@ -149,12 +48,12 @@ int r520_mc_wait_for_idle(struct radeon_device *rdev)
+ return -1;
+ }
+
+-void r520_gpu_init(struct radeon_device *rdev)
++static void r520_gpu_init(struct radeon_device *rdev)
+ {
+ unsigned pipe_select_current, gb_pipe_select, tmp;
+
+ r100_hdp_reset(rdev);
+- rs600_disable_vga(rdev);
++ rv515_vga_render_disable(rdev);
+ /*
+ * DST_PIPE_CONFIG 0x170C
+ * GB_TILE_CONFIG 0x4018
+@@ -192,10 +91,6 @@ void r520_gpu_init(struct radeon_device *rdev)
+ }
+ }
+
+-
+-/*
+- * VRAM info
+- */
+ static void r520_vram_get_type(struct radeon_device *rdev)
+ {
+ uint32_t tmp;
+@@ -239,7 +134,168 @@ void r520_vram_info(struct radeon_device *rdev)
+ rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a);
+ }
+
+-void r520_bandwidth_update(struct radeon_device *rdev)
++void r520_mc_program(struct radeon_device *rdev)
+ {
+- rv515_bandwidth_avivo_update(rdev);
++ struct rv515_mc_save save;
++
++ /* Stops all mc clients */
++ rv515_mc_stop(rdev, &save);
++
++ /* Wait for mc idle */
++ if (r520_mc_wait_for_idle(rdev))
++ dev_warn(rdev->dev, "Wait MC idle timeout before updating MC.\n");
++ /* Write VRAM size in case we are limiting it */
++ WREG32(R_0000F8_CONFIG_MEMSIZE, rdev->mc.real_vram_size);
++ /* Program MC, should be a 32bits limited address space */
++ WREG32_MC(R_000004_MC_FB_LOCATION,
++ S_000004_MC_FB_START(rdev->mc.vram_start >> 16) |
++ S_000004_MC_FB_TOP(rdev->mc.vram_end >> 16));
++ WREG32(R_000134_HDP_FB_LOCATION,
++ S_000134_HDP_FB_START(rdev->mc.vram_start >> 16));
++ if (rdev->flags & RADEON_IS_AGP) {
++ WREG32_MC(R_000005_MC_AGP_LOCATION,
++ S_000005_MC_AGP_START(rdev->mc.gtt_start >> 16) |
++ S_000005_MC_AGP_TOP(rdev->mc.gtt_end >> 16));
++ WREG32_MC(R_000006_AGP_BASE, lower_32_bits(rdev->mc.agp_base));
++ WREG32_MC(R_000007_AGP_BASE_2,
++ S_000007_AGP_BASE_ADDR_2(upper_32_bits(rdev->mc.agp_base)));
++ } else {
++ WREG32_MC(R_000005_MC_AGP_LOCATION, 0xFFFFFFFF);
++ WREG32_MC(R_000006_AGP_BASE, 0);
++ WREG32_MC(R_000007_AGP_BASE_2, 0);
++ }
++
++ rv515_mc_resume(rdev, &save);
++}
++
++static int r520_startup(struct radeon_device *rdev)
++{
++ int r;
++
++ r520_mc_program(rdev);
++ /* Resume clock */
++ rv515_clock_startup(rdev);
++ /* Initialize GPU configuration (# pipes, ...) */
++ r520_gpu_init(rdev);
++ /* Initialize GART (initialize after TTM so we can allocate
++ * memory through TTM but finalize after TTM) */
++ if (rdev->flags & RADEON_IS_PCIE) {
++ r = rv370_pcie_gart_enable(rdev);
++ if (r)
++ return r;
++ }
++ /* Enable IRQ */
++ rdev->irq.sw_int = true;
++ r100_irq_set(rdev);
++ /* 1M ring buffer */
++ r = r100_cp_init(rdev, 1024 * 1024);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing CP (%d).\n", r);
++ return r;
++ }
++ r = r100_wb_init(rdev);
++ if (r)
++ dev_err(rdev->dev, "failled initializing WB (%d).\n", r);
++ r = r100_ib_init(rdev);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing IB (%d).\n", r);
++ return r;
++ }
++ return 0;
++}
++
++int r520_resume(struct radeon_device *rdev)
++{
++ /* Make sur GART are not working */
++ if (rdev->flags & RADEON_IS_PCIE)
++ rv370_pcie_gart_disable(rdev);
++ /* Resume clock before doing reset */
++ rv515_clock_startup(rdev);
++ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
++ if (radeon_gpu_reset(rdev)) {
++ dev_warn(rdev->dev, "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n",
++ RREG32(R_000E40_RBBM_STATUS),
++ RREG32(R_0007C0_CP_STAT));
++ }
++ /* post */
++ atom_asic_init(rdev->mode_info.atom_context);
++ /* Resume clock after posting */
++ rv515_clock_startup(rdev);
++ return r520_startup(rdev);
++}
++
++int r520_init(struct radeon_device *rdev)
++{
++ int r;
++
++ rdev->new_init_path = true;
++ /* Initialize scratch registers */
++ radeon_scratch_init(rdev);
++ /* Initialize surface registers */
++ radeon_surface_init(rdev);
++ /* TODO: disable VGA need to use VGA request */
++ /* BIOS*/
++ if (!radeon_get_bios(rdev)) {
++ if (ASIC_IS_AVIVO(rdev))
++ return -EINVAL;
++ }
++ if (rdev->is_atom_bios) {
++ r = radeon_atombios_init(rdev);
++ if (r)
++ return r;
++ } else {
++ dev_err(rdev->dev, "Expecting atombios for RV515 GPU\n");
++ return -EINVAL;
++ }
++ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
++ if (radeon_gpu_reset(rdev)) {
++ dev_warn(rdev->dev,
++ "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n",
++ RREG32(R_000E40_RBBM_STATUS),
++ RREG32(R_0007C0_CP_STAT));
++ }
++ /* check if cards are posted or not */
++ if (!radeon_card_posted(rdev) && rdev->bios) {
++ DRM_INFO("GPU not posted. posting now...\n");
++ atom_asic_init(rdev->mode_info.atom_context);
++ }
++ /* Initialize clocks */
++ radeon_get_clock_info(rdev->ddev);
++ /* Get vram informations */
++ r520_vram_info(rdev);
++ /* Initialize memory controller (also test AGP) */
++ r = r420_mc_init(rdev);
++ if (r)
++ return r;
++ rv515_debugfs(rdev);
++ /* Fence driver */
++ r = radeon_fence_driver_init(rdev);
++ if (r)
++ return r;
++ r = radeon_irq_kms_init(rdev);
++ if (r)
++ return r;
++ /* Memory manager */
++ r = radeon_object_init(rdev);
++ if (r)
++ return r;
++ r = rv370_pcie_gart_init(rdev);
++ if (r)
++ return r;
++ rv515_set_safe_registers(rdev);
++ rdev->accel_working = true;
++ r = r520_startup(rdev);
++ if (r) {
++ /* Somethings want wront with the accel init stop accel */
++ dev_err(rdev->dev, "Disabling GPU acceleration\n");
++ rv515_suspend(rdev);
++ r100_cp_fini(rdev);
++ r100_wb_fini(rdev);
++ r100_ib_fini(rdev);
++ rv370_pcie_gart_fini(rdev);
++ radeon_agp_fini(rdev);
++ radeon_irq_kms_fini(rdev);
++ rdev->accel_working = false;
++ }
++ return 0;
+ }
+diff --git a/drivers/gpu/drm/radeon/r520d.h b/drivers/gpu/drm/radeon/r520d.h
+new file mode 100644
+index 0000000..61af61f
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r520d.h
+@@ -0,0 +1,187 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef __R520D_H__
++#define __R520D_H__
++
++/* Registers */
++#define R_0000F8_CONFIG_MEMSIZE 0x0000F8
++#define S_0000F8_CONFIG_MEMSIZE(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_0000F8_CONFIG_MEMSIZE(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_0000F8_CONFIG_MEMSIZE 0x00000000
++#define R_000134_HDP_FB_LOCATION 0x000134
++#define S_000134_HDP_FB_START(x) (((x) & 0xFFFF) << 0)
++#define G_000134_HDP_FB_START(x) (((x) >> 0) & 0xFFFF)
++#define C_000134_HDP_FB_START 0xFFFF0000
++#define R_0007C0_CP_STAT 0x0007C0
++#define S_0007C0_MRU_BUSY(x) (((x) & 0x1) << 0)
++#define G_0007C0_MRU_BUSY(x) (((x) >> 0) & 0x1)
++#define C_0007C0_MRU_BUSY 0xFFFFFFFE
++#define S_0007C0_MWU_BUSY(x) (((x) & 0x1) << 1)
++#define G_0007C0_MWU_BUSY(x) (((x) >> 1) & 0x1)
++#define C_0007C0_MWU_BUSY 0xFFFFFFFD
++#define S_0007C0_RSIU_BUSY(x) (((x) & 0x1) << 2)
++#define G_0007C0_RSIU_BUSY(x) (((x) >> 2) & 0x1)
++#define C_0007C0_RSIU_BUSY 0xFFFFFFFB
++#define S_0007C0_RCIU_BUSY(x) (((x) & 0x1) << 3)
++#define G_0007C0_RCIU_BUSY(x) (((x) >> 3) & 0x1)
++#define C_0007C0_RCIU_BUSY 0xFFFFFFF7
++#define S_0007C0_CSF_PRIMARY_BUSY(x) (((x) & 0x1) << 9)
++#define G_0007C0_CSF_PRIMARY_BUSY(x) (((x) >> 9) & 0x1)
++#define C_0007C0_CSF_PRIMARY_BUSY 0xFFFFFDFF
++#define S_0007C0_CSF_INDIRECT_BUSY(x) (((x) & 0x1) << 10)
++#define G_0007C0_CSF_INDIRECT_BUSY(x) (((x) >> 10) & 0x1)
++#define C_0007C0_CSF_INDIRECT_BUSY 0xFFFFFBFF
++#define S_0007C0_CSQ_PRIMARY_BUSY(x) (((x) & 0x1) << 11)
++#define G_0007C0_CSQ_PRIMARY_BUSY(x) (((x) >> 11) & 0x1)
++#define C_0007C0_CSQ_PRIMARY_BUSY 0xFFFFF7FF
++#define S_0007C0_CSQ_INDIRECT_BUSY(x) (((x) & 0x1) << 12)
++#define G_0007C0_CSQ_INDIRECT_BUSY(x) (((x) >> 12) & 0x1)
++#define C_0007C0_CSQ_INDIRECT_BUSY 0xFFFFEFFF
++#define S_0007C0_CSI_BUSY(x) (((x) & 0x1) << 13)
++#define G_0007C0_CSI_BUSY(x) (((x) >> 13) & 0x1)
++#define C_0007C0_CSI_BUSY 0xFFFFDFFF
++#define S_0007C0_CSF_INDIRECT2_BUSY(x) (((x) & 0x1) << 14)
++#define G_0007C0_CSF_INDIRECT2_BUSY(x) (((x) >> 14) & 0x1)
++#define C_0007C0_CSF_INDIRECT2_BUSY 0xFFFFBFFF
++#define S_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) & 0x1) << 15)
++#define G_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) >> 15) & 0x1)
++#define C_0007C0_CSQ_INDIRECT2_BUSY 0xFFFF7FFF
++#define S_0007C0_GUIDMA_BUSY(x) (((x) & 0x1) << 28)
++#define G_0007C0_GUIDMA_BUSY(x) (((x) >> 28) & 0x1)
++#define C_0007C0_GUIDMA_BUSY 0xEFFFFFFF
++#define S_0007C0_VIDDMA_BUSY(x) (((x) & 0x1) << 29)
++#define G_0007C0_VIDDMA_BUSY(x) (((x) >> 29) & 0x1)
++#define C_0007C0_VIDDMA_BUSY 0xDFFFFFFF
++#define S_0007C0_CMDSTRM_BUSY(x) (((x) & 0x1) << 30)
++#define G_0007C0_CMDSTRM_BUSY(x) (((x) >> 30) & 0x1)
++#define C_0007C0_CMDSTRM_BUSY 0xBFFFFFFF
++#define S_0007C0_CP_BUSY(x) (((x) & 0x1) << 31)
++#define G_0007C0_CP_BUSY(x) (((x) >> 31) & 0x1)
++#define C_0007C0_CP_BUSY 0x7FFFFFFF
++#define R_000E40_RBBM_STATUS 0x000E40
++#define S_000E40_CMDFIFO_AVAIL(x) (((x) & 0x7F) << 0)
++#define G_000E40_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x7F)
++#define C_000E40_CMDFIFO_AVAIL 0xFFFFFF80
++#define S_000E40_HIRQ_ON_RBB(x) (((x) & 0x1) << 8)
++#define G_000E40_HIRQ_ON_RBB(x) (((x) >> 8) & 0x1)
++#define C_000E40_HIRQ_ON_RBB 0xFFFFFEFF
++#define S_000E40_CPRQ_ON_RBB(x) (((x) & 0x1) << 9)
++#define G_000E40_CPRQ_ON_RBB(x) (((x) >> 9) & 0x1)
++#define C_000E40_CPRQ_ON_RBB 0xFFFFFDFF
++#define S_000E40_CFRQ_ON_RBB(x) (((x) & 0x1) << 10)
++#define G_000E40_CFRQ_ON_RBB(x) (((x) >> 10) & 0x1)
++#define C_000E40_CFRQ_ON_RBB 0xFFFFFBFF
++#define S_000E40_HIRQ_IN_RTBUF(x) (((x) & 0x1) << 11)
++#define G_000E40_HIRQ_IN_RTBUF(x) (((x) >> 11) & 0x1)
++#define C_000E40_HIRQ_IN_RTBUF 0xFFFFF7FF
++#define S_000E40_CPRQ_IN_RTBUF(x) (((x) & 0x1) << 12)
++#define G_000E40_CPRQ_IN_RTBUF(x) (((x) >> 12) & 0x1)
++#define C_000E40_CPRQ_IN_RTBUF 0xFFFFEFFF
++#define S_000E40_CFRQ_IN_RTBUF(x) (((x) & 0x1) << 13)
++#define G_000E40_CFRQ_IN_RTBUF(x) (((x) >> 13) & 0x1)
++#define C_000E40_CFRQ_IN_RTBUF 0xFFFFDFFF
++#define S_000E40_CF_PIPE_BUSY(x) (((x) & 0x1) << 14)
++#define G_000E40_CF_PIPE_BUSY(x) (((x) >> 14) & 0x1)
++#define C_000E40_CF_PIPE_BUSY 0xFFFFBFFF
++#define S_000E40_ENG_EV_BUSY(x) (((x) & 0x1) << 15)
++#define G_000E40_ENG_EV_BUSY(x) (((x) >> 15) & 0x1)
++#define C_000E40_ENG_EV_BUSY 0xFFFF7FFF
++#define S_000E40_CP_CMDSTRM_BUSY(x) (((x) & 0x1) << 16)
++#define G_000E40_CP_CMDSTRM_BUSY(x) (((x) >> 16) & 0x1)
++#define C_000E40_CP_CMDSTRM_BUSY 0xFFFEFFFF
++#define S_000E40_E2_BUSY(x) (((x) & 0x1) << 17)
++#define G_000E40_E2_BUSY(x) (((x) >> 17) & 0x1)
++#define C_000E40_E2_BUSY 0xFFFDFFFF
++#define S_000E40_RB2D_BUSY(x) (((x) & 0x1) << 18)
++#define G_000E40_RB2D_BUSY(x) (((x) >> 18) & 0x1)
++#define C_000E40_RB2D_BUSY 0xFFFBFFFF
++#define S_000E40_RB3D_BUSY(x) (((x) & 0x1) << 19)
++#define G_000E40_RB3D_BUSY(x) (((x) >> 19) & 0x1)
++#define C_000E40_RB3D_BUSY 0xFFF7FFFF
++#define S_000E40_VAP_BUSY(x) (((x) & 0x1) << 20)
++#define G_000E40_VAP_BUSY(x) (((x) >> 20) & 0x1)
++#define C_000E40_VAP_BUSY 0xFFEFFFFF
++#define S_000E40_RE_BUSY(x) (((x) & 0x1) << 21)
++#define G_000E40_RE_BUSY(x) (((x) >> 21) & 0x1)
++#define C_000E40_RE_BUSY 0xFFDFFFFF
++#define S_000E40_TAM_BUSY(x) (((x) & 0x1) << 22)
++#define G_000E40_TAM_BUSY(x) (((x) >> 22) & 0x1)
++#define C_000E40_TAM_BUSY 0xFFBFFFFF
++#define S_000E40_TDM_BUSY(x) (((x) & 0x1) << 23)
++#define G_000E40_TDM_BUSY(x) (((x) >> 23) & 0x1)
++#define C_000E40_TDM_BUSY 0xFF7FFFFF
++#define S_000E40_PB_BUSY(x) (((x) & 0x1) << 24)
++#define G_000E40_PB_BUSY(x) (((x) >> 24) & 0x1)
++#define C_000E40_PB_BUSY 0xFEFFFFFF
++#define S_000E40_TIM_BUSY(x) (((x) & 0x1) << 25)
++#define G_000E40_TIM_BUSY(x) (((x) >> 25) & 0x1)
++#define C_000E40_TIM_BUSY 0xFDFFFFFF
++#define S_000E40_GA_BUSY(x) (((x) & 0x1) << 26)
++#define G_000E40_GA_BUSY(x) (((x) >> 26) & 0x1)
++#define C_000E40_GA_BUSY 0xFBFFFFFF
++#define S_000E40_CBA2D_BUSY(x) (((x) & 0x1) << 27)
++#define G_000E40_CBA2D_BUSY(x) (((x) >> 27) & 0x1)
++#define C_000E40_CBA2D_BUSY 0xF7FFFFFF
++#define S_000E40_RBBM_HIBUSY(x) (((x) & 0x1) << 28)
++#define G_000E40_RBBM_HIBUSY(x) (((x) >> 28) & 0x1)
++#define C_000E40_RBBM_HIBUSY 0xEFFFFFFF
++#define S_000E40_SKID_CFBUSY(x) (((x) & 0x1) << 29)
++#define G_000E40_SKID_CFBUSY(x) (((x) >> 29) & 0x1)
++#define C_000E40_SKID_CFBUSY 0xDFFFFFFF
++#define S_000E40_VAP_VF_BUSY(x) (((x) & 0x1) << 30)
++#define G_000E40_VAP_VF_BUSY(x) (((x) >> 30) & 0x1)
++#define C_000E40_VAP_VF_BUSY 0xBFFFFFFF
++#define S_000E40_GUI_ACTIVE(x) (((x) & 0x1) << 31)
++#define G_000E40_GUI_ACTIVE(x) (((x) >> 31) & 0x1)
++#define C_000E40_GUI_ACTIVE 0x7FFFFFFF
++
++
++#define R_000004_MC_FB_LOCATION 0x000004
++#define S_000004_MC_FB_START(x) (((x) & 0xFFFF) << 0)
++#define G_000004_MC_FB_START(x) (((x) >> 0) & 0xFFFF)
++#define C_000004_MC_FB_START 0xFFFF0000
++#define S_000004_MC_FB_TOP(x) (((x) & 0xFFFF) << 16)
++#define G_000004_MC_FB_TOP(x) (((x) >> 16) & 0xFFFF)
++#define C_000004_MC_FB_TOP 0x0000FFFF
++#define R_000005_MC_AGP_LOCATION 0x000005
++#define S_000005_MC_AGP_START(x) (((x) & 0xFFFF) << 0)
++#define G_000005_MC_AGP_START(x) (((x) >> 0) & 0xFFFF)
++#define C_000005_MC_AGP_START 0xFFFF0000
++#define S_000005_MC_AGP_TOP(x) (((x) & 0xFFFF) << 16)
++#define G_000005_MC_AGP_TOP(x) (((x) >> 16) & 0xFFFF)
++#define C_000005_MC_AGP_TOP 0x0000FFFF
++#define R_000006_AGP_BASE 0x000006
++#define S_000006_AGP_BASE_ADDR(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_000006_AGP_BASE_ADDR(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_000006_AGP_BASE_ADDR 0x00000000
++#define R_000007_AGP_BASE_2 0x000007
++#define S_000007_AGP_BASE_ADDR_2(x) (((x) & 0xF) << 0)
++#define G_000007_AGP_BASE_ADDR_2(x) (((x) >> 0) & 0xF)
++#define C_000007_AGP_BASE_ADDR_2 0xFFFFFFF0
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/r600.c b/drivers/gpu/drm/radeon/r600.c
+index 538cd90..6b7a40b 100644
+--- a/drivers/gpu/drm/radeon/r600.c
++++ b/drivers/gpu/drm/radeon/r600.c
+@@ -25,12 +25,45 @@
+ * Alex Deucher
+ * Jerome Glisse
+ */
++#include <linux/seq_file.h>
++#include <linux/firmware.h>
++#include <linux/platform_device.h>
+ #include "drmP.h"
+-#include "radeon_reg.h"
++#include "radeon_drm.h"
+ #include "radeon.h"
++#include "radeon_mode.h"
++#include "r600d.h"
++#include "atom.h"
++#include "avivod.h"
+
+-/* r600,rv610,rv630,rv620,rv635,rv670 depends on : */
+-void rs600_mc_disable_clients(struct radeon_device *rdev);
++#define PFP_UCODE_SIZE 576
++#define PM4_UCODE_SIZE 1792
++#define R700_PFP_UCODE_SIZE 848
++#define R700_PM4_UCODE_SIZE 1360
++
++/* Firmware Names */
++MODULE_FIRMWARE("radeon/R600_pfp.bin");
++MODULE_FIRMWARE("radeon/R600_me.bin");
++MODULE_FIRMWARE("radeon/RV610_pfp.bin");
++MODULE_FIRMWARE("radeon/RV610_me.bin");
++MODULE_FIRMWARE("radeon/RV630_pfp.bin");
++MODULE_FIRMWARE("radeon/RV630_me.bin");
++MODULE_FIRMWARE("radeon/RV620_pfp.bin");
++MODULE_FIRMWARE("radeon/RV620_me.bin");
++MODULE_FIRMWARE("radeon/RV635_pfp.bin");
++MODULE_FIRMWARE("radeon/RV635_me.bin");
++MODULE_FIRMWARE("radeon/RV670_pfp.bin");
++MODULE_FIRMWARE("radeon/RV670_me.bin");
++MODULE_FIRMWARE("radeon/RS780_pfp.bin");
++MODULE_FIRMWARE("radeon/RS780_me.bin");
++MODULE_FIRMWARE("radeon/RV770_pfp.bin");
++MODULE_FIRMWARE("radeon/RV770_me.bin");
++MODULE_FIRMWARE("radeon/RV730_pfp.bin");
++MODULE_FIRMWARE("radeon/RV730_me.bin");
++MODULE_FIRMWARE("radeon/RV710_pfp.bin");
++MODULE_FIRMWARE("radeon/RV710_me.bin");
++
++int r600_debugfs_mc_info_init(struct radeon_device *rdev);
+
+ /* This files gather functions specifics to:
+ * r600,rv610,rv630,rv620,rv635,rv670
+@@ -39,87 +72,293 @@ void rs600_mc_disable_clients(struct radeon_device *rdev);
+ */
+ int r600_mc_wait_for_idle(struct radeon_device *rdev);
+ void r600_gpu_init(struct radeon_device *rdev);
++void r600_fini(struct radeon_device *rdev);
+
+
+ /*
+- * MC
++ * R600 PCIE GART
+ */
+-int r600_mc_init(struct radeon_device *rdev)
++int r600_gart_clear_page(struct radeon_device *rdev, int i)
+ {
+- uint32_t tmp;
++ void __iomem *ptr = (void *)rdev->gart.table.vram.ptr;
++ u64 pte;
+
+- r600_gpu_init(rdev);
++ if (i < 0 || i > rdev->gart.num_gpu_pages)
++ return -EINVAL;
++ pte = 0;
++ writeq(pte, ((void __iomem *)ptr) + (i * 8));
++ return 0;
++}
+
+- /* setup the gart before changing location so we can ask to
+- * discard unmapped mc request
+- */
+- /* FIXME: disable out of gart access */
+- tmp = rdev->mc.gtt_location / 4096;
+- tmp = REG_SET(R600_LOGICAL_PAGE_NUMBER, tmp);
+- WREG32(R600_MC_VM_SYSTEM_APERTURE_LOW_ADDR, tmp);
+- tmp = (rdev->mc.gtt_location + rdev->mc.gtt_size) / 4096;
+- tmp = REG_SET(R600_LOGICAL_PAGE_NUMBER, tmp);
+- WREG32(R600_MC_VM_SYSTEM_APERTURE_HIGH_ADDR, tmp);
+-
+- rs600_mc_disable_clients(rdev);
+- if (r600_mc_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait MC idle while "
+- "programming pipes. Bad things might happen.\n");
++void r600_pcie_gart_tlb_flush(struct radeon_device *rdev)
++{
++ unsigned i;
++ u32 tmp;
++
++ WREG32(VM_CONTEXT0_INVALIDATION_LOW_ADDR, rdev->mc.gtt_start >> 12);
++ WREG32(VM_CONTEXT0_INVALIDATION_HIGH_ADDR, (rdev->mc.gtt_end - 1) >> 12);
++ WREG32(VM_CONTEXT0_REQUEST_RESPONSE, REQUEST_TYPE(1));
++ for (i = 0; i < rdev->usec_timeout; i++) {
++ /* read MC_STATUS */
++ tmp = RREG32(VM_CONTEXT0_REQUEST_RESPONSE);
++ tmp = (tmp & RESPONSE_TYPE_MASK) >> RESPONSE_TYPE_SHIFT;
++ if (tmp == 2) {
++ printk(KERN_WARNING "[drm] r600 flush TLB failed\n");
++ return;
++ }
++ if (tmp) {
++ return;
++ }
++ udelay(1);
+ }
++}
+
+- tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1;
+- tmp = REG_SET(R600_MC_FB_TOP, tmp >> 24);
+- tmp |= REG_SET(R600_MC_FB_BASE, rdev->mc.vram_location >> 24);
+- WREG32(R600_MC_VM_FB_LOCATION, tmp);
+- tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1;
+- tmp = REG_SET(R600_MC_AGP_TOP, tmp >> 22);
+- WREG32(R600_MC_VM_AGP_TOP, tmp);
+- tmp = REG_SET(R600_MC_AGP_BOT, rdev->mc.gtt_location >> 22);
+- WREG32(R600_MC_VM_AGP_BOT, tmp);
+- return 0;
++int r600_pcie_gart_init(struct radeon_device *rdev)
++{
++ int r;
++
++ if (rdev->gart.table.vram.robj) {
++ WARN(1, "R600 PCIE GART already initialized.\n");
++ return 0;
++ }
++ /* Initialize common gart structure */
++ r = radeon_gart_init(rdev);
++ if (r)
++ return r;
++ rdev->gart.table_size = rdev->gart.num_gpu_pages * 8;
++ return radeon_gart_table_vram_alloc(rdev);
+ }
+
+-void r600_mc_fini(struct radeon_device *rdev)
++int r600_pcie_gart_enable(struct radeon_device *rdev)
+ {
+- /* FIXME: implement */
++ u32 tmp;
++ int r, i;
++
++ if (rdev->gart.table.vram.robj == NULL) {
++ dev_err(rdev->dev, "No VRAM object for PCIE GART.\n");
++ return -EINVAL;
++ }
++ r = radeon_gart_table_vram_pin(rdev);
++ if (r)
++ return r;
++
++ /* Setup L2 cache */
++ WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING |
++ ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
++ EFFECTIVE_L2_QUEUE_SIZE(7));
++ WREG32(VM_L2_CNTL2, 0);
++ WREG32(VM_L2_CNTL3, BANK_SELECT_0(0) | BANK_SELECT_1(1));
++ /* Setup TLB control */
++ tmp = ENABLE_L1_TLB | ENABLE_L1_FRAGMENT_PROCESSING |
++ SYSTEM_ACCESS_MODE_NOT_IN_SYS |
++ EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5) |
++ ENABLE_WAIT_L2_QUERY;
++ WREG32(MC_VM_L1_TLB_MCB_RD_SYS_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_SYS_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_HDP_CNTL, tmp | ENABLE_L1_STRICT_ORDERING);
++ WREG32(MC_VM_L1_TLB_MCB_WR_HDP_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCD_RD_A_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCD_WR_A_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCD_RD_B_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCD_WR_B_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_GFX_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_GFX_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_PDMA_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_PDMA_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_SEM_CNTL, tmp | ENABLE_SEMAPHORE_MODE);
++ WREG32(MC_VM_L1_TLB_MCB_WR_SEM_CNTL, tmp | ENABLE_SEMAPHORE_MODE);
++ WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12);
++ WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR, (rdev->mc.gtt_end - 1) >> 12);
++ WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR, rdev->gart.table_addr >> 12);
++ WREG32(VM_CONTEXT0_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(0) |
++ RANGE_PROTECTION_FAULT_ENABLE_DEFAULT);
++ WREG32(VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR,
++ (u32)(rdev->dummy_page.addr >> 12));
++ for (i = 1; i < 7; i++)
++ WREG32(VM_CONTEXT0_CNTL + (i * 4), 0);
++
++ r600_pcie_gart_tlb_flush(rdev);
++ rdev->gart.ready = true;
++ return 0;
+ }
+
++void r600_pcie_gart_disable(struct radeon_device *rdev)
++{
++ u32 tmp;
++ int i;
+
+-/*
+- * Global GPU functions
+- */
+-void r600_errata(struct radeon_device *rdev)
++ /* Disable all tables */
++ for (i = 0; i < 7; i++)
++ WREG32(VM_CONTEXT0_CNTL + (i * 4), 0);
++
++ /* Disable L2 cache */
++ WREG32(VM_L2_CNTL, ENABLE_L2_FRAGMENT_PROCESSING |
++ EFFECTIVE_L2_QUEUE_SIZE(7));
++ WREG32(VM_L2_CNTL3, BANK_SELECT_0(0) | BANK_SELECT_1(1));
++ /* Setup L1 TLB control */
++ tmp = EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5) |
++ ENABLE_WAIT_L2_QUERY;
++ WREG32(MC_VM_L1_TLB_MCD_RD_A_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCD_WR_A_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCD_RD_B_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCD_WR_B_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_GFX_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_GFX_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_PDMA_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_PDMA_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_SEM_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_SEM_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_SYS_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_SYS_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_RD_HDP_CNTL, tmp);
++ WREG32(MC_VM_L1_TLB_MCB_WR_HDP_CNTL, tmp);
++ if (rdev->gart.table.vram.robj) {
++ radeon_object_kunmap(rdev->gart.table.vram.robj);
++ radeon_object_unpin(rdev->gart.table.vram.robj);
++ }
++}
++
++void r600_pcie_gart_fini(struct radeon_device *rdev)
+ {
+- rdev->pll_errata = 0;
++ r600_pcie_gart_disable(rdev);
++ radeon_gart_table_vram_free(rdev);
++ radeon_gart_fini(rdev);
+ }
+
+ int r600_mc_wait_for_idle(struct radeon_device *rdev)
+ {
+- /* FIXME: implement */
+- return 0;
++ unsigned i;
++ u32 tmp;
++
++ for (i = 0; i < rdev->usec_timeout; i++) {
++ /* read MC_STATUS */
++ tmp = RREG32(R_000E50_SRBM_STATUS) & 0x3F00;
++ if (!tmp)
++ return 0;
++ udelay(1);
++ }
++ return -1;
+ }
+
+-void r600_gpu_init(struct radeon_device *rdev)
++static void r600_mc_resume(struct radeon_device *rdev)
+ {
+- /* FIXME: implement */
+-}
++ u32 d1vga_control, d2vga_control;
++ u32 vga_render_control, vga_hdp_control;
++ u32 d1crtc_control, d2crtc_control;
++ u32 new_d1grph_primary, new_d1grph_secondary;
++ u32 new_d2grph_primary, new_d2grph_secondary;
++ u64 old_vram_start;
++ u32 tmp;
++ int i, j;
+
++ /* Initialize HDP */
++ for (i = 0, j = 0; i < 32; i++, j += 0x18) {
++ WREG32((0x2c14 + j), 0x00000000);
++ WREG32((0x2c18 + j), 0x00000000);
++ WREG32((0x2c1c + j), 0x00000000);
++ WREG32((0x2c20 + j), 0x00000000);
++ WREG32((0x2c24 + j), 0x00000000);
++ }
++ WREG32(HDP_REG_COHERENCY_FLUSH_CNTL, 0);
+
+-/*
+- * VRAM info
+- */
+-void r600_vram_get_type(struct radeon_device *rdev)
++ d1vga_control = RREG32(D1VGA_CONTROL);
++ d2vga_control = RREG32(D2VGA_CONTROL);
++ vga_render_control = RREG32(VGA_RENDER_CONTROL);
++ vga_hdp_control = RREG32(VGA_HDP_CONTROL);
++ d1crtc_control = RREG32(D1CRTC_CONTROL);
++ d2crtc_control = RREG32(D2CRTC_CONTROL);
++ old_vram_start = (u64)(RREG32(MC_VM_FB_LOCATION) & 0xFFFF) << 24;
++ new_d1grph_primary = RREG32(D1GRPH_PRIMARY_SURFACE_ADDRESS);
++ new_d1grph_secondary = RREG32(D1GRPH_SECONDARY_SURFACE_ADDRESS);
++ new_d1grph_primary += rdev->mc.vram_start - old_vram_start;
++ new_d1grph_secondary += rdev->mc.vram_start - old_vram_start;
++ new_d2grph_primary = RREG32(D2GRPH_PRIMARY_SURFACE_ADDRESS);
++ new_d2grph_secondary = RREG32(D2GRPH_SECONDARY_SURFACE_ADDRESS);
++ new_d2grph_primary += rdev->mc.vram_start - old_vram_start;
++ new_d2grph_secondary += rdev->mc.vram_start - old_vram_start;
++
++ /* Stop all video */
++ WREG32(D1VGA_CONTROL, 0);
++ WREG32(D2VGA_CONTROL, 0);
++ WREG32(VGA_RENDER_CONTROL, 0);
++ WREG32(D1CRTC_UPDATE_LOCK, 1);
++ WREG32(D2CRTC_UPDATE_LOCK, 1);
++ WREG32(D1CRTC_CONTROL, 0);
++ WREG32(D2CRTC_CONTROL, 0);
++ WREG32(D1CRTC_UPDATE_LOCK, 0);
++ WREG32(D2CRTC_UPDATE_LOCK, 0);
++
++ mdelay(1);
++ if (r600_mc_wait_for_idle(rdev)) {
++ printk(KERN_WARNING "[drm] MC not idle !\n");
++ }
++
++ /* Lockout access through VGA aperture*/
++ WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE);
++
++ /* Update configuration */
++ WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR, rdev->mc.vram_start >> 12);
++ WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR, (rdev->mc.vram_end - 1) >> 12);
++ WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0);
++ tmp = (((rdev->mc.vram_end - 1) >> 24) & 0xFFFF) << 16;
++ tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF);
++ WREG32(MC_VM_FB_LOCATION, tmp);
++ WREG32(HDP_NONSURFACE_BASE, (rdev->mc.vram_start >> 8));
++ WREG32(HDP_NONSURFACE_INFO, (2 << 7));
++ WREG32(HDP_NONSURFACE_SIZE, (rdev->mc.mc_vram_size - 1) | 0x3FF);
++ if (rdev->flags & RADEON_IS_AGP) {
++ WREG32(MC_VM_AGP_TOP, (rdev->mc.gtt_end - 1) >> 16);
++ WREG32(MC_VM_AGP_BOT, rdev->mc.gtt_start >> 16);
++ WREG32(MC_VM_AGP_BASE, rdev->mc.agp_base >> 22);
++ } else {
++ WREG32(MC_VM_AGP_BASE, 0);
++ WREG32(MC_VM_AGP_TOP, 0x0FFFFFFF);
++ WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF);
++ }
++ WREG32(D1GRPH_PRIMARY_SURFACE_ADDRESS, new_d1grph_primary);
++ WREG32(D1GRPH_SECONDARY_SURFACE_ADDRESS, new_d1grph_secondary);
++ WREG32(D2GRPH_PRIMARY_SURFACE_ADDRESS, new_d2grph_primary);
++ WREG32(D2GRPH_SECONDARY_SURFACE_ADDRESS, new_d2grph_secondary);
++ WREG32(VGA_MEMORY_BASE_ADDRESS, rdev->mc.vram_start);
++
++ /* Unlock host access */
++ WREG32(VGA_HDP_CONTROL, vga_hdp_control);
++
++ mdelay(1);
++ if (r600_mc_wait_for_idle(rdev)) {
++ printk(KERN_WARNING "[drm] MC not idle !\n");
++ }
++
++ /* Restore video state */
++ WREG32(D1CRTC_UPDATE_LOCK, 1);
++ WREG32(D2CRTC_UPDATE_LOCK, 1);
++ WREG32(D1CRTC_CONTROL, d1crtc_control);
++ WREG32(D2CRTC_CONTROL, d2crtc_control);
++ WREG32(D1CRTC_UPDATE_LOCK, 0);
++ WREG32(D2CRTC_UPDATE_LOCK, 0);
++ WREG32(D1VGA_CONTROL, d1vga_control);
++ WREG32(D2VGA_CONTROL, d2vga_control);
++ WREG32(VGA_RENDER_CONTROL, vga_render_control);
++
++ /* we need to own VRAM, so turn off the VGA renderer here
++ * to stop it overwriting our objects */
++ rv515_vga_render_disable(rdev);
++}
++
++int r600_mc_init(struct radeon_device *rdev)
+ {
+- uint32_t tmp;
++ fixed20_12 a;
++ u32 tmp;
+ int chansize;
++ int r;
+
++ /* Get VRAM informations */
+ rdev->mc.vram_width = 128;
+ rdev->mc.vram_is_ddr = true;
+-
+- tmp = RREG32(R600_RAMCFG);
+- if (tmp & R600_CHANSIZE_OVERRIDE) {
++ tmp = RREG32(RAMCFG);
++ if (tmp & CHANSIZE_OVERRIDE) {
+ chansize = 16;
+- } else if (tmp & R600_CHANSIZE) {
++ } else if (tmp & CHANSIZE_MASK) {
+ chansize = 64;
+ } else {
+ chansize = 32;
+@@ -135,36 +374,1452 @@ void r600_vram_get_type(struct radeon_device *rdev)
+ (rdev->family == CHIP_RV635)) {
+ rdev->mc.vram_width = 2 * chansize;
+ }
++ /* Could aper size report 0 ? */
++ rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
++ rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0);
++ /* Setup GPU memory space */
++ rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE);
++ rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE);
++
++ if (rdev->mc.mc_vram_size > rdev->mc.aper_size)
++ rdev->mc.mc_vram_size = rdev->mc.aper_size;
++
++ if (rdev->mc.real_vram_size > rdev->mc.aper_size)
++ rdev->mc.real_vram_size = rdev->mc.aper_size;
++
++ if (rdev->flags & RADEON_IS_AGP) {
++ r = radeon_agp_init(rdev);
++ if (r)
++ return r;
++ /* gtt_size is setup by radeon_agp_init */
++ rdev->mc.gtt_location = rdev->mc.agp_base;
++ tmp = 0xFFFFFFFFUL - rdev->mc.agp_base - rdev->mc.gtt_size;
++ /* Try to put vram before or after AGP because we
++ * we want SYSTEM_APERTURE to cover both VRAM and
++ * AGP so that GPU can catch out of VRAM/AGP access
++ */
++ if (rdev->mc.gtt_location > rdev->mc.mc_vram_size) {
++ /* Enought place before */
++ rdev->mc.vram_location = rdev->mc.gtt_location -
++ rdev->mc.mc_vram_size;
++ } else if (tmp > rdev->mc.mc_vram_size) {
++ /* Enought place after */
++ rdev->mc.vram_location = rdev->mc.gtt_location +
++ rdev->mc.gtt_size;
++ } else {
++ /* Try to setup VRAM then AGP might not
++ * not work on some card
++ */
++ rdev->mc.vram_location = 0x00000000UL;
++ rdev->mc.gtt_location = rdev->mc.mc_vram_size;
++ }
++ } else {
++ if (rdev->family == CHIP_RS780 || rdev->family == CHIP_RS880) {
++ rdev->mc.vram_location = (RREG32(MC_VM_FB_LOCATION) &
++ 0xFFFF) << 24;
++ rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
++ tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size;
++ if ((0xFFFFFFFFUL - tmp) >= rdev->mc.gtt_size) {
++ /* Enough place after vram */
++ rdev->mc.gtt_location = tmp;
++ } else if (rdev->mc.vram_location >= rdev->mc.gtt_size) {
++ /* Enough place before vram */
++ rdev->mc.gtt_location = 0;
++ } else {
++ /* Not enough place after or before shrink
++ * gart size
++ */
++ if (rdev->mc.vram_location > (0xFFFFFFFFUL - tmp)) {
++ rdev->mc.gtt_location = 0;
++ rdev->mc.gtt_size = rdev->mc.vram_location;
++ } else {
++ rdev->mc.gtt_location = tmp;
++ rdev->mc.gtt_size = 0xFFFFFFFFUL - tmp;
++ }
++ }
++ rdev->mc.gtt_location = rdev->mc.mc_vram_size;
++ } else {
++ rdev->mc.vram_location = 0x00000000UL;
++ rdev->mc.gtt_location = rdev->mc.mc_vram_size;
++ rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
++ }
++ }
++ rdev->mc.vram_start = rdev->mc.vram_location;
++ rdev->mc.vram_end = rdev->mc.vram_location + rdev->mc.mc_vram_size;
++ rdev->mc.gtt_start = rdev->mc.gtt_location;
++ rdev->mc.gtt_end = rdev->mc.gtt_location + rdev->mc.gtt_size;
++ /* FIXME: we should enforce default clock in case GPU is not in
++ * default setup
++ */
++ a.full = rfixed_const(100);
++ rdev->pm.sclk.full = rfixed_const(rdev->clock.default_sclk);
++ rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a);
++ return 0;
+ }
+
+-void r600_vram_info(struct radeon_device *rdev)
++/* We doesn't check that the GPU really needs a reset we simply do the
++ * reset, it's up to the caller to determine if the GPU needs one. We
++ * might add an helper function to check that.
++ */
++int r600_gpu_soft_reset(struct radeon_device *rdev)
+ {
+- r600_vram_get_type(rdev);
+- rdev->mc.real_vram_size = RREG32(R600_CONFIG_MEMSIZE);
+- rdev->mc.mc_vram_size = rdev->mc.real_vram_size;
++ u32 grbm_busy_mask = S_008010_VC_BUSY(1) | S_008010_VGT_BUSY_NO_DMA(1) |
++ S_008010_VGT_BUSY(1) | S_008010_TA03_BUSY(1) |
++ S_008010_TC_BUSY(1) | S_008010_SX_BUSY(1) |
++ S_008010_SH_BUSY(1) | S_008010_SPI03_BUSY(1) |
++ S_008010_SMX_BUSY(1) | S_008010_SC_BUSY(1) |
++ S_008010_PA_BUSY(1) | S_008010_DB03_BUSY(1) |
++ S_008010_CR_BUSY(1) | S_008010_CB03_BUSY(1) |
++ S_008010_GUI_ACTIVE(1);
++ u32 grbm2_busy_mask = S_008014_SPI0_BUSY(1) | S_008014_SPI1_BUSY(1) |
++ S_008014_SPI2_BUSY(1) | S_008014_SPI3_BUSY(1) |
++ S_008014_TA0_BUSY(1) | S_008014_TA1_BUSY(1) |
++ S_008014_TA2_BUSY(1) | S_008014_TA3_BUSY(1) |
++ S_008014_DB0_BUSY(1) | S_008014_DB1_BUSY(1) |
++ S_008014_DB2_BUSY(1) | S_008014_DB3_BUSY(1) |
++ S_008014_CB0_BUSY(1) | S_008014_CB1_BUSY(1) |
++ S_008014_CB2_BUSY(1) | S_008014_CB3_BUSY(1);
++ u32 srbm_reset = 0;
+
+- /* Could aper size report 0 ? */
+- rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
+- rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0);
++ /* Disable CP parsing/prefetching */
++ WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(0xff));
++ /* Check if any of the rendering block is busy and reset it */
++ if ((RREG32(R_008010_GRBM_STATUS) & grbm_busy_mask) ||
++ (RREG32(R_008014_GRBM_STATUS2) & grbm2_busy_mask)) {
++ WREG32(R_008020_GRBM_SOFT_RESET, S_008020_SOFT_RESET_CR(1) |
++ S_008020_SOFT_RESET_DB(1) |
++ S_008020_SOFT_RESET_CB(1) |
++ S_008020_SOFT_RESET_PA(1) |
++ S_008020_SOFT_RESET_SC(1) |
++ S_008020_SOFT_RESET_SMX(1) |
++ S_008020_SOFT_RESET_SPI(1) |
++ S_008020_SOFT_RESET_SX(1) |
++ S_008020_SOFT_RESET_SH(1) |
++ S_008020_SOFT_RESET_TC(1) |
++ S_008020_SOFT_RESET_TA(1) |
++ S_008020_SOFT_RESET_VC(1) |
++ S_008020_SOFT_RESET_VGT(1));
++ (void)RREG32(R_008020_GRBM_SOFT_RESET);
++ udelay(50);
++ WREG32(R_008020_GRBM_SOFT_RESET, 0);
++ (void)RREG32(R_008020_GRBM_SOFT_RESET);
++ }
++ /* Reset CP (we always reset CP) */
++ WREG32(R_008020_GRBM_SOFT_RESET, S_008020_SOFT_RESET_CP(1));
++ (void)RREG32(R_008020_GRBM_SOFT_RESET);
++ udelay(50);
++ WREG32(R_008020_GRBM_SOFT_RESET, 0);
++ (void)RREG32(R_008020_GRBM_SOFT_RESET);
++ /* Reset others GPU block if necessary */
++ if (G_000E50_RLC_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_RLC(1);
++ if (G_000E50_GRBM_RQ_PENDING(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_GRBM(1);
++ if (G_000E50_HI_RQ_PENDING(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_IH(1);
++ if (G_000E50_VMC_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_VMC(1);
++ if (G_000E50_MCB_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_MC(1);
++ if (G_000E50_MCDZ_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_MC(1);
++ if (G_000E50_MCDY_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_MC(1);
++ if (G_000E50_MCDX_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_MC(1);
++ if (G_000E50_MCDW_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_MC(1);
++ if (G_000E50_RLC_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_RLC(1);
++ if (G_000E50_SEM_BUSY(RREG32(R_000E50_SRBM_STATUS)))
++ srbm_reset |= S_000E60_SOFT_RESET_SEM(1);
++ WREG32(R_000E60_SRBM_SOFT_RESET, srbm_reset);
++ (void)RREG32(R_000E60_SRBM_SOFT_RESET);
++ udelay(50);
++ WREG32(R_000E60_SRBM_SOFT_RESET, 0);
++ (void)RREG32(R_000E60_SRBM_SOFT_RESET);
++ /* Wait a little for things to settle down */
++ udelay(50);
++ return 0;
++}
++
++int r600_gpu_reset(struct radeon_device *rdev)
++{
++ return r600_gpu_soft_reset(rdev);
+ }
+
++static u32 r600_get_tile_pipe_to_backend_map(u32 num_tile_pipes,
++ u32 num_backends,
++ u32 backend_disable_mask)
++{
++ u32 backend_map = 0;
++ u32 enabled_backends_mask;
++ u32 enabled_backends_count;
++ u32 cur_pipe;
++ u32 swizzle_pipe[R6XX_MAX_PIPES];
++ u32 cur_backend;
++ u32 i;
++
++ if (num_tile_pipes > R6XX_MAX_PIPES)
++ num_tile_pipes = R6XX_MAX_PIPES;
++ if (num_tile_pipes < 1)
++ num_tile_pipes = 1;
++ if (num_backends > R6XX_MAX_BACKENDS)
++ num_backends = R6XX_MAX_BACKENDS;
++ if (num_backends < 1)
++ num_backends = 1;
++
++ enabled_backends_mask = 0;
++ enabled_backends_count = 0;
++ for (i = 0; i < R6XX_MAX_BACKENDS; ++i) {
++ if (((backend_disable_mask >> i) & 1) == 0) {
++ enabled_backends_mask |= (1 << i);
++ ++enabled_backends_count;
++ }
++ if (enabled_backends_count == num_backends)
++ break;
++ }
++
++ if (enabled_backends_count == 0) {
++ enabled_backends_mask = 1;
++ enabled_backends_count = 1;
++ }
++
++ if (enabled_backends_count != num_backends)
++ num_backends = enabled_backends_count;
++
++ memset((uint8_t *)&swizzle_pipe[0], 0, sizeof(u32) * R6XX_MAX_PIPES);
++ switch (num_tile_pipes) {
++ case 1:
++ swizzle_pipe[0] = 0;
++ break;
++ case 2:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 1;
++ break;
++ case 3:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 1;
++ swizzle_pipe[2] = 2;
++ break;
++ case 4:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 1;
++ swizzle_pipe[2] = 2;
++ swizzle_pipe[3] = 3;
++ break;
++ case 5:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 1;
++ swizzle_pipe[2] = 2;
++ swizzle_pipe[3] = 3;
++ swizzle_pipe[4] = 4;
++ break;
++ case 6:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 4;
++ swizzle_pipe[3] = 5;
++ swizzle_pipe[4] = 1;
++ swizzle_pipe[5] = 3;
++ break;
++ case 7:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 4;
++ swizzle_pipe[3] = 6;
++ swizzle_pipe[4] = 1;
++ swizzle_pipe[5] = 3;
++ swizzle_pipe[6] = 5;
++ break;
++ case 8:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 4;
++ swizzle_pipe[3] = 6;
++ swizzle_pipe[4] = 1;
++ swizzle_pipe[5] = 3;
++ swizzle_pipe[6] = 5;
++ swizzle_pipe[7] = 7;
++ break;
++ }
++
++ cur_backend = 0;
++ for (cur_pipe = 0; cur_pipe < num_tile_pipes; ++cur_pipe) {
++ while (((1 << cur_backend) & enabled_backends_mask) == 0)
++ cur_backend = (cur_backend + 1) % R6XX_MAX_BACKENDS;
++
++ backend_map |= (u32)(((cur_backend & 3) << (swizzle_pipe[cur_pipe] * 2)));
++
++ cur_backend = (cur_backend + 1) % R6XX_MAX_BACKENDS;
++ }
++
++ return backend_map;
++}
++
++int r600_count_pipe_bits(uint32_t val)
++{
++ int i, ret = 0;
++
++ for (i = 0; i < 32; i++) {
++ ret += val & 1;
++ val >>= 1;
++ }
++ return ret;
++}
++
++void r600_gpu_init(struct radeon_device *rdev)
++{
++ u32 tiling_config;
++ u32 ramcfg;
++ u32 tmp;
++ int i, j;
++ u32 sq_config;
++ u32 sq_gpr_resource_mgmt_1 = 0;
++ u32 sq_gpr_resource_mgmt_2 = 0;
++ u32 sq_thread_resource_mgmt = 0;
++ u32 sq_stack_resource_mgmt_1 = 0;
++ u32 sq_stack_resource_mgmt_2 = 0;
++
++ /* FIXME: implement */
++ switch (rdev->family) {
++ case CHIP_R600:
++ rdev->config.r600.max_pipes = 4;
++ rdev->config.r600.max_tile_pipes = 8;
++ rdev->config.r600.max_simds = 4;
++ rdev->config.r600.max_backends = 4;
++ rdev->config.r600.max_gprs = 256;
++ rdev->config.r600.max_threads = 192;
++ rdev->config.r600.max_stack_entries = 256;
++ rdev->config.r600.max_hw_contexts = 8;
++ rdev->config.r600.max_gs_threads = 16;
++ rdev->config.r600.sx_max_export_size = 128;
++ rdev->config.r600.sx_max_export_pos_size = 16;
++ rdev->config.r600.sx_max_export_smx_size = 128;
++ rdev->config.r600.sq_num_cf_insts = 2;
++ break;
++ case CHIP_RV630:
++ case CHIP_RV635:
++ rdev->config.r600.max_pipes = 2;
++ rdev->config.r600.max_tile_pipes = 2;
++ rdev->config.r600.max_simds = 3;
++ rdev->config.r600.max_backends = 1;
++ rdev->config.r600.max_gprs = 128;
++ rdev->config.r600.max_threads = 192;
++ rdev->config.r600.max_stack_entries = 128;
++ rdev->config.r600.max_hw_contexts = 8;
++ rdev->config.r600.max_gs_threads = 4;
++ rdev->config.r600.sx_max_export_size = 128;
++ rdev->config.r600.sx_max_export_pos_size = 16;
++ rdev->config.r600.sx_max_export_smx_size = 128;
++ rdev->config.r600.sq_num_cf_insts = 2;
++ break;
++ case CHIP_RV610:
++ case CHIP_RV620:
++ case CHIP_RS780:
++ case CHIP_RS880:
++ rdev->config.r600.max_pipes = 1;
++ rdev->config.r600.max_tile_pipes = 1;
++ rdev->config.r600.max_simds = 2;
++ rdev->config.r600.max_backends = 1;
++ rdev->config.r600.max_gprs = 128;
++ rdev->config.r600.max_threads = 192;
++ rdev->config.r600.max_stack_entries = 128;
++ rdev->config.r600.max_hw_contexts = 4;
++ rdev->config.r600.max_gs_threads = 4;
++ rdev->config.r600.sx_max_export_size = 128;
++ rdev->config.r600.sx_max_export_pos_size = 16;
++ rdev->config.r600.sx_max_export_smx_size = 128;
++ rdev->config.r600.sq_num_cf_insts = 1;
++ break;
++ case CHIP_RV670:
++ rdev->config.r600.max_pipes = 4;
++ rdev->config.r600.max_tile_pipes = 4;
++ rdev->config.r600.max_simds = 4;
++ rdev->config.r600.max_backends = 4;
++ rdev->config.r600.max_gprs = 192;
++ rdev->config.r600.max_threads = 192;
++ rdev->config.r600.max_stack_entries = 256;
++ rdev->config.r600.max_hw_contexts = 8;
++ rdev->config.r600.max_gs_threads = 16;
++ rdev->config.r600.sx_max_export_size = 128;
++ rdev->config.r600.sx_max_export_pos_size = 16;
++ rdev->config.r600.sx_max_export_smx_size = 128;
++ rdev->config.r600.sq_num_cf_insts = 2;
++ break;
++ default:
++ break;
++ }
++
++ /* Initialize HDP */
++ for (i = 0, j = 0; i < 32; i++, j += 0x18) {
++ WREG32((0x2c14 + j), 0x00000000);
++ WREG32((0x2c18 + j), 0x00000000);
++ WREG32((0x2c1c + j), 0x00000000);
++ WREG32((0x2c20 + j), 0x00000000);
++ WREG32((0x2c24 + j), 0x00000000);
++ }
++
++ WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
++
++ /* Setup tiling */
++ tiling_config = 0;
++ ramcfg = RREG32(RAMCFG);
++ switch (rdev->config.r600.max_tile_pipes) {
++ case 1:
++ tiling_config |= PIPE_TILING(0);
++ break;
++ case 2:
++ tiling_config |= PIPE_TILING(1);
++ break;
++ case 4:
++ tiling_config |= PIPE_TILING(2);
++ break;
++ case 8:
++ tiling_config |= PIPE_TILING(3);
++ break;
++ default:
++ break;
++ }
++ tiling_config |= BANK_TILING((ramcfg & NOOFBANK_MASK) >> NOOFBANK_SHIFT);
++ tiling_config |= GROUP_SIZE(0);
++ tmp = (ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT;
++ if (tmp > 3) {
++ tiling_config |= ROW_TILING(3);
++ tiling_config |= SAMPLE_SPLIT(3);
++ } else {
++ tiling_config |= ROW_TILING(tmp);
++ tiling_config |= SAMPLE_SPLIT(tmp);
++ }
++ tiling_config |= BANK_SWAPS(1);
++ tmp = r600_get_tile_pipe_to_backend_map(rdev->config.r600.max_tile_pipes,
++ rdev->config.r600.max_backends,
++ (0xff << rdev->config.r600.max_backends) & 0xff);
++ tiling_config |= BACKEND_MAP(tmp);
++ WREG32(GB_TILING_CONFIG, tiling_config);
++ WREG32(DCP_TILING_CONFIG, tiling_config & 0xffff);
++ WREG32(HDP_TILING_CONFIG, tiling_config & 0xffff);
++
++ tmp = BACKEND_DISABLE((R6XX_MAX_BACKENDS_MASK << rdev->config.r600.max_backends) & R6XX_MAX_BACKENDS_MASK);
++ WREG32(CC_RB_BACKEND_DISABLE, tmp);
++
++ /* Setup pipes */
++ tmp = INACTIVE_QD_PIPES((R6XX_MAX_PIPES_MASK << rdev->config.r600.max_pipes) & R6XX_MAX_PIPES_MASK);
++ tmp |= INACTIVE_SIMDS((R6XX_MAX_SIMDS_MASK << rdev->config.r600.max_simds) & R6XX_MAX_SIMDS_MASK);
++ WREG32(CC_GC_SHADER_PIPE_CONFIG, tmp);
++ WREG32(GC_USER_SHADER_PIPE_CONFIG, tmp);
++
++ tmp = R6XX_MAX_BACKENDS - r600_count_pipe_bits(tmp & INACTIVE_QD_PIPES_MASK);
++ WREG32(VGT_OUT_DEALLOC_CNTL, (tmp * 4) & DEALLOC_DIST_MASK);
++ WREG32(VGT_VERTEX_REUSE_BLOCK_CNTL, ((tmp * 4) - 2) & VTX_REUSE_DEPTH_MASK);
++
++ /* Setup some CP states */
++ WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) | ROQ_IB2_START(0x2b)));
++ WREG32(CP_MEQ_THRESHOLDS, (MEQ_END(0x40) | ROQ_END(0x40)));
++
++ WREG32(TA_CNTL_AUX, (DISABLE_CUBE_ANISO | SYNC_GRADIENT |
++ SYNC_WALKER | SYNC_ALIGNER));
++ /* Setup various GPU states */
++ if (rdev->family == CHIP_RV670)
++ WREG32(ARB_GDEC_RD_CNTL, 0x00000021);
++
++ tmp = RREG32(SX_DEBUG_1);
++ tmp |= SMX_EVENT_RELEASE;
++ if ((rdev->family > CHIP_R600))
++ tmp |= ENABLE_NEW_SMX_ADDRESS;
++ WREG32(SX_DEBUG_1, tmp);
++
++ if (((rdev->family) == CHIP_R600) ||
++ ((rdev->family) == CHIP_RV630) ||
++ ((rdev->family) == CHIP_RV610) ||
++ ((rdev->family) == CHIP_RV620) ||
++ ((rdev->family) == CHIP_RS780)) {
++ WREG32(DB_DEBUG, PREZ_MUST_WAIT_FOR_POSTZ_DONE);
++ } else {
++ WREG32(DB_DEBUG, 0);
++ }
++ WREG32(DB_WATERMARKS, (DEPTH_FREE(4) | DEPTH_CACHELINE_FREE(16) |
++ DEPTH_FLUSH(16) | DEPTH_PENDING_FREE(4)));
++
++ WREG32(PA_SC_MULTI_CHIP_CNTL, 0);
++ WREG32(VGT_NUM_INSTANCES, 0);
++
++ WREG32(SPI_CONFIG_CNTL, GPR_WRITE_PRIORITY(0));
++ WREG32(SPI_CONFIG_CNTL_1, VTX_DONE_DELAY(0));
++
++ tmp = RREG32(SQ_MS_FIFO_SIZES);
++ if (((rdev->family) == CHIP_RV610) ||
++ ((rdev->family) == CHIP_RV620) ||
++ ((rdev->family) == CHIP_RS780)) {
++ tmp = (CACHE_FIFO_SIZE(0xa) |
++ FETCH_FIFO_HIWATER(0xa) |
++ DONE_FIFO_HIWATER(0xe0) |
++ ALU_UPDATE_FIFO_HIWATER(0x8));
++ } else if (((rdev->family) == CHIP_R600) ||
++ ((rdev->family) == CHIP_RV630)) {
++ tmp &= ~DONE_FIFO_HIWATER(0xff);
++ tmp |= DONE_FIFO_HIWATER(0x4);
++ }
++ WREG32(SQ_MS_FIFO_SIZES, tmp);
++
++ /* SQ_CONFIG, SQ_GPR_RESOURCE_MGMT, SQ_THREAD_RESOURCE_MGMT, SQ_STACK_RESOURCE_MGMT
++ * should be adjusted as needed by the 2D/3D drivers. This just sets default values
++ */
++ sq_config = RREG32(SQ_CONFIG);
++ sq_config &= ~(PS_PRIO(3) |
++ VS_PRIO(3) |
++ GS_PRIO(3) |
++ ES_PRIO(3));
++ sq_config |= (DX9_CONSTS |
++ VC_ENABLE |
++ PS_PRIO(0) |
++ VS_PRIO(1) |
++ GS_PRIO(2) |
++ ES_PRIO(3));
++
++ if ((rdev->family) == CHIP_R600) {
++ sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(124) |
++ NUM_VS_GPRS(124) |
++ NUM_CLAUSE_TEMP_GPRS(4));
++ sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(0) |
++ NUM_ES_GPRS(0));
++ sq_thread_resource_mgmt = (NUM_PS_THREADS(136) |
++ NUM_VS_THREADS(48) |
++ NUM_GS_THREADS(4) |
++ NUM_ES_THREADS(4));
++ sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(128) |
++ NUM_VS_STACK_ENTRIES(128));
++ sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(0) |
++ NUM_ES_STACK_ENTRIES(0));
++ } else if (((rdev->family) == CHIP_RV610) ||
++ ((rdev->family) == CHIP_RV620) ||
++ ((rdev->family) == CHIP_RS780)) {
++ /* no vertex cache */
++ sq_config &= ~VC_ENABLE;
++
++ sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) |
++ NUM_VS_GPRS(44) |
++ NUM_CLAUSE_TEMP_GPRS(2));
++ sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(17) |
++ NUM_ES_GPRS(17));
++ sq_thread_resource_mgmt = (NUM_PS_THREADS(79) |
++ NUM_VS_THREADS(78) |
++ NUM_GS_THREADS(4) |
++ NUM_ES_THREADS(31));
++ sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(40) |
++ NUM_VS_STACK_ENTRIES(40));
++ sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(32) |
++ NUM_ES_STACK_ENTRIES(16));
++ } else if (((rdev->family) == CHIP_RV630) ||
++ ((rdev->family) == CHIP_RV635)) {
++ sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) |
++ NUM_VS_GPRS(44) |
++ NUM_CLAUSE_TEMP_GPRS(2));
++ sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(18) |
++ NUM_ES_GPRS(18));
++ sq_thread_resource_mgmt = (NUM_PS_THREADS(79) |
++ NUM_VS_THREADS(78) |
++ NUM_GS_THREADS(4) |
++ NUM_ES_THREADS(31));
++ sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(40) |
++ NUM_VS_STACK_ENTRIES(40));
++ sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(32) |
++ NUM_ES_STACK_ENTRIES(16));
++ } else if ((rdev->family) == CHIP_RV670) {
++ sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(44) |
++ NUM_VS_GPRS(44) |
++ NUM_CLAUSE_TEMP_GPRS(2));
++ sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(17) |
++ NUM_ES_GPRS(17));
++ sq_thread_resource_mgmt = (NUM_PS_THREADS(79) |
++ NUM_VS_THREADS(78) |
++ NUM_GS_THREADS(4) |
++ NUM_ES_THREADS(31));
++ sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(64) |
++ NUM_VS_STACK_ENTRIES(64));
++ sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(64) |
++ NUM_ES_STACK_ENTRIES(64));
++ }
++
++ WREG32(SQ_CONFIG, sq_config);
++ WREG32(SQ_GPR_RESOURCE_MGMT_1, sq_gpr_resource_mgmt_1);
++ WREG32(SQ_GPR_RESOURCE_MGMT_2, sq_gpr_resource_mgmt_2);
++ WREG32(SQ_THREAD_RESOURCE_MGMT, sq_thread_resource_mgmt);
++ WREG32(SQ_STACK_RESOURCE_MGMT_1, sq_stack_resource_mgmt_1);
++ WREG32(SQ_STACK_RESOURCE_MGMT_2, sq_stack_resource_mgmt_2);
++
++ if (((rdev->family) == CHIP_RV610) ||
++ ((rdev->family) == CHIP_RV620) ||
++ ((rdev->family) == CHIP_RS780)) {
++ WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(TC_ONLY));
++ } else {
++ WREG32(VGT_CACHE_INVALIDATION, CACHE_INVALIDATION(VC_AND_TC));
++ }
++
++ /* More default values. 2D/3D driver should adjust as needed */
++ WREG32(PA_SC_AA_SAMPLE_LOCS_2S, (S0_X(0xc) | S0_Y(0x4) |
++ S1_X(0x4) | S1_Y(0xc)));
++ WREG32(PA_SC_AA_SAMPLE_LOCS_4S, (S0_X(0xe) | S0_Y(0xe) |
++ S1_X(0x2) | S1_Y(0x2) |
++ S2_X(0xa) | S2_Y(0x6) |
++ S3_X(0x6) | S3_Y(0xa)));
++ WREG32(PA_SC_AA_SAMPLE_LOCS_8S_WD0, (S0_X(0xe) | S0_Y(0xb) |
++ S1_X(0x4) | S1_Y(0xc) |
++ S2_X(0x1) | S2_Y(0x6) |
++ S3_X(0xa) | S3_Y(0xe)));
++ WREG32(PA_SC_AA_SAMPLE_LOCS_8S_WD1, (S4_X(0x6) | S4_Y(0x1) |
++ S5_X(0x0) | S5_Y(0x0) |
++ S6_X(0xb) | S6_Y(0x4) |
++ S7_X(0x7) | S7_Y(0x8)));
++
++ WREG32(VGT_STRMOUT_EN, 0);
++ tmp = rdev->config.r600.max_pipes * 16;
++ switch (rdev->family) {
++ case CHIP_RV610:
++ case CHIP_RS780:
++ case CHIP_RV620:
++ tmp += 32;
++ break;
++ case CHIP_RV670:
++ tmp += 128;
++ break;
++ default:
++ break;
++ }
++ if (tmp > 256) {
++ tmp = 256;
++ }
++ WREG32(VGT_ES_PER_GS, 128);
++ WREG32(VGT_GS_PER_ES, tmp);
++ WREG32(VGT_GS_PER_VS, 2);
++ WREG32(VGT_GS_VERTEX_REUSE, 16);
++
++ /* more default values. 2D/3D driver should adjust as needed */
++ WREG32(PA_SC_LINE_STIPPLE_STATE, 0);
++ WREG32(VGT_STRMOUT_EN, 0);
++ WREG32(SX_MISC, 0);
++ WREG32(PA_SC_MODE_CNTL, 0);
++ WREG32(PA_SC_AA_CONFIG, 0);
++ WREG32(PA_SC_LINE_STIPPLE, 0);
++ WREG32(SPI_INPUT_Z, 0);
++ WREG32(SPI_PS_IN_CONTROL_0, NUM_INTERP(2));
++ WREG32(CB_COLOR7_FRAG, 0);
++
++ /* Clear render buffer base addresses */
++ WREG32(CB_COLOR0_BASE, 0);
++ WREG32(CB_COLOR1_BASE, 0);
++ WREG32(CB_COLOR2_BASE, 0);
++ WREG32(CB_COLOR3_BASE, 0);
++ WREG32(CB_COLOR4_BASE, 0);
++ WREG32(CB_COLOR5_BASE, 0);
++ WREG32(CB_COLOR6_BASE, 0);
++ WREG32(CB_COLOR7_BASE, 0);
++ WREG32(CB_COLOR7_FRAG, 0);
++
++ switch (rdev->family) {
++ case CHIP_RV610:
++ case CHIP_RS780:
++ case CHIP_RV620:
++ tmp = TC_L2_SIZE(8);
++ break;
++ case CHIP_RV630:
++ case CHIP_RV635:
++ tmp = TC_L2_SIZE(4);
++ break;
++ case CHIP_R600:
++ tmp = TC_L2_SIZE(0) | L2_DISABLE_LATE_HIT;
++ break;
++ default:
++ tmp = TC_L2_SIZE(0);
++ break;
++ }
++ WREG32(TC_CNTL, tmp);
++
++ tmp = RREG32(HDP_HOST_PATH_CNTL);
++ WREG32(HDP_HOST_PATH_CNTL, tmp);
++
++ tmp = RREG32(ARB_POP);
++ tmp |= ENABLE_TC128;
++ WREG32(ARB_POP, tmp);
++
++ WREG32(PA_SC_MULTI_CHIP_CNTL, 0);
++ WREG32(PA_CL_ENHANCE, (CLIP_VTX_REORDER_ENA |
++ NUM_CLIP_SEQ(3)));
++ WREG32(PA_SC_ENHANCE, FORCE_EOV_MAX_CLK_CNT(4095));
++}
++
++
+ /*
+ * Indirect registers accessor
+ */
+-uint32_t r600_pciep_rreg(struct radeon_device *rdev, uint32_t reg)
++u32 r600_pciep_rreg(struct radeon_device *rdev, u32 reg)
++{
++ u32 r;
++
++ WREG32(PCIE_PORT_INDEX, ((reg) & 0xff));
++ (void)RREG32(PCIE_PORT_INDEX);
++ r = RREG32(PCIE_PORT_DATA);
++ return r;
++}
++
++void r600_pciep_wreg(struct radeon_device *rdev, u32 reg, u32 v)
++{
++ WREG32(PCIE_PORT_INDEX, ((reg) & 0xff));
++ (void)RREG32(PCIE_PORT_INDEX);
++ WREG32(PCIE_PORT_DATA, (v));
++ (void)RREG32(PCIE_PORT_DATA);
++}
++
++
++/*
++ * CP & Ring
++ */
++void r600_cp_stop(struct radeon_device *rdev)
++{
++ WREG32(R_0086D8_CP_ME_CNTL, S_0086D8_CP_ME_HALT(1));
++}
++
++int r600_cp_init_microcode(struct radeon_device *rdev)
++{
++ struct platform_device *pdev;
++ const char *chip_name;
++ size_t pfp_req_size, me_req_size;
++ char fw_name[30];
++ int err;
++
++ DRM_DEBUG("\n");
++
++ pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
++ err = IS_ERR(pdev);
++ if (err) {
++ printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
++ return -EINVAL;
++ }
++
++ switch (rdev->family) {
++ case CHIP_R600: chip_name = "R600"; break;
++ case CHIP_RV610: chip_name = "RV610"; break;
++ case CHIP_RV630: chip_name = "RV630"; break;
++ case CHIP_RV620: chip_name = "RV620"; break;
++ case CHIP_RV635: chip_name = "RV635"; break;
++ case CHIP_RV670: chip_name = "RV670"; break;
++ case CHIP_RS780:
++ case CHIP_RS880: chip_name = "RS780"; break;
++ case CHIP_RV770: chip_name = "RV770"; break;
++ case CHIP_RV730:
++ case CHIP_RV740: chip_name = "RV730"; break;
++ case CHIP_RV710: chip_name = "RV710"; break;
++ default: BUG();
++ }
++
++ if (rdev->family >= CHIP_RV770) {
++ pfp_req_size = R700_PFP_UCODE_SIZE * 4;
++ me_req_size = R700_PM4_UCODE_SIZE * 4;
++ } else {
++ pfp_req_size = PFP_UCODE_SIZE * 4;
++ me_req_size = PM4_UCODE_SIZE * 12;
++ }
++
++ DRM_INFO("Loading %s CP Microcode\n", chip_name);
++
++ snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
++ err = request_firmware(&rdev->pfp_fw, fw_name, &pdev->dev);
++ if (err)
++ goto out;
++ if (rdev->pfp_fw->size != pfp_req_size) {
++ printk(KERN_ERR
++ "r600_cp: Bogus length %zu in firmware \"%s\"\n",
++ rdev->pfp_fw->size, fw_name);
++ err = -EINVAL;
++ goto out;
++ }
++
++ snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
++ err = request_firmware(&rdev->me_fw, fw_name, &pdev->dev);
++ if (err)
++ goto out;
++ if (rdev->me_fw->size != me_req_size) {
++ printk(KERN_ERR
++ "r600_cp: Bogus length %zu in firmware \"%s\"\n",
++ rdev->me_fw->size, fw_name);
++ err = -EINVAL;
++ }
++out:
++ platform_device_unregister(pdev);
++
++ if (err) {
++ if (err != -EINVAL)
++ printk(KERN_ERR
++ "r600_cp: Failed to load firmware \"%s\"\n",
++ fw_name);
++ release_firmware(rdev->pfp_fw);
++ rdev->pfp_fw = NULL;
++ release_firmware(rdev->me_fw);
++ rdev->me_fw = NULL;
++ }
++ return err;
++}
++
++static int r600_cp_load_microcode(struct radeon_device *rdev)
++{
++ const __be32 *fw_data;
++ int i;
++
++ if (!rdev->me_fw || !rdev->pfp_fw)
++ return -EINVAL;
++
++ r600_cp_stop(rdev);
++
++ WREG32(CP_RB_CNTL, RB_NO_UPDATE | RB_BLKSZ(15) | RB_BUFSZ(3));
++
++ /* Reset cp */
++ WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP);
++ RREG32(GRBM_SOFT_RESET);
++ mdelay(15);
++ WREG32(GRBM_SOFT_RESET, 0);
++
++ WREG32(CP_ME_RAM_WADDR, 0);
++
++ fw_data = (const __be32 *)rdev->me_fw->data;
++ WREG32(CP_ME_RAM_WADDR, 0);
++ for (i = 0; i < PM4_UCODE_SIZE * 3; i++)
++ WREG32(CP_ME_RAM_DATA,
++ be32_to_cpup(fw_data++));
++
++ fw_data = (const __be32 *)rdev->pfp_fw->data;
++ WREG32(CP_PFP_UCODE_ADDR, 0);
++ for (i = 0; i < PFP_UCODE_SIZE; i++)
++ WREG32(CP_PFP_UCODE_DATA,
++ be32_to_cpup(fw_data++));
++
++ WREG32(CP_PFP_UCODE_ADDR, 0);
++ WREG32(CP_ME_RAM_WADDR, 0);
++ WREG32(CP_ME_RAM_RADDR, 0);
++ return 0;
++}
++
++int r600_cp_start(struct radeon_device *rdev)
++{
++ int r;
++ uint32_t cp_me;
++
++ r = radeon_ring_lock(rdev, 7);
++ if (r) {
++ DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
++ return r;
++ }
++ radeon_ring_write(rdev, PACKET3(PACKET3_ME_INITIALIZE, 5));
++ radeon_ring_write(rdev, 0x1);
++ if (rdev->family < CHIP_RV770) {
++ radeon_ring_write(rdev, 0x3);
++ radeon_ring_write(rdev, rdev->config.r600.max_hw_contexts - 1);
++ } else {
++ radeon_ring_write(rdev, 0x0);
++ radeon_ring_write(rdev, rdev->config.rv770.max_hw_contexts - 1);
++ }
++ radeon_ring_write(rdev, PACKET3_ME_INITIALIZE_DEVICE_ID(1));
++ radeon_ring_write(rdev, 0);
++ radeon_ring_write(rdev, 0);
++ radeon_ring_unlock_commit(rdev);
++
++ cp_me = 0xff;
++ WREG32(R_0086D8_CP_ME_CNTL, cp_me);
++ return 0;
++}
++
++int r600_cp_resume(struct radeon_device *rdev)
++{
++ u32 tmp;
++ u32 rb_bufsz;
++ int r;
++
++ /* Reset cp */
++ WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP);
++ RREG32(GRBM_SOFT_RESET);
++ mdelay(15);
++ WREG32(GRBM_SOFT_RESET, 0);
++
++ /* Set ring buffer size */
++ rb_bufsz = drm_order(rdev->cp.ring_size / 8);
++#ifdef __BIG_ENDIAN
++ WREG32(CP_RB_CNTL, BUF_SWAP_32BIT | RB_NO_UPDATE |
++ (drm_order(4096/8) << 8) | rb_bufsz);
++#else
++ WREG32(CP_RB_CNTL, RB_NO_UPDATE | (drm_order(4096/8) << 8) | rb_bufsz);
++#endif
++ WREG32(CP_SEM_WAIT_TIMER, 0x4);
++
++ /* Set the write pointer delay */
++ WREG32(CP_RB_WPTR_DELAY, 0);
++
++ /* Initialize the ring buffer's read and write pointers */
++ tmp = RREG32(CP_RB_CNTL);
++ WREG32(CP_RB_CNTL, tmp | RB_RPTR_WR_ENA);
++ WREG32(CP_RB_RPTR_WR, 0);
++ WREG32(CP_RB_WPTR, 0);
++ WREG32(CP_RB_RPTR_ADDR, rdev->cp.gpu_addr & 0xFFFFFFFF);
++ WREG32(CP_RB_RPTR_ADDR_HI, upper_32_bits(rdev->cp.gpu_addr));
++ mdelay(1);
++ WREG32(CP_RB_CNTL, tmp);
++
++ WREG32(CP_RB_BASE, rdev->cp.gpu_addr >> 8);
++ WREG32(CP_DEBUG, (1 << 27) | (1 << 28));
++
++ rdev->cp.rptr = RREG32(CP_RB_RPTR);
++ rdev->cp.wptr = RREG32(CP_RB_WPTR);
++
++ r600_cp_start(rdev);
++ rdev->cp.ready = true;
++ r = radeon_ring_test(rdev);
++ if (r) {
++ rdev->cp.ready = false;
++ return r;
++ }
++ return 0;
++}
++
++void r600_cp_commit(struct radeon_device *rdev)
++{
++ WREG32(CP_RB_WPTR, rdev->cp.wptr);
++ (void)RREG32(CP_RB_WPTR);
++}
++
++void r600_ring_init(struct radeon_device *rdev, unsigned ring_size)
++{
++ u32 rb_bufsz;
++
++ /* Align ring size */
++ rb_bufsz = drm_order(ring_size / 8);
++ ring_size = (1 << (rb_bufsz + 1)) * 4;
++ rdev->cp.ring_size = ring_size;
++ rdev->cp.align_mask = 16 - 1;
++}
++
++
++/*
++ * GPU scratch registers helpers function.
++ */
++void r600_scratch_init(struct radeon_device *rdev)
+ {
+- uint32_t r;
++ int i;
+
+- WREG32(R600_PCIE_PORT_INDEX, ((reg) & 0xff));
+- (void)RREG32(R600_PCIE_PORT_INDEX);
+- r = RREG32(R600_PCIE_PORT_DATA);
++ rdev->scratch.num_reg = 7;
++ for (i = 0; i < rdev->scratch.num_reg; i++) {
++ rdev->scratch.free[i] = true;
++ rdev->scratch.reg[i] = SCRATCH_REG0 + (i * 4);
++ }
++}
++
++int r600_ring_test(struct radeon_device *rdev)
++{
++ uint32_t scratch;
++ uint32_t tmp = 0;
++ unsigned i;
++ int r;
++
++ r = radeon_scratch_get(rdev, &scratch);
++ if (r) {
++ DRM_ERROR("radeon: cp failed to get scratch reg (%d).\n", r);
++ return r;
++ }
++ WREG32(scratch, 0xCAFEDEAD);
++ r = radeon_ring_lock(rdev, 3);
++ if (r) {
++ DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
++ radeon_scratch_free(rdev, scratch);
++ return r;
++ }
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
++ radeon_ring_write(rdev, ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2));
++ radeon_ring_write(rdev, 0xDEADBEEF);
++ radeon_ring_unlock_commit(rdev);
++ for (i = 0; i < rdev->usec_timeout; i++) {
++ tmp = RREG32(scratch);
++ if (tmp == 0xDEADBEEF)
++ break;
++ DRM_UDELAY(1);
++ }
++ if (i < rdev->usec_timeout) {
++ DRM_INFO("ring test succeeded in %d usecs\n", i);
++ } else {
++ DRM_ERROR("radeon: ring test failed (scratch(0x%04X)=0x%08X)\n",
++ scratch, tmp);
++ r = -EINVAL;
++ }
++ radeon_scratch_free(rdev, scratch);
+ return r;
+ }
+
+-void r600_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
++/*
++ * Writeback
++ */
++int r600_wb_init(struct radeon_device *rdev)
+ {
+- WREG32(R600_PCIE_PORT_INDEX, ((reg) & 0xff));
+- (void)RREG32(R600_PCIE_PORT_INDEX);
+- WREG32(R600_PCIE_PORT_DATA, (v));
+- (void)RREG32(R600_PCIE_PORT_DATA);
++ int r;
++
++ if (rdev->wb.wb_obj == NULL) {
++ r = radeon_object_create(rdev, NULL, 4096,
++ true,
++ RADEON_GEM_DOMAIN_GTT,
++ false, &rdev->wb.wb_obj);
++ if (r) {
++ DRM_ERROR("radeon: failed to create WB buffer (%d).\n", r);
++ return r;
++ }
++ r = radeon_object_pin(rdev->wb.wb_obj,
++ RADEON_GEM_DOMAIN_GTT,
++ &rdev->wb.gpu_addr);
++ if (r) {
++ DRM_ERROR("radeon: failed to pin WB buffer (%d).\n", r);
++ return r;
++ }
++ r = radeon_object_kmap(rdev->wb.wb_obj, (void **)&rdev->wb.wb);
++ if (r) {
++ DRM_ERROR("radeon: failed to map WB buffer (%d).\n", r);
++ return r;
++ }
++ }
++ WREG32(SCRATCH_ADDR, (rdev->wb.gpu_addr >> 8) & 0xFFFFFFFF);
++ WREG32(CP_RB_RPTR_ADDR, (rdev->wb.gpu_addr + 1024) & 0xFFFFFFFC);
++ WREG32(CP_RB_RPTR_ADDR_HI, upper_32_bits(rdev->wb.gpu_addr + 1024) & 0xFF);
++ WREG32(SCRATCH_UMSK, 0xff);
++ return 0;
++}
++
++void r600_wb_fini(struct radeon_device *rdev)
++{
++ if (rdev->wb.wb_obj) {
++ radeon_object_kunmap(rdev->wb.wb_obj);
++ radeon_object_unpin(rdev->wb.wb_obj);
++ radeon_object_unref(&rdev->wb.wb_obj);
++ rdev->wb.wb = NULL;
++ rdev->wb.wb_obj = NULL;
++ }
++}
++
++
++/*
++ * CS
++ */
++void r600_fence_ring_emit(struct radeon_device *rdev,
++ struct radeon_fence *fence)
++{
++ /* Emit fence sequence & fire IRQ */
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
++ radeon_ring_write(rdev, ((rdev->fence_drv.scratch_reg - PACKET3_SET_CONFIG_REG_OFFSET) >> 2));
++ radeon_ring_write(rdev, fence->seq);
++}
++
++int r600_copy_dma(struct radeon_device *rdev,
++ uint64_t src_offset,
++ uint64_t dst_offset,
++ unsigned num_pages,
++ struct radeon_fence *fence)
++{
++ /* FIXME: implement */
++ return 0;
++}
++
++int r600_copy_blit(struct radeon_device *rdev,
++ uint64_t src_offset, uint64_t dst_offset,
++ unsigned num_pages, struct radeon_fence *fence)
++{
++ r600_blit_prepare_copy(rdev, num_pages * 4096);
++ r600_kms_blit_copy(rdev, src_offset, dst_offset, num_pages * 4096);
++ r600_blit_done_copy(rdev, fence);
++ return 0;
++}
++
++int r600_irq_process(struct radeon_device *rdev)
++{
++ /* FIXME: implement */
++ return 0;
++}
++
++int r600_irq_set(struct radeon_device *rdev)
++{
++ /* FIXME: implement */
++ return 0;
++}
++
++int r600_set_surface_reg(struct radeon_device *rdev, int reg,
++ uint32_t tiling_flags, uint32_t pitch,
++ uint32_t offset, uint32_t obj_size)
++{
++ /* FIXME: implement */
++ return 0;
++}
++
++void r600_clear_surface_reg(struct radeon_device *rdev, int reg)
++{
++ /* FIXME: implement */
++}
++
++
++bool r600_card_posted(struct radeon_device *rdev)
++{
++ uint32_t reg;
++
++ /* first check CRTCs */
++ reg = RREG32(D1CRTC_CONTROL) |
++ RREG32(D2CRTC_CONTROL);
++ if (reg & CRTC_EN)
++ return true;
++
++ /* then check MEM_SIZE, in case the crtcs are off */
++ if (RREG32(CONFIG_MEMSIZE))
++ return true;
++
++ return false;
++}
++
++int r600_startup(struct radeon_device *rdev)
++{
++ int r;
++
++ r600_gpu_reset(rdev);
++ r600_mc_resume(rdev);
++ r = r600_pcie_gart_enable(rdev);
++ if (r)
++ return r;
++ r600_gpu_init(rdev);
++
++ r = radeon_object_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM,
++ &rdev->r600_blit.shader_gpu_addr);
++ if (r) {
++ DRM_ERROR("failed to pin blit object %d\n", r);
++ return r;
++ }
++
++ r = radeon_ring_init(rdev, rdev->cp.ring_size);
++ if (r)
++ return r;
++ r = r600_cp_load_microcode(rdev);
++ if (r)
++ return r;
++ r = r600_cp_resume(rdev);
++ if (r)
++ return r;
++ r = r600_wb_init(rdev);
++ if (r)
++ return r;
++ return 0;
++}
++
++int r600_resume(struct radeon_device *rdev)
++{
++ int r;
++
++ if (radeon_gpu_reset(rdev)) {
++ /* FIXME: what do we want to do here ? */
++ }
++ /* post card */
++ if (rdev->is_atom_bios) {
++ atom_asic_init(rdev->mode_info.atom_context);
++ } else {
++ radeon_combios_asic_init(rdev->ddev);
++ }
++ /* Initialize clocks */
++ r = radeon_clocks_init(rdev);
++ if (r) {
++ return r;
++ }
++
++ r = r600_startup(rdev);
++ if (r) {
++ DRM_ERROR("r600 startup failed on resume\n");
++ return r;
++ }
++
++ r = radeon_ib_test(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled testing IB (%d).\n", r);
++ return r;
++ }
++ return r;
++}
++
++
++int r600_suspend(struct radeon_device *rdev)
++{
++ /* FIXME: we should wait for ring to be empty */
++ r600_cp_stop(rdev);
++ rdev->cp.ready = false;
++
++ r600_pcie_gart_disable(rdev);
++ /* unpin shaders bo */
++ radeon_object_unpin(rdev->r600_blit.shader_obj);
++ return 0;
++}
++
++/* Plan is to move initialization in that function and use
++ * helper function so that radeon_device_init pretty much
++ * do nothing more than calling asic specific function. This
++ * should also allow to remove a bunch of callback function
++ * like vram_info.
++ */
++int r600_init(struct radeon_device *rdev)
++{
++ int r;
++
++ rdev->new_init_path = true;
++ r = radeon_dummy_page_init(rdev);
++ if (r)
++ return r;
++ if (r600_debugfs_mc_info_init(rdev)) {
++ DRM_ERROR("Failed to register debugfs file for mc !\n");
++ }
++ /* This don't do much */
++ r = radeon_gem_init(rdev);
++ if (r)
++ return r;
++ /* Read BIOS */
++ if (!radeon_get_bios(rdev)) {
++ if (ASIC_IS_AVIVO(rdev))
++ return -EINVAL;
++ }
++ /* Must be an ATOMBIOS */
++ if (!rdev->is_atom_bios)
++ return -EINVAL;
++ r = radeon_atombios_init(rdev);
++ if (r)
++ return r;
++ /* Post card if necessary */
++ if (!r600_card_posted(rdev) && rdev->bios) {
++ DRM_INFO("GPU not posted. posting now...\n");
++ atom_asic_init(rdev->mode_info.atom_context);
++ }
++ /* Initialize scratch registers */
++ r600_scratch_init(rdev);
++ /* Initialize surface registers */
++ radeon_surface_init(rdev);
++ radeon_get_clock_info(rdev->ddev);
++ r = radeon_clocks_init(rdev);
++ if (r)
++ return r;
++ /* Fence driver */
++ r = radeon_fence_driver_init(rdev);
++ if (r)
++ return r;
++ r = r600_mc_init(rdev);
++ if (r) {
++ if (rdev->flags & RADEON_IS_AGP) {
++ /* Retry with disabling AGP */
++ r600_fini(rdev);
++ rdev->flags &= ~RADEON_IS_AGP;
++ return r600_init(rdev);
++ }
++ return r;
++ }
++ /* Memory manager */
++ r = radeon_object_init(rdev);
++ if (r)
++ return r;
++ rdev->cp.ring_obj = NULL;
++ r600_ring_init(rdev, 1024 * 1024);
++
++ if (!rdev->me_fw || !rdev->pfp_fw) {
++ r = r600_cp_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++
++ r = r600_pcie_gart_init(rdev);
++ if (r)
++ return r;
++
++ rdev->accel_working = true;
++ r = r600_blit_init(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled blitter (%d).\n", r);
++ return r;
++ }
++
++ r = r600_startup(rdev);
++ if (r) {
++ if (rdev->flags & RADEON_IS_AGP) {
++ /* Retry with disabling AGP */
++ r600_fini(rdev);
++ rdev->flags &= ~RADEON_IS_AGP;
++ return r600_init(rdev);
++ }
++ rdev->accel_working = false;
++ }
++ if (rdev->accel_working) {
++ r = radeon_ib_pool_init(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r);
++ rdev->accel_working = false;
++ }
++ r = radeon_ib_test(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled testing IB (%d).\n", r);
++ rdev->accel_working = false;
++ }
++ }
++ return 0;
++}
++
++void r600_fini(struct radeon_device *rdev)
++{
++ /* Suspend operations */
++ r600_suspend(rdev);
++
++ r600_blit_fini(rdev);
++ radeon_ring_fini(rdev);
++ r600_pcie_gart_fini(rdev);
++ radeon_gem_fini(rdev);
++ radeon_fence_driver_fini(rdev);
++ radeon_clocks_fini(rdev);
++#if __OS_HAS_AGP
++ if (rdev->flags & RADEON_IS_AGP)
++ radeon_agp_fini(rdev);
++#endif
++ radeon_object_fini(rdev);
++ if (rdev->is_atom_bios)
++ radeon_atombios_fini(rdev);
++ else
++ radeon_combios_fini(rdev);
++ kfree(rdev->bios);
++ rdev->bios = NULL;
++ radeon_dummy_page_fini(rdev);
++}
++
++
++/*
++ * CS stuff
++ */
++void r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib)
++{
++ /* FIXME: implement */
++ radeon_ring_write(rdev, PACKET3(PACKET3_INDIRECT_BUFFER, 2));
++ radeon_ring_write(rdev, ib->gpu_addr & 0xFFFFFFFC);
++ radeon_ring_write(rdev, upper_32_bits(ib->gpu_addr) & 0xFF);
++ radeon_ring_write(rdev, ib->length_dw);
++}
++
++int r600_ib_test(struct radeon_device *rdev)
++{
++ struct radeon_ib *ib;
++ uint32_t scratch;
++ uint32_t tmp = 0;
++ unsigned i;
++ int r;
++
++ r = radeon_scratch_get(rdev, &scratch);
++ if (r) {
++ DRM_ERROR("radeon: failed to get scratch reg (%d).\n", r);
++ return r;
++ }
++ WREG32(scratch, 0xCAFEDEAD);
++ r = radeon_ib_get(rdev, &ib);
++ if (r) {
++ DRM_ERROR("radeon: failed to get ib (%d).\n", r);
++ return r;
++ }
++ ib->ptr[0] = PACKET3(PACKET3_SET_CONFIG_REG, 1);
++ ib->ptr[1] = ((scratch - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
++ ib->ptr[2] = 0xDEADBEEF;
++ ib->ptr[3] = PACKET2(0);
++ ib->ptr[4] = PACKET2(0);
++ ib->ptr[5] = PACKET2(0);
++ ib->ptr[6] = PACKET2(0);
++ ib->ptr[7] = PACKET2(0);
++ ib->ptr[8] = PACKET2(0);
++ ib->ptr[9] = PACKET2(0);
++ ib->ptr[10] = PACKET2(0);
++ ib->ptr[11] = PACKET2(0);
++ ib->ptr[12] = PACKET2(0);
++ ib->ptr[13] = PACKET2(0);
++ ib->ptr[14] = PACKET2(0);
++ ib->ptr[15] = PACKET2(0);
++ ib->length_dw = 16;
++ r = radeon_ib_schedule(rdev, ib);
++ if (r) {
++ radeon_scratch_free(rdev, scratch);
++ radeon_ib_free(rdev, &ib);
++ DRM_ERROR("radeon: failed to schedule ib (%d).\n", r);
++ return r;
++ }
++ r = radeon_fence_wait(ib->fence, false);
++ if (r) {
++ DRM_ERROR("radeon: fence wait failed (%d).\n", r);
++ return r;
++ }
++ for (i = 0; i < rdev->usec_timeout; i++) {
++ tmp = RREG32(scratch);
++ if (tmp == 0xDEADBEEF)
++ break;
++ DRM_UDELAY(1);
++ }
++ if (i < rdev->usec_timeout) {
++ DRM_INFO("ib test succeeded in %u usecs\n", i);
++ } else {
++ DRM_ERROR("radeon: ib test failed (sracth(0x%04X)=0x%08X)\n",
++ scratch, tmp);
++ r = -EINVAL;
++ }
++ radeon_scratch_free(rdev, scratch);
++ radeon_ib_free(rdev, &ib);
++ return r;
++}
++
++
++
++
++/*
++ * Debugfs info
++ */
++#if defined(CONFIG_DEBUG_FS)
++
++static int r600_debugfs_cp_ring_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ uint32_t rdp, wdp;
++ unsigned count, i, j;
++
++ radeon_ring_free_size(rdev);
++ rdp = RREG32(CP_RB_RPTR);
++ wdp = RREG32(CP_RB_WPTR);
++ count = (rdp + rdev->cp.ring_size - wdp) & rdev->cp.ptr_mask;
++ seq_printf(m, "CP_STAT 0x%08x\n", RREG32(CP_STAT));
++ seq_printf(m, "CP_RB_WPTR 0x%08x\n", wdp);
++ seq_printf(m, "CP_RB_RPTR 0x%08x\n", rdp);
++ seq_printf(m, "%u free dwords in ring\n", rdev->cp.ring_free_dw);
++ seq_printf(m, "%u dwords in ring\n", count);
++ for (j = 0; j <= count; j++) {
++ i = (rdp + j) & rdev->cp.ptr_mask;
++ seq_printf(m, "r[%04d]=0x%08x\n", i, rdev->cp.ring[i]);
++ }
++ return 0;
++}
++
++static int r600_debugfs_mc_info(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *) m->private;
++ struct drm_device *dev = node->minor->dev;
++ struct radeon_device *rdev = dev->dev_private;
++
++ DREG32_SYS(m, rdev, R_000E50_SRBM_STATUS);
++ DREG32_SYS(m, rdev, VM_L2_STATUS);
++ return 0;
++}
++
++static struct drm_info_list r600_mc_info_list[] = {
++ {"r600_mc_info", r600_debugfs_mc_info, 0, NULL},
++ {"r600_ring_info", r600_debugfs_cp_ring_info, 0, NULL},
++};
++#endif
++
++int r600_debugfs_mc_info_init(struct radeon_device *rdev)
++{
++#if defined(CONFIG_DEBUG_FS)
++ return radeon_debugfs_add_files(rdev, r600_mc_info_list, ARRAY_SIZE(r600_mc_info_list));
++#else
++ return 0;
++#endif
+ }
+diff --git a/drivers/gpu/drm/radeon/r600_blit.c b/drivers/gpu/drm/radeon/r600_blit.c
+new file mode 100644
+index 0000000..d988eec
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r600_blit.c
+@@ -0,0 +1,850 @@
++/*
++ * Copyright 2009 Advanced Micro Devices, Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++ *
++ * Authors:
++ * Alex Deucher <alexander.deucher@amd.com>
++ */
++#include "drmP.h"
++#include "drm.h"
++#include "radeon_drm.h"
++#include "radeon_drv.h"
++
++#include "r600_blit_shaders.h"
++
++#define DI_PT_RECTLIST 0x11
++#define DI_INDEX_SIZE_16_BIT 0x0
++#define DI_SRC_SEL_AUTO_INDEX 0x2
++
++#define FMT_8 0x1
++#define FMT_5_6_5 0x8
++#define FMT_8_8_8_8 0x1a
++#define COLOR_8 0x1
++#define COLOR_5_6_5 0x8
++#define COLOR_8_8_8_8 0x1a
++
++static inline void
++set_render_target(drm_radeon_private_t *dev_priv, int format, int w, int h, u64 gpu_addr)
++{
++ u32 cb_color_info;
++ int pitch, slice;
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ h = (h + 7) & ~7;
++ if (h < 8)
++ h = 8;
++
++ cb_color_info = ((format << 2) | (1 << 27));
++ pitch = (w / 8) - 1;
++ slice = ((w * h) / 64) - 1;
++
++ if (((dev_priv->flags & RADEON_FAMILY_MASK) > CHIP_R600) &&
++ ((dev_priv->flags & RADEON_FAMILY_MASK) < CHIP_RV770)) {
++ BEGIN_RING(21 + 2);
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_BASE - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(gpu_addr >> 8);
++ OUT_RING(CP_PACKET3(R600_IT_SURFACE_BASE_UPDATE, 0));
++ OUT_RING(2 << 0);
++ } else {
++ BEGIN_RING(21);
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_BASE - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(gpu_addr >> 8);
++ }
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_SIZE - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING((pitch << 0) | (slice << 10));
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_VIEW - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(0);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_INFO - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(cb_color_info);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_TILE - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(0);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_FRAG - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(0);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_CB_COLOR0_MASK - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(0);
++
++ ADVANCE_RING();
++}
++
++static inline void
++cp_set_surface_sync(drm_radeon_private_t *dev_priv,
++ u32 sync_type, u32 size, u64 mc_addr)
++{
++ u32 cp_coher_size;
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ if (size == 0xffffffff)
++ cp_coher_size = 0xffffffff;
++ else
++ cp_coher_size = ((size + 255) >> 8);
++
++ BEGIN_RING(5);
++ OUT_RING(CP_PACKET3(R600_IT_SURFACE_SYNC, 3));
++ OUT_RING(sync_type);
++ OUT_RING(cp_coher_size);
++ OUT_RING((mc_addr >> 8));
++ OUT_RING(10); /* poll interval */
++ ADVANCE_RING();
++}
++
++static inline void
++set_shaders(struct drm_device *dev)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ u64 gpu_addr;
++ int i;
++ u32 *vs, *ps;
++ uint32_t sq_pgm_resources;
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ /* load shaders */
++ vs = (u32 *) ((char *)dev->agp_buffer_map->handle + dev_priv->blit_vb->offset);
++ ps = (u32 *) ((char *)dev->agp_buffer_map->handle + dev_priv->blit_vb->offset + 256);
++
++ for (i = 0; i < r6xx_vs_size; i++)
++ vs[i] = r6xx_vs[i];
++ for (i = 0; i < r6xx_ps_size; i++)
++ ps[i] = r6xx_ps[i];
++
++ dev_priv->blit_vb->used = 512;
++
++ gpu_addr = dev_priv->gart_buffers_offset + dev_priv->blit_vb->offset;
++
++ /* setup shader regs */
++ sq_pgm_resources = (1 << 0);
++
++ BEGIN_RING(9 + 12);
++ /* VS */
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_SQ_PGM_START_VS - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(gpu_addr >> 8);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_SQ_PGM_RESOURCES_VS - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(sq_pgm_resources);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_SQ_PGM_CF_OFFSET_VS - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(0);
++
++ /* PS */
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_SQ_PGM_START_PS - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING((gpu_addr + 256) >> 8);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_SQ_PGM_RESOURCES_PS - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(sq_pgm_resources | (1 << 28));
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_SQ_PGM_EXPORTS_PS - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(2);
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 1));
++ OUT_RING((R600_SQ_PGM_CF_OFFSET_PS - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING(0);
++ ADVANCE_RING();
++
++ cp_set_surface_sync(dev_priv,
++ R600_SH_ACTION_ENA, 512, gpu_addr);
++}
++
++static inline void
++set_vtx_resource(drm_radeon_private_t *dev_priv, u64 gpu_addr)
++{
++ uint32_t sq_vtx_constant_word2;
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ sq_vtx_constant_word2 = (((gpu_addr >> 32) & 0xff) | (16 << 8));
++
++ BEGIN_RING(9);
++ OUT_RING(CP_PACKET3(R600_IT_SET_RESOURCE, 7));
++ OUT_RING(0x460);
++ OUT_RING(gpu_addr & 0xffffffff);
++ OUT_RING(48 - 1);
++ OUT_RING(sq_vtx_constant_word2);
++ OUT_RING(1 << 0);
++ OUT_RING(0);
++ OUT_RING(0);
++ OUT_RING(R600_SQ_TEX_VTX_VALID_BUFFER << 30);
++ ADVANCE_RING();
++
++ if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV610) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV620) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS780) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS880) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV710))
++ cp_set_surface_sync(dev_priv,
++ R600_TC_ACTION_ENA, 48, gpu_addr);
++ else
++ cp_set_surface_sync(dev_priv,
++ R600_VC_ACTION_ENA, 48, gpu_addr);
++}
++
++static inline void
++set_tex_resource(drm_radeon_private_t *dev_priv,
++ int format, int w, int h, int pitch, u64 gpu_addr)
++{
++ uint32_t sq_tex_resource_word0, sq_tex_resource_word1, sq_tex_resource_word4;
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ if (h < 1)
++ h = 1;
++
++ sq_tex_resource_word0 = (1 << 0);
++ sq_tex_resource_word0 |= ((((pitch >> 3) - 1) << 8) |
++ ((w - 1) << 19));
++
++ sq_tex_resource_word1 = (format << 26);
++ sq_tex_resource_word1 |= ((h - 1) << 0);
++
++ sq_tex_resource_word4 = ((1 << 14) |
++ (0 << 16) |
++ (1 << 19) |
++ (2 << 22) |
++ (3 << 25));
++
++ BEGIN_RING(9);
++ OUT_RING(CP_PACKET3(R600_IT_SET_RESOURCE, 7));
++ OUT_RING(0);
++ OUT_RING(sq_tex_resource_word0);
++ OUT_RING(sq_tex_resource_word1);
++ OUT_RING(gpu_addr >> 8);
++ OUT_RING(gpu_addr >> 8);
++ OUT_RING(sq_tex_resource_word4);
++ OUT_RING(0);
++ OUT_RING(R600_SQ_TEX_VTX_VALID_TEXTURE << 30);
++ ADVANCE_RING();
++
++}
++
++static inline void
++set_scissors(drm_radeon_private_t *dev_priv, int x1, int y1, int x2, int y2)
++{
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ BEGIN_RING(12);
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 2));
++ OUT_RING((R600_PA_SC_SCREEN_SCISSOR_TL - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING((x1 << 0) | (y1 << 16));
++ OUT_RING((x2 << 0) | (y2 << 16));
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 2));
++ OUT_RING((R600_PA_SC_GENERIC_SCISSOR_TL - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING((x1 << 0) | (y1 << 16) | (1 << 31));
++ OUT_RING((x2 << 0) | (y2 << 16));
++
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONTEXT_REG, 2));
++ OUT_RING((R600_PA_SC_WINDOW_SCISSOR_TL - R600_SET_CONTEXT_REG_OFFSET) >> 2);
++ OUT_RING((x1 << 0) | (y1 << 16) | (1 << 31));
++ OUT_RING((x2 << 0) | (y2 << 16));
++ ADVANCE_RING();
++}
++
++static inline void
++draw_auto(drm_radeon_private_t *dev_priv)
++{
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ BEGIN_RING(10);
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONFIG_REG, 1));
++ OUT_RING((R600_VGT_PRIMITIVE_TYPE - R600_SET_CONFIG_REG_OFFSET) >> 2);
++ OUT_RING(DI_PT_RECTLIST);
++
++ OUT_RING(CP_PACKET3(R600_IT_INDEX_TYPE, 0));
++ OUT_RING(DI_INDEX_SIZE_16_BIT);
++
++ OUT_RING(CP_PACKET3(R600_IT_NUM_INSTANCES, 0));
++ OUT_RING(1);
++
++ OUT_RING(CP_PACKET3(R600_IT_DRAW_INDEX_AUTO, 1));
++ OUT_RING(3);
++ OUT_RING(DI_SRC_SEL_AUTO_INDEX);
++
++ ADVANCE_RING();
++ COMMIT_RING();
++}
++
++static inline void
++set_default_state(drm_radeon_private_t *dev_priv)
++{
++ int i;
++ u32 sq_config, sq_gpr_resource_mgmt_1, sq_gpr_resource_mgmt_2;
++ u32 sq_thread_resource_mgmt, sq_stack_resource_mgmt_1, sq_stack_resource_mgmt_2;
++ int num_ps_gprs, num_vs_gprs, num_temp_gprs, num_gs_gprs, num_es_gprs;
++ int num_ps_threads, num_vs_threads, num_gs_threads, num_es_threads;
++ int num_ps_stack_entries, num_vs_stack_entries, num_gs_stack_entries, num_es_stack_entries;
++ RING_LOCALS;
++
++ switch ((dev_priv->flags & RADEON_FAMILY_MASK)) {
++ case CHIP_R600:
++ num_ps_gprs = 192;
++ num_vs_gprs = 56;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 136;
++ num_vs_threads = 48;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 128;
++ num_vs_stack_entries = 128;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ case CHIP_RV630:
++ case CHIP_RV635:
++ num_ps_gprs = 84;
++ num_vs_gprs = 36;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 144;
++ num_vs_threads = 40;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 40;
++ num_vs_stack_entries = 40;
++ num_gs_stack_entries = 32;
++ num_es_stack_entries = 16;
++ break;
++ case CHIP_RV610:
++ case CHIP_RV620:
++ case CHIP_RS780:
++ case CHIP_RS880:
++ default:
++ num_ps_gprs = 84;
++ num_vs_gprs = 36;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 136;
++ num_vs_threads = 48;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 40;
++ num_vs_stack_entries = 40;
++ num_gs_stack_entries = 32;
++ num_es_stack_entries = 16;
++ break;
++ case CHIP_RV670:
++ num_ps_gprs = 144;
++ num_vs_gprs = 40;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 136;
++ num_vs_threads = 48;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 40;
++ num_vs_stack_entries = 40;
++ num_gs_stack_entries = 32;
++ num_es_stack_entries = 16;
++ break;
++ case CHIP_RV770:
++ num_ps_gprs = 192;
++ num_vs_gprs = 56;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 188;
++ num_vs_threads = 60;
++ num_gs_threads = 0;
++ num_es_threads = 0;
++ num_ps_stack_entries = 256;
++ num_vs_stack_entries = 256;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ case CHIP_RV730:
++ case CHIP_RV740:
++ num_ps_gprs = 84;
++ num_vs_gprs = 36;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 188;
++ num_vs_threads = 60;
++ num_gs_threads = 0;
++ num_es_threads = 0;
++ num_ps_stack_entries = 128;
++ num_vs_stack_entries = 128;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ case CHIP_RV710:
++ num_ps_gprs = 192;
++ num_vs_gprs = 56;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 144;
++ num_vs_threads = 48;
++ num_gs_threads = 0;
++ num_es_threads = 0;
++ num_ps_stack_entries = 128;
++ num_vs_stack_entries = 128;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ }
++
++ if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV610) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV620) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS780) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS880) ||
++ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV710))
++ sq_config = 0;
++ else
++ sq_config = R600_VC_ENABLE;
++
++ sq_config |= (R600_DX9_CONSTS |
++ R600_ALU_INST_PREFER_VECTOR |
++ R600_PS_PRIO(0) |
++ R600_VS_PRIO(1) |
++ R600_GS_PRIO(2) |
++ R600_ES_PRIO(3));
++
++ sq_gpr_resource_mgmt_1 = (R600_NUM_PS_GPRS(num_ps_gprs) |
++ R600_NUM_VS_GPRS(num_vs_gprs) |
++ R600_NUM_CLAUSE_TEMP_GPRS(num_temp_gprs));
++ sq_gpr_resource_mgmt_2 = (R600_NUM_GS_GPRS(num_gs_gprs) |
++ R600_NUM_ES_GPRS(num_es_gprs));
++ sq_thread_resource_mgmt = (R600_NUM_PS_THREADS(num_ps_threads) |
++ R600_NUM_VS_THREADS(num_vs_threads) |
++ R600_NUM_GS_THREADS(num_gs_threads) |
++ R600_NUM_ES_THREADS(num_es_threads));
++ sq_stack_resource_mgmt_1 = (R600_NUM_PS_STACK_ENTRIES(num_ps_stack_entries) |
++ R600_NUM_VS_STACK_ENTRIES(num_vs_stack_entries));
++ sq_stack_resource_mgmt_2 = (R600_NUM_GS_STACK_ENTRIES(num_gs_stack_entries) |
++ R600_NUM_ES_STACK_ENTRIES(num_es_stack_entries));
++
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV770) {
++ BEGIN_RING(r7xx_default_size + 10);
++ for (i = 0; i < r7xx_default_size; i++)
++ OUT_RING(r7xx_default_state[i]);
++ } else {
++ BEGIN_RING(r6xx_default_size + 10);
++ for (i = 0; i < r6xx_default_size; i++)
++ OUT_RING(r6xx_default_state[i]);
++ }
++ OUT_RING(CP_PACKET3(R600_IT_EVENT_WRITE, 0));
++ OUT_RING(R600_CACHE_FLUSH_AND_INV_EVENT);
++ /* SQ config */
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONFIG_REG, 6));
++ OUT_RING((R600_SQ_CONFIG - R600_SET_CONFIG_REG_OFFSET) >> 2);
++ OUT_RING(sq_config);
++ OUT_RING(sq_gpr_resource_mgmt_1);
++ OUT_RING(sq_gpr_resource_mgmt_2);
++ OUT_RING(sq_thread_resource_mgmt);
++ OUT_RING(sq_stack_resource_mgmt_1);
++ OUT_RING(sq_stack_resource_mgmt_2);
++ ADVANCE_RING();
++}
++
++static inline uint32_t i2f(uint32_t input)
++{
++ u32 result, i, exponent, fraction;
++
++ if ((input & 0x3fff) == 0)
++ result = 0; /* 0 is a special case */
++ else {
++ exponent = 140; /* exponent biased by 127; */
++ fraction = (input & 0x3fff) << 10; /* cheat and only
++ handle numbers below 2^^15 */
++ for (i = 0; i < 14; i++) {
++ if (fraction & 0x800000)
++ break;
++ else {
++ fraction = fraction << 1; /* keep
++ shifting left until top bit = 1 */
++ exponent = exponent - 1;
++ }
++ }
++ result = exponent << 23 | (fraction & 0x7fffff); /* mask
++ off top bit; assumed 1 */
++ }
++ return result;
++}
++
++
++static inline int r600_nomm_get_vb(struct drm_device *dev)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ dev_priv->blit_vb = radeon_freelist_get(dev);
++ if (!dev_priv->blit_vb) {
++ DRM_ERROR("Unable to allocate vertex buffer for blit\n");
++ return -EAGAIN;
++ }
++ return 0;
++}
++
++static inline void r600_nomm_put_vb(struct drm_device *dev)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++
++ dev_priv->blit_vb->used = 0;
++ radeon_cp_discard_buffer(dev, dev_priv->blit_vb->file_priv->master, dev_priv->blit_vb);
++}
++
++static inline void *r600_nomm_get_vb_ptr(struct drm_device *dev)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ return (((char *)dev->agp_buffer_map->handle +
++ dev_priv->blit_vb->offset + dev_priv->blit_vb->used));
++}
++
++int
++r600_prepare_blit_copy(struct drm_device *dev, struct drm_file *file_priv)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ DRM_DEBUG("\n");
++
++ r600_nomm_get_vb(dev);
++
++ dev_priv->blit_vb->file_priv = file_priv;
++
++ set_default_state(dev_priv);
++ set_shaders(dev);
++
++ return 0;
++}
++
++
++void
++r600_done_blit_copy(struct drm_device *dev)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ BEGIN_RING(5);
++ OUT_RING(CP_PACKET3(R600_IT_EVENT_WRITE, 0));
++ OUT_RING(R600_CACHE_FLUSH_AND_INV_EVENT);
++ /* wait for 3D idle clean */
++ OUT_RING(CP_PACKET3(R600_IT_SET_CONFIG_REG, 1));
++ OUT_RING((R600_WAIT_UNTIL - R600_SET_CONFIG_REG_OFFSET) >> 2);
++ OUT_RING(RADEON_WAIT_3D_IDLE | RADEON_WAIT_3D_IDLECLEAN);
++
++ ADVANCE_RING();
++ COMMIT_RING();
++
++ r600_nomm_put_vb(dev);
++}
++
++void
++r600_blit_copy(struct drm_device *dev,
++ uint64_t src_gpu_addr, uint64_t dst_gpu_addr,
++ int size_bytes)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ int max_bytes;
++ u64 vb_addr;
++ u32 *vb;
++
++ vb = r600_nomm_get_vb_ptr(dev);
++
++ if ((size_bytes & 3) || (src_gpu_addr & 3) || (dst_gpu_addr & 3)) {
++ max_bytes = 8192;
++
++ while (size_bytes) {
++ int cur_size = size_bytes;
++ int src_x = src_gpu_addr & 255;
++ int dst_x = dst_gpu_addr & 255;
++ int h = 1;
++ src_gpu_addr = src_gpu_addr & ~255;
++ dst_gpu_addr = dst_gpu_addr & ~255;
++
++ if (!src_x && !dst_x) {
++ h = (cur_size / max_bytes);
++ if (h > 8192)
++ h = 8192;
++ if (h == 0)
++ h = 1;
++ else
++ cur_size = max_bytes;
++ } else {
++ if (cur_size > max_bytes)
++ cur_size = max_bytes;
++ if (cur_size > (max_bytes - dst_x))
++ cur_size = (max_bytes - dst_x);
++ if (cur_size > (max_bytes - src_x))
++ cur_size = (max_bytes - src_x);
++ }
++
++ if ((dev_priv->blit_vb->used + 48) > dev_priv->blit_vb->total) {
++
++ r600_nomm_put_vb(dev);
++ r600_nomm_get_vb(dev);
++ if (!dev_priv->blit_vb)
++ return;
++ set_shaders(dev);
++ vb = r600_nomm_get_vb_ptr(dev);
++ }
++
++ vb[0] = i2f(dst_x);
++ vb[1] = 0;
++ vb[2] = i2f(src_x);
++ vb[3] = 0;
++
++ vb[4] = i2f(dst_x);
++ vb[5] = i2f(h);
++ vb[6] = i2f(src_x);
++ vb[7] = i2f(h);
++
++ vb[8] = i2f(dst_x + cur_size);
++ vb[9] = i2f(h);
++ vb[10] = i2f(src_x + cur_size);
++ vb[11] = i2f(h);
++
++ /* src */
++ set_tex_resource(dev_priv, FMT_8,
++ src_x + cur_size, h, src_x + cur_size,
++ src_gpu_addr);
++
++ cp_set_surface_sync(dev_priv,
++ R600_TC_ACTION_ENA, (src_x + cur_size * h), src_gpu_addr);
++
++ /* dst */
++ set_render_target(dev_priv, COLOR_8,
++ dst_x + cur_size, h,
++ dst_gpu_addr);
++
++ /* scissors */
++ set_scissors(dev_priv, dst_x, 0, dst_x + cur_size, h);
++
++ /* Vertex buffer setup */
++ vb_addr = dev_priv->gart_buffers_offset +
++ dev_priv->blit_vb->offset +
++ dev_priv->blit_vb->used;
++ set_vtx_resource(dev_priv, vb_addr);
++
++ /* draw */
++ draw_auto(dev_priv);
++
++ cp_set_surface_sync(dev_priv,
++ R600_CB_ACTION_ENA | R600_CB0_DEST_BASE_ENA,
++ cur_size * h, dst_gpu_addr);
++
++ vb += 12;
++ dev_priv->blit_vb->used += 12 * 4;
++
++ src_gpu_addr += cur_size * h;
++ dst_gpu_addr += cur_size * h;
++ size_bytes -= cur_size * h;
++ }
++ } else {
++ max_bytes = 8192 * 4;
++
++ while (size_bytes) {
++ int cur_size = size_bytes;
++ int src_x = (src_gpu_addr & 255);
++ int dst_x = (dst_gpu_addr & 255);
++ int h = 1;
++ src_gpu_addr = src_gpu_addr & ~255;
++ dst_gpu_addr = dst_gpu_addr & ~255;
++
++ if (!src_x && !dst_x) {
++ h = (cur_size / max_bytes);
++ if (h > 8192)
++ h = 8192;
++ if (h == 0)
++ h = 1;
++ else
++ cur_size = max_bytes;
++ } else {
++ if (cur_size > max_bytes)
++ cur_size = max_bytes;
++ if (cur_size > (max_bytes - dst_x))
++ cur_size = (max_bytes - dst_x);
++ if (cur_size > (max_bytes - src_x))
++ cur_size = (max_bytes - src_x);
++ }
++
++ if ((dev_priv->blit_vb->used + 48) > dev_priv->blit_vb->total) {
++ r600_nomm_put_vb(dev);
++ r600_nomm_get_vb(dev);
++ if (!dev_priv->blit_vb)
++ return;
++
++ set_shaders(dev);
++ vb = r600_nomm_get_vb_ptr(dev);
++ }
++
++ vb[0] = i2f(dst_x / 4);
++ vb[1] = 0;
++ vb[2] = i2f(src_x / 4);
++ vb[3] = 0;
++
++ vb[4] = i2f(dst_x / 4);
++ vb[5] = i2f(h);
++ vb[6] = i2f(src_x / 4);
++ vb[7] = i2f(h);
++
++ vb[8] = i2f((dst_x + cur_size) / 4);
++ vb[9] = i2f(h);
++ vb[10] = i2f((src_x + cur_size) / 4);
++ vb[11] = i2f(h);
++
++ /* src */
++ set_tex_resource(dev_priv, FMT_8_8_8_8,
++ (src_x + cur_size) / 4,
++ h, (src_x + cur_size) / 4,
++ src_gpu_addr);
++
++ cp_set_surface_sync(dev_priv,
++ R600_TC_ACTION_ENA, (src_x + cur_size * h), src_gpu_addr);
++
++ /* dst */
++ set_render_target(dev_priv, COLOR_8_8_8_8,
++ (dst_x + cur_size) / 4, h,
++ dst_gpu_addr);
++
++ /* scissors */
++ set_scissors(dev_priv, (dst_x / 4), 0, (dst_x + cur_size / 4), h);
++
++ /* Vertex buffer setup */
++ vb_addr = dev_priv->gart_buffers_offset +
++ dev_priv->blit_vb->offset +
++ dev_priv->blit_vb->used;
++ set_vtx_resource(dev_priv, vb_addr);
++
++ /* draw */
++ draw_auto(dev_priv);
++
++ cp_set_surface_sync(dev_priv,
++ R600_CB_ACTION_ENA | R600_CB0_DEST_BASE_ENA,
++ cur_size * h, dst_gpu_addr);
++
++ vb += 12;
++ dev_priv->blit_vb->used += 12 * 4;
++
++ src_gpu_addr += cur_size * h;
++ dst_gpu_addr += cur_size * h;
++ size_bytes -= cur_size * h;
++ }
++ }
++}
++
++void
++r600_blit_swap(struct drm_device *dev,
++ uint64_t src_gpu_addr, uint64_t dst_gpu_addr,
++ int sx, int sy, int dx, int dy,
++ int w, int h, int src_pitch, int dst_pitch, int cpp)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ int cb_format, tex_format;
++ u64 vb_addr;
++ u32 *vb;
++
++ vb = r600_nomm_get_vb_ptr(dev);
++
++ if ((dev_priv->blit_vb->used + 48) > dev_priv->blit_vb->total) {
++
++ r600_nomm_put_vb(dev);
++ r600_nomm_get_vb(dev);
++ if (!dev_priv->blit_vb)
++ return;
++
++ set_shaders(dev);
++ vb = r600_nomm_get_vb_ptr(dev);
++ }
++
++ if (cpp == 4) {
++ cb_format = COLOR_8_8_8_8;
++ tex_format = FMT_8_8_8_8;
++ } else if (cpp == 2) {
++ cb_format = COLOR_5_6_5;
++ tex_format = FMT_5_6_5;
++ } else {
++ cb_format = COLOR_8;
++ tex_format = FMT_8;
++ }
++
++ vb[0] = i2f(dx);
++ vb[1] = i2f(dy);
++ vb[2] = i2f(sx);
++ vb[3] = i2f(sy);
++
++ vb[4] = i2f(dx);
++ vb[5] = i2f(dy + h);
++ vb[6] = i2f(sx);
++ vb[7] = i2f(sy + h);
++
++ vb[8] = i2f(dx + w);
++ vb[9] = i2f(dy + h);
++ vb[10] = i2f(sx + w);
++ vb[11] = i2f(sy + h);
++
++ /* src */
++ set_tex_resource(dev_priv, tex_format,
++ src_pitch / cpp,
++ sy + h, src_pitch / cpp,
++ src_gpu_addr);
++
++ cp_set_surface_sync(dev_priv,
++ R600_TC_ACTION_ENA, (src_pitch * (sy + h)), src_gpu_addr);
++
++ /* dst */
++ set_render_target(dev_priv, cb_format,
++ dst_pitch / cpp, dy + h,
++ dst_gpu_addr);
++
++ /* scissors */
++ set_scissors(dev_priv, dx, dy, dx + w, dy + h);
++
++ /* Vertex buffer setup */
++ vb_addr = dev_priv->gart_buffers_offset +
++ dev_priv->blit_vb->offset +
++ dev_priv->blit_vb->used;
++ set_vtx_resource(dev_priv, vb_addr);
++
++ /* draw */
++ draw_auto(dev_priv);
++
++ cp_set_surface_sync(dev_priv,
++ R600_CB_ACTION_ENA | R600_CB0_DEST_BASE_ENA,
++ dst_pitch * (dy + h), dst_gpu_addr);
++
++ dev_priv->blit_vb->used += 12 * 4;
++}
+diff --git a/drivers/gpu/drm/radeon/r600_blit_kms.c b/drivers/gpu/drm/radeon/r600_blit_kms.c
+new file mode 100644
+index 0000000..acae33e
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r600_blit_kms.c
+@@ -0,0 +1,805 @@
++#include "drmP.h"
++#include "drm.h"
++#include "radeon_drm.h"
++#include "radeon.h"
++
++#include "r600d.h"
++#include "r600_blit_shaders.h"
++
++#define DI_PT_RECTLIST 0x11
++#define DI_INDEX_SIZE_16_BIT 0x0
++#define DI_SRC_SEL_AUTO_INDEX 0x2
++
++#define FMT_8 0x1
++#define FMT_5_6_5 0x8
++#define FMT_8_8_8_8 0x1a
++#define COLOR_8 0x1
++#define COLOR_5_6_5 0x8
++#define COLOR_8_8_8_8 0x1a
++
++/* emits 21 on rv770+, 23 on r600 */
++static void
++set_render_target(struct radeon_device *rdev, int format,
++ int w, int h, u64 gpu_addr)
++{
++ u32 cb_color_info;
++ int pitch, slice;
++
++ h = (h + 7) & ~7;
++ if (h < 8)
++ h = 8;
++
++ cb_color_info = ((format << 2) | (1 << 27));
++ pitch = (w / 8) - 1;
++ slice = ((w * h) / 64) - 1;
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (CB_COLOR0_BASE - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, gpu_addr >> 8);
++
++ if (rdev->family > CHIP_R600 && rdev->family < CHIP_RV770) {
++ radeon_ring_write(rdev, PACKET3(PACKET3_SURFACE_BASE_UPDATE, 0));
++ radeon_ring_write(rdev, 2 << 0);
++ }
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (CB_COLOR0_SIZE - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, (pitch << 0) | (slice << 10));
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (CB_COLOR0_VIEW - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, 0);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (CB_COLOR0_INFO - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, cb_color_info);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (CB_COLOR0_TILE - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, 0);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (CB_COLOR0_FRAG - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, 0);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (CB_COLOR0_MASK - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, 0);
++}
++
++/* emits 5dw */
++static void
++cp_set_surface_sync(struct radeon_device *rdev,
++ u32 sync_type, u32 size,
++ u64 mc_addr)
++{
++ u32 cp_coher_size;
++
++ if (size == 0xffffffff)
++ cp_coher_size = 0xffffffff;
++ else
++ cp_coher_size = ((size + 255) >> 8);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SURFACE_SYNC, 3));
++ radeon_ring_write(rdev, sync_type);
++ radeon_ring_write(rdev, cp_coher_size);
++ radeon_ring_write(rdev, mc_addr >> 8);
++ radeon_ring_write(rdev, 10); /* poll interval */
++}
++
++/* emits 21dw + 1 surface sync = 26dw */
++static void
++set_shaders(struct radeon_device *rdev)
++{
++ u64 gpu_addr;
++ u32 sq_pgm_resources;
++
++ /* setup shader regs */
++ sq_pgm_resources = (1 << 0);
++
++ /* VS */
++ gpu_addr = rdev->r600_blit.shader_gpu_addr + rdev->r600_blit.vs_offset;
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (SQ_PGM_START_VS - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, gpu_addr >> 8);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (SQ_PGM_RESOURCES_VS - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, sq_pgm_resources);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (SQ_PGM_CF_OFFSET_VS - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, 0);
++
++ /* PS */
++ gpu_addr = rdev->r600_blit.shader_gpu_addr + rdev->r600_blit.ps_offset;
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (SQ_PGM_START_PS - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, gpu_addr >> 8);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (SQ_PGM_RESOURCES_PS - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, sq_pgm_resources | (1 << 28));
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (SQ_PGM_EXPORTS_PS - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, 2);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 1));
++ radeon_ring_write(rdev, (SQ_PGM_CF_OFFSET_PS - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, 0);
++
++ gpu_addr = rdev->r600_blit.shader_gpu_addr + rdev->r600_blit.vs_offset;
++ cp_set_surface_sync(rdev, PACKET3_SH_ACTION_ENA, 512, gpu_addr);
++}
++
++/* emits 9 + 1 sync (5) = 14*/
++static void
++set_vtx_resource(struct radeon_device *rdev, u64 gpu_addr)
++{
++ u32 sq_vtx_constant_word2;
++
++ sq_vtx_constant_word2 = ((upper_32_bits(gpu_addr) & 0xff) | (16 << 8));
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7));
++ radeon_ring_write(rdev, 0x460);
++ radeon_ring_write(rdev, gpu_addr & 0xffffffff);
++ radeon_ring_write(rdev, 48 - 1);
++ radeon_ring_write(rdev, sq_vtx_constant_word2);
++ radeon_ring_write(rdev, 1 << 0);
++ radeon_ring_write(rdev, 0);
++ radeon_ring_write(rdev, 0);
++ radeon_ring_write(rdev, SQ_TEX_VTX_VALID_BUFFER << 30);
++
++ if ((rdev->family == CHIP_RV610) ||
++ (rdev->family == CHIP_RV620) ||
++ (rdev->family == CHIP_RS780) ||
++ (rdev->family == CHIP_RS880) ||
++ (rdev->family == CHIP_RV710))
++ cp_set_surface_sync(rdev,
++ PACKET3_TC_ACTION_ENA, 48, gpu_addr);
++ else
++ cp_set_surface_sync(rdev,
++ PACKET3_VC_ACTION_ENA, 48, gpu_addr);
++}
++
++/* emits 9 */
++static void
++set_tex_resource(struct radeon_device *rdev,
++ int format, int w, int h, int pitch,
++ u64 gpu_addr)
++{
++ uint32_t sq_tex_resource_word0, sq_tex_resource_word1, sq_tex_resource_word4;
++
++ if (h < 1)
++ h = 1;
++
++ sq_tex_resource_word0 = (1 << 0);
++ sq_tex_resource_word0 |= ((((pitch >> 3) - 1) << 8) |
++ ((w - 1) << 19));
++
++ sq_tex_resource_word1 = (format << 26);
++ sq_tex_resource_word1 |= ((h - 1) << 0);
++
++ sq_tex_resource_word4 = ((1 << 14) |
++ (0 << 16) |
++ (1 << 19) |
++ (2 << 22) |
++ (3 << 25));
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_RESOURCE, 7));
++ radeon_ring_write(rdev, 0);
++ radeon_ring_write(rdev, sq_tex_resource_word0);
++ radeon_ring_write(rdev, sq_tex_resource_word1);
++ radeon_ring_write(rdev, gpu_addr >> 8);
++ radeon_ring_write(rdev, gpu_addr >> 8);
++ radeon_ring_write(rdev, sq_tex_resource_word4);
++ radeon_ring_write(rdev, 0);
++ radeon_ring_write(rdev, SQ_TEX_VTX_VALID_TEXTURE << 30);
++}
++
++/* emits 12 */
++static void
++set_scissors(struct radeon_device *rdev, int x1, int y1,
++ int x2, int y2)
++{
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
++ radeon_ring_write(rdev, (PA_SC_SCREEN_SCISSOR_TL - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, (x1 << 0) | (y1 << 16));
++ radeon_ring_write(rdev, (x2 << 0) | (y2 << 16));
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
++ radeon_ring_write(rdev, (PA_SC_GENERIC_SCISSOR_TL - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, (x1 << 0) | (y1 << 16) | (1 << 31));
++ radeon_ring_write(rdev, (x2 << 0) | (y2 << 16));
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONTEXT_REG, 2));
++ radeon_ring_write(rdev, (PA_SC_WINDOW_SCISSOR_TL - PACKET3_SET_CONTEXT_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, (x1 << 0) | (y1 << 16) | (1 << 31));
++ radeon_ring_write(rdev, (x2 << 0) | (y2 << 16));
++}
++
++/* emits 10 */
++static void
++draw_auto(struct radeon_device *rdev)
++{
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
++ radeon_ring_write(rdev, (VGT_PRIMITIVE_TYPE - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, DI_PT_RECTLIST);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_INDEX_TYPE, 0));
++ radeon_ring_write(rdev, DI_INDEX_SIZE_16_BIT);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_NUM_INSTANCES, 0));
++ radeon_ring_write(rdev, 1);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_DRAW_INDEX_AUTO, 1));
++ radeon_ring_write(rdev, 3);
++ radeon_ring_write(rdev, DI_SRC_SEL_AUTO_INDEX);
++
++}
++
++/* emits 14 */
++static void
++set_default_state(struct radeon_device *rdev)
++{
++ u32 sq_config, sq_gpr_resource_mgmt_1, sq_gpr_resource_mgmt_2;
++ u32 sq_thread_resource_mgmt, sq_stack_resource_mgmt_1, sq_stack_resource_mgmt_2;
++ int num_ps_gprs, num_vs_gprs, num_temp_gprs, num_gs_gprs, num_es_gprs;
++ int num_ps_threads, num_vs_threads, num_gs_threads, num_es_threads;
++ int num_ps_stack_entries, num_vs_stack_entries, num_gs_stack_entries, num_es_stack_entries;
++ u64 gpu_addr;
++ int dwords;
++
++ switch (rdev->family) {
++ case CHIP_R600:
++ num_ps_gprs = 192;
++ num_vs_gprs = 56;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 136;
++ num_vs_threads = 48;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 128;
++ num_vs_stack_entries = 128;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ case CHIP_RV630:
++ case CHIP_RV635:
++ num_ps_gprs = 84;
++ num_vs_gprs = 36;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 144;
++ num_vs_threads = 40;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 40;
++ num_vs_stack_entries = 40;
++ num_gs_stack_entries = 32;
++ num_es_stack_entries = 16;
++ break;
++ case CHIP_RV610:
++ case CHIP_RV620:
++ case CHIP_RS780:
++ case CHIP_RS880:
++ default:
++ num_ps_gprs = 84;
++ num_vs_gprs = 36;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 136;
++ num_vs_threads = 48;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 40;
++ num_vs_stack_entries = 40;
++ num_gs_stack_entries = 32;
++ num_es_stack_entries = 16;
++ break;
++ case CHIP_RV670:
++ num_ps_gprs = 144;
++ num_vs_gprs = 40;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 136;
++ num_vs_threads = 48;
++ num_gs_threads = 4;
++ num_es_threads = 4;
++ num_ps_stack_entries = 40;
++ num_vs_stack_entries = 40;
++ num_gs_stack_entries = 32;
++ num_es_stack_entries = 16;
++ break;
++ case CHIP_RV770:
++ num_ps_gprs = 192;
++ num_vs_gprs = 56;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 188;
++ num_vs_threads = 60;
++ num_gs_threads = 0;
++ num_es_threads = 0;
++ num_ps_stack_entries = 256;
++ num_vs_stack_entries = 256;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ case CHIP_RV730:
++ case CHIP_RV740:
++ num_ps_gprs = 84;
++ num_vs_gprs = 36;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 188;
++ num_vs_threads = 60;
++ num_gs_threads = 0;
++ num_es_threads = 0;
++ num_ps_stack_entries = 128;
++ num_vs_stack_entries = 128;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ case CHIP_RV710:
++ num_ps_gprs = 192;
++ num_vs_gprs = 56;
++ num_temp_gprs = 4;
++ num_gs_gprs = 0;
++ num_es_gprs = 0;
++ num_ps_threads = 144;
++ num_vs_threads = 48;
++ num_gs_threads = 0;
++ num_es_threads = 0;
++ num_ps_stack_entries = 128;
++ num_vs_stack_entries = 128;
++ num_gs_stack_entries = 0;
++ num_es_stack_entries = 0;
++ break;
++ }
++
++ if ((rdev->family == CHIP_RV610) ||
++ (rdev->family == CHIP_RV620) ||
++ (rdev->family == CHIP_RS780) ||
++ (rdev->family == CHIP_RS780) ||
++ (rdev->family == CHIP_RV710))
++ sq_config = 0;
++ else
++ sq_config = VC_ENABLE;
++
++ sq_config |= (DX9_CONSTS |
++ ALU_INST_PREFER_VECTOR |
++ PS_PRIO(0) |
++ VS_PRIO(1) |
++ GS_PRIO(2) |
++ ES_PRIO(3));
++
++ sq_gpr_resource_mgmt_1 = (NUM_PS_GPRS(num_ps_gprs) |
++ NUM_VS_GPRS(num_vs_gprs) |
++ NUM_CLAUSE_TEMP_GPRS(num_temp_gprs));
++ sq_gpr_resource_mgmt_2 = (NUM_GS_GPRS(num_gs_gprs) |
++ NUM_ES_GPRS(num_es_gprs));
++ sq_thread_resource_mgmt = (NUM_PS_THREADS(num_ps_threads) |
++ NUM_VS_THREADS(num_vs_threads) |
++ NUM_GS_THREADS(num_gs_threads) |
++ NUM_ES_THREADS(num_es_threads));
++ sq_stack_resource_mgmt_1 = (NUM_PS_STACK_ENTRIES(num_ps_stack_entries) |
++ NUM_VS_STACK_ENTRIES(num_vs_stack_entries));
++ sq_stack_resource_mgmt_2 = (NUM_GS_STACK_ENTRIES(num_gs_stack_entries) |
++ NUM_ES_STACK_ENTRIES(num_es_stack_entries));
++
++ /* emit an IB pointing at default state */
++ dwords = (rdev->r600_blit.state_len + 0xf) & ~0xf;
++ gpu_addr = rdev->r600_blit.shader_gpu_addr + rdev->r600_blit.state_offset;
++ radeon_ring_write(rdev, PACKET3(PACKET3_INDIRECT_BUFFER, 2));
++ radeon_ring_write(rdev, gpu_addr & 0xFFFFFFFC);
++ radeon_ring_write(rdev, upper_32_bits(gpu_addr) & 0xFF);
++ radeon_ring_write(rdev, dwords);
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_EVENT_WRITE, 0));
++ radeon_ring_write(rdev, CACHE_FLUSH_AND_INV_EVENT);
++ /* SQ config */
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 6));
++ radeon_ring_write(rdev, (SQ_CONFIG - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, sq_config);
++ radeon_ring_write(rdev, sq_gpr_resource_mgmt_1);
++ radeon_ring_write(rdev, sq_gpr_resource_mgmt_2);
++ radeon_ring_write(rdev, sq_thread_resource_mgmt);
++ radeon_ring_write(rdev, sq_stack_resource_mgmt_1);
++ radeon_ring_write(rdev, sq_stack_resource_mgmt_2);
++}
++
++static inline uint32_t i2f(uint32_t input)
++{
++ u32 result, i, exponent, fraction;
++
++ if ((input & 0x3fff) == 0)
++ result = 0; /* 0 is a special case */
++ else {
++ exponent = 140; /* exponent biased by 127; */
++ fraction = (input & 0x3fff) << 10; /* cheat and only
++ handle numbers below 2^^15 */
++ for (i = 0; i < 14; i++) {
++ if (fraction & 0x800000)
++ break;
++ else {
++ fraction = fraction << 1; /* keep
++ shifting left until top bit = 1 */
++ exponent = exponent - 1;
++ }
++ }
++ result = exponent << 23 | (fraction & 0x7fffff); /* mask
++ off top bit; assumed 1 */
++ }
++ return result;
++}
++
++int r600_blit_init(struct radeon_device *rdev)
++{
++ u32 obj_size;
++ int r, dwords;
++ void *ptr;
++ u32 packet2s[16];
++ int num_packet2s = 0;
++
++ rdev->r600_blit.state_offset = 0;
++
++ if (rdev->family >= CHIP_RV770)
++ rdev->r600_blit.state_len = r7xx_default_size;
++ else
++ rdev->r600_blit.state_len = r6xx_default_size;
++
++ dwords = rdev->r600_blit.state_len;
++ while (dwords & 0xf) {
++ packet2s[num_packet2s++] = PACKET2(0);
++ dwords++;
++ }
++
++ obj_size = dwords * 4;
++ obj_size = ALIGN(obj_size, 256);
++
++ rdev->r600_blit.vs_offset = obj_size;
++ obj_size += r6xx_vs_size * 4;
++ obj_size = ALIGN(obj_size, 256);
++
++ rdev->r600_blit.ps_offset = obj_size;
++ obj_size += r6xx_ps_size * 4;
++ obj_size = ALIGN(obj_size, 256);
++
++ r = radeon_object_create(rdev, NULL, obj_size,
++ true, RADEON_GEM_DOMAIN_VRAM,
++ false, &rdev->r600_blit.shader_obj);
++ if (r) {
++ DRM_ERROR("r600 failed to allocate shader\n");
++ return r;
++ }
++
++ DRM_DEBUG("r6xx blit allocated bo %08x vs %08x ps %08x\n",
++ obj_size,
++ rdev->r600_blit.vs_offset, rdev->r600_blit.ps_offset);
++
++ r = radeon_object_kmap(rdev->r600_blit.shader_obj, &ptr);
++ if (r) {
++ DRM_ERROR("failed to map blit object %d\n", r);
++ return r;
++ }
++
++ if (rdev->family >= CHIP_RV770)
++ memcpy_toio(ptr + rdev->r600_blit.state_offset,
++ r7xx_default_state, rdev->r600_blit.state_len * 4);
++ else
++ memcpy_toio(ptr + rdev->r600_blit.state_offset,
++ r6xx_default_state, rdev->r600_blit.state_len * 4);
++ if (num_packet2s)
++ memcpy_toio(ptr + rdev->r600_blit.state_offset + (rdev->r600_blit.state_len * 4),
++ packet2s, num_packet2s * 4);
++
++
++ memcpy(ptr + rdev->r600_blit.vs_offset, r6xx_vs, r6xx_vs_size * 4);
++ memcpy(ptr + rdev->r600_blit.ps_offset, r6xx_ps, r6xx_ps_size * 4);
++
++ radeon_object_kunmap(rdev->r600_blit.shader_obj);
++ return 0;
++}
++
++void r600_blit_fini(struct radeon_device *rdev)
++{
++ radeon_object_unpin(rdev->r600_blit.shader_obj);
++ radeon_object_unref(&rdev->r600_blit.shader_obj);
++}
++
++int r600_vb_ib_get(struct radeon_device *rdev)
++{
++ int r;
++ r = radeon_ib_get(rdev, &rdev->r600_blit.vb_ib);
++ if (r) {
++ DRM_ERROR("failed to get IB for vertex buffer\n");
++ return r;
++ }
++
++ rdev->r600_blit.vb_total = 64*1024;
++ rdev->r600_blit.vb_used = 0;
++ return 0;
++}
++
++void r600_vb_ib_put(struct radeon_device *rdev)
++{
++ radeon_fence_emit(rdev, rdev->r600_blit.vb_ib->fence);
++ mutex_lock(&rdev->ib_pool.mutex);
++ list_add_tail(&rdev->r600_blit.vb_ib->list, &rdev->ib_pool.scheduled_ibs);
++ mutex_unlock(&rdev->ib_pool.mutex);
++ radeon_ib_free(rdev, &rdev->r600_blit.vb_ib);
++}
++
++int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes)
++{
++ int r;
++ int ring_size, line_size;
++ int max_size;
++ /* loops of emits 64 + fence emit possible */
++ int dwords_per_loop = 76, num_loops;
++
++ r = r600_vb_ib_get(rdev);
++ WARN_ON(r);
++
++ /* set_render_target emits 2 extra dwords on rv6xx */
++ if (rdev->family > CHIP_R600 && rdev->family < CHIP_RV770)
++ dwords_per_loop += 2;
++
++ /* 8 bpp vs 32 bpp for xfer unit */
++ if (size_bytes & 3)
++ line_size = 8192;
++ else
++ line_size = 8192*4;
++
++ max_size = 8192 * line_size;
++
++ /* major loops cover the max size transfer */
++ num_loops = ((size_bytes + max_size) / max_size);
++ /* minor loops cover the extra non aligned bits */
++ num_loops += ((size_bytes % line_size) ? 1 : 0);
++ /* calculate number of loops correctly */
++ ring_size = num_loops * dwords_per_loop;
++ /* set default + shaders */
++ ring_size += 40; /* shaders + def state */
++ ring_size += 3; /* fence emit for VB IB */
++ ring_size += 5; /* done copy */
++ ring_size += 3; /* fence emit for done copy */
++ r = radeon_ring_lock(rdev, ring_size);
++ WARN_ON(r);
++
++ set_default_state(rdev); /* 14 */
++ set_shaders(rdev); /* 26 */
++ return 0;
++}
++
++void r600_blit_done_copy(struct radeon_device *rdev, struct radeon_fence *fence)
++{
++ int r;
++
++ radeon_ring_write(rdev, PACKET3(PACKET3_EVENT_WRITE, 0));
++ radeon_ring_write(rdev, CACHE_FLUSH_AND_INV_EVENT);
++ /* wait for 3D idle clean */
++ radeon_ring_write(rdev, PACKET3(PACKET3_SET_CONFIG_REG, 1));
++ radeon_ring_write(rdev, (WAIT_UNTIL - PACKET3_SET_CONFIG_REG_OFFSET) >> 2);
++ radeon_ring_write(rdev, WAIT_3D_IDLE_bit | WAIT_3D_IDLECLEAN_bit);
++
++ if (rdev->r600_blit.vb_ib)
++ r600_vb_ib_put(rdev);
++
++ if (fence)
++ r = radeon_fence_emit(rdev, fence);
++
++ radeon_ring_unlock_commit(rdev);
++}
++
++void r600_kms_blit_copy(struct radeon_device *rdev,
++ u64 src_gpu_addr, u64 dst_gpu_addr,
++ int size_bytes)
++{
++ int max_bytes;
++ u64 vb_gpu_addr;
++ u32 *vb;
++
++ DRM_DEBUG("emitting copy %16llx %16llx %d %d\n", src_gpu_addr, dst_gpu_addr,
++ size_bytes, rdev->r600_blit.vb_used);
++ vb = (u32 *)(rdev->r600_blit.vb_ib->ptr + rdev->r600_blit.vb_used);
++ if ((size_bytes & 3) || (src_gpu_addr & 3) || (dst_gpu_addr & 3)) {
++ max_bytes = 8192;
++
++ while (size_bytes) {
++ int cur_size = size_bytes;
++ int src_x = src_gpu_addr & 255;
++ int dst_x = dst_gpu_addr & 255;
++ int h = 1;
++ src_gpu_addr = src_gpu_addr & ~255;
++ dst_gpu_addr = dst_gpu_addr & ~255;
++
++ if (!src_x && !dst_x) {
++ h = (cur_size / max_bytes);
++ if (h > 8192)
++ h = 8192;
++ if (h == 0)
++ h = 1;
++ else
++ cur_size = max_bytes;
++ } else {
++ if (cur_size > max_bytes)
++ cur_size = max_bytes;
++ if (cur_size > (max_bytes - dst_x))
++ cur_size = (max_bytes - dst_x);
++ if (cur_size > (max_bytes - src_x))
++ cur_size = (max_bytes - src_x);
++ }
++
++ if ((rdev->r600_blit.vb_used + 48) > rdev->r600_blit.vb_total) {
++ WARN_ON(1);
++
++#if 0
++ r600_vb_ib_put(rdev);
++
++ r600_nomm_put_vb(dev);
++ r600_nomm_get_vb(dev);
++ if (!dev_priv->blit_vb)
++ return;
++ set_shaders(dev);
++ vb = r600_nomm_get_vb_ptr(dev);
++#endif
++ }
++
++ vb[0] = i2f(dst_x);
++ vb[1] = 0;
++ vb[2] = i2f(src_x);
++ vb[3] = 0;
++
++ vb[4] = i2f(dst_x);
++ vb[5] = i2f(h);
++ vb[6] = i2f(src_x);
++ vb[7] = i2f(h);
++
++ vb[8] = i2f(dst_x + cur_size);
++ vb[9] = i2f(h);
++ vb[10] = i2f(src_x + cur_size);
++ vb[11] = i2f(h);
++
++ /* src 9 */
++ set_tex_resource(rdev, FMT_8,
++ src_x + cur_size, h, src_x + cur_size,
++ src_gpu_addr);
++
++ /* 5 */
++ cp_set_surface_sync(rdev,
++ PACKET3_TC_ACTION_ENA, (src_x + cur_size * h), src_gpu_addr);
++
++ /* dst 23 */
++ set_render_target(rdev, COLOR_8,
++ dst_x + cur_size, h,
++ dst_gpu_addr);
++
++ /* scissors 12 */
++ set_scissors(rdev, dst_x, 0, dst_x + cur_size, h);
++
++ /* 14 */
++ vb_gpu_addr = rdev->r600_blit.vb_ib->gpu_addr + rdev->r600_blit.vb_used;
++ set_vtx_resource(rdev, vb_gpu_addr);
++
++ /* draw 10 */
++ draw_auto(rdev);
++
++ /* 5 */
++ cp_set_surface_sync(rdev,
++ PACKET3_CB_ACTION_ENA | PACKET3_CB0_DEST_BASE_ENA,
++ cur_size * h, dst_gpu_addr);
++
++ vb += 12;
++ rdev->r600_blit.vb_used += 12 * 4;
++
++ src_gpu_addr += cur_size * h;
++ dst_gpu_addr += cur_size * h;
++ size_bytes -= cur_size * h;
++ }
++ } else {
++ max_bytes = 8192 * 4;
++
++ while (size_bytes) {
++ int cur_size = size_bytes;
++ int src_x = (src_gpu_addr & 255);
++ int dst_x = (dst_gpu_addr & 255);
++ int h = 1;
++ src_gpu_addr = src_gpu_addr & ~255;
++ dst_gpu_addr = dst_gpu_addr & ~255;
++
++ if (!src_x && !dst_x) {
++ h = (cur_size / max_bytes);
++ if (h > 8192)
++ h = 8192;
++ if (h == 0)
++ h = 1;
++ else
++ cur_size = max_bytes;
++ } else {
++ if (cur_size > max_bytes)
++ cur_size = max_bytes;
++ if (cur_size > (max_bytes - dst_x))
++ cur_size = (max_bytes - dst_x);
++ if (cur_size > (max_bytes - src_x))
++ cur_size = (max_bytes - src_x);
++ }
++
++ if ((rdev->r600_blit.vb_used + 48) > rdev->r600_blit.vb_total) {
++ WARN_ON(1);
++ }
++#if 0
++ if ((rdev->blit_vb->used + 48) > rdev->blit_vb->total) {
++ r600_nomm_put_vb(dev);
++ r600_nomm_get_vb(dev);
++ if (!rdev->blit_vb)
++ return;
++
++ set_shaders(dev);
++ vb = r600_nomm_get_vb_ptr(dev);
++ }
++#endif
++
++ vb[0] = i2f(dst_x / 4);
++ vb[1] = 0;
++ vb[2] = i2f(src_x / 4);
++ vb[3] = 0;
++
++ vb[4] = i2f(dst_x / 4);
++ vb[5] = i2f(h);
++ vb[6] = i2f(src_x / 4);
++ vb[7] = i2f(h);
++
++ vb[8] = i2f((dst_x + cur_size) / 4);
++ vb[9] = i2f(h);
++ vb[10] = i2f((src_x + cur_size) / 4);
++ vb[11] = i2f(h);
++
++ /* src 9 */
++ set_tex_resource(rdev, FMT_8_8_8_8,
++ (src_x + cur_size) / 4,
++ h, (src_x + cur_size) / 4,
++ src_gpu_addr);
++ /* 5 */
++ cp_set_surface_sync(rdev,
++ PACKET3_TC_ACTION_ENA, (src_x + cur_size * h), src_gpu_addr);
++
++ /* dst 23 */
++ set_render_target(rdev, COLOR_8_8_8_8,
++ (dst_x + cur_size) / 4, h,
++ dst_gpu_addr);
++
++ /* scissors 12 */
++ set_scissors(rdev, (dst_x / 4), 0, (dst_x + cur_size / 4), h);
++
++ /* Vertex buffer setup 14 */
++ vb_gpu_addr = rdev->r600_blit.vb_ib->gpu_addr + rdev->r600_blit.vb_used;
++ set_vtx_resource(rdev, vb_gpu_addr);
++
++ /* draw 10 */
++ draw_auto(rdev);
++
++ /* 5 */
++ cp_set_surface_sync(rdev,
++ PACKET3_CB_ACTION_ENA | PACKET3_CB0_DEST_BASE_ENA,
++ cur_size * h, dst_gpu_addr);
++
++ /* 78 ring dwords per loop */
++ vb += 12;
++ rdev->r600_blit.vb_used += 12 * 4;
++
++ src_gpu_addr += cur_size * h;
++ dst_gpu_addr += cur_size * h;
++ size_bytes -= cur_size * h;
++ }
++ }
++}
++
+diff --git a/drivers/gpu/drm/radeon/r600_blit_shaders.c b/drivers/gpu/drm/radeon/r600_blit_shaders.c
+new file mode 100644
+index 0000000..d745e81
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r600_blit_shaders.c
+@@ -0,0 +1,1072 @@
++
++#include <linux/types.h>
++#include <linux/kernel.h>
++
++const u32 r6xx_default_state[] =
++{
++ 0xc0002400,
++ 0x00000000,
++ 0xc0012800,
++ 0x80000000,
++ 0x80000000,
++ 0xc0004600,
++ 0x00000016,
++ 0xc0016800,
++ 0x00000010,
++ 0x00028000,
++ 0xc0016800,
++ 0x00000010,
++ 0x00008000,
++ 0xc0016800,
++ 0x00000542,
++ 0x07000003,
++ 0xc0016800,
++ 0x000005c5,
++ 0x00000000,
++ 0xc0016800,
++ 0x00000363,
++ 0x00000000,
++ 0xc0016800,
++ 0x0000060c,
++ 0x82000000,
++ 0xc0016800,
++ 0x0000060e,
++ 0x01020204,
++ 0xc0016f00,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016f00,
++ 0x00000001,
++ 0x00000000,
++ 0xc0096900,
++ 0x0000022a,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000004,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000000a,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000000b,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000010c,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000010d,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000200,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000343,
++ 0x00000060,
++ 0xc0016900,
++ 0x00000344,
++ 0x00000040,
++ 0xc0016900,
++ 0x00000351,
++ 0x0000aa00,
++ 0xc0016900,
++ 0x00000104,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000010e,
++ 0x00000000,
++ 0xc0046900,
++ 0x00000105,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0036900,
++ 0x00000109,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0046900,
++ 0x0000030c,
++ 0x01000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0046900,
++ 0x00000048,
++ 0x3f800000,
++ 0x00000000,
++ 0x3f800000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x0000008e,
++ 0x0000000f,
++ 0xc0016900,
++ 0x00000080,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000083,
++ 0x0000ffff,
++ 0xc0016900,
++ 0x00000084,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000085,
++ 0x20002000,
++ 0xc0016900,
++ 0x00000086,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000087,
++ 0x20002000,
++ 0xc0016900,
++ 0x00000088,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000089,
++ 0x20002000,
++ 0xc0016900,
++ 0x0000008a,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000008b,
++ 0x20002000,
++ 0xc0016900,
++ 0x0000008c,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000094,
++ 0x80000000,
++ 0xc0016900,
++ 0x00000095,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000b4,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000096,
++ 0x80000000,
++ 0xc0016900,
++ 0x00000097,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000b6,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000098,
++ 0x80000000,
++ 0xc0016900,
++ 0x00000099,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000b8,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x0000009a,
++ 0x80000000,
++ 0xc0016900,
++ 0x0000009b,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000ba,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x0000009c,
++ 0x80000000,
++ 0xc0016900,
++ 0x0000009d,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000bc,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x0000009e,
++ 0x80000000,
++ 0xc0016900,
++ 0x0000009f,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000be,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a0,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a1,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c0,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a2,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a3,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c2,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a4,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a5,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c4,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a6,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a7,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c6,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a8,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a9,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c8,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000aa,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000ab,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000ca,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000ac,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000ad,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000cc,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000ae,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000af,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000ce,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000b0,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000b1,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000d0,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000b2,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000b3,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000d2,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000293,
++ 0x00004010,
++ 0xc0016900,
++ 0x00000300,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000301,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000312,
++ 0xffffffff,
++ 0xc0016900,
++ 0x00000307,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000308,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000283,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000292,
++ 0x00000000,
++ 0xc0066900,
++ 0x0000010f,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000206,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000207,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000208,
++ 0x00000000,
++ 0xc0046900,
++ 0x00000303,
++ 0x3f800000,
++ 0x3f800000,
++ 0x3f800000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000205,
++ 0x00000004,
++ 0xc0016900,
++ 0x00000280,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000281,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000037e,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000382,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000380,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000383,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000381,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000282,
++ 0x00000008,
++ 0xc0016900,
++ 0x00000302,
++ 0x0000002d,
++ 0xc0016900,
++ 0x0000037f,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b2,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b6,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b7,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b8,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b9,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000225,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000229,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000237,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000100,
++ 0x00000800,
++ 0xc0016900,
++ 0x00000101,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000102,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a8,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a9,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000103,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000284,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000290,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000285,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000286,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000287,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000288,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000289,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028a,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028b,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028c,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028d,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028e,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028f,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a1,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a5,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002ac,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002ad,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002ae,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002c8,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000206,
++ 0x00000100,
++ 0xc0016900,
++ 0x00000204,
++ 0x00010000,
++ 0xc0036e00,
++ 0x00000000,
++ 0x00000012,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000008f,
++ 0x0000000f,
++ 0xc0016900,
++ 0x000001e8,
++ 0x00000001,
++ 0xc0016900,
++ 0x00000202,
++ 0x00cc0000,
++ 0xc0016900,
++ 0x00000205,
++ 0x00000244,
++ 0xc0016900,
++ 0x00000203,
++ 0x00000210,
++ 0xc0016900,
++ 0x000001b1,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000185,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b3,
++ 0x00000001,
++ 0xc0016900,
++ 0x000001b4,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000191,
++ 0x00000b00,
++ 0xc0016900,
++ 0x000001b5,
++ 0x00000000,
++};
++
++const u32 r7xx_default_state[] =
++{
++ 0xc0012800,
++ 0x80000000,
++ 0x80000000,
++ 0xc0004600,
++ 0x00000016,
++ 0xc0016800,
++ 0x00000010,
++ 0x00028000,
++ 0xc0016800,
++ 0x00000010,
++ 0x00008000,
++ 0xc0016800,
++ 0x00000542,
++ 0x07000002,
++ 0xc0016800,
++ 0x000005c5,
++ 0x00000000,
++ 0xc0016800,
++ 0x00000363,
++ 0x00004000,
++ 0xc0016800,
++ 0x0000060c,
++ 0x00000000,
++ 0xc0016800,
++ 0x0000060e,
++ 0x00420204,
++ 0xc0016f00,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016f00,
++ 0x00000001,
++ 0x00000000,
++ 0xc0096900,
++ 0x0000022a,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000004,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000000a,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000000b,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000010c,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000010d,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000200,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000343,
++ 0x00000060,
++ 0xc0016900,
++ 0x00000344,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000351,
++ 0x0000aa00,
++ 0xc0016900,
++ 0x00000104,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000010e,
++ 0x00000000,
++ 0xc0046900,
++ 0x00000105,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0046900,
++ 0x0000030c,
++ 0x01000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000008e,
++ 0x0000000f,
++ 0xc0016900,
++ 0x00000080,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000083,
++ 0x0000ffff,
++ 0xc0016900,
++ 0x00000084,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000085,
++ 0x20002000,
++ 0xc0016900,
++ 0x00000086,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000087,
++ 0x20002000,
++ 0xc0016900,
++ 0x00000088,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000089,
++ 0x20002000,
++ 0xc0016900,
++ 0x0000008a,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000008b,
++ 0x20002000,
++ 0xc0016900,
++ 0x0000008c,
++ 0xaaaaaaaa,
++ 0xc0016900,
++ 0x00000094,
++ 0x80000000,
++ 0xc0016900,
++ 0x00000095,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000b4,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000096,
++ 0x80000000,
++ 0xc0016900,
++ 0x00000097,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000b6,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000098,
++ 0x80000000,
++ 0xc0016900,
++ 0x00000099,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000b8,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x0000009a,
++ 0x80000000,
++ 0xc0016900,
++ 0x0000009b,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000ba,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x0000009c,
++ 0x80000000,
++ 0xc0016900,
++ 0x0000009d,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000bc,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x0000009e,
++ 0x80000000,
++ 0xc0016900,
++ 0x0000009f,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000be,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a0,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a1,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c0,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a2,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a3,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c2,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a4,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a5,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c4,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a6,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a7,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c6,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000a8,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000a9,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000c8,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000aa,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000ab,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000ca,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000ac,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000ad,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000cc,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000ae,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000af,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000ce,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000b0,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000b1,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000d0,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x000000b2,
++ 0x80000000,
++ 0xc0016900,
++ 0x000000b3,
++ 0x20002000,
++ 0xc0026900,
++ 0x000000d2,
++ 0x00000000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000293,
++ 0x00514000,
++ 0xc0016900,
++ 0x00000300,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000301,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000312,
++ 0xffffffff,
++ 0xc0016900,
++ 0x00000307,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000308,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000283,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000292,
++ 0x00000000,
++ 0xc0066900,
++ 0x0000010f,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000206,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000207,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000208,
++ 0x00000000,
++ 0xc0046900,
++ 0x00000303,
++ 0x3f800000,
++ 0x3f800000,
++ 0x3f800000,
++ 0x3f800000,
++ 0xc0016900,
++ 0x00000205,
++ 0x00000004,
++ 0xc0016900,
++ 0x00000280,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000281,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000037e,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000382,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000380,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000383,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000381,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000282,
++ 0x00000008,
++ 0xc0016900,
++ 0x00000302,
++ 0x0000002d,
++ 0xc0016900,
++ 0x0000037f,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b2,
++ 0x00000001,
++ 0xc0016900,
++ 0x000001b6,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b7,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b8,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b9,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000225,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000229,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000237,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000100,
++ 0x00000800,
++ 0xc0016900,
++ 0x00000101,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000102,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a8,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a9,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000103,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000284,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000290,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000285,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000286,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000287,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000288,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000289,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028a,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028b,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028c,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028d,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028e,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000028f,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a1,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002a5,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002ac,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002ad,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002ae,
++ 0x00000000,
++ 0xc0016900,
++ 0x000002c8,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000206,
++ 0x00000100,
++ 0xc0016900,
++ 0x00000204,
++ 0x00010000,
++ 0xc0036e00,
++ 0x00000000,
++ 0x00000012,
++ 0x00000000,
++ 0x00000000,
++ 0xc0016900,
++ 0x0000008f,
++ 0x0000000f,
++ 0xc0016900,
++ 0x000001e8,
++ 0x00000001,
++ 0xc0016900,
++ 0x00000202,
++ 0x00cc0000,
++ 0xc0016900,
++ 0x00000205,
++ 0x00000244,
++ 0xc0016900,
++ 0x00000203,
++ 0x00000210,
++ 0xc0016900,
++ 0x000001b1,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000185,
++ 0x00000000,
++ 0xc0016900,
++ 0x000001b3,
++ 0x00000001,
++ 0xc0016900,
++ 0x000001b4,
++ 0x00000000,
++ 0xc0016900,
++ 0x00000191,
++ 0x00000b00,
++ 0xc0016900,
++ 0x000001b5,
++ 0x00000000,
++};
++
++/* same for r6xx/r7xx */
++const u32 r6xx_vs[] =
++{
++ 0x00000004,
++ 0x81000000,
++ 0x0000203c,
++ 0x94000b08,
++ 0x00004000,
++ 0x14200b1a,
++ 0x00000000,
++ 0x00000000,
++ 0x3c000000,
++ 0x68cd1000,
++ 0x00080000,
++ 0x00000000,
++};
++
++const u32 r6xx_ps[] =
++{
++ 0x00000002,
++ 0x80800000,
++ 0x00000000,
++ 0x94200688,
++ 0x00000010,
++ 0x000d1000,
++ 0xb0800000,
++ 0x00000000,
++};
++
++const u32 r6xx_ps_size = ARRAY_SIZE(r6xx_ps);
++const u32 r6xx_vs_size = ARRAY_SIZE(r6xx_vs);
++const u32 r6xx_default_size = ARRAY_SIZE(r6xx_default_state);
++const u32 r7xx_default_size = ARRAY_SIZE(r7xx_default_state);
+diff --git a/drivers/gpu/drm/radeon/r600_blit_shaders.h b/drivers/gpu/drm/radeon/r600_blit_shaders.h
+new file mode 100644
+index 0000000..fdc3b37
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r600_blit_shaders.h
+@@ -0,0 +1,14 @@
++
++#ifndef R600_BLIT_SHADERS_H
++#define R600_BLIT_SHADERS_H
++
++extern const u32 r6xx_ps[];
++extern const u32 r6xx_vs[];
++extern const u32 r7xx_default_state[];
++extern const u32 r6xx_default_state[];
++
++
++extern const u32 r6xx_ps_size, r6xx_vs_size;
++extern const u32 r6xx_default_size, r7xx_default_size;
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/r600_cp.c b/drivers/gpu/drm/radeon/r600_cp.c
+index 20f1790..6d5a711 100644
+--- a/drivers/gpu/drm/radeon/r600_cp.c
++++ b/drivers/gpu/drm/radeon/r600_cp.c
+@@ -31,7 +31,38 @@
+ #include "radeon_drm.h"
+ #include "radeon_drv.h"
+
+-#include "r600_microcode.h"
++#define PFP_UCODE_SIZE 576
++#define PM4_UCODE_SIZE 1792
++#define R700_PFP_UCODE_SIZE 848
++#define R700_PM4_UCODE_SIZE 1360
++
++/* Firmware Names */
++MODULE_FIRMWARE("radeon/R600_pfp.bin");
++MODULE_FIRMWARE("radeon/R600_me.bin");
++MODULE_FIRMWARE("radeon/RV610_pfp.bin");
++MODULE_FIRMWARE("radeon/RV610_me.bin");
++MODULE_FIRMWARE("radeon/RV630_pfp.bin");
++MODULE_FIRMWARE("radeon/RV630_me.bin");
++MODULE_FIRMWARE("radeon/RV620_pfp.bin");
++MODULE_FIRMWARE("radeon/RV620_me.bin");
++MODULE_FIRMWARE("radeon/RV635_pfp.bin");
++MODULE_FIRMWARE("radeon/RV635_me.bin");
++MODULE_FIRMWARE("radeon/RV670_pfp.bin");
++MODULE_FIRMWARE("radeon/RV670_me.bin");
++MODULE_FIRMWARE("radeon/RS780_pfp.bin");
++MODULE_FIRMWARE("radeon/RS780_me.bin");
++MODULE_FIRMWARE("radeon/RV770_pfp.bin");
++MODULE_FIRMWARE("radeon/RV770_me.bin");
++MODULE_FIRMWARE("radeon/RV730_pfp.bin");
++MODULE_FIRMWARE("radeon/RV730_me.bin");
++MODULE_FIRMWARE("radeon/RV710_pfp.bin");
++MODULE_FIRMWARE("radeon/RV710_me.bin");
++
++
++int r600_cs_legacy(struct drm_device *dev, void *data, struct drm_file *filp,
++ unsigned family, u32 *ib, int *l);
++void r600_cs_legacy_init(void);
++
+
+ # define ATI_PCIGART_PAGE_SIZE 4096 /**< PCI GART page size */
+ # define ATI_PCIGART_PAGE_MASK (~(ATI_PCIGART_PAGE_SIZE-1))
+@@ -275,11 +306,93 @@ static void r600_vm_init(struct drm_device *dev)
+ r600_vm_flush_gart_range(dev);
+ }
+
+-/* load r600 microcode */
++static int r600_cp_init_microcode(drm_radeon_private_t *dev_priv)
++{
++ struct platform_device *pdev;
++ const char *chip_name;
++ size_t pfp_req_size, me_req_size;
++ char fw_name[30];
++ int err;
++
++ pdev = platform_device_register_simple("r600_cp", 0, NULL, 0);
++ err = IS_ERR(pdev);
++ if (err) {
++ printk(KERN_ERR "r600_cp: Failed to register firmware\n");
++ return -EINVAL;
++ }
++
++ switch (dev_priv->flags & RADEON_FAMILY_MASK) {
++ case CHIP_R600: chip_name = "R600"; break;
++ case CHIP_RV610: chip_name = "RV610"; break;
++ case CHIP_RV630: chip_name = "RV630"; break;
++ case CHIP_RV620: chip_name = "RV620"; break;
++ case CHIP_RV635: chip_name = "RV635"; break;
++ case CHIP_RV670: chip_name = "RV670"; break;
++ case CHIP_RS780:
++ case CHIP_RS880: chip_name = "RS780"; break;
++ case CHIP_RV770: chip_name = "RV770"; break;
++ case CHIP_RV730:
++ case CHIP_RV740: chip_name = "RV730"; break;
++ case CHIP_RV710: chip_name = "RV710"; break;
++ default: BUG();
++ }
++
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV770) {
++ pfp_req_size = R700_PFP_UCODE_SIZE * 4;
++ me_req_size = R700_PM4_UCODE_SIZE * 4;
++ } else {
++ pfp_req_size = PFP_UCODE_SIZE * 4;
++ me_req_size = PM4_UCODE_SIZE * 12;
++ }
++
++ DRM_INFO("Loading %s CP Microcode\n", chip_name);
++
++ snprintf(fw_name, sizeof(fw_name), "radeon/%s_pfp.bin", chip_name);
++ err = request_firmware(&dev_priv->pfp_fw, fw_name, &pdev->dev);
++ if (err)
++ goto out;
++ if (dev_priv->pfp_fw->size != pfp_req_size) {
++ printk(KERN_ERR
++ "r600_cp: Bogus length %zu in firmware \"%s\"\n",
++ dev_priv->pfp_fw->size, fw_name);
++ err = -EINVAL;
++ goto out;
++ }
++
++ snprintf(fw_name, sizeof(fw_name), "radeon/%s_me.bin", chip_name);
++ err = request_firmware(&dev_priv->me_fw, fw_name, &pdev->dev);
++ if (err)
++ goto out;
++ if (dev_priv->me_fw->size != me_req_size) {
++ printk(KERN_ERR
++ "r600_cp: Bogus length %zu in firmware \"%s\"\n",
++ dev_priv->me_fw->size, fw_name);
++ err = -EINVAL;
++ }
++out:
++ platform_device_unregister(pdev);
++
++ if (err) {
++ if (err != -EINVAL)
++ printk(KERN_ERR
++ "r600_cp: Failed to load firmware \"%s\"\n",
++ fw_name);
++ release_firmware(dev_priv->pfp_fw);
++ dev_priv->pfp_fw = NULL;
++ release_firmware(dev_priv->me_fw);
++ dev_priv->me_fw = NULL;
++ }
++ return err;
++}
++
+ static void r600_cp_load_microcode(drm_radeon_private_t *dev_priv)
+ {
++ const __be32 *fw_data;
+ int i;
+
++ if (!dev_priv->me_fw || !dev_priv->pfp_fw)
++ return;
++
+ r600_do_cp_stop(dev_priv);
+
+ RADEON_WRITE(R600_CP_RB_CNTL,
+@@ -292,115 +405,18 @@ static void r600_cp_load_microcode(drm_radeon_private_t *dev_priv)
+ DRM_UDELAY(15000);
+ RADEON_WRITE(R600_GRBM_SOFT_RESET, 0);
+
++ fw_data = (const __be32 *)dev_priv->me_fw->data;
+ RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
++ for (i = 0; i < PM4_UCODE_SIZE * 3; i++)
++ RADEON_WRITE(R600_CP_ME_RAM_DATA,
++ be32_to_cpup(fw_data++));
+
+- if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R600)) {
+- DRM_INFO("Loading R600 CP Microcode\n");
+- for (i = 0; i < PM4_UCODE_SIZE; i++) {
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- R600_cp_microcode[i][0]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- R600_cp_microcode[i][1]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- R600_cp_microcode[i][2]);
+- }
+-
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading R600 PFP Microcode\n");
+- for (i = 0; i < PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, R600_pfp_microcode[i]);
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV610)) {
+- DRM_INFO("Loading RV610 CP Microcode\n");
+- for (i = 0; i < PM4_UCODE_SIZE; i++) {
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV610_cp_microcode[i][0]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV610_cp_microcode[i][1]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV610_cp_microcode[i][2]);
+- }
+-
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV610 PFP Microcode\n");
+- for (i = 0; i < PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV610_pfp_microcode[i]);
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV630)) {
+- DRM_INFO("Loading RV630 CP Microcode\n");
+- for (i = 0; i < PM4_UCODE_SIZE; i++) {
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV630_cp_microcode[i][0]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV630_cp_microcode[i][1]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV630_cp_microcode[i][2]);
+- }
+-
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV630 PFP Microcode\n");
+- for (i = 0; i < PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV630_pfp_microcode[i]);
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV620)) {
+- DRM_INFO("Loading RV620 CP Microcode\n");
+- for (i = 0; i < PM4_UCODE_SIZE; i++) {
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV620_cp_microcode[i][0]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV620_cp_microcode[i][1]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV620_cp_microcode[i][2]);
+- }
+-
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV620 PFP Microcode\n");
+- for (i = 0; i < PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV620_pfp_microcode[i]);
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV635)) {
+- DRM_INFO("Loading RV635 CP Microcode\n");
+- for (i = 0; i < PM4_UCODE_SIZE; i++) {
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV635_cp_microcode[i][0]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV635_cp_microcode[i][1]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV635_cp_microcode[i][2]);
+- }
+-
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV635 PFP Microcode\n");
+- for (i = 0; i < PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV635_pfp_microcode[i]);
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV670)) {
+- DRM_INFO("Loading RV670 CP Microcode\n");
+- for (i = 0; i < PM4_UCODE_SIZE; i++) {
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV670_cp_microcode[i][0]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV670_cp_microcode[i][1]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RV670_cp_microcode[i][2]);
+- }
+-
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV670 PFP Microcode\n");
+- for (i = 0; i < PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV670_pfp_microcode[i]);
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS780) ||
+- ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS880)) {
+- DRM_INFO("Loading RS780/RS880 CP Microcode\n");
+- for (i = 0; i < PM4_UCODE_SIZE; i++) {
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RS780_cp_microcode[i][0]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RS780_cp_microcode[i][1]);
+- RADEON_WRITE(R600_CP_ME_RAM_DATA,
+- RS780_cp_microcode[i][2]);
+- }
++ fw_data = (const __be32 *)dev_priv->pfp_fw->data;
++ RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
++ for (i = 0; i < PFP_UCODE_SIZE; i++)
++ RADEON_WRITE(R600_CP_PFP_UCODE_DATA,
++ be32_to_cpup(fw_data++));
+
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RS780/RS880 PFP Microcode\n");
+- for (i = 0; i < PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RS780_pfp_microcode[i]);
+- }
+ RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+ RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+ RADEON_WRITE(R600_CP_ME_RAM_RADDR, 0);
+@@ -459,11 +475,14 @@ static void r700_vm_init(struct drm_device *dev)
+ r600_vm_flush_gart_range(dev);
+ }
+
+-/* load r600 microcode */
+ static void r700_cp_load_microcode(drm_radeon_private_t *dev_priv)
+ {
++ const __be32 *fw_data;
+ int i;
+
++ if (!dev_priv->me_fw || !dev_priv->pfp_fw)
++ return;
++
+ r600_do_cp_stop(dev_priv);
+
+ RADEON_WRITE(R600_CP_RB_CNTL,
+@@ -476,48 +495,18 @@ static void r700_cp_load_microcode(drm_radeon_private_t *dev_priv)
+ DRM_UDELAY(15000);
+ RADEON_WRITE(R600_GRBM_SOFT_RESET, 0);
+
++ fw_data = (const __be32 *)dev_priv->pfp_fw->data;
++ RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
++ for (i = 0; i < R700_PFP_UCODE_SIZE; i++)
++ RADEON_WRITE(R600_CP_PFP_UCODE_DATA, be32_to_cpup(fw_data++));
++ RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+
+- if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV770)) {
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV770/RV790 PFP Microcode\n");
+- for (i = 0; i < R700_PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV770_pfp_microcode[i]);
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+-
+- RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+- DRM_INFO("Loading RV770/RV790 CP Microcode\n");
+- for (i = 0; i < R700_PM4_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_ME_RAM_DATA, RV770_cp_microcode[i]);
+- RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+-
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV730) ||
+- ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV740)) {
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV730/RV740 PFP Microcode\n");
+- for (i = 0; i < R700_PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV730_pfp_microcode[i]);
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+-
+- RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+- DRM_INFO("Loading RV730/RV740 CP Microcode\n");
+- for (i = 0; i < R700_PM4_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_ME_RAM_DATA, RV730_cp_microcode[i]);
+- RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+-
+- } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV710)) {
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+- DRM_INFO("Loading RV710 PFP Microcode\n");
+- for (i = 0; i < R700_PFP_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_PFP_UCODE_DATA, RV710_pfp_microcode[i]);
+- RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+-
+- RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+- DRM_INFO("Loading RV710 CP Microcode\n");
+- for (i = 0; i < R700_PM4_UCODE_SIZE; i++)
+- RADEON_WRITE(R600_CP_ME_RAM_DATA, RV710_cp_microcode[i]);
+- RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
++ fw_data = (const __be32 *)dev_priv->me_fw->data;
++ RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
++ for (i = 0; i < R700_PM4_UCODE_SIZE; i++)
++ RADEON_WRITE(R600_CP_ME_RAM_DATA, be32_to_cpup(fw_data++));
++ RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+
+- }
+ RADEON_WRITE(R600_CP_PFP_UCODE_ADDR, 0);
+ RADEON_WRITE(R600_CP_ME_RAM_WADDR, 0);
+ RADEON_WRITE(R600_CP_ME_RAM_RADDR, 0);
+@@ -1874,6 +1863,8 @@ int r600_do_init_cp(struct drm_device *dev, drm_radeon_init_t *init,
+
+ DRM_DEBUG("\n");
+
++ mutex_init(&dev_priv->cs_mutex);
++ r600_cs_legacy_init();
+ /* if we require new memory map but we don't have it fail */
+ if ((dev_priv->flags & RADEON_NEW_MEMMAP) && !dev_priv->new_memmap) {
+ DRM_ERROR("Cannot initialise DRM on this card\nThis card requires a new X.org DDX for 3D\n");
+@@ -1905,7 +1896,7 @@ int r600_do_init_cp(struct drm_device *dev, drm_radeon_init_t *init,
+ /* Enable vblank on CRTC1 for older X servers
+ */
+ dev_priv->vblank_crtc = DRM_RADEON_VBLANK_CRTC1;
+-
++ dev_priv->do_boxes = 0;
+ dev_priv->cp_mode = init->cp_mode;
+
+ /* We don't support anything other than bus-mastering ring mode,
+@@ -1991,11 +1982,11 @@ int r600_do_init_cp(struct drm_device *dev, drm_radeon_init_t *init,
+ } else
+ #endif
+ {
+- dev_priv->cp_ring->handle = (void *)dev_priv->cp_ring->offset;
++ dev_priv->cp_ring->handle = (void *)(unsigned long)dev_priv->cp_ring->offset;
+ dev_priv->ring_rptr->handle =
+- (void *)dev_priv->ring_rptr->offset;
++ (void *)(unsigned long)dev_priv->ring_rptr->offset;
+ dev->agp_buffer_map->handle =
+- (void *)dev->agp_buffer_map->offset;
++ (void *)(unsigned long)dev->agp_buffer_map->offset;
+
+ DRM_DEBUG("dev_priv->cp_ring->handle %p\n",
+ dev_priv->cp_ring->handle);
+@@ -2147,6 +2138,14 @@ int r600_do_init_cp(struct drm_device *dev, drm_radeon_init_t *init,
+ r600_vm_init(dev);
+ }
+
++ if (!dev_priv->me_fw || !dev_priv->pfp_fw) {
++ int err = r600_cp_init_microcode(dev_priv);
++ if (err) {
++ DRM_ERROR("Failed to load firmware!\n");
++ r600_do_cleanup_cp(dev);
++ return err;
++ }
++ }
+ if (((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RV770))
+ r700_cp_load_microcode(dev_priv);
+ else
+@@ -2291,3 +2290,239 @@ int r600_cp_dispatch_indirect(struct drm_device *dev,
+
+ return 0;
+ }
++
++void r600_cp_dispatch_swap(struct drm_device *dev, struct drm_file *file_priv)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ struct drm_master *master = file_priv->master;
++ struct drm_radeon_master_private *master_priv = master->driver_priv;
++ drm_radeon_sarea_t *sarea_priv = master_priv->sarea_priv;
++ int nbox = sarea_priv->nbox;
++ struct drm_clip_rect *pbox = sarea_priv->boxes;
++ int i, cpp, src_pitch, dst_pitch;
++ uint64_t src, dst;
++ RING_LOCALS;
++ DRM_DEBUG("\n");
++
++ if (dev_priv->color_fmt == RADEON_COLOR_FORMAT_ARGB8888)
++ cpp = 4;
++ else
++ cpp = 2;
++
++ if (sarea_priv->pfCurrentPage == 0) {
++ src_pitch = dev_priv->back_pitch;
++ dst_pitch = dev_priv->front_pitch;
++ src = dev_priv->back_offset + dev_priv->fb_location;
++ dst = dev_priv->front_offset + dev_priv->fb_location;
++ } else {
++ src_pitch = dev_priv->front_pitch;
++ dst_pitch = dev_priv->back_pitch;
++ src = dev_priv->front_offset + dev_priv->fb_location;
++ dst = dev_priv->back_offset + dev_priv->fb_location;
++ }
++
++ if (r600_prepare_blit_copy(dev, file_priv)) {
++ DRM_ERROR("unable to allocate vertex buffer for swap buffer\n");
++ return;
++ }
++ for (i = 0; i < nbox; i++) {
++ int x = pbox[i].x1;
++ int y = pbox[i].y1;
++ int w = pbox[i].x2 - x;
++ int h = pbox[i].y2 - y;
++
++ DRM_DEBUG("%d,%d-%d,%d\n", x, y, w, h);
++
++ r600_blit_swap(dev,
++ src, dst,
++ x, y, x, y, w, h,
++ src_pitch, dst_pitch, cpp);
++ }
++ r600_done_blit_copy(dev);
++
++ /* Increment the frame counter. The client-side 3D driver must
++ * throttle the framerate by waiting for this value before
++ * performing the swapbuffer ioctl.
++ */
++ sarea_priv->last_frame++;
++
++ BEGIN_RING(3);
++ R600_FRAME_AGE(sarea_priv->last_frame);
++ ADVANCE_RING();
++}
++
++int r600_cp_dispatch_texture(struct drm_device *dev,
++ struct drm_file *file_priv,
++ drm_radeon_texture_t *tex,
++ drm_radeon_tex_image_t *image)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++ struct drm_buf *buf;
++ u32 *buffer;
++ const u8 __user *data;
++ int size, pass_size;
++ u64 src_offset, dst_offset;
++
++ if (!radeon_check_offset(dev_priv, tex->offset)) {
++ DRM_ERROR("Invalid destination offset\n");
++ return -EINVAL;
++ }
++
++ /* this might fail for zero-sized uploads - are those illegal? */
++ if (!radeon_check_offset(dev_priv, tex->offset + tex->height * tex->pitch - 1)) {
++ DRM_ERROR("Invalid final destination offset\n");
++ return -EINVAL;
++ }
++
++ size = tex->height * tex->pitch;
++
++ if (size == 0)
++ return 0;
++
++ dst_offset = tex->offset;
++
++ if (r600_prepare_blit_copy(dev, file_priv)) {
++ DRM_ERROR("unable to allocate vertex buffer for swap buffer\n");
++ return -EAGAIN;
++ }
++ do {
++ data = (const u8 __user *)image->data;
++ pass_size = size;
++
++ buf = radeon_freelist_get(dev);
++ if (!buf) {
++ DRM_DEBUG("EAGAIN\n");
++ if (DRM_COPY_TO_USER(tex->image, image, sizeof(*image)))
++ return -EFAULT;
++ return -EAGAIN;
++ }
++
++ if (pass_size > buf->total)
++ pass_size = buf->total;
++
++ /* Dispatch the indirect buffer.
++ */
++ buffer =
++ (u32 *) ((char *)dev->agp_buffer_map->handle + buf->offset);
++
++ if (DRM_COPY_FROM_USER(buffer, data, pass_size)) {
++ DRM_ERROR("EFAULT on pad, %d bytes\n", pass_size);
++ return -EFAULT;
++ }
++
++ buf->file_priv = file_priv;
++ buf->used = pass_size;
++ src_offset = dev_priv->gart_buffers_offset + buf->offset;
++
++ r600_blit_copy(dev, src_offset, dst_offset, pass_size);
++
++ radeon_cp_discard_buffer(dev, file_priv->master, buf);
++
++ /* Update the input parameters for next time */
++ image->data = (const u8 __user *)image->data + pass_size;
++ dst_offset += pass_size;
++ size -= pass_size;
++ } while (size > 0);
++ r600_done_blit_copy(dev);
++
++ return 0;
++}
++
++/*
++ * Legacy cs ioctl
++ */
++static u32 radeon_cs_id_get(struct drm_radeon_private *radeon)
++{
++ /* FIXME: check if wrap affect last reported wrap & sequence */
++ radeon->cs_id_scnt = (radeon->cs_id_scnt + 1) & 0x00FFFFFF;
++ if (!radeon->cs_id_scnt) {
++ /* increment wrap counter */
++ radeon->cs_id_wcnt += 0x01000000;
++ /* valid sequence counter start at 1 */
++ radeon->cs_id_scnt = 1;
++ }
++ return (radeon->cs_id_scnt | radeon->cs_id_wcnt);
++}
++
++static void r600_cs_id_emit(drm_radeon_private_t *dev_priv, u32 *id)
++{
++ RING_LOCALS;
++
++ *id = radeon_cs_id_get(dev_priv);
++
++ /* SCRATCH 2 */
++ BEGIN_RING(3);
++ R600_CLEAR_AGE(*id);
++ ADVANCE_RING();
++ COMMIT_RING();
++}
++
++static int r600_ib_get(struct drm_device *dev,
++ struct drm_file *fpriv,
++ struct drm_buf **buffer)
++{
++ struct drm_buf *buf;
++
++ *buffer = NULL;
++ buf = radeon_freelist_get(dev);
++ if (!buf) {
++ return -EBUSY;
++ }
++ buf->file_priv = fpriv;
++ *buffer = buf;
++ return 0;
++}
++
++static void r600_ib_free(struct drm_device *dev, struct drm_buf *buf,
++ struct drm_file *fpriv, int l, int r)
++{
++ drm_radeon_private_t *dev_priv = dev->dev_private;
++
++ if (buf) {
++ if (!r)
++ r600_cp_dispatch_indirect(dev, buf, 0, l * 4);
++ radeon_cp_discard_buffer(dev, fpriv->master, buf);
++ COMMIT_RING();
++ }
++}
++
++int r600_cs_legacy_ioctl(struct drm_device *dev, void *data, struct drm_file *fpriv)
++{
++ struct drm_radeon_private *dev_priv = dev->dev_private;
++ struct drm_radeon_cs *cs = data;
++ struct drm_buf *buf;
++ unsigned family;
++ int l, r = 0;
++ u32 *ib, cs_id = 0;
++
++ if (dev_priv == NULL) {
++ DRM_ERROR("called with no initialization\n");
++ return -EINVAL;
++ }
++ family = dev_priv->flags & RADEON_FAMILY_MASK;
++ if (family < CHIP_R600) {
++ DRM_ERROR("cs ioctl valid only for R6XX & R7XX in legacy mode\n");
++ return -EINVAL;
++ }
++ mutex_lock(&dev_priv->cs_mutex);
++ /* get ib */
++ r = r600_ib_get(dev, fpriv, &buf);
++ if (r) {
++ DRM_ERROR("ib_get failed\n");
++ goto out;
++ }
++ ib = dev->agp_buffer_map->handle + buf->offset;
++ /* now parse command stream */
++ r = r600_cs_legacy(dev, data, fpriv, family, ib, &l);
++ if (r) {
++ goto out;
++ }
++
++out:
++ r600_ib_free(dev, buf, fpriv, l, r);
++ /* emit cs id sequence */
++ r600_cs_id_emit(dev_priv, &cs_id);
++ cs->cs_id = cs_id;
++ mutex_unlock(&dev_priv->cs_mutex);
++ return r;
++}
+diff --git a/drivers/gpu/drm/radeon/r600_cs.c b/drivers/gpu/drm/radeon/r600_cs.c
+new file mode 100644
+index 0000000..d28970d
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r600_cs.c
+@@ -0,0 +1,783 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#include "drmP.h"
++#include "radeon.h"
++#include "r600d.h"
++
++static int r600_cs_packet_next_reloc_mm(struct radeon_cs_parser *p,
++ struct radeon_cs_reloc **cs_reloc);
++static int r600_cs_packet_next_reloc_nomm(struct radeon_cs_parser *p,
++ struct radeon_cs_reloc **cs_reloc);
++typedef int (*next_reloc_t)(struct radeon_cs_parser*, struct radeon_cs_reloc**);
++static next_reloc_t r600_cs_packet_next_reloc = &r600_cs_packet_next_reloc_mm;
++
++/**
++ * r600_cs_packet_parse() - parse cp packet and point ib index to next packet
++ * @parser: parser structure holding parsing context.
++ * @pkt: where to store packet informations
++ *
++ * Assume that chunk_ib_index is properly set. Will return -EINVAL
++ * if packet is bigger than remaining ib size. or if packets is unknown.
++ **/
++int r600_cs_packet_parse(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt,
++ unsigned idx)
++{
++ struct radeon_cs_chunk *ib_chunk = &p->chunks[p->chunk_ib_idx];
++ uint32_t header;
++
++ if (idx >= ib_chunk->length_dw) {
++ DRM_ERROR("Can not parse packet at %d after CS end %d !\n",
++ idx, ib_chunk->length_dw);
++ return -EINVAL;
++ }
++ header = radeon_get_ib_value(p, idx);
++ pkt->idx = idx;
++ pkt->type = CP_PACKET_GET_TYPE(header);
++ pkt->count = CP_PACKET_GET_COUNT(header);
++ pkt->one_reg_wr = 0;
++ switch (pkt->type) {
++ case PACKET_TYPE0:
++ pkt->reg = CP_PACKET0_GET_REG(header);
++ break;
++ case PACKET_TYPE3:
++ pkt->opcode = CP_PACKET3_GET_OPCODE(header);
++ break;
++ case PACKET_TYPE2:
++ pkt->count = -1;
++ break;
++ default:
++ DRM_ERROR("Unknown packet type %d at %d !\n", pkt->type, idx);
++ return -EINVAL;
++ }
++ if ((pkt->count + 1 + pkt->idx) >= ib_chunk->length_dw) {
++ DRM_ERROR("Packet (%d:%d:%d) end after CS buffer (%d) !\n",
++ pkt->idx, pkt->type, pkt->count, ib_chunk->length_dw);
++ return -EINVAL;
++ }
++ return 0;
++}
++
++/**
++ * r600_cs_packet_next_reloc_mm() - parse next packet which should be reloc packet3
++ * @parser: parser structure holding parsing context.
++ * @data: pointer to relocation data
++ * @offset_start: starting offset
++ * @offset_mask: offset mask (to align start offset on)
++ * @reloc: reloc informations
++ *
++ * Check next packet is relocation packet3, do bo validation and compute
++ * GPU offset using the provided start.
++ **/
++static int r600_cs_packet_next_reloc_mm(struct radeon_cs_parser *p,
++ struct radeon_cs_reloc **cs_reloc)
++{
++ struct radeon_cs_chunk *relocs_chunk;
++ struct radeon_cs_packet p3reloc;
++ unsigned idx;
++ int r;
++
++ if (p->chunk_relocs_idx == -1) {
++ DRM_ERROR("No relocation chunk !\n");
++ return -EINVAL;
++ }
++ *cs_reloc = NULL;
++ relocs_chunk = &p->chunks[p->chunk_relocs_idx];
++ r = r600_cs_packet_parse(p, &p3reloc, p->idx);
++ if (r) {
++ return r;
++ }
++ p->idx += p3reloc.count + 2;
++ if (p3reloc.type != PACKET_TYPE3 || p3reloc.opcode != PACKET3_NOP) {
++ DRM_ERROR("No packet3 for relocation for packet at %d.\n",
++ p3reloc.idx);
++ return -EINVAL;
++ }
++ idx = radeon_get_ib_value(p, p3reloc.idx + 1);
++ if (idx >= relocs_chunk->length_dw) {
++ DRM_ERROR("Relocs at %d after relocations chunk end %d !\n",
++ idx, relocs_chunk->length_dw);
++ return -EINVAL;
++ }
++ /* FIXME: we assume reloc size is 4 dwords */
++ *cs_reloc = p->relocs_ptr[(idx / 4)];
++ return 0;
++}
++
++/**
++ * r600_cs_packet_next_reloc_nomm() - parse next packet which should be reloc packet3
++ * @parser: parser structure holding parsing context.
++ * @data: pointer to relocation data
++ * @offset_start: starting offset
++ * @offset_mask: offset mask (to align start offset on)
++ * @reloc: reloc informations
++ *
++ * Check next packet is relocation packet3, do bo validation and compute
++ * GPU offset using the provided start.
++ **/
++static int r600_cs_packet_next_reloc_nomm(struct radeon_cs_parser *p,
++ struct radeon_cs_reloc **cs_reloc)
++{
++ struct radeon_cs_chunk *relocs_chunk;
++ struct radeon_cs_packet p3reloc;
++ unsigned idx;
++ int r;
++
++ if (p->chunk_relocs_idx == -1) {
++ DRM_ERROR("No relocation chunk !\n");
++ return -EINVAL;
++ }
++ *cs_reloc = NULL;
++ relocs_chunk = &p->chunks[p->chunk_relocs_idx];
++ r = r600_cs_packet_parse(p, &p3reloc, p->idx);
++ if (r) {
++ return r;
++ }
++ p->idx += p3reloc.count + 2;
++ if (p3reloc.type != PACKET_TYPE3 || p3reloc.opcode != PACKET3_NOP) {
++ DRM_ERROR("No packet3 for relocation for packet at %d.\n",
++ p3reloc.idx);
++ return -EINVAL;
++ }
++ idx = radeon_get_ib_value(p, p3reloc.idx + 1);
++ if (idx >= relocs_chunk->length_dw) {
++ DRM_ERROR("Relocs at %d after relocations chunk end %d !\n",
++ idx, relocs_chunk->length_dw);
++ return -EINVAL;
++ }
++ *cs_reloc = &p->relocs[0];
++ (*cs_reloc)->lobj.gpu_offset = (u64)relocs_chunk->kdata[idx + 3] << 32;
++ (*cs_reloc)->lobj.gpu_offset |= relocs_chunk->kdata[idx + 0];
++ return 0;
++}
++
++/**
++ * r600_cs_packet_next_vline() - parse userspace VLINE packet
++ * @parser: parser structure holding parsing context.
++ *
++ * Userspace sends a special sequence for VLINE waits.
++ * PACKET0 - VLINE_START_END + value
++ * PACKET3 - WAIT_REG_MEM poll vline status reg
++ * RELOC (P3) - crtc_id in reloc.
++ *
++ * This function parses this and relocates the VLINE START END
++ * and WAIT_REG_MEM packets to the correct crtc.
++ * It also detects a switched off crtc and nulls out the
++ * wait in that case.
++ */
++static int r600_cs_packet_parse_vline(struct radeon_cs_parser *p)
++{
++ struct drm_mode_object *obj;
++ struct drm_crtc *crtc;
++ struct radeon_crtc *radeon_crtc;
++ struct radeon_cs_packet p3reloc, wait_reg_mem;
++ int crtc_id;
++ int r;
++ uint32_t header, h_idx, reg, wait_reg_mem_info;
++ volatile uint32_t *ib;
++
++ ib = p->ib->ptr;
++
++ /* parse the WAIT_REG_MEM */
++ r = r600_cs_packet_parse(p, &wait_reg_mem, p->idx);
++ if (r)
++ return r;
++
++ /* check its a WAIT_REG_MEM */
++ if (wait_reg_mem.type != PACKET_TYPE3 ||
++ wait_reg_mem.opcode != PACKET3_WAIT_REG_MEM) {
++ DRM_ERROR("vline wait missing WAIT_REG_MEM segment\n");
++ r = -EINVAL;
++ return r;
++ }
++
++ wait_reg_mem_info = radeon_get_ib_value(p, wait_reg_mem.idx + 1);
++ /* bit 4 is reg (0) or mem (1) */
++ if (wait_reg_mem_info & 0x10) {
++ DRM_ERROR("vline WAIT_REG_MEM waiting on MEM rather than REG\n");
++ r = -EINVAL;
++ return r;
++ }
++ /* waiting for value to be equal */
++ if ((wait_reg_mem_info & 0x7) != 0x3) {
++ DRM_ERROR("vline WAIT_REG_MEM function not equal\n");
++ r = -EINVAL;
++ return r;
++ }
++ if ((radeon_get_ib_value(p, wait_reg_mem.idx + 2) << 2) != AVIVO_D1MODE_VLINE_STATUS) {
++ DRM_ERROR("vline WAIT_REG_MEM bad reg\n");
++ r = -EINVAL;
++ return r;
++ }
++
++ if (radeon_get_ib_value(p, wait_reg_mem.idx + 5) != AVIVO_D1MODE_VLINE_STAT) {
++ DRM_ERROR("vline WAIT_REG_MEM bad bit mask\n");
++ r = -EINVAL;
++ return r;
++ }
++
++ /* jump over the NOP */
++ r = r600_cs_packet_parse(p, &p3reloc, p->idx + wait_reg_mem.count + 2);
++ if (r)
++ return r;
++
++ h_idx = p->idx - 2;
++ p->idx += wait_reg_mem.count + 2;
++ p->idx += p3reloc.count + 2;
++
++ header = radeon_get_ib_value(p, h_idx);
++ crtc_id = radeon_get_ib_value(p, h_idx + 2 + 7 + 1);
++ reg = header >> 2;
++ mutex_lock(&p->rdev->ddev->mode_config.mutex);
++ obj = drm_mode_object_find(p->rdev->ddev, crtc_id, DRM_MODE_OBJECT_CRTC);
++ if (!obj) {
++ DRM_ERROR("cannot find crtc %d\n", crtc_id);
++ r = -EINVAL;
++ goto out;
++ }
++ crtc = obj_to_crtc(obj);
++ radeon_crtc = to_radeon_crtc(crtc);
++ crtc_id = radeon_crtc->crtc_id;
++
++ if (!crtc->enabled) {
++ /* if the CRTC isn't enabled - we need to nop out the WAIT_REG_MEM */
++ ib[h_idx + 2] = PACKET2(0);
++ ib[h_idx + 3] = PACKET2(0);
++ ib[h_idx + 4] = PACKET2(0);
++ ib[h_idx + 5] = PACKET2(0);
++ ib[h_idx + 6] = PACKET2(0);
++ ib[h_idx + 7] = PACKET2(0);
++ ib[h_idx + 8] = PACKET2(0);
++ } else if (crtc_id == 1) {
++ switch (reg) {
++ case AVIVO_D1MODE_VLINE_START_END:
++ header &= ~R600_CP_PACKET0_REG_MASK;
++ header |= AVIVO_D2MODE_VLINE_START_END >> 2;
++ break;
++ default:
++ DRM_ERROR("unknown crtc reloc\n");
++ r = -EINVAL;
++ goto out;
++ }
++ ib[h_idx] = header;
++ ib[h_idx + 4] = AVIVO_D2MODE_VLINE_STATUS >> 2;
++ }
++out:
++ mutex_unlock(&p->rdev->ddev->mode_config.mutex);
++ return r;
++}
++
++static int r600_packet0_check(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt,
++ unsigned idx, unsigned reg)
++{
++ int r;
++
++ switch (reg) {
++ case AVIVO_D1MODE_VLINE_START_END:
++ r = r600_cs_packet_parse_vline(p);
++ if (r) {
++ DRM_ERROR("No reloc for ib[%d]=0x%04X\n",
++ idx, reg);
++ return r;
++ }
++ break;
++ default:
++ printk(KERN_ERR "Forbidden register 0x%04X in cs at %d\n",
++ reg, idx);
++ return -EINVAL;
++ }
++ return 0;
++}
++
++static int r600_cs_parse_packet0(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt)
++{
++ unsigned reg, i;
++ unsigned idx;
++ int r;
++
++ idx = pkt->idx + 1;
++ reg = pkt->reg;
++ for (i = 0; i <= pkt->count; i++, idx++, reg += 4) {
++ r = r600_packet0_check(p, pkt, idx, reg);
++ if (r) {
++ return r;
++ }
++ }
++ return 0;
++}
++
++static int r600_packet3_check(struct radeon_cs_parser *p,
++ struct radeon_cs_packet *pkt)
++{
++ struct radeon_cs_reloc *reloc;
++ volatile u32 *ib;
++ unsigned idx;
++ unsigned i;
++ unsigned start_reg, end_reg, reg;
++ int r;
++ u32 idx_value;
++
++ ib = p->ib->ptr;
++ idx = pkt->idx + 1;
++ idx_value = radeon_get_ib_value(p, idx);
++
++ switch (pkt->opcode) {
++ case PACKET3_START_3D_CMDBUF:
++ if (p->family >= CHIP_RV770 || pkt->count) {
++ DRM_ERROR("bad START_3D\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_CONTEXT_CONTROL:
++ if (pkt->count != 1) {
++ DRM_ERROR("bad CONTEXT_CONTROL\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_INDEX_TYPE:
++ case PACKET3_NUM_INSTANCES:
++ if (pkt->count) {
++ DRM_ERROR("bad INDEX_TYPE/NUM_INSTANCES\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_DRAW_INDEX:
++ if (pkt->count != 3) {
++ DRM_ERROR("bad DRAW_INDEX\n");
++ return -EINVAL;
++ }
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad DRAW_INDEX\n");
++ return -EINVAL;
++ }
++ ib[idx+0] = idx_value + (u32)(reloc->lobj.gpu_offset & 0xffffffff);
++ ib[idx+1] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
++ break;
++ case PACKET3_DRAW_INDEX_AUTO:
++ if (pkt->count != 1) {
++ DRM_ERROR("bad DRAW_INDEX_AUTO\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_DRAW_INDEX_IMMD_BE:
++ case PACKET3_DRAW_INDEX_IMMD:
++ if (pkt->count < 2) {
++ DRM_ERROR("bad DRAW_INDEX_IMMD\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_WAIT_REG_MEM:
++ if (pkt->count != 5) {
++ DRM_ERROR("bad WAIT_REG_MEM\n");
++ return -EINVAL;
++ }
++ /* bit 4 is reg (0) or mem (1) */
++ if (idx_value & 0x10) {
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad WAIT_REG_MEM\n");
++ return -EINVAL;
++ }
++ ib[idx+1] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
++ ib[idx+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
++ }
++ break;
++ case PACKET3_SURFACE_SYNC:
++ if (pkt->count != 3) {
++ DRM_ERROR("bad SURFACE_SYNC\n");
++ return -EINVAL;
++ }
++ /* 0xffffffff/0x0 is flush all cache flag */
++ if (radeon_get_ib_value(p, idx + 1) != 0xffffffff ||
++ radeon_get_ib_value(p, idx + 2) != 0) {
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad SURFACE_SYNC\n");
++ return -EINVAL;
++ }
++ ib[idx+2] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
++ }
++ break;
++ case PACKET3_EVENT_WRITE:
++ if (pkt->count != 2 && pkt->count != 0) {
++ DRM_ERROR("bad EVENT_WRITE\n");
++ return -EINVAL;
++ }
++ if (pkt->count) {
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad EVENT_WRITE\n");
++ return -EINVAL;
++ }
++ ib[idx+1] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
++ ib[idx+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
++ }
++ break;
++ case PACKET3_EVENT_WRITE_EOP:
++ if (pkt->count != 4) {
++ DRM_ERROR("bad EVENT_WRITE_EOP\n");
++ return -EINVAL;
++ }
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad EVENT_WRITE\n");
++ return -EINVAL;
++ }
++ ib[idx+1] += (u32)(reloc->lobj.gpu_offset & 0xffffffff);
++ ib[idx+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
++ break;
++ case PACKET3_SET_CONFIG_REG:
++ start_reg = (idx_value << 2) + PACKET3_SET_CONFIG_REG_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_CONFIG_REG_OFFSET) ||
++ (start_reg >= PACKET3_SET_CONFIG_REG_END) ||
++ (end_reg >= PACKET3_SET_CONFIG_REG_END)) {
++ DRM_ERROR("bad PACKET3_SET_CONFIG_REG\n");
++ return -EINVAL;
++ }
++ for (i = 0; i < pkt->count; i++) {
++ reg = start_reg + (4 * i);
++ switch (reg) {
++ case CP_COHER_BASE:
++ /* use PACKET3_SURFACE_SYNC */
++ return -EINVAL;
++ default:
++ break;
++ }
++ }
++ break;
++ case PACKET3_SET_CONTEXT_REG:
++ start_reg = (idx_value << 2) + PACKET3_SET_CONTEXT_REG_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_CONTEXT_REG_OFFSET) ||
++ (start_reg >= PACKET3_SET_CONTEXT_REG_END) ||
++ (end_reg >= PACKET3_SET_CONTEXT_REG_END)) {
++ DRM_ERROR("bad PACKET3_SET_CONTEXT_REG\n");
++ return -EINVAL;
++ }
++ for (i = 0; i < pkt->count; i++) {
++ reg = start_reg + (4 * i);
++ switch (reg) {
++ case DB_DEPTH_BASE:
++ case CB_COLOR0_BASE:
++ case CB_COLOR1_BASE:
++ case CB_COLOR2_BASE:
++ case CB_COLOR3_BASE:
++ case CB_COLOR4_BASE:
++ case CB_COLOR5_BASE:
++ case CB_COLOR6_BASE:
++ case CB_COLOR7_BASE:
++ case SQ_PGM_START_FS:
++ case SQ_PGM_START_ES:
++ case SQ_PGM_START_VS:
++ case SQ_PGM_START_GS:
++ case SQ_PGM_START_PS:
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad SET_CONTEXT_REG "
++ "0x%04X\n", reg);
++ return -EINVAL;
++ }
++ ib[idx+1+i] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
++ break;
++ case VGT_DMA_BASE:
++ case VGT_DMA_BASE_HI:
++ /* These should be handled by DRAW_INDEX packet 3 */
++ case VGT_STRMOUT_BASE_OFFSET_0:
++ case VGT_STRMOUT_BASE_OFFSET_1:
++ case VGT_STRMOUT_BASE_OFFSET_2:
++ case VGT_STRMOUT_BASE_OFFSET_3:
++ case VGT_STRMOUT_BASE_OFFSET_HI_0:
++ case VGT_STRMOUT_BASE_OFFSET_HI_1:
++ case VGT_STRMOUT_BASE_OFFSET_HI_2:
++ case VGT_STRMOUT_BASE_OFFSET_HI_3:
++ case VGT_STRMOUT_BUFFER_BASE_0:
++ case VGT_STRMOUT_BUFFER_BASE_1:
++ case VGT_STRMOUT_BUFFER_BASE_2:
++ case VGT_STRMOUT_BUFFER_BASE_3:
++ case VGT_STRMOUT_BUFFER_OFFSET_0:
++ case VGT_STRMOUT_BUFFER_OFFSET_1:
++ case VGT_STRMOUT_BUFFER_OFFSET_2:
++ case VGT_STRMOUT_BUFFER_OFFSET_3:
++ /* These should be handled by STRMOUT_BUFFER packet 3 */
++ DRM_ERROR("bad context reg: 0x%08x\n", reg);
++ return -EINVAL;
++ default:
++ break;
++ }
++ }
++ break;
++ case PACKET3_SET_RESOURCE:
++ if (pkt->count % 7) {
++ DRM_ERROR("bad SET_RESOURCE\n");
++ return -EINVAL;
++ }
++ start_reg = (idx_value << 2) + PACKET3_SET_RESOURCE_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_RESOURCE_OFFSET) ||
++ (start_reg >= PACKET3_SET_RESOURCE_END) ||
++ (end_reg >= PACKET3_SET_RESOURCE_END)) {
++ DRM_ERROR("bad SET_RESOURCE\n");
++ return -EINVAL;
++ }
++ for (i = 0; i < (pkt->count / 7); i++) {
++ switch (G__SQ_VTX_CONSTANT_TYPE(radeon_get_ib_value(p, idx+(i*7)+6+1))) {
++ case SQ_TEX_VTX_VALID_TEXTURE:
++ /* tex base */
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad SET_RESOURCE\n");
++ return -EINVAL;
++ }
++ ib[idx+1+(i*7)+2] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
++ /* tex mip base */
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad SET_RESOURCE\n");
++ return -EINVAL;
++ }
++ ib[idx+1+(i*7)+3] += (u32)((reloc->lobj.gpu_offset >> 8) & 0xffffffff);
++ break;
++ case SQ_TEX_VTX_VALID_BUFFER:
++ /* vtx base */
++ r = r600_cs_packet_next_reloc(p, &reloc);
++ if (r) {
++ DRM_ERROR("bad SET_RESOURCE\n");
++ return -EINVAL;
++ }
++ ib[idx+1+(i*7)+0] += (u32)((reloc->lobj.gpu_offset) & 0xffffffff);
++ ib[idx+1+(i*7)+2] += upper_32_bits(reloc->lobj.gpu_offset) & 0xff;
++ break;
++ case SQ_TEX_VTX_INVALID_TEXTURE:
++ case SQ_TEX_VTX_INVALID_BUFFER:
++ default:
++ DRM_ERROR("bad SET_RESOURCE\n");
++ return -EINVAL;
++ }
++ }
++ break;
++ case PACKET3_SET_ALU_CONST:
++ start_reg = (idx_value << 2) + PACKET3_SET_ALU_CONST_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_ALU_CONST_OFFSET) ||
++ (start_reg >= PACKET3_SET_ALU_CONST_END) ||
++ (end_reg >= PACKET3_SET_ALU_CONST_END)) {
++ DRM_ERROR("bad SET_ALU_CONST\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_SET_BOOL_CONST:
++ start_reg = (idx_value << 2) + PACKET3_SET_BOOL_CONST_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_BOOL_CONST_OFFSET) ||
++ (start_reg >= PACKET3_SET_BOOL_CONST_END) ||
++ (end_reg >= PACKET3_SET_BOOL_CONST_END)) {
++ DRM_ERROR("bad SET_BOOL_CONST\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_SET_LOOP_CONST:
++ start_reg = (idx_value << 2) + PACKET3_SET_LOOP_CONST_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_LOOP_CONST_OFFSET) ||
++ (start_reg >= PACKET3_SET_LOOP_CONST_END) ||
++ (end_reg >= PACKET3_SET_LOOP_CONST_END)) {
++ DRM_ERROR("bad SET_LOOP_CONST\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_SET_CTL_CONST:
++ start_reg = (idx_value << 2) + PACKET3_SET_CTL_CONST_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_CTL_CONST_OFFSET) ||
++ (start_reg >= PACKET3_SET_CTL_CONST_END) ||
++ (end_reg >= PACKET3_SET_CTL_CONST_END)) {
++ DRM_ERROR("bad SET_CTL_CONST\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_SET_SAMPLER:
++ if (pkt->count % 3) {
++ DRM_ERROR("bad SET_SAMPLER\n");
++ return -EINVAL;
++ }
++ start_reg = (idx_value << 2) + PACKET3_SET_SAMPLER_OFFSET;
++ end_reg = 4 * pkt->count + start_reg - 4;
++ if ((start_reg < PACKET3_SET_SAMPLER_OFFSET) ||
++ (start_reg >= PACKET3_SET_SAMPLER_END) ||
++ (end_reg >= PACKET3_SET_SAMPLER_END)) {
++ DRM_ERROR("bad SET_SAMPLER\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_SURFACE_BASE_UPDATE:
++ if (p->family >= CHIP_RV770 || p->family == CHIP_R600) {
++ DRM_ERROR("bad SURFACE_BASE_UPDATE\n");
++ return -EINVAL;
++ }
++ if (pkt->count) {
++ DRM_ERROR("bad SURFACE_BASE_UPDATE\n");
++ return -EINVAL;
++ }
++ break;
++ case PACKET3_NOP:
++ break;
++ default:
++ DRM_ERROR("Packet3 opcode %x not supported\n", pkt->opcode);
++ return -EINVAL;
++ }
++ return 0;
++}
++
++int r600_cs_parse(struct radeon_cs_parser *p)
++{
++ struct radeon_cs_packet pkt;
++ int r;
++
++ do {
++ r = r600_cs_packet_parse(p, &pkt, p->idx);
++ if (r) {
++ return r;
++ }
++ p->idx += pkt.count + 2;
++ switch (pkt.type) {
++ case PACKET_TYPE0:
++ r = r600_cs_parse_packet0(p, &pkt);
++ break;
++ case PACKET_TYPE2:
++ break;
++ case PACKET_TYPE3:
++ r = r600_packet3_check(p, &pkt);
++ break;
++ default:
++ DRM_ERROR("Unknown packet type %d !\n", pkt.type);
++ return -EINVAL;
++ }
++ if (r) {
++ return r;
++ }
++ } while (p->idx < p->chunks[p->chunk_ib_idx].length_dw);
++#if 0
++ for (r = 0; r < p->ib->length_dw; r++) {
++ printk(KERN_INFO "%05d 0x%08X\n", r, p->ib->ptr[r]);
++ mdelay(1);
++ }
++#endif
++ return 0;
++}
++
++static int r600_cs_parser_relocs_legacy(struct radeon_cs_parser *p)
++{
++ if (p->chunk_relocs_idx == -1) {
++ return 0;
++ }
++ p->relocs = kcalloc(1, sizeof(struct radeon_cs_reloc), GFP_KERNEL);
++ if (p->relocs == NULL) {
++ return -ENOMEM;
++ }
++ return 0;
++}
++
++/**
++ * cs_parser_fini() - clean parser states
++ * @parser: parser structure holding parsing context.
++ * @error: error number
++ *
++ * If error is set than unvalidate buffer, otherwise just free memory
++ * used by parsing context.
++ **/
++static void r600_cs_parser_fini(struct radeon_cs_parser *parser, int error)
++{
++ unsigned i;
++
++ kfree(parser->relocs);
++ for (i = 0; i < parser->nchunks; i++) {
++ kfree(parser->chunks[i].kdata);
++ kfree(parser->chunks[i].kpage[0]);
++ kfree(parser->chunks[i].kpage[1]);
++ }
++ kfree(parser->chunks);
++ kfree(parser->chunks_array);
++}
++
++int r600_cs_legacy(struct drm_device *dev, void *data, struct drm_file *filp,
++ unsigned family, u32 *ib, int *l)
++{
++ struct radeon_cs_parser parser;
++ struct radeon_cs_chunk *ib_chunk;
++ struct radeon_ib fake_ib;
++ int r;
++
++ /* initialize parser */
++ memset(&parser, 0, sizeof(struct radeon_cs_parser));
++ parser.filp = filp;
++ parser.rdev = NULL;
++ parser.family = family;
++ parser.ib = &fake_ib;
++ fake_ib.ptr = ib;
++ r = radeon_cs_parser_init(&parser, data);
++ if (r) {
++ DRM_ERROR("Failed to initialize parser !\n");
++ r600_cs_parser_fini(&parser, r);
++ return r;
++ }
++ r = r600_cs_parser_relocs_legacy(&parser);
++ if (r) {
++ DRM_ERROR("Failed to parse relocation !\n");
++ r600_cs_parser_fini(&parser, r);
++ return r;
++ }
++ /* Copy the packet into the IB, the parser will read from the
++ * input memory (cached) and write to the IB (which can be
++ * uncached). */
++ ib_chunk = &parser.chunks[parser.chunk_ib_idx];
++ parser.ib->length_dw = ib_chunk->length_dw;
++ *l = parser.ib->length_dw;
++ r = r600_cs_parse(&parser);
++ if (r) {
++ DRM_ERROR("Invalid command stream !\n");
++ r600_cs_parser_fini(&parser, r);
++ return r;
++ }
++ r = radeon_cs_finish_pages(&parser);
++ if (r) {
++ DRM_ERROR("Invalid command stream !\n");
++ r600_cs_parser_fini(&parser, r);
++ return r;
++ }
++ r600_cs_parser_fini(&parser, r);
++ return r;
++}
++
++void r600_cs_legacy_init(void)
++{
++ r600_cs_packet_next_reloc = &r600_cs_packet_next_reloc_nomm;
++}
+diff --git a/drivers/gpu/drm/radeon/r600_microcode.h b/drivers/gpu/drm/radeon/r600_microcode.h
+deleted file mode 100644
+index 778c8b4..0000000
+--- a/drivers/gpu/drm/radeon/r600_microcode.h
++++ /dev/null
+@@ -1,23297 +0,0 @@
+-/*
+- * Copyright 2008-2009 Advanced Micro Devices, Inc.
+- * All Rights Reserved.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice (including the next
+- * paragraph) shall be included in all copies or substantial portions of the
+- * Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+- *
+- */
+-
+-#ifndef R600_MICROCODE_H
+-#define R600_MICROCODE_H
+-
+-static const int ME_JUMP_TABLE_START = 1764;
+-static const int ME_JUMP_TABLE_END = 1792;
+-
+-#define PFP_UCODE_SIZE 576
+-#define PM4_UCODE_SIZE 1792
+-#define R700_PFP_UCODE_SIZE 848
+-#define R700_PM4_UCODE_SIZE 1360
+-
+-static const u32 R600_cp_microcode[][3] = {
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0000ffff, 0x00284621, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000000, 0x00e00000, 0x000 },
+- { 0x00010000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x614 },
+- { 0x00000000, 0x00600000, 0x5b2 },
+- { 0x00000000, 0x00600000, 0x5c5 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000f00, 0x00281622, 0x000 },
+- { 0x00000008, 0x00211625, 0x000 },
+- { 0x00000020, 0x00203625, 0x000 },
+- { 0x8d000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x002f0225, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x018 },
+- { 0x00412000, 0x00404811, 0x019 },
+- { 0x00422000, 0x00204811, 0x000 },
+- { 0x8e000000, 0x00204411, 0x000 },
+- { 0x00000031, 0x00204a2d, 0x000 },
+- { 0x90000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x0000000c, 0x00211622, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000019, 0x00211a22, 0x000 },
+- { 0x00000004, 0x00281a26, 0x000 },
+- { 0x00000000, 0x002914c5, 0x000 },
+- { 0x00000021, 0x00203625, 0x000 },
+- { 0x00000000, 0x003a1402, 0x000 },
+- { 0x00000016, 0x00211625, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x0000001d, 0x00200e2d, 0x000 },
+- { 0xfffffffc, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002914a3, 0x000 },
+- { 0x0000001d, 0x00203625, 0x000 },
+- { 0x00008000, 0x00280e22, 0x000 },
+- { 0x00000007, 0x00220e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x20000000, 0x00280e22, 0x000 },
+- { 0x00000006, 0x00210e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x00000000, 0x00220222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x038 },
+- { 0x00000000, 0x2ee00000, 0x035 },
+- { 0x00000000, 0x2ce00000, 0x037 },
+- { 0x00000000, 0x00400e2d, 0x039 },
+- { 0x00000008, 0x00200e2d, 0x000 },
+- { 0x00000009, 0x0040122d, 0x046 },
+- { 0x00000001, 0x00400e2d, 0x039 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x03e },
+- { 0x00000008, 0x00401c11, 0x041 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x0000000f, 0x00281e27, 0x000 },
+- { 0x00000003, 0x00221e27, 0x000 },
+- { 0x7fc00000, 0x00281a23, 0x000 },
+- { 0x00000014, 0x00211a26, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000008, 0x00221a26, 0x000 },
+- { 0x00000000, 0x00290cc7, 0x000 },
+- { 0x00000030, 0x00203624, 0x000 },
+- { 0x00007f00, 0x00281221, 0x000 },
+- { 0x00001400, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x04b },
+- { 0x00000001, 0x00290e23, 0x000 },
+- { 0x00000010, 0x00203623, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfff80000, 0x00294a23, 0x000 },
+- { 0x00000000, 0x003a2c02, 0x000 },
+- { 0x00000002, 0x00220e2b, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x00000011, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00294a23, 0x000 },
+- { 0x00000030, 0x00204a2d, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000032, 0x00200e2d, 0x000 },
+- { 0x060a0200, 0x00294a23, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x061 },
+- { 0x00000000, 0x2ee00000, 0x05f },
+- { 0x00000000, 0x2ce00000, 0x05e },
+- { 0x00000000, 0x00400e2d, 0x062 },
+- { 0x00000001, 0x00400e2d, 0x062 },
+- { 0x0000000a, 0x00200e2d, 0x000 },
+- { 0x0000000b, 0x0040122d, 0x06a },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x7fc00000, 0x00281623, 0x000 },
+- { 0x00000014, 0x00211625, 0x000 },
+- { 0x00000001, 0x00331625, 0x000 },
+- { 0x80000000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00290ca3, 0x000 },
+- { 0x3ffffc00, 0x00290e23, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x06d },
+- { 0x00000100, 0x00401c11, 0x070 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x000000f0, 0x00281e27, 0x000 },
+- { 0x00000004, 0x00221e27, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0xfffff0ff, 0x00281a30, 0x000 },
+- { 0x0000a028, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948e6, 0x000 },
+- { 0x0000a018, 0x00204411, 0x000 },
+- { 0x3fffffff, 0x00284a23, 0x000 },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x0000002d, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a3, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x080 },
+- { 0x0000002e, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a4, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x081 },
+- { 0x00000000, 0x00400000, 0x087 },
+- { 0x0000002d, 0x00203623, 0x000 },
+- { 0x0000002e, 0x00203624, 0x000 },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x087 },
+- { 0x00000000, 0x00600000, 0x5ed },
+- { 0x00000000, 0x00600000, 0x5e1 },
+- { 0x00000002, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x08a },
+- { 0x00000018, 0xc0403620, 0x090 },
+- { 0x00000000, 0x2ee00000, 0x08e },
+- { 0x00000000, 0x2ce00000, 0x08d },
+- { 0x00000002, 0x00400e2d, 0x08f },
+- { 0x00000003, 0x00400e2d, 0x08f },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000018, 0x00203623, 0x000 },
+- { 0x00000003, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x095 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x09d },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x2ee00000, 0x09b },
+- { 0x00000000, 0x2ce00000, 0x09a },
+- { 0x00000002, 0x00400e2d, 0x09c },
+- { 0x00000003, 0x00400e2d, 0x09c },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x003f0000, 0x00280e23, 0x000 },
+- { 0x00000010, 0x00210e23, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x0000001e, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a4 },
+- { 0x0000001c, 0xc0203620, 0x000 },
+- { 0x0000001f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a7 },
+- { 0x0000001b, 0xc0203620, 0x000 },
+- { 0x00000008, 0x00210e2b, 0x000 },
+- { 0x0000007f, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0db },
+- { 0x00000000, 0x27000000, 0x000 },
+- { 0x00000000, 0x00600000, 0x28c },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000000c, 0x00221e30, 0x000 },
+- { 0x99800000, 0x00204411, 0x000 },
+- { 0x00000004, 0x0020122d, 0x000 },
+- { 0x00000008, 0x00221224, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00291ce4, 0x000 },
+- { 0x00000000, 0x00604807, 0x128 },
+- { 0x9b000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x9c000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x0033146f, 0x000 },
+- { 0x00000001, 0x00333e23, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0x00203c05, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e007, 0x00204411, 0x000 },
+- { 0x0000000f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0c5 },
+- { 0x00f8ff08, 0x00204811, 0x000 },
+- { 0x98000000, 0x00404811, 0x0d6 },
+- { 0x000000f0, 0x00280e22, 0x000 },
+- { 0x000000a0, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0d4 },
+- { 0x00000013, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0cf },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0ce },
+- { 0x00003f00, 0x00400c11, 0x0d0 },
+- { 0x00001f00, 0x00400c11, 0x0d0 },
+- { 0x00000f00, 0x00200c11, 0x000 },
+- { 0x00380009, 0x00294a23, 0x000 },
+- { 0x3f000000, 0x00280e2b, 0x000 },
+- { 0x00000002, 0x00220e23, 0x000 },
+- { 0x00000007, 0x00494a23, 0x0d6 },
+- { 0x00380f09, 0x00204811, 0x000 },
+- { 0x68000007, 0x00204811, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000a202, 0x00204411, 0x000 },
+- { 0x00ff0000, 0x00284a22, 0x000 },
+- { 0x00000030, 0x00200e2d, 0x000 },
+- { 0x0000002e, 0x0020122d, 0x000 },
+- { 0x00000000, 0x002f0083, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0e3 },
+- { 0x00000000, 0x00600000, 0x5e7 },
+- { 0x00000000, 0x00400000, 0x0e4 },
+- { 0x00000000, 0x00600000, 0x5ea },
+- { 0x00000007, 0x0020222d, 0x000 },
+- { 0x00000005, 0x00220e22, 0x000 },
+- { 0x00100000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x000000ef, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x0000001d, 0x00200e2d, 0x000 },
+- { 0x00000003, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x0f1 },
+- { 0x0000000b, 0x00210228, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f1 },
+- { 0x00000400, 0x00292228, 0x000 },
+- { 0x0000001a, 0x00203628, 0x000 },
+- { 0x0000001c, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f6 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000001e, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x104 },
+- { 0x0000a30f, 0x00204411, 0x000 },
+- { 0x00000013, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0fd },
+- { 0xffffffff, 0x00404811, 0x104 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x100 },
+- { 0x0000ffff, 0x00404811, 0x104 },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x103 },
+- { 0x000000ff, 0x00404811, 0x104 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0002c400, 0x00204411, 0x000 },
+- { 0x0000001f, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x10b },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000019, 0x00203623, 0x000 },
+- { 0x00000018, 0x40224a20, 0x000 },
+- { 0x00000010, 0xc0424a20, 0x10d },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000019, 0x00203623, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000000a, 0x00201011, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x114 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00531224, 0x110 },
+- { 0xffbfffff, 0x00283a2e, 0x000 },
+- { 0x0000001b, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x127 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x00000018, 0x00220e30, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e00e, 0x00204411, 0x000 },
+- { 0x07f8ff08, 0x00204811, 0x000 },
+- { 0x00000000, 0x00294a23, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00800000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204806, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x614 },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x613 },
+- { 0x00000004, 0x00404c11, 0x12e },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x2fe },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x19f },
+- { 0x00000000, 0x00600000, 0x151 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40280620, 0x000 },
+- { 0x00000010, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x00341461, 0x000 },
+- { 0x00000000, 0x00741882, 0x2a4 },
+- { 0x0001a1fd, 0x00604411, 0x2c9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x138 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x2fe },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x19f },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x151 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0681a20, 0x2a4 },
+- { 0x0001a1fd, 0x00604411, 0x2c9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x149 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000001, 0x00300a2f, 0x000 },
+- { 0x00000001, 0x00210a22, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600000, 0x17c },
+- { 0x00000000, 0x00600000, 0x18d },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00202c08, 0x000 },
+- { 0x00000000, 0x00202411, 0x000 },
+- { 0x00000000, 0x00202811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00221e29, 0x000 },
+- { 0x00000000, 0x007048eb, 0x189 },
+- { 0x00000000, 0x00600000, 0x2a4 },
+- { 0x00000001, 0x40330620, 0x000 },
+- { 0x00000000, 0xc0302409, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x28c },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x173 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000001, 0x00530621, 0x16f },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0604800, 0x184 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000013, 0x0020062d, 0x000 },
+- { 0x00000000, 0x0078042a, 0x2e4 },
+- { 0x00000000, 0x00202809, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x165 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000210, 0x00600411, 0x2fe },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x181 },
+- { 0x0000001b, 0xc0203620, 0x000 },
+- { 0x0000001c, 0xc0203620, 0x000 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x46000000, 0x00600811, 0x19f },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x188 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00804811, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40281620, 0x000 },
+- { 0x00000010, 0xc0811a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000008, 0x00221e30, 0x000 },
+- { 0x00000032, 0x00201a2d, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfffbff09, 0x00204811, 0x000 },
+- { 0x00000011, 0x0020222d, 0x000 },
+- { 0x00001fff, 0x00294a28, 0x000 },
+- { 0x00000006, 0x0020222d, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000100, 0x00201811, 0x000 },
+- { 0x00000008, 0x00621e28, 0x128 },
+- { 0x00000008, 0x00822228, 0x000 },
+- { 0x0002c000, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00600e2d, 0x1aa },
+- { 0x0000001c, 0x00600e2d, 0x1aa },
+- { 0x0000c008, 0x00204411, 0x000 },
+- { 0x0000001d, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x1a6 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x39000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00804802, 0x000 },
+- { 0x00000020, 0x00202e2d, 0x000 },
+- { 0x00000000, 0x003b0d63, 0x000 },
+- { 0x00000008, 0x00224a23, 0x000 },
+- { 0x00000010, 0x00224a23, 0x000 },
+- { 0x00000018, 0x00224a23, 0x000 },
+- { 0x00000000, 0x00804803, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x2fe },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x19f },
+- { 0x00000007, 0x0021062f, 0x000 },
+- { 0x00000019, 0x00200a2d, 0x000 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000ffff, 0x40282220, 0x000 },
+- { 0x0000000f, 0x00262228, 0x000 },
+- { 0x00000010, 0x40212620, 0x000 },
+- { 0x0000000f, 0x00262629, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1cd },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000081, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000080, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1c9 },
+- { 0x00000000, 0x00600000, 0x1d6 },
+- { 0x00000001, 0x00531e27, 0x1c5 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000001f, 0x00280a22, 0x000 },
+- { 0x0000001f, 0x00282a2a, 0x000 },
+- { 0x00000001, 0x00530621, 0x1be },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000002, 0x00304a2f, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000001, 0x00301e2f, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x1d6 },
+- { 0x00000001, 0x00531e27, 0x1d2 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x0000000f, 0x00260e23, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000000f, 0x00261224, 0x000 },
+- { 0x00000000, 0x00201411, 0x000 },
+- { 0x00000000, 0x00601811, 0x2a4 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022b, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1e5 },
+- { 0x00000010, 0x00221628, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a29, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x0020480a, 0x000 },
+- { 0x00000000, 0x00202c11, 0x000 },
+- { 0x00000010, 0x00221623, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a24, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x00731503, 0x1f2 },
+- { 0x00000000, 0x00201805, 0x000 },
+- { 0x00000000, 0x00731524, 0x1f2 },
+- { 0x00000000, 0x002d14c5, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00000000, 0x00202003, 0x000 },
+- { 0x00000000, 0x00802404, 0x000 },
+- { 0x0000000f, 0x00210225, 0x000 },
+- { 0x00000000, 0x14c00000, 0x613 },
+- { 0x00000000, 0x002b1405, 0x000 },
+- { 0x00000001, 0x00901625, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x2fe },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x19f },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00294a22, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a21, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000ffff, 0x40281220, 0x000 },
+- { 0x00000010, 0xc0211a20, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211620, 0x000 },
+- { 0x00000000, 0x00741465, 0x2a4 },
+- { 0x0001a1fd, 0x00604411, 0x2c9 },
+- { 0x00000001, 0x00330621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x206 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x1ff },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x5c5 },
+- { 0x00000000, 0x0040040f, 0x200 },
+- { 0x00000000, 0x00600000, 0x5b2 },
+- { 0x00000000, 0x00600000, 0x5c5 },
+- { 0x00000210, 0x00600411, 0x2fe },
+- { 0x00000000, 0x00600000, 0x18d },
+- { 0x00000000, 0x00600000, 0x189 },
+- { 0x00000000, 0x00600000, 0x2a4 },
+- { 0x00000000, 0x00600000, 0x28c },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x21f },
+- { 0x00000000, 0xc0404800, 0x21c },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x00600411, 0x2e4 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x5b2 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000018, 0x40210a20, 0x000 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x235 },
+- { 0x0000001a, 0x0020222d, 0x000 },
+- { 0x00080101, 0x00292228, 0x000 },
+- { 0x0000001a, 0x00203628, 0x000 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x23a },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000010, 0x00600411, 0x2fe },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x19f },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00000000, 0x00600000, 0x265 },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0x00000001, 0x00211e27, 0x000 },
+- { 0x00000000, 0x14e00000, 0x253 },
+- { 0x00000018, 0x00201e2d, 0x000 },
+- { 0x0000ffff, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00341c27, 0x000 },
+- { 0x00000000, 0x12c00000, 0x248 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e5, 0x000 },
+- { 0x00000000, 0x08c00000, 0x24b },
+- { 0x00000000, 0x00201407, 0x000 },
+- { 0x00000018, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00211e27, 0x000 },
+- { 0x00000000, 0x00341c47, 0x000 },
+- { 0x00000000, 0x12c00000, 0x250 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x08c00000, 0x253 },
+- { 0x00000000, 0x00201807, 0x000 },
+- { 0x00000000, 0x00600000, 0x2aa },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000000, 0x00342023, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25b },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25a },
+- { 0x00000016, 0x00404811, 0x25f },
+- { 0x00000018, 0x00404811, 0x25f },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25e },
+- { 0x00000017, 0x00404811, 0x25f },
+- { 0x00000019, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00604411, 0x2d2 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x23f },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000010, 0x40210620, 0x000 },
+- { 0x0000ffff, 0xc0280a20, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0881a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x614 },
+- { 0x00000000, 0x00600000, 0x5b2 },
+- { 0x00000000, 0xc0600000, 0x28c },
+- { 0x00000005, 0x00200a2d, 0x000 },
+- { 0x00000008, 0x00220a22, 0x000 },
+- { 0x00000034, 0x00201a2d, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00007000, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00311ce6, 0x000 },
+- { 0x00000033, 0x00201a2d, 0x000 },
+- { 0x0000000c, 0x00221a26, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x06e00000, 0x27b },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000034, 0x00203623, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00691ce2, 0x128 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x286 },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000024, 0x00403627, 0x000 },
+- { 0x0000000c, 0xc0220a20, 0x000 },
+- { 0x00000032, 0x00203622, 0x000 },
+- { 0x00000031, 0xc0403620, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000009, 0x00204811, 0x000 },
+- { 0xa1000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000029, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce3, 0x000 },
+- { 0x00000029, 0x00203627, 0x000 },
+- { 0x0000002a, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce4, 0x000 },
+- { 0x0000002a, 0x00203627, 0x000 },
+- { 0x0000002b, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a3, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x0000002b, 0x00203627, 0x000 },
+- { 0x0000002c, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x0000002c, 0x00803627, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x0000002a, 0x00203624, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x0000002b, 0x00203627, 0x000 },
+- { 0x00000000, 0x00311cc4, 0x000 },
+- { 0x0000002c, 0x00803627, 0x000 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00203628, 0x000 },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14c00000, 0x2c5 },
+- { 0x00000000, 0x00400000, 0x2c2 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00203628, 0x000 },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2c2 },
+- { 0x00000003, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2c5 },
+- { 0x0000002b, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e1, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2c5 },
+- { 0x00000029, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a1, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2c5 },
+- { 0x0000002c, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e2, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2c5 },
+- { 0x0000002a, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2c5 },
+- { 0x00000000, 0x00600000, 0x5ed },
+- { 0x00000000, 0x00600000, 0x29e },
+- { 0x00000000, 0x00400000, 0x2c7 },
+- { 0x00000000, 0x00600000, 0x29e },
+- { 0x00000000, 0x00600000, 0x5e4 },
+- { 0x00000000, 0x00400000, 0x2c7 },
+- { 0x00000000, 0x00600000, 0x290 },
+- { 0x00000000, 0x00400000, 0x2c7 },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000023, 0x0080222d, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca1, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x003808c5, 0x000 },
+- { 0x00000000, 0x00300841, 0x000 },
+- { 0x00000001, 0x00220a22, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x0000001d, 0x0020222d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x301 },
+- { 0xffffffef, 0x00280621, 0x000 },
+- { 0x0000001a, 0x0020222d, 0x000 },
+- { 0x0000f8e0, 0x00204411, 0x000 },
+- { 0x00000000, 0x00294901, 0x000 },
+- { 0x00000000, 0x00894901, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00002257, 0x00204411, 0x000 },
+- { 0x00000003, 0xc0484a20, 0x000 },
+- { 0x0000225d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x5c5 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x00000001, 0x40304a20, 0x000 },
+- { 0x00000002, 0xc0304a20, 0x000 },
+- { 0x00000001, 0x00530a22, 0x334 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x614 },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x33d },
+- { 0x00000014, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x351 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000016, 0x00604811, 0x35e },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x355 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00404811, 0x349 },
+- { 0x00000028, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x349 },
+- { 0x00002104, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x00000035, 0x00203626, 0x000 },
+- { 0x00000049, 0x00201811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000000, 0x002f0226, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x360 },
+- { 0x00000035, 0x00801a2d, 0x000 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x00000015, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x376 },
+- { 0x0000001e, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x380 },
+- { 0x00000020, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x38c },
+- { 0x0000000f, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x398 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x398 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x39a },
+- { 0x00000016, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x39f },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x08000000, 0x00290a22, 0x000 },
+- { 0x00000003, 0x40210e20, 0x000 },
+- { 0x0000000c, 0xc0211220, 0x000 },
+- { 0x00080000, 0x00281224, 0x000 },
+- { 0x00000014, 0xc0221620, 0x000 },
+- { 0x00000000, 0x002914a4, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948a2, 0x000 },
+- { 0x0000a1fe, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000015, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x614 },
+- { 0x00000015, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x382 },
+- { 0x0000210e, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x614 },
+- { 0x00000003, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x38e },
+- { 0x00002108, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00404811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000006, 0x00404811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000016, 0x00604811, 0x35e },
+- { 0x00000016, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x0000001d, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3b9 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x614 },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3ab },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0xbabecafe, 0x00204811, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000004, 0x00404811, 0x000 },
+- { 0x00002170, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000a, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3be },
+- { 0x8c000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00003fff, 0x40280a20, 0x000 },
+- { 0x80000000, 0x40280e20, 0x000 },
+- { 0x40000000, 0xc0281220, 0x000 },
+- { 0x00040000, 0x00694622, 0x614 },
+- { 0x00000000, 0x00201410, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3cc },
+- { 0x00000000, 0xc0401800, 0x3cf },
+- { 0x00003fff, 0xc0281a20, 0x000 },
+- { 0x00040000, 0x00694626, 0x614 },
+- { 0x00000000, 0x00201810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3d2 },
+- { 0x00000000, 0xc0401c00, 0x3d5 },
+- { 0x00003fff, 0xc0281e20, 0x000 },
+- { 0x00040000, 0x00694627, 0x614 },
+- { 0x00000000, 0x00201c10, 0x000 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0x002820c5, 0x000 },
+- { 0x00000000, 0x004948e8, 0x000 },
+- { 0xa5800000, 0x00200811, 0x000 },
+- { 0x00002000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x3fd },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x0000001f, 0xc0210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3e2 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000ffff, 0xc0481220, 0x3ea },
+- { 0xa7800000, 0x00200811, 0x000 },
+- { 0x0000a000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x3fd },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00304883, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x83000000, 0x00604411, 0x3fd },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xa9800000, 0x00200811, 0x000 },
+- { 0x0000c000, 0x00400c11, 0x3e5 },
+- { 0xab800000, 0x00200811, 0x000 },
+- { 0x0000f8e0, 0x00400c11, 0x3e5 },
+- { 0xad800000, 0x00200811, 0x000 },
+- { 0x0000f880, 0x00400c11, 0x3e5 },
+- { 0xb3800000, 0x00200811, 0x000 },
+- { 0x0000f3fc, 0x00400c11, 0x3e5 },
+- { 0xaf800000, 0x00200811, 0x000 },
+- { 0x0000e000, 0x00400c11, 0x3e5 },
+- { 0xb1800000, 0x00200811, 0x000 },
+- { 0x0000f000, 0x00400c11, 0x3e5 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00002148, 0x00204811, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00182000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0018a000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0018c000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0018f8e0, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0018f880, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0018e000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0018f000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0018f3fc, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x86000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x614 },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00404c02, 0x42e },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x00000000, 0xc0201400, 0x000 },
+- { 0x00000000, 0xc0201800, 0x000 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x43c },
+- { 0x00000000, 0xc0202000, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x00000010, 0x00280a23, 0x000 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x444 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0x00694624, 0x614 },
+- { 0x00000000, 0x00400000, 0x44d },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x449 },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x44c },
+- { 0x00000000, 0x002824f0, 0x000 },
+- { 0x00000007, 0x00280a23, 0x000 },
+- { 0x00000001, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x454 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x04e00000, 0x46d },
+- { 0x00000000, 0x00400000, 0x47a },
+- { 0x00000002, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x459 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x02e00000, 0x46d },
+- { 0x00000000, 0x00400000, 0x47a },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x45e },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x46d },
+- { 0x00000000, 0x00400000, 0x47a },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x463 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46d },
+- { 0x00000000, 0x00400000, 0x47a },
+- { 0x00000005, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x468 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x06e00000, 0x46d },
+- { 0x00000000, 0x00400000, 0x47a },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46d },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x08e00000, 0x46d },
+- { 0x00000000, 0x00400000, 0x47a },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x000 },
+- { 0x00000008, 0x00210a23, 0x000 },
+- { 0x00000000, 0x14c00000, 0x477 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x480 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x00404c08, 0x43c },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000011, 0x40211220, 0x000 },
+- { 0x00000012, 0x40211620, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00210225, 0x000 },
+- { 0x00000000, 0x14e00000, 0x48a },
+- { 0x00040000, 0xc0494a20, 0x48b },
+- { 0xfffbffff, 0xc0284a20, 0x000 },
+- { 0x00000000, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x497 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000c, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x493 },
+- { 0xa0000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x00204811, 0x000 },
+- { 0x0000216b, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000216c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x491 },
+- { 0x00000000, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4ae },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x4a9 },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x4ac },
+- { 0x00000000, 0x00400000, 0x4b2 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xc0600000, 0x614 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4b9 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0404810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x614 },
+- { 0x00000000, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4bb },
+- { 0x00002180, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000003, 0x00333e2f, 0x000 },
+- { 0x00000001, 0x00210221, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4eb },
+- { 0x00000035, 0x00200a2d, 0x000 },
+- { 0x00040000, 0x18e00c11, 0x4da },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xd8c04800, 0x4ce },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000036, 0x0020122d, 0x000 },
+- { 0x00000000, 0x00290c83, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000011, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x491 },
+- { 0x00000035, 0xc0203620, 0x000 },
+- { 0x00000036, 0xc0403620, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0xe0000000, 0xc0484a20, 0x000 },
+- { 0x0000000f, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4f2 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0xd9000000, 0x000 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00204811, 0x000 },
+- { 0x000000ff, 0x00280e30, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x4f6 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x14c00000, 0x50b },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000024, 0x00203623, 0x000 },
+- { 0x00000034, 0x00203623, 0x000 },
+- { 0x00000032, 0x00203623, 0x000 },
+- { 0x00000031, 0x00203623, 0x000 },
+- { 0x0000001d, 0x00203623, 0x000 },
+- { 0x0000002d, 0x00203623, 0x000 },
+- { 0x0000002e, 0x00203623, 0x000 },
+- { 0x0000001b, 0x00203623, 0x000 },
+- { 0x0000001c, 0x00203623, 0x000 },
+- { 0xffffe000, 0x00200c11, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x0000002a, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00200c11, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x0000002c, 0x00203623, 0x000 },
+- { 0xf1ffffff, 0x00283a2e, 0x000 },
+- { 0x0000001a, 0xc0220e20, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000033, 0x40203620, 0x000 },
+- { 0x87000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x9d000000, 0x00204411, 0x000 },
+- { 0x0000001f, 0x40214a20, 0x000 },
+- { 0x96000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x0000001f, 0x00211624, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000003, 0x00281e23, 0x000 },
+- { 0x00000008, 0x00222223, 0x000 },
+- { 0xfffff000, 0x00282228, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000027, 0x00203628, 0x000 },
+- { 0x00000018, 0x00211e23, 0x000 },
+- { 0x00000028, 0x00203627, 0x000 },
+- { 0x00000002, 0x00221624, 0x000 },
+- { 0x00000000, 0x003014a8, 0x000 },
+- { 0x00000026, 0x00203625, 0x000 },
+- { 0x00000003, 0x00211a24, 0x000 },
+- { 0x10000000, 0x00281a26, 0x000 },
+- { 0xefffffff, 0x00283a2e, 0x000 },
+- { 0x00000000, 0x004938ce, 0x602 },
+- { 0x00000001, 0x40280a20, 0x000 },
+- { 0x00000006, 0x40280e20, 0x000 },
+- { 0x00000300, 0xc0281220, 0x000 },
+- { 0x00000008, 0x00211224, 0x000 },
+- { 0x00000000, 0xc0201620, 0x000 },
+- { 0x00000000, 0xc0201a20, 0x000 },
+- { 0x00000000, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x541 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x614 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00020000, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x549 },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x55b },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x549 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x614 },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x55b },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x54d },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00000000, 0xc0400000, 0x55b },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x559 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x554 },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x557 },
+- { 0x00000000, 0x00401c10, 0x55b },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x55d },
+- { 0x00000000, 0x00600000, 0x5a4 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56d },
+- { 0x0000a2b7, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x614 },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x0000a2c4, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x56b },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000001, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x57d },
+- { 0x0000a2bb, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x614 },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x0000a2c5, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x57b },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000002, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x58d },
+- { 0x0000a2bf, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x614 },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x0000a2c6, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x58b },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x0000a2c3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x614 },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x0000a2c7, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x599 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0x01000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00400000, 0x59f },
+- { 0xa4000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5a4 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x88000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x5b7 },
+- { 0x00001000, 0x00200811, 0x000 },
+- { 0x00000034, 0x00203622, 0x000 },
+- { 0x00000000, 0x00600000, 0x5bb },
+- { 0x00000000, 0x00600000, 0x5a4 },
+- { 0x98000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5bb },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000022, 0x00204811, 0x000 },
+- { 0x89000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x0000217a, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x5e1 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000016, 0x00604811, 0x35e },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x09800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x614 },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000004, 0x00404c11, 0x5dc },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0x00000004, 0x00291e27, 0x000 },
+- { 0x0000001d, 0x00803627, 0x000 },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0xfffffffb, 0x00281e27, 0x000 },
+- { 0x0000001d, 0x00803627, 0x000 },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00291e27, 0x000 },
+- { 0x0000001d, 0x00803627, 0x000 },
+- { 0x0000001d, 0x00201e2d, 0x000 },
+- { 0xfffffff7, 0x00281e27, 0x000 },
+- { 0x0000001d, 0x00803627, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000016, 0x00604811, 0x35e },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x01800000, 0x00204811, 0x000 },
+- { 0x00ffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004217f, 0x00604411, 0x614 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x613 },
+- { 0x00000010, 0x00404c11, 0x5f9 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x38c00000, 0x000 },
+- { 0x00000025, 0x00200a2d, 0x000 },
+- { 0x00000026, 0x00200e2d, 0x000 },
+- { 0x00000027, 0x0020122d, 0x000 },
+- { 0x00000028, 0x0020162d, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000004, 0x00301224, 0x000 },
+- { 0x00000000, 0x002f0064, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x612 },
+- { 0x00000003, 0x00281a22, 0x000 },
+- { 0x00000008, 0x00221222, 0x000 },
+- { 0xfffff000, 0x00281224, 0x000 },
+- { 0x00000000, 0x002910c4, 0x000 },
+- { 0x00000027, 0x00403624, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x614 },
+- { 0x9f000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x617 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x2fe },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x19f },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0xc0204411, 0x000 },
+- { 0x00000029, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x0000002c, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000002a, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000002b, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x013304ef, 0x059b0239, 0x000 },
+- { 0x01b00159, 0x0425059b, 0x000 },
+- { 0x021201f6, 0x02390142, 0x000 },
+- { 0x0210022e, 0x0289022a, 0x000 },
+- { 0x03c2059b, 0x059b059b, 0x000 },
+- { 0x05cd05ce, 0x0308059b, 0x000 },
+- { 0x059b05a0, 0x03090329, 0x000 },
+- { 0x0313026b, 0x032b031d, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x059b052c, 0x059b059b, 0x000 },
+- { 0x03a5059b, 0x04a2032d, 0x000 },
+- { 0x04810433, 0x0423059b, 0x000 },
+- { 0x04bb04ed, 0x042704c8, 0x000 },
+- { 0x043304f4, 0x033a0365, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x059b059b, 0x05b905a2, 0x000 },
+- { 0x059b059b, 0x0007059b, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x03e303d8, 0x03f303f1, 0x000 },
+- { 0x03f903f5, 0x03f703fb, 0x000 },
+- { 0x04070403, 0x040f040b, 0x000 },
+- { 0x04170413, 0x041f041b, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x059b059b, 0x059b059b, 0x000 },
+- { 0x00020600, 0x06190006, 0x000 },
+-};
+-
+-static const u32 R600_pfp_microcode[] = {
+-0xd40071,
+-0xd40072,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0x800003,
+-0xca0400,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xc41838,
+-0xca2400,
+-0xca2800,
+-0x9581a8,
+-0xc41c3a,
+-0xc3c000,
+-0xca0800,
+-0xca0c00,
+-0x7c744b,
+-0xc20005,
+-0x99c000,
+-0xc41c3a,
+-0x7c744c,
+-0xc0fff0,
+-0x042c04,
+-0x309002,
+-0x7d2500,
+-0x351402,
+-0x7d350b,
+-0x255403,
+-0x7cd580,
+-0x259c03,
+-0x95c004,
+-0xd5001b,
+-0x7eddc1,
+-0x7d9d80,
+-0xd6801b,
+-0xd5801b,
+-0xd4401e,
+-0xd5401e,
+-0xd6401e,
+-0xd6801e,
+-0xd4801e,
+-0xd4c01e,
+-0x9783d4,
+-0xd5c01e,
+-0xca0800,
+-0x80001b,
+-0xca0c00,
+-0xe4011e,
+-0xd4001e,
+-0x80000d,
+-0xc41838,
+-0xe4013e,
+-0xd4001e,
+-0x80000d,
+-0xc41838,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca1800,
+-0xd4401e,
+-0xd5801e,
+-0x800054,
+-0xd40073,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xe2001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0xd48060,
+-0xd4401e,
+-0x800002,
+-0xd4801e,
+-0xca0800,
+-0xd48061,
+-0xd4401e,
+-0x800002,
+-0xd4801e,
+-0xca0800,
+-0xca0c00,
+-0xd4401e,
+-0xd48016,
+-0xd4c016,
+-0xd4801e,
+-0x8001b9,
+-0xd4c01e,
+-0xc6083e,
+-0xca0c00,
+-0xca1000,
+-0x948004,
+-0xca1400,
+-0xe420f3,
+-0xd42013,
+-0xd56065,
+-0xd4e01c,
+-0xd5201c,
+-0xd5601c,
+-0x800002,
+-0x062001,
+-0xc6083e,
+-0xca0c00,
+-0xca1000,
+-0x9483f7,
+-0xca1400,
+-0xe420f3,
+-0x80007a,
+-0xd42013,
+-0xc6083e,
+-0xca0c00,
+-0xca1000,
+-0x9883ef,
+-0xca1400,
+-0xd40064,
+-0x80008e,
+-0x000000,
+-0xc41432,
+-0xc6183e,
+-0xc4082f,
+-0x954005,
+-0xc40c30,
+-0xd4401e,
+-0x800002,
+-0xee001e,
+-0x9583f5,
+-0xc41031,
+-0xd44033,
+-0xd52065,
+-0xd4a01c,
+-0xd4e01c,
+-0xd5201c,
+-0xd40073,
+-0xe4015e,
+-0xd4001e,
+-0x8001b9,
+-0x062001,
+-0x0a2001,
+-0xd60074,
+-0xc40836,
+-0xc61040,
+-0x988007,
+-0xcc3835,
+-0x95010f,
+-0xd4001f,
+-0xd46062,
+-0x800002,
+-0xd42062,
+-0xcc1433,
+-0x8401bc,
+-0xd40070,
+-0xd5401e,
+-0x800002,
+-0xee001e,
+-0xca0c00,
+-0xca1000,
+-0xd4c01a,
+-0x8401bc,
+-0xd5001a,
+-0xcc0443,
+-0x35101f,
+-0x2c9401,
+-0x7d098b,
+-0x984005,
+-0x7d15cb,
+-0xd4001a,
+-0x8001b9,
+-0xd4006d,
+-0x344401,
+-0xcc0c44,
+-0x98403a,
+-0xcc2c46,
+-0x958004,
+-0xcc0445,
+-0x8001b9,
+-0xd4001a,
+-0xd4c01a,
+-0x282801,
+-0x8400f3,
+-0xcc1003,
+-0x98801b,
+-0x04380c,
+-0x8400f3,
+-0xcc1003,
+-0x988017,
+-0x043808,
+-0x8400f3,
+-0xcc1003,
+-0x988013,
+-0x043804,
+-0x8400f3,
+-0xcc1003,
+-0x988014,
+-0xcc1047,
+-0x9a8009,
+-0xcc1448,
+-0x9840da,
+-0xd4006d,
+-0xcc1844,
+-0xd5001a,
+-0xd5401a,
+-0x8000cc,
+-0xd5801a,
+-0x96c0d3,
+-0xd4006d,
+-0x8001b9,
+-0xd4006e,
+-0x9ac003,
+-0xd4006d,
+-0xd4006e,
+-0x800002,
+-0xec007f,
+-0x9ac0ca,
+-0xd4006d,
+-0x8001b9,
+-0xd4006e,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0x7d9103,
+-0x7dd583,
+-0x7d190c,
+-0x35cc1f,
+-0x35701f,
+-0x7cf0cb,
+-0x7cd08b,
+-0x880000,
+-0x7e8e8b,
+-0x95c004,
+-0xd4006e,
+-0x8001b9,
+-0xd4001a,
+-0xd4c01a,
+-0xcc0803,
+-0xcc0c03,
+-0xcc1003,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0xcc2403,
+-0xcc2803,
+-0x35c41f,
+-0x36b01f,
+-0x7c704b,
+-0x34f01f,
+-0x7c704b,
+-0x35701f,
+-0x7c704b,
+-0x7d8881,
+-0x7dccc1,
+-0x7e5101,
+-0x7e9541,
+-0x7c9082,
+-0x7cd4c2,
+-0x7c848b,
+-0x9ac003,
+-0x7c8c8b,
+-0x2c8801,
+-0x98809c,
+-0xd4006d,
+-0x98409a,
+-0xd4006e,
+-0xcc0847,
+-0xcc0c48,
+-0xcc1044,
+-0xd4801a,
+-0xd4c01a,
+-0x800104,
+-0xd5001a,
+-0xcc0832,
+-0xd40032,
+-0x9482d8,
+-0xca0c00,
+-0xd4401e,
+-0x800002,
+-0xd4001e,
+-0xe4011e,
+-0xd4001e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd4401e,
+-0xca1400,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xd5401e,
+-0xd54034,
+-0x800002,
+-0xee001e,
+-0x280404,
+-0xe2001a,
+-0xe2001a,
+-0xd4401a,
+-0xca3800,
+-0xcc0803,
+-0xcc0c03,
+-0xcc0c03,
+-0xcc0c03,
+-0x9882bc,
+-0x000000,
+-0x8401bc,
+-0xd7806f,
+-0x800002,
+-0xee001f,
+-0xca0400,
+-0xc2ff00,
+-0xcc0834,
+-0xc13fff,
+-0x7c74cb,
+-0x7cc90b,
+-0x7d010f,
+-0x9902af,
+-0x7c738b,
+-0x8401bc,
+-0xd7806f,
+-0x800002,
+-0xee001f,
+-0xca0800,
+-0x281900,
+-0x7d898b,
+-0x958014,
+-0x281404,
+-0xca0c00,
+-0xca1000,
+-0xca1c00,
+-0xca2400,
+-0xe2001f,
+-0xd4c01a,
+-0xd5001a,
+-0xd5401a,
+-0xcc1803,
+-0xcc2c03,
+-0xcc2c03,
+-0xcc2c03,
+-0x7da58b,
+-0x7d9c47,
+-0x984296,
+-0x000000,
+-0x800164,
+-0xd4c01a,
+-0xd4401e,
+-0xd4801e,
+-0x800002,
+-0xee001e,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c06,
+-0x0ccc06,
+-0x98c006,
+-0xcc1049,
+-0x990004,
+-0xd40071,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xd4801e,
+-0x800002,
+-0xee001e,
+-0xca0800,
+-0xca0c00,
+-0x34d018,
+-0x251001,
+-0x95001f,
+-0xc17fff,
+-0xca1000,
+-0xca1400,
+-0xca1800,
+-0xd4801d,
+-0xd4c01d,
+-0x7db18b,
+-0xc14202,
+-0xc2c001,
+-0xd5801d,
+-0x34dc0e,
+-0x7d5d4c,
+-0x7f734c,
+-0xd7401e,
+-0xd5001e,
+-0xd5401e,
+-0xc14200,
+-0xc2c000,
+-0x099c01,
+-0x31dc10,
+-0x7f5f4c,
+-0x7f734c,
+-0x7d8380,
+-0xd5806f,
+-0xd58066,
+-0xd7401e,
+-0xec005e,
+-0xc82402,
+-0x8001b9,
+-0xd60074,
+-0xd4401e,
+-0xd4801e,
+-0xd4c01e,
+-0x800002,
+-0xee001e,
+-0x800002,
+-0xee001f,
+-0xd4001f,
+-0x800002,
+-0xd4001f,
+-0xd4001f,
+-0x880000,
+-0xd4001f,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x010174,
+-0x02017b,
+-0x030090,
+-0x040080,
+-0x050005,
+-0x060040,
+-0x070033,
+-0x08012f,
+-0x090047,
+-0x0a0037,
+-0x1001b7,
+-0x1700a4,
+-0x22013d,
+-0x23014c,
+-0x2000b5,
+-0x240128,
+-0x27004e,
+-0x28006b,
+-0x2a0061,
+-0x2b0053,
+-0x2f0066,
+-0x320088,
+-0x340182,
+-0x3c0159,
+-0x3f0073,
+-0x41018f,
+-0x440131,
+-0x550176,
+-0x56017d,
+-0x60000c,
+-0x610035,
+-0x620039,
+-0x630039,
+-0x640039,
+-0x650039,
+-0x660039,
+-0x670039,
+-0x68003b,
+-0x690042,
+-0x6a0049,
+-0x6b0049,
+-0x6c0049,
+-0x6d0049,
+-0x6e0049,
+-0x6f0049,
+-0x7301b7,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-0x000007,
+-};
+-
+-static const u32 RV610_cp_microcode[][3] = {
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0000ffff, 0x00284621, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000000, 0x00e00000, 0x000 },
+- { 0x00010000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000f00, 0x00281622, 0x000 },
+- { 0x00000008, 0x00211625, 0x000 },
+- { 0x00000018, 0x00203625, 0x000 },
+- { 0x8d000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x002f0225, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x018 },
+- { 0x00412000, 0x00404811, 0x019 },
+- { 0x00422000, 0x00204811, 0x000 },
+- { 0x8e000000, 0x00204411, 0x000 },
+- { 0x00000028, 0x00204a2d, 0x000 },
+- { 0x90000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x0000000c, 0x00211622, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000019, 0x00211a22, 0x000 },
+- { 0x00000004, 0x00281a26, 0x000 },
+- { 0x00000000, 0x002914c5, 0x000 },
+- { 0x00000019, 0x00203625, 0x000 },
+- { 0x00000000, 0x003a1402, 0x000 },
+- { 0x00000016, 0x00211625, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0xfffffffc, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002914a3, 0x000 },
+- { 0x00000017, 0x00203625, 0x000 },
+- { 0x00008000, 0x00280e22, 0x000 },
+- { 0x00000007, 0x00220e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x20000000, 0x00280e22, 0x000 },
+- { 0x00000006, 0x00210e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x00000000, 0x00220222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x038 },
+- { 0x00000000, 0x2ee00000, 0x035 },
+- { 0x00000000, 0x2ce00000, 0x037 },
+- { 0x00000000, 0x00400e2d, 0x039 },
+- { 0x00000008, 0x00200e2d, 0x000 },
+- { 0x00000009, 0x0040122d, 0x046 },
+- { 0x00000001, 0x00400e2d, 0x039 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x03e },
+- { 0x00000008, 0x00401c11, 0x041 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x0000000f, 0x00281e27, 0x000 },
+- { 0x00000003, 0x00221e27, 0x000 },
+- { 0x7fc00000, 0x00281a23, 0x000 },
+- { 0x00000014, 0x00211a26, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000008, 0x00221a26, 0x000 },
+- { 0x00000000, 0x00290cc7, 0x000 },
+- { 0x00000027, 0x00203624, 0x000 },
+- { 0x00007f00, 0x00281221, 0x000 },
+- { 0x00001400, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x04b },
+- { 0x00000001, 0x00290e23, 0x000 },
+- { 0x0000000e, 0x00203623, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfff80000, 0x00294a23, 0x000 },
+- { 0x00000000, 0x003a2c02, 0x000 },
+- { 0x00000002, 0x00220e2b, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x0000000f, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00204a2d, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000029, 0x00200e2d, 0x000 },
+- { 0x060a0200, 0x00294a23, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x061 },
+- { 0x00000000, 0x2ee00000, 0x05f },
+- { 0x00000000, 0x2ce00000, 0x05e },
+- { 0x00000000, 0x00400e2d, 0x062 },
+- { 0x00000001, 0x00400e2d, 0x062 },
+- { 0x0000000a, 0x00200e2d, 0x000 },
+- { 0x0000000b, 0x0040122d, 0x06a },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x7fc00000, 0x00281623, 0x000 },
+- { 0x00000014, 0x00211625, 0x000 },
+- { 0x00000001, 0x00331625, 0x000 },
+- { 0x80000000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00290ca3, 0x000 },
+- { 0x3ffffc00, 0x00290e23, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x06d },
+- { 0x00000100, 0x00401c11, 0x070 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x000000f0, 0x00281e27, 0x000 },
+- { 0x00000004, 0x00221e27, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0xfffff0ff, 0x00281a30, 0x000 },
+- { 0x0000a028, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948e6, 0x000 },
+- { 0x0000a018, 0x00204411, 0x000 },
+- { 0x3fffffff, 0x00284a23, 0x000 },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000030, 0x0020162d, 0x000 },
+- { 0x00000002, 0x00291625, 0x000 },
+- { 0x00000030, 0x00203625, 0x000 },
+- { 0x00000025, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a3, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x083 },
+- { 0x00000026, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a4, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x084 },
+- { 0x00000000, 0x00400000, 0x08a },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203624, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x08a },
+- { 0x00000000, 0x00600000, 0x668 },
+- { 0x00000000, 0x00600000, 0x65c },
+- { 0x00000002, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x08d },
+- { 0x00000012, 0xc0403620, 0x093 },
+- { 0x00000000, 0x2ee00000, 0x091 },
+- { 0x00000000, 0x2ce00000, 0x090 },
+- { 0x00000002, 0x00400e2d, 0x092 },
+- { 0x00000003, 0x00400e2d, 0x092 },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000012, 0x00203623, 0x000 },
+- { 0x00000003, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x098 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x0a0 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x2ee00000, 0x09e },
+- { 0x00000000, 0x2ce00000, 0x09d },
+- { 0x00000002, 0x00400e2d, 0x09f },
+- { 0x00000003, 0x00400e2d, 0x09f },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x003f0000, 0x00280e23, 0x000 },
+- { 0x00000010, 0x00210e23, 0x000 },
+- { 0x00000011, 0x00203623, 0x000 },
+- { 0x0000001e, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a7 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x0000001f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0aa },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000008, 0x00210e2b, 0x000 },
+- { 0x0000007f, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0e1 },
+- { 0x00000000, 0x27000000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x0b3 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000000c, 0x00221e30, 0x000 },
+- { 0x99800000, 0x00204411, 0x000 },
+- { 0x00000004, 0x0020122d, 0x000 },
+- { 0x00000008, 0x00221224, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00291ce4, 0x000 },
+- { 0x00000000, 0x00604807, 0x12f },
+- { 0x9b000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x9c000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x0033146f, 0x000 },
+- { 0x00000001, 0x00333e23, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0x00203c05, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e007, 0x00204411, 0x000 },
+- { 0x0000000f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0cb },
+- { 0x00f8ff08, 0x00204811, 0x000 },
+- { 0x98000000, 0x00404811, 0x0dc },
+- { 0x000000f0, 0x00280e22, 0x000 },
+- { 0x000000a0, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0da },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d5 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d4 },
+- { 0x00003f00, 0x00400c11, 0x0d6 },
+- { 0x00001f00, 0x00400c11, 0x0d6 },
+- { 0x00000f00, 0x00200c11, 0x000 },
+- { 0x00380009, 0x00294a23, 0x000 },
+- { 0x3f000000, 0x00280e2b, 0x000 },
+- { 0x00000002, 0x00220e23, 0x000 },
+- { 0x00000007, 0x00494a23, 0x0dc },
+- { 0x00380f09, 0x00204811, 0x000 },
+- { 0x68000007, 0x00204811, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000a202, 0x00204411, 0x000 },
+- { 0x00ff0000, 0x00280e22, 0x000 },
+- { 0x00000080, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00200e2d, 0x000 },
+- { 0x00000026, 0x0020122d, 0x000 },
+- { 0x00000000, 0x002f0083, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0ea },
+- { 0x00000000, 0x00600000, 0x662 },
+- { 0x00000000, 0x00400000, 0x0eb },
+- { 0x00000000, 0x00600000, 0x665 },
+- { 0x00000007, 0x0020222d, 0x000 },
+- { 0x00000005, 0x00220e22, 0x000 },
+- { 0x00100000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x000000ef, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000003, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x0f8 },
+- { 0x0000000b, 0x00210228, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f8 },
+- { 0x00000400, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000001c, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0fd },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000001e, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x10b },
+- { 0x0000a30f, 0x00204411, 0x000 },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x104 },
+- { 0xffffffff, 0x00404811, 0x10b },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x107 },
+- { 0x0000ffff, 0x00404811, 0x10b },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x10a },
+- { 0x000000ff, 0x00404811, 0x10b },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0002c400, 0x00204411, 0x000 },
+- { 0x0000001f, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x112 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000018, 0x40224a20, 0x000 },
+- { 0x00000010, 0xc0424a20, 0x114 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000000a, 0x00201011, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x11b },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00531224, 0x117 },
+- { 0xffbfffff, 0x00283a2e, 0x000 },
+- { 0x0000001b, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x12e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x00000018, 0x00220e30, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e00e, 0x00204411, 0x000 },
+- { 0x07f8ff08, 0x00204811, 0x000 },
+- { 0x00000000, 0x00294a23, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00800000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204806, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x68c },
+- { 0x00000004, 0x00404c11, 0x135 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000001c, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x13c },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40280620, 0x000 },
+- { 0x00000010, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x00341461, 0x000 },
+- { 0x00000000, 0x00741882, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x147 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0681a20, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x158 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000001, 0x00300a2f, 0x000 },
+- { 0x00000001, 0x00210a22, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600000, 0x18f },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00202c08, 0x000 },
+- { 0x00000000, 0x00202411, 0x000 },
+- { 0x00000000, 0x00202811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00221e29, 0x000 },
+- { 0x00000000, 0x007048eb, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000001, 0x40330620, 0x000 },
+- { 0x00000000, 0xc0302409, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x181 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x186 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x186 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000001, 0x00530621, 0x182 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0604800, 0x197 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000011, 0x0020062d, 0x000 },
+- { 0x00000000, 0x0078042a, 0x2fb },
+- { 0x00000000, 0x00202809, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x174 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x194 },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x46000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x19b },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00804811, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40281620, 0x000 },
+- { 0x00000010, 0xc0811a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000008, 0x00221e30, 0x000 },
+- { 0x00000029, 0x00201a2d, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfffbff09, 0x00204811, 0x000 },
+- { 0x0000000f, 0x0020222d, 0x000 },
+- { 0x00001fff, 0x00294a28, 0x000 },
+- { 0x00000006, 0x0020222d, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000100, 0x00201811, 0x000 },
+- { 0x00000008, 0x00621e28, 0x12f },
+- { 0x00000008, 0x00822228, 0x000 },
+- { 0x0002c000, 0x00204411, 0x000 },
+- { 0x00000015, 0x00600e2d, 0x1bd },
+- { 0x00000016, 0x00600e2d, 0x1bd },
+- { 0x0000c008, 0x00204411, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x1b9 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x39000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00804802, 0x000 },
+- { 0x00000018, 0x00202e2d, 0x000 },
+- { 0x00000000, 0x003b0d63, 0x000 },
+- { 0x00000008, 0x00224a23, 0x000 },
+- { 0x00000010, 0x00224a23, 0x000 },
+- { 0x00000018, 0x00224a23, 0x000 },
+- { 0x00000000, 0x00804803, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000007, 0x0021062f, 0x000 },
+- { 0x00000013, 0x00200a2d, 0x000 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000ffff, 0x40282220, 0x000 },
+- { 0x0000000f, 0x00262228, 0x000 },
+- { 0x00000010, 0x40212620, 0x000 },
+- { 0x0000000f, 0x00262629, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1e0 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000081, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000080, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1dc },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1d8 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000001f, 0x00280a22, 0x000 },
+- { 0x0000001f, 0x00282a2a, 0x000 },
+- { 0x00000001, 0x00530621, 0x1d1 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000002, 0x00304a2f, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000001, 0x00301e2f, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1e5 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x0000000f, 0x00260e23, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000000f, 0x00261224, 0x000 },
+- { 0x00000000, 0x00201411, 0x000 },
+- { 0x00000000, 0x00601811, 0x2bb },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022b, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1f8 },
+- { 0x00000010, 0x00221628, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a29, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x0020480a, 0x000 },
+- { 0x00000000, 0x00202c11, 0x000 },
+- { 0x00000010, 0x00221623, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a24, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x00731503, 0x205 },
+- { 0x00000000, 0x00201805, 0x000 },
+- { 0x00000000, 0x00731524, 0x205 },
+- { 0x00000000, 0x002d14c5, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00000000, 0x00202003, 0x000 },
+- { 0x00000000, 0x00802404, 0x000 },
+- { 0x0000000f, 0x00210225, 0x000 },
+- { 0x00000000, 0x14c00000, 0x68c },
+- { 0x00000000, 0x002b1405, 0x000 },
+- { 0x00000001, 0x00901625, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00294a22, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a21, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000ffff, 0x40281220, 0x000 },
+- { 0x00000010, 0xc0211a20, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211620, 0x000 },
+- { 0x00000000, 0x00741465, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00000001, 0x00330621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x219 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x212 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000000, 0x0040040f, 0x213 },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00000000, 0x00600000, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x232 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x236 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x236 },
+- { 0x00000000, 0xc0404800, 0x233 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x00600411, 0x2fb },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000018, 0x40210a20, 0x000 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x24c },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x00080101, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x251 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000010, 0x00600411, 0x315 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00000000, 0x00600000, 0x27c },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000001, 0x00211e27, 0x000 },
+- { 0x00000000, 0x14e00000, 0x26a },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x0000ffff, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00341c27, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25f },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e5, 0x000 },
+- { 0x00000000, 0x08c00000, 0x262 },
+- { 0x00000000, 0x00201407, 0x000 },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00211e27, 0x000 },
+- { 0x00000000, 0x00341c47, 0x000 },
+- { 0x00000000, 0x12c00000, 0x267 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x08c00000, 0x26a },
+- { 0x00000000, 0x00201807, 0x000 },
+- { 0x00000000, 0x00600000, 0x2c1 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000000, 0x00342023, 0x000 },
+- { 0x00000000, 0x12c00000, 0x272 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x271 },
+- { 0x00000016, 0x00404811, 0x276 },
+- { 0x00000018, 0x00404811, 0x276 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x275 },
+- { 0x00000017, 0x00404811, 0x276 },
+- { 0x00000019, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00604411, 0x2e9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x256 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000010, 0x40210620, 0x000 },
+- { 0x0000ffff, 0xc0280a20, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0881a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x00000000, 0xc0600000, 0x2a3 },
+- { 0x00000005, 0x00200a2d, 0x000 },
+- { 0x00000008, 0x00220a22, 0x000 },
+- { 0x0000002b, 0x00201a2d, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00007000, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00311ce6, 0x000 },
+- { 0x0000002a, 0x00201a2d, 0x000 },
+- { 0x0000000c, 0x00221a26, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x06e00000, 0x292 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00691ce2, 0x12f },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x29d },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000001c, 0x00403627, 0x000 },
+- { 0x0000000c, 0xc0220a20, 0x000 },
+- { 0x00000029, 0x00203622, 0x000 },
+- { 0x00000028, 0xc0403620, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000009, 0x00204811, 0x000 },
+- { 0xa1000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce3, 0x000 },
+- { 0x00000021, 0x00203627, 0x000 },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce4, 0x000 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a3, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203624, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000000, 0x00311cc4, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14c00000, 0x2dc },
+- { 0x00000000, 0x00400000, 0x2d9 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2d9 },
+- { 0x00000003, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2dc },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e1, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a1, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e2, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000000, 0x00600000, 0x668 },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00600000, 0x65f },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2a7 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x0000001a, 0x00201e2d, 0x000 },
+- { 0x0000001b, 0x0080222d, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca1, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x003808c5, 0x000 },
+- { 0x00000000, 0x00300841, 0x000 },
+- { 0x00000001, 0x00220a22, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000017, 0x0020222d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x318 },
+- { 0xffffffef, 0x00280621, 0x000 },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x0000f8e0, 0x00204411, 0x000 },
+- { 0x00000000, 0x00294901, 0x000 },
+- { 0x00000000, 0x00894901, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00002257, 0x00204411, 0x000 },
+- { 0x00000003, 0xc0484a20, 0x000 },
+- { 0x0000225d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x00000001, 0x40304a20, 0x000 },
+- { 0x00000002, 0xc0304a20, 0x000 },
+- { 0x00000001, 0x00530a22, 0x34b },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x354 },
+- { 0x00000014, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x364 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00604802, 0x36e },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x36a },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x00000028, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5c0 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x0000002c, 0x00203626, 0x000 },
+- { 0x00000049, 0x00201811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000000, 0x002f0226, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x370 },
+- { 0x0000002c, 0x00801a2d, 0x000 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x00000015, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x386 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b1 },
+- { 0x00000016, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b5 },
+- { 0x00000020, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x39c },
+- { 0x0000000f, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x0000001e, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x390 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x08000000, 0x00290a22, 0x000 },
+- { 0x00000003, 0x40210e20, 0x000 },
+- { 0x0000000c, 0xc0211220, 0x000 },
+- { 0x00080000, 0x00281224, 0x000 },
+- { 0x00000014, 0xc0221620, 0x000 },
+- { 0x00000000, 0x002914a4, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948a2, 0x000 },
+- { 0x0000a1fe, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000015, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x392 },
+- { 0x0000210e, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000003, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x39e },
+- { 0x00002108, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x80000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000010, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3ae },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000006, 0x00404811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x0000001d, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3ce },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3c0 },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0xbabecafe, 0x00204811, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000004, 0x00404811, 0x000 },
+- { 0x00002170, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000a, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3d3 },
+- { 0x8c000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00003fff, 0x40280a20, 0x000 },
+- { 0x80000000, 0x40280e20, 0x000 },
+- { 0x40000000, 0xc0281220, 0x000 },
+- { 0x00040000, 0x00694622, 0x68d },
+- { 0x00000000, 0x00201410, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e1 },
+- { 0x00000000, 0xc0401800, 0x3e4 },
+- { 0x00003fff, 0xc0281a20, 0x000 },
+- { 0x00040000, 0x00694626, 0x68d },
+- { 0x00000000, 0x00201810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e7 },
+- { 0x00000000, 0xc0401c00, 0x3ea },
+- { 0x00003fff, 0xc0281e20, 0x000 },
+- { 0x00040000, 0x00694627, 0x68d },
+- { 0x00000000, 0x00201c10, 0x000 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0x002820c5, 0x000 },
+- { 0x00000000, 0x004948e8, 0x000 },
+- { 0xa5800000, 0x00200811, 0x000 },
+- { 0x00002000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x0000001f, 0xc0210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3f7 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000ffff, 0xc0481220, 0x3ff },
+- { 0xa7800000, 0x00200811, 0x000 },
+- { 0x0000a000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00304883, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xa9800000, 0x00200811, 0x000 },
+- { 0x0000c000, 0x00400c11, 0x3fa },
+- { 0xab800000, 0x00200811, 0x000 },
+- { 0x0000f8e0, 0x00400c11, 0x3fa },
+- { 0xad800000, 0x00200811, 0x000 },
+- { 0x0000f880, 0x00400c11, 0x3fa },
+- { 0xb3800000, 0x00200811, 0x000 },
+- { 0x0000f3fc, 0x00400c11, 0x3fa },
+- { 0xaf800000, 0x00200811, 0x000 },
+- { 0x0000e000, 0x00400c11, 0x3fa },
+- { 0xb1800000, 0x00200811, 0x000 },
+- { 0x0000f000, 0x00400c11, 0x3fa },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00002148, 0x00204811, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x01182000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0218a000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0318c000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0418f8e0, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0518f880, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0618e000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0718f000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0818f3fc, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000030, 0x00200a2d, 0x000 },
+- { 0x00000000, 0xc0290c40, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x86000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x85000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00000018, 0x40210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x445 },
+- { 0x00800000, 0xc0494a20, 0x446 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00404c02, 0x44b },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x00000000, 0xc0201400, 0x000 },
+- { 0x00000000, 0xc0201800, 0x000 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x459 },
+- { 0x00000000, 0xc0202000, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x00000010, 0x00280a23, 0x000 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x461 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0x00694624, 0x68d },
+- { 0x00000000, 0x00400000, 0x466 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00604805, 0x692 },
+- { 0x00000000, 0x002824f0, 0x000 },
+- { 0x00000007, 0x00280a23, 0x000 },
+- { 0x00000001, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46d },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x04e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000002, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x472 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x02e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x477 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x47c },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000005, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x481 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x06e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x486 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x08e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x000 },
+- { 0x00000008, 0x00210a23, 0x000 },
+- { 0x00000000, 0x14c00000, 0x490 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x499 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x00404c08, 0x459 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000011, 0x40211220, 0x000 },
+- { 0x00000012, 0x40211620, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00210225, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4a3 },
+- { 0x00040000, 0xc0494a20, 0x4a4 },
+- { 0xfffbffff, 0xc0284a20, 0x000 },
+- { 0x00000000, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4b0 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000c, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4ac },
+- { 0xa0000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x00204811, 0x000 },
+- { 0x0000216b, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000216c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4aa },
+- { 0x00000000, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4c3 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x692 },
+- { 0x00000000, 0x00400000, 0x4c7 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xc0600000, 0x68d },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4ce },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0404810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000000, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4d0 },
+- { 0x00002180, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000003, 0x00333e2f, 0x000 },
+- { 0x00000001, 0x00210221, 0x000 },
+- { 0x00000000, 0x14e00000, 0x500 },
+- { 0x0000002c, 0x00200a2d, 0x000 },
+- { 0x00040000, 0x18e00c11, 0x4ef },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xd8c04800, 0x4e3 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000002d, 0x0020122d, 0x000 },
+- { 0x00000000, 0x00290c83, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000011, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4aa },
+- { 0x0000002c, 0xc0203620, 0x000 },
+- { 0x0000002d, 0xc0403620, 0x000 },
+- { 0x0000000f, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x505 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0xd9000000, 0x000 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xb5000000, 0x00204411, 0x000 },
+- { 0x00002000, 0x00204811, 0x000 },
+- { 0xb6000000, 0x00204411, 0x000 },
+- { 0x0000a000, 0x00204811, 0x000 },
+- { 0xb7000000, 0x00204411, 0x000 },
+- { 0x0000c000, 0x00204811, 0x000 },
+- { 0xb8000000, 0x00204411, 0x000 },
+- { 0x0000f8e0, 0x00204811, 0x000 },
+- { 0xb9000000, 0x00204411, 0x000 },
+- { 0x0000f880, 0x00204811, 0x000 },
+- { 0xba000000, 0x00204411, 0x000 },
+- { 0x0000e000, 0x00204811, 0x000 },
+- { 0xbb000000, 0x00204411, 0x000 },
+- { 0x0000f000, 0x00204811, 0x000 },
+- { 0xbc000000, 0x00204411, 0x000 },
+- { 0x0000f3fc, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00204811, 0x000 },
+- { 0x000000ff, 0x00280e30, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x519 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x14c00000, 0x52e },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000001c, 0x00203623, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x00000028, 0x00203623, 0x000 },
+- { 0x00000017, 0x00203623, 0x000 },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203623, 0x000 },
+- { 0x00000015, 0x00203623, 0x000 },
+- { 0x00000016, 0x00203623, 0x000 },
+- { 0xffffe000, 0x00200c11, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00200c11, 0x000 },
+- { 0x00000023, 0x00203623, 0x000 },
+- { 0x00000024, 0x00203623, 0x000 },
+- { 0xf1ffffff, 0x00283a2e, 0x000 },
+- { 0x0000001a, 0xc0220e20, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000002a, 0x40203620, 0x000 },
+- { 0x87000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x9d000000, 0x00204411, 0x000 },
+- { 0x0000001f, 0x40214a20, 0x000 },
+- { 0x96000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x0000001f, 0x00211624, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x0000001d, 0x00203623, 0x000 },
+- { 0x00000003, 0x00281e23, 0x000 },
+- { 0x00000008, 0x00222223, 0x000 },
+- { 0xfffff000, 0x00282228, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x0000001f, 0x00203628, 0x000 },
+- { 0x00000018, 0x00211e23, 0x000 },
+- { 0x00000020, 0x00203627, 0x000 },
+- { 0x00000002, 0x00221624, 0x000 },
+- { 0x00000000, 0x003014a8, 0x000 },
+- { 0x0000001e, 0x00203625, 0x000 },
+- { 0x00000003, 0x00211a24, 0x000 },
+- { 0x10000000, 0x00281a26, 0x000 },
+- { 0xefffffff, 0x00283a2e, 0x000 },
+- { 0x00000000, 0x004938ce, 0x67b },
+- { 0x00000001, 0x40280a20, 0x000 },
+- { 0x00000006, 0x40280e20, 0x000 },
+- { 0x00000300, 0xc0281220, 0x000 },
+- { 0x00000008, 0x00211224, 0x000 },
+- { 0x00000000, 0xc0201620, 0x000 },
+- { 0x00000000, 0xc0201a20, 0x000 },
+- { 0x00000000, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x566 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68d },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00020000, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56e },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x57c },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68d },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x57c },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x572 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00000000, 0xc0400000, 0x57c },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x57a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x692 },
+- { 0x00000000, 0x00401c10, 0x57c },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x57e },
+- { 0x00000000, 0x00600000, 0x5c9 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x58f },
+- { 0x0000a2b7, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c4, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x58d },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000001, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5a0 },
+- { 0x0000a2bb, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c5, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x59e },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000002, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5b1 },
+- { 0x0000a2bf, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c6, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5af },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x0000a2c3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c7, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5be },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0x01000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00400000, 0x5c4 },
+- { 0xa4000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5c9 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000002c, 0x00203621, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5d0 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000030, 0x00403621, 0x5e3 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x5e3 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a092, 0x00604411, 0x68d },
+- { 0x00000031, 0x00203630, 0x000 },
+- { 0x0004a093, 0x00604411, 0x68d },
+- { 0x00000032, 0x00203630, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68d },
+- { 0x00000033, 0x00203630, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68d },
+- { 0x00000034, 0x00203630, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68d },
+- { 0x00000035, 0x00203630, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68d },
+- { 0x00000036, 0x00203630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x88000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000001, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62c },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62c },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x605 },
+- { 0x0000a092, 0x00204411, 0x000 },
+- { 0x00000031, 0x00204a2d, 0x000 },
+- { 0x0000a093, 0x00204411, 0x000 },
+- { 0x00000032, 0x00204a2d, 0x000 },
+- { 0x0000a2b6, 0x00204411, 0x000 },
+- { 0x00000033, 0x00204a2d, 0x000 },
+- { 0x0000a2ba, 0x00204411, 0x000 },
+- { 0x00000034, 0x00204a2d, 0x000 },
+- { 0x0000a2be, 0x00204411, 0x000 },
+- { 0x00000035, 0x00204a2d, 0x000 },
+- { 0x0000a2c2, 0x00204411, 0x000 },
+- { 0x00000036, 0x00204a2d, 0x000 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x000001ff, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62b },
+- { 0x00000000, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x60e },
+- { 0x0004a003, 0x00604411, 0x68d },
+- { 0x0000a003, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x14c00000, 0x613 },
+- { 0x0004a010, 0x00604411, 0x68d },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62b },
+- { 0x0004a011, 0x00604411, 0x68d },
+- { 0x0000a011, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a012, 0x00604411, 0x68d },
+- { 0x0000a012, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a013, 0x00604411, 0x68d },
+- { 0x0000a013, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a014, 0x00604411, 0x68d },
+- { 0x0000a014, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a015, 0x00604411, 0x68d },
+- { 0x0000a015, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a016, 0x00604411, 0x68d },
+- { 0x0000a016, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a017, 0x00604411, 0x68d },
+- { 0x0000a017, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000002c, 0x0080062d, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x63d },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000002, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x63b },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x00001000, 0x00200811, 0x000 },
+- { 0x0000002b, 0x00203622, 0x000 },
+- { 0x00000000, 0x00600000, 0x641 },
+- { 0x00000000, 0x00600000, 0x5c9 },
+- { 0x98000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0600000, 0x641 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000022, 0x00204811, 0x000 },
+- { 0x89000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00404811, 0x62d },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404811, 0x62d },
+- { 0x00000000, 0x00600000, 0x65c },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0xc0204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x09800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000004, 0x00404c11, 0x656 },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000004, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffffb, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffff7, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x01800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x68c },
+- { 0x00000010, 0x00404c11, 0x672 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x38c00000, 0x000 },
+- { 0x0000001d, 0x00200a2d, 0x000 },
+- { 0x0000001e, 0x00200e2d, 0x000 },
+- { 0x0000001f, 0x0020122d, 0x000 },
+- { 0x00000020, 0x0020162d, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000004, 0x00301224, 0x000 },
+- { 0x00000000, 0x002f0064, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x68b },
+- { 0x00000003, 0x00281a22, 0x000 },
+- { 0x00000008, 0x00221222, 0x000 },
+- { 0xfffff000, 0x00281224, 0x000 },
+- { 0x00000000, 0x002910c4, 0x000 },
+- { 0x0000001f, 0x00403624, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x68d },
+- { 0x9f000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x690 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x692 },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x695 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0xc0204411, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000024, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000022, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x01420502, 0x05c00250, 0x000 },
+- { 0x01c30168, 0x043f05c0, 0x000 },
+- { 0x02250209, 0x02500151, 0x000 },
+- { 0x02230245, 0x02a00241, 0x000 },
+- { 0x03d705c0, 0x05c005c0, 0x000 },
+- { 0x0649064a, 0x031f05c0, 0x000 },
+- { 0x05c005c5, 0x03200340, 0x000 },
+- { 0x032a0282, 0x03420334, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c00551, 0x05c005c0, 0x000 },
+- { 0x03ba05c0, 0x04bb0344, 0x000 },
+- { 0x049a0450, 0x043d05c0, 0x000 },
+- { 0x04d005c0, 0x044104dd, 0x000 },
+- { 0x04500507, 0x03510375, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x063f05c7, 0x000 },
+- { 0x05c005c0, 0x000705c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x03f803ed, 0x04080406, 0x000 },
+- { 0x040e040a, 0x040c0410, 0x000 },
+- { 0x041c0418, 0x04240420, 0x000 },
+- { 0x042c0428, 0x04340430, 0x000 },
+- { 0x05c005c0, 0x043805c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x00020679, 0x06970006, 0x000 },
+-};
+-
+-static const u32 RV610_pfp_microcode[] = {
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0x7c038b,
+-0x8001b8,
+-0x7c038b,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xc41838,
+-0xca2400,
+-0xca2800,
+-0x9581a8,
+-0xc41c3a,
+-0xc3c000,
+-0xca0800,
+-0xca0c00,
+-0x7c744b,
+-0xc20005,
+-0x99c000,
+-0xc41c3a,
+-0x7c744c,
+-0xc0fff0,
+-0x042c04,
+-0x309002,
+-0x7d2500,
+-0x351402,
+-0x7d350b,
+-0x255403,
+-0x7cd580,
+-0x259c03,
+-0x95c004,
+-0xd5001b,
+-0x7eddc1,
+-0x7d9d80,
+-0xd6801b,
+-0xd5801b,
+-0xd4401e,
+-0xd5401e,
+-0xd6401e,
+-0xd6801e,
+-0xd4801e,
+-0xd4c01e,
+-0x9783d3,
+-0xd5c01e,
+-0xca0800,
+-0x80001a,
+-0xca0c00,
+-0xe4011e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xe4013e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca1800,
+-0xd4401e,
+-0xd5801e,
+-0x800053,
+-0xd40075,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xe2001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0xd48060,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xd48061,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xca0c00,
+-0xd4401e,
+-0xd48016,
+-0xd4c016,
+-0xd4801e,
+-0x8001b8,
+-0xd4c01e,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x948004,
+-0xca1400,
+-0xe420f3,
+-0xd42013,
+-0xd56065,
+-0xd4e01c,
+-0xd5201c,
+-0xd5601c,
+-0x800000,
+-0x062001,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9483f7,
+-0xca1400,
+-0xe420f3,
+-0x800079,
+-0xd42013,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9883ef,
+-0xca1400,
+-0xd40064,
+-0x80008d,
+-0x000000,
+-0xc41432,
+-0xc61843,
+-0xc4082f,
+-0x954005,
+-0xc40c30,
+-0xd4401e,
+-0x800000,
+-0xee001e,
+-0x9583f5,
+-0xc41031,
+-0xd44033,
+-0xd52065,
+-0xd4a01c,
+-0xd4e01c,
+-0xd5201c,
+-0xe4015e,
+-0xd4001e,
+-0x800000,
+-0x062001,
+-0xca1800,
+-0x0a2001,
+-0xd60076,
+-0xc40836,
+-0x988007,
+-0xc61045,
+-0x950110,
+-0xd4001f,
+-0xd46062,
+-0x800000,
+-0xd42062,
+-0xcc3835,
+-0xcc1433,
+-0x8401bb,
+-0xd40072,
+-0xd5401e,
+-0x800000,
+-0xee001e,
+-0xe2001a,
+-0x8401bb,
+-0xe2001a,
+-0xcc104b,
+-0xcc0447,
+-0x2c9401,
+-0x7d098b,
+-0x984005,
+-0x7d15cb,
+-0xd4001a,
+-0x8001b8,
+-0xd4006d,
+-0x344401,
+-0xcc0c48,
+-0x98403a,
+-0xcc2c4a,
+-0x958004,
+-0xcc0449,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0x282801,
+-0x8400f0,
+-0xcc1003,
+-0x98801b,
+-0x04380c,
+-0x8400f0,
+-0xcc1003,
+-0x988017,
+-0x043808,
+-0x8400f0,
+-0xcc1003,
+-0x988013,
+-0x043804,
+-0x8400f0,
+-0xcc1003,
+-0x988014,
+-0xcc104c,
+-0x9a8009,
+-0xcc144d,
+-0x9840dc,
+-0xd4006d,
+-0xcc1848,
+-0xd5001a,
+-0xd5401a,
+-0x8000c9,
+-0xd5801a,
+-0x96c0d5,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0x9ac003,
+-0xd4006d,
+-0xd4006e,
+-0x800000,
+-0xec007f,
+-0x9ac0cc,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0x7d9103,
+-0x7dd583,
+-0x7d190c,
+-0x35cc1f,
+-0x35701f,
+-0x7cf0cb,
+-0x7cd08b,
+-0x880000,
+-0x7e8e8b,
+-0x95c004,
+-0xd4006e,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0xcc0803,
+-0xcc0c03,
+-0xcc1003,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0xcc2403,
+-0xcc2803,
+-0x35c41f,
+-0x36b01f,
+-0x7c704b,
+-0x34f01f,
+-0x7c704b,
+-0x35701f,
+-0x7c704b,
+-0x7d8881,
+-0x7dccc1,
+-0x7e5101,
+-0x7e9541,
+-0x7c9082,
+-0x7cd4c2,
+-0x7c848b,
+-0x9ac003,
+-0x7c8c8b,
+-0x2c8801,
+-0x98809e,
+-0xd4006d,
+-0x98409c,
+-0xd4006e,
+-0xcc084c,
+-0xcc0c4d,
+-0xcc1048,
+-0xd4801a,
+-0xd4c01a,
+-0x800101,
+-0xd5001a,
+-0xcc0832,
+-0xd40032,
+-0x9482d9,
+-0xca0c00,
+-0xd4401e,
+-0x800000,
+-0xd4001e,
+-0xe4011e,
+-0xd4001e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd4401e,
+-0xca1400,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xd5401e,
+-0xd54034,
+-0x800000,
+-0xee001e,
+-0x280404,
+-0xe2001a,
+-0xe2001a,
+-0xd4401a,
+-0xca3800,
+-0xcc0803,
+-0xcc0c03,
+-0xcc0c03,
+-0xcc0c03,
+-0x9882bd,
+-0x000000,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0400,
+-0xc2ff00,
+-0xcc0834,
+-0xc13fff,
+-0x7c74cb,
+-0x7cc90b,
+-0x7d010f,
+-0x9902b0,
+-0x7c738b,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0800,
+-0x281900,
+-0x7d898b,
+-0x958014,
+-0x281404,
+-0xca0c00,
+-0xca1000,
+-0xca1c00,
+-0xca2400,
+-0xe2001f,
+-0xd4c01a,
+-0xd5001a,
+-0xd5401a,
+-0xcc1803,
+-0xcc2c03,
+-0xcc2c03,
+-0xcc2c03,
+-0x7da58b,
+-0x7d9c47,
+-0x984297,
+-0x000000,
+-0x800161,
+-0xd4c01a,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c06,
+-0x0ccc06,
+-0x98c006,
+-0xcc104e,
+-0x990004,
+-0xd40073,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xca0800,
+-0xca0c00,
+-0x34d018,
+-0x251001,
+-0x950021,
+-0xc17fff,
+-0xca1000,
+-0xca1400,
+-0xca1800,
+-0xd4801d,
+-0xd4c01d,
+-0x7db18b,
+-0xc14202,
+-0xc2c001,
+-0xd5801d,
+-0x34dc0e,
+-0x7d5d4c,
+-0x7f734c,
+-0xd7401e,
+-0xd5001e,
+-0xd5401e,
+-0xc14200,
+-0xc2c000,
+-0x099c01,
+-0x31dc10,
+-0x7f5f4c,
+-0x7f734c,
+-0x042802,
+-0x7d8380,
+-0xd5a86f,
+-0xd58066,
+-0xd7401e,
+-0xec005e,
+-0xc82402,
+-0xc82402,
+-0x8001b8,
+-0xd60076,
+-0xd4401e,
+-0xd4801e,
+-0xd4c01e,
+-0x800000,
+-0xee001e,
+-0x800000,
+-0xee001f,
+-0xd4001f,
+-0x800000,
+-0xd4001f,
+-0xd4001f,
+-0x880000,
+-0xd4001f,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x010171,
+-0x020178,
+-0x03008f,
+-0x04007f,
+-0x050003,
+-0x06003f,
+-0x070032,
+-0x08012c,
+-0x090046,
+-0x0a0036,
+-0x1001b6,
+-0x1700a2,
+-0x22013a,
+-0x230149,
+-0x2000b4,
+-0x240125,
+-0x27004d,
+-0x28006a,
+-0x2a0060,
+-0x2b0052,
+-0x2f0065,
+-0x320087,
+-0x34017f,
+-0x3c0156,
+-0x3f0072,
+-0x41018c,
+-0x44012e,
+-0x550173,
+-0x56017a,
+-0x60000b,
+-0x610034,
+-0x620038,
+-0x630038,
+-0x640038,
+-0x650038,
+-0x660038,
+-0x670038,
+-0x68003a,
+-0x690041,
+-0x6a0048,
+-0x6b0048,
+-0x6c0048,
+-0x6d0048,
+-0x6e0048,
+-0x6f0048,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-};
+-
+-static const u32 RV620_cp_microcode[][3] = {
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0000ffff, 0x00284621, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000000, 0x00e00000, 0x000 },
+- { 0x00010000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000f00, 0x00281622, 0x000 },
+- { 0x00000008, 0x00211625, 0x000 },
+- { 0x00000018, 0x00203625, 0x000 },
+- { 0x8d000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x002f0225, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x018 },
+- { 0x00412000, 0x00404811, 0x019 },
+- { 0x00422000, 0x00204811, 0x000 },
+- { 0x8e000000, 0x00204411, 0x000 },
+- { 0x00000028, 0x00204a2d, 0x000 },
+- { 0x90000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x0000000c, 0x00211622, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000019, 0x00211a22, 0x000 },
+- { 0x00000004, 0x00281a26, 0x000 },
+- { 0x00000000, 0x002914c5, 0x000 },
+- { 0x00000019, 0x00203625, 0x000 },
+- { 0x00000000, 0x003a1402, 0x000 },
+- { 0x00000016, 0x00211625, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0xfffffffc, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002914a3, 0x000 },
+- { 0x00000017, 0x00203625, 0x000 },
+- { 0x00008000, 0x00280e22, 0x000 },
+- { 0x00000007, 0x00220e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x20000000, 0x00280e22, 0x000 },
+- { 0x00000006, 0x00210e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x00000000, 0x00220222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x038 },
+- { 0x00000000, 0x2ee00000, 0x035 },
+- { 0x00000000, 0x2ce00000, 0x037 },
+- { 0x00000000, 0x00400e2d, 0x039 },
+- { 0x00000008, 0x00200e2d, 0x000 },
+- { 0x00000009, 0x0040122d, 0x046 },
+- { 0x00000001, 0x00400e2d, 0x039 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x03e },
+- { 0x00000008, 0x00401c11, 0x041 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x0000000f, 0x00281e27, 0x000 },
+- { 0x00000003, 0x00221e27, 0x000 },
+- { 0x7fc00000, 0x00281a23, 0x000 },
+- { 0x00000014, 0x00211a26, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000008, 0x00221a26, 0x000 },
+- { 0x00000000, 0x00290cc7, 0x000 },
+- { 0x00000027, 0x00203624, 0x000 },
+- { 0x00007f00, 0x00281221, 0x000 },
+- { 0x00001400, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x04b },
+- { 0x00000001, 0x00290e23, 0x000 },
+- { 0x0000000e, 0x00203623, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfff80000, 0x00294a23, 0x000 },
+- { 0x00000000, 0x003a2c02, 0x000 },
+- { 0x00000002, 0x00220e2b, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x0000000f, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00204a2d, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000029, 0x00200e2d, 0x000 },
+- { 0x060a0200, 0x00294a23, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x061 },
+- { 0x00000000, 0x2ee00000, 0x05f },
+- { 0x00000000, 0x2ce00000, 0x05e },
+- { 0x00000000, 0x00400e2d, 0x062 },
+- { 0x00000001, 0x00400e2d, 0x062 },
+- { 0x0000000a, 0x00200e2d, 0x000 },
+- { 0x0000000b, 0x0040122d, 0x06a },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x7fc00000, 0x00281623, 0x000 },
+- { 0x00000014, 0x00211625, 0x000 },
+- { 0x00000001, 0x00331625, 0x000 },
+- { 0x80000000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00290ca3, 0x000 },
+- { 0x3ffffc00, 0x00290e23, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x06d },
+- { 0x00000100, 0x00401c11, 0x070 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x000000f0, 0x00281e27, 0x000 },
+- { 0x00000004, 0x00221e27, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0xfffff0ff, 0x00281a30, 0x000 },
+- { 0x0000a028, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948e6, 0x000 },
+- { 0x0000a018, 0x00204411, 0x000 },
+- { 0x3fffffff, 0x00284a23, 0x000 },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000030, 0x0020162d, 0x000 },
+- { 0x00000002, 0x00291625, 0x000 },
+- { 0x00000030, 0x00203625, 0x000 },
+- { 0x00000025, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a3, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x083 },
+- { 0x00000026, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a4, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x084 },
+- { 0x00000000, 0x00400000, 0x08a },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203624, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x08a },
+- { 0x00000000, 0x00600000, 0x668 },
+- { 0x00000000, 0x00600000, 0x65c },
+- { 0x00000002, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x08d },
+- { 0x00000012, 0xc0403620, 0x093 },
+- { 0x00000000, 0x2ee00000, 0x091 },
+- { 0x00000000, 0x2ce00000, 0x090 },
+- { 0x00000002, 0x00400e2d, 0x092 },
+- { 0x00000003, 0x00400e2d, 0x092 },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000012, 0x00203623, 0x000 },
+- { 0x00000003, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x098 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x0a0 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x2ee00000, 0x09e },
+- { 0x00000000, 0x2ce00000, 0x09d },
+- { 0x00000002, 0x00400e2d, 0x09f },
+- { 0x00000003, 0x00400e2d, 0x09f },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x003f0000, 0x00280e23, 0x000 },
+- { 0x00000010, 0x00210e23, 0x000 },
+- { 0x00000011, 0x00203623, 0x000 },
+- { 0x0000001e, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a7 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x0000001f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0aa },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000008, 0x00210e2b, 0x000 },
+- { 0x0000007f, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0e1 },
+- { 0x00000000, 0x27000000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x0b3 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000000c, 0x00221e30, 0x000 },
+- { 0x99800000, 0x00204411, 0x000 },
+- { 0x00000004, 0x0020122d, 0x000 },
+- { 0x00000008, 0x00221224, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00291ce4, 0x000 },
+- { 0x00000000, 0x00604807, 0x12f },
+- { 0x9b000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x9c000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x0033146f, 0x000 },
+- { 0x00000001, 0x00333e23, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0x00203c05, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e007, 0x00204411, 0x000 },
+- { 0x0000000f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0cb },
+- { 0x00f8ff08, 0x00204811, 0x000 },
+- { 0x98000000, 0x00404811, 0x0dc },
+- { 0x000000f0, 0x00280e22, 0x000 },
+- { 0x000000a0, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0da },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d5 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d4 },
+- { 0x00003f00, 0x00400c11, 0x0d6 },
+- { 0x00001f00, 0x00400c11, 0x0d6 },
+- { 0x00000f00, 0x00200c11, 0x000 },
+- { 0x00380009, 0x00294a23, 0x000 },
+- { 0x3f000000, 0x00280e2b, 0x000 },
+- { 0x00000002, 0x00220e23, 0x000 },
+- { 0x00000007, 0x00494a23, 0x0dc },
+- { 0x00380f09, 0x00204811, 0x000 },
+- { 0x68000007, 0x00204811, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000a202, 0x00204411, 0x000 },
+- { 0x00ff0000, 0x00280e22, 0x000 },
+- { 0x00000080, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00200e2d, 0x000 },
+- { 0x00000026, 0x0020122d, 0x000 },
+- { 0x00000000, 0x002f0083, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0ea },
+- { 0x00000000, 0x00600000, 0x662 },
+- { 0x00000000, 0x00400000, 0x0eb },
+- { 0x00000000, 0x00600000, 0x665 },
+- { 0x00000007, 0x0020222d, 0x000 },
+- { 0x00000005, 0x00220e22, 0x000 },
+- { 0x00100000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x000000ef, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000003, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x0f8 },
+- { 0x0000000b, 0x00210228, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f8 },
+- { 0x00000400, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000001c, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0fd },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000001e, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x10b },
+- { 0x0000a30f, 0x00204411, 0x000 },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x104 },
+- { 0xffffffff, 0x00404811, 0x10b },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x107 },
+- { 0x0000ffff, 0x00404811, 0x10b },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x10a },
+- { 0x000000ff, 0x00404811, 0x10b },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0002c400, 0x00204411, 0x000 },
+- { 0x0000001f, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x112 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000018, 0x40224a20, 0x000 },
+- { 0x00000010, 0xc0424a20, 0x114 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000000a, 0x00201011, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x11b },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00531224, 0x117 },
+- { 0xffbfffff, 0x00283a2e, 0x000 },
+- { 0x0000001b, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x12e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x00000018, 0x00220e30, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e00e, 0x00204411, 0x000 },
+- { 0x07f8ff08, 0x00204811, 0x000 },
+- { 0x00000000, 0x00294a23, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00800000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204806, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x68c },
+- { 0x00000004, 0x00404c11, 0x135 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000001c, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x13c },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40280620, 0x000 },
+- { 0x00000010, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x00341461, 0x000 },
+- { 0x00000000, 0x00741882, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x147 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0681a20, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x158 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000001, 0x00300a2f, 0x000 },
+- { 0x00000001, 0x00210a22, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600000, 0x18f },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00202c08, 0x000 },
+- { 0x00000000, 0x00202411, 0x000 },
+- { 0x00000000, 0x00202811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00221e29, 0x000 },
+- { 0x00000000, 0x007048eb, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000001, 0x40330620, 0x000 },
+- { 0x00000000, 0xc0302409, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x181 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x186 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x186 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000001, 0x00530621, 0x182 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0604800, 0x197 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000011, 0x0020062d, 0x000 },
+- { 0x00000000, 0x0078042a, 0x2fb },
+- { 0x00000000, 0x00202809, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x174 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x194 },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x46000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x19b },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00804811, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40281620, 0x000 },
+- { 0x00000010, 0xc0811a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000008, 0x00221e30, 0x000 },
+- { 0x00000029, 0x00201a2d, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfffbff09, 0x00204811, 0x000 },
+- { 0x0000000f, 0x0020222d, 0x000 },
+- { 0x00001fff, 0x00294a28, 0x000 },
+- { 0x00000006, 0x0020222d, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000100, 0x00201811, 0x000 },
+- { 0x00000008, 0x00621e28, 0x12f },
+- { 0x00000008, 0x00822228, 0x000 },
+- { 0x0002c000, 0x00204411, 0x000 },
+- { 0x00000015, 0x00600e2d, 0x1bd },
+- { 0x00000016, 0x00600e2d, 0x1bd },
+- { 0x0000c008, 0x00204411, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x1b9 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x39000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00804802, 0x000 },
+- { 0x00000018, 0x00202e2d, 0x000 },
+- { 0x00000000, 0x003b0d63, 0x000 },
+- { 0x00000008, 0x00224a23, 0x000 },
+- { 0x00000010, 0x00224a23, 0x000 },
+- { 0x00000018, 0x00224a23, 0x000 },
+- { 0x00000000, 0x00804803, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000007, 0x0021062f, 0x000 },
+- { 0x00000013, 0x00200a2d, 0x000 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000ffff, 0x40282220, 0x000 },
+- { 0x0000000f, 0x00262228, 0x000 },
+- { 0x00000010, 0x40212620, 0x000 },
+- { 0x0000000f, 0x00262629, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1e0 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000081, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000080, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1dc },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1d8 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000001f, 0x00280a22, 0x000 },
+- { 0x0000001f, 0x00282a2a, 0x000 },
+- { 0x00000001, 0x00530621, 0x1d1 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000002, 0x00304a2f, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000001, 0x00301e2f, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1e5 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x0000000f, 0x00260e23, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000000f, 0x00261224, 0x000 },
+- { 0x00000000, 0x00201411, 0x000 },
+- { 0x00000000, 0x00601811, 0x2bb },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022b, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1f8 },
+- { 0x00000010, 0x00221628, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a29, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x0020480a, 0x000 },
+- { 0x00000000, 0x00202c11, 0x000 },
+- { 0x00000010, 0x00221623, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a24, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x00731503, 0x205 },
+- { 0x00000000, 0x00201805, 0x000 },
+- { 0x00000000, 0x00731524, 0x205 },
+- { 0x00000000, 0x002d14c5, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00000000, 0x00202003, 0x000 },
+- { 0x00000000, 0x00802404, 0x000 },
+- { 0x0000000f, 0x00210225, 0x000 },
+- { 0x00000000, 0x14c00000, 0x68c },
+- { 0x00000000, 0x002b1405, 0x000 },
+- { 0x00000001, 0x00901625, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00294a22, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a21, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000ffff, 0x40281220, 0x000 },
+- { 0x00000010, 0xc0211a20, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211620, 0x000 },
+- { 0x00000000, 0x00741465, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00000001, 0x00330621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x219 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x212 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000000, 0x0040040f, 0x213 },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00000000, 0x00600000, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x232 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x236 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x236 },
+- { 0x00000000, 0xc0404800, 0x233 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x00600411, 0x2fb },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000018, 0x40210a20, 0x000 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x24c },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x00080101, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x251 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000010, 0x00600411, 0x315 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00000000, 0x00600000, 0x27c },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000001, 0x00211e27, 0x000 },
+- { 0x00000000, 0x14e00000, 0x26a },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x0000ffff, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00341c27, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25f },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e5, 0x000 },
+- { 0x00000000, 0x08c00000, 0x262 },
+- { 0x00000000, 0x00201407, 0x000 },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00211e27, 0x000 },
+- { 0x00000000, 0x00341c47, 0x000 },
+- { 0x00000000, 0x12c00000, 0x267 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x08c00000, 0x26a },
+- { 0x00000000, 0x00201807, 0x000 },
+- { 0x00000000, 0x00600000, 0x2c1 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000000, 0x00342023, 0x000 },
+- { 0x00000000, 0x12c00000, 0x272 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x271 },
+- { 0x00000016, 0x00404811, 0x276 },
+- { 0x00000018, 0x00404811, 0x276 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x275 },
+- { 0x00000017, 0x00404811, 0x276 },
+- { 0x00000019, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00604411, 0x2e9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x256 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000010, 0x40210620, 0x000 },
+- { 0x0000ffff, 0xc0280a20, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0881a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x00000000, 0x00600000, 0x631 },
+- { 0x00000000, 0xc0600000, 0x2a3 },
+- { 0x00000005, 0x00200a2d, 0x000 },
+- { 0x00000008, 0x00220a22, 0x000 },
+- { 0x0000002b, 0x00201a2d, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00007000, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00311ce6, 0x000 },
+- { 0x0000002a, 0x00201a2d, 0x000 },
+- { 0x0000000c, 0x00221a26, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x06e00000, 0x292 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00691ce2, 0x12f },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x29d },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000001c, 0x00403627, 0x000 },
+- { 0x0000000c, 0xc0220a20, 0x000 },
+- { 0x00000029, 0x00203622, 0x000 },
+- { 0x00000028, 0xc0403620, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000009, 0x00204811, 0x000 },
+- { 0xa1000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce3, 0x000 },
+- { 0x00000021, 0x00203627, 0x000 },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce4, 0x000 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a3, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203624, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000000, 0x00311cc4, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14c00000, 0x2dc },
+- { 0x00000000, 0x00400000, 0x2d9 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2d9 },
+- { 0x00000003, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2dc },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e1, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a1, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e2, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000000, 0x00600000, 0x668 },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00600000, 0x65f },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2a7 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x0000001a, 0x00201e2d, 0x000 },
+- { 0x0000001b, 0x0080222d, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca1, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x003808c5, 0x000 },
+- { 0x00000000, 0x00300841, 0x000 },
+- { 0x00000001, 0x00220a22, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000017, 0x0020222d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x318 },
+- { 0xffffffef, 0x00280621, 0x000 },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x0000f8e0, 0x00204411, 0x000 },
+- { 0x00000000, 0x00294901, 0x000 },
+- { 0x00000000, 0x00894901, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00002257, 0x00204411, 0x000 },
+- { 0x00000003, 0xc0484a20, 0x000 },
+- { 0x0000225d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x645 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x00000001, 0x40304a20, 0x000 },
+- { 0x00000002, 0xc0304a20, 0x000 },
+- { 0x00000001, 0x00530a22, 0x34b },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x354 },
+- { 0x00000014, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x364 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00604802, 0x36e },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x36a },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x00000028, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5c0 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x0000002c, 0x00203626, 0x000 },
+- { 0x00000049, 0x00201811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000000, 0x002f0226, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x370 },
+- { 0x0000002c, 0x00801a2d, 0x000 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x00000015, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x386 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b1 },
+- { 0x00000016, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b5 },
+- { 0x00000020, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x39c },
+- { 0x0000000f, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x0000001e, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x390 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x08000000, 0x00290a22, 0x000 },
+- { 0x00000003, 0x40210e20, 0x000 },
+- { 0x0000000c, 0xc0211220, 0x000 },
+- { 0x00080000, 0x00281224, 0x000 },
+- { 0x00000014, 0xc0221620, 0x000 },
+- { 0x00000000, 0x002914a4, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948a2, 0x000 },
+- { 0x0000a1fe, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000015, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x392 },
+- { 0x0000210e, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000003, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x39e },
+- { 0x00002108, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x80000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000010, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3ae },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000006, 0x00404811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x0000001d, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3ce },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3c0 },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0xbabecafe, 0x00204811, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000004, 0x00404811, 0x000 },
+- { 0x00002170, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000a, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3d3 },
+- { 0x8c000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00003fff, 0x40280a20, 0x000 },
+- { 0x80000000, 0x40280e20, 0x000 },
+- { 0x40000000, 0xc0281220, 0x000 },
+- { 0x00040000, 0x00694622, 0x68d },
+- { 0x00000000, 0x00201410, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e1 },
+- { 0x00000000, 0xc0401800, 0x3e4 },
+- { 0x00003fff, 0xc0281a20, 0x000 },
+- { 0x00040000, 0x00694626, 0x68d },
+- { 0x00000000, 0x00201810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e7 },
+- { 0x00000000, 0xc0401c00, 0x3ea },
+- { 0x00003fff, 0xc0281e20, 0x000 },
+- { 0x00040000, 0x00694627, 0x68d },
+- { 0x00000000, 0x00201c10, 0x000 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0x002820c5, 0x000 },
+- { 0x00000000, 0x004948e8, 0x000 },
+- { 0xa5800000, 0x00200811, 0x000 },
+- { 0x00002000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x0000001f, 0xc0210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3f7 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000ffff, 0xc0481220, 0x3ff },
+- { 0xa7800000, 0x00200811, 0x000 },
+- { 0x0000a000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00304883, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xa9800000, 0x00200811, 0x000 },
+- { 0x0000c000, 0x00400c11, 0x3fa },
+- { 0xab800000, 0x00200811, 0x000 },
+- { 0x0000f8e0, 0x00400c11, 0x3fa },
+- { 0xad800000, 0x00200811, 0x000 },
+- { 0x0000f880, 0x00400c11, 0x3fa },
+- { 0xb3800000, 0x00200811, 0x000 },
+- { 0x0000f3fc, 0x00400c11, 0x3fa },
+- { 0xaf800000, 0x00200811, 0x000 },
+- { 0x0000e000, 0x00400c11, 0x3fa },
+- { 0xb1800000, 0x00200811, 0x000 },
+- { 0x0000f000, 0x00400c11, 0x3fa },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00002148, 0x00204811, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x01182000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0218a000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0318c000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0418f8e0, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0518f880, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0618e000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0718f000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0818f3fc, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000030, 0x00200a2d, 0x000 },
+- { 0x00000000, 0xc0290c40, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x86000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x85000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00000018, 0x40210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x445 },
+- { 0x00800000, 0xc0494a20, 0x446 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00404c02, 0x44b },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x00000000, 0xc0201400, 0x000 },
+- { 0x00000000, 0xc0201800, 0x000 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x459 },
+- { 0x00000000, 0xc0202000, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x00000010, 0x00280a23, 0x000 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x461 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0x00694624, 0x68d },
+- { 0x00000000, 0x00400000, 0x466 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00604805, 0x692 },
+- { 0x00000000, 0x002824f0, 0x000 },
+- { 0x00000007, 0x00280a23, 0x000 },
+- { 0x00000001, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46d },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x04e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000002, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x472 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x02e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x477 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x47c },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000005, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x481 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x06e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x486 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x08e00000, 0x486 },
+- { 0x00000000, 0x00400000, 0x493 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x000 },
+- { 0x00000008, 0x00210a23, 0x000 },
+- { 0x00000000, 0x14c00000, 0x490 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x499 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x00404c08, 0x459 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000011, 0x40211220, 0x000 },
+- { 0x00000012, 0x40211620, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00210225, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4a3 },
+- { 0x00040000, 0xc0494a20, 0x4a4 },
+- { 0xfffbffff, 0xc0284a20, 0x000 },
+- { 0x00000000, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4b0 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000c, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4ac },
+- { 0xa0000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x00204811, 0x000 },
+- { 0x0000216b, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000216c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4aa },
+- { 0x00000000, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4c3 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x692 },
+- { 0x00000000, 0x00400000, 0x4c7 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xc0600000, 0x68d },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4ce },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0404810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68d },
+- { 0x00000000, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4d0 },
+- { 0x00002180, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000003, 0x00333e2f, 0x000 },
+- { 0x00000001, 0x00210221, 0x000 },
+- { 0x00000000, 0x14e00000, 0x500 },
+- { 0x0000002c, 0x00200a2d, 0x000 },
+- { 0x00040000, 0x18e00c11, 0x4ef },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xd8c04800, 0x4e3 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000002d, 0x0020122d, 0x000 },
+- { 0x00000000, 0x00290c83, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000011, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4aa },
+- { 0x0000002c, 0xc0203620, 0x000 },
+- { 0x0000002d, 0xc0403620, 0x000 },
+- { 0x0000000f, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x505 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0xd9000000, 0x000 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xb5000000, 0x00204411, 0x000 },
+- { 0x00002000, 0x00204811, 0x000 },
+- { 0xb6000000, 0x00204411, 0x000 },
+- { 0x0000a000, 0x00204811, 0x000 },
+- { 0xb7000000, 0x00204411, 0x000 },
+- { 0x0000c000, 0x00204811, 0x000 },
+- { 0xb8000000, 0x00204411, 0x000 },
+- { 0x0000f8e0, 0x00204811, 0x000 },
+- { 0xb9000000, 0x00204411, 0x000 },
+- { 0x0000f880, 0x00204811, 0x000 },
+- { 0xba000000, 0x00204411, 0x000 },
+- { 0x0000e000, 0x00204811, 0x000 },
+- { 0xbb000000, 0x00204411, 0x000 },
+- { 0x0000f000, 0x00204811, 0x000 },
+- { 0xbc000000, 0x00204411, 0x000 },
+- { 0x0000f3fc, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00204811, 0x000 },
+- { 0x000000ff, 0x00280e30, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x519 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x14c00000, 0x52e },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000001c, 0x00203623, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x00000028, 0x00203623, 0x000 },
+- { 0x00000017, 0x00203623, 0x000 },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203623, 0x000 },
+- { 0x00000015, 0x00203623, 0x000 },
+- { 0x00000016, 0x00203623, 0x000 },
+- { 0xffffe000, 0x00200c11, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00200c11, 0x000 },
+- { 0x00000023, 0x00203623, 0x000 },
+- { 0x00000024, 0x00203623, 0x000 },
+- { 0xf1ffffff, 0x00283a2e, 0x000 },
+- { 0x0000001a, 0xc0220e20, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000002a, 0x40203620, 0x000 },
+- { 0x87000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x9d000000, 0x00204411, 0x000 },
+- { 0x0000001f, 0x40214a20, 0x000 },
+- { 0x96000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x0000001f, 0x00211624, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x0000001d, 0x00203623, 0x000 },
+- { 0x00000003, 0x00281e23, 0x000 },
+- { 0x00000008, 0x00222223, 0x000 },
+- { 0xfffff000, 0x00282228, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x0000001f, 0x00203628, 0x000 },
+- { 0x00000018, 0x00211e23, 0x000 },
+- { 0x00000020, 0x00203627, 0x000 },
+- { 0x00000002, 0x00221624, 0x000 },
+- { 0x00000000, 0x003014a8, 0x000 },
+- { 0x0000001e, 0x00203625, 0x000 },
+- { 0x00000003, 0x00211a24, 0x000 },
+- { 0x10000000, 0x00281a26, 0x000 },
+- { 0xefffffff, 0x00283a2e, 0x000 },
+- { 0x00000000, 0x004938ce, 0x67b },
+- { 0x00000001, 0x40280a20, 0x000 },
+- { 0x00000006, 0x40280e20, 0x000 },
+- { 0x00000300, 0xc0281220, 0x000 },
+- { 0x00000008, 0x00211224, 0x000 },
+- { 0x00000000, 0xc0201620, 0x000 },
+- { 0x00000000, 0xc0201a20, 0x000 },
+- { 0x00000000, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x566 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68d },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00020000, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56e },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x57c },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68d },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x57c },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x572 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00000000, 0xc0400000, 0x57c },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x57a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x692 },
+- { 0x00000000, 0x00401c10, 0x57c },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x57e },
+- { 0x00000000, 0x00600000, 0x5c9 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x58f },
+- { 0x0000a2b7, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c4, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x58d },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000001, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5a0 },
+- { 0x0000a2bb, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c5, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x59e },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000002, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5b1 },
+- { 0x0000a2bf, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c6, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5af },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x0000a2c3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68d },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000a2c7, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5be },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0x01000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00400000, 0x5c4 },
+- { 0xa4000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5c9 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000002c, 0x00203621, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5d0 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000030, 0x00403621, 0x5e3 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x5e3 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a092, 0x00604411, 0x68d },
+- { 0x00000031, 0x00203630, 0x000 },
+- { 0x0004a093, 0x00604411, 0x68d },
+- { 0x00000032, 0x00203630, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68d },
+- { 0x00000033, 0x00203630, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68d },
+- { 0x00000034, 0x00203630, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68d },
+- { 0x00000035, 0x00203630, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68d },
+- { 0x00000036, 0x00203630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x88000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000001, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62c },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62c },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x605 },
+- { 0x0000a092, 0x00204411, 0x000 },
+- { 0x00000031, 0x00204a2d, 0x000 },
+- { 0x0000a093, 0x00204411, 0x000 },
+- { 0x00000032, 0x00204a2d, 0x000 },
+- { 0x0000a2b6, 0x00204411, 0x000 },
+- { 0x00000033, 0x00204a2d, 0x000 },
+- { 0x0000a2ba, 0x00204411, 0x000 },
+- { 0x00000034, 0x00204a2d, 0x000 },
+- { 0x0000a2be, 0x00204411, 0x000 },
+- { 0x00000035, 0x00204a2d, 0x000 },
+- { 0x0000a2c2, 0x00204411, 0x000 },
+- { 0x00000036, 0x00204a2d, 0x000 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x000001ff, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62b },
+- { 0x00000000, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x60e },
+- { 0x0004a003, 0x00604411, 0x68d },
+- { 0x0000a003, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x14c00000, 0x613 },
+- { 0x0004a010, 0x00604411, 0x68d },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62b },
+- { 0x0004a011, 0x00604411, 0x68d },
+- { 0x0000a011, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a012, 0x00604411, 0x68d },
+- { 0x0000a012, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a013, 0x00604411, 0x68d },
+- { 0x0000a013, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a014, 0x00604411, 0x68d },
+- { 0x0000a014, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a015, 0x00604411, 0x68d },
+- { 0x0000a015, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a016, 0x00604411, 0x68d },
+- { 0x0000a016, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a017, 0x00604411, 0x68d },
+- { 0x0000a017, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x0000002c, 0x0080062d, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x63d },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000002, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x63b },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68d },
+- { 0x00001000, 0x00200811, 0x000 },
+- { 0x0000002b, 0x00203622, 0x000 },
+- { 0x00000000, 0x00600000, 0x641 },
+- { 0x00000000, 0x00600000, 0x5c9 },
+- { 0x98000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0600000, 0x641 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000022, 0x00204811, 0x000 },
+- { 0x89000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00404811, 0x62d },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404811, 0x62d },
+- { 0x00000000, 0x00600000, 0x65c },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0xc0204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x09800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000004, 0x00404c11, 0x656 },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000004, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffffb, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffff7, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x01800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68d },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x68c },
+- { 0x00000010, 0x00404c11, 0x672 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x38c00000, 0x000 },
+- { 0x0000001d, 0x00200a2d, 0x000 },
+- { 0x0000001e, 0x00200e2d, 0x000 },
+- { 0x0000001f, 0x0020122d, 0x000 },
+- { 0x00000020, 0x0020162d, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000004, 0x00301224, 0x000 },
+- { 0x00000000, 0x002f0064, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x68b },
+- { 0x00000003, 0x00281a22, 0x000 },
+- { 0x00000008, 0x00221222, 0x000 },
+- { 0xfffff000, 0x00281224, 0x000 },
+- { 0x00000000, 0x002910c4, 0x000 },
+- { 0x0000001f, 0x00403624, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x68d },
+- { 0x9f000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x690 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x692 },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x695 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0xc0204411, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000024, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000022, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x01420502, 0x05c00250, 0x000 },
+- { 0x01c30168, 0x043f05c0, 0x000 },
+- { 0x02250209, 0x02500151, 0x000 },
+- { 0x02230245, 0x02a00241, 0x000 },
+- { 0x03d705c0, 0x05c005c0, 0x000 },
+- { 0x0649064a, 0x031f05c0, 0x000 },
+- { 0x05c005c5, 0x03200340, 0x000 },
+- { 0x032a0282, 0x03420334, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c00551, 0x05c005c0, 0x000 },
+- { 0x03ba05c0, 0x04bb0344, 0x000 },
+- { 0x049a0450, 0x043d05c0, 0x000 },
+- { 0x04d005c0, 0x044104dd, 0x000 },
+- { 0x04500507, 0x03510375, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x063f05c7, 0x000 },
+- { 0x05c005c0, 0x000705c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x03f803ed, 0x04080406, 0x000 },
+- { 0x040e040a, 0x040c0410, 0x000 },
+- { 0x041c0418, 0x04240420, 0x000 },
+- { 0x042c0428, 0x04340430, 0x000 },
+- { 0x05c005c0, 0x043805c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x05c005c0, 0x05c005c0, 0x000 },
+- { 0x00020679, 0x06970006, 0x000 },
+-};
+-
+-static const u32 RV620_pfp_microcode[] = {
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0x7c038b,
+-0x8001b8,
+-0x7c038b,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xc41838,
+-0xca2400,
+-0xca2800,
+-0x9581a8,
+-0xc41c3a,
+-0xc3c000,
+-0xca0800,
+-0xca0c00,
+-0x7c744b,
+-0xc20005,
+-0x99c000,
+-0xc41c3a,
+-0x7c744c,
+-0xc0fff0,
+-0x042c04,
+-0x309002,
+-0x7d2500,
+-0x351402,
+-0x7d350b,
+-0x255403,
+-0x7cd580,
+-0x259c03,
+-0x95c004,
+-0xd5001b,
+-0x7eddc1,
+-0x7d9d80,
+-0xd6801b,
+-0xd5801b,
+-0xd4401e,
+-0xd5401e,
+-0xd6401e,
+-0xd6801e,
+-0xd4801e,
+-0xd4c01e,
+-0x9783d3,
+-0xd5c01e,
+-0xca0800,
+-0x80001a,
+-0xca0c00,
+-0xe4011e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xe4013e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca1800,
+-0xd4401e,
+-0xd5801e,
+-0x800053,
+-0xd40075,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xe2001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0xd48060,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xd48061,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xca0c00,
+-0xd4401e,
+-0xd48016,
+-0xd4c016,
+-0xd4801e,
+-0x8001b8,
+-0xd4c01e,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x948004,
+-0xca1400,
+-0xe420f3,
+-0xd42013,
+-0xd56065,
+-0xd4e01c,
+-0xd5201c,
+-0xd5601c,
+-0x800000,
+-0x062001,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9483f7,
+-0xca1400,
+-0xe420f3,
+-0x800079,
+-0xd42013,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9883ef,
+-0xca1400,
+-0xd40064,
+-0x80008d,
+-0x000000,
+-0xc41432,
+-0xc61843,
+-0xc4082f,
+-0x954005,
+-0xc40c30,
+-0xd4401e,
+-0x800000,
+-0xee001e,
+-0x9583f5,
+-0xc41031,
+-0xd44033,
+-0xd52065,
+-0xd4a01c,
+-0xd4e01c,
+-0xd5201c,
+-0xe4015e,
+-0xd4001e,
+-0x800000,
+-0x062001,
+-0xca1800,
+-0x0a2001,
+-0xd60076,
+-0xc40836,
+-0x988007,
+-0xc61045,
+-0x950110,
+-0xd4001f,
+-0xd46062,
+-0x800000,
+-0xd42062,
+-0xcc3835,
+-0xcc1433,
+-0x8401bb,
+-0xd40072,
+-0xd5401e,
+-0x800000,
+-0xee001e,
+-0xe2001a,
+-0x8401bb,
+-0xe2001a,
+-0xcc104b,
+-0xcc0447,
+-0x2c9401,
+-0x7d098b,
+-0x984005,
+-0x7d15cb,
+-0xd4001a,
+-0x8001b8,
+-0xd4006d,
+-0x344401,
+-0xcc0c48,
+-0x98403a,
+-0xcc2c4a,
+-0x958004,
+-0xcc0449,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0x282801,
+-0x8400f0,
+-0xcc1003,
+-0x98801b,
+-0x04380c,
+-0x8400f0,
+-0xcc1003,
+-0x988017,
+-0x043808,
+-0x8400f0,
+-0xcc1003,
+-0x988013,
+-0x043804,
+-0x8400f0,
+-0xcc1003,
+-0x988014,
+-0xcc104c,
+-0x9a8009,
+-0xcc144d,
+-0x9840dc,
+-0xd4006d,
+-0xcc1848,
+-0xd5001a,
+-0xd5401a,
+-0x8000c9,
+-0xd5801a,
+-0x96c0d5,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0x9ac003,
+-0xd4006d,
+-0xd4006e,
+-0x800000,
+-0xec007f,
+-0x9ac0cc,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0x7d9103,
+-0x7dd583,
+-0x7d190c,
+-0x35cc1f,
+-0x35701f,
+-0x7cf0cb,
+-0x7cd08b,
+-0x880000,
+-0x7e8e8b,
+-0x95c004,
+-0xd4006e,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0xcc0803,
+-0xcc0c03,
+-0xcc1003,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0xcc2403,
+-0xcc2803,
+-0x35c41f,
+-0x36b01f,
+-0x7c704b,
+-0x34f01f,
+-0x7c704b,
+-0x35701f,
+-0x7c704b,
+-0x7d8881,
+-0x7dccc1,
+-0x7e5101,
+-0x7e9541,
+-0x7c9082,
+-0x7cd4c2,
+-0x7c848b,
+-0x9ac003,
+-0x7c8c8b,
+-0x2c8801,
+-0x98809e,
+-0xd4006d,
+-0x98409c,
+-0xd4006e,
+-0xcc084c,
+-0xcc0c4d,
+-0xcc1048,
+-0xd4801a,
+-0xd4c01a,
+-0x800101,
+-0xd5001a,
+-0xcc0832,
+-0xd40032,
+-0x9482d9,
+-0xca0c00,
+-0xd4401e,
+-0x800000,
+-0xd4001e,
+-0xe4011e,
+-0xd4001e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd4401e,
+-0xca1400,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xd5401e,
+-0xd54034,
+-0x800000,
+-0xee001e,
+-0x280404,
+-0xe2001a,
+-0xe2001a,
+-0xd4401a,
+-0xca3800,
+-0xcc0803,
+-0xcc0c03,
+-0xcc0c03,
+-0xcc0c03,
+-0x9882bd,
+-0x000000,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0400,
+-0xc2ff00,
+-0xcc0834,
+-0xc13fff,
+-0x7c74cb,
+-0x7cc90b,
+-0x7d010f,
+-0x9902b0,
+-0x7c738b,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0800,
+-0x281900,
+-0x7d898b,
+-0x958014,
+-0x281404,
+-0xca0c00,
+-0xca1000,
+-0xca1c00,
+-0xca2400,
+-0xe2001f,
+-0xd4c01a,
+-0xd5001a,
+-0xd5401a,
+-0xcc1803,
+-0xcc2c03,
+-0xcc2c03,
+-0xcc2c03,
+-0x7da58b,
+-0x7d9c47,
+-0x984297,
+-0x000000,
+-0x800161,
+-0xd4c01a,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c06,
+-0x0ccc06,
+-0x98c006,
+-0xcc104e,
+-0x990004,
+-0xd40073,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xca0800,
+-0xca0c00,
+-0x34d018,
+-0x251001,
+-0x950021,
+-0xc17fff,
+-0xca1000,
+-0xca1400,
+-0xca1800,
+-0xd4801d,
+-0xd4c01d,
+-0x7db18b,
+-0xc14202,
+-0xc2c001,
+-0xd5801d,
+-0x34dc0e,
+-0x7d5d4c,
+-0x7f734c,
+-0xd7401e,
+-0xd5001e,
+-0xd5401e,
+-0xc14200,
+-0xc2c000,
+-0x099c01,
+-0x31dc10,
+-0x7f5f4c,
+-0x7f734c,
+-0x042802,
+-0x7d8380,
+-0xd5a86f,
+-0xd58066,
+-0xd7401e,
+-0xec005e,
+-0xc82402,
+-0xc82402,
+-0x8001b8,
+-0xd60076,
+-0xd4401e,
+-0xd4801e,
+-0xd4c01e,
+-0x800000,
+-0xee001e,
+-0x800000,
+-0xee001f,
+-0xd4001f,
+-0x800000,
+-0xd4001f,
+-0xd4001f,
+-0x880000,
+-0xd4001f,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x010171,
+-0x020178,
+-0x03008f,
+-0x04007f,
+-0x050003,
+-0x06003f,
+-0x070032,
+-0x08012c,
+-0x090046,
+-0x0a0036,
+-0x1001b6,
+-0x1700a2,
+-0x22013a,
+-0x230149,
+-0x2000b4,
+-0x240125,
+-0x27004d,
+-0x28006a,
+-0x2a0060,
+-0x2b0052,
+-0x2f0065,
+-0x320087,
+-0x34017f,
+-0x3c0156,
+-0x3f0072,
+-0x41018c,
+-0x44012e,
+-0x550173,
+-0x56017a,
+-0x60000b,
+-0x610034,
+-0x620038,
+-0x630038,
+-0x640038,
+-0x650038,
+-0x660038,
+-0x670038,
+-0x68003a,
+-0x690041,
+-0x6a0048,
+-0x6b0048,
+-0x6c0048,
+-0x6d0048,
+-0x6e0048,
+-0x6f0048,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-};
+-
+-static const u32 RV630_cp_microcode[][3] = {
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0000ffff, 0x00284621, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000000, 0x00e00000, 0x000 },
+- { 0x00010000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000f00, 0x00281622, 0x000 },
+- { 0x00000008, 0x00211625, 0x000 },
+- { 0x00000018, 0x00203625, 0x000 },
+- { 0x8d000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x002f0225, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x018 },
+- { 0x00412000, 0x00404811, 0x019 },
+- { 0x00422000, 0x00204811, 0x000 },
+- { 0x8e000000, 0x00204411, 0x000 },
+- { 0x00000028, 0x00204a2d, 0x000 },
+- { 0x90000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x0000000c, 0x00211622, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000019, 0x00211a22, 0x000 },
+- { 0x00000004, 0x00281a26, 0x000 },
+- { 0x00000000, 0x002914c5, 0x000 },
+- { 0x00000019, 0x00203625, 0x000 },
+- { 0x00000000, 0x003a1402, 0x000 },
+- { 0x00000016, 0x00211625, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0xfffffffc, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002914a3, 0x000 },
+- { 0x00000017, 0x00203625, 0x000 },
+- { 0x00008000, 0x00280e22, 0x000 },
+- { 0x00000007, 0x00220e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x20000000, 0x00280e22, 0x000 },
+- { 0x00000006, 0x00210e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x00000000, 0x00220222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x038 },
+- { 0x00000000, 0x2ee00000, 0x035 },
+- { 0x00000000, 0x2ce00000, 0x037 },
+- { 0x00000000, 0x00400e2d, 0x039 },
+- { 0x00000008, 0x00200e2d, 0x000 },
+- { 0x00000009, 0x0040122d, 0x046 },
+- { 0x00000001, 0x00400e2d, 0x039 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x03e },
+- { 0x00000008, 0x00401c11, 0x041 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x0000000f, 0x00281e27, 0x000 },
+- { 0x00000003, 0x00221e27, 0x000 },
+- { 0x7fc00000, 0x00281a23, 0x000 },
+- { 0x00000014, 0x00211a26, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000008, 0x00221a26, 0x000 },
+- { 0x00000000, 0x00290cc7, 0x000 },
+- { 0x00000027, 0x00203624, 0x000 },
+- { 0x00007f00, 0x00281221, 0x000 },
+- { 0x00001400, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x04b },
+- { 0x00000001, 0x00290e23, 0x000 },
+- { 0x0000000e, 0x00203623, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfff80000, 0x00294a23, 0x000 },
+- { 0x00000000, 0x003a2c02, 0x000 },
+- { 0x00000002, 0x00220e2b, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x0000000f, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00204a2d, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000029, 0x00200e2d, 0x000 },
+- { 0x060a0200, 0x00294a23, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x061 },
+- { 0x00000000, 0x2ee00000, 0x05f },
+- { 0x00000000, 0x2ce00000, 0x05e },
+- { 0x00000000, 0x00400e2d, 0x062 },
+- { 0x00000001, 0x00400e2d, 0x062 },
+- { 0x0000000a, 0x00200e2d, 0x000 },
+- { 0x0000000b, 0x0040122d, 0x06a },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x7fc00000, 0x00281623, 0x000 },
+- { 0x00000014, 0x00211625, 0x000 },
+- { 0x00000001, 0x00331625, 0x000 },
+- { 0x80000000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00290ca3, 0x000 },
+- { 0x3ffffc00, 0x00290e23, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x06d },
+- { 0x00000100, 0x00401c11, 0x070 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x000000f0, 0x00281e27, 0x000 },
+- { 0x00000004, 0x00221e27, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0xfffff0ff, 0x00281a30, 0x000 },
+- { 0x0000a028, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948e6, 0x000 },
+- { 0x0000a018, 0x00204411, 0x000 },
+- { 0x3fffffff, 0x00284a23, 0x000 },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000030, 0x0020162d, 0x000 },
+- { 0x00000002, 0x00291625, 0x000 },
+- { 0x00000030, 0x00203625, 0x000 },
+- { 0x00000025, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a3, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x083 },
+- { 0x00000026, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a4, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x084 },
+- { 0x00000000, 0x00400000, 0x08a },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203624, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x08a },
+- { 0x00000000, 0x00600000, 0x665 },
+- { 0x00000000, 0x00600000, 0x659 },
+- { 0x00000002, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x08d },
+- { 0x00000012, 0xc0403620, 0x093 },
+- { 0x00000000, 0x2ee00000, 0x091 },
+- { 0x00000000, 0x2ce00000, 0x090 },
+- { 0x00000002, 0x00400e2d, 0x092 },
+- { 0x00000003, 0x00400e2d, 0x092 },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000012, 0x00203623, 0x000 },
+- { 0x00000003, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x098 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x0a0 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x2ee00000, 0x09e },
+- { 0x00000000, 0x2ce00000, 0x09d },
+- { 0x00000002, 0x00400e2d, 0x09f },
+- { 0x00000003, 0x00400e2d, 0x09f },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x003f0000, 0x00280e23, 0x000 },
+- { 0x00000010, 0x00210e23, 0x000 },
+- { 0x00000011, 0x00203623, 0x000 },
+- { 0x0000001e, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a7 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x0000001f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0aa },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000008, 0x00210e2b, 0x000 },
+- { 0x0000007f, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0e1 },
+- { 0x00000000, 0x27000000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x0b3 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000000c, 0x00221e30, 0x000 },
+- { 0x99800000, 0x00204411, 0x000 },
+- { 0x00000004, 0x0020122d, 0x000 },
+- { 0x00000008, 0x00221224, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00291ce4, 0x000 },
+- { 0x00000000, 0x00604807, 0x12f },
+- { 0x9b000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x9c000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x0033146f, 0x000 },
+- { 0x00000001, 0x00333e23, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0x00203c05, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e007, 0x00204411, 0x000 },
+- { 0x0000000f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0cb },
+- { 0x00f8ff08, 0x00204811, 0x000 },
+- { 0x98000000, 0x00404811, 0x0dc },
+- { 0x000000f0, 0x00280e22, 0x000 },
+- { 0x000000a0, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0da },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d5 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d4 },
+- { 0x00003f00, 0x00400c11, 0x0d6 },
+- { 0x00001f00, 0x00400c11, 0x0d6 },
+- { 0x00000f00, 0x00200c11, 0x000 },
+- { 0x00380009, 0x00294a23, 0x000 },
+- { 0x3f000000, 0x00280e2b, 0x000 },
+- { 0x00000002, 0x00220e23, 0x000 },
+- { 0x00000007, 0x00494a23, 0x0dc },
+- { 0x00380f09, 0x00204811, 0x000 },
+- { 0x68000007, 0x00204811, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000a202, 0x00204411, 0x000 },
+- { 0x00ff0000, 0x00280e22, 0x000 },
+- { 0x00000080, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00200e2d, 0x000 },
+- { 0x00000026, 0x0020122d, 0x000 },
+- { 0x00000000, 0x002f0083, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0ea },
+- { 0x00000000, 0x00600000, 0x65f },
+- { 0x00000000, 0x00400000, 0x0eb },
+- { 0x00000000, 0x00600000, 0x662 },
+- { 0x00000007, 0x0020222d, 0x000 },
+- { 0x00000005, 0x00220e22, 0x000 },
+- { 0x00100000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x000000ef, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000003, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x0f8 },
+- { 0x0000000b, 0x00210228, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f8 },
+- { 0x00000400, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000001c, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0fd },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000001e, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x10b },
+- { 0x0000a30f, 0x00204411, 0x000 },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x104 },
+- { 0xffffffff, 0x00404811, 0x10b },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x107 },
+- { 0x0000ffff, 0x00404811, 0x10b },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x10a },
+- { 0x000000ff, 0x00404811, 0x10b },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0002c400, 0x00204411, 0x000 },
+- { 0x0000001f, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x112 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000018, 0x40224a20, 0x000 },
+- { 0x00000010, 0xc0424a20, 0x114 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000000a, 0x00201011, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x11b },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00531224, 0x117 },
+- { 0xffbfffff, 0x00283a2e, 0x000 },
+- { 0x0000001b, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x12e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x00000018, 0x00220e30, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e00e, 0x00204411, 0x000 },
+- { 0x07f8ff08, 0x00204811, 0x000 },
+- { 0x00000000, 0x00294a23, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00800000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204806, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x689 },
+- { 0x00000004, 0x00404c11, 0x135 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000001c, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x13c },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40280620, 0x000 },
+- { 0x00000010, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x00341461, 0x000 },
+- { 0x00000000, 0x00741882, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x147 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0681a20, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x158 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000001, 0x00300a2f, 0x000 },
+- { 0x00000001, 0x00210a22, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600000, 0x18f },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00202c08, 0x000 },
+- { 0x00000000, 0x00202411, 0x000 },
+- { 0x00000000, 0x00202811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00221e29, 0x000 },
+- { 0x00000000, 0x007048eb, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000001, 0x40330620, 0x000 },
+- { 0x00000000, 0xc0302409, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x181 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x186 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x186 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000001, 0x00530621, 0x182 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0604800, 0x197 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000011, 0x0020062d, 0x000 },
+- { 0x00000000, 0x0078042a, 0x2fb },
+- { 0x00000000, 0x00202809, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x174 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x194 },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x46000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x19b },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00804811, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40281620, 0x000 },
+- { 0x00000010, 0xc0811a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000008, 0x00221e30, 0x000 },
+- { 0x00000029, 0x00201a2d, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfffbff09, 0x00204811, 0x000 },
+- { 0x0000000f, 0x0020222d, 0x000 },
+- { 0x00001fff, 0x00294a28, 0x000 },
+- { 0x00000006, 0x0020222d, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000100, 0x00201811, 0x000 },
+- { 0x00000008, 0x00621e28, 0x12f },
+- { 0x00000008, 0x00822228, 0x000 },
+- { 0x0002c000, 0x00204411, 0x000 },
+- { 0x00000015, 0x00600e2d, 0x1bd },
+- { 0x00000016, 0x00600e2d, 0x1bd },
+- { 0x0000c008, 0x00204411, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x1b9 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x39000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00804802, 0x000 },
+- { 0x00000018, 0x00202e2d, 0x000 },
+- { 0x00000000, 0x003b0d63, 0x000 },
+- { 0x00000008, 0x00224a23, 0x000 },
+- { 0x00000010, 0x00224a23, 0x000 },
+- { 0x00000018, 0x00224a23, 0x000 },
+- { 0x00000000, 0x00804803, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000007, 0x0021062f, 0x000 },
+- { 0x00000013, 0x00200a2d, 0x000 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000ffff, 0x40282220, 0x000 },
+- { 0x0000000f, 0x00262228, 0x000 },
+- { 0x00000010, 0x40212620, 0x000 },
+- { 0x0000000f, 0x00262629, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1e0 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000081, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000080, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1dc },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1d8 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000001f, 0x00280a22, 0x000 },
+- { 0x0000001f, 0x00282a2a, 0x000 },
+- { 0x00000001, 0x00530621, 0x1d1 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000002, 0x00304a2f, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000001, 0x00301e2f, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1e5 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x0000000f, 0x00260e23, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000000f, 0x00261224, 0x000 },
+- { 0x00000000, 0x00201411, 0x000 },
+- { 0x00000000, 0x00601811, 0x2bb },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022b, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1f8 },
+- { 0x00000010, 0x00221628, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a29, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x0020480a, 0x000 },
+- { 0x00000000, 0x00202c11, 0x000 },
+- { 0x00000010, 0x00221623, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a24, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x00731503, 0x205 },
+- { 0x00000000, 0x00201805, 0x000 },
+- { 0x00000000, 0x00731524, 0x205 },
+- { 0x00000000, 0x002d14c5, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00000000, 0x00202003, 0x000 },
+- { 0x00000000, 0x00802404, 0x000 },
+- { 0x0000000f, 0x00210225, 0x000 },
+- { 0x00000000, 0x14c00000, 0x689 },
+- { 0x00000000, 0x002b1405, 0x000 },
+- { 0x00000001, 0x00901625, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00294a22, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a21, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000ffff, 0x40281220, 0x000 },
+- { 0x00000010, 0xc0211a20, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211620, 0x000 },
+- { 0x00000000, 0x00741465, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00000001, 0x00330621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x219 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x212 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000000, 0x0040040f, 0x213 },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00000000, 0x00600000, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x232 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x236 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x236 },
+- { 0x00000000, 0xc0404800, 0x233 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x00600411, 0x2fb },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000018, 0x40210a20, 0x000 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x24c },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x00080101, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x251 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000010, 0x00600411, 0x315 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00000000, 0x00600000, 0x27c },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000001, 0x00211e27, 0x000 },
+- { 0x00000000, 0x14e00000, 0x26a },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x0000ffff, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00341c27, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25f },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e5, 0x000 },
+- { 0x00000000, 0x08c00000, 0x262 },
+- { 0x00000000, 0x00201407, 0x000 },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00211e27, 0x000 },
+- { 0x00000000, 0x00341c47, 0x000 },
+- { 0x00000000, 0x12c00000, 0x267 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x08c00000, 0x26a },
+- { 0x00000000, 0x00201807, 0x000 },
+- { 0x00000000, 0x00600000, 0x2c1 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000000, 0x00342023, 0x000 },
+- { 0x00000000, 0x12c00000, 0x272 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x271 },
+- { 0x00000016, 0x00404811, 0x276 },
+- { 0x00000018, 0x00404811, 0x276 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x275 },
+- { 0x00000017, 0x00404811, 0x276 },
+- { 0x00000019, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00604411, 0x2e9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x256 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000010, 0x40210620, 0x000 },
+- { 0x0000ffff, 0xc0280a20, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0881a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x00000000, 0xc0600000, 0x2a3 },
+- { 0x00000005, 0x00200a2d, 0x000 },
+- { 0x00000008, 0x00220a22, 0x000 },
+- { 0x0000002b, 0x00201a2d, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00007000, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00311ce6, 0x000 },
+- { 0x0000002a, 0x00201a2d, 0x000 },
+- { 0x0000000c, 0x00221a26, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x06e00000, 0x292 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00691ce2, 0x12f },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x29d },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000001c, 0x00403627, 0x000 },
+- { 0x0000000c, 0xc0220a20, 0x000 },
+- { 0x00000029, 0x00203622, 0x000 },
+- { 0x00000028, 0xc0403620, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000009, 0x00204811, 0x000 },
+- { 0xa1000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce3, 0x000 },
+- { 0x00000021, 0x00203627, 0x000 },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce4, 0x000 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a3, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203624, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000000, 0x00311cc4, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14c00000, 0x2dc },
+- { 0x00000000, 0x00400000, 0x2d9 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2d9 },
+- { 0x00000003, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2dc },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e1, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a1, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e2, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000000, 0x00600000, 0x665 },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00600000, 0x65c },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2a7 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x0000001a, 0x00201e2d, 0x000 },
+- { 0x0000001b, 0x0080222d, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca1, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x003808c5, 0x000 },
+- { 0x00000000, 0x00300841, 0x000 },
+- { 0x00000001, 0x00220a22, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000017, 0x0020222d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x318 },
+- { 0xffffffef, 0x00280621, 0x000 },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x0000f8e0, 0x00204411, 0x000 },
+- { 0x00000000, 0x00294901, 0x000 },
+- { 0x00000000, 0x00894901, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00002257, 0x00204411, 0x000 },
+- { 0x00000003, 0xc0484a20, 0x000 },
+- { 0x0000225d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x00000001, 0x40304a20, 0x000 },
+- { 0x00000002, 0xc0304a20, 0x000 },
+- { 0x00000001, 0x00530a22, 0x34b },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x354 },
+- { 0x00000014, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x364 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00604802, 0x36e },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x36a },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x00000028, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5bd },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x0000002c, 0x00203626, 0x000 },
+- { 0x00000049, 0x00201811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000000, 0x002f0226, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x370 },
+- { 0x0000002c, 0x00801a2d, 0x000 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x00000015, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x386 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b1 },
+- { 0x00000016, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b5 },
+- { 0x00000020, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x39c },
+- { 0x0000000f, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x0000001e, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x390 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x08000000, 0x00290a22, 0x000 },
+- { 0x00000003, 0x40210e20, 0x000 },
+- { 0x0000000c, 0xc0211220, 0x000 },
+- { 0x00080000, 0x00281224, 0x000 },
+- { 0x00000014, 0xc0221620, 0x000 },
+- { 0x00000000, 0x002914a4, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948a2, 0x000 },
+- { 0x0000a1fe, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000015, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x392 },
+- { 0x0000210e, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000003, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x39e },
+- { 0x00002108, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x80000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000010, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3ae },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000006, 0x00404811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x0000001d, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3ce },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3c0 },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0xbabecafe, 0x00204811, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000004, 0x00404811, 0x000 },
+- { 0x00002170, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000a, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3d3 },
+- { 0x8c000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00003fff, 0x40280a20, 0x000 },
+- { 0x80000000, 0x40280e20, 0x000 },
+- { 0x40000000, 0xc0281220, 0x000 },
+- { 0x00040000, 0x00694622, 0x68a },
+- { 0x00000000, 0x00201410, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e1 },
+- { 0x00000000, 0xc0401800, 0x3e4 },
+- { 0x00003fff, 0xc0281a20, 0x000 },
+- { 0x00040000, 0x00694626, 0x68a },
+- { 0x00000000, 0x00201810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e7 },
+- { 0x00000000, 0xc0401c00, 0x3ea },
+- { 0x00003fff, 0xc0281e20, 0x000 },
+- { 0x00040000, 0x00694627, 0x68a },
+- { 0x00000000, 0x00201c10, 0x000 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0x002820c5, 0x000 },
+- { 0x00000000, 0x004948e8, 0x000 },
+- { 0xa5800000, 0x00200811, 0x000 },
+- { 0x00002000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x0000001f, 0xc0210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3f7 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000ffff, 0xc0481220, 0x3ff },
+- { 0xa7800000, 0x00200811, 0x000 },
+- { 0x0000a000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00304883, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xa9800000, 0x00200811, 0x000 },
+- { 0x0000c000, 0x00400c11, 0x3fa },
+- { 0xab800000, 0x00200811, 0x000 },
+- { 0x0000f8e0, 0x00400c11, 0x3fa },
+- { 0xad800000, 0x00200811, 0x000 },
+- { 0x0000f880, 0x00400c11, 0x3fa },
+- { 0xb3800000, 0x00200811, 0x000 },
+- { 0x0000f3fc, 0x00400c11, 0x3fa },
+- { 0xaf800000, 0x00200811, 0x000 },
+- { 0x0000e000, 0x00400c11, 0x3fa },
+- { 0xb1800000, 0x00200811, 0x000 },
+- { 0x0000f000, 0x00400c11, 0x3fa },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00002148, 0x00204811, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x01182000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0218a000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0318c000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0418f8e0, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0518f880, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0618e000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0718f000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0818f3fc, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000030, 0x00200a2d, 0x000 },
+- { 0x00000000, 0xc0290c40, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x86000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x85000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00404c02, 0x448 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x00000000, 0xc0201400, 0x000 },
+- { 0x00000000, 0xc0201800, 0x000 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x456 },
+- { 0x00000000, 0xc0202000, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x00000010, 0x00280a23, 0x000 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x45e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0x00694624, 0x68a },
+- { 0x00000000, 0x00400000, 0x463 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00604805, 0x68f },
+- { 0x00000000, 0x002824f0, 0x000 },
+- { 0x00000007, 0x00280a23, 0x000 },
+- { 0x00000001, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46a },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x04e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000002, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46f },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x02e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x474 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x479 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000005, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x47e },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x06e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x483 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x08e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x000 },
+- { 0x00000008, 0x00210a23, 0x000 },
+- { 0x00000000, 0x14c00000, 0x48d },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x496 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x00404c08, 0x456 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000011, 0x40211220, 0x000 },
+- { 0x00000012, 0x40211620, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00210225, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4a0 },
+- { 0x00040000, 0xc0494a20, 0x4a1 },
+- { 0xfffbffff, 0xc0284a20, 0x000 },
+- { 0x00000000, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4ad },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000c, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4a9 },
+- { 0xa0000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x00204811, 0x000 },
+- { 0x0000216b, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000216c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4a7 },
+- { 0x00000000, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4c0 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x68f },
+- { 0x00000000, 0x00400000, 0x4c4 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xc0600000, 0x68a },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4cb },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0404810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000000, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4cd },
+- { 0x00002180, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000003, 0x00333e2f, 0x000 },
+- { 0x00000001, 0x00210221, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4fd },
+- { 0x0000002c, 0x00200a2d, 0x000 },
+- { 0x00040000, 0x18e00c11, 0x4ec },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xd8c04800, 0x4e0 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000002d, 0x0020122d, 0x000 },
+- { 0x00000000, 0x00290c83, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000011, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4a7 },
+- { 0x0000002c, 0xc0203620, 0x000 },
+- { 0x0000002d, 0xc0403620, 0x000 },
+- { 0x0000000f, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x502 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0xd9000000, 0x000 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xb5000000, 0x00204411, 0x000 },
+- { 0x00002000, 0x00204811, 0x000 },
+- { 0xb6000000, 0x00204411, 0x000 },
+- { 0x0000a000, 0x00204811, 0x000 },
+- { 0xb7000000, 0x00204411, 0x000 },
+- { 0x0000c000, 0x00204811, 0x000 },
+- { 0xb8000000, 0x00204411, 0x000 },
+- { 0x0000f8e0, 0x00204811, 0x000 },
+- { 0xb9000000, 0x00204411, 0x000 },
+- { 0x0000f880, 0x00204811, 0x000 },
+- { 0xba000000, 0x00204411, 0x000 },
+- { 0x0000e000, 0x00204811, 0x000 },
+- { 0xbb000000, 0x00204411, 0x000 },
+- { 0x0000f000, 0x00204811, 0x000 },
+- { 0xbc000000, 0x00204411, 0x000 },
+- { 0x0000f3fc, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00204811, 0x000 },
+- { 0x000000ff, 0x00280e30, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x516 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x14c00000, 0x52b },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000001c, 0x00203623, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x00000028, 0x00203623, 0x000 },
+- { 0x00000017, 0x00203623, 0x000 },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203623, 0x000 },
+- { 0x00000015, 0x00203623, 0x000 },
+- { 0x00000016, 0x00203623, 0x000 },
+- { 0xffffe000, 0x00200c11, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00200c11, 0x000 },
+- { 0x00000023, 0x00203623, 0x000 },
+- { 0x00000024, 0x00203623, 0x000 },
+- { 0xf1ffffff, 0x00283a2e, 0x000 },
+- { 0x0000001a, 0xc0220e20, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000002a, 0x40203620, 0x000 },
+- { 0x87000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x9d000000, 0x00204411, 0x000 },
+- { 0x0000001f, 0x40214a20, 0x000 },
+- { 0x96000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x0000001f, 0x00211624, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x0000001d, 0x00203623, 0x000 },
+- { 0x00000003, 0x00281e23, 0x000 },
+- { 0x00000008, 0x00222223, 0x000 },
+- { 0xfffff000, 0x00282228, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x0000001f, 0x00203628, 0x000 },
+- { 0x00000018, 0x00211e23, 0x000 },
+- { 0x00000020, 0x00203627, 0x000 },
+- { 0x00000002, 0x00221624, 0x000 },
+- { 0x00000000, 0x003014a8, 0x000 },
+- { 0x0000001e, 0x00203625, 0x000 },
+- { 0x00000003, 0x00211a24, 0x000 },
+- { 0x10000000, 0x00281a26, 0x000 },
+- { 0xefffffff, 0x00283a2e, 0x000 },
+- { 0x00000000, 0x004938ce, 0x678 },
+- { 0x00000001, 0x40280a20, 0x000 },
+- { 0x00000006, 0x40280e20, 0x000 },
+- { 0x00000300, 0xc0281220, 0x000 },
+- { 0x00000008, 0x00211224, 0x000 },
+- { 0x00000000, 0xc0201620, 0x000 },
+- { 0x00000000, 0xc0201a20, 0x000 },
+- { 0x00000000, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x563 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68a },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00020000, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56b },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x579 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56b },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68a },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x579 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56f },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00000000, 0xc0400000, 0x579 },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x577 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x68f },
+- { 0x00000000, 0x00401c10, 0x579 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x57b },
+- { 0x00000000, 0x00600000, 0x5c6 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x58c },
+- { 0x0000a2b7, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c4, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x58a },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000001, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x59d },
+- { 0x0000a2bb, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c5, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x59b },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000002, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5ae },
+- { 0x0000a2bf, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c6, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5ac },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x0000a2c3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c7, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5bb },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0x01000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00400000, 0x5c1 },
+- { 0xa4000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5c6 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000002c, 0x00203621, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5cd },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000030, 0x00403621, 0x5e0 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x5e0 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a092, 0x00604411, 0x68a },
+- { 0x00000031, 0x00203630, 0x000 },
+- { 0x0004a093, 0x00604411, 0x68a },
+- { 0x00000032, 0x00203630, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68a },
+- { 0x00000033, 0x00203630, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68a },
+- { 0x00000034, 0x00203630, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68a },
+- { 0x00000035, 0x00203630, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68a },
+- { 0x00000036, 0x00203630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x88000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000001, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x629 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x629 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x602 },
+- { 0x0000a092, 0x00204411, 0x000 },
+- { 0x00000031, 0x00204a2d, 0x000 },
+- { 0x0000a093, 0x00204411, 0x000 },
+- { 0x00000032, 0x00204a2d, 0x000 },
+- { 0x0000a2b6, 0x00204411, 0x000 },
+- { 0x00000033, 0x00204a2d, 0x000 },
+- { 0x0000a2ba, 0x00204411, 0x000 },
+- { 0x00000034, 0x00204a2d, 0x000 },
+- { 0x0000a2be, 0x00204411, 0x000 },
+- { 0x00000035, 0x00204a2d, 0x000 },
+- { 0x0000a2c2, 0x00204411, 0x000 },
+- { 0x00000036, 0x00204a2d, 0x000 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x000001ff, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x628 },
+- { 0x00000000, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x60b },
+- { 0x0004a003, 0x00604411, 0x68a },
+- { 0x0000a003, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x14c00000, 0x610 },
+- { 0x0004a010, 0x00604411, 0x68a },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x628 },
+- { 0x0004a011, 0x00604411, 0x68a },
+- { 0x0000a011, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a012, 0x00604411, 0x68a },
+- { 0x0000a012, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a013, 0x00604411, 0x68a },
+- { 0x0000a013, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a014, 0x00604411, 0x68a },
+- { 0x0000a014, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a015, 0x00604411, 0x68a },
+- { 0x0000a015, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a016, 0x00604411, 0x68a },
+- { 0x0000a016, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a017, 0x00604411, 0x68a },
+- { 0x0000a017, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000002c, 0x0080062d, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x63a },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000002, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x638 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x00001000, 0x00200811, 0x000 },
+- { 0x0000002b, 0x00203622, 0x000 },
+- { 0x00000000, 0x00600000, 0x63e },
+- { 0x00000000, 0x00600000, 0x5c6 },
+- { 0x98000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0600000, 0x63e },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000022, 0x00204811, 0x000 },
+- { 0x89000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00404811, 0x62a },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404811, 0x62a },
+- { 0x00000000, 0x00600000, 0x659 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0xc0204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x09800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000004, 0x00404c11, 0x653 },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000004, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffffb, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffff7, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x01800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x689 },
+- { 0x00000010, 0x00404c11, 0x66f },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x38c00000, 0x000 },
+- { 0x0000001d, 0x00200a2d, 0x000 },
+- { 0x0000001e, 0x00200e2d, 0x000 },
+- { 0x0000001f, 0x0020122d, 0x000 },
+- { 0x00000020, 0x0020162d, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000004, 0x00301224, 0x000 },
+- { 0x00000000, 0x002f0064, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x688 },
+- { 0x00000003, 0x00281a22, 0x000 },
+- { 0x00000008, 0x00221222, 0x000 },
+- { 0xfffff000, 0x00281224, 0x000 },
+- { 0x00000000, 0x002910c4, 0x000 },
+- { 0x0000001f, 0x00403624, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x68a },
+- { 0x9f000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x68d },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x68f },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x692 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0xc0204411, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000024, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000022, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x014204ff, 0x05bd0250, 0x000 },
+- { 0x01c30168, 0x043f05bd, 0x000 },
+- { 0x02250209, 0x02500151, 0x000 },
+- { 0x02230245, 0x02a00241, 0x000 },
+- { 0x03d705bd, 0x05bd05bd, 0x000 },
+- { 0x06460647, 0x031f05bd, 0x000 },
+- { 0x05bd05c2, 0x03200340, 0x000 },
+- { 0x032a0282, 0x03420334, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd054e, 0x05bd05bd, 0x000 },
+- { 0x03ba05bd, 0x04b80344, 0x000 },
+- { 0x0497044d, 0x043d05bd, 0x000 },
+- { 0x04cd05bd, 0x044104da, 0x000 },
+- { 0x044d0504, 0x03510375, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x063c05c4, 0x000 },
+- { 0x05bd05bd, 0x000705bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x03f803ed, 0x04080406, 0x000 },
+- { 0x040e040a, 0x040c0410, 0x000 },
+- { 0x041c0418, 0x04240420, 0x000 },
+- { 0x042c0428, 0x04340430, 0x000 },
+- { 0x05bd05bd, 0x043805bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x00020676, 0x06940006, 0x000 },
+-};
+-
+-static const u32 RV630_pfp_microcode[] = {
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0x7c038b,
+-0x8001b8,
+-0x7c038b,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xc41838,
+-0xca2400,
+-0xca2800,
+-0x9581a8,
+-0xc41c3a,
+-0xc3c000,
+-0xca0800,
+-0xca0c00,
+-0x7c744b,
+-0xc20005,
+-0x99c000,
+-0xc41c3a,
+-0x7c744c,
+-0xc0fff0,
+-0x042c04,
+-0x309002,
+-0x7d2500,
+-0x351402,
+-0x7d350b,
+-0x255403,
+-0x7cd580,
+-0x259c03,
+-0x95c004,
+-0xd5001b,
+-0x7eddc1,
+-0x7d9d80,
+-0xd6801b,
+-0xd5801b,
+-0xd4401e,
+-0xd5401e,
+-0xd6401e,
+-0xd6801e,
+-0xd4801e,
+-0xd4c01e,
+-0x9783d3,
+-0xd5c01e,
+-0xca0800,
+-0x80001a,
+-0xca0c00,
+-0xe4011e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xe4013e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca1800,
+-0xd4401e,
+-0xd5801e,
+-0x800053,
+-0xd40075,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xe2001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0xd48060,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xd48061,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xca0c00,
+-0xd4401e,
+-0xd48016,
+-0xd4c016,
+-0xd4801e,
+-0x8001b8,
+-0xd4c01e,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x948004,
+-0xca1400,
+-0xe420f3,
+-0xd42013,
+-0xd56065,
+-0xd4e01c,
+-0xd5201c,
+-0xd5601c,
+-0x800000,
+-0x062001,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9483f7,
+-0xca1400,
+-0xe420f3,
+-0x800079,
+-0xd42013,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9883ef,
+-0xca1400,
+-0xd40064,
+-0x80008d,
+-0x000000,
+-0xc41432,
+-0xc61843,
+-0xc4082f,
+-0x954005,
+-0xc40c30,
+-0xd4401e,
+-0x800000,
+-0xee001e,
+-0x9583f5,
+-0xc41031,
+-0xd44033,
+-0xd52065,
+-0xd4a01c,
+-0xd4e01c,
+-0xd5201c,
+-0xe4015e,
+-0xd4001e,
+-0x800000,
+-0x062001,
+-0xca1800,
+-0x0a2001,
+-0xd60076,
+-0xc40836,
+-0x988007,
+-0xc61045,
+-0x950110,
+-0xd4001f,
+-0xd46062,
+-0x800000,
+-0xd42062,
+-0xcc3835,
+-0xcc1433,
+-0x8401bb,
+-0xd40072,
+-0xd5401e,
+-0x800000,
+-0xee001e,
+-0xe2001a,
+-0x8401bb,
+-0xe2001a,
+-0xcc104b,
+-0xcc0447,
+-0x2c9401,
+-0x7d098b,
+-0x984005,
+-0x7d15cb,
+-0xd4001a,
+-0x8001b8,
+-0xd4006d,
+-0x344401,
+-0xcc0c48,
+-0x98403a,
+-0xcc2c4a,
+-0x958004,
+-0xcc0449,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0x282801,
+-0x8400f0,
+-0xcc1003,
+-0x98801b,
+-0x04380c,
+-0x8400f0,
+-0xcc1003,
+-0x988017,
+-0x043808,
+-0x8400f0,
+-0xcc1003,
+-0x988013,
+-0x043804,
+-0x8400f0,
+-0xcc1003,
+-0x988014,
+-0xcc104c,
+-0x9a8009,
+-0xcc144d,
+-0x9840dc,
+-0xd4006d,
+-0xcc1848,
+-0xd5001a,
+-0xd5401a,
+-0x8000c9,
+-0xd5801a,
+-0x96c0d5,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0x9ac003,
+-0xd4006d,
+-0xd4006e,
+-0x800000,
+-0xec007f,
+-0x9ac0cc,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0x7d9103,
+-0x7dd583,
+-0x7d190c,
+-0x35cc1f,
+-0x35701f,
+-0x7cf0cb,
+-0x7cd08b,
+-0x880000,
+-0x7e8e8b,
+-0x95c004,
+-0xd4006e,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0xcc0803,
+-0xcc0c03,
+-0xcc1003,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0xcc2403,
+-0xcc2803,
+-0x35c41f,
+-0x36b01f,
+-0x7c704b,
+-0x34f01f,
+-0x7c704b,
+-0x35701f,
+-0x7c704b,
+-0x7d8881,
+-0x7dccc1,
+-0x7e5101,
+-0x7e9541,
+-0x7c9082,
+-0x7cd4c2,
+-0x7c848b,
+-0x9ac003,
+-0x7c8c8b,
+-0x2c8801,
+-0x98809e,
+-0xd4006d,
+-0x98409c,
+-0xd4006e,
+-0xcc084c,
+-0xcc0c4d,
+-0xcc1048,
+-0xd4801a,
+-0xd4c01a,
+-0x800101,
+-0xd5001a,
+-0xcc0832,
+-0xd40032,
+-0x9482d9,
+-0xca0c00,
+-0xd4401e,
+-0x800000,
+-0xd4001e,
+-0xe4011e,
+-0xd4001e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd4401e,
+-0xca1400,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xd5401e,
+-0xd54034,
+-0x800000,
+-0xee001e,
+-0x280404,
+-0xe2001a,
+-0xe2001a,
+-0xd4401a,
+-0xca3800,
+-0xcc0803,
+-0xcc0c03,
+-0xcc0c03,
+-0xcc0c03,
+-0x9882bd,
+-0x000000,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0400,
+-0xc2ff00,
+-0xcc0834,
+-0xc13fff,
+-0x7c74cb,
+-0x7cc90b,
+-0x7d010f,
+-0x9902b0,
+-0x7c738b,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0800,
+-0x281900,
+-0x7d898b,
+-0x958014,
+-0x281404,
+-0xca0c00,
+-0xca1000,
+-0xca1c00,
+-0xca2400,
+-0xe2001f,
+-0xd4c01a,
+-0xd5001a,
+-0xd5401a,
+-0xcc1803,
+-0xcc2c03,
+-0xcc2c03,
+-0xcc2c03,
+-0x7da58b,
+-0x7d9c47,
+-0x984297,
+-0x000000,
+-0x800161,
+-0xd4c01a,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c06,
+-0x0ccc06,
+-0x98c006,
+-0xcc104e,
+-0x990004,
+-0xd40073,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xca0800,
+-0xca0c00,
+-0x34d018,
+-0x251001,
+-0x950021,
+-0xc17fff,
+-0xca1000,
+-0xca1400,
+-0xca1800,
+-0xd4801d,
+-0xd4c01d,
+-0x7db18b,
+-0xc14202,
+-0xc2c001,
+-0xd5801d,
+-0x34dc0e,
+-0x7d5d4c,
+-0x7f734c,
+-0xd7401e,
+-0xd5001e,
+-0xd5401e,
+-0xc14200,
+-0xc2c000,
+-0x099c01,
+-0x31dc10,
+-0x7f5f4c,
+-0x7f734c,
+-0x042802,
+-0x7d8380,
+-0xd5a86f,
+-0xd58066,
+-0xd7401e,
+-0xec005e,
+-0xc82402,
+-0xc82402,
+-0x8001b8,
+-0xd60076,
+-0xd4401e,
+-0xd4801e,
+-0xd4c01e,
+-0x800000,
+-0xee001e,
+-0x800000,
+-0xee001f,
+-0xd4001f,
+-0x800000,
+-0xd4001f,
+-0xd4001f,
+-0x880000,
+-0xd4001f,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x010171,
+-0x020178,
+-0x03008f,
+-0x04007f,
+-0x050003,
+-0x06003f,
+-0x070032,
+-0x08012c,
+-0x090046,
+-0x0a0036,
+-0x1001b6,
+-0x1700a2,
+-0x22013a,
+-0x230149,
+-0x2000b4,
+-0x240125,
+-0x27004d,
+-0x28006a,
+-0x2a0060,
+-0x2b0052,
+-0x2f0065,
+-0x320087,
+-0x34017f,
+-0x3c0156,
+-0x3f0072,
+-0x41018c,
+-0x44012e,
+-0x550173,
+-0x56017a,
+-0x60000b,
+-0x610034,
+-0x620038,
+-0x630038,
+-0x640038,
+-0x650038,
+-0x660038,
+-0x670038,
+-0x68003a,
+-0x690041,
+-0x6a0048,
+-0x6b0048,
+-0x6c0048,
+-0x6d0048,
+-0x6e0048,
+-0x6f0048,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-};
+-
+-static const u32 RV635_cp_microcode[][3] = {
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0000ffff, 0x00284621, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000000, 0x00e00000, 0x000 },
+- { 0x00010000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000f00, 0x00281622, 0x000 },
+- { 0x00000008, 0x00211625, 0x000 },
+- { 0x00000018, 0x00203625, 0x000 },
+- { 0x8d000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x002f0225, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x018 },
+- { 0x00412000, 0x00404811, 0x019 },
+- { 0x00422000, 0x00204811, 0x000 },
+- { 0x8e000000, 0x00204411, 0x000 },
+- { 0x00000028, 0x00204a2d, 0x000 },
+- { 0x90000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x0000000c, 0x00211622, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000019, 0x00211a22, 0x000 },
+- { 0x00000004, 0x00281a26, 0x000 },
+- { 0x00000000, 0x002914c5, 0x000 },
+- { 0x00000019, 0x00203625, 0x000 },
+- { 0x00000000, 0x003a1402, 0x000 },
+- { 0x00000016, 0x00211625, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0xfffffffc, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002914a3, 0x000 },
+- { 0x00000017, 0x00203625, 0x000 },
+- { 0x00008000, 0x00280e22, 0x000 },
+- { 0x00000007, 0x00220e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x20000000, 0x00280e22, 0x000 },
+- { 0x00000006, 0x00210e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x00000000, 0x00220222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x038 },
+- { 0x00000000, 0x2ee00000, 0x035 },
+- { 0x00000000, 0x2ce00000, 0x037 },
+- { 0x00000000, 0x00400e2d, 0x039 },
+- { 0x00000008, 0x00200e2d, 0x000 },
+- { 0x00000009, 0x0040122d, 0x046 },
+- { 0x00000001, 0x00400e2d, 0x039 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x03e },
+- { 0x00000008, 0x00401c11, 0x041 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x0000000f, 0x00281e27, 0x000 },
+- { 0x00000003, 0x00221e27, 0x000 },
+- { 0x7fc00000, 0x00281a23, 0x000 },
+- { 0x00000014, 0x00211a26, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000008, 0x00221a26, 0x000 },
+- { 0x00000000, 0x00290cc7, 0x000 },
+- { 0x00000027, 0x00203624, 0x000 },
+- { 0x00007f00, 0x00281221, 0x000 },
+- { 0x00001400, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x04b },
+- { 0x00000001, 0x00290e23, 0x000 },
+- { 0x0000000e, 0x00203623, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfff80000, 0x00294a23, 0x000 },
+- { 0x00000000, 0x003a2c02, 0x000 },
+- { 0x00000002, 0x00220e2b, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x0000000f, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00204a2d, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000029, 0x00200e2d, 0x000 },
+- { 0x060a0200, 0x00294a23, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x061 },
+- { 0x00000000, 0x2ee00000, 0x05f },
+- { 0x00000000, 0x2ce00000, 0x05e },
+- { 0x00000000, 0x00400e2d, 0x062 },
+- { 0x00000001, 0x00400e2d, 0x062 },
+- { 0x0000000a, 0x00200e2d, 0x000 },
+- { 0x0000000b, 0x0040122d, 0x06a },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x7fc00000, 0x00281623, 0x000 },
+- { 0x00000014, 0x00211625, 0x000 },
+- { 0x00000001, 0x00331625, 0x000 },
+- { 0x80000000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00290ca3, 0x000 },
+- { 0x3ffffc00, 0x00290e23, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x06d },
+- { 0x00000100, 0x00401c11, 0x070 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x000000f0, 0x00281e27, 0x000 },
+- { 0x00000004, 0x00221e27, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0xfffff0ff, 0x00281a30, 0x000 },
+- { 0x0000a028, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948e6, 0x000 },
+- { 0x0000a018, 0x00204411, 0x000 },
+- { 0x3fffffff, 0x00284a23, 0x000 },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000030, 0x0020162d, 0x000 },
+- { 0x00000002, 0x00291625, 0x000 },
+- { 0x00000030, 0x00203625, 0x000 },
+- { 0x00000025, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a3, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x083 },
+- { 0x00000026, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a4, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x084 },
+- { 0x00000000, 0x00400000, 0x08a },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203624, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x08a },
+- { 0x00000000, 0x00600000, 0x665 },
+- { 0x00000000, 0x00600000, 0x659 },
+- { 0x00000002, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x08d },
+- { 0x00000012, 0xc0403620, 0x093 },
+- { 0x00000000, 0x2ee00000, 0x091 },
+- { 0x00000000, 0x2ce00000, 0x090 },
+- { 0x00000002, 0x00400e2d, 0x092 },
+- { 0x00000003, 0x00400e2d, 0x092 },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000012, 0x00203623, 0x000 },
+- { 0x00000003, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x098 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x0a0 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x2ee00000, 0x09e },
+- { 0x00000000, 0x2ce00000, 0x09d },
+- { 0x00000002, 0x00400e2d, 0x09f },
+- { 0x00000003, 0x00400e2d, 0x09f },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x003f0000, 0x00280e23, 0x000 },
+- { 0x00000010, 0x00210e23, 0x000 },
+- { 0x00000011, 0x00203623, 0x000 },
+- { 0x0000001e, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a7 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x0000001f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0aa },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000008, 0x00210e2b, 0x000 },
+- { 0x0000007f, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0e1 },
+- { 0x00000000, 0x27000000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x0b3 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000000c, 0x00221e30, 0x000 },
+- { 0x99800000, 0x00204411, 0x000 },
+- { 0x00000004, 0x0020122d, 0x000 },
+- { 0x00000008, 0x00221224, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00291ce4, 0x000 },
+- { 0x00000000, 0x00604807, 0x12f },
+- { 0x9b000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x9c000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x0033146f, 0x000 },
+- { 0x00000001, 0x00333e23, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0x00203c05, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e007, 0x00204411, 0x000 },
+- { 0x0000000f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0cb },
+- { 0x00f8ff08, 0x00204811, 0x000 },
+- { 0x98000000, 0x00404811, 0x0dc },
+- { 0x000000f0, 0x00280e22, 0x000 },
+- { 0x000000a0, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0da },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d5 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d4 },
+- { 0x00003f00, 0x00400c11, 0x0d6 },
+- { 0x00001f00, 0x00400c11, 0x0d6 },
+- { 0x00000f00, 0x00200c11, 0x000 },
+- { 0x00380009, 0x00294a23, 0x000 },
+- { 0x3f000000, 0x00280e2b, 0x000 },
+- { 0x00000002, 0x00220e23, 0x000 },
+- { 0x00000007, 0x00494a23, 0x0dc },
+- { 0x00380f09, 0x00204811, 0x000 },
+- { 0x68000007, 0x00204811, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000a202, 0x00204411, 0x000 },
+- { 0x00ff0000, 0x00280e22, 0x000 },
+- { 0x00000080, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00200e2d, 0x000 },
+- { 0x00000026, 0x0020122d, 0x000 },
+- { 0x00000000, 0x002f0083, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0ea },
+- { 0x00000000, 0x00600000, 0x65f },
+- { 0x00000000, 0x00400000, 0x0eb },
+- { 0x00000000, 0x00600000, 0x662 },
+- { 0x00000007, 0x0020222d, 0x000 },
+- { 0x00000005, 0x00220e22, 0x000 },
+- { 0x00100000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x000000ef, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000003, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x0f8 },
+- { 0x0000000b, 0x00210228, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f8 },
+- { 0x00000400, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000001c, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0fd },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000001e, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x10b },
+- { 0x0000a30f, 0x00204411, 0x000 },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x104 },
+- { 0xffffffff, 0x00404811, 0x10b },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x107 },
+- { 0x0000ffff, 0x00404811, 0x10b },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x10a },
+- { 0x000000ff, 0x00404811, 0x10b },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0002c400, 0x00204411, 0x000 },
+- { 0x0000001f, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x112 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000018, 0x40224a20, 0x000 },
+- { 0x00000010, 0xc0424a20, 0x114 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000000a, 0x00201011, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x11b },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00531224, 0x117 },
+- { 0xffbfffff, 0x00283a2e, 0x000 },
+- { 0x0000001b, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x12e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x00000018, 0x00220e30, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e00e, 0x00204411, 0x000 },
+- { 0x07f8ff08, 0x00204811, 0x000 },
+- { 0x00000000, 0x00294a23, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00800000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204806, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x689 },
+- { 0x00000004, 0x00404c11, 0x135 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000001c, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x13c },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40280620, 0x000 },
+- { 0x00000010, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x00341461, 0x000 },
+- { 0x00000000, 0x00741882, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x147 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0681a20, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x158 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000001, 0x00300a2f, 0x000 },
+- { 0x00000001, 0x00210a22, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600000, 0x18f },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00202c08, 0x000 },
+- { 0x00000000, 0x00202411, 0x000 },
+- { 0x00000000, 0x00202811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00221e29, 0x000 },
+- { 0x00000000, 0x007048eb, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000001, 0x40330620, 0x000 },
+- { 0x00000000, 0xc0302409, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x181 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x186 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x186 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000001, 0x00530621, 0x182 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0604800, 0x197 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000011, 0x0020062d, 0x000 },
+- { 0x00000000, 0x0078042a, 0x2fb },
+- { 0x00000000, 0x00202809, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x174 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x194 },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x46000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x19b },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00804811, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40281620, 0x000 },
+- { 0x00000010, 0xc0811a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000008, 0x00221e30, 0x000 },
+- { 0x00000029, 0x00201a2d, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfffbff09, 0x00204811, 0x000 },
+- { 0x0000000f, 0x0020222d, 0x000 },
+- { 0x00001fff, 0x00294a28, 0x000 },
+- { 0x00000006, 0x0020222d, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000100, 0x00201811, 0x000 },
+- { 0x00000008, 0x00621e28, 0x12f },
+- { 0x00000008, 0x00822228, 0x000 },
+- { 0x0002c000, 0x00204411, 0x000 },
+- { 0x00000015, 0x00600e2d, 0x1bd },
+- { 0x00000016, 0x00600e2d, 0x1bd },
+- { 0x0000c008, 0x00204411, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x1b9 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x39000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00804802, 0x000 },
+- { 0x00000018, 0x00202e2d, 0x000 },
+- { 0x00000000, 0x003b0d63, 0x000 },
+- { 0x00000008, 0x00224a23, 0x000 },
+- { 0x00000010, 0x00224a23, 0x000 },
+- { 0x00000018, 0x00224a23, 0x000 },
+- { 0x00000000, 0x00804803, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000007, 0x0021062f, 0x000 },
+- { 0x00000013, 0x00200a2d, 0x000 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000ffff, 0x40282220, 0x000 },
+- { 0x0000000f, 0x00262228, 0x000 },
+- { 0x00000010, 0x40212620, 0x000 },
+- { 0x0000000f, 0x00262629, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1e0 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000081, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000080, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1dc },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1d8 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000001f, 0x00280a22, 0x000 },
+- { 0x0000001f, 0x00282a2a, 0x000 },
+- { 0x00000001, 0x00530621, 0x1d1 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000002, 0x00304a2f, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000001, 0x00301e2f, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1e5 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x0000000f, 0x00260e23, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000000f, 0x00261224, 0x000 },
+- { 0x00000000, 0x00201411, 0x000 },
+- { 0x00000000, 0x00601811, 0x2bb },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022b, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1f8 },
+- { 0x00000010, 0x00221628, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a29, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x0020480a, 0x000 },
+- { 0x00000000, 0x00202c11, 0x000 },
+- { 0x00000010, 0x00221623, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a24, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x00731503, 0x205 },
+- { 0x00000000, 0x00201805, 0x000 },
+- { 0x00000000, 0x00731524, 0x205 },
+- { 0x00000000, 0x002d14c5, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00000000, 0x00202003, 0x000 },
+- { 0x00000000, 0x00802404, 0x000 },
+- { 0x0000000f, 0x00210225, 0x000 },
+- { 0x00000000, 0x14c00000, 0x689 },
+- { 0x00000000, 0x002b1405, 0x000 },
+- { 0x00000001, 0x00901625, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00294a22, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a21, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000ffff, 0x40281220, 0x000 },
+- { 0x00000010, 0xc0211a20, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211620, 0x000 },
+- { 0x00000000, 0x00741465, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00000001, 0x00330621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x219 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x212 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000000, 0x0040040f, 0x213 },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00000000, 0x00600000, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x232 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x236 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x236 },
+- { 0x00000000, 0xc0404800, 0x233 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x00600411, 0x2fb },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000018, 0x40210a20, 0x000 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x24c },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x00080101, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x251 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000010, 0x00600411, 0x315 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00000000, 0x00600000, 0x27c },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000001, 0x00211e27, 0x000 },
+- { 0x00000000, 0x14e00000, 0x26a },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x0000ffff, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00341c27, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25f },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e5, 0x000 },
+- { 0x00000000, 0x08c00000, 0x262 },
+- { 0x00000000, 0x00201407, 0x000 },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00211e27, 0x000 },
+- { 0x00000000, 0x00341c47, 0x000 },
+- { 0x00000000, 0x12c00000, 0x267 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x08c00000, 0x26a },
+- { 0x00000000, 0x00201807, 0x000 },
+- { 0x00000000, 0x00600000, 0x2c1 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000000, 0x00342023, 0x000 },
+- { 0x00000000, 0x12c00000, 0x272 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x271 },
+- { 0x00000016, 0x00404811, 0x276 },
+- { 0x00000018, 0x00404811, 0x276 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x275 },
+- { 0x00000017, 0x00404811, 0x276 },
+- { 0x00000019, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00604411, 0x2e9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x256 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000010, 0x40210620, 0x000 },
+- { 0x0000ffff, 0xc0280a20, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0881a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x00000000, 0x00600000, 0x62e },
+- { 0x00000000, 0xc0600000, 0x2a3 },
+- { 0x00000005, 0x00200a2d, 0x000 },
+- { 0x00000008, 0x00220a22, 0x000 },
+- { 0x0000002b, 0x00201a2d, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00007000, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00311ce6, 0x000 },
+- { 0x0000002a, 0x00201a2d, 0x000 },
+- { 0x0000000c, 0x00221a26, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x06e00000, 0x292 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00691ce2, 0x12f },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x29d },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000001c, 0x00403627, 0x000 },
+- { 0x0000000c, 0xc0220a20, 0x000 },
+- { 0x00000029, 0x00203622, 0x000 },
+- { 0x00000028, 0xc0403620, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000009, 0x00204811, 0x000 },
+- { 0xa1000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce3, 0x000 },
+- { 0x00000021, 0x00203627, 0x000 },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce4, 0x000 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a3, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203624, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000000, 0x00311cc4, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14c00000, 0x2dc },
+- { 0x00000000, 0x00400000, 0x2d9 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2d9 },
+- { 0x00000003, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2dc },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e1, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a1, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e2, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000000, 0x00600000, 0x665 },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00600000, 0x65c },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2a7 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x0000001a, 0x00201e2d, 0x000 },
+- { 0x0000001b, 0x0080222d, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca1, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x003808c5, 0x000 },
+- { 0x00000000, 0x00300841, 0x000 },
+- { 0x00000001, 0x00220a22, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000017, 0x0020222d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x318 },
+- { 0xffffffef, 0x00280621, 0x000 },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x0000f8e0, 0x00204411, 0x000 },
+- { 0x00000000, 0x00294901, 0x000 },
+- { 0x00000000, 0x00894901, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00002257, 0x00204411, 0x000 },
+- { 0x00000003, 0xc0484a20, 0x000 },
+- { 0x0000225d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x642 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x00000001, 0x40304a20, 0x000 },
+- { 0x00000002, 0xc0304a20, 0x000 },
+- { 0x00000001, 0x00530a22, 0x34b },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x354 },
+- { 0x00000014, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x364 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00604802, 0x36e },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x36a },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x00000028, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5bd },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35f },
+- { 0x0000002c, 0x00203626, 0x000 },
+- { 0x00000049, 0x00201811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000000, 0x002f0226, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x370 },
+- { 0x0000002c, 0x00801a2d, 0x000 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x00000015, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x386 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b1 },
+- { 0x00000016, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b5 },
+- { 0x00000020, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x39c },
+- { 0x0000000f, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a8 },
+- { 0x0000001e, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x390 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x08000000, 0x00290a22, 0x000 },
+- { 0x00000003, 0x40210e20, 0x000 },
+- { 0x0000000c, 0xc0211220, 0x000 },
+- { 0x00080000, 0x00281224, 0x000 },
+- { 0x00000014, 0xc0221620, 0x000 },
+- { 0x00000000, 0x002914a4, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948a2, 0x000 },
+- { 0x0000a1fe, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000015, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x392 },
+- { 0x0000210e, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000003, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x39e },
+- { 0x00002108, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x80000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000010, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3ae },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000006, 0x00404811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x0000001d, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3ce },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3c0 },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0xbabecafe, 0x00204811, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000004, 0x00404811, 0x000 },
+- { 0x00002170, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000a, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3d3 },
+- { 0x8c000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00003fff, 0x40280a20, 0x000 },
+- { 0x80000000, 0x40280e20, 0x000 },
+- { 0x40000000, 0xc0281220, 0x000 },
+- { 0x00040000, 0x00694622, 0x68a },
+- { 0x00000000, 0x00201410, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e1 },
+- { 0x00000000, 0xc0401800, 0x3e4 },
+- { 0x00003fff, 0xc0281a20, 0x000 },
+- { 0x00040000, 0x00694626, 0x68a },
+- { 0x00000000, 0x00201810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e7 },
+- { 0x00000000, 0xc0401c00, 0x3ea },
+- { 0x00003fff, 0xc0281e20, 0x000 },
+- { 0x00040000, 0x00694627, 0x68a },
+- { 0x00000000, 0x00201c10, 0x000 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0x002820c5, 0x000 },
+- { 0x00000000, 0x004948e8, 0x000 },
+- { 0xa5800000, 0x00200811, 0x000 },
+- { 0x00002000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x0000001f, 0xc0210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3f7 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000ffff, 0xc0481220, 0x3ff },
+- { 0xa7800000, 0x00200811, 0x000 },
+- { 0x0000a000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00304883, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xa9800000, 0x00200811, 0x000 },
+- { 0x0000c000, 0x00400c11, 0x3fa },
+- { 0xab800000, 0x00200811, 0x000 },
+- { 0x0000f8e0, 0x00400c11, 0x3fa },
+- { 0xad800000, 0x00200811, 0x000 },
+- { 0x0000f880, 0x00400c11, 0x3fa },
+- { 0xb3800000, 0x00200811, 0x000 },
+- { 0x0000f3fc, 0x00400c11, 0x3fa },
+- { 0xaf800000, 0x00200811, 0x000 },
+- { 0x0000e000, 0x00400c11, 0x3fa },
+- { 0xb1800000, 0x00200811, 0x000 },
+- { 0x0000f000, 0x00400c11, 0x3fa },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00002148, 0x00204811, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x01182000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0218a000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0318c000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0418f8e0, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0518f880, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0618e000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0718f000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0818f3fc, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000030, 0x00200a2d, 0x000 },
+- { 0x00000000, 0xc0290c40, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x86000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x85000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00404c02, 0x448 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x00000000, 0xc0201400, 0x000 },
+- { 0x00000000, 0xc0201800, 0x000 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x456 },
+- { 0x00000000, 0xc0202000, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x00000010, 0x00280a23, 0x000 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x45e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0x00694624, 0x68a },
+- { 0x00000000, 0x00400000, 0x463 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00604805, 0x68f },
+- { 0x00000000, 0x002824f0, 0x000 },
+- { 0x00000007, 0x00280a23, 0x000 },
+- { 0x00000001, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46a },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x04e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000002, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46f },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x02e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x474 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x479 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000005, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x47e },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x06e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x483 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x08e00000, 0x483 },
+- { 0x00000000, 0x00400000, 0x490 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x000 },
+- { 0x00000008, 0x00210a23, 0x000 },
+- { 0x00000000, 0x14c00000, 0x48d },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x496 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x00404c08, 0x456 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000011, 0x40211220, 0x000 },
+- { 0x00000012, 0x40211620, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00210225, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4a0 },
+- { 0x00040000, 0xc0494a20, 0x4a1 },
+- { 0xfffbffff, 0xc0284a20, 0x000 },
+- { 0x00000000, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4ad },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000c, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4a9 },
+- { 0xa0000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x00204811, 0x000 },
+- { 0x0000216b, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000216c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4a7 },
+- { 0x00000000, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4c0 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x68f },
+- { 0x00000000, 0x00400000, 0x4c4 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xc0600000, 0x68a },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4cb },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0404810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x68a },
+- { 0x00000000, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4cd },
+- { 0x00002180, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000003, 0x00333e2f, 0x000 },
+- { 0x00000001, 0x00210221, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4fd },
+- { 0x0000002c, 0x00200a2d, 0x000 },
+- { 0x00040000, 0x18e00c11, 0x4ec },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xd8c04800, 0x4e0 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000002d, 0x0020122d, 0x000 },
+- { 0x00000000, 0x00290c83, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000011, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4a7 },
+- { 0x0000002c, 0xc0203620, 0x000 },
+- { 0x0000002d, 0xc0403620, 0x000 },
+- { 0x0000000f, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x502 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0xd9000000, 0x000 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xb5000000, 0x00204411, 0x000 },
+- { 0x00002000, 0x00204811, 0x000 },
+- { 0xb6000000, 0x00204411, 0x000 },
+- { 0x0000a000, 0x00204811, 0x000 },
+- { 0xb7000000, 0x00204411, 0x000 },
+- { 0x0000c000, 0x00204811, 0x000 },
+- { 0xb8000000, 0x00204411, 0x000 },
+- { 0x0000f8e0, 0x00204811, 0x000 },
+- { 0xb9000000, 0x00204411, 0x000 },
+- { 0x0000f880, 0x00204811, 0x000 },
+- { 0xba000000, 0x00204411, 0x000 },
+- { 0x0000e000, 0x00204811, 0x000 },
+- { 0xbb000000, 0x00204411, 0x000 },
+- { 0x0000f000, 0x00204811, 0x000 },
+- { 0xbc000000, 0x00204411, 0x000 },
+- { 0x0000f3fc, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00204811, 0x000 },
+- { 0x000000ff, 0x00280e30, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x516 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x14c00000, 0x52b },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000001c, 0x00203623, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x00000028, 0x00203623, 0x000 },
+- { 0x00000017, 0x00203623, 0x000 },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203623, 0x000 },
+- { 0x00000015, 0x00203623, 0x000 },
+- { 0x00000016, 0x00203623, 0x000 },
+- { 0xffffe000, 0x00200c11, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00200c11, 0x000 },
+- { 0x00000023, 0x00203623, 0x000 },
+- { 0x00000024, 0x00203623, 0x000 },
+- { 0xf1ffffff, 0x00283a2e, 0x000 },
+- { 0x0000001a, 0xc0220e20, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000002a, 0x40203620, 0x000 },
+- { 0x87000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x9d000000, 0x00204411, 0x000 },
+- { 0x0000001f, 0x40214a20, 0x000 },
+- { 0x96000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x0000001f, 0x00211624, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x0000001d, 0x00203623, 0x000 },
+- { 0x00000003, 0x00281e23, 0x000 },
+- { 0x00000008, 0x00222223, 0x000 },
+- { 0xfffff000, 0x00282228, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x0000001f, 0x00203628, 0x000 },
+- { 0x00000018, 0x00211e23, 0x000 },
+- { 0x00000020, 0x00203627, 0x000 },
+- { 0x00000002, 0x00221624, 0x000 },
+- { 0x00000000, 0x003014a8, 0x000 },
+- { 0x0000001e, 0x00203625, 0x000 },
+- { 0x00000003, 0x00211a24, 0x000 },
+- { 0x10000000, 0x00281a26, 0x000 },
+- { 0xefffffff, 0x00283a2e, 0x000 },
+- { 0x00000000, 0x004938ce, 0x678 },
+- { 0x00000001, 0x40280a20, 0x000 },
+- { 0x00000006, 0x40280e20, 0x000 },
+- { 0x00000300, 0xc0281220, 0x000 },
+- { 0x00000008, 0x00211224, 0x000 },
+- { 0x00000000, 0xc0201620, 0x000 },
+- { 0x00000000, 0xc0201a20, 0x000 },
+- { 0x00000000, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x563 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68a },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00020000, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56b },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x579 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56b },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x68a },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x579 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56f },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00000000, 0xc0400000, 0x579 },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x577 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x68f },
+- { 0x00000000, 0x00401c10, 0x579 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x57b },
+- { 0x00000000, 0x00600000, 0x5c6 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x58c },
+- { 0x0000a2b7, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c4, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x58a },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000001, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x59d },
+- { 0x0000a2bb, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c5, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x59b },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000002, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5ae },
+- { 0x0000a2bf, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c6, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5ac },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x0000a2c3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68a },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000a2c7, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5bb },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0x01000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00400000, 0x5c1 },
+- { 0xa4000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5c6 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000002c, 0x00203621, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5cd },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000030, 0x00403621, 0x5e0 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x5e0 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a092, 0x00604411, 0x68a },
+- { 0x00000031, 0x00203630, 0x000 },
+- { 0x0004a093, 0x00604411, 0x68a },
+- { 0x00000032, 0x00203630, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x68a },
+- { 0x00000033, 0x00203630, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x68a },
+- { 0x00000034, 0x00203630, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x68a },
+- { 0x00000035, 0x00203630, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x68a },
+- { 0x00000036, 0x00203630, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x88000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000001, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x629 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x629 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x602 },
+- { 0x0000a092, 0x00204411, 0x000 },
+- { 0x00000031, 0x00204a2d, 0x000 },
+- { 0x0000a093, 0x00204411, 0x000 },
+- { 0x00000032, 0x00204a2d, 0x000 },
+- { 0x0000a2b6, 0x00204411, 0x000 },
+- { 0x00000033, 0x00204a2d, 0x000 },
+- { 0x0000a2ba, 0x00204411, 0x000 },
+- { 0x00000034, 0x00204a2d, 0x000 },
+- { 0x0000a2be, 0x00204411, 0x000 },
+- { 0x00000035, 0x00204a2d, 0x000 },
+- { 0x0000a2c2, 0x00204411, 0x000 },
+- { 0x00000036, 0x00204a2d, 0x000 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x000001ff, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x628 },
+- { 0x00000000, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x60b },
+- { 0x0004a003, 0x00604411, 0x68a },
+- { 0x0000a003, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x14c00000, 0x610 },
+- { 0x0004a010, 0x00604411, 0x68a },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x628 },
+- { 0x0004a011, 0x00604411, 0x68a },
+- { 0x0000a011, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a012, 0x00604411, 0x68a },
+- { 0x0000a012, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a013, 0x00604411, 0x68a },
+- { 0x0000a013, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a014, 0x00604411, 0x68a },
+- { 0x0000a014, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a015, 0x00604411, 0x68a },
+- { 0x0000a015, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a016, 0x00604411, 0x68a },
+- { 0x0000a016, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a017, 0x00604411, 0x68a },
+- { 0x0000a017, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x0000002c, 0x0080062d, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x63a },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000002, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x638 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x68a },
+- { 0x00001000, 0x00200811, 0x000 },
+- { 0x0000002b, 0x00203622, 0x000 },
+- { 0x00000000, 0x00600000, 0x63e },
+- { 0x00000000, 0x00600000, 0x5c6 },
+- { 0x98000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0600000, 0x63e },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000022, 0x00204811, 0x000 },
+- { 0x89000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00404811, 0x62a },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404811, 0x62a },
+- { 0x00000000, 0x00600000, 0x659 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0xc0204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x09800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000004, 0x00404c11, 0x653 },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000004, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffffb, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffff7, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36e },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x01800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004217f, 0x00604411, 0x68a },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x689 },
+- { 0x00000010, 0x00404c11, 0x66f },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x38c00000, 0x000 },
+- { 0x0000001d, 0x00200a2d, 0x000 },
+- { 0x0000001e, 0x00200e2d, 0x000 },
+- { 0x0000001f, 0x0020122d, 0x000 },
+- { 0x00000020, 0x0020162d, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000004, 0x00301224, 0x000 },
+- { 0x00000000, 0x002f0064, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x688 },
+- { 0x00000003, 0x00281a22, 0x000 },
+- { 0x00000008, 0x00221222, 0x000 },
+- { 0xfffff000, 0x00281224, 0x000 },
+- { 0x00000000, 0x002910c4, 0x000 },
+- { 0x0000001f, 0x00403624, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x68a },
+- { 0x9f000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x68d },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x68f },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x692 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0xc0204411, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000024, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000022, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x014204ff, 0x05bd0250, 0x000 },
+- { 0x01c30168, 0x043f05bd, 0x000 },
+- { 0x02250209, 0x02500151, 0x000 },
+- { 0x02230245, 0x02a00241, 0x000 },
+- { 0x03d705bd, 0x05bd05bd, 0x000 },
+- { 0x06460647, 0x031f05bd, 0x000 },
+- { 0x05bd05c2, 0x03200340, 0x000 },
+- { 0x032a0282, 0x03420334, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd054e, 0x05bd05bd, 0x000 },
+- { 0x03ba05bd, 0x04b80344, 0x000 },
+- { 0x0497044d, 0x043d05bd, 0x000 },
+- { 0x04cd05bd, 0x044104da, 0x000 },
+- { 0x044d0504, 0x03510375, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x063c05c4, 0x000 },
+- { 0x05bd05bd, 0x000705bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x03f803ed, 0x04080406, 0x000 },
+- { 0x040e040a, 0x040c0410, 0x000 },
+- { 0x041c0418, 0x04240420, 0x000 },
+- { 0x042c0428, 0x04340430, 0x000 },
+- { 0x05bd05bd, 0x043805bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x05bd05bd, 0x05bd05bd, 0x000 },
+- { 0x00020676, 0x06940006, 0x000 },
+-};
+-
+-static const u32 RV635_pfp_microcode[] = {
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0x7c038b,
+-0x8001b8,
+-0x7c038b,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xc41838,
+-0xca2400,
+-0xca2800,
+-0x9581a8,
+-0xc41c3a,
+-0xc3c000,
+-0xca0800,
+-0xca0c00,
+-0x7c744b,
+-0xc20005,
+-0x99c000,
+-0xc41c3a,
+-0x7c744c,
+-0xc0fff0,
+-0x042c04,
+-0x309002,
+-0x7d2500,
+-0x351402,
+-0x7d350b,
+-0x255403,
+-0x7cd580,
+-0x259c03,
+-0x95c004,
+-0xd5001b,
+-0x7eddc1,
+-0x7d9d80,
+-0xd6801b,
+-0xd5801b,
+-0xd4401e,
+-0xd5401e,
+-0xd6401e,
+-0xd6801e,
+-0xd4801e,
+-0xd4c01e,
+-0x9783d3,
+-0xd5c01e,
+-0xca0800,
+-0x80001a,
+-0xca0c00,
+-0xe4011e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xe4013e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca1800,
+-0xd4401e,
+-0xd5801e,
+-0x800053,
+-0xd40075,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xe2001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0xd48060,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xd48061,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xca0c00,
+-0xd4401e,
+-0xd48016,
+-0xd4c016,
+-0xd4801e,
+-0x8001b8,
+-0xd4c01e,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x948004,
+-0xca1400,
+-0xe420f3,
+-0xd42013,
+-0xd56065,
+-0xd4e01c,
+-0xd5201c,
+-0xd5601c,
+-0x800000,
+-0x062001,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9483f7,
+-0xca1400,
+-0xe420f3,
+-0x800079,
+-0xd42013,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9883ef,
+-0xca1400,
+-0xd40064,
+-0x80008d,
+-0x000000,
+-0xc41432,
+-0xc61843,
+-0xc4082f,
+-0x954005,
+-0xc40c30,
+-0xd4401e,
+-0x800000,
+-0xee001e,
+-0x9583f5,
+-0xc41031,
+-0xd44033,
+-0xd52065,
+-0xd4a01c,
+-0xd4e01c,
+-0xd5201c,
+-0xe4015e,
+-0xd4001e,
+-0x800000,
+-0x062001,
+-0xca1800,
+-0x0a2001,
+-0xd60076,
+-0xc40836,
+-0x988007,
+-0xc61045,
+-0x950110,
+-0xd4001f,
+-0xd46062,
+-0x800000,
+-0xd42062,
+-0xcc3835,
+-0xcc1433,
+-0x8401bb,
+-0xd40072,
+-0xd5401e,
+-0x800000,
+-0xee001e,
+-0xe2001a,
+-0x8401bb,
+-0xe2001a,
+-0xcc104b,
+-0xcc0447,
+-0x2c9401,
+-0x7d098b,
+-0x984005,
+-0x7d15cb,
+-0xd4001a,
+-0x8001b8,
+-0xd4006d,
+-0x344401,
+-0xcc0c48,
+-0x98403a,
+-0xcc2c4a,
+-0x958004,
+-0xcc0449,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0x282801,
+-0x8400f0,
+-0xcc1003,
+-0x98801b,
+-0x04380c,
+-0x8400f0,
+-0xcc1003,
+-0x988017,
+-0x043808,
+-0x8400f0,
+-0xcc1003,
+-0x988013,
+-0x043804,
+-0x8400f0,
+-0xcc1003,
+-0x988014,
+-0xcc104c,
+-0x9a8009,
+-0xcc144d,
+-0x9840dc,
+-0xd4006d,
+-0xcc1848,
+-0xd5001a,
+-0xd5401a,
+-0x8000c9,
+-0xd5801a,
+-0x96c0d5,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0x9ac003,
+-0xd4006d,
+-0xd4006e,
+-0x800000,
+-0xec007f,
+-0x9ac0cc,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0x7d9103,
+-0x7dd583,
+-0x7d190c,
+-0x35cc1f,
+-0x35701f,
+-0x7cf0cb,
+-0x7cd08b,
+-0x880000,
+-0x7e8e8b,
+-0x95c004,
+-0xd4006e,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0xcc0803,
+-0xcc0c03,
+-0xcc1003,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0xcc2403,
+-0xcc2803,
+-0x35c41f,
+-0x36b01f,
+-0x7c704b,
+-0x34f01f,
+-0x7c704b,
+-0x35701f,
+-0x7c704b,
+-0x7d8881,
+-0x7dccc1,
+-0x7e5101,
+-0x7e9541,
+-0x7c9082,
+-0x7cd4c2,
+-0x7c848b,
+-0x9ac003,
+-0x7c8c8b,
+-0x2c8801,
+-0x98809e,
+-0xd4006d,
+-0x98409c,
+-0xd4006e,
+-0xcc084c,
+-0xcc0c4d,
+-0xcc1048,
+-0xd4801a,
+-0xd4c01a,
+-0x800101,
+-0xd5001a,
+-0xcc0832,
+-0xd40032,
+-0x9482d9,
+-0xca0c00,
+-0xd4401e,
+-0x800000,
+-0xd4001e,
+-0xe4011e,
+-0xd4001e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd4401e,
+-0xca1400,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xd5401e,
+-0xd54034,
+-0x800000,
+-0xee001e,
+-0x280404,
+-0xe2001a,
+-0xe2001a,
+-0xd4401a,
+-0xca3800,
+-0xcc0803,
+-0xcc0c03,
+-0xcc0c03,
+-0xcc0c03,
+-0x9882bd,
+-0x000000,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0400,
+-0xc2ff00,
+-0xcc0834,
+-0xc13fff,
+-0x7c74cb,
+-0x7cc90b,
+-0x7d010f,
+-0x9902b0,
+-0x7c738b,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0800,
+-0x281900,
+-0x7d898b,
+-0x958014,
+-0x281404,
+-0xca0c00,
+-0xca1000,
+-0xca1c00,
+-0xca2400,
+-0xe2001f,
+-0xd4c01a,
+-0xd5001a,
+-0xd5401a,
+-0xcc1803,
+-0xcc2c03,
+-0xcc2c03,
+-0xcc2c03,
+-0x7da58b,
+-0x7d9c47,
+-0x984297,
+-0x000000,
+-0x800161,
+-0xd4c01a,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c06,
+-0x0ccc06,
+-0x98c006,
+-0xcc104e,
+-0x990004,
+-0xd40073,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xca0800,
+-0xca0c00,
+-0x34d018,
+-0x251001,
+-0x950021,
+-0xc17fff,
+-0xca1000,
+-0xca1400,
+-0xca1800,
+-0xd4801d,
+-0xd4c01d,
+-0x7db18b,
+-0xc14202,
+-0xc2c001,
+-0xd5801d,
+-0x34dc0e,
+-0x7d5d4c,
+-0x7f734c,
+-0xd7401e,
+-0xd5001e,
+-0xd5401e,
+-0xc14200,
+-0xc2c000,
+-0x099c01,
+-0x31dc10,
+-0x7f5f4c,
+-0x7f734c,
+-0x042802,
+-0x7d8380,
+-0xd5a86f,
+-0xd58066,
+-0xd7401e,
+-0xec005e,
+-0xc82402,
+-0xc82402,
+-0x8001b8,
+-0xd60076,
+-0xd4401e,
+-0xd4801e,
+-0xd4c01e,
+-0x800000,
+-0xee001e,
+-0x800000,
+-0xee001f,
+-0xd4001f,
+-0x800000,
+-0xd4001f,
+-0xd4001f,
+-0x880000,
+-0xd4001f,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x010171,
+-0x020178,
+-0x03008f,
+-0x04007f,
+-0x050003,
+-0x06003f,
+-0x070032,
+-0x08012c,
+-0x090046,
+-0x0a0036,
+-0x1001b6,
+-0x1700a2,
+-0x22013a,
+-0x230149,
+-0x2000b4,
+-0x240125,
+-0x27004d,
+-0x28006a,
+-0x2a0060,
+-0x2b0052,
+-0x2f0065,
+-0x320087,
+-0x34017f,
+-0x3c0156,
+-0x3f0072,
+-0x41018c,
+-0x44012e,
+-0x550173,
+-0x56017a,
+-0x60000b,
+-0x610034,
+-0x620038,
+-0x630038,
+-0x640038,
+-0x650038,
+-0x660038,
+-0x670038,
+-0x68003a,
+-0x690041,
+-0x6a0048,
+-0x6b0048,
+-0x6c0048,
+-0x6d0048,
+-0x6e0048,
+-0x6f0048,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-};
+-
+-static const u32 RV670_cp_microcode[][3] = {
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0000ffff, 0x00284621, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000000, 0x00e00000, 0x000 },
+- { 0x00010000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x00000000, 0x00600000, 0x624 },
+- { 0x00000000, 0x00600000, 0x638 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000f00, 0x00281622, 0x000 },
+- { 0x00000008, 0x00211625, 0x000 },
+- { 0x00000018, 0x00203625, 0x000 },
+- { 0x8d000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x002f0225, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x018 },
+- { 0x00412000, 0x00404811, 0x019 },
+- { 0x00422000, 0x00204811, 0x000 },
+- { 0x8e000000, 0x00204411, 0x000 },
+- { 0x00000028, 0x00204a2d, 0x000 },
+- { 0x90000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x0000000c, 0x00211622, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000019, 0x00211a22, 0x000 },
+- { 0x00000004, 0x00281a26, 0x000 },
+- { 0x00000000, 0x002914c5, 0x000 },
+- { 0x00000019, 0x00203625, 0x000 },
+- { 0x00000000, 0x003a1402, 0x000 },
+- { 0x00000016, 0x00211625, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0xfffffffc, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002914a3, 0x000 },
+- { 0x00000017, 0x00203625, 0x000 },
+- { 0x00008000, 0x00280e22, 0x000 },
+- { 0x00000007, 0x00220e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x20000000, 0x00280e22, 0x000 },
+- { 0x00000006, 0x00210e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x00000000, 0x00220222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x038 },
+- { 0x00000000, 0x2ee00000, 0x035 },
+- { 0x00000000, 0x2ce00000, 0x037 },
+- { 0x00000000, 0x00400e2d, 0x039 },
+- { 0x00000008, 0x00200e2d, 0x000 },
+- { 0x00000009, 0x0040122d, 0x046 },
+- { 0x00000001, 0x00400e2d, 0x039 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x03e },
+- { 0x00000008, 0x00401c11, 0x041 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x0000000f, 0x00281e27, 0x000 },
+- { 0x00000003, 0x00221e27, 0x000 },
+- { 0x7fc00000, 0x00281a23, 0x000 },
+- { 0x00000014, 0x00211a26, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000008, 0x00221a26, 0x000 },
+- { 0x00000000, 0x00290cc7, 0x000 },
+- { 0x00000027, 0x00203624, 0x000 },
+- { 0x00007f00, 0x00281221, 0x000 },
+- { 0x00001400, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x04b },
+- { 0x00000001, 0x00290e23, 0x000 },
+- { 0x0000000e, 0x00203623, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfff80000, 0x00294a23, 0x000 },
+- { 0x00000000, 0x003a2c02, 0x000 },
+- { 0x00000002, 0x00220e2b, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x0000000f, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00204a2d, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000029, 0x00200e2d, 0x000 },
+- { 0x060a0200, 0x00294a23, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x061 },
+- { 0x00000000, 0x2ee00000, 0x05f },
+- { 0x00000000, 0x2ce00000, 0x05e },
+- { 0x00000000, 0x00400e2d, 0x062 },
+- { 0x00000001, 0x00400e2d, 0x062 },
+- { 0x0000000a, 0x00200e2d, 0x000 },
+- { 0x0000000b, 0x0040122d, 0x06a },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x7fc00000, 0x00281623, 0x000 },
+- { 0x00000014, 0x00211625, 0x000 },
+- { 0x00000001, 0x00331625, 0x000 },
+- { 0x80000000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00290ca3, 0x000 },
+- { 0x3ffffc00, 0x00290e23, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x06d },
+- { 0x00000100, 0x00401c11, 0x070 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x000000f0, 0x00281e27, 0x000 },
+- { 0x00000004, 0x00221e27, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0xfffff0ff, 0x00281a30, 0x000 },
+- { 0x0000a028, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948e6, 0x000 },
+- { 0x0000a018, 0x00204411, 0x000 },
+- { 0x3fffffff, 0x00284a23, 0x000 },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000030, 0x0020162d, 0x000 },
+- { 0x00000002, 0x00291625, 0x000 },
+- { 0x00000030, 0x00203625, 0x000 },
+- { 0x00000025, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a3, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x083 },
+- { 0x00000026, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a4, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x084 },
+- { 0x00000000, 0x00400000, 0x08a },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203624, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x08a },
+- { 0x00000000, 0x00600000, 0x659 },
+- { 0x00000000, 0x00600000, 0x64d },
+- { 0x00000002, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x08d },
+- { 0x00000012, 0xc0403620, 0x093 },
+- { 0x00000000, 0x2ee00000, 0x091 },
+- { 0x00000000, 0x2ce00000, 0x090 },
+- { 0x00000002, 0x00400e2d, 0x092 },
+- { 0x00000003, 0x00400e2d, 0x092 },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000012, 0x00203623, 0x000 },
+- { 0x00000003, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x098 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x0a0 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x2ee00000, 0x09e },
+- { 0x00000000, 0x2ce00000, 0x09d },
+- { 0x00000002, 0x00400e2d, 0x09f },
+- { 0x00000003, 0x00400e2d, 0x09f },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x003f0000, 0x00280e23, 0x000 },
+- { 0x00000010, 0x00210e23, 0x000 },
+- { 0x00000011, 0x00203623, 0x000 },
+- { 0x0000001e, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a7 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x0000001f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0aa },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000008, 0x00210e2b, 0x000 },
+- { 0x0000007f, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0e1 },
+- { 0x00000000, 0x27000000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x0b3 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000000c, 0x00221e30, 0x000 },
+- { 0x99800000, 0x00204411, 0x000 },
+- { 0x00000004, 0x0020122d, 0x000 },
+- { 0x00000008, 0x00221224, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00291ce4, 0x000 },
+- { 0x00000000, 0x00604807, 0x12f },
+- { 0x9b000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x9c000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x0033146f, 0x000 },
+- { 0x00000001, 0x00333e23, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0x00203c05, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e007, 0x00204411, 0x000 },
+- { 0x0000000f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0cb },
+- { 0x00f8ff08, 0x00204811, 0x000 },
+- { 0x98000000, 0x00404811, 0x0dc },
+- { 0x000000f0, 0x00280e22, 0x000 },
+- { 0x000000a0, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0da },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d5 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d4 },
+- { 0x00003f00, 0x00400c11, 0x0d6 },
+- { 0x00001f00, 0x00400c11, 0x0d6 },
+- { 0x00000f00, 0x00200c11, 0x000 },
+- { 0x00380009, 0x00294a23, 0x000 },
+- { 0x3f000000, 0x00280e2b, 0x000 },
+- { 0x00000002, 0x00220e23, 0x000 },
+- { 0x00000007, 0x00494a23, 0x0dc },
+- { 0x00380f09, 0x00204811, 0x000 },
+- { 0x68000007, 0x00204811, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000a202, 0x00204411, 0x000 },
+- { 0x00ff0000, 0x00280e22, 0x000 },
+- { 0x00000080, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00200e2d, 0x000 },
+- { 0x00000026, 0x0020122d, 0x000 },
+- { 0x00000000, 0x002f0083, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0ea },
+- { 0x00000000, 0x00600000, 0x653 },
+- { 0x00000000, 0x00400000, 0x0eb },
+- { 0x00000000, 0x00600000, 0x656 },
+- { 0x00000007, 0x0020222d, 0x000 },
+- { 0x00000005, 0x00220e22, 0x000 },
+- { 0x00100000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x000000ef, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000003, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x0f8 },
+- { 0x0000000b, 0x00210228, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f8 },
+- { 0x00000400, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000001c, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0fd },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000001e, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x10b },
+- { 0x0000a30f, 0x00204411, 0x000 },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x104 },
+- { 0xffffffff, 0x00404811, 0x10b },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x107 },
+- { 0x0000ffff, 0x00404811, 0x10b },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x10a },
+- { 0x000000ff, 0x00404811, 0x10b },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0002c400, 0x00204411, 0x000 },
+- { 0x0000001f, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x112 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000018, 0x40224a20, 0x000 },
+- { 0x00000010, 0xc0424a20, 0x114 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000000a, 0x00201011, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x11b },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00531224, 0x117 },
+- { 0xffbfffff, 0x00283a2e, 0x000 },
+- { 0x0000001b, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x12e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x00000018, 0x00220e30, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e00e, 0x00204411, 0x000 },
+- { 0x07f8ff08, 0x00204811, 0x000 },
+- { 0x00000000, 0x00294a23, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00800000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204806, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x67c },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x67b },
+- { 0x00000004, 0x00404c11, 0x135 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000001c, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x67c },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x13c },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40280620, 0x000 },
+- { 0x00000010, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x00341461, 0x000 },
+- { 0x00000000, 0x00741882, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x147 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0681a20, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x158 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000001, 0x00300a2f, 0x000 },
+- { 0x00000001, 0x00210a22, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600000, 0x18f },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00202c08, 0x000 },
+- { 0x00000000, 0x00202411, 0x000 },
+- { 0x00000000, 0x00202811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00221e29, 0x000 },
+- { 0x00000000, 0x007048eb, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000001, 0x40330620, 0x000 },
+- { 0x00000000, 0xc0302409, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x181 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x186 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x186 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000001, 0x00530621, 0x182 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0604800, 0x197 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000011, 0x0020062d, 0x000 },
+- { 0x00000000, 0x0078042a, 0x2fb },
+- { 0x00000000, 0x00202809, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x174 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x194 },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x46000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x19b },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00804811, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40281620, 0x000 },
+- { 0x00000010, 0xc0811a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000008, 0x00221e30, 0x000 },
+- { 0x00000029, 0x00201a2d, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfffbff09, 0x00204811, 0x000 },
+- { 0x0000000f, 0x0020222d, 0x000 },
+- { 0x00001fff, 0x00294a28, 0x000 },
+- { 0x00000006, 0x0020222d, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000100, 0x00201811, 0x000 },
+- { 0x00000008, 0x00621e28, 0x12f },
+- { 0x00000008, 0x00822228, 0x000 },
+- { 0x0002c000, 0x00204411, 0x000 },
+- { 0x00000015, 0x00600e2d, 0x1bd },
+- { 0x00000016, 0x00600e2d, 0x1bd },
+- { 0x0000c008, 0x00204411, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x1b9 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x39000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00804802, 0x000 },
+- { 0x00000018, 0x00202e2d, 0x000 },
+- { 0x00000000, 0x003b0d63, 0x000 },
+- { 0x00000008, 0x00224a23, 0x000 },
+- { 0x00000010, 0x00224a23, 0x000 },
+- { 0x00000018, 0x00224a23, 0x000 },
+- { 0x00000000, 0x00804803, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000007, 0x0021062f, 0x000 },
+- { 0x00000013, 0x00200a2d, 0x000 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000ffff, 0x40282220, 0x000 },
+- { 0x0000000f, 0x00262228, 0x000 },
+- { 0x00000010, 0x40212620, 0x000 },
+- { 0x0000000f, 0x00262629, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1e0 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000081, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000080, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1dc },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1d8 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000001f, 0x00280a22, 0x000 },
+- { 0x0000001f, 0x00282a2a, 0x000 },
+- { 0x00000001, 0x00530621, 0x1d1 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000002, 0x00304a2f, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000001, 0x00301e2f, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1e5 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x0000000f, 0x00260e23, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000000f, 0x00261224, 0x000 },
+- { 0x00000000, 0x00201411, 0x000 },
+- { 0x00000000, 0x00601811, 0x2bb },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022b, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1f8 },
+- { 0x00000010, 0x00221628, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a29, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x0020480a, 0x000 },
+- { 0x00000000, 0x00202c11, 0x000 },
+- { 0x00000010, 0x00221623, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a24, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x00731503, 0x205 },
+- { 0x00000000, 0x00201805, 0x000 },
+- { 0x00000000, 0x00731524, 0x205 },
+- { 0x00000000, 0x002d14c5, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00000000, 0x00202003, 0x000 },
+- { 0x00000000, 0x00802404, 0x000 },
+- { 0x0000000f, 0x00210225, 0x000 },
+- { 0x00000000, 0x14c00000, 0x67b },
+- { 0x00000000, 0x002b1405, 0x000 },
+- { 0x00000001, 0x00901625, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00294a22, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a21, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000ffff, 0x40281220, 0x000 },
+- { 0x00000010, 0xc0211a20, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211620, 0x000 },
+- { 0x00000000, 0x00741465, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00000001, 0x00330621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x219 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x212 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x638 },
+- { 0x00000000, 0x0040040f, 0x213 },
+- { 0x00000000, 0x00600000, 0x624 },
+- { 0x00000000, 0x00600000, 0x638 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00000000, 0x00600000, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x232 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x236 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x236 },
+- { 0x00000000, 0xc0404800, 0x233 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x00600411, 0x2fb },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x624 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000018, 0x40210a20, 0x000 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x24c },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x00080101, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x251 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000010, 0x00600411, 0x315 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00000000, 0x00600000, 0x27c },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000001, 0x00211e27, 0x000 },
+- { 0x00000000, 0x14e00000, 0x26a },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x0000ffff, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00341c27, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25f },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e5, 0x000 },
+- { 0x00000000, 0x08c00000, 0x262 },
+- { 0x00000000, 0x00201407, 0x000 },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00211e27, 0x000 },
+- { 0x00000000, 0x00341c47, 0x000 },
+- { 0x00000000, 0x12c00000, 0x267 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x08c00000, 0x26a },
+- { 0x00000000, 0x00201807, 0x000 },
+- { 0x00000000, 0x00600000, 0x2c1 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000000, 0x00342023, 0x000 },
+- { 0x00000000, 0x12c00000, 0x272 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x271 },
+- { 0x00000016, 0x00404811, 0x276 },
+- { 0x00000018, 0x00404811, 0x276 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x275 },
+- { 0x00000017, 0x00404811, 0x276 },
+- { 0x00000019, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00604411, 0x2e9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x256 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000010, 0x40210620, 0x000 },
+- { 0x0000ffff, 0xc0280a20, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0881a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x00000000, 0x00600000, 0x624 },
+- { 0x00000000, 0xc0600000, 0x2a3 },
+- { 0x00000005, 0x00200a2d, 0x000 },
+- { 0x00000008, 0x00220a22, 0x000 },
+- { 0x0000002b, 0x00201a2d, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00007000, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00311ce6, 0x000 },
+- { 0x0000002a, 0x00201a2d, 0x000 },
+- { 0x0000000c, 0x00221a26, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x06e00000, 0x292 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00691ce2, 0x12f },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x29d },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000001c, 0x00403627, 0x000 },
+- { 0x0000000c, 0xc0220a20, 0x000 },
+- { 0x00000029, 0x00203622, 0x000 },
+- { 0x00000028, 0xc0403620, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000009, 0x00204811, 0x000 },
+- { 0xa1000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce3, 0x000 },
+- { 0x00000021, 0x00203627, 0x000 },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce4, 0x000 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a3, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203624, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000000, 0x00311cc4, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14c00000, 0x2dc },
+- { 0x00000000, 0x00400000, 0x2d9 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2d9 },
+- { 0x00000003, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2dc },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e1, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a1, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e2, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000000, 0x00600000, 0x659 },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00600000, 0x650 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2a7 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x0000001a, 0x00201e2d, 0x000 },
+- { 0x0000001b, 0x0080222d, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca1, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x003808c5, 0x000 },
+- { 0x00000000, 0x00300841, 0x000 },
+- { 0x00000001, 0x00220a22, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000017, 0x0020222d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x318 },
+- { 0xffffffef, 0x00280621, 0x000 },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x0000f8e0, 0x00204411, 0x000 },
+- { 0x00000000, 0x00294901, 0x000 },
+- { 0x00000000, 0x00894901, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00002257, 0x00204411, 0x000 },
+- { 0x00000003, 0xc0484a20, 0x000 },
+- { 0x0000225d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x638 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x00000001, 0x40304a20, 0x000 },
+- { 0x00000002, 0xc0304a20, 0x000 },
+- { 0x00000001, 0x00530a22, 0x34b },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x67c },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x354 },
+- { 0x00000014, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x362 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00604802, 0x36a },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x366 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35d },
+- { 0x00000028, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5b3 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x35d },
+- { 0x0000002c, 0x00203626, 0x000 },
+- { 0x00000049, 0x00201811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000000, 0x002f0226, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x36c },
+- { 0x0000002c, 0x00801a2d, 0x000 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x00000015, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x382 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3ad },
+- { 0x00000016, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3af },
+- { 0x00000020, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x398 },
+- { 0x0000000f, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a4 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a4 },
+- { 0x0000001e, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x38c },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x08000000, 0x00290a22, 0x000 },
+- { 0x00000003, 0x40210e20, 0x000 },
+- { 0x0000000c, 0xc0211220, 0x000 },
+- { 0x00080000, 0x00281224, 0x000 },
+- { 0x00000014, 0xc0221620, 0x000 },
+- { 0x00000000, 0x002914a4, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948a2, 0x000 },
+- { 0x0000a1fe, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x67c },
+- { 0x00000015, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x38e },
+- { 0x0000210e, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x67c },
+- { 0x00000003, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x39a },
+- { 0x00002108, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x80000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000010, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3aa },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000006, 0x00404811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36a },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x0000001d, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3c4 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x67c },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3b8 },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0xbabecafe, 0x00204811, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000004, 0x00404811, 0x000 },
+- { 0x00002170, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000a, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3c9 },
+- { 0x8c000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00003fff, 0x40280a20, 0x000 },
+- { 0x80000000, 0x40280e20, 0x000 },
+- { 0x40000000, 0xc0281220, 0x000 },
+- { 0x00040000, 0x00694622, 0x67c },
+- { 0x00000000, 0x00201410, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3d7 },
+- { 0x00000000, 0xc0401800, 0x3da },
+- { 0x00003fff, 0xc0281a20, 0x000 },
+- { 0x00040000, 0x00694626, 0x67c },
+- { 0x00000000, 0x00201810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3dd },
+- { 0x00000000, 0xc0401c00, 0x3e0 },
+- { 0x00003fff, 0xc0281e20, 0x000 },
+- { 0x00040000, 0x00694627, 0x67c },
+- { 0x00000000, 0x00201c10, 0x000 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0x002820c5, 0x000 },
+- { 0x00000000, 0x004948e8, 0x000 },
+- { 0xa5800000, 0x00200811, 0x000 },
+- { 0x00002000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x408 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x0000001f, 0xc0210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3ed },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000ffff, 0xc0481220, 0x3f5 },
+- { 0xa7800000, 0x00200811, 0x000 },
+- { 0x0000a000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x408 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00304883, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x83000000, 0x00604411, 0x408 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xa9800000, 0x00200811, 0x000 },
+- { 0x0000c000, 0x00400c11, 0x3f0 },
+- { 0xab800000, 0x00200811, 0x000 },
+- { 0x0000f8e0, 0x00400c11, 0x3f0 },
+- { 0xad800000, 0x00200811, 0x000 },
+- { 0x0000f880, 0x00400c11, 0x3f0 },
+- { 0xb3800000, 0x00200811, 0x000 },
+- { 0x0000f3fc, 0x00400c11, 0x3f0 },
+- { 0xaf800000, 0x00200811, 0x000 },
+- { 0x0000e000, 0x00400c11, 0x3f0 },
+- { 0xb1800000, 0x00200811, 0x000 },
+- { 0x0000f000, 0x00400c11, 0x3f0 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00002148, 0x00204811, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x01182000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0218a000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0318c000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0418f8e0, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0518f880, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0618e000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0718f000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0818f3fc, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000030, 0x00200a2d, 0x000 },
+- { 0x00000000, 0xc0290c40, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x86000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x85000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x67c },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00404c02, 0x43e },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x00000000, 0xc0201400, 0x000 },
+- { 0x00000000, 0xc0201800, 0x000 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x44c },
+- { 0x00000000, 0xc0202000, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x00000010, 0x00280a23, 0x000 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x454 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0x00694624, 0x67c },
+- { 0x00000000, 0x00400000, 0x459 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00604805, 0x681 },
+- { 0x00000000, 0x002824f0, 0x000 },
+- { 0x00000007, 0x00280a23, 0x000 },
+- { 0x00000001, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x460 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x04e00000, 0x479 },
+- { 0x00000000, 0x00400000, 0x486 },
+- { 0x00000002, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x465 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x02e00000, 0x479 },
+- { 0x00000000, 0x00400000, 0x486 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46a },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x479 },
+- { 0x00000000, 0x00400000, 0x486 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x46f },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x479 },
+- { 0x00000000, 0x00400000, 0x486 },
+- { 0x00000005, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x474 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x06e00000, 0x479 },
+- { 0x00000000, 0x00400000, 0x486 },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x479 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x08e00000, 0x479 },
+- { 0x00000000, 0x00400000, 0x486 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x000 },
+- { 0x00000008, 0x00210a23, 0x000 },
+- { 0x00000000, 0x14c00000, 0x483 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x48c },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x00404c08, 0x44c },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000011, 0x40211220, 0x000 },
+- { 0x00000012, 0x40211620, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00210225, 0x000 },
+- { 0x00000000, 0x14e00000, 0x496 },
+- { 0x00040000, 0xc0494a20, 0x497 },
+- { 0xfffbffff, 0xc0284a20, 0x000 },
+- { 0x00000000, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4a3 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000c, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x49f },
+- { 0xa0000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x00204811, 0x000 },
+- { 0x0000216b, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000216c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x49d },
+- { 0x00000000, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4b6 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x681 },
+- { 0x00000000, 0x00400000, 0x4ba },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xc0600000, 0x67c },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4c1 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0404810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x67c },
+- { 0x00000000, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4c3 },
+- { 0x00002180, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000003, 0x00333e2f, 0x000 },
+- { 0x00000001, 0x00210221, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4f3 },
+- { 0x0000002c, 0x00200a2d, 0x000 },
+- { 0x00040000, 0x18e00c11, 0x4e2 },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xd8c04800, 0x4d6 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000002d, 0x0020122d, 0x000 },
+- { 0x00000000, 0x00290c83, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000011, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x49d },
+- { 0x0000002c, 0xc0203620, 0x000 },
+- { 0x0000002d, 0xc0403620, 0x000 },
+- { 0x0000000f, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4f8 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0xd9000000, 0x000 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xb5000000, 0x00204411, 0x000 },
+- { 0x00002000, 0x00204811, 0x000 },
+- { 0xb6000000, 0x00204411, 0x000 },
+- { 0x0000a000, 0x00204811, 0x000 },
+- { 0xb7000000, 0x00204411, 0x000 },
+- { 0x0000c000, 0x00204811, 0x000 },
+- { 0xb8000000, 0x00204411, 0x000 },
+- { 0x0000f8e0, 0x00204811, 0x000 },
+- { 0xb9000000, 0x00204411, 0x000 },
+- { 0x0000f880, 0x00204811, 0x000 },
+- { 0xba000000, 0x00204411, 0x000 },
+- { 0x0000e000, 0x00204811, 0x000 },
+- { 0xbb000000, 0x00204411, 0x000 },
+- { 0x0000f000, 0x00204811, 0x000 },
+- { 0xbc000000, 0x00204411, 0x000 },
+- { 0x0000f3fc, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00204811, 0x000 },
+- { 0x000000ff, 0x00280e30, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x50c },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x14c00000, 0x521 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000001c, 0x00203623, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x00000028, 0x00203623, 0x000 },
+- { 0x00000017, 0x00203623, 0x000 },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203623, 0x000 },
+- { 0x00000015, 0x00203623, 0x000 },
+- { 0x00000016, 0x00203623, 0x000 },
+- { 0xffffe000, 0x00200c11, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00200c11, 0x000 },
+- { 0x00000023, 0x00203623, 0x000 },
+- { 0x00000024, 0x00203623, 0x000 },
+- { 0xf1ffffff, 0x00283a2e, 0x000 },
+- { 0x0000001a, 0xc0220e20, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000002a, 0x40203620, 0x000 },
+- { 0x87000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x9d000000, 0x00204411, 0x000 },
+- { 0x0000001f, 0x40214a20, 0x000 },
+- { 0x96000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x0000001f, 0x00211624, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x0000001d, 0x00203623, 0x000 },
+- { 0x00000003, 0x00281e23, 0x000 },
+- { 0x00000008, 0x00222223, 0x000 },
+- { 0xfffff000, 0x00282228, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x0000001f, 0x00203628, 0x000 },
+- { 0x00000018, 0x00211e23, 0x000 },
+- { 0x00000020, 0x00203627, 0x000 },
+- { 0x00000002, 0x00221624, 0x000 },
+- { 0x00000000, 0x003014a8, 0x000 },
+- { 0x0000001e, 0x00203625, 0x000 },
+- { 0x00000003, 0x00211a24, 0x000 },
+- { 0x10000000, 0x00281a26, 0x000 },
+- { 0xefffffff, 0x00283a2e, 0x000 },
+- { 0x00000000, 0x004938ce, 0x66a },
+- { 0x00000001, 0x40280a20, 0x000 },
+- { 0x00000006, 0x40280e20, 0x000 },
+- { 0x00000300, 0xc0281220, 0x000 },
+- { 0x00000008, 0x00211224, 0x000 },
+- { 0x00000000, 0xc0201620, 0x000 },
+- { 0x00000000, 0xc0201a20, 0x000 },
+- { 0x00000000, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x559 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x67c },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00020000, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x561 },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x56f },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x561 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x67c },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x56f },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x565 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00000000, 0xc0400000, 0x56f },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x56d },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x681 },
+- { 0x00000000, 0x00401c10, 0x56f },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x571 },
+- { 0x00000000, 0x00600000, 0x5bc },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x582 },
+- { 0x0000a2b7, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x67c },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x0000a2c4, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x580 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000001, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x593 },
+- { 0x0000a2bb, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x67c },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x0000a2c5, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x591 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000002, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5a4 },
+- { 0x0000a2bf, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x67c },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x0000a2c6, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5a2 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x0000a2c3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x67c },
+- { 0x0000001a, 0x00212230, 0x000 },
+- { 0x00000006, 0x00222630, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x0000a2c7, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5b1 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0x01000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00400000, 0x5b7 },
+- { 0xa4000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5bc },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000002c, 0x00203621, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5c3 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000030, 0x00403621, 0x5d6 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x5d6 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004a092, 0x00604411, 0x67c },
+- { 0x00000031, 0x00203630, 0x000 },
+- { 0x0004a093, 0x00604411, 0x67c },
+- { 0x00000032, 0x00203630, 0x000 },
+- { 0x0004a2b6, 0x00604411, 0x67c },
+- { 0x00000033, 0x00203630, 0x000 },
+- { 0x0004a2ba, 0x00604411, 0x67c },
+- { 0x00000034, 0x00203630, 0x000 },
+- { 0x0004a2be, 0x00604411, 0x67c },
+- { 0x00000035, 0x00203630, 0x000 },
+- { 0x0004a2c2, 0x00604411, 0x67c },
+- { 0x00000036, 0x00203630, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x88000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000001, 0x002f0230, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x61f },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x61f },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00007e00, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x5f8 },
+- { 0x0000a092, 0x00204411, 0x000 },
+- { 0x00000031, 0x00204a2d, 0x000 },
+- { 0x0000a093, 0x00204411, 0x000 },
+- { 0x00000032, 0x00204a2d, 0x000 },
+- { 0x0000a2b6, 0x00204411, 0x000 },
+- { 0x00000033, 0x00204a2d, 0x000 },
+- { 0x0000a2ba, 0x00204411, 0x000 },
+- { 0x00000034, 0x00204a2d, 0x000 },
+- { 0x0000a2be, 0x00204411, 0x000 },
+- { 0x00000035, 0x00204a2d, 0x000 },
+- { 0x0000a2c2, 0x00204411, 0x000 },
+- { 0x00000036, 0x00204a2d, 0x000 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x000001ff, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x61e },
+- { 0x00000000, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x601 },
+- { 0x0004a003, 0x00604411, 0x67c },
+- { 0x0000a003, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x14c00000, 0x606 },
+- { 0x0004a010, 0x00604411, 0x67c },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00000001, 0x00210621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x61e },
+- { 0x0004a011, 0x00604411, 0x67c },
+- { 0x0000a011, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a012, 0x00604411, 0x67c },
+- { 0x0000a012, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a013, 0x00604411, 0x67c },
+- { 0x0000a013, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a014, 0x00604411, 0x67c },
+- { 0x0000a014, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a015, 0x00604411, 0x67c },
+- { 0x0000a015, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a016, 0x00604411, 0x67c },
+- { 0x0000a016, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x0004a017, 0x00604411, 0x67c },
+- { 0x0000a017, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x0000002c, 0x0080062d, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x630 },
+- { 0x00000030, 0x0020062d, 0x000 },
+- { 0x00000002, 0x00280621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x62e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x67c },
+- { 0x00001000, 0x00200811, 0x000 },
+- { 0x0000002b, 0x00203622, 0x000 },
+- { 0x00000000, 0x00600000, 0x634 },
+- { 0x00000000, 0x00600000, 0x5bc },
+- { 0x98000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0600000, 0x634 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000022, 0x00204811, 0x000 },
+- { 0x89000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00404811, 0x620 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404811, 0x620 },
+- { 0x00000000, 0x00600000, 0x64d },
+- { 0x0001a2a4, 0xc0204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36a },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x09800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x67c },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000004, 0x00404c11, 0x647 },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000004, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffffb, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffff7, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x36a },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x01800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004217f, 0x00604411, 0x67c },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x67b },
+- { 0x00000010, 0x00404c11, 0x661 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x38c00000, 0x000 },
+- { 0x0000001d, 0x00200a2d, 0x000 },
+- { 0x0000001e, 0x00200e2d, 0x000 },
+- { 0x0000001f, 0x0020122d, 0x000 },
+- { 0x00000020, 0x0020162d, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000004, 0x00301224, 0x000 },
+- { 0x00000000, 0x002f0064, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x67a },
+- { 0x00000003, 0x00281a22, 0x000 },
+- { 0x00000008, 0x00221222, 0x000 },
+- { 0xfffff000, 0x00281224, 0x000 },
+- { 0x00000000, 0x002910c4, 0x000 },
+- { 0x0000001f, 0x00403624, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x67c },
+- { 0x9f000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x67f },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x681 },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x684 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0xc0204411, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000024, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000022, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x014204f5, 0x05b30250, 0x000 },
+- { 0x01c30168, 0x043505b3, 0x000 },
+- { 0x02250209, 0x02500151, 0x000 },
+- { 0x02230245, 0x02a00241, 0x000 },
+- { 0x03cd05b3, 0x05b305b3, 0x000 },
+- { 0x063c063d, 0x031f05b3, 0x000 },
+- { 0x05b305b8, 0x03200340, 0x000 },
+- { 0x032a0282, 0x03420334, 0x000 },
+- { 0x05b305b3, 0x05b305b3, 0x000 },
+- { 0x05b30544, 0x05b305b3, 0x000 },
+- { 0x03b205b3, 0x04ae0344, 0x000 },
+- { 0x048d0443, 0x043305b3, 0x000 },
+- { 0x04c305b3, 0x043704d0, 0x000 },
+- { 0x044304fa, 0x03510371, 0x000 },
+- { 0x05b305b3, 0x05b305b3, 0x000 },
+- { 0x05b305b3, 0x05b305b3, 0x000 },
+- { 0x05b305b3, 0x063205ba, 0x000 },
+- { 0x05b305b3, 0x000705b3, 0x000 },
+- { 0x05b305b3, 0x05b305b3, 0x000 },
+- { 0x05b305b3, 0x05b305b3, 0x000 },
+- { 0x03ee03e3, 0x03fe03fc, 0x000 },
+- { 0x04040400, 0x04020406, 0x000 },
+- { 0x0412040e, 0x041a0416, 0x000 },
+- { 0x0422041e, 0x042a0426, 0x000 },
+- { 0x05b305b3, 0x042e05b3, 0x000 },
+- { 0x05b305b3, 0x05b305b3, 0x000 },
+- { 0x05b305b3, 0x05b305b3, 0x000 },
+- { 0x00020668, 0x06860006, 0x000 },
+-};
+-
+-static const u32 RV670_pfp_microcode[] = {
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0x7c038b,
+-0x8001b8,
+-0x7c038b,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xc41838,
+-0xca2400,
+-0xca2800,
+-0x9581a8,
+-0xc41c3a,
+-0xc3c000,
+-0xca0800,
+-0xca0c00,
+-0x7c744b,
+-0xc20005,
+-0x99c000,
+-0xc41c3a,
+-0x7c744c,
+-0xc0fff0,
+-0x042c04,
+-0x309002,
+-0x7d2500,
+-0x351402,
+-0x7d350b,
+-0x255403,
+-0x7cd580,
+-0x259c03,
+-0x95c004,
+-0xd5001b,
+-0x7eddc1,
+-0x7d9d80,
+-0xd6801b,
+-0xd5801b,
+-0xd4401e,
+-0xd5401e,
+-0xd6401e,
+-0xd6801e,
+-0xd4801e,
+-0xd4c01e,
+-0x9783d3,
+-0xd5c01e,
+-0xca0800,
+-0x80001a,
+-0xca0c00,
+-0xe4011e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xe4013e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca1800,
+-0xd4401e,
+-0xd5801e,
+-0x800053,
+-0xd40075,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xe2001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0xd48060,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xd48061,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xca0c00,
+-0xd4401e,
+-0xd48016,
+-0xd4c016,
+-0xd4801e,
+-0x8001b8,
+-0xd4c01e,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x948004,
+-0xca1400,
+-0xe420f3,
+-0xd42013,
+-0xd56065,
+-0xd4e01c,
+-0xd5201c,
+-0xd5601c,
+-0x800000,
+-0x062001,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9483f7,
+-0xca1400,
+-0xe420f3,
+-0x800079,
+-0xd42013,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9883ef,
+-0xca1400,
+-0xd40064,
+-0x80008d,
+-0x000000,
+-0xc41432,
+-0xc61843,
+-0xc4082f,
+-0x954005,
+-0xc40c30,
+-0xd4401e,
+-0x800000,
+-0xee001e,
+-0x9583f5,
+-0xc41031,
+-0xd44033,
+-0xd52065,
+-0xd4a01c,
+-0xd4e01c,
+-0xd5201c,
+-0xe4015e,
+-0xd4001e,
+-0x800000,
+-0x062001,
+-0xca1800,
+-0x0a2001,
+-0xd60076,
+-0xc40836,
+-0x988007,
+-0xc61045,
+-0x950110,
+-0xd4001f,
+-0xd46062,
+-0x800000,
+-0xd42062,
+-0xcc3835,
+-0xcc1433,
+-0x8401bb,
+-0xd40072,
+-0xd5401e,
+-0x800000,
+-0xee001e,
+-0xe2001a,
+-0x8401bb,
+-0xe2001a,
+-0xcc104b,
+-0xcc0447,
+-0x2c9401,
+-0x7d098b,
+-0x984005,
+-0x7d15cb,
+-0xd4001a,
+-0x8001b8,
+-0xd4006d,
+-0x344401,
+-0xcc0c48,
+-0x98403a,
+-0xcc2c4a,
+-0x958004,
+-0xcc0449,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0x282801,
+-0x8400f0,
+-0xcc1003,
+-0x98801b,
+-0x04380c,
+-0x8400f0,
+-0xcc1003,
+-0x988017,
+-0x043808,
+-0x8400f0,
+-0xcc1003,
+-0x988013,
+-0x043804,
+-0x8400f0,
+-0xcc1003,
+-0x988014,
+-0xcc104c,
+-0x9a8009,
+-0xcc144d,
+-0x9840dc,
+-0xd4006d,
+-0xcc1848,
+-0xd5001a,
+-0xd5401a,
+-0x8000c9,
+-0xd5801a,
+-0x96c0d5,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0x9ac003,
+-0xd4006d,
+-0xd4006e,
+-0x800000,
+-0xec007f,
+-0x9ac0cc,
+-0xd4006d,
+-0x8001b8,
+-0xd4006e,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0x7d9103,
+-0x7dd583,
+-0x7d190c,
+-0x35cc1f,
+-0x35701f,
+-0x7cf0cb,
+-0x7cd08b,
+-0x880000,
+-0x7e8e8b,
+-0x95c004,
+-0xd4006e,
+-0x8001b8,
+-0xd4001a,
+-0xd4c01a,
+-0xcc0803,
+-0xcc0c03,
+-0xcc1003,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0xcc2403,
+-0xcc2803,
+-0x35c41f,
+-0x36b01f,
+-0x7c704b,
+-0x34f01f,
+-0x7c704b,
+-0x35701f,
+-0x7c704b,
+-0x7d8881,
+-0x7dccc1,
+-0x7e5101,
+-0x7e9541,
+-0x7c9082,
+-0x7cd4c2,
+-0x7c848b,
+-0x9ac003,
+-0x7c8c8b,
+-0x2c8801,
+-0x98809e,
+-0xd4006d,
+-0x98409c,
+-0xd4006e,
+-0xcc084c,
+-0xcc0c4d,
+-0xcc1048,
+-0xd4801a,
+-0xd4c01a,
+-0x800101,
+-0xd5001a,
+-0xcc0832,
+-0xd40032,
+-0x9482d9,
+-0xca0c00,
+-0xd4401e,
+-0x800000,
+-0xd4001e,
+-0xe4011e,
+-0xd4001e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd4401e,
+-0xca1400,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xd5401e,
+-0xd54034,
+-0x800000,
+-0xee001e,
+-0x280404,
+-0xe2001a,
+-0xe2001a,
+-0xd4401a,
+-0xca3800,
+-0xcc0803,
+-0xcc0c03,
+-0xcc0c03,
+-0xcc0c03,
+-0x9882bd,
+-0x000000,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0400,
+-0xc2ff00,
+-0xcc0834,
+-0xc13fff,
+-0x7c74cb,
+-0x7cc90b,
+-0x7d010f,
+-0x9902b0,
+-0x7c738b,
+-0x8401bb,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0800,
+-0x281900,
+-0x7d898b,
+-0x958014,
+-0x281404,
+-0xca0c00,
+-0xca1000,
+-0xca1c00,
+-0xca2400,
+-0xe2001f,
+-0xd4c01a,
+-0xd5001a,
+-0xd5401a,
+-0xcc1803,
+-0xcc2c03,
+-0xcc2c03,
+-0xcc2c03,
+-0x7da58b,
+-0x7d9c47,
+-0x984297,
+-0x000000,
+-0x800161,
+-0xd4c01a,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c06,
+-0x0ccc06,
+-0x98c006,
+-0xcc104e,
+-0x990004,
+-0xd40073,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xca0800,
+-0xca0c00,
+-0x34d018,
+-0x251001,
+-0x950021,
+-0xc17fff,
+-0xca1000,
+-0xca1400,
+-0xca1800,
+-0xd4801d,
+-0xd4c01d,
+-0x7db18b,
+-0xc14202,
+-0xc2c001,
+-0xd5801d,
+-0x34dc0e,
+-0x7d5d4c,
+-0x7f734c,
+-0xd7401e,
+-0xd5001e,
+-0xd5401e,
+-0xc14200,
+-0xc2c000,
+-0x099c01,
+-0x31dc10,
+-0x7f5f4c,
+-0x7f734c,
+-0x042802,
+-0x7d8380,
+-0xd5a86f,
+-0xd58066,
+-0xd7401e,
+-0xec005e,
+-0xc82402,
+-0xc82402,
+-0x8001b8,
+-0xd60076,
+-0xd4401e,
+-0xd4801e,
+-0xd4c01e,
+-0x800000,
+-0xee001e,
+-0x800000,
+-0xee001f,
+-0xd4001f,
+-0x800000,
+-0xd4001f,
+-0xd4001f,
+-0x880000,
+-0xd4001f,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x010171,
+-0x020178,
+-0x03008f,
+-0x04007f,
+-0x050003,
+-0x06003f,
+-0x070032,
+-0x08012c,
+-0x090046,
+-0x0a0036,
+-0x1001b6,
+-0x1700a2,
+-0x22013a,
+-0x230149,
+-0x2000b4,
+-0x240125,
+-0x27004d,
+-0x28006a,
+-0x2a0060,
+-0x2b0052,
+-0x2f0065,
+-0x320087,
+-0x34017f,
+-0x3c0156,
+-0x3f0072,
+-0x41018c,
+-0x44012e,
+-0x550173,
+-0x56017a,
+-0x60000b,
+-0x610034,
+-0x620038,
+-0x630038,
+-0x640038,
+-0x650038,
+-0x660038,
+-0x670038,
+-0x68003a,
+-0x690041,
+-0x6a0048,
+-0x6b0048,
+-0x6c0048,
+-0x6d0048,
+-0x6e0048,
+-0x6f0048,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-};
+-
+-static const u32 RS780_cp_microcode[][3] = {
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0000ffff, 0x00284621, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000000, 0x00e00000, 0x000 },
+- { 0x00010000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x622 },
+- { 0x00000000, 0x00600000, 0x5d1 },
+- { 0x00000000, 0x00600000, 0x5de },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000f00, 0x00281622, 0x000 },
+- { 0x00000008, 0x00211625, 0x000 },
+- { 0x00000018, 0x00203625, 0x000 },
+- { 0x8d000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x002f0225, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x018 },
+- { 0x00412000, 0x00404811, 0x019 },
+- { 0x00422000, 0x00204811, 0x000 },
+- { 0x8e000000, 0x00204411, 0x000 },
+- { 0x00000028, 0x00204a2d, 0x000 },
+- { 0x90000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x0000000c, 0x00211622, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000019, 0x00211a22, 0x000 },
+- { 0x00000004, 0x00281a26, 0x000 },
+- { 0x00000000, 0x002914c5, 0x000 },
+- { 0x00000019, 0x00203625, 0x000 },
+- { 0x00000000, 0x003a1402, 0x000 },
+- { 0x00000016, 0x00211625, 0x000 },
+- { 0x00000003, 0x00281625, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0xfffffffc, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002914a3, 0x000 },
+- { 0x00000017, 0x00203625, 0x000 },
+- { 0x00008000, 0x00280e22, 0x000 },
+- { 0x00000007, 0x00220e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x20000000, 0x00280e22, 0x000 },
+- { 0x00000006, 0x00210e23, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x00000000, 0x00220222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x038 },
+- { 0x00000000, 0x2ee00000, 0x035 },
+- { 0x00000000, 0x2ce00000, 0x037 },
+- { 0x00000000, 0x00400e2d, 0x039 },
+- { 0x00000008, 0x00200e2d, 0x000 },
+- { 0x00000009, 0x0040122d, 0x046 },
+- { 0x00000001, 0x00400e2d, 0x039 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x03e },
+- { 0x00000008, 0x00401c11, 0x041 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x0000000f, 0x00281e27, 0x000 },
+- { 0x00000003, 0x00221e27, 0x000 },
+- { 0x7fc00000, 0x00281a23, 0x000 },
+- { 0x00000014, 0x00211a26, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000008, 0x00221a26, 0x000 },
+- { 0x00000000, 0x00290cc7, 0x000 },
+- { 0x00000027, 0x00203624, 0x000 },
+- { 0x00007f00, 0x00281221, 0x000 },
+- { 0x00001400, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x04b },
+- { 0x00000001, 0x00290e23, 0x000 },
+- { 0x0000000e, 0x00203623, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfff80000, 0x00294a23, 0x000 },
+- { 0x00000000, 0x003a2c02, 0x000 },
+- { 0x00000002, 0x00220e2b, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x0000000f, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00204a2d, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000029, 0x00200e2d, 0x000 },
+- { 0x060a0200, 0x00294a23, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14e00000, 0x061 },
+- { 0x00000000, 0x2ee00000, 0x05f },
+- { 0x00000000, 0x2ce00000, 0x05e },
+- { 0x00000000, 0x00400e2d, 0x062 },
+- { 0x00000001, 0x00400e2d, 0x062 },
+- { 0x0000000a, 0x00200e2d, 0x000 },
+- { 0x0000000b, 0x0040122d, 0x06a },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x003ffffc, 0x00281223, 0x000 },
+- { 0x00000002, 0x00221224, 0x000 },
+- { 0x7fc00000, 0x00281623, 0x000 },
+- { 0x00000014, 0x00211625, 0x000 },
+- { 0x00000001, 0x00331625, 0x000 },
+- { 0x80000000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00290ca3, 0x000 },
+- { 0x3ffffc00, 0x00290e23, 0x000 },
+- { 0x0000001f, 0x00211e23, 0x000 },
+- { 0x00000000, 0x14e00000, 0x06d },
+- { 0x00000100, 0x00401c11, 0x070 },
+- { 0x0000000d, 0x00201e2d, 0x000 },
+- { 0x000000f0, 0x00281e27, 0x000 },
+- { 0x00000004, 0x00221e27, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0xfffff0ff, 0x00281a30, 0x000 },
+- { 0x0000a028, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948e6, 0x000 },
+- { 0x0000a018, 0x00204411, 0x000 },
+- { 0x3fffffff, 0x00284a23, 0x000 },
+- { 0x0000a010, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000030, 0x0020162d, 0x000 },
+- { 0x00000002, 0x00291625, 0x000 },
+- { 0x00000030, 0x00203625, 0x000 },
+- { 0x00000025, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a3, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x083 },
+- { 0x00000026, 0x0020162d, 0x000 },
+- { 0x00000000, 0x002f00a4, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x084 },
+- { 0x00000000, 0x00400000, 0x08a },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203624, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x08a },
+- { 0x00000000, 0x00600000, 0x5ff },
+- { 0x00000000, 0x00600000, 0x5f3 },
+- { 0x00000002, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x08d },
+- { 0x00000012, 0xc0403620, 0x093 },
+- { 0x00000000, 0x2ee00000, 0x091 },
+- { 0x00000000, 0x2ce00000, 0x090 },
+- { 0x00000002, 0x00400e2d, 0x092 },
+- { 0x00000003, 0x00400e2d, 0x092 },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000012, 0x00203623, 0x000 },
+- { 0x00000003, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x098 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x0a0 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x2ee00000, 0x09e },
+- { 0x00000000, 0x2ce00000, 0x09d },
+- { 0x00000002, 0x00400e2d, 0x09f },
+- { 0x00000003, 0x00400e2d, 0x09f },
+- { 0x0000000c, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x003f0000, 0x00280e23, 0x000 },
+- { 0x00000010, 0x00210e23, 0x000 },
+- { 0x00000011, 0x00203623, 0x000 },
+- { 0x0000001e, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0a7 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x0000001f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0aa },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000008, 0x00210e2b, 0x000 },
+- { 0x0000007f, 0x00280e23, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0e1 },
+- { 0x00000000, 0x27000000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x0b3 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000000c, 0x00221e30, 0x000 },
+- { 0x99800000, 0x00204411, 0x000 },
+- { 0x00000004, 0x0020122d, 0x000 },
+- { 0x00000008, 0x00221224, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00291ce4, 0x000 },
+- { 0x00000000, 0x00604807, 0x12f },
+- { 0x9b000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x9c000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x0033146f, 0x000 },
+- { 0x00000001, 0x00333e23, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0x00203c05, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e007, 0x00204411, 0x000 },
+- { 0x0000000f, 0x0021022b, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0cb },
+- { 0x00f8ff08, 0x00204811, 0x000 },
+- { 0x98000000, 0x00404811, 0x0dc },
+- { 0x000000f0, 0x00280e22, 0x000 },
+- { 0x000000a0, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x0da },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d5 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0d4 },
+- { 0x00003f00, 0x00400c11, 0x0d6 },
+- { 0x00001f00, 0x00400c11, 0x0d6 },
+- { 0x00000f00, 0x00200c11, 0x000 },
+- { 0x00380009, 0x00294a23, 0x000 },
+- { 0x3f000000, 0x00280e2b, 0x000 },
+- { 0x00000002, 0x00220e23, 0x000 },
+- { 0x00000007, 0x00494a23, 0x0dc },
+- { 0x00380f09, 0x00204811, 0x000 },
+- { 0x68000007, 0x00204811, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000a202, 0x00204411, 0x000 },
+- { 0x00ff0000, 0x00280e22, 0x000 },
+- { 0x00000080, 0x00294a23, 0x000 },
+- { 0x00000027, 0x00200e2d, 0x000 },
+- { 0x00000026, 0x0020122d, 0x000 },
+- { 0x00000000, 0x002f0083, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x0ea },
+- { 0x00000000, 0x00600000, 0x5f9 },
+- { 0x00000000, 0x00400000, 0x0eb },
+- { 0x00000000, 0x00600000, 0x5fc },
+- { 0x00000007, 0x0020222d, 0x000 },
+- { 0x00000005, 0x00220e22, 0x000 },
+- { 0x00100000, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000000, 0x003a0c02, 0x000 },
+- { 0x000000ef, 0x00280e23, 0x000 },
+- { 0x00000000, 0x00292068, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000003, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x0f8 },
+- { 0x0000000b, 0x00210228, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0f8 },
+- { 0x00000400, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000001c, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x0fd },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000001e, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x10b },
+- { 0x0000a30f, 0x00204411, 0x000 },
+- { 0x00000011, 0x00200e2d, 0x000 },
+- { 0x00000001, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x104 },
+- { 0xffffffff, 0x00404811, 0x10b },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x107 },
+- { 0x0000ffff, 0x00404811, 0x10b },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x10a },
+- { 0x000000ff, 0x00404811, 0x10b },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0002c400, 0x00204411, 0x000 },
+- { 0x0000001f, 0x00210e22, 0x000 },
+- { 0x00000000, 0x14c00000, 0x112 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000018, 0x40224a20, 0x000 },
+- { 0x00000010, 0xc0424a20, 0x114 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x00000013, 0x00203623, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000000a, 0x00201011, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x11b },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00531224, 0x117 },
+- { 0xffbfffff, 0x00283a2e, 0x000 },
+- { 0x0000001b, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x12e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000d, 0x00204811, 0x000 },
+- { 0x00000018, 0x00220e30, 0x000 },
+- { 0xfc000000, 0x00280e23, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x00000000, 0x00201010, 0x000 },
+- { 0x0000e00e, 0x00204411, 0x000 },
+- { 0x07f8ff08, 0x00204811, 0x000 },
+- { 0x00000000, 0x00294a23, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a24, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00800000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204806, 0x000 },
+- { 0x00000008, 0x00214a27, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x622 },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x621 },
+- { 0x00000004, 0x00404c11, 0x135 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000001c, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x622 },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x13c },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40280620, 0x000 },
+- { 0x00000010, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x00341461, 0x000 },
+- { 0x00000000, 0x00741882, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x147 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x160 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0681a20, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x158 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000001, 0x00300a2f, 0x000 },
+- { 0x00000001, 0x00210a22, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600000, 0x18f },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00202c08, 0x000 },
+- { 0x00000000, 0x00202411, 0x000 },
+- { 0x00000000, 0x00202811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00221e29, 0x000 },
+- { 0x00000000, 0x007048eb, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000001, 0x40330620, 0x000 },
+- { 0x00000000, 0xc0302409, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x181 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x186 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x186 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000001, 0x00530621, 0x182 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0604800, 0x197 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000011, 0x0020062d, 0x000 },
+- { 0x00000000, 0x0078042a, 0x2fb },
+- { 0x00000000, 0x00202809, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x174 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x194 },
+- { 0x00000015, 0xc0203620, 0x000 },
+- { 0x00000016, 0xc0203620, 0x000 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x46000000, 0x00600811, 0x1b2 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x19b },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00804811, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000ffff, 0x40281620, 0x000 },
+- { 0x00000010, 0xc0811a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x00000008, 0x00221e30, 0x000 },
+- { 0x00000029, 0x00201a2d, 0x000 },
+- { 0x0000e000, 0x00204411, 0x000 },
+- { 0xfffbff09, 0x00204811, 0x000 },
+- { 0x0000000f, 0x0020222d, 0x000 },
+- { 0x00001fff, 0x00294a28, 0x000 },
+- { 0x00000006, 0x0020222d, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000100, 0x00201811, 0x000 },
+- { 0x00000008, 0x00621e28, 0x12f },
+- { 0x00000008, 0x00822228, 0x000 },
+- { 0x0002c000, 0x00204411, 0x000 },
+- { 0x00000015, 0x00600e2d, 0x1bd },
+- { 0x00000016, 0x00600e2d, 0x1bd },
+- { 0x0000c008, 0x00204411, 0x000 },
+- { 0x00000017, 0x00200e2d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x1b9 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x39000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00804802, 0x000 },
+- { 0x00000018, 0x00202e2d, 0x000 },
+- { 0x00000000, 0x003b0d63, 0x000 },
+- { 0x00000008, 0x00224a23, 0x000 },
+- { 0x00000010, 0x00224a23, 0x000 },
+- { 0x00000018, 0x00224a23, 0x000 },
+- { 0x00000000, 0x00804803, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00000007, 0x0021062f, 0x000 },
+- { 0x00000013, 0x00200a2d, 0x000 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000ffff, 0x40282220, 0x000 },
+- { 0x0000000f, 0x00262228, 0x000 },
+- { 0x00000010, 0x40212620, 0x000 },
+- { 0x0000000f, 0x00262629, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1e0 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000081, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000080, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1dc },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1d8 },
+- { 0x00000001, 0x00202c11, 0x000 },
+- { 0x0000001f, 0x00280a22, 0x000 },
+- { 0x0000001f, 0x00282a2a, 0x000 },
+- { 0x00000001, 0x00530621, 0x1d1 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000002, 0x00304a2f, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000001, 0x00301e2f, 0x000 },
+- { 0x00000000, 0x002f0227, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00600000, 0x1e9 },
+- { 0x00000001, 0x00531e27, 0x1e5 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x0000000f, 0x00260e23, 0x000 },
+- { 0x00000010, 0xc0211220, 0x000 },
+- { 0x0000000f, 0x00261224, 0x000 },
+- { 0x00000000, 0x00201411, 0x000 },
+- { 0x00000000, 0x00601811, 0x2bb },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022b, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x1f8 },
+- { 0x00000010, 0x00221628, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a29, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x0020480a, 0x000 },
+- { 0x00000000, 0x00202c11, 0x000 },
+- { 0x00000010, 0x00221623, 0x000 },
+- { 0xffff0000, 0x00281625, 0x000 },
+- { 0x0000ffff, 0x00281a24, 0x000 },
+- { 0x00000000, 0x002948c5, 0x000 },
+- { 0x00000000, 0x00731503, 0x205 },
+- { 0x00000000, 0x00201805, 0x000 },
+- { 0x00000000, 0x00731524, 0x205 },
+- { 0x00000000, 0x002d14c5, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00202802, 0x000 },
+- { 0x00000000, 0x00202003, 0x000 },
+- { 0x00000000, 0x00802404, 0x000 },
+- { 0x0000000f, 0x00210225, 0x000 },
+- { 0x00000000, 0x14c00000, 0x621 },
+- { 0x00000000, 0x002b1405, 0x000 },
+- { 0x00000001, 0x00901625, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001a, 0x00294a22, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a21, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000ffff, 0x40281220, 0x000 },
+- { 0x00000010, 0xc0211a20, 0x000 },
+- { 0x0000ffff, 0x40280e20, 0x000 },
+- { 0x00000010, 0xc0211620, 0x000 },
+- { 0x00000000, 0x00741465, 0x2bb },
+- { 0x0001a1fd, 0x00604411, 0x2e0 },
+- { 0x00000001, 0x00330621, 0x000 },
+- { 0x00000000, 0x002f0221, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x219 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x212 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x5de },
+- { 0x00000000, 0x0040040f, 0x213 },
+- { 0x00000000, 0x00600000, 0x5d1 },
+- { 0x00000000, 0x00600000, 0x5de },
+- { 0x00000210, 0x00600411, 0x315 },
+- { 0x00000000, 0x00600000, 0x1a0 },
+- { 0x00000000, 0x00600000, 0x19c },
+- { 0x00000000, 0x00600000, 0x2bb },
+- { 0x00000000, 0x00600000, 0x2a3 },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204808, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x232 },
+- { 0x00000000, 0x00600000, 0x13a },
+- { 0x00000000, 0x00400000, 0x236 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x236 },
+- { 0x00000000, 0xc0404800, 0x233 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x00600411, 0x2fb },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000000, 0x00600000, 0x5d1 },
+- { 0x0000a00c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000018, 0x40210a20, 0x000 },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x24c },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x00080101, 0x00292228, 0x000 },
+- { 0x00000014, 0x00203628, 0x000 },
+- { 0x0000a30c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x251 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000010, 0x00600411, 0x315 },
+- { 0x3f800000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00000000, 0x00600000, 0x27c },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000001, 0x00211e27, 0x000 },
+- { 0x00000000, 0x14e00000, 0x26a },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x0000ffff, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00341c27, 0x000 },
+- { 0x00000000, 0x12c00000, 0x25f },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e5, 0x000 },
+- { 0x00000000, 0x08c00000, 0x262 },
+- { 0x00000000, 0x00201407, 0x000 },
+- { 0x00000012, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00211e27, 0x000 },
+- { 0x00000000, 0x00341c47, 0x000 },
+- { 0x00000000, 0x12c00000, 0x267 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x08c00000, 0x26a },
+- { 0x00000000, 0x00201807, 0x000 },
+- { 0x00000000, 0x00600000, 0x2c1 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x00000000, 0x00342023, 0x000 },
+- { 0x00000000, 0x12c00000, 0x272 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x271 },
+- { 0x00000016, 0x00404811, 0x276 },
+- { 0x00000018, 0x00404811, 0x276 },
+- { 0x00000000, 0x00342044, 0x000 },
+- { 0x00000000, 0x12c00000, 0x275 },
+- { 0x00000017, 0x00404811, 0x276 },
+- { 0x00000019, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0x00604411, 0x2e9 },
+- { 0x00003fff, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x256 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x00000010, 0x40210620, 0x000 },
+- { 0x0000ffff, 0xc0280a20, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x00000010, 0x40211620, 0x000 },
+- { 0x0000ffff, 0xc0881a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00042004, 0x00604411, 0x622 },
+- { 0x00000000, 0x00600000, 0x5d1 },
+- { 0x00000000, 0xc0600000, 0x2a3 },
+- { 0x00000005, 0x00200a2d, 0x000 },
+- { 0x00000008, 0x00220a22, 0x000 },
+- { 0x0000002b, 0x00201a2d, 0x000 },
+- { 0x0000001c, 0x00201e2d, 0x000 },
+- { 0x00007000, 0x00281e27, 0x000 },
+- { 0x00000000, 0x00311ce6, 0x000 },
+- { 0x0000002a, 0x00201a2d, 0x000 },
+- { 0x0000000c, 0x00221a26, 0x000 },
+- { 0x00000000, 0x002f00e6, 0x000 },
+- { 0x00000000, 0x06e00000, 0x292 },
+- { 0x00000000, 0x00201c11, 0x000 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000010, 0x00201811, 0x000 },
+- { 0x00000000, 0x00691ce2, 0x12f },
+- { 0x93800000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x95000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f022f, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x29d },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x92000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000001c, 0x00403627, 0x000 },
+- { 0x0000000c, 0xc0220a20, 0x000 },
+- { 0x00000029, 0x00203622, 0x000 },
+- { 0x00000028, 0xc0403620, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000009, 0x00204811, 0x000 },
+- { 0xa1000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00804811, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce3, 0x000 },
+- { 0x00000021, 0x00203627, 0x000 },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002c1ce4, 0x000 },
+- { 0x00000022, 0x00203627, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a3, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x00000000, 0x002d1d07, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203624, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000023, 0x00203627, 0x000 },
+- { 0x00000000, 0x00311cc4, 0x000 },
+- { 0x00000024, 0x00803627, 0x000 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14c00000, 0x2dc },
+- { 0x00000000, 0x00400000, 0x2d9 },
+- { 0x0000001a, 0x00203627, 0x000 },
+- { 0x0000001b, 0x00203628, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000002, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2d9 },
+- { 0x00000003, 0x00210227, 0x000 },
+- { 0x00000000, 0x14e00000, 0x2dc },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e1, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120a1, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000024, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x002e00e2, 0x000 },
+- { 0x00000000, 0x02c00000, 0x2dc },
+- { 0x00000022, 0x00201e2d, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x00000000, 0x002e00e8, 0x000 },
+- { 0x00000000, 0x06c00000, 0x2dc },
+- { 0x00000000, 0x00600000, 0x5ff },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2b5 },
+- { 0x00000000, 0x00600000, 0x5f6 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x00000000, 0x00600000, 0x2a7 },
+- { 0x00000000, 0x00400000, 0x2de },
+- { 0x0000001a, 0x00201e2d, 0x000 },
+- { 0x0000001b, 0x0080222d, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000000, 0x00311ca1, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294847, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e21, 0x000 },
+- { 0x00000000, 0x003120c2, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00311ca3, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294887, 0x000 },
+- { 0x00000001, 0x00220a21, 0x000 },
+- { 0x00000000, 0x003008a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000010, 0x00221e23, 0x000 },
+- { 0x00000000, 0x003120c4, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x003808c5, 0x000 },
+- { 0x00000000, 0x00300841, 0x000 },
+- { 0x00000001, 0x00220a22, 0x000 },
+- { 0x00000000, 0x003308a2, 0x000 },
+- { 0x00000010, 0x00221e22, 0x000 },
+- { 0x00000010, 0x00212222, 0x000 },
+- { 0x00000000, 0x00894907, 0x000 },
+- { 0x00000017, 0x0020222d, 0x000 },
+- { 0x00000000, 0x14c00000, 0x318 },
+- { 0xffffffef, 0x00280621, 0x000 },
+- { 0x00000014, 0x0020222d, 0x000 },
+- { 0x0000f8e0, 0x00204411, 0x000 },
+- { 0x00000000, 0x00294901, 0x000 },
+- { 0x00000000, 0x00894901, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x060a0200, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0204811, 0x000 },
+- { 0x8a000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00002257, 0x00204411, 0x000 },
+- { 0x00000003, 0xc0484a20, 0x000 },
+- { 0x0000225d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0x00600000, 0x5de },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00384a22, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0001a1fd, 0x00204411, 0x000 },
+- { 0x00000000, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x00000001, 0x40304a20, 0x000 },
+- { 0x00000002, 0xc0304a20, 0x000 },
+- { 0x00000001, 0x00530a22, 0x355 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x622 },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x35e },
+- { 0x00000014, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x36c },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00604802, 0x374 },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x370 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x367 },
+- { 0x00000028, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5ba },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x367 },
+- { 0x0000002c, 0x00203626, 0x000 },
+- { 0x00000049, 0x00201811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000001, 0x00331a26, 0x000 },
+- { 0x00000000, 0x002f0226, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x376 },
+- { 0x0000002c, 0x00801a2d, 0x000 },
+- { 0x0000003f, 0xc0280a20, 0x000 },
+- { 0x00000015, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x38c },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b7 },
+- { 0x00000016, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3b9 },
+- { 0x00000020, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3a2 },
+- { 0x0000000f, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3ae },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x3ae },
+- { 0x0000001e, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x396 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x08000000, 0x00290a22, 0x000 },
+- { 0x00000003, 0x40210e20, 0x000 },
+- { 0x0000000c, 0xc0211220, 0x000 },
+- { 0x00080000, 0x00281224, 0x000 },
+- { 0x00000014, 0xc0221620, 0x000 },
+- { 0x00000000, 0x002914a4, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x002948a2, 0x000 },
+- { 0x0000a1fe, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000016, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x622 },
+- { 0x00000015, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x398 },
+- { 0x0000210e, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000017, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x622 },
+- { 0x00000003, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3a4 },
+- { 0x00002108, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404802, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x80000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000010, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3b4 },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000006, 0x00404811, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x374 },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x0000001d, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3ce },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x00000018, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x622 },
+- { 0x00000011, 0x00210230, 0x000 },
+- { 0x00000000, 0x14e00000, 0x3c2 },
+- { 0x00002100, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0xbabecafe, 0x00204811, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000004, 0x00404811, 0x000 },
+- { 0x00002170, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000a, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3d3 },
+- { 0x8c000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00003fff, 0x40280a20, 0x000 },
+- { 0x80000000, 0x40280e20, 0x000 },
+- { 0x40000000, 0xc0281220, 0x000 },
+- { 0x00040000, 0x00694622, 0x622 },
+- { 0x00000000, 0x00201410, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e1 },
+- { 0x00000000, 0xc0401800, 0x3e4 },
+- { 0x00003fff, 0xc0281a20, 0x000 },
+- { 0x00040000, 0x00694626, 0x622 },
+- { 0x00000000, 0x00201810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x3e7 },
+- { 0x00000000, 0xc0401c00, 0x3ea },
+- { 0x00003fff, 0xc0281e20, 0x000 },
+- { 0x00040000, 0x00694627, 0x622 },
+- { 0x00000000, 0x00201c10, 0x000 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0x002820c5, 0x000 },
+- { 0x00000000, 0x004948e8, 0x000 },
+- { 0xa5800000, 0x00200811, 0x000 },
+- { 0x00002000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x40204800, 0x000 },
+- { 0x0000001f, 0xc0210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x3f7 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00008000, 0x00204811, 0x000 },
+- { 0x0000ffff, 0xc0481220, 0x3ff },
+- { 0xa7800000, 0x00200811, 0x000 },
+- { 0x0000a000, 0x00200c11, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0x00204402, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000ffff, 0xc0281220, 0x000 },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00304883, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x83000000, 0x00604411, 0x412 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xa9800000, 0x00200811, 0x000 },
+- { 0x0000c000, 0x00400c11, 0x3fa },
+- { 0xab800000, 0x00200811, 0x000 },
+- { 0x0000f8e0, 0x00400c11, 0x3fa },
+- { 0xad800000, 0x00200811, 0x000 },
+- { 0x0000f880, 0x00400c11, 0x3fa },
+- { 0xb3800000, 0x00200811, 0x000 },
+- { 0x0000f3fc, 0x00400c11, 0x3fa },
+- { 0xaf800000, 0x00200811, 0x000 },
+- { 0x0000e000, 0x00400c11, 0x3fa },
+- { 0xb1800000, 0x00200811, 0x000 },
+- { 0x0000f000, 0x00400c11, 0x3fa },
+- { 0x83000000, 0x00204411, 0x000 },
+- { 0x00002148, 0x00204811, 0x000 },
+- { 0x84000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x1d000000, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x01182000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0218a000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0318c000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0418f8e0, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0518f880, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0618e000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0718f000, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x0818f3fc, 0xc0304620, 0x000 },
+- { 0x00000000, 0xd9004800, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x00000033, 0xc0300a20, 0x000 },
+- { 0x00000000, 0xc0403440, 0x000 },
+- { 0x00000030, 0x00200a2d, 0x000 },
+- { 0x00000000, 0xc0290c40, 0x000 },
+- { 0x00000030, 0x00203623, 0x000 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x00a0000a, 0x000 },
+- { 0x86000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x85000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0x00404801, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x00000018, 0x40210220, 0x000 },
+- { 0x00000000, 0x14c00000, 0x447 },
+- { 0x00800000, 0xc0494a20, 0x448 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x06e00000, 0x450 },
+- { 0x00000004, 0x00200811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x622 },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00404c02, 0x450 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x00000000, 0xc0201400, 0x000 },
+- { 0x00000000, 0xc0201800, 0x000 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x461 },
+- { 0x00000000, 0xc0202000, 0x000 },
+- { 0x00000004, 0x002f0228, 0x000 },
+- { 0x00000000, 0x06e00000, 0x461 },
+- { 0x00000004, 0x00202011, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x00000010, 0x00280a23, 0x000 },
+- { 0x00000010, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x469 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0x00694624, 0x622 },
+- { 0x00000000, 0x00400000, 0x46e },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00604805, 0x627 },
+- { 0x00000000, 0x002824f0, 0x000 },
+- { 0x00000007, 0x00280a23, 0x000 },
+- { 0x00000001, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x475 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x04e00000, 0x48e },
+- { 0x00000000, 0x00400000, 0x49b },
+- { 0x00000002, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x47a },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x02e00000, 0x48e },
+- { 0x00000000, 0x00400000, 0x49b },
+- { 0x00000003, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x47f },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x48e },
+- { 0x00000000, 0x00400000, 0x49b },
+- { 0x00000004, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x484 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x48e },
+- { 0x00000000, 0x00400000, 0x49b },
+- { 0x00000005, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x489 },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x06e00000, 0x48e },
+- { 0x00000000, 0x00400000, 0x49b },
+- { 0x00000006, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x48e },
+- { 0x00000000, 0x002f00c9, 0x000 },
+- { 0x00000000, 0x08e00000, 0x48e },
+- { 0x00000000, 0x00400000, 0x49b },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x000 },
+- { 0x00000008, 0x00210a23, 0x000 },
+- { 0x00000000, 0x14c00000, 0x498 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00007f00, 0x00280a21, 0x000 },
+- { 0x00004500, 0x002f0222, 0x000 },
+- { 0x00000000, 0x0ae00000, 0x4a1 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x00404c08, 0x461 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000010, 0x40210e20, 0x000 },
+- { 0x00000011, 0x40211220, 0x000 },
+- { 0x00000012, 0x40211620, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00210225, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4ab },
+- { 0x00040000, 0xc0494a20, 0x4ac },
+- { 0xfffbffff, 0xc0284a20, 0x000 },
+- { 0x00000000, 0x00210223, 0x000 },
+- { 0x00000000, 0x14e00000, 0x4b8 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x0000000c, 0x00204811, 0x000 },
+- { 0x00000000, 0x00200010, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4b4 },
+- { 0xa0000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000004, 0x00204811, 0x000 },
+- { 0x0000216b, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000216c, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204810, 0x000 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0ce00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4b2 },
+- { 0x00000000, 0xc0210a20, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4cb },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x627 },
+- { 0x00000000, 0x00400000, 0x4cf },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00040000, 0xc0294620, 0x000 },
+- { 0x00000000, 0xc0600000, 0x622 },
+- { 0x00000001, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4d6 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00404811, 0x000 },
+- { 0x00000000, 0xc0204400, 0x000 },
+- { 0x00000000, 0xc0404810, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x000021f8, 0x00204411, 0x000 },
+- { 0x0000000e, 0x00204811, 0x000 },
+- { 0x000421f9, 0x00604411, 0x622 },
+- { 0x00000000, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x4d8 },
+- { 0x00002180, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000003, 0x00333e2f, 0x000 },
+- { 0x00000001, 0x00210221, 0x000 },
+- { 0x00000000, 0x14e00000, 0x508 },
+- { 0x0000002c, 0x00200a2d, 0x000 },
+- { 0x00040000, 0x18e00c11, 0x4f7 },
+- { 0x00000001, 0x00333e2f, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xd8c04800, 0x4eb },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000002d, 0x0020122d, 0x000 },
+- { 0x00000000, 0x00290c83, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204802, 0x000 },
+- { 0x00000000, 0x00204803, 0x000 },
+- { 0x00000008, 0x00300a22, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000011, 0x00210224, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000000, 0x00400000, 0x4b2 },
+- { 0x0000002c, 0xc0203620, 0x000 },
+- { 0x0000002d, 0xc0403620, 0x000 },
+- { 0x0000000f, 0x00210221, 0x000 },
+- { 0x00000000, 0x14c00000, 0x50d },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00000000, 0xd9000000, 0x000 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0xb5000000, 0x00204411, 0x000 },
+- { 0x00002000, 0x00204811, 0x000 },
+- { 0xb6000000, 0x00204411, 0x000 },
+- { 0x0000a000, 0x00204811, 0x000 },
+- { 0xb7000000, 0x00204411, 0x000 },
+- { 0x0000c000, 0x00204811, 0x000 },
+- { 0xb8000000, 0x00204411, 0x000 },
+- { 0x0000f8e0, 0x00204811, 0x000 },
+- { 0xb9000000, 0x00204411, 0x000 },
+- { 0x0000f880, 0x00204811, 0x000 },
+- { 0xba000000, 0x00204411, 0x000 },
+- { 0x0000e000, 0x00204811, 0x000 },
+- { 0xbb000000, 0x00204411, 0x000 },
+- { 0x0000f000, 0x00204811, 0x000 },
+- { 0xbc000000, 0x00204411, 0x000 },
+- { 0x0000f3fc, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000002, 0x00204811, 0x000 },
+- { 0x000000ff, 0x00280e30, 0x000 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x521 },
+- { 0x00000000, 0xc0200800, 0x000 },
+- { 0x00000000, 0x14c00000, 0x536 },
+- { 0x00000000, 0x00200c11, 0x000 },
+- { 0x0000001c, 0x00203623, 0x000 },
+- { 0x0000002b, 0x00203623, 0x000 },
+- { 0x00000029, 0x00203623, 0x000 },
+- { 0x00000028, 0x00203623, 0x000 },
+- { 0x00000017, 0x00203623, 0x000 },
+- { 0x00000025, 0x00203623, 0x000 },
+- { 0x00000026, 0x00203623, 0x000 },
+- { 0x00000015, 0x00203623, 0x000 },
+- { 0x00000016, 0x00203623, 0x000 },
+- { 0xffffe000, 0x00200c11, 0x000 },
+- { 0x00000021, 0x00203623, 0x000 },
+- { 0x00000022, 0x00203623, 0x000 },
+- { 0x00001fff, 0x00200c11, 0x000 },
+- { 0x00000023, 0x00203623, 0x000 },
+- { 0x00000024, 0x00203623, 0x000 },
+- { 0xf1ffffff, 0x00283a2e, 0x000 },
+- { 0x0000001a, 0xc0220e20, 0x000 },
+- { 0x00000000, 0x0029386e, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000006, 0x00204811, 0x000 },
+- { 0x0000002a, 0x40203620, 0x000 },
+- { 0x87000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0x9d000000, 0x00204411, 0x000 },
+- { 0x0000001f, 0x40214a20, 0x000 },
+- { 0x96000000, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0200c00, 0x000 },
+- { 0x00000000, 0xc0201000, 0x000 },
+- { 0x0000001f, 0x00211624, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x0000001d, 0x00203623, 0x000 },
+- { 0x00000003, 0x00281e23, 0x000 },
+- { 0x00000008, 0x00222223, 0x000 },
+- { 0xfffff000, 0x00282228, 0x000 },
+- { 0x00000000, 0x002920e8, 0x000 },
+- { 0x0000001f, 0x00203628, 0x000 },
+- { 0x00000018, 0x00211e23, 0x000 },
+- { 0x00000020, 0x00203627, 0x000 },
+- { 0x00000002, 0x00221624, 0x000 },
+- { 0x00000000, 0x003014a8, 0x000 },
+- { 0x0000001e, 0x00203625, 0x000 },
+- { 0x00000003, 0x00211a24, 0x000 },
+- { 0x10000000, 0x00281a26, 0x000 },
+- { 0xefffffff, 0x00283a2e, 0x000 },
+- { 0x00000000, 0x004938ce, 0x610 },
+- { 0x00000001, 0x40280a20, 0x000 },
+- { 0x00000006, 0x40280e20, 0x000 },
+- { 0x00000300, 0xc0281220, 0x000 },
+- { 0x00000008, 0x00211224, 0x000 },
+- { 0x00000000, 0xc0201620, 0x000 },
+- { 0x00000000, 0xc0201a20, 0x000 },
+- { 0x00000000, 0x00210222, 0x000 },
+- { 0x00000000, 0x14c00000, 0x56c },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x622 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00020000, 0x00294a26, 0x000 },
+- { 0x00000000, 0x00204810, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x574 },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x582 },
+- { 0x00000002, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x574 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00002258, 0x00300a24, 0x000 },
+- { 0x00040000, 0x00694622, 0x622 },
+- { 0x00000000, 0xc0201c10, 0x000 },
+- { 0x00000000, 0xc0400000, 0x582 },
+- { 0x00000000, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x578 },
+- { 0x00000000, 0xc0201c00, 0x000 },
+- { 0x00000000, 0xc0400000, 0x582 },
+- { 0x00000004, 0x002f0223, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x580 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x0000216d, 0x00204411, 0x000 },
+- { 0x00000000, 0xc0204800, 0x000 },
+- { 0x00000000, 0xc0604800, 0x627 },
+- { 0x00000000, 0x00401c10, 0x582 },
+- { 0x00000000, 0xc0200000, 0x000 },
+- { 0x00000000, 0xc0400000, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x584 },
+- { 0x00000000, 0x00600000, 0x5c3 },
+- { 0x00000000, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x592 },
+- { 0x0000a2b7, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x00000033, 0x0020262d, 0x000 },
+- { 0x0000001a, 0x00212229, 0x000 },
+- { 0x00000006, 0x00222629, 0x000 },
+- { 0x0000a2c4, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x590 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d1, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000001, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5a0 },
+- { 0x0000a2bb, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x00000034, 0x0020262d, 0x000 },
+- { 0x0000001a, 0x00212229, 0x000 },
+- { 0x00000006, 0x00222629, 0x000 },
+- { 0x0000a2c5, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x59e },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d2, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x00000002, 0x002f0224, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x5ae },
+- { 0x0000a2bf, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x00000035, 0x0020262d, 0x000 },
+- { 0x0000001a, 0x00212229, 0x000 },
+- { 0x00000006, 0x00222629, 0x000 },
+- { 0x0000a2c6, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5ac },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d3, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x0000a2c3, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204807, 0x000 },
+- { 0x00000036, 0x0020262d, 0x000 },
+- { 0x0000001a, 0x00212229, 0x000 },
+- { 0x00000006, 0x00222629, 0x000 },
+- { 0x0000a2c7, 0x00204411, 0x000 },
+- { 0x00000000, 0x003048e9, 0x000 },
+- { 0x00000000, 0x00e00000, 0x5b8 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404808, 0x000 },
+- { 0x0000a2d4, 0x00204411, 0x000 },
+- { 0x00000001, 0x00504a28, 0x000 },
+- { 0x85000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0x0000304a, 0x00204411, 0x000 },
+- { 0x01000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x00400000, 0x5be },
+- { 0xa4000000, 0xc0204411, 0x000 },
+- { 0x00000000, 0xc0404800, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5c3 },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x0000003f, 0x00204811, 0x000 },
+- { 0x00000005, 0x00204811, 0x000 },
+- { 0x0000a1f4, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x88000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0xff000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x00000002, 0x00804811, 0x000 },
+- { 0x00000000, 0x0ee00000, 0x5d6 },
+- { 0x00001000, 0x00200811, 0x000 },
+- { 0x0000002b, 0x00203622, 0x000 },
+- { 0x00000000, 0x00600000, 0x5da },
+- { 0x00000000, 0x00600000, 0x5c3 },
+- { 0x98000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00804811, 0x000 },
+- { 0x00000000, 0xc0600000, 0x5da },
+- { 0x00000000, 0xc0400400, 0x001 },
+- { 0x0000a2a4, 0x00204411, 0x000 },
+- { 0x00000022, 0x00204811, 0x000 },
+- { 0x89000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00404811, 0x5cd },
+- { 0x97000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x8a000000, 0x00204411, 0x000 },
+- { 0x00000000, 0x00404811, 0x5cd },
+- { 0x00000000, 0x00600000, 0x5f3 },
+- { 0x0001a2a4, 0xc0204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x374 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x09800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x0004217f, 0x00604411, 0x622 },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x000 },
+- { 0x00000004, 0x00404c11, 0x5ed },
+- { 0x00000000, 0x00400000, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000004, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffffb, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0x00000008, 0x00291e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x00000017, 0x00201e2d, 0x000 },
+- { 0xfffffff7, 0x00281e27, 0x000 },
+- { 0x00000017, 0x00803627, 0x000 },
+- { 0x0001a2a4, 0x00204411, 0x000 },
+- { 0x00000016, 0x00604811, 0x374 },
+- { 0x00002010, 0x00204411, 0x000 },
+- { 0x00010000, 0x00204811, 0x000 },
+- { 0x0000217c, 0x00204411, 0x000 },
+- { 0x01800000, 0x00204811, 0x000 },
+- { 0xffffffff, 0x00204811, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000000, 0x17000000, 0x000 },
+- { 0x81000000, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0004217f, 0x00604411, 0x622 },
+- { 0x0000001f, 0x00210230, 0x000 },
+- { 0x00000000, 0x14c00000, 0x621 },
+- { 0x00000010, 0x00404c11, 0x607 },
+- { 0x00000000, 0xc0200400, 0x000 },
+- { 0x00000000, 0x38c00000, 0x000 },
+- { 0x0000001d, 0x00200a2d, 0x000 },
+- { 0x0000001e, 0x00200e2d, 0x000 },
+- { 0x0000001f, 0x0020122d, 0x000 },
+- { 0x00000020, 0x0020162d, 0x000 },
+- { 0x00002169, 0x00204411, 0x000 },
+- { 0x00000000, 0x00204804, 0x000 },
+- { 0x00000000, 0x00204805, 0x000 },
+- { 0x00000000, 0x00204801, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000004, 0x00301224, 0x000 },
+- { 0x00000000, 0x002f0064, 0x000 },
+- { 0x00000000, 0x0cc00000, 0x620 },
+- { 0x00000003, 0x00281a22, 0x000 },
+- { 0x00000008, 0x00221222, 0x000 },
+- { 0xfffff000, 0x00281224, 0x000 },
+- { 0x00000000, 0x002910c4, 0x000 },
+- { 0x0000001f, 0x00403624, 0x000 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x622 },
+- { 0x9f000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x625 },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x1ac00000, 0x627 },
+- { 0x9e000000, 0x00204411, 0x000 },
+- { 0xcafebabe, 0x00204811, 0x000 },
+- { 0x00000000, 0x1ae00000, 0x62a },
+- { 0x00000000, 0x00800000, 0x000 },
+- { 0x00000000, 0x00600000, 0x00b },
+- { 0x00001000, 0x00600411, 0x315 },
+- { 0x00000000, 0x00200411, 0x000 },
+- { 0x00000000, 0x00600811, 0x1b2 },
+- { 0x0000225c, 0x00204411, 0x000 },
+- { 0x00000003, 0x00204811, 0x000 },
+- { 0x00002256, 0x00204411, 0x000 },
+- { 0x0000001b, 0x00204811, 0x000 },
+- { 0x0000a1fc, 0x00204411, 0x000 },
+- { 0x00000001, 0x00204811, 0x000 },
+- { 0x0001a1fd, 0xc0204411, 0x000 },
+- { 0x00000021, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000024, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000022, 0x0020222d, 0x000 },
+- { 0x0000ffff, 0x00282228, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00204811, 0x000 },
+- { 0x00000023, 0x00201e2d, 0x000 },
+- { 0x00000010, 0x00221e27, 0x000 },
+- { 0x00000000, 0x00294907, 0x000 },
+- { 0x00000000, 0x00404811, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x00000000, 0x00000000, 0x000 },
+- { 0x0142050a, 0x05ba0250, 0x000 },
+- { 0x01c30168, 0x044105ba, 0x000 },
+- { 0x02250209, 0x02500151, 0x000 },
+- { 0x02230245, 0x02a00241, 0x000 },
+- { 0x03d705ba, 0x05ba05ba, 0x000 },
+- { 0x05e205e3, 0x031f05ba, 0x000 },
+- { 0x032005bf, 0x0320034a, 0x000 },
+- { 0x03340282, 0x034c033e, 0x000 },
+- { 0x05ba05ba, 0x05ba05ba, 0x000 },
+- { 0x05ba0557, 0x05ba032a, 0x000 },
+- { 0x03bc05ba, 0x04c3034e, 0x000 },
+- { 0x04a20455, 0x043f05ba, 0x000 },
+- { 0x04d805ba, 0x044304e5, 0x000 },
+- { 0x0455050f, 0x035b037b, 0x000 },
+- { 0x05ba05ba, 0x05ba05ba, 0x000 },
+- { 0x05ba05ba, 0x05ba05ba, 0x000 },
+- { 0x05ba05ba, 0x05d805c1, 0x000 },
+- { 0x05ba05ba, 0x000705ba, 0x000 },
+- { 0x05ba05ba, 0x05ba05ba, 0x000 },
+- { 0x05ba05ba, 0x05ba05ba, 0x000 },
+- { 0x03f803ed, 0x04080406, 0x000 },
+- { 0x040e040a, 0x040c0410, 0x000 },
+- { 0x041c0418, 0x04240420, 0x000 },
+- { 0x042c0428, 0x04340430, 0x000 },
+- { 0x05ba05ba, 0x043a0438, 0x000 },
+- { 0x05ba05ba, 0x05ba05ba, 0x000 },
+- { 0x05ba05ba, 0x05ba05ba, 0x000 },
+- { 0x0002060e, 0x062c0006, 0x000 },
+-};
+-
+-static const u32 RS780_pfp_microcode[] = {
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0x7c038b,
+-0x8001db,
+-0x7c038b,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xc41838,
+-0xca2400,
+-0xca2800,
+-0x9581cb,
+-0xc41c3a,
+-0xc3c000,
+-0xca0800,
+-0xca0c00,
+-0x7c744b,
+-0xc20005,
+-0x99c000,
+-0xc41c3a,
+-0x7c744c,
+-0xc0ffe0,
+-0x042c08,
+-0x309002,
+-0x7d2500,
+-0x351402,
+-0x7d350b,
+-0x255407,
+-0x7cd580,
+-0x259c07,
+-0x95c004,
+-0xd5001b,
+-0x7eddc1,
+-0x7d9d80,
+-0xd6801b,
+-0xd5801b,
+-0xd4401e,
+-0xd5401e,
+-0xd6401e,
+-0xd6801e,
+-0xd4801e,
+-0xd4c01e,
+-0x9783d3,
+-0xd5c01e,
+-0xca0800,
+-0x80001a,
+-0xca0c00,
+-0xe4011e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xe4013e,
+-0xd4001e,
+-0x80000c,
+-0xc41838,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0xca0c00,
+-0x8001db,
+-0xd48024,
+-0xca0800,
+-0x7c00c0,
+-0xc81425,
+-0xc81824,
+-0x7c9488,
+-0x7c9880,
+-0xc20003,
+-0xd40075,
+-0x7c744c,
+-0x800064,
+-0xd4401e,
+-0xca1800,
+-0xd4401e,
+-0xd5801e,
+-0x800062,
+-0xd40075,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xe2001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xd40075,
+-0xd4401e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd48019,
+-0xd4c018,
+-0xd50017,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c01,
+-0xd48060,
+-0x94c003,
+-0x041001,
+-0x041002,
+-0xd50025,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xd48061,
+-0xd4401e,
+-0x800000,
+-0xd4801e,
+-0xca0800,
+-0xca0c00,
+-0xd4401e,
+-0xd48016,
+-0xd4c016,
+-0xd4801e,
+-0x8001db,
+-0xd4c01e,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x948004,
+-0xca1400,
+-0xe420f3,
+-0xd42013,
+-0xd56065,
+-0xd4e01c,
+-0xd5201c,
+-0xd5601c,
+-0x800000,
+-0x062001,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9483f7,
+-0xca1400,
+-0xe420f3,
+-0x80009c,
+-0xd42013,
+-0xc60843,
+-0xca0c00,
+-0xca1000,
+-0x9883ef,
+-0xca1400,
+-0xd40064,
+-0x8000b0,
+-0x000000,
+-0xc41432,
+-0xc61843,
+-0xc4082f,
+-0x954005,
+-0xc40c30,
+-0xd4401e,
+-0x800000,
+-0xee001e,
+-0x9583f5,
+-0xc41031,
+-0xd44033,
+-0xd52065,
+-0xd4a01c,
+-0xd4e01c,
+-0xd5201c,
+-0xe4015e,
+-0xd4001e,
+-0x800000,
+-0x062001,
+-0xca1800,
+-0x0a2001,
+-0xd60076,
+-0xc40836,
+-0x988007,
+-0xc61045,
+-0x950110,
+-0xd4001f,
+-0xd46062,
+-0x800000,
+-0xd42062,
+-0xcc3835,
+-0xcc1433,
+-0x8401de,
+-0xd40072,
+-0xd5401e,
+-0x800000,
+-0xee001e,
+-0xe2001a,
+-0x8401de,
+-0xe2001a,
+-0xcc104b,
+-0xcc0447,
+-0x2c9401,
+-0x7d098b,
+-0x984005,
+-0x7d15cb,
+-0xd4001a,
+-0x8001db,
+-0xd4006d,
+-0x344401,
+-0xcc0c48,
+-0x98403a,
+-0xcc2c4a,
+-0x958004,
+-0xcc0449,
+-0x8001db,
+-0xd4001a,
+-0xd4c01a,
+-0x282801,
+-0x840113,
+-0xcc1003,
+-0x98801b,
+-0x04380c,
+-0x840113,
+-0xcc1003,
+-0x988017,
+-0x043808,
+-0x840113,
+-0xcc1003,
+-0x988013,
+-0x043804,
+-0x840113,
+-0xcc1003,
+-0x988014,
+-0xcc104c,
+-0x9a8009,
+-0xcc144d,
+-0x9840dc,
+-0xd4006d,
+-0xcc1848,
+-0xd5001a,
+-0xd5401a,
+-0x8000ec,
+-0xd5801a,
+-0x96c0d5,
+-0xd4006d,
+-0x8001db,
+-0xd4006e,
+-0x9ac003,
+-0xd4006d,
+-0xd4006e,
+-0x800000,
+-0xec007f,
+-0x9ac0cc,
+-0xd4006d,
+-0x8001db,
+-0xd4006e,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0x7d9103,
+-0x7dd583,
+-0x7d190c,
+-0x35cc1f,
+-0x35701f,
+-0x7cf0cb,
+-0x7cd08b,
+-0x880000,
+-0x7e8e8b,
+-0x95c004,
+-0xd4006e,
+-0x8001db,
+-0xd4001a,
+-0xd4c01a,
+-0xcc0803,
+-0xcc0c03,
+-0xcc1003,
+-0xcc1403,
+-0xcc1803,
+-0xcc1c03,
+-0xcc2403,
+-0xcc2803,
+-0x35c41f,
+-0x36b01f,
+-0x7c704b,
+-0x34f01f,
+-0x7c704b,
+-0x35701f,
+-0x7c704b,
+-0x7d8881,
+-0x7dccc1,
+-0x7e5101,
+-0x7e9541,
+-0x7c9082,
+-0x7cd4c2,
+-0x7c848b,
+-0x9ac003,
+-0x7c8c8b,
+-0x2c8801,
+-0x98809e,
+-0xd4006d,
+-0x98409c,
+-0xd4006e,
+-0xcc084c,
+-0xcc0c4d,
+-0xcc1048,
+-0xd4801a,
+-0xd4c01a,
+-0x800124,
+-0xd5001a,
+-0xcc0832,
+-0xd40032,
+-0x9482b6,
+-0xca0c00,
+-0xd4401e,
+-0x800000,
+-0xd4001e,
+-0xe4011e,
+-0xd4001e,
+-0xca0800,
+-0xca0c00,
+-0xca1000,
+-0xd4401e,
+-0xca1400,
+-0xd4801e,
+-0xd4c01e,
+-0xd5001e,
+-0xd5401e,
+-0xd54034,
+-0x800000,
+-0xee001e,
+-0x280404,
+-0xe2001a,
+-0xe2001a,
+-0xd4401a,
+-0xca3800,
+-0xcc0803,
+-0xcc0c03,
+-0xcc0c03,
+-0xcc0c03,
+-0x98829a,
+-0x000000,
+-0x8401de,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0400,
+-0xc2ff00,
+-0xcc0834,
+-0xc13fff,
+-0x7c74cb,
+-0x7cc90b,
+-0x7d010f,
+-0x99028d,
+-0x7c738b,
+-0x8401de,
+-0xd7a06f,
+-0x800000,
+-0xee001f,
+-0xca0800,
+-0x281900,
+-0x7d898b,
+-0x958014,
+-0x281404,
+-0xca0c00,
+-0xca1000,
+-0xca1c00,
+-0xca2400,
+-0xe2001f,
+-0xd4c01a,
+-0xd5001a,
+-0xd5401a,
+-0xcc1803,
+-0xcc2c03,
+-0xcc2c03,
+-0xcc2c03,
+-0x7da58b,
+-0x7d9c47,
+-0x984274,
+-0x000000,
+-0x800184,
+-0xd4c01a,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xe4013e,
+-0xd4001e,
+-0xd4401e,
+-0xee001e,
+-0xca0400,
+-0xa00000,
+-0x7e828b,
+-0xca0800,
+-0x248c06,
+-0x0ccc06,
+-0x98c006,
+-0xcc104e,
+-0x990004,
+-0xd40073,
+-0xe4011e,
+-0xd4001e,
+-0xd4401e,
+-0xd4801e,
+-0x800000,
+-0xee001e,
+-0xca0800,
+-0xca0c00,
+-0x34d018,
+-0x251001,
+-0x950021,
+-0xc17fff,
+-0xca1000,
+-0xca1400,
+-0xca1800,
+-0xd4801d,
+-0xd4c01d,
+-0x7db18b,
+-0xc14202,
+-0xc2c001,
+-0xd5801d,
+-0x34dc0e,
+-0x7d5d4c,
+-0x7f734c,
+-0xd7401e,
+-0xd5001e,
+-0xd5401e,
+-0xc14200,
+-0xc2c000,
+-0x099c01,
+-0x31dc10,
+-0x7f5f4c,
+-0x7f734c,
+-0x042802,
+-0x7d8380,
+-0xd5a86f,
+-0xd58066,
+-0xd7401e,
+-0xec005e,
+-0xc82402,
+-0xc82402,
+-0x8001db,
+-0xd60076,
+-0xd4401e,
+-0xd4801e,
+-0xd4c01e,
+-0x800000,
+-0xee001e,
+-0x800000,
+-0xee001f,
+-0xd4001f,
+-0x800000,
+-0xd4001f,
+-0xd4001f,
+-0x880000,
+-0xd4001f,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x000000,
+-0x010194,
+-0x02019b,
+-0x0300b2,
+-0x0400a2,
+-0x050003,
+-0x06003f,
+-0x070032,
+-0x08014f,
+-0x090046,
+-0x0a0036,
+-0x1001d9,
+-0x1700c5,
+-0x22015d,
+-0x23016c,
+-0x2000d7,
+-0x240148,
+-0x26004d,
+-0x27005c,
+-0x28008d,
+-0x290051,
+-0x2a007e,
+-0x2b0061,
+-0x2f0088,
+-0x3200aa,
+-0x3401a2,
+-0x36006f,
+-0x3c0179,
+-0x3f0095,
+-0x4101af,
+-0x440151,
+-0x550196,
+-0x56019d,
+-0x60000b,
+-0x610034,
+-0x620038,
+-0x630038,
+-0x640038,
+-0x650038,
+-0x660038,
+-0x670038,
+-0x68003a,
+-0x690041,
+-0x6a0048,
+-0x6b0048,
+-0x6c0048,
+-0x6d0048,
+-0x6e0048,
+-0x6f0048,
+-0x7301d9,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-0x000006,
+-};
+-
+-static const u32 RV770_cp_microcode[] = {
+-0xcc0003ea,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x80000001,
+-0xd040007f,
+-0x80000001,
+-0xcc400041,
+-0x7c40c000,
+-0xc0160004,
+-0x30d03fff,
+-0x7d15000c,
+-0xcc110000,
+-0x28d8001e,
+-0x31980001,
+-0x28dc001f,
+-0xc8200004,
+-0x95c00006,
+-0x7c424000,
+-0xcc000062,
+-0x7e56800c,
+-0xcc290000,
+-0xc8240004,
+-0x7e26000b,
+-0x95800006,
+-0x7c42c000,
+-0xcc000062,
+-0x7ed7000c,
+-0xcc310000,
+-0xc82c0004,
+-0x7e2e000c,
+-0xcc000062,
+-0x31103fff,
+-0x80000001,
+-0xce110000,
+-0x7c40c000,
+-0x80000001,
+-0xcc400040,
+-0x80000001,
+-0xcc412257,
+-0x7c418000,
+-0xcc400045,
+-0xcc400048,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xcc400045,
+-0xcc400048,
+-0x7c40c000,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xcc000045,
+-0xcc000048,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x040ca1fd,
+-0xc0120001,
+-0xcc000045,
+-0xcc000048,
+-0x7cd0c00c,
+-0xcc41225c,
+-0xcc41a1fc,
+-0xd04d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x80000001,
+-0xcc41225d,
+-0x7c408000,
+-0x7c40c000,
+-0xc02a0002,
+-0x7c410000,
+-0x7d29000c,
+-0x30940001,
+-0x30980006,
+-0x309c0300,
+-0x29dc0008,
+-0x7c420000,
+-0x7c424000,
+-0x9540000f,
+-0xc02e0004,
+-0x05f02258,
+-0x7f2f000c,
+-0xcc310000,
+-0xc8280004,
+-0xccc12169,
+-0xcd01216a,
+-0xce81216b,
+-0x0db40002,
+-0xcc01216c,
+-0x9740000e,
+-0x0db40000,
+-0x8000007b,
+-0xc834000a,
+-0x0db40002,
+-0x97400009,
+-0x0db40000,
+-0xc02e0004,
+-0x05f02258,
+-0x7f2f000c,
+-0xcc310000,
+-0xc8280004,
+-0x8000007b,
+-0xc834000a,
+-0x97400004,
+-0x7e028000,
+-0x8000007b,
+-0xc834000a,
+-0x0db40004,
+-0x9740ff8c,
+-0x00000000,
+-0xce01216d,
+-0xce41216e,
+-0xc8280003,
+-0xc834000a,
+-0x9b400004,
+-0x043c0005,
+-0x8400026d,
+-0xcc000062,
+-0x0df40000,
+-0x9740000b,
+-0xc82c03e6,
+-0xce81a2b7,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c4,
+-0x80000001,
+-0xcfc1a2d1,
+-0x0df40001,
+-0x9740000b,
+-0xc82c03e7,
+-0xce81a2bb,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c5,
+-0x80000001,
+-0xcfc1a2d2,
+-0x0df40002,
+-0x9740000b,
+-0xc82c03e8,
+-0xce81a2bf,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c6,
+-0x80000001,
+-0xcfc1a2d3,
+-0xc82c03e9,
+-0xce81a2c3,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c7,
+-0x80000001,
+-0xcfc1a2d4,
+-0x80000001,
+-0xcc400042,
+-0x7c40c000,
+-0x7c410000,
+-0x2914001d,
+-0x31540001,
+-0x9940000d,
+-0x31181000,
+-0xc81c0011,
+-0x09dc0001,
+-0x95c0ffff,
+-0xc81c0011,
+-0xccc12100,
+-0xcd012101,
+-0xccc12102,
+-0xcd012103,
+-0x04180004,
+-0x8000039f,
+-0xcd81a2a4,
+-0xc02a0004,
+-0x95800008,
+-0x36a821a3,
+-0xcc290000,
+-0xc8280004,
+-0xc81c0011,
+-0x0de40040,
+-0x9640ffff,
+-0xc81c0011,
+-0xccc12170,
+-0xcd012171,
+-0xc8200012,
+-0x96000000,
+-0xc8200012,
+-0x8000039f,
+-0xcc000064,
+-0x7c40c000,
+-0x7c410000,
+-0xcc000045,
+-0xcc000048,
+-0x40d40003,
+-0xcd41225c,
+-0xcd01a1fc,
+-0xc01a0001,
+-0x041ca1fd,
+-0x7dd9c00c,
+-0x7c420000,
+-0x08cc0001,
+-0x06240001,
+-0x06280002,
+-0xce1d0000,
+-0xce5d0000,
+-0x98c0fffa,
+-0xce9d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x7c40c000,
+-0x30d00001,
+-0x28cc0001,
+-0x7c414000,
+-0x95000006,
+-0x7c418000,
+-0xcd41216d,
+-0xcd81216e,
+-0x800000f3,
+-0xc81c0003,
+-0xc0220004,
+-0x7e16000c,
+-0xcc210000,
+-0xc81c0004,
+-0x7c424000,
+-0x98c00004,
+-0x7c428000,
+-0x80000001,
+-0xcde50000,
+-0xce412169,
+-0xce81216a,
+-0xcdc1216b,
+-0x80000001,
+-0xcc01216c,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0x7c41c000,
+-0x28a40008,
+-0x326400ff,
+-0x0e68003c,
+-0x9680000a,
+-0x7c020000,
+-0x7c420000,
+-0x1e300003,
+-0xcc00006a,
+-0x9b000003,
+-0x42200005,
+-0x04200040,
+-0x80000110,
+-0x7c024000,
+-0x7e024000,
+-0x9a400000,
+-0x0a640001,
+-0x30ec0010,
+-0x9ac0000a,
+-0xcc000062,
+-0xc02a0004,
+-0xc82c0021,
+-0x7e92800c,
+-0xcc000041,
+-0xcc290000,
+-0xcec00021,
+-0x80000120,
+-0xc8300004,
+-0xcd01216d,
+-0xcd41216e,
+-0xc8300003,
+-0x7f1f000b,
+-0x30f40007,
+-0x27780001,
+-0x9740002a,
+-0x07b80125,
+-0x9f800000,
+-0x00000000,
+-0x80000135,
+-0x7f1b8004,
+-0x80000139,
+-0x7f1b8005,
+-0x8000013d,
+-0x7f1b8002,
+-0x80000141,
+-0x7f1b8003,
+-0x80000145,
+-0x7f1b8007,
+-0x80000149,
+-0x7f1b8006,
+-0x8000014e,
+-0x28a40008,
+-0x9b800019,
+-0x28a40008,
+-0x8000015e,
+-0x326400ff,
+-0x9b800015,
+-0x28a40008,
+-0x8000015e,
+-0x326400ff,
+-0x9b800011,
+-0x28a40008,
+-0x8000015e,
+-0x326400ff,
+-0x9b80000d,
+-0x28a40008,
+-0x8000015e,
+-0x326400ff,
+-0x9b800009,
+-0x28a40008,
+-0x8000015e,
+-0x326400ff,
+-0x9b800005,
+-0x28a40008,
+-0x8000015e,
+-0x326400ff,
+-0x28a40008,
+-0x326400ff,
+-0x0e68003c,
+-0x9a80feb1,
+-0x28ec0008,
+-0x7c434000,
+-0x7c438000,
+-0x7c43c000,
+-0x96c00007,
+-0xcc000062,
+-0xcf412169,
+-0xcf81216a,
+-0xcfc1216b,
+-0x80000001,
+-0xcc01216c,
+-0x80000001,
+-0xcff50000,
+-0xcc00006b,
+-0x840003a2,
+-0x0e68003c,
+-0x9a800004,
+-0xc8280015,
+-0x80000001,
+-0xd040007f,
+-0x9680ffab,
+-0x7e024000,
+-0x8400023b,
+-0xc00e0002,
+-0xcc000041,
+-0x80000239,
+-0xccc1304a,
+-0x7c40c000,
+-0x7c410000,
+-0xc01e0001,
+-0x29240012,
+-0xc0220002,
+-0x96400005,
+-0xc0260004,
+-0xc027fffb,
+-0x7d25000b,
+-0xc0260000,
+-0x7dd2800b,
+-0x7e12c00b,
+-0x7d25000c,
+-0x7c414000,
+-0x7c418000,
+-0xccc12169,
+-0x9a80000a,
+-0xcd01216a,
+-0xcd41216b,
+-0x96c0fe82,
+-0xcd81216c,
+-0xc8300018,
+-0x97000000,
+-0xc8300018,
+-0x80000001,
+-0xcc000018,
+-0x840003a2,
+-0xcc00007f,
+-0xc8140013,
+-0xc8180014,
+-0xcd41216b,
+-0x96c0fe76,
+-0xcd81216c,
+-0x80000182,
+-0xc8300018,
+-0xc80c0008,
+-0x98c00000,
+-0xc80c0008,
+-0x7c410000,
+-0x95000002,
+-0x00000000,
+-0x7c414000,
+-0xc8200009,
+-0xcc400043,
+-0xce01a1f4,
+-0xcc400044,
+-0xc00e8000,
+-0x7c424000,
+-0x7c428000,
+-0x2aac001f,
+-0x96c0fe63,
+-0xc035f000,
+-0xce4003e2,
+-0x32780003,
+-0x267c0008,
+-0x7ff7c00b,
+-0x7ffbc00c,
+-0x2a780018,
+-0xcfc003e3,
+-0xcf8003e4,
+-0x26b00002,
+-0x7f3f0000,
+-0xcf0003e5,
+-0x8000031f,
+-0x7c80c000,
+-0x7c40c000,
+-0x28d00008,
+-0x3110000f,
+-0x9500000f,
+-0x25280001,
+-0x06a801b3,
+-0x9e800000,
+-0x00000000,
+-0x800001d4,
+-0xc0120800,
+-0x800001e2,
+-0xc814000f,
+-0x800001e9,
+-0xc8140010,
+-0x800001f0,
+-0xccc1a2a4,
+-0x800001f9,
+-0xc8140011,
+-0x30d0003f,
+-0x0d280015,
+-0x9a800012,
+-0x0d28001e,
+-0x9a80001e,
+-0x0d280020,
+-0x9a800023,
+-0x0d24000f,
+-0x0d280010,
+-0x7e6a800c,
+-0x9a800026,
+-0x0d200004,
+-0x0d240014,
+-0x0d280028,
+-0x7e62400c,
+-0x7ea6800c,
+-0x9a80002a,
+-0xc8140011,
+-0x80000001,
+-0xccc1a2a4,
+-0xc0120800,
+-0x7c414000,
+-0x7d0cc00c,
+-0xc0120008,
+-0x29580003,
+-0x295c000c,
+-0x7c420000,
+-0x7dd1c00b,
+-0x26200014,
+-0x7e1e400c,
+-0x7e4e800c,
+-0xce81a2a4,
+-0x80000001,
+-0xcd81a1fe,
+-0xc814000f,
+-0x0410210e,
+-0x95400000,
+-0xc814000f,
+-0xd0510000,
+-0x80000001,
+-0xccc1a2a4,
+-0xc8140010,
+-0x04102108,
+-0x95400000,
+-0xc8140010,
+-0xd0510000,
+-0x80000001,
+-0xccc1a2a4,
+-0xccc1a2a4,
+-0x04100001,
+-0xcd000019,
+-0x840003a2,
+-0xcc00007f,
+-0xc8100019,
+-0x99000000,
+-0xc8100019,
+-0x80000002,
+-0x7c408000,
+-0x04102100,
+-0x09540001,
+-0x9540ffff,
+-0xc8140011,
+-0xd0510000,
+-0x8000039f,
+-0xccc1a2a4,
+-0x7c40c000,
+-0xcc40000d,
+-0x94c0fdff,
+-0xcc40000e,
+-0x7c410000,
+-0x95000005,
+-0x08cc0001,
+-0xc8140005,
+-0x99400014,
+-0x00000000,
+-0x98c0fffb,
+-0x7c410000,
+-0x80000002,
+-0x7d008000,
+-0xc8140005,
+-0x7c40c000,
+-0x9940000c,
+-0xc818000c,
+-0x7c410000,
+-0x9580fdee,
+-0xc820000e,
+-0xc81c000d,
+-0x66200020,
+-0x7e1e002c,
+-0x25240002,
+-0x7e624020,
+-0x80000001,
+-0xcce60000,
+-0x7c410000,
+-0xcc00006c,
+-0xcc00006d,
+-0xc818001f,
+-0xc81c001e,
+-0x65980020,
+-0x7dd9c02c,
+-0x7cd4c00c,
+-0xccde0000,
+-0x45dc0004,
+-0xc8280017,
+-0x9680000f,
+-0xc00e0001,
+-0x28680008,
+-0x2aac0016,
+-0x32a800ff,
+-0x0eb00049,
+-0x7f2f000b,
+-0x97000006,
+-0x00000000,
+-0xc8140005,
+-0x7c40c000,
+-0x80000223,
+-0x7c410000,
+-0x80000226,
+-0xd040007f,
+-0x8400023b,
+-0xcc000041,
+-0xccc1304a,
+-0x94000000,
+-0xc83c001a,
+-0x043c0005,
+-0xcfc1a2a4,
+-0xc0361f90,
+-0xc0387fff,
+-0x7c03c010,
+-0x7f7b400c,
+-0xcf41217c,
+-0xcfc1217d,
+-0xcc01217e,
+-0xc03a0004,
+-0x0434217f,
+-0x7f7b400c,
+-0xcc350000,
+-0xc83c0004,
+-0x2bfc001f,
+-0x04380020,
+-0x97c00005,
+-0xcc000062,
+-0x9b800000,
+-0x0bb80001,
+-0x80000247,
+-0xcc000071,
+-0xcc01a1f4,
+-0x04380016,
+-0xc0360002,
+-0xcf81a2a4,
+-0x88000000,
+-0xcf412010,
+-0x7c40c000,
+-0x28d0001c,
+-0x95000005,
+-0x04d40001,
+-0xcd400065,
+-0x80000001,
+-0xcd400068,
+-0x09540002,
+-0x80000001,
+-0xcd400066,
+-0x8400026c,
+-0xc81803ea,
+-0x7c40c000,
+-0x9980fd9d,
+-0xc8140016,
+-0x08d00001,
+-0x9940002b,
+-0xcd000068,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x043c0005,
+-0xcfc1a2a4,
+-0xcc01a1f4,
+-0x840003a2,
+-0xcc000046,
+-0x88000000,
+-0xcc00007f,
+-0x8400027e,
+-0xc81803ea,
+-0x7c40c000,
+-0x9980fd8b,
+-0xc8140016,
+-0x08d00001,
+-0x99400019,
+-0xcd000068,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x043c0022,
+-0xcfc1a2a4,
+-0x840003a2,
+-0xcc000047,
+-0x88000000,
+-0xcc00007f,
+-0xc8100016,
+-0x9900000d,
+-0xcc400067,
+-0x80000002,
+-0x7c408000,
+-0xc81803ea,
+-0x9980fd77,
+-0x7c40c000,
+-0x94c00003,
+-0xc8100016,
+-0x99000004,
+-0xccc00068,
+-0x80000002,
+-0x7c408000,
+-0x8400023b,
+-0xc0148000,
+-0xcc000041,
+-0xcd41304a,
+-0xc0148000,
+-0x99000000,
+-0xc8100016,
+-0x80000002,
+-0x7c408000,
+-0xc0120001,
+-0x7c51400c,
+-0x80000001,
+-0xd0550000,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0x291c001f,
+-0xccc0004a,
+-0xcd00004b,
+-0x95c00003,
+-0xc01c8000,
+-0xcdc12010,
+-0xdd830000,
+-0x055c2000,
+-0xcc000062,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc0004c,
+-0xcd00004d,
+-0xdd830000,
+-0x055ca000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc0004e,
+-0xcd00004f,
+-0xdd830000,
+-0x055cc000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00050,
+-0xcd000051,
+-0xdd830000,
+-0x055cf8e0,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00052,
+-0xcd000053,
+-0xdd830000,
+-0x055cf880,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00054,
+-0xcd000055,
+-0xdd830000,
+-0x055ce000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00056,
+-0xcd000057,
+-0xdd830000,
+-0x055cf000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00058,
+-0xcd000059,
+-0xdd830000,
+-0x055cf3fc,
+-0x80000001,
+-0xd81f4100,
+-0xd0432000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043a000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043c000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f8e0,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f880,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043e000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f3fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xc81403e0,
+-0xcc430000,
+-0xcc430000,
+-0xcc430000,
+-0x7d45c000,
+-0xcdc30000,
+-0xd0430000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x7c40c000,
+-0xc81003e2,
+-0xc81403e5,
+-0xc81803e3,
+-0xc81c03e4,
+-0xcd812169,
+-0xcdc1216a,
+-0xccc1216b,
+-0xcc01216c,
+-0x04200004,
+-0x7da18000,
+-0x7d964002,
+-0x9640fcd7,
+-0xcd8003e3,
+-0x31280003,
+-0xc02df000,
+-0x25180008,
+-0x7dad800b,
+-0x7da9800c,
+-0x80000001,
+-0xcd8003e3,
+-0x308cffff,
+-0xd04d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x7c40c000,
+-0x7c410000,
+-0x29240018,
+-0x32640001,
+-0x9a400013,
+-0xc8140020,
+-0x15580002,
+-0x9580ffff,
+-0xc8140020,
+-0xcc00006e,
+-0xccc12180,
+-0xcd01218d,
+-0xcc412181,
+-0x2914001f,
+-0x34588000,
+-0xcd81218c,
+-0x9540fcb9,
+-0xcc412182,
+-0xc8140020,
+-0x9940ffff,
+-0xc8140020,
+-0x80000002,
+-0x7c408000,
+-0x7c414000,
+-0x7c418000,
+-0x7c41c000,
+-0x65b40020,
+-0x7f57402c,
+-0xd4378100,
+-0x47740004,
+-0xd4378100,
+-0x47740004,
+-0xd4378100,
+-0x47740004,
+-0x09dc0004,
+-0xd4378100,
+-0x99c0fff8,
+-0x47740004,
+-0x2924001f,
+-0xc0380019,
+-0x9640fca1,
+-0xc03e0004,
+-0xcf8121f8,
+-0x37e021f9,
+-0xcc210000,
+-0xc8200004,
+-0x2a200018,
+-0x32200001,
+-0x9a00fffb,
+-0xcf8121f8,
+-0x80000002,
+-0x7c408000,
+-0x7c40c000,
+-0x28d00018,
+-0x31100001,
+-0xc0160080,
+-0x95000003,
+-0xc02a0004,
+-0x7cd4c00c,
+-0xccc1217c,
+-0xcc41217d,
+-0xcc41217e,
+-0x7c418000,
+-0x1db00003,
+-0x36a0217f,
+-0x9b000003,
+-0x419c0005,
+-0x041c0040,
+-0x99c00000,
+-0x09dc0001,
+-0xcc210000,
+-0xc8240004,
+-0x2a6c001f,
+-0x419c0005,
+-0x9ac0fffa,
+-0xcc800062,
+-0x80000002,
+-0x7c408000,
+-0x7c40c000,
+-0x04d403e6,
+-0x80000001,
+-0xcc540000,
+-0x8000039f,
+-0xcc4003ea,
+-0xc01c8000,
+-0x044ca000,
+-0xcdc12010,
+-0x7c410000,
+-0xc8140009,
+-0x04180000,
+-0x041c0008,
+-0xcd800071,
+-0x09dc0001,
+-0x05980001,
+-0xcd0d0000,
+-0x99c0fffc,
+-0xcc800062,
+-0x8000039f,
+-0xcd400071,
+-0xc00e0100,
+-0xcc000041,
+-0xccc1304a,
+-0xc83c007f,
+-0xcc00007f,
+-0x80000001,
+-0xcc00007f,
+-0xcc00007f,
+-0x88000000,
+-0xcc00007f,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00010333,
+-0x00100004,
+-0x00170006,
+-0x00210008,
+-0x00270028,
+-0x00280023,
+-0x00290029,
+-0x002a0026,
+-0x002b0029,
+-0x002d0038,
+-0x002e003f,
+-0x002f004a,
+-0x0034004c,
+-0x00360030,
+-0x003900af,
+-0x003a00d0,
+-0x003b00e5,
+-0x003c00fd,
+-0x003d016c,
+-0x003f00ad,
+-0x00410338,
+-0x0043036c,
+-0x0044018f,
+-0x004500fd,
+-0x004601ad,
+-0x004701ad,
+-0x00480200,
+-0x0049020e,
+-0x004a0257,
+-0x004b0284,
+-0x00520261,
+-0x00530273,
+-0x00540289,
+-0x0057029b,
+-0x0060029f,
+-0x006102ae,
+-0x006202b8,
+-0x006302c2,
+-0x006402cc,
+-0x006502d6,
+-0x006602e0,
+-0x006702ea,
+-0x006802f4,
+-0x006902f8,
+-0x006a02fc,
+-0x006b0300,
+-0x006c0304,
+-0x006d0308,
+-0x006e030c,
+-0x006f0310,
+-0x00700314,
+-0x00720386,
+-0x0074038c,
+-0x0079038a,
+-0x007c031e,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-0x000f039b,
+-};
+-
+-static const u32 RV770_pfp_microcode[] = {
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x80000000,
+-0xdc030000,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xc818000e,
+-0x31980001,
+-0x7c424000,
+-0x95800252,
+-0x7c428000,
+-0xc81c001c,
+-0xc037c000,
+-0x7c40c000,
+-0x7c410000,
+-0x7cb4800b,
+-0xc0360003,
+-0x99c00000,
+-0xc81c001c,
+-0x7cb4800c,
+-0x24d40002,
+-0x7d654000,
+-0xcd400043,
+-0xce800043,
+-0xcd000043,
+-0xcc800040,
+-0xce400040,
+-0xce800040,
+-0xccc00040,
+-0xdc3a0000,
+-0x9780ffde,
+-0xcd000040,
+-0x7c40c000,
+-0x80000018,
+-0x7c410000,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xc818000e,
+-0x8000000c,
+-0x31980002,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xc818000e,
+-0x288c0008,
+-0x30cc000f,
+-0x34100001,
+-0x7d0d0008,
+-0x8000000c,
+-0x7d91800b,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xcc4003f9,
+-0x80000261,
+-0xcc4003f8,
+-0xc82003f8,
+-0xc81c03f9,
+-0xc81803fb,
+-0xc037ffff,
+-0x7c414000,
+-0xcf41a29e,
+-0x66200020,
+-0x7de1c02c,
+-0x7d58c008,
+-0x7cdcc020,
+-0x68d00020,
+-0xc0360003,
+-0xcc000054,
+-0x7cb4800c,
+-0x8000006a,
+-0xcc800040,
+-0x7c418000,
+-0xcd81a29e,
+-0xcc800040,
+-0xcd800040,
+-0x80000068,
+-0xcc000054,
+-0xc019ffff,
+-0xcc800040,
+-0xcd81a29e,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0xccc1a1fa,
+-0xcd01a1f9,
+-0xcd41a29d,
+-0xccc00040,
+-0xcd000040,
+-0xcd400040,
+-0xcc400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xcc000054,
+-0xcc800040,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0xccc1a1fa,
+-0xcd01a1f9,
+-0xcd41a29d,
+-0xccc00040,
+-0xcd000040,
+-0xcd400040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x7c40c000,
+-0x30d00001,
+-0xccc1a29f,
+-0x95000003,
+-0x04140001,
+-0x04140002,
+-0xcd4003fb,
+-0xcc800040,
+-0x80000000,
+-0xccc00040,
+-0x7c40c000,
+-0xcc800040,
+-0xccc1a2a2,
+-0x80000000,
+-0xccc00040,
+-0x7c40c000,
+-0x28d4001f,
+-0xcc800040,
+-0x95400003,
+-0x7c410000,
+-0xccc00057,
+-0x2918001f,
+-0xccc00040,
+-0x95800003,
+-0xcd000040,
+-0xcd000058,
+-0x80000261,
+-0xcc00007f,
+-0xc8200017,
+-0xc8300022,
+-0x9a000006,
+-0x0e280001,
+-0xc824001e,
+-0x0a640001,
+-0xd4001240,
+-0xce400040,
+-0xc036c000,
+-0x96800007,
+-0x37747900,
+-0x041c0001,
+-0xcf400040,
+-0xcdc00040,
+-0xcf0003fa,
+-0x7c030000,
+-0xca0c0010,
+-0x7c410000,
+-0x94c00004,
+-0x7c414000,
+-0xd42002c4,
+-0xcde00044,
+-0x9b00000b,
+-0x7c418000,
+-0xcc00004b,
+-0xcda00049,
+-0xcd200041,
+-0xcd600041,
+-0xcda00041,
+-0x06200001,
+-0xce000056,
+-0x80000261,
+-0xcc00007f,
+-0xc8280020,
+-0xc82c0021,
+-0xcc000063,
+-0x7eea4001,
+-0x65740020,
+-0x7f53402c,
+-0x269c0002,
+-0x7df5c020,
+-0x69f80020,
+-0xce80004b,
+-0xce600049,
+-0xcde00041,
+-0xcfa00041,
+-0xce600041,
+-0x271c0002,
+-0x7df5c020,
+-0x69f80020,
+-0x7db24001,
+-0xcf00004b,
+-0xce600049,
+-0xcde00041,
+-0xcfa00041,
+-0x800000bd,
+-0xce600041,
+-0xc8200017,
+-0xc8300022,
+-0x9a000006,
+-0x0e280001,
+-0xc824001e,
+-0x0a640001,
+-0xd4001240,
+-0xce400040,
+-0xca0c0010,
+-0x7c410000,
+-0x94c0000b,
+-0xc036c000,
+-0x96800007,
+-0x37747900,
+-0x041c0001,
+-0xcf400040,
+-0xcdc00040,
+-0xcf0003fa,
+-0x7c030000,
+-0x800000b6,
+-0x7c414000,
+-0xcc000048,
+-0x800000ef,
+-0x00000000,
+-0xc8200017,
+-0xc81c0023,
+-0x0e240002,
+-0x99c00015,
+-0x7c418000,
+-0x0a200001,
+-0xce000056,
+-0xd4000440,
+-0xcc000040,
+-0xc036c000,
+-0xca140013,
+-0x96400007,
+-0x37747900,
+-0xcf400040,
+-0xcc000040,
+-0xc83003fa,
+-0x80000104,
+-0xcf000022,
+-0xcc000022,
+-0x9540015d,
+-0xcc00007f,
+-0xcca00046,
+-0x80000000,
+-0xcc200046,
+-0x80000261,
+-0xcc000064,
+-0xc8200017,
+-0xc810001f,
+-0x96000005,
+-0x09100001,
+-0xd4000440,
+-0xcd000040,
+-0xcd000022,
+-0xcc800040,
+-0xd0400040,
+-0xc80c0025,
+-0x94c0feeb,
+-0xc8100008,
+-0xcd000040,
+-0xd4000fc0,
+-0x80000000,
+-0xd4000fa2,
+-0x7c40c000,
+-0x7c410000,
+-0xccc003fd,
+-0xcd0003fc,
+-0xccc00042,
+-0xcd000042,
+-0x2914001f,
+-0x29180010,
+-0x31980007,
+-0x3b5c0001,
+-0x7d76000b,
+-0x99800005,
+-0x7d5e400b,
+-0xcc000042,
+-0x80000261,
+-0xcc00004d,
+-0x29980001,
+-0x292c0008,
+-0x9980003d,
+-0x32ec0001,
+-0x96000004,
+-0x2930000c,
+-0x80000261,
+-0xcc000042,
+-0x04140010,
+-0xcd400042,
+-0x33300001,
+-0x34280001,
+-0x8400015e,
+-0xc8140003,
+-0x9b40001b,
+-0x0438000c,
+-0x8400015e,
+-0xc8140003,
+-0x9b400017,
+-0x04380008,
+-0x8400015e,
+-0xc8140003,
+-0x9b400013,
+-0x04380004,
+-0x8400015e,
+-0xc8140003,
+-0x9b400015,
+-0xc80c03fd,
+-0x9a800009,
+-0xc81003fc,
+-0x9b000118,
+-0xcc00004d,
+-0x04140010,
+-0xccc00042,
+-0xcd000042,
+-0x80000136,
+-0xcd400042,
+-0x96c00111,
+-0xcc00004d,
+-0x80000261,
+-0xcc00004e,
+-0x9ac00003,
+-0xcc00004d,
+-0xcc00004e,
+-0xdf830000,
+-0x80000000,
+-0xd80301ff,
+-0x9ac00107,
+-0xcc00004d,
+-0x80000261,
+-0xcc00004e,
+-0xc8180003,
+-0xc81c0003,
+-0xc8200003,
+-0x7d5d4003,
+-0x7da1c003,
+-0x7d5d400c,
+-0x2a10001f,
+-0x299c001f,
+-0x7d1d000b,
+-0x7d17400b,
+-0x88000000,
+-0x7e92800b,
+-0x96400004,
+-0xcc00004e,
+-0x80000261,
+-0xcc000042,
+-0x04380008,
+-0xcf800042,
+-0xc8080003,
+-0xc80c0003,
+-0xc8100003,
+-0xc8140003,
+-0xc8180003,
+-0xc81c0003,
+-0xc8240003,
+-0xc8280003,
+-0x29fc001f,
+-0x2ab0001f,
+-0x7ff3c00b,
+-0x28f0001f,
+-0x7ff3c00b,
+-0x2970001f,
+-0x7ff3c00b,
+-0x7d888001,
+-0x7dccc001,
+-0x7e510001,
+-0x7e954001,
+-0x7c908002,
+-0x7cd4c002,
+-0x7cbc800b,
+-0x9ac00003,
+-0x7c8f400b,
+-0x38b40001,
+-0x9b4000d8,
+-0xcc00004d,
+-0x9bc000d6,
+-0xcc00004e,
+-0xc80c03fd,
+-0xc81003fc,
+-0xccc00042,
+-0x8000016f,
+-0xcd000042,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xcc400040,
+-0xcc400040,
+-0xcc400040,
+-0x7c40c000,
+-0xccc00040,
+-0xccc0000d,
+-0x80000000,
+-0xd0400040,
+-0x7c40c000,
+-0x7c410000,
+-0x65140020,
+-0x7d4d402c,
+-0x24580002,
+-0x7d598020,
+-0x7c41c000,
+-0xcd800042,
+-0x69980020,
+-0xcd800042,
+-0xcdc00042,
+-0xc023c000,
+-0x05e40002,
+-0x7ca0800b,
+-0x26640010,
+-0x7ca4800c,
+-0xcc800040,
+-0xcdc00040,
+-0xccc00040,
+-0x95c0000e,
+-0xcd000040,
+-0x09dc0001,
+-0xc8280003,
+-0x96800008,
+-0xce800040,
+-0xc834001d,
+-0x97400000,
+-0xc834001d,
+-0x26a80008,
+-0x84000264,
+-0xcc2b0000,
+-0x99c0fff7,
+-0x09dc0001,
+-0xdc3a0000,
+-0x97800004,
+-0x7c418000,
+-0x800001a3,
+-0x25980002,
+-0xa0000000,
+-0x7d808000,
+-0xc818001d,
+-0x7c40c000,
+-0x64d00008,
+-0x95800000,
+-0xc818001d,
+-0xcc130000,
+-0xcc800040,
+-0xccc00040,
+-0x80000000,
+-0xcc400040,
+-0xc810001f,
+-0x7c40c000,
+-0xcc800040,
+-0x7cd1400c,
+-0xcd400040,
+-0x05180001,
+-0x80000000,
+-0xcd800022,
+-0x7c40c000,
+-0x64500020,
+-0x84000264,
+-0xcc000061,
+-0x7cd0c02c,
+-0xc8200017,
+-0xc8d60000,
+-0x99400008,
+-0x7c438000,
+-0xdf830000,
+-0xcfa0004f,
+-0x84000264,
+-0xcc000062,
+-0x80000000,
+-0xd040007f,
+-0x80000261,
+-0xcc000062,
+-0x84000264,
+-0xcc000061,
+-0xc8200017,
+-0x7c40c000,
+-0xc036ff00,
+-0xc810000d,
+-0xc0303fff,
+-0x7cf5400b,
+-0x7d51800b,
+-0x7d81800f,
+-0x99800008,
+-0x7cf3800b,
+-0xdf830000,
+-0xcfa0004f,
+-0x84000264,
+-0xcc000062,
+-0x80000000,
+-0xd040007f,
+-0x80000261,
+-0xcc000062,
+-0x84000264,
+-0x7c40c000,
+-0x28dc0008,
+-0x95c00019,
+-0x30dc0010,
+-0x7c410000,
+-0x99c00004,
+-0x64540020,
+-0x80000209,
+-0xc91d0000,
+-0x7d15002c,
+-0xc91e0000,
+-0x7c420000,
+-0x7c424000,
+-0x7c418000,
+-0x7de5c00b,
+-0x7de28007,
+-0x9a80000e,
+-0x41ac0005,
+-0x9ac00000,
+-0x0aec0001,
+-0x30dc0010,
+-0x99c00004,
+-0x00000000,
+-0x8000020c,
+-0xc91d0000,
+-0x8000020c,
+-0xc91e0000,
+-0xcc800040,
+-0xccc00040,
+-0xd0400040,
+-0xc80c0025,
+-0x94c0fde3,
+-0xc8100008,
+-0xcd000040,
+-0xd4000fc0,
+-0x80000000,
+-0xd4000fa2,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x7c40c000,
+-0x30d00006,
+-0x0d100006,
+-0x99000007,
+-0xc8140015,
+-0x99400005,
+-0xcc000052,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xccc00040,
+-0x80000000,
+-0xd0400040,
+-0x7c40c000,
+-0xcc4d0000,
+-0xdc3a0000,
+-0x9780fdbc,
+-0x04cc0001,
+-0x80000243,
+-0xcc4d0000,
+-0x7c40c000,
+-0x7c410000,
+-0x29240018,
+-0x32640001,
+-0x9640000f,
+-0xcc800040,
+-0x7c414000,
+-0x7c418000,
+-0x7c41c000,
+-0xccc00043,
+-0xcd000043,
+-0x31dc7fff,
+-0xcdc00043,
+-0xccc00040,
+-0xcd000040,
+-0xcd400040,
+-0xcd800040,
+-0x80000000,
+-0xcdc00040,
+-0xccc00040,
+-0xcd000040,
+-0x80000000,
+-0xd0400040,
+-0x80000000,
+-0xd040007f,
+-0xcc00007f,
+-0x80000000,
+-0xcc00007f,
+-0xcc00007f,
+-0x88000000,
+-0xcc00007f,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00030223,
+-0x0004022b,
+-0x000500a0,
+-0x00020003,
+-0x0006003c,
+-0x00070027,
+-0x00080192,
+-0x00090044,
+-0x000a002d,
+-0x0010025f,
+-0x001700f1,
+-0x002201d8,
+-0x002301e9,
+-0x0026004c,
+-0x0027005f,
+-0x0020011b,
+-0x00280093,
+-0x0029004f,
+-0x002a0084,
+-0x002b0065,
+-0x002f008e,
+-0x003200d9,
+-0x00340233,
+-0x00360075,
+-0x0039010b,
+-0x003c01fd,
+-0x003f00a0,
+-0x00410248,
+-0x00440195,
+-0x0048019e,
+-0x004901c6,
+-0x004a01d0,
+-0x00550226,
+-0x0056022e,
+-0x0060000a,
+-0x0061002a,
+-0x00620030,
+-0x00630030,
+-0x00640030,
+-0x00650030,
+-0x00660030,
+-0x00670030,
+-0x00680037,
+-0x0069003f,
+-0x006a0047,
+-0x006b0047,
+-0x006c0047,
+-0x006d0047,
+-0x006e0047,
+-0x006f0047,
+-0x00700047,
+-0x0073025f,
+-0x007b0241,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-};
+-
+-static const u32 RV730_pfp_microcode[] = {
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x80000000,
+-0xdc030000,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xc818000e,
+-0x31980001,
+-0x7c424000,
+-0x9580023a,
+-0x7c428000,
+-0xc81c001c,
+-0xc037c000,
+-0x7c40c000,
+-0x7c410000,
+-0x7cb4800b,
+-0xc0360003,
+-0x99c00000,
+-0xc81c001c,
+-0x7cb4800c,
+-0x24d40002,
+-0x7d654000,
+-0xcd400043,
+-0xce800043,
+-0xcd000043,
+-0xcc800040,
+-0xce400040,
+-0xce800040,
+-0xccc00040,
+-0xdc3a0000,
+-0x9780ffde,
+-0xcd000040,
+-0x7c40c000,
+-0x80000018,
+-0x7c410000,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xc818000e,
+-0x8000000c,
+-0x31980002,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xc818000e,
+-0x288c0008,
+-0x30cc000f,
+-0x34100001,
+-0x7d0d0008,
+-0x8000000c,
+-0x7d91800b,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xcc4003f9,
+-0x80000249,
+-0xcc4003f8,
+-0xc037ffff,
+-0x7c414000,
+-0xcf41a29e,
+-0xc82003f8,
+-0xc81c03f9,
+-0x66200020,
+-0xc81803fb,
+-0x7de1c02c,
+-0x7d58c008,
+-0x7cdcc020,
+-0x69100020,
+-0xc0360003,
+-0xcc000054,
+-0x7cb4800c,
+-0x80000069,
+-0xcc800040,
+-0x7c418000,
+-0xcd81a29e,
+-0xcc800040,
+-0x80000067,
+-0xcd800040,
+-0xc019ffff,
+-0xcc800040,
+-0xcd81a29e,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0xccc1a1fa,
+-0xcd01a1f9,
+-0xcd41a29d,
+-0xccc00040,
+-0xcd000040,
+-0xcd400040,
+-0xcc400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xcc000054,
+-0xcc800040,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0xccc1a1fa,
+-0xcd01a1f9,
+-0xcd41a29d,
+-0xccc00040,
+-0xcd000040,
+-0xcd400040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x7c40c000,
+-0x30d00001,
+-0xccc1a29f,
+-0x95000003,
+-0x04140001,
+-0x04140002,
+-0xcd4003fb,
+-0xcc800040,
+-0x80000000,
+-0xccc00040,
+-0x7c40c000,
+-0xcc800040,
+-0xccc1a2a2,
+-0x80000000,
+-0xccc00040,
+-0x7c40c000,
+-0x28d4001f,
+-0xcc800040,
+-0x95400003,
+-0x7c410000,
+-0xccc00057,
+-0x2918001f,
+-0xccc00040,
+-0x95800003,
+-0xcd000040,
+-0xcd000058,
+-0x80000249,
+-0xcc00007f,
+-0xc8200017,
+-0xc8300022,
+-0x9a000006,
+-0x0e280001,
+-0xc824001e,
+-0x0a640001,
+-0xd4001240,
+-0xce400040,
+-0xc036c000,
+-0x96800007,
+-0x37747900,
+-0x041c0001,
+-0xcf400040,
+-0xcdc00040,
+-0xcf0003fa,
+-0x7c030000,
+-0xca0c0010,
+-0x7c410000,
+-0x94c00004,
+-0x7c414000,
+-0xd42002c4,
+-0xcde00044,
+-0x9b00000b,
+-0x7c418000,
+-0xcc00004b,
+-0xcda00049,
+-0xcd200041,
+-0xcd600041,
+-0xcda00041,
+-0x06200001,
+-0xce000056,
+-0x80000249,
+-0xcc00007f,
+-0xc8280020,
+-0xc82c0021,
+-0xcc000063,
+-0x7eea4001,
+-0x65740020,
+-0x7f53402c,
+-0x269c0002,
+-0x7df5c020,
+-0x69f80020,
+-0xce80004b,
+-0xce600049,
+-0xcde00041,
+-0xcfa00041,
+-0xce600041,
+-0x271c0002,
+-0x7df5c020,
+-0x69f80020,
+-0x7db24001,
+-0xcf00004b,
+-0xce600049,
+-0xcde00041,
+-0xcfa00041,
+-0x800000bc,
+-0xce600041,
+-0xc8200017,
+-0xc8300022,
+-0x9a000006,
+-0x0e280001,
+-0xc824001e,
+-0x0a640001,
+-0xd4001240,
+-0xce400040,
+-0xca0c0010,
+-0x7c410000,
+-0x94c0000b,
+-0xc036c000,
+-0x96800007,
+-0x37747900,
+-0x041c0001,
+-0xcf400040,
+-0xcdc00040,
+-0xcf0003fa,
+-0x7c030000,
+-0x800000b5,
+-0x7c414000,
+-0xcc000048,
+-0x800000ee,
+-0x00000000,
+-0xc8200017,
+-0xc81c0023,
+-0x0e240002,
+-0x99c00015,
+-0x7c418000,
+-0x0a200001,
+-0xce000056,
+-0xd4000440,
+-0xcc000040,
+-0xc036c000,
+-0xca140013,
+-0x96400007,
+-0x37747900,
+-0xcf400040,
+-0xcc000040,
+-0xc83003fa,
+-0x80000103,
+-0xcf000022,
+-0xcc000022,
+-0x95400146,
+-0xcc00007f,
+-0xcca00046,
+-0x80000000,
+-0xcc200046,
+-0x80000249,
+-0xcc000064,
+-0xc8200017,
+-0xc810001f,
+-0x96000005,
+-0x09100001,
+-0xd4000440,
+-0xcd000040,
+-0xcd000022,
+-0xcc800040,
+-0xd0400040,
+-0xc80c0025,
+-0x94c0feec,
+-0xc8100008,
+-0xcd000040,
+-0xd4000fc0,
+-0x80000000,
+-0xd4000fa2,
+-0x7c40c000,
+-0x7c410000,
+-0xccc003fd,
+-0xcd0003fc,
+-0xccc00042,
+-0xcd000042,
+-0x2914001f,
+-0x29180010,
+-0x31980007,
+-0x3b5c0001,
+-0x7d76000b,
+-0x99800005,
+-0x7d5e400b,
+-0xcc000042,
+-0x80000249,
+-0xcc00004d,
+-0x29980001,
+-0x292c0008,
+-0x9980003d,
+-0x32ec0001,
+-0x96000004,
+-0x2930000c,
+-0x80000249,
+-0xcc000042,
+-0x04140010,
+-0xcd400042,
+-0x33300001,
+-0x34280001,
+-0x8400015d,
+-0xc8140003,
+-0x9b40001b,
+-0x0438000c,
+-0x8400015d,
+-0xc8140003,
+-0x9b400017,
+-0x04380008,
+-0x8400015d,
+-0xc8140003,
+-0x9b400013,
+-0x04380004,
+-0x8400015d,
+-0xc8140003,
+-0x9b400015,
+-0xc80c03fd,
+-0x9a800009,
+-0xc81003fc,
+-0x9b000101,
+-0xcc00004d,
+-0x04140010,
+-0xccc00042,
+-0xcd000042,
+-0x80000135,
+-0xcd400042,
+-0x96c000fa,
+-0xcc00004d,
+-0x80000249,
+-0xcc00004e,
+-0x9ac00003,
+-0xcc00004d,
+-0xcc00004e,
+-0xdf830000,
+-0x80000000,
+-0xd80301ff,
+-0x9ac000f0,
+-0xcc00004d,
+-0x80000249,
+-0xcc00004e,
+-0xc8180003,
+-0xc81c0003,
+-0xc8200003,
+-0x7d5d4003,
+-0x7da1c003,
+-0x7d5d400c,
+-0x2a10001f,
+-0x299c001f,
+-0x7d1d000b,
+-0x7d17400b,
+-0x88000000,
+-0x7e92800b,
+-0x96400004,
+-0xcc00004e,
+-0x80000249,
+-0xcc000042,
+-0x04380008,
+-0xcf800042,
+-0xc8080003,
+-0xc80c0003,
+-0xc8100003,
+-0xc8140003,
+-0xc8180003,
+-0xc81c0003,
+-0xc8240003,
+-0xc8280003,
+-0x29fc001f,
+-0x2ab0001f,
+-0x7ff3c00b,
+-0x28f0001f,
+-0x7ff3c00b,
+-0x2970001f,
+-0x7ff3c00b,
+-0x7d888001,
+-0x7dccc001,
+-0x7e510001,
+-0x7e954001,
+-0x7c908002,
+-0x7cd4c002,
+-0x7cbc800b,
+-0x9ac00003,
+-0x7c8f400b,
+-0x38b40001,
+-0x9b4000c1,
+-0xcc00004d,
+-0x9bc000bf,
+-0xcc00004e,
+-0xc80c03fd,
+-0xc81003fc,
+-0xccc00042,
+-0x8000016e,
+-0xcd000042,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xcc400040,
+-0xcc400040,
+-0xcc400040,
+-0x7c40c000,
+-0xccc00040,
+-0xccc0000d,
+-0x80000000,
+-0xd0400040,
+-0x7c40c000,
+-0x7c410000,
+-0x65140020,
+-0x7d4d402c,
+-0x24580002,
+-0x7d598020,
+-0x7c41c000,
+-0xcd800042,
+-0x69980020,
+-0xcd800042,
+-0xcdc00042,
+-0xc023c000,
+-0x05e40002,
+-0x7ca0800b,
+-0x26640010,
+-0x7ca4800c,
+-0xcc800040,
+-0xcdc00040,
+-0xccc00040,
+-0x95c0000e,
+-0xcd000040,
+-0x09dc0001,
+-0xc8280003,
+-0x96800008,
+-0xce800040,
+-0xc834001d,
+-0x97400000,
+-0xc834001d,
+-0x26a80008,
+-0x8400024c,
+-0xcc2b0000,
+-0x99c0fff7,
+-0x09dc0001,
+-0xdc3a0000,
+-0x97800004,
+-0x7c418000,
+-0x800001a2,
+-0x25980002,
+-0xa0000000,
+-0x7d808000,
+-0xc818001d,
+-0x7c40c000,
+-0x64d00008,
+-0x95800000,
+-0xc818001d,
+-0xcc130000,
+-0xcc800040,
+-0xccc00040,
+-0x80000000,
+-0xcc400040,
+-0xc810001f,
+-0x7c40c000,
+-0xcc800040,
+-0x7cd1400c,
+-0xcd400040,
+-0x05180001,
+-0x80000000,
+-0xcd800022,
+-0x7c40c000,
+-0x64500020,
+-0x8400024c,
+-0xcc000061,
+-0x7cd0c02c,
+-0xc8200017,
+-0xc8d60000,
+-0x99400008,
+-0x7c438000,
+-0xdf830000,
+-0xcfa0004f,
+-0x8400024c,
+-0xcc000062,
+-0x80000000,
+-0xd040007f,
+-0x80000249,
+-0xcc000062,
+-0x8400024c,
+-0xcc000061,
+-0xc8200017,
+-0x7c40c000,
+-0xc036ff00,
+-0xc810000d,
+-0xc0303fff,
+-0x7cf5400b,
+-0x7d51800b,
+-0x7d81800f,
+-0x99800008,
+-0x7cf3800b,
+-0xdf830000,
+-0xcfa0004f,
+-0x8400024c,
+-0xcc000062,
+-0x80000000,
+-0xd040007f,
+-0x80000249,
+-0xcc000062,
+-0x8400024c,
+-0x7c40c000,
+-0x28dc0008,
+-0x95c00019,
+-0x30dc0010,
+-0x7c410000,
+-0x99c00004,
+-0x64540020,
+-0x80000208,
+-0xc91d0000,
+-0x7d15002c,
+-0xc91e0000,
+-0x7c420000,
+-0x7c424000,
+-0x7c418000,
+-0x7de5c00b,
+-0x7de28007,
+-0x9a80000e,
+-0x41ac0005,
+-0x9ac00000,
+-0x0aec0001,
+-0x30dc0010,
+-0x99c00004,
+-0x00000000,
+-0x8000020b,
+-0xc91d0000,
+-0x8000020b,
+-0xc91e0000,
+-0xcc800040,
+-0xccc00040,
+-0xd0400040,
+-0xc80c0025,
+-0x94c0fde4,
+-0xc8100008,
+-0xcd000040,
+-0xd4000fc0,
+-0x80000000,
+-0xd4000fa2,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x7c40c000,
+-0x30d00006,
+-0x0d100006,
+-0x99000007,
+-0xc8140015,
+-0x99400005,
+-0xcc000052,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xccc00040,
+-0x80000000,
+-0xd0400040,
+-0x7c40c000,
+-0xcc4d0000,
+-0xdc3a0000,
+-0x9780fdbd,
+-0x04cc0001,
+-0x80000242,
+-0xcc4d0000,
+-0x80000000,
+-0xd040007f,
+-0xcc00007f,
+-0x80000000,
+-0xcc00007f,
+-0xcc00007f,
+-0x88000000,
+-0xcc00007f,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00030222,
+-0x0004022a,
+-0x0005009f,
+-0x00020003,
+-0x0006003c,
+-0x00070027,
+-0x00080191,
+-0x00090044,
+-0x000a002d,
+-0x00100247,
+-0x001700f0,
+-0x002201d7,
+-0x002301e8,
+-0x0026004c,
+-0x0027005f,
+-0x0020011a,
+-0x00280092,
+-0x0029004f,
+-0x002a0083,
+-0x002b0064,
+-0x002f008d,
+-0x003200d8,
+-0x00340232,
+-0x00360074,
+-0x0039010a,
+-0x003c01fc,
+-0x003f009f,
+-0x00410005,
+-0x00440194,
+-0x0048019d,
+-0x004901c5,
+-0x004a01cf,
+-0x00550225,
+-0x0056022d,
+-0x0060000a,
+-0x0061002a,
+-0x00620030,
+-0x00630030,
+-0x00640030,
+-0x00650030,
+-0x00660030,
+-0x00670030,
+-0x00680037,
+-0x0069003f,
+-0x006a0047,
+-0x006b0047,
+-0x006c0047,
+-0x006d0047,
+-0x006e0047,
+-0x006f0047,
+-0x00700047,
+-0x00730247,
+-0x007b0240,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-};
+-
+-static const u32 RV730_cp_microcode[] = {
+-0xcc0003ea,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x80000001,
+-0xd040007f,
+-0x80000001,
+-0xcc400041,
+-0x7c40c000,
+-0xc0160004,
+-0x30d03fff,
+-0x7d15000c,
+-0xcc110000,
+-0x28d8001e,
+-0x31980001,
+-0x28dc001f,
+-0xc8200004,
+-0x95c00006,
+-0x7c424000,
+-0xcc000062,
+-0x7e56800c,
+-0xcc290000,
+-0xc8240004,
+-0x7e26000b,
+-0x95800006,
+-0x7c42c000,
+-0xcc000062,
+-0x7ed7000c,
+-0xcc310000,
+-0xc82c0004,
+-0x7e2e000c,
+-0xcc000062,
+-0x31103fff,
+-0x80000001,
+-0xce110000,
+-0x7c40c000,
+-0x80000001,
+-0xcc400040,
+-0x80000001,
+-0xcc412257,
+-0x7c418000,
+-0xcc400045,
+-0xcc400048,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xcc400045,
+-0xcc400048,
+-0x7c40c000,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xcc000045,
+-0xcc000048,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x040ca1fd,
+-0xc0120001,
+-0xcc000045,
+-0xcc000048,
+-0x7cd0c00c,
+-0xcc41225c,
+-0xcc41a1fc,
+-0xd04d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x80000001,
+-0xcc41225d,
+-0x7c408000,
+-0x7c40c000,
+-0xc02a0002,
+-0x7c410000,
+-0x7d29000c,
+-0x30940001,
+-0x30980006,
+-0x309c0300,
+-0x29dc0008,
+-0x7c420000,
+-0x7c424000,
+-0x9540000f,
+-0xc02e0004,
+-0x05f02258,
+-0x7f2f000c,
+-0xcc310000,
+-0xc8280004,
+-0xccc12169,
+-0xcd01216a,
+-0xce81216b,
+-0x0db40002,
+-0xcc01216c,
+-0x9740000e,
+-0x0db40000,
+-0x8000007b,
+-0xc834000a,
+-0x0db40002,
+-0x97400009,
+-0x0db40000,
+-0xc02e0004,
+-0x05f02258,
+-0x7f2f000c,
+-0xcc310000,
+-0xc8280004,
+-0x8000007b,
+-0xc834000a,
+-0x97400004,
+-0x7e028000,
+-0x8000007b,
+-0xc834000a,
+-0x0db40004,
+-0x9740ff8c,
+-0x00000000,
+-0xce01216d,
+-0xce41216e,
+-0xc8280003,
+-0xc834000a,
+-0x9b400004,
+-0x043c0005,
+-0x8400026b,
+-0xcc000062,
+-0x0df40000,
+-0x9740000b,
+-0xc82c03e6,
+-0xce81a2b7,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c4,
+-0x80000001,
+-0xcfc1a2d1,
+-0x0df40001,
+-0x9740000b,
+-0xc82c03e7,
+-0xce81a2bb,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c5,
+-0x80000001,
+-0xcfc1a2d2,
+-0x0df40002,
+-0x9740000b,
+-0xc82c03e8,
+-0xce81a2bf,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c6,
+-0x80000001,
+-0xcfc1a2d3,
+-0xc82c03e9,
+-0xce81a2c3,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c7,
+-0x80000001,
+-0xcfc1a2d4,
+-0x80000001,
+-0xcc400042,
+-0x7c40c000,
+-0x7c410000,
+-0x2914001d,
+-0x31540001,
+-0x9940000c,
+-0x31181000,
+-0xc81c0011,
+-0x95c00000,
+-0xc81c0011,
+-0xccc12100,
+-0xcd012101,
+-0xccc12102,
+-0xcd012103,
+-0x04180004,
+-0x8000037c,
+-0xcd81a2a4,
+-0xc02a0004,
+-0x95800008,
+-0x36a821a3,
+-0xcc290000,
+-0xc8280004,
+-0xc81c0011,
+-0x0de40040,
+-0x9640ffff,
+-0xc81c0011,
+-0xccc12170,
+-0xcd012171,
+-0xc8200012,
+-0x96000000,
+-0xc8200012,
+-0x8000037c,
+-0xcc000064,
+-0x7c40c000,
+-0x7c410000,
+-0xcc000045,
+-0xcc000048,
+-0x40d40003,
+-0xcd41225c,
+-0xcd01a1fc,
+-0xc01a0001,
+-0x041ca1fd,
+-0x7dd9c00c,
+-0x7c420000,
+-0x08cc0001,
+-0x06240001,
+-0x06280002,
+-0xce1d0000,
+-0xce5d0000,
+-0x98c0fffa,
+-0xce9d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x7c40c000,
+-0x30d00001,
+-0x28cc0001,
+-0x7c414000,
+-0x95000006,
+-0x7c418000,
+-0xcd41216d,
+-0xcd81216e,
+-0x800000f2,
+-0xc81c0003,
+-0xc0220004,
+-0x7e16000c,
+-0xcc210000,
+-0xc81c0004,
+-0x7c424000,
+-0x98c00004,
+-0x7c428000,
+-0x80000001,
+-0xcde50000,
+-0xce412169,
+-0xce81216a,
+-0xcdc1216b,
+-0x80000001,
+-0xcc01216c,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0x7c41c000,
+-0x28a40008,
+-0x326400ff,
+-0x0e68003c,
+-0x9680000a,
+-0x7c020000,
+-0x7c420000,
+-0x1e300003,
+-0xcc00006a,
+-0x9b000003,
+-0x42200005,
+-0x04200040,
+-0x8000010f,
+-0x7c024000,
+-0x7e024000,
+-0x9a400000,
+-0x0a640001,
+-0x30ec0010,
+-0x9ac0000a,
+-0xcc000062,
+-0xc02a0004,
+-0xc82c0021,
+-0x7e92800c,
+-0xcc000041,
+-0xcc290000,
+-0xcec00021,
+-0x8000011f,
+-0xc8300004,
+-0xcd01216d,
+-0xcd41216e,
+-0xc8300003,
+-0x7f1f000b,
+-0x30f40007,
+-0x27780001,
+-0x9740002a,
+-0x07b80124,
+-0x9f800000,
+-0x00000000,
+-0x80000134,
+-0x7f1b8004,
+-0x80000138,
+-0x7f1b8005,
+-0x8000013c,
+-0x7f1b8002,
+-0x80000140,
+-0x7f1b8003,
+-0x80000144,
+-0x7f1b8007,
+-0x80000148,
+-0x7f1b8006,
+-0x8000014d,
+-0x28a40008,
+-0x9b800019,
+-0x28a40008,
+-0x8000015d,
+-0x326400ff,
+-0x9b800015,
+-0x28a40008,
+-0x8000015d,
+-0x326400ff,
+-0x9b800011,
+-0x28a40008,
+-0x8000015d,
+-0x326400ff,
+-0x9b80000d,
+-0x28a40008,
+-0x8000015d,
+-0x326400ff,
+-0x9b800009,
+-0x28a40008,
+-0x8000015d,
+-0x326400ff,
+-0x9b800005,
+-0x28a40008,
+-0x8000015d,
+-0x326400ff,
+-0x28a40008,
+-0x326400ff,
+-0x0e68003c,
+-0x9a80feb2,
+-0x28ec0008,
+-0x7c434000,
+-0x7c438000,
+-0x7c43c000,
+-0x96c00007,
+-0xcc000062,
+-0xcf412169,
+-0xcf81216a,
+-0xcfc1216b,
+-0x80000001,
+-0xcc01216c,
+-0x80000001,
+-0xcff50000,
+-0xcc00006b,
+-0x8400037f,
+-0x0e68003c,
+-0x9a800004,
+-0xc8280015,
+-0x80000001,
+-0xd040007f,
+-0x9680ffab,
+-0x7e024000,
+-0x84000239,
+-0xc00e0002,
+-0xcc000041,
+-0x80000237,
+-0xccc1304a,
+-0x7c40c000,
+-0x7c410000,
+-0xc01e0001,
+-0x29240012,
+-0xc0220002,
+-0x96400005,
+-0xc0260004,
+-0xc027fffb,
+-0x7d25000b,
+-0xc0260000,
+-0x7dd2800b,
+-0x7e12c00b,
+-0x7d25000c,
+-0x7c414000,
+-0x7c418000,
+-0xccc12169,
+-0x9a80000a,
+-0xcd01216a,
+-0xcd41216b,
+-0x96c0fe83,
+-0xcd81216c,
+-0xc8300018,
+-0x97000000,
+-0xc8300018,
+-0x80000001,
+-0xcc000018,
+-0x8400037f,
+-0xcc00007f,
+-0xc8140013,
+-0xc8180014,
+-0xcd41216b,
+-0x96c0fe77,
+-0xcd81216c,
+-0x80000181,
+-0xc8300018,
+-0xc80c0008,
+-0x98c00000,
+-0xc80c0008,
+-0x7c410000,
+-0x95000002,
+-0x00000000,
+-0x7c414000,
+-0xc8200009,
+-0xcc400043,
+-0xce01a1f4,
+-0xcc400044,
+-0xc00e8000,
+-0x7c424000,
+-0x7c428000,
+-0x2aac001f,
+-0x96c0fe64,
+-0xc035f000,
+-0xce4003e2,
+-0x32780003,
+-0x267c0008,
+-0x7ff7c00b,
+-0x7ffbc00c,
+-0x2a780018,
+-0xcfc003e3,
+-0xcf8003e4,
+-0x26b00002,
+-0x7f3f0000,
+-0xcf0003e5,
+-0x8000031d,
+-0x7c80c000,
+-0x7c40c000,
+-0x28d00008,
+-0x3110000f,
+-0x9500000f,
+-0x25280001,
+-0x06a801b2,
+-0x9e800000,
+-0x00000000,
+-0x800001d3,
+-0xc0120800,
+-0x800001e1,
+-0xc814000f,
+-0x800001e8,
+-0xc8140010,
+-0x800001ef,
+-0xccc1a2a4,
+-0x800001f8,
+-0xc8140011,
+-0x30d0003f,
+-0x0d280015,
+-0x9a800012,
+-0x0d28001e,
+-0x9a80001e,
+-0x0d280020,
+-0x9a800023,
+-0x0d24000f,
+-0x0d280010,
+-0x7e6a800c,
+-0x9a800026,
+-0x0d200004,
+-0x0d240014,
+-0x0d280028,
+-0x7e62400c,
+-0x7ea6800c,
+-0x9a80002a,
+-0xc8140011,
+-0x80000001,
+-0xccc1a2a4,
+-0xc0120800,
+-0x7c414000,
+-0x7d0cc00c,
+-0xc0120008,
+-0x29580003,
+-0x295c000c,
+-0x7c420000,
+-0x7dd1c00b,
+-0x26200014,
+-0x7e1e400c,
+-0x7e4e800c,
+-0xce81a2a4,
+-0x80000001,
+-0xcd81a1fe,
+-0xc814000f,
+-0x0410210e,
+-0x95400000,
+-0xc814000f,
+-0xd0510000,
+-0x80000001,
+-0xccc1a2a4,
+-0xc8140010,
+-0x04102108,
+-0x95400000,
+-0xc8140010,
+-0xd0510000,
+-0x80000001,
+-0xccc1a2a4,
+-0xccc1a2a4,
+-0x04100001,
+-0xcd000019,
+-0x8400037f,
+-0xcc00007f,
+-0xc8100019,
+-0x99000000,
+-0xc8100019,
+-0x80000002,
+-0x7c408000,
+-0x04102100,
+-0x95400000,
+-0xc8140011,
+-0xd0510000,
+-0x8000037c,
+-0xccc1a2a4,
+-0x7c40c000,
+-0xcc40000d,
+-0x94c0fe01,
+-0xcc40000e,
+-0x7c410000,
+-0x95000005,
+-0x08cc0001,
+-0xc8140005,
+-0x99400014,
+-0x00000000,
+-0x98c0fffb,
+-0x7c410000,
+-0x80000002,
+-0x7d008000,
+-0xc8140005,
+-0x7c40c000,
+-0x9940000c,
+-0xc818000c,
+-0x7c410000,
+-0x9580fdf0,
+-0xc820000e,
+-0xc81c000d,
+-0x66200020,
+-0x7e1e002c,
+-0x25240002,
+-0x7e624020,
+-0x80000001,
+-0xcce60000,
+-0x7c410000,
+-0xcc00006c,
+-0xcc00006d,
+-0xc818001f,
+-0xc81c001e,
+-0x65980020,
+-0x7dd9c02c,
+-0x7cd4c00c,
+-0xccde0000,
+-0x45dc0004,
+-0xc8280017,
+-0x9680000f,
+-0xc00e0001,
+-0x28680008,
+-0x2aac0016,
+-0x32a800ff,
+-0x0eb00049,
+-0x7f2f000b,
+-0x97000006,
+-0x00000000,
+-0xc8140005,
+-0x7c40c000,
+-0x80000221,
+-0x7c410000,
+-0x80000224,
+-0xd040007f,
+-0x84000239,
+-0xcc000041,
+-0xccc1304a,
+-0x94000000,
+-0xc83c001a,
+-0x043c0005,
+-0xcfc1a2a4,
+-0xc0361f90,
+-0xc0387fff,
+-0x7c03c010,
+-0x7f7b400c,
+-0xcf41217c,
+-0xcfc1217d,
+-0xcc01217e,
+-0xc03a0004,
+-0x0434217f,
+-0x7f7b400c,
+-0xcc350000,
+-0xc83c0004,
+-0x2bfc001f,
+-0x04380020,
+-0x97c00005,
+-0xcc000062,
+-0x9b800000,
+-0x0bb80001,
+-0x80000245,
+-0xcc000071,
+-0xcc01a1f4,
+-0x04380016,
+-0xc0360002,
+-0xcf81a2a4,
+-0x88000000,
+-0xcf412010,
+-0x7c40c000,
+-0x28d0001c,
+-0x95000005,
+-0x04d40001,
+-0xcd400065,
+-0x80000001,
+-0xcd400068,
+-0x09540002,
+-0x80000001,
+-0xcd400066,
+-0x8400026a,
+-0xc81803ea,
+-0x7c40c000,
+-0x9980fd9f,
+-0xc8140016,
+-0x08d00001,
+-0x9940002b,
+-0xcd000068,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x043c0005,
+-0xcfc1a2a4,
+-0xcc01a1f4,
+-0x8400037f,
+-0xcc000046,
+-0x88000000,
+-0xcc00007f,
+-0x8400027c,
+-0xc81803ea,
+-0x7c40c000,
+-0x9980fd8d,
+-0xc8140016,
+-0x08d00001,
+-0x99400019,
+-0xcd000068,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x043c0022,
+-0xcfc1a2a4,
+-0x8400037f,
+-0xcc000047,
+-0x88000000,
+-0xcc00007f,
+-0xc8100016,
+-0x9900000d,
+-0xcc400067,
+-0x80000002,
+-0x7c408000,
+-0xc81803ea,
+-0x9980fd79,
+-0x7c40c000,
+-0x94c00003,
+-0xc8100016,
+-0x99000004,
+-0xccc00068,
+-0x80000002,
+-0x7c408000,
+-0x84000239,
+-0xc0148000,
+-0xcc000041,
+-0xcd41304a,
+-0xc0148000,
+-0x99000000,
+-0xc8100016,
+-0x80000002,
+-0x7c408000,
+-0xc0120001,
+-0x7c51400c,
+-0x80000001,
+-0xd0550000,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0x291c001f,
+-0xccc0004a,
+-0xcd00004b,
+-0x95c00003,
+-0xc01c8000,
+-0xcdc12010,
+-0xdd830000,
+-0x055c2000,
+-0xcc000062,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc0004c,
+-0xcd00004d,
+-0xdd830000,
+-0x055ca000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc0004e,
+-0xcd00004f,
+-0xdd830000,
+-0x055cc000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00050,
+-0xcd000051,
+-0xdd830000,
+-0x055cf8e0,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00052,
+-0xcd000053,
+-0xdd830000,
+-0x055cf880,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00054,
+-0xcd000055,
+-0xdd830000,
+-0x055ce000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00056,
+-0xcd000057,
+-0xdd830000,
+-0x055cf000,
+-0x80000001,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00058,
+-0xcd000059,
+-0xdd830000,
+-0x055cf3fc,
+-0x80000001,
+-0xd81f4100,
+-0xd0432000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043a000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043c000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f8e0,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f880,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043e000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f3fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xc81403e0,
+-0xcc430000,
+-0xcc430000,
+-0xcc430000,
+-0x7d45c000,
+-0xcdc30000,
+-0xd0430000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x7c40c000,
+-0xc81003e2,
+-0xc81403e5,
+-0xc81803e3,
+-0xc81c03e4,
+-0xcd812169,
+-0xcdc1216a,
+-0xccc1216b,
+-0xcc01216c,
+-0x04200004,
+-0x7da18000,
+-0x7d964002,
+-0x9640fcd9,
+-0xcd8003e3,
+-0x31280003,
+-0xc02df000,
+-0x25180008,
+-0x7dad800b,
+-0x7da9800c,
+-0x80000001,
+-0xcd8003e3,
+-0x308cffff,
+-0xd04d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xc8140020,
+-0x15580002,
+-0x9580ffff,
+-0xc8140020,
+-0xcc00006e,
+-0xcc412180,
+-0x7c40c000,
+-0xccc1218d,
+-0xcc412181,
+-0x28d0001f,
+-0x34588000,
+-0xcd81218c,
+-0x9500fcbf,
+-0xcc412182,
+-0xc8140020,
+-0x9940ffff,
+-0xc8140020,
+-0x80000002,
+-0x7c408000,
+-0x7c40c000,
+-0x28d00018,
+-0x31100001,
+-0xc0160080,
+-0x95000003,
+-0xc02a0004,
+-0x7cd4c00c,
+-0xccc1217c,
+-0xcc41217d,
+-0xcc41217e,
+-0x7c418000,
+-0x1db00003,
+-0x36a0217f,
+-0x9b000003,
+-0x419c0005,
+-0x041c0040,
+-0x99c00000,
+-0x09dc0001,
+-0xcc210000,
+-0xc8240004,
+-0x2a6c001f,
+-0x419c0005,
+-0x9ac0fffa,
+-0xcc800062,
+-0x80000002,
+-0x7c408000,
+-0x7c40c000,
+-0x04d403e6,
+-0x80000001,
+-0xcc540000,
+-0x8000037c,
+-0xcc4003ea,
+-0xc01c8000,
+-0x044ca000,
+-0xcdc12010,
+-0x7c410000,
+-0xc8140009,
+-0x04180000,
+-0x041c0008,
+-0xcd800071,
+-0x09dc0001,
+-0x05980001,
+-0xcd0d0000,
+-0x99c0fffc,
+-0xcc800062,
+-0x8000037c,
+-0xcd400071,
+-0xc00e0100,
+-0xcc000041,
+-0xccc1304a,
+-0xc83c007f,
+-0xcc00007f,
+-0x80000001,
+-0xcc00007f,
+-0xcc00007f,
+-0x88000000,
+-0xcc00007f,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00010331,
+-0x00100004,
+-0x00170006,
+-0x00210008,
+-0x00270028,
+-0x00280023,
+-0x00290029,
+-0x002a0026,
+-0x002b0029,
+-0x002d0038,
+-0x002e003f,
+-0x002f004a,
+-0x0034004c,
+-0x00360030,
+-0x003900af,
+-0x003a00cf,
+-0x003b00e4,
+-0x003c00fc,
+-0x003d016b,
+-0x003f00ad,
+-0x00410336,
+-0x00430349,
+-0x0044018e,
+-0x004500fc,
+-0x004601ac,
+-0x004701ac,
+-0x004801fe,
+-0x0049020c,
+-0x004a0255,
+-0x004b0282,
+-0x0052025f,
+-0x00530271,
+-0x00540287,
+-0x00570299,
+-0x0060029d,
+-0x006102ac,
+-0x006202b6,
+-0x006302c0,
+-0x006402ca,
+-0x006502d4,
+-0x006602de,
+-0x006702e8,
+-0x006802f2,
+-0x006902f6,
+-0x006a02fa,
+-0x006b02fe,
+-0x006c0302,
+-0x006d0306,
+-0x006e030a,
+-0x006f030e,
+-0x00700312,
+-0x00720363,
+-0x00740369,
+-0x00790367,
+-0x007c031c,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-0x000f0378,
+-};
+-
+-static const u32 RV710_pfp_microcode[] = {
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x80000000,
+-0xdc030000,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xc818000e,
+-0x31980001,
+-0x7c424000,
+-0x9580023a,
+-0x7c428000,
+-0xc81c001c,
+-0xc037c000,
+-0x7c40c000,
+-0x7c410000,
+-0x7cb4800b,
+-0xc0360003,
+-0x99c00000,
+-0xc81c001c,
+-0x7cb4800c,
+-0x24d40002,
+-0x7d654000,
+-0xcd400043,
+-0xce800043,
+-0xcd000043,
+-0xcc800040,
+-0xce400040,
+-0xce800040,
+-0xccc00040,
+-0xdc3a0000,
+-0x9780ffde,
+-0xcd000040,
+-0x7c40c000,
+-0x80000018,
+-0x7c410000,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xc818000e,
+-0x8000000c,
+-0x31980002,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xc818000e,
+-0x288c0008,
+-0x30cc000f,
+-0x34100001,
+-0x7d0d0008,
+-0x8000000c,
+-0x7d91800b,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xcc4003f9,
+-0x80000249,
+-0xcc4003f8,
+-0xc037ffff,
+-0x7c414000,
+-0xcf41a29e,
+-0xc82003f8,
+-0xc81c03f9,
+-0x66200020,
+-0xc81803fb,
+-0x7de1c02c,
+-0x7d58c008,
+-0x7cdcc020,
+-0x69100020,
+-0xc0360003,
+-0xcc000054,
+-0x7cb4800c,
+-0x80000069,
+-0xcc800040,
+-0x7c418000,
+-0xcd81a29e,
+-0xcc800040,
+-0x80000067,
+-0xcd800040,
+-0xc019ffff,
+-0xcc800040,
+-0xcd81a29e,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0xccc1a1fa,
+-0xcd01a1f9,
+-0xcd41a29d,
+-0xccc00040,
+-0xcd000040,
+-0xcd400040,
+-0xcc400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xcc000054,
+-0xcc800040,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0xccc1a1fa,
+-0xcd01a1f9,
+-0xcd41a29d,
+-0xccc00040,
+-0xcd000040,
+-0xcd400040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x7c40c000,
+-0x30d00001,
+-0xccc1a29f,
+-0x95000003,
+-0x04140001,
+-0x04140002,
+-0xcd4003fb,
+-0xcc800040,
+-0x80000000,
+-0xccc00040,
+-0x7c40c000,
+-0xcc800040,
+-0xccc1a2a2,
+-0x80000000,
+-0xccc00040,
+-0x7c40c000,
+-0x28d4001f,
+-0xcc800040,
+-0x95400003,
+-0x7c410000,
+-0xccc00057,
+-0x2918001f,
+-0xccc00040,
+-0x95800003,
+-0xcd000040,
+-0xcd000058,
+-0x80000249,
+-0xcc00007f,
+-0xc8200017,
+-0xc8300022,
+-0x9a000006,
+-0x0e280001,
+-0xc824001e,
+-0x0a640001,
+-0xd4001240,
+-0xce400040,
+-0xc036c000,
+-0x96800007,
+-0x37747900,
+-0x041c0001,
+-0xcf400040,
+-0xcdc00040,
+-0xcf0003fa,
+-0x7c030000,
+-0xca0c0010,
+-0x7c410000,
+-0x94c00004,
+-0x7c414000,
+-0xd42002c4,
+-0xcde00044,
+-0x9b00000b,
+-0x7c418000,
+-0xcc00004b,
+-0xcda00049,
+-0xcd200041,
+-0xcd600041,
+-0xcda00041,
+-0x06200001,
+-0xce000056,
+-0x80000249,
+-0xcc00007f,
+-0xc8280020,
+-0xc82c0021,
+-0xcc000063,
+-0x7eea4001,
+-0x65740020,
+-0x7f53402c,
+-0x269c0002,
+-0x7df5c020,
+-0x69f80020,
+-0xce80004b,
+-0xce600049,
+-0xcde00041,
+-0xcfa00041,
+-0xce600041,
+-0x271c0002,
+-0x7df5c020,
+-0x69f80020,
+-0x7db24001,
+-0xcf00004b,
+-0xce600049,
+-0xcde00041,
+-0xcfa00041,
+-0x800000bc,
+-0xce600041,
+-0xc8200017,
+-0xc8300022,
+-0x9a000006,
+-0x0e280001,
+-0xc824001e,
+-0x0a640001,
+-0xd4001240,
+-0xce400040,
+-0xca0c0010,
+-0x7c410000,
+-0x94c0000b,
+-0xc036c000,
+-0x96800007,
+-0x37747900,
+-0x041c0001,
+-0xcf400040,
+-0xcdc00040,
+-0xcf0003fa,
+-0x7c030000,
+-0x800000b5,
+-0x7c414000,
+-0xcc000048,
+-0x800000ee,
+-0x00000000,
+-0xc8200017,
+-0xc81c0023,
+-0x0e240002,
+-0x99c00015,
+-0x7c418000,
+-0x0a200001,
+-0xce000056,
+-0xd4000440,
+-0xcc000040,
+-0xc036c000,
+-0xca140013,
+-0x96400007,
+-0x37747900,
+-0xcf400040,
+-0xcc000040,
+-0xc83003fa,
+-0x80000103,
+-0xcf000022,
+-0xcc000022,
+-0x95400146,
+-0xcc00007f,
+-0xcca00046,
+-0x80000000,
+-0xcc200046,
+-0x80000249,
+-0xcc000064,
+-0xc8200017,
+-0xc810001f,
+-0x96000005,
+-0x09100001,
+-0xd4000440,
+-0xcd000040,
+-0xcd000022,
+-0xcc800040,
+-0xd0400040,
+-0xc80c0025,
+-0x94c0feec,
+-0xc8100008,
+-0xcd000040,
+-0xd4000fc0,
+-0x80000000,
+-0xd4000fa2,
+-0x7c40c000,
+-0x7c410000,
+-0xccc003fd,
+-0xcd0003fc,
+-0xccc00042,
+-0xcd000042,
+-0x2914001f,
+-0x29180010,
+-0x31980007,
+-0x3b5c0001,
+-0x7d76000b,
+-0x99800005,
+-0x7d5e400b,
+-0xcc000042,
+-0x80000249,
+-0xcc00004d,
+-0x29980001,
+-0x292c0008,
+-0x9980003d,
+-0x32ec0001,
+-0x96000004,
+-0x2930000c,
+-0x80000249,
+-0xcc000042,
+-0x04140010,
+-0xcd400042,
+-0x33300001,
+-0x34280001,
+-0x8400015d,
+-0xc8140003,
+-0x9b40001b,
+-0x0438000c,
+-0x8400015d,
+-0xc8140003,
+-0x9b400017,
+-0x04380008,
+-0x8400015d,
+-0xc8140003,
+-0x9b400013,
+-0x04380004,
+-0x8400015d,
+-0xc8140003,
+-0x9b400015,
+-0xc80c03fd,
+-0x9a800009,
+-0xc81003fc,
+-0x9b000101,
+-0xcc00004d,
+-0x04140010,
+-0xccc00042,
+-0xcd000042,
+-0x80000135,
+-0xcd400042,
+-0x96c000fa,
+-0xcc00004d,
+-0x80000249,
+-0xcc00004e,
+-0x9ac00003,
+-0xcc00004d,
+-0xcc00004e,
+-0xdf830000,
+-0x80000000,
+-0xd80301ff,
+-0x9ac000f0,
+-0xcc00004d,
+-0x80000249,
+-0xcc00004e,
+-0xc8180003,
+-0xc81c0003,
+-0xc8200003,
+-0x7d5d4003,
+-0x7da1c003,
+-0x7d5d400c,
+-0x2a10001f,
+-0x299c001f,
+-0x7d1d000b,
+-0x7d17400b,
+-0x88000000,
+-0x7e92800b,
+-0x96400004,
+-0xcc00004e,
+-0x80000249,
+-0xcc000042,
+-0x04380008,
+-0xcf800042,
+-0xc8080003,
+-0xc80c0003,
+-0xc8100003,
+-0xc8140003,
+-0xc8180003,
+-0xc81c0003,
+-0xc8240003,
+-0xc8280003,
+-0x29fc001f,
+-0x2ab0001f,
+-0x7ff3c00b,
+-0x28f0001f,
+-0x7ff3c00b,
+-0x2970001f,
+-0x7ff3c00b,
+-0x7d888001,
+-0x7dccc001,
+-0x7e510001,
+-0x7e954001,
+-0x7c908002,
+-0x7cd4c002,
+-0x7cbc800b,
+-0x9ac00003,
+-0x7c8f400b,
+-0x38b40001,
+-0x9b4000c1,
+-0xcc00004d,
+-0x9bc000bf,
+-0xcc00004e,
+-0xc80c03fd,
+-0xc81003fc,
+-0xccc00042,
+-0x8000016e,
+-0xcd000042,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xcc400040,
+-0xcc400040,
+-0xcc400040,
+-0x7c40c000,
+-0xccc00040,
+-0xccc0000d,
+-0x80000000,
+-0xd0400040,
+-0x7c40c000,
+-0x7c410000,
+-0x65140020,
+-0x7d4d402c,
+-0x24580002,
+-0x7d598020,
+-0x7c41c000,
+-0xcd800042,
+-0x69980020,
+-0xcd800042,
+-0xcdc00042,
+-0xc023c000,
+-0x05e40002,
+-0x7ca0800b,
+-0x26640010,
+-0x7ca4800c,
+-0xcc800040,
+-0xcdc00040,
+-0xccc00040,
+-0x95c0000e,
+-0xcd000040,
+-0x09dc0001,
+-0xc8280003,
+-0x96800008,
+-0xce800040,
+-0xc834001d,
+-0x97400000,
+-0xc834001d,
+-0x26a80008,
+-0x8400024c,
+-0xcc2b0000,
+-0x99c0fff7,
+-0x09dc0001,
+-0xdc3a0000,
+-0x97800004,
+-0x7c418000,
+-0x800001a2,
+-0x25980002,
+-0xa0000000,
+-0x7d808000,
+-0xc818001d,
+-0x7c40c000,
+-0x64d00008,
+-0x95800000,
+-0xc818001d,
+-0xcc130000,
+-0xcc800040,
+-0xccc00040,
+-0x80000000,
+-0xcc400040,
+-0xc810001f,
+-0x7c40c000,
+-0xcc800040,
+-0x7cd1400c,
+-0xcd400040,
+-0x05180001,
+-0x80000000,
+-0xcd800022,
+-0x7c40c000,
+-0x64500020,
+-0x8400024c,
+-0xcc000061,
+-0x7cd0c02c,
+-0xc8200017,
+-0xc8d60000,
+-0x99400008,
+-0x7c438000,
+-0xdf830000,
+-0xcfa0004f,
+-0x8400024c,
+-0xcc000062,
+-0x80000000,
+-0xd040007f,
+-0x80000249,
+-0xcc000062,
+-0x8400024c,
+-0xcc000061,
+-0xc8200017,
+-0x7c40c000,
+-0xc036ff00,
+-0xc810000d,
+-0xc0303fff,
+-0x7cf5400b,
+-0x7d51800b,
+-0x7d81800f,
+-0x99800008,
+-0x7cf3800b,
+-0xdf830000,
+-0xcfa0004f,
+-0x8400024c,
+-0xcc000062,
+-0x80000000,
+-0xd040007f,
+-0x80000249,
+-0xcc000062,
+-0x8400024c,
+-0x7c40c000,
+-0x28dc0008,
+-0x95c00019,
+-0x30dc0010,
+-0x7c410000,
+-0x99c00004,
+-0x64540020,
+-0x80000208,
+-0xc91d0000,
+-0x7d15002c,
+-0xc91e0000,
+-0x7c420000,
+-0x7c424000,
+-0x7c418000,
+-0x7de5c00b,
+-0x7de28007,
+-0x9a80000e,
+-0x41ac0005,
+-0x9ac00000,
+-0x0aec0001,
+-0x30dc0010,
+-0x99c00004,
+-0x00000000,
+-0x8000020b,
+-0xc91d0000,
+-0x8000020b,
+-0xc91e0000,
+-0xcc800040,
+-0xccc00040,
+-0xd0400040,
+-0xc80c0025,
+-0x94c0fde4,
+-0xc8100008,
+-0xcd000040,
+-0xd4000fc0,
+-0x80000000,
+-0xd4000fa2,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0xd40003c0,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xd0400040,
+-0x7c408000,
+-0xa0000000,
+-0x7e82800b,
+-0x7c40c000,
+-0x30d00006,
+-0x0d100006,
+-0x99000007,
+-0xc8140015,
+-0x99400005,
+-0xcc000052,
+-0xd4000340,
+-0xd4000fc0,
+-0xd4000fa2,
+-0xcc800040,
+-0xccc00040,
+-0x80000000,
+-0xd0400040,
+-0x7c40c000,
+-0xcc4d0000,
+-0xdc3a0000,
+-0x9780fdbd,
+-0x04cc0001,
+-0x80000242,
+-0xcc4d0000,
+-0x80000000,
+-0xd040007f,
+-0xcc00007f,
+-0x80000000,
+-0xcc00007f,
+-0xcc00007f,
+-0x88000000,
+-0xcc00007f,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00030222,
+-0x0004022a,
+-0x0005009f,
+-0x00020003,
+-0x0006003c,
+-0x00070027,
+-0x00080191,
+-0x00090044,
+-0x000a002d,
+-0x00100247,
+-0x001700f0,
+-0x002201d7,
+-0x002301e8,
+-0x0026004c,
+-0x0027005f,
+-0x0020011a,
+-0x00280092,
+-0x0029004f,
+-0x002a0083,
+-0x002b0064,
+-0x002f008d,
+-0x003200d8,
+-0x00340232,
+-0x00360074,
+-0x0039010a,
+-0x003c01fc,
+-0x003f009f,
+-0x00410005,
+-0x00440194,
+-0x0048019d,
+-0x004901c5,
+-0x004a01cf,
+-0x00550225,
+-0x0056022d,
+-0x0060000a,
+-0x0061002a,
+-0x00620030,
+-0x00630030,
+-0x00640030,
+-0x00650030,
+-0x00660030,
+-0x00670030,
+-0x00680037,
+-0x0069003f,
+-0x006a0047,
+-0x006b0047,
+-0x006c0047,
+-0x006d0047,
+-0x006e0047,
+-0x006f0047,
+-0x00700047,
+-0x00730247,
+-0x007b0240,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-0x00000005,
+-};
+-
+-static const u32 RV710_cp_microcode[] = {
+-0xcc0003ea,
+-0x04080003,
+-0xcc800043,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x80000003,
+-0xd040007f,
+-0x80000003,
+-0xcc400041,
+-0x7c40c000,
+-0xc0160004,
+-0x30d03fff,
+-0x7d15000c,
+-0xcc110000,
+-0x28d8001e,
+-0x31980001,
+-0x28dc001f,
+-0xc8200004,
+-0x95c00006,
+-0x7c424000,
+-0xcc000062,
+-0x7e56800c,
+-0xcc290000,
+-0xc8240004,
+-0x7e26000b,
+-0x95800006,
+-0x7c42c000,
+-0xcc000062,
+-0x7ed7000c,
+-0xcc310000,
+-0xc82c0004,
+-0x7e2e000c,
+-0xcc000062,
+-0x31103fff,
+-0x80000003,
+-0xce110000,
+-0x7c40c000,
+-0x80000003,
+-0xcc400040,
+-0x80000003,
+-0xcc412257,
+-0x7c418000,
+-0xcc400045,
+-0xcc400048,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xcc400045,
+-0xcc400048,
+-0x7c40c000,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xcc000045,
+-0xcc000048,
+-0xcc41225c,
+-0xcc41a1fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x040ca1fd,
+-0xc0120001,
+-0xcc000045,
+-0xcc000048,
+-0x7cd0c00c,
+-0xcc41225c,
+-0xcc41a1fc,
+-0xd04d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x80000003,
+-0xcc41225d,
+-0x7c408000,
+-0x7c40c000,
+-0xc02a0002,
+-0x7c410000,
+-0x7d29000c,
+-0x30940001,
+-0x30980006,
+-0x309c0300,
+-0x29dc0008,
+-0x7c420000,
+-0x7c424000,
+-0x9540000f,
+-0xc02e0004,
+-0x05f02258,
+-0x7f2f000c,
+-0xcc310000,
+-0xc8280004,
+-0xccc12169,
+-0xcd01216a,
+-0xce81216b,
+-0x0db40002,
+-0xcc01216c,
+-0x9740000e,
+-0x0db40000,
+-0x8000007d,
+-0xc834000a,
+-0x0db40002,
+-0x97400009,
+-0x0db40000,
+-0xc02e0004,
+-0x05f02258,
+-0x7f2f000c,
+-0xcc310000,
+-0xc8280004,
+-0x8000007d,
+-0xc834000a,
+-0x97400004,
+-0x7e028000,
+-0x8000007d,
+-0xc834000a,
+-0x0db40004,
+-0x9740ff8c,
+-0x00000000,
+-0xce01216d,
+-0xce41216e,
+-0xc8280003,
+-0xc834000a,
+-0x9b400004,
+-0x043c0005,
+-0x8400026d,
+-0xcc000062,
+-0x0df40000,
+-0x9740000b,
+-0xc82c03e6,
+-0xce81a2b7,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c4,
+-0x80000003,
+-0xcfc1a2d1,
+-0x0df40001,
+-0x9740000b,
+-0xc82c03e7,
+-0xce81a2bb,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c5,
+-0x80000003,
+-0xcfc1a2d2,
+-0x0df40002,
+-0x9740000b,
+-0xc82c03e8,
+-0xce81a2bf,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c6,
+-0x80000003,
+-0xcfc1a2d3,
+-0xc82c03e9,
+-0xce81a2c3,
+-0xc0300006,
+-0x7ef34028,
+-0xc0300020,
+-0x7f6b8020,
+-0x7fb3c029,
+-0xcf81a2c7,
+-0x80000003,
+-0xcfc1a2d4,
+-0x80000003,
+-0xcc400042,
+-0x7c40c000,
+-0x7c410000,
+-0x2914001d,
+-0x31540001,
+-0x9940000c,
+-0x31181000,
+-0xc81c0011,
+-0x95c00000,
+-0xc81c0011,
+-0xccc12100,
+-0xcd012101,
+-0xccc12102,
+-0xcd012103,
+-0x04180004,
+-0x8000037e,
+-0xcd81a2a4,
+-0xc02a0004,
+-0x95800008,
+-0x36a821a3,
+-0xcc290000,
+-0xc8280004,
+-0xc81c0011,
+-0x0de40040,
+-0x9640ffff,
+-0xc81c0011,
+-0xccc12170,
+-0xcd012171,
+-0xc8200012,
+-0x96000000,
+-0xc8200012,
+-0x8000037e,
+-0xcc000064,
+-0x7c40c000,
+-0x7c410000,
+-0xcc000045,
+-0xcc000048,
+-0x40d40003,
+-0xcd41225c,
+-0xcd01a1fc,
+-0xc01a0001,
+-0x041ca1fd,
+-0x7dd9c00c,
+-0x7c420000,
+-0x08cc0001,
+-0x06240001,
+-0x06280002,
+-0xce1d0000,
+-0xce5d0000,
+-0x98c0fffa,
+-0xce9d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x7c40c000,
+-0x30d00001,
+-0x28cc0001,
+-0x7c414000,
+-0x95000006,
+-0x7c418000,
+-0xcd41216d,
+-0xcd81216e,
+-0x800000f4,
+-0xc81c0003,
+-0xc0220004,
+-0x7e16000c,
+-0xcc210000,
+-0xc81c0004,
+-0x7c424000,
+-0x98c00004,
+-0x7c428000,
+-0x80000003,
+-0xcde50000,
+-0xce412169,
+-0xce81216a,
+-0xcdc1216b,
+-0x80000003,
+-0xcc01216c,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0x7c41c000,
+-0x28a40008,
+-0x326400ff,
+-0x0e68003c,
+-0x9680000a,
+-0x7c020000,
+-0x7c420000,
+-0x1e300003,
+-0xcc00006a,
+-0x9b000003,
+-0x42200005,
+-0x04200040,
+-0x80000111,
+-0x7c024000,
+-0x7e024000,
+-0x9a400000,
+-0x0a640001,
+-0x30ec0010,
+-0x9ac0000a,
+-0xcc000062,
+-0xc02a0004,
+-0xc82c0021,
+-0x7e92800c,
+-0xcc000041,
+-0xcc290000,
+-0xcec00021,
+-0x80000121,
+-0xc8300004,
+-0xcd01216d,
+-0xcd41216e,
+-0xc8300003,
+-0x7f1f000b,
+-0x30f40007,
+-0x27780001,
+-0x9740002a,
+-0x07b80126,
+-0x9f800000,
+-0x00000000,
+-0x80000136,
+-0x7f1b8004,
+-0x8000013a,
+-0x7f1b8005,
+-0x8000013e,
+-0x7f1b8002,
+-0x80000142,
+-0x7f1b8003,
+-0x80000146,
+-0x7f1b8007,
+-0x8000014a,
+-0x7f1b8006,
+-0x8000014f,
+-0x28a40008,
+-0x9b800019,
+-0x28a40008,
+-0x8000015f,
+-0x326400ff,
+-0x9b800015,
+-0x28a40008,
+-0x8000015f,
+-0x326400ff,
+-0x9b800011,
+-0x28a40008,
+-0x8000015f,
+-0x326400ff,
+-0x9b80000d,
+-0x28a40008,
+-0x8000015f,
+-0x326400ff,
+-0x9b800009,
+-0x28a40008,
+-0x8000015f,
+-0x326400ff,
+-0x9b800005,
+-0x28a40008,
+-0x8000015f,
+-0x326400ff,
+-0x28a40008,
+-0x326400ff,
+-0x0e68003c,
+-0x9a80feb2,
+-0x28ec0008,
+-0x7c434000,
+-0x7c438000,
+-0x7c43c000,
+-0x96c00007,
+-0xcc000062,
+-0xcf412169,
+-0xcf81216a,
+-0xcfc1216b,
+-0x80000003,
+-0xcc01216c,
+-0x80000003,
+-0xcff50000,
+-0xcc00006b,
+-0x84000381,
+-0x0e68003c,
+-0x9a800004,
+-0xc8280015,
+-0x80000003,
+-0xd040007f,
+-0x9680ffab,
+-0x7e024000,
+-0x8400023b,
+-0xc00e0002,
+-0xcc000041,
+-0x80000239,
+-0xccc1304a,
+-0x7c40c000,
+-0x7c410000,
+-0xc01e0001,
+-0x29240012,
+-0xc0220002,
+-0x96400005,
+-0xc0260004,
+-0xc027fffb,
+-0x7d25000b,
+-0xc0260000,
+-0x7dd2800b,
+-0x7e12c00b,
+-0x7d25000c,
+-0x7c414000,
+-0x7c418000,
+-0xccc12169,
+-0x9a80000a,
+-0xcd01216a,
+-0xcd41216b,
+-0x96c0fe83,
+-0xcd81216c,
+-0xc8300018,
+-0x97000000,
+-0xc8300018,
+-0x80000003,
+-0xcc000018,
+-0x84000381,
+-0xcc00007f,
+-0xc8140013,
+-0xc8180014,
+-0xcd41216b,
+-0x96c0fe77,
+-0xcd81216c,
+-0x80000183,
+-0xc8300018,
+-0xc80c0008,
+-0x98c00000,
+-0xc80c0008,
+-0x7c410000,
+-0x95000002,
+-0x00000000,
+-0x7c414000,
+-0xc8200009,
+-0xcc400043,
+-0xce01a1f4,
+-0xcc400044,
+-0xc00e8000,
+-0x7c424000,
+-0x7c428000,
+-0x2aac001f,
+-0x96c0fe64,
+-0xc035f000,
+-0xce4003e2,
+-0x32780003,
+-0x267c0008,
+-0x7ff7c00b,
+-0x7ffbc00c,
+-0x2a780018,
+-0xcfc003e3,
+-0xcf8003e4,
+-0x26b00002,
+-0x7f3f0000,
+-0xcf0003e5,
+-0x8000031f,
+-0x7c80c000,
+-0x7c40c000,
+-0x28d00008,
+-0x3110000f,
+-0x9500000f,
+-0x25280001,
+-0x06a801b4,
+-0x9e800000,
+-0x00000000,
+-0x800001d5,
+-0xc0120800,
+-0x800001e3,
+-0xc814000f,
+-0x800001ea,
+-0xc8140010,
+-0x800001f1,
+-0xccc1a2a4,
+-0x800001fa,
+-0xc8140011,
+-0x30d0003f,
+-0x0d280015,
+-0x9a800012,
+-0x0d28001e,
+-0x9a80001e,
+-0x0d280020,
+-0x9a800023,
+-0x0d24000f,
+-0x0d280010,
+-0x7e6a800c,
+-0x9a800026,
+-0x0d200004,
+-0x0d240014,
+-0x0d280028,
+-0x7e62400c,
+-0x7ea6800c,
+-0x9a80002a,
+-0xc8140011,
+-0x80000003,
+-0xccc1a2a4,
+-0xc0120800,
+-0x7c414000,
+-0x7d0cc00c,
+-0xc0120008,
+-0x29580003,
+-0x295c000c,
+-0x7c420000,
+-0x7dd1c00b,
+-0x26200014,
+-0x7e1e400c,
+-0x7e4e800c,
+-0xce81a2a4,
+-0x80000003,
+-0xcd81a1fe,
+-0xc814000f,
+-0x0410210e,
+-0x95400000,
+-0xc814000f,
+-0xd0510000,
+-0x80000003,
+-0xccc1a2a4,
+-0xc8140010,
+-0x04102108,
+-0x95400000,
+-0xc8140010,
+-0xd0510000,
+-0x80000003,
+-0xccc1a2a4,
+-0xccc1a2a4,
+-0x04100001,
+-0xcd000019,
+-0x84000381,
+-0xcc00007f,
+-0xc8100019,
+-0x99000000,
+-0xc8100019,
+-0x80000004,
+-0x7c408000,
+-0x04102100,
+-0x95400000,
+-0xc8140011,
+-0xd0510000,
+-0x8000037e,
+-0xccc1a2a4,
+-0x7c40c000,
+-0xcc40000d,
+-0x94c0fe01,
+-0xcc40000e,
+-0x7c410000,
+-0x95000005,
+-0x08cc0001,
+-0xc8140005,
+-0x99400014,
+-0x00000000,
+-0x98c0fffb,
+-0x7c410000,
+-0x80000004,
+-0x7d008000,
+-0xc8140005,
+-0x7c40c000,
+-0x9940000c,
+-0xc818000c,
+-0x7c410000,
+-0x9580fdf0,
+-0xc820000e,
+-0xc81c000d,
+-0x66200020,
+-0x7e1e002c,
+-0x25240002,
+-0x7e624020,
+-0x80000003,
+-0xcce60000,
+-0x7c410000,
+-0xcc00006c,
+-0xcc00006d,
+-0xc818001f,
+-0xc81c001e,
+-0x65980020,
+-0x7dd9c02c,
+-0x7cd4c00c,
+-0xccde0000,
+-0x45dc0004,
+-0xc8280017,
+-0x9680000f,
+-0xc00e0001,
+-0x28680008,
+-0x2aac0016,
+-0x32a800ff,
+-0x0eb00049,
+-0x7f2f000b,
+-0x97000006,
+-0x00000000,
+-0xc8140005,
+-0x7c40c000,
+-0x80000223,
+-0x7c410000,
+-0x80000226,
+-0xd040007f,
+-0x8400023b,
+-0xcc000041,
+-0xccc1304a,
+-0x94000000,
+-0xc83c001a,
+-0x043c0005,
+-0xcfc1a2a4,
+-0xc0361f90,
+-0xc0387fff,
+-0x7c03c010,
+-0x7f7b400c,
+-0xcf41217c,
+-0xcfc1217d,
+-0xcc01217e,
+-0xc03a0004,
+-0x0434217f,
+-0x7f7b400c,
+-0xcc350000,
+-0xc83c0004,
+-0x2bfc001f,
+-0x04380020,
+-0x97c00005,
+-0xcc000062,
+-0x9b800000,
+-0x0bb80001,
+-0x80000247,
+-0xcc000071,
+-0xcc01a1f4,
+-0x04380016,
+-0xc0360002,
+-0xcf81a2a4,
+-0x88000000,
+-0xcf412010,
+-0x7c40c000,
+-0x28d0001c,
+-0x95000005,
+-0x04d40001,
+-0xcd400065,
+-0x80000003,
+-0xcd400068,
+-0x09540002,
+-0x80000003,
+-0xcd400066,
+-0x8400026c,
+-0xc81803ea,
+-0x7c40c000,
+-0x9980fd9f,
+-0xc8140016,
+-0x08d00001,
+-0x9940002b,
+-0xcd000068,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x043c0005,
+-0xcfc1a2a4,
+-0xcc01a1f4,
+-0x84000381,
+-0xcc000046,
+-0x88000000,
+-0xcc00007f,
+-0x8400027e,
+-0xc81803ea,
+-0x7c40c000,
+-0x9980fd8d,
+-0xc8140016,
+-0x08d00001,
+-0x99400019,
+-0xcd000068,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x043c0022,
+-0xcfc1a2a4,
+-0x84000381,
+-0xcc000047,
+-0x88000000,
+-0xcc00007f,
+-0xc8100016,
+-0x9900000d,
+-0xcc400067,
+-0x80000004,
+-0x7c408000,
+-0xc81803ea,
+-0x9980fd79,
+-0x7c40c000,
+-0x94c00003,
+-0xc8100016,
+-0x99000004,
+-0xccc00068,
+-0x80000004,
+-0x7c408000,
+-0x8400023b,
+-0xc0148000,
+-0xcc000041,
+-0xcd41304a,
+-0xc0148000,
+-0x99000000,
+-0xc8100016,
+-0x80000004,
+-0x7c408000,
+-0xc0120001,
+-0x7c51400c,
+-0x80000003,
+-0xd0550000,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0x291c001f,
+-0xccc0004a,
+-0xcd00004b,
+-0x95c00003,
+-0xc01c8000,
+-0xcdc12010,
+-0xdd830000,
+-0x055c2000,
+-0xcc000062,
+-0x80000003,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc0004c,
+-0xcd00004d,
+-0xdd830000,
+-0x055ca000,
+-0x80000003,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc0004e,
+-0xcd00004f,
+-0xdd830000,
+-0x055cc000,
+-0x80000003,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00050,
+-0xcd000051,
+-0xdd830000,
+-0x055cf8e0,
+-0x80000003,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00052,
+-0xcd000053,
+-0xdd830000,
+-0x055cf880,
+-0x80000003,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00054,
+-0xcd000055,
+-0xdd830000,
+-0x055ce000,
+-0x80000003,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00056,
+-0xcd000057,
+-0xdd830000,
+-0x055cf000,
+-0x80000003,
+-0xd81f4100,
+-0x7c40c000,
+-0x7c410000,
+-0x7c414000,
+-0x7c418000,
+-0xccc00058,
+-0xcd000059,
+-0xdd830000,
+-0x055cf3fc,
+-0x80000003,
+-0xd81f4100,
+-0xd0432000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043a000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043c000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f8e0,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f880,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043e000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xd043f3fc,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xc81403e0,
+-0xcc430000,
+-0xcc430000,
+-0xcc430000,
+-0x7d45c000,
+-0xcdc30000,
+-0xd0430000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0x7c40c000,
+-0xc81003e2,
+-0xc81403e5,
+-0xc81803e3,
+-0xc81c03e4,
+-0xcd812169,
+-0xcdc1216a,
+-0xccc1216b,
+-0xcc01216c,
+-0x04200004,
+-0x7da18000,
+-0x7d964002,
+-0x9640fcd9,
+-0xcd8003e3,
+-0x31280003,
+-0xc02df000,
+-0x25180008,
+-0x7dad800b,
+-0x7da9800c,
+-0x80000003,
+-0xcd8003e3,
+-0x308cffff,
+-0xd04d0000,
+-0x7c408000,
+-0xa0000000,
+-0xcc800062,
+-0xc8140020,
+-0x15580002,
+-0x9580ffff,
+-0xc8140020,
+-0xcc00006e,
+-0xcc412180,
+-0x7c40c000,
+-0xccc1218d,
+-0xcc412181,
+-0x28d0001f,
+-0x34588000,
+-0xcd81218c,
+-0x9500fcbf,
+-0xcc412182,
+-0xc8140020,
+-0x9940ffff,
+-0xc8140020,
+-0x80000004,
+-0x7c408000,
+-0x7c40c000,
+-0x28d00018,
+-0x31100001,
+-0xc0160080,
+-0x95000003,
+-0xc02a0004,
+-0x7cd4c00c,
+-0xccc1217c,
+-0xcc41217d,
+-0xcc41217e,
+-0x7c418000,
+-0x1db00003,
+-0x36a0217f,
+-0x9b000003,
+-0x419c0005,
+-0x041c0040,
+-0x99c00000,
+-0x09dc0001,
+-0xcc210000,
+-0xc8240004,
+-0x2a6c001f,
+-0x419c0005,
+-0x9ac0fffa,
+-0xcc800062,
+-0x80000004,
+-0x7c408000,
+-0x7c40c000,
+-0x04d403e6,
+-0x80000003,
+-0xcc540000,
+-0x8000037e,
+-0xcc4003ea,
+-0xc01c8000,
+-0x044ca000,
+-0xcdc12010,
+-0x7c410000,
+-0xc8140009,
+-0x04180000,
+-0x041c0008,
+-0xcd800071,
+-0x09dc0001,
+-0x05980001,
+-0xcd0d0000,
+-0x99c0fffc,
+-0xcc800062,
+-0x8000037e,
+-0xcd400071,
+-0xc00e0100,
+-0xcc000041,
+-0xccc1304a,
+-0xc83c007f,
+-0xcc00007f,
+-0x80000003,
+-0xcc00007f,
+-0xcc00007f,
+-0x88000000,
+-0xcc00007f,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00000000,
+-0x00010333,
+-0x00100006,
+-0x00170008,
+-0x0021000a,
+-0x0027002a,
+-0x00280025,
+-0x0029002b,
+-0x002a0028,
+-0x002b002b,
+-0x002d003a,
+-0x002e0041,
+-0x002f004c,
+-0x0034004e,
+-0x00360032,
+-0x003900b1,
+-0x003a00d1,
+-0x003b00e6,
+-0x003c00fe,
+-0x003d016d,
+-0x003f00af,
+-0x00410338,
+-0x0043034b,
+-0x00440190,
+-0x004500fe,
+-0x004601ae,
+-0x004701ae,
+-0x00480200,
+-0x0049020e,
+-0x004a0257,
+-0x004b0284,
+-0x00520261,
+-0x00530273,
+-0x00540289,
+-0x0057029b,
+-0x0060029f,
+-0x006102ae,
+-0x006202b8,
+-0x006302c2,
+-0x006402cc,
+-0x006502d6,
+-0x006602e0,
+-0x006702ea,
+-0x006802f4,
+-0x006902f8,
+-0x006a02fc,
+-0x006b0300,
+-0x006c0304,
+-0x006d0308,
+-0x006e030c,
+-0x006f0310,
+-0x00700314,
+-0x00720365,
+-0x0074036b,
+-0x00790369,
+-0x007c031e,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-0x000f037a,
+-};
+-
+-#endif
+diff --git a/drivers/gpu/drm/radeon/r600d.h b/drivers/gpu/drm/radeon/r600d.h
+new file mode 100644
+index 0000000..723295f
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/r600d.h
+@@ -0,0 +1,661 @@
++/*
++ * Copyright 2009 Advanced Micro Devices, Inc.
++ * Copyright 2009 Red Hat Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef R600D_H
++#define R600D_H
++
++#define CP_PACKET2 0x80000000
++#define PACKET2_PAD_SHIFT 0
++#define PACKET2_PAD_MASK (0x3fffffff << 0)
++
++#define PACKET2(v) (CP_PACKET2 | REG_SET(PACKET2_PAD, (v)))
++
++#define R6XX_MAX_SH_GPRS 256
++#define R6XX_MAX_TEMP_GPRS 16
++#define R6XX_MAX_SH_THREADS 256
++#define R6XX_MAX_SH_STACK_ENTRIES 4096
++#define R6XX_MAX_BACKENDS 8
++#define R6XX_MAX_BACKENDS_MASK 0xff
++#define R6XX_MAX_SIMDS 8
++#define R6XX_MAX_SIMDS_MASK 0xff
++#define R6XX_MAX_PIPES 8
++#define R6XX_MAX_PIPES_MASK 0xff
++
++/* PTE flags */
++#define PTE_VALID (1 << 0)
++#define PTE_SYSTEM (1 << 1)
++#define PTE_SNOOPED (1 << 2)
++#define PTE_READABLE (1 << 5)
++#define PTE_WRITEABLE (1 << 6)
++
++/* Registers */
++#define ARB_POP 0x2418
++#define ENABLE_TC128 (1 << 30)
++#define ARB_GDEC_RD_CNTL 0x246C
++
++#define CC_GC_SHADER_PIPE_CONFIG 0x8950
++#define CC_RB_BACKEND_DISABLE 0x98F4
++#define BACKEND_DISABLE(x) ((x) << 16)
++
++#define CB_COLOR0_BASE 0x28040
++#define CB_COLOR1_BASE 0x28044
++#define CB_COLOR2_BASE 0x28048
++#define CB_COLOR3_BASE 0x2804C
++#define CB_COLOR4_BASE 0x28050
++#define CB_COLOR5_BASE 0x28054
++#define CB_COLOR6_BASE 0x28058
++#define CB_COLOR7_BASE 0x2805C
++#define CB_COLOR7_FRAG 0x280FC
++
++#define CB_COLOR0_SIZE 0x28060
++#define CB_COLOR0_VIEW 0x28080
++#define CB_COLOR0_INFO 0x280a0
++#define CB_COLOR0_TILE 0x280c0
++#define CB_COLOR0_FRAG 0x280e0
++#define CB_COLOR0_MASK 0x28100
++
++#define CONFIG_MEMSIZE 0x5428
++#define CP_STAT 0x8680
++#define CP_COHER_BASE 0x85F8
++#define CP_DEBUG 0xC1FC
++#define R_0086D8_CP_ME_CNTL 0x86D8
++#define S_0086D8_CP_ME_HALT(x) (((x) & 1)<<28)
++#define C_0086D8_CP_ME_HALT(x) ((x) & 0xEFFFFFFF)
++#define CP_ME_RAM_DATA 0xC160
++#define CP_ME_RAM_RADDR 0xC158
++#define CP_ME_RAM_WADDR 0xC15C
++#define CP_MEQ_THRESHOLDS 0x8764
++#define MEQ_END(x) ((x) << 16)
++#define ROQ_END(x) ((x) << 24)
++#define CP_PERFMON_CNTL 0x87FC
++#define CP_PFP_UCODE_ADDR 0xC150
++#define CP_PFP_UCODE_DATA 0xC154
++#define CP_QUEUE_THRESHOLDS 0x8760
++#define ROQ_IB1_START(x) ((x) << 0)
++#define ROQ_IB2_START(x) ((x) << 8)
++#define CP_RB_BASE 0xC100
++#define CP_RB_CNTL 0xC104
++#define RB_BUFSZ(x) ((x)<<0)
++#define RB_BLKSZ(x) ((x)<<8)
++#define RB_NO_UPDATE (1<<27)
++#define RB_RPTR_WR_ENA (1<<31)
++#define BUF_SWAP_32BIT (2 << 16)
++#define CP_RB_RPTR 0x8700
++#define CP_RB_RPTR_ADDR 0xC10C
++#define CP_RB_RPTR_ADDR_HI 0xC110
++#define CP_RB_RPTR_WR 0xC108
++#define CP_RB_WPTR 0xC114
++#define CP_RB_WPTR_ADDR 0xC118
++#define CP_RB_WPTR_ADDR_HI 0xC11C
++#define CP_RB_WPTR_DELAY 0x8704
++#define CP_ROQ_IB1_STAT 0x8784
++#define CP_ROQ_IB2_STAT 0x8788
++#define CP_SEM_WAIT_TIMER 0x85BC
++
++#define DB_DEBUG 0x9830
++#define PREZ_MUST_WAIT_FOR_POSTZ_DONE (1 << 31)
++#define DB_DEPTH_BASE 0x2800C
++#define DB_WATERMARKS 0x9838
++#define DEPTH_FREE(x) ((x) << 0)
++#define DEPTH_FLUSH(x) ((x) << 5)
++#define DEPTH_PENDING_FREE(x) ((x) << 15)
++#define DEPTH_CACHELINE_FREE(x) ((x) << 20)
++
++#define DCP_TILING_CONFIG 0x6CA0
++#define PIPE_TILING(x) ((x) << 1)
++#define BANK_TILING(x) ((x) << 4)
++#define GROUP_SIZE(x) ((x) << 6)
++#define ROW_TILING(x) ((x) << 8)
++#define BANK_SWAPS(x) ((x) << 11)
++#define SAMPLE_SPLIT(x) ((x) << 14)
++#define BACKEND_MAP(x) ((x) << 16)
++
++#define GB_TILING_CONFIG 0x98F0
++
++#define GC_USER_SHADER_PIPE_CONFIG 0x8954
++#define INACTIVE_QD_PIPES(x) ((x) << 8)
++#define INACTIVE_QD_PIPES_MASK 0x0000FF00
++#define INACTIVE_SIMDS(x) ((x) << 16)
++#define INACTIVE_SIMDS_MASK 0x00FF0000
++
++#define SQ_CONFIG 0x8c00
++# define VC_ENABLE (1 << 0)
++# define EXPORT_SRC_C (1 << 1)
++# define DX9_CONSTS (1 << 2)
++# define ALU_INST_PREFER_VECTOR (1 << 3)
++# define DX10_CLAMP (1 << 4)
++# define CLAUSE_SEQ_PRIO(x) ((x) << 8)
++# define PS_PRIO(x) ((x) << 24)
++# define VS_PRIO(x) ((x) << 26)
++# define GS_PRIO(x) ((x) << 28)
++# define ES_PRIO(x) ((x) << 30)
++#define SQ_GPR_RESOURCE_MGMT_1 0x8c04
++# define NUM_PS_GPRS(x) ((x) << 0)
++# define NUM_VS_GPRS(x) ((x) << 16)
++# define NUM_CLAUSE_TEMP_GPRS(x) ((x) << 28)
++#define SQ_GPR_RESOURCE_MGMT_2 0x8c08
++# define NUM_GS_GPRS(x) ((x) << 0)
++# define NUM_ES_GPRS(x) ((x) << 16)
++#define SQ_THREAD_RESOURCE_MGMT 0x8c0c
++# define NUM_PS_THREADS(x) ((x) << 0)
++# define NUM_VS_THREADS(x) ((x) << 8)
++# define NUM_GS_THREADS(x) ((x) << 16)
++# define NUM_ES_THREADS(x) ((x) << 24)
++#define SQ_STACK_RESOURCE_MGMT_1 0x8c10
++# define NUM_PS_STACK_ENTRIES(x) ((x) << 0)
++# define NUM_VS_STACK_ENTRIES(x) ((x) << 16)
++#define SQ_STACK_RESOURCE_MGMT_2 0x8c14
++# define NUM_GS_STACK_ENTRIES(x) ((x) << 0)
++# define NUM_ES_STACK_ENTRIES(x) ((x) << 16)
++
++#define GRBM_CNTL 0x8000
++# define GRBM_READ_TIMEOUT(x) ((x) << 0)
++#define GRBM_STATUS 0x8010
++#define CMDFIFO_AVAIL_MASK 0x0000001F
++#define GUI_ACTIVE (1<<31)
++#define GRBM_STATUS2 0x8014
++#define GRBM_SOFT_RESET 0x8020
++#define SOFT_RESET_CP (1<<0)
++
++#define HDP_HOST_PATH_CNTL 0x2C00
++#define HDP_NONSURFACE_BASE 0x2C04
++#define HDP_NONSURFACE_INFO 0x2C08
++#define HDP_NONSURFACE_SIZE 0x2C0C
++#define HDP_REG_COHERENCY_FLUSH_CNTL 0x54A0
++#define HDP_TILING_CONFIG 0x2F3C
++
++#define MC_VM_AGP_TOP 0x2184
++#define MC_VM_AGP_BOT 0x2188
++#define MC_VM_AGP_BASE 0x218C
++#define MC_VM_FB_LOCATION 0x2180
++#define MC_VM_L1_TLB_MCD_RD_A_CNTL 0x219C
++#define ENABLE_L1_TLB (1 << 0)
++#define ENABLE_L1_FRAGMENT_PROCESSING (1 << 1)
++#define ENABLE_L1_STRICT_ORDERING (1 << 2)
++#define SYSTEM_ACCESS_MODE_MASK 0x000000C0
++#define SYSTEM_ACCESS_MODE_SHIFT 6
++#define SYSTEM_ACCESS_MODE_PA_ONLY (0 << 6)
++#define SYSTEM_ACCESS_MODE_USE_SYS_MAP (1 << 6)
++#define SYSTEM_ACCESS_MODE_IN_SYS (2 << 6)
++#define SYSTEM_ACCESS_MODE_NOT_IN_SYS (3 << 6)
++#define SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU (0 << 8)
++#define SYSTEM_APERTURE_UNMAPPED_ACCESS_DEFAULT_PAGE (1 << 8)
++#define ENABLE_SEMAPHORE_MODE (1 << 10)
++#define ENABLE_WAIT_L2_QUERY (1 << 11)
++#define EFFECTIVE_L1_TLB_SIZE(x) (((x) & 7) << 12)
++#define EFFECTIVE_L1_TLB_SIZE_MASK 0x00007000
++#define EFFECTIVE_L1_TLB_SIZE_SHIFT 12
++#define EFFECTIVE_L1_QUEUE_SIZE(x) (((x) & 7) << 15)
++#define EFFECTIVE_L1_QUEUE_SIZE_MASK 0x00038000
++#define EFFECTIVE_L1_QUEUE_SIZE_SHIFT 15
++#define MC_VM_L1_TLB_MCD_RD_B_CNTL 0x21A0
++#define MC_VM_L1_TLB_MCB_RD_GFX_CNTL 0x21FC
++#define MC_VM_L1_TLB_MCB_RD_HDP_CNTL 0x2204
++#define MC_VM_L1_TLB_MCB_RD_PDMA_CNTL 0x2208
++#define MC_VM_L1_TLB_MCB_RD_SEM_CNTL 0x220C
++#define MC_VM_L1_TLB_MCB_RD_SYS_CNTL 0x2200
++#define MC_VM_L1_TLB_MCD_WR_A_CNTL 0x21A4
++#define MC_VM_L1_TLB_MCD_WR_B_CNTL 0x21A8
++#define MC_VM_L1_TLB_MCB_WR_GFX_CNTL 0x2210
++#define MC_VM_L1_TLB_MCB_WR_HDP_CNTL 0x2218
++#define MC_VM_L1_TLB_MCB_WR_PDMA_CNTL 0x221C
++#define MC_VM_L1_TLB_MCB_WR_SEM_CNTL 0x2220
++#define MC_VM_L1_TLB_MCB_WR_SYS_CNTL 0x2214
++#define MC_VM_SYSTEM_APERTURE_LOW_ADDR 0x2190
++#define LOGICAL_PAGE_NUMBER_MASK 0x000FFFFF
++#define LOGICAL_PAGE_NUMBER_SHIFT 0
++#define MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2194
++#define MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x2198
++
++#define PA_CL_ENHANCE 0x8A14
++#define CLIP_VTX_REORDER_ENA (1 << 0)
++#define NUM_CLIP_SEQ(x) ((x) << 1)
++#define PA_SC_AA_CONFIG 0x28C04
++#define PA_SC_AA_SAMPLE_LOCS_2S 0x8B40
++#define PA_SC_AA_SAMPLE_LOCS_4S 0x8B44
++#define PA_SC_AA_SAMPLE_LOCS_8S_WD0 0x8B48
++#define PA_SC_AA_SAMPLE_LOCS_8S_WD1 0x8B4C
++#define S0_X(x) ((x) << 0)
++#define S0_Y(x) ((x) << 4)
++#define S1_X(x) ((x) << 8)
++#define S1_Y(x) ((x) << 12)
++#define S2_X(x) ((x) << 16)
++#define S2_Y(x) ((x) << 20)
++#define S3_X(x) ((x) << 24)
++#define S3_Y(x) ((x) << 28)
++#define S4_X(x) ((x) << 0)
++#define S4_Y(x) ((x) << 4)
++#define S5_X(x) ((x) << 8)
++#define S5_Y(x) ((x) << 12)
++#define S6_X(x) ((x) << 16)
++#define S6_Y(x) ((x) << 20)
++#define S7_X(x) ((x) << 24)
++#define S7_Y(x) ((x) << 28)
++#define PA_SC_CLIPRECT_RULE 0x2820c
++#define PA_SC_ENHANCE 0x8BF0
++#define FORCE_EOV_MAX_CLK_CNT(x) ((x) << 0)
++#define FORCE_EOV_MAX_TILE_CNT(x) ((x) << 12)
++#define PA_SC_LINE_STIPPLE 0x28A0C
++#define PA_SC_LINE_STIPPLE_STATE 0x8B10
++#define PA_SC_MODE_CNTL 0x28A4C
++#define PA_SC_MULTI_CHIP_CNTL 0x8B20
++
++#define PA_SC_SCREEN_SCISSOR_TL 0x28030
++#define PA_SC_GENERIC_SCISSOR_TL 0x28240
++#define PA_SC_WINDOW_SCISSOR_TL 0x28204
++
++#define PCIE_PORT_INDEX 0x0038
++#define PCIE_PORT_DATA 0x003C
++
++#define RAMCFG 0x2408
++#define NOOFBANK_SHIFT 0
++#define NOOFBANK_MASK 0x00000001
++#define NOOFRANK_SHIFT 1
++#define NOOFRANK_MASK 0x00000002
++#define NOOFROWS_SHIFT 2
++#define NOOFROWS_MASK 0x0000001C
++#define NOOFCOLS_SHIFT 5
++#define NOOFCOLS_MASK 0x00000060
++#define CHANSIZE_SHIFT 7
++#define CHANSIZE_MASK 0x00000080
++#define BURSTLENGTH_SHIFT 8
++#define BURSTLENGTH_MASK 0x00000100
++#define CHANSIZE_OVERRIDE (1 << 10)
++
++#define SCRATCH_REG0 0x8500
++#define SCRATCH_REG1 0x8504
++#define SCRATCH_REG2 0x8508
++#define SCRATCH_REG3 0x850C
++#define SCRATCH_REG4 0x8510
++#define SCRATCH_REG5 0x8514
++#define SCRATCH_REG6 0x8518
++#define SCRATCH_REG7 0x851C
++#define SCRATCH_UMSK 0x8540
++#define SCRATCH_ADDR 0x8544
++
++#define SPI_CONFIG_CNTL 0x9100
++#define GPR_WRITE_PRIORITY(x) ((x) << 0)
++#define DISABLE_INTERP_1 (1 << 5)
++#define SPI_CONFIG_CNTL_1 0x913C
++#define VTX_DONE_DELAY(x) ((x) << 0)
++#define INTERP_ONE_PRIM_PER_ROW (1 << 4)
++#define SPI_INPUT_Z 0x286D8
++#define SPI_PS_IN_CONTROL_0 0x286CC
++#define NUM_INTERP(x) ((x)<<0)
++#define POSITION_ENA (1<<8)
++#define POSITION_CENTROID (1<<9)
++#define POSITION_ADDR(x) ((x)<<10)
++#define PARAM_GEN(x) ((x)<<15)
++#define PARAM_GEN_ADDR(x) ((x)<<19)
++#define BARYC_SAMPLE_CNTL(x) ((x)<<26)
++#define PERSP_GRADIENT_ENA (1<<28)
++#define LINEAR_GRADIENT_ENA (1<<29)
++#define POSITION_SAMPLE (1<<30)
++#define BARYC_AT_SAMPLE_ENA (1<<31)
++#define SPI_PS_IN_CONTROL_1 0x286D0
++#define GEN_INDEX_PIX (1<<0)
++#define GEN_INDEX_PIX_ADDR(x) ((x)<<1)
++#define FRONT_FACE_ENA (1<<8)
++#define FRONT_FACE_CHAN(x) ((x)<<9)
++#define FRONT_FACE_ALL_BITS (1<<11)
++#define FRONT_FACE_ADDR(x) ((x)<<12)
++#define FOG_ADDR(x) ((x)<<17)
++#define FIXED_PT_POSITION_ENA (1<<24)
++#define FIXED_PT_POSITION_ADDR(x) ((x)<<25)
++
++#define SQ_MS_FIFO_SIZES 0x8CF0
++#define CACHE_FIFO_SIZE(x) ((x) << 0)
++#define FETCH_FIFO_HIWATER(x) ((x) << 8)
++#define DONE_FIFO_HIWATER(x) ((x) << 16)
++#define ALU_UPDATE_FIFO_HIWATER(x) ((x) << 24)
++#define SQ_PGM_START_ES 0x28880
++#define SQ_PGM_START_FS 0x28894
++#define SQ_PGM_START_GS 0x2886C
++#define SQ_PGM_START_PS 0x28840
++#define SQ_PGM_RESOURCES_PS 0x28850
++#define SQ_PGM_EXPORTS_PS 0x28854
++#define SQ_PGM_CF_OFFSET_PS 0x288cc
++#define SQ_PGM_START_VS 0x28858
++#define SQ_PGM_RESOURCES_VS 0x28868
++#define SQ_PGM_CF_OFFSET_VS 0x288d0
++#define SQ_VTX_CONSTANT_WORD6_0 0x38018
++#define S__SQ_VTX_CONSTANT_TYPE(x) (((x) & 3) << 30)
++#define G__SQ_VTX_CONSTANT_TYPE(x) (((x) >> 30) & 3)
++#define SQ_TEX_VTX_INVALID_TEXTURE 0x0
++#define SQ_TEX_VTX_INVALID_BUFFER 0x1
++#define SQ_TEX_VTX_VALID_TEXTURE 0x2
++#define SQ_TEX_VTX_VALID_BUFFER 0x3
++
++
++#define SX_MISC 0x28350
++#define SX_DEBUG_1 0x9054
++#define SMX_EVENT_RELEASE (1 << 0)
++#define ENABLE_NEW_SMX_ADDRESS (1 << 16)
++
++#define TA_CNTL_AUX 0x9508
++#define DISABLE_CUBE_WRAP (1 << 0)
++#define DISABLE_CUBE_ANISO (1 << 1)
++#define SYNC_GRADIENT (1 << 24)
++#define SYNC_WALKER (1 << 25)
++#define SYNC_ALIGNER (1 << 26)
++#define BILINEAR_PRECISION_6_BIT (0 << 31)
++#define BILINEAR_PRECISION_8_BIT (1 << 31)
++
++#define TC_CNTL 0x9608
++#define TC_L2_SIZE(x) ((x)<<5)
++#define L2_DISABLE_LATE_HIT (1<<9)
++
++
++#define VGT_CACHE_INVALIDATION 0x88C4
++#define CACHE_INVALIDATION(x) ((x)<<0)
++#define VC_ONLY 0
++#define TC_ONLY 1
++#define VC_AND_TC 2
++#define VGT_DMA_BASE 0x287E8
++#define VGT_DMA_BASE_HI 0x287E4
++#define VGT_ES_PER_GS 0x88CC
++#define VGT_GS_PER_ES 0x88C8
++#define VGT_GS_PER_VS 0x88E8
++#define VGT_GS_VERTEX_REUSE 0x88D4
++#define VGT_PRIMITIVE_TYPE 0x8958
++#define VGT_NUM_INSTANCES 0x8974
++#define VGT_OUT_DEALLOC_CNTL 0x28C5C
++#define DEALLOC_DIST_MASK 0x0000007F
++#define VGT_STRMOUT_BASE_OFFSET_0 0x28B10
++#define VGT_STRMOUT_BASE_OFFSET_1 0x28B14
++#define VGT_STRMOUT_BASE_OFFSET_2 0x28B18
++#define VGT_STRMOUT_BASE_OFFSET_3 0x28B1c
++#define VGT_STRMOUT_BASE_OFFSET_HI_0 0x28B44
++#define VGT_STRMOUT_BASE_OFFSET_HI_1 0x28B48
++#define VGT_STRMOUT_BASE_OFFSET_HI_2 0x28B4c
++#define VGT_STRMOUT_BASE_OFFSET_HI_3 0x28B50
++#define VGT_STRMOUT_BUFFER_BASE_0 0x28AD8
++#define VGT_STRMOUT_BUFFER_BASE_1 0x28AE8
++#define VGT_STRMOUT_BUFFER_BASE_2 0x28AF8
++#define VGT_STRMOUT_BUFFER_BASE_3 0x28B08
++#define VGT_STRMOUT_BUFFER_OFFSET_0 0x28ADC
++#define VGT_STRMOUT_BUFFER_OFFSET_1 0x28AEC
++#define VGT_STRMOUT_BUFFER_OFFSET_2 0x28AFC
++#define VGT_STRMOUT_BUFFER_OFFSET_3 0x28B0C
++#define VGT_STRMOUT_EN 0x28AB0
++#define VGT_VERTEX_REUSE_BLOCK_CNTL 0x28C58
++#define VTX_REUSE_DEPTH_MASK 0x000000FF
++#define VGT_EVENT_INITIATOR 0x28a90
++# define CACHE_FLUSH_AND_INV_EVENT (0x16 << 0)
++
++#define VM_CONTEXT0_CNTL 0x1410
++#define ENABLE_CONTEXT (1 << 0)
++#define PAGE_TABLE_DEPTH(x) (((x) & 3) << 1)
++#define RANGE_PROTECTION_FAULT_ENABLE_DEFAULT (1 << 4)
++#define VM_CONTEXT0_INVALIDATION_LOW_ADDR 0x1490
++#define VM_CONTEXT0_INVALIDATION_HIGH_ADDR 0x14B0
++#define VM_CONTEXT0_PAGE_TABLE_BASE_ADDR 0x1574
++#define VM_CONTEXT0_PAGE_TABLE_START_ADDR 0x1594
++#define VM_CONTEXT0_PAGE_TABLE_END_ADDR 0x15B4
++#define VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR 0x1554
++#define VM_CONTEXT0_REQUEST_RESPONSE 0x1470
++#define REQUEST_TYPE(x) (((x) & 0xf) << 0)
++#define RESPONSE_TYPE_MASK 0x000000F0
++#define RESPONSE_TYPE_SHIFT 4
++#define VM_L2_CNTL 0x1400
++#define ENABLE_L2_CACHE (1 << 0)
++#define ENABLE_L2_FRAGMENT_PROCESSING (1 << 1)
++#define ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE (1 << 9)
++#define EFFECTIVE_L2_QUEUE_SIZE(x) (((x) & 7) << 13)
++#define VM_L2_CNTL2 0x1404
++#define INVALIDATE_ALL_L1_TLBS (1 << 0)
++#define INVALIDATE_L2_CACHE (1 << 1)
++#define VM_L2_CNTL3 0x1408
++#define BANK_SELECT_0(x) (((x) & 0x1f) << 0)
++#define BANK_SELECT_1(x) (((x) & 0x1f) << 5)
++#define L2_CACHE_UPDATE_MODE(x) (((x) & 3) << 10)
++#define VM_L2_STATUS 0x140C
++#define L2_BUSY (1 << 0)
++
++#define WAIT_UNTIL 0x8040
++#define WAIT_2D_IDLE_bit (1 << 14)
++#define WAIT_3D_IDLE_bit (1 << 15)
++#define WAIT_2D_IDLECLEAN_bit (1 << 16)
++#define WAIT_3D_IDLECLEAN_bit (1 << 17)
++
++
++
++/*
++ * PM4
++ */
++#define PACKET_TYPE0 0
++#define PACKET_TYPE1 1
++#define PACKET_TYPE2 2
++#define PACKET_TYPE3 3
++
++#define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3)
++#define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF)
++#define CP_PACKET0_GET_REG(h) (((h) & 0xFFFF) << 2)
++#define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF)
++#define PACKET0(reg, n) ((PACKET_TYPE0 << 30) | \
++ (((reg) >> 2) & 0xFFFF) | \
++ ((n) & 0x3FFF) << 16)
++#define PACKET3(op, n) ((PACKET_TYPE3 << 30) | \
++ (((op) & 0xFF) << 8) | \
++ ((n) & 0x3FFF) << 16)
++
++/* Packet 3 types */
++#define PACKET3_NOP 0x10
++#define PACKET3_INDIRECT_BUFFER_END 0x17
++#define PACKET3_SET_PREDICATION 0x20
++#define PACKET3_REG_RMW 0x21
++#define PACKET3_COND_EXEC 0x22
++#define PACKET3_PRED_EXEC 0x23
++#define PACKET3_START_3D_CMDBUF 0x24
++#define PACKET3_DRAW_INDEX_2 0x27
++#define PACKET3_CONTEXT_CONTROL 0x28
++#define PACKET3_DRAW_INDEX_IMMD_BE 0x29
++#define PACKET3_INDEX_TYPE 0x2A
++#define PACKET3_DRAW_INDEX 0x2B
++#define PACKET3_DRAW_INDEX_AUTO 0x2D
++#define PACKET3_DRAW_INDEX_IMMD 0x2E
++#define PACKET3_NUM_INSTANCES 0x2F
++#define PACKET3_STRMOUT_BUFFER_UPDATE 0x34
++#define PACKET3_INDIRECT_BUFFER_MP 0x38
++#define PACKET3_MEM_SEMAPHORE 0x39
++#define PACKET3_MPEG_INDEX 0x3A
++#define PACKET3_WAIT_REG_MEM 0x3C
++#define PACKET3_MEM_WRITE 0x3D
++#define PACKET3_INDIRECT_BUFFER 0x32
++#define PACKET3_CP_INTERRUPT 0x40
++#define PACKET3_SURFACE_SYNC 0x43
++# define PACKET3_CB0_DEST_BASE_ENA (1 << 6)
++# define PACKET3_TC_ACTION_ENA (1 << 23)
++# define PACKET3_VC_ACTION_ENA (1 << 24)
++# define PACKET3_CB_ACTION_ENA (1 << 25)
++# define PACKET3_DB_ACTION_ENA (1 << 26)
++# define PACKET3_SH_ACTION_ENA (1 << 27)
++# define PACKET3_SMX_ACTION_ENA (1 << 28)
++#define PACKET3_ME_INITIALIZE 0x44
++#define PACKET3_ME_INITIALIZE_DEVICE_ID(x) ((x) << 16)
++#define PACKET3_COND_WRITE 0x45
++#define PACKET3_EVENT_WRITE 0x46
++#define PACKET3_EVENT_WRITE_EOP 0x47
++#define PACKET3_ONE_REG_WRITE 0x57
++#define PACKET3_SET_CONFIG_REG 0x68
++#define PACKET3_SET_CONFIG_REG_OFFSET 0x00008000
++#define PACKET3_SET_CONFIG_REG_END 0x0000ac00
++#define PACKET3_SET_CONTEXT_REG 0x69
++#define PACKET3_SET_CONTEXT_REG_OFFSET 0x00028000
++#define PACKET3_SET_CONTEXT_REG_END 0x00029000
++#define PACKET3_SET_ALU_CONST 0x6A
++#define PACKET3_SET_ALU_CONST_OFFSET 0x00030000
++#define PACKET3_SET_ALU_CONST_END 0x00032000
++#define PACKET3_SET_BOOL_CONST 0x6B
++#define PACKET3_SET_BOOL_CONST_OFFSET 0x0003e380
++#define PACKET3_SET_BOOL_CONST_END 0x00040000
++#define PACKET3_SET_LOOP_CONST 0x6C
++#define PACKET3_SET_LOOP_CONST_OFFSET 0x0003e200
++#define PACKET3_SET_LOOP_CONST_END 0x0003e380
++#define PACKET3_SET_RESOURCE 0x6D
++#define PACKET3_SET_RESOURCE_OFFSET 0x00038000
++#define PACKET3_SET_RESOURCE_END 0x0003c000
++#define PACKET3_SET_SAMPLER 0x6E
++#define PACKET3_SET_SAMPLER_OFFSET 0x0003c000
++#define PACKET3_SET_SAMPLER_END 0x0003cff0
++#define PACKET3_SET_CTL_CONST 0x6F
++#define PACKET3_SET_CTL_CONST_OFFSET 0x0003cff0
++#define PACKET3_SET_CTL_CONST_END 0x0003e200
++#define PACKET3_SURFACE_BASE_UPDATE 0x73
++
++
++#define R_008020_GRBM_SOFT_RESET 0x8020
++#define S_008020_SOFT_RESET_CP(x) (((x) & 1) << 0)
++#define S_008020_SOFT_RESET_CB(x) (((x) & 1) << 1)
++#define S_008020_SOFT_RESET_CR(x) (((x) & 1) << 2)
++#define S_008020_SOFT_RESET_DB(x) (((x) & 1) << 3)
++#define S_008020_SOFT_RESET_PA(x) (((x) & 1) << 5)
++#define S_008020_SOFT_RESET_SC(x) (((x) & 1) << 6)
++#define S_008020_SOFT_RESET_SMX(x) (((x) & 1) << 7)
++#define S_008020_SOFT_RESET_SPI(x) (((x) & 1) << 8)
++#define S_008020_SOFT_RESET_SH(x) (((x) & 1) << 9)
++#define S_008020_SOFT_RESET_SX(x) (((x) & 1) << 10)
++#define S_008020_SOFT_RESET_TC(x) (((x) & 1) << 11)
++#define S_008020_SOFT_RESET_TA(x) (((x) & 1) << 12)
++#define S_008020_SOFT_RESET_VC(x) (((x) & 1) << 13)
++#define S_008020_SOFT_RESET_VGT(x) (((x) & 1) << 14)
++#define R_008010_GRBM_STATUS 0x8010
++#define S_008010_CMDFIFO_AVAIL(x) (((x) & 0x1F) << 0)
++#define S_008010_CP_RQ_PENDING(x) (((x) & 1) << 6)
++#define S_008010_CF_RQ_PENDING(x) (((x) & 1) << 7)
++#define S_008010_PF_RQ_PENDING(x) (((x) & 1) << 8)
++#define S_008010_GRBM_EE_BUSY(x) (((x) & 1) << 10)
++#define S_008010_VC_BUSY(x) (((x) & 1) << 11)
++#define S_008010_DB03_CLEAN(x) (((x) & 1) << 12)
++#define S_008010_CB03_CLEAN(x) (((x) & 1) << 13)
++#define S_008010_VGT_BUSY_NO_DMA(x) (((x) & 1) << 16)
++#define S_008010_VGT_BUSY(x) (((x) & 1) << 17)
++#define S_008010_TA03_BUSY(x) (((x) & 1) << 18)
++#define S_008010_TC_BUSY(x) (((x) & 1) << 19)
++#define S_008010_SX_BUSY(x) (((x) & 1) << 20)
++#define S_008010_SH_BUSY(x) (((x) & 1) << 21)
++#define S_008010_SPI03_BUSY(x) (((x) & 1) << 22)
++#define S_008010_SMX_BUSY(x) (((x) & 1) << 23)
++#define S_008010_SC_BUSY(x) (((x) & 1) << 24)
++#define S_008010_PA_BUSY(x) (((x) & 1) << 25)
++#define S_008010_DB03_BUSY(x) (((x) & 1) << 26)
++#define S_008010_CR_BUSY(x) (((x) & 1) << 27)
++#define S_008010_CP_COHERENCY_BUSY(x) (((x) & 1) << 28)
++#define S_008010_CP_BUSY(x) (((x) & 1) << 29)
++#define S_008010_CB03_BUSY(x) (((x) & 1) << 30)
++#define S_008010_GUI_ACTIVE(x) (((x) & 1) << 31)
++#define G_008010_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x1F)
++#define G_008010_CP_RQ_PENDING(x) (((x) >> 6) & 1)
++#define G_008010_CF_RQ_PENDING(x) (((x) >> 7) & 1)
++#define G_008010_PF_RQ_PENDING(x) (((x) >> 8) & 1)
++#define G_008010_GRBM_EE_BUSY(x) (((x) >> 10) & 1)
++#define G_008010_VC_BUSY(x) (((x) >> 11) & 1)
++#define G_008010_DB03_CLEAN(x) (((x) >> 12) & 1)
++#define G_008010_CB03_CLEAN(x) (((x) >> 13) & 1)
++#define G_008010_VGT_BUSY_NO_DMA(x) (((x) >> 16) & 1)
++#define G_008010_VGT_BUSY(x) (((x) >> 17) & 1)
++#define G_008010_TA03_BUSY(x) (((x) >> 18) & 1)
++#define G_008010_TC_BUSY(x) (((x) >> 19) & 1)
++#define G_008010_SX_BUSY(x) (((x) >> 20) & 1)
++#define G_008010_SH_BUSY(x) (((x) >> 21) & 1)
++#define G_008010_SPI03_BUSY(x) (((x) >> 22) & 1)
++#define G_008010_SMX_BUSY(x) (((x) >> 23) & 1)
++#define G_008010_SC_BUSY(x) (((x) >> 24) & 1)
++#define G_008010_PA_BUSY(x) (((x) >> 25) & 1)
++#define G_008010_DB03_BUSY(x) (((x) >> 26) & 1)
++#define G_008010_CR_BUSY(x) (((x) >> 27) & 1)
++#define G_008010_CP_COHERENCY_BUSY(x) (((x) >> 28) & 1)
++#define G_008010_CP_BUSY(x) (((x) >> 29) & 1)
++#define G_008010_CB03_BUSY(x) (((x) >> 30) & 1)
++#define G_008010_GUI_ACTIVE(x) (((x) >> 31) & 1)
++#define R_008014_GRBM_STATUS2 0x8014
++#define S_008014_CR_CLEAN(x) (((x) & 1) << 0)
++#define S_008014_SMX_CLEAN(x) (((x) & 1) << 1)
++#define S_008014_SPI0_BUSY(x) (((x) & 1) << 8)
++#define S_008014_SPI1_BUSY(x) (((x) & 1) << 9)
++#define S_008014_SPI2_BUSY(x) (((x) & 1) << 10)
++#define S_008014_SPI3_BUSY(x) (((x) & 1) << 11)
++#define S_008014_TA0_BUSY(x) (((x) & 1) << 12)
++#define S_008014_TA1_BUSY(x) (((x) & 1) << 13)
++#define S_008014_TA2_BUSY(x) (((x) & 1) << 14)
++#define S_008014_TA3_BUSY(x) (((x) & 1) << 15)
++#define S_008014_DB0_BUSY(x) (((x) & 1) << 16)
++#define S_008014_DB1_BUSY(x) (((x) & 1) << 17)
++#define S_008014_DB2_BUSY(x) (((x) & 1) << 18)
++#define S_008014_DB3_BUSY(x) (((x) & 1) << 19)
++#define S_008014_CB0_BUSY(x) (((x) & 1) << 20)
++#define S_008014_CB1_BUSY(x) (((x) & 1) << 21)
++#define S_008014_CB2_BUSY(x) (((x) & 1) << 22)
++#define S_008014_CB3_BUSY(x) (((x) & 1) << 23)
++#define G_008014_CR_CLEAN(x) (((x) >> 0) & 1)
++#define G_008014_SMX_CLEAN(x) (((x) >> 1) & 1)
++#define G_008014_SPI0_BUSY(x) (((x) >> 8) & 1)
++#define G_008014_SPI1_BUSY(x) (((x) >> 9) & 1)
++#define G_008014_SPI2_BUSY(x) (((x) >> 10) & 1)
++#define G_008014_SPI3_BUSY(x) (((x) >> 11) & 1)
++#define G_008014_TA0_BUSY(x) (((x) >> 12) & 1)
++#define G_008014_TA1_BUSY(x) (((x) >> 13) & 1)
++#define G_008014_TA2_BUSY(x) (((x) >> 14) & 1)
++#define G_008014_TA3_BUSY(x) (((x) >> 15) & 1)
++#define G_008014_DB0_BUSY(x) (((x) >> 16) & 1)
++#define G_008014_DB1_BUSY(x) (((x) >> 17) & 1)
++#define G_008014_DB2_BUSY(x) (((x) >> 18) & 1)
++#define G_008014_DB3_BUSY(x) (((x) >> 19) & 1)
++#define G_008014_CB0_BUSY(x) (((x) >> 20) & 1)
++#define G_008014_CB1_BUSY(x) (((x) >> 21) & 1)
++#define G_008014_CB2_BUSY(x) (((x) >> 22) & 1)
++#define G_008014_CB3_BUSY(x) (((x) >> 23) & 1)
++#define R_000E50_SRBM_STATUS 0x0E50
++#define G_000E50_RLC_RQ_PENDING(x) (((x) >> 3) & 1)
++#define G_000E50_RCU_RQ_PENDING(x) (((x) >> 4) & 1)
++#define G_000E50_GRBM_RQ_PENDING(x) (((x) >> 5) & 1)
++#define G_000E50_HI_RQ_PENDING(x) (((x) >> 6) & 1)
++#define G_000E50_IO_EXTERN_SIGNAL(x) (((x) >> 7) & 1)
++#define G_000E50_VMC_BUSY(x) (((x) >> 8) & 1)
++#define G_000E50_MCB_BUSY(x) (((x) >> 9) & 1)
++#define G_000E50_MCDZ_BUSY(x) (((x) >> 10) & 1)
++#define G_000E50_MCDY_BUSY(x) (((x) >> 11) & 1)
++#define G_000E50_MCDX_BUSY(x) (((x) >> 12) & 1)
++#define G_000E50_MCDW_BUSY(x) (((x) >> 13) & 1)
++#define G_000E50_SEM_BUSY(x) (((x) >> 14) & 1)
++#define G_000E50_RLC_BUSY(x) (((x) >> 15) & 1)
++#define R_000E60_SRBM_SOFT_RESET 0x0E60
++#define S_000E60_SOFT_RESET_BIF(x) (((x) & 1) << 1)
++#define S_000E60_SOFT_RESET_CG(x) (((x) & 1) << 2)
++#define S_000E60_SOFT_RESET_CMC(x) (((x) & 1) << 3)
++#define S_000E60_SOFT_RESET_CSC(x) (((x) & 1) << 4)
++#define S_000E60_SOFT_RESET_DC(x) (((x) & 1) << 5)
++#define S_000E60_SOFT_RESET_GRBM(x) (((x) & 1) << 8)
++#define S_000E60_SOFT_RESET_HDP(x) (((x) & 1) << 9)
++#define S_000E60_SOFT_RESET_IH(x) (((x) & 1) << 10)
++#define S_000E60_SOFT_RESET_MC(x) (((x) & 1) << 11)
++#define S_000E60_SOFT_RESET_RLC(x) (((x) & 1) << 13)
++#define S_000E60_SOFT_RESET_ROM(x) (((x) & 1) << 14)
++#define S_000E60_SOFT_RESET_SEM(x) (((x) & 1) << 15)
++#define S_000E60_SOFT_RESET_TSC(x) (((x) & 1) << 16)
++#define S_000E60_SOFT_RESET_VMC(x) (((x) & 1) << 17)
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/radeon.h b/drivers/gpu/drm/radeon/radeon.h
+index b519fb2..7b0965f 100644
+--- a/drivers/gpu/drm/radeon/radeon.h
++++ b/drivers/gpu/drm/radeon/radeon.h
+@@ -44,14 +44,32 @@
+ * - TESTING, TESTING, TESTING
+ */
+
++/* Initialization path:
++ * We expect that acceleration initialization might fail for various
++ * reasons even thought we work hard to make it works on most
++ * configurations. In order to still have a working userspace in such
++ * situation the init path must succeed up to the memory controller
++ * initialization point. Failure before this point are considered as
++ * fatal error. Here is the init callchain :
++ * radeon_device_init perform common structure, mutex initialization
++ * asic_init setup the GPU memory layout and perform all
++ * one time initialization (failure in this
++ * function are considered fatal)
++ * asic_startup setup the GPU acceleration, in order to
++ * follow guideline the first thing this
++ * function should do is setting the GPU
++ * memory controller (only MC setup failure
++ * are considered as fatal)
++ */
++
+ #include <asm/atomic.h>
+ #include <linux/wait.h>
+ #include <linux/list.h>
+ #include <linux/kref.h>
+
++#include "radeon_family.h"
+ #include "radeon_mode.h"
+ #include "radeon_reg.h"
+-#include "r300.h"
+
+ /*
+ * Modules parameters.
+@@ -66,6 +84,7 @@ extern int radeon_gart_size;
+ extern int radeon_benchmarking;
+ extern int radeon_testing;
+ extern int radeon_connector_table;
++extern int radeon_tv;
+
+ /*
+ * Copy from radeon_drv.h so we don't have to include both and have conflicting
+@@ -75,63 +94,7 @@ extern int radeon_connector_table;
+ #define RADEON_IB_POOL_SIZE 16
+ #define RADEON_DEBUGFS_MAX_NUM_FILES 32
+ #define RADEONFB_CONN_LIMIT 4
+-
+-enum radeon_family {
+- CHIP_R100,
+- CHIP_RV100,
+- CHIP_RS100,
+- CHIP_RV200,
+- CHIP_RS200,
+- CHIP_R200,
+- CHIP_RV250,
+- CHIP_RS300,
+- CHIP_RV280,
+- CHIP_R300,
+- CHIP_R350,
+- CHIP_RV350,
+- CHIP_RV380,
+- CHIP_R420,
+- CHIP_R423,
+- CHIP_RV410,
+- CHIP_RS400,
+- CHIP_RS480,
+- CHIP_RS600,
+- CHIP_RS690,
+- CHIP_RS740,
+- CHIP_RV515,
+- CHIP_R520,
+- CHIP_RV530,
+- CHIP_RV560,
+- CHIP_RV570,
+- CHIP_R580,
+- CHIP_R600,
+- CHIP_RV610,
+- CHIP_RV630,
+- CHIP_RV620,
+- CHIP_RV635,
+- CHIP_RV670,
+- CHIP_RS780,
+- CHIP_RV770,
+- CHIP_RV730,
+- CHIP_RV710,
+- CHIP_RS880,
+- CHIP_LAST,
+-};
+-
+-enum radeon_chip_flags {
+- RADEON_FAMILY_MASK = 0x0000ffffUL,
+- RADEON_FLAGS_MASK = 0xffff0000UL,
+- RADEON_IS_MOBILITY = 0x00010000UL,
+- RADEON_IS_IGP = 0x00020000UL,
+- RADEON_SINGLE_CRTC = 0x00040000UL,
+- RADEON_IS_AGP = 0x00080000UL,
+- RADEON_HAS_HIERZ = 0x00100000UL,
+- RADEON_IS_PCIE = 0x00200000UL,
+- RADEON_NEW_MEMMAP = 0x00400000UL,
+- RADEON_IS_PCI = 0x00800000UL,
+- RADEON_IS_IGPGART = 0x01000000UL,
+-};
+-
++#define RADEON_BIOS_NUM_SCRATCH 8
+
+ /*
+ * Errata workarounds.
+@@ -151,10 +114,21 @@ struct radeon_device;
+ */
+ bool radeon_get_bios(struct radeon_device *rdev);
+
++
+ /*
+- * Clocks
++ * Dummy page
+ */
++struct radeon_dummy_page {
++ struct page *page;
++ dma_addr_t addr;
++};
++int radeon_dummy_page_init(struct radeon_device *rdev);
++void radeon_dummy_page_fini(struct radeon_device *rdev);
+
++
++/*
++ * Clocks
++ */
+ struct radeon_clock {
+ struct radeon_pll p1pll;
+ struct radeon_pll p2pll;
+@@ -165,6 +139,7 @@ struct radeon_clock {
+ uint32_t default_sclk;
+ };
+
++
+ /*
+ * Fences.
+ */
+@@ -331,14 +306,18 @@ struct radeon_mc {
+ resource_size_t aper_size;
+ resource_size_t aper_base;
+ resource_size_t agp_base;
+- unsigned gtt_location;
+- unsigned gtt_size;
+- unsigned vram_location;
+ /* for some chips with <= 32MB we need to lie
+ * about vram size near mc fb location */
+- unsigned mc_vram_size;
++ u64 mc_vram_size;
++ u64 gtt_location;
++ u64 gtt_size;
++ u64 gtt_start;
++ u64 gtt_end;
++ u64 vram_location;
++ u64 vram_start;
++ u64 vram_end;
+ unsigned vram_width;
+- unsigned real_vram_size;
++ u64 real_vram_size;
+ int vram_mtrr;
+ bool vram_is_ddr;
+ };
+@@ -381,10 +360,14 @@ struct radeon_ib {
+ unsigned long idx;
+ uint64_t gpu_addr;
+ struct radeon_fence *fence;
+- volatile uint32_t *ptr;
++ uint32_t *ptr;
+ uint32_t length_dw;
+ };
+
++/*
++ * locking -
++ * mutex protects scheduled_ibs, ready, alloc_bm
++ */
+ struct radeon_ib_pool {
+ struct mutex mutex;
+ struct radeon_object *robj;
+@@ -410,6 +393,16 @@ struct radeon_cp {
+ bool ready;
+ };
+
++struct r600_blit {
++ struct radeon_object *shader_obj;
++ u64 shader_gpu_addr;
++ u32 vs_offset, ps_offset;
++ u32 state_offset;
++ u32 state_len;
++ u32 vb_used, vb_total;
++ struct radeon_ib *vb_ib;
++};
++
+ int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib);
+ void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib);
+ int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib);
+@@ -440,7 +433,12 @@ struct radeon_cs_reloc {
+ struct radeon_cs_chunk {
+ uint32_t chunk_id;
+ uint32_t length_dw;
++ int kpage_idx[2];
++ uint32_t *kpage[2];
+ uint32_t *kdata;
++ void __user *user_ptr;
++ int last_copied_page;
++ int last_page_index;
+ };
+
+ struct radeon_cs_parser {
+@@ -462,8 +460,39 @@ struct radeon_cs_parser {
+ int chunk_relocs_idx;
+ struct radeon_ib *ib;
+ void *track;
++ unsigned family;
++ int parser_error;
+ };
+
++extern int radeon_cs_update_pages(struct radeon_cs_parser *p, int pg_idx);
++extern int radeon_cs_finish_pages(struct radeon_cs_parser *p);
++
++
++static inline u32 radeon_get_ib_value(struct radeon_cs_parser *p, int idx)
++{
++ struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx];
++ u32 pg_idx, pg_offset;
++ u32 idx_value = 0;
++ int new_page;
++
++ pg_idx = (idx * 4) / PAGE_SIZE;
++ pg_offset = (idx * 4) % PAGE_SIZE;
++
++ if (ibc->kpage_idx[0] == pg_idx)
++ return ibc->kpage[0][pg_offset/4];
++ if (ibc->kpage_idx[1] == pg_idx)
++ return ibc->kpage[1][pg_offset/4];
++
++ new_page = radeon_cs_update_pages(p, pg_idx);
++ if (new_page < 0) {
++ p->parser_error = new_page;
++ return 0;
++ }
++
++ idx_value = ibc->kpage[new_page][pg_offset/4];
++ return idx_value;
++}
++
+ struct radeon_cs_packet {
+ unsigned idx;
+ unsigned type;
+@@ -558,6 +587,9 @@ int r100_debugfs_cp_init(struct radeon_device *rdev);
+ */
+ struct radeon_asic {
+ int (*init)(struct radeon_device *rdev);
++ void (*fini)(struct radeon_device *rdev);
++ int (*resume)(struct radeon_device *rdev);
++ int (*suspend)(struct radeon_device *rdev);
+ void (*errata)(struct radeon_device *rdev);
+ void (*vram_info)(struct radeon_device *rdev);
+ int (*gpu_reset)(struct radeon_device *rdev);
+@@ -565,6 +597,8 @@ struct radeon_asic {
+ void (*mc_fini)(struct radeon_device *rdev);
+ int (*wb_init)(struct radeon_device *rdev);
+ void (*wb_fini)(struct radeon_device *rdev);
++ int (*gart_init)(struct radeon_device *rdev);
++ void (*gart_fini)(struct radeon_device *rdev);
+ int (*gart_enable)(struct radeon_device *rdev);
+ void (*gart_disable)(struct radeon_device *rdev);
+ void (*gart_tlb_flush)(struct radeon_device *rdev);
+@@ -572,7 +606,11 @@ struct radeon_asic {
+ int (*cp_init)(struct radeon_device *rdev, unsigned ring_size);
+ void (*cp_fini)(struct radeon_device *rdev);
+ void (*cp_disable)(struct radeon_device *rdev);
++ void (*cp_commit)(struct radeon_device *rdev);
+ void (*ring_start)(struct radeon_device *rdev);
++ int (*ring_test)(struct radeon_device *rdev);
++ void (*ring_ib_execute)(struct radeon_device *rdev, struct radeon_ib *ib);
++ int (*ib_test)(struct radeon_device *rdev);
+ int (*irq_set)(struct radeon_device *rdev);
+ int (*irq_process)(struct radeon_device *rdev);
+ u32 (*get_vblank_counter)(struct radeon_device *rdev, int crtc);
+@@ -604,8 +642,60 @@ struct radeon_asic {
+ void (*bandwidth_update)(struct radeon_device *rdev);
+ };
+
++/*
++ * Asic structures
++ */
++struct r100_asic {
++ const unsigned *reg_safe_bm;
++ unsigned reg_safe_bm_size;
++};
++
++struct r300_asic {
++ const unsigned *reg_safe_bm;
++ unsigned reg_safe_bm_size;
++};
++
++struct r600_asic {
++ unsigned max_pipes;
++ unsigned max_tile_pipes;
++ unsigned max_simds;
++ unsigned max_backends;
++ unsigned max_gprs;
++ unsigned max_threads;
++ unsigned max_stack_entries;
++ unsigned max_hw_contexts;
++ unsigned max_gs_threads;
++ unsigned sx_max_export_size;
++ unsigned sx_max_export_pos_size;
++ unsigned sx_max_export_smx_size;
++ unsigned sq_num_cf_insts;
++};
++
++struct rv770_asic {
++ unsigned max_pipes;
++ unsigned max_tile_pipes;
++ unsigned max_simds;
++ unsigned max_backends;
++ unsigned max_gprs;
++ unsigned max_threads;
++ unsigned max_stack_entries;
++ unsigned max_hw_contexts;
++ unsigned max_gs_threads;
++ unsigned sx_max_export_size;
++ unsigned sx_max_export_pos_size;
++ unsigned sx_max_export_smx_size;
++ unsigned sq_num_cf_insts;
++ unsigned sx_num_of_sets;
++ unsigned sc_prim_fifo_size;
++ unsigned sc_hiz_tile_fifo_size;
++ unsigned sc_earlyz_tile_fifo_fize;
++};
++
+ union radeon_asic_config {
+ struct r300_asic r300;
++ struct r100_asic r100;
++ struct r600_asic r600;
++ struct rv770_asic rv770;
+ };
+
+
+@@ -646,6 +736,7 @@ typedef uint32_t (*radeon_rreg_t)(struct radeon_device*, uint32_t);
+ typedef void (*radeon_wreg_t)(struct radeon_device*, uint32_t, uint32_t);
+
+ struct radeon_device {
++ struct device *dev;
+ struct drm_device *ddev;
+ struct pci_dev *pdev;
+ /* ASIC */
+@@ -689,13 +780,20 @@ struct radeon_device {
+ struct radeon_asic *asic;
+ struct radeon_gem gem;
+ struct radeon_pm pm;
++ uint32_t bios_scratch[RADEON_BIOS_NUM_SCRATCH];
+ struct mutex cs_mutex;
+ struct radeon_wb wb;
++ struct radeon_dummy_page dummy_page;
+ bool gpu_lockup;
+ bool shutdown;
+ bool suspend;
+ bool need_dma32;
++ bool new_init_path;
++ bool accel_working;
+ struct radeon_surface_reg surface_regs[RADEON_GEM_MAX_SURFACES];
++ const struct firmware *me_fw; /* all family ME firmware */
++ const struct firmware *pfp_fw; /* r6/700 PFP firmware */
++ struct r600_blit r600_blit;
+ };
+
+ int radeon_device_init(struct radeon_device *rdev,
+@@ -705,6 +803,13 @@ int radeon_device_init(struct radeon_device *rdev,
+ void radeon_device_fini(struct radeon_device *rdev);
+ int radeon_gpu_wait_for_idle(struct radeon_device *rdev);
+
++/* r600 blit */
++int r600_blit_prepare_copy(struct radeon_device *rdev, int size_bytes);
++void r600_blit_done_copy(struct radeon_device *rdev, struct radeon_fence *fence);
++void r600_kms_blit_copy(struct radeon_device *rdev,
++ u64 src_gpu_addr, u64 dst_gpu_addr,
++ int size_bytes);
++
+ static inline uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg)
+ {
+ if (reg < 0x10000)
+@@ -732,6 +837,7 @@ static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32
+ #define RREG8(reg) readb(((void __iomem *)rdev->rmmio) + (reg))
+ #define WREG8(reg, v) writeb(v, ((void __iomem *)rdev->rmmio) + (reg))
+ #define RREG32(reg) r100_mm_rreg(rdev, (reg))
++#define DREG32(reg) printk(KERN_INFO "REGISTER: " #reg " : 0x%08X\n", r100_mm_rreg(rdev, (reg)))
+ #define WREG32(reg, v) r100_mm_wreg(rdev, (reg), (v))
+ #define REG_SET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
+ #define REG_GET(FIELD, v) (((v) << FIELD##_SHIFT) & FIELD##_MASK)
+@@ -755,6 +861,7 @@ static inline void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32
+ tmp_ |= ((val) & ~(mask)); \
+ WREG32_PLL(reg, tmp_); \
+ } while (0)
++#define DREG32_SYS(sqf, rdev, reg) seq_printf((sqf), #reg " : 0x%08X\n", r100_mm_rreg((rdev), (reg)))
+
+ /*
+ * Indirect registers accessor
+@@ -819,51 +926,6 @@ void radeon_atombios_fini(struct radeon_device *rdev);
+ /*
+ * RING helpers.
+ */
+-#define CP_PACKET0 0x00000000
+-#define PACKET0_BASE_INDEX_SHIFT 0
+-#define PACKET0_BASE_INDEX_MASK (0x1ffff << 0)
+-#define PACKET0_COUNT_SHIFT 16
+-#define PACKET0_COUNT_MASK (0x3fff << 16)
+-#define CP_PACKET1 0x40000000
+-#define CP_PACKET2 0x80000000
+-#define PACKET2_PAD_SHIFT 0
+-#define PACKET2_PAD_MASK (0x3fffffff << 0)
+-#define CP_PACKET3 0xC0000000
+-#define PACKET3_IT_OPCODE_SHIFT 8
+-#define PACKET3_IT_OPCODE_MASK (0xff << 8)
+-#define PACKET3_COUNT_SHIFT 16
+-#define PACKET3_COUNT_MASK (0x3fff << 16)
+-/* PACKET3 op code */
+-#define PACKET3_NOP 0x10
+-#define PACKET3_3D_DRAW_VBUF 0x28
+-#define PACKET3_3D_DRAW_IMMD 0x29
+-#define PACKET3_3D_DRAW_INDX 0x2A
+-#define PACKET3_3D_LOAD_VBPNTR 0x2F
+-#define PACKET3_INDX_BUFFER 0x33
+-#define PACKET3_3D_DRAW_VBUF_2 0x34
+-#define PACKET3_3D_DRAW_IMMD_2 0x35
+-#define PACKET3_3D_DRAW_INDX_2 0x36
+-#define PACKET3_BITBLT_MULTI 0x9B
+-
+-#define PACKET0(reg, n) (CP_PACKET0 | \
+- REG_SET(PACKET0_BASE_INDEX, (reg) >> 2) | \
+- REG_SET(PACKET0_COUNT, (n)))
+-#define PACKET2(v) (CP_PACKET2 | REG_SET(PACKET2_PAD, (v)))
+-#define PACKET3(op, n) (CP_PACKET3 | \
+- REG_SET(PACKET3_IT_OPCODE, (op)) | \
+- REG_SET(PACKET3_COUNT, (n)))
+-
+-#define PACKET_TYPE0 0
+-#define PACKET_TYPE1 1
+-#define PACKET_TYPE2 2
+-#define PACKET_TYPE3 3
+-
+-#define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3)
+-#define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF)
+-#define CP_PACKET0_GET_REG(h) (((h) & 0x1FFF) << 2)
+-#define CP_PACKET0_GET_ONE_REG_WR(h) (((h) >> 15) & 1)
+-#define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF)
+-
+ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
+ {
+ #if DRM_DEBUG_CODE
+@@ -882,6 +944,9 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
+ * ASICs macro.
+ */
+ #define radeon_init(rdev) (rdev)->asic->init((rdev))
++#define radeon_fini(rdev) (rdev)->asic->fini((rdev))
++#define radeon_resume(rdev) (rdev)->asic->resume((rdev))
++#define radeon_suspend(rdev) (rdev)->asic->suspend((rdev))
+ #define radeon_cs_parse(p) rdev->asic->cs_parse((p))
+ #define radeon_errata(rdev) (rdev)->asic->errata((rdev))
+ #define radeon_vram_info(rdev) (rdev)->asic->vram_info((rdev))
+@@ -890,6 +955,8 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
+ #define radeon_mc_fini(rdev) (rdev)->asic->mc_fini((rdev))
+ #define radeon_wb_init(rdev) (rdev)->asic->wb_init((rdev))
+ #define radeon_wb_fini(rdev) (rdev)->asic->wb_fini((rdev))
++#define radeon_gpu_gart_init(rdev) (rdev)->asic->gart_init((rdev))
++#define radeon_gpu_gart_fini(rdev) (rdev)->asic->gart_fini((rdev))
+ #define radeon_gart_enable(rdev) (rdev)->asic->gart_enable((rdev))
+ #define radeon_gart_disable(rdev) (rdev)->asic->gart_disable((rdev))
+ #define radeon_gart_tlb_flush(rdev) (rdev)->asic->gart_tlb_flush((rdev))
+@@ -897,7 +964,11 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
+ #define radeon_cp_init(rdev,rsize) (rdev)->asic->cp_init((rdev), (rsize))
+ #define radeon_cp_fini(rdev) (rdev)->asic->cp_fini((rdev))
+ #define radeon_cp_disable(rdev) (rdev)->asic->cp_disable((rdev))
++#define radeon_cp_commit(rdev) (rdev)->asic->cp_commit((rdev))
+ #define radeon_ring_start(rdev) (rdev)->asic->ring_start((rdev))
++#define radeon_ring_test(rdev) (rdev)->asic->ring_test((rdev))
++#define radeon_ring_ib_execute(rdev, ib) (rdev)->asic->ring_ib_execute((rdev), (ib))
++#define radeon_ib_test(rdev) (rdev)->asic->ib_test((rdev))
+ #define radeon_irq_set(rdev) (rdev)->asic->irq_set((rdev))
+ #define radeon_irq_process(rdev) (rdev)->asic->irq_process((rdev))
+ #define radeon_get_vblank_counter(rdev, crtc) (rdev)->asic->get_vblank_counter((rdev), (crtc))
+@@ -913,4 +984,109 @@ static inline void radeon_ring_write(struct radeon_device *rdev, uint32_t v)
+ #define radeon_clear_surface_reg(rdev, r) ((rdev)->asic->clear_surface_reg((rdev), (r)))
+ #define radeon_bandwidth_update(rdev) (rdev)->asic->bandwidth_update((rdev))
+
++/* Common functions */
++extern int radeon_gart_table_vram_pin(struct radeon_device *rdev);
++extern int radeon_modeset_init(struct radeon_device *rdev);
++extern void radeon_modeset_fini(struct radeon_device *rdev);
++extern bool radeon_card_posted(struct radeon_device *rdev);
++extern int radeon_clocks_init(struct radeon_device *rdev);
++extern void radeon_clocks_fini(struct radeon_device *rdev);
++extern void radeon_scratch_init(struct radeon_device *rdev);
++extern void radeon_surface_init(struct radeon_device *rdev);
++extern int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data);
++extern void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
++
++/* r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280 */
++struct r100_mc_save {
++ u32 GENMO_WT;
++ u32 CRTC_EXT_CNTL;
++ u32 CRTC_GEN_CNTL;
++ u32 CRTC2_GEN_CNTL;
++ u32 CUR_OFFSET;
++ u32 CUR2_OFFSET;
++};
++extern void r100_cp_disable(struct radeon_device *rdev);
++extern int r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
++extern void r100_cp_fini(struct radeon_device *rdev);
++extern void r100_pci_gart_tlb_flush(struct radeon_device *rdev);
++extern int r100_pci_gart_init(struct radeon_device *rdev);
++extern void r100_pci_gart_fini(struct radeon_device *rdev);
++extern int r100_pci_gart_enable(struct radeon_device *rdev);
++extern void r100_pci_gart_disable(struct radeon_device *rdev);
++extern int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
++extern int r100_debugfs_mc_info_init(struct radeon_device *rdev);
++extern int r100_gui_wait_for_idle(struct radeon_device *rdev);
++extern void r100_ib_fini(struct radeon_device *rdev);
++extern int r100_ib_init(struct radeon_device *rdev);
++extern void r100_irq_disable(struct radeon_device *rdev);
++extern int r100_irq_set(struct radeon_device *rdev);
++extern void r100_mc_stop(struct radeon_device *rdev, struct r100_mc_save *save);
++extern void r100_mc_resume(struct radeon_device *rdev, struct r100_mc_save *save);
++extern void r100_vram_init_sizes(struct radeon_device *rdev);
++extern void r100_wb_disable(struct radeon_device *rdev);
++extern void r100_wb_fini(struct radeon_device *rdev);
++extern int r100_wb_init(struct radeon_device *rdev);
++extern void r100_hdp_reset(struct radeon_device *rdev);
++extern int r100_rb2d_reset(struct radeon_device *rdev);
++extern int r100_cp_reset(struct radeon_device *rdev);
++
++/* r300,r350,rv350,rv370,rv380 */
++extern void r300_set_reg_safe(struct radeon_device *rdev);
++extern void r300_mc_program(struct radeon_device *rdev);
++extern void r300_vram_info(struct radeon_device *rdev);
++extern int rv370_pcie_gart_init(struct radeon_device *rdev);
++extern void rv370_pcie_gart_fini(struct radeon_device *rdev);
++extern int rv370_pcie_gart_enable(struct radeon_device *rdev);
++extern void rv370_pcie_gart_disable(struct radeon_device *rdev);
++
++/* r420,r423,rv410 */
++extern int r420_mc_init(struct radeon_device *rdev);
++extern u32 r420_mc_rreg(struct radeon_device *rdev, u32 reg);
++extern void r420_mc_wreg(struct radeon_device *rdev, u32 reg, u32 v);
++extern int r420_debugfs_pipes_info_init(struct radeon_device *rdev);
++extern void r420_pipes_init(struct radeon_device *rdev);
++
++/* rv515 */
++struct rv515_mc_save {
++ u32 d1vga_control;
++ u32 d2vga_control;
++ u32 vga_render_control;
++ u32 vga_hdp_control;
++ u32 d1crtc_control;
++ u32 d2crtc_control;
++};
++extern void rv515_bandwidth_avivo_update(struct radeon_device *rdev);
++extern void rv515_vga_render_disable(struct radeon_device *rdev);
++extern void rv515_set_safe_registers(struct radeon_device *rdev);
++extern void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save);
++extern void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save);
++extern void rv515_clock_startup(struct radeon_device *rdev);
++extern void rv515_debugfs(struct radeon_device *rdev);
++extern int rv515_suspend(struct radeon_device *rdev);
++
++/* rs690, rs740 */
++extern void rs690_line_buffer_adjust(struct radeon_device *rdev,
++ struct drm_display_mode *mode1,
++ struct drm_display_mode *mode2);
++
++/* r600, rv610, rv630, rv620, rv635, rv670, rs780, rs880 */
++extern bool r600_card_posted(struct radeon_device *rdev);
++extern void r600_cp_stop(struct radeon_device *rdev);
++extern void r600_ring_init(struct radeon_device *rdev, unsigned ring_size);
++extern int r600_cp_resume(struct radeon_device *rdev);
++extern int r600_count_pipe_bits(uint32_t val);
++extern int r600_gart_clear_page(struct radeon_device *rdev, int i);
++extern int r600_mc_wait_for_idle(struct radeon_device *rdev);
++extern int r600_pcie_gart_init(struct radeon_device *rdev);
++extern void r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
++extern int r600_ib_test(struct radeon_device *rdev);
++extern int r600_ring_test(struct radeon_device *rdev);
++extern int r600_wb_init(struct radeon_device *rdev);
++extern void r600_wb_fini(struct radeon_device *rdev);
++extern void r600_scratch_init(struct radeon_device *rdev);
++extern int r600_blit_init(struct radeon_device *rdev);
++extern void r600_blit_fini(struct radeon_device *rdev);
++extern int r600_cp_init_microcode(struct radeon_device *rdev);
++extern int r600_gpu_reset(struct radeon_device *rdev);
++
+ #endif
+diff --git a/drivers/gpu/drm/radeon/radeon_asic.h b/drivers/gpu/drm/radeon/radeon_asic.h
+index 93d8f88..bce0cb0 100644
+--- a/drivers/gpu/drm/radeon/radeon_asic.h
++++ b/drivers/gpu/drm/radeon/radeon_asic.h
+@@ -42,6 +42,7 @@ void radeon_atom_set_clock_gating(struct radeon_device *rdev, int enable);
+ * r100,rv100,rs100,rv200,rs200,r200,rv250,rs300,rv280
+ */
+ int r100_init(struct radeon_device *rdev);
++int r200_init(struct radeon_device *rdev);
+ uint32_t r100_mm_rreg(struct radeon_device *rdev, uint32_t reg);
+ void r100_mm_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
+ void r100_errata(struct radeon_device *rdev);
+@@ -52,13 +53,16 @@ void r100_mc_fini(struct radeon_device *rdev);
+ u32 r100_get_vblank_counter(struct radeon_device *rdev, int crtc);
+ int r100_wb_init(struct radeon_device *rdev);
+ void r100_wb_fini(struct radeon_device *rdev);
+-int r100_gart_enable(struct radeon_device *rdev);
++int r100_pci_gart_init(struct radeon_device *rdev);
++void r100_pci_gart_fini(struct radeon_device *rdev);
++int r100_pci_gart_enable(struct radeon_device *rdev);
+ void r100_pci_gart_disable(struct radeon_device *rdev);
+ void r100_pci_gart_tlb_flush(struct radeon_device *rdev);
+ int r100_pci_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
+ int r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
+ void r100_cp_fini(struct radeon_device *rdev);
+ void r100_cp_disable(struct radeon_device *rdev);
++void r100_cp_commit(struct radeon_device *rdev);
+ void r100_ring_start(struct radeon_device *rdev);
+ int r100_irq_set(struct radeon_device *rdev);
+ int r100_irq_process(struct radeon_device *rdev);
+@@ -77,6 +81,9 @@ int r100_set_surface_reg(struct radeon_device *rdev, int reg,
+ uint32_t offset, uint32_t obj_size);
+ int r100_clear_surface_reg(struct radeon_device *rdev, int reg);
+ void r100_bandwidth_update(struct radeon_device *rdev);
++void r100_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
++int r100_ib_test(struct radeon_device *rdev);
++int r100_ring_test(struct radeon_device *rdev);
+
+ static struct radeon_asic r100_asic = {
+ .init = &r100_init,
+@@ -87,14 +94,20 @@ static struct radeon_asic r100_asic = {
+ .mc_fini = &r100_mc_fini,
+ .wb_init = &r100_wb_init,
+ .wb_fini = &r100_wb_fini,
+- .gart_enable = &r100_gart_enable,
++ .gart_init = &r100_pci_gart_init,
++ .gart_fini = &r100_pci_gart_fini,
++ .gart_enable = &r100_pci_gart_enable,
+ .gart_disable = &r100_pci_gart_disable,
+ .gart_tlb_flush = &r100_pci_gart_tlb_flush,
+ .gart_set_page = &r100_pci_gart_set_page,
+ .cp_init = &r100_cp_init,
+ .cp_fini = &r100_cp_fini,
+ .cp_disable = &r100_cp_disable,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &r100_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = &r100_ib_test,
+ .irq_set = &r100_irq_set,
+ .irq_process = &r100_irq_process,
+ .get_vblank_counter = &r100_get_vblank_counter,
+@@ -126,7 +139,9 @@ void r300_ring_start(struct radeon_device *rdev);
+ void r300_fence_ring_emit(struct radeon_device *rdev,
+ struct radeon_fence *fence);
+ int r300_cs_parse(struct radeon_cs_parser *p);
+-int r300_gart_enable(struct radeon_device *rdev);
++int rv370_pcie_gart_init(struct radeon_device *rdev);
++void rv370_pcie_gart_fini(struct radeon_device *rdev);
++int rv370_pcie_gart_enable(struct radeon_device *rdev);
+ void rv370_pcie_gart_disable(struct radeon_device *rdev);
+ void rv370_pcie_gart_tlb_flush(struct radeon_device *rdev);
+ int rv370_pcie_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr);
+@@ -148,14 +163,20 @@ static struct radeon_asic r300_asic = {
+ .mc_fini = &r300_mc_fini,
+ .wb_init = &r100_wb_init,
+ .wb_fini = &r100_wb_fini,
+- .gart_enable = &r300_gart_enable,
++ .gart_init = &r100_pci_gart_init,
++ .gart_fini = &r100_pci_gart_fini,
++ .gart_enable = &r100_pci_gart_enable,
+ .gart_disable = &r100_pci_gart_disable,
+ .gart_tlb_flush = &r100_pci_gart_tlb_flush,
+ .gart_set_page = &r100_pci_gart_set_page,
+ .cp_init = &r100_cp_init,
+ .cp_fini = &r100_cp_fini,
+ .cp_disable = &r100_cp_disable,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &r300_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = &r100_ib_test,
+ .irq_set = &r100_irq_set,
+ .irq_process = &r100_irq_process,
+ .get_vblank_counter = &r100_get_vblank_counter,
+@@ -176,27 +197,34 @@ static struct radeon_asic r300_asic = {
+ /*
+ * r420,r423,rv410
+ */
+-void r420_errata(struct radeon_device *rdev);
+-void r420_vram_info(struct radeon_device *rdev);
+-int r420_mc_init(struct radeon_device *rdev);
+-void r420_mc_fini(struct radeon_device *rdev);
++extern int r420_init(struct radeon_device *rdev);
++extern void r420_fini(struct radeon_device *rdev);
++extern int r420_suspend(struct radeon_device *rdev);
++extern int r420_resume(struct radeon_device *rdev);
+ static struct radeon_asic r420_asic = {
+- .init = &r300_init,
+- .errata = &r420_errata,
+- .vram_info = &r420_vram_info,
++ .init = &r420_init,
++ .fini = &r420_fini,
++ .suspend = &r420_suspend,
++ .resume = &r420_resume,
++ .errata = NULL,
++ .vram_info = NULL,
+ .gpu_reset = &r300_gpu_reset,
+- .mc_init = &r420_mc_init,
+- .mc_fini = &r420_mc_fini,
+- .wb_init = &r100_wb_init,
+- .wb_fini = &r100_wb_fini,
+- .gart_enable = &r300_gart_enable,
+- .gart_disable = &rv370_pcie_gart_disable,
++ .mc_init = NULL,
++ .mc_fini = NULL,
++ .wb_init = NULL,
++ .wb_fini = NULL,
++ .gart_enable = NULL,
++ .gart_disable = NULL,
+ .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
+ .gart_set_page = &rv370_pcie_gart_set_page,
+- .cp_init = &r100_cp_init,
+- .cp_fini = &r100_cp_fini,
+- .cp_disable = &r100_cp_disable,
++ .cp_init = NULL,
++ .cp_fini = NULL,
++ .cp_disable = NULL,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &r300_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = NULL,
+ .irq_set = &r100_irq_set,
+ .irq_process = &r100_irq_process,
+ .get_vblank_counter = &r100_get_vblank_counter,
+@@ -222,6 +250,8 @@ void rs400_errata(struct radeon_device *rdev);
+ void rs400_vram_info(struct radeon_device *rdev);
+ int rs400_mc_init(struct radeon_device *rdev);
+ void rs400_mc_fini(struct radeon_device *rdev);
++int rs400_gart_init(struct radeon_device *rdev);
++void rs400_gart_fini(struct radeon_device *rdev);
+ int rs400_gart_enable(struct radeon_device *rdev);
+ void rs400_gart_disable(struct radeon_device *rdev);
+ void rs400_gart_tlb_flush(struct radeon_device *rdev);
+@@ -237,6 +267,8 @@ static struct radeon_asic rs400_asic = {
+ .mc_fini = &rs400_mc_fini,
+ .wb_init = &r100_wb_init,
+ .wb_fini = &r100_wb_fini,
++ .gart_init = &rs400_gart_init,
++ .gart_fini = &rs400_gart_fini,
+ .gart_enable = &rs400_gart_enable,
+ .gart_disable = &rs400_gart_disable,
+ .gart_tlb_flush = &rs400_gart_tlb_flush,
+@@ -244,7 +276,11 @@ static struct radeon_asic rs400_asic = {
+ .cp_init = &r100_cp_init,
+ .cp_fini = &r100_cp_fini,
+ .cp_disable = &r100_cp_disable,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &r300_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = &r100_ib_test,
+ .irq_set = &r100_irq_set,
+ .irq_process = &r100_irq_process,
+ .get_vblank_counter = &r100_get_vblank_counter,
+@@ -266,7 +302,7 @@ static struct radeon_asic rs400_asic = {
+ /*
+ * rs600.
+ */
+-int rs600_init(struct radeon_device *dev);
++int rs600_init(struct radeon_device *rdev);
+ void rs600_errata(struct radeon_device *rdev);
+ void rs600_vram_info(struct radeon_device *rdev);
+ int rs600_mc_init(struct radeon_device *rdev);
+@@ -274,6 +310,8 @@ void rs600_mc_fini(struct radeon_device *rdev);
+ int rs600_irq_set(struct radeon_device *rdev);
+ int rs600_irq_process(struct radeon_device *rdev);
+ u32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc);
++int rs600_gart_init(struct radeon_device *rdev);
++void rs600_gart_fini(struct radeon_device *rdev);
+ int rs600_gart_enable(struct radeon_device *rdev);
+ void rs600_gart_disable(struct radeon_device *rdev);
+ void rs600_gart_tlb_flush(struct radeon_device *rdev);
+@@ -290,6 +328,8 @@ static struct radeon_asic rs600_asic = {
+ .mc_fini = &rs600_mc_fini,
+ .wb_init = &r100_wb_init,
+ .wb_fini = &r100_wb_fini,
++ .gart_init = &rs600_gart_init,
++ .gart_fini = &rs600_gart_fini,
+ .gart_enable = &rs600_gart_enable,
+ .gart_disable = &rs600_gart_disable,
+ .gart_tlb_flush = &rs600_gart_tlb_flush,
+@@ -297,7 +337,11 @@ static struct radeon_asic rs600_asic = {
+ .cp_init = &r100_cp_init,
+ .cp_fini = &r100_cp_fini,
+ .cp_disable = &r100_cp_disable,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &r300_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = &r100_ib_test,
+ .irq_set = &rs600_irq_set,
+ .irq_process = &rs600_irq_process,
+ .get_vblank_counter = &rs600_get_vblank_counter,
+@@ -333,6 +377,8 @@ static struct radeon_asic rs690_asic = {
+ .mc_fini = &rs690_mc_fini,
+ .wb_init = &r100_wb_init,
+ .wb_fini = &r100_wb_fini,
++ .gart_init = &rs400_gart_init,
++ .gart_fini = &rs400_gart_fini,
+ .gart_enable = &rs400_gart_enable,
+ .gart_disable = &rs400_gart_disable,
+ .gart_tlb_flush = &rs400_gart_tlb_flush,
+@@ -340,7 +386,11 @@ static struct radeon_asic rs690_asic = {
+ .cp_init = &r100_cp_init,
+ .cp_fini = &r100_cp_fini,
+ .cp_disable = &r100_cp_disable,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &r300_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = &r100_ib_test,
+ .irq_set = &rs600_irq_set,
+ .irq_process = &rs600_irq_process,
+ .get_vblank_counter = &rs600_get_vblank_counter,
+@@ -363,34 +413,42 @@ static struct radeon_asic rs690_asic = {
+ * rv515
+ */
+ int rv515_init(struct radeon_device *rdev);
+-void rv515_errata(struct radeon_device *rdev);
+-void rv515_vram_info(struct radeon_device *rdev);
++void rv515_fini(struct radeon_device *rdev);
+ int rv515_gpu_reset(struct radeon_device *rdev);
+-int rv515_mc_init(struct radeon_device *rdev);
+-void rv515_mc_fini(struct radeon_device *rdev);
+ uint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg);
+ void rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
+ void rv515_ring_start(struct radeon_device *rdev);
+ uint32_t rv515_pcie_rreg(struct radeon_device *rdev, uint32_t reg);
+ void rv515_pcie_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
+ void rv515_bandwidth_update(struct radeon_device *rdev);
++int rv515_resume(struct radeon_device *rdev);
++int rv515_suspend(struct radeon_device *rdev);
+ static struct radeon_asic rv515_asic = {
+ .init = &rv515_init,
+- .errata = &rv515_errata,
+- .vram_info = &rv515_vram_info,
++ .fini = &rv515_fini,
++ .suspend = &rv515_suspend,
++ .resume = &rv515_resume,
++ .errata = NULL,
++ .vram_info = NULL,
+ .gpu_reset = &rv515_gpu_reset,
+- .mc_init = &rv515_mc_init,
+- .mc_fini = &rv515_mc_fini,
+- .wb_init = &r100_wb_init,
+- .wb_fini = &r100_wb_fini,
+- .gart_enable = &r300_gart_enable,
+- .gart_disable = &rv370_pcie_gart_disable,
++ .mc_init = NULL,
++ .mc_fini = NULL,
++ .wb_init = NULL,
++ .wb_fini = NULL,
++ .gart_init = &rv370_pcie_gart_init,
++ .gart_fini = &rv370_pcie_gart_fini,
++ .gart_enable = NULL,
++ .gart_disable = NULL,
+ .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
+ .gart_set_page = &rv370_pcie_gart_set_page,
+- .cp_init = &r100_cp_init,
+- .cp_fini = &r100_cp_fini,
+- .cp_disable = &r100_cp_disable,
++ .cp_init = NULL,
++ .cp_fini = NULL,
++ .cp_disable = NULL,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &rv515_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = NULL,
+ .irq_set = &rs600_irq_set,
+ .irq_process = &rs600_irq_process,
+ .get_vblank_counter = &rs600_get_vblank_counter,
+@@ -412,28 +470,34 @@ static struct radeon_asic rv515_asic = {
+ /*
+ * r520,rv530,rv560,rv570,r580
+ */
+-void r520_errata(struct radeon_device *rdev);
+-void r520_vram_info(struct radeon_device *rdev);
+-int r520_mc_init(struct radeon_device *rdev);
+-void r520_mc_fini(struct radeon_device *rdev);
+-void r520_bandwidth_update(struct radeon_device *rdev);
++int r520_init(struct radeon_device *rdev);
++int r520_resume(struct radeon_device *rdev);
+ static struct radeon_asic r520_asic = {
+- .init = &rv515_init,
+- .errata = &r520_errata,
+- .vram_info = &r520_vram_info,
++ .init = &r520_init,
++ .fini = &rv515_fini,
++ .suspend = &rv515_suspend,
++ .resume = &r520_resume,
++ .errata = NULL,
++ .vram_info = NULL,
+ .gpu_reset = &rv515_gpu_reset,
+- .mc_init = &r520_mc_init,
+- .mc_fini = &r520_mc_fini,
+- .wb_init = &r100_wb_init,
+- .wb_fini = &r100_wb_fini,
+- .gart_enable = &r300_gart_enable,
+- .gart_disable = &rv370_pcie_gart_disable,
++ .mc_init = NULL,
++ .mc_fini = NULL,
++ .wb_init = NULL,
++ .wb_fini = NULL,
++ .gart_init = NULL,
++ .gart_fini = NULL,
++ .gart_enable = NULL,
++ .gart_disable = NULL,
+ .gart_tlb_flush = &rv370_pcie_gart_tlb_flush,
+ .gart_set_page = &rv370_pcie_gart_set_page,
+- .cp_init = &r100_cp_init,
+- .cp_fini = &r100_cp_fini,
+- .cp_disable = &r100_cp_disable,
++ .cp_init = NULL,
++ .cp_fini = NULL,
++ .cp_disable = NULL,
++ .cp_commit = &r100_cp_commit,
+ .ring_start = &rv515_ring_start,
++ .ring_test = &r100_ring_test,
++ .ring_ib_execute = &r100_ring_ib_execute,
++ .ib_test = NULL,
+ .irq_set = &rs600_irq_set,
+ .irq_process = &rs600_irq_process,
+ .get_vblank_counter = &rs600_get_vblank_counter,
+@@ -448,13 +512,131 @@ static struct radeon_asic r520_asic = {
+ .set_clock_gating = &radeon_atom_set_clock_gating,
+ .set_surface_reg = r100_set_surface_reg,
+ .clear_surface_reg = r100_clear_surface_reg,
+- .bandwidth_update = &r520_bandwidth_update,
++ .bandwidth_update = &rv515_bandwidth_update,
+ };
+
+ /*
+- * r600,rv610,rv630,rv620,rv635,rv670,rs780,rv770,rv730,rv710
++ * r600,rv610,rv630,rv620,rv635,rv670,rs780,rs880
+ */
++int r600_init(struct radeon_device *rdev);
++void r600_fini(struct radeon_device *rdev);
++int r600_suspend(struct radeon_device *rdev);
++int r600_resume(struct radeon_device *rdev);
++int r600_wb_init(struct radeon_device *rdev);
++void r600_wb_fini(struct radeon_device *rdev);
++void r600_cp_commit(struct radeon_device *rdev);
++void r600_pcie_gart_tlb_flush(struct radeon_device *rdev);
+ uint32_t r600_pciep_rreg(struct radeon_device *rdev, uint32_t reg);
+ void r600_pciep_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v);
++int r600_cs_parse(struct radeon_cs_parser *p);
++void r600_fence_ring_emit(struct radeon_device *rdev,
++ struct radeon_fence *fence);
++int r600_copy_dma(struct radeon_device *rdev,
++ uint64_t src_offset,
++ uint64_t dst_offset,
++ unsigned num_pages,
++ struct radeon_fence *fence);
++int r600_irq_process(struct radeon_device *rdev);
++int r600_irq_set(struct radeon_device *rdev);
++int r600_gpu_reset(struct radeon_device *rdev);
++int r600_set_surface_reg(struct radeon_device *rdev, int reg,
++ uint32_t tiling_flags, uint32_t pitch,
++ uint32_t offset, uint32_t obj_size);
++int r600_clear_surface_reg(struct radeon_device *rdev, int reg);
++void r600_ring_ib_execute(struct radeon_device *rdev, struct radeon_ib *ib);
++int r600_ib_test(struct radeon_device *rdev);
++int r600_ring_test(struct radeon_device *rdev);
++int r600_copy_blit(struct radeon_device *rdev,
++ uint64_t src_offset, uint64_t dst_offset,
++ unsigned num_pages, struct radeon_fence *fence);
++
++static struct radeon_asic r600_asic = {
++ .errata = NULL,
++ .init = &r600_init,
++ .fini = &r600_fini,
++ .suspend = &r600_suspend,
++ .resume = &r600_resume,
++ .cp_commit = &r600_cp_commit,
++ .vram_info = NULL,
++ .gpu_reset = &r600_gpu_reset,
++ .mc_init = NULL,
++ .mc_fini = NULL,
++ .wb_init = &r600_wb_init,
++ .wb_fini = &r600_wb_fini,
++ .gart_enable = NULL,
++ .gart_disable = NULL,
++ .gart_tlb_flush = &r600_pcie_gart_tlb_flush,
++ .gart_set_page = &rs600_gart_set_page,
++ .cp_init = NULL,
++ .cp_fini = NULL,
++ .cp_disable = NULL,
++ .ring_start = NULL,
++ .ring_test = &r600_ring_test,
++ .ring_ib_execute = &r600_ring_ib_execute,
++ .ib_test = &r600_ib_test,
++ .irq_set = &r600_irq_set,
++ .irq_process = &r600_irq_process,
++ .fence_ring_emit = &r600_fence_ring_emit,
++ .cs_parse = &r600_cs_parse,
++ .copy_blit = &r600_copy_blit,
++ .copy_dma = &r600_copy_blit,
++ .copy = &r600_copy_blit,
++ .set_engine_clock = &radeon_atom_set_engine_clock,
++ .set_memory_clock = &radeon_atom_set_memory_clock,
++ .set_pcie_lanes = NULL,
++ .set_clock_gating = &radeon_atom_set_clock_gating,
++ .set_surface_reg = r600_set_surface_reg,
++ .clear_surface_reg = r600_clear_surface_reg,
++ .bandwidth_update = &rv515_bandwidth_update,
++};
++
++/*
++ * rv770,rv730,rv710,rv740
++ */
++int rv770_init(struct radeon_device *rdev);
++void rv770_fini(struct radeon_device *rdev);
++int rv770_suspend(struct radeon_device *rdev);
++int rv770_resume(struct radeon_device *rdev);
++int rv770_gpu_reset(struct radeon_device *rdev);
++
++static struct radeon_asic rv770_asic = {
++ .errata = NULL,
++ .init = &rv770_init,
++ .fini = &rv770_fini,
++ .suspend = &rv770_suspend,
++ .resume = &rv770_resume,
++ .cp_commit = &r600_cp_commit,
++ .vram_info = NULL,
++ .gpu_reset = &rv770_gpu_reset,
++ .mc_init = NULL,
++ .mc_fini = NULL,
++ .wb_init = &r600_wb_init,
++ .wb_fini = &r600_wb_fini,
++ .gart_enable = NULL,
++ .gart_disable = NULL,
++ .gart_tlb_flush = &r600_pcie_gart_tlb_flush,
++ .gart_set_page = &rs600_gart_set_page,
++ .cp_init = NULL,
++ .cp_fini = NULL,
++ .cp_disable = NULL,
++ .ring_start = NULL,
++ .ring_test = &r600_ring_test,
++ .ring_ib_execute = &r600_ring_ib_execute,
++ .ib_test = &r600_ib_test,
++ .irq_set = &r600_irq_set,
++ .irq_process = &r600_irq_process,
++ .fence_ring_emit = &r600_fence_ring_emit,
++ .cs_parse = &r600_cs_parse,
++ .copy_blit = &r600_copy_blit,
++ .copy_dma = &r600_copy_blit,
++ .copy = &r600_copy_blit,
++ .set_engine_clock = &radeon_atom_set_engine_clock,
++ .set_memory_clock = &radeon_atom_set_memory_clock,
++ .set_pcie_lanes = NULL,
++ .set_clock_gating = &radeon_atom_set_clock_gating,
++ .set_surface_reg = r600_set_surface_reg,
++ .clear_surface_reg = r600_clear_surface_reg,
++ .bandwidth_update = &rv515_bandwidth_update,
++};
+
+ #endif
+diff --git a/drivers/gpu/drm/radeon/radeon_atombios.c b/drivers/gpu/drm/radeon/radeon_atombios.c
+index fcfe5c0..5b6c08c 100644
+--- a/drivers/gpu/drm/radeon/radeon_atombios.c
++++ b/drivers/gpu/drm/radeon/radeon_atombios.c
+@@ -104,7 +104,7 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
+ uint32_t supported_device,
+ int *connector_type,
+ struct radeon_i2c_bus_rec *i2c_bus,
+- uint8_t *line_mux)
++ uint16_t *line_mux)
+ {
+
+ /* Asus M2A-VM HDMI board lists the DVI port as HDMI */
+@@ -143,20 +143,31 @@ static bool radeon_atom_apply_quirks(struct drm_device *dev,
+ return false;
+ }
+
+- /* some BIOSes seem to report DAC on HDMI - they hurt me with their lies */
+- if ((*connector_type == DRM_MODE_CONNECTOR_HDMIA) ||
+- (*connector_type == DRM_MODE_CONNECTOR_HDMIB)) {
+- if (supported_device & (ATOM_DEVICE_CRT_SUPPORT)) {
+- return false;
+- }
+- }
+-
+ /* ASUS HD 3600 XT board lists the DVI port as HDMI */
+ if ((dev->pdev->device == 0x9598) &&
+ (dev->pdev->subsystem_vendor == 0x1043) &&
+ (dev->pdev->subsystem_device == 0x01da)) {
+- if (*connector_type == DRM_MODE_CONNECTOR_HDMIB) {
+- *connector_type = DRM_MODE_CONNECTOR_DVID;
++ if (*connector_type == DRM_MODE_CONNECTOR_HDMIA) {
++ *connector_type = DRM_MODE_CONNECTOR_DVII;
++ }
++ }
++
++ /* ASUS HD 3450 board lists the DVI port as HDMI */
++ if ((dev->pdev->device == 0x95C5) &&
++ (dev->pdev->subsystem_vendor == 0x1043) &&
++ (dev->pdev->subsystem_device == 0x01e2)) {
++ if (*connector_type == DRM_MODE_CONNECTOR_HDMIA) {
++ *connector_type = DRM_MODE_CONNECTOR_DVII;
++ }
++ }
++
++ /* some BIOSes seem to report DAC on HDMI - usually this is a board with
++ * HDMI + VGA reporting as HDMI
++ */
++ if (*connector_type == DRM_MODE_CONNECTOR_HDMIA) {
++ if (supported_device & (ATOM_DEVICE_CRT_SUPPORT)) {
++ *connector_type = DRM_MODE_CONNECTOR_VGA;
++ *line_mux = 0;
+ }
+ }
+
+@@ -192,11 +203,11 @@ const int object_connector_convert[] = {
+ DRM_MODE_CONNECTOR_Composite,
+ DRM_MODE_CONNECTOR_SVIDEO,
+ DRM_MODE_CONNECTOR_Unknown,
++ DRM_MODE_CONNECTOR_Unknown,
+ DRM_MODE_CONNECTOR_9PinDIN,
+ DRM_MODE_CONNECTOR_Unknown,
+ DRM_MODE_CONNECTOR_HDMIA,
+ DRM_MODE_CONNECTOR_HDMIB,
+- DRM_MODE_CONNECTOR_HDMIB,
+ DRM_MODE_CONNECTOR_LVDS,
+ DRM_MODE_CONNECTOR_9PinDIN,
+ DRM_MODE_CONNECTOR_Unknown,
+@@ -218,7 +229,7 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
+ ATOM_OBJECT_HEADER *obj_header;
+ int i, j, path_size, device_support;
+ int connector_type;
+- uint16_t igp_lane_info;
++ uint16_t igp_lane_info, conn_id;
+ bool linkb;
+ struct radeon_i2c_bus_rec ddc_bus;
+
+@@ -261,12 +272,9 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
+ (le16_to_cpu(path->usConnObjectId) &
+ OBJECT_TYPE_MASK) >> OBJECT_TYPE_SHIFT;
+
+- if ((le16_to_cpu(path->usDeviceTag) ==
+- ATOM_DEVICE_TV1_SUPPORT)
+- || (le16_to_cpu(path->usDeviceTag) ==
+- ATOM_DEVICE_TV2_SUPPORT)
+- || (le16_to_cpu(path->usDeviceTag) ==
+- ATOM_DEVICE_CV_SUPPORT))
++ /* TODO CV support */
++ if (le16_to_cpu(path->usDeviceTag) ==
++ ATOM_DEVICE_CV_SUPPORT)
+ continue;
+
+ if ((rdev->family == CHIP_RS780) &&
+@@ -370,10 +378,6 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
+ && record->
+ ucRecordType <=
+ ATOM_MAX_OBJECT_RECORD_NUMBER) {
+- DRM_ERROR
+- ("record type %d\n",
+- record->
+- ucRecordType);
+ switch (record->
+ ucRecordType) {
+ case ATOM_I2C_RECORD_TYPE:
+@@ -409,9 +413,15 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
+ else
+ ddc_bus = radeon_lookup_gpio(dev, line_mux);
+
++ conn_id = le16_to_cpu(path->usConnObjectId);
++
++ if (!radeon_atom_apply_quirks
++ (dev, le16_to_cpu(path->usDeviceTag), &connector_type,
++ &ddc_bus, &conn_id))
++ continue;
++
+ radeon_add_atom_connector(dev,
+- le16_to_cpu(path->
+- usConnObjectId),
++ conn_id,
+ le16_to_cpu(path->
+ usDeviceTag),
+ connector_type, &ddc_bus,
+@@ -427,7 +437,7 @@ bool radeon_get_atom_connector_info_from_object_table(struct drm_device *dev)
+
+ struct bios_connector {
+ bool valid;
+- uint8_t line_mux;
++ uint16_t line_mux;
+ uint16_t devices;
+ int connector_type;
+ struct radeon_i2c_bus_rec ddc_bus;
+@@ -471,11 +481,6 @@ bool radeon_get_atom_connector_info_from_supported_devices_table(struct
+ continue;
+ }
+
+- if (i == ATOM_DEVICE_TV1_INDEX) {
+- DRM_DEBUG("Skipping TV Out\n");
+- continue;
+- }
+-
+ bios_connectors[i].connector_type =
+ supported_devices_connector_convert[ci.sucConnectorInfo.
+ sbfAccess.
+@@ -711,9 +716,8 @@ bool radeon_atom_get_clock_info(struct drm_device *dev)
+ return false;
+ }
+
+-struct radeon_encoder_int_tmds *radeon_atombios_get_tmds_info(struct
+- radeon_encoder
+- *encoder)
++bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder,
++ struct radeon_encoder_int_tmds *tmds)
+ {
+ struct drm_device *dev = encoder->base.dev;
+ struct radeon_device *rdev = dev->dev_private;
+@@ -724,7 +728,6 @@ struct radeon_encoder_int_tmds *radeon_atombios_get_tmds_info(struct
+ uint8_t frev, crev;
+ uint16_t maxfreq;
+ int i;
+- struct radeon_encoder_int_tmds *tmds = NULL;
+
+ atom_parse_data_header(mode_info->atom_context, index, NULL, &frev,
+ &crev, &data_offset);
+@@ -734,12 +737,6 @@ struct radeon_encoder_int_tmds *radeon_atombios_get_tmds_info(struct
+ data_offset);
+
+ if (tmds_info) {
+- tmds =
+- kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
+-
+- if (!tmds)
+- return NULL;
+-
+ maxfreq = le16_to_cpu(tmds_info->usMaxFrequency);
+ for (i = 0; i < 4; i++) {
+ tmds->tmds_pll[i].freq =
+@@ -765,8 +762,9 @@ struct radeon_encoder_int_tmds *radeon_atombios_get_tmds_info(struct
+ break;
+ }
+ }
++ return true;
+ }
+- return tmds;
++ return false;
+ }
+
+ union lvds_info {
+@@ -858,6 +856,72 @@ radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder)
+ return p_dac;
+ }
+
++bool radeon_atom_get_tv_timings(struct radeon_device *rdev, int index,
++ SET_CRTC_TIMING_PARAMETERS_PS_ALLOCATION *crtc_timing,
++ int32_t *pixel_clock)
++{
++ struct radeon_mode_info *mode_info = &rdev->mode_info;
++ ATOM_ANALOG_TV_INFO *tv_info;
++ ATOM_ANALOG_TV_INFO_V1_2 *tv_info_v1_2;
++ ATOM_DTD_FORMAT *dtd_timings;
++ int data_index = GetIndexIntoMasterTable(DATA, AnalogTV_Info);
++ u8 frev, crev;
++ uint16_t data_offset;
++
++ atom_parse_data_header(mode_info->atom_context, data_index, NULL, &frev, &crev, &data_offset);
++
++ switch (crev) {
++ case 1:
++ tv_info = (ATOM_ANALOG_TV_INFO *)(mode_info->atom_context->bios + data_offset);
++ if (index > MAX_SUPPORTED_TV_TIMING)
++ return false;
++
++ crtc_timing->usH_Total = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Total);
++ crtc_timing->usH_Disp = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_Disp);
++ crtc_timing->usH_SyncStart = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncStart);
++ crtc_timing->usH_SyncWidth = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_H_SyncWidth);
++
++ crtc_timing->usV_Total = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Total);
++ crtc_timing->usV_Disp = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_Disp);
++ crtc_timing->usV_SyncStart = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncStart);
++ crtc_timing->usV_SyncWidth = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_V_SyncWidth);
++
++ crtc_timing->susModeMiscInfo = tv_info->aModeTimings[index].susModeMiscInfo;
++
++ crtc_timing->ucOverscanRight = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanRight);
++ crtc_timing->ucOverscanLeft = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanLeft);
++ crtc_timing->ucOverscanBottom = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanBottom);
++ crtc_timing->ucOverscanTop = le16_to_cpu(tv_info->aModeTimings[index].usCRTC_OverscanTop);
++ *pixel_clock = le16_to_cpu(tv_info->aModeTimings[index].usPixelClock) * 10;
++
++ if (index == 1) {
++ /* PAL timings appear to have wrong values for totals */
++ crtc_timing->usH_Total -= 1;
++ crtc_timing->usV_Total -= 1;
++ }
++ break;
++ case 2:
++ tv_info_v1_2 = (ATOM_ANALOG_TV_INFO_V1_2 *)(mode_info->atom_context->bios + data_offset);
++ if (index > MAX_SUPPORTED_TV_TIMING_V1_2)
++ return false;
++
++ dtd_timings = &tv_info_v1_2->aModeTimings[index];
++ crtc_timing->usH_Total = le16_to_cpu(dtd_timings->usHActive) + le16_to_cpu(dtd_timings->usHBlanking_Time);
++ crtc_timing->usH_Disp = le16_to_cpu(dtd_timings->usHActive);
++ crtc_timing->usH_SyncStart = le16_to_cpu(dtd_timings->usHActive) + le16_to_cpu(dtd_timings->usHSyncOffset);
++ crtc_timing->usH_SyncWidth = le16_to_cpu(dtd_timings->usHSyncWidth);
++ crtc_timing->usV_Total = le16_to_cpu(dtd_timings->usVActive) + le16_to_cpu(dtd_timings->usVBlanking_Time);
++ crtc_timing->usV_Disp = le16_to_cpu(dtd_timings->usVActive);
++ crtc_timing->usV_SyncStart = le16_to_cpu(dtd_timings->usVActive) + le16_to_cpu(dtd_timings->usVSyncOffset);
++ crtc_timing->usV_SyncWidth = le16_to_cpu(dtd_timings->usVSyncWidth);
++
++ crtc_timing->susModeMiscInfo.usAccess = le16_to_cpu(dtd_timings->susModeMiscInfo.usAccess);
++ *pixel_clock = le16_to_cpu(dtd_timings->usPixClk) * 10;
++ break;
++ }
++ return true;
++}
++
+ struct radeon_encoder_tv_dac *
+ radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder)
+ {
+@@ -948,10 +1012,10 @@ void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev)
+ uint32_t bios_2_scratch, bios_6_scratch;
+
+ if (rdev->family >= CHIP_R600) {
+- bios_2_scratch = RREG32(R600_BIOS_0_SCRATCH);
++ bios_2_scratch = RREG32(R600_BIOS_2_SCRATCH);
+ bios_6_scratch = RREG32(R600_BIOS_6_SCRATCH);
+ } else {
+- bios_2_scratch = RREG32(RADEON_BIOS_0_SCRATCH);
++ bios_2_scratch = RREG32(RADEON_BIOS_2_SCRATCH);
+ bios_6_scratch = RREG32(RADEON_BIOS_6_SCRATCH);
+ }
+
+@@ -971,6 +1035,34 @@ void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev)
+
+ }
+
++void radeon_save_bios_scratch_regs(struct radeon_device *rdev)
++{
++ uint32_t scratch_reg;
++ int i;
++
++ if (rdev->family >= CHIP_R600)
++ scratch_reg = R600_BIOS_0_SCRATCH;
++ else
++ scratch_reg = RADEON_BIOS_0_SCRATCH;
++
++ for (i = 0; i < RADEON_BIOS_NUM_SCRATCH; i++)
++ rdev->bios_scratch[i] = RREG32(scratch_reg + (i * 4));
++}
++
++void radeon_restore_bios_scratch_regs(struct radeon_device *rdev)
++{
++ uint32_t scratch_reg;
++ int i;
++
++ if (rdev->family >= CHIP_R600)
++ scratch_reg = R600_BIOS_0_SCRATCH;
++ else
++ scratch_reg = RADEON_BIOS_0_SCRATCH;
++
++ for (i = 0; i < RADEON_BIOS_NUM_SCRATCH; i++)
++ WREG32(scratch_reg + (i * 4), rdev->bios_scratch[i]);
++}
++
+ void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock)
+ {
+ struct drm_device *dev = encoder->dev;
+diff --git a/drivers/gpu/drm/radeon/radeon_clocks.c b/drivers/gpu/drm/radeon/radeon_clocks.c
+index a37cbce..152eef1 100644
+--- a/drivers/gpu/drm/radeon/radeon_clocks.c
++++ b/drivers/gpu/drm/radeon/radeon_clocks.c
+@@ -102,10 +102,12 @@ void radeon_get_clock_info(struct drm_device *dev)
+ p1pll->reference_div = 12;
+ if (p2pll->reference_div < 2)
+ p2pll->reference_div = 12;
+- if (spll->reference_div < 2)
+- spll->reference_div =
+- RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) &
+- RADEON_M_SPLL_REF_DIV_MASK;
++ if (rdev->family < CHIP_RS600) {
++ if (spll->reference_div < 2)
++ spll->reference_div =
++ RREG32_PLL(RADEON_M_SPLL_REF_FB_DIV) &
++ RADEON_M_SPLL_REF_DIV_MASK;
++ }
+ if (mpll->reference_div < 2)
+ mpll->reference_div = spll->reference_div;
+ } else {
+diff --git a/drivers/gpu/drm/radeon/radeon_combios.c b/drivers/gpu/drm/radeon/radeon_combios.c
+index 2a027e0..748265a 100644
+--- a/drivers/gpu/drm/radeon/radeon_combios.c
++++ b/drivers/gpu/drm/radeon/radeon_combios.c
+@@ -863,8 +863,10 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder
+ int tmp, i;
+ struct radeon_encoder_lvds *lvds = NULL;
+
+- if (rdev->bios == NULL)
+- return radeon_legacy_get_lvds_info_from_regs(rdev);
++ if (rdev->bios == NULL) {
++ lvds = radeon_legacy_get_lvds_info_from_regs(rdev);
++ goto out;
++ }
+
+ lcd_info = combios_get_table_offset(dev, COMBIOS_LCD_INFO_TABLE);
+
+@@ -965,11 +967,13 @@ struct radeon_encoder_lvds *radeon_combios_get_lvds_info(struct radeon_encoder
+ lvds->native_mode.flags = 0;
+ }
+ }
+- encoder->native_mode = lvds->native_mode;
+ } else {
+ DRM_INFO("No panel info found in BIOS\n");
+- return radeon_legacy_get_lvds_info_from_regs(rdev);
++ lvds = radeon_legacy_get_lvds_info_from_regs(rdev);
+ }
++out:
++ if (lvds)
++ encoder->native_mode = lvds->native_mode;
+ return lvds;
+ }
+
+@@ -994,48 +998,37 @@ static const struct radeon_tmds_pll default_tmds_pll[CHIP_LAST][4] = {
+ {{15000, 0xb0155}, {0xffffffff, 0xb01cb}, {0, 0}, {0, 0}}, /* CHIP_RS480 */
+ };
+
+-static struct radeon_encoder_int_tmds
+- *radeon_legacy_get_tmds_info_from_table(struct radeon_device *rdev)
++bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder,
++ struct radeon_encoder_int_tmds *tmds)
+ {
++ struct drm_device *dev = encoder->base.dev;
++ struct radeon_device *rdev = dev->dev_private;
+ int i;
+- struct radeon_encoder_int_tmds *tmds = NULL;
+-
+- tmds = kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
+-
+- if (!tmds)
+- return NULL;
+
+ for (i = 0; i < 4; i++) {
+ tmds->tmds_pll[i].value =
+- default_tmds_pll[rdev->family][i].value;
++ default_tmds_pll[rdev->family][i].value;
+ tmds->tmds_pll[i].freq = default_tmds_pll[rdev->family][i].freq;
+ }
+
+- return tmds;
++ return true;
+ }
+
+-struct radeon_encoder_int_tmds *radeon_combios_get_tmds_info(struct
+- radeon_encoder
+- *encoder)
++bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder,
++ struct radeon_encoder_int_tmds *tmds)
+ {
+ struct drm_device *dev = encoder->base.dev;
+ struct radeon_device *rdev = dev->dev_private;
+ uint16_t tmds_info;
+ int i, n;
+ uint8_t ver;
+- struct radeon_encoder_int_tmds *tmds = NULL;
+
+ if (rdev->bios == NULL)
+- return radeon_legacy_get_tmds_info_from_table(rdev);
++ return false;
+
+ tmds_info = combios_get_table_offset(dev, COMBIOS_DFP_INFO_TABLE);
+
+ if (tmds_info) {
+- tmds =
+- kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
+-
+- if (!tmds)
+- return NULL;
+
+ ver = RBIOS8(tmds_info);
+ DRM_INFO("DFP table revision: %d\n", ver);
+@@ -1073,6 +1066,23 @@ struct radeon_encoder_int_tmds *radeon_combios_get_tmds_info(struct
+ }
+ } else
+ DRM_INFO("No TMDS info found in BIOS\n");
++ return true;
++}
++
++struct radeon_encoder_int_tmds *radeon_combios_get_tmds_info(struct radeon_encoder *encoder)
++{
++ struct radeon_encoder_int_tmds *tmds = NULL;
++ bool ret;
++
++ tmds = kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
++
++ if (!tmds)
++ return NULL;
++
++ ret = radeon_legacy_get_tmds_info_from_combios(encoder, tmds);
++ if (ret == false)
++ radeon_legacy_get_tmds_info_from_table(encoder, tmds);
++
+ return tmds;
+ }
+
+diff --git a/drivers/gpu/drm/radeon/radeon_connectors.c b/drivers/gpu/drm/radeon/radeon_connectors.c
+index 70ede6a..e376be4 100644
+--- a/drivers/gpu/drm/radeon/radeon_connectors.c
++++ b/drivers/gpu/drm/radeon/radeon_connectors.c
+@@ -26,8 +26,10 @@
+ #include "drmP.h"
+ #include "drm_edid.h"
+ #include "drm_crtc_helper.h"
++#include "drm_fb_helper.h"
+ #include "radeon_drm.h"
+ #include "radeon.h"
++#include "atom.h"
+
+ extern void
+ radeon_combios_connected_scratch_regs(struct drm_connector *connector,
+@@ -38,6 +40,15 @@ radeon_atombios_connected_scratch_regs(struct drm_connector *connector,
+ struct drm_encoder *encoder,
+ bool connected);
+
++static void radeon_property_change_mode(struct drm_encoder *encoder)
++{
++ struct drm_crtc *crtc = encoder->crtc;
++
++ if (crtc && crtc->enabled) {
++ drm_crtc_helper_set_mode(crtc, &crtc->mode,
++ crtc->x, crtc->y, crtc->fb);
++ }
++}
+ static void
+ radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_connector_status status)
+ {
+@@ -77,6 +88,27 @@ radeon_connector_update_scratch_regs(struct drm_connector *connector, enum drm_c
+ }
+ }
+
++struct drm_encoder *radeon_find_encoder(struct drm_connector *connector, int encoder_type)
++{
++ struct drm_mode_object *obj;
++ struct drm_encoder *encoder;
++ int i;
++
++ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
++ if (connector->encoder_ids[i] == 0)
++ break;
++
++ obj = drm_mode_object_find(connector->dev, connector->encoder_ids[i], DRM_MODE_OBJECT_ENCODER);
++ if (!obj)
++ continue;
++
++ encoder = obj_to_encoder(obj);
++ if (encoder->encoder_type == encoder_type)
++ return encoder;
++ }
++ return NULL;
++}
++
+ struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
+ {
+ int enc_id = connector->encoder_ids[0];
+@@ -94,6 +126,53 @@ struct drm_encoder *radeon_best_single_encoder(struct drm_connector *connector)
+ return NULL;
+ }
+
++/*
++ * radeon_connector_analog_encoder_conflict_solve
++ * - search for other connectors sharing this encoder
++ * if priority is true, then set them disconnected if this is connected
++ * if priority is false, set us disconnected if they are connected
++ */
++static enum drm_connector_status
++radeon_connector_analog_encoder_conflict_solve(struct drm_connector *connector,
++ struct drm_encoder *encoder,
++ enum drm_connector_status current_status,
++ bool priority)
++{
++ struct drm_device *dev = connector->dev;
++ struct drm_connector *conflict;
++ int i;
++
++ list_for_each_entry(conflict, &dev->mode_config.connector_list, head) {
++ if (conflict == connector)
++ continue;
++
++ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
++ if (conflict->encoder_ids[i] == 0)
++ break;
++
++ /* if the IDs match */
++ if (conflict->encoder_ids[i] == encoder->base.id) {
++ if (conflict->status != connector_status_connected)
++ continue;
++
++ if (priority == true) {
++ DRM_INFO("1: conflicting encoders switching off %s\n", drm_get_connector_name(conflict));
++ DRM_INFO("in favor of %s\n", drm_get_connector_name(connector));
++ conflict->status = connector_status_disconnected;
++ radeon_connector_update_scratch_regs(conflict, connector_status_disconnected);
++ } else {
++ DRM_INFO("2: conflicting encoders switching off %s\n", drm_get_connector_name(connector));
++ DRM_INFO("in favor of %s\n", drm_get_connector_name(conflict));
++ current_status = connector_status_disconnected;
++ }
++ break;
++ }
++ }
++ }
++ return current_status;
++
++}
++
+ static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encoder)
+ {
+ struct drm_device *dev = encoder->dev;
+@@ -126,12 +205,171 @@ static struct drm_display_mode *radeon_fp_native_mode(struct drm_encoder *encode
+ return mode;
+ }
+
++static void radeon_add_common_modes(struct drm_encoder *encoder, struct drm_connector *connector)
++{
++ struct drm_device *dev = encoder->dev;
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct drm_display_mode *mode = NULL;
++ struct radeon_native_mode *native_mode = &radeon_encoder->native_mode;
++ int i;
++ struct mode_size {
++ int w;
++ int h;
++ } common_modes[17] = {
++ { 640, 480},
++ { 720, 480},
++ { 800, 600},
++ { 848, 480},
++ {1024, 768},
++ {1152, 768},
++ {1280, 720},
++ {1280, 800},
++ {1280, 854},
++ {1280, 960},
++ {1280, 1024},
++ {1440, 900},
++ {1400, 1050},
++ {1680, 1050},
++ {1600, 1200},
++ {1920, 1080},
++ {1920, 1200}
++ };
++
++ for (i = 0; i < 17; i++) {
++ if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
++ if (common_modes[i].w > native_mode->panel_xres ||
++ common_modes[i].h > native_mode->panel_yres ||
++ (common_modes[i].w == native_mode->panel_xres &&
++ common_modes[i].h == native_mode->panel_yres))
++ continue;
++ }
++ if (common_modes[i].w < 320 || common_modes[i].h < 200)
++ continue;
++
++ mode = drm_cvt_mode(dev, common_modes[i].w, common_modes[i].h, 60, false, false, false);
++ drm_mode_probed_add(connector, mode);
++ }
++}
++
+ int radeon_connector_set_property(struct drm_connector *connector, struct drm_property *property,
+ uint64_t val)
+ {
++ struct drm_device *dev = connector->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct drm_encoder *encoder;
++ struct radeon_encoder *radeon_encoder;
++
++ if (property == rdev->mode_info.coherent_mode_property) {
++ struct radeon_encoder_atom_dig *dig;
++
++ /* need to find digital encoder on connector */
++ encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
++ if (!encoder)
++ return 0;
++
++ radeon_encoder = to_radeon_encoder(encoder);
++
++ if (!radeon_encoder->enc_priv)
++ return 0;
++
++ dig = radeon_encoder->enc_priv;
++ dig->coherent_mode = val ? true : false;
++ radeon_property_change_mode(&radeon_encoder->base);
++ }
++
++ if (property == rdev->mode_info.tv_std_property) {
++ encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TVDAC);
++ if (!encoder) {
++ encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_DAC);
++ }
++
++ if (!encoder)
++ return 0;
++
++ radeon_encoder = to_radeon_encoder(encoder);
++ if (!radeon_encoder->enc_priv)
++ return 0;
++ if (rdev->is_atom_bios) {
++ struct radeon_encoder_atom_dac *dac_int;
++ dac_int = radeon_encoder->enc_priv;
++ dac_int->tv_std = val;
++ } else {
++ struct radeon_encoder_tv_dac *dac_int;
++ dac_int = radeon_encoder->enc_priv;
++ dac_int->tv_std = val;
++ }
++ radeon_property_change_mode(&radeon_encoder->base);
++ }
++
++ if (property == rdev->mode_info.load_detect_property) {
++ struct radeon_connector *radeon_connector =
++ to_radeon_connector(connector);
++
++ if (val == 0)
++ radeon_connector->dac_load_detect = false;
++ else
++ radeon_connector->dac_load_detect = true;
++ }
++
++ if (property == rdev->mode_info.tmds_pll_property) {
++ struct radeon_encoder_int_tmds *tmds = NULL;
++ bool ret = false;
++ /* need to find digital encoder on connector */
++ encoder = radeon_find_encoder(connector, DRM_MODE_ENCODER_TMDS);
++ if (!encoder)
++ return 0;
++
++ radeon_encoder = to_radeon_encoder(encoder);
++
++ tmds = radeon_encoder->enc_priv;
++ if (!tmds)
++ return 0;
++
++ if (val == 0) {
++ if (rdev->is_atom_bios)
++ ret = radeon_atombios_get_tmds_info(radeon_encoder, tmds);
++ else
++ ret = radeon_legacy_get_tmds_info_from_combios(radeon_encoder, tmds);
++ }
++ if (val == 1 || ret == false) {
++ radeon_legacy_get_tmds_info_from_table(radeon_encoder, tmds);
++ }
++ radeon_property_change_mode(&radeon_encoder->base);
++ }
++
+ return 0;
+ }
+
++static void radeon_fixup_lvds_native_mode(struct drm_encoder *encoder,
++ struct drm_connector *connector)
++{
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct radeon_native_mode *native_mode = &radeon_encoder->native_mode;
++
++ /* Try to get native mode details from EDID if necessary */
++ if (!native_mode->dotclock) {
++ struct drm_display_mode *t, *mode;
++
++ list_for_each_entry_safe(mode, t, &connector->probed_modes, head) {
++ if (mode->hdisplay == native_mode->panel_xres &&
++ mode->vdisplay == native_mode->panel_yres) {
++ native_mode->hblank = mode->htotal - mode->hdisplay;
++ native_mode->hoverplus = mode->hsync_start - mode->hdisplay;
++ native_mode->hsync_width = mode->hsync_end - mode->hsync_start;
++ native_mode->vblank = mode->vtotal - mode->vdisplay;
++ native_mode->voverplus = mode->vsync_start - mode->vdisplay;
++ native_mode->vsync_width = mode->vsync_end - mode->vsync_start;
++ native_mode->dotclock = mode->clock;
++ DRM_INFO("Determined LVDS native mode details from EDID\n");
++ break;
++ }
++ }
++ }
++ if (!native_mode->dotclock) {
++ DRM_INFO("No LVDS native mode details, disabling RMX\n");
++ radeon_encoder->rmx_type = RMX_OFF;
++ }
++}
+
+ static int radeon_lvds_get_modes(struct drm_connector *connector)
+ {
+@@ -143,6 +381,12 @@ static int radeon_lvds_get_modes(struct drm_connector *connector)
+ if (radeon_connector->ddc_bus) {
+ ret = radeon_ddc_get_modes(radeon_connector);
+ if (ret > 0) {
++ encoder = radeon_best_single_encoder(connector);
++ if (encoder) {
++ radeon_fixup_lvds_native_mode(encoder, connector);
++ /* add scaled modes */
++ radeon_add_common_modes(encoder, connector);
++ }
+ return ret;
+ }
+ }
+@@ -156,7 +400,10 @@ static int radeon_lvds_get_modes(struct drm_connector *connector)
+ if (mode) {
+ ret = 1;
+ drm_mode_probed_add(connector, mode);
++ /* add scaled modes */
++ radeon_add_common_modes(encoder, connector);
+ }
++
+ return ret;
+ }
+
+@@ -186,6 +433,42 @@ static void radeon_connector_destroy(struct drm_connector *connector)
+ kfree(connector);
+ }
+
++static int radeon_lvds_set_property(struct drm_connector *connector,
++ struct drm_property *property,
++ uint64_t value)
++{
++ struct drm_device *dev = connector->dev;
++ struct radeon_encoder *radeon_encoder;
++ enum radeon_rmx_type rmx_type;
++
++ DRM_DEBUG("\n");
++ if (property != dev->mode_config.scaling_mode_property)
++ return 0;
++
++ if (connector->encoder)
++ radeon_encoder = to_radeon_encoder(connector->encoder);
++ else {
++ struct drm_connector_helper_funcs *connector_funcs = connector->helper_private;
++ radeon_encoder = to_radeon_encoder(connector_funcs->best_encoder(connector));
++ }
++
++ switch (value) {
++ case DRM_MODE_SCALE_NONE: rmx_type = RMX_OFF; break;
++ case DRM_MODE_SCALE_CENTER: rmx_type = RMX_CENTER; break;
++ case DRM_MODE_SCALE_ASPECT: rmx_type = RMX_ASPECT; break;
++ default:
++ case DRM_MODE_SCALE_FULLSCREEN: rmx_type = RMX_FULL; break;
++ }
++ if (radeon_encoder->rmx_type == rmx_type)
++ return 0;
++
++ radeon_encoder->rmx_type = rmx_type;
++
++ radeon_property_change_mode(&radeon_encoder->base);
++ return 0;
++}
++
++
+ struct drm_connector_helper_funcs radeon_lvds_connector_helper_funcs = {
+ .get_modes = radeon_lvds_get_modes,
+ .mode_valid = radeon_lvds_mode_valid,
+@@ -197,7 +480,7 @@ struct drm_connector_funcs radeon_lvds_connector_funcs = {
+ .detect = radeon_lvds_detect,
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .destroy = radeon_connector_destroy,
+- .set_property = radeon_connector_set_property,
++ .set_property = radeon_lvds_set_property,
+ };
+
+ static int radeon_vga_get_modes(struct drm_connector *connector)
+@@ -213,7 +496,6 @@ static int radeon_vga_get_modes(struct drm_connector *connector)
+ static int radeon_vga_mode_valid(struct drm_connector *connector,
+ struct drm_display_mode *mode)
+ {
+-
+ return MODE_OK;
+ }
+
+@@ -225,22 +507,24 @@ static enum drm_connector_status radeon_vga_detect(struct drm_connector *connect
+ bool dret;
+ enum drm_connector_status ret = connector_status_disconnected;
+
++ encoder = radeon_best_single_encoder(connector);
++ if (!encoder)
++ ret = connector_status_disconnected;
++
+ radeon_i2c_do_lock(radeon_connector, 1);
+ dret = radeon_ddc_probe(radeon_connector);
+ radeon_i2c_do_lock(radeon_connector, 0);
+ if (dret)
+ ret = connector_status_connected;
+ else {
+- /* if EDID fails to a load detect */
+- encoder = radeon_best_single_encoder(connector);
+- if (!encoder)
+- ret = connector_status_disconnected;
+- else {
++ if (radeon_connector->dac_load_detect) {
+ encoder_funcs = encoder->helper_private;
+ ret = encoder_funcs->detect(encoder, connector);
+ }
+ }
+
++ if (ret == connector_status_connected)
++ ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
+ radeon_connector_update_scratch_regs(connector, ret);
+ return ret;
+ }
+@@ -259,21 +543,97 @@ struct drm_connector_funcs radeon_vga_connector_funcs = {
+ .set_property = radeon_connector_set_property,
+ };
+
++static int radeon_tv_get_modes(struct drm_connector *connector)
++{
++ struct drm_device *dev = connector->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct drm_display_mode *tv_mode;
++ struct drm_encoder *encoder;
++
++ encoder = radeon_best_single_encoder(connector);
++ if (!encoder)
++ return 0;
++
++ /* avivo chips can scale any mode */
++ if (rdev->family >= CHIP_RS600)
++ /* add scaled modes */
++ radeon_add_common_modes(encoder, connector);
++ else {
++ /* only 800x600 is supported right now on pre-avivo chips */
++ tv_mode = drm_cvt_mode(dev, 800, 600, 60, false, false, false);
++ tv_mode->type = DRM_MODE_TYPE_DRIVER | DRM_MODE_TYPE_PREFERRED;
++ drm_mode_probed_add(connector, tv_mode);
++ }
++ return 1;
++}
++
++static int radeon_tv_mode_valid(struct drm_connector *connector,
++ struct drm_display_mode *mode)
++{
++ return MODE_OK;
++}
++
++static enum drm_connector_status radeon_tv_detect(struct drm_connector *connector)
++{
++ struct drm_encoder *encoder;
++ struct drm_encoder_helper_funcs *encoder_funcs;
++ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
++ enum drm_connector_status ret = connector_status_disconnected;
++
++ if (!radeon_connector->dac_load_detect)
++ return ret;
++
++ encoder = radeon_best_single_encoder(connector);
++ if (!encoder)
++ ret = connector_status_disconnected;
++ else {
++ encoder_funcs = encoder->helper_private;
++ ret = encoder_funcs->detect(encoder, connector);
++ }
++ if (ret == connector_status_connected)
++ ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, false);
++ radeon_connector_update_scratch_regs(connector, ret);
++ return ret;
++}
++
++struct drm_connector_helper_funcs radeon_tv_connector_helper_funcs = {
++ .get_modes = radeon_tv_get_modes,
++ .mode_valid = radeon_tv_mode_valid,
++ .best_encoder = radeon_best_single_encoder,
++};
++
++struct drm_connector_funcs radeon_tv_connector_funcs = {
++ .dpms = drm_helper_connector_dpms,
++ .detect = radeon_tv_detect,
++ .fill_modes = drm_helper_probe_single_connector_modes,
++ .destroy = radeon_connector_destroy,
++ .set_property = radeon_connector_set_property,
++};
++
+ static int radeon_dvi_get_modes(struct drm_connector *connector)
+ {
+ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+ int ret;
+
+ ret = radeon_ddc_get_modes(radeon_connector);
+- /* reset scratch regs here since radeon_dvi_detect doesn't check digital bit */
+- radeon_connector_update_scratch_regs(connector, connector_status_connected);
+ return ret;
+ }
+
++/*
++ * DVI is complicated
++ * Do a DDC probe, if DDC probe passes, get the full EDID so
++ * we can do analog/digital monitor detection at this point.
++ * If the monitor is an analog monitor or we got no DDC,
++ * we need to find the DAC encoder object for this connector.
++ * If we got no DDC, we do load detection on the DAC encoder object.
++ * If we got analog DDC or load detection passes on the DAC encoder
++ * we have to check if this analog encoder is shared with anyone else (TV)
++ * if its shared we have to set the other connector to disconnected.
++ */
+ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connector)
+ {
+ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+- struct drm_encoder *encoder;
++ struct drm_encoder *encoder = NULL;
+ struct drm_encoder_helper_funcs *encoder_funcs;
+ struct drm_mode_object *obj;
+ int i;
+@@ -283,9 +643,29 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect
+ radeon_i2c_do_lock(radeon_connector, 1);
+ dret = radeon_ddc_probe(radeon_connector);
+ radeon_i2c_do_lock(radeon_connector, 0);
+- if (dret)
+- ret = connector_status_connected;
+- else {
++ if (dret) {
++ radeon_i2c_do_lock(radeon_connector, 1);
++ radeon_connector->edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
++ radeon_i2c_do_lock(radeon_connector, 0);
++
++ if (!radeon_connector->edid) {
++ DRM_ERROR("DDC responded but not EDID found for %s\n",
++ drm_get_connector_name(connector));
++ } else {
++ radeon_connector->use_digital = !!(radeon_connector->edid->input & DRM_EDID_INPUT_DIGITAL);
++
++ /* if this isn't a digital monitor
++ then we need to make sure we don't have any
++ TV conflicts */
++ ret = connector_status_connected;
++ }
++ }
++
++ if ((ret == connector_status_connected) && (radeon_connector->use_digital == true))
++ goto out;
++
++ /* find analog encoder */
++ if (radeon_connector->dac_load_detect) {
+ for (i = 0; i < DRM_CONNECTOR_MAX_ENCODER; i++) {
+ if (connector->encoder_ids[i] == 0)
+ break;
+@@ -300,15 +680,23 @@ static enum drm_connector_status radeon_dvi_detect(struct drm_connector *connect
+
+ encoder_funcs = encoder->helper_private;
+ if (encoder_funcs->detect) {
+- ret = encoder_funcs->detect(encoder, connector);
+- if (ret == connector_status_connected) {
+- radeon_connector->use_digital = 0;
+- break;
++ if (ret != connector_status_connected) {
++ ret = encoder_funcs->detect(encoder, connector);
++ if (ret == connector_status_connected) {
++ radeon_connector->use_digital = false;
++ }
+ }
++ break;
+ }
+ }
+ }
+
++ if ((ret == connector_status_connected) && (radeon_connector->use_digital == false) &&
++ encoder) {
++ ret = radeon_connector_analog_encoder_conflict_solve(connector, encoder, ret, true);
++ }
++
++out:
+ /* updated in get modes as well since we need to know if it's analog or digital */
+ radeon_connector_update_scratch_regs(connector, ret);
+ return ret;
+@@ -332,7 +720,7 @@ struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
+
+ encoder = obj_to_encoder(obj);
+
+- if (radeon_connector->use_digital) {
++ if (radeon_connector->use_digital == true) {
+ if (encoder->encoder_type == DRM_MODE_ENCODER_TMDS)
+ return encoder;
+ } else {
+@@ -356,6 +744,15 @@ struct drm_encoder *radeon_dvi_encoder(struct drm_connector *connector)
+ return NULL;
+ }
+
++static void radeon_dvi_force(struct drm_connector *connector)
++{
++ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
++ if (connector->force == DRM_FORCE_ON)
++ radeon_connector->use_digital = false;
++ if (connector->force == DRM_FORCE_ON_DIGITAL)
++ radeon_connector->use_digital = true;
++}
++
+ struct drm_connector_helper_funcs radeon_dvi_connector_helper_funcs = {
+ .get_modes = radeon_dvi_get_modes,
+ .mode_valid = radeon_vga_mode_valid,
+@@ -368,6 +765,7 @@ struct drm_connector_funcs radeon_dvi_connector_funcs = {
+ .fill_modes = drm_helper_probe_single_connector_modes,
+ .set_property = radeon_connector_set_property,
+ .destroy = radeon_connector_destroy,
++ .force = radeon_dvi_force,
+ };
+
+ void
+@@ -379,16 +777,15 @@ radeon_add_atom_connector(struct drm_device *dev,
+ bool linkb,
+ uint32_t igp_lane_info)
+ {
++ struct radeon_device *rdev = dev->dev_private;
+ struct drm_connector *connector;
+ struct radeon_connector *radeon_connector;
+ struct radeon_connector_atom_dig *radeon_dig_connector;
+ uint32_t subpixel_order = SubPixelNone;
++ int ret;
+
+ /* fixme - tv/cv/din */
+- if ((connector_type == DRM_MODE_CONNECTOR_Unknown) ||
+- (connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
+- (connector_type == DRM_MODE_CONNECTOR_Composite) ||
+- (connector_type == DRM_MODE_CONNECTOR_9PinDIN))
++ if (connector_type == DRM_MODE_CONNECTOR_Unknown)
+ return;
+
+ /* see if we already added it */
+@@ -411,21 +808,33 @@ radeon_add_atom_connector(struct drm_device *dev,
+ switch (connector_type) {
+ case DRM_MODE_CONNECTOR_VGA:
+ drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "VGA");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
+ break;
+ case DRM_MODE_CONNECTOR_DVIA:
+ drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
+ break;
+ case DRM_MODE_CONNECTOR_DVII:
+ case DRM_MODE_CONNECTOR_DVID:
+@@ -436,13 +845,22 @@ radeon_add_atom_connector(struct drm_device *dev,
+ radeon_dig_connector->igp_lane_info = igp_lane_info;
+ radeon_connector->con_priv = radeon_dig_connector;
+ drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
+ subpixel_order = SubPixelHorizontalRGB;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.coherent_mode_property,
++ 1);
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
+ break;
+ case DRM_MODE_CONNECTOR_HDMIA:
+ case DRM_MODE_CONNECTOR_HDMIB:
+@@ -453,12 +871,17 @@ radeon_add_atom_connector(struct drm_device *dev,
+ radeon_dig_connector->igp_lane_info = igp_lane_info;
+ radeon_connector->con_priv = radeon_dig_connector;
+ drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "HDMI");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.coherent_mode_property,
++ 1);
+ subpixel_order = SubPixelHorizontalRGB;
+ break;
+ case DRM_MODE_CONNECTOR_DisplayPort:
+@@ -469,7 +892,9 @@ radeon_add_atom_connector(struct drm_device *dev,
+ radeon_dig_connector->igp_lane_info = igp_lane_info;
+ radeon_connector->con_priv = radeon_dig_connector;
+ drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DP");
+ if (!radeon_connector->ddc_bus)
+@@ -480,6 +905,16 @@ radeon_add_atom_connector(struct drm_device *dev,
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ case DRM_MODE_CONNECTOR_Composite:
+ case DRM_MODE_CONNECTOR_9PinDIN:
++ if (radeon_tv == 1) {
++ drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
++ if (ret)
++ goto failed;
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
++ }
+ break;
+ case DRM_MODE_CONNECTOR_LVDS:
+ radeon_dig_connector = kzalloc(sizeof(struct radeon_connector_atom_dig), GFP_KERNEL);
+@@ -489,12 +924,18 @@ radeon_add_atom_connector(struct drm_device *dev,
+ radeon_dig_connector->igp_lane_info = igp_lane_info;
+ radeon_connector->con_priv = radeon_dig_connector;
+ drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
++ drm_mode_create_scaling_mode_property(dev);
++ drm_connector_attach_property(&radeon_connector->base,
++ dev->mode_config.scaling_mode_property,
++ DRM_MODE_SCALE_FULLSCREEN);
+ subpixel_order = SubPixelHorizontalRGB;
+ break;
+ }
+@@ -517,15 +958,14 @@ radeon_add_legacy_connector(struct drm_device *dev,
+ int connector_type,
+ struct radeon_i2c_bus_rec *i2c_bus)
+ {
++ struct radeon_device *rdev = dev->dev_private;
+ struct drm_connector *connector;
+ struct radeon_connector *radeon_connector;
+ uint32_t subpixel_order = SubPixelNone;
++ int ret;
+
+ /* fixme - tv/cv/din */
+- if ((connector_type == DRM_MODE_CONNECTOR_Unknown) ||
+- (connector_type == DRM_MODE_CONNECTOR_SVIDEO) ||
+- (connector_type == DRM_MODE_CONNECTOR_Composite) ||
+- (connector_type == DRM_MODE_CONNECTOR_9PinDIN))
++ if (connector_type == DRM_MODE_CONNECTOR_Unknown)
+ return;
+
+ /* see if we already added it */
+@@ -548,45 +988,78 @@ radeon_add_legacy_connector(struct drm_device *dev,
+ switch (connector_type) {
+ case DRM_MODE_CONNECTOR_VGA:
+ drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "VGA");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
+ break;
+ case DRM_MODE_CONNECTOR_DVIA:
+ drm_connector_init(dev, &radeon_connector->base, &radeon_vga_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_vga_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
+ break;
+ case DRM_MODE_CONNECTOR_DVII:
+ case DRM_MODE_CONNECTOR_DVID:
+ drm_connector_init(dev, &radeon_connector->base, &radeon_dvi_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_dvi_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "DVI");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
+ }
+ subpixel_order = SubPixelHorizontalRGB;
+ break;
+ case DRM_MODE_CONNECTOR_SVIDEO:
+ case DRM_MODE_CONNECTOR_Composite:
+ case DRM_MODE_CONNECTOR_9PinDIN:
++ if (radeon_tv == 1) {
++ drm_connector_init(dev, &radeon_connector->base, &radeon_tv_connector_funcs, connector_type);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_tv_connector_helper_funcs);
++ if (ret)
++ goto failed;
++ radeon_connector->dac_load_detect = true;
++ drm_connector_attach_property(&radeon_connector->base,
++ rdev->mode_info.load_detect_property,
++ 1);
++ }
+ break;
+ case DRM_MODE_CONNECTOR_LVDS:
+ drm_connector_init(dev, &radeon_connector->base, &radeon_lvds_connector_funcs, connector_type);
+- drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
++ ret = drm_connector_helper_add(&radeon_connector->base, &radeon_lvds_connector_helper_funcs);
++ if (ret)
++ goto failed;
+ if (i2c_bus->valid) {
+ radeon_connector->ddc_bus = radeon_i2c_create(dev, i2c_bus, "LVDS");
+ if (!radeon_connector->ddc_bus)
+ goto failed;
+ }
++ drm_connector_attach_property(&radeon_connector->base,
++ dev->mode_config.scaling_mode_property,
++ DRM_MODE_SCALE_FULLSCREEN);
+ subpixel_order = SubPixelHorizontalRGB;
+ break;
+ }
+diff --git a/drivers/gpu/drm/radeon/radeon_cp.c b/drivers/gpu/drm/radeon/radeon_cp.c
+index 7a52c46..4f7afc7 100644
+--- a/drivers/gpu/drm/radeon/radeon_cp.c
++++ b/drivers/gpu/drm/radeon/radeon_cp.c
+@@ -36,10 +36,25 @@
+ #include "radeon_drv.h"
+ #include "r300_reg.h"
+
+-#include "radeon_microcode.h"
+-
+ #define RADEON_FIFO_DEBUG 0
+
++/* Firmware Names */
++#define FIRMWARE_R100 "radeon/R100_cp.bin"
++#define FIRMWARE_R200 "radeon/R200_cp.bin"
++#define FIRMWARE_R300 "radeon/R300_cp.bin"
++#define FIRMWARE_R420 "radeon/R420_cp.bin"
++#define FIRMWARE_RS690 "radeon/RS690_cp.bin"
++#define FIRMWARE_RS600 "radeon/RS600_cp.bin"
++#define FIRMWARE_R520 "radeon/R520_cp.bin"
++
++MODULE_FIRMWARE(FIRMWARE_R100);
++MODULE_FIRMWARE(FIRMWARE_R200);
++MODULE_FIRMWARE(FIRMWARE_R300);
++MODULE_FIRMWARE(FIRMWARE_R420);
++MODULE_FIRMWARE(FIRMWARE_RS690);
++MODULE_FIRMWARE(FIRMWARE_RS600);
++MODULE_FIRMWARE(FIRMWARE_R520);
++
+ static int radeon_do_cleanup_cp(struct drm_device * dev);
+ static void radeon_do_cp_start(drm_radeon_private_t * dev_priv);
+
+@@ -460,37 +475,34 @@ static void radeon_init_pipes(drm_radeon_private_t *dev_priv)
+ */
+
+ /* Load the microcode for the CP */
+-static void radeon_cp_load_microcode(drm_radeon_private_t * dev_priv)
++static int radeon_cp_init_microcode(drm_radeon_private_t *dev_priv)
+ {
+- int i;
++ struct platform_device *pdev;
++ const char *fw_name = NULL;
++ int err;
++
+ DRM_DEBUG("\n");
+
+- radeon_do_wait_for_idle(dev_priv);
++ pdev = platform_device_register_simple("radeon_cp", 0, NULL, 0);
++ err = IS_ERR(pdev);
++ if (err) {
++ printk(KERN_ERR "radeon_cp: Failed to register firmware\n");
++ return -EINVAL;
++ }
+
+- RADEON_WRITE(RADEON_CP_ME_RAM_ADDR, 0);
+ if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R100) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV100) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV200) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS100) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS200)) {
+ DRM_INFO("Loading R100 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAH,
+- R100_cp_microcode[i][1]);
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAL,
+- R100_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R100;
+ } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R200) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV250) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV280) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS300)) {
+ DRM_INFO("Loading R200 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAH,
+- R200_cp_microcode[i][1]);
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAL,
+- R200_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R200;
+ } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R300) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R350) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV350) ||
+@@ -498,39 +510,19 @@ static void radeon_cp_load_microcode(drm_radeon_private_t * dev_priv)
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS400) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS480)) {
+ DRM_INFO("Loading R300 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAH,
+- R300_cp_microcode[i][1]);
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAL,
+- R300_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R300;
+ } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R420) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R423) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV410)) {
+ DRM_INFO("Loading R400 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAH,
+- R420_cp_microcode[i][1]);
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAL,
+- R420_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_R420;
+ } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS690) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS740)) {
+ DRM_INFO("Loading RS690/RS740 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAH,
+- RS690_cp_microcode[i][1]);
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAL,
+- RS690_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_RS690;
+ } else if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RS600) {
+ DRM_INFO("Loading RS600 Microcode\n");
+- for (i = 0; i < 256; i++) {
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAH,
+- RS600_cp_microcode[i][1]);
+- RADEON_WRITE(RADEON_CP_ME_RAM_DATAL,
+- RS600_cp_microcode[i][0]);
+- }
++ fw_name = FIRMWARE_RS600;
+ } else if (((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV515) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R520) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV530) ||
+@@ -538,11 +530,41 @@ static void radeon_cp_load_microcode(drm_radeon_private_t * dev_priv)
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV560) ||
+ ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_RV570)) {
+ DRM_INFO("Loading R500 Microcode\n");
+- for (i = 0; i < 256; i++) {
++ fw_name = FIRMWARE_R520;
++ }
++
++ err = request_firmware(&dev_priv->me_fw, fw_name, &pdev->dev);
++ platform_device_unregister(pdev);
++ if (err) {
++ printk(KERN_ERR "radeon_cp: Failed to load firmware \"%s\"\n",
++ fw_name);
++ } else if (dev_priv->me_fw->size % 8) {
++ printk(KERN_ERR
++ "radeon_cp: Bogus length %zu in firmware \"%s\"\n",
++ dev_priv->me_fw->size, fw_name);
++ err = -EINVAL;
++ release_firmware(dev_priv->me_fw);
++ dev_priv->me_fw = NULL;
++ }
++ return err;
++}
++
++static void radeon_cp_load_microcode(drm_radeon_private_t *dev_priv)
++{
++ const __be32 *fw_data;
++ int i, size;
++
++ radeon_do_wait_for_idle(dev_priv);
++
++ if (dev_priv->me_fw) {
++ size = dev_priv->me_fw->size / 4;
++ fw_data = (const __be32 *)&dev_priv->me_fw->data[0];
++ RADEON_WRITE(RADEON_CP_ME_RAM_ADDR, 0);
++ for (i = 0; i < size; i += 2) {
+ RADEON_WRITE(RADEON_CP_ME_RAM_DATAH,
+- R520_cp_microcode[i][1]);
++ be32_to_cpup(&fw_data[i]));
+ RADEON_WRITE(RADEON_CP_ME_RAM_DATAL,
+- R520_cp_microcode[i][0]);
++ be32_to_cpup(&fw_data[i + 1]));
+ }
+ }
+ }
+@@ -594,6 +616,18 @@ static void radeon_do_cp_start(drm_radeon_private_t * dev_priv)
+
+ dev_priv->cp_running = 1;
+
++ /* on r420, any DMA from CP to system memory while 2D is active
++ * can cause a hang. workaround is to queue a CP RESYNC token
++ */
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R420) {
++ BEGIN_RING(3);
++ OUT_RING(CP_PACKET0(R300_CP_RESYNC_ADDR, 1));
++ OUT_RING(5); /* scratch reg 5 */
++ OUT_RING(0xdeadbeef);
++ ADVANCE_RING();
++ COMMIT_RING();
++ }
++
+ BEGIN_RING(8);
+ /* isync can only be written through cp on r5xx write it here */
+ OUT_RING(CP_PACKET0(RADEON_ISYNC_CNTL, 0));
+@@ -631,8 +665,19 @@ static void radeon_do_cp_reset(drm_radeon_private_t * dev_priv)
+ */
+ static void radeon_do_cp_stop(drm_radeon_private_t * dev_priv)
+ {
++ RING_LOCALS;
+ DRM_DEBUG("\n");
+
++ /* finish the pending CP_RESYNC token */
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) == CHIP_R420) {
++ BEGIN_RING(2);
++ OUT_RING(CP_PACKET0(R300_RB3D_DSTCACHE_CTLSTAT, 0));
++ OUT_RING(R300_RB3D_DC_FINISH);
++ ADVANCE_RING();
++ COMMIT_RING();
++ radeon_do_wait_for_idle(dev_priv);
++ }
++
+ RADEON_WRITE(RADEON_CP_CSQ_CNTL, RADEON_CSQ_PRIDIS_INDDIS);
+
+ dev_priv->cp_running = 0;
+@@ -1495,6 +1540,14 @@ static int radeon_do_init_cp(struct drm_device *dev, drm_radeon_init_t *init,
+ radeon_set_pcigart(dev_priv, 1);
+ }
+
++ if (!dev_priv->me_fw) {
++ int err = radeon_cp_init_microcode(dev_priv);
++ if (err) {
++ DRM_ERROR("Failed to load firmware!\n");
++ radeon_do_cleanup_cp(dev);
++ return err;
++ }
++ }
+ radeon_cp_load_microcode(dev_priv);
+ radeon_cp_init_ring_buffer(dev, dev_priv, file_priv);
+
+@@ -1764,6 +1817,14 @@ void radeon_do_release(struct drm_device * dev)
+ r600_do_cleanup_cp(dev);
+ else
+ radeon_do_cleanup_cp(dev);
++ if (dev_priv->me_fw) {
++ release_firmware(dev_priv->me_fw);
++ dev_priv->me_fw = NULL;
++ }
++ if (dev_priv->pfp_fw) {
++ release_firmware(dev_priv->pfp_fw);
++ dev_priv->pfp_fw = NULL;
++ }
+ }
+ }
+
+diff --git a/drivers/gpu/drm/radeon/radeon_cs.c b/drivers/gpu/drm/radeon/radeon_cs.c
+index a169067..5ab2cf9 100644
+--- a/drivers/gpu/drm/radeon/radeon_cs.c
++++ b/drivers/gpu/drm/radeon/radeon_cs.c
+@@ -142,15 +142,31 @@ int radeon_cs_parser_init(struct radeon_cs_parser *p, void *data)
+ }
+
+ p->chunks[i].length_dw = user_chunk.length_dw;
+- cdata = (uint32_t *)(unsigned long)user_chunk.chunk_data;
++ p->chunks[i].user_ptr = (void __user *)(unsigned long)user_chunk.chunk_data;
+
+- size = p->chunks[i].length_dw * sizeof(uint32_t);
+- p->chunks[i].kdata = kzalloc(size, GFP_KERNEL);
+- if (p->chunks[i].kdata == NULL) {
+- return -ENOMEM;
+- }
+- if (DRM_COPY_FROM_USER(p->chunks[i].kdata, cdata, size)) {
+- return -EFAULT;
++ cdata = (uint32_t *)(unsigned long)user_chunk.chunk_data;
++ if (p->chunks[i].chunk_id != RADEON_CHUNK_ID_IB) {
++ size = p->chunks[i].length_dw * sizeof(uint32_t);
++ p->chunks[i].kdata = kmalloc(size, GFP_KERNEL);
++ if (p->chunks[i].kdata == NULL) {
++ return -ENOMEM;
++ }
++ if (DRM_COPY_FROM_USER(p->chunks[i].kdata,
++ p->chunks[i].user_ptr, size)) {
++ return -EFAULT;
++ }
++ } else {
++ p->chunks[i].kpage[0] = kmalloc(PAGE_SIZE, GFP_KERNEL);
++ p->chunks[i].kpage[1] = kmalloc(PAGE_SIZE, GFP_KERNEL);
++ if (p->chunks[i].kpage[0] == NULL || p->chunks[i].kpage[1] == NULL) {
++ kfree(p->chunks[i].kpage[0]);
++ kfree(p->chunks[i].kpage[1]);
++ return -ENOMEM;
++ }
++ p->chunks[i].kpage_idx[0] = -1;
++ p->chunks[i].kpage_idx[1] = -1;
++ p->chunks[i].last_copied_page = -1;
++ p->chunks[i].last_page_index = ((p->chunks[i].length_dw * 4) - 1) / PAGE_SIZE;
+ }
+ }
+ if (p->chunks[p->chunk_ib_idx].length_dw > (16 * 1024)) {
+@@ -185,10 +201,13 @@ static void radeon_cs_parser_fini(struct radeon_cs_parser *parser, int error)
+ mutex_unlock(&parser->rdev->ddev->struct_mutex);
+ }
+ }
++ kfree(parser->track);
+ kfree(parser->relocs);
+ kfree(parser->relocs_ptr);
+ for (i = 0; i < parser->nchunks; i++) {
+ kfree(parser->chunks[i].kdata);
++ kfree(parser->chunks[i].kpage[0]);
++ kfree(parser->chunks[i].kpage[1]);
+ }
+ kfree(parser->chunks);
+ kfree(parser->chunks_array);
+@@ -237,8 +256,14 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+ * uncached). */
+ ib_chunk = &parser.chunks[parser.chunk_ib_idx];
+ parser.ib->length_dw = ib_chunk->length_dw;
+- memcpy((void *)parser.ib->ptr, ib_chunk->kdata, ib_chunk->length_dw*4);
+ r = radeon_cs_parse(&parser);
++ if (r || parser.parser_error) {
++ DRM_ERROR("Invalid command stream !\n");
++ radeon_cs_parser_fini(&parser, r);
++ mutex_unlock(&rdev->cs_mutex);
++ return r;
++ }
++ r = radeon_cs_finish_pages(&parser);
+ if (r) {
+ DRM_ERROR("Invalid command stream !\n");
+ radeon_cs_parser_fini(&parser, r);
+@@ -253,3 +278,64 @@ int radeon_cs_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+ mutex_unlock(&rdev->cs_mutex);
+ return r;
+ }
++
++int radeon_cs_finish_pages(struct radeon_cs_parser *p)
++{
++ struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx];
++ int i;
++ int size = PAGE_SIZE;
++
++ for (i = ibc->last_copied_page + 1; i <= ibc->last_page_index; i++) {
++ if (i == ibc->last_page_index) {
++ size = (ibc->length_dw * 4) % PAGE_SIZE;
++ if (size == 0)
++ size = PAGE_SIZE;
++ }
++
++ if (DRM_COPY_FROM_USER(p->ib->ptr + (i * (PAGE_SIZE/4)),
++ ibc->user_ptr + (i * PAGE_SIZE),
++ size))
++ return -EFAULT;
++ }
++ return 0;
++}
++
++int radeon_cs_update_pages(struct radeon_cs_parser *p, int pg_idx)
++{
++ int new_page;
++ struct radeon_cs_chunk *ibc = &p->chunks[p->chunk_ib_idx];
++ int i;
++ int size = PAGE_SIZE;
++
++ for (i = ibc->last_copied_page + 1; i < pg_idx; i++) {
++ if (DRM_COPY_FROM_USER(p->ib->ptr + (i * (PAGE_SIZE/4)),
++ ibc->user_ptr + (i * PAGE_SIZE),
++ PAGE_SIZE)) {
++ p->parser_error = -EFAULT;
++ return 0;
++ }
++ }
++
++ new_page = ibc->kpage_idx[0] < ibc->kpage_idx[1] ? 0 : 1;
++
++ if (pg_idx == ibc->last_page_index) {
++ size = (ibc->length_dw * 4) % PAGE_SIZE;
++ if (size == 0)
++ size = PAGE_SIZE;
++ }
++
++ if (DRM_COPY_FROM_USER(ibc->kpage[new_page],
++ ibc->user_ptr + (pg_idx * PAGE_SIZE),
++ size)) {
++ p->parser_error = -EFAULT;
++ return 0;
++ }
++
++ /* copy to IB here */
++ memcpy((void *)(p->ib->ptr+(pg_idx*(PAGE_SIZE/4))), ibc->kpage[new_page], size);
++
++ ibc->last_copied_page = pg_idx;
++ ibc->kpage_idx[new_page] = pg_idx;
++
++ return new_page;
++}
+diff --git a/drivers/gpu/drm/radeon/radeon_device.c b/drivers/gpu/drm/radeon/radeon_device.c
+index 7693f7c..a6733cf 100644
+--- a/drivers/gpu/drm/radeon/radeon_device.c
++++ b/drivers/gpu/drm/radeon/radeon_device.c
+@@ -37,7 +37,7 @@
+ /*
+ * Clear GPU surface registers.
+ */
+-static void radeon_surface_init(struct radeon_device *rdev)
++void radeon_surface_init(struct radeon_device *rdev)
+ {
+ /* FIXME: check this out */
+ if (rdev->family < CHIP_R600) {
+@@ -56,7 +56,7 @@ static void radeon_surface_init(struct radeon_device *rdev)
+ /*
+ * GPU scratch registers helpers function.
+ */
+-static void radeon_scratch_init(struct radeon_device *rdev)
++void radeon_scratch_init(struct radeon_device *rdev)
+ {
+ int i;
+
+@@ -156,16 +156,18 @@ int radeon_mc_setup(struct radeon_device *rdev)
+ tmp = (tmp + rdev->mc.gtt_size - 1) & ~(rdev->mc.gtt_size - 1);
+ rdev->mc.gtt_location = tmp;
+ }
+- DRM_INFO("radeon: VRAM %uM\n", rdev->mc.real_vram_size >> 20);
++ rdev->mc.vram_start = rdev->mc.vram_location;
++ rdev->mc.vram_end = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1;
++ rdev->mc.gtt_start = rdev->mc.gtt_location;
++ rdev->mc.gtt_end = rdev->mc.gtt_location + rdev->mc.gtt_size - 1;
++ DRM_INFO("radeon: VRAM %uM\n", (unsigned)(rdev->mc.mc_vram_size >> 20));
+ DRM_INFO("radeon: VRAM from 0x%08X to 0x%08X\n",
+- rdev->mc.vram_location,
+- rdev->mc.vram_location + rdev->mc.mc_vram_size - 1);
+- if (rdev->mc.real_vram_size != rdev->mc.mc_vram_size)
+- DRM_INFO("radeon: VRAM less than aperture workaround enabled\n");
+- DRM_INFO("radeon: GTT %uM\n", rdev->mc.gtt_size >> 20);
++ (unsigned)rdev->mc.vram_location,
++ (unsigned)(rdev->mc.vram_location + rdev->mc.mc_vram_size - 1));
++ DRM_INFO("radeon: GTT %uM\n", (unsigned)(rdev->mc.gtt_size >> 20));
+ DRM_INFO("radeon: GTT from 0x%08X to 0x%08X\n",
+- rdev->mc.gtt_location,
+- rdev->mc.gtt_location + rdev->mc.gtt_size - 1);
++ (unsigned)rdev->mc.gtt_location,
++ (unsigned)(rdev->mc.gtt_location + rdev->mc.gtt_size - 1));
+ return 0;
+ }
+
+@@ -173,7 +175,7 @@ int radeon_mc_setup(struct radeon_device *rdev)
+ /*
+ * GPU helpers function.
+ */
+-static bool radeon_card_posted(struct radeon_device *rdev)
++bool radeon_card_posted(struct radeon_device *rdev)
+ {
+ uint32_t reg;
+
+@@ -205,6 +207,31 @@ static bool radeon_card_posted(struct radeon_device *rdev)
+
+ }
+
++int radeon_dummy_page_init(struct radeon_device *rdev)
++{
++ rdev->dummy_page.page = alloc_page(GFP_DMA32 | GFP_KERNEL | __GFP_ZERO);
++ if (rdev->dummy_page.page == NULL)
++ return -ENOMEM;
++ rdev->dummy_page.addr = pci_map_page(rdev->pdev, rdev->dummy_page.page,
++ 0, PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
++ if (!rdev->dummy_page.addr) {
++ __free_page(rdev->dummy_page.page);
++ rdev->dummy_page.page = NULL;
++ return -ENOMEM;
++ }
++ return 0;
++}
++
++void radeon_dummy_page_fini(struct radeon_device *rdev)
++{
++ if (rdev->dummy_page.page == NULL)
++ return;
++ pci_unmap_page(rdev->pdev, rdev->dummy_page.addr,
++ PAGE_SIZE, PCI_DMA_BIDIRECTIONAL);
++ __free_page(rdev->dummy_page.page);
++ rdev->dummy_page.page = NULL;
++}
++
+
+ /*
+ * Registers accessors functions.
+@@ -243,6 +270,10 @@ void radeon_register_accessor_init(struct radeon_device *rdev)
+ rdev->pll_rreg = &r100_pll_rreg;
+ rdev->pll_wreg = &r100_pll_wreg;
+ }
++ if (rdev->family >= CHIP_R420) {
++ rdev->mc_rreg = &r420_mc_rreg;
++ rdev->mc_wreg = &r420_mc_wreg;
++ }
+ if (rdev->family >= CHIP_RV515) {
+ rdev->mc_rreg = &rv515_mc_rreg;
+ rdev->mc_wreg = &rv515_mc_wreg;
+@@ -289,6 +320,14 @@ int radeon_asic_init(struct radeon_device *rdev)
+ case CHIP_RV350:
+ case CHIP_RV380:
+ rdev->asic = &r300_asic;
++ if (rdev->flags & RADEON_IS_PCIE) {
++ rdev->asic->gart_init = &rv370_pcie_gart_init;
++ rdev->asic->gart_fini = &rv370_pcie_gart_fini;
++ rdev->asic->gart_enable = &rv370_pcie_gart_enable;
++ rdev->asic->gart_disable = &rv370_pcie_gart_disable;
++ rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
++ rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
++ }
+ break;
+ case CHIP_R420:
+ case CHIP_R423:
+@@ -323,9 +362,15 @@ int radeon_asic_init(struct radeon_device *rdev)
+ case CHIP_RV635:
+ case CHIP_RV670:
+ case CHIP_RS780:
++ case CHIP_RS880:
++ rdev->asic = &r600_asic;
++ break;
+ case CHIP_RV770:
+ case CHIP_RV730:
+ case CHIP_RV710:
++ case CHIP_RV740:
++ rdev->asic = &rv770_asic;
++ break;
+ default:
+ /* FIXME: not supported yet */
+ return -EINVAL;
+@@ -341,7 +386,6 @@ int radeon_clocks_init(struct radeon_device *rdev)
+ {
+ int r;
+
+- radeon_get_clock_info(rdev->ddev);
+ r = radeon_static_clocks_init(rdev->ddev);
+ if (r) {
+ return r;
+@@ -436,9 +480,6 @@ void radeon_combios_fini(struct radeon_device *rdev)
+ {
+ }
+
+-int radeon_modeset_init(struct radeon_device *rdev);
+-void radeon_modeset_fini(struct radeon_device *rdev);
+-
+
+ /*
+ * Radeon device.
+@@ -448,11 +489,12 @@ int radeon_device_init(struct radeon_device *rdev,
+ struct pci_dev *pdev,
+ uint32_t flags)
+ {
+- int r, ret;
++ int r;
+ int dma_bits;
+
+ DRM_INFO("radeon: Initializing kernel modesetting.\n");
+ rdev->shutdown = false;
++ rdev->dev = &pdev->dev;
+ rdev->ddev = ddev;
+ rdev->pdev = pdev;
+ rdev->flags = flags;
+@@ -461,37 +503,50 @@ int radeon_device_init(struct radeon_device *rdev,
+ rdev->usec_timeout = RADEON_MAX_USEC_TIMEOUT;
+ rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
+ rdev->gpu_lockup = false;
++ rdev->accel_working = false;
+ /* mutex initialization are all done here so we
+ * can recall function without having locking issues */
+ mutex_init(&rdev->cs_mutex);
+ mutex_init(&rdev->ib_pool.mutex);
+ mutex_init(&rdev->cp.mutex);
+ rwlock_init(&rdev->fence_drv.lock);
++ INIT_LIST_HEAD(&rdev->gem.objects);
++
++ /* Set asic functions */
++ r = radeon_asic_init(rdev);
++ if (r) {
++ return r;
++ }
+
+ if (radeon_agpmode == -1) {
+ rdev->flags &= ~RADEON_IS_AGP;
+- if (rdev->family > CHIP_RV515 ||
+- rdev->family == CHIP_RV380 ||
+- rdev->family == CHIP_RV410 ||
+- rdev->family == CHIP_R423) {
++ if (rdev->family >= CHIP_R600) {
+ DRM_INFO("Forcing AGP to PCIE mode\n");
+ rdev->flags |= RADEON_IS_PCIE;
++ } else if (rdev->family >= CHIP_RV515 ||
++ rdev->family == CHIP_RV380 ||
++ rdev->family == CHIP_RV410 ||
++ rdev->family == CHIP_R423) {
++ DRM_INFO("Forcing AGP to PCIE mode\n");
++ rdev->flags |= RADEON_IS_PCIE;
++ rdev->asic->gart_init = &rv370_pcie_gart_init;
++ rdev->asic->gart_fini = &rv370_pcie_gart_fini;
++ rdev->asic->gart_enable = &rv370_pcie_gart_enable;
++ rdev->asic->gart_disable = &rv370_pcie_gart_disable;
++ rdev->asic->gart_tlb_flush = &rv370_pcie_gart_tlb_flush;
++ rdev->asic->gart_set_page = &rv370_pcie_gart_set_page;
+ } else {
+ DRM_INFO("Forcing AGP to PCI mode\n");
+ rdev->flags |= RADEON_IS_PCI;
++ rdev->asic->gart_init = &r100_pci_gart_init;
++ rdev->asic->gart_fini = &r100_pci_gart_fini;
++ rdev->asic->gart_enable = &r100_pci_gart_enable;
++ rdev->asic->gart_disable = &r100_pci_gart_disable;
++ rdev->asic->gart_tlb_flush = &r100_pci_gart_tlb_flush;
++ rdev->asic->gart_set_page = &r100_pci_gart_set_page;
+ }
+ }
+
+- /* Set asic functions */
+- r = radeon_asic_init(rdev);
+- if (r) {
+- return r;
+- }
+- r = radeon_init(rdev);
+- if (r) {
+- return r;
+- }
+-
+ /* set DMA mask + need_dma32 flags.
+ * PCIE - can handle 40-bits.
+ * IGP - can handle 40-bits (in theory)
+@@ -521,156 +576,143 @@ int radeon_device_init(struct radeon_device *rdev,
+ DRM_INFO("register mmio base: 0x%08X\n", (uint32_t)rdev->rmmio_base);
+ DRM_INFO("register mmio size: %u\n", (unsigned)rdev->rmmio_size);
+
+- /* Setup errata flags */
+- radeon_errata(rdev);
+- /* Initialize scratch registers */
+- radeon_scratch_init(rdev);
+- /* Initialize surface registers */
+- radeon_surface_init(rdev);
+-
+- /* TODO: disable VGA need to use VGA request */
+- /* BIOS*/
+- if (!radeon_get_bios(rdev)) {
+- if (ASIC_IS_AVIVO(rdev))
+- return -EINVAL;
+- }
+- if (rdev->is_atom_bios) {
+- r = radeon_atombios_init(rdev);
++ rdev->new_init_path = false;
++ r = radeon_init(rdev);
++ if (r) {
++ return r;
++ }
++ if (!rdev->new_init_path) {
++ /* Setup errata flags */
++ radeon_errata(rdev);
++ /* Initialize scratch registers */
++ radeon_scratch_init(rdev);
++ /* Initialize surface registers */
++ radeon_surface_init(rdev);
++
++ /* TODO: disable VGA need to use VGA request */
++ /* BIOS*/
++ if (!radeon_get_bios(rdev)) {
++ if (ASIC_IS_AVIVO(rdev))
++ return -EINVAL;
++ }
++ if (rdev->is_atom_bios) {
++ r = radeon_atombios_init(rdev);
++ if (r) {
++ return r;
++ }
++ } else {
++ r = radeon_combios_init(rdev);
++ if (r) {
++ return r;
++ }
++ }
++ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
++ if (radeon_gpu_reset(rdev)) {
++ /* FIXME: what do we want to do here ? */
++ }
++ /* check if cards are posted or not */
++ if (!radeon_card_posted(rdev) && rdev->bios) {
++ DRM_INFO("GPU not posted. posting now...\n");
++ if (rdev->is_atom_bios) {
++ atom_asic_init(rdev->mode_info.atom_context);
++ } else {
++ radeon_combios_asic_init(rdev->ddev);
++ }
++ }
++ /* Get clock & vram information */
++ radeon_get_clock_info(rdev->ddev);
++ radeon_vram_info(rdev);
++ /* Initialize clocks */
++ r = radeon_clocks_init(rdev);
+ if (r) {
+ return r;
+ }
+- } else {
+- r = radeon_combios_init(rdev);
++
++ /* Initialize memory controller (also test AGP) */
++ r = radeon_mc_init(rdev);
+ if (r) {
+ return r;
+ }
+- }
+- /* Reset gpu before posting otherwise ATOM will enter infinite loop */
+- if (radeon_gpu_reset(rdev)) {
+- /* FIXME: what do we want to do here ? */
+- }
+- /* check if cards are posted or not */
+- if (!radeon_card_posted(rdev) && rdev->bios) {
+- DRM_INFO("GPU not posted. posting now...\n");
+- if (rdev->is_atom_bios) {
+- atom_asic_init(rdev->mode_info.atom_context);
+- } else {
+- radeon_combios_asic_init(rdev->ddev);
+- }
+- }
+- /* Initialize clocks */
+- r = radeon_clocks_init(rdev);
+- if (r) {
+- return r;
+- }
+- /* Get vram informations */
+- radeon_vram_info(rdev);
+-
+- /* Add an MTRR for the VRAM */
+- rdev->mc.vram_mtrr = mtrr_add(rdev->mc.aper_base, rdev->mc.aper_size,
+- MTRR_TYPE_WRCOMB, 1);
+- DRM_INFO("Detected VRAM RAM=%uM, BAR=%uM\n",
+- rdev->mc.real_vram_size >> 20,
+- (unsigned)rdev->mc.aper_size >> 20);
+- DRM_INFO("RAM width %dbits %cDR\n",
+- rdev->mc.vram_width, rdev->mc.vram_is_ddr ? 'D' : 'S');
+- /* Initialize memory controller (also test AGP) */
+- r = radeon_mc_init(rdev);
+- if (r) {
+- return r;
+- }
+- /* Fence driver */
+- r = radeon_fence_driver_init(rdev);
+- if (r) {
+- return r;
+- }
+- r = radeon_irq_kms_init(rdev);
+- if (r) {
+- return r;
+- }
+- /* Memory manager */
+- r = radeon_object_init(rdev);
+- if (r) {
+- return r;
+- }
+- /* Initialize GART (initialize after TTM so we can allocate
+- * memory through TTM but finalize after TTM) */
+- r = radeon_gart_enable(rdev);
+- if (!r) {
+- r = radeon_gem_init(rdev);
+- }
+-
+- /* 1M ring buffer */
+- if (!r) {
+- r = radeon_cp_init(rdev, 1024 * 1024);
+- }
+- if (!r) {
+- r = radeon_wb_init(rdev);
++ /* Fence driver */
++ r = radeon_fence_driver_init(rdev);
+ if (r) {
+- DRM_ERROR("radeon: failled initializing WB (%d).\n", r);
+ return r;
+ }
+- }
+- if (!r) {
+- r = radeon_ib_pool_init(rdev);
++ r = radeon_irq_kms_init(rdev);
+ if (r) {
+- DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r);
+ return r;
+ }
+- }
+- if (!r) {
+- r = radeon_ib_test(rdev);
++ /* Memory manager */
++ r = radeon_object_init(rdev);
+ if (r) {
+- DRM_ERROR("radeon: failled testing IB (%d).\n", r);
+ return r;
+ }
++ r = radeon_gpu_gart_init(rdev);
++ if (r)
++ return r;
++ /* Initialize GART (initialize after TTM so we can allocate
++ * memory through TTM but finalize after TTM) */
++ r = radeon_gart_enable(rdev);
++ if (r)
++ return 0;
++ r = radeon_gem_init(rdev);
++ if (r)
++ return 0;
++
++ /* 1M ring buffer */
++ r = radeon_cp_init(rdev, 1024 * 1024);
++ if (r)
++ return 0;
++ r = radeon_wb_init(rdev);
++ if (r)
++ DRM_ERROR("radeon: failled initializing WB (%d).\n", r);
++ r = radeon_ib_pool_init(rdev);
++ if (r)
++ return 0;
++ r = radeon_ib_test(rdev);
++ if (r)
++ return 0;
++ rdev->accel_working = true;
+ }
+- ret = r;
+- r = radeon_modeset_init(rdev);
+- if (r) {
+- return r;
+- }
+- if (!ret) {
+- DRM_INFO("radeon: kernel modesetting successfully initialized.\n");
+- }
++ DRM_INFO("radeon: kernel modesetting successfully initialized.\n");
+ if (radeon_testing) {
+ radeon_test_moves(rdev);
+ }
+ if (radeon_benchmarking) {
+ radeon_benchmark(rdev);
+ }
+- return ret;
++ return 0;
+ }
+
+ void radeon_device_fini(struct radeon_device *rdev)
+ {
+- if (rdev == NULL || rdev->rmmio == NULL) {
+- return;
+- }
+ DRM_INFO("radeon: finishing device.\n");
+ rdev->shutdown = true;
+ /* Order matter so becarefull if you rearrange anythings */
+- radeon_modeset_fini(rdev);
+- radeon_ib_pool_fini(rdev);
+- radeon_cp_fini(rdev);
+- radeon_wb_fini(rdev);
+- radeon_gem_fini(rdev);
+- radeon_object_fini(rdev);
+- /* mc_fini must be after object_fini */
+- radeon_mc_fini(rdev);
++ if (!rdev->new_init_path) {
++ radeon_ib_pool_fini(rdev);
++ radeon_cp_fini(rdev);
++ radeon_wb_fini(rdev);
++ radeon_gpu_gart_fini(rdev);
++ radeon_gem_fini(rdev);
++ radeon_mc_fini(rdev);
+ #if __OS_HAS_AGP
+- radeon_agp_fini(rdev);
++ radeon_agp_fini(rdev);
+ #endif
+- radeon_irq_kms_fini(rdev);
+- radeon_fence_driver_fini(rdev);
+- radeon_clocks_fini(rdev);
+- if (rdev->is_atom_bios) {
+- radeon_atombios_fini(rdev);
++ radeon_irq_kms_fini(rdev);
++ radeon_fence_driver_fini(rdev);
++ radeon_clocks_fini(rdev);
++ radeon_object_fini(rdev);
++ if (rdev->is_atom_bios) {
++ radeon_atombios_fini(rdev);
++ } else {
++ radeon_combios_fini(rdev);
++ }
++ kfree(rdev->bios);
++ rdev->bios = NULL;
+ } else {
+- radeon_combios_fini(rdev);
++ radeon_fini(rdev);
+ }
+- kfree(rdev->bios);
+- rdev->bios = NULL;
+ iounmap(rdev->rmmio);
+ rdev->rmmio = NULL;
+ }
+@@ -708,15 +750,19 @@ int radeon_suspend_kms(struct drm_device *dev, pm_message_t state)
+ /* wait for gpu to finish processing current batch */
+ radeon_fence_wait_last(rdev);
+
+- radeon_cp_disable(rdev);
+- radeon_gart_disable(rdev);
++ radeon_save_bios_scratch_regs(rdev);
+
++ if (!rdev->new_init_path) {
++ radeon_cp_disable(rdev);
++ radeon_gart_disable(rdev);
++ rdev->irq.sw_int = false;
++ radeon_irq_set(rdev);
++ } else {
++ radeon_suspend(rdev);
++ }
+ /* evict remaining vram memory */
+ radeon_object_evict_vram(rdev);
+
+- rdev->irq.sw_int = false;
+- radeon_irq_set(rdev);
+-
+ pci_save_state(dev->pdev);
+ if (state.event == PM_EVENT_SUSPEND) {
+ /* Shut down the device */
+@@ -743,38 +789,43 @@ int radeon_resume_kms(struct drm_device *dev)
+ }
+ pci_set_master(dev->pdev);
+ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
+- if (radeon_gpu_reset(rdev)) {
+- /* FIXME: what do we want to do here ? */
+- }
+- /* post card */
+- if (rdev->is_atom_bios) {
+- atom_asic_init(rdev->mode_info.atom_context);
++ if (!rdev->new_init_path) {
++ if (radeon_gpu_reset(rdev)) {
++ /* FIXME: what do we want to do here ? */
++ }
++ /* post card */
++ if (rdev->is_atom_bios) {
++ atom_asic_init(rdev->mode_info.atom_context);
++ } else {
++ radeon_combios_asic_init(rdev->ddev);
++ }
++ /* Initialize clocks */
++ r = radeon_clocks_init(rdev);
++ if (r) {
++ release_console_sem();
++ return r;
++ }
++ /* Enable IRQ */
++ rdev->irq.sw_int = true;
++ radeon_irq_set(rdev);
++ /* Initialize GPU Memory Controller */
++ r = radeon_mc_init(rdev);
++ if (r) {
++ goto out;
++ }
++ r = radeon_gart_enable(rdev);
++ if (r) {
++ goto out;
++ }
++ r = radeon_cp_init(rdev, rdev->cp.ring_size);
++ if (r) {
++ goto out;
++ }
+ } else {
+- radeon_combios_asic_init(rdev->ddev);
+- }
+- /* Initialize clocks */
+- r = radeon_clocks_init(rdev);
+- if (r) {
+- release_console_sem();
+- return r;
+- }
+- /* Enable IRQ */
+- rdev->irq.sw_int = true;
+- radeon_irq_set(rdev);
+- /* Initialize GPU Memory Controller */
+- r = radeon_mc_init(rdev);
+- if (r) {
+- goto out;
+- }
+- r = radeon_gart_enable(rdev);
+- if (r) {
+- goto out;
+- }
+- r = radeon_cp_init(rdev, rdev->cp.ring_size);
+- if (r) {
+- goto out;
++ radeon_resume(rdev);
+ }
+ out:
++ radeon_restore_bios_scratch_regs(rdev);
+ fb_set_suspend(rdev->fbdev_info, 0);
+ release_console_sem();
+
+diff --git a/drivers/gpu/drm/radeon/radeon_display.c b/drivers/gpu/drm/radeon/radeon_display.c
+index a8fa1bb..5d8141b 100644
+--- a/drivers/gpu/drm/radeon/radeon_display.c
++++ b/drivers/gpu/drm/radeon/radeon_display.c
+@@ -158,9 +158,6 @@ static void radeon_crtc_destroy(struct drm_crtc *crtc)
+ {
+ struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
+
+- if (radeon_crtc->mode_set.mode) {
+- drm_mode_destroy(crtc->dev, radeon_crtc->mode_set.mode);
+- }
+ drm_crtc_cleanup(crtc);
+ kfree(radeon_crtc);
+ }
+@@ -189,9 +186,11 @@ static void radeon_crtc_init(struct drm_device *dev, int index)
+ radeon_crtc->crtc_id = index;
+ rdev->mode_info.crtcs[index] = radeon_crtc;
+
++#if 0
+ radeon_crtc->mode_set.crtc = &radeon_crtc->base;
+ radeon_crtc->mode_set.connectors = (struct drm_connector **)(radeon_crtc + 1);
+ radeon_crtc->mode_set.num_connectors = 0;
++#endif
+
+ for (i = 0; i < 256; i++) {
+ radeon_crtc->lut_r[i] = i << 2;
+@@ -313,7 +312,7 @@ static void radeon_print_display_setup(struct drm_device *dev)
+ }
+ }
+
+-bool radeon_setup_enc_conn(struct drm_device *dev)
++static bool radeon_setup_enc_conn(struct drm_device *dev)
+ {
+ struct radeon_device *rdev = dev->dev_private;
+ struct drm_connector *drm_connector;
+@@ -347,9 +346,13 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
+
+ if (!radeon_connector->ddc_bus)
+ return -1;
+- radeon_i2c_do_lock(radeon_connector, 1);
+- edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
+- radeon_i2c_do_lock(radeon_connector, 0);
++ if (!radeon_connector->edid) {
++ radeon_i2c_do_lock(radeon_connector, 1);
++ edid = drm_get_edid(&radeon_connector->base, &radeon_connector->ddc_bus->adapter);
++ radeon_i2c_do_lock(radeon_connector, 0);
++ } else
++ edid = radeon_connector->edid;
++
+ if (edid) {
+ /* update digital bits here */
+ if (edid->input & DRM_EDID_INPUT_DIGITAL)
+@@ -362,7 +365,7 @@ int radeon_ddc_get_modes(struct radeon_connector *radeon_connector)
+ return ret;
+ }
+ drm_mode_connector_update_edid_property(&radeon_connector->base, NULL);
+- return -1;
++ return 0;
+ }
+
+ static int radeon_ddc_dump(struct drm_connector *connector)
+@@ -620,6 +623,83 @@ static const struct drm_mode_config_funcs radeon_mode_funcs = {
+ .fb_changed = radeonfb_probe,
+ };
+
++struct drm_prop_enum_list {
++ int type;
++ char *name;
++};
++
++static struct drm_prop_enum_list radeon_tmds_pll_enum_list[] =
++{ { 0, "driver" },
++ { 1, "bios" },
++};
++
++static struct drm_prop_enum_list radeon_tv_std_enum_list[] =
++{ { TV_STD_NTSC, "ntsc" },
++ { TV_STD_PAL, "pal" },
++ { TV_STD_PAL_M, "pal-m" },
++ { TV_STD_PAL_60, "pal-60" },
++ { TV_STD_NTSC_J, "ntsc-j" },
++ { TV_STD_SCART_PAL, "scart-pal" },
++ { TV_STD_PAL_CN, "pal-cn" },
++ { TV_STD_SECAM, "secam" },
++};
++
++int radeon_modeset_create_props(struct radeon_device *rdev)
++{
++ int i, sz;
++
++ if (rdev->is_atom_bios) {
++ rdev->mode_info.coherent_mode_property =
++ drm_property_create(rdev->ddev,
++ DRM_MODE_PROP_RANGE,
++ "coherent", 2);
++ if (!rdev->mode_info.coherent_mode_property)
++ return -ENOMEM;
++
++ rdev->mode_info.coherent_mode_property->values[0] = 0;
++ rdev->mode_info.coherent_mode_property->values[0] = 1;
++ }
++
++ if (!ASIC_IS_AVIVO(rdev)) {
++ sz = ARRAY_SIZE(radeon_tmds_pll_enum_list);
++ rdev->mode_info.tmds_pll_property =
++ drm_property_create(rdev->ddev,
++ DRM_MODE_PROP_ENUM,
++ "tmds_pll", sz);
++ for (i = 0; i < sz; i++) {
++ drm_property_add_enum(rdev->mode_info.tmds_pll_property,
++ i,
++ radeon_tmds_pll_enum_list[i].type,
++ radeon_tmds_pll_enum_list[i].name);
++ }
++ }
++
++ rdev->mode_info.load_detect_property =
++ drm_property_create(rdev->ddev,
++ DRM_MODE_PROP_RANGE,
++ "load detection", 2);
++ if (!rdev->mode_info.load_detect_property)
++ return -ENOMEM;
++ rdev->mode_info.load_detect_property->values[0] = 0;
++ rdev->mode_info.load_detect_property->values[0] = 1;
++
++ drm_mode_create_scaling_mode_property(rdev->ddev);
++
++ sz = ARRAY_SIZE(radeon_tv_std_enum_list);
++ rdev->mode_info.tv_std_property =
++ drm_property_create(rdev->ddev,
++ DRM_MODE_PROP_ENUM,
++ "tv standard", sz);
++ for (i = 0; i < sz; i++) {
++ drm_property_add_enum(rdev->mode_info.tv_std_property,
++ i,
++ radeon_tv_std_enum_list[i].type,
++ radeon_tv_std_enum_list[i].name);
++ }
++
++ return 0;
++}
++
+ int radeon_modeset_init(struct radeon_device *rdev)
+ {
+ int num_crtc = 2, i;
+@@ -640,6 +720,10 @@ int radeon_modeset_init(struct radeon_device *rdev)
+
+ rdev->ddev->mode_config.fb_base = rdev->mc.aper_base;
+
++ ret = radeon_modeset_create_props(rdev);
++ if (ret) {
++ return ret;
++ }
+ /* allocate crtcs - TODO single crtc */
+ for (i = 0; i < num_crtc; i++) {
+ radeon_crtc_init(rdev->ddev, i);
+@@ -678,7 +762,6 @@ bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
+ continue;
+ if (first) {
+ radeon_crtc->rmx_type = radeon_encoder->rmx_type;
+- radeon_crtc->devices = radeon_encoder->devices;
+ memcpy(&radeon_crtc->native_mode,
+ &radeon_encoder->native_mode,
+ sizeof(struct radeon_native_mode));
+diff --git a/drivers/gpu/drm/radeon/radeon_drv.c b/drivers/gpu/drm/radeon/radeon_drv.c
+index 0bd5879..7f50fb8 100644
+--- a/drivers/gpu/drm/radeon/radeon_drv.c
++++ b/drivers/gpu/drm/radeon/radeon_drv.c
+@@ -38,7 +38,6 @@
+ #include <linux/console.h>
+
+
+-#if defined(CONFIG_DRM_RADEON_KMS)
+ /*
+ * KMS wrapper.
+ */
+@@ -63,9 +62,6 @@ void radeon_driver_irq_preinstall_kms(struct drm_device *dev);
+ int radeon_driver_irq_postinstall_kms(struct drm_device *dev);
+ void radeon_driver_irq_uninstall_kms(struct drm_device *dev);
+ irqreturn_t radeon_driver_irq_handler_kms(DRM_IRQ_ARGS);
+-int radeon_master_create_kms(struct drm_device *dev, struct drm_master *master);
+-void radeon_master_destroy_kms(struct drm_device *dev,
+- struct drm_master *master);
+ int radeon_dma_ioctl_kms(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+ int radeon_gem_object_init(struct drm_gem_object *obj);
+@@ -77,11 +73,9 @@ int radeon_mmap(struct file *filp, struct vm_area_struct *vma);
+ int radeon_debugfs_init(struct drm_minor *minor);
+ void radeon_debugfs_cleanup(struct drm_minor *minor);
+ #endif
+-#endif
+
+
+ int radeon_no_wb;
+-#if defined(CONFIG_DRM_RADEON_KMS)
+ int radeon_modeset = -1;
+ int radeon_dynclks = -1;
+ int radeon_r4xx_atom = 0;
+@@ -91,12 +85,11 @@ int radeon_gart_size = 512; /* default gart size */
+ int radeon_benchmarking = 0;
+ int radeon_testing = 0;
+ int radeon_connector_table = 0;
+-#endif
++int radeon_tv = 1;
+
+ MODULE_PARM_DESC(no_wb, "Disable AGP writeback for scratch registers");
+ module_param_named(no_wb, radeon_no_wb, int, 0444);
+
+-#if defined(CONFIG_DRM_RADEON_KMS)
+ MODULE_PARM_DESC(modeset, "Disable/Enable modesetting");
+ module_param_named(modeset, radeon_modeset, int, 0400);
+
+@@ -123,7 +116,9 @@ module_param_named(test, radeon_testing, int, 0444);
+
+ MODULE_PARM_DESC(connector_table, "Force connector table");
+ module_param_named(connector_table, radeon_connector_table, int, 0444);
+-#endif
++
++MODULE_PARM_DESC(tv, "TV enable (0 = disable)");
++module_param_named(tv, radeon_tv, int, 0444);
+
+ static int radeon_suspend(struct drm_device *dev, pm_message_t state)
+ {
+@@ -215,7 +210,6 @@ static struct drm_driver driver_old = {
+ .patchlevel = DRIVER_PATCHLEVEL,
+ };
+
+-#if defined(CONFIG_DRM_RADEON_KMS)
+ static struct drm_driver kms_driver;
+
+ static int __devinit
+@@ -263,8 +257,6 @@ static struct drm_driver kms_driver = {
+ .get_vblank_counter = radeon_get_vblank_counter_kms,
+ .enable_vblank = radeon_enable_vblank_kms,
+ .disable_vblank = radeon_disable_vblank_kms,
+- .master_create = radeon_master_create_kms,
+- .master_destroy = radeon_master_destroy_kms,
+ #if defined(CONFIG_DEBUG_FS)
+ .debugfs_init = radeon_debugfs_init,
+ .debugfs_cleanup = radeon_debugfs_cleanup,
+@@ -289,7 +281,7 @@ static struct drm_driver kms_driver = {
+ .poll = drm_poll,
+ .fasync = drm_fasync,
+ #ifdef CONFIG_COMPAT
+- .compat_ioctl = NULL,
++ .compat_ioctl = radeon_kms_compat_ioctl,
+ #endif
+ },
+
+@@ -309,7 +301,6 @@ static struct drm_driver kms_driver = {
+ .minor = KMS_DRIVER_MINOR,
+ .patchlevel = KMS_DRIVER_PATCHLEVEL,
+ };
+-#endif
+
+ static struct drm_driver *driver;
+
+@@ -317,7 +308,6 @@ static int __init radeon_init(void)
+ {
+ driver = &driver_old;
+ driver->num_ioctls = radeon_max_ioctl;
+-#if defined(CONFIG_DRM_RADEON_KMS)
+ #ifdef CONFIG_VGA_CONSOLE
+ if (vgacon_text_force() && radeon_modeset == -1) {
+ DRM_INFO("VGACON disable radeon kernel modesetting.\n");
+@@ -328,8 +318,13 @@ static int __init radeon_init(void)
+ #endif
+ /* if enabled by default */
+ if (radeon_modeset == -1) {
+- DRM_INFO("radeon default to kernel modesetting.\n");
++#ifdef CONFIG_DRM_RADEON_KMS
++ DRM_INFO("radeon defaulting to kernel modesetting.\n");
+ radeon_modeset = 1;
++#else
++ DRM_INFO("radeon defaulting to userspace modesetting.\n");
++ radeon_modeset = 0;
++#endif
+ }
+ if (radeon_modeset == 1) {
+ DRM_INFO("radeon kernel modesetting enabled.\n");
+@@ -339,7 +334,6 @@ static int __init radeon_init(void)
+ }
+ /* if the vga console setting is enabled still
+ * let modprobe override it */
+-#endif
+ return drm_init(driver);
+ }
+
+diff --git a/drivers/gpu/drm/radeon/radeon_drv.h b/drivers/gpu/drm/radeon/radeon_drv.h
+index 6fa32da..350962e 100644
+--- a/drivers/gpu/drm/radeon/radeon_drv.h
++++ b/drivers/gpu/drm/radeon/radeon_drv.h
+@@ -31,6 +31,11 @@
+ #ifndef __RADEON_DRV_H__
+ #define __RADEON_DRV_H__
+
++#include <linux/firmware.h>
++#include <linux/platform_device.h>
++
++#include "radeon_family.h"
++
+ /* General customization:
+ */
+
+@@ -106,75 +111,12 @@
+ #define DRIVER_MINOR 31
+ #define DRIVER_PATCHLEVEL 0
+
+-/*
+- * Radeon chip families
+- */
+-enum radeon_family {
+- CHIP_R100,
+- CHIP_RV100,
+- CHIP_RS100,
+- CHIP_RV200,
+- CHIP_RS200,
+- CHIP_R200,
+- CHIP_RV250,
+- CHIP_RS300,
+- CHIP_RV280,
+- CHIP_R300,
+- CHIP_R350,
+- CHIP_RV350,
+- CHIP_RV380,
+- CHIP_R420,
+- CHIP_R423,
+- CHIP_RV410,
+- CHIP_RS400,
+- CHIP_RS480,
+- CHIP_RS600,
+- CHIP_RS690,
+- CHIP_RS740,
+- CHIP_RV515,
+- CHIP_R520,
+- CHIP_RV530,
+- CHIP_RV560,
+- CHIP_RV570,
+- CHIP_R580,
+- CHIP_R600,
+- CHIP_RV610,
+- CHIP_RV630,
+- CHIP_RV620,
+- CHIP_RV635,
+- CHIP_RV670,
+- CHIP_RS780,
+- CHIP_RS880,
+- CHIP_RV770,
+- CHIP_RV730,
+- CHIP_RV710,
+- CHIP_RV740,
+- CHIP_LAST,
+-};
+-
+ enum radeon_cp_microcode_version {
+ UCODE_R100,
+ UCODE_R200,
+ UCODE_R300,
+ };
+
+-/*
+- * Chip flags
+- */
+-enum radeon_chip_flags {
+- RADEON_FAMILY_MASK = 0x0000ffffUL,
+- RADEON_FLAGS_MASK = 0xffff0000UL,
+- RADEON_IS_MOBILITY = 0x00010000UL,
+- RADEON_IS_IGP = 0x00020000UL,
+- RADEON_SINGLE_CRTC = 0x00040000UL,
+- RADEON_IS_AGP = 0x00080000UL,
+- RADEON_HAS_HIERZ = 0x00100000UL,
+- RADEON_IS_PCIE = 0x00200000UL,
+- RADEON_NEW_MEMMAP = 0x00400000UL,
+- RADEON_IS_PCI = 0x00800000UL,
+- RADEON_IS_IGPGART = 0x01000000UL,
+-};
+-
+ typedef struct drm_radeon_freelist {
+ unsigned int age;
+ struct drm_buf *buf;
+@@ -353,6 +295,14 @@ typedef struct drm_radeon_private {
+ int r700_sc_hiz_tile_fifo_size;
+ int r700_sc_earlyz_tile_fifo_fize;
+
++ struct mutex cs_mutex;
++ u32 cs_id_scnt;
++ u32 cs_id_wcnt;
++ /* r6xx/r7xx drm blit vertex buffer */
++ struct drm_buf *blit_vb;
++
++ /* firmware */
++ const struct firmware *me_fw, *pfp_fw;
+ } drm_radeon_private_t;
+
+ typedef struct drm_radeon_buf_priv {
+@@ -391,6 +341,9 @@ static __inline__ int radeon_check_offset(drm_radeon_private_t *dev_priv,
+ (off >= gart_start && off <= gart_end));
+ }
+
++/* radeon_state.c */
++extern void radeon_cp_discard_buffer(struct drm_device *dev, struct drm_master *master, struct drm_buf *buf);
++
+ /* radeon_cp.c */
+ extern int radeon_cp_init(struct drm_device *dev, void *data, struct drm_file *file_priv);
+ extern int radeon_cp_start(struct drm_device *dev, void *data, struct drm_file *file_priv);
+@@ -457,6 +410,8 @@ extern int radeon_driver_open(struct drm_device *dev,
+ struct drm_file *file_priv);
+ extern long radeon_compat_ioctl(struct file *filp, unsigned int cmd,
+ unsigned long arg);
++extern long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd,
++ unsigned long arg);
+
+ extern int radeon_master_create(struct drm_device *dev, struct drm_master *master);
+ extern void radeon_master_destroy(struct drm_device *dev, struct drm_master *master);
+@@ -482,6 +437,22 @@ extern int r600_cp_dispatch_indirect(struct drm_device *dev,
+ struct drm_buf *buf, int start, int end);
+ extern int r600_page_table_init(struct drm_device *dev);
+ extern void r600_page_table_cleanup(struct drm_device *dev, struct drm_ati_pcigart_info *gart_info);
++extern int r600_cs_legacy_ioctl(struct drm_device *dev, void *data, struct drm_file *fpriv);
++extern void r600_cp_dispatch_swap(struct drm_device *dev, struct drm_file *file_priv);
++extern int r600_cp_dispatch_texture(struct drm_device *dev,
++ struct drm_file *file_priv,
++ drm_radeon_texture_t *tex,
++ drm_radeon_tex_image_t *image);
++/* r600_blit.c */
++extern int r600_prepare_blit_copy(struct drm_device *dev, struct drm_file *file_priv);
++extern void r600_done_blit_copy(struct drm_device *dev);
++extern void r600_blit_copy(struct drm_device *dev,
++ uint64_t src_gpu_addr, uint64_t dst_gpu_addr,
++ int size_bytes);
++extern void r600_blit_swap(struct drm_device *dev,
++ uint64_t src_gpu_addr, uint64_t dst_gpu_addr,
++ int sx, int sy, int dx, int dy,
++ int w, int h, int src_pitch, int dst_pitch, int cpp);
+
+ /* Flags for stats.boxes
+ */
+@@ -1067,6 +1038,9 @@ extern u32 radeon_get_scratch(drm_radeon_private_t *dev_priv, int index);
+ # define RADEON_CSQ_PRIBM_INDBM (4 << 28)
+ # define RADEON_CSQ_PRIPIO_INDPIO (15 << 28)
+
++#define R300_CP_RESYNC_ADDR 0x0778
++#define R300_CP_RESYNC_DATA 0x077c
++
+ #define RADEON_AIC_CNTL 0x01d0
+ # define RADEON_PCIGART_TRANSLATE_EN (1 << 0)
+ # define RS400_MSI_REARM (1 << 3)
+@@ -1109,13 +1083,71 @@ extern u32 radeon_get_scratch(drm_radeon_private_t *dev_priv, int index);
+ # define RADEON_CNTL_BITBLT_MULTI 0x00009B00
+ # define RADEON_CNTL_SET_SCISSORS 0xC0001E00
+
+-# define R600_IT_INDIRECT_BUFFER 0x00003200
+-# define R600_IT_ME_INITIALIZE 0x00004400
++# define R600_IT_INDIRECT_BUFFER_END 0x00001700
++# define R600_IT_SET_PREDICATION 0x00002000
++# define R600_IT_REG_RMW 0x00002100
++# define R600_IT_COND_EXEC 0x00002200
++# define R600_IT_PRED_EXEC 0x00002300
++# define R600_IT_START_3D_CMDBUF 0x00002400
++# define R600_IT_DRAW_INDEX_2 0x00002700
++# define R600_IT_CONTEXT_CONTROL 0x00002800
++# define R600_IT_DRAW_INDEX_IMMD_BE 0x00002900
++# define R600_IT_INDEX_TYPE 0x00002A00
++# define R600_IT_DRAW_INDEX 0x00002B00
++# define R600_IT_DRAW_INDEX_AUTO 0x00002D00
++# define R600_IT_DRAW_INDEX_IMMD 0x00002E00
++# define R600_IT_NUM_INSTANCES 0x00002F00
++# define R600_IT_STRMOUT_BUFFER_UPDATE 0x00003400
++# define R600_IT_INDIRECT_BUFFER_MP 0x00003800
++# define R600_IT_MEM_SEMAPHORE 0x00003900
++# define R600_IT_MPEG_INDEX 0x00003A00
++# define R600_IT_WAIT_REG_MEM 0x00003C00
++# define R600_IT_MEM_WRITE 0x00003D00
++# define R600_IT_INDIRECT_BUFFER 0x00003200
++# define R600_IT_CP_INTERRUPT 0x00004000
++# define R600_IT_SURFACE_SYNC 0x00004300
++# define R600_CB0_DEST_BASE_ENA (1 << 6)
++# define R600_TC_ACTION_ENA (1 << 23)
++# define R600_VC_ACTION_ENA (1 << 24)
++# define R600_CB_ACTION_ENA (1 << 25)
++# define R600_DB_ACTION_ENA (1 << 26)
++# define R600_SH_ACTION_ENA (1 << 27)
++# define R600_SMX_ACTION_ENA (1 << 28)
++# define R600_IT_ME_INITIALIZE 0x00004400
+ # define R600_ME_INITIALIZE_DEVICE_ID(x) ((x) << 16)
+-# define R600_IT_EVENT_WRITE 0x00004600
+-# define R600_IT_SET_CONFIG_REG 0x00006800
+-# define R600_SET_CONFIG_REG_OFFSET 0x00008000
+-# define R600_SET_CONFIG_REG_END 0x0000ac00
++# define R600_IT_COND_WRITE 0x00004500
++# define R600_IT_EVENT_WRITE 0x00004600
++# define R600_IT_EVENT_WRITE_EOP 0x00004700
++# define R600_IT_ONE_REG_WRITE 0x00005700
++# define R600_IT_SET_CONFIG_REG 0x00006800
++# define R600_SET_CONFIG_REG_OFFSET 0x00008000
++# define R600_SET_CONFIG_REG_END 0x0000ac00
++# define R600_IT_SET_CONTEXT_REG 0x00006900
++# define R600_SET_CONTEXT_REG_OFFSET 0x00028000
++# define R600_SET_CONTEXT_REG_END 0x00029000
++# define R600_IT_SET_ALU_CONST 0x00006A00
++# define R600_SET_ALU_CONST_OFFSET 0x00030000
++# define R600_SET_ALU_CONST_END 0x00032000
++# define R600_IT_SET_BOOL_CONST 0x00006B00
++# define R600_SET_BOOL_CONST_OFFSET 0x0003e380
++# define R600_SET_BOOL_CONST_END 0x00040000
++# define R600_IT_SET_LOOP_CONST 0x00006C00
++# define R600_SET_LOOP_CONST_OFFSET 0x0003e200
++# define R600_SET_LOOP_CONST_END 0x0003e380
++# define R600_IT_SET_RESOURCE 0x00006D00
++# define R600_SET_RESOURCE_OFFSET 0x00038000
++# define R600_SET_RESOURCE_END 0x0003c000
++# define R600_SQ_TEX_VTX_INVALID_TEXTURE 0x0
++# define R600_SQ_TEX_VTX_INVALID_BUFFER 0x1
++# define R600_SQ_TEX_VTX_VALID_TEXTURE 0x2
++# define R600_SQ_TEX_VTX_VALID_BUFFER 0x3
++# define R600_IT_SET_SAMPLER 0x00006E00
++# define R600_SET_SAMPLER_OFFSET 0x0003c000
++# define R600_SET_SAMPLER_END 0x0003cff0
++# define R600_IT_SET_CTL_CONST 0x00006F00
++# define R600_SET_CTL_CONST_OFFSET 0x0003cff0
++# define R600_SET_CTL_CONST_END 0x0003e200
++# define R600_IT_SURFACE_BASE_UPDATE 0x00007300
+
+ #define RADEON_CP_PACKET_MASK 0xC0000000
+ #define RADEON_CP_PACKET_COUNT_MASK 0x3fff0000
+@@ -1593,6 +1625,52 @@ extern u32 radeon_get_scratch(drm_radeon_private_t *dev_priv, int index);
+ #define R600_CB_COLOR7_BASE 0x2805c
+ #define R600_CB_COLOR7_FRAG 0x280fc
+
++#define R600_CB_COLOR0_SIZE 0x28060
++#define R600_CB_COLOR0_VIEW 0x28080
++#define R600_CB_COLOR0_INFO 0x280a0
++#define R600_CB_COLOR0_TILE 0x280c0
++#define R600_CB_COLOR0_FRAG 0x280e0
++#define R600_CB_COLOR0_MASK 0x28100
++
++#define AVIVO_D1MODE_VLINE_START_END 0x6538
++#define AVIVO_D2MODE_VLINE_START_END 0x6d38
++#define R600_CP_COHER_BASE 0x85f8
++#define R600_DB_DEPTH_BASE 0x2800c
++#define R600_SQ_PGM_START_FS 0x28894
++#define R600_SQ_PGM_START_ES 0x28880
++#define R600_SQ_PGM_START_VS 0x28858
++#define R600_SQ_PGM_RESOURCES_VS 0x28868
++#define R600_SQ_PGM_CF_OFFSET_VS 0x288d0
++#define R600_SQ_PGM_START_GS 0x2886c
++#define R600_SQ_PGM_START_PS 0x28840
++#define R600_SQ_PGM_RESOURCES_PS 0x28850
++#define R600_SQ_PGM_EXPORTS_PS 0x28854
++#define R600_SQ_PGM_CF_OFFSET_PS 0x288cc
++#define R600_VGT_DMA_BASE 0x287e8
++#define R600_VGT_DMA_BASE_HI 0x287e4
++#define R600_VGT_STRMOUT_BASE_OFFSET_0 0x28b10
++#define R600_VGT_STRMOUT_BASE_OFFSET_1 0x28b14
++#define R600_VGT_STRMOUT_BASE_OFFSET_2 0x28b18
++#define R600_VGT_STRMOUT_BASE_OFFSET_3 0x28b1c
++#define R600_VGT_STRMOUT_BASE_OFFSET_HI_0 0x28b44
++#define R600_VGT_STRMOUT_BASE_OFFSET_HI_1 0x28b48
++#define R600_VGT_STRMOUT_BASE_OFFSET_HI_2 0x28b4c
++#define R600_VGT_STRMOUT_BASE_OFFSET_HI_3 0x28b50
++#define R600_VGT_STRMOUT_BUFFER_BASE_0 0x28ad8
++#define R600_VGT_STRMOUT_BUFFER_BASE_1 0x28ae8
++#define R600_VGT_STRMOUT_BUFFER_BASE_2 0x28af8
++#define R600_VGT_STRMOUT_BUFFER_BASE_3 0x28b08
++#define R600_VGT_STRMOUT_BUFFER_OFFSET_0 0x28adc
++#define R600_VGT_STRMOUT_BUFFER_OFFSET_1 0x28aec
++#define R600_VGT_STRMOUT_BUFFER_OFFSET_2 0x28afc
++#define R600_VGT_STRMOUT_BUFFER_OFFSET_3 0x28b0c
++
++#define R600_VGT_PRIMITIVE_TYPE 0x8958
++
++#define R600_PA_SC_SCREEN_SCISSOR_TL 0x28030
++#define R600_PA_SC_GENERIC_SCISSOR_TL 0x28240
++#define R600_PA_SC_WINDOW_SCISSOR_TL 0x28204
++
+ #define R600_TC_CNTL 0x9608
+ # define R600_TC_L2_SIZE(x) ((x) << 5)
+ # define R600_L2_DISABLE_LATE_HIT (1 << 9)
+diff --git a/drivers/gpu/drm/radeon/radeon_encoders.c b/drivers/gpu/drm/radeon/radeon_encoders.c
+index 0a92706..6216467 100644
+--- a/drivers/gpu/drm/radeon/radeon_encoders.c
++++ b/drivers/gpu/drm/radeon/radeon_encoders.c
+@@ -126,6 +126,23 @@ radeon_link_encoder_connector(struct drm_device *dev)
+ }
+ }
+
++void radeon_encoder_set_active_device(struct drm_encoder *encoder)
++{
++ struct drm_device *dev = encoder->dev;
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct drm_connector *connector;
++
++ list_for_each_entry(connector, &dev->mode_config.connector_list, head) {
++ if (connector->encoder == encoder) {
++ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
++ radeon_encoder->active_device = radeon_encoder->devices & radeon_connector->devices;
++ DRM_DEBUG("setting active device to %08x from %08x %08x for encoder %d\n",
++ radeon_encoder->active_device, radeon_encoder->devices,
++ radeon_connector->devices, encoder->encoder_type);
++ }
++ }
++}
++
+ static struct drm_connector *
+ radeon_get_connector_for_encoder(struct drm_encoder *encoder)
+ {
+@@ -224,9 +241,12 @@ atombios_dac_setup(struct drm_encoder *encoder, int action)
+ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
+ DAC_ENCODER_CONTROL_PS_ALLOCATION args;
+ int index = 0, num = 0;
+- /* fixme - fill in enc_priv for atom dac */
++ struct radeon_encoder_atom_dac *dac_info = radeon_encoder->enc_priv;
+ enum radeon_tv_std tv_std = TV_STD_NTSC;
+
++ if (dac_info->tv_std)
++ tv_std = dac_info->tv_std;
++
+ memset(&args, 0, sizeof(args));
+
+ switch (radeon_encoder->encoder_id) {
+@@ -244,9 +264,9 @@ atombios_dac_setup(struct drm_encoder *encoder, int action)
+
+ args.ucAction = action;
+
+- if (radeon_encoder->devices & (ATOM_DEVICE_CRT_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_CRT_SUPPORT))
+ args.ucDacStandard = ATOM_DAC1_PS2;
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
+ args.ucDacStandard = ATOM_DAC1_CV;
+ else {
+ switch (tv_std) {
+@@ -279,16 +299,19 @@ atombios_tv_setup(struct drm_encoder *encoder, int action)
+ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
+ TV_ENCODER_CONTROL_PS_ALLOCATION args;
+ int index = 0;
+- /* fixme - fill in enc_priv for atom dac */
++ struct radeon_encoder_atom_dac *dac_info = radeon_encoder->enc_priv;
+ enum radeon_tv_std tv_std = TV_STD_NTSC;
+
++ if (dac_info->tv_std)
++ tv_std = dac_info->tv_std;
++
+ memset(&args, 0, sizeof(args));
+
+ index = GetIndexIntoMasterTable(COMMAND, TVEncoderControl);
+
+ args.sTVEncoder.ucAction = action;
+
+- if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
+ args.sTVEncoder.ucTvStandard = ATOM_TV_CV;
+ else {
+ switch (tv_std) {
+@@ -520,6 +543,7 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
+
+ switch (connector->connector_type) {
+ case DRM_MODE_CONNECTOR_DVII:
++ case DRM_MODE_CONNECTOR_HDMIB: /* HDMI-B is basically DL-DVI; analog works fine */
+ if (drm_detect_hdmi_monitor((struct edid *)connector->edid_blob_ptr))
+ return ATOM_ENCODER_MODE_HDMI;
+ else if (radeon_connector->use_digital)
+@@ -529,7 +553,6 @@ atombios_get_encoder_mode(struct drm_encoder *encoder)
+ break;
+ case DRM_MODE_CONNECTOR_DVID:
+ case DRM_MODE_CONNECTOR_HDMIA:
+- case DRM_MODE_CONNECTOR_HDMIB:
+ default:
+ if (drm_detect_hdmi_monitor((struct edid *)connector->edid_blob_ptr))
+ return ATOM_ENCODER_MODE_HDMI;
+@@ -825,10 +848,10 @@ atombios_yuv_setup(struct drm_encoder *encoder, bool enable)
+
+ /* XXX: fix up scratch reg handling */
+ temp = RREG32(reg);
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
+ WREG32(reg, (ATOM_S3_TV1_ACTIVE |
+ (radeon_crtc->crtc_id << 18)));
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
+ WREG32(reg, (ATOM_S3_CV_ACTIVE | (radeon_crtc->crtc_id << 24)));
+ else
+ WREG32(reg, 0);
+@@ -851,9 +874,19 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
+ DISPLAY_DEVICE_OUTPUT_CONTROL_PS_ALLOCATION args;
+ int index = 0;
+ bool is_dig = false;
++ int devices;
+
+ memset(&args, 0, sizeof(args));
+
++ /* on DPMS off we have no idea if active device is meaningful */
++ if (mode != DRM_MODE_DPMS_ON && !radeon_encoder->active_device)
++ devices = radeon_encoder->devices;
++ else
++ devices = radeon_encoder->active_device;
++
++ DRM_DEBUG("encoder dpms %d to mode %d, devices %08x, active_devices %08x\n",
++ radeon_encoder->encoder_id, mode, radeon_encoder->devices,
++ radeon_encoder->active_device);
+ switch (radeon_encoder->encoder_id) {
+ case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_TMDS1:
+@@ -881,18 +914,18 @@ radeon_atom_encoder_dpms(struct drm_encoder *encoder, int mode)
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_DAC1:
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT))
++ if (devices & (ATOM_DEVICE_TV_SUPPORT))
+ index = GetIndexIntoMasterTable(COMMAND, TV1OutputControl);
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (devices & (ATOM_DEVICE_CV_SUPPORT))
+ index = GetIndexIntoMasterTable(COMMAND, CV1OutputControl);
+ else
+ index = GetIndexIntoMasterTable(COMMAND, DAC1OutputControl);
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_DAC2:
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT))
++ if (devices & (ATOM_DEVICE_TV_SUPPORT))
+ index = GetIndexIntoMasterTable(COMMAND, TV1OutputControl);
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (devices & (ATOM_DEVICE_CV_SUPPORT))
+ index = GetIndexIntoMasterTable(COMMAND, CV1OutputControl);
+ else
+ index = GetIndexIntoMasterTable(COMMAND, DAC2OutputControl);
+@@ -979,18 +1012,18 @@ atombios_set_encoder_crtc_source(struct drm_encoder *encoder)
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_DAC1:
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
+ args.v1.ucDevice = ATOM_DEVICE_TV1_INDEX;
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
+ args.v1.ucDevice = ATOM_DEVICE_CV_INDEX;
+ else
+ args.v1.ucDevice = ATOM_DEVICE_CRT1_INDEX;
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_DAC2:
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
+ args.v1.ucDevice = ATOM_DEVICE_TV1_INDEX;
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
+ args.v1.ucDevice = ATOM_DEVICE_CV_INDEX;
+ else
+ args.v1.ucDevice = ATOM_DEVICE_CRT2_INDEX;
+@@ -1019,17 +1052,17 @@ atombios_set_encoder_crtc_source(struct drm_encoder *encoder)
+ args.v2.ucEncoderID = ASIC_INT_DIG2_ENCODER_ID;
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
+ args.v2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
+ args.v2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
+ else
+ args.v2.ucEncoderID = ASIC_INT_DAC1_ENCODER_ID;
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT))
+ args.v2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
+- else if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT))
++ else if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT))
+ args.v2.ucEncoderID = ASIC_INT_TV_ENCODER_ID;
+ else
+ args.v2.ucEncoderID = ASIC_INT_DAC2_ENCODER_ID;
+@@ -1097,7 +1130,7 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
+ atombios_set_encoder_crtc_source(encoder);
+
+ if (ASIC_IS_AVIVO(rdev)) {
+- if (radeon_encoder->devices & (ATOM_DEVICE_CV_SUPPORT | ATOM_DEVICE_TV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_CV_SUPPORT | ATOM_DEVICE_TV_SUPPORT))
+ atombios_yuv_setup(encoder, true);
+ else
+ atombios_yuv_setup(encoder, false);
+@@ -1135,7 +1168,7 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
+ case ENCODER_OBJECT_ID_INTERNAL_DAC2:
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
+ atombios_dac_setup(encoder, ATOM_ENABLE);
+- if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))
++ if (radeon_encoder->active_device & (ATOM_DEVICE_TV_SUPPORT | ATOM_DEVICE_CV_SUPPORT))
+ atombios_tv_setup(encoder, ATOM_ENABLE);
+ break;
+ }
+@@ -1143,11 +1176,12 @@ radeon_atom_encoder_mode_set(struct drm_encoder *encoder,
+ }
+
+ static bool
+-atombios_dac_load_detect(struct drm_encoder *encoder)
++atombios_dac_load_detect(struct drm_encoder *encoder, struct drm_connector *connector)
+ {
+ struct drm_device *dev = encoder->dev;
+ struct radeon_device *rdev = dev->dev_private;
+ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+
+ if (radeon_encoder->devices & (ATOM_DEVICE_TV_SUPPORT |
+ ATOM_DEVICE_CV_SUPPORT |
+@@ -1168,15 +1202,15 @@ atombios_dac_load_detect(struct drm_encoder *encoder)
+ else
+ args.sDacload.ucDacType = ATOM_DAC_B;
+
+- if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT)
++ if (radeon_connector->devices & ATOM_DEVICE_CRT1_SUPPORT)
+ args.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_CRT1_SUPPORT);
+- else if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT)
++ else if (radeon_connector->devices & ATOM_DEVICE_CRT2_SUPPORT)
+ args.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_CRT2_SUPPORT);
+- else if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) {
++ else if (radeon_connector->devices & ATOM_DEVICE_CV_SUPPORT) {
+ args.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_CV_SUPPORT);
+ if (crev >= 3)
+ args.sDacload.ucMisc = DAC_LOAD_MISC_YPrPb;
+- } else if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) {
++ } else if (radeon_connector->devices & ATOM_DEVICE_TV1_SUPPORT) {
+ args.sDacload.usDeviceID = cpu_to_le16(ATOM_DEVICE_TV1_SUPPORT);
+ if (crev >= 3)
+ args.sDacload.ucMisc = DAC_LOAD_MISC_YPrPb;
+@@ -1195,9 +1229,10 @@ radeon_atom_dac_detect(struct drm_encoder *encoder, struct drm_connector *connec
+ struct drm_device *dev = encoder->dev;
+ struct radeon_device *rdev = dev->dev_private;
+ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct radeon_connector *radeon_connector = to_radeon_connector(connector);
+ uint32_t bios_0_scratch;
+
+- if (!atombios_dac_load_detect(encoder)) {
++ if (!atombios_dac_load_detect(encoder, connector)) {
+ DRM_DEBUG("detect returned false \n");
+ return connector_status_unknown;
+ }
+@@ -1207,17 +1242,20 @@ radeon_atom_dac_detect(struct drm_encoder *encoder, struct drm_connector *connec
+ else
+ bios_0_scratch = RREG32(RADEON_BIOS_0_SCRATCH);
+
+- DRM_DEBUG("Bios 0 scratch %x\n", bios_0_scratch);
+- if (radeon_encoder->devices & ATOM_DEVICE_CRT1_SUPPORT) {
++ DRM_DEBUG("Bios 0 scratch %x %08x\n", bios_0_scratch, radeon_encoder->devices);
++ if (radeon_connector->devices & ATOM_DEVICE_CRT1_SUPPORT) {
+ if (bios_0_scratch & ATOM_S0_CRT1_MASK)
+ return connector_status_connected;
+- } else if (radeon_encoder->devices & ATOM_DEVICE_CRT2_SUPPORT) {
++ }
++ if (radeon_connector->devices & ATOM_DEVICE_CRT2_SUPPORT) {
+ if (bios_0_scratch & ATOM_S0_CRT2_MASK)
+ return connector_status_connected;
+- } else if (radeon_encoder->devices & ATOM_DEVICE_CV_SUPPORT) {
++ }
++ if (radeon_connector->devices & ATOM_DEVICE_CV_SUPPORT) {
+ if (bios_0_scratch & (ATOM_S0_CV_MASK|ATOM_S0_CV_MASK_A))
+ return connector_status_connected;
+- } else if (radeon_encoder->devices & ATOM_DEVICE_TV1_SUPPORT) {
++ }
++ if (radeon_connector->devices & ATOM_DEVICE_TV1_SUPPORT) {
+ if (bios_0_scratch & (ATOM_S0_TV1_COMPOSITE | ATOM_S0_TV1_COMPOSITE_A))
+ return connector_status_connected; /* CTV */
+ else if (bios_0_scratch & (ATOM_S0_TV1_SVIDEO | ATOM_S0_TV1_SVIDEO_A))
+@@ -1230,6 +1268,8 @@ static void radeon_atom_encoder_prepare(struct drm_encoder *encoder)
+ {
+ radeon_atom_output_lock(encoder, true);
+ radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
++
++ radeon_encoder_set_active_device(encoder);
+ }
+
+ static void radeon_atom_encoder_commit(struct drm_encoder *encoder)
+@@ -1238,12 +1278,20 @@ static void radeon_atom_encoder_commit(struct drm_encoder *encoder)
+ radeon_atom_output_lock(encoder, false);
+ }
+
++static void radeon_atom_encoder_disable(struct drm_encoder *encoder)
++{
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ radeon_atom_encoder_dpms(encoder, DRM_MODE_DPMS_OFF);
++ radeon_encoder->active_device = 0;
++}
++
+ static const struct drm_encoder_helper_funcs radeon_atom_dig_helper_funcs = {
+ .dpms = radeon_atom_encoder_dpms,
+ .mode_fixup = radeon_atom_mode_fixup,
+ .prepare = radeon_atom_encoder_prepare,
+ .mode_set = radeon_atom_encoder_mode_set,
+ .commit = radeon_atom_encoder_commit,
++ .disable = radeon_atom_encoder_disable,
+ /* no detect for TMDS/LVDS yet */
+ };
+
+@@ -1268,6 +1316,18 @@ static const struct drm_encoder_funcs radeon_atom_enc_funcs = {
+ .destroy = radeon_enc_destroy,
+ };
+
++struct radeon_encoder_atom_dac *
++radeon_atombios_set_dac_info(struct radeon_encoder *radeon_encoder)
++{
++ struct radeon_encoder_atom_dac *dac = kzalloc(sizeof(struct radeon_encoder_atom_dac), GFP_KERNEL);
++
++ if (!dac)
++ return NULL;
++
++ dac->tv_std = TV_STD_NTSC;
++ return dac;
++}
++
+ struct radeon_encoder_atom_dig *
+ radeon_atombios_set_dig_info(struct radeon_encoder *radeon_encoder)
+ {
+@@ -1336,6 +1396,7 @@ radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t su
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC1:
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_DAC2:
+ drm_encoder_init(dev, encoder, &radeon_atom_enc_funcs, DRM_MODE_ENCODER_TVDAC);
++ radeon_encoder->enc_priv = radeon_atombios_set_dac_info(radeon_encoder);
+ drm_encoder_helper_add(encoder, &radeon_atom_dac_helper_funcs);
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_DVO1:
+@@ -1345,8 +1406,14 @@ radeon_add_atom_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t su
+ case ENCODER_OBJECT_ID_INTERNAL_KLDSCP_LVTMA:
+ case ENCODER_OBJECT_ID_INTERNAL_UNIPHY1:
+ case ENCODER_OBJECT_ID_INTERNAL_UNIPHY2:
+- drm_encoder_init(dev, encoder, &radeon_atom_enc_funcs, DRM_MODE_ENCODER_TMDS);
+- radeon_encoder->enc_priv = radeon_atombios_set_dig_info(radeon_encoder);
++ if (radeon_encoder->devices & (ATOM_DEVICE_LCD_SUPPORT)) {
++ radeon_encoder->rmx_type = RMX_FULL;
++ drm_encoder_init(dev, encoder, &radeon_atom_enc_funcs, DRM_MODE_ENCODER_LVDS);
++ radeon_encoder->enc_priv = radeon_atombios_get_lvds_info(radeon_encoder);
++ } else {
++ drm_encoder_init(dev, encoder, &radeon_atom_enc_funcs, DRM_MODE_ENCODER_TMDS);
++ radeon_encoder->enc_priv = radeon_atombios_set_dig_info(radeon_encoder);
++ }
+ drm_encoder_helper_add(encoder, &radeon_atom_dig_helper_funcs);
+ break;
+ }
+diff --git a/drivers/gpu/drm/radeon/radeon_family.h b/drivers/gpu/drm/radeon/radeon_family.h
+new file mode 100644
+index 0000000..797972e
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/radeon_family.h
+@@ -0,0 +1,97 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++
++/* this file defines the CHIP_ and family flags used in the pciids,
++ * its is common between kms and non-kms because duplicating it and
++ * changing one place is fail.
++ */
++#ifndef RADEON_FAMILY_H
++#define RADEON_FAMILY_H
++/*
++ * Radeon chip families
++ */
++enum radeon_family {
++ CHIP_R100,
++ CHIP_RV100,
++ CHIP_RS100,
++ CHIP_RV200,
++ CHIP_RS200,
++ CHIP_R200,
++ CHIP_RV250,
++ CHIP_RS300,
++ CHIP_RV280,
++ CHIP_R300,
++ CHIP_R350,
++ CHIP_RV350,
++ CHIP_RV380,
++ CHIP_R420,
++ CHIP_R423,
++ CHIP_RV410,
++ CHIP_RS400,
++ CHIP_RS480,
++ CHIP_RS600,
++ CHIP_RS690,
++ CHIP_RS740,
++ CHIP_RV515,
++ CHIP_R520,
++ CHIP_RV530,
++ CHIP_RV560,
++ CHIP_RV570,
++ CHIP_R580,
++ CHIP_R600,
++ CHIP_RV610,
++ CHIP_RV630,
++ CHIP_RV670,
++ CHIP_RV620,
++ CHIP_RV635,
++ CHIP_RS780,
++ CHIP_RS880,
++ CHIP_RV770,
++ CHIP_RV730,
++ CHIP_RV710,
++ CHIP_RV740,
++ CHIP_LAST,
++};
++
++/*
++ * Chip flags
++ */
++enum radeon_chip_flags {
++ RADEON_FAMILY_MASK = 0x0000ffffUL,
++ RADEON_FLAGS_MASK = 0xffff0000UL,
++ RADEON_IS_MOBILITY = 0x00010000UL,
++ RADEON_IS_IGP = 0x00020000UL,
++ RADEON_SINGLE_CRTC = 0x00040000UL,
++ RADEON_IS_AGP = 0x00080000UL,
++ RADEON_HAS_HIERZ = 0x00100000UL,
++ RADEON_IS_PCIE = 0x00200000UL,
++ RADEON_NEW_MEMMAP = 0x00400000UL,
++ RADEON_IS_PCI = 0x00800000UL,
++ RADEON_IS_IGPGART = 0x01000000UL,
++};
++#endif
+diff --git a/drivers/gpu/drm/radeon/radeon_fb.c b/drivers/gpu/drm/radeon/radeon_fb.c
+index ec383ed..1ba704e 100644
+--- a/drivers/gpu/drm/radeon/radeon_fb.c
++++ b/drivers/gpu/drm/radeon/radeon_fb.c
+@@ -28,15 +28,7 @@
+ */
+
+ #include <linux/module.h>
+-#include <linux/kernel.h>
+-#include <linux/errno.h>
+-#include <linux/string.h>
+-#include <linux/mm.h>
+-#include <linux/tty.h>
+-#include <linux/slab.h>
+-#include <linux/delay.h>
+ #include <linux/fb.h>
+-#include <linux/init.h>
+
+ #include "drmP.h"
+ #include "drm.h"
+@@ -45,375 +37,24 @@
+ #include "radeon_drm.h"
+ #include "radeon.h"
+
++#include "drm_fb_helper.h"
++
+ struct radeon_fb_device {
+- struct radeon_device *rdev;
+- struct drm_display_mode *mode;
++ struct drm_fb_helper helper;
+ struct radeon_framebuffer *rfb;
+- int crtc_count;
+- /* crtc currently bound to this */
+- uint32_t crtc_ids[2];
++ struct radeon_device *rdev;
+ };
+
+-static int radeonfb_setcolreg(unsigned regno,
+- unsigned red,
+- unsigned green,
+- unsigned blue,
+- unsigned transp,
+- struct fb_info *info)
+-{
+- struct radeon_fb_device *rfbdev = info->par;
+- struct drm_device *dev = rfbdev->rdev->ddev;
+- struct drm_crtc *crtc;
+- int i;
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
+- struct drm_mode_set *modeset = &radeon_crtc->mode_set;
+- struct drm_framebuffer *fb = modeset->fb;
+-
+- for (i = 0; i < rfbdev->crtc_count; i++) {
+- if (crtc->base.id == rfbdev->crtc_ids[i]) {
+- break;
+- }
+- }
+- if (i == rfbdev->crtc_count) {
+- continue;
+- }
+- if (regno > 255) {
+- return 1;
+- }
+- if (fb->depth == 8) {
+- radeon_crtc_fb_gamma_set(crtc, red, green, blue, regno);
+- return 0;
+- }
+-
+- if (regno < 16) {
+- switch (fb->depth) {
+- case 15:
+- fb->pseudo_palette[regno] = ((red & 0xf800) >> 1) |
+- ((green & 0xf800) >> 6) |
+- ((blue & 0xf800) >> 11);
+- break;
+- case 16:
+- fb->pseudo_palette[regno] = (red & 0xf800) |
+- ((green & 0xfc00) >> 5) |
+- ((blue & 0xf800) >> 11);
+- break;
+- case 24:
+- case 32:
+- fb->pseudo_palette[regno] =
+- (((red >> 8) & 0xff) << info->var.red.offset) |
+- (((green >> 8) & 0xff) << info->var.green.offset) |
+- (((blue >> 8) & 0xff) << info->var.blue.offset);
+- break;
+- }
+- }
+- }
+- return 0;
+-}
+-
+-static int radeonfb_check_var(struct fb_var_screeninfo *var,
+- struct fb_info *info)
+-{
+- struct radeon_fb_device *rfbdev = info->par;
+- struct radeon_framebuffer *rfb = rfbdev->rfb;
+- struct drm_framebuffer *fb = &rfb->base;
+- int depth;
+-
+- if (var->pixclock == -1 || !var->pixclock) {
+- return -EINVAL;
+- }
+- /* Need to resize the fb object !!! */
+- if (var->xres > fb->width || var->yres > fb->height) {
+- DRM_ERROR("Requested width/height is greater than current fb "
+- "object %dx%d > %dx%d\n", var->xres, var->yres,
+- fb->width, fb->height);
+- DRM_ERROR("Need resizing code.\n");
+- return -EINVAL;
+- }
+-
+- switch (var->bits_per_pixel) {
+- case 16:
+- depth = (var->green.length == 6) ? 16 : 15;
+- break;
+- case 32:
+- depth = (var->transp.length > 0) ? 32 : 24;
+- break;
+- default:
+- depth = var->bits_per_pixel;
+- break;
+- }
+-
+- switch (depth) {
+- case 8:
+- var->red.offset = 0;
+- var->green.offset = 0;
+- var->blue.offset = 0;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 0;
+- var->transp.offset = 0;
+- break;
+-#ifdef __LITTLE_ENDIAN
+- case 15:
+- var->red.offset = 10;
+- var->green.offset = 5;
+- var->blue.offset = 0;
+- var->red.length = 5;
+- var->green.length = 5;
+- var->blue.length = 5;
+- var->transp.length = 1;
+- var->transp.offset = 15;
+- break;
+- case 16:
+- var->red.offset = 11;
+- var->green.offset = 5;
+- var->blue.offset = 0;
+- var->red.length = 5;
+- var->green.length = 6;
+- var->blue.length = 5;
+- var->transp.length = 0;
+- var->transp.offset = 0;
+- break;
+- case 24:
+- var->red.offset = 16;
+- var->green.offset = 8;
+- var->blue.offset = 0;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 0;
+- var->transp.offset = 0;
+- break;
+- case 32:
+- var->red.offset = 16;
+- var->green.offset = 8;
+- var->blue.offset = 0;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 8;
+- var->transp.offset = 24;
+- break;
+-#else
+- case 24:
+- var->red.offset = 8;
+- var->green.offset = 16;
+- var->blue.offset = 24;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 0;
+- var->transp.offset = 0;
+- break;
+- case 32:
+- var->red.offset = 8;
+- var->green.offset = 16;
+- var->blue.offset = 24;
+- var->red.length = 8;
+- var->green.length = 8;
+- var->blue.length = 8;
+- var->transp.length = 8;
+- var->transp.offset = 0;
+- break;
+-#endif
+- default:
+- return -EINVAL;
+- }
+- return 0;
+-}
+-
+-/* this will let fbcon do the mode init */
+-static int radeonfb_set_par(struct fb_info *info)
+-{
+- struct radeon_fb_device *rfbdev = info->par;
+- struct drm_device *dev = rfbdev->rdev->ddev;
+- struct fb_var_screeninfo *var = &info->var;
+- struct drm_crtc *crtc;
+- int ret;
+- int i;
+-
+- if (var->pixclock != -1) {
+- DRM_ERROR("PIXEL CLCOK SET\n");
+- return -EINVAL;
+- }
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
+-
+- for (i = 0; i < rfbdev->crtc_count; i++) {
+- if (crtc->base.id == rfbdev->crtc_ids[i]) {
+- break;
+- }
+- }
+- if (i == rfbdev->crtc_count) {
+- continue;
+- }
+- if (crtc->fb == radeon_crtc->mode_set.fb) {
+- mutex_lock(&dev->mode_config.mutex);
+- ret = crtc->funcs->set_config(&radeon_crtc->mode_set);
+- mutex_unlock(&dev->mode_config.mutex);
+- if (ret) {
+- return ret;
+- }
+- }
+- }
+- return 0;
+-}
+-
+-static int radeonfb_pan_display(struct fb_var_screeninfo *var,
+- struct fb_info *info)
+-{
+- struct radeon_fb_device *rfbdev = info->par;
+- struct drm_device *dev = rfbdev->rdev->ddev;
+- struct drm_mode_set *modeset;
+- struct drm_crtc *crtc;
+- struct radeon_crtc *radeon_crtc;
+- int ret = 0;
+- int i;
+-
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- for (i = 0; i < rfbdev->crtc_count; i++) {
+- if (crtc->base.id == rfbdev->crtc_ids[i]) {
+- break;
+- }
+- }
+-
+- if (i == rfbdev->crtc_count) {
+- continue;
+- }
+-
+- radeon_crtc = to_radeon_crtc(crtc);
+- modeset = &radeon_crtc->mode_set;
+-
+- modeset->x = var->xoffset;
+- modeset->y = var->yoffset;
+-
+- if (modeset->num_connectors) {
+- mutex_lock(&dev->mode_config.mutex);
+- ret = crtc->funcs->set_config(modeset);
+- mutex_unlock(&dev->mode_config.mutex);
+- if (!ret) {
+- info->var.xoffset = var->xoffset;
+- info->var.yoffset = var->yoffset;
+- }
+- }
+- }
+- return ret;
+-}
+-
+-static void radeonfb_on(struct fb_info *info)
+-{
+- struct radeon_fb_device *rfbdev = info->par;
+- struct drm_device *dev = rfbdev->rdev->ddev;
+- struct drm_crtc *crtc;
+- struct drm_encoder *encoder;
+- int i;
+-
+- /*
+- * For each CRTC in this fb, find all associated encoders
+- * and turn them off, then turn off the CRTC.
+- */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+-
+- for (i = 0; i < rfbdev->crtc_count; i++) {
+- if (crtc->base.id == rfbdev->crtc_ids[i]) {
+- break;
+- }
+- }
+-
+- mutex_lock(&dev->mode_config.mutex);
+- crtc_funcs->dpms(crtc, DRM_MODE_DPMS_ON);
+- mutex_unlock(&dev->mode_config.mutex);
+-
+- /* Found a CRTC on this fb, now find encoders */
+- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+- if (encoder->crtc == crtc) {
+- struct drm_encoder_helper_funcs *encoder_funcs;
+-
+- encoder_funcs = encoder->helper_private;
+- mutex_lock(&dev->mode_config.mutex);
+- encoder_funcs->dpms(encoder, DRM_MODE_DPMS_ON);
+- mutex_unlock(&dev->mode_config.mutex);
+- }
+- }
+- }
+-}
+-
+-static void radeonfb_off(struct fb_info *info, int dpms_mode)
+-{
+- struct radeon_fb_device *rfbdev = info->par;
+- struct drm_device *dev = rfbdev->rdev->ddev;
+- struct drm_crtc *crtc;
+- struct drm_encoder *encoder;
+- int i;
+-
+- /*
+- * For each CRTC in this fb, find all associated encoders
+- * and turn them off, then turn off the CRTC.
+- */
+- list_for_each_entry(crtc, &dev->mode_config.crtc_list, head) {
+- struct drm_crtc_helper_funcs *crtc_funcs = crtc->helper_private;
+-
+- for (i = 0; i < rfbdev->crtc_count; i++) {
+- if (crtc->base.id == rfbdev->crtc_ids[i]) {
+- break;
+- }
+- }
+-
+- /* Found a CRTC on this fb, now find encoders */
+- list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+- if (encoder->crtc == crtc) {
+- struct drm_encoder_helper_funcs *encoder_funcs;
+-
+- encoder_funcs = encoder->helper_private;
+- mutex_lock(&dev->mode_config.mutex);
+- encoder_funcs->dpms(encoder, dpms_mode);
+- mutex_unlock(&dev->mode_config.mutex);
+- }
+- }
+- if (dpms_mode == DRM_MODE_DPMS_OFF) {
+- mutex_lock(&dev->mode_config.mutex);
+- crtc_funcs->dpms(crtc, dpms_mode);
+- mutex_unlock(&dev->mode_config.mutex);
+- }
+- }
+-}
+-
+-int radeonfb_blank(int blank, struct fb_info *info)
+-{
+- switch (blank) {
+- case FB_BLANK_UNBLANK:
+- radeonfb_on(info);
+- break;
+- case FB_BLANK_NORMAL:
+- radeonfb_off(info, DRM_MODE_DPMS_STANDBY);
+- break;
+- case FB_BLANK_HSYNC_SUSPEND:
+- radeonfb_off(info, DRM_MODE_DPMS_STANDBY);
+- break;
+- case FB_BLANK_VSYNC_SUSPEND:
+- radeonfb_off(info, DRM_MODE_DPMS_SUSPEND);
+- break;
+- case FB_BLANK_POWERDOWN:
+- radeonfb_off(info, DRM_MODE_DPMS_OFF);
+- break;
+- }
+- return 0;
+-}
+-
+ static struct fb_ops radeonfb_ops = {
+ .owner = THIS_MODULE,
+- .fb_check_var = radeonfb_check_var,
+- .fb_set_par = radeonfb_set_par,
+- .fb_setcolreg = radeonfb_setcolreg,
++ .fb_check_var = drm_fb_helper_check_var,
++ .fb_set_par = drm_fb_helper_set_par,
++ .fb_setcolreg = drm_fb_helper_setcolreg,
+ .fb_fillrect = cfb_fillrect,
+ .fb_copyarea = cfb_copyarea,
+ .fb_imageblit = cfb_imageblit,
+- .fb_pan_display = radeonfb_pan_display,
+- .fb_blank = radeonfb_blank,
++ .fb_pan_display = drm_fb_helper_pan_display,
++ .fb_blank = drm_fb_helper_blank,
+ };
+
+ /**
+@@ -456,21 +97,6 @@ int radeonfb_resize(struct drm_device *dev, struct drm_crtc *crtc)
+ }
+ EXPORT_SYMBOL(radeonfb_resize);
+
+-static struct drm_mode_set panic_mode;
+-
+-int radeonfb_panic(struct notifier_block *n, unsigned long ununsed,
+- void *panic_str)
+-{
+- DRM_ERROR("panic occurred, switching back to text console\n");
+- drm_crtc_helper_set_config(&panic_mode);
+- return 0;
+-}
+-EXPORT_SYMBOL(radeonfb_panic);
+-
+-static struct notifier_block paniced = {
+- .notifier_call = radeonfb_panic,
+-};
+-
+ static int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bool tiled)
+ {
+ int aligned = width;
+@@ -495,11 +121,17 @@ static int radeon_align_pitch(struct radeon_device *rdev, int width, int bpp, bo
+ return aligned;
+ }
+
+-int radeonfb_create(struct radeon_device *rdev,
++static struct drm_fb_helper_funcs radeon_fb_helper_funcs = {
++ .gamma_set = radeon_crtc_fb_gamma_set,
++};
++
++int radeonfb_create(struct drm_device *dev,
+ uint32_t fb_width, uint32_t fb_height,
+ uint32_t surface_width, uint32_t surface_height,
+- struct radeon_framebuffer **rfb_p)
++ uint32_t surface_depth, uint32_t surface_bpp,
++ struct drm_framebuffer **fb_p)
+ {
++ struct radeon_device *rdev = dev->dev_private;
+ struct fb_info *info;
+ struct radeon_fb_device *rfbdev;
+ struct drm_framebuffer *fb = NULL;
+@@ -513,13 +145,14 @@ int radeonfb_create(struct radeon_device *rdev,
+ void *fbptr = NULL;
+ unsigned long tmp;
+ bool fb_tiled = false; /* useful for testing */
++ u32 tiling_flags = 0;
+
+ mode_cmd.width = surface_width;
+ mode_cmd.height = surface_height;
+- mode_cmd.bpp = 32;
++ mode_cmd.bpp = surface_bpp;
+ /* need to align pitch with crtc limits */
+ mode_cmd.pitch = radeon_align_pitch(rdev, mode_cmd.width, mode_cmd.bpp, fb_tiled) * ((mode_cmd.bpp + 1) / 8);
+- mode_cmd.depth = 24;
++ mode_cmd.depth = surface_depth;
+
+ size = mode_cmd.pitch * mode_cmd.height;
+ aligned_size = ALIGN(size, PAGE_SIZE);
+@@ -537,7 +170,22 @@ int radeonfb_create(struct radeon_device *rdev,
+ robj = gobj->driver_private;
+
+ if (fb_tiled)
+- radeon_object_set_tiling_flags(robj, RADEON_TILING_MACRO|RADEON_TILING_SURFACE, mode_cmd.pitch);
++ tiling_flags = RADEON_TILING_MACRO;
++
++#ifdef __BIG_ENDIAN
++ switch (mode_cmd.bpp) {
++ case 32:
++ tiling_flags |= RADEON_TILING_SWAP_32BIT;
++ break;
++ case 16:
++ tiling_flags |= RADEON_TILING_SWAP_16BIT;
++ default:
++ break;
++ }
++#endif
++
++ if (tiling_flags)
++ radeon_object_set_tiling_flags(robj, tiling_flags | RADEON_TILING_SURFACE, mode_cmd.pitch);
+ mutex_lock(&rdev->ddev->struct_mutex);
+ fb = radeon_framebuffer_create(rdev->ddev, &mode_cmd, gobj);
+ if (fb == NULL) {
+@@ -554,8 +202,8 @@ int radeonfb_create(struct radeon_device *rdev,
+
+ list_add(&fb->filp_head, &rdev->ddev->mode_config.fb_kernel_list);
+
++ *fb_p = fb;
+ rfb = to_radeon_framebuffer(fb);
+- *rfb_p = rfb;
+ rdev->fbdev_rfb = rfb;
+ rdev->fbdev_robj = robj;
+
+@@ -564,7 +212,15 @@ int radeonfb_create(struct radeon_device *rdev,
+ ret = -ENOMEM;
+ goto out_unref;
+ }
++
++ rdev->fbdev_info = info;
+ rfbdev = info->par;
++ rfbdev->helper.funcs = &radeon_fb_helper_funcs;
++ rfbdev->helper.dev = dev;
++ ret = drm_fb_helper_init_crtc_count(&rfbdev->helper, 2,
++ RADEONFB_CONN_LIMIT);
++ if (ret)
++ goto out_unref;
+
+ if (fb_tiled)
+ radeon_object_check_tiling(robj, 0, 0);
+@@ -577,33 +233,19 @@ int radeonfb_create(struct radeon_device *rdev,
+ memset_io(fbptr, 0, aligned_size);
+
+ strcpy(info->fix.id, "radeondrmfb");
+- info->fix.type = FB_TYPE_PACKED_PIXELS;
+- info->fix.visual = FB_VISUAL_TRUECOLOR;
+- info->fix.type_aux = 0;
+- info->fix.xpanstep = 1; /* doing it in hw */
+- info->fix.ypanstep = 1; /* doing it in hw */
+- info->fix.ywrapstep = 0;
+- info->fix.accel = FB_ACCEL_NONE;
+- info->fix.type_aux = 0;
++
++ drm_fb_helper_fill_fix(info, fb->pitch);
++
+ info->flags = FBINFO_DEFAULT;
+ info->fbops = &radeonfb_ops;
+- info->fix.line_length = fb->pitch;
++
+ tmp = fb_gpuaddr - rdev->mc.vram_location;
+ info->fix.smem_start = rdev->mc.aper_base + tmp;
+ info->fix.smem_len = size;
+ info->screen_base = fbptr;
+ info->screen_size = size;
+- info->pseudo_palette = fb->pseudo_palette;
+- info->var.xres_virtual = fb->width;
+- info->var.yres_virtual = fb->height;
+- info->var.bits_per_pixel = fb->bits_per_pixel;
+- info->var.xoffset = 0;
+- info->var.yoffset = 0;
+- info->var.activate = FB_ACTIVATE_NOW;
+- info->var.height = -1;
+- info->var.width = -1;
+- info->var.xres = fb_width;
+- info->var.yres = fb_height;
++
++ drm_fb_helper_fill_var(info, fb, fb_width, fb_height);
+
+ /* setup aperture base/size for vesafb takeover */
+ info->aperture_base = rdev->ddev->mode_config.fb_base;
+@@ -626,83 +268,6 @@ int radeonfb_create(struct radeon_device *rdev,
+ DRM_INFO("fb depth is %d\n", fb->depth);
+ DRM_INFO(" pitch is %d\n", fb->pitch);
+
+- switch (fb->depth) {
+- case 8:
+- info->var.red.offset = 0;
+- info->var.green.offset = 0;
+- info->var.blue.offset = 0;
+- info->var.red.length = 8; /* 8bit DAC */
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 0;
+- info->var.transp.length = 0;
+- break;
+-#ifdef __LITTLE_ENDIAN
+- case 15:
+- info->var.red.offset = 10;
+- info->var.green.offset = 5;
+- info->var.blue.offset = 0;
+- info->var.red.length = 5;
+- info->var.green.length = 5;
+- info->var.blue.length = 5;
+- info->var.transp.offset = 15;
+- info->var.transp.length = 1;
+- break;
+- case 16:
+- info->var.red.offset = 11;
+- info->var.green.offset = 5;
+- info->var.blue.offset = 0;
+- info->var.red.length = 5;
+- info->var.green.length = 6;
+- info->var.blue.length = 5;
+- info->var.transp.offset = 0;
+- break;
+- case 24:
+- info->var.red.offset = 16;
+- info->var.green.offset = 8;
+- info->var.blue.offset = 0;
+- info->var.red.length = 8;
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 0;
+- info->var.transp.length = 0;
+- break;
+- case 32:
+- info->var.red.offset = 16;
+- info->var.green.offset = 8;
+- info->var.blue.offset = 0;
+- info->var.red.length = 8;
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 24;
+- info->var.transp.length = 8;
+- break;
+-#else
+- case 24:
+- info->var.red.offset = 8;
+- info->var.green.offset = 16;
+- info->var.blue.offset = 24;
+- info->var.red.length = 8;
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 0;
+- info->var.transp.length = 0;
+- break;
+- case 32:
+- info->var.red.offset = 8;
+- info->var.green.offset = 16;
+- info->var.blue.offset = 24;
+- info->var.red.length = 8;
+- info->var.green.length = 8;
+- info->var.blue.length = 8;
+- info->var.transp.offset = 0;
+- info->var.transp.length = 8;
+- break;
+- default:
+-#endif
+- break;
+- }
+-
+ fb->fbdev = info;
+ rfbdev->rfb = rfb;
+ rfbdev->rdev = rdev;
+@@ -726,148 +291,26 @@ out:
+ return ret;
+ }
+
+-static int radeonfb_single_fb_probe(struct radeon_device *rdev)
++static char *mode_option;
++int radeon_parse_options(char *options)
+ {
+- struct drm_crtc *crtc;
+- struct drm_connector *connector;
+- unsigned int fb_width = (unsigned)-1, fb_height = (unsigned)-1;
+- unsigned int surface_width = 0, surface_height = 0;
+- int new_fb = 0;
+- int crtc_count = 0;
+- int ret, i, conn_count = 0;
+- struct radeon_framebuffer *rfb;
+- struct fb_info *info;
+- struct radeon_fb_device *rfbdev;
+- struct drm_mode_set *modeset = NULL;
+-
+- /* first up get a count of crtcs now in use and new min/maxes width/heights */
+- list_for_each_entry(crtc, &rdev->ddev->mode_config.crtc_list, head) {
+- if (drm_helper_crtc_in_use(crtc)) {
+- if (crtc->desired_mode) {
+- if (crtc->desired_mode->hdisplay < fb_width)
+- fb_width = crtc->desired_mode->hdisplay;
+-
+- if (crtc->desired_mode->vdisplay < fb_height)
+- fb_height = crtc->desired_mode->vdisplay;
+-
+- if (crtc->desired_mode->hdisplay > surface_width)
+- surface_width = crtc->desired_mode->hdisplay;
+-
+- if (crtc->desired_mode->vdisplay > surface_height)
+- surface_height = crtc->desired_mode->vdisplay;
+- }
+- crtc_count++;
+- }
+- }
++ char *this_opt;
+
+- if (crtc_count == 0 || fb_width == -1 || fb_height == -1) {
+- /* hmm everyone went away - assume VGA cable just fell out
+- and will come back later. */
++ if (!options || !*options)
+ return 0;
+- }
+-
+- /* do we have an fb already? */
+- if (list_empty(&rdev->ddev->mode_config.fb_kernel_list)) {
+- /* create an fb if we don't have one */
+- ret = radeonfb_create(rdev, fb_width, fb_height, surface_width, surface_height, &rfb);
+- if (ret) {
+- return -EINVAL;
+- }
+- new_fb = 1;
+- } else {
+- struct drm_framebuffer *fb;
+- fb = list_first_entry(&rdev->ddev->mode_config.fb_kernel_list, struct drm_framebuffer, filp_head);
+- rfb = to_radeon_framebuffer(fb);
+-
+- /* if someone hotplugs something bigger than we have already allocated, we are pwned.
+- As really we can't resize an fbdev that is in the wild currently due to fbdev
+- not really being designed for the lower layers moving stuff around under it.
+- - so in the grand style of things - punt. */
+- if ((fb->width < surface_width) || (fb->height < surface_height)) {
+- DRM_ERROR("Framebuffer not large enough to scale console onto.\n");
+- return -EINVAL;
+- }
+- }
+-
+- info = rfb->base.fbdev;
+- rdev->fbdev_info = info;
+- rfbdev = info->par;
+
+- crtc_count = 0;
+- /* okay we need to setup new connector sets in the crtcs */
+- list_for_each_entry(crtc, &rdev->ddev->mode_config.crtc_list, head) {
+- struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
+- modeset = &radeon_crtc->mode_set;
+- modeset->fb = &rfb->base;
+- conn_count = 0;
+- list_for_each_entry(connector, &rdev->ddev->mode_config.connector_list, head) {
+- if (connector->encoder)
+- if (connector->encoder->crtc == modeset->crtc) {
+- modeset->connectors[conn_count] = connector;
+- conn_count++;
+- if (conn_count > RADEONFB_CONN_LIMIT)
+- BUG();
+- }
+- }
+-
+- for (i = conn_count; i < RADEONFB_CONN_LIMIT; i++)
+- modeset->connectors[i] = NULL;
+-
+-
+- rfbdev->crtc_ids[crtc_count++] = crtc->base.id;
+-
+- modeset->num_connectors = conn_count;
+- if (modeset->crtc->desired_mode) {
+- if (modeset->mode) {
+- drm_mode_destroy(rdev->ddev, modeset->mode);
+- }
+- modeset->mode = drm_mode_duplicate(rdev->ddev,
+- modeset->crtc->desired_mode);
+- }
+- }
+- rfbdev->crtc_count = crtc_count;
+-
+- if (new_fb) {
+- info->var.pixclock = -1;
+- if (register_framebuffer(info) < 0)
+- return -EINVAL;
+- } else {
+- radeonfb_set_par(info);
++ while ((this_opt = strsep(&options, ",")) != NULL) {
++ if (!*this_opt)
++ continue;
++ mode_option = this_opt;
+ }
+- printk(KERN_INFO "fb%d: %s frame buffer device\n", info->node,
+- info->fix.id);
+-
+- /* Switch back to kernel console on panic */
+- panic_mode = *modeset;
+- atomic_notifier_chain_register(&panic_notifier_list, &paniced);
+- printk(KERN_INFO "registered panic notifier\n");
+-
+ return 0;
+ }
+
+ int radeonfb_probe(struct drm_device *dev)
+ {
+- int ret;
+-
+- /* something has changed in the lower levels of hell - deal with it
+- here */
+-
+- /* two modes : a) 1 fb to rule all crtcs.
+- b) one fb per crtc.
+- two actions 1) new connected device
+- 2) device removed.
+- case a/1 : if the fb surface isn't big enough - resize the surface fb.
+- if the fb size isn't big enough - resize fb into surface.
+- if everything big enough configure the new crtc/etc.
+- case a/2 : undo the configuration
+- possibly resize down the fb to fit the new configuration.
+- case b/1 : see if it is on a new crtc - setup a new fb and add it.
+- case b/2 : teardown the new fb.
+- */
+- ret = radeonfb_single_fb_probe(dev->dev_private);
+- return ret;
++ return drm_fb_helper_single_fb_probe(dev, &radeonfb_create);
+ }
+-EXPORT_SYMBOL(radeonfb_probe);
+
+ int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
+ {
+@@ -880,16 +323,17 @@ int radeonfb_remove(struct drm_device *dev, struct drm_framebuffer *fb)
+ }
+ info = fb->fbdev;
+ if (info) {
++ struct radeon_fb_device *rfbdev = info->par;
+ robj = rfb->obj->driver_private;
+ unregister_framebuffer(info);
+ radeon_object_kunmap(robj);
+ radeon_object_unpin(robj);
++ drm_fb_helper_free(&rfbdev->helper);
+ framebuffer_release(info);
+ }
+
+ printk(KERN_INFO "unregistered panic notifier\n");
+- atomic_notifier_chain_unregister(&panic_notifier_list, &paniced);
+- memset(&panic_mode, 0, sizeof(struct drm_mode_set));
++
+ return 0;
+ }
+ EXPORT_SYMBOL(radeonfb_remove);
+diff --git a/drivers/gpu/drm/radeon/radeon_fence.c b/drivers/gpu/drm/radeon/radeon_fence.c
+index b4e48dd..3beb26d 100644
+--- a/drivers/gpu/drm/radeon/radeon_fence.c
++++ b/drivers/gpu/drm/radeon/radeon_fence.c
+@@ -53,9 +53,9 @@ int radeon_fence_emit(struct radeon_device *rdev, struct radeon_fence *fence)
+ * away
+ */
+ WREG32(rdev->fence_drv.scratch_reg, fence->seq);
+- } else {
++ } else
+ radeon_fence_ring_emit(rdev, fence);
+- }
++
+ fence->emited = true;
+ fence->timeout = jiffies + ((2000 * HZ) / 1000);
+ list_del(&fence->list);
+@@ -168,7 +168,38 @@ bool radeon_fence_signaled(struct radeon_fence *fence)
+ return signaled;
+ }
+
+-int radeon_fence_wait(struct radeon_fence *fence, bool interruptible)
++int r600_fence_wait(struct radeon_fence *fence, bool intr, bool lazy)
++{
++ struct radeon_device *rdev;
++ int ret = 0;
++
++ rdev = fence->rdev;
++
++ __set_current_state(intr ? TASK_INTERRUPTIBLE : TASK_UNINTERRUPTIBLE);
++
++ while (1) {
++ if (radeon_fence_signaled(fence))
++ break;
++
++ if (time_after_eq(jiffies, fence->timeout)) {
++ ret = -EBUSY;
++ break;
++ }
++
++ if (lazy)
++ schedule_timeout(1);
++
++ if (intr && signal_pending(current)) {
++ ret = -ERESTARTSYS;
++ break;
++ }
++ }
++ __set_current_state(TASK_RUNNING);
++ return ret;
++}
++
++
++int radeon_fence_wait(struct radeon_fence *fence, bool intr)
+ {
+ struct radeon_device *rdev;
+ unsigned long cur_jiffies;
+@@ -176,7 +207,6 @@ int radeon_fence_wait(struct radeon_fence *fence, bool interruptible)
+ bool expired = false;
+ int r;
+
+-
+ if (fence == NULL) {
+ WARN(1, "Querying an invalid fence : %p !\n", fence);
+ return 0;
+@@ -185,13 +215,22 @@ int radeon_fence_wait(struct radeon_fence *fence, bool interruptible)
+ if (radeon_fence_signaled(fence)) {
+ return 0;
+ }
++
++ if (rdev->family >= CHIP_R600) {
++ r = r600_fence_wait(fence, intr, 0);
++ if (r == -ERESTARTSYS)
++ return -EBUSY;
++ return r;
++ }
++
+ retry:
+ cur_jiffies = jiffies;
+ timeout = HZ / 100;
+ if (time_after(fence->timeout, cur_jiffies)) {
+ timeout = fence->timeout - cur_jiffies;
+ }
+- if (interruptible) {
++
++ if (intr) {
+ r = wait_event_interruptible_timeout(rdev->fence_drv.queue,
+ radeon_fence_signaled(fence), timeout);
+ if (unlikely(r == -ERESTARTSYS)) {
+diff --git a/drivers/gpu/drm/radeon/radeon_gart.c b/drivers/gpu/drm/radeon/radeon_gart.c
+index 2977539..a931af0 100644
+--- a/drivers/gpu/drm/radeon/radeon_gart.c
++++ b/drivers/gpu/drm/radeon/radeon_gart.c
+@@ -75,7 +75,6 @@ void radeon_gart_table_ram_free(struct radeon_device *rdev)
+
+ int radeon_gart_table_vram_alloc(struct radeon_device *rdev)
+ {
+- uint64_t gpu_addr;
+ int r;
+
+ if (rdev->gart.table.vram.robj == NULL) {
+@@ -88,6 +87,14 @@ int radeon_gart_table_vram_alloc(struct radeon_device *rdev)
+ return r;
+ }
+ }
++ return 0;
++}
++
++int radeon_gart_table_vram_pin(struct radeon_device *rdev)
++{
++ uint64_t gpu_addr;
++ int r;
++
+ r = radeon_object_pin(rdev->gart.table.vram.robj,
+ RADEON_GEM_DOMAIN_VRAM, &gpu_addr);
+ if (r) {
+diff --git a/drivers/gpu/drm/radeon/radeon_ioc32.c b/drivers/gpu/drm/radeon/radeon_ioc32.c
+index 56decda..a1bf11d 100644
+--- a/drivers/gpu/drm/radeon/radeon_ioc32.c
++++ b/drivers/gpu/drm/radeon/radeon_ioc32.c
+@@ -422,3 +422,18 @@ long radeon_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
+
+ return ret;
+ }
++
++long radeon_kms_compat_ioctl(struct file *filp, unsigned int cmd, unsigned long arg)
++{
++ unsigned int nr = DRM_IOCTL_NR(cmd);
++ int ret;
++
++ if (nr < DRM_COMMAND_BASE)
++ return drm_compat_ioctl(filp, cmd, arg);
++
++ lock_kernel(); /* XXX for now */
++ ret = drm_ioctl(filp->f_path.dentry->d_inode, filp, cmd, arg);
++ unlock_kernel();
++
++ return ret;
++}
+diff --git a/drivers/gpu/drm/radeon/radeon_irq.c b/drivers/gpu/drm/radeon/radeon_irq.c
+index 9836c70..b79ecc4 100644
+--- a/drivers/gpu/drm/radeon/radeon_irq.c
++++ b/drivers/gpu/drm/radeon/radeon_irq.c
+@@ -188,6 +188,9 @@ irqreturn_t radeon_driver_irq_handler(DRM_IRQ_ARGS)
+ u32 stat;
+ u32 r500_disp_int;
+
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ return IRQ_NONE;
++
+ /* Only consider the bits we're interested in - others could be used
+ * outside the DRM
+ */
+@@ -286,6 +289,9 @@ int radeon_irq_emit(struct drm_device *dev, void *data, struct drm_file *file_pr
+ drm_radeon_irq_emit_t *emit = data;
+ int result;
+
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ return -EINVAL;
++
+ LOCK_TEST_WITH_RETURN(dev, file_priv);
+
+ if (!dev_priv) {
+@@ -315,6 +321,9 @@ int radeon_irq_wait(struct drm_device *dev, void *data, struct drm_file *file_pr
+ return -EINVAL;
+ }
+
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ return -EINVAL;
++
+ return radeon_wait_irq(dev, irqwait->irq_seq);
+ }
+
+@@ -326,6 +335,9 @@ void radeon_driver_irq_preinstall(struct drm_device * dev)
+ (drm_radeon_private_t *) dev->dev_private;
+ u32 dummy;
+
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ return;
++
+ /* Disable *all* interrupts */
+ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600)
+ RADEON_WRITE(R500_DxMODE_INT_MASK, 0);
+@@ -345,6 +357,9 @@ int radeon_driver_irq_postinstall(struct drm_device *dev)
+
+ dev->max_vblank_count = 0x001fffff;
+
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ return 0;
++
+ radeon_irq_set_state(dev, RADEON_SW_INT_ENABLE, 1);
+
+ return 0;
+@@ -357,6 +372,9 @@ void radeon_driver_irq_uninstall(struct drm_device * dev)
+ if (!dev_priv)
+ return;
+
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ return;
++
+ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_RS600)
+ RADEON_WRITE(R500_DxMODE_INT_MASK, 0);
+ /* Disable *all* interrupts */
+diff --git a/drivers/gpu/drm/radeon/radeon_irq_kms.c b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+index 9805e4b..1841145 100644
+--- a/drivers/gpu/drm/radeon/radeon_irq_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_irq_kms.c
+@@ -28,7 +28,6 @@
+ #include "drmP.h"
+ #include "radeon_drm.h"
+ #include "radeon_reg.h"
+-#include "radeon_microcode.h"
+ #include "radeon.h"
+ #include "atom.h"
+
+diff --git a/drivers/gpu/drm/radeon/radeon_kms.c b/drivers/gpu/drm/radeon/radeon_kms.c
+index dce09ad..ba12862 100644
+--- a/drivers/gpu/drm/radeon/radeon_kms.c
++++ b/drivers/gpu/drm/radeon/radeon_kms.c
+@@ -54,12 +54,23 @@ int radeon_driver_load_kms(struct drm_device *dev, unsigned long flags)
+ flags |= RADEON_IS_PCI;
+ }
+
++ /* radeon_device_init should report only fatal error
++ * like memory allocation failure or iomapping failure,
++ * or memory manager initialization failure, it must
++ * properly initialize the GPU MC controller and permit
++ * VRAM allocation
++ */
+ r = radeon_device_init(rdev, dev, dev->pdev, flags);
+ if (r) {
+- DRM_ERROR("Failed to initialize radeon, disabling IOCTL\n");
+- radeon_device_fini(rdev);
+- kfree(rdev);
+- dev->dev_private = NULL;
++ DRM_ERROR("Fatal error while trying to initialize radeon.\n");
++ return r;
++ }
++ /* Again modeset_init should fail only on fatal error
++ * otherwise it should provide enough functionalities
++ * for shadowfb to run
++ */
++ r = radeon_modeset_init(rdev);
++ if (r) {
+ return r;
+ }
+ return 0;
+@@ -69,6 +80,9 @@ int radeon_driver_unload_kms(struct drm_device *dev)
+ {
+ struct radeon_device *rdev = dev->dev_private;
+
++ if (rdev == NULL)
++ return 0;
++ radeon_modeset_fini(rdev);
+ radeon_device_fini(rdev);
+ kfree(rdev);
+ dev->dev_private = NULL;
+@@ -98,6 +112,9 @@ int radeon_info_ioctl(struct drm_device *dev, void *data, struct drm_file *filp)
+ case RADEON_INFO_NUM_Z_PIPES:
+ value = rdev->num_z_pipes;
+ break;
++ case RADEON_INFO_ACCEL_WORKING:
++ value = rdev->accel_working;
++ break;
+ default:
+ DRM_DEBUG("Invalid request %d\n", info->request);
+ return -EINVAL;
+@@ -184,55 +201,6 @@ void radeon_disable_vblank_kms(struct drm_device *dev, int crtc)
+
+
+ /*
+- * For multiple master (like multiple X).
+- */
+-struct drm_radeon_master_private {
+- drm_local_map_t *sarea;
+- drm_radeon_sarea_t *sarea_priv;
+-};
+-
+-int radeon_master_create_kms(struct drm_device *dev, struct drm_master *master)
+-{
+- struct drm_radeon_master_private *master_priv;
+- unsigned long sareapage;
+- int ret;
+-
+- master_priv = kzalloc(sizeof(*master_priv), GFP_KERNEL);
+- if (master_priv == NULL) {
+- return -ENOMEM;
+- }
+- /* prebuild the SAREA */
+- sareapage = max_t(unsigned long, SAREA_MAX, PAGE_SIZE);
+- ret = drm_addmap(dev, 0, sareapage, _DRM_SHM,
+- _DRM_CONTAINS_LOCK,
+- &master_priv->sarea);
+- if (ret) {
+- DRM_ERROR("SAREA setup failed\n");
+- return ret;
+- }
+- master_priv->sarea_priv = master_priv->sarea->handle + sizeof(struct drm_sarea);
+- master_priv->sarea_priv->pfCurrentPage = 0;
+- master->driver_priv = master_priv;
+- return 0;
+-}
+-
+-void radeon_master_destroy_kms(struct drm_device *dev,
+- struct drm_master *master)
+-{
+- struct drm_radeon_master_private *master_priv = master->driver_priv;
+-
+- if (master_priv == NULL) {
+- return;
+- }
+- if (master_priv->sarea) {
+- drm_rmmap_locked(dev, master_priv->sarea);
+- }
+- kfree(master_priv);
+- master->driver_priv = NULL;
+-}
+-
+-
+-/*
+ * IOCTL.
+ */
+ int radeon_dma_ioctl_kms(struct drm_device *dev, void *data,
+diff --git a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
+index 0da72f1..2b997a1 100644
+--- a/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
++++ b/drivers/gpu/drm/radeon/radeon_legacy_crtc.c
+@@ -28,6 +28,7 @@
+ #include <drm/radeon_drm.h>
+ #include "radeon_fixed.h"
+ #include "radeon.h"
++#include "atom.h"
+
+ static void radeon_legacy_rmx_mode_set(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+@@ -340,6 +341,9 @@ void radeon_legacy_atom_set_surface(struct drm_crtc *crtc)
+ uint32_t crtc_pitch;
+
+ switch (crtc->fb->bits_per_pixel) {
++ case 8:
++ format = 2;
++ break;
+ case 15: /* 555 */
+ format = 3;
+ break;
+@@ -400,11 +404,33 @@ int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
+ uint32_t crtc_offset, crtc_offset_cntl, crtc_tile_x0_y0 = 0;
+ uint32_t crtc_pitch, pitch_pixels;
+ uint32_t tiling_flags;
++ int format;
++ uint32_t gen_cntl_reg, gen_cntl_val;
+
+ DRM_DEBUG("\n");
+
+ radeon_fb = to_radeon_framebuffer(crtc->fb);
+
++ switch (crtc->fb->bits_per_pixel) {
++ case 8:
++ format = 2;
++ break;
++ case 15: /* 555 */
++ format = 3;
++ break;
++ case 16: /* 565 */
++ format = 4;
++ break;
++ case 24: /* RGB */
++ format = 5;
++ break;
++ case 32: /* xRGB */
++ format = 6;
++ break;
++ default:
++ return false;
++ }
++
+ obj = radeon_fb->obj;
+ if (radeon_gem_object_pin(obj, RADEON_GEM_DOMAIN_VRAM, &base)) {
+ return -EINVAL;
+@@ -457,6 +483,9 @@ int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
+ } else {
+ int offset = y * pitch_pixels + x;
+ switch (crtc->fb->bits_per_pixel) {
++ case 8:
++ offset *= 1;
++ break;
+ case 15:
+ case 16:
+ offset *= 2;
+@@ -475,6 +504,16 @@ int radeon_crtc_set_base(struct drm_crtc *crtc, int x, int y,
+
+ base &= ~7;
+
++ if (radeon_crtc->crtc_id == 1)
++ gen_cntl_reg = RADEON_CRTC2_GEN_CNTL;
++ else
++ gen_cntl_reg = RADEON_CRTC_GEN_CNTL;
++
++ gen_cntl_val = RREG32(gen_cntl_reg);
++ gen_cntl_val &= ~(0xf << 8);
++ gen_cntl_val |= (format << 8);
++ WREG32(gen_cntl_reg, gen_cntl_val);
++
+ crtc_offset = (u32)base;
+
+ WREG32(RADEON_DISPLAY_BASE_ADDR + radeon_crtc->crtc_offset, radeon_crtc->legacy_display_base_addr);
+@@ -501,6 +540,7 @@ static bool radeon_set_crtc_timing(struct drm_crtc *crtc, struct drm_display_mod
+ struct drm_device *dev = crtc->dev;
+ struct radeon_device *rdev = dev->dev_private;
+ struct radeon_crtc *radeon_crtc = to_radeon_crtc(crtc);
++ struct drm_encoder *encoder;
+ int format;
+ int hsync_start;
+ int hsync_wid;
+@@ -509,10 +549,24 @@ static bool radeon_set_crtc_timing(struct drm_crtc *crtc, struct drm_display_mod
+ uint32_t crtc_h_sync_strt_wid;
+ uint32_t crtc_v_total_disp;
+ uint32_t crtc_v_sync_strt_wid;
++ bool is_tv = false;
+
+ DRM_DEBUG("\n");
++ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
++ if (encoder->crtc == crtc) {
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ if (radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT) {
++ is_tv = true;
++ DRM_INFO("crtc %d is connected to a TV\n", radeon_crtc->crtc_id);
++ break;
++ }
++ }
++ }
+
+ switch (crtc->fb->bits_per_pixel) {
++ case 8:
++ format = 2;
++ break;
+ case 15: /* 555 */
+ format = 3;
+ break;
+@@ -642,6 +696,11 @@ static bool radeon_set_crtc_timing(struct drm_crtc *crtc, struct drm_display_mod
+ WREG32(RADEON_CRTC_EXT_CNTL, crtc_ext_cntl);
+ }
+
++ if (is_tv)
++ radeon_legacy_tv_adjust_crtc_reg(encoder, &crtc_h_total_disp,
++ &crtc_h_sync_strt_wid, &crtc_v_total_disp,
++ &crtc_v_sync_strt_wid);
++
+ WREG32(RADEON_CRTC_H_TOTAL_DISP + radeon_crtc->crtc_offset, crtc_h_total_disp);
+ WREG32(RADEON_CRTC_H_SYNC_STRT_WID + radeon_crtc->crtc_offset, crtc_h_sync_strt_wid);
+ WREG32(RADEON_CRTC_V_TOTAL_DISP + radeon_crtc->crtc_offset, crtc_v_total_disp);
+@@ -668,7 +727,7 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
+ uint32_t pll_ref_div = 0;
+ uint32_t pll_fb_post_div = 0;
+ uint32_t htotal_cntl = 0;
+-
++ bool is_tv = false;
+ struct radeon_pll *pll;
+
+ struct {
+@@ -703,6 +762,13 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
+
+ list_for_each_entry(encoder, &dev->mode_config.encoder_list, head) {
+ if (encoder->crtc == crtc) {
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++
++ if (radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT) {
++ is_tv = true;
++ break;
++ }
++
+ if (encoder->encoder_type != DRM_MODE_ENCODER_DAC)
+ pll_flags |= RADEON_PLL_NO_ODD_POST_DIV;
+ if (encoder->encoder_type == DRM_MODE_ENCODER_LVDS) {
+@@ -766,6 +832,12 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
+ ~(RADEON_PIX2CLK_SRC_SEL_MASK)) |
+ RADEON_PIX2CLK_SRC_SEL_P2PLLCLK);
+
++ if (is_tv) {
++ radeon_legacy_tv_adjust_pll2(encoder, &htotal_cntl,
++ &pll_ref_div, &pll_fb_post_div,
++ &pixclks_cntl);
++ }
++
+ WREG32_PLL_P(RADEON_PIXCLKS_CNTL,
+ RADEON_PIX2CLK_SRC_SEL_CPUCLK,
+ ~(RADEON_PIX2CLK_SRC_SEL_MASK));
+@@ -820,6 +892,15 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
+
+ WREG32_PLL(RADEON_PIXCLKS_CNTL, pixclks_cntl);
+ } else {
++ uint32_t pixclks_cntl;
++
++
++ if (is_tv) {
++ pixclks_cntl = RREG32_PLL(RADEON_PIXCLKS_CNTL);
++ radeon_legacy_tv_adjust_pll1(encoder, &htotal_cntl, &pll_ref_div,
++ &pll_fb_post_div, &pixclks_cntl);
++ }
++
+ if (rdev->flags & RADEON_IS_MOBILITY) {
+ /* A temporal workaround for the occational blanking on certain laptop panels.
+ This appears to related to the PLL divider registers (fail to lock?).
+@@ -914,6 +995,8 @@ static void radeon_set_pll(struct drm_crtc *crtc, struct drm_display_mode *mode)
+ RADEON_VCLK_SRC_SEL_PPLLCLK,
+ ~(RADEON_VCLK_SRC_SEL_MASK));
+
++ if (is_tv)
++ WREG32_PLL(RADEON_PIXCLKS_CNTL, pixclks_cntl);
+ }
+ }
+
+diff --git a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
+index 9322675..b1547f7 100644
+--- a/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
++++ b/drivers/gpu/drm/radeon/radeon_legacy_encoders.c
+@@ -29,6 +29,15 @@
+ #include "radeon.h"
+ #include "atom.h"
+
++static void radeon_legacy_encoder_disable(struct drm_encoder *encoder)
++{
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct drm_encoder_helper_funcs *encoder_funcs;
++
++ encoder_funcs = encoder->helper_private;
++ encoder_funcs->dpms(encoder, DRM_MODE_DPMS_OFF);
++ radeon_encoder->active_device = 0;
++}
+
+ static void radeon_legacy_lvds_dpms(struct drm_encoder *encoder, int mode)
+ {
+@@ -98,6 +107,8 @@ static void radeon_legacy_lvds_prepare(struct drm_encoder *encoder)
+ else
+ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_lvds_dpms(encoder, DRM_MODE_DPMS_OFF);
++
++ radeon_encoder_set_active_device(encoder);
+ }
+
+ static void radeon_legacy_lvds_commit(struct drm_encoder *encoder)
+@@ -195,6 +206,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_lvds_helper_funcs = {
+ .prepare = radeon_legacy_lvds_prepare,
+ .mode_set = radeon_legacy_lvds_mode_set,
+ .commit = radeon_legacy_lvds_commit,
++ .disable = radeon_legacy_encoder_disable,
+ };
+
+
+@@ -260,6 +272,7 @@ static void radeon_legacy_primary_dac_prepare(struct drm_encoder *encoder)
+ else
+ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_primary_dac_dpms(encoder, DRM_MODE_DPMS_OFF);
++ radeon_encoder_set_active_device(encoder);
+ }
+
+ static void radeon_legacy_primary_dac_commit(struct drm_encoder *encoder)
+@@ -402,6 +415,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_primary_dac_helper_fu
+ .mode_set = radeon_legacy_primary_dac_mode_set,
+ .commit = radeon_legacy_primary_dac_commit,
+ .detect = radeon_legacy_primary_dac_detect,
++ .disable = radeon_legacy_encoder_disable,
+ };
+
+
+@@ -454,6 +468,7 @@ static void radeon_legacy_tmds_int_prepare(struct drm_encoder *encoder)
+ else
+ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_tmds_int_dpms(encoder, DRM_MODE_DPMS_OFF);
++ radeon_encoder_set_active_device(encoder);
+ }
+
+ static void radeon_legacy_tmds_int_commit(struct drm_encoder *encoder)
+@@ -566,6 +581,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_tmds_int_helper_funcs
+ .prepare = radeon_legacy_tmds_int_prepare,
+ .mode_set = radeon_legacy_tmds_int_mode_set,
+ .commit = radeon_legacy_tmds_int_commit,
++ .disable = radeon_legacy_encoder_disable,
+ };
+
+
+@@ -620,6 +636,7 @@ static void radeon_legacy_tmds_ext_prepare(struct drm_encoder *encoder)
+ else
+ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_tmds_ext_dpms(encoder, DRM_MODE_DPMS_OFF);
++ radeon_encoder_set_active_device(encoder);
+ }
+
+ static void radeon_legacy_tmds_ext_commit(struct drm_encoder *encoder)
+@@ -706,6 +723,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_tmds_ext_helper_funcs
+ .prepare = radeon_legacy_tmds_ext_prepare,
+ .mode_set = radeon_legacy_tmds_ext_mode_set,
+ .commit = radeon_legacy_tmds_ext_commit,
++ .disable = radeon_legacy_encoder_disable,
+ };
+
+
+@@ -727,17 +745,21 @@ static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode)
+ {
+ struct drm_device *dev = encoder->dev;
+ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
+ uint32_t fp2_gen_cntl = 0, crtc2_gen_cntl = 0, tv_dac_cntl = 0;
+- /* uint32_t tv_master_cntl = 0; */
+-
++ uint32_t tv_master_cntl = 0;
++ bool is_tv;
+ DRM_DEBUG("\n");
+
++ is_tv = radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT ? true : false;
++
+ if (rdev->family == CHIP_R200)
+ fp2_gen_cntl = RREG32(RADEON_FP2_GEN_CNTL);
+ else {
+- crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL);
+- /* FIXME TV */
+- /* tv_master_cntl = RREG32(RADEON_TV_MASTER_CNTL); */
++ if (is_tv)
++ tv_master_cntl = RREG32(RADEON_TV_MASTER_CNTL);
++ else
++ crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL);
+ tv_dac_cntl = RREG32(RADEON_TV_DAC_CNTL);
+ }
+
+@@ -746,20 +768,23 @@ static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode)
+ if (rdev->family == CHIP_R200) {
+ fp2_gen_cntl |= (RADEON_FP2_ON | RADEON_FP2_DVO_EN);
+ } else {
+- crtc2_gen_cntl |= RADEON_CRTC2_CRT2_ON;
+- /* tv_master_cntl |= RADEON_TV_ON; */
++ if (is_tv)
++ tv_master_cntl |= RADEON_TV_ON;
++ else
++ crtc2_gen_cntl |= RADEON_CRTC2_CRT2_ON;
++
+ if (rdev->family == CHIP_R420 ||
+- rdev->family == CHIP_R423 ||
+- rdev->family == CHIP_RV410)
++ rdev->family == CHIP_R423 ||
++ rdev->family == CHIP_RV410)
+ tv_dac_cntl &= ~(R420_TV_DAC_RDACPD |
+- R420_TV_DAC_GDACPD |
+- R420_TV_DAC_BDACPD |
+- RADEON_TV_DAC_BGSLEEP);
++ R420_TV_DAC_GDACPD |
++ R420_TV_DAC_BDACPD |
++ RADEON_TV_DAC_BGSLEEP);
+ else
+ tv_dac_cntl &= ~(RADEON_TV_DAC_RDACPD |
+- RADEON_TV_DAC_GDACPD |
+- RADEON_TV_DAC_BDACPD |
+- RADEON_TV_DAC_BGSLEEP);
++ RADEON_TV_DAC_GDACPD |
++ RADEON_TV_DAC_BDACPD |
++ RADEON_TV_DAC_BGSLEEP);
+ }
+ break;
+ case DRM_MODE_DPMS_STANDBY:
+@@ -768,8 +793,11 @@ static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode)
+ if (rdev->family == CHIP_R200)
+ fp2_gen_cntl &= ~(RADEON_FP2_ON | RADEON_FP2_DVO_EN);
+ else {
+- crtc2_gen_cntl &= ~RADEON_CRTC2_CRT2_ON;
+- /* tv_master_cntl &= ~RADEON_TV_ON; */
++ if (is_tv)
++ tv_master_cntl &= ~RADEON_TV_ON;
++ else
++ crtc2_gen_cntl &= ~RADEON_CRTC2_CRT2_ON;
++
+ if (rdev->family == CHIP_R420 ||
+ rdev->family == CHIP_R423 ||
+ rdev->family == CHIP_RV410)
+@@ -789,8 +817,10 @@ static void radeon_legacy_tv_dac_dpms(struct drm_encoder *encoder, int mode)
+ if (rdev->family == CHIP_R200) {
+ WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl);
+ } else {
+- WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl);
+- /* WREG32(RADEON_TV_MASTER_CNTL, tv_master_cntl); */
++ if (is_tv)
++ WREG32(RADEON_TV_MASTER_CNTL, tv_master_cntl);
++ else
++ WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl);
+ WREG32(RADEON_TV_DAC_CNTL, tv_dac_cntl);
+ }
+
+@@ -809,6 +839,7 @@ static void radeon_legacy_tv_dac_prepare(struct drm_encoder *encoder)
+ else
+ radeon_combios_output_lock(encoder, true);
+ radeon_legacy_tv_dac_dpms(encoder, DRM_MODE_DPMS_OFF);
++ radeon_encoder_set_active_device(encoder);
+ }
+
+ static void radeon_legacy_tv_dac_commit(struct drm_encoder *encoder)
+@@ -831,11 +862,15 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder,
+ struct radeon_device *rdev = dev->dev_private;
+ struct radeon_crtc *radeon_crtc = to_radeon_crtc(encoder->crtc);
+ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
+ uint32_t tv_dac_cntl, gpiopad_a = 0, dac2_cntl, disp_output_cntl = 0;
+- uint32_t disp_hw_debug = 0, fp2_gen_cntl = 0;
++ uint32_t disp_hw_debug = 0, fp2_gen_cntl = 0, disp_tv_out_cntl = 0;
++ bool is_tv = false;
+
+ DRM_DEBUG("\n");
+
++ is_tv = radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT ? true : false;
++
+ if (rdev->family != CHIP_R200) {
+ tv_dac_cntl = RREG32(RADEON_TV_DAC_CNTL);
+ if (rdev->family == CHIP_R420 ||
+@@ -858,7 +893,7 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder,
+ }
+
+ /* FIXME TV */
+- if (radeon_encoder->enc_priv) {
++ if (tv_dac) {
+ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
+ tv_dac_cntl |= (RADEON_TV_DAC_NBLANK |
+ RADEON_TV_DAC_NHOLD |
+@@ -875,44 +910,93 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder,
+ if (ASIC_IS_R300(rdev)) {
+ gpiopad_a = RREG32(RADEON_GPIOPAD_A) | 1;
+ disp_output_cntl = RREG32(RADEON_DISP_OUTPUT_CNTL);
+- } else if (rdev->family == CHIP_R200)
+- fp2_gen_cntl = RREG32(RADEON_FP2_GEN_CNTL);
++ }
++
++ if (rdev->family == CHIP_R200 || ASIC_IS_R300(rdev))
++ disp_tv_out_cntl = RREG32(RADEON_DISP_TV_OUT_CNTL);
+ else
+ disp_hw_debug = RREG32(RADEON_DISP_HW_DEBUG);
+
+- dac2_cntl = RREG32(RADEON_DAC_CNTL2) | RADEON_DAC2_DAC2_CLK_SEL;
++ if (rdev->family == CHIP_R200)
++ fp2_gen_cntl = RREG32(RADEON_FP2_GEN_CNTL);
+
+- if (radeon_crtc->crtc_id == 0) {
+- if (ASIC_IS_R300(rdev)) {
+- disp_output_cntl &= ~RADEON_DISP_TVDAC_SOURCE_MASK;
+- disp_output_cntl |= RADEON_DISP_TVDAC_SOURCE_CRTC;
+- } else if (rdev->family == CHIP_R200) {
+- fp2_gen_cntl &= ~(R200_FP2_SOURCE_SEL_MASK |
+- RADEON_FP2_DVO_RATE_SEL_SDR);
+- } else
+- disp_hw_debug |= RADEON_CRT2_DISP1_SEL;
++ if (is_tv) {
++ uint32_t dac_cntl;
++
++ dac_cntl = RREG32(RADEON_DAC_CNTL);
++ dac_cntl &= ~RADEON_DAC_TVO_EN;
++ WREG32(RADEON_DAC_CNTL, dac_cntl);
++
++ if (ASIC_IS_R300(rdev))
++ gpiopad_a = RREG32(RADEON_GPIOPAD_A) & ~1;
++
++ dac2_cntl = RREG32(RADEON_DAC_CNTL2) & ~RADEON_DAC2_DAC2_CLK_SEL;
++ if (radeon_crtc->crtc_id == 0) {
++ if (ASIC_IS_R300(rdev)) {
++ disp_output_cntl &= ~RADEON_DISP_TVDAC_SOURCE_MASK;
++ disp_output_cntl |= (RADEON_DISP_TVDAC_SOURCE_CRTC |
++ RADEON_DISP_TV_SOURCE_CRTC);
++ }
++ if (rdev->family >= CHIP_R200) {
++ disp_tv_out_cntl &= ~RADEON_DISP_TV_PATH_SRC_CRTC2;
++ } else {
++ disp_hw_debug |= RADEON_CRT2_DISP1_SEL;
++ }
++ } else {
++ if (ASIC_IS_R300(rdev)) {
++ disp_output_cntl &= ~RADEON_DISP_TVDAC_SOURCE_MASK;
++ disp_output_cntl |= RADEON_DISP_TV_SOURCE_CRTC;
++ }
++ if (rdev->family >= CHIP_R200) {
++ disp_tv_out_cntl |= RADEON_DISP_TV_PATH_SRC_CRTC2;
++ } else {
++ disp_hw_debug &= ~RADEON_CRT2_DISP1_SEL;
++ }
++ }
++ WREG32(RADEON_DAC_CNTL2, dac2_cntl);
+ } else {
+- if (ASIC_IS_R300(rdev)) {
+- disp_output_cntl &= ~RADEON_DISP_TVDAC_SOURCE_MASK;
+- disp_output_cntl |= RADEON_DISP_TVDAC_SOURCE_CRTC2;
+- } else if (rdev->family == CHIP_R200) {
+- fp2_gen_cntl &= ~(R200_FP2_SOURCE_SEL_MASK |
+- RADEON_FP2_DVO_RATE_SEL_SDR);
+- fp2_gen_cntl |= R200_FP2_SOURCE_SEL_CRTC2;
+- } else
+- disp_hw_debug &= ~RADEON_CRT2_DISP1_SEL;
+- }
+
+- WREG32(RADEON_DAC_CNTL2, dac2_cntl);
++ dac2_cntl = RREG32(RADEON_DAC_CNTL2) | RADEON_DAC2_DAC2_CLK_SEL;
++
++ if (radeon_crtc->crtc_id == 0) {
++ if (ASIC_IS_R300(rdev)) {
++ disp_output_cntl &= ~RADEON_DISP_TVDAC_SOURCE_MASK;
++ disp_output_cntl |= RADEON_DISP_TVDAC_SOURCE_CRTC;
++ } else if (rdev->family == CHIP_R200) {
++ fp2_gen_cntl &= ~(R200_FP2_SOURCE_SEL_MASK |
++ RADEON_FP2_DVO_RATE_SEL_SDR);
++ } else
++ disp_hw_debug |= RADEON_CRT2_DISP1_SEL;
++ } else {
++ if (ASIC_IS_R300(rdev)) {
++ disp_output_cntl &= ~RADEON_DISP_TVDAC_SOURCE_MASK;
++ disp_output_cntl |= RADEON_DISP_TVDAC_SOURCE_CRTC2;
++ } else if (rdev->family == CHIP_R200) {
++ fp2_gen_cntl &= ~(R200_FP2_SOURCE_SEL_MASK |
++ RADEON_FP2_DVO_RATE_SEL_SDR);
++ fp2_gen_cntl |= R200_FP2_SOURCE_SEL_CRTC2;
++ } else
++ disp_hw_debug &= ~RADEON_CRT2_DISP1_SEL;
++ }
++ WREG32(RADEON_DAC_CNTL2, dac2_cntl);
++ }
+
+ if (ASIC_IS_R300(rdev)) {
+ WREG32_P(RADEON_GPIOPAD_A, gpiopad_a, ~1);
+- WREG32(RADEON_DISP_TV_OUT_CNTL, disp_output_cntl);
+- } else if (rdev->family == CHIP_R200)
+- WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl);
++ WREG32(RADEON_DISP_OUTPUT_CNTL, disp_output_cntl);
++ }
++
++ if (rdev->family >= CHIP_R200)
++ WREG32(RADEON_DISP_TV_OUT_CNTL, disp_tv_out_cntl);
+ else
+ WREG32(RADEON_DISP_HW_DEBUG, disp_hw_debug);
+
++ if (rdev->family == CHIP_R200)
++ WREG32(RADEON_FP2_GEN_CNTL, fp2_gen_cntl);
++
++ if (is_tv)
++ radeon_legacy_tv_mode_set(encoder, mode, adjusted_mode);
++
+ if (rdev->is_atom_bios)
+ radeon_atombios_encoder_crtc_scratch_regs(encoder, radeon_crtc->crtc_id);
+ else
+@@ -920,6 +1004,141 @@ static void radeon_legacy_tv_dac_mode_set(struct drm_encoder *encoder,
+
+ }
+
++static bool r300_legacy_tv_detect(struct drm_encoder *encoder,
++ struct drm_connector *connector)
++{
++ struct drm_device *dev = encoder->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ uint32_t crtc2_gen_cntl, tv_dac_cntl, dac_cntl2, dac_ext_cntl;
++ uint32_t disp_output_cntl, gpiopad_a, tmp;
++ bool found = false;
++
++ /* save regs needed */
++ gpiopad_a = RREG32(RADEON_GPIOPAD_A);
++ dac_cntl2 = RREG32(RADEON_DAC_CNTL2);
++ crtc2_gen_cntl = RREG32(RADEON_CRTC2_GEN_CNTL);
++ dac_ext_cntl = RREG32(RADEON_DAC_EXT_CNTL);
++ tv_dac_cntl = RREG32(RADEON_TV_DAC_CNTL);
++ disp_output_cntl = RREG32(RADEON_DISP_OUTPUT_CNTL);
++
++ WREG32_P(RADEON_GPIOPAD_A, 0, ~1);
++
++ WREG32(RADEON_DAC_CNTL2, RADEON_DAC2_DAC2_CLK_SEL);
++
++ WREG32(RADEON_CRTC2_GEN_CNTL,
++ RADEON_CRTC2_CRT2_ON | RADEON_CRTC2_VSYNC_TRISTAT);
++
++ tmp = disp_output_cntl & ~RADEON_DISP_TVDAC_SOURCE_MASK;
++ tmp |= RADEON_DISP_TVDAC_SOURCE_CRTC2;
++ WREG32(RADEON_DISP_OUTPUT_CNTL, tmp);
++
++ WREG32(RADEON_DAC_EXT_CNTL,
++ RADEON_DAC2_FORCE_BLANK_OFF_EN |
++ RADEON_DAC2_FORCE_DATA_EN |
++ RADEON_DAC_FORCE_DATA_SEL_RGB |
++ (0xec << RADEON_DAC_FORCE_DATA_SHIFT));
++
++ WREG32(RADEON_TV_DAC_CNTL,
++ RADEON_TV_DAC_STD_NTSC |
++ (8 << RADEON_TV_DAC_BGADJ_SHIFT) |
++ (6 << RADEON_TV_DAC_DACADJ_SHIFT));
++
++ RREG32(RADEON_TV_DAC_CNTL);
++ mdelay(4);
++
++ WREG32(RADEON_TV_DAC_CNTL,
++ RADEON_TV_DAC_NBLANK |
++ RADEON_TV_DAC_NHOLD |
++ RADEON_TV_MONITOR_DETECT_EN |
++ RADEON_TV_DAC_STD_NTSC |
++ (8 << RADEON_TV_DAC_BGADJ_SHIFT) |
++ (6 << RADEON_TV_DAC_DACADJ_SHIFT));
++
++ RREG32(RADEON_TV_DAC_CNTL);
++ mdelay(6);
++
++ tmp = RREG32(RADEON_TV_DAC_CNTL);
++ if ((tmp & RADEON_TV_DAC_GDACDET) != 0) {
++ found = true;
++ DRM_DEBUG("S-video TV connection detected\n");
++ } else if ((tmp & RADEON_TV_DAC_BDACDET) != 0) {
++ found = true;
++ DRM_DEBUG("Composite TV connection detected\n");
++ }
++
++ WREG32(RADEON_TV_DAC_CNTL, tv_dac_cntl);
++ WREG32(RADEON_DAC_EXT_CNTL, dac_ext_cntl);
++ WREG32(RADEON_CRTC2_GEN_CNTL, crtc2_gen_cntl);
++ WREG32(RADEON_DISP_OUTPUT_CNTL, disp_output_cntl);
++ WREG32(RADEON_DAC_CNTL2, dac_cntl2);
++ WREG32_P(RADEON_GPIOPAD_A, gpiopad_a, ~1);
++ return found;
++}
++
++static bool radeon_legacy_tv_detect(struct drm_encoder *encoder,
++ struct drm_connector *connector)
++{
++ struct drm_device *dev = encoder->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ uint32_t tv_dac_cntl, dac_cntl2;
++ uint32_t config_cntl, tv_pre_dac_mux_cntl, tv_master_cntl, tmp;
++ bool found = false;
++
++ if (ASIC_IS_R300(rdev))
++ return r300_legacy_tv_detect(encoder, connector);
++
++ dac_cntl2 = RREG32(RADEON_DAC_CNTL2);
++ tv_master_cntl = RREG32(RADEON_TV_MASTER_CNTL);
++ tv_dac_cntl = RREG32(RADEON_TV_DAC_CNTL);
++ config_cntl = RREG32(RADEON_CONFIG_CNTL);
++ tv_pre_dac_mux_cntl = RREG32(RADEON_TV_PRE_DAC_MUX_CNTL);
++
++ tmp = dac_cntl2 & ~RADEON_DAC2_DAC2_CLK_SEL;
++ WREG32(RADEON_DAC_CNTL2, tmp);
++
++ tmp = tv_master_cntl | RADEON_TV_ON;
++ tmp &= ~(RADEON_TV_ASYNC_RST |
++ RADEON_RESTART_PHASE_FIX |
++ RADEON_CRT_FIFO_CE_EN |
++ RADEON_TV_FIFO_CE_EN |
++ RADEON_RE_SYNC_NOW_SEL_MASK);
++ tmp |= RADEON_TV_FIFO_ASYNC_RST | RADEON_CRT_ASYNC_RST;
++ WREG32(RADEON_TV_MASTER_CNTL, tmp);
++
++ tmp = RADEON_TV_DAC_NBLANK | RADEON_TV_DAC_NHOLD |
++ RADEON_TV_MONITOR_DETECT_EN | RADEON_TV_DAC_STD_NTSC |
++ (8 << RADEON_TV_DAC_BGADJ_SHIFT);
++
++ if (config_cntl & RADEON_CFG_ATI_REV_ID_MASK)
++ tmp |= (4 << RADEON_TV_DAC_DACADJ_SHIFT);
++ else
++ tmp |= (8 << RADEON_TV_DAC_DACADJ_SHIFT);
++ WREG32(RADEON_TV_DAC_CNTL, tmp);
++
++ tmp = RADEON_C_GRN_EN | RADEON_CMP_BLU_EN |
++ RADEON_RED_MX_FORCE_DAC_DATA |
++ RADEON_GRN_MX_FORCE_DAC_DATA |
++ RADEON_BLU_MX_FORCE_DAC_DATA |
++ (0x109 << RADEON_TV_FORCE_DAC_DATA_SHIFT);
++ WREG32(RADEON_TV_PRE_DAC_MUX_CNTL, tmp);
++
++ mdelay(3);
++ tmp = RREG32(RADEON_TV_DAC_CNTL);
++ if (tmp & RADEON_TV_DAC_GDACDET) {
++ found = true;
++ DRM_DEBUG("S-video TV connection detected\n");
++ } else if ((tmp & RADEON_TV_DAC_BDACDET) != 0) {
++ found = true;
++ DRM_DEBUG("Composite TV connection detected\n");
++ }
++
++ WREG32(RADEON_TV_PRE_DAC_MUX_CNTL, tv_pre_dac_mux_cntl);
++ WREG32(RADEON_TV_DAC_CNTL, tv_dac_cntl);
++ WREG32(RADEON_TV_MASTER_CNTL, tv_master_cntl);
++ WREG32(RADEON_DAC_CNTL2, dac_cntl2);
++ return found;
++}
++
+ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder *encoder,
+ struct drm_connector *connector)
+ {
+@@ -928,9 +1147,29 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder
+ uint32_t crtc2_gen_cntl, tv_dac_cntl, dac_cntl2, dac_ext_cntl;
+ uint32_t disp_hw_debug, disp_output_cntl, gpiopad_a, pixclks_cntl, tmp;
+ enum drm_connector_status found = connector_status_disconnected;
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
+ bool color = true;
+
+- /* FIXME tv */
++ if (connector->connector_type == DRM_MODE_CONNECTOR_SVIDEO ||
++ connector->connector_type == DRM_MODE_CONNECTOR_Composite ||
++ connector->connector_type == DRM_MODE_CONNECTOR_9PinDIN) {
++ bool tv_detect;
++
++ if (radeon_encoder->active_device && !(radeon_encoder->active_device & ATOM_DEVICE_TV_SUPPORT))
++ return connector_status_disconnected;
++
++ tv_detect = radeon_legacy_tv_detect(encoder, connector);
++ if (tv_detect && tv_dac)
++ found = connector_status_connected;
++ return found;
++ }
++
++ /* don't probe if the encoder is being used for something else not CRT related */
++ if (radeon_encoder->active_device && !(radeon_encoder->active_device & ATOM_DEVICE_CRT_SUPPORT)) {
++ DRM_INFO("not detecting due to %08x\n", radeon_encoder->active_device);
++ return connector_status_disconnected;
++ }
+
+ /* save the regs we need */
+ pixclks_cntl = RREG32_PLL(RADEON_PIXCLKS_CNTL);
+@@ -1013,8 +1252,7 @@ static enum drm_connector_status radeon_legacy_tv_dac_detect(struct drm_encoder
+ }
+ WREG32_PLL(RADEON_PIXCLKS_CNTL, pixclks_cntl);
+
+- /* return found; */
+- return connector_status_disconnected;
++ return found;
+
+ }
+
+@@ -1025,6 +1263,7 @@ static const struct drm_encoder_helper_funcs radeon_legacy_tv_dac_helper_funcs =
+ .mode_set = radeon_legacy_tv_dac_mode_set,
+ .commit = radeon_legacy_tv_dac_commit,
+ .detect = radeon_legacy_tv_dac_detect,
++ .disable = radeon_legacy_encoder_disable,
+ };
+
+
+@@ -1032,6 +1271,30 @@ static const struct drm_encoder_funcs radeon_legacy_tv_dac_enc_funcs = {
+ .destroy = radeon_enc_destroy,
+ };
+
++
++static struct radeon_encoder_int_tmds *radeon_legacy_get_tmds_info(struct radeon_encoder *encoder)
++{
++ struct drm_device *dev = encoder->base.dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_encoder_int_tmds *tmds = NULL;
++ bool ret;
++
++ tmds = kzalloc(sizeof(struct radeon_encoder_int_tmds), GFP_KERNEL);
++
++ if (!tmds)
++ return NULL;
++
++ if (rdev->is_atom_bios)
++ ret = radeon_atombios_get_tmds_info(encoder, tmds);
++ else
++ ret = radeon_legacy_get_tmds_info_from_combios(encoder, tmds);
++
++ if (ret == false)
++ radeon_legacy_get_tmds_info_from_table(encoder, tmds);
++
++ return tmds;
++}
++
+ void
+ radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t supported_device)
+ {
+@@ -1078,10 +1341,7 @@ radeon_add_legacy_encoder(struct drm_device *dev, uint32_t encoder_id, uint32_t
+ case ENCODER_OBJECT_ID_INTERNAL_TMDS1:
+ drm_encoder_init(dev, encoder, &radeon_legacy_tmds_int_enc_funcs, DRM_MODE_ENCODER_TMDS);
+ drm_encoder_helper_add(encoder, &radeon_legacy_tmds_int_helper_funcs);
+- if (rdev->is_atom_bios)
+- radeon_encoder->enc_priv = radeon_atombios_get_tmds_info(radeon_encoder);
+- else
+- radeon_encoder->enc_priv = radeon_combios_get_tmds_info(radeon_encoder);
++ radeon_encoder->enc_priv = radeon_legacy_get_tmds_info(radeon_encoder);
+ break;
+ case ENCODER_OBJECT_ID_INTERNAL_DAC1:
+ drm_encoder_init(dev, encoder, &radeon_legacy_primary_dac_enc_funcs, DRM_MODE_ENCODER_DAC);
+diff --git a/drivers/gpu/drm/radeon/radeon_legacy_tv.c b/drivers/gpu/drm/radeon/radeon_legacy_tv.c
+new file mode 100644
+index 0000000..3a12bb0
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/radeon_legacy_tv.c
+@@ -0,0 +1,904 @@
++#include "drmP.h"
++#include "drm_crtc_helper.h"
++#include "radeon.h"
++
++/*
++ * Integrated TV out support based on the GATOS code by
++ * Federico Ulivi <fulivi@lycos.com>
++ */
++
++
++/*
++ * Limits of h/v positions (hPos & vPos)
++ */
++#define MAX_H_POSITION 5 /* Range: [-5..5], negative is on the left, 0 is default, positive is on the right */
++#define MAX_V_POSITION 5 /* Range: [-5..5], negative is up, 0 is default, positive is down */
++
++/*
++ * Unit for hPos (in TV clock periods)
++ */
++#define H_POS_UNIT 10
++
++/*
++ * Indexes in h. code timing table for horizontal line position adjustment
++ */
++#define H_TABLE_POS1 6
++#define H_TABLE_POS2 8
++
++/*
++ * Limits of hor. size (hSize)
++ */
++#define MAX_H_SIZE 5 /* Range: [-5..5], negative is smaller, positive is larger */
++
++/* tv standard constants */
++#define NTSC_TV_CLOCK_T 233
++#define NTSC_TV_VFTOTAL 1
++#define NTSC_TV_LINES_PER_FRAME 525
++#define NTSC_TV_ZERO_H_SIZE 479166
++#define NTSC_TV_H_SIZE_UNIT 9478
++
++#define PAL_TV_CLOCK_T 188
++#define PAL_TV_VFTOTAL 3
++#define PAL_TV_LINES_PER_FRAME 625
++#define PAL_TV_ZERO_H_SIZE 473200
++#define PAL_TV_H_SIZE_UNIT 9360
++
++/* tv pll setting for 27 mhz ref clk */
++#define NTSC_TV_PLL_M_27 22
++#define NTSC_TV_PLL_N_27 175
++#define NTSC_TV_PLL_P_27 5
++
++#define PAL_TV_PLL_M_27 113
++#define PAL_TV_PLL_N_27 668
++#define PAL_TV_PLL_P_27 3
++
++/* tv pll setting for 14 mhz ref clk */
++#define NTSC_TV_PLL_M_14 33
++#define NTSC_TV_PLL_N_14 693
++#define NTSC_TV_PLL_P_14 7
++
++#define VERT_LEAD_IN_LINES 2
++#define FRAC_BITS 0xe
++#define FRAC_MASK 0x3fff
++
++struct radeon_tv_mode_constants {
++ uint16_t hor_resolution;
++ uint16_t ver_resolution;
++ enum radeon_tv_std standard;
++ uint16_t hor_total;
++ uint16_t ver_total;
++ uint16_t hor_start;
++ uint16_t hor_syncstart;
++ uint16_t ver_syncstart;
++ unsigned def_restart;
++ uint16_t crtcPLL_N;
++ uint8_t crtcPLL_M;
++ uint8_t crtcPLL_post_div;
++ unsigned pix_to_tv;
++};
++
++static const uint16_t hor_timing_NTSC[] = {
++ 0x0007,
++ 0x003f,
++ 0x0263,
++ 0x0a24,
++ 0x2a6b,
++ 0x0a36,
++ 0x126d, /* H_TABLE_POS1 */
++ 0x1bfe,
++ 0x1a8f, /* H_TABLE_POS2 */
++ 0x1ec7,
++ 0x3863,
++ 0x1bfe,
++ 0x1bfe,
++ 0x1a2a,
++ 0x1e95,
++ 0x0e31,
++ 0x201b,
++ 0
++};
++
++static const uint16_t vert_timing_NTSC[] = {
++ 0x2001,
++ 0x200d,
++ 0x1006,
++ 0x0c06,
++ 0x1006,
++ 0x1818,
++ 0x21e3,
++ 0x1006,
++ 0x0c06,
++ 0x1006,
++ 0x1817,
++ 0x21d4,
++ 0x0002,
++ 0
++};
++
++static const uint16_t hor_timing_PAL[] = {
++ 0x0007,
++ 0x0058,
++ 0x027c,
++ 0x0a31,
++ 0x2a77,
++ 0x0a95,
++ 0x124f, /* H_TABLE_POS1 */
++ 0x1bfe,
++ 0x1b22, /* H_TABLE_POS2 */
++ 0x1ef9,
++ 0x387c,
++ 0x1bfe,
++ 0x1bfe,
++ 0x1b31,
++ 0x1eb5,
++ 0x0e43,
++ 0x201b,
++ 0
++};
++
++static const uint16_t vert_timing_PAL[] = {
++ 0x2001,
++ 0x200c,
++ 0x1005,
++ 0x0c05,
++ 0x1005,
++ 0x1401,
++ 0x1821,
++ 0x2240,
++ 0x1005,
++ 0x0c05,
++ 0x1005,
++ 0x1401,
++ 0x1822,
++ 0x2230,
++ 0x0002,
++ 0
++};
++
++/**********************************************************************
++ *
++ * availableModes
++ *
++ * Table of all allowed modes for tv output
++ *
++ **********************************************************************/
++static const struct radeon_tv_mode_constants available_tv_modes[] = {
++ { /* NTSC timing for 27 Mhz ref clk */
++ 800, /* horResolution */
++ 600, /* verResolution */
++ TV_STD_NTSC, /* standard */
++ 990, /* horTotal */
++ 740, /* verTotal */
++ 813, /* horStart */
++ 824, /* horSyncStart */
++ 632, /* verSyncStart */
++ 625592, /* defRestart */
++ 592, /* crtcPLL_N */
++ 91, /* crtcPLL_M */
++ 4, /* crtcPLL_postDiv */
++ 1022, /* pixToTV */
++ },
++ { /* PAL timing for 27 Mhz ref clk */
++ 800, /* horResolution */
++ 600, /* verResolution */
++ TV_STD_PAL, /* standard */
++ 1144, /* horTotal */
++ 706, /* verTotal */
++ 812, /* horStart */
++ 824, /* horSyncStart */
++ 669, /* verSyncStart */
++ 696700, /* defRestart */
++ 1382, /* crtcPLL_N */
++ 231, /* crtcPLL_M */
++ 4, /* crtcPLL_postDiv */
++ 759, /* pixToTV */
++ },
++ { /* NTSC timing for 14 Mhz ref clk */
++ 800, /* horResolution */
++ 600, /* verResolution */
++ TV_STD_NTSC, /* standard */
++ 1018, /* horTotal */
++ 727, /* verTotal */
++ 813, /* horStart */
++ 840, /* horSyncStart */
++ 633, /* verSyncStart */
++ 630627, /* defRestart */
++ 347, /* crtcPLL_N */
++ 14, /* crtcPLL_M */
++ 8, /* crtcPLL_postDiv */
++ 1022, /* pixToTV */
++ },
++};
++
++#define N_AVAILABLE_MODES ARRAY_SIZE(available_tv_modes)
++
++static const struct radeon_tv_mode_constants *radeon_legacy_tv_get_std_mode(struct radeon_encoder *radeon_encoder,
++ uint16_t *pll_ref_freq)
++{
++ struct drm_device *dev = radeon_encoder->base.dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_crtc *radeon_crtc;
++ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
++ const struct radeon_tv_mode_constants *const_ptr;
++ struct radeon_pll *pll;
++
++ radeon_crtc = to_radeon_crtc(radeon_encoder->base.crtc);
++ if (radeon_crtc->crtc_id == 1)
++ pll = &rdev->clock.p2pll;
++ else
++ pll = &rdev->clock.p1pll;
++
++ if (pll_ref_freq)
++ *pll_ref_freq = pll->reference_freq;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M) {
++ if (pll->reference_freq == 2700)
++ const_ptr = &available_tv_modes[0];
++ else
++ const_ptr = &available_tv_modes[2];
++ } else {
++ if (pll->reference_freq == 2700)
++ const_ptr = &available_tv_modes[1];
++ else
++ const_ptr = &available_tv_modes[1]; /* FIX ME */
++ }
++ return const_ptr;
++}
++
++static long YCOEF_value[5] = { 2, 2, 0, 4, 0 };
++static long YCOEF_EN_value[5] = { 1, 1, 0, 1, 0 };
++static long SLOPE_value[5] = { 1, 2, 2, 4, 8 };
++static long SLOPE_limit[5] = { 6, 5, 4, 3, 2 };
++
++static void radeon_wait_pll_lock(struct drm_encoder *encoder, unsigned n_tests,
++ unsigned n_wait_loops, unsigned cnt_threshold)
++{
++ struct drm_device *dev = encoder->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ uint32_t save_pll_test;
++ unsigned int i, j;
++
++ WREG32(RADEON_TEST_DEBUG_MUX, (RREG32(RADEON_TEST_DEBUG_MUX) & 0xffff60ff) | 0x100);
++ save_pll_test = RREG32_PLL(RADEON_PLL_TEST_CNTL);
++ WREG32_PLL(RADEON_PLL_TEST_CNTL, save_pll_test & ~RADEON_PLL_MASK_READ_B);
++
++ WREG8(RADEON_CLOCK_CNTL_INDEX, RADEON_PLL_TEST_CNTL);
++ for (i = 0; i < n_tests; i++) {
++ WREG8(RADEON_CLOCK_CNTL_DATA + 3, 0);
++ for (j = 0; j < n_wait_loops; j++)
++ if (RREG8(RADEON_CLOCK_CNTL_DATA + 3) >= cnt_threshold)
++ break;
++ }
++ WREG32_PLL(RADEON_PLL_TEST_CNTL, save_pll_test);
++ WREG32(RADEON_TEST_DEBUG_MUX, RREG32(RADEON_TEST_DEBUG_MUX) & 0xffffe0ff);
++}
++
++
++static void radeon_legacy_tv_write_fifo(struct radeon_encoder *radeon_encoder,
++ uint16_t addr, uint32_t value)
++{
++ struct drm_device *dev = radeon_encoder->base.dev;
++ struct radeon_device *rdev = dev->dev_private;
++ uint32_t tmp;
++ int i = 0;
++
++ WREG32(RADEON_TV_HOST_WRITE_DATA, value);
++
++ WREG32(RADEON_TV_HOST_RD_WT_CNTL, addr);
++ WREG32(RADEON_TV_HOST_RD_WT_CNTL, addr | RADEON_HOST_FIFO_WT);
++
++ do {
++ tmp = RREG32(RADEON_TV_HOST_RD_WT_CNTL);
++ if ((tmp & RADEON_HOST_FIFO_WT_ACK) == 0)
++ break;
++ i++;
++ } while (i < 10000);
++ WREG32(RADEON_TV_HOST_RD_WT_CNTL, 0);
++}
++
++#if 0 /* included for completeness */
++static uint32_t radeon_legacy_tv_read_fifo(struct radeon_encoder *radeon_encoder, uint16_t addr)
++{
++ struct drm_device *dev = radeon_encoder->base.dev;
++ struct radeon_device *rdev = dev->dev_private;
++ uint32_t tmp;
++ int i = 0;
++
++ WREG32(RADEON_TV_HOST_RD_WT_CNTL, addr);
++ WREG32(RADEON_TV_HOST_RD_WT_CNTL, addr | RADEON_HOST_FIFO_RD);
++
++ do {
++ tmp = RREG32(RADEON_TV_HOST_RD_WT_CNTL);
++ if ((tmp & RADEON_HOST_FIFO_RD_ACK) == 0)
++ break;
++ i++;
++ } while (i < 10000);
++ WREG32(RADEON_TV_HOST_RD_WT_CNTL, 0);
++ return RREG32(RADEON_TV_HOST_READ_DATA);
++}
++#endif
++
++static uint16_t radeon_get_htiming_tables_addr(uint32_t tv_uv_adr)
++{
++ uint16_t h_table;
++
++ switch ((tv_uv_adr & RADEON_HCODE_TABLE_SEL_MASK) >> RADEON_HCODE_TABLE_SEL_SHIFT) {
++ case 0:
++ h_table = RADEON_TV_MAX_FIFO_ADDR_INTERNAL;
++ break;
++ case 1:
++ h_table = ((tv_uv_adr & RADEON_TABLE1_BOT_ADR_MASK) >> RADEON_TABLE1_BOT_ADR_SHIFT) * 2;
++ break;
++ case 2:
++ h_table = ((tv_uv_adr & RADEON_TABLE3_TOP_ADR_MASK) >> RADEON_TABLE3_TOP_ADR_SHIFT) * 2;
++ break;
++ default:
++ h_table = 0;
++ break;
++ }
++ return h_table;
++}
++
++static uint16_t radeon_get_vtiming_tables_addr(uint32_t tv_uv_adr)
++{
++ uint16_t v_table;
++
++ switch ((tv_uv_adr & RADEON_VCODE_TABLE_SEL_MASK) >> RADEON_VCODE_TABLE_SEL_SHIFT) {
++ case 0:
++ v_table = ((tv_uv_adr & RADEON_MAX_UV_ADR_MASK) >> RADEON_MAX_UV_ADR_SHIFT) * 2 + 1;
++ break;
++ case 1:
++ v_table = ((tv_uv_adr & RADEON_TABLE1_BOT_ADR_MASK) >> RADEON_TABLE1_BOT_ADR_SHIFT) * 2 + 1;
++ break;
++ case 2:
++ v_table = ((tv_uv_adr & RADEON_TABLE3_TOP_ADR_MASK) >> RADEON_TABLE3_TOP_ADR_SHIFT) * 2 + 1;
++ break;
++ default:
++ v_table = 0;
++ break;
++ }
++ return v_table;
++}
++
++static void radeon_restore_tv_timing_tables(struct radeon_encoder *radeon_encoder)
++{
++ struct drm_device *dev = radeon_encoder->base.dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
++ uint16_t h_table, v_table;
++ uint32_t tmp;
++ int i;
++
++ WREG32(RADEON_TV_UV_ADR, tv_dac->tv.tv_uv_adr);
++ h_table = radeon_get_htiming_tables_addr(tv_dac->tv.tv_uv_adr);
++ v_table = radeon_get_vtiming_tables_addr(tv_dac->tv.tv_uv_adr);
++
++ for (i = 0; i < MAX_H_CODE_TIMING_LEN; i += 2, h_table--) {
++ tmp = ((uint32_t)tv_dac->tv.h_code_timing[i] << 14) | ((uint32_t)tv_dac->tv.h_code_timing[i+1]);
++ radeon_legacy_tv_write_fifo(radeon_encoder, h_table, tmp);
++ if (tv_dac->tv.h_code_timing[i] == 0 || tv_dac->tv.h_code_timing[i + 1] == 0)
++ break;
++ }
++ for (i = 0; i < MAX_V_CODE_TIMING_LEN; i += 2, v_table++) {
++ tmp = ((uint32_t)tv_dac->tv.v_code_timing[i+1] << 14) | ((uint32_t)tv_dac->tv.v_code_timing[i]);
++ radeon_legacy_tv_write_fifo(radeon_encoder, v_table, tmp);
++ if (tv_dac->tv.v_code_timing[i] == 0 || tv_dac->tv.v_code_timing[i + 1] == 0)
++ break;
++ }
++}
++
++static void radeon_legacy_write_tv_restarts(struct radeon_encoder *radeon_encoder)
++{
++ struct drm_device *dev = radeon_encoder->base.dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
++ WREG32(RADEON_TV_FRESTART, tv_dac->tv.frestart);
++ WREG32(RADEON_TV_HRESTART, tv_dac->tv.hrestart);
++ WREG32(RADEON_TV_VRESTART, tv_dac->tv.vrestart);
++}
++
++static bool radeon_legacy_tv_init_restarts(struct drm_encoder *encoder)
++{
++ struct drm_device *dev = encoder->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
++ struct radeon_crtc *radeon_crtc;
++ int restart;
++ unsigned int h_total, v_total, f_total;
++ int v_offset, h_offset;
++ u16 p1, p2, h_inc;
++ bool h_changed;
++ const struct radeon_tv_mode_constants *const_ptr;
++ struct radeon_pll *pll;
++
++ radeon_crtc = to_radeon_crtc(radeon_encoder->base.crtc);
++ if (radeon_crtc->crtc_id == 1)
++ pll = &rdev->clock.p2pll;
++ else
++ pll = &rdev->clock.p1pll;
++
++ const_ptr = radeon_legacy_tv_get_std_mode(radeon_encoder, NULL);
++ if (!const_ptr)
++ return false;
++
++ h_total = const_ptr->hor_total;
++ v_total = const_ptr->ver_total;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M ||
++ tv_dac->tv_std == TV_STD_PAL_60)
++ f_total = NTSC_TV_VFTOTAL + 1;
++ else
++ f_total = PAL_TV_VFTOTAL + 1;
++
++ /* adjust positions 1&2 in hor. cod timing table */
++ h_offset = tv_dac->h_pos * H_POS_UNIT;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M) {
++ h_offset -= 50;
++ p1 = hor_timing_NTSC[H_TABLE_POS1];
++ p2 = hor_timing_NTSC[H_TABLE_POS2];
++ } else {
++ p1 = hor_timing_PAL[H_TABLE_POS1];
++ p2 = hor_timing_PAL[H_TABLE_POS2];
++ }
++
++ p1 = (u16)((int)p1 + h_offset);
++ p2 = (u16)((int)p2 - h_offset);
++
++ h_changed = (p1 != tv_dac->tv.h_code_timing[H_TABLE_POS1] ||
++ p2 != tv_dac->tv.h_code_timing[H_TABLE_POS2]);
++
++ tv_dac->tv.h_code_timing[H_TABLE_POS1] = p1;
++ tv_dac->tv.h_code_timing[H_TABLE_POS2] = p2;
++
++ /* Convert hOffset from n. of TV clock periods to n. of CRTC clock periods (CRTC pixels) */
++ h_offset = (h_offset * (int)(const_ptr->pix_to_tv)) / 1000;
++
++ /* adjust restart */
++ restart = const_ptr->def_restart;
++
++ /*
++ * convert v_pos TV lines to n. of CRTC pixels
++ */
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M ||
++ tv_dac->tv_std == TV_STD_PAL_60)
++ v_offset = ((int)(v_total * h_total) * 2 * tv_dac->v_pos) / (int)(NTSC_TV_LINES_PER_FRAME);
++ else
++ v_offset = ((int)(v_total * h_total) * 2 * tv_dac->v_pos) / (int)(PAL_TV_LINES_PER_FRAME);
++
++ restart -= v_offset + h_offset;
++
++ DRM_DEBUG("compute_restarts: def = %u h = %d v = %d, p1 = %04x, p2 = %04x, restart = %d\n",
++ const_ptr->def_restart, tv_dac->h_pos, tv_dac->v_pos, p1, p2, restart);
++
++ tv_dac->tv.hrestart = restart % h_total;
++ restart /= h_total;
++ tv_dac->tv.vrestart = restart % v_total;
++ restart /= v_total;
++ tv_dac->tv.frestart = restart % f_total;
++
++ DRM_DEBUG("compute_restart: F/H/V=%u,%u,%u\n",
++ (unsigned)tv_dac->tv.frestart,
++ (unsigned)tv_dac->tv.vrestart,
++ (unsigned)tv_dac->tv.hrestart);
++
++ /* compute h_inc from hsize */
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M)
++ h_inc = (u16)((int)(const_ptr->hor_resolution * 4096 * NTSC_TV_CLOCK_T) /
++ (tv_dac->h_size * (int)(NTSC_TV_H_SIZE_UNIT) + (int)(NTSC_TV_ZERO_H_SIZE)));
++ else
++ h_inc = (u16)((int)(const_ptr->hor_resolution * 4096 * PAL_TV_CLOCK_T) /
++ (tv_dac->h_size * (int)(PAL_TV_H_SIZE_UNIT) + (int)(PAL_TV_ZERO_H_SIZE)));
++
++ tv_dac->tv.timing_cntl = (tv_dac->tv.timing_cntl & ~RADEON_H_INC_MASK) |
++ ((u32)h_inc << RADEON_H_INC_SHIFT);
++
++ DRM_DEBUG("compute_restart: h_size = %d h_inc = %d\n", tv_dac->h_size, h_inc);
++
++ return h_changed;
++}
++
++void radeon_legacy_tv_mode_set(struct drm_encoder *encoder,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode)
++{
++ struct drm_device *dev = encoder->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ struct radeon_encoder_tv_dac *tv_dac = radeon_encoder->enc_priv;
++ const struct radeon_tv_mode_constants *const_ptr;
++ struct radeon_crtc *radeon_crtc;
++ int i;
++ uint16_t pll_ref_freq;
++ uint32_t vert_space, flicker_removal, tmp;
++ uint32_t tv_master_cntl, tv_rgb_cntl, tv_dac_cntl;
++ uint32_t tv_modulator_cntl1, tv_modulator_cntl2;
++ uint32_t tv_vscaler_cntl1, tv_vscaler_cntl2;
++ uint32_t tv_pll_cntl, tv_pll_cntl1, tv_ftotal;
++ uint32_t tv_y_fall_cntl, tv_y_rise_cntl, tv_y_saw_tooth_cntl;
++ uint32_t m, n, p;
++ const uint16_t *hor_timing;
++ const uint16_t *vert_timing;
++
++ const_ptr = radeon_legacy_tv_get_std_mode(radeon_encoder, &pll_ref_freq);
++ if (!const_ptr)
++ return;
++
++ radeon_crtc = to_radeon_crtc(encoder->crtc);
++
++ tv_master_cntl = (RADEON_VIN_ASYNC_RST |
++ RADEON_CRT_FIFO_CE_EN |
++ RADEON_TV_FIFO_CE_EN |
++ RADEON_TV_ON);
++
++ if (!ASIC_IS_R300(rdev))
++ tv_master_cntl |= RADEON_TVCLK_ALWAYS_ONb;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J)
++ tv_master_cntl |= RADEON_RESTART_PHASE_FIX;
++
++ tv_modulator_cntl1 = (RADEON_SLEW_RATE_LIMIT |
++ RADEON_SYNC_TIP_LEVEL |
++ RADEON_YFLT_EN |
++ RADEON_UVFLT_EN |
++ (6 << RADEON_CY_FILT_BLEND_SHIFT));
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J) {
++ tv_modulator_cntl1 |= (0x46 << RADEON_SET_UP_LEVEL_SHIFT) |
++ (0x3b << RADEON_BLANK_LEVEL_SHIFT);
++ tv_modulator_cntl2 = (-111 & RADEON_TV_U_BURST_LEVEL_MASK) |
++ ((0 & RADEON_TV_V_BURST_LEVEL_MASK) << RADEON_TV_V_BURST_LEVEL_SHIFT);
++ } else if (tv_dac->tv_std == TV_STD_SCART_PAL) {
++ tv_modulator_cntl1 |= RADEON_ALT_PHASE_EN;
++ tv_modulator_cntl2 = (0 & RADEON_TV_U_BURST_LEVEL_MASK) |
++ ((0 & RADEON_TV_V_BURST_LEVEL_MASK) << RADEON_TV_V_BURST_LEVEL_SHIFT);
++ } else {
++ tv_modulator_cntl1 |= RADEON_ALT_PHASE_EN |
++ (0x3b << RADEON_SET_UP_LEVEL_SHIFT) |
++ (0x3b << RADEON_BLANK_LEVEL_SHIFT);
++ tv_modulator_cntl2 = (-78 & RADEON_TV_U_BURST_LEVEL_MASK) |
++ ((62 & RADEON_TV_V_BURST_LEVEL_MASK) << RADEON_TV_V_BURST_LEVEL_SHIFT);
++ }
++
++
++ tv_rgb_cntl = (RADEON_RGB_DITHER_EN
++ | RADEON_TVOUT_SCALE_EN
++ | (0x0b << RADEON_UVRAM_READ_MARGIN_SHIFT)
++ | (0x07 << RADEON_FIFORAM_FFMACRO_READ_MARGIN_SHIFT)
++ | RADEON_RGB_ATTEN_SEL(0x3)
++ | RADEON_RGB_ATTEN_VAL(0xc));
++
++ if (radeon_crtc->crtc_id == 1)
++ tv_rgb_cntl |= RADEON_RGB_SRC_SEL_CRTC2;
++ else {
++ if (radeon_crtc->rmx_type != RMX_OFF)
++ tv_rgb_cntl |= RADEON_RGB_SRC_SEL_RMX;
++ else
++ tv_rgb_cntl |= RADEON_RGB_SRC_SEL_CRTC1;
++ }
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M ||
++ tv_dac->tv_std == TV_STD_PAL_60)
++ vert_space = const_ptr->ver_total * 2 * 10000 / NTSC_TV_LINES_PER_FRAME;
++ else
++ vert_space = const_ptr->ver_total * 2 * 10000 / PAL_TV_LINES_PER_FRAME;
++
++ tmp = RREG32(RADEON_TV_VSCALER_CNTL1);
++ tmp &= 0xe3ff0000;
++ tmp |= (vert_space * (1 << FRAC_BITS) / 10000);
++ tv_vscaler_cntl1 = tmp;
++
++ if (pll_ref_freq == 2700)
++ tv_vscaler_cntl1 |= RADEON_RESTART_FIELD;
++
++ if (const_ptr->hor_resolution == 1024)
++ tv_vscaler_cntl1 |= (4 << RADEON_Y_DEL_W_SIG_SHIFT);
++ else
++ tv_vscaler_cntl1 |= (2 << RADEON_Y_DEL_W_SIG_SHIFT);
++
++ /* scale up for int divide */
++ tmp = const_ptr->ver_total * 2 * 1000;
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M ||
++ tv_dac->tv_std == TV_STD_PAL_60) {
++ tmp /= NTSC_TV_LINES_PER_FRAME;
++ } else {
++ tmp /= PAL_TV_LINES_PER_FRAME;
++ }
++ flicker_removal = (tmp + 500) / 1000;
++
++ if (flicker_removal < 3)
++ flicker_removal = 3;
++ for (i = 0; i < 6; ++i) {
++ if (flicker_removal == SLOPE_limit[i])
++ break;
++ }
++
++ tv_y_saw_tooth_cntl = (vert_space * SLOPE_value[i] * (1 << (FRAC_BITS - 1)) +
++ 5001) / 10000 / 8 | ((SLOPE_value[i] *
++ (1 << (FRAC_BITS - 1)) / 8) << 16);
++ tv_y_fall_cntl =
++ (YCOEF_EN_value[i] << 17) | ((YCOEF_value[i] * (1 << 8) / 8) << 24) |
++ RADEON_Y_FALL_PING_PONG | (272 * SLOPE_value[i] / 8) * (1 << (FRAC_BITS - 1)) /
++ 1024;
++ tv_y_rise_cntl = RADEON_Y_RISE_PING_PONG|
++ (flicker_removal * 1024 - 272) * SLOPE_value[i] / 8 * (1 << (FRAC_BITS - 1)) / 1024;
++
++ tv_vscaler_cntl2 = RREG32(RADEON_TV_VSCALER_CNTL2) & 0x00fffff0;
++ tv_vscaler_cntl2 |= (0x10 << 24) |
++ RADEON_DITHER_MODE |
++ RADEON_Y_OUTPUT_DITHER_EN |
++ RADEON_UV_OUTPUT_DITHER_EN |
++ RADEON_UV_TO_BUF_DITHER_EN;
++
++ tmp = (tv_vscaler_cntl1 >> RADEON_UV_INC_SHIFT) & RADEON_UV_INC_MASK;
++ tmp = ((16384 * 256 * 10) / tmp + 5) / 10;
++ tmp = (tmp << RADEON_UV_OUTPUT_POST_SCALE_SHIFT) | 0x000b0000;
++ tv_dac->tv.timing_cntl = tmp;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M ||
++ tv_dac->tv_std == TV_STD_PAL_60)
++ tv_dac_cntl = tv_dac->ntsc_tvdac_adj;
++ else
++ tv_dac_cntl = tv_dac->pal_tvdac_adj;
++
++ tv_dac_cntl |= RADEON_TV_DAC_NBLANK | RADEON_TV_DAC_NHOLD;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J)
++ tv_dac_cntl |= RADEON_TV_DAC_STD_NTSC;
++ else
++ tv_dac_cntl |= RADEON_TV_DAC_STD_PAL;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J) {
++ if (pll_ref_freq == 2700) {
++ m = NTSC_TV_PLL_M_27;
++ n = NTSC_TV_PLL_N_27;
++ p = NTSC_TV_PLL_P_27;
++ } else {
++ m = NTSC_TV_PLL_M_14;
++ n = NTSC_TV_PLL_N_14;
++ p = NTSC_TV_PLL_P_14;
++ }
++ } else {
++ if (pll_ref_freq == 2700) {
++ m = PAL_TV_PLL_M_27;
++ n = PAL_TV_PLL_N_27;
++ p = PAL_TV_PLL_P_27;
++ } else {
++ m = PAL_TV_PLL_M_27;
++ n = PAL_TV_PLL_N_27;
++ p = PAL_TV_PLL_P_27;
++ }
++ }
++
++ tv_pll_cntl = (m & RADEON_TV_M0LO_MASK) |
++ (((m >> 8) & RADEON_TV_M0HI_MASK) << RADEON_TV_M0HI_SHIFT) |
++ ((n & RADEON_TV_N0LO_MASK) << RADEON_TV_N0LO_SHIFT) |
++ (((n >> 9) & RADEON_TV_N0HI_MASK) << RADEON_TV_N0HI_SHIFT) |
++ ((p & RADEON_TV_P_MASK) << RADEON_TV_P_SHIFT);
++
++ tv_pll_cntl1 = (((4 & RADEON_TVPCP_MASK) << RADEON_TVPCP_SHIFT) |
++ ((4 & RADEON_TVPVG_MASK) << RADEON_TVPVG_SHIFT) |
++ ((1 & RADEON_TVPDC_MASK) << RADEON_TVPDC_SHIFT) |
++ RADEON_TVCLK_SRC_SEL_TVPLL |
++ RADEON_TVPLL_TEST_DIS);
++
++ tv_dac->tv.tv_uv_adr = 0xc8;
++
++ if (tv_dac->tv_std == TV_STD_NTSC ||
++ tv_dac->tv_std == TV_STD_NTSC_J ||
++ tv_dac->tv_std == TV_STD_PAL_M ||
++ tv_dac->tv_std == TV_STD_PAL_60) {
++ tv_ftotal = NTSC_TV_VFTOTAL;
++ hor_timing = hor_timing_NTSC;
++ vert_timing = vert_timing_NTSC;
++ } else {
++ hor_timing = hor_timing_PAL;
++ vert_timing = vert_timing_PAL;
++ tv_ftotal = PAL_TV_VFTOTAL;
++ }
++
++ for (i = 0; i < MAX_H_CODE_TIMING_LEN; i++) {
++ if ((tv_dac->tv.h_code_timing[i] = hor_timing[i]) == 0)
++ break;
++ }
++
++ for (i = 0; i < MAX_V_CODE_TIMING_LEN; i++) {
++ if ((tv_dac->tv.v_code_timing[i] = vert_timing[i]) == 0)
++ break;
++ }
++
++ radeon_legacy_tv_init_restarts(encoder);
++
++ /* play with DAC_CNTL */
++ /* play with GPIOPAD_A */
++ /* DISP_OUTPUT_CNTL */
++ /* use reference freq */
++
++ /* program the TV registers */
++ WREG32(RADEON_TV_MASTER_CNTL, (tv_master_cntl | RADEON_TV_ASYNC_RST |
++ RADEON_CRT_ASYNC_RST | RADEON_TV_FIFO_ASYNC_RST));
++
++ tmp = RREG32(RADEON_TV_DAC_CNTL);
++ tmp &= ~RADEON_TV_DAC_NBLANK;
++ tmp |= RADEON_TV_DAC_BGSLEEP |
++ RADEON_TV_DAC_RDACPD |
++ RADEON_TV_DAC_GDACPD |
++ RADEON_TV_DAC_BDACPD;
++ WREG32(RADEON_TV_DAC_CNTL, tmp);
++
++ /* TV PLL */
++ WREG32_PLL_P(RADEON_TV_PLL_CNTL1, 0, ~RADEON_TVCLK_SRC_SEL_TVPLL);
++ WREG32_PLL(RADEON_TV_PLL_CNTL, tv_pll_cntl);
++ WREG32_PLL_P(RADEON_TV_PLL_CNTL1, RADEON_TVPLL_RESET, ~RADEON_TVPLL_RESET);
++
++ radeon_wait_pll_lock(encoder, 200, 800, 135);
++
++ WREG32_PLL_P(RADEON_TV_PLL_CNTL1, 0, ~RADEON_TVPLL_RESET);
++
++ radeon_wait_pll_lock(encoder, 300, 160, 27);
++ radeon_wait_pll_lock(encoder, 200, 800, 135);
++
++ WREG32_PLL_P(RADEON_TV_PLL_CNTL1, 0, ~0xf);
++ WREG32_PLL_P(RADEON_TV_PLL_CNTL1, RADEON_TVCLK_SRC_SEL_TVPLL, ~RADEON_TVCLK_SRC_SEL_TVPLL);
++
++ WREG32_PLL_P(RADEON_TV_PLL_CNTL1, (1 << RADEON_TVPDC_SHIFT), ~RADEON_TVPDC_MASK);
++ WREG32_PLL_P(RADEON_TV_PLL_CNTL1, 0, ~RADEON_TVPLL_SLEEP);
++
++ /* TV HV */
++ WREG32(RADEON_TV_RGB_CNTL, tv_rgb_cntl);
++ WREG32(RADEON_TV_HTOTAL, const_ptr->hor_total - 1);
++ WREG32(RADEON_TV_HDISP, const_ptr->hor_resolution - 1);
++ WREG32(RADEON_TV_HSTART, const_ptr->hor_start);
++
++ WREG32(RADEON_TV_VTOTAL, const_ptr->ver_total - 1);
++ WREG32(RADEON_TV_VDISP, const_ptr->ver_resolution - 1);
++ WREG32(RADEON_TV_FTOTAL, tv_ftotal);
++ WREG32(RADEON_TV_VSCALER_CNTL1, tv_vscaler_cntl1);
++ WREG32(RADEON_TV_VSCALER_CNTL2, tv_vscaler_cntl2);
++
++ WREG32(RADEON_TV_Y_FALL_CNTL, tv_y_fall_cntl);
++ WREG32(RADEON_TV_Y_RISE_CNTL, tv_y_rise_cntl);
++ WREG32(RADEON_TV_Y_SAW_TOOTH_CNTL, tv_y_saw_tooth_cntl);
++
++ WREG32(RADEON_TV_MASTER_CNTL, (tv_master_cntl | RADEON_TV_ASYNC_RST |
++ RADEON_CRT_ASYNC_RST));
++
++ /* TV restarts */
++ radeon_legacy_write_tv_restarts(radeon_encoder);
++
++ /* tv timings */
++ radeon_restore_tv_timing_tables(radeon_encoder);
++
++ WREG32(RADEON_TV_MASTER_CNTL, (tv_master_cntl | RADEON_TV_ASYNC_RST));
++
++ /* tv std */
++ WREG32(RADEON_TV_SYNC_CNTL, (RADEON_SYNC_PUB | RADEON_TV_SYNC_IO_DRIVE));
++ WREG32(RADEON_TV_TIMING_CNTL, tv_dac->tv.timing_cntl);
++ WREG32(RADEON_TV_MODULATOR_CNTL1, tv_modulator_cntl1);
++ WREG32(RADEON_TV_MODULATOR_CNTL2, tv_modulator_cntl2);
++ WREG32(RADEON_TV_PRE_DAC_MUX_CNTL, (RADEON_Y_RED_EN |
++ RADEON_C_GRN_EN |
++ RADEON_CMP_BLU_EN |
++ RADEON_DAC_DITHER_EN));
++
++ WREG32(RADEON_TV_CRC_CNTL, 0);
++
++ WREG32(RADEON_TV_MASTER_CNTL, tv_master_cntl);
++
++ WREG32(RADEON_TV_GAIN_LIMIT_SETTINGS, ((0x17f << RADEON_UV_GAIN_LIMIT_SHIFT) |
++ (0x5ff << RADEON_Y_GAIN_LIMIT_SHIFT)));
++ WREG32(RADEON_TV_LINEAR_GAIN_SETTINGS, ((0x100 << RADEON_UV_GAIN_SHIFT) |
++ (0x100 << RADEON_Y_GAIN_SHIFT)));
++
++ WREG32(RADEON_TV_DAC_CNTL, tv_dac_cntl);
++
++}
++
++void radeon_legacy_tv_adjust_crtc_reg(struct drm_encoder *encoder,
++ uint32_t *h_total_disp, uint32_t *h_sync_strt_wid,
++ uint32_t *v_total_disp, uint32_t *v_sync_strt_wid)
++{
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ const struct radeon_tv_mode_constants *const_ptr;
++ uint32_t tmp;
++
++ const_ptr = radeon_legacy_tv_get_std_mode(radeon_encoder, NULL);
++ if (!const_ptr)
++ return;
++
++ *h_total_disp = (((const_ptr->hor_resolution / 8) - 1) << RADEON_CRTC_H_DISP_SHIFT) |
++ (((const_ptr->hor_total / 8) - 1) << RADEON_CRTC_H_TOTAL_SHIFT);
++
++ tmp = *h_sync_strt_wid;
++ tmp &= ~(RADEON_CRTC_H_SYNC_STRT_PIX | RADEON_CRTC_H_SYNC_STRT_CHAR);
++ tmp |= (((const_ptr->hor_syncstart / 8) - 1) << RADEON_CRTC_H_SYNC_STRT_CHAR_SHIFT) |
++ (const_ptr->hor_syncstart & 7);
++ *h_sync_strt_wid = tmp;
++
++ *v_total_disp = ((const_ptr->ver_resolution - 1) << RADEON_CRTC_V_DISP_SHIFT) |
++ ((const_ptr->ver_total - 1) << RADEON_CRTC_V_TOTAL_SHIFT);
++
++ tmp = *v_sync_strt_wid;
++ tmp &= ~RADEON_CRTC_V_SYNC_STRT;
++ tmp |= ((const_ptr->ver_syncstart - 1) << RADEON_CRTC_V_SYNC_STRT_SHIFT);
++ *v_sync_strt_wid = tmp;
++}
++
++static inline int get_post_div(int value)
++{
++ int post_div;
++ switch (value) {
++ case 1: post_div = 0; break;
++ case 2: post_div = 1; break;
++ case 3: post_div = 4; break;
++ case 4: post_div = 2; break;
++ case 6: post_div = 6; break;
++ case 8: post_div = 3; break;
++ case 12: post_div = 7; break;
++ case 16:
++ default: post_div = 5; break;
++ }
++ return post_div;
++}
++
++void radeon_legacy_tv_adjust_pll1(struct drm_encoder *encoder,
++ uint32_t *htotal_cntl, uint32_t *ppll_ref_div,
++ uint32_t *ppll_div_3, uint32_t *pixclks_cntl)
++{
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ const struct radeon_tv_mode_constants *const_ptr;
++
++ const_ptr = radeon_legacy_tv_get_std_mode(radeon_encoder, NULL);
++ if (!const_ptr)
++ return;
++
++ *htotal_cntl = (const_ptr->hor_total & 0x7) | RADEON_HTOT_CNTL_VGA_EN;
++
++ *ppll_ref_div = const_ptr->crtcPLL_M;
++
++ *ppll_div_3 = (const_ptr->crtcPLL_N & 0x7ff) | (get_post_div(const_ptr->crtcPLL_post_div) << 16);
++ *pixclks_cntl &= ~(RADEON_PIX2CLK_SRC_SEL_MASK | RADEON_PIXCLK_TV_SRC_SEL);
++ *pixclks_cntl |= RADEON_PIX2CLK_SRC_SEL_P2PLLCLK;
++}
++
++void radeon_legacy_tv_adjust_pll2(struct drm_encoder *encoder,
++ uint32_t *htotal2_cntl, uint32_t *p2pll_ref_div,
++ uint32_t *p2pll_div_0, uint32_t *pixclks_cntl)
++{
++ struct radeon_encoder *radeon_encoder = to_radeon_encoder(encoder);
++ const struct radeon_tv_mode_constants *const_ptr;
++
++ const_ptr = radeon_legacy_tv_get_std_mode(radeon_encoder, NULL);
++ if (!const_ptr)
++ return;
++
++ *htotal2_cntl = (const_ptr->hor_total & 0x7);
++
++ *p2pll_ref_div = const_ptr->crtcPLL_M;
++
++ *p2pll_div_0 = (const_ptr->crtcPLL_N & 0x7ff) | (get_post_div(const_ptr->crtcPLL_post_div) << 16);
++ *pixclks_cntl &= ~RADEON_PIX2CLK_SRC_SEL_MASK;
++ *pixclks_cntl |= RADEON_PIX2CLK_SRC_SEL_P2PLLCLK | RADEON_PIXCLK_TV_SRC_SEL;
++}
++
+diff --git a/drivers/gpu/drm/radeon/radeon_microcode.h b/drivers/gpu/drm/radeon/radeon_microcode.h
+deleted file mode 100644
+index a348c9e..0000000
+--- a/drivers/gpu/drm/radeon/radeon_microcode.h
++++ /dev/null
+@@ -1,1844 +0,0 @@
+-/*
+- * Copyright 2007 Advanced Micro Devices, Inc.
+- * All Rights Reserved.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice (including the next
+- * paragraph) shall be included in all copies or substantial portions of the
+- * Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
+- * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
+- * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
+- * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
+- *
+- */
+-
+-#ifndef RADEON_MICROCODE_H
+-#define RADEON_MICROCODE_H
+-
+-/* production radeon ucode r1xx-r6xx */
+-static const u32 R100_cp_microcode[][2] = {
+- { 0x21007000, 0000000000 },
+- { 0x20007000, 0000000000 },
+- { 0x000000b4, 0x00000004 },
+- { 0x000000b8, 0x00000004 },
+- { 0x6f5b4d4c, 0000000000 },
+- { 0x4c4c427f, 0000000000 },
+- { 0x5b568a92, 0000000000 },
+- { 0x4ca09c6d, 0000000000 },
+- { 0xad4c4c4c, 0000000000 },
+- { 0x4ce1af3d, 0000000000 },
+- { 0xd8afafaf, 0000000000 },
+- { 0xd64c4cdc, 0000000000 },
+- { 0x4cd10d10, 0000000000 },
+- { 0x000f0000, 0x00000016 },
+- { 0x362f242d, 0000000000 },
+- { 0x00000012, 0x00000004 },
+- { 0x000f0000, 0x00000016 },
+- { 0x362f282d, 0000000000 },
+- { 0x000380e7, 0x00000002 },
+- { 0x04002c97, 0x00000002 },
+- { 0x000f0001, 0x00000016 },
+- { 0x333a3730, 0000000000 },
+- { 0x000077ef, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x00000021, 0x0000001a },
+- { 0x00004000, 0x0000001e },
+- { 0x00061000, 0x00000002 },
+- { 0x00000021, 0x0000001a },
+- { 0x00004000, 0x0000001e },
+- { 0x00061000, 0x00000002 },
+- { 0x00000021, 0x0000001a },
+- { 0x00004000, 0x0000001e },
+- { 0x00000017, 0x00000004 },
+- { 0x0003802b, 0x00000002 },
+- { 0x040067e0, 0x00000002 },
+- { 0x00000017, 0x00000004 },
+- { 0x000077e0, 0x00000002 },
+- { 0x00065000, 0x00000002 },
+- { 0x000037e1, 0x00000002 },
+- { 0x040067e1, 0x00000006 },
+- { 0x000077e0, 0x00000002 },
+- { 0x000077e1, 0x00000002 },
+- { 0x000077e1, 0x00000006 },
+- { 0xffffffff, 0000000000 },
+- { 0x10000000, 0000000000 },
+- { 0x0003802b, 0x00000002 },
+- { 0x040067e0, 0x00000006 },
+- { 0x00007675, 0x00000002 },
+- { 0x00007676, 0x00000002 },
+- { 0x00007677, 0x00000002 },
+- { 0x00007678, 0x00000006 },
+- { 0x0003802c, 0x00000002 },
+- { 0x04002676, 0x00000002 },
+- { 0x00007677, 0x00000002 },
+- { 0x00007678, 0x00000006 },
+- { 0x0000002f, 0x00000018 },
+- { 0x0000002f, 0x00000018 },
+- { 0000000000, 0x00000006 },
+- { 0x00000030, 0x00000018 },
+- { 0x00000030, 0x00000018 },
+- { 0000000000, 0x00000006 },
+- { 0x01605000, 0x00000002 },
+- { 0x00065000, 0x00000002 },
+- { 0x00098000, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x64c0603e, 0x00000004 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x00080000, 0x00000016 },
+- { 0000000000, 0000000000 },
+- { 0x0400251d, 0x00000002 },
+- { 0x00007580, 0x00000002 },
+- { 0x00067581, 0x00000002 },
+- { 0x04002580, 0x00000002 },
+- { 0x00067581, 0x00000002 },
+- { 0x00000049, 0x00000004 },
+- { 0x00005000, 0000000000 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x0000750e, 0x00000002 },
+- { 0x00019000, 0x00000002 },
+- { 0x00011055, 0x00000014 },
+- { 0x00000055, 0x00000012 },
+- { 0x0400250f, 0x00000002 },
+- { 0x0000504f, 0x00000004 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x00007565, 0x00000002 },
+- { 0x00007566, 0x00000002 },
+- { 0x00000058, 0x00000004 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x01e655b4, 0x00000002 },
+- { 0x4401b0e4, 0x00000002 },
+- { 0x01c110e4, 0x00000002 },
+- { 0x26667066, 0x00000018 },
+- { 0x040c2565, 0x00000002 },
+- { 0x00000066, 0x00000018 },
+- { 0x04002564, 0x00000002 },
+- { 0x00007566, 0x00000002 },
+- { 0x0000005d, 0x00000004 },
+- { 0x00401069, 0x00000008 },
+- { 0x00101000, 0x00000002 },
+- { 0x000d80ff, 0x00000002 },
+- { 0x0080006c, 0x00000008 },
+- { 0x000f9000, 0x00000002 },
+- { 0x000e00ff, 0x00000002 },
+- { 0000000000, 0x00000006 },
+- { 0x0000008f, 0x00000018 },
+- { 0x0000005b, 0x00000004 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x00007576, 0x00000002 },
+- { 0x00065000, 0x00000002 },
+- { 0x00009000, 0x00000002 },
+- { 0x00041000, 0x00000002 },
+- { 0x0c00350e, 0x00000002 },
+- { 0x00049000, 0x00000002 },
+- { 0x00051000, 0x00000002 },
+- { 0x01e785f8, 0x00000002 },
+- { 0x00200000, 0x00000002 },
+- { 0x0060007e, 0x0000000c },
+- { 0x00007563, 0x00000002 },
+- { 0x006075f0, 0x00000021 },
+- { 0x20007073, 0x00000004 },
+- { 0x00005073, 0x00000004 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x00007576, 0x00000002 },
+- { 0x00007577, 0x00000002 },
+- { 0x0000750e, 0x00000002 },
+- { 0x0000750f, 0x00000002 },
+- { 0x00a05000, 0x00000002 },
+- { 0x00600083, 0x0000000c },
+- { 0x006075f0, 0x00000021 },
+- { 0x000075f8, 0x00000002 },
+- { 0x00000083, 0x00000004 },
+- { 0x000a750e, 0x00000002 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x0020750f, 0x00000002 },
+- { 0x00600086, 0x00000004 },
+- { 0x00007570, 0x00000002 },
+- { 0x00007571, 0x00000002 },
+- { 0x00007572, 0x00000006 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x00005000, 0x00000002 },
+- { 0x00a05000, 0x00000002 },
+- { 0x00007568, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x00000095, 0x0000000c },
+- { 0x00058000, 0x00000002 },
+- { 0x0c607562, 0x00000002 },
+- { 0x00000097, 0x00000004 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x00600096, 0x00000004 },
+- { 0x400070e5, 0000000000 },
+- { 0x000380e6, 0x00000002 },
+- { 0x040025c5, 0x00000002 },
+- { 0x000380e5, 0x00000002 },
+- { 0x000000a8, 0x0000001c },
+- { 0x000650aa, 0x00000018 },
+- { 0x040025bb, 0x00000002 },
+- { 0x000610ab, 0x00000018 },
+- { 0x040075bc, 0000000000 },
+- { 0x000075bb, 0x00000002 },
+- { 0x000075bc, 0000000000 },
+- { 0x00090000, 0x00000006 },
+- { 0x00090000, 0x00000002 },
+- { 0x000d8002, 0x00000006 },
+- { 0x00007832, 0x00000002 },
+- { 0x00005000, 0x00000002 },
+- { 0x000380e7, 0x00000002 },
+- { 0x04002c97, 0x00000002 },
+- { 0x00007820, 0x00000002 },
+- { 0x00007821, 0x00000002 },
+- { 0x00007800, 0000000000 },
+- { 0x01200000, 0x00000002 },
+- { 0x20077000, 0x00000002 },
+- { 0x01200000, 0x00000002 },
+- { 0x20007000, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x0120751b, 0x00000002 },
+- { 0x8040750a, 0x00000002 },
+- { 0x8040750b, 0x00000002 },
+- { 0x00110000, 0x00000002 },
+- { 0x000380e5, 0x00000002 },
+- { 0x000000c6, 0x0000001c },
+- { 0x000610ab, 0x00000018 },
+- { 0x844075bd, 0x00000002 },
+- { 0x000610aa, 0x00000018 },
+- { 0x840075bb, 0x00000002 },
+- { 0x000610ab, 0x00000018 },
+- { 0x844075bc, 0x00000002 },
+- { 0x000000c9, 0x00000004 },
+- { 0x804075bd, 0x00000002 },
+- { 0x800075bb, 0x00000002 },
+- { 0x804075bc, 0x00000002 },
+- { 0x00108000, 0x00000002 },
+- { 0x01400000, 0x00000002 },
+- { 0x006000cd, 0x0000000c },
+- { 0x20c07000, 0x00000020 },
+- { 0x000000cf, 0x00000012 },
+- { 0x00800000, 0x00000006 },
+- { 0x0080751d, 0x00000006 },
+- { 0000000000, 0000000000 },
+- { 0x0000775c, 0x00000002 },
+- { 0x00a05000, 0x00000002 },
+- { 0x00661000, 0x00000002 },
+- { 0x0460275d, 0x00000020 },
+- { 0x00004000, 0000000000 },
+- { 0x01e00830, 0x00000002 },
+- { 0x21007000, 0000000000 },
+- { 0x6464614d, 0000000000 },
+- { 0x69687420, 0000000000 },
+- { 0x00000073, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x00005000, 0x00000002 },
+- { 0x000380d0, 0x00000002 },
+- { 0x040025e0, 0x00000002 },
+- { 0x000075e1, 0000000000 },
+- { 0x00000001, 0000000000 },
+- { 0x000380e0, 0x00000002 },
+- { 0x04002394, 0x00000002 },
+- { 0x00005000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x00000008, 0000000000 },
+- { 0x00000004, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+-};
+-
+-static const u32 R200_cp_microcode[][2] = {
+- { 0x21007000, 0000000000 },
+- { 0x20007000, 0000000000 },
+- { 0x000000bf, 0x00000004 },
+- { 0x000000c3, 0x00000004 },
+- { 0x7a685e5d, 0000000000 },
+- { 0x5d5d5588, 0000000000 },
+- { 0x68659197, 0000000000 },
+- { 0x5da19f78, 0000000000 },
+- { 0x5d5d5d5d, 0000000000 },
+- { 0x5dee5d50, 0000000000 },
+- { 0xf2acacac, 0000000000 },
+- { 0xe75df9e9, 0000000000 },
+- { 0xb1dd0e11, 0000000000 },
+- { 0xe2afafaf, 0000000000 },
+- { 0x000f0000, 0x00000016 },
+- { 0x452f232d, 0000000000 },
+- { 0x00000013, 0x00000004 },
+- { 0x000f0000, 0x00000016 },
+- { 0x452f272d, 0000000000 },
+- { 0x000f0001, 0x00000016 },
+- { 0x3e4d4a37, 0000000000 },
+- { 0x000077ef, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x00000020, 0x0000001a },
+- { 0x00004000, 0x0000001e },
+- { 0x00061000, 0x00000002 },
+- { 0x00000020, 0x0000001a },
+- { 0x00004000, 0x0000001e },
+- { 0x00061000, 0x00000002 },
+- { 0x00000020, 0x0000001a },
+- { 0x00004000, 0x0000001e },
+- { 0x00000016, 0x00000004 },
+- { 0x0003802a, 0x00000002 },
+- { 0x040067e0, 0x00000002 },
+- { 0x00000016, 0x00000004 },
+- { 0x000077e0, 0x00000002 },
+- { 0x00065000, 0x00000002 },
+- { 0x000037e1, 0x00000002 },
+- { 0x040067e1, 0x00000006 },
+- { 0x000077e0, 0x00000002 },
+- { 0x000077e1, 0x00000002 },
+- { 0x000077e1, 0x00000006 },
+- { 0xffffffff, 0000000000 },
+- { 0x10000000, 0000000000 },
+- { 0x07f007f0, 0000000000 },
+- { 0x0003802a, 0x00000002 },
+- { 0x040067e0, 0x00000006 },
+- { 0x0003802c, 0x00000002 },
+- { 0x04002741, 0x00000002 },
+- { 0x04002741, 0x00000002 },
+- { 0x04002743, 0x00000002 },
+- { 0x00007675, 0x00000002 },
+- { 0x00007676, 0x00000002 },
+- { 0x00007677, 0x00000002 },
+- { 0x00007678, 0x00000006 },
+- { 0x0003802c, 0x00000002 },
+- { 0x04002741, 0x00000002 },
+- { 0x04002741, 0x00000002 },
+- { 0x04002743, 0x00000002 },
+- { 0x00007676, 0x00000002 },
+- { 0x00007677, 0x00000002 },
+- { 0x00007678, 0x00000006 },
+- { 0x0003802b, 0x00000002 },
+- { 0x04002676, 0x00000002 },
+- { 0x00007677, 0x00000002 },
+- { 0x0003802c, 0x00000002 },
+- { 0x04002741, 0x00000002 },
+- { 0x04002743, 0x00000002 },
+- { 0x00007678, 0x00000006 },
+- { 0x0003802c, 0x00000002 },
+- { 0x04002741, 0x00000002 },
+- { 0x04002741, 0x00000002 },
+- { 0x04002743, 0x00000002 },
+- { 0x00007678, 0x00000006 },
+- { 0x0000002f, 0x00000018 },
+- { 0x0000002f, 0x00000018 },
+- { 0000000000, 0x00000006 },
+- { 0x00000037, 0x00000018 },
+- { 0x00000037, 0x00000018 },
+- { 0000000000, 0x00000006 },
+- { 0x01605000, 0x00000002 },
+- { 0x00065000, 0x00000002 },
+- { 0x00098000, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x64c06051, 0x00000004 },
+- { 0x00080000, 0x00000016 },
+- { 0000000000, 0000000000 },
+- { 0x0400251d, 0x00000002 },
+- { 0x00007580, 0x00000002 },
+- { 0x00067581, 0x00000002 },
+- { 0x04002580, 0x00000002 },
+- { 0x00067581, 0x00000002 },
+- { 0x0000005a, 0x00000004 },
+- { 0x00005000, 0000000000 },
+- { 0x00061000, 0x00000002 },
+- { 0x0000750e, 0x00000002 },
+- { 0x00019000, 0x00000002 },
+- { 0x00011064, 0x00000014 },
+- { 0x00000064, 0x00000012 },
+- { 0x0400250f, 0x00000002 },
+- { 0x0000505e, 0x00000004 },
+- { 0x00007565, 0x00000002 },
+- { 0x00007566, 0x00000002 },
+- { 0x00000065, 0x00000004 },
+- { 0x01e655b4, 0x00000002 },
+- { 0x4401b0f0, 0x00000002 },
+- { 0x01c110f0, 0x00000002 },
+- { 0x26667071, 0x00000018 },
+- { 0x040c2565, 0x00000002 },
+- { 0x00000071, 0x00000018 },
+- { 0x04002564, 0x00000002 },
+- { 0x00007566, 0x00000002 },
+- { 0x00000068, 0x00000004 },
+- { 0x00401074, 0x00000008 },
+- { 0x00101000, 0x00000002 },
+- { 0x000d80ff, 0x00000002 },
+- { 0x00800077, 0x00000008 },
+- { 0x000f9000, 0x00000002 },
+- { 0x000e00ff, 0x00000002 },
+- { 0000000000, 0x00000006 },
+- { 0x00000094, 0x00000018 },
+- { 0x00000068, 0x00000004 },
+- { 0x00007576, 0x00000002 },
+- { 0x00065000, 0x00000002 },
+- { 0x00009000, 0x00000002 },
+- { 0x00041000, 0x00000002 },
+- { 0x0c00350e, 0x00000002 },
+- { 0x00049000, 0x00000002 },
+- { 0x00051000, 0x00000002 },
+- { 0x01e785f8, 0x00000002 },
+- { 0x00200000, 0x00000002 },
+- { 0x00600087, 0x0000000c },
+- { 0x00007563, 0x00000002 },
+- { 0x006075f0, 0x00000021 },
+- { 0x2000707c, 0x00000004 },
+- { 0x0000507c, 0x00000004 },
+- { 0x00007576, 0x00000002 },
+- { 0x00007577, 0x00000002 },
+- { 0x0000750e, 0x00000002 },
+- { 0x0000750f, 0x00000002 },
+- { 0x00a05000, 0x00000002 },
+- { 0x0060008a, 0x0000000c },
+- { 0x006075f0, 0x00000021 },
+- { 0x000075f8, 0x00000002 },
+- { 0x0000008a, 0x00000004 },
+- { 0x000a750e, 0x00000002 },
+- { 0x0020750f, 0x00000002 },
+- { 0x0060008d, 0x00000004 },
+- { 0x00007570, 0x00000002 },
+- { 0x00007571, 0x00000002 },
+- { 0x00007572, 0x00000006 },
+- { 0x00005000, 0x00000002 },
+- { 0x00a05000, 0x00000002 },
+- { 0x00007568, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x00000098, 0x0000000c },
+- { 0x00058000, 0x00000002 },
+- { 0x0c607562, 0x00000002 },
+- { 0x0000009a, 0x00000004 },
+- { 0x00600099, 0x00000004 },
+- { 0x400070f1, 0000000000 },
+- { 0x000380f1, 0x00000002 },
+- { 0x000000a7, 0x0000001c },
+- { 0x000650a9, 0x00000018 },
+- { 0x040025bb, 0x00000002 },
+- { 0x000610aa, 0x00000018 },
+- { 0x040075bc, 0000000000 },
+- { 0x000075bb, 0x00000002 },
+- { 0x000075bc, 0000000000 },
+- { 0x00090000, 0x00000006 },
+- { 0x00090000, 0x00000002 },
+- { 0x000d8002, 0x00000006 },
+- { 0x00005000, 0x00000002 },
+- { 0x00007821, 0x00000002 },
+- { 0x00007800, 0000000000 },
+- { 0x00007821, 0x00000002 },
+- { 0x00007800, 0000000000 },
+- { 0x01665000, 0x00000002 },
+- { 0x000a0000, 0x00000002 },
+- { 0x000671cc, 0x00000002 },
+- { 0x0286f1cd, 0x00000002 },
+- { 0x000000b7, 0x00000010 },
+- { 0x21007000, 0000000000 },
+- { 0x000000be, 0x0000001c },
+- { 0x00065000, 0x00000002 },
+- { 0x000a0000, 0x00000002 },
+- { 0x00061000, 0x00000002 },
+- { 0x000b0000, 0x00000002 },
+- { 0x38067000, 0x00000002 },
+- { 0x000a00ba, 0x00000004 },
+- { 0x20007000, 0000000000 },
+- { 0x01200000, 0x00000002 },
+- { 0x20077000, 0x00000002 },
+- { 0x01200000, 0x00000002 },
+- { 0x20007000, 0000000000 },
+- { 0x00061000, 0x00000002 },
+- { 0x0120751b, 0x00000002 },
+- { 0x8040750a, 0x00000002 },
+- { 0x8040750b, 0x00000002 },
+- { 0x00110000, 0x00000002 },
+- { 0x000380f1, 0x00000002 },
+- { 0x000000d1, 0x0000001c },
+- { 0x000610aa, 0x00000018 },
+- { 0x844075bd, 0x00000002 },
+- { 0x000610a9, 0x00000018 },
+- { 0x840075bb, 0x00000002 },
+- { 0x000610aa, 0x00000018 },
+- { 0x844075bc, 0x00000002 },
+- { 0x000000d4, 0x00000004 },
+- { 0x804075bd, 0x00000002 },
+- { 0x800075bb, 0x00000002 },
+- { 0x804075bc, 0x00000002 },
+- { 0x00108000, 0x00000002 },
+- { 0x01400000, 0x00000002 },
+- { 0x006000d8, 0x0000000c },
+- { 0x20c07000, 0x00000020 },
+- { 0x000000da, 0x00000012 },
+- { 0x00800000, 0x00000006 },
+- { 0x0080751d, 0x00000006 },
+- { 0x000025bb, 0x00000002 },
+- { 0x000040d4, 0x00000004 },
+- { 0x0000775c, 0x00000002 },
+- { 0x00a05000, 0x00000002 },
+- { 0x00661000, 0x00000002 },
+- { 0x0460275d, 0x00000020 },
+- { 0x00004000, 0000000000 },
+- { 0x00007999, 0x00000002 },
+- { 0x00a05000, 0x00000002 },
+- { 0x00661000, 0x00000002 },
+- { 0x0460299b, 0x00000020 },
+- { 0x00004000, 0000000000 },
+- { 0x01e00830, 0x00000002 },
+- { 0x21007000, 0000000000 },
+- { 0x00005000, 0x00000002 },
+- { 0x00038056, 0x00000002 },
+- { 0x040025e0, 0x00000002 },
+- { 0x000075e1, 0000000000 },
+- { 0x00000001, 0000000000 },
+- { 0x000380ed, 0x00000002 },
+- { 0x04007394, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x000078c4, 0x00000002 },
+- { 0x000078c5, 0x00000002 },
+- { 0x000078c6, 0x00000002 },
+- { 0x00007924, 0x00000002 },
+- { 0x00007925, 0x00000002 },
+- { 0x00007926, 0x00000002 },
+- { 0x000000f2, 0x00000004 },
+- { 0x00007924, 0x00000002 },
+- { 0x00007925, 0x00000002 },
+- { 0x00007926, 0x00000002 },
+- { 0x000000f9, 0x00000004 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+-};
+-
+-static const u32 R300_cp_microcode[][2] = {
+- { 0x4200e000, 0000000000 },
+- { 0x4000e000, 0000000000 },
+- { 0x000000ae, 0x00000008 },
+- { 0x000000b2, 0x00000008 },
+- { 0x67554b4a, 0000000000 },
+- { 0x4a4a4475, 0000000000 },
+- { 0x55527d83, 0000000000 },
+- { 0x4a8c8b65, 0000000000 },
+- { 0x4aef4af6, 0000000000 },
+- { 0x4ae14a4a, 0000000000 },
+- { 0xe4979797, 0000000000 },
+- { 0xdb4aebdd, 0000000000 },
+- { 0x9ccc4a4a, 0000000000 },
+- { 0xd1989898, 0000000000 },
+- { 0x4a0f9ad6, 0000000000 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000d0012, 0x00000038 },
+- { 0x0000e8b4, 0x00000004 },
+- { 0x000d0014, 0x00000038 },
+- { 0x0000e8b6, 0x00000004 },
+- { 0x000d0016, 0x00000038 },
+- { 0x0000e854, 0x00000004 },
+- { 0x000d0018, 0x00000038 },
+- { 0x0000e855, 0x00000004 },
+- { 0x000d001a, 0x00000038 },
+- { 0x0000e856, 0x00000004 },
+- { 0x000d001c, 0x00000038 },
+- { 0x0000e857, 0x00000004 },
+- { 0x000d001e, 0x00000038 },
+- { 0x0000e824, 0x00000004 },
+- { 0x000d0020, 0x00000038 },
+- { 0x0000e825, 0x00000004 },
+- { 0x000d0022, 0x00000038 },
+- { 0x0000e830, 0x00000004 },
+- { 0x000d0024, 0x00000038 },
+- { 0x0000f0c0, 0x00000004 },
+- { 0x000d0026, 0x00000038 },
+- { 0x0000f0c1, 0x00000004 },
+- { 0x000d0028, 0x00000038 },
+- { 0x0000f041, 0x00000004 },
+- { 0x000d002a, 0x00000038 },
+- { 0x0000f184, 0x00000004 },
+- { 0x000d002c, 0x00000038 },
+- { 0x0000f185, 0x00000004 },
+- { 0x000d002e, 0x00000038 },
+- { 0x0000f186, 0x00000004 },
+- { 0x000d0030, 0x00000038 },
+- { 0x0000f187, 0x00000004 },
+- { 0x000d0032, 0x00000038 },
+- { 0x0000f180, 0x00000004 },
+- { 0x000d0034, 0x00000038 },
+- { 0x0000f393, 0x00000004 },
+- { 0x000d0036, 0x00000038 },
+- { 0x0000f38a, 0x00000004 },
+- { 0x000d0038, 0x00000038 },
+- { 0x0000f38e, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000043, 0x00000018 },
+- { 0x00cce800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x0000003a, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x2000451d, 0x00000004 },
+- { 0x0000e580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x08004580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x00000047, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x00032000, 0x00000004 },
+- { 0x00022051, 0x00000028 },
+- { 0x00000051, 0x00000024 },
+- { 0x0800450f, 0x00000004 },
+- { 0x0000a04b, 0x00000008 },
+- { 0x0000e565, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000052, 0x00000008 },
+- { 0x03cca5b4, 0x00000004 },
+- { 0x05432000, 0x00000004 },
+- { 0x00022000, 0x00000004 },
+- { 0x4ccce05e, 0x00000030 },
+- { 0x08274565, 0x00000004 },
+- { 0x0000005e, 0x00000030 },
+- { 0x08004564, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000055, 0x00000008 },
+- { 0x00802061, 0x00000010 },
+- { 0x00202000, 0x00000004 },
+- { 0x001b00ff, 0x00000004 },
+- { 0x01000064, 0x00000010 },
+- { 0x001f2000, 0x00000004 },
+- { 0x001c00ff, 0x00000004 },
+- { 0000000000, 0x0000000c },
+- { 0x00000080, 0x00000030 },
+- { 0x00000055, 0x00000008 },
+- { 0x0000e576, 0x00000004 },
+- { 0x000ca000, 0x00000004 },
+- { 0x00012000, 0x00000004 },
+- { 0x00082000, 0x00000004 },
+- { 0x1800650e, 0x00000004 },
+- { 0x00092000, 0x00000004 },
+- { 0x000a2000, 0x00000004 },
+- { 0x000f0000, 0x00000004 },
+- { 0x00400000, 0x00000004 },
+- { 0x00000074, 0x00000018 },
+- { 0x0000e563, 0x00000004 },
+- { 0x00c0e5f9, 0x000000c2 },
+- { 0x00000069, 0x00000008 },
+- { 0x0000a069, 0x00000008 },
+- { 0x0000e576, 0x00000004 },
+- { 0x0000e577, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x0000e50f, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000077, 0x00000018 },
+- { 0x00c0e5f9, 0x000000c2 },
+- { 0x00000077, 0x00000008 },
+- { 0x0014e50e, 0x00000004 },
+- { 0x0040e50f, 0x00000004 },
+- { 0x00c0007a, 0x00000008 },
+- { 0x0000e570, 0x00000004 },
+- { 0x0000e571, 0x00000004 },
+- { 0x0000e572, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x0000e568, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00000084, 0x00000018 },
+- { 0x000b0000, 0x00000004 },
+- { 0x18c0e562, 0x00000004 },
+- { 0x00000086, 0x00000008 },
+- { 0x00c00085, 0x00000008 },
+- { 0x000700e3, 0x00000004 },
+- { 0x00000092, 0x00000038 },
+- { 0x000ca094, 0x00000030 },
+- { 0x080045bb, 0x00000004 },
+- { 0x000c2095, 0x00000030 },
+- { 0x0800e5bc, 0000000000 },
+- { 0x0000e5bb, 0x00000004 },
+- { 0x0000e5bc, 0000000000 },
+- { 0x00120000, 0x0000000c },
+- { 0x00120000, 0x00000004 },
+- { 0x001b0002, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e800, 0000000000 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e82e, 0000000000 },
+- { 0x02cca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000ce1cc, 0x00000004 },
+- { 0x050de1cd, 0x00000004 },
+- { 0x00400000, 0x00000004 },
+- { 0x000000a4, 0x00000018 },
+- { 0x00c0a000, 0x00000004 },
+- { 0x000000a1, 0x00000008 },
+- { 0x000000a6, 0x00000020 },
+- { 0x4200e000, 0000000000 },
+- { 0x000000ad, 0x00000038 },
+- { 0x000ca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00160000, 0x00000004 },
+- { 0x700ce000, 0x00000004 },
+- { 0x001400a9, 0x00000008 },
+- { 0x4000e000, 0000000000 },
+- { 0x02400000, 0x00000004 },
+- { 0x400ee000, 0x00000004 },
+- { 0x02400000, 0x00000004 },
+- { 0x4000e000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0240e51b, 0x00000004 },
+- { 0x0080e50a, 0x00000005 },
+- { 0x0080e50b, 0x00000005 },
+- { 0x00220000, 0x00000004 },
+- { 0x000700e3, 0x00000004 },
+- { 0x000000c0, 0x00000038 },
+- { 0x000c2095, 0x00000030 },
+- { 0x0880e5bd, 0x00000005 },
+- { 0x000c2094, 0x00000030 },
+- { 0x0800e5bb, 0x00000005 },
+- { 0x000c2095, 0x00000030 },
+- { 0x0880e5bc, 0x00000005 },
+- { 0x000000c3, 0x00000008 },
+- { 0x0080e5bd, 0x00000005 },
+- { 0x0000e5bb, 0x00000005 },
+- { 0x0080e5bc, 0x00000005 },
+- { 0x00210000, 0x00000004 },
+- { 0x02800000, 0x00000004 },
+- { 0x00c000c7, 0x00000018 },
+- { 0x4180e000, 0x00000040 },
+- { 0x000000c9, 0x00000024 },
+- { 0x01000000, 0x0000000c },
+- { 0x0100e51d, 0x0000000c },
+- { 0x000045bb, 0x00000004 },
+- { 0x000080c3, 0x00000008 },
+- { 0x0000f3ce, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053cf, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f3d2, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053d3, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f39d, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c0539e, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x03c00830, 0x00000004 },
+- { 0x4200e000, 0000000000 },
+- { 0x0000a000, 0x00000004 },
+- { 0x200045e0, 0x00000004 },
+- { 0x0000e5e1, 0000000000 },
+- { 0x00000001, 0000000000 },
+- { 0x000700e0, 0x00000004 },
+- { 0x0800e394, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x0000e8c4, 0x00000004 },
+- { 0x0000e8c5, 0x00000004 },
+- { 0x0000e8c6, 0x00000004 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000e4, 0x00000008 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000eb, 0x00000008 },
+- { 0x02c02000, 0x00000004 },
+- { 0x00060000, 0x00000004 },
+- { 0x000000f3, 0x00000034 },
+- { 0x000000f0, 0x00000008 },
+- { 0x00008000, 0x00000004 },
+- { 0xc000e000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x001d0018, 0x00000004 },
+- { 0x001a0001, 0x00000004 },
+- { 0x000000fb, 0x00000034 },
+- { 0x0000004a, 0x00000008 },
+- { 0x0500a04a, 0x00000008 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+-};
+-
+-static const u32 R420_cp_microcode[][2] = {
+- { 0x4200e000, 0000000000 },
+- { 0x4000e000, 0000000000 },
+- { 0x00000099, 0x00000008 },
+- { 0x0000009d, 0x00000008 },
+- { 0x4a554b4a, 0000000000 },
+- { 0x4a4a4467, 0000000000 },
+- { 0x55526f75, 0000000000 },
+- { 0x4a7e7d65, 0000000000 },
+- { 0xd9d3dff6, 0000000000 },
+- { 0x4ac54a4a, 0000000000 },
+- { 0xc8828282, 0000000000 },
+- { 0xbf4acfc1, 0000000000 },
+- { 0x87b04a4a, 0000000000 },
+- { 0xb5838383, 0000000000 },
+- { 0x4a0f85ba, 0000000000 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000d0012, 0x00000038 },
+- { 0x0000e8b4, 0x00000004 },
+- { 0x000d0014, 0x00000038 },
+- { 0x0000e8b6, 0x00000004 },
+- { 0x000d0016, 0x00000038 },
+- { 0x0000e854, 0x00000004 },
+- { 0x000d0018, 0x00000038 },
+- { 0x0000e855, 0x00000004 },
+- { 0x000d001a, 0x00000038 },
+- { 0x0000e856, 0x00000004 },
+- { 0x000d001c, 0x00000038 },
+- { 0x0000e857, 0x00000004 },
+- { 0x000d001e, 0x00000038 },
+- { 0x0000e824, 0x00000004 },
+- { 0x000d0020, 0x00000038 },
+- { 0x0000e825, 0x00000004 },
+- { 0x000d0022, 0x00000038 },
+- { 0x0000e830, 0x00000004 },
+- { 0x000d0024, 0x00000038 },
+- { 0x0000f0c0, 0x00000004 },
+- { 0x000d0026, 0x00000038 },
+- { 0x0000f0c1, 0x00000004 },
+- { 0x000d0028, 0x00000038 },
+- { 0x0000f041, 0x00000004 },
+- { 0x000d002a, 0x00000038 },
+- { 0x0000f184, 0x00000004 },
+- { 0x000d002c, 0x00000038 },
+- { 0x0000f185, 0x00000004 },
+- { 0x000d002e, 0x00000038 },
+- { 0x0000f186, 0x00000004 },
+- { 0x000d0030, 0x00000038 },
+- { 0x0000f187, 0x00000004 },
+- { 0x000d0032, 0x00000038 },
+- { 0x0000f180, 0x00000004 },
+- { 0x000d0034, 0x00000038 },
+- { 0x0000f393, 0x00000004 },
+- { 0x000d0036, 0x00000038 },
+- { 0x0000f38a, 0x00000004 },
+- { 0x000d0038, 0x00000038 },
+- { 0x0000f38e, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000043, 0x00000018 },
+- { 0x00cce800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x0000003a, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x2000451d, 0x00000004 },
+- { 0x0000e580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x08004580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x00000047, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x00032000, 0x00000004 },
+- { 0x00022051, 0x00000028 },
+- { 0x00000051, 0x00000024 },
+- { 0x0800450f, 0x00000004 },
+- { 0x0000a04b, 0x00000008 },
+- { 0x0000e565, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000052, 0x00000008 },
+- { 0x03cca5b4, 0x00000004 },
+- { 0x05432000, 0x00000004 },
+- { 0x00022000, 0x00000004 },
+- { 0x4ccce05e, 0x00000030 },
+- { 0x08274565, 0x00000004 },
+- { 0x0000005e, 0x00000030 },
+- { 0x08004564, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000055, 0x00000008 },
+- { 0x00802061, 0x00000010 },
+- { 0x00202000, 0x00000004 },
+- { 0x001b00ff, 0x00000004 },
+- { 0x01000064, 0x00000010 },
+- { 0x001f2000, 0x00000004 },
+- { 0x001c00ff, 0x00000004 },
+- { 0000000000, 0x0000000c },
+- { 0x00000072, 0x00000030 },
+- { 0x00000055, 0x00000008 },
+- { 0x0000e576, 0x00000004 },
+- { 0x0000e577, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x0000e50f, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000069, 0x00000018 },
+- { 0x00c0e5f9, 0x000000c2 },
+- { 0x00000069, 0x00000008 },
+- { 0x0014e50e, 0x00000004 },
+- { 0x0040e50f, 0x00000004 },
+- { 0x00c0006c, 0x00000008 },
+- { 0x0000e570, 0x00000004 },
+- { 0x0000e571, 0x00000004 },
+- { 0x0000e572, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x0000e568, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00000076, 0x00000018 },
+- { 0x000b0000, 0x00000004 },
+- { 0x18c0e562, 0x00000004 },
+- { 0x00000078, 0x00000008 },
+- { 0x00c00077, 0x00000008 },
+- { 0x000700c7, 0x00000004 },
+- { 0x00000080, 0x00000038 },
+- { 0x0000e5bb, 0x00000004 },
+- { 0x0000e5bc, 0000000000 },
+- { 0x0000a000, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e800, 0000000000 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e82e, 0000000000 },
+- { 0x02cca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000ce1cc, 0x00000004 },
+- { 0x050de1cd, 0x00000004 },
+- { 0x00400000, 0x00000004 },
+- { 0x0000008f, 0x00000018 },
+- { 0x00c0a000, 0x00000004 },
+- { 0x0000008c, 0x00000008 },
+- { 0x00000091, 0x00000020 },
+- { 0x4200e000, 0000000000 },
+- { 0x00000098, 0x00000038 },
+- { 0x000ca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00160000, 0x00000004 },
+- { 0x700ce000, 0x00000004 },
+- { 0x00140094, 0x00000008 },
+- { 0x4000e000, 0000000000 },
+- { 0x02400000, 0x00000004 },
+- { 0x400ee000, 0x00000004 },
+- { 0x02400000, 0x00000004 },
+- { 0x4000e000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0240e51b, 0x00000004 },
+- { 0x0080e50a, 0x00000005 },
+- { 0x0080e50b, 0x00000005 },
+- { 0x00220000, 0x00000004 },
+- { 0x000700c7, 0x00000004 },
+- { 0x000000a4, 0x00000038 },
+- { 0x0080e5bd, 0x00000005 },
+- { 0x0000e5bb, 0x00000005 },
+- { 0x0080e5bc, 0x00000005 },
+- { 0x00210000, 0x00000004 },
+- { 0x02800000, 0x00000004 },
+- { 0x00c000ab, 0x00000018 },
+- { 0x4180e000, 0x00000040 },
+- { 0x000000ad, 0x00000024 },
+- { 0x01000000, 0x0000000c },
+- { 0x0100e51d, 0x0000000c },
+- { 0x000045bb, 0x00000004 },
+- { 0x000080a7, 0x00000008 },
+- { 0x0000f3ce, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053cf, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f3d2, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053d3, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f39d, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c0539e, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x03c00830, 0x00000004 },
+- { 0x4200e000, 0000000000 },
+- { 0x0000a000, 0x00000004 },
+- { 0x200045e0, 0x00000004 },
+- { 0x0000e5e1, 0000000000 },
+- { 0x00000001, 0000000000 },
+- { 0x000700c4, 0x00000004 },
+- { 0x0800e394, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x0000e8c4, 0x00000004 },
+- { 0x0000e8c5, 0x00000004 },
+- { 0x0000e8c6, 0x00000004 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000c8, 0x00000008 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000cf, 0x00000008 },
+- { 0x02c02000, 0x00000004 },
+- { 0x00060000, 0x00000004 },
+- { 0x000000d7, 0x00000034 },
+- { 0x000000d4, 0x00000008 },
+- { 0x00008000, 0x00000004 },
+- { 0xc000e000, 0000000000 },
+- { 0x0000e1cc, 0x00000004 },
+- { 0x0500e1cd, 0x00000004 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000000de, 0x00000034 },
+- { 0x000000da, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x0019e1cc, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x0500a000, 0x00000004 },
+- { 0x080041cd, 0x00000004 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000000fb, 0x00000034 },
+- { 0x0000004a, 0x00000008 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x001d0018, 0x00000004 },
+- { 0x001a0001, 0x00000004 },
+- { 0x000000fb, 0x00000034 },
+- { 0x0000004a, 0x00000008 },
+- { 0x0500a04a, 0x00000008 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+-};
+-
+-static const u32 RS600_cp_microcode[][2] = {
+- { 0x4200e000, 0000000000 },
+- { 0x4000e000, 0000000000 },
+- { 0x000000a0, 0x00000008 },
+- { 0x000000a4, 0x00000008 },
+- { 0x4a554b4a, 0000000000 },
+- { 0x4a4a4467, 0000000000 },
+- { 0x55526f75, 0000000000 },
+- { 0x4a7e7d65, 0000000000 },
+- { 0x4ae74af6, 0000000000 },
+- { 0x4ad34a4a, 0000000000 },
+- { 0xd6898989, 0000000000 },
+- { 0xcd4addcf, 0000000000 },
+- { 0x8ebe4ae2, 0000000000 },
+- { 0xc38a8a8a, 0000000000 },
+- { 0x4a0f8cc8, 0000000000 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000d0012, 0x00000038 },
+- { 0x0000e8b4, 0x00000004 },
+- { 0x000d0014, 0x00000038 },
+- { 0x0000e8b6, 0x00000004 },
+- { 0x000d0016, 0x00000038 },
+- { 0x0000e854, 0x00000004 },
+- { 0x000d0018, 0x00000038 },
+- { 0x0000e855, 0x00000004 },
+- { 0x000d001a, 0x00000038 },
+- { 0x0000e856, 0x00000004 },
+- { 0x000d001c, 0x00000038 },
+- { 0x0000e857, 0x00000004 },
+- { 0x000d001e, 0x00000038 },
+- { 0x0000e824, 0x00000004 },
+- { 0x000d0020, 0x00000038 },
+- { 0x0000e825, 0x00000004 },
+- { 0x000d0022, 0x00000038 },
+- { 0x0000e830, 0x00000004 },
+- { 0x000d0024, 0x00000038 },
+- { 0x0000f0c0, 0x00000004 },
+- { 0x000d0026, 0x00000038 },
+- { 0x0000f0c1, 0x00000004 },
+- { 0x000d0028, 0x00000038 },
+- { 0x0000f041, 0x00000004 },
+- { 0x000d002a, 0x00000038 },
+- { 0x0000f184, 0x00000004 },
+- { 0x000d002c, 0x00000038 },
+- { 0x0000f185, 0x00000004 },
+- { 0x000d002e, 0x00000038 },
+- { 0x0000f186, 0x00000004 },
+- { 0x000d0030, 0x00000038 },
+- { 0x0000f187, 0x00000004 },
+- { 0x000d0032, 0x00000038 },
+- { 0x0000f180, 0x00000004 },
+- { 0x000d0034, 0x00000038 },
+- { 0x0000f393, 0x00000004 },
+- { 0x000d0036, 0x00000038 },
+- { 0x0000f38a, 0x00000004 },
+- { 0x000d0038, 0x00000038 },
+- { 0x0000f38e, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000043, 0x00000018 },
+- { 0x00cce800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x0000003a, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x2000451d, 0x00000004 },
+- { 0x0000e580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x08004580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x00000047, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x00032000, 0x00000004 },
+- { 0x00022051, 0x00000028 },
+- { 0x00000051, 0x00000024 },
+- { 0x0800450f, 0x00000004 },
+- { 0x0000a04b, 0x00000008 },
+- { 0x0000e565, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000052, 0x00000008 },
+- { 0x03cca5b4, 0x00000004 },
+- { 0x05432000, 0x00000004 },
+- { 0x00022000, 0x00000004 },
+- { 0x4ccce05e, 0x00000030 },
+- { 0x08274565, 0x00000004 },
+- { 0x0000005e, 0x00000030 },
+- { 0x08004564, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000055, 0x00000008 },
+- { 0x00802061, 0x00000010 },
+- { 0x00202000, 0x00000004 },
+- { 0x001b00ff, 0x00000004 },
+- { 0x01000064, 0x00000010 },
+- { 0x001f2000, 0x00000004 },
+- { 0x001c00ff, 0x00000004 },
+- { 0000000000, 0x0000000c },
+- { 0x00000072, 0x00000030 },
+- { 0x00000055, 0x00000008 },
+- { 0x0000e576, 0x00000004 },
+- { 0x0000e577, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x0000e50f, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000069, 0x00000018 },
+- { 0x00c0e5f9, 0x000000c2 },
+- { 0x00000069, 0x00000008 },
+- { 0x0014e50e, 0x00000004 },
+- { 0x0040e50f, 0x00000004 },
+- { 0x00c0006c, 0x00000008 },
+- { 0x0000e570, 0x00000004 },
+- { 0x0000e571, 0x00000004 },
+- { 0x0000e572, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x0000e568, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00000076, 0x00000018 },
+- { 0x000b0000, 0x00000004 },
+- { 0x18c0e562, 0x00000004 },
+- { 0x00000078, 0x00000008 },
+- { 0x00c00077, 0x00000008 },
+- { 0x000700d5, 0x00000004 },
+- { 0x00000084, 0x00000038 },
+- { 0x000ca086, 0x00000030 },
+- { 0x080045bb, 0x00000004 },
+- { 0x000c2087, 0x00000030 },
+- { 0x0800e5bc, 0000000000 },
+- { 0x0000e5bb, 0x00000004 },
+- { 0x0000e5bc, 0000000000 },
+- { 0x00120000, 0x0000000c },
+- { 0x00120000, 0x00000004 },
+- { 0x001b0002, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e800, 0000000000 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e82e, 0000000000 },
+- { 0x02cca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000ce1cc, 0x00000004 },
+- { 0x050de1cd, 0x00000004 },
+- { 0x00400000, 0x00000004 },
+- { 0x00000096, 0x00000018 },
+- { 0x00c0a000, 0x00000004 },
+- { 0x00000093, 0x00000008 },
+- { 0x00000098, 0x00000020 },
+- { 0x4200e000, 0000000000 },
+- { 0x0000009f, 0x00000038 },
+- { 0x000ca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00160000, 0x00000004 },
+- { 0x700ce000, 0x00000004 },
+- { 0x0014009b, 0x00000008 },
+- { 0x4000e000, 0000000000 },
+- { 0x02400000, 0x00000004 },
+- { 0x400ee000, 0x00000004 },
+- { 0x02400000, 0x00000004 },
+- { 0x4000e000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0240e51b, 0x00000004 },
+- { 0x0080e50a, 0x00000005 },
+- { 0x0080e50b, 0x00000005 },
+- { 0x00220000, 0x00000004 },
+- { 0x000700d5, 0x00000004 },
+- { 0x000000b2, 0x00000038 },
+- { 0x000c2087, 0x00000030 },
+- { 0x0880e5bd, 0x00000005 },
+- { 0x000c2086, 0x00000030 },
+- { 0x0800e5bb, 0x00000005 },
+- { 0x000c2087, 0x00000030 },
+- { 0x0880e5bc, 0x00000005 },
+- { 0x000000b5, 0x00000008 },
+- { 0x0080e5bd, 0x00000005 },
+- { 0x0000e5bb, 0x00000005 },
+- { 0x0080e5bc, 0x00000005 },
+- { 0x00210000, 0x00000004 },
+- { 0x02800000, 0x00000004 },
+- { 0x00c000b9, 0x00000018 },
+- { 0x4180e000, 0x00000040 },
+- { 0x000000bb, 0x00000024 },
+- { 0x01000000, 0x0000000c },
+- { 0x0100e51d, 0x0000000c },
+- { 0x000045bb, 0x00000004 },
+- { 0x000080b5, 0x00000008 },
+- { 0x0000f3ce, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053cf, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f3d2, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053d3, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f39d, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c0539e, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x03c00830, 0x00000004 },
+- { 0x4200e000, 0000000000 },
+- { 0x0000a000, 0x00000004 },
+- { 0x200045e0, 0x00000004 },
+- { 0x0000e5e1, 0000000000 },
+- { 0x00000001, 0000000000 },
+- { 0x000700d2, 0x00000004 },
+- { 0x0800e394, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x0000e8c4, 0x00000004 },
+- { 0x0000e8c5, 0x00000004 },
+- { 0x0000e8c6, 0x00000004 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000d6, 0x00000008 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000dd, 0x00000008 },
+- { 0x00e00116, 0000000000 },
+- { 0x000700e1, 0x00000004 },
+- { 0x0800401c, 0x00000004 },
+- { 0x200050e7, 0x00000004 },
+- { 0x0000e01d, 0x00000004 },
+- { 0x000000e4, 0x00000008 },
+- { 0x02c02000, 0x00000004 },
+- { 0x00060000, 0x00000004 },
+- { 0x000000eb, 0x00000034 },
+- { 0x000000e8, 0x00000008 },
+- { 0x00008000, 0x00000004 },
+- { 0xc000e000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x001d0018, 0x00000004 },
+- { 0x001a0001, 0x00000004 },
+- { 0x000000fb, 0x00000034 },
+- { 0x0000004a, 0x00000008 },
+- { 0x0500a04a, 0x00000008 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+-};
+-
+-static const u32 RS690_cp_microcode[][2] = {
+- { 0x000000dd, 0x00000008 },
+- { 0x000000df, 0x00000008 },
+- { 0x000000a0, 0x00000008 },
+- { 0x000000a4, 0x00000008 },
+- { 0x4a554b4a, 0000000000 },
+- { 0x4a4a4467, 0000000000 },
+- { 0x55526f75, 0000000000 },
+- { 0x4a7e7d65, 0000000000 },
+- { 0x4ad74af6, 0000000000 },
+- { 0x4ac94a4a, 0000000000 },
+- { 0xcc898989, 0000000000 },
+- { 0xc34ad3c5, 0000000000 },
+- { 0x8e4a4a4a, 0000000000 },
+- { 0x4a8a8a8a, 0000000000 },
+- { 0x4a0f8c4a, 0000000000 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000d0012, 0x00000038 },
+- { 0x0000e8b4, 0x00000004 },
+- { 0x000d0014, 0x00000038 },
+- { 0x0000e8b6, 0x00000004 },
+- { 0x000d0016, 0x00000038 },
+- { 0x0000e854, 0x00000004 },
+- { 0x000d0018, 0x00000038 },
+- { 0x0000e855, 0x00000004 },
+- { 0x000d001a, 0x00000038 },
+- { 0x0000e856, 0x00000004 },
+- { 0x000d001c, 0x00000038 },
+- { 0x0000e857, 0x00000004 },
+- { 0x000d001e, 0x00000038 },
+- { 0x0000e824, 0x00000004 },
+- { 0x000d0020, 0x00000038 },
+- { 0x0000e825, 0x00000004 },
+- { 0x000d0022, 0x00000038 },
+- { 0x0000e830, 0x00000004 },
+- { 0x000d0024, 0x00000038 },
+- { 0x0000f0c0, 0x00000004 },
+- { 0x000d0026, 0x00000038 },
+- { 0x0000f0c1, 0x00000004 },
+- { 0x000d0028, 0x00000038 },
+- { 0x0000f041, 0x00000004 },
+- { 0x000d002a, 0x00000038 },
+- { 0x0000f184, 0x00000004 },
+- { 0x000d002c, 0x00000038 },
+- { 0x0000f185, 0x00000004 },
+- { 0x000d002e, 0x00000038 },
+- { 0x0000f186, 0x00000004 },
+- { 0x000d0030, 0x00000038 },
+- { 0x0000f187, 0x00000004 },
+- { 0x000d0032, 0x00000038 },
+- { 0x0000f180, 0x00000004 },
+- { 0x000d0034, 0x00000038 },
+- { 0x0000f393, 0x00000004 },
+- { 0x000d0036, 0x00000038 },
+- { 0x0000f38a, 0x00000004 },
+- { 0x000d0038, 0x00000038 },
+- { 0x0000f38e, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000043, 0x00000018 },
+- { 0x00cce800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x0000003a, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x2000451d, 0x00000004 },
+- { 0x0000e580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x08004580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x00000047, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x00032000, 0x00000004 },
+- { 0x00022051, 0x00000028 },
+- { 0x00000051, 0x00000024 },
+- { 0x0800450f, 0x00000004 },
+- { 0x0000a04b, 0x00000008 },
+- { 0x0000e565, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000052, 0x00000008 },
+- { 0x03cca5b4, 0x00000004 },
+- { 0x05432000, 0x00000004 },
+- { 0x00022000, 0x00000004 },
+- { 0x4ccce05e, 0x00000030 },
+- { 0x08274565, 0x00000004 },
+- { 0x0000005e, 0x00000030 },
+- { 0x08004564, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000055, 0x00000008 },
+- { 0x00802061, 0x00000010 },
+- { 0x00202000, 0x00000004 },
+- { 0x001b00ff, 0x00000004 },
+- { 0x01000064, 0x00000010 },
+- { 0x001f2000, 0x00000004 },
+- { 0x001c00ff, 0x00000004 },
+- { 0000000000, 0x0000000c },
+- { 0x00000072, 0x00000030 },
+- { 0x00000055, 0x00000008 },
+- { 0x0000e576, 0x00000004 },
+- { 0x0000e577, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x0000e50f, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000069, 0x00000018 },
+- { 0x00c0e5f9, 0x000000c2 },
+- { 0x00000069, 0x00000008 },
+- { 0x0014e50e, 0x00000004 },
+- { 0x0040e50f, 0x00000004 },
+- { 0x00c0006c, 0x00000008 },
+- { 0x0000e570, 0x00000004 },
+- { 0x0000e571, 0x00000004 },
+- { 0x0000e572, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x0000e568, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00000076, 0x00000018 },
+- { 0x000b0000, 0x00000004 },
+- { 0x18c0e562, 0x00000004 },
+- { 0x00000078, 0x00000008 },
+- { 0x00c00077, 0x00000008 },
+- { 0x000700cb, 0x00000004 },
+- { 0x00000084, 0x00000038 },
+- { 0x000ca086, 0x00000030 },
+- { 0x080045bb, 0x00000004 },
+- { 0x000c2087, 0x00000030 },
+- { 0x0800e5bc, 0000000000 },
+- { 0x0000e5bb, 0x00000004 },
+- { 0x0000e5bc, 0000000000 },
+- { 0x00120000, 0x0000000c },
+- { 0x00120000, 0x00000004 },
+- { 0x001b0002, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e800, 0000000000 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e82e, 0000000000 },
+- { 0x02cca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000ce1cc, 0x00000004 },
+- { 0x050de1cd, 0x00000004 },
+- { 0x00400000, 0x00000004 },
+- { 0x00000096, 0x00000018 },
+- { 0x00c0a000, 0x00000004 },
+- { 0x00000093, 0x00000008 },
+- { 0x00000098, 0x00000020 },
+- { 0x4200e000, 0000000000 },
+- { 0x0000009f, 0x00000038 },
+- { 0x000ca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00160000, 0x00000004 },
+- { 0x700ce000, 0x00000004 },
+- { 0x0014009b, 0x00000008 },
+- { 0x4000e000, 0000000000 },
+- { 0x02400000, 0x00000004 },
+- { 0x400ee000, 0x00000004 },
+- { 0x02400000, 0x00000004 },
+- { 0x4000e000, 0000000000 },
+- { 0x00100000, 0x0000002c },
+- { 0x00004000, 0000000000 },
+- { 0x080045c8, 0x00000004 },
+- { 0x00240005, 0x00000004 },
+- { 0x08004d0b, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0240e51b, 0x00000004 },
+- { 0x0080e50a, 0x00000005 },
+- { 0x0080e50b, 0x00000005 },
+- { 0x00220000, 0x00000004 },
+- { 0x000700cb, 0x00000004 },
+- { 0x000000b7, 0x00000038 },
+- { 0x000c2087, 0x00000030 },
+- { 0x0880e5bd, 0x00000005 },
+- { 0x000c2086, 0x00000030 },
+- { 0x0800e5bb, 0x00000005 },
+- { 0x000c2087, 0x00000030 },
+- { 0x0880e5bc, 0x00000005 },
+- { 0x000000ba, 0x00000008 },
+- { 0x0080e5bd, 0x00000005 },
+- { 0x0000e5bb, 0x00000005 },
+- { 0x0080e5bc, 0x00000005 },
+- { 0x00210000, 0x00000004 },
+- { 0x02800000, 0x00000004 },
+- { 0x00c000be, 0x00000018 },
+- { 0x4180e000, 0x00000040 },
+- { 0x000000c0, 0x00000024 },
+- { 0x01000000, 0x0000000c },
+- { 0x0100e51d, 0x0000000c },
+- { 0x000045bb, 0x00000004 },
+- { 0x000080ba, 0x00000008 },
+- { 0x03c00830, 0x00000004 },
+- { 0x4200e000, 0000000000 },
+- { 0x0000a000, 0x00000004 },
+- { 0x200045e0, 0x00000004 },
+- { 0x0000e5e1, 0000000000 },
+- { 0x00000001, 0000000000 },
+- { 0x000700c8, 0x00000004 },
+- { 0x0800e394, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x0000e8c4, 0x00000004 },
+- { 0x0000e8c5, 0x00000004 },
+- { 0x0000e8c6, 0x00000004 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000cc, 0x00000008 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000d3, 0x00000008 },
+- { 0x02c02000, 0x00000004 },
+- { 0x00060000, 0x00000004 },
+- { 0x000000db, 0x00000034 },
+- { 0x000000d8, 0x00000008 },
+- { 0x00008000, 0x00000004 },
+- { 0xc000e000, 0000000000 },
+- { 0x000000e1, 0x00000030 },
+- { 0x4200e000, 0000000000 },
+- { 0x000000e1, 0x00000030 },
+- { 0x4000e000, 0000000000 },
+- { 0x0025001b, 0x00000004 },
+- { 0x00230000, 0x00000004 },
+- { 0x00250005, 0x00000004 },
+- { 0x000000e6, 0x00000034 },
+- { 0000000000, 0x0000000c },
+- { 0x00244000, 0x00000004 },
+- { 0x080045c8, 0x00000004 },
+- { 0x00240005, 0x00000004 },
+- { 0x08004d0b, 0x0000000c },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x001d0018, 0x00000004 },
+- { 0x001a0001, 0x00000004 },
+- { 0x000000fb, 0x00000034 },
+- { 0x0000004a, 0x00000008 },
+- { 0x0500a04a, 0x00000008 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+-};
+-
+-static const u32 R520_cp_microcode[][2] = {
+- { 0x4200e000, 0000000000 },
+- { 0x4000e000, 0000000000 },
+- { 0x00000099, 0x00000008 },
+- { 0x0000009d, 0x00000008 },
+- { 0x4a554b4a, 0000000000 },
+- { 0x4a4a4467, 0000000000 },
+- { 0x55526f75, 0000000000 },
+- { 0x4a7e7d65, 0000000000 },
+- { 0xe0dae6f6, 0000000000 },
+- { 0x4ac54a4a, 0000000000 },
+- { 0xc8828282, 0000000000 },
+- { 0xbf4acfc1, 0000000000 },
+- { 0x87b04ad5, 0000000000 },
+- { 0xb5838383, 0000000000 },
+- { 0x4a0f85ba, 0000000000 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000d0012, 0x00000038 },
+- { 0x0000e8b4, 0x00000004 },
+- { 0x000d0014, 0x00000038 },
+- { 0x0000e8b6, 0x00000004 },
+- { 0x000d0016, 0x00000038 },
+- { 0x0000e854, 0x00000004 },
+- { 0x000d0018, 0x00000038 },
+- { 0x0000e855, 0x00000004 },
+- { 0x000d001a, 0x00000038 },
+- { 0x0000e856, 0x00000004 },
+- { 0x000d001c, 0x00000038 },
+- { 0x0000e857, 0x00000004 },
+- { 0x000d001e, 0x00000038 },
+- { 0x0000e824, 0x00000004 },
+- { 0x000d0020, 0x00000038 },
+- { 0x0000e825, 0x00000004 },
+- { 0x000d0022, 0x00000038 },
+- { 0x0000e830, 0x00000004 },
+- { 0x000d0024, 0x00000038 },
+- { 0x0000f0c0, 0x00000004 },
+- { 0x000d0026, 0x00000038 },
+- { 0x0000f0c1, 0x00000004 },
+- { 0x000d0028, 0x00000038 },
+- { 0x0000e000, 0x00000004 },
+- { 0x000d002a, 0x00000038 },
+- { 0x0000e000, 0x00000004 },
+- { 0x000d002c, 0x00000038 },
+- { 0x0000e000, 0x00000004 },
+- { 0x000d002e, 0x00000038 },
+- { 0x0000e000, 0x00000004 },
+- { 0x000d0030, 0x00000038 },
+- { 0x0000e000, 0x00000004 },
+- { 0x000d0032, 0x00000038 },
+- { 0x0000f180, 0x00000004 },
+- { 0x000d0034, 0x00000038 },
+- { 0x0000f393, 0x00000004 },
+- { 0x000d0036, 0x00000038 },
+- { 0x0000f38a, 0x00000004 },
+- { 0x000d0038, 0x00000038 },
+- { 0x0000f38e, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000043, 0x00000018 },
+- { 0x00cce800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x08004800, 0x00000004 },
+- { 0x0000003a, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x2000451d, 0x00000004 },
+- { 0x0000e580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x08004580, 0x00000004 },
+- { 0x000ce581, 0x00000004 },
+- { 0x00000047, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x00032000, 0x00000004 },
+- { 0x00022051, 0x00000028 },
+- { 0x00000051, 0x00000024 },
+- { 0x0800450f, 0x00000004 },
+- { 0x0000a04b, 0x00000008 },
+- { 0x0000e565, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000052, 0x00000008 },
+- { 0x03cca5b4, 0x00000004 },
+- { 0x05432000, 0x00000004 },
+- { 0x00022000, 0x00000004 },
+- { 0x4ccce05e, 0x00000030 },
+- { 0x08274565, 0x00000004 },
+- { 0x0000005e, 0x00000030 },
+- { 0x08004564, 0x00000004 },
+- { 0x0000e566, 0x00000004 },
+- { 0x00000055, 0x00000008 },
+- { 0x00802061, 0x00000010 },
+- { 0x00202000, 0x00000004 },
+- { 0x001b00ff, 0x00000004 },
+- { 0x01000064, 0x00000010 },
+- { 0x001f2000, 0x00000004 },
+- { 0x001c00ff, 0x00000004 },
+- { 0000000000, 0x0000000c },
+- { 0x00000072, 0x00000030 },
+- { 0x00000055, 0x00000008 },
+- { 0x0000e576, 0x00000004 },
+- { 0x0000e577, 0x00000004 },
+- { 0x0000e50e, 0x00000004 },
+- { 0x0000e50f, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00000069, 0x00000018 },
+- { 0x00c0e5f9, 0x000000c2 },
+- { 0x00000069, 0x00000008 },
+- { 0x0014e50e, 0x00000004 },
+- { 0x0040e50f, 0x00000004 },
+- { 0x00c0006c, 0x00000008 },
+- { 0x0000e570, 0x00000004 },
+- { 0x0000e571, 0x00000004 },
+- { 0x0000e572, 0x0000000c },
+- { 0x0000a000, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x0000e568, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00000076, 0x00000018 },
+- { 0x000b0000, 0x00000004 },
+- { 0x18c0e562, 0x00000004 },
+- { 0x00000078, 0x00000008 },
+- { 0x00c00077, 0x00000008 },
+- { 0x000700c7, 0x00000004 },
+- { 0x00000080, 0x00000038 },
+- { 0x0000e5bb, 0x00000004 },
+- { 0x0000e5bc, 0000000000 },
+- { 0x0000a000, 0x00000004 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e800, 0000000000 },
+- { 0x0000e821, 0x00000004 },
+- { 0x0000e82e, 0000000000 },
+- { 0x02cca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000ce1cc, 0x00000004 },
+- { 0x050de1cd, 0x00000004 },
+- { 0x00400000, 0x00000004 },
+- { 0x0000008f, 0x00000018 },
+- { 0x00c0a000, 0x00000004 },
+- { 0x0000008c, 0x00000008 },
+- { 0x00000091, 0x00000020 },
+- { 0x4200e000, 0000000000 },
+- { 0x00000098, 0x00000038 },
+- { 0x000ca000, 0x00000004 },
+- { 0x00140000, 0x00000004 },
+- { 0x000c2000, 0x00000004 },
+- { 0x00160000, 0x00000004 },
+- { 0x700ce000, 0x00000004 },
+- { 0x00140094, 0x00000008 },
+- { 0x4000e000, 0000000000 },
+- { 0x02400000, 0x00000004 },
+- { 0x400ee000, 0x00000004 },
+- { 0x02400000, 0x00000004 },
+- { 0x4000e000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x0240e51b, 0x00000004 },
+- { 0x0080e50a, 0x00000005 },
+- { 0x0080e50b, 0x00000005 },
+- { 0x00220000, 0x00000004 },
+- { 0x000700c7, 0x00000004 },
+- { 0x000000a4, 0x00000038 },
+- { 0x0080e5bd, 0x00000005 },
+- { 0x0000e5bb, 0x00000005 },
+- { 0x0080e5bc, 0x00000005 },
+- { 0x00210000, 0x00000004 },
+- { 0x02800000, 0x00000004 },
+- { 0x00c000ab, 0x00000018 },
+- { 0x4180e000, 0x00000040 },
+- { 0x000000ad, 0x00000024 },
+- { 0x01000000, 0x0000000c },
+- { 0x0100e51d, 0x0000000c },
+- { 0x000045bb, 0x00000004 },
+- { 0x000080a7, 0x00000008 },
+- { 0x0000f3ce, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053cf, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f3d2, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c053d3, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x0000f39d, 0x00000004 },
+- { 0x0140a000, 0x00000004 },
+- { 0x00cc2000, 0x00000004 },
+- { 0x08c0539e, 0x00000040 },
+- { 0x00008000, 0000000000 },
+- { 0x03c00830, 0x00000004 },
+- { 0x4200e000, 0000000000 },
+- { 0x0000a000, 0x00000004 },
+- { 0x200045e0, 0x00000004 },
+- { 0x0000e5e1, 0000000000 },
+- { 0x00000001, 0000000000 },
+- { 0x000700c4, 0x00000004 },
+- { 0x0800e394, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x0000e8c4, 0x00000004 },
+- { 0x0000e8c5, 0x00000004 },
+- { 0x0000e8c6, 0x00000004 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000c8, 0x00000008 },
+- { 0x0000e928, 0x00000004 },
+- { 0x0000e929, 0x00000004 },
+- { 0x0000e92a, 0x00000004 },
+- { 0x000000cf, 0x00000008 },
+- { 0xdeadbeef, 0000000000 },
+- { 0x00000116, 0000000000 },
+- { 0x000700d3, 0x00000004 },
+- { 0x080050e7, 0x00000004 },
+- { 0x000700d4, 0x00000004 },
+- { 0x0800401c, 0x00000004 },
+- { 0x0000e01d, 0000000000 },
+- { 0x02c02000, 0x00000004 },
+- { 0x00060000, 0x00000004 },
+- { 0x000000de, 0x00000034 },
+- { 0x000000db, 0x00000008 },
+- { 0x00008000, 0x00000004 },
+- { 0xc000e000, 0000000000 },
+- { 0x0000e1cc, 0x00000004 },
+- { 0x0500e1cd, 0x00000004 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000000e5, 0x00000034 },
+- { 0x000000e1, 0x00000008 },
+- { 0x0000a000, 0000000000 },
+- { 0x0019e1cc, 0x00000004 },
+- { 0x001b0001, 0x00000004 },
+- { 0x0500a000, 0x00000004 },
+- { 0x080041cd, 0x00000004 },
+- { 0x000ca000, 0x00000004 },
+- { 0x000000fb, 0x00000034 },
+- { 0x0000004a, 0x00000008 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0x000c2000, 0x00000004 },
+- { 0x001d0018, 0x00000004 },
+- { 0x001a0001, 0x00000004 },
+- { 0x000000fb, 0x00000034 },
+- { 0x0000004a, 0x00000008 },
+- { 0x0500a04a, 0x00000008 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+- { 0000000000, 0000000000 },
+-};
+-
+-
+-#endif
+diff --git a/drivers/gpu/drm/radeon/radeon_mode.h b/drivers/gpu/drm/radeon/radeon_mode.h
+index 3b09a1f..570a587 100644
+--- a/drivers/gpu/drm/radeon/radeon_mode.h
++++ b/drivers/gpu/drm/radeon/radeon_mode.h
+@@ -175,6 +175,15 @@ struct radeon_mode_info {
+ enum radeon_connector_table connector_table;
+ bool mode_config_initialized;
+ struct radeon_crtc *crtcs[2];
++ /* DVI-I properties */
++ struct drm_property *coherent_mode_property;
++ /* DAC enable load detect */
++ struct drm_property *load_detect_property;
++ /* TV standard load detect */
++ struct drm_property *tv_std_property;
++ /* legacy TMDS PLL detect */
++ struct drm_property *tmds_pll_property;
++
+ };
+
+ struct radeon_native_mode {
+@@ -188,6 +197,21 @@ struct radeon_native_mode {
+ uint32_t flags;
+ };
+
++#define MAX_H_CODE_TIMING_LEN 32
++#define MAX_V_CODE_TIMING_LEN 32
++
++/* need to store these as reading
++ back code tables is excessive */
++struct radeon_tv_regs {
++ uint32_t tv_uv_adr;
++ uint32_t timing_cntl;
++ uint32_t hrestart;
++ uint32_t vrestart;
++ uint32_t frestart;
++ uint16_t h_code_timing[MAX_H_CODE_TIMING_LEN];
++ uint16_t v_code_timing[MAX_V_CODE_TIMING_LEN];
++};
++
+ struct radeon_crtc {
+ struct drm_crtc base;
+ int crtc_id;
+@@ -195,8 +219,6 @@ struct radeon_crtc {
+ bool enabled;
+ bool can_tile;
+ uint32_t crtc_offset;
+- struct radeon_framebuffer *fbdev_fb;
+- struct drm_mode_set mode_set;
+ struct drm_gem_object *cursor_bo;
+ uint64_t cursor_addr;
+ int cursor_width;
+@@ -204,7 +226,6 @@ struct radeon_crtc {
+ uint32_t legacy_display_base_addr;
+ uint32_t legacy_cursor_offset;
+ enum radeon_rmx_type rmx_type;
+- uint32_t devices;
+ fixed20_12 vsc;
+ fixed20_12 hsc;
+ struct radeon_native_mode native_mode;
+@@ -236,7 +257,13 @@ struct radeon_encoder_tv_dac {
+ uint32_t ntsc_tvdac_adj;
+ uint32_t pal_tvdac_adj;
+
++ int h_pos;
++ int v_pos;
++ int h_size;
++ int supported_tv_stds;
++ bool tv_on;
+ enum radeon_tv_std tv_std;
++ struct radeon_tv_regs tv;
+ };
+
+ struct radeon_encoder_int_tmds {
+@@ -255,10 +282,15 @@ struct radeon_encoder_atom_dig {
+ struct radeon_native_mode native_mode;
+ };
+
++struct radeon_encoder_atom_dac {
++ enum radeon_tv_std tv_std;
++};
++
+ struct radeon_encoder {
+ struct drm_encoder base;
+ uint32_t encoder_id;
+ uint32_t devices;
++ uint32_t active_device;
+ uint32_t flags;
+ uint32_t pixel_clock;
+ enum radeon_rmx_type rmx_type;
+@@ -276,8 +308,12 @@ struct radeon_connector {
+ uint32_t connector_id;
+ uint32_t devices;
+ struct radeon_i2c_chan *ddc_bus;
+- int use_digital;
++ bool use_digital;
++ /* we need to mind the EDID between detect
++ and get modes due to analog/digital/tvencoder */
++ struct edid *edid;
+ void *con_priv;
++ bool dac_load_detect;
+ };
+
+ struct radeon_framebuffer {
+@@ -310,6 +346,7 @@ struct drm_encoder *radeon_encoder_legacy_tmds_int_add(struct drm_device *dev, i
+ struct drm_encoder *radeon_encoder_legacy_tmds_ext_add(struct drm_device *dev, int bios_index);
+ extern void atombios_external_tmds_setup(struct drm_encoder *encoder, int action);
+ extern int atombios_get_encoder_mode(struct drm_encoder *encoder);
++extern void radeon_encoder_set_active_device(struct drm_encoder *encoder);
+
+ extern void radeon_crtc_load_lut(struct drm_crtc *crtc);
+ extern int atombios_crtc_set_base(struct drm_crtc *crtc, int x, int y,
+@@ -337,16 +374,18 @@ extern bool radeon_atom_get_clock_info(struct drm_device *dev);
+ extern bool radeon_combios_get_clock_info(struct drm_device *dev);
+ extern struct radeon_encoder_atom_dig *
+ radeon_atombios_get_lvds_info(struct radeon_encoder *encoder);
+-extern struct radeon_encoder_int_tmds *
+-radeon_atombios_get_tmds_info(struct radeon_encoder *encoder);
++bool radeon_atombios_get_tmds_info(struct radeon_encoder *encoder,
++ struct radeon_encoder_int_tmds *tmds);
++bool radeon_legacy_get_tmds_info_from_combios(struct radeon_encoder *encoder,
++ struct radeon_encoder_int_tmds *tmds);
++bool radeon_legacy_get_tmds_info_from_table(struct radeon_encoder *encoder,
++ struct radeon_encoder_int_tmds *tmds);
+ extern struct radeon_encoder_primary_dac *
+ radeon_atombios_get_primary_dac_info(struct radeon_encoder *encoder);
+ extern struct radeon_encoder_tv_dac *
+ radeon_atombios_get_tv_dac_info(struct radeon_encoder *encoder);
+ extern struct radeon_encoder_lvds *
+ radeon_combios_get_lvds_info(struct radeon_encoder *encoder);
+-extern struct radeon_encoder_int_tmds *
+-radeon_combios_get_tmds_info(struct radeon_encoder *encoder);
+ extern void radeon_combios_get_ext_tmds_info(struct radeon_encoder *encoder);
+ extern struct radeon_encoder_tv_dac *
+ radeon_combios_get_tv_dac_info(struct radeon_encoder *encoder);
+@@ -356,6 +395,8 @@ extern void radeon_combios_output_lock(struct drm_encoder *encoder, bool lock);
+ extern void radeon_combios_initialize_bios_scratch_regs(struct drm_device *dev);
+ extern void radeon_atom_output_lock(struct drm_encoder *encoder, bool lock);
+ extern void radeon_atom_initialize_bios_scratch_regs(struct drm_device *dev);
++extern void radeon_save_bios_scratch_regs(struct radeon_device *rdev);
++extern void radeon_restore_bios_scratch_regs(struct radeon_device *rdev);
+ extern void
+ radeon_atombios_encoder_crtc_scratch_regs(struct drm_encoder *encoder, int crtc);
+ extern void
+@@ -396,6 +437,19 @@ extern int radeon_static_clocks_init(struct drm_device *dev);
+ bool radeon_crtc_scaling_mode_fixup(struct drm_crtc *crtc,
+ struct drm_display_mode *mode,
+ struct drm_display_mode *adjusted_mode);
+-void atom_rv515_force_tv_scaler(struct radeon_device *rdev);
+-
++void atom_rv515_force_tv_scaler(struct radeon_device *rdev, struct radeon_crtc *radeon_crtc);
++
++/* legacy tv */
++void radeon_legacy_tv_adjust_crtc_reg(struct drm_encoder *encoder,
++ uint32_t *h_total_disp, uint32_t *h_sync_strt_wid,
++ uint32_t *v_total_disp, uint32_t *v_sync_strt_wid);
++void radeon_legacy_tv_adjust_pll1(struct drm_encoder *encoder,
++ uint32_t *htotal_cntl, uint32_t *ppll_ref_div,
++ uint32_t *ppll_div_3, uint32_t *pixclks_cntl);
++void radeon_legacy_tv_adjust_pll2(struct drm_encoder *encoder,
++ uint32_t *htotal2_cntl, uint32_t *p2pll_ref_div,
++ uint32_t *p2pll_div_0, uint32_t *pixclks_cntl);
++void radeon_legacy_tv_mode_set(struct drm_encoder *encoder,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode);
+ #endif
+diff --git a/drivers/gpu/drm/radeon/radeon_object.c b/drivers/gpu/drm/radeon/radeon_object.c
+index b85fb83..73af463 100644
+--- a/drivers/gpu/drm/radeon/radeon_object.c
++++ b/drivers/gpu/drm/radeon/radeon_object.c
+@@ -188,6 +188,7 @@ int radeon_object_kmap(struct radeon_object *robj, void **ptr)
+ if (ptr) {
+ *ptr = robj->kptr;
+ }
++ radeon_object_check_tiling(robj, 0, 0);
+ return 0;
+ }
+
+@@ -200,6 +201,7 @@ void radeon_object_kunmap(struct radeon_object *robj)
+ }
+ robj->kptr = NULL;
+ spin_unlock(&robj->tobj.lock);
++ radeon_object_check_tiling(robj, 0, 0);
+ ttm_bo_kunmap(&robj->kmap);
+ }
+
+@@ -369,6 +371,14 @@ void radeon_object_force_delete(struct radeon_device *rdev)
+
+ int radeon_object_init(struct radeon_device *rdev)
+ {
++ /* Add an MTRR for the VRAM */
++ rdev->mc.vram_mtrr = mtrr_add(rdev->mc.aper_base, rdev->mc.aper_size,
++ MTRR_TYPE_WRCOMB, 1);
++ DRM_INFO("Detected VRAM RAM=%lluM, BAR=%lluM\n",
++ rdev->mc.mc_vram_size >> 20,
++ (unsigned long long)rdev->mc.aper_size >> 20);
++ DRM_INFO("RAM width %dbits %cDR\n",
++ rdev->mc.vram_width, rdev->mc.vram_is_ddr ? 'D' : 'S');
+ return radeon_ttm_init(rdev);
+ }
+
+diff --git a/drivers/gpu/drm/radeon/radeon_object.h b/drivers/gpu/drm/radeon/radeon_object.h
+index 473e477..10e8af6 100644
+--- a/drivers/gpu/drm/radeon/radeon_object.h
++++ b/drivers/gpu/drm/radeon/radeon_object.h
+@@ -37,6 +37,7 @@
+ * TTM.
+ */
+ struct radeon_mman {
++ struct ttm_bo_global_ref bo_global_ref;
+ struct ttm_global_reference mem_global_ref;
+ bool mem_global_referenced;
+ struct ttm_bo_device bdev;
+diff --git a/drivers/gpu/drm/radeon/radeon_reg.h b/drivers/gpu/drm/radeon/radeon_reg.h
+index 4df43f6..bfa1ab9 100644
+--- a/drivers/gpu/drm/radeon/radeon_reg.h
++++ b/drivers/gpu/drm/radeon/radeon_reg.h
+@@ -1945,6 +1945,11 @@
+ # define RADEON_TXFORMAT_DXT1 (12 << 0)
+ # define RADEON_TXFORMAT_DXT23 (14 << 0)
+ # define RADEON_TXFORMAT_DXT45 (15 << 0)
++# define RADEON_TXFORMAT_SHADOW16 (16 << 0)
++# define RADEON_TXFORMAT_SHADOW32 (17 << 0)
++# define RADEON_TXFORMAT_DUDV88 (18 << 0)
++# define RADEON_TXFORMAT_LDUDV655 (19 << 0)
++# define RADEON_TXFORMAT_LDUDUV8888 (20 << 0)
+ # define RADEON_TXFORMAT_FORMAT_MASK (31 << 0)
+ # define RADEON_TXFORMAT_FORMAT_SHIFT 0
+ # define RADEON_TXFORMAT_APPLE_YUV_MODE (1 << 5)
+@@ -2203,7 +2208,7 @@
+ # define RADEON_ROP_ENABLE (1 << 6)
+ # define RADEON_STENCIL_ENABLE (1 << 7)
+ # define RADEON_Z_ENABLE (1 << 8)
+-# define RADEON_DEPTH_XZ_OFFEST_ENABLE (1 << 9)
++# define RADEON_DEPTHXY_OFFSET_ENABLE (1 << 9)
+ # define RADEON_RB3D_COLOR_FORMAT_SHIFT 10
+
+ # define RADEON_COLOR_FORMAT_ARGB1555 3
+@@ -2773,7 +2778,12 @@
+ # define R200_TXFORMAT_DXT1 (12 << 0)
+ # define R200_TXFORMAT_DXT23 (14 << 0)
+ # define R200_TXFORMAT_DXT45 (15 << 0)
++# define R200_TXFORMAT_DVDU88 (18 << 0)
++# define R200_TXFORMAT_LDVDU655 (19 << 0)
++# define R200_TXFORMAT_LDVDU8888 (20 << 0)
++# define R200_TXFORMAT_GR1616 (21 << 0)
+ # define R200_TXFORMAT_ABGR8888 (22 << 0)
++# define R200_TXFORMAT_BGR111110 (23 << 0)
+ # define R200_TXFORMAT_FORMAT_MASK (31 << 0)
+ # define R200_TXFORMAT_FORMAT_SHIFT 0
+ # define R200_TXFORMAT_ALPHA_IN_MAP (1 << 6)
+@@ -2818,6 +2828,13 @@
+ #define R200_PP_TXPITCH_4 0x2c90 /* NPOT only */
+ #define R200_PP_TXPITCH_5 0x2cb0 /* NPOT only */
+
++#define R200_PP_CUBIC_FACES_0 0x2c18
++#define R200_PP_CUBIC_FACES_1 0x2c38
++#define R200_PP_CUBIC_FACES_2 0x2c58
++#define R200_PP_CUBIC_FACES_3 0x2c78
++#define R200_PP_CUBIC_FACES_4 0x2c98
++#define R200_PP_CUBIC_FACES_5 0x2cb8
++
+ #define R200_PP_TXOFFSET_0 0x2d00
+ # define R200_TXO_ENDIAN_NO_SWAP (0 << 0)
+ # define R200_TXO_ENDIAN_BYTE_SWAP (1 << 0)
+@@ -2829,11 +2846,44 @@
+ # define R200_TXO_MICRO_TILE (1 << 3)
+ # define R200_TXO_OFFSET_MASK 0xffffffe0
+ # define R200_TXO_OFFSET_SHIFT 5
++#define R200_PP_CUBIC_OFFSET_F1_0 0x2d04
++#define R200_PP_CUBIC_OFFSET_F2_0 0x2d08
++#define R200_PP_CUBIC_OFFSET_F3_0 0x2d0c
++#define R200_PP_CUBIC_OFFSET_F4_0 0x2d10
++#define R200_PP_CUBIC_OFFSET_F5_0 0x2d14
++
+ #define R200_PP_TXOFFSET_1 0x2d18
++#define R200_PP_CUBIC_OFFSET_F1_1 0x2d1c
++#define R200_PP_CUBIC_OFFSET_F2_1 0x2d20
++#define R200_PP_CUBIC_OFFSET_F3_1 0x2d24
++#define R200_PP_CUBIC_OFFSET_F4_1 0x2d28
++#define R200_PP_CUBIC_OFFSET_F5_1 0x2d2c
++
+ #define R200_PP_TXOFFSET_2 0x2d30
++#define R200_PP_CUBIC_OFFSET_F1_2 0x2d34
++#define R200_PP_CUBIC_OFFSET_F2_2 0x2d38
++#define R200_PP_CUBIC_OFFSET_F3_2 0x2d3c
++#define R200_PP_CUBIC_OFFSET_F4_2 0x2d40
++#define R200_PP_CUBIC_OFFSET_F5_2 0x2d44
++
+ #define R200_PP_TXOFFSET_3 0x2d48
++#define R200_PP_CUBIC_OFFSET_F1_3 0x2d4c
++#define R200_PP_CUBIC_OFFSET_F2_3 0x2d50
++#define R200_PP_CUBIC_OFFSET_F3_3 0x2d54
++#define R200_PP_CUBIC_OFFSET_F4_3 0x2d58
++#define R200_PP_CUBIC_OFFSET_F5_3 0x2d5c
+ #define R200_PP_TXOFFSET_4 0x2d60
++#define R200_PP_CUBIC_OFFSET_F1_4 0x2d64
++#define R200_PP_CUBIC_OFFSET_F2_4 0x2d68
++#define R200_PP_CUBIC_OFFSET_F3_4 0x2d6c
++#define R200_PP_CUBIC_OFFSET_F4_4 0x2d70
++#define R200_PP_CUBIC_OFFSET_F5_4 0x2d74
+ #define R200_PP_TXOFFSET_5 0x2d78
++#define R200_PP_CUBIC_OFFSET_F1_5 0x2d7c
++#define R200_PP_CUBIC_OFFSET_F2_5 0x2d80
++#define R200_PP_CUBIC_OFFSET_F3_5 0x2d84
++#define R200_PP_CUBIC_OFFSET_F4_5 0x2d88
++#define R200_PP_CUBIC_OFFSET_F5_5 0x2d8c
+
+ #define R200_PP_TFACTOR_0 0x2ee0
+ #define R200_PP_TFACTOR_1 0x2ee4
+@@ -3175,6 +3225,11 @@
+ # define R200_FORCE_INORDER_PROC (1<<31)
+ #define R200_PP_CNTL_X 0x2cc4
+ #define R200_PP_TXMULTI_CTL_0 0x2c1c
++#define R200_PP_TXMULTI_CTL_1 0x2c3c
++#define R200_PP_TXMULTI_CTL_2 0x2c5c
++#define R200_PP_TXMULTI_CTL_3 0x2c7c
++#define R200_PP_TXMULTI_CTL_4 0x2c9c
++#define R200_PP_TXMULTI_CTL_5 0x2cbc
+ #define R200_SE_VTX_STATE_CNTL 0x2180
+ # define R200_UPDATE_USER_COLOR_0_ENA_MASK (1<<16)
+
+@@ -3200,6 +3255,24 @@
+ #define RADEON_CP_RB_WPTR 0x0714
+ #define RADEON_CP_RB_RPTR_WR 0x071c
+
++#define RADEON_SCRATCH_UMSK 0x0770
++#define RADEON_SCRATCH_ADDR 0x0774
++
++#define R600_CP_RB_BASE 0xc100
++#define R600_CP_RB_CNTL 0xc104
++# define R600_RB_BUFSZ(x) ((x) << 0)
++# define R600_RB_BLKSZ(x) ((x) << 8)
++# define R600_RB_NO_UPDATE (1 << 27)
++# define R600_RB_RPTR_WR_ENA (1 << 31)
++#define R600_CP_RB_RPTR_WR 0xc108
++#define R600_CP_RB_RPTR_ADDR 0xc10c
++#define R600_CP_RB_RPTR_ADDR_HI 0xc110
++#define R600_CP_RB_WPTR 0xc114
++#define R600_CP_RB_WPTR_ADDR 0xc118
++#define R600_CP_RB_WPTR_ADDR_HI 0xc11c
++#define R600_CP_RB_RPTR 0x8700
++#define R600_CP_RB_WPTR_DELAY 0x8704
++
+ #define RADEON_CP_IB_BASE 0x0738
+ #define RADEON_CP_IB_BUFSZ 0x073c
+
+@@ -3260,6 +3333,7 @@
+ # define RADEON_CP_PACKET_MAX_DWORDS (1 << 12)
+ # define RADEON_CP_PACKET0_REG_MASK 0x000007ff
+ # define R300_CP_PACKET0_REG_MASK 0x00001fff
++# define R600_CP_PACKET0_REG_MASK 0x0000ffff
+ # define RADEON_CP_PACKET1_REG0_MASK 0x000007ff
+ # define RADEON_CP_PACKET1_REG1_MASK 0x003ff800
+
+@@ -3407,7 +3481,9 @@
+ # define RADEON_RGB_CONVERT_BY_PASS (1 << 10)
+ # define RADEON_UVRAM_READ_MARGIN_SHIFT 16
+ # define RADEON_FIFORAM_FFMACRO_READ_MARGIN_SHIFT 20
+-# define RADEON_TVOUT_SCALE_EN (1 << 26)
++# define RADEON_RGB_ATTEN_SEL(x) ((x) << 24)
++# define RADEON_TVOUT_SCALE_EN (1 << 26)
++# define RADEON_RGB_ATTEN_VAL(x) ((x) << 28)
+ #define RADEON_TV_SYNC_CNTL 0x0808
+ # define RADEON_SYNC_OE (1 << 0)
+ # define RADEON_SYNC_OUT (1 << 1)
+diff --git a/drivers/gpu/drm/radeon/radeon_ring.c b/drivers/gpu/drm/radeon/radeon_ring.c
+index 60d1593..747b4bf 100644
+--- a/drivers/gpu/drm/radeon/radeon_ring.c
++++ b/drivers/gpu/drm/radeon/radeon_ring.c
+@@ -56,10 +56,12 @@ int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib)
+ set_bit(i, rdev->ib_pool.alloc_bm);
+ rdev->ib_pool.ibs[i].length_dw = 0;
+ *ib = &rdev->ib_pool.ibs[i];
++ mutex_unlock(&rdev->ib_pool.mutex);
+ goto out;
+ }
+ if (list_empty(&rdev->ib_pool.scheduled_ibs)) {
+ /* we go do nothings here */
++ mutex_unlock(&rdev->ib_pool.mutex);
+ DRM_ERROR("all IB allocated none scheduled.\n");
+ r = -EINVAL;
+ goto out;
+@@ -69,10 +71,13 @@ int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib)
+ struct radeon_ib, list);
+ if (nib->fence == NULL) {
+ /* we go do nothings here */
++ mutex_unlock(&rdev->ib_pool.mutex);
+ DRM_ERROR("IB %lu scheduled without a fence.\n", nib->idx);
+ r = -EINVAL;
+ goto out;
+ }
++ mutex_unlock(&rdev->ib_pool.mutex);
++
+ r = radeon_fence_wait(nib->fence, false);
+ if (r) {
+ DRM_ERROR("radeon: IB(%lu:0x%016lX:%u)\n", nib->idx,
+@@ -81,12 +86,17 @@ int radeon_ib_get(struct radeon_device *rdev, struct radeon_ib **ib)
+ goto out;
+ }
+ radeon_fence_unref(&nib->fence);
++
+ nib->length_dw = 0;
++
++ /* scheduled list is accessed here */
++ mutex_lock(&rdev->ib_pool.mutex);
+ list_del(&nib->list);
+ INIT_LIST_HEAD(&nib->list);
++ mutex_unlock(&rdev->ib_pool.mutex);
++
+ *ib = nib;
+ out:
+- mutex_unlock(&rdev->ib_pool.mutex);
+ if (r) {
+ radeon_fence_unref(&fence);
+ } else {
+@@ -111,47 +121,36 @@ void radeon_ib_free(struct radeon_device *rdev, struct radeon_ib **ib)
+ }
+ list_del(&tmp->list);
+ INIT_LIST_HEAD(&tmp->list);
+- if (tmp->fence) {
++ if (tmp->fence)
+ radeon_fence_unref(&tmp->fence);
+- }
++
+ tmp->length_dw = 0;
+ clear_bit(tmp->idx, rdev->ib_pool.alloc_bm);
+ mutex_unlock(&rdev->ib_pool.mutex);
+ }
+
+-static void radeon_ib_align(struct radeon_device *rdev, struct radeon_ib *ib)
+-{
+- while ((ib->length_dw & rdev->cp.align_mask)) {
+- ib->ptr[ib->length_dw++] = PACKET2(0);
+- }
+-}
+-
+ int radeon_ib_schedule(struct radeon_device *rdev, struct radeon_ib *ib)
+ {
+ int r = 0;
+
+- mutex_lock(&rdev->ib_pool.mutex);
+- radeon_ib_align(rdev, ib);
+ if (!ib->length_dw || !rdev->cp.ready) {
+ /* TODO: Nothings in the ib we should report. */
+- mutex_unlock(&rdev->ib_pool.mutex);
+ DRM_ERROR("radeon: couldn't schedule IB(%lu).\n", ib->idx);
+ return -EINVAL;
+ }
++
+ /* 64 dwords should be enough for fence too */
+ r = radeon_ring_lock(rdev, 64);
+ if (r) {
+ DRM_ERROR("radeon: scheduling IB failled (%d).\n", r);
+- mutex_unlock(&rdev->ib_pool.mutex);
+ return r;
+ }
+- radeon_ring_write(rdev, PACKET0(RADEON_CP_IB_BASE, 1));
+- radeon_ring_write(rdev, ib->gpu_addr);
+- radeon_ring_write(rdev, ib->length_dw);
++ radeon_ring_ib_execute(rdev, ib);
+ radeon_fence_emit(rdev, ib->fence);
+- radeon_ring_unlock_commit(rdev);
++ mutex_lock(&rdev->ib_pool.mutex);
+ list_add_tail(&ib->list, &rdev->ib_pool.scheduled_ibs);
+ mutex_unlock(&rdev->ib_pool.mutex);
++ radeon_ring_unlock_commit(rdev);
+ return 0;
+ }
+
+@@ -162,6 +161,8 @@ int radeon_ib_pool_init(struct radeon_device *rdev)
+ int i;
+ int r = 0;
+
++ if (rdev->ib_pool.robj)
++ return 0;
+ /* Allocate 1M object buffer */
+ INIT_LIST_HEAD(&rdev->ib_pool.scheduled_ibs);
+ r = radeon_object_create(rdev, NULL, RADEON_IB_POOL_SIZE*64*1024,
+@@ -215,69 +216,16 @@ void radeon_ib_pool_fini(struct radeon_device *rdev)
+ mutex_unlock(&rdev->ib_pool.mutex);
+ }
+
+-int radeon_ib_test(struct radeon_device *rdev)
+-{
+- struct radeon_ib *ib;
+- uint32_t scratch;
+- uint32_t tmp = 0;
+- unsigned i;
+- int r;
+-
+- r = radeon_scratch_get(rdev, &scratch);
+- if (r) {
+- DRM_ERROR("radeon: failed to get scratch reg (%d).\n", r);
+- return r;
+- }
+- WREG32(scratch, 0xCAFEDEAD);
+- r = radeon_ib_get(rdev, &ib);
+- if (r) {
+- return r;
+- }
+- ib->ptr[0] = PACKET0(scratch, 0);
+- ib->ptr[1] = 0xDEADBEEF;
+- ib->ptr[2] = PACKET2(0);
+- ib->ptr[3] = PACKET2(0);
+- ib->ptr[4] = PACKET2(0);
+- ib->ptr[5] = PACKET2(0);
+- ib->ptr[6] = PACKET2(0);
+- ib->ptr[7] = PACKET2(0);
+- ib->length_dw = 8;
+- r = radeon_ib_schedule(rdev, ib);
+- if (r) {
+- radeon_scratch_free(rdev, scratch);
+- radeon_ib_free(rdev, &ib);
+- return r;
+- }
+- r = radeon_fence_wait(ib->fence, false);
+- if (r) {
+- return r;
+- }
+- for (i = 0; i < rdev->usec_timeout; i++) {
+- tmp = RREG32(scratch);
+- if (tmp == 0xDEADBEEF) {
+- break;
+- }
+- DRM_UDELAY(1);
+- }
+- if (i < rdev->usec_timeout) {
+- DRM_INFO("ib test succeeded in %u usecs\n", i);
+- } else {
+- DRM_ERROR("radeon: ib test failed (sracth(0x%04X)=0x%08X)\n",
+- scratch, tmp);
+- r = -EINVAL;
+- }
+- radeon_scratch_free(rdev, scratch);
+- radeon_ib_free(rdev, &ib);
+- return r;
+-}
+-
+
+ /*
+ * Ring.
+ */
+ void radeon_ring_free_size(struct radeon_device *rdev)
+ {
+- rdev->cp.rptr = RREG32(RADEON_CP_RB_RPTR);
++ if (rdev->family >= CHIP_R600)
++ rdev->cp.rptr = RREG32(R600_CP_RB_RPTR);
++ else
++ rdev->cp.rptr = RREG32(RADEON_CP_RB_RPTR);
+ /* This works because ring_size is a power of 2 */
+ rdev->cp.ring_free_dw = (rdev->cp.rptr + (rdev->cp.ring_size / 4));
+ rdev->cp.ring_free_dw -= rdev->cp.wptr;
+@@ -320,11 +268,10 @@ void radeon_ring_unlock_commit(struct radeon_device *rdev)
+ count_dw_pad = (rdev->cp.align_mask + 1) -
+ (rdev->cp.wptr & rdev->cp.align_mask);
+ for (i = 0; i < count_dw_pad; i++) {
+- radeon_ring_write(rdev, PACKET2(0));
++ radeon_ring_write(rdev, 2 << 30);
+ }
+ DRM_MEMORYBARRIER();
+- WREG32(RADEON_CP_RB_WPTR, rdev->cp.wptr);
+- (void)RREG32(RADEON_CP_RB_WPTR);
++ radeon_cp_commit(rdev);
+ mutex_unlock(&rdev->cp.mutex);
+ }
+
+@@ -334,46 +281,6 @@ void radeon_ring_unlock_undo(struct radeon_device *rdev)
+ mutex_unlock(&rdev->cp.mutex);
+ }
+
+-int radeon_ring_test(struct radeon_device *rdev)
+-{
+- uint32_t scratch;
+- uint32_t tmp = 0;
+- unsigned i;
+- int r;
+-
+- r = radeon_scratch_get(rdev, &scratch);
+- if (r) {
+- DRM_ERROR("radeon: cp failed to get scratch reg (%d).\n", r);
+- return r;
+- }
+- WREG32(scratch, 0xCAFEDEAD);
+- r = radeon_ring_lock(rdev, 2);
+- if (r) {
+- DRM_ERROR("radeon: cp failed to lock ring (%d).\n", r);
+- radeon_scratch_free(rdev, scratch);
+- return r;
+- }
+- radeon_ring_write(rdev, PACKET0(scratch, 0));
+- radeon_ring_write(rdev, 0xDEADBEEF);
+- radeon_ring_unlock_commit(rdev);
+- for (i = 0; i < rdev->usec_timeout; i++) {
+- tmp = RREG32(scratch);
+- if (tmp == 0xDEADBEEF) {
+- break;
+- }
+- DRM_UDELAY(1);
+- }
+- if (i < rdev->usec_timeout) {
+- DRM_INFO("ring test succeeded in %d usecs\n", i);
+- } else {
+- DRM_ERROR("radeon: ring test failed (sracth(0x%04X)=0x%08X)\n",
+- scratch, tmp);
+- r = -EINVAL;
+- }
+- radeon_scratch_free(rdev, scratch);
+- return r;
+-}
+-
+ int radeon_ring_init(struct radeon_device *rdev, unsigned ring_size)
+ {
+ int r;
+diff --git a/drivers/gpu/drm/radeon/radeon_share.h b/drivers/gpu/drm/radeon/radeon_share.h
+deleted file mode 100644
+index 63a7735..0000000
+--- a/drivers/gpu/drm/radeon/radeon_share.h
++++ /dev/null
+@@ -1,39 +0,0 @@
+-/*
+- * Copyright 2008 Advanced Micro Devices, Inc.
+- * Copyright 2008 Red Hat Inc.
+- * Copyright 2009 Jerome Glisse.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: Dave Airlie
+- * Alex Deucher
+- * Jerome Glisse
+- */
+-#ifndef __RADEON_SHARE_H__
+-#define __RADEON_SHARE_H__
+-
+-void r100_vram_init_sizes(struct radeon_device *rdev);
+-
+-void rs690_line_buffer_adjust(struct radeon_device *rdev,
+- struct drm_display_mode *mode1,
+- struct drm_display_mode *mode2);
+-
+-void rv515_bandwidth_avivo_update(struct radeon_device *rdev);
+-
+-#endif
+diff --git a/drivers/gpu/drm/radeon/radeon_state.c b/drivers/gpu/drm/radeon/radeon_state.c
+index 2882f40..38537d9 100644
+--- a/drivers/gpu/drm/radeon/radeon_state.c
++++ b/drivers/gpu/drm/radeon/radeon_state.c
+@@ -1546,7 +1546,7 @@ static void radeon_cp_dispatch_vertex(struct drm_device * dev,
+ } while (i < nbox);
+ }
+
+-static void radeon_cp_discard_buffer(struct drm_device *dev, struct drm_master *master, struct drm_buf *buf)
++void radeon_cp_discard_buffer(struct drm_device *dev, struct drm_master *master, struct drm_buf *buf)
+ {
+ drm_radeon_private_t *dev_priv = dev->dev_private;
+ struct drm_radeon_master_private *master_priv = master->driver_priv;
+@@ -2213,7 +2213,10 @@ static int radeon_cp_swap(struct drm_device *dev, void *data, struct drm_file *f
+ if (sarea_priv->nbox > RADEON_NR_SAREA_CLIPRECTS)
+ sarea_priv->nbox = RADEON_NR_SAREA_CLIPRECTS;
+
+- radeon_cp_dispatch_swap(dev, file_priv->master);
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ r600_cp_dispatch_swap(dev, file_priv);
++ else
++ radeon_cp_dispatch_swap(dev, file_priv->master);
+ sarea_priv->ctx_owner = 0;
+
+ COMMIT_RING();
+@@ -2412,7 +2415,10 @@ static int radeon_cp_texture(struct drm_device *dev, void *data, struct drm_file
+ RING_SPACE_TEST_WITH_RETURN(dev_priv);
+ VB_AGE_TEST_WITH_RETURN(dev_priv);
+
+- ret = radeon_cp_dispatch_texture(dev, file_priv, tex, &image);
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ ret = r600_cp_dispatch_texture(dev, file_priv, tex, &image);
++ else
++ ret = radeon_cp_dispatch_texture(dev, file_priv, tex, &image);
+
+ return ret;
+ }
+@@ -2495,8 +2501,9 @@ static int radeon_cp_indirect(struct drm_device *dev, void *data, struct drm_fil
+ radeon_cp_dispatch_indirect(dev, buf, indirect->start, indirect->end);
+ }
+
+- if (indirect->discard)
++ if (indirect->discard) {
+ radeon_cp_discard_buffer(dev, file_priv->master, buf);
++ }
+
+ COMMIT_RING();
+ return 0;
+@@ -3027,7 +3034,10 @@ static int radeon_cp_getparam(struct drm_device *dev, void *data, struct drm_fil
+ value = GET_SCRATCH(dev_priv, 2);
+ break;
+ case RADEON_PARAM_IRQ_NR:
+- value = drm_dev_to_irq(dev);
++ if ((dev_priv->flags & RADEON_FAMILY_MASK) >= CHIP_R600)
++ value = 0;
++ else
++ value = drm_dev_to_irq(dev);
+ break;
+ case RADEON_PARAM_GART_BASE:
+ value = dev_priv->gart_vm_start;
+@@ -3227,7 +3237,8 @@ struct drm_ioctl_desc radeon_ioctls[] = {
+ DRM_IOCTL_DEF(DRM_RADEON_IRQ_WAIT, radeon_irq_wait, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_SETPARAM, radeon_cp_setparam, DRM_AUTH),
+ DRM_IOCTL_DEF(DRM_RADEON_SURF_ALLOC, radeon_surface_alloc, DRM_AUTH),
+- DRM_IOCTL_DEF(DRM_RADEON_SURF_FREE, radeon_surface_free, DRM_AUTH)
++ DRM_IOCTL_DEF(DRM_RADEON_SURF_FREE, radeon_surface_free, DRM_AUTH),
++ DRM_IOCTL_DEF(DRM_RADEON_CS, r600_cs_legacy_ioctl, DRM_AUTH)
+ };
+
+ int radeon_max_ioctl = DRM_ARRAY_SIZE(radeon_ioctls);
+diff --git a/drivers/gpu/drm/radeon/radeon_ttm.c b/drivers/gpu/drm/radeon/radeon_ttm.c
+index 15c3531..c729cd1 100644
+--- a/drivers/gpu/drm/radeon/radeon_ttm.c
++++ b/drivers/gpu/drm/radeon/radeon_ttm.c
+@@ -35,11 +35,14 @@
+ #include <ttm/ttm_module.h>
+ #include <drm/drmP.h>
+ #include <drm/radeon_drm.h>
++#include <linux/seq_file.h>
+ #include "radeon_reg.h"
+ #include "radeon.h"
+
+ #define DRM_FILE_PAGE_OFFSET (0x100000000ULL >> PAGE_SHIFT)
+
++static int radeon_ttm_debugfs_init(struct radeon_device *rdev);
++
+ static struct radeon_device *radeon_get_rdev(struct ttm_bo_device *bdev)
+ {
+ struct radeon_mman *mman;
+@@ -77,9 +80,25 @@ static int radeon_ttm_global_init(struct radeon_device *rdev)
+ global_ref->release = &radeon_ttm_mem_global_release;
+ r = ttm_global_item_ref(global_ref);
+ if (r != 0) {
+- DRM_ERROR("Failed referencing a global TTM memory object.\n");
++ DRM_ERROR("Failed setting up TTM memory accounting "
++ "subsystem.\n");
++ return r;
++ }
++
++ rdev->mman.bo_global_ref.mem_glob =
++ rdev->mman.mem_global_ref.object;
++ global_ref = &rdev->mman.bo_global_ref.ref;
++ global_ref->global_type = TTM_GLOBAL_TTM_BO;
++ global_ref->size = sizeof(struct ttm_bo_global);
++ global_ref->init = &ttm_bo_global_init;
++ global_ref->release = &ttm_bo_global_release;
++ r = ttm_global_item_ref(global_ref);
++ if (r != 0) {
++ DRM_ERROR("Failed setting up TTM BO subsystem.\n");
++ ttm_global_item_unref(&rdev->mman.mem_global_ref);
+ return r;
+ }
++
+ rdev->mman.mem_global_referenced = true;
+ return 0;
+ }
+@@ -87,6 +106,7 @@ static int radeon_ttm_global_init(struct radeon_device *rdev)
+ static void radeon_ttm_global_fini(struct radeon_device *rdev)
+ {
+ if (rdev->mman.mem_global_referenced) {
++ ttm_global_item_unref(&rdev->mman.bo_global_ref.ref);
+ ttm_global_item_unref(&rdev->mman.mem_global_ref);
+ rdev->mman.mem_global_referenced = false;
+ }
+@@ -286,9 +306,11 @@ static int radeon_move_vram_ram(struct ttm_buffer_object *bo,
+ r = ttm_bo_move_ttm(bo, true, no_wait, new_mem);
+ out_cleanup:
+ if (tmp_mem.mm_node) {
+- spin_lock(&rdev->mman.bdev.lru_lock);
++ struct ttm_bo_global *glob = rdev->mman.bdev.glob;
++
++ spin_lock(&glob->lru_lock);
+ drm_mm_put_block(tmp_mem.mm_node);
+- spin_unlock(&rdev->mman.bdev.lru_lock);
++ spin_unlock(&glob->lru_lock);
+ return r;
+ }
+ return r;
+@@ -323,9 +345,11 @@ static int radeon_move_ram_vram(struct ttm_buffer_object *bo,
+ }
+ out_cleanup:
+ if (tmp_mem.mm_node) {
+- spin_lock(&rdev->mman.bdev.lru_lock);
++ struct ttm_bo_global *glob = rdev->mman.bdev.glob;
++
++ spin_lock(&glob->lru_lock);
+ drm_mm_put_block(tmp_mem.mm_node);
+- spin_unlock(&rdev->mman.bdev.lru_lock);
++ spin_unlock(&glob->lru_lock);
+ return r;
+ }
+ return r;
+@@ -352,9 +376,8 @@ static int radeon_bo_move(struct ttm_buffer_object *bo,
+ radeon_move_null(bo, new_mem);
+ return 0;
+ }
+- if (!rdev->cp.ready) {
++ if (!rdev->cp.ready || rdev->asic->copy == NULL) {
+ /* use memcpy */
+- DRM_ERROR("CP is not ready use memcpy.\n");
+ goto memcpy;
+ }
+
+@@ -446,7 +469,7 @@ int radeon_ttm_init(struct radeon_device *rdev)
+ }
+ /* No others user of address space so set it to 0 */
+ r = ttm_bo_device_init(&rdev->mman.bdev,
+- rdev->mman.mem_global_ref.object,
++ rdev->mman.bo_global_ref.ref.object,
+ &radeon_bo_driver, DRM_FILE_PAGE_OFFSET,
+ rdev->need_dma32);
+ if (r) {
+@@ -471,7 +494,7 @@ int radeon_ttm_init(struct radeon_device *rdev)
+ return r;
+ }
+ DRM_INFO("radeon: %uM of VRAM memory ready\n",
+- rdev->mc.real_vram_size / (1024 * 1024));
++ (unsigned)rdev->mc.real_vram_size / (1024 * 1024));
+ r = ttm_bo_init_mm(&rdev->mman.bdev, TTM_PL_TT, 0,
+ ((rdev->mc.gtt_size) >> PAGE_SHIFT));
+ if (r) {
+@@ -479,10 +502,16 @@ int radeon_ttm_init(struct radeon_device *rdev)
+ return r;
+ }
+ DRM_INFO("radeon: %uM of GTT memory ready.\n",
+- rdev->mc.gtt_size / (1024 * 1024));
++ (unsigned)(rdev->mc.gtt_size / (1024 * 1024)));
+ if (unlikely(rdev->mman.bdev.dev_mapping == NULL)) {
+ rdev->mman.bdev.dev_mapping = rdev->ddev->dev_mapping;
+ }
++
++ r = radeon_ttm_debugfs_init(rdev);
++ if (r) {
++ DRM_ERROR("Failed to init debugfs\n");
++ return r;
++ }
+ return 0;
+ }
+
+@@ -657,3 +686,49 @@ struct ttm_backend *radeon_ttm_backend_create(struct radeon_device *rdev)
+ gtt->bound = false;
+ return &gtt->backend;
+ }
++
++#define RADEON_DEBUGFS_MEM_TYPES 2
++
++#if defined(CONFIG_DEBUG_FS)
++static int radeon_mm_dump_table(struct seq_file *m, void *data)
++{
++ struct drm_info_node *node = (struct drm_info_node *)m->private;
++ struct drm_mm *mm = (struct drm_mm *)node->info_ent->data;
++ struct drm_device *dev = node->minor->dev;
++ struct radeon_device *rdev = dev->dev_private;
++ int ret;
++ struct ttm_bo_global *glob = rdev->mman.bdev.glob;
++
++ spin_lock(&glob->lru_lock);
++ ret = drm_mm_dump_table(m, mm);
++ spin_unlock(&glob->lru_lock);
++ return ret;
++}
++#endif
++
++static int radeon_ttm_debugfs_init(struct radeon_device *rdev)
++{
++#if defined(CONFIG_DEBUG_FS)
++ static struct drm_info_list radeon_mem_types_list[RADEON_DEBUGFS_MEM_TYPES];
++ static char radeon_mem_types_names[RADEON_DEBUGFS_MEM_TYPES][32];
++ unsigned i;
++
++ for (i = 0; i < RADEON_DEBUGFS_MEM_TYPES; i++) {
++ if (i == 0)
++ sprintf(radeon_mem_types_names[i], "radeon_vram_mm");
++ else
++ sprintf(radeon_mem_types_names[i], "radeon_gtt_mm");
++ radeon_mem_types_list[i].name = radeon_mem_types_names[i];
++ radeon_mem_types_list[i].show = &radeon_mm_dump_table;
++ radeon_mem_types_list[i].driver_features = 0;
++ if (i == 0)
++ radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_VRAM].manager;
++ else
++ radeon_mem_types_list[i].data = &rdev->mman.bdev.man[TTM_PL_TT].manager;
++
++ }
++ return radeon_debugfs_add_files(rdev, radeon_mem_types_list, RADEON_DEBUGFS_MEM_TYPES);
++
++#endif
++ return 0;
++}
+diff --git a/drivers/gpu/drm/radeon/reg_srcs/r100 b/drivers/gpu/drm/radeon/reg_srcs/r100
+new file mode 100644
+index 0000000..f7ee062
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/reg_srcs/r100
+@@ -0,0 +1,105 @@
++r100 0x3294
++0x1434 SRC_Y_X
++0x1438 DST_Y_X
++0x143C DST_HEIGHT_WIDTH
++0x146C DP_GUI_MASTER_CNTL
++0x1474 BRUSH_Y_X
++0x1478 DP_BRUSH_BKGD_CLR
++0x147C DP_BRUSH_FRGD_CLR
++0x1480 BRUSH_DATA0
++0x1484 BRUSH_DATA1
++0x1598 DST_WIDTH_HEIGHT
++0x15C0 CLR_CMP_CNTL
++0x15C4 CLR_CMP_CLR_SRC
++0x15C8 CLR_CMP_CLR_DST
++0x15CC CLR_CMP_MSK
++0x15D8 DP_SRC_FRGD_CLR
++0x15DC DP_SRC_BKGD_CLR
++0x1600 DST_LINE_START
++0x1604 DST_LINE_END
++0x1608 DST_LINE_PATCOUNT
++0x16C0 DP_CNTL
++0x16CC DP_WRITE_MSK
++0x16D0 DP_CNTL_XDIR_YDIR_YMAJOR
++0x16E8 DEFAULT_SC_BOTTOM_RIGHT
++0x16EC SC_TOP_LEFT
++0x16F0 SC_BOTTOM_RIGHT
++0x16F4 SRC_SC_BOTTOM_RIGHT
++0x1714 DSTCACHE_CTLSTAT
++0x1720 WAIT_UNTIL
++0x172C RBBM_GUICNTL
++0x1810 FOG_3D_TABLE_START
++0x1814 FOG_3D_TABLE_END
++0x1a14 FOG_TABLE_INDEX
++0x1a18 FOG_TABLE_DATA
++0x1c14 PP_MISC
++0x1c18 PP_FOG_COLOR
++0x1c1c RE_SOLID_COLOR
++0x1c20 RB3D_BLENDCNTL
++0x1c4c SE_CNTL
++0x1c50 SE_COORD_FMT
++0x1c60 PP_TXCBLEND_0
++0x1c64 PP_TXABLEND_0
++0x1c68 PP_TFACTOR_0
++0x1c78 PP_TXCBLEND_1
++0x1c7c PP_TXABLEND_1
++0x1c80 PP_TFACTOR_1
++0x1c90 PP_TXCBLEND_2
++0x1c94 PP_TXABLEND_2
++0x1c98 PP_TFACTOR_2
++0x1cc8 RE_STIPPLE_ADDR
++0x1ccc RE_STIPPLE_DATA
++0x1cd0 RE_LINE_PATTERN
++0x1cd4 RE_LINE_STATE
++0x1d40 PP_BORDER_COLOR0
++0x1d44 PP_BORDER_COLOR1
++0x1d48 PP_BORDER_COLOR2
++0x1d7c RB3D_STENCILREFMASK
++0x1d80 RB3D_ROPCNTL
++0x1d84 RB3D_PLANEMASK
++0x1d98 VAP_VPORT_XSCALE
++0x1d9C VAP_VPORT_XOFFSET
++0x1da0 VAP_VPORT_YSCALE
++0x1da4 VAP_VPORT_YOFFSET
++0x1da8 VAP_VPORT_ZSCALE
++0x1dac VAP_VPORT_ZOFFSET
++0x1db0 SE_ZBIAS_FACTOR
++0x1db4 SE_ZBIAS_CONSTANT
++0x1db8 SE_LINE_WIDTH
++0x2140 SE_CNTL_STATUS
++0x2200 SE_TCL_VECTOR_INDX_REG
++0x2204 SE_TCL_VECTOR_DATA_REG
++0x2208 SE_TCL_SCALAR_INDX_REG
++0x220c SE_TCL_SCALAR_DATA_REG
++0x2210 SE_TCL_MATERIAL_EMISSIVE_RED
++0x2214 SE_TCL_MATERIAL_EMISSIVE_GREEN
++0x2218 SE_TCL_MATERIAL_EMISSIVE_BLUE
++0x221c SE_TCL_MATERIAL_EMISSIVE_ALPHA
++0x2220 SE_TCL_MATERIAL_AMBIENT_RED
++0x2224 SE_TCL_MATERIAL_AMBIENT_GREEN
++0x2228 SE_TCL_MATERIAL_AMBIENT_BLUE
++0x222c SE_TCL_MATERIAL_AMBIENT_ALPHA
++0x2230 SE_TCL_MATERIAL_DIFFUSE_RED
++0x2234 SE_TCL_MATERIAL_DIFFUSE_GREEN
++0x2238 SE_TCL_MATERIAL_DIFFUSE_BLUE
++0x223c SE_TCL_MATERIAL_DIFFUSE_ALPHA
++0x2240 SE_TCL_MATERIAL_SPECULAR_RED
++0x2244 SE_TCL_MATERIAL_SPECULAR_GREEN
++0x2248 SE_TCL_MATERIAL_SPECULAR_BLUE
++0x224c SE_TCL_MATERIAL_SPECULAR_ALPHA
++0x2250 SE_TCL_SHININESS
++0x2254 SE_TCL_OUTPUT_VTX_FMT
++0x2258 SE_TCL_OUTPUT_VTX_SEL
++0x225c SE_TCL_MATRIX_SELECT_0
++0x2260 SE_TCL_MATRIX_SELECT_1
++0x2264 SE_TCL_UCP_VERT_BLEND_CNTL
++0x2268 SE_TCL_TEXTURE_PROC_CTL
++0x226c SE_TCL_LIGHT_MODEL_CTL
++0x2270 SE_TCL_PER_LIGHT_CTL_0
++0x2274 SE_TCL_PER_LIGHT_CTL_1
++0x2278 SE_TCL_PER_LIGHT_CTL_2
++0x227c SE_TCL_PER_LIGHT_CTL_3
++0x2284 SE_TCL_STATE_FLUSH
++0x26c0 RE_TOP_LEFT
++0x26c4 RE_MISC
++0x3290 RB3D_ZPASS_DATA
+diff --git a/drivers/gpu/drm/radeon/reg_srcs/r200 b/drivers/gpu/drm/radeon/reg_srcs/r200
+new file mode 100644
+index 0000000..6021c88
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/reg_srcs/r200
+@@ -0,0 +1,184 @@
++r200 0x3294
++0x1434 SRC_Y_X
++0x1438 DST_Y_X
++0x143C DST_HEIGHT_WIDTH
++0x146C DP_GUI_MASTER_CNTL
++0x1474 BRUSH_Y_X
++0x1478 DP_BRUSH_BKGD_CLR
++0x147C DP_BRUSH_FRGD_CLR
++0x1480 BRUSH_DATA0
++0x1484 BRUSH_DATA1
++0x1598 DST_WIDTH_HEIGHT
++0x15C0 CLR_CMP_CNTL
++0x15C4 CLR_CMP_CLR_SRC
++0x15C8 CLR_CMP_CLR_DST
++0x15CC CLR_CMP_MSK
++0x15D8 DP_SRC_FRGD_CLR
++0x15DC DP_SRC_BKGD_CLR
++0x1600 DST_LINE_START
++0x1604 DST_LINE_END
++0x1608 DST_LINE_PATCOUNT
++0x16C0 DP_CNTL
++0x16CC DP_WRITE_MSK
++0x16D0 DP_CNTL_XDIR_YDIR_YMAJOR
++0x16E8 DEFAULT_SC_BOTTOM_RIGHT
++0x16EC SC_TOP_LEFT
++0x16F0 SC_BOTTOM_RIGHT
++0x16F4 SRC_SC_BOTTOM_RIGHT
++0x1714 DSTCACHE_CTLSTAT
++0x1720 WAIT_UNTIL
++0x172C RBBM_GUICNTL
++0x1c14 PP_MISC
++0x1c18 PP_FOG_COLOR
++0x1c1c RE_SOLID_COLOR
++0x1c20 RB3D_BLENDCNTL
++0x1c4c SE_CNTL
++0x1c50 RE_CNTL
++0x1cc8 RE_STIPPLE_ADDR
++0x1ccc RE_STIPPLE_DATA
++0x1cd0 RE_LINE_PATTERN
++0x1cd4 RE_LINE_STATE
++0x1cd8 RE_SCISSOR_TL_0
++0x1cdc RE_SCISSOR_BR_0
++0x1ce0 RE_SCISSOR_TL_1
++0x1ce4 RE_SCISSOR_BR_1
++0x1ce8 RE_SCISSOR_TL_2
++0x1cec RE_SCISSOR_BR_2
++0x1d60 RB3D_DEPTHXY_OFFSET
++0x1d7c RB3D_STENCILREFMASK
++0x1d80 RB3D_ROPCNTL
++0x1d84 RB3D_PLANEMASK
++0x1d98 VAP_VPORT_XSCALE
++0x1d9c VAP_VPORT_XOFFSET
++0x1da0 VAP_VPORT_YSCALE
++0x1da4 VAP_VPORT_YOFFSET
++0x1da8 VAP_VPORT_ZSCALE
++0x1dac VAP_VPORT_ZOFFSET
++0x1db0 SE_ZBIAS_FACTOR
++0x1db4 SE_ZBIAS_CONSTANT
++0x1db8 SE_LINE_WIDTH
++0x2080 SE_VAP_CNTL
++0x2090 SE_TCL_OUTPUT_VTX_FMT_0
++0x2094 SE_TCL_OUTPUT_VTX_FMT_1
++0x20b0 SE_VTE_CNTL
++0x2140 SE_CNTL_STATUS
++0x2180 SE_VTX_STATE_CNTL
++0x2200 SE_TCL_VECTOR_INDX_REG
++0x2204 SE_TCL_VECTOR_DATA_REG
++0x2208 SE_TCL_SCALAR_INDX_REG
++0x220c SE_TCL_SCALAR_DATA_REG
++0x2230 SE_TCL_MATRIX_SEL_0
++0x2234 SE_TCL_MATRIX_SEL_1
++0x2238 SE_TCL_MATRIX_SEL_2
++0x223c SE_TCL_MATRIX_SEL_3
++0x2240 SE_TCL_MATRIX_SEL_4
++0x2250 SE_TCL_OUTPUT_VTX_COMP_SEL
++0x2254 SE_TCL_INPUT_VTX_VECTOR_ADDR_0
++0x2258 SE_TCL_INPUT_VTX_VECTOR_ADDR_1
++0x225c SE_TCL_INPUT_VTX_VECTOR_ADDR_2
++0x2260 SE_TCL_INPUT_VTX_VECTOR_ADDR_3
++0x2268 SE_TCL_LIGHT_MODEL_CTL_0
++0x226c SE_TCL_LIGHT_MODEL_CTL_1
++0x2270 SE_TCL_PER_LIGHT_CTL_0
++0x2274 SE_TCL_PER_LIGHT_CTL_1
++0x2278 SE_TCL_PER_LIGHT_CTL_2
++0x227c SE_TCL_PER_LIGHT_CTL_3
++0x2284 VAP_PVS_STATE_FLUSH_REG
++0x22a8 SE_TCL_TEX_PROC_CTL_2
++0x22ac SE_TCL_TEX_PROC_CTL_3
++0x22b0 SE_TCL_TEX_PROC_CTL_0
++0x22b4 SE_TCL_TEX_PROC_CTL_1
++0x22b8 SE_TCL_TEX_CYL_WRAP_CTL
++0x22c0 SE_TCL_UCP_VERT_BLEND_CNTL
++0x22c4 SE_TCL_POINT_SPRITE_CNTL
++0x2648 RE_POINTSIZE
++0x26c0 RE_TOP_LEFT
++0x26c4 RE_MISC
++0x26f0 RE_AUX_SCISSOR_CNTL
++0x2c14 PP_BORDER_COLOR_0
++0x2c34 PP_BORDER_COLOR_1
++0x2c54 PP_BORDER_COLOR_2
++0x2c74 PP_BORDER_COLOR_3
++0x2c94 PP_BORDER_COLOR_4
++0x2cb4 PP_BORDER_COLOR_5
++0x2cc4 PP_CNTL_X
++0x2cf8 PP_TRI_PERF
++0x2cfc PP_PERF_CNTL
++0x2d9c PP_TAM_DEBUG3
++0x2ee0 PP_TFACTOR_0
++0x2ee4 PP_TFACTOR_1
++0x2ee8 PP_TFACTOR_2
++0x2eec PP_TFACTOR_3
++0x2ef0 PP_TFACTOR_4
++0x2ef4 PP_TFACTOR_5
++0x2ef8 PP_TFACTOR_6
++0x2efc PP_TFACTOR_7
++0x2f00 PP_TXCBLEND_0
++0x2f04 PP_TXCBLEND2_0
++0x2f08 PP_TXABLEND_0
++0x2f0c PP_TXABLEND2_0
++0x2f10 PP_TXCBLEND_1
++0x2f14 PP_TXCBLEND2_1
++0x2f18 PP_TXABLEND_1
++0x2f1c PP_TXABLEND2_1
++0x2f20 PP_TXCBLEND_2
++0x2f24 PP_TXCBLEND2_2
++0x2f28 PP_TXABLEND_2
++0x2f2c PP_TXABLEND2_2
++0x2f30 PP_TXCBLEND_3
++0x2f34 PP_TXCBLEND2_3
++0x2f38 PP_TXABLEND_3
++0x2f3c PP_TXABLEND2_3
++0x2f40 PP_TXCBLEND_4
++0x2f44 PP_TXCBLEND2_4
++0x2f48 PP_TXABLEND_4
++0x2f4c PP_TXABLEND2_4
++0x2f50 PP_TXCBLEND_5
++0x2f54 PP_TXCBLEND2_5
++0x2f58 PP_TXABLEND_5
++0x2f5c PP_TXABLEND2_5
++0x2f60 PP_TXCBLEND_6
++0x2f64 PP_TXCBLEND2_6
++0x2f68 PP_TXABLEND_6
++0x2f6c PP_TXABLEND2_6
++0x2f70 PP_TXCBLEND_7
++0x2f74 PP_TXCBLEND2_7
++0x2f78 PP_TXABLEND_7
++0x2f7c PP_TXABLEND2_7
++0x2f80 PP_TXCBLEND_8
++0x2f84 PP_TXCBLEND2_8
++0x2f88 PP_TXABLEND_8
++0x2f8c PP_TXABLEND2_8
++0x2f90 PP_TXCBLEND_9
++0x2f94 PP_TXCBLEND2_9
++0x2f98 PP_TXABLEND_9
++0x2f9c PP_TXABLEND2_9
++0x2fa0 PP_TXCBLEND_10
++0x2fa4 PP_TXCBLEND2_10
++0x2fa8 PP_TXABLEND_10
++0x2fac PP_TXABLEND2_10
++0x2fb0 PP_TXCBLEND_11
++0x2fb4 PP_TXCBLEND2_11
++0x2fb8 PP_TXABLEND_11
++0x2fbc PP_TXABLEND2_11
++0x2fc0 PP_TXCBLEND_12
++0x2fc4 PP_TXCBLEND2_12
++0x2fc8 PP_TXABLEND_12
++0x2fcc PP_TXABLEND2_12
++0x2fd0 PP_TXCBLEND_13
++0x2fd4 PP_TXCBLEND2_13
++0x2fd8 PP_TXABLEND_13
++0x2fdc PP_TXABLEND2_13
++0x2fe0 PP_TXCBLEND_14
++0x2fe4 PP_TXCBLEND2_14
++0x2fe8 PP_TXABLEND_14
++0x2fec PP_TXABLEND2_14
++0x2ff0 PP_TXCBLEND_15
++0x2ff4 PP_TXCBLEND2_15
++0x2ff8 PP_TXABLEND_15
++0x2ffc PP_TXABLEND2_15
++0x3218 RB3D_BLENCOLOR
++0x321c RB3D_ABLENDCNTL
++0x3220 RB3D_CBLENDCNTL
++0x3290 RB3D_ZPASS_DATA
++
+diff --git a/drivers/gpu/drm/radeon/reg_srcs/r300 b/drivers/gpu/drm/radeon/reg_srcs/r300
+new file mode 100644
+index 0000000..19c4663
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/reg_srcs/r300
+@@ -0,0 +1,729 @@
++r300 0x4f60
++0x1434 SRC_Y_X
++0x1438 DST_Y_X
++0x143C DST_HEIGHT_WIDTH
++0x146C DP_GUI_MASTER_CNTL
++0x1474 BRUSH_Y_X
++0x1478 DP_BRUSH_BKGD_CLR
++0x147C DP_BRUSH_FRGD_CLR
++0x1480 BRUSH_DATA0
++0x1484 BRUSH_DATA1
++0x1598 DST_WIDTH_HEIGHT
++0x15C0 CLR_CMP_CNTL
++0x15C4 CLR_CMP_CLR_SRC
++0x15C8 CLR_CMP_CLR_DST
++0x15CC CLR_CMP_MSK
++0x15D8 DP_SRC_FRGD_CLR
++0x15DC DP_SRC_BKGD_CLR
++0x1600 DST_LINE_START
++0x1604 DST_LINE_END
++0x1608 DST_LINE_PATCOUNT
++0x16C0 DP_CNTL
++0x16CC DP_WRITE_MSK
++0x16D0 DP_CNTL_XDIR_YDIR_YMAJOR
++0x16E8 DEFAULT_SC_BOTTOM_RIGHT
++0x16EC SC_TOP_LEFT
++0x16F0 SC_BOTTOM_RIGHT
++0x16F4 SRC_SC_BOTTOM_RIGHT
++0x1714 DSTCACHE_CTLSTAT
++0x1720 WAIT_UNTIL
++0x172C RBBM_GUICNTL
++0x1D98 VAP_VPORT_XSCALE
++0x1D9C VAP_VPORT_XOFFSET
++0x1DA0 VAP_VPORT_YSCALE
++0x1DA4 VAP_VPORT_YOFFSET
++0x1DA8 VAP_VPORT_ZSCALE
++0x1DAC VAP_VPORT_ZOFFSET
++0x2080 VAP_CNTL
++0x2090 VAP_OUT_VTX_FMT_0
++0x2094 VAP_OUT_VTX_FMT_1
++0x20B0 VAP_VTE_CNTL
++0x2138 VAP_VF_MIN_VTX_INDX
++0x2140 VAP_CNTL_STATUS
++0x2150 VAP_PROG_STREAM_CNTL_0
++0x2154 VAP_PROG_STREAM_CNTL_1
++0x2158 VAP_PROG_STREAM_CNTL_2
++0x215C VAP_PROG_STREAM_CNTL_3
++0x2160 VAP_PROG_STREAM_CNTL_4
++0x2164 VAP_PROG_STREAM_CNTL_5
++0x2168 VAP_PROG_STREAM_CNTL_6
++0x216C VAP_PROG_STREAM_CNTL_7
++0x2180 VAP_VTX_STATE_CNTL
++0x2184 VAP_VSM_VTX_ASSM
++0x2188 VAP_VTX_STATE_IND_REG_0
++0x218C VAP_VTX_STATE_IND_REG_1
++0x2190 VAP_VTX_STATE_IND_REG_2
++0x2194 VAP_VTX_STATE_IND_REG_3
++0x2198 VAP_VTX_STATE_IND_REG_4
++0x219C VAP_VTX_STATE_IND_REG_5
++0x21A0 VAP_VTX_STATE_IND_REG_6
++0x21A4 VAP_VTX_STATE_IND_REG_7
++0x21A8 VAP_VTX_STATE_IND_REG_8
++0x21AC VAP_VTX_STATE_IND_REG_9
++0x21B0 VAP_VTX_STATE_IND_REG_10
++0x21B4 VAP_VTX_STATE_IND_REG_11
++0x21B8 VAP_VTX_STATE_IND_REG_12
++0x21BC VAP_VTX_STATE_IND_REG_13
++0x21C0 VAP_VTX_STATE_IND_REG_14
++0x21C4 VAP_VTX_STATE_IND_REG_15
++0x21DC VAP_PSC_SGN_NORM_CNTL
++0x21E0 VAP_PROG_STREAM_CNTL_EXT_0
++0x21E4 VAP_PROG_STREAM_CNTL_EXT_1
++0x21E8 VAP_PROG_STREAM_CNTL_EXT_2
++0x21EC VAP_PROG_STREAM_CNTL_EXT_3
++0x21F0 VAP_PROG_STREAM_CNTL_EXT_4
++0x21F4 VAP_PROG_STREAM_CNTL_EXT_5
++0x21F8 VAP_PROG_STREAM_CNTL_EXT_6
++0x21FC VAP_PROG_STREAM_CNTL_EXT_7
++0x2200 VAP_PVS_VECTOR_INDX_REG
++0x2204 VAP_PVS_VECTOR_DATA_REG
++0x2208 VAP_PVS_VECTOR_DATA_REG_128
++0x221C VAP_CLIP_CNTL
++0x2220 VAP_GB_VERT_CLIP_ADJ
++0x2224 VAP_GB_VERT_DISC_ADJ
++0x2228 VAP_GB_HORZ_CLIP_ADJ
++0x222C VAP_GB_HORZ_DISC_ADJ
++0x2230 VAP_PVS_FLOW_CNTL_ADDRS_0
++0x2234 VAP_PVS_FLOW_CNTL_ADDRS_1
++0x2238 VAP_PVS_FLOW_CNTL_ADDRS_2
++0x223C VAP_PVS_FLOW_CNTL_ADDRS_3
++0x2240 VAP_PVS_FLOW_CNTL_ADDRS_4
++0x2244 VAP_PVS_FLOW_CNTL_ADDRS_5
++0x2248 VAP_PVS_FLOW_CNTL_ADDRS_6
++0x224C VAP_PVS_FLOW_CNTL_ADDRS_7
++0x2250 VAP_PVS_FLOW_CNTL_ADDRS_8
++0x2254 VAP_PVS_FLOW_CNTL_ADDRS_9
++0x2258 VAP_PVS_FLOW_CNTL_ADDRS_10
++0x225C VAP_PVS_FLOW_CNTL_ADDRS_11
++0x2260 VAP_PVS_FLOW_CNTL_ADDRS_12
++0x2264 VAP_PVS_FLOW_CNTL_ADDRS_13
++0x2268 VAP_PVS_FLOW_CNTL_ADDRS_14
++0x226C VAP_PVS_FLOW_CNTL_ADDRS_15
++0x2284 VAP_PVS_STATE_FLUSH_REG
++0x2288 VAP_PVS_VTX_TIMEOUT_REG
++0x2290 VAP_PVS_FLOW_CNTL_LOOP_INDEX_0
++0x2294 VAP_PVS_FLOW_CNTL_LOOP_INDEX_1
++0x2298 VAP_PVS_FLOW_CNTL_LOOP_INDEX_2
++0x229C VAP_PVS_FLOW_CNTL_LOOP_INDEX_3
++0x22A0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_4
++0x22A4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_5
++0x22A8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_6
++0x22AC VAP_PVS_FLOW_CNTL_LOOP_INDEX_7
++0x22B0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_8
++0x22B4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_9
++0x22B8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_10
++0x22BC VAP_PVS_FLOW_CNTL_LOOP_INDEX_11
++0x22C0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_12
++0x22C4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_13
++0x22C8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_14
++0x22CC VAP_PVS_FLOW_CNTL_LOOP_INDEX_15
++0x22D0 VAP_PVS_CODE_CNTL_0
++0x22D4 VAP_PVS_CONST_CNTL
++0x22D8 VAP_PVS_CODE_CNTL_1
++0x22DC VAP_PVS_FLOW_CNTL_OPC
++0x342C RB2D_DSTCACHE_CTLSTAT
++0x4000 GB_VAP_RASTER_VTX_FMT_0
++0x4004 GB_VAP_RASTER_VTX_FMT_1
++0x4008 GB_ENABLE
++0x401C GB_SELECT
++0x4020 GB_AA_CONFIG
++0x4024 GB_FIFO_SIZE
++0x4100 TX_INVALTAGS
++0x4200 GA_POINT_S0
++0x4204 GA_POINT_T0
++0x4208 GA_POINT_S1
++0x420C GA_POINT_T1
++0x4214 GA_TRIANGLE_STIPPLE
++0x421C GA_POINT_SIZE
++0x4230 GA_POINT_MINMAX
++0x4234 GA_LINE_CNTL
++0x4238 GA_LINE_STIPPLE_CONFIG
++0x4260 GA_LINE_STIPPLE_VALUE
++0x4264 GA_LINE_S0
++0x4268 GA_LINE_S1
++0x4278 GA_COLOR_CONTROL
++0x427C GA_SOLID_RG
++0x4280 GA_SOLID_BA
++0x4288 GA_POLY_MODE
++0x428C GA_ROUND_MODE
++0x4290 GA_OFFSET
++0x4294 GA_FOG_SCALE
++0x4298 GA_FOG_OFFSET
++0x42A0 SU_TEX_WRAP
++0x42A4 SU_POLY_OFFSET_FRONT_SCALE
++0x42A8 SU_POLY_OFFSET_FRONT_OFFSET
++0x42AC SU_POLY_OFFSET_BACK_SCALE
++0x42B0 SU_POLY_OFFSET_BACK_OFFSET
++0x42B4 SU_POLY_OFFSET_ENABLE
++0x42B8 SU_CULL_MODE
++0x42C0 SU_DEPTH_SCALE
++0x42C4 SU_DEPTH_OFFSET
++0x42C8 SU_REG_DEST
++0x4300 RS_COUNT
++0x4304 RS_INST_COUNT
++0x4310 RS_IP_0
++0x4314 RS_IP_1
++0x4318 RS_IP_2
++0x431C RS_IP_3
++0x4320 RS_IP_4
++0x4324 RS_IP_5
++0x4328 RS_IP_6
++0x432C RS_IP_7
++0x4330 RS_INST_0
++0x4334 RS_INST_1
++0x4338 RS_INST_2
++0x433C RS_INST_3
++0x4340 RS_INST_4
++0x4344 RS_INST_5
++0x4348 RS_INST_6
++0x434C RS_INST_7
++0x4350 RS_INST_8
++0x4354 RS_INST_9
++0x4358 RS_INST_10
++0x435C RS_INST_11
++0x4360 RS_INST_12
++0x4364 RS_INST_13
++0x4368 RS_INST_14
++0x436C RS_INST_15
++0x43A4 SC_HYPERZ_EN
++0x43A8 SC_EDGERULE
++0x43B0 SC_CLIP_0_A
++0x43B4 SC_CLIP_0_B
++0x43B8 SC_CLIP_1_A
++0x43BC SC_CLIP_1_B
++0x43C0 SC_CLIP_2_A
++0x43C4 SC_CLIP_2_B
++0x43C8 SC_CLIP_3_A
++0x43CC SC_CLIP_3_B
++0x43D0 SC_CLIP_RULE
++0x43E0 SC_SCISSOR0
++0x43E8 SC_SCREENDOOR
++0x4440 TX_FILTER1_0
++0x4444 TX_FILTER1_1
++0x4448 TX_FILTER1_2
++0x444C TX_FILTER1_3
++0x4450 TX_FILTER1_4
++0x4454 TX_FILTER1_5
++0x4458 TX_FILTER1_6
++0x445C TX_FILTER1_7
++0x4460 TX_FILTER1_8
++0x4464 TX_FILTER1_9
++0x4468 TX_FILTER1_10
++0x446C TX_FILTER1_11
++0x4470 TX_FILTER1_12
++0x4474 TX_FILTER1_13
++0x4478 TX_FILTER1_14
++0x447C TX_FILTER1_15
++0x4580 TX_CHROMA_KEY_0
++0x4584 TX_CHROMA_KEY_1
++0x4588 TX_CHROMA_KEY_2
++0x458C TX_CHROMA_KEY_3
++0x4590 TX_CHROMA_KEY_4
++0x4594 TX_CHROMA_KEY_5
++0x4598 TX_CHROMA_KEY_6
++0x459C TX_CHROMA_KEY_7
++0x45A0 TX_CHROMA_KEY_8
++0x45A4 TX_CHROMA_KEY_9
++0x45A8 TX_CHROMA_KEY_10
++0x45AC TX_CHROMA_KEY_11
++0x45B0 TX_CHROMA_KEY_12
++0x45B4 TX_CHROMA_KEY_13
++0x45B8 TX_CHROMA_KEY_14
++0x45BC TX_CHROMA_KEY_15
++0x45C0 TX_BORDER_COLOR_0
++0x45C4 TX_BORDER_COLOR_1
++0x45C8 TX_BORDER_COLOR_2
++0x45CC TX_BORDER_COLOR_3
++0x45D0 TX_BORDER_COLOR_4
++0x45D4 TX_BORDER_COLOR_5
++0x45D8 TX_BORDER_COLOR_6
++0x45DC TX_BORDER_COLOR_7
++0x45E0 TX_BORDER_COLOR_8
++0x45E4 TX_BORDER_COLOR_9
++0x45E8 TX_BORDER_COLOR_10
++0x45EC TX_BORDER_COLOR_11
++0x45F0 TX_BORDER_COLOR_12
++0x45F4 TX_BORDER_COLOR_13
++0x45F8 TX_BORDER_COLOR_14
++0x45FC TX_BORDER_COLOR_15
++0x4600 US_CONFIG
++0x4604 US_PIXSIZE
++0x4608 US_CODE_OFFSET
++0x460C US_RESET
++0x4610 US_CODE_ADDR_0
++0x4614 US_CODE_ADDR_1
++0x4618 US_CODE_ADDR_2
++0x461C US_CODE_ADDR_3
++0x4620 US_TEX_INST_0
++0x4624 US_TEX_INST_1
++0x4628 US_TEX_INST_2
++0x462C US_TEX_INST_3
++0x4630 US_TEX_INST_4
++0x4634 US_TEX_INST_5
++0x4638 US_TEX_INST_6
++0x463C US_TEX_INST_7
++0x4640 US_TEX_INST_8
++0x4644 US_TEX_INST_9
++0x4648 US_TEX_INST_10
++0x464C US_TEX_INST_11
++0x4650 US_TEX_INST_12
++0x4654 US_TEX_INST_13
++0x4658 US_TEX_INST_14
++0x465C US_TEX_INST_15
++0x4660 US_TEX_INST_16
++0x4664 US_TEX_INST_17
++0x4668 US_TEX_INST_18
++0x466C US_TEX_INST_19
++0x4670 US_TEX_INST_20
++0x4674 US_TEX_INST_21
++0x4678 US_TEX_INST_22
++0x467C US_TEX_INST_23
++0x4680 US_TEX_INST_24
++0x4684 US_TEX_INST_25
++0x4688 US_TEX_INST_26
++0x468C US_TEX_INST_27
++0x4690 US_TEX_INST_28
++0x4694 US_TEX_INST_29
++0x4698 US_TEX_INST_30
++0x469C US_TEX_INST_31
++0x46A4 US_OUT_FMT_0
++0x46A8 US_OUT_FMT_1
++0x46AC US_OUT_FMT_2
++0x46B0 US_OUT_FMT_3
++0x46B4 US_W_FMT
++0x46C0 US_ALU_RGB_ADDR_0
++0x46C4 US_ALU_RGB_ADDR_1
++0x46C8 US_ALU_RGB_ADDR_2
++0x46CC US_ALU_RGB_ADDR_3
++0x46D0 US_ALU_RGB_ADDR_4
++0x46D4 US_ALU_RGB_ADDR_5
++0x46D8 US_ALU_RGB_ADDR_6
++0x46DC US_ALU_RGB_ADDR_7
++0x46E0 US_ALU_RGB_ADDR_8
++0x46E4 US_ALU_RGB_ADDR_9
++0x46E8 US_ALU_RGB_ADDR_10
++0x46EC US_ALU_RGB_ADDR_11
++0x46F0 US_ALU_RGB_ADDR_12
++0x46F4 US_ALU_RGB_ADDR_13
++0x46F8 US_ALU_RGB_ADDR_14
++0x46FC US_ALU_RGB_ADDR_15
++0x4700 US_ALU_RGB_ADDR_16
++0x4704 US_ALU_RGB_ADDR_17
++0x4708 US_ALU_RGB_ADDR_18
++0x470C US_ALU_RGB_ADDR_19
++0x4710 US_ALU_RGB_ADDR_20
++0x4714 US_ALU_RGB_ADDR_21
++0x4718 US_ALU_RGB_ADDR_22
++0x471C US_ALU_RGB_ADDR_23
++0x4720 US_ALU_RGB_ADDR_24
++0x4724 US_ALU_RGB_ADDR_25
++0x4728 US_ALU_RGB_ADDR_26
++0x472C US_ALU_RGB_ADDR_27
++0x4730 US_ALU_RGB_ADDR_28
++0x4734 US_ALU_RGB_ADDR_29
++0x4738 US_ALU_RGB_ADDR_30
++0x473C US_ALU_RGB_ADDR_31
++0x4740 US_ALU_RGB_ADDR_32
++0x4744 US_ALU_RGB_ADDR_33
++0x4748 US_ALU_RGB_ADDR_34
++0x474C US_ALU_RGB_ADDR_35
++0x4750 US_ALU_RGB_ADDR_36
++0x4754 US_ALU_RGB_ADDR_37
++0x4758 US_ALU_RGB_ADDR_38
++0x475C US_ALU_RGB_ADDR_39
++0x4760 US_ALU_RGB_ADDR_40
++0x4764 US_ALU_RGB_ADDR_41
++0x4768 US_ALU_RGB_ADDR_42
++0x476C US_ALU_RGB_ADDR_43
++0x4770 US_ALU_RGB_ADDR_44
++0x4774 US_ALU_RGB_ADDR_45
++0x4778 US_ALU_RGB_ADDR_46
++0x477C US_ALU_RGB_ADDR_47
++0x4780 US_ALU_RGB_ADDR_48
++0x4784 US_ALU_RGB_ADDR_49
++0x4788 US_ALU_RGB_ADDR_50
++0x478C US_ALU_RGB_ADDR_51
++0x4790 US_ALU_RGB_ADDR_52
++0x4794 US_ALU_RGB_ADDR_53
++0x4798 US_ALU_RGB_ADDR_54
++0x479C US_ALU_RGB_ADDR_55
++0x47A0 US_ALU_RGB_ADDR_56
++0x47A4 US_ALU_RGB_ADDR_57
++0x47A8 US_ALU_RGB_ADDR_58
++0x47AC US_ALU_RGB_ADDR_59
++0x47B0 US_ALU_RGB_ADDR_60
++0x47B4 US_ALU_RGB_ADDR_61
++0x47B8 US_ALU_RGB_ADDR_62
++0x47BC US_ALU_RGB_ADDR_63
++0x47C0 US_ALU_ALPHA_ADDR_0
++0x47C4 US_ALU_ALPHA_ADDR_1
++0x47C8 US_ALU_ALPHA_ADDR_2
++0x47CC US_ALU_ALPHA_ADDR_3
++0x47D0 US_ALU_ALPHA_ADDR_4
++0x47D4 US_ALU_ALPHA_ADDR_5
++0x47D8 US_ALU_ALPHA_ADDR_6
++0x47DC US_ALU_ALPHA_ADDR_7
++0x47E0 US_ALU_ALPHA_ADDR_8
++0x47E4 US_ALU_ALPHA_ADDR_9
++0x47E8 US_ALU_ALPHA_ADDR_10
++0x47EC US_ALU_ALPHA_ADDR_11
++0x47F0 US_ALU_ALPHA_ADDR_12
++0x47F4 US_ALU_ALPHA_ADDR_13
++0x47F8 US_ALU_ALPHA_ADDR_14
++0x47FC US_ALU_ALPHA_ADDR_15
++0x4800 US_ALU_ALPHA_ADDR_16
++0x4804 US_ALU_ALPHA_ADDR_17
++0x4808 US_ALU_ALPHA_ADDR_18
++0x480C US_ALU_ALPHA_ADDR_19
++0x4810 US_ALU_ALPHA_ADDR_20
++0x4814 US_ALU_ALPHA_ADDR_21
++0x4818 US_ALU_ALPHA_ADDR_22
++0x481C US_ALU_ALPHA_ADDR_23
++0x4820 US_ALU_ALPHA_ADDR_24
++0x4824 US_ALU_ALPHA_ADDR_25
++0x4828 US_ALU_ALPHA_ADDR_26
++0x482C US_ALU_ALPHA_ADDR_27
++0x4830 US_ALU_ALPHA_ADDR_28
++0x4834 US_ALU_ALPHA_ADDR_29
++0x4838 US_ALU_ALPHA_ADDR_30
++0x483C US_ALU_ALPHA_ADDR_31
++0x4840 US_ALU_ALPHA_ADDR_32
++0x4844 US_ALU_ALPHA_ADDR_33
++0x4848 US_ALU_ALPHA_ADDR_34
++0x484C US_ALU_ALPHA_ADDR_35
++0x4850 US_ALU_ALPHA_ADDR_36
++0x4854 US_ALU_ALPHA_ADDR_37
++0x4858 US_ALU_ALPHA_ADDR_38
++0x485C US_ALU_ALPHA_ADDR_39
++0x4860 US_ALU_ALPHA_ADDR_40
++0x4864 US_ALU_ALPHA_ADDR_41
++0x4868 US_ALU_ALPHA_ADDR_42
++0x486C US_ALU_ALPHA_ADDR_43
++0x4870 US_ALU_ALPHA_ADDR_44
++0x4874 US_ALU_ALPHA_ADDR_45
++0x4878 US_ALU_ALPHA_ADDR_46
++0x487C US_ALU_ALPHA_ADDR_47
++0x4880 US_ALU_ALPHA_ADDR_48
++0x4884 US_ALU_ALPHA_ADDR_49
++0x4888 US_ALU_ALPHA_ADDR_50
++0x488C US_ALU_ALPHA_ADDR_51
++0x4890 US_ALU_ALPHA_ADDR_52
++0x4894 US_ALU_ALPHA_ADDR_53
++0x4898 US_ALU_ALPHA_ADDR_54
++0x489C US_ALU_ALPHA_ADDR_55
++0x48A0 US_ALU_ALPHA_ADDR_56
++0x48A4 US_ALU_ALPHA_ADDR_57
++0x48A8 US_ALU_ALPHA_ADDR_58
++0x48AC US_ALU_ALPHA_ADDR_59
++0x48B0 US_ALU_ALPHA_ADDR_60
++0x48B4 US_ALU_ALPHA_ADDR_61
++0x48B8 US_ALU_ALPHA_ADDR_62
++0x48BC US_ALU_ALPHA_ADDR_63
++0x48C0 US_ALU_RGB_INST_0
++0x48C4 US_ALU_RGB_INST_1
++0x48C8 US_ALU_RGB_INST_2
++0x48CC US_ALU_RGB_INST_3
++0x48D0 US_ALU_RGB_INST_4
++0x48D4 US_ALU_RGB_INST_5
++0x48D8 US_ALU_RGB_INST_6
++0x48DC US_ALU_RGB_INST_7
++0x48E0 US_ALU_RGB_INST_8
++0x48E4 US_ALU_RGB_INST_9
++0x48E8 US_ALU_RGB_INST_10
++0x48EC US_ALU_RGB_INST_11
++0x48F0 US_ALU_RGB_INST_12
++0x48F4 US_ALU_RGB_INST_13
++0x48F8 US_ALU_RGB_INST_14
++0x48FC US_ALU_RGB_INST_15
++0x4900 US_ALU_RGB_INST_16
++0x4904 US_ALU_RGB_INST_17
++0x4908 US_ALU_RGB_INST_18
++0x490C US_ALU_RGB_INST_19
++0x4910 US_ALU_RGB_INST_20
++0x4914 US_ALU_RGB_INST_21
++0x4918 US_ALU_RGB_INST_22
++0x491C US_ALU_RGB_INST_23
++0x4920 US_ALU_RGB_INST_24
++0x4924 US_ALU_RGB_INST_25
++0x4928 US_ALU_RGB_INST_26
++0x492C US_ALU_RGB_INST_27
++0x4930 US_ALU_RGB_INST_28
++0x4934 US_ALU_RGB_INST_29
++0x4938 US_ALU_RGB_INST_30
++0x493C US_ALU_RGB_INST_31
++0x4940 US_ALU_RGB_INST_32
++0x4944 US_ALU_RGB_INST_33
++0x4948 US_ALU_RGB_INST_34
++0x494C US_ALU_RGB_INST_35
++0x4950 US_ALU_RGB_INST_36
++0x4954 US_ALU_RGB_INST_37
++0x4958 US_ALU_RGB_INST_38
++0x495C US_ALU_RGB_INST_39
++0x4960 US_ALU_RGB_INST_40
++0x4964 US_ALU_RGB_INST_41
++0x4968 US_ALU_RGB_INST_42
++0x496C US_ALU_RGB_INST_43
++0x4970 US_ALU_RGB_INST_44
++0x4974 US_ALU_RGB_INST_45
++0x4978 US_ALU_RGB_INST_46
++0x497C US_ALU_RGB_INST_47
++0x4980 US_ALU_RGB_INST_48
++0x4984 US_ALU_RGB_INST_49
++0x4988 US_ALU_RGB_INST_50
++0x498C US_ALU_RGB_INST_51
++0x4990 US_ALU_RGB_INST_52
++0x4994 US_ALU_RGB_INST_53
++0x4998 US_ALU_RGB_INST_54
++0x499C US_ALU_RGB_INST_55
++0x49A0 US_ALU_RGB_INST_56
++0x49A4 US_ALU_RGB_INST_57
++0x49A8 US_ALU_RGB_INST_58
++0x49AC US_ALU_RGB_INST_59
++0x49B0 US_ALU_RGB_INST_60
++0x49B4 US_ALU_RGB_INST_61
++0x49B8 US_ALU_RGB_INST_62
++0x49BC US_ALU_RGB_INST_63
++0x49C0 US_ALU_ALPHA_INST_0
++0x49C4 US_ALU_ALPHA_INST_1
++0x49C8 US_ALU_ALPHA_INST_2
++0x49CC US_ALU_ALPHA_INST_3
++0x49D0 US_ALU_ALPHA_INST_4
++0x49D4 US_ALU_ALPHA_INST_5
++0x49D8 US_ALU_ALPHA_INST_6
++0x49DC US_ALU_ALPHA_INST_7
++0x49E0 US_ALU_ALPHA_INST_8
++0x49E4 US_ALU_ALPHA_INST_9
++0x49E8 US_ALU_ALPHA_INST_10
++0x49EC US_ALU_ALPHA_INST_11
++0x49F0 US_ALU_ALPHA_INST_12
++0x49F4 US_ALU_ALPHA_INST_13
++0x49F8 US_ALU_ALPHA_INST_14
++0x49FC US_ALU_ALPHA_INST_15
++0x4A00 US_ALU_ALPHA_INST_16
++0x4A04 US_ALU_ALPHA_INST_17
++0x4A08 US_ALU_ALPHA_INST_18
++0x4A0C US_ALU_ALPHA_INST_19
++0x4A10 US_ALU_ALPHA_INST_20
++0x4A14 US_ALU_ALPHA_INST_21
++0x4A18 US_ALU_ALPHA_INST_22
++0x4A1C US_ALU_ALPHA_INST_23
++0x4A20 US_ALU_ALPHA_INST_24
++0x4A24 US_ALU_ALPHA_INST_25
++0x4A28 US_ALU_ALPHA_INST_26
++0x4A2C US_ALU_ALPHA_INST_27
++0x4A30 US_ALU_ALPHA_INST_28
++0x4A34 US_ALU_ALPHA_INST_29
++0x4A38 US_ALU_ALPHA_INST_30
++0x4A3C US_ALU_ALPHA_INST_31
++0x4A40 US_ALU_ALPHA_INST_32
++0x4A44 US_ALU_ALPHA_INST_33
++0x4A48 US_ALU_ALPHA_INST_34
++0x4A4C US_ALU_ALPHA_INST_35
++0x4A50 US_ALU_ALPHA_INST_36
++0x4A54 US_ALU_ALPHA_INST_37
++0x4A58 US_ALU_ALPHA_INST_38
++0x4A5C US_ALU_ALPHA_INST_39
++0x4A60 US_ALU_ALPHA_INST_40
++0x4A64 US_ALU_ALPHA_INST_41
++0x4A68 US_ALU_ALPHA_INST_42
++0x4A6C US_ALU_ALPHA_INST_43
++0x4A70 US_ALU_ALPHA_INST_44
++0x4A74 US_ALU_ALPHA_INST_45
++0x4A78 US_ALU_ALPHA_INST_46
++0x4A7C US_ALU_ALPHA_INST_47
++0x4A80 US_ALU_ALPHA_INST_48
++0x4A84 US_ALU_ALPHA_INST_49
++0x4A88 US_ALU_ALPHA_INST_50
++0x4A8C US_ALU_ALPHA_INST_51
++0x4A90 US_ALU_ALPHA_INST_52
++0x4A94 US_ALU_ALPHA_INST_53
++0x4A98 US_ALU_ALPHA_INST_54
++0x4A9C US_ALU_ALPHA_INST_55
++0x4AA0 US_ALU_ALPHA_INST_56
++0x4AA4 US_ALU_ALPHA_INST_57
++0x4AA8 US_ALU_ALPHA_INST_58
++0x4AAC US_ALU_ALPHA_INST_59
++0x4AB0 US_ALU_ALPHA_INST_60
++0x4AB4 US_ALU_ALPHA_INST_61
++0x4AB8 US_ALU_ALPHA_INST_62
++0x4ABC US_ALU_ALPHA_INST_63
++0x4BC0 FG_FOG_BLEND
++0x4BC4 FG_FOG_FACTOR
++0x4BC8 FG_FOG_COLOR_R
++0x4BCC FG_FOG_COLOR_G
++0x4BD0 FG_FOG_COLOR_B
++0x4BD4 FG_ALPHA_FUNC
++0x4BD8 FG_DEPTH_SRC
++0x4C00 US_ALU_CONST_R_0
++0x4C04 US_ALU_CONST_G_0
++0x4C08 US_ALU_CONST_B_0
++0x4C0C US_ALU_CONST_A_0
++0x4C10 US_ALU_CONST_R_1
++0x4C14 US_ALU_CONST_G_1
++0x4C18 US_ALU_CONST_B_1
++0x4C1C US_ALU_CONST_A_1
++0x4C20 US_ALU_CONST_R_2
++0x4C24 US_ALU_CONST_G_2
++0x4C28 US_ALU_CONST_B_2
++0x4C2C US_ALU_CONST_A_2
++0x4C30 US_ALU_CONST_R_3
++0x4C34 US_ALU_CONST_G_3
++0x4C38 US_ALU_CONST_B_3
++0x4C3C US_ALU_CONST_A_3
++0x4C40 US_ALU_CONST_R_4
++0x4C44 US_ALU_CONST_G_4
++0x4C48 US_ALU_CONST_B_4
++0x4C4C US_ALU_CONST_A_4
++0x4C50 US_ALU_CONST_R_5
++0x4C54 US_ALU_CONST_G_5
++0x4C58 US_ALU_CONST_B_5
++0x4C5C US_ALU_CONST_A_5
++0x4C60 US_ALU_CONST_R_6
++0x4C64 US_ALU_CONST_G_6
++0x4C68 US_ALU_CONST_B_6
++0x4C6C US_ALU_CONST_A_6
++0x4C70 US_ALU_CONST_R_7
++0x4C74 US_ALU_CONST_G_7
++0x4C78 US_ALU_CONST_B_7
++0x4C7C US_ALU_CONST_A_7
++0x4C80 US_ALU_CONST_R_8
++0x4C84 US_ALU_CONST_G_8
++0x4C88 US_ALU_CONST_B_8
++0x4C8C US_ALU_CONST_A_8
++0x4C90 US_ALU_CONST_R_9
++0x4C94 US_ALU_CONST_G_9
++0x4C98 US_ALU_CONST_B_9
++0x4C9C US_ALU_CONST_A_9
++0x4CA0 US_ALU_CONST_R_10
++0x4CA4 US_ALU_CONST_G_10
++0x4CA8 US_ALU_CONST_B_10
++0x4CAC US_ALU_CONST_A_10
++0x4CB0 US_ALU_CONST_R_11
++0x4CB4 US_ALU_CONST_G_11
++0x4CB8 US_ALU_CONST_B_11
++0x4CBC US_ALU_CONST_A_11
++0x4CC0 US_ALU_CONST_R_12
++0x4CC4 US_ALU_CONST_G_12
++0x4CC8 US_ALU_CONST_B_12
++0x4CCC US_ALU_CONST_A_12
++0x4CD0 US_ALU_CONST_R_13
++0x4CD4 US_ALU_CONST_G_13
++0x4CD8 US_ALU_CONST_B_13
++0x4CDC US_ALU_CONST_A_13
++0x4CE0 US_ALU_CONST_R_14
++0x4CE4 US_ALU_CONST_G_14
++0x4CE8 US_ALU_CONST_B_14
++0x4CEC US_ALU_CONST_A_14
++0x4CF0 US_ALU_CONST_R_15
++0x4CF4 US_ALU_CONST_G_15
++0x4CF8 US_ALU_CONST_B_15
++0x4CFC US_ALU_CONST_A_15
++0x4D00 US_ALU_CONST_R_16
++0x4D04 US_ALU_CONST_G_16
++0x4D08 US_ALU_CONST_B_16
++0x4D0C US_ALU_CONST_A_16
++0x4D10 US_ALU_CONST_R_17
++0x4D14 US_ALU_CONST_G_17
++0x4D18 US_ALU_CONST_B_17
++0x4D1C US_ALU_CONST_A_17
++0x4D20 US_ALU_CONST_R_18
++0x4D24 US_ALU_CONST_G_18
++0x4D28 US_ALU_CONST_B_18
++0x4D2C US_ALU_CONST_A_18
++0x4D30 US_ALU_CONST_R_19
++0x4D34 US_ALU_CONST_G_19
++0x4D38 US_ALU_CONST_B_19
++0x4D3C US_ALU_CONST_A_19
++0x4D40 US_ALU_CONST_R_20
++0x4D44 US_ALU_CONST_G_20
++0x4D48 US_ALU_CONST_B_20
++0x4D4C US_ALU_CONST_A_20
++0x4D50 US_ALU_CONST_R_21
++0x4D54 US_ALU_CONST_G_21
++0x4D58 US_ALU_CONST_B_21
++0x4D5C US_ALU_CONST_A_21
++0x4D60 US_ALU_CONST_R_22
++0x4D64 US_ALU_CONST_G_22
++0x4D68 US_ALU_CONST_B_22
++0x4D6C US_ALU_CONST_A_22
++0x4D70 US_ALU_CONST_R_23
++0x4D74 US_ALU_CONST_G_23
++0x4D78 US_ALU_CONST_B_23
++0x4D7C US_ALU_CONST_A_23
++0x4D80 US_ALU_CONST_R_24
++0x4D84 US_ALU_CONST_G_24
++0x4D88 US_ALU_CONST_B_24
++0x4D8C US_ALU_CONST_A_24
++0x4D90 US_ALU_CONST_R_25
++0x4D94 US_ALU_CONST_G_25
++0x4D98 US_ALU_CONST_B_25
++0x4D9C US_ALU_CONST_A_25
++0x4DA0 US_ALU_CONST_R_26
++0x4DA4 US_ALU_CONST_G_26
++0x4DA8 US_ALU_CONST_B_26
++0x4DAC US_ALU_CONST_A_26
++0x4DB0 US_ALU_CONST_R_27
++0x4DB4 US_ALU_CONST_G_27
++0x4DB8 US_ALU_CONST_B_27
++0x4DBC US_ALU_CONST_A_27
++0x4DC0 US_ALU_CONST_R_28
++0x4DC4 US_ALU_CONST_G_28
++0x4DC8 US_ALU_CONST_B_28
++0x4DCC US_ALU_CONST_A_28
++0x4DD0 US_ALU_CONST_R_29
++0x4DD4 US_ALU_CONST_G_29
++0x4DD8 US_ALU_CONST_B_29
++0x4DDC US_ALU_CONST_A_29
++0x4DE0 US_ALU_CONST_R_30
++0x4DE4 US_ALU_CONST_G_30
++0x4DE8 US_ALU_CONST_B_30
++0x4DEC US_ALU_CONST_A_30
++0x4DF0 US_ALU_CONST_R_31
++0x4DF4 US_ALU_CONST_G_31
++0x4DF8 US_ALU_CONST_B_31
++0x4DFC US_ALU_CONST_A_31
++0x4E04 RB3D_BLENDCNTL_R3
++0x4E08 RB3D_ABLENDCNTL_R3
++0x4E0C RB3D_COLOR_CHANNEL_MASK
++0x4E10 RB3D_CONSTANT_COLOR
++0x4E14 RB3D_COLOR_CLEAR_VALUE
++0x4E18 RB3D_ROPCNTL_R3
++0x4E1C RB3D_CLRCMP_FLIPE_R3
++0x4E20 RB3D_CLRCMP_CLR_R3
++0x4E24 RB3D_CLRCMP_MSK_R3
++0x4E48 RB3D_DEBUG_CTL
++0x4E4C RB3D_DSTCACHE_CTLSTAT_R3
++0x4E50 RB3D_DITHER_CTL
++0x4E54 RB3D_CMASK_OFFSET0
++0x4E58 RB3D_CMASK_OFFSET1
++0x4E5C RB3D_CMASK_OFFSET2
++0x4E60 RB3D_CMASK_OFFSET3
++0x4E64 RB3D_CMASK_PITCH0
++0x4E68 RB3D_CMASK_PITCH1
++0x4E6C RB3D_CMASK_PITCH2
++0x4E70 RB3D_CMASK_PITCH3
++0x4E74 RB3D_CMASK_WRINDEX
++0x4E78 RB3D_CMASK_DWORD
++0x4E7C RB3D_CMASK_RDINDEX
++0x4E80 RB3D_AARESOLVE_OFFSET
++0x4E84 RB3D_AARESOLVE_PITCH
++0x4E88 RB3D_AARESOLVE_CTL
++0x4EA0 RB3D_DISCARD_SRC_PIXEL_LTE_THRESHOLD
++0x4EA4 RB3D_DISCARD_SRC_PIXEL_GTE_THRESHOLD
++0x4F04 ZB_ZSTENCILCNTL
++0x4F08 ZB_STENCILREFMASK
++0x4F14 ZB_ZTOP
++0x4F18 ZB_ZCACHE_CTLSTAT
++0x4F1C ZB_BW_CNTL
++0x4F28 ZB_DEPTHCLEARVALUE
++0x4F30 ZB_ZMASK_OFFSET
++0x4F34 ZB_ZMASK_PITCH
++0x4F38 ZB_ZMASK_WRINDEX
++0x4F3C ZB_ZMASK_DWORD
++0x4F40 ZB_ZMASK_RDINDEX
++0x4F44 ZB_HIZ_OFFSET
++0x4F48 ZB_HIZ_WRINDEX
++0x4F4C ZB_HIZ_DWORD
++0x4F50 ZB_HIZ_RDINDEX
++0x4F54 ZB_HIZ_PITCH
++0x4F58 ZB_ZPASS_DATA
+diff --git a/drivers/gpu/drm/radeon/reg_srcs/rn50 b/drivers/gpu/drm/radeon/reg_srcs/rn50
+new file mode 100644
+index 0000000..2687b63
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/reg_srcs/rn50
+@@ -0,0 +1,30 @@
++rn50 0x3294
++0x1434 SRC_Y_X
++0x1438 DST_Y_X
++0x143C DST_HEIGHT_WIDTH
++0x146C DP_GUI_MASTER_CNTL
++0x1474 BRUSH_Y_X
++0x1478 DP_BRUSH_BKGD_CLR
++0x147C DP_BRUSH_FRGD_CLR
++0x1480 BRUSH_DATA0
++0x1484 BRUSH_DATA1
++0x1598 DST_WIDTH_HEIGHT
++0x15C0 CLR_CMP_CNTL
++0x15C4 CLR_CMP_CLR_SRC
++0x15C8 CLR_CMP_CLR_DST
++0x15CC CLR_CMP_MSK
++0x15D8 DP_SRC_FRGD_CLR
++0x15DC DP_SRC_BKGD_CLR
++0x1600 DST_LINE_START
++0x1604 DST_LINE_END
++0x1608 DST_LINE_PATCOUNT
++0x16C0 DP_CNTL
++0x16CC DP_WRITE_MSK
++0x16D0 DP_CNTL_XDIR_YDIR_YMAJOR
++0x16E8 DEFAULT_SC_BOTTOM_RIGHT
++0x16EC SC_TOP_LEFT
++0x16F0 SC_BOTTOM_RIGHT
++0x16F4 SRC_SC_BOTTOM_RIGHT
++0x1714 DSTCACHE_CTLSTAT
++0x1720 WAIT_UNTIL
++0x172C RBBM_GUICNTL
+diff --git a/drivers/gpu/drm/radeon/reg_srcs/rs600 b/drivers/gpu/drm/radeon/reg_srcs/rs600
+new file mode 100644
+index 0000000..8e3c0b8
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/reg_srcs/rs600
+@@ -0,0 +1,729 @@
++rs600 0x6d40
++0x1434 SRC_Y_X
++0x1438 DST_Y_X
++0x143C DST_HEIGHT_WIDTH
++0x146C DP_GUI_MASTER_CNTL
++0x1474 BRUSH_Y_X
++0x1478 DP_BRUSH_BKGD_CLR
++0x147C DP_BRUSH_FRGD_CLR
++0x1480 BRUSH_DATA0
++0x1484 BRUSH_DATA1
++0x1598 DST_WIDTH_HEIGHT
++0x15C0 CLR_CMP_CNTL
++0x15C4 CLR_CMP_CLR_SRC
++0x15C8 CLR_CMP_CLR_DST
++0x15CC CLR_CMP_MSK
++0x15D8 DP_SRC_FRGD_CLR
++0x15DC DP_SRC_BKGD_CLR
++0x1600 DST_LINE_START
++0x1604 DST_LINE_END
++0x1608 DST_LINE_PATCOUNT
++0x16C0 DP_CNTL
++0x16CC DP_WRITE_MSK
++0x16D0 DP_CNTL_XDIR_YDIR_YMAJOR
++0x16E8 DEFAULT_SC_BOTTOM_RIGHT
++0x16EC SC_TOP_LEFT
++0x16F0 SC_BOTTOM_RIGHT
++0x16F4 SRC_SC_BOTTOM_RIGHT
++0x1714 DSTCACHE_CTLSTAT
++0x1720 WAIT_UNTIL
++0x172C RBBM_GUICNTL
++0x1D98 VAP_VPORT_XSCALE
++0x1D9C VAP_VPORT_XOFFSET
++0x1DA0 VAP_VPORT_YSCALE
++0x1DA4 VAP_VPORT_YOFFSET
++0x1DA8 VAP_VPORT_ZSCALE
++0x1DAC VAP_VPORT_ZOFFSET
++0x2080 VAP_CNTL
++0x2090 VAP_OUT_VTX_FMT_0
++0x2094 VAP_OUT_VTX_FMT_1
++0x20B0 VAP_VTE_CNTL
++0x2138 VAP_VF_MIN_VTX_INDX
++0x2140 VAP_CNTL_STATUS
++0x2150 VAP_PROG_STREAM_CNTL_0
++0x2154 VAP_PROG_STREAM_CNTL_1
++0x2158 VAP_PROG_STREAM_CNTL_2
++0x215C VAP_PROG_STREAM_CNTL_3
++0x2160 VAP_PROG_STREAM_CNTL_4
++0x2164 VAP_PROG_STREAM_CNTL_5
++0x2168 VAP_PROG_STREAM_CNTL_6
++0x216C VAP_PROG_STREAM_CNTL_7
++0x2180 VAP_VTX_STATE_CNTL
++0x2184 VAP_VSM_VTX_ASSM
++0x2188 VAP_VTX_STATE_IND_REG_0
++0x218C VAP_VTX_STATE_IND_REG_1
++0x2190 VAP_VTX_STATE_IND_REG_2
++0x2194 VAP_VTX_STATE_IND_REG_3
++0x2198 VAP_VTX_STATE_IND_REG_4
++0x219C VAP_VTX_STATE_IND_REG_5
++0x21A0 VAP_VTX_STATE_IND_REG_6
++0x21A4 VAP_VTX_STATE_IND_REG_7
++0x21A8 VAP_VTX_STATE_IND_REG_8
++0x21AC VAP_VTX_STATE_IND_REG_9
++0x21B0 VAP_VTX_STATE_IND_REG_10
++0x21B4 VAP_VTX_STATE_IND_REG_11
++0x21B8 VAP_VTX_STATE_IND_REG_12
++0x21BC VAP_VTX_STATE_IND_REG_13
++0x21C0 VAP_VTX_STATE_IND_REG_14
++0x21C4 VAP_VTX_STATE_IND_REG_15
++0x21DC VAP_PSC_SGN_NORM_CNTL
++0x21E0 VAP_PROG_STREAM_CNTL_EXT_0
++0x21E4 VAP_PROG_STREAM_CNTL_EXT_1
++0x21E8 VAP_PROG_STREAM_CNTL_EXT_2
++0x21EC VAP_PROG_STREAM_CNTL_EXT_3
++0x21F0 VAP_PROG_STREAM_CNTL_EXT_4
++0x21F4 VAP_PROG_STREAM_CNTL_EXT_5
++0x21F8 VAP_PROG_STREAM_CNTL_EXT_6
++0x21FC VAP_PROG_STREAM_CNTL_EXT_7
++0x2200 VAP_PVS_VECTOR_INDX_REG
++0x2204 VAP_PVS_VECTOR_DATA_REG
++0x2208 VAP_PVS_VECTOR_DATA_REG_128
++0x221C VAP_CLIP_CNTL
++0x2220 VAP_GB_VERT_CLIP_ADJ
++0x2224 VAP_GB_VERT_DISC_ADJ
++0x2228 VAP_GB_HORZ_CLIP_ADJ
++0x222C VAP_GB_HORZ_DISC_ADJ
++0x2230 VAP_PVS_FLOW_CNTL_ADDRS_0
++0x2234 VAP_PVS_FLOW_CNTL_ADDRS_1
++0x2238 VAP_PVS_FLOW_CNTL_ADDRS_2
++0x223C VAP_PVS_FLOW_CNTL_ADDRS_3
++0x2240 VAP_PVS_FLOW_CNTL_ADDRS_4
++0x2244 VAP_PVS_FLOW_CNTL_ADDRS_5
++0x2248 VAP_PVS_FLOW_CNTL_ADDRS_6
++0x224C VAP_PVS_FLOW_CNTL_ADDRS_7
++0x2250 VAP_PVS_FLOW_CNTL_ADDRS_8
++0x2254 VAP_PVS_FLOW_CNTL_ADDRS_9
++0x2258 VAP_PVS_FLOW_CNTL_ADDRS_10
++0x225C VAP_PVS_FLOW_CNTL_ADDRS_11
++0x2260 VAP_PVS_FLOW_CNTL_ADDRS_12
++0x2264 VAP_PVS_FLOW_CNTL_ADDRS_13
++0x2268 VAP_PVS_FLOW_CNTL_ADDRS_14
++0x226C VAP_PVS_FLOW_CNTL_ADDRS_15
++0x2284 VAP_PVS_STATE_FLUSH_REG
++0x2288 VAP_PVS_VTX_TIMEOUT_REG
++0x2290 VAP_PVS_FLOW_CNTL_LOOP_INDEX_0
++0x2294 VAP_PVS_FLOW_CNTL_LOOP_INDEX_1
++0x2298 VAP_PVS_FLOW_CNTL_LOOP_INDEX_2
++0x229C VAP_PVS_FLOW_CNTL_LOOP_INDEX_3
++0x22A0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_4
++0x22A4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_5
++0x22A8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_6
++0x22AC VAP_PVS_FLOW_CNTL_LOOP_INDEX_7
++0x22B0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_8
++0x22B4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_9
++0x22B8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_10
++0x22BC VAP_PVS_FLOW_CNTL_LOOP_INDEX_11
++0x22C0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_12
++0x22C4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_13
++0x22C8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_14
++0x22CC VAP_PVS_FLOW_CNTL_LOOP_INDEX_15
++0x22D0 VAP_PVS_CODE_CNTL_0
++0x22D4 VAP_PVS_CONST_CNTL
++0x22D8 VAP_PVS_CODE_CNTL_1
++0x22DC VAP_PVS_FLOW_CNTL_OPC
++0x342C RB2D_DSTCACHE_CTLSTAT
++0x4000 GB_VAP_RASTER_VTX_FMT_0
++0x4004 GB_VAP_RASTER_VTX_FMT_1
++0x4008 GB_ENABLE
++0x401C GB_SELECT
++0x4020 GB_AA_CONFIG
++0x4024 GB_FIFO_SIZE
++0x4100 TX_INVALTAGS
++0x4200 GA_POINT_S0
++0x4204 GA_POINT_T0
++0x4208 GA_POINT_S1
++0x420C GA_POINT_T1
++0x4214 GA_TRIANGLE_STIPPLE
++0x421C GA_POINT_SIZE
++0x4230 GA_POINT_MINMAX
++0x4234 GA_LINE_CNTL
++0x4238 GA_LINE_STIPPLE_CONFIG
++0x4260 GA_LINE_STIPPLE_VALUE
++0x4264 GA_LINE_S0
++0x4268 GA_LINE_S1
++0x4278 GA_COLOR_CONTROL
++0x427C GA_SOLID_RG
++0x4280 GA_SOLID_BA
++0x4288 GA_POLY_MODE
++0x428C GA_ROUND_MODE
++0x4290 GA_OFFSET
++0x4294 GA_FOG_SCALE
++0x4298 GA_FOG_OFFSET
++0x42A0 SU_TEX_WRAP
++0x42A4 SU_POLY_OFFSET_FRONT_SCALE
++0x42A8 SU_POLY_OFFSET_FRONT_OFFSET
++0x42AC SU_POLY_OFFSET_BACK_SCALE
++0x42B0 SU_POLY_OFFSET_BACK_OFFSET
++0x42B4 SU_POLY_OFFSET_ENABLE
++0x42B8 SU_CULL_MODE
++0x42C0 SU_DEPTH_SCALE
++0x42C4 SU_DEPTH_OFFSET
++0x42C8 SU_REG_DEST
++0x4300 RS_COUNT
++0x4304 RS_INST_COUNT
++0x4310 RS_IP_0
++0x4314 RS_IP_1
++0x4318 RS_IP_2
++0x431C RS_IP_3
++0x4320 RS_IP_4
++0x4324 RS_IP_5
++0x4328 RS_IP_6
++0x432C RS_IP_7
++0x4330 RS_INST_0
++0x4334 RS_INST_1
++0x4338 RS_INST_2
++0x433C RS_INST_3
++0x4340 RS_INST_4
++0x4344 RS_INST_5
++0x4348 RS_INST_6
++0x434C RS_INST_7
++0x4350 RS_INST_8
++0x4354 RS_INST_9
++0x4358 RS_INST_10
++0x435C RS_INST_11
++0x4360 RS_INST_12
++0x4364 RS_INST_13
++0x4368 RS_INST_14
++0x436C RS_INST_15
++0x43A4 SC_HYPERZ_EN
++0x43A8 SC_EDGERULE
++0x43B0 SC_CLIP_0_A
++0x43B4 SC_CLIP_0_B
++0x43B8 SC_CLIP_1_A
++0x43BC SC_CLIP_1_B
++0x43C0 SC_CLIP_2_A
++0x43C4 SC_CLIP_2_B
++0x43C8 SC_CLIP_3_A
++0x43CC SC_CLIP_3_B
++0x43D0 SC_CLIP_RULE
++0x43E0 SC_SCISSOR0
++0x43E8 SC_SCREENDOOR
++0x4440 TX_FILTER1_0
++0x4444 TX_FILTER1_1
++0x4448 TX_FILTER1_2
++0x444C TX_FILTER1_3
++0x4450 TX_FILTER1_4
++0x4454 TX_FILTER1_5
++0x4458 TX_FILTER1_6
++0x445C TX_FILTER1_7
++0x4460 TX_FILTER1_8
++0x4464 TX_FILTER1_9
++0x4468 TX_FILTER1_10
++0x446C TX_FILTER1_11
++0x4470 TX_FILTER1_12
++0x4474 TX_FILTER1_13
++0x4478 TX_FILTER1_14
++0x447C TX_FILTER1_15
++0x4580 TX_CHROMA_KEY_0
++0x4584 TX_CHROMA_KEY_1
++0x4588 TX_CHROMA_KEY_2
++0x458C TX_CHROMA_KEY_3
++0x4590 TX_CHROMA_KEY_4
++0x4594 TX_CHROMA_KEY_5
++0x4598 TX_CHROMA_KEY_6
++0x459C TX_CHROMA_KEY_7
++0x45A0 TX_CHROMA_KEY_8
++0x45A4 TX_CHROMA_KEY_9
++0x45A8 TX_CHROMA_KEY_10
++0x45AC TX_CHROMA_KEY_11
++0x45B0 TX_CHROMA_KEY_12
++0x45B4 TX_CHROMA_KEY_13
++0x45B8 TX_CHROMA_KEY_14
++0x45BC TX_CHROMA_KEY_15
++0x45C0 TX_BORDER_COLOR_0
++0x45C4 TX_BORDER_COLOR_1
++0x45C8 TX_BORDER_COLOR_2
++0x45CC TX_BORDER_COLOR_3
++0x45D0 TX_BORDER_COLOR_4
++0x45D4 TX_BORDER_COLOR_5
++0x45D8 TX_BORDER_COLOR_6
++0x45DC TX_BORDER_COLOR_7
++0x45E0 TX_BORDER_COLOR_8
++0x45E4 TX_BORDER_COLOR_9
++0x45E8 TX_BORDER_COLOR_10
++0x45EC TX_BORDER_COLOR_11
++0x45F0 TX_BORDER_COLOR_12
++0x45F4 TX_BORDER_COLOR_13
++0x45F8 TX_BORDER_COLOR_14
++0x45FC TX_BORDER_COLOR_15
++0x4600 US_CONFIG
++0x4604 US_PIXSIZE
++0x4608 US_CODE_OFFSET
++0x460C US_RESET
++0x4610 US_CODE_ADDR_0
++0x4614 US_CODE_ADDR_1
++0x4618 US_CODE_ADDR_2
++0x461C US_CODE_ADDR_3
++0x4620 US_TEX_INST_0
++0x4624 US_TEX_INST_1
++0x4628 US_TEX_INST_2
++0x462C US_TEX_INST_3
++0x4630 US_TEX_INST_4
++0x4634 US_TEX_INST_5
++0x4638 US_TEX_INST_6
++0x463C US_TEX_INST_7
++0x4640 US_TEX_INST_8
++0x4644 US_TEX_INST_9
++0x4648 US_TEX_INST_10
++0x464C US_TEX_INST_11
++0x4650 US_TEX_INST_12
++0x4654 US_TEX_INST_13
++0x4658 US_TEX_INST_14
++0x465C US_TEX_INST_15
++0x4660 US_TEX_INST_16
++0x4664 US_TEX_INST_17
++0x4668 US_TEX_INST_18
++0x466C US_TEX_INST_19
++0x4670 US_TEX_INST_20
++0x4674 US_TEX_INST_21
++0x4678 US_TEX_INST_22
++0x467C US_TEX_INST_23
++0x4680 US_TEX_INST_24
++0x4684 US_TEX_INST_25
++0x4688 US_TEX_INST_26
++0x468C US_TEX_INST_27
++0x4690 US_TEX_INST_28
++0x4694 US_TEX_INST_29
++0x4698 US_TEX_INST_30
++0x469C US_TEX_INST_31
++0x46A4 US_OUT_FMT_0
++0x46A8 US_OUT_FMT_1
++0x46AC US_OUT_FMT_2
++0x46B0 US_OUT_FMT_3
++0x46B4 US_W_FMT
++0x46C0 US_ALU_RGB_ADDR_0
++0x46C4 US_ALU_RGB_ADDR_1
++0x46C8 US_ALU_RGB_ADDR_2
++0x46CC US_ALU_RGB_ADDR_3
++0x46D0 US_ALU_RGB_ADDR_4
++0x46D4 US_ALU_RGB_ADDR_5
++0x46D8 US_ALU_RGB_ADDR_6
++0x46DC US_ALU_RGB_ADDR_7
++0x46E0 US_ALU_RGB_ADDR_8
++0x46E4 US_ALU_RGB_ADDR_9
++0x46E8 US_ALU_RGB_ADDR_10
++0x46EC US_ALU_RGB_ADDR_11
++0x46F0 US_ALU_RGB_ADDR_12
++0x46F4 US_ALU_RGB_ADDR_13
++0x46F8 US_ALU_RGB_ADDR_14
++0x46FC US_ALU_RGB_ADDR_15
++0x4700 US_ALU_RGB_ADDR_16
++0x4704 US_ALU_RGB_ADDR_17
++0x4708 US_ALU_RGB_ADDR_18
++0x470C US_ALU_RGB_ADDR_19
++0x4710 US_ALU_RGB_ADDR_20
++0x4714 US_ALU_RGB_ADDR_21
++0x4718 US_ALU_RGB_ADDR_22
++0x471C US_ALU_RGB_ADDR_23
++0x4720 US_ALU_RGB_ADDR_24
++0x4724 US_ALU_RGB_ADDR_25
++0x4728 US_ALU_RGB_ADDR_26
++0x472C US_ALU_RGB_ADDR_27
++0x4730 US_ALU_RGB_ADDR_28
++0x4734 US_ALU_RGB_ADDR_29
++0x4738 US_ALU_RGB_ADDR_30
++0x473C US_ALU_RGB_ADDR_31
++0x4740 US_ALU_RGB_ADDR_32
++0x4744 US_ALU_RGB_ADDR_33
++0x4748 US_ALU_RGB_ADDR_34
++0x474C US_ALU_RGB_ADDR_35
++0x4750 US_ALU_RGB_ADDR_36
++0x4754 US_ALU_RGB_ADDR_37
++0x4758 US_ALU_RGB_ADDR_38
++0x475C US_ALU_RGB_ADDR_39
++0x4760 US_ALU_RGB_ADDR_40
++0x4764 US_ALU_RGB_ADDR_41
++0x4768 US_ALU_RGB_ADDR_42
++0x476C US_ALU_RGB_ADDR_43
++0x4770 US_ALU_RGB_ADDR_44
++0x4774 US_ALU_RGB_ADDR_45
++0x4778 US_ALU_RGB_ADDR_46
++0x477C US_ALU_RGB_ADDR_47
++0x4780 US_ALU_RGB_ADDR_48
++0x4784 US_ALU_RGB_ADDR_49
++0x4788 US_ALU_RGB_ADDR_50
++0x478C US_ALU_RGB_ADDR_51
++0x4790 US_ALU_RGB_ADDR_52
++0x4794 US_ALU_RGB_ADDR_53
++0x4798 US_ALU_RGB_ADDR_54
++0x479C US_ALU_RGB_ADDR_55
++0x47A0 US_ALU_RGB_ADDR_56
++0x47A4 US_ALU_RGB_ADDR_57
++0x47A8 US_ALU_RGB_ADDR_58
++0x47AC US_ALU_RGB_ADDR_59
++0x47B0 US_ALU_RGB_ADDR_60
++0x47B4 US_ALU_RGB_ADDR_61
++0x47B8 US_ALU_RGB_ADDR_62
++0x47BC US_ALU_RGB_ADDR_63
++0x47C0 US_ALU_ALPHA_ADDR_0
++0x47C4 US_ALU_ALPHA_ADDR_1
++0x47C8 US_ALU_ALPHA_ADDR_2
++0x47CC US_ALU_ALPHA_ADDR_3
++0x47D0 US_ALU_ALPHA_ADDR_4
++0x47D4 US_ALU_ALPHA_ADDR_5
++0x47D8 US_ALU_ALPHA_ADDR_6
++0x47DC US_ALU_ALPHA_ADDR_7
++0x47E0 US_ALU_ALPHA_ADDR_8
++0x47E4 US_ALU_ALPHA_ADDR_9
++0x47E8 US_ALU_ALPHA_ADDR_10
++0x47EC US_ALU_ALPHA_ADDR_11
++0x47F0 US_ALU_ALPHA_ADDR_12
++0x47F4 US_ALU_ALPHA_ADDR_13
++0x47F8 US_ALU_ALPHA_ADDR_14
++0x47FC US_ALU_ALPHA_ADDR_15
++0x4800 US_ALU_ALPHA_ADDR_16
++0x4804 US_ALU_ALPHA_ADDR_17
++0x4808 US_ALU_ALPHA_ADDR_18
++0x480C US_ALU_ALPHA_ADDR_19
++0x4810 US_ALU_ALPHA_ADDR_20
++0x4814 US_ALU_ALPHA_ADDR_21
++0x4818 US_ALU_ALPHA_ADDR_22
++0x481C US_ALU_ALPHA_ADDR_23
++0x4820 US_ALU_ALPHA_ADDR_24
++0x4824 US_ALU_ALPHA_ADDR_25
++0x4828 US_ALU_ALPHA_ADDR_26
++0x482C US_ALU_ALPHA_ADDR_27
++0x4830 US_ALU_ALPHA_ADDR_28
++0x4834 US_ALU_ALPHA_ADDR_29
++0x4838 US_ALU_ALPHA_ADDR_30
++0x483C US_ALU_ALPHA_ADDR_31
++0x4840 US_ALU_ALPHA_ADDR_32
++0x4844 US_ALU_ALPHA_ADDR_33
++0x4848 US_ALU_ALPHA_ADDR_34
++0x484C US_ALU_ALPHA_ADDR_35
++0x4850 US_ALU_ALPHA_ADDR_36
++0x4854 US_ALU_ALPHA_ADDR_37
++0x4858 US_ALU_ALPHA_ADDR_38
++0x485C US_ALU_ALPHA_ADDR_39
++0x4860 US_ALU_ALPHA_ADDR_40
++0x4864 US_ALU_ALPHA_ADDR_41
++0x4868 US_ALU_ALPHA_ADDR_42
++0x486C US_ALU_ALPHA_ADDR_43
++0x4870 US_ALU_ALPHA_ADDR_44
++0x4874 US_ALU_ALPHA_ADDR_45
++0x4878 US_ALU_ALPHA_ADDR_46
++0x487C US_ALU_ALPHA_ADDR_47
++0x4880 US_ALU_ALPHA_ADDR_48
++0x4884 US_ALU_ALPHA_ADDR_49
++0x4888 US_ALU_ALPHA_ADDR_50
++0x488C US_ALU_ALPHA_ADDR_51
++0x4890 US_ALU_ALPHA_ADDR_52
++0x4894 US_ALU_ALPHA_ADDR_53
++0x4898 US_ALU_ALPHA_ADDR_54
++0x489C US_ALU_ALPHA_ADDR_55
++0x48A0 US_ALU_ALPHA_ADDR_56
++0x48A4 US_ALU_ALPHA_ADDR_57
++0x48A8 US_ALU_ALPHA_ADDR_58
++0x48AC US_ALU_ALPHA_ADDR_59
++0x48B0 US_ALU_ALPHA_ADDR_60
++0x48B4 US_ALU_ALPHA_ADDR_61
++0x48B8 US_ALU_ALPHA_ADDR_62
++0x48BC US_ALU_ALPHA_ADDR_63
++0x48C0 US_ALU_RGB_INST_0
++0x48C4 US_ALU_RGB_INST_1
++0x48C8 US_ALU_RGB_INST_2
++0x48CC US_ALU_RGB_INST_3
++0x48D0 US_ALU_RGB_INST_4
++0x48D4 US_ALU_RGB_INST_5
++0x48D8 US_ALU_RGB_INST_6
++0x48DC US_ALU_RGB_INST_7
++0x48E0 US_ALU_RGB_INST_8
++0x48E4 US_ALU_RGB_INST_9
++0x48E8 US_ALU_RGB_INST_10
++0x48EC US_ALU_RGB_INST_11
++0x48F0 US_ALU_RGB_INST_12
++0x48F4 US_ALU_RGB_INST_13
++0x48F8 US_ALU_RGB_INST_14
++0x48FC US_ALU_RGB_INST_15
++0x4900 US_ALU_RGB_INST_16
++0x4904 US_ALU_RGB_INST_17
++0x4908 US_ALU_RGB_INST_18
++0x490C US_ALU_RGB_INST_19
++0x4910 US_ALU_RGB_INST_20
++0x4914 US_ALU_RGB_INST_21
++0x4918 US_ALU_RGB_INST_22
++0x491C US_ALU_RGB_INST_23
++0x4920 US_ALU_RGB_INST_24
++0x4924 US_ALU_RGB_INST_25
++0x4928 US_ALU_RGB_INST_26
++0x492C US_ALU_RGB_INST_27
++0x4930 US_ALU_RGB_INST_28
++0x4934 US_ALU_RGB_INST_29
++0x4938 US_ALU_RGB_INST_30
++0x493C US_ALU_RGB_INST_31
++0x4940 US_ALU_RGB_INST_32
++0x4944 US_ALU_RGB_INST_33
++0x4948 US_ALU_RGB_INST_34
++0x494C US_ALU_RGB_INST_35
++0x4950 US_ALU_RGB_INST_36
++0x4954 US_ALU_RGB_INST_37
++0x4958 US_ALU_RGB_INST_38
++0x495C US_ALU_RGB_INST_39
++0x4960 US_ALU_RGB_INST_40
++0x4964 US_ALU_RGB_INST_41
++0x4968 US_ALU_RGB_INST_42
++0x496C US_ALU_RGB_INST_43
++0x4970 US_ALU_RGB_INST_44
++0x4974 US_ALU_RGB_INST_45
++0x4978 US_ALU_RGB_INST_46
++0x497C US_ALU_RGB_INST_47
++0x4980 US_ALU_RGB_INST_48
++0x4984 US_ALU_RGB_INST_49
++0x4988 US_ALU_RGB_INST_50
++0x498C US_ALU_RGB_INST_51
++0x4990 US_ALU_RGB_INST_52
++0x4994 US_ALU_RGB_INST_53
++0x4998 US_ALU_RGB_INST_54
++0x499C US_ALU_RGB_INST_55
++0x49A0 US_ALU_RGB_INST_56
++0x49A4 US_ALU_RGB_INST_57
++0x49A8 US_ALU_RGB_INST_58
++0x49AC US_ALU_RGB_INST_59
++0x49B0 US_ALU_RGB_INST_60
++0x49B4 US_ALU_RGB_INST_61
++0x49B8 US_ALU_RGB_INST_62
++0x49BC US_ALU_RGB_INST_63
++0x49C0 US_ALU_ALPHA_INST_0
++0x49C4 US_ALU_ALPHA_INST_1
++0x49C8 US_ALU_ALPHA_INST_2
++0x49CC US_ALU_ALPHA_INST_3
++0x49D0 US_ALU_ALPHA_INST_4
++0x49D4 US_ALU_ALPHA_INST_5
++0x49D8 US_ALU_ALPHA_INST_6
++0x49DC US_ALU_ALPHA_INST_7
++0x49E0 US_ALU_ALPHA_INST_8
++0x49E4 US_ALU_ALPHA_INST_9
++0x49E8 US_ALU_ALPHA_INST_10
++0x49EC US_ALU_ALPHA_INST_11
++0x49F0 US_ALU_ALPHA_INST_12
++0x49F4 US_ALU_ALPHA_INST_13
++0x49F8 US_ALU_ALPHA_INST_14
++0x49FC US_ALU_ALPHA_INST_15
++0x4A00 US_ALU_ALPHA_INST_16
++0x4A04 US_ALU_ALPHA_INST_17
++0x4A08 US_ALU_ALPHA_INST_18
++0x4A0C US_ALU_ALPHA_INST_19
++0x4A10 US_ALU_ALPHA_INST_20
++0x4A14 US_ALU_ALPHA_INST_21
++0x4A18 US_ALU_ALPHA_INST_22
++0x4A1C US_ALU_ALPHA_INST_23
++0x4A20 US_ALU_ALPHA_INST_24
++0x4A24 US_ALU_ALPHA_INST_25
++0x4A28 US_ALU_ALPHA_INST_26
++0x4A2C US_ALU_ALPHA_INST_27
++0x4A30 US_ALU_ALPHA_INST_28
++0x4A34 US_ALU_ALPHA_INST_29
++0x4A38 US_ALU_ALPHA_INST_30
++0x4A3C US_ALU_ALPHA_INST_31
++0x4A40 US_ALU_ALPHA_INST_32
++0x4A44 US_ALU_ALPHA_INST_33
++0x4A48 US_ALU_ALPHA_INST_34
++0x4A4C US_ALU_ALPHA_INST_35
++0x4A50 US_ALU_ALPHA_INST_36
++0x4A54 US_ALU_ALPHA_INST_37
++0x4A58 US_ALU_ALPHA_INST_38
++0x4A5C US_ALU_ALPHA_INST_39
++0x4A60 US_ALU_ALPHA_INST_40
++0x4A64 US_ALU_ALPHA_INST_41
++0x4A68 US_ALU_ALPHA_INST_42
++0x4A6C US_ALU_ALPHA_INST_43
++0x4A70 US_ALU_ALPHA_INST_44
++0x4A74 US_ALU_ALPHA_INST_45
++0x4A78 US_ALU_ALPHA_INST_46
++0x4A7C US_ALU_ALPHA_INST_47
++0x4A80 US_ALU_ALPHA_INST_48
++0x4A84 US_ALU_ALPHA_INST_49
++0x4A88 US_ALU_ALPHA_INST_50
++0x4A8C US_ALU_ALPHA_INST_51
++0x4A90 US_ALU_ALPHA_INST_52
++0x4A94 US_ALU_ALPHA_INST_53
++0x4A98 US_ALU_ALPHA_INST_54
++0x4A9C US_ALU_ALPHA_INST_55
++0x4AA0 US_ALU_ALPHA_INST_56
++0x4AA4 US_ALU_ALPHA_INST_57
++0x4AA8 US_ALU_ALPHA_INST_58
++0x4AAC US_ALU_ALPHA_INST_59
++0x4AB0 US_ALU_ALPHA_INST_60
++0x4AB4 US_ALU_ALPHA_INST_61
++0x4AB8 US_ALU_ALPHA_INST_62
++0x4ABC US_ALU_ALPHA_INST_63
++0x4BC0 FG_FOG_BLEND
++0x4BC4 FG_FOG_FACTOR
++0x4BC8 FG_FOG_COLOR_R
++0x4BCC FG_FOG_COLOR_G
++0x4BD0 FG_FOG_COLOR_B
++0x4BD4 FG_ALPHA_FUNC
++0x4BD8 FG_DEPTH_SRC
++0x4C00 US_ALU_CONST_R_0
++0x4C04 US_ALU_CONST_G_0
++0x4C08 US_ALU_CONST_B_0
++0x4C0C US_ALU_CONST_A_0
++0x4C10 US_ALU_CONST_R_1
++0x4C14 US_ALU_CONST_G_1
++0x4C18 US_ALU_CONST_B_1
++0x4C1C US_ALU_CONST_A_1
++0x4C20 US_ALU_CONST_R_2
++0x4C24 US_ALU_CONST_G_2
++0x4C28 US_ALU_CONST_B_2
++0x4C2C US_ALU_CONST_A_2
++0x4C30 US_ALU_CONST_R_3
++0x4C34 US_ALU_CONST_G_3
++0x4C38 US_ALU_CONST_B_3
++0x4C3C US_ALU_CONST_A_3
++0x4C40 US_ALU_CONST_R_4
++0x4C44 US_ALU_CONST_G_4
++0x4C48 US_ALU_CONST_B_4
++0x4C4C US_ALU_CONST_A_4
++0x4C50 US_ALU_CONST_R_5
++0x4C54 US_ALU_CONST_G_5
++0x4C58 US_ALU_CONST_B_5
++0x4C5C US_ALU_CONST_A_5
++0x4C60 US_ALU_CONST_R_6
++0x4C64 US_ALU_CONST_G_6
++0x4C68 US_ALU_CONST_B_6
++0x4C6C US_ALU_CONST_A_6
++0x4C70 US_ALU_CONST_R_7
++0x4C74 US_ALU_CONST_G_7
++0x4C78 US_ALU_CONST_B_7
++0x4C7C US_ALU_CONST_A_7
++0x4C80 US_ALU_CONST_R_8
++0x4C84 US_ALU_CONST_G_8
++0x4C88 US_ALU_CONST_B_8
++0x4C8C US_ALU_CONST_A_8
++0x4C90 US_ALU_CONST_R_9
++0x4C94 US_ALU_CONST_G_9
++0x4C98 US_ALU_CONST_B_9
++0x4C9C US_ALU_CONST_A_9
++0x4CA0 US_ALU_CONST_R_10
++0x4CA4 US_ALU_CONST_G_10
++0x4CA8 US_ALU_CONST_B_10
++0x4CAC US_ALU_CONST_A_10
++0x4CB0 US_ALU_CONST_R_11
++0x4CB4 US_ALU_CONST_G_11
++0x4CB8 US_ALU_CONST_B_11
++0x4CBC US_ALU_CONST_A_11
++0x4CC0 US_ALU_CONST_R_12
++0x4CC4 US_ALU_CONST_G_12
++0x4CC8 US_ALU_CONST_B_12
++0x4CCC US_ALU_CONST_A_12
++0x4CD0 US_ALU_CONST_R_13
++0x4CD4 US_ALU_CONST_G_13
++0x4CD8 US_ALU_CONST_B_13
++0x4CDC US_ALU_CONST_A_13
++0x4CE0 US_ALU_CONST_R_14
++0x4CE4 US_ALU_CONST_G_14
++0x4CE8 US_ALU_CONST_B_14
++0x4CEC US_ALU_CONST_A_14
++0x4CF0 US_ALU_CONST_R_15
++0x4CF4 US_ALU_CONST_G_15
++0x4CF8 US_ALU_CONST_B_15
++0x4CFC US_ALU_CONST_A_15
++0x4D00 US_ALU_CONST_R_16
++0x4D04 US_ALU_CONST_G_16
++0x4D08 US_ALU_CONST_B_16
++0x4D0C US_ALU_CONST_A_16
++0x4D10 US_ALU_CONST_R_17
++0x4D14 US_ALU_CONST_G_17
++0x4D18 US_ALU_CONST_B_17
++0x4D1C US_ALU_CONST_A_17
++0x4D20 US_ALU_CONST_R_18
++0x4D24 US_ALU_CONST_G_18
++0x4D28 US_ALU_CONST_B_18
++0x4D2C US_ALU_CONST_A_18
++0x4D30 US_ALU_CONST_R_19
++0x4D34 US_ALU_CONST_G_19
++0x4D38 US_ALU_CONST_B_19
++0x4D3C US_ALU_CONST_A_19
++0x4D40 US_ALU_CONST_R_20
++0x4D44 US_ALU_CONST_G_20
++0x4D48 US_ALU_CONST_B_20
++0x4D4C US_ALU_CONST_A_20
++0x4D50 US_ALU_CONST_R_21
++0x4D54 US_ALU_CONST_G_21
++0x4D58 US_ALU_CONST_B_21
++0x4D5C US_ALU_CONST_A_21
++0x4D60 US_ALU_CONST_R_22
++0x4D64 US_ALU_CONST_G_22
++0x4D68 US_ALU_CONST_B_22
++0x4D6C US_ALU_CONST_A_22
++0x4D70 US_ALU_CONST_R_23
++0x4D74 US_ALU_CONST_G_23
++0x4D78 US_ALU_CONST_B_23
++0x4D7C US_ALU_CONST_A_23
++0x4D80 US_ALU_CONST_R_24
++0x4D84 US_ALU_CONST_G_24
++0x4D88 US_ALU_CONST_B_24
++0x4D8C US_ALU_CONST_A_24
++0x4D90 US_ALU_CONST_R_25
++0x4D94 US_ALU_CONST_G_25
++0x4D98 US_ALU_CONST_B_25
++0x4D9C US_ALU_CONST_A_25
++0x4DA0 US_ALU_CONST_R_26
++0x4DA4 US_ALU_CONST_G_26
++0x4DA8 US_ALU_CONST_B_26
++0x4DAC US_ALU_CONST_A_26
++0x4DB0 US_ALU_CONST_R_27
++0x4DB4 US_ALU_CONST_G_27
++0x4DB8 US_ALU_CONST_B_27
++0x4DBC US_ALU_CONST_A_27
++0x4DC0 US_ALU_CONST_R_28
++0x4DC4 US_ALU_CONST_G_28
++0x4DC8 US_ALU_CONST_B_28
++0x4DCC US_ALU_CONST_A_28
++0x4DD0 US_ALU_CONST_R_29
++0x4DD4 US_ALU_CONST_G_29
++0x4DD8 US_ALU_CONST_B_29
++0x4DDC US_ALU_CONST_A_29
++0x4DE0 US_ALU_CONST_R_30
++0x4DE4 US_ALU_CONST_G_30
++0x4DE8 US_ALU_CONST_B_30
++0x4DEC US_ALU_CONST_A_30
++0x4DF0 US_ALU_CONST_R_31
++0x4DF4 US_ALU_CONST_G_31
++0x4DF8 US_ALU_CONST_B_31
++0x4DFC US_ALU_CONST_A_31
++0x4E04 RB3D_BLENDCNTL_R3
++0x4E08 RB3D_ABLENDCNTL_R3
++0x4E0C RB3D_COLOR_CHANNEL_MASK
++0x4E10 RB3D_CONSTANT_COLOR
++0x4E14 RB3D_COLOR_CLEAR_VALUE
++0x4E18 RB3D_ROPCNTL_R3
++0x4E1C RB3D_CLRCMP_FLIPE_R3
++0x4E20 RB3D_CLRCMP_CLR_R3
++0x4E24 RB3D_CLRCMP_MSK_R3
++0x4E48 RB3D_DEBUG_CTL
++0x4E4C RB3D_DSTCACHE_CTLSTAT_R3
++0x4E50 RB3D_DITHER_CTL
++0x4E54 RB3D_CMASK_OFFSET0
++0x4E58 RB3D_CMASK_OFFSET1
++0x4E5C RB3D_CMASK_OFFSET2
++0x4E60 RB3D_CMASK_OFFSET3
++0x4E64 RB3D_CMASK_PITCH0
++0x4E68 RB3D_CMASK_PITCH1
++0x4E6C RB3D_CMASK_PITCH2
++0x4E70 RB3D_CMASK_PITCH3
++0x4E74 RB3D_CMASK_WRINDEX
++0x4E78 RB3D_CMASK_DWORD
++0x4E7C RB3D_CMASK_RDINDEX
++0x4E80 RB3D_AARESOLVE_OFFSET
++0x4E84 RB3D_AARESOLVE_PITCH
++0x4E88 RB3D_AARESOLVE_CTL
++0x4EA0 RB3D_DISCARD_SRC_PIXEL_LTE_THRESHOLD
++0x4EA4 RB3D_DISCARD_SRC_PIXEL_GTE_THRESHOLD
++0x4F04 ZB_ZSTENCILCNTL
++0x4F08 ZB_STENCILREFMASK
++0x4F14 ZB_ZTOP
++0x4F18 ZB_ZCACHE_CTLSTAT
++0x4F1C ZB_BW_CNTL
++0x4F28 ZB_DEPTHCLEARVALUE
++0x4F30 ZB_ZMASK_OFFSET
++0x4F34 ZB_ZMASK_PITCH
++0x4F38 ZB_ZMASK_WRINDEX
++0x4F3C ZB_ZMASK_DWORD
++0x4F40 ZB_ZMASK_RDINDEX
++0x4F44 ZB_HIZ_OFFSET
++0x4F48 ZB_HIZ_WRINDEX
++0x4F4C ZB_HIZ_DWORD
++0x4F50 ZB_HIZ_RDINDEX
++0x4F54 ZB_HIZ_PITCH
++0x4F58 ZB_ZPASS_DATA
+diff --git a/drivers/gpu/drm/radeon/reg_srcs/rv515 b/drivers/gpu/drm/radeon/reg_srcs/rv515
+new file mode 100644
+index 0000000..0102a0d
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/reg_srcs/rv515
+@@ -0,0 +1,486 @@
++rv515 0x6d40
++0x1434 SRC_Y_X
++0x1438 DST_Y_X
++0x143C DST_HEIGHT_WIDTH
++0x146C DP_GUI_MASTER_CNTL
++0x1474 BRUSH_Y_X
++0x1478 DP_BRUSH_BKGD_CLR
++0x147C DP_BRUSH_FRGD_CLR
++0x1480 BRUSH_DATA0
++0x1484 BRUSH_DATA1
++0x1598 DST_WIDTH_HEIGHT
++0x15C0 CLR_CMP_CNTL
++0x15C4 CLR_CMP_CLR_SRC
++0x15C8 CLR_CMP_CLR_DST
++0x15CC CLR_CMP_MSK
++0x15D8 DP_SRC_FRGD_CLR
++0x15DC DP_SRC_BKGD_CLR
++0x1600 DST_LINE_START
++0x1604 DST_LINE_END
++0x1608 DST_LINE_PATCOUNT
++0x16C0 DP_CNTL
++0x16CC DP_WRITE_MSK
++0x16D0 DP_CNTL_XDIR_YDIR_YMAJOR
++0x16E8 DEFAULT_SC_BOTTOM_RIGHT
++0x16EC SC_TOP_LEFT
++0x16F0 SC_BOTTOM_RIGHT
++0x16F4 SRC_SC_BOTTOM_RIGHT
++0x1714 DSTCACHE_CTLSTAT
++0x1720 WAIT_UNTIL
++0x172C RBBM_GUICNTL
++0x1D98 VAP_VPORT_XSCALE
++0x1D9C VAP_VPORT_XOFFSET
++0x1DA0 VAP_VPORT_YSCALE
++0x1DA4 VAP_VPORT_YOFFSET
++0x1DA8 VAP_VPORT_ZSCALE
++0x1DAC VAP_VPORT_ZOFFSET
++0x2080 VAP_CNTL
++0x2090 VAP_OUT_VTX_FMT_0
++0x2094 VAP_OUT_VTX_FMT_1
++0x20B0 VAP_VTE_CNTL
++0x2138 VAP_VF_MIN_VTX_INDX
++0x2140 VAP_CNTL_STATUS
++0x2150 VAP_PROG_STREAM_CNTL_0
++0x2154 VAP_PROG_STREAM_CNTL_1
++0x2158 VAP_PROG_STREAM_CNTL_2
++0x215C VAP_PROG_STREAM_CNTL_3
++0x2160 VAP_PROG_STREAM_CNTL_4
++0x2164 VAP_PROG_STREAM_CNTL_5
++0x2168 VAP_PROG_STREAM_CNTL_6
++0x216C VAP_PROG_STREAM_CNTL_7
++0x2180 VAP_VTX_STATE_CNTL
++0x2184 VAP_VSM_VTX_ASSM
++0x2188 VAP_VTX_STATE_IND_REG_0
++0x218C VAP_VTX_STATE_IND_REG_1
++0x2190 VAP_VTX_STATE_IND_REG_2
++0x2194 VAP_VTX_STATE_IND_REG_3
++0x2198 VAP_VTX_STATE_IND_REG_4
++0x219C VAP_VTX_STATE_IND_REG_5
++0x21A0 VAP_VTX_STATE_IND_REG_6
++0x21A4 VAP_VTX_STATE_IND_REG_7
++0x21A8 VAP_VTX_STATE_IND_REG_8
++0x21AC VAP_VTX_STATE_IND_REG_9
++0x21B0 VAP_VTX_STATE_IND_REG_10
++0x21B4 VAP_VTX_STATE_IND_REG_11
++0x21B8 VAP_VTX_STATE_IND_REG_12
++0x21BC VAP_VTX_STATE_IND_REG_13
++0x21C0 VAP_VTX_STATE_IND_REG_14
++0x21C4 VAP_VTX_STATE_IND_REG_15
++0x21DC VAP_PSC_SGN_NORM_CNTL
++0x21E0 VAP_PROG_STREAM_CNTL_EXT_0
++0x21E4 VAP_PROG_STREAM_CNTL_EXT_1
++0x21E8 VAP_PROG_STREAM_CNTL_EXT_2
++0x21EC VAP_PROG_STREAM_CNTL_EXT_3
++0x21F0 VAP_PROG_STREAM_CNTL_EXT_4
++0x21F4 VAP_PROG_STREAM_CNTL_EXT_5
++0x21F8 VAP_PROG_STREAM_CNTL_EXT_6
++0x21FC VAP_PROG_STREAM_CNTL_EXT_7
++0x2200 VAP_PVS_VECTOR_INDX_REG
++0x2204 VAP_PVS_VECTOR_DATA_REG
++0x2208 VAP_PVS_VECTOR_DATA_REG_128
++0x2218 VAP_TEX_TO_COLOR_CNTL
++0x221C VAP_CLIP_CNTL
++0x2220 VAP_GB_VERT_CLIP_ADJ
++0x2224 VAP_GB_VERT_DISC_ADJ
++0x2228 VAP_GB_HORZ_CLIP_ADJ
++0x222C VAP_GB_HORZ_DISC_ADJ
++0x2230 VAP_PVS_FLOW_CNTL_ADDRS_0
++0x2234 VAP_PVS_FLOW_CNTL_ADDRS_1
++0x2238 VAP_PVS_FLOW_CNTL_ADDRS_2
++0x223C VAP_PVS_FLOW_CNTL_ADDRS_3
++0x2240 VAP_PVS_FLOW_CNTL_ADDRS_4
++0x2244 VAP_PVS_FLOW_CNTL_ADDRS_5
++0x2248 VAP_PVS_FLOW_CNTL_ADDRS_6
++0x224C VAP_PVS_FLOW_CNTL_ADDRS_7
++0x2250 VAP_PVS_FLOW_CNTL_ADDRS_8
++0x2254 VAP_PVS_FLOW_CNTL_ADDRS_9
++0x2258 VAP_PVS_FLOW_CNTL_ADDRS_10
++0x225C VAP_PVS_FLOW_CNTL_ADDRS_11
++0x2260 VAP_PVS_FLOW_CNTL_ADDRS_12
++0x2264 VAP_PVS_FLOW_CNTL_ADDRS_13
++0x2268 VAP_PVS_FLOW_CNTL_ADDRS_14
++0x226C VAP_PVS_FLOW_CNTL_ADDRS_15
++0x2284 VAP_PVS_STATE_FLUSH_REG
++0x2288 VAP_PVS_VTX_TIMEOUT_REG
++0x2290 VAP_PVS_FLOW_CNTL_LOOP_INDEX_0
++0x2294 VAP_PVS_FLOW_CNTL_LOOP_INDEX_1
++0x2298 VAP_PVS_FLOW_CNTL_LOOP_INDEX_2
++0x229C VAP_PVS_FLOW_CNTL_LOOP_INDEX_3
++0x22A0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_4
++0x22A4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_5
++0x22A8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_6
++0x22AC VAP_PVS_FLOW_CNTL_LOOP_INDEX_7
++0x22B0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_8
++0x22B4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_9
++0x22B8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_10
++0x22BC VAP_PVS_FLOW_CNTL_LOOP_INDEX_11
++0x22C0 VAP_PVS_FLOW_CNTL_LOOP_INDEX_12
++0x22C4 VAP_PVS_FLOW_CNTL_LOOP_INDEX_13
++0x22C8 VAP_PVS_FLOW_CNTL_LOOP_INDEX_14
++0x22CC VAP_PVS_FLOW_CNTL_LOOP_INDEX_15
++0x22D0 VAP_PVS_CODE_CNTL_0
++0x22D4 VAP_PVS_CONST_CNTL
++0x22D8 VAP_PVS_CODE_CNTL_1
++0x22DC VAP_PVS_FLOW_CNTL_OPC
++0x2500 VAP_PVS_FLOW_CNTL_ADDRS_LW_0
++0x2504 VAP_PVS_FLOW_CNTL_ADDRS_UW_0
++0x2508 VAP_PVS_FLOW_CNTL_ADDRS_LW_1
++0x250C VAP_PVS_FLOW_CNTL_ADDRS_UW_1
++0x2510 VAP_PVS_FLOW_CNTL_ADDRS_LW_2
++0x2514 VAP_PVS_FLOW_CNTL_ADDRS_UW_2
++0x2518 VAP_PVS_FLOW_CNTL_ADDRS_LW_3
++0x251C VAP_PVS_FLOW_CNTL_ADDRS_UW_3
++0x2520 VAP_PVS_FLOW_CNTL_ADDRS_LW_4
++0x2524 VAP_PVS_FLOW_CNTL_ADDRS_UW_4
++0x2528 VAP_PVS_FLOW_CNTL_ADDRS_LW_5
++0x252C VAP_PVS_FLOW_CNTL_ADDRS_UW_5
++0x2530 VAP_PVS_FLOW_CNTL_ADDRS_LW_6
++0x2534 VAP_PVS_FLOW_CNTL_ADDRS_UW_6
++0x2538 VAP_PVS_FLOW_CNTL_ADDRS_LW_7
++0x253C VAP_PVS_FLOW_CNTL_ADDRS_UW_7
++0x2540 VAP_PVS_FLOW_CNTL_ADDRS_LW_8
++0x2544 VAP_PVS_FLOW_CNTL_ADDRS_UW_8
++0x2548 VAP_PVS_FLOW_CNTL_ADDRS_LW_9
++0x254C VAP_PVS_FLOW_CNTL_ADDRS_UW_9
++0x2550 VAP_PVS_FLOW_CNTL_ADDRS_LW_10
++0x2554 VAP_PVS_FLOW_CNTL_ADDRS_UW_10
++0x2558 VAP_PVS_FLOW_CNTL_ADDRS_LW_11
++0x255C VAP_PVS_FLOW_CNTL_ADDRS_UW_11
++0x2560 VAP_PVS_FLOW_CNTL_ADDRS_LW_12
++0x2564 VAP_PVS_FLOW_CNTL_ADDRS_UW_12
++0x2568 VAP_PVS_FLOW_CNTL_ADDRS_LW_13
++0x256C VAP_PVS_FLOW_CNTL_ADDRS_UW_13
++0x2570 VAP_PVS_FLOW_CNTL_ADDRS_LW_14
++0x2574 VAP_PVS_FLOW_CNTL_ADDRS_UW_14
++0x2578 VAP_PVS_FLOW_CNTL_ADDRS_LW_15
++0x257C VAP_PVS_FLOW_CNTL_ADDRS_UW_15
++0x342C RB2D_DSTCACHE_CTLSTAT
++0x4000 GB_VAP_RASTER_VTX_FMT_0
++0x4004 GB_VAP_RASTER_VTX_FMT_1
++0x4008 GB_ENABLE
++0x401C GB_SELECT
++0x4020 GB_AA_CONFIG
++0x4024 GB_FIFO_SIZE
++0x4100 TX_INVALTAGS
++0x4200 GA_POINT_S0
++0x4204 GA_POINT_T0
++0x4208 GA_POINT_S1
++0x420C GA_POINT_T1
++0x4214 GA_TRIANGLE_STIPPLE
++0x421C GA_POINT_SIZE
++0x4230 GA_POINT_MINMAX
++0x4234 GA_LINE_CNTL
++0x4238 GA_LINE_STIPPLE_CONFIG
++0x4260 GA_LINE_STIPPLE_VALUE
++0x4264 GA_LINE_S0
++0x4268 GA_LINE_S1
++0x4278 GA_COLOR_CONTROL
++0x427C GA_SOLID_RG
++0x4280 GA_SOLID_BA
++0x4288 GA_POLY_MODE
++0x428C GA_ROUND_MODE
++0x4290 GA_OFFSET
++0x4294 GA_FOG_SCALE
++0x4298 GA_FOG_OFFSET
++0x42A0 SU_TEX_WRAP
++0x42A4 SU_POLY_OFFSET_FRONT_SCALE
++0x42A8 SU_POLY_OFFSET_FRONT_OFFSET
++0x42AC SU_POLY_OFFSET_BACK_SCALE
++0x42B0 SU_POLY_OFFSET_BACK_OFFSET
++0x42B4 SU_POLY_OFFSET_ENABLE
++0x42B8 SU_CULL_MODE
++0x42C0 SU_DEPTH_SCALE
++0x42C4 SU_DEPTH_OFFSET
++0x42C8 SU_REG_DEST
++0x4300 RS_COUNT
++0x4304 RS_INST_COUNT
++0x4074 RS_IP_0
++0x4078 RS_IP_1
++0x407C RS_IP_2
++0x4080 RS_IP_3
++0x4084 RS_IP_4
++0x4088 RS_IP_5
++0x408C RS_IP_6
++0x4090 RS_IP_7
++0x4094 RS_IP_8
++0x4098 RS_IP_9
++0x409C RS_IP_10
++0x40A0 RS_IP_11
++0x40A4 RS_IP_12
++0x40A8 RS_IP_13
++0x40AC RS_IP_14
++0x40B0 RS_IP_15
++0x4320 RS_INST_0
++0x4324 RS_INST_1
++0x4328 RS_INST_2
++0x432C RS_INST_3
++0x4330 RS_INST_4
++0x4334 RS_INST_5
++0x4338 RS_INST_6
++0x433C RS_INST_7
++0x4340 RS_INST_8
++0x4344 RS_INST_9
++0x4348 RS_INST_10
++0x434C RS_INST_11
++0x4350 RS_INST_12
++0x4354 RS_INST_13
++0x4358 RS_INST_14
++0x435C RS_INST_15
++0x43A4 SC_HYPERZ_EN
++0x43A8 SC_EDGERULE
++0x43B0 SC_CLIP_0_A
++0x43B4 SC_CLIP_0_B
++0x43B8 SC_CLIP_1_A
++0x43BC SC_CLIP_1_B
++0x43C0 SC_CLIP_2_A
++0x43C4 SC_CLIP_2_B
++0x43C8 SC_CLIP_3_A
++0x43CC SC_CLIP_3_B
++0x43D0 SC_CLIP_RULE
++0x43E0 SC_SCISSOR0
++0x43E8 SC_SCREENDOOR
++0x4440 TX_FILTER1_0
++0x4444 TX_FILTER1_1
++0x4448 TX_FILTER1_2
++0x444C TX_FILTER1_3
++0x4450 TX_FILTER1_4
++0x4454 TX_FILTER1_5
++0x4458 TX_FILTER1_6
++0x445C TX_FILTER1_7
++0x4460 TX_FILTER1_8
++0x4464 TX_FILTER1_9
++0x4468 TX_FILTER1_10
++0x446C TX_FILTER1_11
++0x4470 TX_FILTER1_12
++0x4474 TX_FILTER1_13
++0x4478 TX_FILTER1_14
++0x447C TX_FILTER1_15
++0x4580 TX_CHROMA_KEY_0
++0x4584 TX_CHROMA_KEY_1
++0x4588 TX_CHROMA_KEY_2
++0x458C TX_CHROMA_KEY_3
++0x4590 TX_CHROMA_KEY_4
++0x4594 TX_CHROMA_KEY_5
++0x4598 TX_CHROMA_KEY_6
++0x459C TX_CHROMA_KEY_7
++0x45A0 TX_CHROMA_KEY_8
++0x45A4 TX_CHROMA_KEY_9
++0x45A8 TX_CHROMA_KEY_10
++0x45AC TX_CHROMA_KEY_11
++0x45B0 TX_CHROMA_KEY_12
++0x45B4 TX_CHROMA_KEY_13
++0x45B8 TX_CHROMA_KEY_14
++0x45BC TX_CHROMA_KEY_15
++0x45C0 TX_BORDER_COLOR_0
++0x45C4 TX_BORDER_COLOR_1
++0x45C8 TX_BORDER_COLOR_2
++0x45CC TX_BORDER_COLOR_3
++0x45D0 TX_BORDER_COLOR_4
++0x45D4 TX_BORDER_COLOR_5
++0x45D8 TX_BORDER_COLOR_6
++0x45DC TX_BORDER_COLOR_7
++0x45E0 TX_BORDER_COLOR_8
++0x45E4 TX_BORDER_COLOR_9
++0x45E8 TX_BORDER_COLOR_10
++0x45EC TX_BORDER_COLOR_11
++0x45F0 TX_BORDER_COLOR_12
++0x45F4 TX_BORDER_COLOR_13
++0x45F8 TX_BORDER_COLOR_14
++0x45FC TX_BORDER_COLOR_15
++0x4250 GA_US_VECTOR_INDEX
++0x4254 GA_US_VECTOR_DATA
++0x4600 US_CONFIG
++0x4604 US_PIXSIZE
++0x4620 US_FC_BOOL_CONST
++0x4624 US_FC_CTRL
++0x4630 US_CODE_ADDR
++0x4634 US_CODE_RANGE
++0x4638 US_CODE_OFFSET
++0x46A4 US_OUT_FMT_0
++0x46A8 US_OUT_FMT_1
++0x46AC US_OUT_FMT_2
++0x46B0 US_OUT_FMT_3
++0x46B4 US_W_FMT
++0x4BC0 FG_FOG_BLEND
++0x4BC4 FG_FOG_FACTOR
++0x4BC8 FG_FOG_COLOR_R
++0x4BCC FG_FOG_COLOR_G
++0x4BD0 FG_FOG_COLOR_B
++0x4BD4 FG_ALPHA_FUNC
++0x4BD8 FG_DEPTH_SRC
++0x4C00 US_ALU_CONST_R_0
++0x4C04 US_ALU_CONST_G_0
++0x4C08 US_ALU_CONST_B_0
++0x4C0C US_ALU_CONST_A_0
++0x4C10 US_ALU_CONST_R_1
++0x4C14 US_ALU_CONST_G_1
++0x4C18 US_ALU_CONST_B_1
++0x4C1C US_ALU_CONST_A_1
++0x4C20 US_ALU_CONST_R_2
++0x4C24 US_ALU_CONST_G_2
++0x4C28 US_ALU_CONST_B_2
++0x4C2C US_ALU_CONST_A_2
++0x4C30 US_ALU_CONST_R_3
++0x4C34 US_ALU_CONST_G_3
++0x4C38 US_ALU_CONST_B_3
++0x4C3C US_ALU_CONST_A_3
++0x4C40 US_ALU_CONST_R_4
++0x4C44 US_ALU_CONST_G_4
++0x4C48 US_ALU_CONST_B_4
++0x4C4C US_ALU_CONST_A_4
++0x4C50 US_ALU_CONST_R_5
++0x4C54 US_ALU_CONST_G_5
++0x4C58 US_ALU_CONST_B_5
++0x4C5C US_ALU_CONST_A_5
++0x4C60 US_ALU_CONST_R_6
++0x4C64 US_ALU_CONST_G_6
++0x4C68 US_ALU_CONST_B_6
++0x4C6C US_ALU_CONST_A_6
++0x4C70 US_ALU_CONST_R_7
++0x4C74 US_ALU_CONST_G_7
++0x4C78 US_ALU_CONST_B_7
++0x4C7C US_ALU_CONST_A_7
++0x4C80 US_ALU_CONST_R_8
++0x4C84 US_ALU_CONST_G_8
++0x4C88 US_ALU_CONST_B_8
++0x4C8C US_ALU_CONST_A_8
++0x4C90 US_ALU_CONST_R_9
++0x4C94 US_ALU_CONST_G_9
++0x4C98 US_ALU_CONST_B_9
++0x4C9C US_ALU_CONST_A_9
++0x4CA0 US_ALU_CONST_R_10
++0x4CA4 US_ALU_CONST_G_10
++0x4CA8 US_ALU_CONST_B_10
++0x4CAC US_ALU_CONST_A_10
++0x4CB0 US_ALU_CONST_R_11
++0x4CB4 US_ALU_CONST_G_11
++0x4CB8 US_ALU_CONST_B_11
++0x4CBC US_ALU_CONST_A_11
++0x4CC0 US_ALU_CONST_R_12
++0x4CC4 US_ALU_CONST_G_12
++0x4CC8 US_ALU_CONST_B_12
++0x4CCC US_ALU_CONST_A_12
++0x4CD0 US_ALU_CONST_R_13
++0x4CD4 US_ALU_CONST_G_13
++0x4CD8 US_ALU_CONST_B_13
++0x4CDC US_ALU_CONST_A_13
++0x4CE0 US_ALU_CONST_R_14
++0x4CE4 US_ALU_CONST_G_14
++0x4CE8 US_ALU_CONST_B_14
++0x4CEC US_ALU_CONST_A_14
++0x4CF0 US_ALU_CONST_R_15
++0x4CF4 US_ALU_CONST_G_15
++0x4CF8 US_ALU_CONST_B_15
++0x4CFC US_ALU_CONST_A_15
++0x4D00 US_ALU_CONST_R_16
++0x4D04 US_ALU_CONST_G_16
++0x4D08 US_ALU_CONST_B_16
++0x4D0C US_ALU_CONST_A_16
++0x4D10 US_ALU_CONST_R_17
++0x4D14 US_ALU_CONST_G_17
++0x4D18 US_ALU_CONST_B_17
++0x4D1C US_ALU_CONST_A_17
++0x4D20 US_ALU_CONST_R_18
++0x4D24 US_ALU_CONST_G_18
++0x4D28 US_ALU_CONST_B_18
++0x4D2C US_ALU_CONST_A_18
++0x4D30 US_ALU_CONST_R_19
++0x4D34 US_ALU_CONST_G_19
++0x4D38 US_ALU_CONST_B_19
++0x4D3C US_ALU_CONST_A_19
++0x4D40 US_ALU_CONST_R_20
++0x4D44 US_ALU_CONST_G_20
++0x4D48 US_ALU_CONST_B_20
++0x4D4C US_ALU_CONST_A_20
++0x4D50 US_ALU_CONST_R_21
++0x4D54 US_ALU_CONST_G_21
++0x4D58 US_ALU_CONST_B_21
++0x4D5C US_ALU_CONST_A_21
++0x4D60 US_ALU_CONST_R_22
++0x4D64 US_ALU_CONST_G_22
++0x4D68 US_ALU_CONST_B_22
++0x4D6C US_ALU_CONST_A_22
++0x4D70 US_ALU_CONST_R_23
++0x4D74 US_ALU_CONST_G_23
++0x4D78 US_ALU_CONST_B_23
++0x4D7C US_ALU_CONST_A_23
++0x4D80 US_ALU_CONST_R_24
++0x4D84 US_ALU_CONST_G_24
++0x4D88 US_ALU_CONST_B_24
++0x4D8C US_ALU_CONST_A_24
++0x4D90 US_ALU_CONST_R_25
++0x4D94 US_ALU_CONST_G_25
++0x4D98 US_ALU_CONST_B_25
++0x4D9C US_ALU_CONST_A_25
++0x4DA0 US_ALU_CONST_R_26
++0x4DA4 US_ALU_CONST_G_26
++0x4DA8 US_ALU_CONST_B_26
++0x4DAC US_ALU_CONST_A_26
++0x4DB0 US_ALU_CONST_R_27
++0x4DB4 US_ALU_CONST_G_27
++0x4DB8 US_ALU_CONST_B_27
++0x4DBC US_ALU_CONST_A_27
++0x4DC0 US_ALU_CONST_R_28
++0x4DC4 US_ALU_CONST_G_28
++0x4DC8 US_ALU_CONST_B_28
++0x4DCC US_ALU_CONST_A_28
++0x4DD0 US_ALU_CONST_R_29
++0x4DD4 US_ALU_CONST_G_29
++0x4DD8 US_ALU_CONST_B_29
++0x4DDC US_ALU_CONST_A_29
++0x4DE0 US_ALU_CONST_R_30
++0x4DE4 US_ALU_CONST_G_30
++0x4DE8 US_ALU_CONST_B_30
++0x4DEC US_ALU_CONST_A_30
++0x4DF0 US_ALU_CONST_R_31
++0x4DF4 US_ALU_CONST_G_31
++0x4DF8 US_ALU_CONST_B_31
++0x4DFC US_ALU_CONST_A_31
++0x4E04 RB3D_BLENDCNTL_R3
++0x4E08 RB3D_ABLENDCNTL_R3
++0x4E0C RB3D_COLOR_CHANNEL_MASK
++0x4E10 RB3D_CONSTANT_COLOR
++0x4E14 RB3D_COLOR_CLEAR_VALUE
++0x4E18 RB3D_ROPCNTL_R3
++0x4E1C RB3D_CLRCMP_FLIPE_R3
++0x4E20 RB3D_CLRCMP_CLR_R3
++0x4E24 RB3D_CLRCMP_MSK_R3
++0x4E48 RB3D_DEBUG_CTL
++0x4E4C RB3D_DSTCACHE_CTLSTAT_R3
++0x4E50 RB3D_DITHER_CTL
++0x4E54 RB3D_CMASK_OFFSET0
++0x4E58 RB3D_CMASK_OFFSET1
++0x4E5C RB3D_CMASK_OFFSET2
++0x4E60 RB3D_CMASK_OFFSET3
++0x4E64 RB3D_CMASK_PITCH0
++0x4E68 RB3D_CMASK_PITCH1
++0x4E6C RB3D_CMASK_PITCH2
++0x4E70 RB3D_CMASK_PITCH3
++0x4E74 RB3D_CMASK_WRINDEX
++0x4E78 RB3D_CMASK_DWORD
++0x4E7C RB3D_CMASK_RDINDEX
++0x4E80 RB3D_AARESOLVE_OFFSET
++0x4E84 RB3D_AARESOLVE_PITCH
++0x4E88 RB3D_AARESOLVE_CTL
++0x4EA0 RB3D_DISCARD_SRC_PIXEL_LTE_THRESHOLD
++0x4EA4 RB3D_DISCARD_SRC_PIXEL_GTE_THRESHOLD
++0x4EF8 RB3D_CONSTANT_COLOR_AR
++0x4EFC RB3D_CONSTANT_COLOR_GB
++0x4F04 ZB_ZSTENCILCNTL
++0x4F08 ZB_STENCILREFMASK
++0x4F14 ZB_ZTOP
++0x4F18 ZB_ZCACHE_CTLSTAT
++0x4F1C ZB_BW_CNTL
++0x4F28 ZB_DEPTHCLEARVALUE
++0x4F30 ZB_ZMASK_OFFSET
++0x4F34 ZB_ZMASK_PITCH
++0x4F38 ZB_ZMASK_WRINDEX
++0x4F3C ZB_ZMASK_DWORD
++0x4F40 ZB_ZMASK_RDINDEX
++0x4F44 ZB_HIZ_OFFSET
++0x4F48 ZB_HIZ_WRINDEX
++0x4F4C ZB_HIZ_DWORD
++0x4F50 ZB_HIZ_RDINDEX
++0x4F54 ZB_HIZ_PITCH
++0x4F58 ZB_ZPASS_DATA
++0x4FD4 ZB_STENCILREFMASK_BF
+diff --git a/drivers/gpu/drm/radeon/rs400.c b/drivers/gpu/drm/radeon/rs400.c
+index b29affd..a3fbdad 100644
+--- a/drivers/gpu/drm/radeon/rs400.c
++++ b/drivers/gpu/drm/radeon/rs400.c
+@@ -29,7 +29,6 @@
+ #include <drm/drmP.h>
+ #include "radeon_reg.h"
+ #include "radeon.h"
+-#include "radeon_share.h"
+
+ /* rs400,rs480 depends on : */
+ void r100_hdp_reset(struct radeon_device *rdev);
+@@ -63,7 +62,7 @@ void rs400_gart_adjust_size(struct radeon_device *rdev)
+ break;
+ default:
+ DRM_ERROR("Unable to use IGP GART size %uM\n",
+- rdev->mc.gtt_size >> 20);
++ (unsigned)(rdev->mc.gtt_size >> 20));
+ DRM_ERROR("Valid GART size for IGP are 32M,64M,128M,256M,512M,1G,2G\n");
+ DRM_ERROR("Forcing to 32M GART size\n");
+ rdev->mc.gtt_size = 32 * 1024 * 1024;
+@@ -93,20 +92,41 @@ void rs400_gart_tlb_flush(struct radeon_device *rdev)
+ WREG32_MC(RS480_GART_CACHE_CNTRL, 0);
+ }
+
+-int rs400_gart_enable(struct radeon_device *rdev)
++int rs400_gart_init(struct radeon_device *rdev)
+ {
+- uint32_t size_reg;
+- uint32_t tmp;
+ int r;
+
++ if (rdev->gart.table.ram.ptr) {
++ WARN(1, "RS400 GART already initialized.\n");
++ return 0;
++ }
++ /* Check gart size */
++ switch(rdev->mc.gtt_size / (1024 * 1024)) {
++ case 32:
++ case 64:
++ case 128:
++ case 256:
++ case 512:
++ case 1024:
++ case 2048:
++ break;
++ default:
++ return -EINVAL;
++ }
+ /* Initialize common gart structure */
+ r = radeon_gart_init(rdev);
+- if (r) {
++ if (r)
+ return r;
+- }
+- if (rs400_debugfs_pcie_gart_info_init(rdev)) {
++ if (rs400_debugfs_pcie_gart_info_init(rdev))
+ DRM_ERROR("Failed to register debugfs file for RS400 GART !\n");
+- }
++ rdev->gart.table_size = rdev->gart.num_gpu_pages * 4;
++ return radeon_gart_table_ram_alloc(rdev);
++}
++
++int rs400_gart_enable(struct radeon_device *rdev)
++{
++ uint32_t size_reg;
++ uint32_t tmp;
+
+ tmp = RREG32_MC(RS690_AIC_CTRL_SCRATCH);
+ tmp |= RS690_DIS_OUT_OF_PCI_GART_ACCESS;
+@@ -137,13 +157,6 @@ int rs400_gart_enable(struct radeon_device *rdev)
+ default:
+ return -EINVAL;
+ }
+- if (rdev->gart.table.ram.ptr == NULL) {
+- rdev->gart.table_size = rdev->gart.num_gpu_pages * 4;
+- r = radeon_gart_table_ram_alloc(rdev);
+- if (r) {
+- return r;
+- }
+- }
+ /* It should be fine to program it to max value */
+ if (rdev->family == CHIP_RS690 || (rdev->family == CHIP_RS740)) {
+ WREG32_MC(RS690_MCCFG_AGP_BASE, 0xFFFFFFFF);
+@@ -202,6 +215,13 @@ void rs400_gart_disable(struct radeon_device *rdev)
+ WREG32_MC(RS480_AGP_ADDRESS_SPACE_SIZE, 0);
+ }
+
++void rs400_gart_fini(struct radeon_device *rdev)
++{
++ rs400_gart_disable(rdev);
++ radeon_gart_table_ram_free(rdev);
++ radeon_gart_fini(rdev);
++}
++
+ int rs400_gart_set_page(struct radeon_device *rdev, int i, uint64_t addr)
+ {
+ uint32_t entry;
+@@ -256,14 +276,12 @@ int rs400_mc_init(struct radeon_device *rdev)
+ (void)RREG32(RADEON_HOST_PATH_CNTL);
+ WREG32(RADEON_HOST_PATH_CNTL, tmp);
+ (void)RREG32(RADEON_HOST_PATH_CNTL);
++
+ return 0;
+ }
+
+ void rs400_mc_fini(struct radeon_device *rdev)
+ {
+- rs400_gart_disable(rdev);
+- radeon_gart_table_ram_free(rdev);
+- radeon_gart_fini(rdev);
+ }
+
+
+diff --git a/drivers/gpu/drm/radeon/rs600.c b/drivers/gpu/drm/radeon/rs600.c
+index 02fd11a..4a4fe1c 100644
+--- a/drivers/gpu/drm/radeon/rs600.c
++++ b/drivers/gpu/drm/radeon/rs600.c
+@@ -29,6 +29,8 @@
+ #include "radeon_reg.h"
+ #include "radeon.h"
+
++#include "rs600_reg_safe.h"
++
+ /* rs600 depends on : */
+ void r100_hdp_reset(struct radeon_device *rdev);
+ int r100_gui_wait_for_idle(struct radeon_device *rdev);
+@@ -42,7 +44,6 @@ void r420_pipes_init(struct radeon_device *rdev);
+ */
+ void rs600_gpu_init(struct radeon_device *rdev);
+ int rs600_mc_wait_for_idle(struct radeon_device *rdev);
+-void rs600_disable_vga(struct radeon_device *rdev);
+
+
+ /*
+@@ -66,22 +67,35 @@ void rs600_gart_tlb_flush(struct radeon_device *rdev)
+ tmp = RREG32_MC(RS600_MC_PT0_CNTL);
+ }
+
+-int rs600_gart_enable(struct radeon_device *rdev)
++int rs600_gart_init(struct radeon_device *rdev)
+ {
+- uint32_t tmp;
+- int i;
+ int r;
+
++ if (rdev->gart.table.vram.robj) {
++ WARN(1, "RS600 GART already initialized.\n");
++ return 0;
++ }
+ /* Initialize common gart structure */
+ r = radeon_gart_init(rdev);
+ if (r) {
+ return r;
+ }
+ rdev->gart.table_size = rdev->gart.num_gpu_pages * 8;
+- r = radeon_gart_table_vram_alloc(rdev);
+- if (r) {
+- return r;
++ return radeon_gart_table_vram_alloc(rdev);
++}
++
++int rs600_gart_enable(struct radeon_device *rdev)
++{
++ uint32_t tmp;
++ int r, i;
++
++ if (rdev->gart.table.vram.robj == NULL) {
++ dev_err(rdev->dev, "No VRAM object for PCIE GART.\n");
++ return -EINVAL;
+ }
++ r = radeon_gart_table_vram_pin(rdev);
++ if (r)
++ return r;
+ /* FIXME: setup default page */
+ WREG32_MC(RS600_MC_PT0_CNTL,
+ (RS600_EFFECTIVE_L2_CACHE_SIZE(6) |
+@@ -136,8 +150,17 @@ void rs600_gart_disable(struct radeon_device *rdev)
+ tmp = RREG32_MC(RS600_MC_CNTL1);
+ tmp &= ~RS600_ENABLE_PAGE_TABLES;
+ WREG32_MC(RS600_MC_CNTL1, tmp);
+- radeon_object_kunmap(rdev->gart.table.vram.robj);
+- radeon_object_unpin(rdev->gart.table.vram.robj);
++ if (rdev->gart.table.vram.robj) {
++ radeon_object_kunmap(rdev->gart.table.vram.robj);
++ radeon_object_unpin(rdev->gart.table.vram.robj);
++ }
++}
++
++void rs600_gart_fini(struct radeon_device *rdev)
++{
++ rs600_gart_disable(rdev);
++ radeon_gart_table_vram_free(rdev);
++ radeon_gart_fini(rdev);
+ }
+
+ #define R600_PTE_VALID (1 << 0)
+@@ -173,6 +196,8 @@ void rs600_mc_disable_clients(struct radeon_device *rdev)
+ "programming pipes. Bad things might happen.\n");
+ }
+
++ rv515_vga_render_disable(rdev);
++
+ tmp = RREG32(AVIVO_D1VGA_CONTROL);
+ WREG32(AVIVO_D1VGA_CONTROL, tmp & ~AVIVO_DVGA_CONTROL_MODE_ENABLE);
+ tmp = RREG32(AVIVO_D2VGA_CONTROL);
+@@ -233,9 +258,6 @@ int rs600_mc_init(struct radeon_device *rdev)
+
+ void rs600_mc_fini(struct radeon_device *rdev)
+ {
+- rs600_gart_disable(rdev);
+- radeon_gart_table_vram_free(rdev);
+- radeon_gart_fini(rdev);
+ }
+
+
+@@ -251,11 +273,9 @@ int rs600_irq_set(struct radeon_device *rdev)
+ tmp |= RADEON_SW_INT_ENABLE;
+ }
+ if (rdev->irq.crtc_vblank_int[0]) {
+- tmp |= AVIVO_DISPLAY_INT_STATUS;
+ mode_int |= AVIVO_D1MODE_INT_MASK;
+ }
+ if (rdev->irq.crtc_vblank_int[1]) {
+- tmp |= AVIVO_DISPLAY_INT_STATUS;
+ mode_int |= AVIVO_D2MODE_INT_MASK;
+ }
+ WREG32(RADEON_GEN_INT_CNTL, tmp);
+@@ -324,20 +344,6 @@ u32 rs600_get_vblank_counter(struct radeon_device *rdev, int crtc)
+ /*
+ * Global GPU functions
+ */
+-void rs600_disable_vga(struct radeon_device *rdev)
+-{
+- unsigned tmp;
+-
+- WREG32(0x330, 0);
+- WREG32(0x338, 0);
+- tmp = RREG32(0x300);
+- tmp &= ~(3 << 16);
+- WREG32(0x300, tmp);
+- WREG32(0x308, (1 << 8));
+- WREG32(0x310, rdev->mc.vram_location);
+- WREG32(0x594, 0);
+-}
+-
+ int rs600_mc_wait_for_idle(struct radeon_device *rdev)
+ {
+ unsigned i;
+@@ -363,7 +369,7 @@ void rs600_gpu_init(struct radeon_device *rdev)
+ {
+ /* FIXME: HDP same place on rs600 ? */
+ r100_hdp_reset(rdev);
+- rs600_disable_vga(rdev);
++ rv515_vga_render_disable(rdev);
+ /* FIXME: is this correct ? */
+ r420_pipes_init(rdev);
+ if (rs600_mc_wait_for_idle(rdev)) {
+@@ -410,64 +416,6 @@ void rs600_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
+ WREG32(RS600_MC_DATA, v);
+ }
+
+-static const unsigned rs600_reg_safe_bm[219] = {
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0x17FF1FFF, 0xFFFFFFFC, 0xFFFFFFFF, 0xFF30FFBF,
+- 0xFFFFFFF8, 0xC3E6FFFF, 0xFFFFF6DF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF03F,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFEFCE, 0xF00EBFFF, 0x007C0000,
+- 0xF0000078, 0xFF000009, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFF7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFC78, 0xFFFFFFFF, 0xFFFFFFFE, 0xFFFFFFFF,
+- 0x38FF8F50, 0xFFF88082, 0xF000000C, 0xFAE009FF,
+- 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000,
+- 0x00000000, 0x0000C100, 0x00000000, 0x00000000,
+- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+- 0x00000000, 0xFFFF0000, 0xFFFFFFFF, 0xFF80FFFF,
+- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+- 0x0003FC01, 0xFFFFFCF8, 0xFF800B19, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+-};
+-
+ int rs600_init(struct radeon_device *rdev)
+ {
+ rdev->config.r300.reg_safe_bm = rs600_reg_safe_bm;
+diff --git a/drivers/gpu/drm/radeon/rs690.c b/drivers/gpu/drm/radeon/rs690.c
+index 8798825..7a0098d 100644
+--- a/drivers/gpu/drm/radeon/rs690.c
++++ b/drivers/gpu/drm/radeon/rs690.c
+@@ -40,7 +40,6 @@ void rs400_gart_disable(struct radeon_device *rdev);
+ int rs400_gart_enable(struct radeon_device *rdev);
+ void rs400_gart_adjust_size(struct radeon_device *rdev);
+ void rs600_mc_disable_clients(struct radeon_device *rdev);
+-void rs600_disable_vga(struct radeon_device *rdev);
+
+ /* This files gather functions specifics to :
+ * rs690,rs740
+@@ -94,9 +93,6 @@ int rs690_mc_init(struct radeon_device *rdev)
+
+ void rs690_mc_fini(struct radeon_device *rdev)
+ {
+- rs400_gart_disable(rdev);
+- radeon_gart_table_ram_free(rdev);
+- radeon_gart_fini(rdev);
+ }
+
+
+@@ -128,7 +124,7 @@ void rs690_gpu_init(struct radeon_device *rdev)
+ {
+ /* FIXME: HDP same place on rs690 ? */
+ r100_hdp_reset(rdev);
+- rs600_disable_vga(rdev);
++ rv515_vga_render_disable(rdev);
+ /* FIXME: is this correct ? */
+ r420_pipes_init(rdev);
+ if (rs690_mc_wait_for_idle(rdev)) {
+@@ -652,4 +648,3 @@ void rs690_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
+ WREG32(RS690_MC_DATA, v);
+ WREG32(RS690_MC_INDEX, RS690_MC_INDEX_WR_ACK);
+ }
+-
+diff --git a/drivers/gpu/drm/radeon/rs780.c b/drivers/gpu/drm/radeon/rs780.c
+deleted file mode 100644
+index 0affcff..0000000
+--- a/drivers/gpu/drm/radeon/rs780.c
++++ /dev/null
+@@ -1,102 +0,0 @@
+-/*
+- * Copyright 2008 Advanced Micro Devices, Inc.
+- * Copyright 2008 Red Hat Inc.
+- * Copyright 2009 Jerome Glisse.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: Dave Airlie
+- * Alex Deucher
+- * Jerome Glisse
+- */
+-#include "drmP.h"
+-#include "radeon_reg.h"
+-#include "radeon.h"
+-
+-/* rs780 depends on : */
+-void rs600_mc_disable_clients(struct radeon_device *rdev);
+-
+-/* This files gather functions specifics to:
+- * rs780
+- *
+- * Some of these functions might be used by newer ASICs.
+- */
+-int rs780_mc_wait_for_idle(struct radeon_device *rdev);
+-void rs780_gpu_init(struct radeon_device *rdev);
+-
+-
+-/*
+- * MC
+- */
+-int rs780_mc_init(struct radeon_device *rdev)
+-{
+- rs780_gpu_init(rdev);
+- /* FIXME: implement */
+-
+- rs600_mc_disable_clients(rdev);
+- if (rs780_mc_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait MC idle while "
+- "programming pipes. Bad things might happen.\n");
+- }
+- return 0;
+-}
+-
+-void rs780_mc_fini(struct radeon_device *rdev)
+-{
+- /* FIXME: implement */
+-}
+-
+-
+-/*
+- * Global GPU functions
+- */
+-void rs780_errata(struct radeon_device *rdev)
+-{
+- rdev->pll_errata = 0;
+-}
+-
+-int rs780_mc_wait_for_idle(struct radeon_device *rdev)
+-{
+- /* FIXME: implement */
+- return 0;
+-}
+-
+-void rs780_gpu_init(struct radeon_device *rdev)
+-{
+- /* FIXME: implement */
+-}
+-
+-
+-/*
+- * VRAM info
+- */
+-void rs780_vram_get_type(struct radeon_device *rdev)
+-{
+- /* FIXME: implement */
+-}
+-
+-void rs780_vram_info(struct radeon_device *rdev)
+-{
+- rs780_vram_get_type(rdev);
+-
+- /* FIXME: implement */
+- /* Could aper size report 0 ? */
+- rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
+- rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0);
+-}
+diff --git a/drivers/gpu/drm/radeon/rv515.c b/drivers/gpu/drm/radeon/rv515.c
+index 0566fb6..e53b5ca 100644
+--- a/drivers/gpu/drm/radeon/rv515.c
++++ b/drivers/gpu/drm/radeon/rv515.c
+@@ -27,41 +27,19 @@
+ */
+ #include <linux/seq_file.h>
+ #include "drmP.h"
+-#include "rv515r.h"
++#include "rv515d.h"
+ #include "radeon.h"
+-#include "radeon_share.h"
+-
+-/* rv515 depends on : */
+-void r100_hdp_reset(struct radeon_device *rdev);
+-int r100_cp_reset(struct radeon_device *rdev);
+-int r100_rb2d_reset(struct radeon_device *rdev);
+-int r100_gui_wait_for_idle(struct radeon_device *rdev);
+-int r100_cp_init(struct radeon_device *rdev, unsigned ring_size);
+-int rv370_pcie_gart_enable(struct radeon_device *rdev);
+-void rv370_pcie_gart_disable(struct radeon_device *rdev);
+-void r420_pipes_init(struct radeon_device *rdev);
+-void rs600_mc_disable_clients(struct radeon_device *rdev);
+-void rs600_disable_vga(struct radeon_device *rdev);
+-
+-/* This files gather functions specifics to:
+- * rv515
+- *
+- * Some of these functions might be used by newer ASICs.
+- */
++#include "atom.h"
++#include "rv515_reg_safe.h"
++
++/* This files gather functions specifics to: rv515 */
+ int rv515_debugfs_pipes_info_init(struct radeon_device *rdev);
+ int rv515_debugfs_ga_info_init(struct radeon_device *rdev);
+ void rv515_gpu_init(struct radeon_device *rdev);
+ int rv515_mc_wait_for_idle(struct radeon_device *rdev);
+
+-
+-/*
+- * MC
+- */
+-int rv515_mc_init(struct radeon_device *rdev)
++void rv515_debugfs(struct radeon_device *rdev)
+ {
+- uint32_t tmp;
+- int r;
+-
+ if (r100_debugfs_rbbm_init(rdev)) {
+ DRM_ERROR("Failed to register debugfs file for RBBM !\n");
+ }
+@@ -71,70 +49,8 @@ int rv515_mc_init(struct radeon_device *rdev)
+ if (rv515_debugfs_ga_info_init(rdev)) {
+ DRM_ERROR("Failed to register debugfs file for pipes !\n");
+ }
+-
+- rv515_gpu_init(rdev);
+- rv370_pcie_gart_disable(rdev);
+-
+- /* Setup GPU memory space */
+- rdev->mc.vram_location = 0xFFFFFFFFUL;
+- rdev->mc.gtt_location = 0xFFFFFFFFUL;
+- if (rdev->flags & RADEON_IS_AGP) {
+- r = radeon_agp_init(rdev);
+- if (r) {
+- printk(KERN_WARNING "[drm] Disabling AGP\n");
+- rdev->flags &= ~RADEON_IS_AGP;
+- rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
+- } else {
+- rdev->mc.gtt_location = rdev->mc.agp_base;
+- }
+- }
+- r = radeon_mc_setup(rdev);
+- if (r) {
+- return r;
+- }
+-
+- /* Program GPU memory space */
+- rs600_mc_disable_clients(rdev);
+- if (rv515_mc_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait MC idle while "
+- "programming pipes. Bad things might happen.\n");
+- }
+- /* Write VRAM size in case we are limiting it */
+- WREG32(RADEON_CONFIG_MEMSIZE, rdev->mc.real_vram_size);
+- tmp = REG_SET(MC_FB_START, rdev->mc.vram_location >> 16);
+- WREG32(0x134, tmp);
+- tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1;
+- tmp = REG_SET(MC_FB_TOP, tmp >> 16);
+- tmp |= REG_SET(MC_FB_START, rdev->mc.vram_location >> 16);
+- WREG32_MC(MC_FB_LOCATION, tmp);
+- WREG32(HDP_FB_LOCATION, rdev->mc.vram_location >> 16);
+- WREG32(0x310, rdev->mc.vram_location);
+- if (rdev->flags & RADEON_IS_AGP) {
+- tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1;
+- tmp = REG_SET(MC_AGP_TOP, tmp >> 16);
+- tmp |= REG_SET(MC_AGP_START, rdev->mc.gtt_location >> 16);
+- WREG32_MC(MC_AGP_LOCATION, tmp);
+- WREG32_MC(MC_AGP_BASE, rdev->mc.agp_base);
+- WREG32_MC(MC_AGP_BASE_2, 0);
+- } else {
+- WREG32_MC(MC_AGP_LOCATION, 0x0FFFFFFF);
+- WREG32_MC(MC_AGP_BASE, 0);
+- WREG32_MC(MC_AGP_BASE_2, 0);
+- }
+- return 0;
+-}
+-
+-void rv515_mc_fini(struct radeon_device *rdev)
+-{
+- rv370_pcie_gart_disable(rdev);
+- radeon_gart_table_vram_free(rdev);
+- radeon_gart_fini(rdev);
+ }
+
+-
+-/*
+- * Global GPU functions
+- */
+ void rv515_ring_start(struct radeon_device *rdev)
+ {
+ int r;
+@@ -203,11 +119,6 @@ void rv515_ring_start(struct radeon_device *rdev)
+ radeon_ring_unlock_commit(rdev);
+ }
+
+-void rv515_errata(struct radeon_device *rdev)
+-{
+- rdev->pll_errata = 0;
+-}
+-
+ int rv515_mc_wait_for_idle(struct radeon_device *rdev)
+ {
+ unsigned i;
+@@ -224,6 +135,12 @@ int rv515_mc_wait_for_idle(struct radeon_device *rdev)
+ return -1;
+ }
+
++void rv515_vga_render_disable(struct radeon_device *rdev)
++{
++ WREG32(R_000300_VGA_RENDER_CONTROL,
++ RREG32(R_000300_VGA_RENDER_CONTROL) & C_000300_VGA_VSTATUS_CNTL);
++}
++
+ void rv515_gpu_init(struct radeon_device *rdev)
+ {
+ unsigned pipe_select_current, gb_pipe_select, tmp;
+@@ -236,7 +153,7 @@ void rv515_gpu_init(struct radeon_device *rdev)
+ "reseting GPU. Bad things might happen.\n");
+ }
+
+- rs600_disable_vga(rdev);
++ rv515_vga_render_disable(rdev);
+
+ r420_pipes_init(rdev);
+ gb_pipe_select = RREG32(0x402C);
+@@ -340,10 +257,6 @@ int rv515_gpu_reset(struct radeon_device *rdev)
+ return 0;
+ }
+
+-
+-/*
+- * VRAM info
+- */
+ static void rv515_vram_get_type(struct radeon_device *rdev)
+ {
+ uint32_t tmp;
+@@ -379,10 +292,6 @@ void rv515_vram_info(struct radeon_device *rdev)
+ rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a);
+ }
+
+-
+-/*
+- * Indirect registers accessor
+- */
+ uint32_t rv515_mc_rreg(struct radeon_device *rdev, uint32_t reg)
+ {
+ uint32_t r;
+@@ -400,9 +309,6 @@ void rv515_mc_wreg(struct radeon_device *rdev, uint32_t reg, uint32_t v)
+ WREG32(MC_IND_INDEX, 0);
+ }
+
+-/*
+- * Debugfs info
+- */
+ #if defined(CONFIG_DEBUG_FS)
+ static int rv515_debugfs_pipes_info(struct seq_file *m, void *data)
+ {
+@@ -464,301 +370,489 @@ int rv515_debugfs_ga_info_init(struct radeon_device *rdev)
+ #endif
+ }
+
++void rv515_mc_stop(struct radeon_device *rdev, struct rv515_mc_save *save)
++{
++ save->d1vga_control = RREG32(R_000330_D1VGA_CONTROL);
++ save->d2vga_control = RREG32(R_000338_D2VGA_CONTROL);
++ save->vga_render_control = RREG32(R_000300_VGA_RENDER_CONTROL);
++ save->vga_hdp_control = RREG32(R_000328_VGA_HDP_CONTROL);
++ save->d1crtc_control = RREG32(R_006080_D1CRTC_CONTROL);
++ save->d2crtc_control = RREG32(R_006880_D2CRTC_CONTROL);
++
++ /* Stop all video */
++ WREG32(R_000330_D1VGA_CONTROL, 0);
++ WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 0);
++ WREG32(R_000300_VGA_RENDER_CONTROL, 0);
++ WREG32(R_0060E8_D1CRTC_UPDATE_LOCK, 1);
++ WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 1);
++ WREG32(R_006080_D1CRTC_CONTROL, 0);
++ WREG32(R_006880_D2CRTC_CONTROL, 0);
++ WREG32(R_0060E8_D1CRTC_UPDATE_LOCK, 0);
++ WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 0);
++}
+
+-/*
+- * Asic initialization
+- */
+-static const unsigned r500_reg_safe_bm[219] = {
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0x17FF1FFF, 0xFFFFFFFC, 0xFFFFFFFF, 0xFF30FFBF,
+- 0xFFFFFFF8, 0xC3E6FFFF, 0xFFFFF6DF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFF03F,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFEFCE, 0xF00EBFFF, 0x007C0000,
+- 0xF0000038, 0xFF000009, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFF7FF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0x1FFFFC78, 0xFFFFE000, 0xFFFFFFFE, 0xFFFFFFFF,
+- 0x38CF8F50, 0xFFF88082, 0xFF0000FC, 0xFAE009FF,
+- 0x0000FFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0x00000000,
+- 0xFFFF8CFC, 0xFFFFC1FF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFF80FFFF,
+- 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+- 0x0003FC01, 0x3FFFFCF8, 0xFF800B19, 0xFFDFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+- 0xFFFFFFFF, 0xFFFFFFFF, 0xFFFFFFFF,
+-};
++void rv515_mc_resume(struct radeon_device *rdev, struct rv515_mc_save *save)
++{
++ WREG32(R_006110_D1GRPH_PRIMARY_SURFACE_ADDRESS, rdev->mc.vram_start);
++ WREG32(R_006118_D1GRPH_SECONDARY_SURFACE_ADDRESS, rdev->mc.vram_start);
++ WREG32(R_006910_D2GRPH_PRIMARY_SURFACE_ADDRESS, rdev->mc.vram_start);
++ WREG32(R_006918_D2GRPH_SECONDARY_SURFACE_ADDRESS, rdev->mc.vram_start);
++ WREG32(R_000310_VGA_MEMORY_BASE_ADDRESS, rdev->mc.vram_start);
++ /* Unlock host access */
++ WREG32(R_000328_VGA_HDP_CONTROL, save->vga_hdp_control);
++ mdelay(1);
++ /* Restore video state */
++ WREG32(R_0060E8_D1CRTC_UPDATE_LOCK, 1);
++ WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 1);
++ WREG32(R_006080_D1CRTC_CONTROL, save->d1crtc_control);
++ WREG32(R_006880_D2CRTC_CONTROL, save->d2crtc_control);
++ WREG32(R_0060E8_D1CRTC_UPDATE_LOCK, 0);
++ WREG32(R_0068E8_D2CRTC_UPDATE_LOCK, 0);
++ WREG32(R_000330_D1VGA_CONTROL, save->d1vga_control);
++ WREG32(R_000338_D2VGA_CONTROL, save->d2vga_control);
++ WREG32(R_000300_VGA_RENDER_CONTROL, save->vga_render_control);
++}
+
+-int rv515_init(struct radeon_device *rdev)
++void rv515_mc_program(struct radeon_device *rdev)
++{
++ struct rv515_mc_save save;
++
++ /* Stops all mc clients */
++ rv515_mc_stop(rdev, &save);
++
++ /* Wait for mc idle */
++ if (rv515_mc_wait_for_idle(rdev))
++ dev_warn(rdev->dev, "Wait MC idle timeout before updating MC.\n");
++ /* Write VRAM size in case we are limiting it */
++ WREG32(R_0000F8_CONFIG_MEMSIZE, rdev->mc.real_vram_size);
++ /* Program MC, should be a 32bits limited address space */
++ WREG32_MC(R_000001_MC_FB_LOCATION,
++ S_000001_MC_FB_START(rdev->mc.vram_start >> 16) |
++ S_000001_MC_FB_TOP(rdev->mc.vram_end >> 16));
++ WREG32(R_000134_HDP_FB_LOCATION,
++ S_000134_HDP_FB_START(rdev->mc.vram_start >> 16));
++ if (rdev->flags & RADEON_IS_AGP) {
++ WREG32_MC(R_000002_MC_AGP_LOCATION,
++ S_000002_MC_AGP_START(rdev->mc.gtt_start >> 16) |
++ S_000002_MC_AGP_TOP(rdev->mc.gtt_end >> 16));
++ WREG32_MC(R_000003_MC_AGP_BASE, lower_32_bits(rdev->mc.agp_base));
++ WREG32_MC(R_000004_MC_AGP_BASE_2,
++ S_000004_AGP_BASE_ADDR_2(upper_32_bits(rdev->mc.agp_base)));
++ } else {
++ WREG32_MC(R_000002_MC_AGP_LOCATION, 0xFFFFFFFF);
++ WREG32_MC(R_000003_MC_AGP_BASE, 0);
++ WREG32_MC(R_000004_MC_AGP_BASE_2, 0);
++ }
++
++ rv515_mc_resume(rdev, &save);
++}
++
++void rv515_clock_startup(struct radeon_device *rdev)
++{
++ if (radeon_dynclks != -1 && radeon_dynclks)
++ radeon_atom_set_clock_gating(rdev, 1);
++ /* We need to force on some of the block */
++ WREG32_PLL(R_00000F_CP_DYN_CNTL,
++ RREG32_PLL(R_00000F_CP_DYN_CNTL) | S_00000F_CP_FORCEON(1));
++ WREG32_PLL(R_000011_E2_DYN_CNTL,
++ RREG32_PLL(R_000011_E2_DYN_CNTL) | S_000011_E2_FORCEON(1));
++ WREG32_PLL(R_000013_IDCT_DYN_CNTL,
++ RREG32_PLL(R_000013_IDCT_DYN_CNTL) | S_000013_IDCT_FORCEON(1));
++}
++
++static int rv515_startup(struct radeon_device *rdev)
++{
++ int r;
++
++ rv515_mc_program(rdev);
++ /* Resume clock */
++ rv515_clock_startup(rdev);
++ /* Initialize GPU configuration (# pipes, ...) */
++ rv515_gpu_init(rdev);
++ /* Initialize GART (initialize after TTM so we can allocate
++ * memory through TTM but finalize after TTM) */
++ if (rdev->flags & RADEON_IS_PCIE) {
++ r = rv370_pcie_gart_enable(rdev);
++ if (r)
++ return r;
++ }
++ /* Enable IRQ */
++ rdev->irq.sw_int = true;
++ r100_irq_set(rdev);
++ /* 1M ring buffer */
++ r = r100_cp_init(rdev, 1024 * 1024);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing CP (%d).\n", r);
++ return r;
++ }
++ r = r100_wb_init(rdev);
++ if (r)
++ dev_err(rdev->dev, "failled initializing WB (%d).\n", r);
++ r = r100_ib_init(rdev);
++ if (r) {
++ dev_err(rdev->dev, "failled initializing IB (%d).\n", r);
++ return r;
++ }
++ return 0;
++}
++
++int rv515_resume(struct radeon_device *rdev)
+ {
+- rdev->config.r300.reg_safe_bm = r500_reg_safe_bm;
+- rdev->config.r300.reg_safe_bm_size = ARRAY_SIZE(r500_reg_safe_bm);
++ /* Make sur GART are not working */
++ if (rdev->flags & RADEON_IS_PCIE)
++ rv370_pcie_gart_disable(rdev);
++ /* Resume clock before doing reset */
++ rv515_clock_startup(rdev);
++ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
++ if (radeon_gpu_reset(rdev)) {
++ dev_warn(rdev->dev, "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n",
++ RREG32(R_000E40_RBBM_STATUS),
++ RREG32(R_0007C0_CP_STAT));
++ }
++ /* post */
++ atom_asic_init(rdev->mode_info.atom_context);
++ /* Resume clock after posting */
++ rv515_clock_startup(rdev);
++ return rv515_startup(rdev);
++}
++
++int rv515_suspend(struct radeon_device *rdev)
++{
++ r100_cp_disable(rdev);
++ r100_wb_disable(rdev);
++ r100_irq_disable(rdev);
++ if (rdev->flags & RADEON_IS_PCIE)
++ rv370_pcie_gart_disable(rdev);
+ return 0;
+ }
+
+-void atom_rv515_force_tv_scaler(struct radeon_device *rdev)
++void rv515_set_safe_registers(struct radeon_device *rdev)
++{
++ rdev->config.r300.reg_safe_bm = rv515_reg_safe_bm;
++ rdev->config.r300.reg_safe_bm_size = ARRAY_SIZE(rv515_reg_safe_bm);
++}
++
++void rv515_fini(struct radeon_device *rdev)
+ {
++ rv515_suspend(rdev);
++ r100_cp_fini(rdev);
++ r100_wb_fini(rdev);
++ r100_ib_fini(rdev);
++ radeon_gem_fini(rdev);
++ rv370_pcie_gart_fini(rdev);
++ radeon_agp_fini(rdev);
++ radeon_irq_kms_fini(rdev);
++ radeon_fence_driver_fini(rdev);
++ radeon_object_fini(rdev);
++ radeon_atombios_fini(rdev);
++ kfree(rdev->bios);
++ rdev->bios = NULL;
++}
++
++int rv515_init(struct radeon_device *rdev)
++{
++ int r;
++
++ rdev->new_init_path = true;
++ /* Initialize scratch registers */
++ radeon_scratch_init(rdev);
++ /* Initialize surface registers */
++ radeon_surface_init(rdev);
++ /* TODO: disable VGA need to use VGA request */
++ /* BIOS*/
++ if (!radeon_get_bios(rdev)) {
++ if (ASIC_IS_AVIVO(rdev))
++ return -EINVAL;
++ }
++ if (rdev->is_atom_bios) {
++ r = radeon_atombios_init(rdev);
++ if (r)
++ return r;
++ } else {
++ dev_err(rdev->dev, "Expecting atombios for RV515 GPU\n");
++ return -EINVAL;
++ }
++ /* Reset gpu before posting otherwise ATOM will enter infinite loop */
++ if (radeon_gpu_reset(rdev)) {
++ dev_warn(rdev->dev,
++ "GPU reset failed ! (0xE40=0x%08X, 0x7C0=0x%08X)\n",
++ RREG32(R_000E40_RBBM_STATUS),
++ RREG32(R_0007C0_CP_STAT));
++ }
++ /* check if cards are posted or not */
++ if (!radeon_card_posted(rdev) && rdev->bios) {
++ DRM_INFO("GPU not posted. posting now...\n");
++ atom_asic_init(rdev->mode_info.atom_context);
++ }
++ /* Initialize clocks */
++ radeon_get_clock_info(rdev->ddev);
++ /* Get vram informations */
++ rv515_vram_info(rdev);
++ /* Initialize memory controller (also test AGP) */
++ r = r420_mc_init(rdev);
++ if (r)
++ return r;
++ rv515_debugfs(rdev);
++ /* Fence driver */
++ r = radeon_fence_driver_init(rdev);
++ if (r)
++ return r;
++ r = radeon_irq_kms_init(rdev);
++ if (r)
++ return r;
++ /* Memory manager */
++ r = radeon_object_init(rdev);
++ if (r)
++ return r;
++ r = rv370_pcie_gart_init(rdev);
++ if (r)
++ return r;
++ rv515_set_safe_registers(rdev);
++ rdev->accel_working = true;
++ r = rv515_startup(rdev);
++ if (r) {
++ /* Somethings want wront with the accel init stop accel */
++ dev_err(rdev->dev, "Disabling GPU acceleration\n");
++ rv515_suspend(rdev);
++ r100_cp_fini(rdev);
++ r100_wb_fini(rdev);
++ r100_ib_fini(rdev);
++ rv370_pcie_gart_fini(rdev);
++ radeon_agp_fini(rdev);
++ radeon_irq_kms_fini(rdev);
++ rdev->accel_working = false;
++ }
++ return 0;
++}
+
+- WREG32(0x659C, 0x0);
+- WREG32(0x6594, 0x705);
+- WREG32(0x65A4, 0x10001);
+- WREG32(0x65D8, 0x0);
+- WREG32(0x65B0, 0x0);
+- WREG32(0x65C0, 0x0);
+- WREG32(0x65D4, 0x0);
+- WREG32(0x6578, 0x0);
+- WREG32(0x657C, 0x841880A8);
+- WREG32(0x6578, 0x1);
+- WREG32(0x657C, 0x84208680);
+- WREG32(0x6578, 0x2);
+- WREG32(0x657C, 0xBFF880B0);
+- WREG32(0x6578, 0x100);
+- WREG32(0x657C, 0x83D88088);
+- WREG32(0x6578, 0x101);
+- WREG32(0x657C, 0x84608680);
+- WREG32(0x6578, 0x102);
+- WREG32(0x657C, 0xBFF080D0);
+- WREG32(0x6578, 0x200);
+- WREG32(0x657C, 0x83988068);
+- WREG32(0x6578, 0x201);
+- WREG32(0x657C, 0x84A08680);
+- WREG32(0x6578, 0x202);
+- WREG32(0x657C, 0xBFF080F8);
+- WREG32(0x6578, 0x300);
+- WREG32(0x657C, 0x83588058);
+- WREG32(0x6578, 0x301);
+- WREG32(0x657C, 0x84E08660);
+- WREG32(0x6578, 0x302);
+- WREG32(0x657C, 0xBFF88120);
+- WREG32(0x6578, 0x400);
+- WREG32(0x657C, 0x83188040);
+- WREG32(0x6578, 0x401);
+- WREG32(0x657C, 0x85008660);
+- WREG32(0x6578, 0x402);
+- WREG32(0x657C, 0xBFF88150);
+- WREG32(0x6578, 0x500);
+- WREG32(0x657C, 0x82D88030);
+- WREG32(0x6578, 0x501);
+- WREG32(0x657C, 0x85408640);
+- WREG32(0x6578, 0x502);
+- WREG32(0x657C, 0xBFF88180);
+- WREG32(0x6578, 0x600);
+- WREG32(0x657C, 0x82A08018);
+- WREG32(0x6578, 0x601);
+- WREG32(0x657C, 0x85808620);
+- WREG32(0x6578, 0x602);
+- WREG32(0x657C, 0xBFF081B8);
+- WREG32(0x6578, 0x700);
+- WREG32(0x657C, 0x82608010);
+- WREG32(0x6578, 0x701);
+- WREG32(0x657C, 0x85A08600);
+- WREG32(0x6578, 0x702);
+- WREG32(0x657C, 0x800081F0);
+- WREG32(0x6578, 0x800);
+- WREG32(0x657C, 0x8228BFF8);
+- WREG32(0x6578, 0x801);
+- WREG32(0x657C, 0x85E085E0);
+- WREG32(0x6578, 0x802);
+- WREG32(0x657C, 0xBFF88228);
+- WREG32(0x6578, 0x10000);
+- WREG32(0x657C, 0x82A8BF00);
+- WREG32(0x6578, 0x10001);
+- WREG32(0x657C, 0x82A08CC0);
+- WREG32(0x6578, 0x10002);
+- WREG32(0x657C, 0x8008BEF8);
+- WREG32(0x6578, 0x10100);
+- WREG32(0x657C, 0x81F0BF28);
+- WREG32(0x6578, 0x10101);
+- WREG32(0x657C, 0x83608CA0);
+- WREG32(0x6578, 0x10102);
+- WREG32(0x657C, 0x8018BED0);
+- WREG32(0x6578, 0x10200);
+- WREG32(0x657C, 0x8148BF38);
+- WREG32(0x6578, 0x10201);
+- WREG32(0x657C, 0x84408C80);
+- WREG32(0x6578, 0x10202);
+- WREG32(0x657C, 0x8008BEB8);
+- WREG32(0x6578, 0x10300);
+- WREG32(0x657C, 0x80B0BF78);
+- WREG32(0x6578, 0x10301);
+- WREG32(0x657C, 0x85008C20);
+- WREG32(0x6578, 0x10302);
+- WREG32(0x657C, 0x8020BEA0);
+- WREG32(0x6578, 0x10400);
+- WREG32(0x657C, 0x8028BF90);
+- WREG32(0x6578, 0x10401);
+- WREG32(0x657C, 0x85E08BC0);
+- WREG32(0x6578, 0x10402);
+- WREG32(0x657C, 0x8018BE90);
+- WREG32(0x6578, 0x10500);
+- WREG32(0x657C, 0xBFB8BFB0);
+- WREG32(0x6578, 0x10501);
+- WREG32(0x657C, 0x86C08B40);
+- WREG32(0x6578, 0x10502);
+- WREG32(0x657C, 0x8010BE90);
+- WREG32(0x6578, 0x10600);
+- WREG32(0x657C, 0xBF58BFC8);
+- WREG32(0x6578, 0x10601);
+- WREG32(0x657C, 0x87A08AA0);
+- WREG32(0x6578, 0x10602);
+- WREG32(0x657C, 0x8010BE98);
+- WREG32(0x6578, 0x10700);
+- WREG32(0x657C, 0xBF10BFF0);
+- WREG32(0x6578, 0x10701);
+- WREG32(0x657C, 0x886089E0);
+- WREG32(0x6578, 0x10702);
+- WREG32(0x657C, 0x8018BEB0);
+- WREG32(0x6578, 0x10800);
+- WREG32(0x657C, 0xBED8BFE8);
+- WREG32(0x6578, 0x10801);
+- WREG32(0x657C, 0x89408940);
+- WREG32(0x6578, 0x10802);
+- WREG32(0x657C, 0xBFE8BED8);
+- WREG32(0x6578, 0x20000);
+- WREG32(0x657C, 0x80008000);
+- WREG32(0x6578, 0x20001);
+- WREG32(0x657C, 0x90008000);
+- WREG32(0x6578, 0x20002);
+- WREG32(0x657C, 0x80008000);
+- WREG32(0x6578, 0x20003);
+- WREG32(0x657C, 0x80008000);
+- WREG32(0x6578, 0x20100);
+- WREG32(0x657C, 0x80108000);
+- WREG32(0x6578, 0x20101);
+- WREG32(0x657C, 0x8FE0BF70);
+- WREG32(0x6578, 0x20102);
+- WREG32(0x657C, 0xBFE880C0);
+- WREG32(0x6578, 0x20103);
+- WREG32(0x657C, 0x80008000);
+- WREG32(0x6578, 0x20200);
+- WREG32(0x657C, 0x8018BFF8);
+- WREG32(0x6578, 0x20201);
+- WREG32(0x657C, 0x8F80BF08);
+- WREG32(0x6578, 0x20202);
+- WREG32(0x657C, 0xBFD081A0);
+- WREG32(0x6578, 0x20203);
+- WREG32(0x657C, 0xBFF88000);
+- WREG32(0x6578, 0x20300);
+- WREG32(0x657C, 0x80188000);
+- WREG32(0x6578, 0x20301);
+- WREG32(0x657C, 0x8EE0BEC0);
+- WREG32(0x6578, 0x20302);
+- WREG32(0x657C, 0xBFB082A0);
+- WREG32(0x6578, 0x20303);
+- WREG32(0x657C, 0x80008000);
+- WREG32(0x6578, 0x20400);
+- WREG32(0x657C, 0x80188000);
+- WREG32(0x6578, 0x20401);
+- WREG32(0x657C, 0x8E00BEA0);
+- WREG32(0x6578, 0x20402);
+- WREG32(0x657C, 0xBF8883C0);
+- WREG32(0x6578, 0x20403);
+- WREG32(0x657C, 0x80008000);
+- WREG32(0x6578, 0x20500);
+- WREG32(0x657C, 0x80188000);
+- WREG32(0x6578, 0x20501);
+- WREG32(0x657C, 0x8D00BE90);
+- WREG32(0x6578, 0x20502);
+- WREG32(0x657C, 0xBF588500);
+- WREG32(0x6578, 0x20503);
+- WREG32(0x657C, 0x80008008);
+- WREG32(0x6578, 0x20600);
+- WREG32(0x657C, 0x80188000);
+- WREG32(0x6578, 0x20601);
+- WREG32(0x657C, 0x8BC0BE98);
+- WREG32(0x6578, 0x20602);
+- WREG32(0x657C, 0xBF308660);
+- WREG32(0x6578, 0x20603);
+- WREG32(0x657C, 0x80008008);
+- WREG32(0x6578, 0x20700);
+- WREG32(0x657C, 0x80108000);
+- WREG32(0x6578, 0x20701);
+- WREG32(0x657C, 0x8A80BEB0);
+- WREG32(0x6578, 0x20702);
+- WREG32(0x657C, 0xBF0087C0);
+- WREG32(0x6578, 0x20703);
+- WREG32(0x657C, 0x80008008);
+- WREG32(0x6578, 0x20800);
+- WREG32(0x657C, 0x80108000);
+- WREG32(0x6578, 0x20801);
+- WREG32(0x657C, 0x8920BED0);
+- WREG32(0x6578, 0x20802);
+- WREG32(0x657C, 0xBED08920);
+- WREG32(0x6578, 0x20803);
+- WREG32(0x657C, 0x80008010);
+- WREG32(0x6578, 0x30000);
+- WREG32(0x657C, 0x90008000);
+- WREG32(0x6578, 0x30001);
+- WREG32(0x657C, 0x80008000);
+- WREG32(0x6578, 0x30100);
+- WREG32(0x657C, 0x8FE0BF90);
+- WREG32(0x6578, 0x30101);
+- WREG32(0x657C, 0xBFF880A0);
+- WREG32(0x6578, 0x30200);
+- WREG32(0x657C, 0x8F60BF40);
+- WREG32(0x6578, 0x30201);
+- WREG32(0x657C, 0xBFE88180);
+- WREG32(0x6578, 0x30300);
+- WREG32(0x657C, 0x8EC0BF00);
+- WREG32(0x6578, 0x30301);
+- WREG32(0x657C, 0xBFC88280);
+- WREG32(0x6578, 0x30400);
+- WREG32(0x657C, 0x8DE0BEE0);
+- WREG32(0x6578, 0x30401);
+- WREG32(0x657C, 0xBFA083A0);
+- WREG32(0x6578, 0x30500);
+- WREG32(0x657C, 0x8CE0BED0);
+- WREG32(0x6578, 0x30501);
+- WREG32(0x657C, 0xBF7884E0);
+- WREG32(0x6578, 0x30600);
+- WREG32(0x657C, 0x8BA0BED8);
+- WREG32(0x6578, 0x30601);
+- WREG32(0x657C, 0xBF508640);
+- WREG32(0x6578, 0x30700);
+- WREG32(0x657C, 0x8A60BEE8);
+- WREG32(0x6578, 0x30701);
+- WREG32(0x657C, 0xBF2087A0);
+- WREG32(0x6578, 0x30800);
+- WREG32(0x657C, 0x8900BF00);
+- WREG32(0x6578, 0x30801);
+- WREG32(0x657C, 0xBF008900);
++void atom_rv515_force_tv_scaler(struct radeon_device *rdev, struct radeon_crtc *crtc)
++{
++ int index_reg = 0x6578 + crtc->crtc_offset;
++ int data_reg = 0x657c + crtc->crtc_offset;
++
++ WREG32(0x659C + crtc->crtc_offset, 0x0);
++ WREG32(0x6594 + crtc->crtc_offset, 0x705);
++ WREG32(0x65A4 + crtc->crtc_offset, 0x10001);
++ WREG32(0x65D8 + crtc->crtc_offset, 0x0);
++ WREG32(0x65B0 + crtc->crtc_offset, 0x0);
++ WREG32(0x65C0 + crtc->crtc_offset, 0x0);
++ WREG32(0x65D4 + crtc->crtc_offset, 0x0);
++ WREG32(index_reg, 0x0);
++ WREG32(data_reg, 0x841880A8);
++ WREG32(index_reg, 0x1);
++ WREG32(data_reg, 0x84208680);
++ WREG32(index_reg, 0x2);
++ WREG32(data_reg, 0xBFF880B0);
++ WREG32(index_reg, 0x100);
++ WREG32(data_reg, 0x83D88088);
++ WREG32(index_reg, 0x101);
++ WREG32(data_reg, 0x84608680);
++ WREG32(index_reg, 0x102);
++ WREG32(data_reg, 0xBFF080D0);
++ WREG32(index_reg, 0x200);
++ WREG32(data_reg, 0x83988068);
++ WREG32(index_reg, 0x201);
++ WREG32(data_reg, 0x84A08680);
++ WREG32(index_reg, 0x202);
++ WREG32(data_reg, 0xBFF080F8);
++ WREG32(index_reg, 0x300);
++ WREG32(data_reg, 0x83588058);
++ WREG32(index_reg, 0x301);
++ WREG32(data_reg, 0x84E08660);
++ WREG32(index_reg, 0x302);
++ WREG32(data_reg, 0xBFF88120);
++ WREG32(index_reg, 0x400);
++ WREG32(data_reg, 0x83188040);
++ WREG32(index_reg, 0x401);
++ WREG32(data_reg, 0x85008660);
++ WREG32(index_reg, 0x402);
++ WREG32(data_reg, 0xBFF88150);
++ WREG32(index_reg, 0x500);
++ WREG32(data_reg, 0x82D88030);
++ WREG32(index_reg, 0x501);
++ WREG32(data_reg, 0x85408640);
++ WREG32(index_reg, 0x502);
++ WREG32(data_reg, 0xBFF88180);
++ WREG32(index_reg, 0x600);
++ WREG32(data_reg, 0x82A08018);
++ WREG32(index_reg, 0x601);
++ WREG32(data_reg, 0x85808620);
++ WREG32(index_reg, 0x602);
++ WREG32(data_reg, 0xBFF081B8);
++ WREG32(index_reg, 0x700);
++ WREG32(data_reg, 0x82608010);
++ WREG32(index_reg, 0x701);
++ WREG32(data_reg, 0x85A08600);
++ WREG32(index_reg, 0x702);
++ WREG32(data_reg, 0x800081F0);
++ WREG32(index_reg, 0x800);
++ WREG32(data_reg, 0x8228BFF8);
++ WREG32(index_reg, 0x801);
++ WREG32(data_reg, 0x85E085E0);
++ WREG32(index_reg, 0x802);
++ WREG32(data_reg, 0xBFF88228);
++ WREG32(index_reg, 0x10000);
++ WREG32(data_reg, 0x82A8BF00);
++ WREG32(index_reg, 0x10001);
++ WREG32(data_reg, 0x82A08CC0);
++ WREG32(index_reg, 0x10002);
++ WREG32(data_reg, 0x8008BEF8);
++ WREG32(index_reg, 0x10100);
++ WREG32(data_reg, 0x81F0BF28);
++ WREG32(index_reg, 0x10101);
++ WREG32(data_reg, 0x83608CA0);
++ WREG32(index_reg, 0x10102);
++ WREG32(data_reg, 0x8018BED0);
++ WREG32(index_reg, 0x10200);
++ WREG32(data_reg, 0x8148BF38);
++ WREG32(index_reg, 0x10201);
++ WREG32(data_reg, 0x84408C80);
++ WREG32(index_reg, 0x10202);
++ WREG32(data_reg, 0x8008BEB8);
++ WREG32(index_reg, 0x10300);
++ WREG32(data_reg, 0x80B0BF78);
++ WREG32(index_reg, 0x10301);
++ WREG32(data_reg, 0x85008C20);
++ WREG32(index_reg, 0x10302);
++ WREG32(data_reg, 0x8020BEA0);
++ WREG32(index_reg, 0x10400);
++ WREG32(data_reg, 0x8028BF90);
++ WREG32(index_reg, 0x10401);
++ WREG32(data_reg, 0x85E08BC0);
++ WREG32(index_reg, 0x10402);
++ WREG32(data_reg, 0x8018BE90);
++ WREG32(index_reg, 0x10500);
++ WREG32(data_reg, 0xBFB8BFB0);
++ WREG32(index_reg, 0x10501);
++ WREG32(data_reg, 0x86C08B40);
++ WREG32(index_reg, 0x10502);
++ WREG32(data_reg, 0x8010BE90);
++ WREG32(index_reg, 0x10600);
++ WREG32(data_reg, 0xBF58BFC8);
++ WREG32(index_reg, 0x10601);
++ WREG32(data_reg, 0x87A08AA0);
++ WREG32(index_reg, 0x10602);
++ WREG32(data_reg, 0x8010BE98);
++ WREG32(index_reg, 0x10700);
++ WREG32(data_reg, 0xBF10BFF0);
++ WREG32(index_reg, 0x10701);
++ WREG32(data_reg, 0x886089E0);
++ WREG32(index_reg, 0x10702);
++ WREG32(data_reg, 0x8018BEB0);
++ WREG32(index_reg, 0x10800);
++ WREG32(data_reg, 0xBED8BFE8);
++ WREG32(index_reg, 0x10801);
++ WREG32(data_reg, 0x89408940);
++ WREG32(index_reg, 0x10802);
++ WREG32(data_reg, 0xBFE8BED8);
++ WREG32(index_reg, 0x20000);
++ WREG32(data_reg, 0x80008000);
++ WREG32(index_reg, 0x20001);
++ WREG32(data_reg, 0x90008000);
++ WREG32(index_reg, 0x20002);
++ WREG32(data_reg, 0x80008000);
++ WREG32(index_reg, 0x20003);
++ WREG32(data_reg, 0x80008000);
++ WREG32(index_reg, 0x20100);
++ WREG32(data_reg, 0x80108000);
++ WREG32(index_reg, 0x20101);
++ WREG32(data_reg, 0x8FE0BF70);
++ WREG32(index_reg, 0x20102);
++ WREG32(data_reg, 0xBFE880C0);
++ WREG32(index_reg, 0x20103);
++ WREG32(data_reg, 0x80008000);
++ WREG32(index_reg, 0x20200);
++ WREG32(data_reg, 0x8018BFF8);
++ WREG32(index_reg, 0x20201);
++ WREG32(data_reg, 0x8F80BF08);
++ WREG32(index_reg, 0x20202);
++ WREG32(data_reg, 0xBFD081A0);
++ WREG32(index_reg, 0x20203);
++ WREG32(data_reg, 0xBFF88000);
++ WREG32(index_reg, 0x20300);
++ WREG32(data_reg, 0x80188000);
++ WREG32(index_reg, 0x20301);
++ WREG32(data_reg, 0x8EE0BEC0);
++ WREG32(index_reg, 0x20302);
++ WREG32(data_reg, 0xBFB082A0);
++ WREG32(index_reg, 0x20303);
++ WREG32(data_reg, 0x80008000);
++ WREG32(index_reg, 0x20400);
++ WREG32(data_reg, 0x80188000);
++ WREG32(index_reg, 0x20401);
++ WREG32(data_reg, 0x8E00BEA0);
++ WREG32(index_reg, 0x20402);
++ WREG32(data_reg, 0xBF8883C0);
++ WREG32(index_reg, 0x20403);
++ WREG32(data_reg, 0x80008000);
++ WREG32(index_reg, 0x20500);
++ WREG32(data_reg, 0x80188000);
++ WREG32(index_reg, 0x20501);
++ WREG32(data_reg, 0x8D00BE90);
++ WREG32(index_reg, 0x20502);
++ WREG32(data_reg, 0xBF588500);
++ WREG32(index_reg, 0x20503);
++ WREG32(data_reg, 0x80008008);
++ WREG32(index_reg, 0x20600);
++ WREG32(data_reg, 0x80188000);
++ WREG32(index_reg, 0x20601);
++ WREG32(data_reg, 0x8BC0BE98);
++ WREG32(index_reg, 0x20602);
++ WREG32(data_reg, 0xBF308660);
++ WREG32(index_reg, 0x20603);
++ WREG32(data_reg, 0x80008008);
++ WREG32(index_reg, 0x20700);
++ WREG32(data_reg, 0x80108000);
++ WREG32(index_reg, 0x20701);
++ WREG32(data_reg, 0x8A80BEB0);
++ WREG32(index_reg, 0x20702);
++ WREG32(data_reg, 0xBF0087C0);
++ WREG32(index_reg, 0x20703);
++ WREG32(data_reg, 0x80008008);
++ WREG32(index_reg, 0x20800);
++ WREG32(data_reg, 0x80108000);
++ WREG32(index_reg, 0x20801);
++ WREG32(data_reg, 0x8920BED0);
++ WREG32(index_reg, 0x20802);
++ WREG32(data_reg, 0xBED08920);
++ WREG32(index_reg, 0x20803);
++ WREG32(data_reg, 0x80008010);
++ WREG32(index_reg, 0x30000);
++ WREG32(data_reg, 0x90008000);
++ WREG32(index_reg, 0x30001);
++ WREG32(data_reg, 0x80008000);
++ WREG32(index_reg, 0x30100);
++ WREG32(data_reg, 0x8FE0BF90);
++ WREG32(index_reg, 0x30101);
++ WREG32(data_reg, 0xBFF880A0);
++ WREG32(index_reg, 0x30200);
++ WREG32(data_reg, 0x8F60BF40);
++ WREG32(index_reg, 0x30201);
++ WREG32(data_reg, 0xBFE88180);
++ WREG32(index_reg, 0x30300);
++ WREG32(data_reg, 0x8EC0BF00);
++ WREG32(index_reg, 0x30301);
++ WREG32(data_reg, 0xBFC88280);
++ WREG32(index_reg, 0x30400);
++ WREG32(data_reg, 0x8DE0BEE0);
++ WREG32(index_reg, 0x30401);
++ WREG32(data_reg, 0xBFA083A0);
++ WREG32(index_reg, 0x30500);
++ WREG32(data_reg, 0x8CE0BED0);
++ WREG32(index_reg, 0x30501);
++ WREG32(data_reg, 0xBF7884E0);
++ WREG32(index_reg, 0x30600);
++ WREG32(data_reg, 0x8BA0BED8);
++ WREG32(index_reg, 0x30601);
++ WREG32(data_reg, 0xBF508640);
++ WREG32(index_reg, 0x30700);
++ WREG32(data_reg, 0x8A60BEE8);
++ WREG32(index_reg, 0x30701);
++ WREG32(data_reg, 0xBF2087A0);
++ WREG32(index_reg, 0x30800);
++ WREG32(data_reg, 0x8900BF00);
++ WREG32(index_reg, 0x30801);
++ WREG32(data_reg, 0xBF008900);
+ }
+
+ struct rv515_watermark {
+diff --git a/drivers/gpu/drm/radeon/rv515d.h b/drivers/gpu/drm/radeon/rv515d.h
+new file mode 100644
+index 0000000..fc216e4
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/rv515d.h
+@@ -0,0 +1,603 @@
++/*
++ * Copyright 2008 Advanced Micro Devices, Inc.
++ * Copyright 2008 Red Hat Inc.
++ * Copyright 2009 Jerome Glisse.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef __RV515D_H__
++#define __RV515D_H__
++
++/*
++ * RV515 registers
++ */
++#define PCIE_INDEX 0x0030
++#define PCIE_DATA 0x0034
++#define MC_IND_INDEX 0x0070
++#define MC_IND_WR_EN (1 << 24)
++#define MC_IND_DATA 0x0074
++#define RBBM_SOFT_RESET 0x00F0
++#define CONFIG_MEMSIZE 0x00F8
++#define HDP_FB_LOCATION 0x0134
++#define CP_CSQ_CNTL 0x0740
++#define CP_CSQ_MODE 0x0744
++#define CP_CSQ_ADDR 0x07F0
++#define CP_CSQ_DATA 0x07F4
++#define CP_CSQ_STAT 0x07F8
++#define CP_CSQ2_STAT 0x07FC
++#define RBBM_STATUS 0x0E40
++#define DST_PIPE_CONFIG 0x170C
++#define WAIT_UNTIL 0x1720
++#define WAIT_2D_IDLE (1 << 14)
++#define WAIT_3D_IDLE (1 << 15)
++#define WAIT_2D_IDLECLEAN (1 << 16)
++#define WAIT_3D_IDLECLEAN (1 << 17)
++#define ISYNC_CNTL 0x1724
++#define ISYNC_ANY2D_IDLE3D (1 << 0)
++#define ISYNC_ANY3D_IDLE2D (1 << 1)
++#define ISYNC_TRIG2D_IDLE3D (1 << 2)
++#define ISYNC_TRIG3D_IDLE2D (1 << 3)
++#define ISYNC_WAIT_IDLEGUI (1 << 4)
++#define ISYNC_CPSCRATCH_IDLEGUI (1 << 5)
++#define VAP_INDEX_OFFSET 0x208C
++#define VAP_PVS_STATE_FLUSH_REG 0x2284
++#define GB_ENABLE 0x4008
++#define GB_MSPOS0 0x4010
++#define MS_X0_SHIFT 0
++#define MS_Y0_SHIFT 4
++#define MS_X1_SHIFT 8
++#define MS_Y1_SHIFT 12
++#define MS_X2_SHIFT 16
++#define MS_Y2_SHIFT 20
++#define MSBD0_Y_SHIFT 24
++#define MSBD0_X_SHIFT 28
++#define GB_MSPOS1 0x4014
++#define MS_X3_SHIFT 0
++#define MS_Y3_SHIFT 4
++#define MS_X4_SHIFT 8
++#define MS_Y4_SHIFT 12
++#define MS_X5_SHIFT 16
++#define MS_Y5_SHIFT 20
++#define MSBD1_SHIFT 24
++#define GB_TILE_CONFIG 0x4018
++#define ENABLE_TILING (1 << 0)
++#define PIPE_COUNT_MASK 0x0000000E
++#define PIPE_COUNT_SHIFT 1
++#define TILE_SIZE_8 (0 << 4)
++#define TILE_SIZE_16 (1 << 4)
++#define TILE_SIZE_32 (2 << 4)
++#define SUBPIXEL_1_12 (0 << 16)
++#define SUBPIXEL_1_16 (1 << 16)
++#define GB_SELECT 0x401C
++#define GB_AA_CONFIG 0x4020
++#define GB_PIPE_SELECT 0x402C
++#define GA_ENHANCE 0x4274
++#define GA_DEADLOCK_CNTL (1 << 0)
++#define GA_FASTSYNC_CNTL (1 << 1)
++#define GA_POLY_MODE 0x4288
++#define FRONT_PTYPE_POINT (0 << 4)
++#define FRONT_PTYPE_LINE (1 << 4)
++#define FRONT_PTYPE_TRIANGE (2 << 4)
++#define BACK_PTYPE_POINT (0 << 7)
++#define BACK_PTYPE_LINE (1 << 7)
++#define BACK_PTYPE_TRIANGE (2 << 7)
++#define GA_ROUND_MODE 0x428C
++#define GEOMETRY_ROUND_TRUNC (0 << 0)
++#define GEOMETRY_ROUND_NEAREST (1 << 0)
++#define COLOR_ROUND_TRUNC (0 << 2)
++#define COLOR_ROUND_NEAREST (1 << 2)
++#define SU_REG_DEST 0x42C8
++#define RB3D_DSTCACHE_CTLSTAT 0x4E4C
++#define RB3D_DC_FLUSH (2 << 0)
++#define RB3D_DC_FREE (2 << 2)
++#define RB3D_DC_FINISH (1 << 4)
++#define ZB_ZCACHE_CTLSTAT 0x4F18
++#define ZC_FLUSH (1 << 0)
++#define ZC_FREE (1 << 1)
++#define DC_LB_MEMORY_SPLIT 0x6520
++#define DC_LB_MEMORY_SPLIT_MASK 0x00000003
++#define DC_LB_MEMORY_SPLIT_SHIFT 0
++#define DC_LB_MEMORY_SPLIT_D1HALF_D2HALF 0
++#define DC_LB_MEMORY_SPLIT_D1_3Q_D2_1Q 1
++#define DC_LB_MEMORY_SPLIT_D1_ONLY 2
++#define DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q 3
++#define DC_LB_MEMORY_SPLIT_SHIFT_MODE (1 << 2)
++#define DC_LB_DISP1_END_ADR_SHIFT 4
++#define DC_LB_DISP1_END_ADR_MASK 0x00007FF0
++#define D1MODE_PRIORITY_A_CNT 0x6548
++#define MODE_PRIORITY_MARK_MASK 0x00007FFF
++#define MODE_PRIORITY_OFF (1 << 16)
++#define MODE_PRIORITY_ALWAYS_ON (1 << 20)
++#define MODE_PRIORITY_FORCE_MASK (1 << 24)
++#define D1MODE_PRIORITY_B_CNT 0x654C
++#define LB_MAX_REQ_OUTSTANDING 0x6D58
++#define LB_D1_MAX_REQ_OUTSTANDING_MASK 0x0000000F
++#define LB_D1_MAX_REQ_OUTSTANDING_SHIFT 0
++#define LB_D2_MAX_REQ_OUTSTANDING_MASK 0x000F0000
++#define LB_D2_MAX_REQ_OUTSTANDING_SHIFT 16
++#define D2MODE_PRIORITY_A_CNT 0x6D48
++#define D2MODE_PRIORITY_B_CNT 0x6D4C
++
++/* ix[MC] registers */
++#define MC_FB_LOCATION 0x01
++#define MC_FB_START_MASK 0x0000FFFF
++#define MC_FB_START_SHIFT 0
++#define MC_FB_TOP_MASK 0xFFFF0000
++#define MC_FB_TOP_SHIFT 16
++#define MC_AGP_LOCATION 0x02
++#define MC_AGP_START_MASK 0x0000FFFF
++#define MC_AGP_START_SHIFT 0
++#define MC_AGP_TOP_MASK 0xFFFF0000
++#define MC_AGP_TOP_SHIFT 16
++#define MC_AGP_BASE 0x03
++#define MC_AGP_BASE_2 0x04
++#define MC_CNTL 0x5
++#define MEM_NUM_CHANNELS_MASK 0x00000003
++#define MC_STATUS 0x08
++#define MC_STATUS_IDLE (1 << 4)
++#define MC_MISC_LAT_TIMER 0x09
++#define MC_CPR_INIT_LAT_MASK 0x0000000F
++#define MC_VF_INIT_LAT_MASK 0x000000F0
++#define MC_DISP0R_INIT_LAT_MASK 0x00000F00
++#define MC_DISP0R_INIT_LAT_SHIFT 8
++#define MC_DISP1R_INIT_LAT_MASK 0x0000F000
++#define MC_DISP1R_INIT_LAT_SHIFT 12
++#define MC_FIXED_INIT_LAT_MASK 0x000F0000
++#define MC_E2R_INIT_LAT_MASK 0x00F00000
++#define SAME_PAGE_PRIO_MASK 0x0F000000
++#define MC_GLOBW_INIT_LAT_MASK 0xF0000000
++
++
++/*
++ * PM4 packet
++ */
++#define CP_PACKET0 0x00000000
++#define PACKET0_BASE_INDEX_SHIFT 0
++#define PACKET0_BASE_INDEX_MASK (0x1ffff << 0)
++#define PACKET0_COUNT_SHIFT 16
++#define PACKET0_COUNT_MASK (0x3fff << 16)
++#define CP_PACKET1 0x40000000
++#define CP_PACKET2 0x80000000
++#define PACKET2_PAD_SHIFT 0
++#define PACKET2_PAD_MASK (0x3fffffff << 0)
++#define CP_PACKET3 0xC0000000
++#define PACKET3_IT_OPCODE_SHIFT 8
++#define PACKET3_IT_OPCODE_MASK (0xff << 8)
++#define PACKET3_COUNT_SHIFT 16
++#define PACKET3_COUNT_MASK (0x3fff << 16)
++/* PACKET3 op code */
++#define PACKET3_NOP 0x10
++#define PACKET3_3D_DRAW_VBUF 0x28
++#define PACKET3_3D_DRAW_IMMD 0x29
++#define PACKET3_3D_DRAW_INDX 0x2A
++#define PACKET3_3D_LOAD_VBPNTR 0x2F
++#define PACKET3_INDX_BUFFER 0x33
++#define PACKET3_3D_DRAW_VBUF_2 0x34
++#define PACKET3_3D_DRAW_IMMD_2 0x35
++#define PACKET3_3D_DRAW_INDX_2 0x36
++#define PACKET3_BITBLT_MULTI 0x9B
++
++#define PACKET0(reg, n) (CP_PACKET0 | \
++ REG_SET(PACKET0_BASE_INDEX, (reg) >> 2) | \
++ REG_SET(PACKET0_COUNT, (n)))
++#define PACKET2(v) (CP_PACKET2 | REG_SET(PACKET2_PAD, (v)))
++#define PACKET3(op, n) (CP_PACKET3 | \
++ REG_SET(PACKET3_IT_OPCODE, (op)) | \
++ REG_SET(PACKET3_COUNT, (n)))
++
++#define PACKET_TYPE0 0
++#define PACKET_TYPE1 1
++#define PACKET_TYPE2 2
++#define PACKET_TYPE3 3
++
++#define CP_PACKET_GET_TYPE(h) (((h) >> 30) & 3)
++#define CP_PACKET_GET_COUNT(h) (((h) >> 16) & 0x3FFF)
++#define CP_PACKET0_GET_REG(h) (((h) & 0x1FFF) << 2)
++#define CP_PACKET0_GET_ONE_REG_WR(h) (((h) >> 15) & 1)
++#define CP_PACKET3_GET_OPCODE(h) (((h) >> 8) & 0xFF)
++
++/* Registers */
++#define R_0000F8_CONFIG_MEMSIZE 0x0000F8
++#define S_0000F8_CONFIG_MEMSIZE(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_0000F8_CONFIG_MEMSIZE(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_0000F8_CONFIG_MEMSIZE 0x00000000
++#define R_000134_HDP_FB_LOCATION 0x000134
++#define S_000134_HDP_FB_START(x) (((x) & 0xFFFF) << 0)
++#define G_000134_HDP_FB_START(x) (((x) >> 0) & 0xFFFF)
++#define C_000134_HDP_FB_START 0xFFFF0000
++#define R_000300_VGA_RENDER_CONTROL 0x000300
++#define S_000300_VGA_BLINK_RATE(x) (((x) & 0x1F) << 0)
++#define G_000300_VGA_BLINK_RATE(x) (((x) >> 0) & 0x1F)
++#define C_000300_VGA_BLINK_RATE 0xFFFFFFE0
++#define S_000300_VGA_BLINK_MODE(x) (((x) & 0x3) << 5)
++#define G_000300_VGA_BLINK_MODE(x) (((x) >> 5) & 0x3)
++#define C_000300_VGA_BLINK_MODE 0xFFFFFF9F
++#define S_000300_VGA_CURSOR_BLINK_INVERT(x) (((x) & 0x1) << 7)
++#define G_000300_VGA_CURSOR_BLINK_INVERT(x) (((x) >> 7) & 0x1)
++#define C_000300_VGA_CURSOR_BLINK_INVERT 0xFFFFFF7F
++#define S_000300_VGA_EXTD_ADDR_COUNT_ENABLE(x) (((x) & 0x1) << 8)
++#define G_000300_VGA_EXTD_ADDR_COUNT_ENABLE(x) (((x) >> 8) & 0x1)
++#define C_000300_VGA_EXTD_ADDR_COUNT_ENABLE 0xFFFFFEFF
++#define S_000300_VGA_VSTATUS_CNTL(x) (((x) & 0x3) << 16)
++#define G_000300_VGA_VSTATUS_CNTL(x) (((x) >> 16) & 0x3)
++#define C_000300_VGA_VSTATUS_CNTL 0xFFFCFFFF
++#define S_000300_VGA_LOCK_8DOT(x) (((x) & 0x1) << 24)
++#define G_000300_VGA_LOCK_8DOT(x) (((x) >> 24) & 0x1)
++#define C_000300_VGA_LOCK_8DOT 0xFEFFFFFF
++#define S_000300_VGAREG_LINECMP_COMPATIBILITY_SEL(x) (((x) & 0x1) << 25)
++#define G_000300_VGAREG_LINECMP_COMPATIBILITY_SEL(x) (((x) >> 25) & 0x1)
++#define C_000300_VGAREG_LINECMP_COMPATIBILITY_SEL 0xFDFFFFFF
++#define R_000310_VGA_MEMORY_BASE_ADDRESS 0x000310
++#define S_000310_VGA_MEMORY_BASE_ADDRESS(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_000310_VGA_MEMORY_BASE_ADDRESS(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_000310_VGA_MEMORY_BASE_ADDRESS 0x00000000
++#define R_000328_VGA_HDP_CONTROL 0x000328
++#define S_000328_VGA_MEM_PAGE_SELECT_EN(x) (((x) & 0x1) << 0)
++#define G_000328_VGA_MEM_PAGE_SELECT_EN(x) (((x) >> 0) & 0x1)
++#define C_000328_VGA_MEM_PAGE_SELECT_EN 0xFFFFFFFE
++#define S_000328_VGA_RBBM_LOCK_DISABLE(x) (((x) & 0x1) << 8)
++#define G_000328_VGA_RBBM_LOCK_DISABLE(x) (((x) >> 8) & 0x1)
++#define C_000328_VGA_RBBM_LOCK_DISABLE 0xFFFFFEFF
++#define S_000328_VGA_SOFT_RESET(x) (((x) & 0x1) << 16)
++#define G_000328_VGA_SOFT_RESET(x) (((x) >> 16) & 0x1)
++#define C_000328_VGA_SOFT_RESET 0xFFFEFFFF
++#define S_000328_VGA_TEST_RESET_CONTROL(x) (((x) & 0x1) << 24)
++#define G_000328_VGA_TEST_RESET_CONTROL(x) (((x) >> 24) & 0x1)
++#define C_000328_VGA_TEST_RESET_CONTROL 0xFEFFFFFF
++#define R_000330_D1VGA_CONTROL 0x000330
++#define S_000330_D1VGA_MODE_ENABLE(x) (((x) & 0x1) << 0)
++#define G_000330_D1VGA_MODE_ENABLE(x) (((x) >> 0) & 0x1)
++#define C_000330_D1VGA_MODE_ENABLE 0xFFFFFFFE
++#define S_000330_D1VGA_TIMING_SELECT(x) (((x) & 0x1) << 8)
++#define G_000330_D1VGA_TIMING_SELECT(x) (((x) >> 8) & 0x1)
++#define C_000330_D1VGA_TIMING_SELECT 0xFFFFFEFF
++#define S_000330_D1VGA_SYNC_POLARITY_SELECT(x) (((x) & 0x1) << 9)
++#define G_000330_D1VGA_SYNC_POLARITY_SELECT(x) (((x) >> 9) & 0x1)
++#define C_000330_D1VGA_SYNC_POLARITY_SELECT 0xFFFFFDFF
++#define S_000330_D1VGA_OVERSCAN_TIMING_SELECT(x) (((x) & 0x1) << 10)
++#define G_000330_D1VGA_OVERSCAN_TIMING_SELECT(x) (((x) >> 10) & 0x1)
++#define C_000330_D1VGA_OVERSCAN_TIMING_SELECT 0xFFFFFBFF
++#define S_000330_D1VGA_OVERSCAN_COLOR_EN(x) (((x) & 0x1) << 16)
++#define G_000330_D1VGA_OVERSCAN_COLOR_EN(x) (((x) >> 16) & 0x1)
++#define C_000330_D1VGA_OVERSCAN_COLOR_EN 0xFFFEFFFF
++#define S_000330_D1VGA_ROTATE(x) (((x) & 0x3) << 24)
++#define G_000330_D1VGA_ROTATE(x) (((x) >> 24) & 0x3)
++#define C_000330_D1VGA_ROTATE 0xFCFFFFFF
++#define R_000338_D2VGA_CONTROL 0x000338
++#define S_000338_D2VGA_MODE_ENABLE(x) (((x) & 0x1) << 0)
++#define G_000338_D2VGA_MODE_ENABLE(x) (((x) >> 0) & 0x1)
++#define C_000338_D2VGA_MODE_ENABLE 0xFFFFFFFE
++#define S_000338_D2VGA_TIMING_SELECT(x) (((x) & 0x1) << 8)
++#define G_000338_D2VGA_TIMING_SELECT(x) (((x) >> 8) & 0x1)
++#define C_000338_D2VGA_TIMING_SELECT 0xFFFFFEFF
++#define S_000338_D2VGA_SYNC_POLARITY_SELECT(x) (((x) & 0x1) << 9)
++#define G_000338_D2VGA_SYNC_POLARITY_SELECT(x) (((x) >> 9) & 0x1)
++#define C_000338_D2VGA_SYNC_POLARITY_SELECT 0xFFFFFDFF
++#define S_000338_D2VGA_OVERSCAN_TIMING_SELECT(x) (((x) & 0x1) << 10)
++#define G_000338_D2VGA_OVERSCAN_TIMING_SELECT(x) (((x) >> 10) & 0x1)
++#define C_000338_D2VGA_OVERSCAN_TIMING_SELECT 0xFFFFFBFF
++#define S_000338_D2VGA_OVERSCAN_COLOR_EN(x) (((x) & 0x1) << 16)
++#define G_000338_D2VGA_OVERSCAN_COLOR_EN(x) (((x) >> 16) & 0x1)
++#define C_000338_D2VGA_OVERSCAN_COLOR_EN 0xFFFEFFFF
++#define S_000338_D2VGA_ROTATE(x) (((x) & 0x3) << 24)
++#define G_000338_D2VGA_ROTATE(x) (((x) >> 24) & 0x3)
++#define C_000338_D2VGA_ROTATE 0xFCFFFFFF
++#define R_0007C0_CP_STAT 0x0007C0
++#define S_0007C0_MRU_BUSY(x) (((x) & 0x1) << 0)
++#define G_0007C0_MRU_BUSY(x) (((x) >> 0) & 0x1)
++#define C_0007C0_MRU_BUSY 0xFFFFFFFE
++#define S_0007C0_MWU_BUSY(x) (((x) & 0x1) << 1)
++#define G_0007C0_MWU_BUSY(x) (((x) >> 1) & 0x1)
++#define C_0007C0_MWU_BUSY 0xFFFFFFFD
++#define S_0007C0_RSIU_BUSY(x) (((x) & 0x1) << 2)
++#define G_0007C0_RSIU_BUSY(x) (((x) >> 2) & 0x1)
++#define C_0007C0_RSIU_BUSY 0xFFFFFFFB
++#define S_0007C0_RCIU_BUSY(x) (((x) & 0x1) << 3)
++#define G_0007C0_RCIU_BUSY(x) (((x) >> 3) & 0x1)
++#define C_0007C0_RCIU_BUSY 0xFFFFFFF7
++#define S_0007C0_CSF_PRIMARY_BUSY(x) (((x) & 0x1) << 9)
++#define G_0007C0_CSF_PRIMARY_BUSY(x) (((x) >> 9) & 0x1)
++#define C_0007C0_CSF_PRIMARY_BUSY 0xFFFFFDFF
++#define S_0007C0_CSF_INDIRECT_BUSY(x) (((x) & 0x1) << 10)
++#define G_0007C0_CSF_INDIRECT_BUSY(x) (((x) >> 10) & 0x1)
++#define C_0007C0_CSF_INDIRECT_BUSY 0xFFFFFBFF
++#define S_0007C0_CSQ_PRIMARY_BUSY(x) (((x) & 0x1) << 11)
++#define G_0007C0_CSQ_PRIMARY_BUSY(x) (((x) >> 11) & 0x1)
++#define C_0007C0_CSQ_PRIMARY_BUSY 0xFFFFF7FF
++#define S_0007C0_CSQ_INDIRECT_BUSY(x) (((x) & 0x1) << 12)
++#define G_0007C0_CSQ_INDIRECT_BUSY(x) (((x) >> 12) & 0x1)
++#define C_0007C0_CSQ_INDIRECT_BUSY 0xFFFFEFFF
++#define S_0007C0_CSI_BUSY(x) (((x) & 0x1) << 13)
++#define G_0007C0_CSI_BUSY(x) (((x) >> 13) & 0x1)
++#define C_0007C0_CSI_BUSY 0xFFFFDFFF
++#define S_0007C0_CSF_INDIRECT2_BUSY(x) (((x) & 0x1) << 14)
++#define G_0007C0_CSF_INDIRECT2_BUSY(x) (((x) >> 14) & 0x1)
++#define C_0007C0_CSF_INDIRECT2_BUSY 0xFFFFBFFF
++#define S_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) & 0x1) << 15)
++#define G_0007C0_CSQ_INDIRECT2_BUSY(x) (((x) >> 15) & 0x1)
++#define C_0007C0_CSQ_INDIRECT2_BUSY 0xFFFF7FFF
++#define S_0007C0_GUIDMA_BUSY(x) (((x) & 0x1) << 28)
++#define G_0007C0_GUIDMA_BUSY(x) (((x) >> 28) & 0x1)
++#define C_0007C0_GUIDMA_BUSY 0xEFFFFFFF
++#define S_0007C0_VIDDMA_BUSY(x) (((x) & 0x1) << 29)
++#define G_0007C0_VIDDMA_BUSY(x) (((x) >> 29) & 0x1)
++#define C_0007C0_VIDDMA_BUSY 0xDFFFFFFF
++#define S_0007C0_CMDSTRM_BUSY(x) (((x) & 0x1) << 30)
++#define G_0007C0_CMDSTRM_BUSY(x) (((x) >> 30) & 0x1)
++#define C_0007C0_CMDSTRM_BUSY 0xBFFFFFFF
++#define S_0007C0_CP_BUSY(x) (((x) & 0x1) << 31)
++#define G_0007C0_CP_BUSY(x) (((x) >> 31) & 0x1)
++#define C_0007C0_CP_BUSY 0x7FFFFFFF
++#define R_000E40_RBBM_STATUS 0x000E40
++#define S_000E40_CMDFIFO_AVAIL(x) (((x) & 0x7F) << 0)
++#define G_000E40_CMDFIFO_AVAIL(x) (((x) >> 0) & 0x7F)
++#define C_000E40_CMDFIFO_AVAIL 0xFFFFFF80
++#define S_000E40_HIRQ_ON_RBB(x) (((x) & 0x1) << 8)
++#define G_000E40_HIRQ_ON_RBB(x) (((x) >> 8) & 0x1)
++#define C_000E40_HIRQ_ON_RBB 0xFFFFFEFF
++#define S_000E40_CPRQ_ON_RBB(x) (((x) & 0x1) << 9)
++#define G_000E40_CPRQ_ON_RBB(x) (((x) >> 9) & 0x1)
++#define C_000E40_CPRQ_ON_RBB 0xFFFFFDFF
++#define S_000E40_CFRQ_ON_RBB(x) (((x) & 0x1) << 10)
++#define G_000E40_CFRQ_ON_RBB(x) (((x) >> 10) & 0x1)
++#define C_000E40_CFRQ_ON_RBB 0xFFFFFBFF
++#define S_000E40_HIRQ_IN_RTBUF(x) (((x) & 0x1) << 11)
++#define G_000E40_HIRQ_IN_RTBUF(x) (((x) >> 11) & 0x1)
++#define C_000E40_HIRQ_IN_RTBUF 0xFFFFF7FF
++#define S_000E40_CPRQ_IN_RTBUF(x) (((x) & 0x1) << 12)
++#define G_000E40_CPRQ_IN_RTBUF(x) (((x) >> 12) & 0x1)
++#define C_000E40_CPRQ_IN_RTBUF 0xFFFFEFFF
++#define S_000E40_CFRQ_IN_RTBUF(x) (((x) & 0x1) << 13)
++#define G_000E40_CFRQ_IN_RTBUF(x) (((x) >> 13) & 0x1)
++#define C_000E40_CFRQ_IN_RTBUF 0xFFFFDFFF
++#define S_000E40_CF_PIPE_BUSY(x) (((x) & 0x1) << 14)
++#define G_000E40_CF_PIPE_BUSY(x) (((x) >> 14) & 0x1)
++#define C_000E40_CF_PIPE_BUSY 0xFFFFBFFF
++#define S_000E40_ENG_EV_BUSY(x) (((x) & 0x1) << 15)
++#define G_000E40_ENG_EV_BUSY(x) (((x) >> 15) & 0x1)
++#define C_000E40_ENG_EV_BUSY 0xFFFF7FFF
++#define S_000E40_CP_CMDSTRM_BUSY(x) (((x) & 0x1) << 16)
++#define G_000E40_CP_CMDSTRM_BUSY(x) (((x) >> 16) & 0x1)
++#define C_000E40_CP_CMDSTRM_BUSY 0xFFFEFFFF
++#define S_000E40_E2_BUSY(x) (((x) & 0x1) << 17)
++#define G_000E40_E2_BUSY(x) (((x) >> 17) & 0x1)
++#define C_000E40_E2_BUSY 0xFFFDFFFF
++#define S_000E40_RB2D_BUSY(x) (((x) & 0x1) << 18)
++#define G_000E40_RB2D_BUSY(x) (((x) >> 18) & 0x1)
++#define C_000E40_RB2D_BUSY 0xFFFBFFFF
++#define S_000E40_RB3D_BUSY(x) (((x) & 0x1) << 19)
++#define G_000E40_RB3D_BUSY(x) (((x) >> 19) & 0x1)
++#define C_000E40_RB3D_BUSY 0xFFF7FFFF
++#define S_000E40_VAP_BUSY(x) (((x) & 0x1) << 20)
++#define G_000E40_VAP_BUSY(x) (((x) >> 20) & 0x1)
++#define C_000E40_VAP_BUSY 0xFFEFFFFF
++#define S_000E40_RE_BUSY(x) (((x) & 0x1) << 21)
++#define G_000E40_RE_BUSY(x) (((x) >> 21) & 0x1)
++#define C_000E40_RE_BUSY 0xFFDFFFFF
++#define S_000E40_TAM_BUSY(x) (((x) & 0x1) << 22)
++#define G_000E40_TAM_BUSY(x) (((x) >> 22) & 0x1)
++#define C_000E40_TAM_BUSY 0xFFBFFFFF
++#define S_000E40_TDM_BUSY(x) (((x) & 0x1) << 23)
++#define G_000E40_TDM_BUSY(x) (((x) >> 23) & 0x1)
++#define C_000E40_TDM_BUSY 0xFF7FFFFF
++#define S_000E40_PB_BUSY(x) (((x) & 0x1) << 24)
++#define G_000E40_PB_BUSY(x) (((x) >> 24) & 0x1)
++#define C_000E40_PB_BUSY 0xFEFFFFFF
++#define S_000E40_TIM_BUSY(x) (((x) & 0x1) << 25)
++#define G_000E40_TIM_BUSY(x) (((x) >> 25) & 0x1)
++#define C_000E40_TIM_BUSY 0xFDFFFFFF
++#define S_000E40_GA_BUSY(x) (((x) & 0x1) << 26)
++#define G_000E40_GA_BUSY(x) (((x) >> 26) & 0x1)
++#define C_000E40_GA_BUSY 0xFBFFFFFF
++#define S_000E40_CBA2D_BUSY(x) (((x) & 0x1) << 27)
++#define G_000E40_CBA2D_BUSY(x) (((x) >> 27) & 0x1)
++#define C_000E40_CBA2D_BUSY 0xF7FFFFFF
++#define S_000E40_RBBM_HIBUSY(x) (((x) & 0x1) << 28)
++#define G_000E40_RBBM_HIBUSY(x) (((x) >> 28) & 0x1)
++#define C_000E40_RBBM_HIBUSY 0xEFFFFFFF
++#define S_000E40_SKID_CFBUSY(x) (((x) & 0x1) << 29)
++#define G_000E40_SKID_CFBUSY(x) (((x) >> 29) & 0x1)
++#define C_000E40_SKID_CFBUSY 0xDFFFFFFF
++#define S_000E40_VAP_VF_BUSY(x) (((x) & 0x1) << 30)
++#define G_000E40_VAP_VF_BUSY(x) (((x) >> 30) & 0x1)
++#define C_000E40_VAP_VF_BUSY 0xBFFFFFFF
++#define S_000E40_GUI_ACTIVE(x) (((x) & 0x1) << 31)
++#define G_000E40_GUI_ACTIVE(x) (((x) >> 31) & 0x1)
++#define C_000E40_GUI_ACTIVE 0x7FFFFFFF
++#define R_006080_D1CRTC_CONTROL 0x006080
++#define S_006080_D1CRTC_MASTER_EN(x) (((x) & 0x1) << 0)
++#define G_006080_D1CRTC_MASTER_EN(x) (((x) >> 0) & 0x1)
++#define C_006080_D1CRTC_MASTER_EN 0xFFFFFFFE
++#define S_006080_D1CRTC_SYNC_RESET_SEL(x) (((x) & 0x1) << 4)
++#define G_006080_D1CRTC_SYNC_RESET_SEL(x) (((x) >> 4) & 0x1)
++#define C_006080_D1CRTC_SYNC_RESET_SEL 0xFFFFFFEF
++#define S_006080_D1CRTC_DISABLE_POINT_CNTL(x) (((x) & 0x3) << 8)
++#define G_006080_D1CRTC_DISABLE_POINT_CNTL(x) (((x) >> 8) & 0x3)
++#define C_006080_D1CRTC_DISABLE_POINT_CNTL 0xFFFFFCFF
++#define S_006080_D1CRTC_CURRENT_MASTER_EN_STATE(x) (((x) & 0x1) << 16)
++#define G_006080_D1CRTC_CURRENT_MASTER_EN_STATE(x) (((x) >> 16) & 0x1)
++#define C_006080_D1CRTC_CURRENT_MASTER_EN_STATE 0xFFFEFFFF
++#define S_006080_D1CRTC_DISP_READ_REQUEST_DISABLE(x) (((x) & 0x1) << 24)
++#define G_006080_D1CRTC_DISP_READ_REQUEST_DISABLE(x) (((x) >> 24) & 0x1)
++#define C_006080_D1CRTC_DISP_READ_REQUEST_DISABLE 0xFEFFFFFF
++#define R_0060E8_D1CRTC_UPDATE_LOCK 0x0060E8
++#define S_0060E8_D1CRTC_UPDATE_LOCK(x) (((x) & 0x1) << 0)
++#define G_0060E8_D1CRTC_UPDATE_LOCK(x) (((x) >> 0) & 0x1)
++#define C_0060E8_D1CRTC_UPDATE_LOCK 0xFFFFFFFE
++#define R_006110_D1GRPH_PRIMARY_SURFACE_ADDRESS 0x006110
++#define S_006110_D1GRPH_PRIMARY_SURFACE_ADDRESS(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_006110_D1GRPH_PRIMARY_SURFACE_ADDRESS(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_006110_D1GRPH_PRIMARY_SURFACE_ADDRESS 0x00000000
++#define R_006118_D1GRPH_SECONDARY_SURFACE_ADDRESS 0x006118
++#define S_006118_D1GRPH_SECONDARY_SURFACE_ADDRESS(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_006118_D1GRPH_SECONDARY_SURFACE_ADDRESS(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_006118_D1GRPH_SECONDARY_SURFACE_ADDRESS 0x00000000
++#define R_006880_D2CRTC_CONTROL 0x006880
++#define S_006880_D2CRTC_MASTER_EN(x) (((x) & 0x1) << 0)
++#define G_006880_D2CRTC_MASTER_EN(x) (((x) >> 0) & 0x1)
++#define C_006880_D2CRTC_MASTER_EN 0xFFFFFFFE
++#define S_006880_D2CRTC_SYNC_RESET_SEL(x) (((x) & 0x1) << 4)
++#define G_006880_D2CRTC_SYNC_RESET_SEL(x) (((x) >> 4) & 0x1)
++#define C_006880_D2CRTC_SYNC_RESET_SEL 0xFFFFFFEF
++#define S_006880_D2CRTC_DISABLE_POINT_CNTL(x) (((x) & 0x3) << 8)
++#define G_006880_D2CRTC_DISABLE_POINT_CNTL(x) (((x) >> 8) & 0x3)
++#define C_006880_D2CRTC_DISABLE_POINT_CNTL 0xFFFFFCFF
++#define S_006880_D2CRTC_CURRENT_MASTER_EN_STATE(x) (((x) & 0x1) << 16)
++#define G_006880_D2CRTC_CURRENT_MASTER_EN_STATE(x) (((x) >> 16) & 0x1)
++#define C_006880_D2CRTC_CURRENT_MASTER_EN_STATE 0xFFFEFFFF
++#define S_006880_D2CRTC_DISP_READ_REQUEST_DISABLE(x) (((x) & 0x1) << 24)
++#define G_006880_D2CRTC_DISP_READ_REQUEST_DISABLE(x) (((x) >> 24) & 0x1)
++#define C_006880_D2CRTC_DISP_READ_REQUEST_DISABLE 0xFEFFFFFF
++#define R_0068E8_D2CRTC_UPDATE_LOCK 0x0068E8
++#define S_0068E8_D2CRTC_UPDATE_LOCK(x) (((x) & 0x1) << 0)
++#define G_0068E8_D2CRTC_UPDATE_LOCK(x) (((x) >> 0) & 0x1)
++#define C_0068E8_D2CRTC_UPDATE_LOCK 0xFFFFFFFE
++#define R_006910_D2GRPH_PRIMARY_SURFACE_ADDRESS 0x006910
++#define S_006910_D2GRPH_PRIMARY_SURFACE_ADDRESS(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_006910_D2GRPH_PRIMARY_SURFACE_ADDRESS(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_006910_D2GRPH_PRIMARY_SURFACE_ADDRESS 0x00000000
++#define R_006918_D2GRPH_SECONDARY_SURFACE_ADDRESS 0x006918
++#define S_006918_D2GRPH_SECONDARY_SURFACE_ADDRESS(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_006918_D2GRPH_SECONDARY_SURFACE_ADDRESS(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_006918_D2GRPH_SECONDARY_SURFACE_ADDRESS 0x00000000
++
++
++#define R_000001_MC_FB_LOCATION 0x000001
++#define S_000001_MC_FB_START(x) (((x) & 0xFFFF) << 0)
++#define G_000001_MC_FB_START(x) (((x) >> 0) & 0xFFFF)
++#define C_000001_MC_FB_START 0xFFFF0000
++#define S_000001_MC_FB_TOP(x) (((x) & 0xFFFF) << 16)
++#define G_000001_MC_FB_TOP(x) (((x) >> 16) & 0xFFFF)
++#define C_000001_MC_FB_TOP 0x0000FFFF
++#define R_000002_MC_AGP_LOCATION 0x000002
++#define S_000002_MC_AGP_START(x) (((x) & 0xFFFF) << 0)
++#define G_000002_MC_AGP_START(x) (((x) >> 0) & 0xFFFF)
++#define C_000002_MC_AGP_START 0xFFFF0000
++#define S_000002_MC_AGP_TOP(x) (((x) & 0xFFFF) << 16)
++#define G_000002_MC_AGP_TOP(x) (((x) >> 16) & 0xFFFF)
++#define C_000002_MC_AGP_TOP 0x0000FFFF
++#define R_000003_MC_AGP_BASE 0x000003
++#define S_000003_AGP_BASE_ADDR(x) (((x) & 0xFFFFFFFF) << 0)
++#define G_000003_AGP_BASE_ADDR(x) (((x) >> 0) & 0xFFFFFFFF)
++#define C_000003_AGP_BASE_ADDR 0x00000000
++#define R_000004_MC_AGP_BASE_2 0x000004
++#define S_000004_AGP_BASE_ADDR_2(x) (((x) & 0xF) << 0)
++#define G_000004_AGP_BASE_ADDR_2(x) (((x) >> 0) & 0xF)
++#define C_000004_AGP_BASE_ADDR_2 0xFFFFFFF0
++
++
++#define R_00000F_CP_DYN_CNTL 0x00000F
++#define S_00000F_CP_FORCEON(x) (((x) & 0x1) << 0)
++#define G_00000F_CP_FORCEON(x) (((x) >> 0) & 0x1)
++#define C_00000F_CP_FORCEON 0xFFFFFFFE
++#define S_00000F_CP_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 1)
++#define G_00000F_CP_MAX_DYN_STOP_LAT(x) (((x) >> 1) & 0x1)
++#define C_00000F_CP_MAX_DYN_STOP_LAT 0xFFFFFFFD
++#define S_00000F_CP_CLOCK_STATUS(x) (((x) & 0x1) << 2)
++#define G_00000F_CP_CLOCK_STATUS(x) (((x) >> 2) & 0x1)
++#define C_00000F_CP_CLOCK_STATUS 0xFFFFFFFB
++#define S_00000F_CP_PROG_SHUTOFF(x) (((x) & 0x1) << 3)
++#define G_00000F_CP_PROG_SHUTOFF(x) (((x) >> 3) & 0x1)
++#define C_00000F_CP_PROG_SHUTOFF 0xFFFFFFF7
++#define S_00000F_CP_PROG_DELAY_VALUE(x) (((x) & 0xFF) << 4)
++#define G_00000F_CP_PROG_DELAY_VALUE(x) (((x) >> 4) & 0xFF)
++#define C_00000F_CP_PROG_DELAY_VALUE 0xFFFFF00F
++#define S_00000F_CP_LOWER_POWER_IDLE(x) (((x) & 0xFF) << 12)
++#define G_00000F_CP_LOWER_POWER_IDLE(x) (((x) >> 12) & 0xFF)
++#define C_00000F_CP_LOWER_POWER_IDLE 0xFFF00FFF
++#define S_00000F_CP_LOWER_POWER_IGNORE(x) (((x) & 0x1) << 20)
++#define G_00000F_CP_LOWER_POWER_IGNORE(x) (((x) >> 20) & 0x1)
++#define C_00000F_CP_LOWER_POWER_IGNORE 0xFFEFFFFF
++#define S_00000F_CP_NORMAL_POWER_IGNORE(x) (((x) & 0x1) << 21)
++#define G_00000F_CP_NORMAL_POWER_IGNORE(x) (((x) >> 21) & 0x1)
++#define C_00000F_CP_NORMAL_POWER_IGNORE 0xFFDFFFFF
++#define S_00000F_SPARE(x) (((x) & 0x3) << 22)
++#define G_00000F_SPARE(x) (((x) >> 22) & 0x3)
++#define C_00000F_SPARE 0xFF3FFFFF
++#define S_00000F_CP_NORMAL_POWER_BUSY(x) (((x) & 0xFF) << 24)
++#define G_00000F_CP_NORMAL_POWER_BUSY(x) (((x) >> 24) & 0xFF)
++#define C_00000F_CP_NORMAL_POWER_BUSY 0x00FFFFFF
++#define R_000011_E2_DYN_CNTL 0x000011
++#define S_000011_E2_FORCEON(x) (((x) & 0x1) << 0)
++#define G_000011_E2_FORCEON(x) (((x) >> 0) & 0x1)
++#define C_000011_E2_FORCEON 0xFFFFFFFE
++#define S_000011_E2_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 1)
++#define G_000011_E2_MAX_DYN_STOP_LAT(x) (((x) >> 1) & 0x1)
++#define C_000011_E2_MAX_DYN_STOP_LAT 0xFFFFFFFD
++#define S_000011_E2_CLOCK_STATUS(x) (((x) & 0x1) << 2)
++#define G_000011_E2_CLOCK_STATUS(x) (((x) >> 2) & 0x1)
++#define C_000011_E2_CLOCK_STATUS 0xFFFFFFFB
++#define S_000011_E2_PROG_SHUTOFF(x) (((x) & 0x1) << 3)
++#define G_000011_E2_PROG_SHUTOFF(x) (((x) >> 3) & 0x1)
++#define C_000011_E2_PROG_SHUTOFF 0xFFFFFFF7
++#define S_000011_E2_PROG_DELAY_VALUE(x) (((x) & 0xFF) << 4)
++#define G_000011_E2_PROG_DELAY_VALUE(x) (((x) >> 4) & 0xFF)
++#define C_000011_E2_PROG_DELAY_VALUE 0xFFFFF00F
++#define S_000011_E2_LOWER_POWER_IDLE(x) (((x) & 0xFF) << 12)
++#define G_000011_E2_LOWER_POWER_IDLE(x) (((x) >> 12) & 0xFF)
++#define C_000011_E2_LOWER_POWER_IDLE 0xFFF00FFF
++#define S_000011_E2_LOWER_POWER_IGNORE(x) (((x) & 0x1) << 20)
++#define G_000011_E2_LOWER_POWER_IGNORE(x) (((x) >> 20) & 0x1)
++#define C_000011_E2_LOWER_POWER_IGNORE 0xFFEFFFFF
++#define S_000011_E2_NORMAL_POWER_IGNORE(x) (((x) & 0x1) << 21)
++#define G_000011_E2_NORMAL_POWER_IGNORE(x) (((x) >> 21) & 0x1)
++#define C_000011_E2_NORMAL_POWER_IGNORE 0xFFDFFFFF
++#define S_000011_SPARE(x) (((x) & 0x3) << 22)
++#define G_000011_SPARE(x) (((x) >> 22) & 0x3)
++#define C_000011_SPARE 0xFF3FFFFF
++#define S_000011_E2_NORMAL_POWER_BUSY(x) (((x) & 0xFF) << 24)
++#define G_000011_E2_NORMAL_POWER_BUSY(x) (((x) >> 24) & 0xFF)
++#define C_000011_E2_NORMAL_POWER_BUSY 0x00FFFFFF
++#define R_000013_IDCT_DYN_CNTL 0x000013
++#define S_000013_IDCT_FORCEON(x) (((x) & 0x1) << 0)
++#define G_000013_IDCT_FORCEON(x) (((x) >> 0) & 0x1)
++#define C_000013_IDCT_FORCEON 0xFFFFFFFE
++#define S_000013_IDCT_MAX_DYN_STOP_LAT(x) (((x) & 0x1) << 1)
++#define G_000013_IDCT_MAX_DYN_STOP_LAT(x) (((x) >> 1) & 0x1)
++#define C_000013_IDCT_MAX_DYN_STOP_LAT 0xFFFFFFFD
++#define S_000013_IDCT_CLOCK_STATUS(x) (((x) & 0x1) << 2)
++#define G_000013_IDCT_CLOCK_STATUS(x) (((x) >> 2) & 0x1)
++#define C_000013_IDCT_CLOCK_STATUS 0xFFFFFFFB
++#define S_000013_IDCT_PROG_SHUTOFF(x) (((x) & 0x1) << 3)
++#define G_000013_IDCT_PROG_SHUTOFF(x) (((x) >> 3) & 0x1)
++#define C_000013_IDCT_PROG_SHUTOFF 0xFFFFFFF7
++#define S_000013_IDCT_PROG_DELAY_VALUE(x) (((x) & 0xFF) << 4)
++#define G_000013_IDCT_PROG_DELAY_VALUE(x) (((x) >> 4) & 0xFF)
++#define C_000013_IDCT_PROG_DELAY_VALUE 0xFFFFF00F
++#define S_000013_IDCT_LOWER_POWER_IDLE(x) (((x) & 0xFF) << 12)
++#define G_000013_IDCT_LOWER_POWER_IDLE(x) (((x) >> 12) & 0xFF)
++#define C_000013_IDCT_LOWER_POWER_IDLE 0xFFF00FFF
++#define S_000013_IDCT_LOWER_POWER_IGNORE(x) (((x) & 0x1) << 20)
++#define G_000013_IDCT_LOWER_POWER_IGNORE(x) (((x) >> 20) & 0x1)
++#define C_000013_IDCT_LOWER_POWER_IGNORE 0xFFEFFFFF
++#define S_000013_IDCT_NORMAL_POWER_IGNORE(x) (((x) & 0x1) << 21)
++#define G_000013_IDCT_NORMAL_POWER_IGNORE(x) (((x) >> 21) & 0x1)
++#define C_000013_IDCT_NORMAL_POWER_IGNORE 0xFFDFFFFF
++#define S_000013_SPARE(x) (((x) & 0x3) << 22)
++#define G_000013_SPARE(x) (((x) >> 22) & 0x3)
++#define C_000013_SPARE 0xFF3FFFFF
++#define S_000013_IDCT_NORMAL_POWER_BUSY(x) (((x) & 0xFF) << 24)
++#define G_000013_IDCT_NORMAL_POWER_BUSY(x) (((x) >> 24) & 0xFF)
++#define C_000013_IDCT_NORMAL_POWER_BUSY 0x00FFFFFF
++
++#endif
+diff --git a/drivers/gpu/drm/radeon/rv515r.h b/drivers/gpu/drm/radeon/rv515r.h
+deleted file mode 100644
+index f3cf840..0000000
+--- a/drivers/gpu/drm/radeon/rv515r.h
++++ /dev/null
+@@ -1,170 +0,0 @@
+-/*
+- * Copyright 2008 Advanced Micro Devices, Inc.
+- * Copyright 2008 Red Hat Inc.
+- * Copyright 2009 Jerome Glisse.
+- *
+- * Permission is hereby granted, free of charge, to any person obtaining a
+- * copy of this software and associated documentation files (the "Software"),
+- * to deal in the Software without restriction, including without limitation
+- * the rights to use, copy, modify, merge, publish, distribute, sublicense,
+- * and/or sell copies of the Software, and to permit persons to whom the
+- * Software is furnished to do so, subject to the following conditions:
+- *
+- * The above copyright notice and this permission notice shall be included in
+- * all copies or substantial portions of the Software.
+- *
+- * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
+- * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
+- * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
+- * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
+- * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
+- * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
+- * OTHER DEALINGS IN THE SOFTWARE.
+- *
+- * Authors: Dave Airlie
+- * Alex Deucher
+- * Jerome Glisse
+- */
+-#ifndef RV515R_H
+-#define RV515R_H
+-
+-/* RV515 registers */
+-#define PCIE_INDEX 0x0030
+-#define PCIE_DATA 0x0034
+-#define MC_IND_INDEX 0x0070
+-#define MC_IND_WR_EN (1 << 24)
+-#define MC_IND_DATA 0x0074
+-#define RBBM_SOFT_RESET 0x00F0
+-#define CONFIG_MEMSIZE 0x00F8
+-#define HDP_FB_LOCATION 0x0134
+-#define CP_CSQ_CNTL 0x0740
+-#define CP_CSQ_MODE 0x0744
+-#define CP_CSQ_ADDR 0x07F0
+-#define CP_CSQ_DATA 0x07F4
+-#define CP_CSQ_STAT 0x07F8
+-#define CP_CSQ2_STAT 0x07FC
+-#define RBBM_STATUS 0x0E40
+-#define DST_PIPE_CONFIG 0x170C
+-#define WAIT_UNTIL 0x1720
+-#define WAIT_2D_IDLE (1 << 14)
+-#define WAIT_3D_IDLE (1 << 15)
+-#define WAIT_2D_IDLECLEAN (1 << 16)
+-#define WAIT_3D_IDLECLEAN (1 << 17)
+-#define ISYNC_CNTL 0x1724
+-#define ISYNC_ANY2D_IDLE3D (1 << 0)
+-#define ISYNC_ANY3D_IDLE2D (1 << 1)
+-#define ISYNC_TRIG2D_IDLE3D (1 << 2)
+-#define ISYNC_TRIG3D_IDLE2D (1 << 3)
+-#define ISYNC_WAIT_IDLEGUI (1 << 4)
+-#define ISYNC_CPSCRATCH_IDLEGUI (1 << 5)
+-#define VAP_INDEX_OFFSET 0x208C
+-#define VAP_PVS_STATE_FLUSH_REG 0x2284
+-#define GB_ENABLE 0x4008
+-#define GB_MSPOS0 0x4010
+-#define MS_X0_SHIFT 0
+-#define MS_Y0_SHIFT 4
+-#define MS_X1_SHIFT 8
+-#define MS_Y1_SHIFT 12
+-#define MS_X2_SHIFT 16
+-#define MS_Y2_SHIFT 20
+-#define MSBD0_Y_SHIFT 24
+-#define MSBD0_X_SHIFT 28
+-#define GB_MSPOS1 0x4014
+-#define MS_X3_SHIFT 0
+-#define MS_Y3_SHIFT 4
+-#define MS_X4_SHIFT 8
+-#define MS_Y4_SHIFT 12
+-#define MS_X5_SHIFT 16
+-#define MS_Y5_SHIFT 20
+-#define MSBD1_SHIFT 24
+-#define GB_TILE_CONFIG 0x4018
+-#define ENABLE_TILING (1 << 0)
+-#define PIPE_COUNT_MASK 0x0000000E
+-#define PIPE_COUNT_SHIFT 1
+-#define TILE_SIZE_8 (0 << 4)
+-#define TILE_SIZE_16 (1 << 4)
+-#define TILE_SIZE_32 (2 << 4)
+-#define SUBPIXEL_1_12 (0 << 16)
+-#define SUBPIXEL_1_16 (1 << 16)
+-#define GB_SELECT 0x401C
+-#define GB_AA_CONFIG 0x4020
+-#define GB_PIPE_SELECT 0x402C
+-#define GA_ENHANCE 0x4274
+-#define GA_DEADLOCK_CNTL (1 << 0)
+-#define GA_FASTSYNC_CNTL (1 << 1)
+-#define GA_POLY_MODE 0x4288
+-#define FRONT_PTYPE_POINT (0 << 4)
+-#define FRONT_PTYPE_LINE (1 << 4)
+-#define FRONT_PTYPE_TRIANGE (2 << 4)
+-#define BACK_PTYPE_POINT (0 << 7)
+-#define BACK_PTYPE_LINE (1 << 7)
+-#define BACK_PTYPE_TRIANGE (2 << 7)
+-#define GA_ROUND_MODE 0x428C
+-#define GEOMETRY_ROUND_TRUNC (0 << 0)
+-#define GEOMETRY_ROUND_NEAREST (1 << 0)
+-#define COLOR_ROUND_TRUNC (0 << 2)
+-#define COLOR_ROUND_NEAREST (1 << 2)
+-#define SU_REG_DEST 0x42C8
+-#define RB3D_DSTCACHE_CTLSTAT 0x4E4C
+-#define RB3D_DC_FLUSH (2 << 0)
+-#define RB3D_DC_FREE (2 << 2)
+-#define RB3D_DC_FINISH (1 << 4)
+-#define ZB_ZCACHE_CTLSTAT 0x4F18
+-#define ZC_FLUSH (1 << 0)
+-#define ZC_FREE (1 << 1)
+-#define DC_LB_MEMORY_SPLIT 0x6520
+-#define DC_LB_MEMORY_SPLIT_MASK 0x00000003
+-#define DC_LB_MEMORY_SPLIT_SHIFT 0
+-#define DC_LB_MEMORY_SPLIT_D1HALF_D2HALF 0
+-#define DC_LB_MEMORY_SPLIT_D1_3Q_D2_1Q 1
+-#define DC_LB_MEMORY_SPLIT_D1_ONLY 2
+-#define DC_LB_MEMORY_SPLIT_D1_1Q_D2_3Q 3
+-#define DC_LB_MEMORY_SPLIT_SHIFT_MODE (1 << 2)
+-#define DC_LB_DISP1_END_ADR_SHIFT 4
+-#define DC_LB_DISP1_END_ADR_MASK 0x00007FF0
+-#define D1MODE_PRIORITY_A_CNT 0x6548
+-#define MODE_PRIORITY_MARK_MASK 0x00007FFF
+-#define MODE_PRIORITY_OFF (1 << 16)
+-#define MODE_PRIORITY_ALWAYS_ON (1 << 20)
+-#define MODE_PRIORITY_FORCE_MASK (1 << 24)
+-#define D1MODE_PRIORITY_B_CNT 0x654C
+-#define LB_MAX_REQ_OUTSTANDING 0x6D58
+-#define LB_D1_MAX_REQ_OUTSTANDING_MASK 0x0000000F
+-#define LB_D1_MAX_REQ_OUTSTANDING_SHIFT 0
+-#define LB_D2_MAX_REQ_OUTSTANDING_MASK 0x000F0000
+-#define LB_D2_MAX_REQ_OUTSTANDING_SHIFT 16
+-#define D2MODE_PRIORITY_A_CNT 0x6D48
+-#define D2MODE_PRIORITY_B_CNT 0x6D4C
+-
+-/* ix[MC] registers */
+-#define MC_FB_LOCATION 0x01
+-#define MC_FB_START_MASK 0x0000FFFF
+-#define MC_FB_START_SHIFT 0
+-#define MC_FB_TOP_MASK 0xFFFF0000
+-#define MC_FB_TOP_SHIFT 16
+-#define MC_AGP_LOCATION 0x02
+-#define MC_AGP_START_MASK 0x0000FFFF
+-#define MC_AGP_START_SHIFT 0
+-#define MC_AGP_TOP_MASK 0xFFFF0000
+-#define MC_AGP_TOP_SHIFT 16
+-#define MC_AGP_BASE 0x03
+-#define MC_AGP_BASE_2 0x04
+-#define MC_CNTL 0x5
+-#define MEM_NUM_CHANNELS_MASK 0x00000003
+-#define MC_STATUS 0x08
+-#define MC_STATUS_IDLE (1 << 4)
+-#define MC_MISC_LAT_TIMER 0x09
+-#define MC_CPR_INIT_LAT_MASK 0x0000000F
+-#define MC_VF_INIT_LAT_MASK 0x000000F0
+-#define MC_DISP0R_INIT_LAT_MASK 0x00000F00
+-#define MC_DISP0R_INIT_LAT_SHIFT 8
+-#define MC_DISP1R_INIT_LAT_MASK 0x0000F000
+-#define MC_DISP1R_INIT_LAT_SHIFT 12
+-#define MC_FIXED_INIT_LAT_MASK 0x000F0000
+-#define MC_E2R_INIT_LAT_MASK 0x00F00000
+-#define SAME_PAGE_PRIO_MASK 0x0F000000
+-#define MC_GLOBW_INIT_LAT_MASK 0xF0000000
+-
+-
+-#endif
+-
+diff --git a/drivers/gpu/drm/radeon/rv770.c b/drivers/gpu/drm/radeon/rv770.c
+index 21d8ffd..e0b97d1 100644
+--- a/drivers/gpu/drm/radeon/rv770.c
++++ b/drivers/gpu/drm/radeon/rv770.c
+@@ -25,100 +25,1045 @@
+ * Alex Deucher
+ * Jerome Glisse
+ */
++#include <linux/firmware.h>
++#include <linux/platform_device.h>
+ #include "drmP.h"
+-#include "radeon_reg.h"
+ #include "radeon.h"
++#include "radeon_drm.h"
++#include "rv770d.h"
++#include "atom.h"
++#include "avivod.h"
+
+-/* rv770,rv730,rv710 depends on : */
+-void rs600_mc_disable_clients(struct radeon_device *rdev);
++#define R700_PFP_UCODE_SIZE 848
++#define R700_PM4_UCODE_SIZE 1360
+
+-/* This files gather functions specifics to:
+- * rv770,rv730,rv710
+- *
+- * Some of these functions might be used by newer ASICs.
+- */
+-int rv770_mc_wait_for_idle(struct radeon_device *rdev);
+-void rv770_gpu_init(struct radeon_device *rdev);
++static void rv770_gpu_init(struct radeon_device *rdev);
++void rv770_fini(struct radeon_device *rdev);
+
+
+ /*
+- * MC
++ * GART
+ */
+-int rv770_mc_init(struct radeon_device *rdev)
++int rv770_pcie_gart_enable(struct radeon_device *rdev)
+ {
+- uint32_t tmp;
++ u32 tmp;
++ int r, i;
+
+- rv770_gpu_init(rdev);
++ if (rdev->gart.table.vram.robj == NULL) {
++ dev_err(rdev->dev, "No VRAM object for PCIE GART.\n");
++ return -EINVAL;
++ }
++ r = radeon_gart_table_vram_pin(rdev);
++ if (r)
++ return r;
++ /* Setup L2 cache */
++ WREG32(VM_L2_CNTL, ENABLE_L2_CACHE | ENABLE_L2_FRAGMENT_PROCESSING |
++ ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE |
++ EFFECTIVE_L2_QUEUE_SIZE(7));
++ WREG32(VM_L2_CNTL2, 0);
++ WREG32(VM_L2_CNTL3, BANK_SELECT(0) | CACHE_UPDATE_MODE(2));
++ /* Setup TLB control */
++ tmp = ENABLE_L1_TLB | ENABLE_L1_FRAGMENT_PROCESSING |
++ SYSTEM_ACCESS_MODE_NOT_IN_SYS |
++ SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU |
++ EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5);
++ WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
++ WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
++ WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB0_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB1_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB2_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB3_CNTL, tmp);
++ WREG32(VM_CONTEXT0_PAGE_TABLE_START_ADDR, rdev->mc.gtt_start >> 12);
++ WREG32(VM_CONTEXT0_PAGE_TABLE_END_ADDR, (rdev->mc.gtt_end - 1) >> 12);
++ WREG32(VM_CONTEXT0_PAGE_TABLE_BASE_ADDR, rdev->gart.table_addr >> 12);
++ WREG32(VM_CONTEXT0_CNTL, ENABLE_CONTEXT | PAGE_TABLE_DEPTH(0) |
++ RANGE_PROTECTION_FAULT_ENABLE_DEFAULT);
++ WREG32(VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR,
++ (u32)(rdev->dummy_page.addr >> 12));
++ for (i = 1; i < 7; i++)
++ WREG32(VM_CONTEXT0_CNTL + (i * 4), 0);
+
+- /* setup the gart before changing location so we can ask to
+- * discard unmapped mc request
+- */
+- /* FIXME: disable out of gart access */
+- tmp = rdev->mc.gtt_location / 4096;
+- tmp = REG_SET(R700_LOGICAL_PAGE_NUMBER, tmp);
+- WREG32(R700_MC_VM_SYSTEM_APERTURE_LOW_ADDR, tmp);
+- tmp = (rdev->mc.gtt_location + rdev->mc.gtt_size) / 4096;
+- tmp = REG_SET(R700_LOGICAL_PAGE_NUMBER, tmp);
+- WREG32(R700_MC_VM_SYSTEM_APERTURE_HIGH_ADDR, tmp);
+-
+- rs600_mc_disable_clients(rdev);
+- if (rv770_mc_wait_for_idle(rdev)) {
+- printk(KERN_WARNING "Failed to wait MC idle while "
+- "programming pipes. Bad things might happen.\n");
+- }
+-
+- tmp = rdev->mc.vram_location + rdev->mc.mc_vram_size - 1;
+- tmp = REG_SET(R700_MC_FB_TOP, tmp >> 24);
+- tmp |= REG_SET(R700_MC_FB_BASE, rdev->mc.vram_location >> 24);
+- WREG32(R700_MC_VM_FB_LOCATION, tmp);
+- tmp = rdev->mc.gtt_location + rdev->mc.gtt_size - 1;
+- tmp = REG_SET(R700_MC_AGP_TOP, tmp >> 22);
+- WREG32(R700_MC_VM_AGP_TOP, tmp);
+- tmp = REG_SET(R700_MC_AGP_BOT, rdev->mc.gtt_location >> 22);
+- WREG32(R700_MC_VM_AGP_BOT, tmp);
++ r600_pcie_gart_tlb_flush(rdev);
++ rdev->gart.ready = true;
+ return 0;
+ }
+
+-void rv770_mc_fini(struct radeon_device *rdev)
++void rv770_pcie_gart_disable(struct radeon_device *rdev)
+ {
+- /* FIXME: implement */
++ u32 tmp;
++ int i;
++
++ /* Disable all tables */
++ for (i = 0; i < 7; i++)
++ WREG32(VM_CONTEXT0_CNTL + (i * 4), 0);
++
++ /* Setup L2 cache */
++ WREG32(VM_L2_CNTL, ENABLE_L2_FRAGMENT_PROCESSING |
++ EFFECTIVE_L2_QUEUE_SIZE(7));
++ WREG32(VM_L2_CNTL2, 0);
++ WREG32(VM_L2_CNTL3, BANK_SELECT(0) | CACHE_UPDATE_MODE(2));
++ /* Setup TLB control */
++ tmp = EFFECTIVE_L1_TLB_SIZE(5) | EFFECTIVE_L1_QUEUE_SIZE(5);
++ WREG32(MC_VM_MD_L1_TLB0_CNTL, tmp);
++ WREG32(MC_VM_MD_L1_TLB1_CNTL, tmp);
++ WREG32(MC_VM_MD_L1_TLB2_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB0_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB1_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB2_CNTL, tmp);
++ WREG32(MC_VM_MB_L1_TLB3_CNTL, tmp);
++ if (rdev->gart.table.vram.robj) {
++ radeon_object_kunmap(rdev->gart.table.vram.robj);
++ radeon_object_unpin(rdev->gart.table.vram.robj);
++ }
++}
++
++void rv770_pcie_gart_fini(struct radeon_device *rdev)
++{
++ rv770_pcie_gart_disable(rdev);
++ radeon_gart_table_vram_free(rdev);
++ radeon_gart_fini(rdev);
+ }
+
+
+ /*
+- * Global GPU functions
++ * MC
+ */
+-void rv770_errata(struct radeon_device *rdev)
++static void rv770_mc_resume(struct radeon_device *rdev)
+ {
+- rdev->pll_errata = 0;
++ u32 d1vga_control, d2vga_control;
++ u32 vga_render_control, vga_hdp_control;
++ u32 d1crtc_control, d2crtc_control;
++ u32 new_d1grph_primary, new_d1grph_secondary;
++ u32 new_d2grph_primary, new_d2grph_secondary;
++ u64 old_vram_start;
++ u32 tmp;
++ int i, j;
++
++ /* Initialize HDP */
++ for (i = 0, j = 0; i < 32; i++, j += 0x18) {
++ WREG32((0x2c14 + j), 0x00000000);
++ WREG32((0x2c18 + j), 0x00000000);
++ WREG32((0x2c1c + j), 0x00000000);
++ WREG32((0x2c20 + j), 0x00000000);
++ WREG32((0x2c24 + j), 0x00000000);
++ }
++ WREG32(HDP_REG_COHERENCY_FLUSH_CNTL, 0);
++
++ d1vga_control = RREG32(D1VGA_CONTROL);
++ d2vga_control = RREG32(D2VGA_CONTROL);
++ vga_render_control = RREG32(VGA_RENDER_CONTROL);
++ vga_hdp_control = RREG32(VGA_HDP_CONTROL);
++ d1crtc_control = RREG32(D1CRTC_CONTROL);
++ d2crtc_control = RREG32(D2CRTC_CONTROL);
++ old_vram_start = (u64)(RREG32(MC_VM_FB_LOCATION) & 0xFFFF) << 24;
++ new_d1grph_primary = RREG32(D1GRPH_PRIMARY_SURFACE_ADDRESS);
++ new_d1grph_secondary = RREG32(D1GRPH_SECONDARY_SURFACE_ADDRESS);
++ new_d1grph_primary += rdev->mc.vram_start - old_vram_start;
++ new_d1grph_secondary += rdev->mc.vram_start - old_vram_start;
++ new_d2grph_primary = RREG32(D2GRPH_PRIMARY_SURFACE_ADDRESS);
++ new_d2grph_secondary = RREG32(D2GRPH_SECONDARY_SURFACE_ADDRESS);
++ new_d2grph_primary += rdev->mc.vram_start - old_vram_start;
++ new_d2grph_secondary += rdev->mc.vram_start - old_vram_start;
++
++ /* Stop all video */
++ WREG32(D1VGA_CONTROL, 0);
++ WREG32(D2VGA_CONTROL, 0);
++ WREG32(VGA_RENDER_CONTROL, 0);
++ WREG32(D1CRTC_UPDATE_LOCK, 1);
++ WREG32(D2CRTC_UPDATE_LOCK, 1);
++ WREG32(D1CRTC_CONTROL, 0);
++ WREG32(D2CRTC_CONTROL, 0);
++ WREG32(D1CRTC_UPDATE_LOCK, 0);
++ WREG32(D2CRTC_UPDATE_LOCK, 0);
++
++ mdelay(1);
++ if (r600_mc_wait_for_idle(rdev)) {
++ printk(KERN_WARNING "[drm] MC not idle !\n");
++ }
++
++ /* Lockout access through VGA aperture*/
++ WREG32(VGA_HDP_CONTROL, VGA_MEMORY_DISABLE);
++
++ /* Update configuration */
++ WREG32(MC_VM_SYSTEM_APERTURE_LOW_ADDR, rdev->mc.vram_start >> 12);
++ WREG32(MC_VM_SYSTEM_APERTURE_HIGH_ADDR, (rdev->mc.vram_end - 1) >> 12);
++ WREG32(MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR, 0);
++ tmp = (((rdev->mc.vram_end - 1) >> 24) & 0xFFFF) << 16;
++ tmp |= ((rdev->mc.vram_start >> 24) & 0xFFFF);
++ WREG32(MC_VM_FB_LOCATION, tmp);
++ WREG32(HDP_NONSURFACE_BASE, (rdev->mc.vram_start >> 8));
++ WREG32(HDP_NONSURFACE_INFO, (2 << 7));
++ WREG32(HDP_NONSURFACE_SIZE, (rdev->mc.mc_vram_size - 1) | 0x3FF);
++ if (rdev->flags & RADEON_IS_AGP) {
++ WREG32(MC_VM_AGP_TOP, (rdev->mc.gtt_end - 1) >> 16);
++ WREG32(MC_VM_AGP_BOT, rdev->mc.gtt_start >> 16);
++ WREG32(MC_VM_AGP_BASE, rdev->mc.agp_base >> 22);
++ } else {
++ WREG32(MC_VM_AGP_BASE, 0);
++ WREG32(MC_VM_AGP_TOP, 0x0FFFFFFF);
++ WREG32(MC_VM_AGP_BOT, 0x0FFFFFFF);
++ }
++ WREG32(D1GRPH_PRIMARY_SURFACE_ADDRESS, new_d1grph_primary);
++ WREG32(D1GRPH_SECONDARY_SURFACE_ADDRESS, new_d1grph_secondary);
++ WREG32(D2GRPH_PRIMARY_SURFACE_ADDRESS, new_d2grph_primary);
++ WREG32(D2GRPH_SECONDARY_SURFACE_ADDRESS, new_d2grph_secondary);
++ WREG32(VGA_MEMORY_BASE_ADDRESS, rdev->mc.vram_start);
++
++ /* Unlock host access */
++ WREG32(VGA_HDP_CONTROL, vga_hdp_control);
++
++ mdelay(1);
++ if (r600_mc_wait_for_idle(rdev)) {
++ printk(KERN_WARNING "[drm] MC not idle !\n");
++ }
++
++ /* Restore video state */
++ WREG32(D1CRTC_UPDATE_LOCK, 1);
++ WREG32(D2CRTC_UPDATE_LOCK, 1);
++ WREG32(D1CRTC_CONTROL, d1crtc_control);
++ WREG32(D2CRTC_CONTROL, d2crtc_control);
++ WREG32(D1CRTC_UPDATE_LOCK, 0);
++ WREG32(D2CRTC_UPDATE_LOCK, 0);
++ WREG32(D1VGA_CONTROL, d1vga_control);
++ WREG32(D2VGA_CONTROL, d2vga_control);
++ WREG32(VGA_RENDER_CONTROL, vga_render_control);
++
++ /* we need to own VRAM, so turn off the VGA renderer here
++ * to stop it overwriting our objects */
++ rv515_vga_render_disable(rdev);
+ }
+
+-int rv770_mc_wait_for_idle(struct radeon_device *rdev)
++
++/*
++ * CP.
++ */
++void r700_cp_stop(struct radeon_device *rdev)
+ {
+- /* FIXME: implement */
+- return 0;
++ WREG32(CP_ME_CNTL, (CP_ME_HALT | CP_PFP_HALT));
+ }
+
+-void rv770_gpu_init(struct radeon_device *rdev)
++
++static int rv770_cp_load_microcode(struct radeon_device *rdev)
+ {
+- /* FIXME: implement */
++ const __be32 *fw_data;
++ int i;
++
++ if (!rdev->me_fw || !rdev->pfp_fw)
++ return -EINVAL;
++
++ r700_cp_stop(rdev);
++ WREG32(CP_RB_CNTL, RB_NO_UPDATE | (15 << 8) | (3 << 0));
++
++ /* Reset cp */
++ WREG32(GRBM_SOFT_RESET, SOFT_RESET_CP);
++ RREG32(GRBM_SOFT_RESET);
++ mdelay(15);
++ WREG32(GRBM_SOFT_RESET, 0);
++
++ fw_data = (const __be32 *)rdev->pfp_fw->data;
++ WREG32(CP_PFP_UCODE_ADDR, 0);
++ for (i = 0; i < R700_PFP_UCODE_SIZE; i++)
++ WREG32(CP_PFP_UCODE_DATA, be32_to_cpup(fw_data++));
++ WREG32(CP_PFP_UCODE_ADDR, 0);
++
++ fw_data = (const __be32 *)rdev->me_fw->data;
++ WREG32(CP_ME_RAM_WADDR, 0);
++ for (i = 0; i < R700_PM4_UCODE_SIZE; i++)
++ WREG32(CP_ME_RAM_DATA, be32_to_cpup(fw_data++));
++
++ WREG32(CP_PFP_UCODE_ADDR, 0);
++ WREG32(CP_ME_RAM_WADDR, 0);
++ WREG32(CP_ME_RAM_RADDR, 0);
++ return 0;
+ }
+
+
+ /*
+- * VRAM info
++ * Core functions
+ */
+-void rv770_vram_get_type(struct radeon_device *rdev)
++static u32 r700_get_tile_pipe_to_backend_map(u32 num_tile_pipes,
++ u32 num_backends,
++ u32 backend_disable_mask)
+ {
+- /* FIXME: implement */
++ u32 backend_map = 0;
++ u32 enabled_backends_mask;
++ u32 enabled_backends_count;
++ u32 cur_pipe;
++ u32 swizzle_pipe[R7XX_MAX_PIPES];
++ u32 cur_backend;
++ u32 i;
++
++ if (num_tile_pipes > R7XX_MAX_PIPES)
++ num_tile_pipes = R7XX_MAX_PIPES;
++ if (num_tile_pipes < 1)
++ num_tile_pipes = 1;
++ if (num_backends > R7XX_MAX_BACKENDS)
++ num_backends = R7XX_MAX_BACKENDS;
++ if (num_backends < 1)
++ num_backends = 1;
++
++ enabled_backends_mask = 0;
++ enabled_backends_count = 0;
++ for (i = 0; i < R7XX_MAX_BACKENDS; ++i) {
++ if (((backend_disable_mask >> i) & 1) == 0) {
++ enabled_backends_mask |= (1 << i);
++ ++enabled_backends_count;
++ }
++ if (enabled_backends_count == num_backends)
++ break;
++ }
++
++ if (enabled_backends_count == 0) {
++ enabled_backends_mask = 1;
++ enabled_backends_count = 1;
++ }
++
++ if (enabled_backends_count != num_backends)
++ num_backends = enabled_backends_count;
++
++ memset((uint8_t *)&swizzle_pipe[0], 0, sizeof(u32) * R7XX_MAX_PIPES);
++ switch (num_tile_pipes) {
++ case 1:
++ swizzle_pipe[0] = 0;
++ break;
++ case 2:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 1;
++ break;
++ case 3:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 1;
++ break;
++ case 4:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 3;
++ swizzle_pipe[3] = 1;
++ break;
++ case 5:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 4;
++ swizzle_pipe[3] = 1;
++ swizzle_pipe[4] = 3;
++ break;
++ case 6:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 4;
++ swizzle_pipe[3] = 5;
++ swizzle_pipe[4] = 3;
++ swizzle_pipe[5] = 1;
++ break;
++ case 7:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 4;
++ swizzle_pipe[3] = 6;
++ swizzle_pipe[4] = 3;
++ swizzle_pipe[5] = 1;
++ swizzle_pipe[6] = 5;
++ break;
++ case 8:
++ swizzle_pipe[0] = 0;
++ swizzle_pipe[1] = 2;
++ swizzle_pipe[2] = 4;
++ swizzle_pipe[3] = 6;
++ swizzle_pipe[4] = 3;
++ swizzle_pipe[5] = 1;
++ swizzle_pipe[6] = 7;
++ swizzle_pipe[7] = 5;
++ break;
++ }
++
++ cur_backend = 0;
++ for (cur_pipe = 0; cur_pipe < num_tile_pipes; ++cur_pipe) {
++ while (((1 << cur_backend) & enabled_backends_mask) == 0)
++ cur_backend = (cur_backend + 1) % R7XX_MAX_BACKENDS;
++
++ backend_map |= (u32)(((cur_backend & 3) << (swizzle_pipe[cur_pipe] * 2)));
++
++ cur_backend = (cur_backend + 1) % R7XX_MAX_BACKENDS;
++ }
++
++ return backend_map;
+ }
+
+-void rv770_vram_info(struct radeon_device *rdev)
++static void rv770_gpu_init(struct radeon_device *rdev)
+ {
+- rv770_vram_get_type(rdev);
++ int i, j, num_qd_pipes;
++ u32 sx_debug_1;
++ u32 smx_dc_ctl0;
++ u32 num_gs_verts_per_thread;
++ u32 vgt_gs_per_es;
++ u32 gs_prim_buffer_depth = 0;
++ u32 sq_ms_fifo_sizes;
++ u32 sq_config;
++ u32 sq_thread_resource_mgmt;
++ u32 hdp_host_path_cntl;
++ u32 sq_dyn_gpr_size_simd_ab_0;
++ u32 backend_map;
++ u32 gb_tiling_config = 0;
++ u32 cc_rb_backend_disable = 0;
++ u32 cc_gc_shader_pipe_config = 0;
++ u32 mc_arb_ramcfg;
++ u32 db_debug4;
++
++ /* setup chip specs */
++ switch (rdev->family) {
++ case CHIP_RV770:
++ rdev->config.rv770.max_pipes = 4;
++ rdev->config.rv770.max_tile_pipes = 8;
++ rdev->config.rv770.max_simds = 10;
++ rdev->config.rv770.max_backends = 4;
++ rdev->config.rv770.max_gprs = 256;
++ rdev->config.rv770.max_threads = 248;
++ rdev->config.rv770.max_stack_entries = 512;
++ rdev->config.rv770.max_hw_contexts = 8;
++ rdev->config.rv770.max_gs_threads = 16 * 2;
++ rdev->config.rv770.sx_max_export_size = 128;
++ rdev->config.rv770.sx_max_export_pos_size = 16;
++ rdev->config.rv770.sx_max_export_smx_size = 112;
++ rdev->config.rv770.sq_num_cf_insts = 2;
++
++ rdev->config.rv770.sx_num_of_sets = 7;
++ rdev->config.rv770.sc_prim_fifo_size = 0xF9;
++ rdev->config.rv770.sc_hiz_tile_fifo_size = 0x30;
++ rdev->config.rv770.sc_earlyz_tile_fifo_fize = 0x130;
++ break;
++ case CHIP_RV730:
++ rdev->config.rv770.max_pipes = 2;
++ rdev->config.rv770.max_tile_pipes = 4;
++ rdev->config.rv770.max_simds = 8;
++ rdev->config.rv770.max_backends = 2;
++ rdev->config.rv770.max_gprs = 128;
++ rdev->config.rv770.max_threads = 248;
++ rdev->config.rv770.max_stack_entries = 256;
++ rdev->config.rv770.max_hw_contexts = 8;
++ rdev->config.rv770.max_gs_threads = 16 * 2;
++ rdev->config.rv770.sx_max_export_size = 256;
++ rdev->config.rv770.sx_max_export_pos_size = 32;
++ rdev->config.rv770.sx_max_export_smx_size = 224;
++ rdev->config.rv770.sq_num_cf_insts = 2;
++
++ rdev->config.rv770.sx_num_of_sets = 7;
++ rdev->config.rv770.sc_prim_fifo_size = 0xf9;
++ rdev->config.rv770.sc_hiz_tile_fifo_size = 0x30;
++ rdev->config.rv770.sc_earlyz_tile_fifo_fize = 0x130;
++ if (rdev->config.rv770.sx_max_export_pos_size > 16) {
++ rdev->config.rv770.sx_max_export_pos_size -= 16;
++ rdev->config.rv770.sx_max_export_smx_size += 16;
++ }
++ break;
++ case CHIP_RV710:
++ rdev->config.rv770.max_pipes = 2;
++ rdev->config.rv770.max_tile_pipes = 2;
++ rdev->config.rv770.max_simds = 2;
++ rdev->config.rv770.max_backends = 1;
++ rdev->config.rv770.max_gprs = 256;
++ rdev->config.rv770.max_threads = 192;
++ rdev->config.rv770.max_stack_entries = 256;
++ rdev->config.rv770.max_hw_contexts = 4;
++ rdev->config.rv770.max_gs_threads = 8 * 2;
++ rdev->config.rv770.sx_max_export_size = 128;
++ rdev->config.rv770.sx_max_export_pos_size = 16;
++ rdev->config.rv770.sx_max_export_smx_size = 112;
++ rdev->config.rv770.sq_num_cf_insts = 1;
++
++ rdev->config.rv770.sx_num_of_sets = 7;
++ rdev->config.rv770.sc_prim_fifo_size = 0x40;
++ rdev->config.rv770.sc_hiz_tile_fifo_size = 0x30;
++ rdev->config.rv770.sc_earlyz_tile_fifo_fize = 0x130;
++ break;
++ case CHIP_RV740:
++ rdev->config.rv770.max_pipes = 4;
++ rdev->config.rv770.max_tile_pipes = 4;
++ rdev->config.rv770.max_simds = 8;
++ rdev->config.rv770.max_backends = 4;
++ rdev->config.rv770.max_gprs = 256;
++ rdev->config.rv770.max_threads = 248;
++ rdev->config.rv770.max_stack_entries = 512;
++ rdev->config.rv770.max_hw_contexts = 8;
++ rdev->config.rv770.max_gs_threads = 16 * 2;
++ rdev->config.rv770.sx_max_export_size = 256;
++ rdev->config.rv770.sx_max_export_pos_size = 32;
++ rdev->config.rv770.sx_max_export_smx_size = 224;
++ rdev->config.rv770.sq_num_cf_insts = 2;
++
++ rdev->config.rv770.sx_num_of_sets = 7;
++ rdev->config.rv770.sc_prim_fifo_size = 0x100;
++ rdev->config.rv770.sc_hiz_tile_fifo_size = 0x30;
++ rdev->config.rv770.sc_earlyz_tile_fifo_fize = 0x130;
++
++ if (rdev->config.rv770.sx_max_export_pos_size > 16) {
++ rdev->config.rv770.sx_max_export_pos_size -= 16;
++ rdev->config.rv770.sx_max_export_smx_size += 16;
++ }
++ break;
++ default:
++ break;
++ }
++
++ /* Initialize HDP */
++ j = 0;
++ for (i = 0; i < 32; i++) {
++ WREG32((0x2c14 + j), 0x00000000);
++ WREG32((0x2c18 + j), 0x00000000);
++ WREG32((0x2c1c + j), 0x00000000);
++ WREG32((0x2c20 + j), 0x00000000);
++ WREG32((0x2c24 + j), 0x00000000);
++ j += 0x18;
++ }
++
++ WREG32(GRBM_CNTL, GRBM_READ_TIMEOUT(0xff));
++
++ /* setup tiling, simd, pipe config */
++ mc_arb_ramcfg = RREG32(MC_ARB_RAMCFG);
++
++ switch (rdev->config.rv770.max_tile_pipes) {
++ case 1:
++ gb_tiling_config |= PIPE_TILING(0);
++ break;
++ case 2:
++ gb_tiling_config |= PIPE_TILING(1);
++ break;
++ case 4:
++ gb_tiling_config |= PIPE_TILING(2);
++ break;
++ case 8:
++ gb_tiling_config |= PIPE_TILING(3);
++ break;
++ default:
++ break;
++ }
++
++ if (rdev->family == CHIP_RV770)
++ gb_tiling_config |= BANK_TILING(1);
++ else
++ gb_tiling_config |= BANK_TILING((mc_arb_ramcfg & NOOFBANK_SHIFT) >> NOOFBANK_MASK);
++
++ gb_tiling_config |= GROUP_SIZE(0);
++
++ if (((mc_arb_ramcfg & NOOFROWS_MASK) & NOOFROWS_SHIFT) > 3) {
++ gb_tiling_config |= ROW_TILING(3);
++ gb_tiling_config |= SAMPLE_SPLIT(3);
++ } else {
++ gb_tiling_config |=
++ ROW_TILING(((mc_arb_ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT));
++ gb_tiling_config |=
++ SAMPLE_SPLIT(((mc_arb_ramcfg & NOOFROWS_MASK) >> NOOFROWS_SHIFT));
++ }
++
++ gb_tiling_config |= BANK_SWAPS(1);
++
++ backend_map = r700_get_tile_pipe_to_backend_map(rdev->config.rv770.max_tile_pipes,
++ rdev->config.rv770.max_backends,
++ (0xff << rdev->config.rv770.max_backends) & 0xff);
++ gb_tiling_config |= BACKEND_MAP(backend_map);
++
++ cc_gc_shader_pipe_config =
++ INACTIVE_QD_PIPES((R7XX_MAX_PIPES_MASK << rdev->config.rv770.max_pipes) & R7XX_MAX_PIPES_MASK);
++ cc_gc_shader_pipe_config |=
++ INACTIVE_SIMDS((R7XX_MAX_SIMDS_MASK << rdev->config.rv770.max_simds) & R7XX_MAX_SIMDS_MASK);
++
++ cc_rb_backend_disable =
++ BACKEND_DISABLE((R7XX_MAX_BACKENDS_MASK << rdev->config.rv770.max_backends) & R7XX_MAX_BACKENDS_MASK);
++
++ WREG32(GB_TILING_CONFIG, gb_tiling_config);
++ WREG32(DCP_TILING_CONFIG, (gb_tiling_config & 0xffff));
++ WREG32(HDP_TILING_CONFIG, (gb_tiling_config & 0xffff));
++
++ WREG32(CC_RB_BACKEND_DISABLE, cc_rb_backend_disable);
++ WREG32(CC_GC_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config);
++ WREG32(GC_USER_SHADER_PIPE_CONFIG, cc_gc_shader_pipe_config);
++
++ WREG32(CC_SYS_RB_BACKEND_DISABLE, cc_rb_backend_disable);
++ WREG32(CGTS_SYS_TCC_DISABLE, 0);
++ WREG32(CGTS_TCC_DISABLE, 0);
++ WREG32(CGTS_USER_SYS_TCC_DISABLE, 0);
++ WREG32(CGTS_USER_TCC_DISABLE, 0);
++
++ num_qd_pipes =
++ R7XX_MAX_BACKENDS - r600_count_pipe_bits(cc_gc_shader_pipe_config & INACTIVE_QD_PIPES_MASK);
++ WREG32(VGT_OUT_DEALLOC_CNTL, (num_qd_pipes * 4) & DEALLOC_DIST_MASK);
++ WREG32(VGT_VERTEX_REUSE_BLOCK_CNTL, ((num_qd_pipes * 4) - 2) & VTX_REUSE_DEPTH_MASK);
++
++ /* set HW defaults for 3D engine */
++ WREG32(CP_QUEUE_THRESHOLDS, (ROQ_IB1_START(0x16) |
++ ROQ_IB2_START(0x2b)));
++
++ WREG32(CP_MEQ_THRESHOLDS, STQ_SPLIT(0x30));
++
++ WREG32(TA_CNTL_AUX, (DISABLE_CUBE_ANISO |
++ SYNC_GRADIENT |
++ SYNC_WALKER |
++ SYNC_ALIGNER));
++
++ sx_debug_1 = RREG32(SX_DEBUG_1);
++ sx_debug_1 |= ENABLE_NEW_SMX_ADDRESS;
++ WREG32(SX_DEBUG_1, sx_debug_1);
++
++ smx_dc_ctl0 = RREG32(SMX_DC_CTL0);
++ smx_dc_ctl0 &= ~CACHE_DEPTH(0x1ff);
++ smx_dc_ctl0 |= CACHE_DEPTH((rdev->config.rv770.sx_num_of_sets * 64) - 1);
++ WREG32(SMX_DC_CTL0, smx_dc_ctl0);
++
++ WREG32(SMX_EVENT_CTL, (ES_FLUSH_CTL(4) |
++ GS_FLUSH_CTL(4) |
++ ACK_FLUSH_CTL(3) |
++ SYNC_FLUSH_CTL));
++
++ if (rdev->family == CHIP_RV770)
++ WREG32(DB_DEBUG3, DB_CLK_OFF_DELAY(0x1f));
++ else {
++ db_debug4 = RREG32(DB_DEBUG4);
++ db_debug4 |= DISABLE_TILE_COVERED_FOR_PS_ITER;
++ WREG32(DB_DEBUG4, db_debug4);
++ }
++
++ WREG32(SX_EXPORT_BUFFER_SIZES, (COLOR_BUFFER_SIZE((rdev->config.rv770.sx_max_export_size / 4) - 1) |
++ POSITION_BUFFER_SIZE((rdev->config.rv770.sx_max_export_pos_size / 4) - 1) |
++ SMX_BUFFER_SIZE((rdev->config.rv770.sx_max_export_smx_size / 4) - 1)));
++
++ WREG32(PA_SC_FIFO_SIZE, (SC_PRIM_FIFO_SIZE(rdev->config.rv770.sc_prim_fifo_size) |
++ SC_HIZ_TILE_FIFO_SIZE(rdev->config.rv770.sc_hiz_tile_fifo_size) |
++ SC_EARLYZ_TILE_FIFO_SIZE(rdev->config.rv770.sc_earlyz_tile_fifo_fize)));
++
++ WREG32(PA_SC_MULTI_CHIP_CNTL, 0);
++
++ WREG32(VGT_NUM_INSTANCES, 1);
+
+- /* FIXME: implement */
++ WREG32(SPI_CONFIG_CNTL, GPR_WRITE_PRIORITY(0));
++
++ WREG32(SPI_CONFIG_CNTL_1, VTX_DONE_DELAY(4));
++
++ WREG32(CP_PERFMON_CNTL, 0);
++
++ sq_ms_fifo_sizes = (CACHE_FIFO_SIZE(16 * rdev->config.rv770.sq_num_cf_insts) |
++ DONE_FIFO_HIWATER(0xe0) |
++ ALU_UPDATE_FIFO_HIWATER(0x8));
++ switch (rdev->family) {
++ case CHIP_RV770:
++ sq_ms_fifo_sizes |= FETCH_FIFO_HIWATER(0x1);
++ break;
++ case CHIP_RV730:
++ case CHIP_RV710:
++ case CHIP_RV740:
++ default:
++ sq_ms_fifo_sizes |= FETCH_FIFO_HIWATER(0x4);
++ break;
++ }
++ WREG32(SQ_MS_FIFO_SIZES, sq_ms_fifo_sizes);
++
++ /* SQ_CONFIG, SQ_GPR_RESOURCE_MGMT, SQ_THREAD_RESOURCE_MGMT, SQ_STACK_RESOURCE_MGMT
++ * should be adjusted as needed by the 2D/3D drivers. This just sets default values
++ */
++ sq_config = RREG32(SQ_CONFIG);
++ sq_config &= ~(PS_PRIO(3) |
++ VS_PRIO(3) |
++ GS_PRIO(3) |
++ ES_PRIO(3));
++ sq_config |= (DX9_CONSTS |
++ VC_ENABLE |
++ EXPORT_SRC_C |
++ PS_PRIO(0) |
++ VS_PRIO(1) |
++ GS_PRIO(2) |
++ ES_PRIO(3));
++ if (rdev->family == CHIP_RV710)
++ /* no vertex cache */
++ sq_config &= ~VC_ENABLE;
++
++ WREG32(SQ_CONFIG, sq_config);
++
++ WREG32(SQ_GPR_RESOURCE_MGMT_1, (NUM_PS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
++ NUM_VS_GPRS((rdev->config.rv770.max_gprs * 24)/64) |
++ NUM_CLAUSE_TEMP_GPRS(((rdev->config.rv770.max_gprs * 24)/64)/2)));
++
++ WREG32(SQ_GPR_RESOURCE_MGMT_2, (NUM_GS_GPRS((rdev->config.rv770.max_gprs * 7)/64) |
++ NUM_ES_GPRS((rdev->config.rv770.max_gprs * 7)/64)));
++
++ sq_thread_resource_mgmt = (NUM_PS_THREADS((rdev->config.rv770.max_threads * 4)/8) |
++ NUM_VS_THREADS((rdev->config.rv770.max_threads * 2)/8) |
++ NUM_ES_THREADS((rdev->config.rv770.max_threads * 1)/8));
++ if (((rdev->config.rv770.max_threads * 1) / 8) > rdev->config.rv770.max_gs_threads)
++ sq_thread_resource_mgmt |= NUM_GS_THREADS(rdev->config.rv770.max_gs_threads);
++ else
++ sq_thread_resource_mgmt |= NUM_GS_THREADS((rdev->config.rv770.max_gs_threads * 1)/8);
++ WREG32(SQ_THREAD_RESOURCE_MGMT, sq_thread_resource_mgmt);
++
++ WREG32(SQ_STACK_RESOURCE_MGMT_1, (NUM_PS_STACK_ENTRIES((rdev->config.rv770.max_stack_entries * 1)/4) |
++ NUM_VS_STACK_ENTRIES((rdev->config.rv770.max_stack_entries * 1)/4)));
++
++ WREG32(SQ_STACK_RESOURCE_MGMT_2, (NUM_GS_STACK_ENTRIES((rdev->config.rv770.max_stack_entries * 1)/4) |
++ NUM_ES_STACK_ENTRIES((rdev->config.rv770.max_stack_entries * 1)/4)));
++
++ sq_dyn_gpr_size_simd_ab_0 = (SIMDA_RING0((rdev->config.rv770.max_gprs * 38)/64) |
++ SIMDA_RING1((rdev->config.rv770.max_gprs * 38)/64) |
++ SIMDB_RING0((rdev->config.rv770.max_gprs * 38)/64) |
++ SIMDB_RING1((rdev->config.rv770.max_gprs * 38)/64));
++
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_0, sq_dyn_gpr_size_simd_ab_0);
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_1, sq_dyn_gpr_size_simd_ab_0);
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_2, sq_dyn_gpr_size_simd_ab_0);
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_3, sq_dyn_gpr_size_simd_ab_0);
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_4, sq_dyn_gpr_size_simd_ab_0);
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_5, sq_dyn_gpr_size_simd_ab_0);
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_6, sq_dyn_gpr_size_simd_ab_0);
++ WREG32(SQ_DYN_GPR_SIZE_SIMD_AB_7, sq_dyn_gpr_size_simd_ab_0);
++
++ WREG32(PA_SC_FORCE_EOV_MAX_CNTS, (FORCE_EOV_MAX_CLK_CNT(4095) |
++ FORCE_EOV_MAX_REZ_CNT(255)));
++
++ if (rdev->family == CHIP_RV710)
++ WREG32(VGT_CACHE_INVALIDATION, (CACHE_INVALIDATION(TC_ONLY) |
++ AUTO_INVLD_EN(ES_AND_GS_AUTO)));
++ else
++ WREG32(VGT_CACHE_INVALIDATION, (CACHE_INVALIDATION(VC_AND_TC) |
++ AUTO_INVLD_EN(ES_AND_GS_AUTO)));
++
++ switch (rdev->family) {
++ case CHIP_RV770:
++ case CHIP_RV730:
++ case CHIP_RV740:
++ gs_prim_buffer_depth = 384;
++ break;
++ case CHIP_RV710:
++ gs_prim_buffer_depth = 128;
++ break;
++ default:
++ break;
++ }
++
++ num_gs_verts_per_thread = rdev->config.rv770.max_pipes * 16;
++ vgt_gs_per_es = gs_prim_buffer_depth + num_gs_verts_per_thread;
++ /* Max value for this is 256 */
++ if (vgt_gs_per_es > 256)
++ vgt_gs_per_es = 256;
++
++ WREG32(VGT_ES_PER_GS, 128);
++ WREG32(VGT_GS_PER_ES, vgt_gs_per_es);
++ WREG32(VGT_GS_PER_VS, 2);
++
++ /* more default values. 2D/3D driver should adjust as needed */
++ WREG32(VGT_GS_VERTEX_REUSE, 16);
++ WREG32(PA_SC_LINE_STIPPLE_STATE, 0);
++ WREG32(VGT_STRMOUT_EN, 0);
++ WREG32(SX_MISC, 0);
++ WREG32(PA_SC_MODE_CNTL, 0);
++ WREG32(PA_SC_EDGERULE, 0xaaaaaaaa);
++ WREG32(PA_SC_AA_CONFIG, 0);
++ WREG32(PA_SC_CLIPRECT_RULE, 0xffff);
++ WREG32(PA_SC_LINE_STIPPLE, 0);
++ WREG32(SPI_INPUT_Z, 0);
++ WREG32(SPI_PS_IN_CONTROL_0, NUM_INTERP(2));
++ WREG32(CB_COLOR7_FRAG, 0);
++
++ /* clear render buffer base addresses */
++ WREG32(CB_COLOR0_BASE, 0);
++ WREG32(CB_COLOR1_BASE, 0);
++ WREG32(CB_COLOR2_BASE, 0);
++ WREG32(CB_COLOR3_BASE, 0);
++ WREG32(CB_COLOR4_BASE, 0);
++ WREG32(CB_COLOR5_BASE, 0);
++ WREG32(CB_COLOR6_BASE, 0);
++ WREG32(CB_COLOR7_BASE, 0);
++
++ WREG32(TCP_CNTL, 0);
++
++ hdp_host_path_cntl = RREG32(HDP_HOST_PATH_CNTL);
++ WREG32(HDP_HOST_PATH_CNTL, hdp_host_path_cntl);
++
++ WREG32(PA_SC_MULTI_CHIP_CNTL, 0);
++
++ WREG32(PA_CL_ENHANCE, (CLIP_VTX_REORDER_ENA |
++ NUM_CLIP_SEQ(3)));
++
++}
++
++int rv770_mc_init(struct radeon_device *rdev)
++{
++ fixed20_12 a;
++ u32 tmp;
++ int r;
++
++ /* Get VRAM informations */
++ /* FIXME: Don't know how to determine vram width, need to check
++ * vram_width usage
++ */
++ rdev->mc.vram_width = 128;
++ rdev->mc.vram_is_ddr = true;
+ /* Could aper size report 0 ? */
+ rdev->mc.aper_base = drm_get_resource_start(rdev->ddev, 0);
+ rdev->mc.aper_size = drm_get_resource_len(rdev->ddev, 0);
++ /* Setup GPU memory space */
++ rdev->mc.mc_vram_size = RREG32(CONFIG_MEMSIZE);
++ rdev->mc.real_vram_size = RREG32(CONFIG_MEMSIZE);
++
++ if (rdev->mc.mc_vram_size > rdev->mc.aper_size)
++ rdev->mc.mc_vram_size = rdev->mc.aper_size;
++
++ if (rdev->mc.real_vram_size > rdev->mc.aper_size)
++ rdev->mc.real_vram_size = rdev->mc.aper_size;
++
++ if (rdev->flags & RADEON_IS_AGP) {
++ r = radeon_agp_init(rdev);
++ if (r)
++ return r;
++ /* gtt_size is setup by radeon_agp_init */
++ rdev->mc.gtt_location = rdev->mc.agp_base;
++ tmp = 0xFFFFFFFFUL - rdev->mc.agp_base - rdev->mc.gtt_size;
++ /* Try to put vram before or after AGP because we
++ * we want SYSTEM_APERTURE to cover both VRAM and
++ * AGP so that GPU can catch out of VRAM/AGP access
++ */
++ if (rdev->mc.gtt_location > rdev->mc.mc_vram_size) {
++ /* Enought place before */
++ rdev->mc.vram_location = rdev->mc.gtt_location -
++ rdev->mc.mc_vram_size;
++ } else if (tmp > rdev->mc.mc_vram_size) {
++ /* Enought place after */
++ rdev->mc.vram_location = rdev->mc.gtt_location +
++ rdev->mc.gtt_size;
++ } else {
++ /* Try to setup VRAM then AGP might not
++ * not work on some card
++ */
++ rdev->mc.vram_location = 0x00000000UL;
++ rdev->mc.gtt_location = rdev->mc.mc_vram_size;
++ }
++ } else {
++ rdev->mc.vram_location = 0x00000000UL;
++ rdev->mc.gtt_location = rdev->mc.mc_vram_size;
++ rdev->mc.gtt_size = radeon_gart_size * 1024 * 1024;
++ }
++ rdev->mc.vram_start = rdev->mc.vram_location;
++ rdev->mc.vram_end = rdev->mc.vram_location + rdev->mc.mc_vram_size;
++ rdev->mc.gtt_start = rdev->mc.gtt_location;
++ rdev->mc.gtt_end = rdev->mc.gtt_location + rdev->mc.gtt_size;
++ /* FIXME: we should enforce default clock in case GPU is not in
++ * default setup
++ */
++ a.full = rfixed_const(100);
++ rdev->pm.sclk.full = rfixed_const(rdev->clock.default_sclk);
++ rdev->pm.sclk.full = rfixed_div(rdev->pm.sclk, a);
++ return 0;
++}
++int rv770_gpu_reset(struct radeon_device *rdev)
++{
++ /* FIXME: implement any rv770 specific bits */
++ return r600_gpu_reset(rdev);
++}
++
++static int rv770_startup(struct radeon_device *rdev)
++{
++ int r;
++
++ radeon_gpu_reset(rdev);
++ rv770_mc_resume(rdev);
++ r = rv770_pcie_gart_enable(rdev);
++ if (r)
++ return r;
++ rv770_gpu_init(rdev);
++
++ r = radeon_object_pin(rdev->r600_blit.shader_obj, RADEON_GEM_DOMAIN_VRAM,
++ &rdev->r600_blit.shader_gpu_addr);
++ if (r) {
++ DRM_ERROR("failed to pin blit object %d\n", r);
++ return r;
++ }
++
++ r = radeon_ring_init(rdev, rdev->cp.ring_size);
++ if (r)
++ return r;
++ r = rv770_cp_load_microcode(rdev);
++ if (r)
++ return r;
++ r = r600_cp_resume(rdev);
++ if (r)
++ return r;
++ r = r600_wb_init(rdev);
++ if (r)
++ return r;
++ return 0;
++}
++
++int rv770_resume(struct radeon_device *rdev)
++{
++ int r;
++
++ if (radeon_gpu_reset(rdev)) {
++ /* FIXME: what do we want to do here ? */
++ }
++ /* post card */
++ if (rdev->is_atom_bios) {
++ atom_asic_init(rdev->mode_info.atom_context);
++ } else {
++ radeon_combios_asic_init(rdev->ddev);
++ }
++ /* Initialize clocks */
++ r = radeon_clocks_init(rdev);
++ if (r) {
++ return r;
++ }
++
++ r = rv770_startup(rdev);
++ if (r) {
++ DRM_ERROR("r600 startup failed on resume\n");
++ return r;
++ }
++
++ r = radeon_ib_test(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled testing IB (%d).\n", r);
++ return r;
++ }
++ return r;
++
++}
++
++int rv770_suspend(struct radeon_device *rdev)
++{
++ /* FIXME: we should wait for ring to be empty */
++ r700_cp_stop(rdev);
++ rdev->cp.ready = false;
++ rv770_pcie_gart_disable(rdev);
++
++ /* unpin shaders bo */
++ radeon_object_unpin(rdev->r600_blit.shader_obj);
++ return 0;
++}
++
++/* Plan is to move initialization in that function and use
++ * helper function so that radeon_device_init pretty much
++ * do nothing more than calling asic specific function. This
++ * should also allow to remove a bunch of callback function
++ * like vram_info.
++ */
++int rv770_init(struct radeon_device *rdev)
++{
++ int r;
++
++ rdev->new_init_path = true;
++ r = radeon_dummy_page_init(rdev);
++ if (r)
++ return r;
++ /* This don't do much */
++ r = radeon_gem_init(rdev);
++ if (r)
++ return r;
++ /* Read BIOS */
++ if (!radeon_get_bios(rdev)) {
++ if (ASIC_IS_AVIVO(rdev))
++ return -EINVAL;
++ }
++ /* Must be an ATOMBIOS */
++ if (!rdev->is_atom_bios)
++ return -EINVAL;
++ r = radeon_atombios_init(rdev);
++ if (r)
++ return r;
++ /* Post card if necessary */
++ if (!r600_card_posted(rdev) && rdev->bios) {
++ DRM_INFO("GPU not posted. posting now...\n");
++ atom_asic_init(rdev->mode_info.atom_context);
++ }
++ /* Initialize scratch registers */
++ r600_scratch_init(rdev);
++ /* Initialize surface registers */
++ radeon_surface_init(rdev);
++ radeon_get_clock_info(rdev->ddev);
++ r = radeon_clocks_init(rdev);
++ if (r)
++ return r;
++ /* Fence driver */
++ r = radeon_fence_driver_init(rdev);
++ if (r)
++ return r;
++ r = rv770_mc_init(rdev);
++ if (r) {
++ if (rdev->flags & RADEON_IS_AGP) {
++ /* Retry with disabling AGP */
++ rv770_fini(rdev);
++ rdev->flags &= ~RADEON_IS_AGP;
++ return rv770_init(rdev);
++ }
++ return r;
++ }
++ /* Memory manager */
++ r = radeon_object_init(rdev);
++ if (r)
++ return r;
++ rdev->cp.ring_obj = NULL;
++ r600_ring_init(rdev, 1024 * 1024);
++
++ if (!rdev->me_fw || !rdev->pfp_fw) {
++ r = r600_cp_init_microcode(rdev);
++ if (r) {
++ DRM_ERROR("Failed to load firmware!\n");
++ return r;
++ }
++ }
++
++ r = r600_pcie_gart_init(rdev);
++ if (r)
++ return r;
++
++ rdev->accel_working = true;
++ r = r600_blit_init(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled blitter (%d).\n", r);
++ rdev->accel_working = false;
++ }
++
++ r = rv770_startup(rdev);
++ if (r) {
++ if (rdev->flags & RADEON_IS_AGP) {
++ /* Retry with disabling AGP */
++ rv770_fini(rdev);
++ rdev->flags &= ~RADEON_IS_AGP;
++ return rv770_init(rdev);
++ }
++ rdev->accel_working = false;
++ }
++ if (rdev->accel_working) {
++ r = radeon_ib_pool_init(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled initializing IB pool (%d).\n", r);
++ rdev->accel_working = false;
++ }
++ r = radeon_ib_test(rdev);
++ if (r) {
++ DRM_ERROR("radeon: failled testing IB (%d).\n", r);
++ rdev->accel_working = false;
++ }
++ }
++ return 0;
++}
++
++void rv770_fini(struct radeon_device *rdev)
++{
++ rv770_suspend(rdev);
++
++ r600_blit_fini(rdev);
++ radeon_ring_fini(rdev);
++ rv770_pcie_gart_fini(rdev);
++ radeon_gem_fini(rdev);
++ radeon_fence_driver_fini(rdev);
++ radeon_clocks_fini(rdev);
++#if __OS_HAS_AGP
++ if (rdev->flags & RADEON_IS_AGP)
++ radeon_agp_fini(rdev);
++#endif
++ radeon_object_fini(rdev);
++ if (rdev->is_atom_bios) {
++ radeon_atombios_fini(rdev);
++ } else {
++ radeon_combios_fini(rdev);
++ }
++ kfree(rdev->bios);
++ rdev->bios = NULL;
++ radeon_dummy_page_fini(rdev);
+ }
+diff --git a/drivers/gpu/drm/radeon/rv770d.h b/drivers/gpu/drm/radeon/rv770d.h
+new file mode 100644
+index 0000000..4b9c3d6
+--- /dev/null
++++ b/drivers/gpu/drm/radeon/rv770d.h
+@@ -0,0 +1,341 @@
++/*
++ * Copyright 2009 Advanced Micro Devices, Inc.
++ * Copyright 2009 Red Hat Inc.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice shall be included in
++ * all copies or substantial portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR
++ * OTHER DEALINGS IN THE SOFTWARE.
++ *
++ * Authors: Dave Airlie
++ * Alex Deucher
++ * Jerome Glisse
++ */
++#ifndef RV770_H
++#define RV770_H
++
++#define R7XX_MAX_SH_GPRS 256
++#define R7XX_MAX_TEMP_GPRS 16
++#define R7XX_MAX_SH_THREADS 256
++#define R7XX_MAX_SH_STACK_ENTRIES 4096
++#define R7XX_MAX_BACKENDS 8
++#define R7XX_MAX_BACKENDS_MASK 0xff
++#define R7XX_MAX_SIMDS 16
++#define R7XX_MAX_SIMDS_MASK 0xffff
++#define R7XX_MAX_PIPES 8
++#define R7XX_MAX_PIPES_MASK 0xff
++
++/* Registers */
++#define CB_COLOR0_BASE 0x28040
++#define CB_COLOR1_BASE 0x28044
++#define CB_COLOR2_BASE 0x28048
++#define CB_COLOR3_BASE 0x2804C
++#define CB_COLOR4_BASE 0x28050
++#define CB_COLOR5_BASE 0x28054
++#define CB_COLOR6_BASE 0x28058
++#define CB_COLOR7_BASE 0x2805C
++#define CB_COLOR7_FRAG 0x280FC
++
++#define CC_GC_SHADER_PIPE_CONFIG 0x8950
++#define CC_RB_BACKEND_DISABLE 0x98F4
++#define BACKEND_DISABLE(x) ((x) << 16)
++#define CC_SYS_RB_BACKEND_DISABLE 0x3F88
++
++#define CGTS_SYS_TCC_DISABLE 0x3F90
++#define CGTS_TCC_DISABLE 0x9148
++#define CGTS_USER_SYS_TCC_DISABLE 0x3F94
++#define CGTS_USER_TCC_DISABLE 0x914C
++
++#define CONFIG_MEMSIZE 0x5428
++
++#define CP_ME_CNTL 0x86D8
++#define CP_ME_HALT (1<<28)
++#define CP_PFP_HALT (1<<26)
++#define CP_ME_RAM_DATA 0xC160
++#define CP_ME_RAM_RADDR 0xC158
++#define CP_ME_RAM_WADDR 0xC15C
++#define CP_MEQ_THRESHOLDS 0x8764
++#define STQ_SPLIT(x) ((x) << 0)
++#define CP_PERFMON_CNTL 0x87FC
++#define CP_PFP_UCODE_ADDR 0xC150
++#define CP_PFP_UCODE_DATA 0xC154
++#define CP_QUEUE_THRESHOLDS 0x8760
++#define ROQ_IB1_START(x) ((x) << 0)
++#define ROQ_IB2_START(x) ((x) << 8)
++#define CP_RB_CNTL 0xC104
++#define RB_BUFSZ(x) ((x)<<0)
++#define RB_BLKSZ(x) ((x)<<8)
++#define RB_NO_UPDATE (1<<27)
++#define RB_RPTR_WR_ENA (1<<31)
++#define BUF_SWAP_32BIT (2 << 16)
++#define CP_RB_RPTR 0x8700
++#define CP_RB_RPTR_ADDR 0xC10C
++#define CP_RB_RPTR_ADDR_HI 0xC110
++#define CP_RB_RPTR_WR 0xC108
++#define CP_RB_WPTR 0xC114
++#define CP_RB_WPTR_ADDR 0xC118
++#define CP_RB_WPTR_ADDR_HI 0xC11C
++#define CP_RB_WPTR_DELAY 0x8704
++#define CP_SEM_WAIT_TIMER 0x85BC
++
++#define DB_DEBUG3 0x98B0
++#define DB_CLK_OFF_DELAY(x) ((x) << 11)
++#define DB_DEBUG4 0x9B8C
++#define DISABLE_TILE_COVERED_FOR_PS_ITER (1 << 6)
++
++#define DCP_TILING_CONFIG 0x6CA0
++#define PIPE_TILING(x) ((x) << 1)
++#define BANK_TILING(x) ((x) << 4)
++#define GROUP_SIZE(x) ((x) << 6)
++#define ROW_TILING(x) ((x) << 8)
++#define BANK_SWAPS(x) ((x) << 11)
++#define SAMPLE_SPLIT(x) ((x) << 14)
++#define BACKEND_MAP(x) ((x) << 16)
++
++#define GB_TILING_CONFIG 0x98F0
++
++#define GC_USER_SHADER_PIPE_CONFIG 0x8954
++#define INACTIVE_QD_PIPES(x) ((x) << 8)
++#define INACTIVE_QD_PIPES_MASK 0x0000FF00
++#define INACTIVE_SIMDS(x) ((x) << 16)
++#define INACTIVE_SIMDS_MASK 0x00FF0000
++
++#define GRBM_CNTL 0x8000
++#define GRBM_READ_TIMEOUT(x) ((x) << 0)
++#define GRBM_SOFT_RESET 0x8020
++#define SOFT_RESET_CP (1<<0)
++#define GRBM_STATUS 0x8010
++#define CMDFIFO_AVAIL_MASK 0x0000000F
++#define GUI_ACTIVE (1<<31)
++#define GRBM_STATUS2 0x8014
++
++#define HDP_HOST_PATH_CNTL 0x2C00
++#define HDP_NONSURFACE_BASE 0x2C04
++#define HDP_NONSURFACE_INFO 0x2C08
++#define HDP_NONSURFACE_SIZE 0x2C0C
++#define HDP_REG_COHERENCY_FLUSH_CNTL 0x54A0
++#define HDP_TILING_CONFIG 0x2F3C
++
++#define MC_ARB_RAMCFG 0x2760
++#define NOOFBANK_SHIFT 0
++#define NOOFBANK_MASK 0x00000003
++#define NOOFRANK_SHIFT 2
++#define NOOFRANK_MASK 0x00000004
++#define NOOFROWS_SHIFT 3
++#define NOOFROWS_MASK 0x00000038
++#define NOOFCOLS_SHIFT 6
++#define NOOFCOLS_MASK 0x000000C0
++#define CHANSIZE_SHIFT 8
++#define CHANSIZE_MASK 0x00000100
++#define BURSTLENGTH_SHIFT 9
++#define BURSTLENGTH_MASK 0x00000200
++#define MC_VM_AGP_TOP 0x2028
++#define MC_VM_AGP_BOT 0x202C
++#define MC_VM_AGP_BASE 0x2030
++#define MC_VM_FB_LOCATION 0x2024
++#define MC_VM_MB_L1_TLB0_CNTL 0x2234
++#define MC_VM_MB_L1_TLB1_CNTL 0x2238
++#define MC_VM_MB_L1_TLB2_CNTL 0x223C
++#define MC_VM_MB_L1_TLB3_CNTL 0x2240
++#define ENABLE_L1_TLB (1 << 0)
++#define ENABLE_L1_FRAGMENT_PROCESSING (1 << 1)
++#define SYSTEM_ACCESS_MODE_PA_ONLY (0 << 3)
++#define SYSTEM_ACCESS_MODE_USE_SYS_MAP (1 << 3)
++#define SYSTEM_ACCESS_MODE_IN_SYS (2 << 3)
++#define SYSTEM_ACCESS_MODE_NOT_IN_SYS (3 << 3)
++#define SYSTEM_APERTURE_UNMAPPED_ACCESS_PASS_THRU (0 << 5)
++#define EFFECTIVE_L1_TLB_SIZE(x) ((x)<<15)
++#define EFFECTIVE_L1_QUEUE_SIZE(x) ((x)<<18)
++#define MC_VM_MD_L1_TLB0_CNTL 0x2654
++#define MC_VM_MD_L1_TLB1_CNTL 0x2658
++#define MC_VM_MD_L1_TLB2_CNTL 0x265C
++#define MC_VM_SYSTEM_APERTURE_DEFAULT_ADDR 0x203C
++#define MC_VM_SYSTEM_APERTURE_HIGH_ADDR 0x2038
++#define MC_VM_SYSTEM_APERTURE_LOW_ADDR 0x2034
++
++#define PA_CL_ENHANCE 0x8A14
++#define CLIP_VTX_REORDER_ENA (1 << 0)
++#define NUM_CLIP_SEQ(x) ((x) << 1)
++#define PA_SC_AA_CONFIG 0x28C04
++#define PA_SC_CLIPRECT_RULE 0x2820C
++#define PA_SC_EDGERULE 0x28230
++#define PA_SC_FIFO_SIZE 0x8BCC
++#define SC_PRIM_FIFO_SIZE(x) ((x) << 0)
++#define SC_HIZ_TILE_FIFO_SIZE(x) ((x) << 12)
++#define PA_SC_FORCE_EOV_MAX_CNTS 0x8B24
++#define FORCE_EOV_MAX_CLK_CNT(x) ((x)<<0)
++#define FORCE_EOV_MAX_REZ_CNT(x) ((x)<<16)
++#define PA_SC_LINE_STIPPLE 0x28A0C
++#define PA_SC_LINE_STIPPLE_STATE 0x8B10
++#define PA_SC_MODE_CNTL 0x28A4C
++#define PA_SC_MULTI_CHIP_CNTL 0x8B20
++#define SC_EARLYZ_TILE_FIFO_SIZE(x) ((x) << 20)
++
++#define SCRATCH_REG0 0x8500
++#define SCRATCH_REG1 0x8504
++#define SCRATCH_REG2 0x8508
++#define SCRATCH_REG3 0x850C
++#define SCRATCH_REG4 0x8510
++#define SCRATCH_REG5 0x8514
++#define SCRATCH_REG6 0x8518
++#define SCRATCH_REG7 0x851C
++#define SCRATCH_UMSK 0x8540
++#define SCRATCH_ADDR 0x8544
++
++#define SMX_DC_CTL0 0xA020
++#define USE_HASH_FUNCTION (1 << 0)
++#define CACHE_DEPTH(x) ((x) << 1)
++#define FLUSH_ALL_ON_EVENT (1 << 10)
++#define STALL_ON_EVENT (1 << 11)
++#define SMX_EVENT_CTL 0xA02C
++#define ES_FLUSH_CTL(x) ((x) << 0)
++#define GS_FLUSH_CTL(x) ((x) << 3)
++#define ACK_FLUSH_CTL(x) ((x) << 6)
++#define SYNC_FLUSH_CTL (1 << 8)
++
++#define SPI_CONFIG_CNTL 0x9100
++#define GPR_WRITE_PRIORITY(x) ((x) << 0)
++#define DISABLE_INTERP_1 (1 << 5)
++#define SPI_CONFIG_CNTL_1 0x913C
++#define VTX_DONE_DELAY(x) ((x) << 0)
++#define INTERP_ONE_PRIM_PER_ROW (1 << 4)
++#define SPI_INPUT_Z 0x286D8
++#define SPI_PS_IN_CONTROL_0 0x286CC
++#define NUM_INTERP(x) ((x)<<0)
++#define POSITION_ENA (1<<8)
++#define POSITION_CENTROID (1<<9)
++#define POSITION_ADDR(x) ((x)<<10)
++#define PARAM_GEN(x) ((x)<<15)
++#define PARAM_GEN_ADDR(x) ((x)<<19)
++#define BARYC_SAMPLE_CNTL(x) ((x)<<26)
++#define PERSP_GRADIENT_ENA (1<<28)
++#define LINEAR_GRADIENT_ENA (1<<29)
++#define POSITION_SAMPLE (1<<30)
++#define BARYC_AT_SAMPLE_ENA (1<<31)
++
++#define SQ_CONFIG 0x8C00
++#define VC_ENABLE (1 << 0)
++#define EXPORT_SRC_C (1 << 1)
++#define DX9_CONSTS (1 << 2)
++#define ALU_INST_PREFER_VECTOR (1 << 3)
++#define DX10_CLAMP (1 << 4)
++#define CLAUSE_SEQ_PRIO(x) ((x) << 8)
++#define PS_PRIO(x) ((x) << 24)
++#define VS_PRIO(x) ((x) << 26)
++#define GS_PRIO(x) ((x) << 28)
++#define SQ_DYN_GPR_SIZE_SIMD_AB_0 0x8DB0
++#define SIMDA_RING0(x) ((x)<<0)
++#define SIMDA_RING1(x) ((x)<<8)
++#define SIMDB_RING0(x) ((x)<<16)
++#define SIMDB_RING1(x) ((x)<<24)
++#define SQ_DYN_GPR_SIZE_SIMD_AB_1 0x8DB4
++#define SQ_DYN_GPR_SIZE_SIMD_AB_2 0x8DB8
++#define SQ_DYN_GPR_SIZE_SIMD_AB_3 0x8DBC
++#define SQ_DYN_GPR_SIZE_SIMD_AB_4 0x8DC0
++#define SQ_DYN_GPR_SIZE_SIMD_AB_5 0x8DC4
++#define SQ_DYN_GPR_SIZE_SIMD_AB_6 0x8DC8
++#define SQ_DYN_GPR_SIZE_SIMD_AB_7 0x8DCC
++#define ES_PRIO(x) ((x) << 30)
++#define SQ_GPR_RESOURCE_MGMT_1 0x8C04
++#define NUM_PS_GPRS(x) ((x) << 0)
++#define NUM_VS_GPRS(x) ((x) << 16)
++#define DYN_GPR_ENABLE (1 << 27)
++#define NUM_CLAUSE_TEMP_GPRS(x) ((x) << 28)
++#define SQ_GPR_RESOURCE_MGMT_2 0x8C08
++#define NUM_GS_GPRS(x) ((x) << 0)
++#define NUM_ES_GPRS(x) ((x) << 16)
++#define SQ_MS_FIFO_SIZES 0x8CF0
++#define CACHE_FIFO_SIZE(x) ((x) << 0)
++#define FETCH_FIFO_HIWATER(x) ((x) << 8)
++#define DONE_FIFO_HIWATER(x) ((x) << 16)
++#define ALU_UPDATE_FIFO_HIWATER(x) ((x) << 24)
++#define SQ_STACK_RESOURCE_MGMT_1 0x8C10
++#define NUM_PS_STACK_ENTRIES(x) ((x) << 0)
++#define NUM_VS_STACK_ENTRIES(x) ((x) << 16)
++#define SQ_STACK_RESOURCE_MGMT_2 0x8C14
++#define NUM_GS_STACK_ENTRIES(x) ((x) << 0)
++#define NUM_ES_STACK_ENTRIES(x) ((x) << 16)
++#define SQ_THREAD_RESOURCE_MGMT 0x8C0C
++#define NUM_PS_THREADS(x) ((x) << 0)
++#define NUM_VS_THREADS(x) ((x) << 8)
++#define NUM_GS_THREADS(x) ((x) << 16)
++#define NUM_ES_THREADS(x) ((x) << 24)
++
++#define SX_DEBUG_1 0x9058
++#define ENABLE_NEW_SMX_ADDRESS (1 << 16)
++#define SX_EXPORT_BUFFER_SIZES 0x900C
++#define COLOR_BUFFER_SIZE(x) ((x) << 0)
++#define POSITION_BUFFER_SIZE(x) ((x) << 8)
++#define SMX_BUFFER_SIZE(x) ((x) << 16)
++#define SX_MISC 0x28350
++
++#define TA_CNTL_AUX 0x9508
++#define DISABLE_CUBE_WRAP (1 << 0)
++#define DISABLE_CUBE_ANISO (1 << 1)
++#define SYNC_GRADIENT (1 << 24)
++#define SYNC_WALKER (1 << 25)
++#define SYNC_ALIGNER (1 << 26)
++#define BILINEAR_PRECISION_6_BIT (0 << 31)
++#define BILINEAR_PRECISION_8_BIT (1 << 31)
++
++#define TCP_CNTL 0x9610
++
++#define VGT_CACHE_INVALIDATION 0x88C4
++#define CACHE_INVALIDATION(x) ((x)<<0)
++#define VC_ONLY 0
++#define TC_ONLY 1
++#define VC_AND_TC 2
++#define AUTO_INVLD_EN(x) ((x) << 6)
++#define NO_AUTO 0
++#define ES_AUTO 1
++#define GS_AUTO 2
++#define ES_AND_GS_AUTO 3
++#define VGT_ES_PER_GS 0x88CC
++#define VGT_GS_PER_ES 0x88C8
++#define VGT_GS_PER_VS 0x88E8
++#define VGT_GS_VERTEX_REUSE 0x88D4
++#define VGT_NUM_INSTANCES 0x8974
++#define VGT_OUT_DEALLOC_CNTL 0x28C5C
++#define DEALLOC_DIST_MASK 0x0000007F
++#define VGT_STRMOUT_EN 0x28AB0
++#define VGT_VERTEX_REUSE_BLOCK_CNTL 0x28C58
++#define VTX_REUSE_DEPTH_MASK 0x000000FF
++
++#define VM_CONTEXT0_CNTL 0x1410
++#define ENABLE_CONTEXT (1 << 0)
++#define PAGE_TABLE_DEPTH(x) (((x) & 3) << 1)
++#define RANGE_PROTECTION_FAULT_ENABLE_DEFAULT (1 << 4)
++#define VM_CONTEXT0_PAGE_TABLE_BASE_ADDR 0x153C
++#define VM_CONTEXT0_PAGE_TABLE_END_ADDR 0x157C
++#define VM_CONTEXT0_PAGE_TABLE_START_ADDR 0x155C
++#define VM_CONTEXT0_PROTECTION_FAULT_DEFAULT_ADDR 0x1518
++#define VM_L2_CNTL 0x1400
++#define ENABLE_L2_CACHE (1 << 0)
++#define ENABLE_L2_FRAGMENT_PROCESSING (1 << 1)
++#define ENABLE_L2_PTE_CACHE_LRU_UPDATE_BY_WRITE (1 << 9)
++#define EFFECTIVE_L2_QUEUE_SIZE(x) (((x) & 7) << 14)
++#define VM_L2_CNTL2 0x1404
++#define INVALIDATE_ALL_L1_TLBS (1 << 0)
++#define INVALIDATE_L2_CACHE (1 << 1)
++#define VM_L2_CNTL3 0x1408
++#define BANK_SELECT(x) ((x) << 0)
++#define CACHE_UPDATE_MODE(x) ((x) << 6)
++#define VM_L2_STATUS 0x140C
++#define L2_BUSY (1 << 0)
++
++#define WAIT_UNTIL 0x8040
++
++#endif
+diff --git a/drivers/gpu/drm/ttm/ttm_bo.c b/drivers/gpu/drm/ttm/ttm_bo.c
+index c2b0d71..87c0625 100644
+--- a/drivers/gpu/drm/ttm/ttm_bo.c
++++ b/drivers/gpu/drm/ttm/ttm_bo.c
+@@ -44,6 +44,39 @@
+
+ static int ttm_bo_setup_vm(struct ttm_buffer_object *bo);
+ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink);
++static void ttm_bo_global_kobj_release(struct kobject *kobj);
++
++static struct attribute ttm_bo_count = {
++ .name = "bo_count",
++ .mode = S_IRUGO
++};
++
++static ssize_t ttm_bo_global_show(struct kobject *kobj,
++ struct attribute *attr,
++ char *buffer)
++{
++ struct ttm_bo_global *glob =
++ container_of(kobj, struct ttm_bo_global, kobj);
++
++ return snprintf(buffer, PAGE_SIZE, "%lu\n",
++ (unsigned long) atomic_read(&glob->bo_count));
++}
++
++static struct attribute *ttm_bo_global_attrs[] = {
++ &ttm_bo_count,
++ NULL
++};
++
++static struct sysfs_ops ttm_bo_global_ops = {
++ .show = &ttm_bo_global_show
++};
++
++static struct kobj_type ttm_bo_glob_kobj_type = {
++ .release = &ttm_bo_global_kobj_release,
++ .sysfs_ops = &ttm_bo_global_ops,
++ .default_attrs = ttm_bo_global_attrs
++};
++
+
+ static inline uint32_t ttm_bo_type_flags(unsigned type)
+ {
+@@ -66,10 +99,11 @@ static void ttm_bo_release_list(struct kref *list_kref)
+
+ if (bo->ttm)
+ ttm_tt_destroy(bo->ttm);
++ atomic_dec(&bo->glob->bo_count);
+ if (bo->destroy)
+ bo->destroy(bo);
+ else {
+- ttm_mem_global_free(bdev->mem_glob, bo->acc_size, false);
++ ttm_mem_global_free(bdev->glob->mem_glob, bo->acc_size);
+ kfree(bo);
+ }
+ }
+@@ -106,7 +140,7 @@ static void ttm_bo_add_to_lru(struct ttm_buffer_object *bo)
+ kref_get(&bo->list_kref);
+
+ if (bo->ttm != NULL) {
+- list_add_tail(&bo->swap, &bdev->swap_lru);
++ list_add_tail(&bo->swap, &bo->glob->swap_lru);
+ kref_get(&bo->list_kref);
+ }
+ }
+@@ -141,7 +175,7 @@ int ttm_bo_reserve_locked(struct ttm_buffer_object *bo,
+ bool interruptible,
+ bool no_wait, bool use_sequence, uint32_t sequence)
+ {
+- struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+ int ret;
+
+ while (unlikely(atomic_cmpxchg(&bo->reserved, 0, 1) != 0)) {
+@@ -153,9 +187,9 @@ int ttm_bo_reserve_locked(struct ttm_buffer_object *bo,
+ if (no_wait)
+ return -EBUSY;
+
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ ret = ttm_bo_wait_unreserved(bo, interruptible);
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+
+ if (unlikely(ret))
+ return ret;
+@@ -181,16 +215,16 @@ int ttm_bo_reserve(struct ttm_buffer_object *bo,
+ bool interruptible,
+ bool no_wait, bool use_sequence, uint32_t sequence)
+ {
+- struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+ int put_count = 0;
+ int ret;
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ ret = ttm_bo_reserve_locked(bo, interruptible, no_wait, use_sequence,
+ sequence);
+ if (likely(ret == 0))
+ put_count = ttm_bo_del_from_lru(bo);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+
+ while (put_count--)
+ kref_put(&bo->list_kref, ttm_bo_ref_bug);
+@@ -200,13 +234,13 @@ int ttm_bo_reserve(struct ttm_buffer_object *bo,
+
+ void ttm_bo_unreserve(struct ttm_buffer_object *bo)
+ {
+- struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ ttm_bo_add_to_lru(bo);
+ atomic_set(&bo->reserved, 0);
+ wake_up_all(&bo->event_queue);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ }
+ EXPORT_SYMBOL(ttm_bo_unreserve);
+
+@@ -217,6 +251,7 @@ EXPORT_SYMBOL(ttm_bo_unreserve);
+ static int ttm_bo_add_ttm(struct ttm_buffer_object *bo, bool zero_alloc)
+ {
+ struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+ int ret = 0;
+ uint32_t page_flags = 0;
+
+@@ -232,14 +267,14 @@ static int ttm_bo_add_ttm(struct ttm_buffer_object *bo, bool zero_alloc)
+ page_flags |= TTM_PAGE_FLAG_ZERO_ALLOC;
+ case ttm_bo_type_kernel:
+ bo->ttm = ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT,
+- page_flags, bdev->dummy_read_page);
++ page_flags, glob->dummy_read_page);
+ if (unlikely(bo->ttm == NULL))
+ ret = -ENOMEM;
+ break;
+ case ttm_bo_type_user:
+ bo->ttm = ttm_tt_create(bdev, bo->num_pages << PAGE_SHIFT,
+ page_flags | TTM_PAGE_FLAG_USER,
+- bdev->dummy_read_page);
++ glob->dummy_read_page);
+ if (unlikely(bo->ttm == NULL))
+ ret = -ENOMEM;
+ break;
+@@ -360,6 +395,7 @@ out_err:
+ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
+ {
+ struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+ struct ttm_bo_driver *driver = bdev->driver;
+ int ret;
+
+@@ -371,7 +407,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
+
+ spin_unlock(&bo->lock);
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ ret = ttm_bo_reserve_locked(bo, false, false, false, 0);
+ BUG_ON(ret);
+ if (bo->ttm)
+@@ -386,7 +422,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
+ bo->mem.mm_node = NULL;
+ }
+ put_count = ttm_bo_del_from_lru(bo);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+
+ atomic_set(&bo->reserved, 0);
+
+@@ -396,14 +432,14 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
+ return 0;
+ }
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ if (list_empty(&bo->ddestroy)) {
+ void *sync_obj = bo->sync_obj;
+ void *sync_obj_arg = bo->sync_obj_arg;
+
+ kref_get(&bo->list_kref);
+ list_add_tail(&bo->ddestroy, &bdev->ddestroy);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ spin_unlock(&bo->lock);
+
+ if (sync_obj)
+@@ -413,7 +449,7 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
+ ret = 0;
+
+ } else {
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ spin_unlock(&bo->lock);
+ ret = -EBUSY;
+ }
+@@ -428,11 +464,12 @@ static int ttm_bo_cleanup_refs(struct ttm_buffer_object *bo, bool remove_all)
+
+ static int ttm_bo_delayed_delete(struct ttm_bo_device *bdev, bool remove_all)
+ {
++ struct ttm_bo_global *glob = bdev->glob;
+ struct ttm_buffer_object *entry, *nentry;
+ struct list_head *list, *next;
+ int ret;
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ list_for_each_safe(list, next, &bdev->ddestroy) {
+ entry = list_entry(list, struct ttm_buffer_object, ddestroy);
+ nentry = NULL;
+@@ -449,16 +486,16 @@ static int ttm_bo_delayed_delete(struct ttm_bo_device *bdev, bool remove_all)
+ }
+ kref_get(&entry->list_kref);
+
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ ret = ttm_bo_cleanup_refs(entry, remove_all);
+ kref_put(&entry->list_kref, ttm_bo_release_list);
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ if (nentry) {
+ bool next_onlist = !list_empty(next);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ kref_put(&nentry->list_kref, ttm_bo_release_list);
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ /*
+ * Someone might have raced us and removed the
+ * next entry from the list. We don't bother restarting
+@@ -472,7 +509,7 @@ static int ttm_bo_delayed_delete(struct ttm_bo_device *bdev, bool remove_all)
+ break;
+ }
+ ret = !list_empty(&bdev->ddestroy);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+
+ return ret;
+ }
+@@ -522,6 +559,7 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, unsigned mem_type,
+ {
+ int ret = 0;
+ struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+ struct ttm_mem_reg evict_mem;
+ uint32_t proposed_placement;
+
+@@ -570,12 +608,12 @@ static int ttm_bo_evict(struct ttm_buffer_object *bo, unsigned mem_type,
+ goto out;
+ }
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ if (evict_mem.mm_node) {
+ drm_mm_put_block(evict_mem.mm_node);
+ evict_mem.mm_node = NULL;
+ }
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ bo->evicted = true;
+ out:
+ return ret;
+@@ -590,6 +628,7 @@ static int ttm_bo_mem_force_space(struct ttm_bo_device *bdev,
+ uint32_t mem_type,
+ bool interruptible, bool no_wait)
+ {
++ struct ttm_bo_global *glob = bdev->glob;
+ struct drm_mm_node *node;
+ struct ttm_buffer_object *entry;
+ struct ttm_mem_type_manager *man = &bdev->man[mem_type];
+@@ -603,7 +642,7 @@ retry_pre_get:
+ if (unlikely(ret != 0))
+ return ret;
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ do {
+ node = drm_mm_search_free(&man->manager, num_pages,
+ mem->page_alignment, 1);
+@@ -624,7 +663,7 @@ retry_pre_get:
+ if (likely(ret == 0))
+ put_count = ttm_bo_del_from_lru(entry);
+
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+
+ if (unlikely(ret != 0))
+ return ret;
+@@ -640,21 +679,21 @@ retry_pre_get:
+ if (ret)
+ return ret;
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ } while (1);
+
+ if (!node) {
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ return -ENOMEM;
+ }
+
+ node = drm_mm_get_block_atomic(node, num_pages, mem->page_alignment);
+ if (unlikely(!node)) {
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ goto retry_pre_get;
+ }
+
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ mem->mm_node = node;
+ mem->mem_type = mem_type;
+ return 0;
+@@ -723,6 +762,7 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
+ bool interruptible, bool no_wait)
+ {
+ struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+ struct ttm_mem_type_manager *man;
+
+ uint32_t num_prios = bdev->driver->num_mem_type_prio;
+@@ -762,20 +802,20 @@ int ttm_bo_mem_space(struct ttm_buffer_object *bo,
+ if (unlikely(ret))
+ return ret;
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ node = drm_mm_search_free(&man->manager,
+ mem->num_pages,
+ mem->page_alignment,
+ 1);
+ if (unlikely(!node)) {
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ break;
+ }
+ node = drm_mm_get_block_atomic(node,
+ mem->num_pages,
+ mem->
+ page_alignment);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ } while (!node);
+ }
+ if (node)
+@@ -848,7 +888,7 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
+ uint32_t proposed_placement,
+ bool interruptible, bool no_wait)
+ {
+- struct ttm_bo_device *bdev = bo->bdev;
++ struct ttm_bo_global *glob = bo->glob;
+ int ret = 0;
+ struct ttm_mem_reg mem;
+
+@@ -884,9 +924,9 @@ int ttm_bo_move_buffer(struct ttm_buffer_object *bo,
+
+ out_unlock:
+ if (ret && mem.mm_node) {
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ drm_mm_put_block(mem.mm_node);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ }
+ return ret;
+ }
+@@ -1022,6 +1062,7 @@ int ttm_buffer_object_init(struct ttm_bo_device *bdev,
+ INIT_LIST_HEAD(&bo->ddestroy);
+ INIT_LIST_HEAD(&bo->swap);
+ bo->bdev = bdev;
++ bo->glob = bdev->glob;
+ bo->type = type;
+ bo->num_pages = num_pages;
+ bo->mem.mem_type = TTM_PL_SYSTEM;
+@@ -1034,6 +1075,7 @@ int ttm_buffer_object_init(struct ttm_bo_device *bdev,
+ bo->seq_valid = false;
+ bo->persistant_swap_storage = persistant_swap_storage;
+ bo->acc_size = acc_size;
++ atomic_inc(&bo->glob->bo_count);
+
+ ret = ttm_bo_check_placement(bo, flags, 0ULL);
+ if (unlikely(ret != 0))
+@@ -1072,13 +1114,13 @@ out_err:
+ }
+ EXPORT_SYMBOL(ttm_buffer_object_init);
+
+-static inline size_t ttm_bo_size(struct ttm_bo_device *bdev,
++static inline size_t ttm_bo_size(struct ttm_bo_global *glob,
+ unsigned long num_pages)
+ {
+ size_t page_array_size = (num_pages * sizeof(void *) + PAGE_SIZE - 1) &
+ PAGE_MASK;
+
+- return bdev->ttm_bo_size + 2 * page_array_size;
++ return glob->ttm_bo_size + 2 * page_array_size;
+ }
+
+ int ttm_buffer_object_create(struct ttm_bo_device *bdev,
+@@ -1093,18 +1135,18 @@ int ttm_buffer_object_create(struct ttm_bo_device *bdev,
+ {
+ struct ttm_buffer_object *bo;
+ int ret;
+- struct ttm_mem_global *mem_glob = bdev->mem_glob;
++ struct ttm_mem_global *mem_glob = bdev->glob->mem_glob;
+
+ size_t acc_size =
+- ttm_bo_size(bdev, (size + PAGE_SIZE - 1) >> PAGE_SHIFT);
+- ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false, false);
++ ttm_bo_size(bdev->glob, (size + PAGE_SIZE - 1) >> PAGE_SHIFT);
++ ret = ttm_mem_global_alloc(mem_glob, acc_size, false, false);
+ if (unlikely(ret != 0))
+ return ret;
+
+ bo = kzalloc(sizeof(*bo), GFP_KERNEL);
+
+ if (unlikely(bo == NULL)) {
+- ttm_mem_global_free(mem_glob, acc_size, false);
++ ttm_mem_global_free(mem_glob, acc_size);
+ return -ENOMEM;
+ }
+
+@@ -1150,6 +1192,7 @@ static int ttm_bo_force_list_clean(struct ttm_bo_device *bdev,
+ struct list_head *head,
+ unsigned mem_type, bool allow_errors)
+ {
++ struct ttm_bo_global *glob = bdev->glob;
+ struct ttm_buffer_object *entry;
+ int ret;
+ int put_count;
+@@ -1158,30 +1201,31 @@ static int ttm_bo_force_list_clean(struct ttm_bo_device *bdev,
+ * Can't use standard list traversal since we're unlocking.
+ */
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+
+ while (!list_empty(head)) {
+ entry = list_first_entry(head, struct ttm_buffer_object, lru);
+ kref_get(&entry->list_kref);
+ ret = ttm_bo_reserve_locked(entry, false, false, false, 0);
+ put_count = ttm_bo_del_from_lru(entry);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ while (put_count--)
+ kref_put(&entry->list_kref, ttm_bo_ref_bug);
+ BUG_ON(ret);
+ ret = ttm_bo_leave_list(entry, mem_type, allow_errors);
+ ttm_bo_unreserve(entry);
+ kref_put(&entry->list_kref, ttm_bo_release_list);
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ }
+
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+
+ return 0;
+ }
+
+ int ttm_bo_clean_mm(struct ttm_bo_device *bdev, unsigned mem_type)
+ {
++ struct ttm_bo_global *glob = bdev->glob;
+ struct ttm_mem_type_manager *man;
+ int ret = -EINVAL;
+
+@@ -1204,13 +1248,13 @@ int ttm_bo_clean_mm(struct ttm_bo_device *bdev, unsigned mem_type)
+ if (mem_type > 0) {
+ ttm_bo_force_list_clean(bdev, &man->lru, mem_type, false);
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ if (drm_mm_clean(&man->manager))
+ drm_mm_takedown(&man->manager);
+ else
+ ret = -EBUSY;
+
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ }
+
+ return ret;
+@@ -1284,11 +1328,82 @@ int ttm_bo_init_mm(struct ttm_bo_device *bdev, unsigned type,
+ }
+ EXPORT_SYMBOL(ttm_bo_init_mm);
+
++static void ttm_bo_global_kobj_release(struct kobject *kobj)
++{
++ struct ttm_bo_global *glob =
++ container_of(kobj, struct ttm_bo_global, kobj);
++
++ ttm_mem_unregister_shrink(glob->mem_glob, &glob->shrink);
++ __free_page(glob->dummy_read_page);
++ kfree(glob);
++}
++
++void ttm_bo_global_release(struct ttm_global_reference *ref)
++{
++ struct ttm_bo_global *glob = ref->object;
++
++ kobject_del(&glob->kobj);
++ kobject_put(&glob->kobj);
++}
++EXPORT_SYMBOL(ttm_bo_global_release);
++
++int ttm_bo_global_init(struct ttm_global_reference *ref)
++{
++ struct ttm_bo_global_ref *bo_ref =
++ container_of(ref, struct ttm_bo_global_ref, ref);
++ struct ttm_bo_global *glob = ref->object;
++ int ret;
++
++ mutex_init(&glob->device_list_mutex);
++ spin_lock_init(&glob->lru_lock);
++ glob->mem_glob = bo_ref->mem_glob;
++ glob->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32);
++
++ if (unlikely(glob->dummy_read_page == NULL)) {
++ ret = -ENOMEM;
++ goto out_no_drp;
++ }
++
++ INIT_LIST_HEAD(&glob->swap_lru);
++ INIT_LIST_HEAD(&glob->device_list);
++
++ ttm_mem_init_shrink(&glob->shrink, ttm_bo_swapout);
++ ret = ttm_mem_register_shrink(glob->mem_glob, &glob->shrink);
++ if (unlikely(ret != 0)) {
++ printk(KERN_ERR TTM_PFX
++ "Could not register buffer object swapout.\n");
++ goto out_no_shrink;
++ }
++
++ glob->ttm_bo_extra_size =
++ ttm_round_pot(sizeof(struct ttm_tt)) +
++ ttm_round_pot(sizeof(struct ttm_backend));
++
++ glob->ttm_bo_size = glob->ttm_bo_extra_size +
++ ttm_round_pot(sizeof(struct ttm_buffer_object));
++
++ atomic_set(&glob->bo_count, 0);
++
++ kobject_init(&glob->kobj, &ttm_bo_glob_kobj_type);
++ ret = kobject_add(&glob->kobj, ttm_get_kobj(), "buffer_objects");
++ if (unlikely(ret != 0))
++ kobject_put(&glob->kobj);
++ return ret;
++out_no_shrink:
++ __free_page(glob->dummy_read_page);
++out_no_drp:
++ kfree(glob);
++ return ret;
++}
++EXPORT_SYMBOL(ttm_bo_global_init);
++
++
+ int ttm_bo_device_release(struct ttm_bo_device *bdev)
+ {
+ int ret = 0;
+ unsigned i = TTM_NUM_MEM_TYPES;
+ struct ttm_mem_type_manager *man;
++ struct ttm_bo_global *glob = bdev->glob;
+
+ while (i--) {
+ man = &bdev->man[i];
+@@ -1304,100 +1419,74 @@ int ttm_bo_device_release(struct ttm_bo_device *bdev)
+ }
+ }
+
++ mutex_lock(&glob->device_list_mutex);
++ list_del(&bdev->device_list);
++ mutex_unlock(&glob->device_list_mutex);
++
+ if (!cancel_delayed_work(&bdev->wq))
+ flush_scheduled_work();
+
+ while (ttm_bo_delayed_delete(bdev, true))
+ ;
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ if (list_empty(&bdev->ddestroy))
+ TTM_DEBUG("Delayed destroy list was clean\n");
+
+ if (list_empty(&bdev->man[0].lru))
+ TTM_DEBUG("Swap list was clean\n");
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+
+- ttm_mem_unregister_shrink(bdev->mem_glob, &bdev->shrink);
+ BUG_ON(!drm_mm_clean(&bdev->addr_space_mm));
+ write_lock(&bdev->vm_lock);
+ drm_mm_takedown(&bdev->addr_space_mm);
+ write_unlock(&bdev->vm_lock);
+
+- __free_page(bdev->dummy_read_page);
+ return ret;
+ }
+ EXPORT_SYMBOL(ttm_bo_device_release);
+
+-/*
+- * This function is intended to be called on drm driver load.
+- * If you decide to call it from firstopen, you must protect the call
+- * from a potentially racing ttm_bo_driver_finish in lastclose.
+- * (This may happen on X server restart).
+- */
+-
+ int ttm_bo_device_init(struct ttm_bo_device *bdev,
+- struct ttm_mem_global *mem_glob,
+- struct ttm_bo_driver *driver, uint64_t file_page_offset,
++ struct ttm_bo_global *glob,
++ struct ttm_bo_driver *driver,
++ uint64_t file_page_offset,
+ bool need_dma32)
+ {
+ int ret = -EINVAL;
+
+- bdev->dummy_read_page = NULL;
+ rwlock_init(&bdev->vm_lock);
+- spin_lock_init(&bdev->lru_lock);
+-
+ bdev->driver = driver;
+- bdev->mem_glob = mem_glob;
+
+ memset(bdev->man, 0, sizeof(bdev->man));
+
+- bdev->dummy_read_page = alloc_page(__GFP_ZERO | GFP_DMA32);
+- if (unlikely(bdev->dummy_read_page == NULL)) {
+- ret = -ENOMEM;
+- goto out_err0;
+- }
+-
+ /*
+ * Initialize the system memory buffer type.
+ * Other types need to be driver / IOCTL initialized.
+ */
+ ret = ttm_bo_init_mm(bdev, TTM_PL_SYSTEM, 0, 0);
+ if (unlikely(ret != 0))
+- goto out_err1;
++ goto out_no_sys;
+
+ bdev->addr_space_rb = RB_ROOT;
+ ret = drm_mm_init(&bdev->addr_space_mm, file_page_offset, 0x10000000);
+ if (unlikely(ret != 0))
+- goto out_err2;
++ goto out_no_addr_mm;
+
+ INIT_DELAYED_WORK(&bdev->wq, ttm_bo_delayed_workqueue);
+ bdev->nice_mode = true;
+ INIT_LIST_HEAD(&bdev->ddestroy);
+- INIT_LIST_HEAD(&bdev->swap_lru);
+ bdev->dev_mapping = NULL;
++ bdev->glob = glob;
+ bdev->need_dma32 = need_dma32;
+- ttm_mem_init_shrink(&bdev->shrink, ttm_bo_swapout);
+- ret = ttm_mem_register_shrink(mem_glob, &bdev->shrink);
+- if (unlikely(ret != 0)) {
+- printk(KERN_ERR TTM_PFX
+- "Could not register buffer object swapout.\n");
+- goto out_err2;
+- }
+
+- bdev->ttm_bo_extra_size =
+- ttm_round_pot(sizeof(struct ttm_tt)) +
+- ttm_round_pot(sizeof(struct ttm_backend));
+-
+- bdev->ttm_bo_size = bdev->ttm_bo_extra_size +
+- ttm_round_pot(sizeof(struct ttm_buffer_object));
++ mutex_lock(&glob->device_list_mutex);
++ list_add_tail(&bdev->device_list, &glob->device_list);
++ mutex_unlock(&glob->device_list_mutex);
+
+ return 0;
+-out_err2:
++out_no_addr_mm:
+ ttm_bo_clean_mm(bdev, 0);
+-out_err1:
+- __free_page(bdev->dummy_read_page);
+-out_err0:
++out_no_sys:
+ return ret;
+ }
+ EXPORT_SYMBOL(ttm_bo_device_init);
+@@ -1647,21 +1736,21 @@ void ttm_bo_synccpu_write_release(struct ttm_buffer_object *bo)
+
+ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
+ {
+- struct ttm_bo_device *bdev =
+- container_of(shrink, struct ttm_bo_device, shrink);
++ struct ttm_bo_global *glob =
++ container_of(shrink, struct ttm_bo_global, shrink);
+ struct ttm_buffer_object *bo;
+ int ret = -EBUSY;
+ int put_count;
+ uint32_t swap_placement = (TTM_PL_FLAG_CACHED | TTM_PL_FLAG_SYSTEM);
+
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ while (ret == -EBUSY) {
+- if (unlikely(list_empty(&bdev->swap_lru))) {
+- spin_unlock(&bdev->lru_lock);
++ if (unlikely(list_empty(&glob->swap_lru))) {
++ spin_unlock(&glob->lru_lock);
+ return -EBUSY;
+ }
+
+- bo = list_first_entry(&bdev->swap_lru,
++ bo = list_first_entry(&glob->swap_lru,
+ struct ttm_buffer_object, swap);
+ kref_get(&bo->list_kref);
+
+@@ -1673,16 +1762,16 @@ static int ttm_bo_swapout(struct ttm_mem_shrink *shrink)
+
+ ret = ttm_bo_reserve_locked(bo, false, true, false, 0);
+ if (unlikely(ret == -EBUSY)) {
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+ ttm_bo_wait_unreserved(bo, false);
+ kref_put(&bo->list_kref, ttm_bo_release_list);
+- spin_lock(&bdev->lru_lock);
++ spin_lock(&glob->lru_lock);
+ }
+ }
+
+ BUG_ON(ret != 0);
+ put_count = ttm_bo_del_from_lru(bo);
+- spin_unlock(&bdev->lru_lock);
++ spin_unlock(&glob->lru_lock);
+
+ while (put_count--)
+ kref_put(&bo->list_kref, ttm_bo_ref_bug);
+@@ -1736,6 +1825,6 @@ out:
+
+ void ttm_bo_swapout_all(struct ttm_bo_device *bdev)
+ {
+- while (ttm_bo_swapout(&bdev->shrink) == 0)
++ while (ttm_bo_swapout(&bdev->glob->shrink) == 0)
+ ;
+ }
+diff --git a/drivers/gpu/drm/ttm/ttm_bo_util.c b/drivers/gpu/drm/ttm/ttm_bo_util.c
+index ad4ada0..c70927e 100644
+--- a/drivers/gpu/drm/ttm/ttm_bo_util.c
++++ b/drivers/gpu/drm/ttm/ttm_bo_util.c
+@@ -41,9 +41,9 @@ void ttm_bo_free_old_node(struct ttm_buffer_object *bo)
+ struct ttm_mem_reg *old_mem = &bo->mem;
+
+ if (old_mem->mm_node) {
+- spin_lock(&bo->bdev->lru_lock);
++ spin_lock(&bo->glob->lru_lock);
+ drm_mm_put_block(old_mem->mm_node);
+- spin_unlock(&bo->bdev->lru_lock);
++ spin_unlock(&bo->glob->lru_lock);
+ }
+ old_mem->mm_node = NULL;
+ }
+diff --git a/drivers/gpu/drm/ttm/ttm_global.c b/drivers/gpu/drm/ttm/ttm_global.c
+index 0b14eb1..541744d 100644
+--- a/drivers/gpu/drm/ttm/ttm_global.c
++++ b/drivers/gpu/drm/ttm/ttm_global.c
+@@ -71,7 +71,7 @@ int ttm_global_item_ref(struct ttm_global_reference *ref)
+
+ mutex_lock(&item->mutex);
+ if (item->refcount == 0) {
+- item->object = kmalloc(ref->size, GFP_KERNEL);
++ item->object = kzalloc(ref->size, GFP_KERNEL);
+ if (unlikely(item->object == NULL)) {
+ ret = -ENOMEM;
+ goto out_err;
+@@ -89,7 +89,6 @@ int ttm_global_item_ref(struct ttm_global_reference *ref)
+ mutex_unlock(&item->mutex);
+ return 0;
+ out_err:
+- kfree(item->object);
+ mutex_unlock(&item->mutex);
+ item->object = NULL;
+ return ret;
+@@ -105,7 +104,6 @@ void ttm_global_item_unref(struct ttm_global_reference *ref)
+ BUG_ON(ref->object != item->object);
+ if (--item->refcount == 0) {
+ ref->release(ref);
+- kfree(item->object);
+ item->object = NULL;
+ }
+ mutex_unlock(&item->mutex);
+diff --git a/drivers/gpu/drm/ttm/ttm_memory.c b/drivers/gpu/drm/ttm/ttm_memory.c
+index 87323d4..072c281 100644
+--- a/drivers/gpu/drm/ttm/ttm_memory.c
++++ b/drivers/gpu/drm/ttm/ttm_memory.c
+@@ -26,15 +26,180 @@
+ **************************************************************************/
+
+ #include "ttm/ttm_memory.h"
++#include "ttm/ttm_module.h"
+ #include <linux/spinlock.h>
+ #include <linux/sched.h>
+ #include <linux/wait.h>
+ #include <linux/mm.h>
+ #include <linux/module.h>
+
+-#define TTM_PFX "[TTM] "
+ #define TTM_MEMORY_ALLOC_RETRIES 4
+
++struct ttm_mem_zone {
++ struct kobject kobj;
++ struct ttm_mem_global *glob;
++ const char *name;
++ uint64_t zone_mem;
++ uint64_t emer_mem;
++ uint64_t max_mem;
++ uint64_t swap_limit;
++ uint64_t used_mem;
++};
++
++static struct attribute ttm_mem_sys = {
++ .name = "zone_memory",
++ .mode = S_IRUGO
++};
++static struct attribute ttm_mem_emer = {
++ .name = "emergency_memory",
++ .mode = S_IRUGO | S_IWUSR
++};
++static struct attribute ttm_mem_max = {
++ .name = "available_memory",
++ .mode = S_IRUGO | S_IWUSR
++};
++static struct attribute ttm_mem_swap = {
++ .name = "swap_limit",
++ .mode = S_IRUGO | S_IWUSR
++};
++static struct attribute ttm_mem_used = {
++ .name = "used_memory",
++ .mode = S_IRUGO
++};
++
++static void ttm_mem_zone_kobj_release(struct kobject *kobj)
++{
++ struct ttm_mem_zone *zone =
++ container_of(kobj, struct ttm_mem_zone, kobj);
++
++ printk(KERN_INFO TTM_PFX
++ "Zone %7s: Used memory at exit: %llu kiB.\n",
++ zone->name, (unsigned long long) zone->used_mem >> 10);
++ kfree(zone);
++}
++
++static ssize_t ttm_mem_zone_show(struct kobject *kobj,
++ struct attribute *attr,
++ char *buffer)
++{
++ struct ttm_mem_zone *zone =
++ container_of(kobj, struct ttm_mem_zone, kobj);
++ uint64_t val = 0;
++
++ spin_lock(&zone->glob->lock);
++ if (attr == &ttm_mem_sys)
++ val = zone->zone_mem;
++ else if (attr == &ttm_mem_emer)
++ val = zone->emer_mem;
++ else if (attr == &ttm_mem_max)
++ val = zone->max_mem;
++ else if (attr == &ttm_mem_swap)
++ val = zone->swap_limit;
++ else if (attr == &ttm_mem_used)
++ val = zone->used_mem;
++ spin_unlock(&zone->glob->lock);
++
++ return snprintf(buffer, PAGE_SIZE, "%llu\n",
++ (unsigned long long) val >> 10);
++}
++
++static void ttm_check_swapping(struct ttm_mem_global *glob);
++
++static ssize_t ttm_mem_zone_store(struct kobject *kobj,
++ struct attribute *attr,
++ const char *buffer,
++ size_t size)
++{
++ struct ttm_mem_zone *zone =
++ container_of(kobj, struct ttm_mem_zone, kobj);
++ int chars;
++ unsigned long val;
++ uint64_t val64;
++
++ chars = sscanf(buffer, "%lu", &val);
++ if (chars == 0)
++ return size;
++
++ val64 = val;
++ val64 <<= 10;
++
++ spin_lock(&zone->glob->lock);
++ if (val64 > zone->zone_mem)
++ val64 = zone->zone_mem;
++ if (attr == &ttm_mem_emer) {
++ zone->emer_mem = val64;
++ if (zone->max_mem > val64)
++ zone->max_mem = val64;
++ } else if (attr == &ttm_mem_max) {
++ zone->max_mem = val64;
++ if (zone->emer_mem < val64)
++ zone->emer_mem = val64;
++ } else if (attr == &ttm_mem_swap)
++ zone->swap_limit = val64;
++ spin_unlock(&zone->glob->lock);
++
++ ttm_check_swapping(zone->glob);
++
++ return size;
++}
++
++static struct attribute *ttm_mem_zone_attrs[] = {
++ &ttm_mem_sys,
++ &ttm_mem_emer,
++ &ttm_mem_max,
++ &ttm_mem_swap,
++ &ttm_mem_used,
++ NULL
++};
++
++static struct sysfs_ops ttm_mem_zone_ops = {
++ .show = &ttm_mem_zone_show,
++ .store = &ttm_mem_zone_store
++};
++
++static struct kobj_type ttm_mem_zone_kobj_type = {
++ .release = &ttm_mem_zone_kobj_release,
++ .sysfs_ops = &ttm_mem_zone_ops,
++ .default_attrs = ttm_mem_zone_attrs,
++};
++
++static void ttm_mem_global_kobj_release(struct kobject *kobj)
++{
++ struct ttm_mem_global *glob =
++ container_of(kobj, struct ttm_mem_global, kobj);
++
++ kfree(glob);
++}
++
++static struct kobj_type ttm_mem_glob_kobj_type = {
++ .release = &ttm_mem_global_kobj_release,
++};
++
++static bool ttm_zones_above_swap_target(struct ttm_mem_global *glob,
++ bool from_wq, uint64_t extra)
++{
++ unsigned int i;
++ struct ttm_mem_zone *zone;
++ uint64_t target;
++
++ for (i = 0; i < glob->num_zones; ++i) {
++ zone = glob->zones[i];
++
++ if (from_wq)
++ target = zone->swap_limit;
++ else if (capable(CAP_SYS_ADMIN))
++ target = zone->emer_mem;
++ else
++ target = zone->max_mem;
++
++ target = (extra > target) ? 0ULL : target;
++
++ if (zone->used_mem > target)
++ return true;
++ }
++ return false;
++}
++
+ /**
+ * At this point we only support a single shrink callback.
+ * Extend this if needed, perhaps using a linked list of callbacks.
+@@ -42,34 +207,17 @@
+ * many threads may try to swap out at any given time.
+ */
+
+-static void ttm_shrink(struct ttm_mem_global *glob, bool from_workqueue,
++static void ttm_shrink(struct ttm_mem_global *glob, bool from_wq,
+ uint64_t extra)
+ {
+ int ret;
+ struct ttm_mem_shrink *shrink;
+- uint64_t target;
+- uint64_t total_target;
+
+ spin_lock(&glob->lock);
+ if (glob->shrink == NULL)
+ goto out;
+
+- if (from_workqueue) {
+- target = glob->swap_limit;
+- total_target = glob->total_memory_swap_limit;
+- } else if (capable(CAP_SYS_ADMIN)) {
+- total_target = glob->emer_total_memory;
+- target = glob->emer_memory;
+- } else {
+- total_target = glob->max_total_memory;
+- target = glob->max_memory;
+- }
+-
+- total_target = (extra >= total_target) ? 0 : total_target - extra;
+- target = (extra >= target) ? 0 : target - extra;
+-
+- while (glob->used_memory > target ||
+- glob->used_total_memory > total_target) {
++ while (ttm_zones_above_swap_target(glob, from_wq, extra)) {
+ shrink = glob->shrink;
+ spin_unlock(&glob->lock);
+ ret = shrink->do_shrink(shrink);
+@@ -81,6 +229,8 @@ out:
+ spin_unlock(&glob->lock);
+ }
+
++
++
+ static void ttm_shrink_work(struct work_struct *work)
+ {
+ struct ttm_mem_global *glob =
+@@ -89,63 +239,198 @@ static void ttm_shrink_work(struct work_struct *work)
+ ttm_shrink(glob, true, 0ULL);
+ }
+
++static int ttm_mem_init_kernel_zone(struct ttm_mem_global *glob,
++ const struct sysinfo *si)
++{
++ struct ttm_mem_zone *zone = kzalloc(sizeof(*zone), GFP_KERNEL);
++ uint64_t mem;
++ int ret;
++
++ if (unlikely(!zone))
++ return -ENOMEM;
++
++ mem = si->totalram - si->totalhigh;
++ mem *= si->mem_unit;
++
++ zone->name = "kernel";
++ zone->zone_mem = mem;
++ zone->max_mem = mem >> 1;
++ zone->emer_mem = (mem >> 1) + (mem >> 2);
++ zone->swap_limit = zone->max_mem - (mem >> 3);
++ zone->used_mem = 0;
++ zone->glob = glob;
++ glob->zone_kernel = zone;
++ kobject_init(&zone->kobj, &ttm_mem_zone_kobj_type);
++ ret = kobject_add(&zone->kobj, &glob->kobj, zone->name);
++ if (unlikely(ret != 0)) {
++ kobject_put(&zone->kobj);
++ return ret;
++ }
++ glob->zones[glob->num_zones++] = zone;
++ return 0;
++}
++
++#ifdef CONFIG_HIGHMEM
++static int ttm_mem_init_highmem_zone(struct ttm_mem_global *glob,
++ const struct sysinfo *si)
++{
++ struct ttm_mem_zone *zone = kzalloc(sizeof(*zone), GFP_KERNEL);
++ uint64_t mem;
++ int ret;
++
++ if (unlikely(!zone))
++ return -ENOMEM;
++
++ if (si->totalhigh == 0)
++ return 0;
++
++ mem = si->totalram;
++ mem *= si->mem_unit;
++
++ zone->name = "highmem";
++ zone->zone_mem = mem;
++ zone->max_mem = mem >> 1;
++ zone->emer_mem = (mem >> 1) + (mem >> 2);
++ zone->swap_limit = zone->max_mem - (mem >> 3);
++ zone->used_mem = 0;
++ zone->glob = glob;
++ glob->zone_highmem = zone;
++ kobject_init(&zone->kobj, &ttm_mem_zone_kobj_type);
++ ret = kobject_add(&zone->kobj, &glob->kobj, zone->name);
++ if (unlikely(ret != 0)) {
++ kobject_put(&zone->kobj);
++ return ret;
++ }
++ glob->zones[glob->num_zones++] = zone;
++ return 0;
++}
++#else
++static int ttm_mem_init_dma32_zone(struct ttm_mem_global *glob,
++ const struct sysinfo *si)
++{
++ struct ttm_mem_zone *zone = kzalloc(sizeof(*zone), GFP_KERNEL);
++ uint64_t mem;
++ int ret;
++
++ if (unlikely(!zone))
++ return -ENOMEM;
++
++ mem = si->totalram;
++ mem *= si->mem_unit;
++
++ /**
++ * No special dma32 zone needed.
++ */
++
++ if (mem <= ((uint64_t) 1ULL << 32))
++ return 0;
++
++ /*
++ * Limit max dma32 memory to 4GB for now
++ * until we can figure out how big this
++ * zone really is.
++ */
++
++ mem = ((uint64_t) 1ULL << 32);
++ zone->name = "dma32";
++ zone->zone_mem = mem;
++ zone->max_mem = mem >> 1;
++ zone->emer_mem = (mem >> 1) + (mem >> 2);
++ zone->swap_limit = zone->max_mem - (mem >> 3);
++ zone->used_mem = 0;
++ zone->glob = glob;
++ glob->zone_dma32 = zone;
++ kobject_init(&zone->kobj, &ttm_mem_zone_kobj_type);
++ ret = kobject_add(&zone->kobj, &glob->kobj, zone->name);
++ if (unlikely(ret != 0)) {
++ kobject_put(&zone->kobj);
++ return ret;
++ }
++ glob->zones[glob->num_zones++] = zone;
++ return 0;
++}
++#endif
++
+ int ttm_mem_global_init(struct ttm_mem_global *glob)
+ {
+ struct sysinfo si;
+- uint64_t mem;
++ int ret;
++ int i;
++ struct ttm_mem_zone *zone;
+
+ spin_lock_init(&glob->lock);
+ glob->swap_queue = create_singlethread_workqueue("ttm_swap");
+ INIT_WORK(&glob->work, ttm_shrink_work);
+ init_waitqueue_head(&glob->queue);
++ kobject_init(&glob->kobj, &ttm_mem_glob_kobj_type);
++ ret = kobject_add(&glob->kobj,
++ ttm_get_kobj(),
++ "memory_accounting");
++ if (unlikely(ret != 0)) {
++ kobject_put(&glob->kobj);
++ return ret;
++ }
+
+ si_meminfo(&si);
+
+- mem = si.totalram - si.totalhigh;
+- mem *= si.mem_unit;
+-
+- glob->max_memory = mem >> 1;
+- glob->emer_memory = (mem >> 1) + (mem >> 2);
+- glob->swap_limit = glob->max_memory - (mem >> 3);
+- glob->used_memory = 0;
+- glob->used_total_memory = 0;
+- glob->shrink = NULL;
+-
+- mem = si.totalram;
+- mem *= si.mem_unit;
+-
+- glob->max_total_memory = mem >> 1;
+- glob->emer_total_memory = (mem >> 1) + (mem >> 2);
+-
+- glob->total_memory_swap_limit = glob->max_total_memory - (mem >> 3);
+-
+- printk(KERN_INFO TTM_PFX "TTM available graphics memory: %llu MiB\n",
+- glob->max_total_memory >> 20);
+- printk(KERN_INFO TTM_PFX "TTM available object memory: %llu MiB\n",
+- glob->max_memory >> 20);
+-
++ ret = ttm_mem_init_kernel_zone(glob, &si);
++ if (unlikely(ret != 0))
++ goto out_no_zone;
++#ifdef CONFIG_HIGHMEM
++ ret = ttm_mem_init_highmem_zone(glob, &si);
++ if (unlikely(ret != 0))
++ goto out_no_zone;
++#else
++ ret = ttm_mem_init_dma32_zone(glob, &si);
++ if (unlikely(ret != 0))
++ goto out_no_zone;
++#endif
++ for (i = 0; i < glob->num_zones; ++i) {
++ zone = glob->zones[i];
++ printk(KERN_INFO TTM_PFX
++ "Zone %7s: Available graphics memory: %llu kiB.\n",
++ zone->name, (unsigned long long) zone->max_mem >> 10);
++ }
+ return 0;
++out_no_zone:
++ ttm_mem_global_release(glob);
++ return ret;
+ }
+ EXPORT_SYMBOL(ttm_mem_global_init);
+
+ void ttm_mem_global_release(struct ttm_mem_global *glob)
+ {
+- printk(KERN_INFO TTM_PFX "Used total memory is %llu bytes.\n",
+- (unsigned long long)glob->used_total_memory);
++ unsigned int i;
++ struct ttm_mem_zone *zone;
++
+ flush_workqueue(glob->swap_queue);
+ destroy_workqueue(glob->swap_queue);
+ glob->swap_queue = NULL;
++ for (i = 0; i < glob->num_zones; ++i) {
++ zone = glob->zones[i];
++ kobject_del(&zone->kobj);
++ kobject_put(&zone->kobj);
++ }
++ kobject_del(&glob->kobj);
++ kobject_put(&glob->kobj);
+ }
+ EXPORT_SYMBOL(ttm_mem_global_release);
+
+-static inline void ttm_check_swapping(struct ttm_mem_global *glob)
++static void ttm_check_swapping(struct ttm_mem_global *glob)
+ {
+- bool needs_swapping;
++ bool needs_swapping = false;
++ unsigned int i;
++ struct ttm_mem_zone *zone;
+
+ spin_lock(&glob->lock);
+- needs_swapping = (glob->used_memory > glob->swap_limit ||
+- glob->used_total_memory >
+- glob->total_memory_swap_limit);
++ for (i = 0; i < glob->num_zones; ++i) {
++ zone = glob->zones[i];
++ if (zone->used_mem > zone->swap_limit) {
++ needs_swapping = true;
++ break;
++ }
++ }
++
+ spin_unlock(&glob->lock);
+
+ if (unlikely(needs_swapping))
+@@ -153,44 +438,60 @@ static inline void ttm_check_swapping(struct ttm_mem_global *glob)
+
+ }
+
+-void ttm_mem_global_free(struct ttm_mem_global *glob,
+- uint64_t amount, bool himem)
++static void ttm_mem_global_free_zone(struct ttm_mem_global *glob,
++ struct ttm_mem_zone *single_zone,
++ uint64_t amount)
+ {
++ unsigned int i;
++ struct ttm_mem_zone *zone;
++
+ spin_lock(&glob->lock);
+- glob->used_total_memory -= amount;
+- if (!himem)
+- glob->used_memory -= amount;
+- wake_up_all(&glob->queue);
++ for (i = 0; i < glob->num_zones; ++i) {
++ zone = glob->zones[i];
++ if (single_zone && zone != single_zone)
++ continue;
++ zone->used_mem -= amount;
++ }
+ spin_unlock(&glob->lock);
+ }
+
++void ttm_mem_global_free(struct ttm_mem_global *glob,
++ uint64_t amount)
++{
++ return ttm_mem_global_free_zone(glob, NULL, amount);
++}
++
+ static int ttm_mem_global_reserve(struct ttm_mem_global *glob,
+- uint64_t amount, bool himem, bool reserve)
++ struct ttm_mem_zone *single_zone,
++ uint64_t amount, bool reserve)
+ {
+ uint64_t limit;
+- uint64_t lomem_limit;
+ int ret = -ENOMEM;
++ unsigned int i;
++ struct ttm_mem_zone *zone;
+
+ spin_lock(&glob->lock);
++ for (i = 0; i < glob->num_zones; ++i) {
++ zone = glob->zones[i];
++ if (single_zone && zone != single_zone)
++ continue;
+
+- if (capable(CAP_SYS_ADMIN)) {
+- limit = glob->emer_total_memory;
+- lomem_limit = glob->emer_memory;
+- } else {
+- limit = glob->max_total_memory;
+- lomem_limit = glob->max_memory;
+- }
++ limit = (capable(CAP_SYS_ADMIN)) ?
++ zone->emer_mem : zone->max_mem;
+
+- if (unlikely(glob->used_total_memory + amount > limit))
+- goto out_unlock;
+- if (unlikely(!himem && glob->used_memory + amount > lomem_limit))
+- goto out_unlock;
++ if (zone->used_mem > limit)
++ goto out_unlock;
++ }
+
+ if (reserve) {
+- glob->used_total_memory += amount;
+- if (!himem)
+- glob->used_memory += amount;
++ for (i = 0; i < glob->num_zones; ++i) {
++ zone = glob->zones[i];
++ if (single_zone && zone != single_zone)
++ continue;
++ zone->used_mem += amount;
++ }
+ }
++
+ ret = 0;
+ out_unlock:
+ spin_unlock(&glob->lock);
+@@ -199,12 +500,17 @@ out_unlock:
+ return ret;
+ }
+
+-int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
+- bool no_wait, bool interruptible, bool himem)
++
++static int ttm_mem_global_alloc_zone(struct ttm_mem_global *glob,
++ struct ttm_mem_zone *single_zone,
++ uint64_t memory,
++ bool no_wait, bool interruptible)
+ {
+ int count = TTM_MEMORY_ALLOC_RETRIES;
+
+- while (unlikely(ttm_mem_global_reserve(glob, memory, himem, true)
++ while (unlikely(ttm_mem_global_reserve(glob,
++ single_zone,
++ memory, true)
+ != 0)) {
+ if (no_wait)
+ return -ENOMEM;
+@@ -216,6 +522,56 @@ int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
+ return 0;
+ }
+
++int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
++ bool no_wait, bool interruptible)
++{
++ /**
++ * Normal allocations of kernel memory are registered in
++ * all zones.
++ */
++
++ return ttm_mem_global_alloc_zone(glob, NULL, memory, no_wait,
++ interruptible);
++}
++
++int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
++ struct page *page,
++ bool no_wait, bool interruptible)
++{
++
++ struct ttm_mem_zone *zone = NULL;
++
++ /**
++ * Page allocations may be registed in a single zone
++ * only if highmem or !dma32.
++ */
++
++#ifdef CONFIG_HIGHMEM
++ if (PageHighMem(page) && glob->zone_highmem != NULL)
++ zone = glob->zone_highmem;
++#else
++ if (glob->zone_dma32 && page_to_pfn(page) > 0x00100000UL)
++ zone = glob->zone_kernel;
++#endif
++ return ttm_mem_global_alloc_zone(glob, zone, PAGE_SIZE, no_wait,
++ interruptible);
++}
++
++void ttm_mem_global_free_page(struct ttm_mem_global *glob, struct page *page)
++{
++ struct ttm_mem_zone *zone = NULL;
++
++#ifdef CONFIG_HIGHMEM
++ if (PageHighMem(page) && glob->zone_highmem != NULL)
++ zone = glob->zone_highmem;
++#else
++ if (glob->zone_dma32 && page_to_pfn(page) > 0x00100000UL)
++ zone = glob->zone_kernel;
++#endif
++ ttm_mem_global_free_zone(glob, zone, PAGE_SIZE);
++}
++
++
+ size_t ttm_round_pot(size_t size)
+ {
+ if ((size & (size - 1)) == 0)
+diff --git a/drivers/gpu/drm/ttm/ttm_module.c b/drivers/gpu/drm/ttm/ttm_module.c
+index 59ce819..9a6edbf 100644
+--- a/drivers/gpu/drm/ttm/ttm_module.c
++++ b/drivers/gpu/drm/ttm/ttm_module.c
+@@ -29,16 +29,72 @@
+ * Jerome Glisse
+ */
+ #include <linux/module.h>
+-#include <ttm/ttm_module.h>
++#include <linux/device.h>
++#include <linux/sched.h>
++#include "ttm/ttm_module.h"
++#include "drm_sysfs.h"
++
++static DECLARE_WAIT_QUEUE_HEAD(exit_q);
++atomic_t device_released;
++
++static struct device_type ttm_drm_class_type = {
++ .name = "ttm",
++ /**
++ * Add pm ops here.
++ */
++};
++
++static void ttm_drm_class_device_release(struct device *dev)
++{
++ atomic_set(&device_released, 1);
++ wake_up_all(&exit_q);
++}
++
++static struct device ttm_drm_class_device = {
++ .type = &ttm_drm_class_type,
++ .release = &ttm_drm_class_device_release
++};
++
++struct kobject *ttm_get_kobj(void)
++{
++ struct kobject *kobj = &ttm_drm_class_device.kobj;
++ BUG_ON(kobj == NULL);
++ return kobj;
++}
+
+ static int __init ttm_init(void)
+ {
++ int ret;
++
++ ret = dev_set_name(&ttm_drm_class_device, "ttm");
++ if (unlikely(ret != 0))
++ return ret;
++
+ ttm_global_init();
++
++ atomic_set(&device_released, 0);
++ ret = drm_class_device_register(&ttm_drm_class_device);
++ if (unlikely(ret != 0))
++ goto out_no_dev_reg;
++
+ return 0;
++out_no_dev_reg:
++ atomic_set(&device_released, 1);
++ wake_up_all(&exit_q);
++ ttm_global_release();
++ return ret;
+ }
+
+ static void __exit ttm_exit(void)
+ {
++ drm_class_device_unregister(&ttm_drm_class_device);
++
++ /**
++ * Refuse to unload until the TTM device is released.
++ * Not sure this is 100% needed.
++ */
++
++ wait_event(exit_q, atomic_read(&device_released) == 1);
+ ttm_global_release();
+ }
+
+diff --git a/drivers/gpu/drm/ttm/ttm_tt.c b/drivers/gpu/drm/ttm/ttm_tt.c
+index b8b6c4a..a55ee1a 100644
+--- a/drivers/gpu/drm/ttm/ttm_tt.c
++++ b/drivers/gpu/drm/ttm/ttm_tt.c
+@@ -34,76 +34,13 @@
+ #include <linux/pagemap.h>
+ #include <linux/file.h>
+ #include <linux/swap.h>
++#include "drm_cache.h"
+ #include "ttm/ttm_module.h"
+ #include "ttm/ttm_bo_driver.h"
+ #include "ttm/ttm_placement.h"
+
+ static int ttm_tt_swapin(struct ttm_tt *ttm);
+
+-#if defined(CONFIG_X86)
+-static void ttm_tt_clflush_page(struct page *page)
+-{
+- uint8_t *page_virtual;
+- unsigned int i;
+-
+- if (unlikely(page == NULL))
+- return;
+-
+- page_virtual = kmap_atomic(page, KM_USER0);
+-
+- for (i = 0; i < PAGE_SIZE; i += boot_cpu_data.x86_clflush_size)
+- clflush(page_virtual + i);
+-
+- kunmap_atomic(page_virtual, KM_USER0);
+-}
+-
+-static void ttm_tt_cache_flush_clflush(struct page *pages[],
+- unsigned long num_pages)
+-{
+- unsigned long i;
+-
+- mb();
+- for (i = 0; i < num_pages; ++i)
+- ttm_tt_clflush_page(*pages++);
+- mb();
+-}
+-#elif !defined(__powerpc__)
+-static void ttm_tt_ipi_handler(void *null)
+-{
+- ;
+-}
+-#endif
+-
+-void ttm_tt_cache_flush(struct page *pages[], unsigned long num_pages)
+-{
+-
+-#if defined(CONFIG_X86)
+- if (cpu_has_clflush) {
+- ttm_tt_cache_flush_clflush(pages, num_pages);
+- return;
+- }
+-#elif defined(__powerpc__)
+- unsigned long i;
+-
+- for (i = 0; i < num_pages; ++i) {
+- struct page *page = pages[i];
+- void *page_virtual;
+-
+- if (unlikely(page == NULL))
+- continue;
+-
+- page_virtual = kmap_atomic(page, KM_USER0);
+- flush_dcache_range((unsigned long) page_virtual,
+- (unsigned long) page_virtual + PAGE_SIZE);
+- kunmap_atomic(page_virtual, KM_USER0);
+- }
+-#else
+- if (on_each_cpu(ttm_tt_ipi_handler, NULL, 1) != 0)
+- printk(KERN_ERR TTM_PFX
+- "Timed out waiting for drm cache flush.\n");
+-#endif
+-}
+-
+ /**
+ * Allocates storage for pointers to the pages that back the ttm.
+ *
+@@ -179,7 +116,7 @@ static void ttm_tt_free_user_pages(struct ttm_tt *ttm)
+ set_page_dirty_lock(page);
+
+ ttm->pages[i] = NULL;
+- ttm_mem_global_free(ttm->bdev->mem_glob, PAGE_SIZE, false);
++ ttm_mem_global_free(ttm->glob->mem_glob, PAGE_SIZE);
+ put_page(page);
+ }
+ ttm->state = tt_unpopulated;
+@@ -190,8 +127,7 @@ static void ttm_tt_free_user_pages(struct ttm_tt *ttm)
+ static struct page *__ttm_tt_get_page(struct ttm_tt *ttm, int index)
+ {
+ struct page *p;
+- struct ttm_bo_device *bdev = ttm->bdev;
+- struct ttm_mem_global *mem_glob = bdev->mem_glob;
++ struct ttm_mem_global *mem_glob = ttm->glob->mem_glob;
+ int ret;
+
+ while (NULL == (p = ttm->pages[index])) {
+@@ -200,21 +136,14 @@ static struct page *__ttm_tt_get_page(struct ttm_tt *ttm, int index)
+ if (!p)
+ return NULL;
+
+- if (PageHighMem(p)) {
+- ret =
+- ttm_mem_global_alloc(mem_glob, PAGE_SIZE,
+- false, false, true);
+- if (unlikely(ret != 0))
+- goto out_err;
++ ret = ttm_mem_global_alloc_page(mem_glob, p, false, false);
++ if (unlikely(ret != 0))
++ goto out_err;
++
++ if (PageHighMem(p))
+ ttm->pages[--ttm->first_himem_page] = p;
+- } else {
+- ret =
+- ttm_mem_global_alloc(mem_glob, PAGE_SIZE,
+- false, false, false);
+- if (unlikely(ret != 0))
+- goto out_err;
++ else
+ ttm->pages[++ttm->last_lomem_page] = p;
+- }
+ }
+ return p;
+ out_err:
+@@ -310,7 +239,7 @@ static int ttm_tt_set_caching(struct ttm_tt *ttm,
+ }
+
+ if (ttm->caching_state == tt_cached)
+- ttm_tt_cache_flush(ttm->pages, ttm->num_pages);
++ drm_clflush_pages(ttm->pages, ttm->num_pages);
+
+ for (i = 0; i < ttm->num_pages; ++i) {
+ cur_page = ttm->pages[i];
+@@ -368,8 +297,8 @@ static void ttm_tt_free_alloced_pages(struct ttm_tt *ttm)
+ printk(KERN_ERR TTM_PFX
+ "Erroneous page count. "
+ "Leaking pages.\n");
+- ttm_mem_global_free(ttm->bdev->mem_glob, PAGE_SIZE,
+- PageHighMem(cur_page));
++ ttm_mem_global_free_page(ttm->glob->mem_glob,
++ cur_page);
+ __free_page(cur_page);
+ }
+ }
+@@ -414,7 +343,7 @@ int ttm_tt_set_user(struct ttm_tt *ttm,
+ struct mm_struct *mm = tsk->mm;
+ int ret;
+ int write = (ttm->page_flags & TTM_PAGE_FLAG_WRITE) != 0;
+- struct ttm_mem_global *mem_glob = ttm->bdev->mem_glob;
++ struct ttm_mem_global *mem_glob = ttm->glob->mem_glob;
+
+ BUG_ON(num_pages != ttm->num_pages);
+ BUG_ON((ttm->page_flags & TTM_PAGE_FLAG_USER) == 0);
+@@ -424,7 +353,7 @@ int ttm_tt_set_user(struct ttm_tt *ttm,
+ */
+
+ ret = ttm_mem_global_alloc(mem_glob, num_pages * PAGE_SIZE,
+- false, false, false);
++ false, false);
+ if (unlikely(ret != 0))
+ return ret;
+
+@@ -435,7 +364,7 @@ int ttm_tt_set_user(struct ttm_tt *ttm,
+
+ if (ret != num_pages && write) {
+ ttm_tt_free_user_pages(ttm);
+- ttm_mem_global_free(mem_glob, num_pages * PAGE_SIZE, false);
++ ttm_mem_global_free(mem_glob, num_pages * PAGE_SIZE);
+ return -ENOMEM;
+ }
+
+@@ -459,8 +388,7 @@ struct ttm_tt *ttm_tt_create(struct ttm_bo_device *bdev, unsigned long size,
+ if (!ttm)
+ return NULL;
+
+- ttm->bdev = bdev;
+-
++ ttm->glob = bdev->glob;
+ ttm->num_pages = (size + PAGE_SIZE - 1) >> PAGE_SHIFT;
+ ttm->first_himem_page = ttm->num_pages;
+ ttm->last_lomem_page = -1;
+diff --git a/drivers/video/fbmem.c b/drivers/video/fbmem.c
+index a85c818..750c71f 100644
+--- a/drivers/video/fbmem.c
++++ b/drivers/video/fbmem.c
+@@ -1789,7 +1789,7 @@ static int __init video_setup(char *options)
+ global = 1;
+ }
+
+- if (!global && !strstr(options, "fb:")) {
++ if (!global && !strchr(options, ':')) {
+ fb_mode_option = options;
+ global = 1;
+ }
+diff --git a/firmware/Makefile b/firmware/Makefile
+index 621de8e..d166a7f 100644
+--- a/firmware/Makefile
++++ b/firmware/Makefile
+@@ -42,6 +42,22 @@ fw-shipped-$(CONFIG_COMPUTONE) += intelliport2.bin
+ fw-shipped-$(CONFIG_CHELSIO_T3) += cxgb3/t3b_psram-1.1.0.bin \
+ cxgb3/t3c_psram-1.1.0.bin \
+ cxgb3/t3fw-7.4.0.bin
++fw-shipped-$(CONFIG_DRM_MGA) += matrox/g200_warp.fw matrox/g400_warp.fw
++fw-shipped-$(CONFIG_DRM_R128) += r128/r128_cce.bin
++fw-shipped-$(CONFIG_DRM_RADEON) += radeon/R100_cp.bin radeon/R200_cp.bin \
++ radeon/R300_cp.bin radeon/R420_cp.bin \
++ radeon/RS690_cp.bin radeon/RS600_cp.bin \
++ radeon/R520_cp.bin \
++ radeon/R600_pfp.bin radeon/R600_me.bin \
++ radeon/RV610_pfp.bin radeon/RV610_me.bin \
++ radeon/RV630_pfp.bin radeon/RV630_me.bin \
++ radeon/RV620_pfp.bin radeon/RV620_me.bin \
++ radeon/RV635_pfp.bin radeon/RV635_me.bin \
++ radeon/RV670_pfp.bin radeon/RV670_me.bin \
++ radeon/RS780_pfp.bin radeon/RS780_me.bin \
++ radeon/RV770_pfp.bin radeon/RV770_me.bin \
++ radeon/RV730_pfp.bin radeon/RV730_me.bin \
++ radeon/RV710_pfp.bin radeon/RV710_me.bin
+ fw-shipped-$(CONFIG_DVB_AV7110) += av7110/bootcode.bin
+ fw-shipped-$(CONFIG_DVB_TTUSB_BUDGET) += ttusb-budget/dspbootcode.bin
+ fw-shipped-$(CONFIG_E100) += e100/d101m_ucode.bin e100/d101s_ucode.bin \
+diff --git a/firmware/WHENCE b/firmware/WHENCE
+index 0f5649a..00378ee 100644
+--- a/firmware/WHENCE
++++ b/firmware/WHENCE
+@@ -698,3 +698,124 @@ Found in hex form in kernel source, with the following comment:
+ Copyright (c) 1998-2002 by Paul Davis <pbd@op.net>
+
+ --------------------------------------------------------------------------
++
++Driver: mga - Matrox G200/G400/G550
++
++File: matrox/g200_warp.fw
++File: matrox/g400_warp.fw
++
++Licence:
++
++Copyright 1999 Matrox Graphics Inc.
++All Rights Reserved.
++
++Permission is hereby granted, free of charge, to any person obtaining a
++copy of this software and associated documentation files (the "Software"),
++to deal in the Software without restriction, including without limitation
++the rights to use, copy, modify, merge, publish, distribute, sublicense,
++and/or sell copies of the Software, and to permit persons to whom the
++Software is furnished to do so, subject to the following conditions:
++
++The above copyright notice and this permission notice shall be included
++in all copies or substantial portions of the Software.
++
++THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS
++OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++MATROX GRAPHICS INC., OR ANY OTHER CONTRIBUTORS BE LIABLE FOR ANY CLAIM,
++DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE
++OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++Found in hex form in kernel source.
++
++--------------------------------------------------------------------------
++
++Driver: r128 - ATI Rage 128
++
++File: r128/r128_cce.bin
++
++Licence:
++
++Copyright 2000 Advanced Micro Devices, Inc.
++
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * PRECISION INSIGHT AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM, DAMAGES OR
++ * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE,
++ * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER
++ * DEALINGS IN THE SOFTWARE.
++
++Found in decimal form in kernel source.
++
++--------------------------------------------------------------------------
++
++Driver: radeon - ATI Radeon
++
++File: radeon/R100_cp.bin
++File: radeon/R200_cp.bin
++File: radeon/R300_cp.bin
++File: radeon/R420_cp.bin
++File: radeon/RS600_cp.bin
++File: radeon/RS690_cp.bin
++File: radeon/R520_cp.bin
++File: radeon/R600_pfp.bin
++File: radeon/R600_me.bin
++File: radeon/RV610_pfp.bin
++File: radeon/RV610_me.bin
++File: radeon/RV630_pfp.bin
++File: radeon/RV630_me.bin
++File: radeon/RV620_pfp.bin
++File: radeon/RV620_me.bin
++File: radeon/RV635_pfp.bin
++File: radeon/RV635_me.bin
++File: radeon/RV670_pfp.bin
++File: radeon/RV670_me.bin
++File: radeon/RS780_pfp.bin
++File: radeon/RS780_me.bin
++File: radeon/RV770_pfp.bin
++File: radeon/RV770_me.bin
++File: radeon/RV730_pfp.bin
++File: radeon/RV730_me.bin
++File: radeon/RV710_pfp.bin
++File: radeon/RV710_me.bin
++
++Licence:
++
++ * Copyright 2007-2009 Advanced Micro Devices, Inc.
++ * All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the "Software"),
++ * to deal in the Software without restriction, including without limitation
++ * the rights to use, copy, modify, merge, publish, distribute, sublicense,
++ * and/or sell copies of the Software, and to permit persons to whom the
++ * Software is furnished to do so, subject to the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the next
++ * paragraph) shall be included in all copies or substantial portions of the
++ * Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL
++ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
++ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++
++Found in hex form in kernel source.
++
++--------------------------------------------------------------------------
+diff --git a/firmware/matrox/g200_warp.H16 b/firmware/matrox/g200_warp.H16
+new file mode 100644
+index 0000000..5064b6f
+--- /dev/null
++++ b/firmware/matrox/g200_warp.H16
+@@ -0,0 +1,28 @@
++/*
++ * WARP pipes are named according to the functions they perform, where
++ *
++ * - T stands for computation of texture stage 0
++ * - T2 stands for computation of both texture stage 0 and texture stage 1
++ * - G stands for computation of triangle intensity (Gouraud interpolation)
++ * - Z stands for computation of Z buffer interpolation
++ * - S stands for computation of specular highlight
++ * - A stands for computation of the alpha channel
++ * - F stands for computation of vertex fog interpolation
++ */
++/* TGZ */
++:04B8000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E9728007EA241F20E9154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E2608015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E803800AEA17C12BBD008000E8008000E8B3689725008000E833C033AF3C274FE9573920E9281960EC2B3220E91D3B20E9B30500E0162820E9233B33AD1E2B20E91C8020E9573620E90080A0E94040D8ECFF80C0E990E200E085FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E884FF0AEA008000E8C941C8EC42E100E082FF20EA008000E8008000E8008000E8C840C0EC008000E87FFF20EA008000E8008000E8008000E871
++/* TGZF */
++:0548000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E97F8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E26B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E80D211AB6052131B603802AEA17C12BBD0D2005202FC021C6B3689725008000E833C033AF3C274FE91750569F008000E8370F5C9F00E02F20008000E8281960ECB30500E0008000E8233B33AD008000E8172617DF35174FE9008000E8008000E8008000E839374FE92F2F17AF008000E8008000E8008000E831804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E078FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E877FF0AEA008000E8C941C8EC42E100E075FF20EA008000E8008000E8008000E8C840C0EC008000E872FF20EA008000E8008000E8008000E8BB
++/* TGZA */
++:04E80000000098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E97D8007EA241F20E9154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E26B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D444CB6254454B603802AEA17C12BBD2D20252007C044C6B3689725008000E833C033AF3C274FE91F62579F008000E83F3D5D9F00E00720008000E8281960ECB30500E0008000E8233B33AD008000E81F261FDF9D1F4FE9008000E8008000E8008000E89E3F4FE907071FAF008000E8008000E8008000E89C804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E07AFF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E879FF0AEA008000E8C941C8EC42E100E077FF20EA008000E8008000E8008000E8C840C0EC008000E874FF20EA008000E8008000E8008000E8D9
++/* TGZAF */
++:0568000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E9838007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E26F8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E80D211AB6052131B62D444CB6254454B603802AEA17C12BBD0D2005202FC021C6B3689725008000E833C033AF3C274FE900E0252007C044C61750569F00E02D20370F5C9F00E02F201F62579F00E007203F3D5D9F008000E8008000E8281960ECB30500E0172617DF233B33AD35174FE91F261FDF9D1F4FE99E3F4FE939374FE92F2F17AF008000E807071FAF008000E831804FE9008000E89C804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E074FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E873FF0AEA008000E8C941C8EC42E100E071FF20EA008000E8008000E8008000E8C840C0EC008000E86EFF20EA008000E8008000E8008000E830
++/* TGZS */
++:05C0000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E98B8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E2778015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F3F2F5D9F00E08F20A5374FE90F170FAF06C021C4008000E8008000E8A3804FE9062000E01F261FDFA11F4FE9A23F4FE9008000E8008000E806061FAF008000E8008000E8008000E8A0804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E06CFF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E86BFF0AEA008000E8C941C8EC42E100E069FF20EA008000E8008000E8008000E8C840C0EC008000E866FF20EA008000E8008000E8008000E85C
++/* TGZSF */
++:05E0000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E98F8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E27B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC0D211AB6052131B6370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F0D2005202FC021C63F2F5D9F00E00F201750569FA5374FE906C021C40F170FAF370F5C9F008000E82F2000E0A3804FE9062000E01F261FDF172617DF35174FE9A11F4FE9A23F4FE906061FAF39374FE92F2F17AF008000E8A0804FE9008000E831804FE9008000E8008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E068FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E867FF0AEA008000E8C941C8EC42E100E065FF20EA008000E8008000E8008000E8C840C0EC008000E862FF20EA008000E8008000E8008000E8F9
++/* TGZSA */
++:05E0000000008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E98F8007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E27B8015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC0D444CB6054454B6370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F0D200520008000E83F2F5D9F00E00F201750569FA5374FE906C021C40F170FAF370F5C9F008000E82FC044C6A3804FE9062000E01F261FDF172617DF9D174FE9A11F4FE9A23F4FE906061FAF00E0AF209E374FE92F172FAFA0804FE9008000E8008000E89C804FE9008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E068FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E867FF0AEA008000E8C941C8EC42E100E065FF20EA008000E8008000E8008000E8C840C0EC008000E862FF20EA008000E8008000E8008000E883
++/* TGZAF */
++:05B8000000008000E8008000E8008000E8008000E8008000E8008000E80098A0E94040D8ECFF80C0E9008000E81FD718BD3FD722BD8104890401040904C941C0EC110400E041CC41CD49CC49CDD141C0EC51CC51CD80041004080400E000CCC0CDD149C0EC8A1F20E98B3F20E9413C41AD493C49AD10CC10CD08CC08CDB94149BB1FF041CD513C51AD009880E9948007EA241F20E9214580E81A4D80E8315580E8008000E8154149BD1D4151BD2E412AB83453A0E815301D3058E300E0B54048BD3D4050BD2443A0E82C4BA0E8157209E300E01D723530B530BD303D309C97579F008000E86C64C8EC98E1B505BD052E3032C0A0E833C0A0E87464C8EC403C40AD326A2A302073336A00E028731C7283E2808015EAB83D28DF303520DF403000E0CCE26472254252BF2D424ABF302E30DF382E38DF181D45E91E1545E92B4951BD00E01F73383840AF303040AF241F24DF1D3220E92C1F2CDF1A3320E9B01008E34010B81026F030CD2FF038CD2B8020E92A8020E9A62088E200E0AF20282A26AF202AC0AF341F34DF462446DF283080BF203880BF472447DF4E2C4EDF4F2C4FDF563456DF281528DF201D20DF573457DF00E01D05048010EA89E22B303FC11DBD008000E8008000E8008000E8A068BF25008000E820C020AF2805977400E02A1016C020E9048010EA8CE2950528C128AD1FC115BD008000E8008000E8A8679F6B008000E828C028AD1D252005283280AD402A40BD1C8020E9203320AD207300E0B64951BB262FB0E8192020E9352035DF3D203DDF152015DF1D201DDF26D026CD29492AB8264080BD3B4850BD3E54579F00E082E11EAF599F008000E826302930483C48AD2B72C2E12CC044C2052434BF0D242CBF2D464EBF254656BF201D6F8F323E5FE93E50569F00E03B301E8F519F331E5FE9054454B20D444CB219C0B0E834C044C4337300E03E62579F1EAF599F00E00D20843E58E9281D6F8F052000E0851E58E99B3B33DF202042AF3042569F803E57E93F8F519F30805FE9282824AF811E57E9054757BF0D474FBF888058E91B291BDF301D6F8F3A304FE91C3026DF09E33B053E50569F3B3F4FE91E8F519F00E0AC202D444CB42C1CC0AF254454B400E0C830304630AF1B1B48AF00E02520382C4FE9868057E9381D6F8F287400E00D444CB0054454B02D209B10823E57E932F01BCD1EBD599F831E57E9384738AF34202A3000E00D2032200520878057E91F54579F1742569F00E03B6A3F8F519F371E4FE937322AAF00E03200008000E827C044C0361F4FE91F1F26DF371B37BF172617DF3E174FE93F3F4FE9341F34AF2B05A720332B37DF2717C0AF34804FE9008000E82D211AB0252131B00D211AB2052131B203802AEA17C12BBD2D20252005200D20B3689725008000E833C033AF2FC021C01642569F3C274FE91E62579F008000E8252131B42D211AB43F2F5D9F008000E8330500E0281960EC0D211AB6052131B6370F5C9F00E02F20233B33AD1E261EDFA71E4FE9172616DF2D2000E0A83F4FE92F2F1EAF252000E0A4164FE90FC021C2A6804FE91F62579F0D2005202FC021C62D444CB6254454B63F2F5D9F00E00F202D20252007C044C61750569FA5374FE906C021C40F170FAF370F5C9F008000E81E62579F008000E83E3D5D9F00E007202F2000E0A30F4FE9062000E01F261FDF172617DFA11F4FE91E261EDF9D1E4FE935174FE9A23F4FE906061FAF39374FE92F2F17AF07071EAFA0804FE99E3E4FE931804FE99C804FE9008000E8573920E9162820E91D3B20E91E2B20E92B3220E91C2320E9573620E90080A0E94040D8ECFF80C0E990E200E063FF20EA19C8C1CD1FD718BD3FD722BD9F4149BD008000E8254149BD2D4151BD0D8007EA008000E8354048BD3D4050BD008000E825302D303530B530BD303D309CA75B9F008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E8008000E862FF0AEA008000E8C941C8EC42E100E060FF20EA008000E8008000E8008000E8C840C0EC008000E85DFF20EA008000E8008000E8008000E8D8
++:0000000001FF
+diff --git a/firmware/matrox/g400_warp.H16 b/firmware/matrox/g400_warp.H16
+new file mode 100644
+index 0000000..b432d10
+--- /dev/null
++++ b/firmware/matrox/g400_warp.H16
+@@ -0,0 +1,44 @@
++/*
++ * WARP pipes are named according to the functions they perform, where
++ *
++ * - T stands for computation of texture stage 0
++ * - T2 stands for computation of both texture stage 0 and texture stage 1
++ * - G stands for computation of triangle intensity (Gouraud interpolation)
++ * - Z stands for computation of Z buffer interpolation
++ * - S stands for computation of specular highlight
++ * - A stands for computation of the alpha channel
++ * - F stands for computation of vertex fog interpolation
++ */
++/* TGZ */
++:0338000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC31003900588015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF4A8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E90A444CB0024454B02A444CB21A4454B21D803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F008000E82A444CB41A4454B439E52C9F383D20E988735EE92A201A202A464EBF1A4656BF31532F9F3E304FE939E52C9F3F384FE90A474FBF024757BF31532F9F3A314FE939E52C9F3B394FE92A434BBF1A4353BF30502E9F36314FE938212C9F37394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9AFFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFD6FF20EA008000E84E334ECF573B57CF9DFF20EA57C0BFEA0080A0E90000D8EC59
++/* TGZF */
++:0360000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039005D8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF4F8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C439E52C9F348020E931532F9F008000E888735EE9008000E827CF75C63C3D20E90A444CB0024454B02A444CB21A4454B220803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F312720E90A444CB4024454B42A454DB61A4555B639E52C9F383D20E90A2002202A201A200A474FBF024757BF30502E9F3E304FE938212C9F3F384FE92A464EBF1A4656BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A434BBF1A4353BF30502E9F35314FE938212C9F39394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9AAFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFD3FF20EA008000E84E334ECF573B57CF98FF20EA57C0BFEA0080A0E90000D8EC90
++/* TGZA */
++:0358000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039005C8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF4E8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E927CF74C63DCF74C20A444CB0024454B02A444CB21A4454B220803AEA0A20022088735EE92A201A2030502E9F32315FE938212C9F33395FE931532F9F9C2720E90A444CB4024454B42A444CB61A4454B639E52C9F383D20E90A2002202A201A200A474FBF024757BF30502E9F3E304FE938212C9F3F384FE92A464EBF1A4656BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A434BBF1A4353BF30502E9F9D314FE938212C9F9E394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9ABFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFD3FF20EA008000E84E334ECF573B57CF99FF20EA57C0BFEA0080A0E90000D8EC35
++/* TGZAF */
++:0380000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC31003900618015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF538007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF32322DDF22222DDF12122DDF3A3A2DDF473747DF573D57DF3DCF74C037CF74C40A444CB0024454B031532F9F343720E939E52C9F3C3D20E92A444CB21A4454B226803AEA0A20022088735EE92A201A203DCF74C227CF74C630502E9F32315FE938212C9F33395FE931532F9F9C2720E90A444CB4024454B42A444CB61A4454B639E52C9F383D20E90A2002202A201A203DCF75C6008000E830502E9F3E304FE938212C9F3F384FE90A454DB6024555B631532F9F3A314FE939E52C9F3B394FE9313D20E90A2002202A464EBF1A4656BF0A474FBF024757BF30502E9F36304FE938212C9F37384FE931532F9F9D314FE939E52C9F9E394FE92A434BBF1A4353BF30502E9F35304FE938212C9F39384FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9A6FF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFCDFF20EA008000E84E334ECF573B57CF94FF20EA57C0BFEA0080A0E90000D8EC89
++/* TGZS */
++:03A0000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC31003900658015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF578007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B229803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE92A454DB21A4555B20A454DB4024555B438212C9F3B394FE90A2002202A201A202A464EBF1A4656BF31532F9F36314FE939E52C9F37394FE930502E9FA7304FE938212C9FA8384FE90A474FBF024757BF31532F9FA4314FE939E52C9FA5394FE92A434BBF1A4353BF30502E9FA1304FE938212C9FA2384FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E9A2FF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFCAFF20EA008000E84E334ECF573B57CF90FF20EA57C0BFEA0080A0E90000D8ECD8
++/* TGZSF */
++:03C8000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039006A8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF5C8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B22E803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A454DB21A4555B20A454DB4024555B427CF75C62A201A20A7304FE90A20022031532F9F312720E939E52C9FA8384FE92A454DB61A4555B630502E9F36314FE938212C9F37394FE9008000E82A201A202A464EBF1A4656BF31532F9FA4314FE939E52C9FA5394FE90A474FBF024757BF31532F9FA1304FE939E52C9FA2384FE92A434BBF1A4353BF30502E9F35314FE938212C9F39394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E99DFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFC5FF20EA008000E84E334ECF573B57CF8BFF20EA57C0BFEA0080A0E90000D8ECD3
++/* TGZSA */
++:03C8000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039006A8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF5C8007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B22E803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A454DB21A4555B20A454DB4024555B427CF74C62A201A20A7304FE90A20022031532F9F9C2720E939E52C9FA8384FE92A444CB61A4454B630502E9F36314FE938212C9F37394FE9008000E82A201A202A464EBF1A4656BF31532F9FA4314FE939E52C9FA5394FE90A474FBF024757BF31532F9FA1304FE939E52C9FA2384FE92A434BBF1A4353BF30502E9F9D314FE938212C9F9E394FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E99DFF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFC5FF20EA008000E84E334ECF573B57CF8BFF20EA57C0BFEA0080A0E90000D8ECA0
++/* TGZSAF */
++:03E8000000008898E9008000E80080A0E90000D8ECFF80C0E9008000E8224048BF2A4050BF324149BF3A4151BFC36BCB6B008898E9737BC8EC96E241047B43A0E8734BA0E8ADEE299F00E0490490E251043146B1E84941C0EC3957B1E8000446E27353A0E85141C0EC310039006E8015EA080410045149C0EC2F4160EA312039201F42A0E82A424ABF274AA0E81A4252BF1E4960EA737BC8EC265160EA324048BD224050BD124149BD3A4151BDBF2F26BD00E07B723220222012203A20463146BF4E314EBFB3E22D9F008000E8563156BF473947BF4F394FBF573957BF608007EA244120E94273F8EC00E02D7333720CE3A52F1EBD43432DDF4B4B2DDFAE1E26BD58E3336653532DDF008000E8B83833BF00E059E31E1241E91A2241E92B403DE93F4BA0E82D73307605803DEA3743A0E83D53A0E84870F8EC2B483CE91F27BCE8008000E8008000E8008000E815C020E915C020E915C020E915C020E9183A41E91D3241E92A4020E9563D56DF463746DF4E3F4EDF163020E94F3F4FDF473747DF573D57DF32322DDF22222DDF12122DDF3A3A2DDF27CF74C237CF74C40A444CB0024454B03DCF74C0343720E931532F9F382720E939E52C9F3C3D20E92A444CB21A4454B232803AEA0A20022027CF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA62720E939E52C9FA33D20E92A444CB41A4454B40A454DB0024555B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A454DB21A4555B20A454DB4024555B427CF74C62A201A20A7304FE90A20022031532F9F9C2720E939E52C9FA8384FE92A444CB61A4454B630502E9F36314FE938212C9F37394FE90A454DB6024555B63DCF75C62A201A202A464EBF1A4656BF31532F9FA4314FE939E52C9FA5394FE9313D20E90A2002200A474FBF024757BF30502E9FA1304FE938212C9FA2384FE931532F9F9D314FE939E52C9F9E394FE92A434BBF1A4353BF30502E9F35304FE938212C9F39384FE931532F9F803157E939E52C9F813957E9374850BD8A3620E9867657E98B3E20E9823057E9877757E9833857E9354951BD84315EE9301F5FE985395EE9572520E92B4820E91D37E1EA1E35E1EA00E02677244920E999FF20EA162620E9572EBFEA1C46A0E8234EA0E82B56A0E81D47A0E8244FA0E82C57A0E81C0023002B0000E01D0024002C0000E01C6523652B6500E01D6524652C6500E01C2360EC36D736AD2B8060EC1D2460EC3ED73EAD2C8060EC1C2BDEE82380DEE8368036BD3E803EBD33D71CBD3BD723BD468046CF4F804FCF563356CF473B47CFC1FF20EA008000E84E334ECF573B57CF87FF20EA57C0BFEA0080A0E90000D8EC83
++/* T2GZ */
++:0438000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC31003900788015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF698007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E90A4454B0024464B02A4454B21A4464B225803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F008000E82A4454B41A4464B439E52C9F383D20E988735EE92A201A202A4656BF1A4666BF31532F9F3E304FE939E52C9F3F384FE90A4757BF024767BF31532F9F3A314FE939E52C9F3B394FE92A4353BF1A4363BF30502E9F36314FE938212C9F37394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E99FFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFBEFF20EA008000E8583358CF693B69CF7DFF20EA57C0BFEA0080A0E90000D8ECAC
++/* T2GZF */
++:0460000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039007D8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF6E8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C439E52C9F348020E931532F9F008000E888735EE9008000E80FCF75C63C3D20E90A4454B0024464B02A4454B21A4464B228803AEA0A2002203DCF74C22A201A2030502E9F32315FE938212C9F33395FE931532F9F310F20E90A4454B4024464B42A4555B61A4565B639E52C9F383D20E90A2002202A201A200A4757BF024767BF30502E9F3E304FE938212C9F3F384FE92A4656BF1A4666BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A4353BF1A4363BF30502E9F35314FE938212C9F39394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E99AFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFBBFF20EA008000E8583358CF693B69CF78FF20EA57C0BFEA0080A0E90000D8ECFB
++/* T2GZA */
++:0458000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039007C8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF6D8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C431532F9F348020E939E52C9F3C3D20E90A4454B0024464B02A4454B21A4464B229803AEA0A2002200FCF74C63DCF74C288735EE92A201A2030502E9F32315FE938212C9F33395FE931532F9F9C0F20E90A4454B4024464B42A4454B61A4464B639E52C9F383D20E90A2002202A201A200A4757BF024767BF30502E9F3E304FE938212C9F3F384FE92A4656BF1A4666BF31532F9F3A314FE939E52C9F3B394FE931532F9F36304FE939E52C9F37384FE92A4353BF1A4363BF30502E9F9D314FE938212C9F9E394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E99BFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFBAFF20EA008000E8583358CF693B69CF79FF20EA57C0BFEA0080A0E90000D8ECA0
++/* T2GZAF */
++:0480000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC31003900818015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF728007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF12122DDF22222DDF32322DDF3A3A2DDF683D68DF493749DF3DCF74C037CF74C40A4454B0024464B031532F9F343720E939E52C9F3C3D20E92A4454B21A4464B22E803AEA0A20022088735EE92A201A203DCF74C20FCF74C630502E9F32315FE938212C9F33395FE931532F9F9C0F20E90A4454B4024464B42A4454B61A4464B639E52C9F383D20E90A2002202A201A203DCF75C6008000E830502E9F3E304FE938212C9F3F384FE90A4555B6024565B631532F9F3A314FE939E52C9F3B394FE9313D20E90A2002202A4656BF1A4666BF0A4757BF024767BF30502E9F36304FE938212C9F37384FE931532F9F9D314FE939E52C9F9E394FE92A4353BF1A4363BF30502E9F35304FE938212C9F39384FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E996FF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFB5FF20EA008000E8583358CF693B69CF74FF20EA57C0BFEA0080A0E90000D8ECDC
++/* T2GZS */
++:04A0000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC31003900858015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF768007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B231803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE92A4555B21A4565B20A4555B4024565B438212C9F3B394FE92A201A200A2002202A4656BF1A4666BF31532F9F36314FE939E52C9F37394FE930502E9FA7304FE938212C9FA8384FE90A4757BF024767BF31532F9FA4314FE939E52C9FA5394FE92A4353BF1A4363BF30502E9FA1304FE938212C9FA2384FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E992FF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFB2FF20EA008000E8583358CF693B69CF70FF20EA57C0BFEA0080A0E90000D8EC43
++/* T2GZSF */
++:04C8000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039008A8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF7B8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B236803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A4555B21A4565B20A4555B4024565B40FCF75C62A201A20A7304FE90A20022031532F9F310F20E939E52C9FA8384FE92A4555B61A4565B630502E9F36314FE938212C9F37394FE9008000E82A201A202A4656BF1A4666BF31532F9FA4314FE939E52C9FA5394FE90A4757BF024767BF31532F9FA1304FE939E52C9FA2384FE92A4353BF1A4363BF30502E9F35314FE938212C9F39394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E98DFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFADFF20EA008000E8583358CF693B69CF6BFF20EA57C0BFEA0080A0E90000D8EC56
++/* T2GZSA */
++:04C8000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039008A8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF7B8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B236803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A4555B21A4565B20A4555B4024565B40FCF74C62A201A20A7304FE90A20022031532F9F9C0F20E939E52C9FA8384FE92A4454B61A4464B630502E9F36314FE938212C9F37394FE9008000E82A201A202A4656BF1A4666BF31532F9FA4314FE939E52C9FA5394FE90A4757BF024767BF31532F9FA1304FE939E52C9FA2384FE92A4353BF1A4363BF30502E9F9D314FE938212C9F9E394FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E98DFF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFADFF20EA008000E8583358CF693B69CF6BFF20EA57C0BFEA0080A0E90000D8EC23
++/* T2GZSAF */
++:04E8000000008A98E9008000E80080A0E90000D8ECFF80C0E9008000E80A4050BF2A4060BF324151BF3A4161BFC36BD36B008A98E9737BC8EC96E241047B43A0E87353A0E8ADEE239F00E0510490E261043146B1E85141E0EC3967B1E8000446E27363A0E86141E0EC310039008E8015EA100420046151E0EC2F4160EA312039201F42A0E82A4252BF0F52A0E81A4262BF1E5160EA737BC8EC0E6160EA324050BD224060BD124151BD3A4161BDBF2F0EBD97E27B723220222012203A203548B1E83D59B1E8463146BF563156BFB3E22D9F008000E8663166BF473947BF573957BF673967BF7F8007EA244120E935003D0000E02D7333720CE38D2F1EBD4375F8EC35203D2043432DDF53532DDFAE1E0EBD58E33366483548BF583558BF683568BF493D49BF593D59BF693D69BF63632DDF4D7DF8EC59E300E0B83833BF2D733076183A41E93F53A0E805803DEA3743A0E83D63A0E85070F8EC2B503CE91F0FBCE8008000E85978F8EC008000E815C020E915C020E915C020E915C020E91E1241E91A2241E9463746DF563F56DF2B403DE9663D66DF1D3241E9673D67DF473747DF573F57DF2A4020E9593F59DF163020E9693D69DF483748DF583F58DF683D68DF493749DF32322DDF22222DDF12122DDF3A3A2DDF0FCF74C237CF74C40A4454B0024464B03DCF74C0343720E931532F9F380F20E939E52C9F3C3D20E92A4454B21A4464B23A803AEA0A2002200FCF75C02A201A2030502E9F32315FE938212C9F33395FE93DCF75C237CF75C431532F9FA60F20E939E52C9FA33D20E92A4454B41A4464B40A4555B0024565B088735EE92A201A20A03720E90A20022031532F9F3E304FE939E52C9F3F384FE930502E9F3A314FE938212C9F3B394FE92A4555B21A4565B20A4555B4024565B40FCF74C62A201A20A7304FE90A20022031532F9F9C0F20E939E52C9FA8384FE92A4454B61A4464B630502E9F36314FE938212C9F37394FE90A4555B6024565B63DCF75C62A201A202A4656BF1A4666BF31532F9FA4314FE939E52C9FA5394FE9313D20E90A2002200A4757BF024767BF30502E9FA1304FE938212C9FA2384FE931532F9F9D314FE939E52C9F9E394FE92A4353BF1A4363BF30502E9F35304FE938212C9F39384FE90A4858BF024868BF31532F9F803157E939E52C9F813957E92A4959BF1A4969BF30502E9F823057E938212C9F833857E931532F9F84315EE939E52C9F85395EE9867657E98A3620E9877757E98B3EBFEA803057E9813857E9823157E9867857E9833957E9877957E9301F5FE98A3420E98B3C20E9375060BD570D20E9355161BD2B5020E91D37E1EA1E35E1EA00E00E77245120E989FF20EA160E20E9572EBFEA0B46A0E81B56A0E82B66A0E80C47A0E81C57A0E82C67A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC36D736AD2B8060EC0C1C60EC3ED73EAD2C8060EC0B2BDEE81B80DEE8368036BD3E803EBD33D70BBD3BD71BBD468046CF578057CF663366CF473B47CF563356CF673B67CF0B48A0E81B58A0E82B68A0E80C49A0E81C59A0E82C69A0E80B001B002B0000E00C001C002C0000E00B651B652B6500E00C651C652C6500E00B1B60EC34D734AD2B8060EC0C1C60EC3CD73CAD2C8060EC0B2BDEE81B80DEE8348034BD3C803CBD33D70BBD3BD71BBD488048CF598059CF683368CF493B49CFA9FF20EA008000E8583358CF693B69CF67FF20EA57C0BFEA0080A0E90000D8ECEE
++:0000000001FF
+diff --git a/firmware/r128/r128_cce.bin.ihex b/firmware/r128/r128_cce.bin.ihex
+new file mode 100644
+index 0000000..4831315
+--- /dev/null
++++ b/firmware/r128/r128_cce.bin.ihex
+@@ -0,0 +1,129 @@
++:1000000000000000108038000000000010003800E0
++:10001000000000020000008E0000000200000091BD
++:1000200000000000402E2423000000006062124FF8
++:10003000000000002E2B596D000000007677753E01
++:1000400000000000898984820000000023BC8B0D21
++:10005000000000002323232300000000238DABB405
++:1000600000000000232323230000000100B028002B
++:100070000000000100032800000000010004C0008F
++:100080000000000100030800000000023660300E8E
++:100090000000000B00040000000000000000000051
++:1000A000000000010200151D0000000100001D0EEF
++:1000B00000000001000039D900000001000019D73C
++:1000C0000000000C0000001C00000001000019D618
++:1000D0000000000C0000001C0000000200000017DF
++:1000E0000000000B01200000000000000100358A24
++:1000F0000000000100064000000000090000001E92
++:100100000000000108D015B4000000101910100004
++:100110000000000300002000000000000000280094
++:1001200000000001000308000000000100003D0E77
++:10013000000000010000C8000000000A0000882A3A
++:10014000000000090000002A000000010200150F55
++:1001500000000002000028240000000100003D65AE
++:100160000000000100003D66000000020000002BBE
++:100170000000000100F32DB4000000012200D8BFF0
++:100180000000000100E088BF0000000C1333383786
++:1001900000000001020615650000000C0000003799
++:1001A00000000001020015640000000100003D662F
++:1001B000000000020000002E000000040020083AA9
++:1001C0000000000100080800000000010006C0FF58
++:1001D000000000040040003D000000010007C800CE
++:1001E00000000001000700FF000000030000000005
++:1001F0000000000C0000005C000000020000002E67
++:100200000000000C000000B00000000100003D767E
++:100210000000000100032800000000010000480069
++:1002200000000001000208000000000106001D0E91
++:1002300000000001000248000000000100028800E8
++:100240000000000100F3C5F80000000100100000EC
++:10025000000000060030004E0000000100003D6379
++:100260000000001080303DF0000000021000384314
++:1002700000000002000028430000000C000000B055
++:100280000000000100003D760000000100003D7705
++:100290000000000100003D0E0000000100003D0FC5
++:1002A000000000010050280000000006003000524D
++:1002B0000000001080303DF00000000100003DF81B
++:1002C00000000002000000520000000100053D0E89
++:1002D0000000000100103D0F00000002003000553A
++:1002E0000000000100003D700000000100001E89B8
++:1002F0000000000100003D710000000300003D729D
++:100300000000000C0000005C000000020000006221
++:100310000000000100003F280000000100003F270E
++:100320000000000100003E820000000100003E8845
++:100330000000000100003E660000000100003E6772
++:100340000000000100003E760000000100003E6851
++:100350000000000100003E690000000100003E6C4A
++:100360000000000000003E6D0000000100002800B9
++:1003700000000001005028000000000100003D685E
++:100380000000000100030800000000060000006EED
++:10039000000000010002C0000000000106303D62C4
++:1003A0000000000200000070000000020030006F3A
++:1003B00000000000200038C0000000010001C0C0A3
++:1003C0000000000E0000007D0000000C0003287FEC
++:1003D00000000001020015BB0000000C00030880B3
++:1003E0000000000002003DBC0000000100003DBB19
++:1003F0000000000000003DBC00000003000480007D
++:100400000000000100048000000000030006C0029C
++:100410000000000100B0280000000000306038003B
++:100420000000000100C028000000000100B008002A
++:100430000000000100D600000000000712801086B6
++:10044000000000000000280000000001000039CC7E
++:1004500000000001000039CD00000001000039C992
++:1004600000000001000039CA00000000000039CB84
++:10047000000000011003B80000000001009000001F
++:100480000000000110003800000000010003080017
++:100490000000000100903D1B0000000140203D0ACB
++:1004A0000000000140203D0B00000001000880001A
++:1004B000000000010001C0C00000000E0000009F0D
++:1004C0000000000C000308800000000142203DBD38
++:1004D0000000000C0003087F0000000142003DBB4B
++:1004E0000000000C000308800000000142203DBC19
++:1004F00000000002000000A20000000140203DBDFD
++:100500000000000140003DBB0000000140203DBC58
++:1005100000000001000840000000000100A00000F1
++:1005200000000006003000A6000000101060380037
++:1005300000000009000000A80000000300400000C7
++:100540000000000300403D1D00000000000000000E
++:1005500000000000000001000000000E000000AEDE
++:10056000000000010001C0A900000001020015C741
++:100570000000000C000000B0000000000000280097
++:10058000000000010001C0AA00000001020015D215
++:10059000000000010001C0A900000003020015C70F
++:1005A0000000000100003E88000000010001C0BA08
++:1005B0000000000102001728000000010001C0BB7C
++:1005C000000000010200165A0000000000003E5B1F
++:1005D000000000000000010000000000000010000A
++:1005E000000000010006400B00000009000000BCF4
++:1005F00000000000000028000000000000000000D3
++:1006000000000000000000000000000000000000EA
++:1006100000000000000000000000000000000000DA
++:1006200000000000000000000000000000000000CA
++:1006300000000000000000000000000000000000BA
++:1006400000000000000000000000000000000000AA
++:10065000000000000000000000000000000000009A
++:10066000000000000000000000000000000000008A
++:10067000000000000000000000000000000000007A
++:10068000000000000000000000000000000000006A
++:10069000000000000000000000000000000000005A
++:1006A000000000000000000000000000000000004A
++:1006B000000000000000000000000000000000003A
++:1006C000000000000000000000000000000000002A
++:1006D000000000000000000000000000000000001A
++:1006E000000000000000000000000000000000000A
++:1006F00000000000000000000000000000000000FA
++:1007000000000000000000000000000000000000E9
++:1007100000000000000000000000000000000000D9
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:00000001FF
+diff --git a/firmware/radeon/R100_cp.bin.ihex b/firmware/radeon/R100_cp.bin.ihex
+new file mode 100644
+index 0000000..151647b
+--- /dev/null
++++ b/firmware/radeon/R100_cp.bin.ihex
+@@ -0,0 +1,130 @@
++:1000000000000000210070000000000020007000CF
++:1000100000000004000000B400000004000000B86C
++:10002000000000006F5B4D4C000000004C4C427F14
++:10003000000000005B568A92000000004CA09C6DFE
++:1000400000000000AD4C4C4C000000004CE1AF3D06
++:1000500000000000D8AFAFAF00000000D64C4CDC71
++:10006000000000004CD10D1000000016000F000031
++:1000700000000000362F242D0000000400000012B4
++:1000800000000016000F000000000000362F282D91
++:1000900000000002000380E70000000204002C972B
++:1000A00000000016000F000100000000333A373056
++:1000B00000000002000077EF0000000200061000C0
++:1000C0000000001A000000210000001E0000400097
++:1000D00000000002000610000000001A00000021CD
++:1000E0000000001E0000400000000002000610009A
++:1000F0000000001A000000210000001E0000400067
++:100100000000000400000017000000020003802B24
++:1001100000000002040067E0000000040000001777
++:1001200000000002000077E000000002000650001E
++:1001300000000002000037E100000006040067E153
++:1001400000000002000077E000000002000077E1FC
++:1001500000000006000077E100000000FFFFFFFF45
++:100160000000000010000000000000020003802BCF
++:1001700000000006040067E0000000020000767541
++:100180000000000200007676000000020000767792
++:100190000000000600007678000000020003802CBA
++:1001A00000000002040026760000000200007677BE
++:1001B0000000000600007678000000180000002F04
++:1001C000000000180000002F0000000600000000E2
++:1001D000000000180000003000000018000000308F
++:1001E0000000000600000000000000020160500056
++:1001F000000000020006500000000002000980001C
++:1002000000000002000610000000000464C0603E10
++:1002100000000002000380E600000002040025C583
++:1002200000000016000800000000000000000000B0
++:10023000000000020400251D00000002000075807F
++:100240000000000200067581000000020400258005
++:100250000000000200067581000000040000004953
++:10026000000000000000500000000002000380E6D3
++:1002700000000002040025C5000000020006100076
++:10028000000000020000750E000000020001900056
++:10029000000000140001105500000012000000557D
++:1002A000000000020400250F000000040000504F71
++:1002B00000000002000380E600000002040025C5E3
++:1002C0000000000200007565000000020000756675
++:1002D000000000040000005800000002000380E657
++:1002E00000000002040025C50000000201E655B42C
++:1002F000000000024401B0E40000000201C110E46B
++:10030000000000182666706600000002040C2565D7
++:1003100000000018000000660000000204002564D0
++:100320000000000200007566000000040000005D8F
++:1003300000000008004010690000000200101000DA
++:1003400000000002000D80FF000000080080006C2B
++:1003500000000002000F900000000002000E00FFED
++:100360000000000600000000000000180000008FE0
++:10037000000000040000005B00000002000380E6B3
++:1003800000000002040025C5000000020000757690
++:100390000000000200065000000000020000900073
++:1003A0000000000200041000000000020C00350EE6
++:1003B0000000000200049000000000020005100090
++:1003C0000000000201E785F80000000200200000A4
++:1003D0000000000C0060007E000000020000756359
++:1003E00000000021006075F0000000042000707320
++:1003F000000000040000507300000002000380E6CB
++:1004000000000002040025C500000002000075760F
++:100410000000000200007577000000020000750E69
++:10042000000000020000750F0000000200A0500054
++:100430000000000C0060008300000021006075F0E7
++:1004400000000002000075F80000000400000083B6
++:1004500000000002000A750E00000002000380E6A2
++:1004600000000002040025C5000000020020750FF6
++:1004700000000004006000860000000200007570AB
++:100480000000000200007571000000060000757297
++:1004900000000002000380E600000002040025C501
++:1004A00000000002000050000000000200A0500008
++:1004B0000000000200007568000000020006100045
++:1004C0000000000C00000095000000020005800004
++:1004D000000000020C60756200000004000000973C
++:1004E00000000002000380E600000002040025C5B1
++:1004F000000000040060009600000000400070E56D
++:1005000000000002000380E600000002040025C590
++:1005100000000002000380E50000001C000000A8AD
++:1005200000000018000650AA00000002040025BBCD
++:1005300000000018000610AB00000000040075BCAD
++:1005400000000002000075BB00000000000075BC48
++:100550000000000600090000000000020009000081
++:1005600000000006000D800200000002000078324A
++:10057000000000020000500000000002000380E7BD
++:100580000000000204002C97000000020000782008
++:100590000000000200007821000000000000780048
++:1005A000000000020120000000000002200770008F
++:1005B0000000000201200000000000022000700086
++:1005C0000000000200061000000000020120751B60
++:1005D000000000028040750A000000028040750B98
++:1005E000000000020011000000000002000380E58E
++:1005F0000000001C000000C600000018000610AB40
++:1006000000000002844075BD00000018000610AA1A
++:1006100000000002840075BB00000018000610AB4B
++:1006200000000002844075BC00000004000000C906
++:1006300000000002804075BD00000002800075BB14
++:1006400000000002804075BC000000020010800025
++:1006500000000002014000000000000C006000CD1E
++:100660000000002020C0700000000012000000CF39
++:100670000000000600800000000000060080751DDC
++:100680000000000000000000000000020000775C95
++:100690000000000200A050000000000200661000F0
++:1006A000000000200460275D000000000000400002
++:1006B0000000000201E0083000000000210070008E
++:1006C000000000006464614D00000000696874204F
++:1006D00000000000000000730000000000000000A7
++:1006E000000000020000500000000002000380D063
++:1006F00000000002040025E000000000000075E199
++:10070000000000000000000100000002000380E083
++:1007100000000002040023940000000000005000CC
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000080000000000000004AD
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:00000001FF
++/* production radeon ucode r1xx-r6xx */
+diff --git a/firmware/radeon/R200_cp.bin.ihex b/firmware/radeon/R200_cp.bin.ihex
+new file mode 100644
+index 0000000..3a0bd73
+--- /dev/null
++++ b/firmware/radeon/R200_cp.bin.ihex
+@@ -0,0 +1,130 @@
++:1000000000000000210070000000000020007000CF
++:1000100000000004000000BF00000004000000C356
++:10002000000000007A685E5D000000005D5D55889C
++:100030000000000068659197000000005DA19F78B6
++:10004000000000005D5D5D5D000000005DEE5D5044
++:1000500000000000F2ACACAC00000000E75DF9E984
++:1000600000000000B1DD0E1100000000E2AFAFAFF4
++:1000700000000016000F000000000000452F232D97
++:10008000000000040000001300000016000F000034
++:1000900000000000452F272D00000016000F000172
++:1000A000000000003E4D4A3700000002000077EFDC
++:1000B00000000002000610000000001A00000020EE
++:1000C0000000001E000040000000000200061000BA
++:1000D0000000001A000000200000001E0000400088
++:1000E00000000002000610000000001A00000020BE
++:1000F0000000001E00004000000000040000001688
++:10010000000000020003802A00000002040067E0F3
++:10011000000000040000001600000002000077E06C
++:10012000000000020006500000000002000037E15D
++:1001300000000006040067E100000002000077E014
++:1001400000000002000077E100000006000077E1F7
++:1001500000000000FFFFFFFF000000001000000093
++:100160000000000007F007F0000000020003802AF2
++:1001700000000006040067E0000000020003802C7D
++:100180000000000204002741000000020400274193
++:100190000000000204002743000000020000767502
++:1001A0000000000200007676000000020000767772
++:1001B0000000000600007678000000020003802C9A
++:1001C0000000000204002741000000020400274153
++:1001D00000000002040027430000000200007676C1
++:1001E000000000020000767700000006000076782C
++:1001F000000000020003802B0000000204002676AD
++:100200000000000200007677000000020003802C4E
++:100210000000000204002741000000020400274300
++:100220000000000600007678000000020003802C29
++:1002300000000002040027410000000204002741E2
++:10024000000000020400274300000006000076784A
++:10025000000000180000002F000000180000002F10
++:100260000000000600000000000000180000003739
++:100270000000001800000037000000060000000029
++:100280000000000201605000000000020006500063
++:1002900000000002000980000000000200061000BB
++:1002A0000000000464C06051000000160008000057
++:1002B0000000000000000000000000020400251DF6
++:1002C0000000000200007580000000020006758139
++:1002D0000000000204002580000000020006758175
++:1002E000000000040000005A000000000000500060
++:1002F0000000000200061000000000020000750E61
++:1003000000000002000190000000001400011064D1
++:100310000000001200000064000000020400250F2D
++:10032000000000040000505E00000002000075653F
++:100330000000000200007566000000040000006577
++:100340000000000201E655B4000000024401B0F0D4
++:100350000000000201C110F0000000182666707154
++:1003600000000002040C2565000000180000007168
++:100370000000000204002564000000020000756611
++:100380000000000400000068000000080040107435
++:10039000000000020010100000000002000D80FFAD
++:1003A000000000080080007700000002000F9000AD
++:1003B00000000002000E00FF000000060000000028
++:1003C0000000001800000094000000040000006815
++:1003D00000000002000075760000000200065000D8
++:1003E0000000000200009000000000020004100065
++:1003F000000000020C00350E000000020004900016
++:1004000000000002000510000000000201E785F86E
++:1004100000000002002000000000000C00600087C7
++:10042000000000020000756300000021006075F00C
++:10043000000000042000707C000000040000507CDC
++:1004400000000002000075760000000200007577D1
++:10045000000000020000750E000000020000750F91
++:100460000000000200A050000000000C0060008AA4
++:1004700000000021006075F000000002000075F827
++:10048000000000040000008A00000002000A750E4F
++:10049000000000020020750F000000040060008DC5
++:1004A000000000020000757000000002000075717D
++:1004B00000000006000075720000000200005000FD
++:1004C0000000000200A0500000000002000075685B
++:1004D00000000002000610000000000C0000009860
++:1004E0000000000200058000000000020C60756240
++:1004F000000000040000009A000000040060009961
++:1005000000000000400070F100000002000380F1D4
++:100510000000001C000000A700000018000650A901
++:1005200000000002040025BB00000018000610AA0D
++:1005300000000000040075BC00000002000075BB54
++:1005400000000000000075BC00000006000900006B
++:10055000000000020009000000000006000D8002FB
++:10056000000000020000500000000002000078219E
++:100570000000000000007800000000020000782168
++:10058000000000000000780000000002016650003A
++:1005900000000002000A000000000002000671CC0A
++:1005A000000000020286F1CD00000010000000B73C
++:1005B00000000000210070000000001C000000BED0
++:1005C000000000020006500000000002000A0000C7
++:1005D000000000020006100000000002000B0000F6
++:1005E000000000023806700000000004000A00BA93
++:1005F0000000000020007000000000020120000048
++:10060000000000022007700000000002012000002E
++:100610000000000020007000000000020006100032
++:10062000000000020120751B000000028040750AD6
++:10063000000000028040750B000000020011000065
++:1006400000000002000380F10000001C000000D147
++:1006500000000018000610AA00000002844075BDCA
++:1006600000000018000610A900000002840075BBFD
++:1006700000000018000610AA00000002844075BCAB
++:1006800000000004000000D400000002804075BD9E
++:1006900000000002800075BB00000002804075BCB5
++:1006A0000000000200108000000000020140000075
++:1006B0000000000C006000D80000002020C0700086
++:1006C00000000012000000DA0000000600800000B8
++:1006D000000000060080751D00000002000025BB20
++:1006E00000000004000040D4000000020000775C1D
++:1006F0000000000200A05000000000020066100090
++:10070000000000200460275D0000000000004000A1
++:1007100000000002000079990000000200A05000D3
++:100720000000000200661000000000200460299B09
++:1007300000000000000040000000000201E008305E
++:1007400000000000210070000000000200005000C6
++:10075000000000020003805600000002040025E0B3
++:1007600000000000000075E1000000000000000132
++:1007700000000002000380ED0000000004007394FC
++:100780000000000000000000000000000000000069
++:1007900000000002000078C400000002000078C5DC
++:1007A00000000002000078C600000002000079246A
++:1007B00000000002000079250000000200007926F8
++:1007C00000000004000000F2000000020000792494
++:1007D00000000002000079250000000200007926D8
++:1007E00000000004000000F900000000000000000C
++:1007F00000000000000000000000000000000000F9
++:00000001FF
++/* production radeon ucode r1xx-r6xx */
+diff --git a/firmware/radeon/R300_cp.bin.ihex b/firmware/radeon/R300_cp.bin.ihex
+new file mode 100644
+index 0000000..d307d56
+--- /dev/null
++++ b/firmware/radeon/R300_cp.bin.ihex
+@@ -0,0 +1,130 @@
++:10000000000000004200E000000000004000E000AE
++:1000100000000008000000AE00000008000000B270
++:100020000000000067554B4A000000004A4A447532
++:100030000000000055527D83000000004A8C8B6553
++:10004000000000004AEF4AF6000000004AE14A4A78
++:1000500000000000E497979700000000DB4AEBDD0A
++:10006000000000009CCC4A4A00000000D1989898FB
++:10007000000000004A0F9AD600000004000CA00007
++:1000800000000038000D0012000000040000E8B479
++:1000900000000038000D0014000000040000E8B665
++:1000A00000000038000D0016000000040000E854B5
++:1000B00000000038000D0018000000040000E855A2
++:1000C00000000038000D001A000000040000E8568F
++:1000D00000000038000D001C000000040000E8577C
++:1000E00000000038000D001E000000040000E8249D
++:1000F00000000038000D0020000000040000E8258A
++:1001000000000038000D0022000000040000E8306C
++:1001100000000038000D0024000000040000F0C0C2
++:1001200000000038000D0026000000040000F0C1AF
++:1001300000000038000D0028000000040000F0411D
++:1001400000000038000D002A000000040000F184C7
++:1001500000000038000D002C000000040000F185B4
++:1001600000000038000D002E000000040000F186A1
++:1001700000000038000D0030000000040000F1878E
++:1001800000000038000D0032000000040000F18083
++:1001900000000038000D0034000000040000F3935C
++:1001A00000000038000D0036000000040000F38A53
++:1001B00000000038000D0038000000040000F38E3D
++:1001C000000000040000E821000000040140A0003D
++:1001D00000000018000000430000000400CCE8000C
++:1001E00000000004001B000100000004080048009B
++:1001F00000000004001B000100000004080048008B
++:1002000000000004001B000100000004080048007A
++:10021000000000080000003A000000000000A000FC
++:10022000000000042000451D000000040000E580DF
++:1002300000000004000CE581000000040800458077
++:1002400000000004000CE5810000000800000047E9
++:10025000000000000000A00000000004000C2000CE
++:10026000000000040000E50E000000040003200070
++:10027000000000280002205100000024000000516E
++:10028000000000040800450F000000080000A04B1B
++:10029000000000040000E565000000040000E566C1
++:1002A00000000008000000520000000403CCA5B4C8
++:1002B00000000004054320000000000400022000AC
++:1002C000000000304CCCE05E0000000408274565CB
++:1002D000000000300000005E0000000408004564DB
++:1002E000000000040000E566000000080000005562
++:1002F00000000010008020610000000400202000A9
++:1003000000000004001B00FF00000010010000645A
++:1003100000000004001F200000000004001C00FF7B
++:100320000000000C00000000000000300000008011
++:100330000000000800000055000000040000E57601
++:1003400000000004000CA0000000000400012000D8
++:100350000000000400082000000000041800650EE2
++:10036000000000040009200000000004000A200032
++:1003700000000004000F0000000000040040000026
++:100380000000001800000074000000040000E56395
++:10039000000000C200C0E5F900000008000000698C
++:1003A000000000080000A069000000040000E576DD
++:1003B000000000040000E577000000040000E50EE6
++:1003C000000000040000E50F000000040140A00050
++:1003D0000000001800000077000000C200C0E5F92E
++:1003E0000000000800000077000000040014E50E83
++:1003F000000000040040E50F0000000800C0007A83
++:10040000000000040000E570000000040000E57139
++:100410000000000C0000E572000000040000A000D5
++:10042000000000040140A000000000040000E56896
++:1004300000000004000C20000000001800000084F0
++:1004400000000004000B00000000000418C0E5627A
++:1004500000000008000000860000000800C00085C1
++:1004600000000004000700E30000003800000092D4
++:1004700000000030000CA09400000004080045BB00
++:1004800000000030000C2095000000000800E5BCD2
++:10049000000000040000E5BB000000000000E5BC17
++:1004A0000000000C00120000000000040012000018
++:1004B0000000000C001B0002000000040000A0006F
++:1004C000000000040000E821000000000000E80037
++:1004D000000000040000E821000000000000E82EF9
++:1004E0000000000402CCA000000000040014000082
++:1004F00000000004000CE1CC00000004050DE1CD7B
++:10050000000000040040000000000018000000A4EB
++:100510000000000400C0A00000000008000000A1CE
++:1005200000000020000000A6000000004200E000E3
++:1005300000000038000000AD00000004000CA00026
++:10054000000000040014000000000004000C200063
++:10055000000000040016000000000004700CE00021
++:1005600000000008001400A9000000004000E000A6
++:10057000000000040240000000000004400EE00003
++:100580000000000402400000000000004000E00005
++:1005900000000004000C2000000000040240E51BE5
++:1005A000000000050080E50A000000050080E50B62
++:1005B000000000040022000000000004000700E327
++:1005C00000000038000000C000000030000C209542
++:1005D000000000050880E5BD00000030000C2094FC
++:1005E000000000050800E5BB00000030000C20956D
++:1005F000000000050880E5BC00000008000000C302
++:10060000000000050080E5BD000000050000E5BB1E
++:10061000000000050080E5BC00000004002100008F
++:1006200000000004028000000000001800C000C7A5
++:10063000000000404180E00000000024000000C9EC
++:100640000000000C010000000000000C0100E51D8E
++:1006500000000004000045BB00000008000080C34B
++:10066000000000040000F3CE000000040140A000E0
++:100670000000000400CC20000000004008C053CF60
++:100680000000000000008000000000040000F3D221
++:10069000000000040140A0000000000400CC200085
++:1006A0000000004008C053D300000000000080009C
++:1006B000000000040000F39D000000040140A000C1
++:1006C0000000000400CC20000000004008C0539E41
++:1006D00000000000000080000000000403C008309B
++:1006E000000000004200E000000000040000A00044
++:1006F00000000004200045E0000000000000E5E1EB
++:10070000000000000000000100000004000700E0FD
++:10071000000000000800E39400000000000000005A
++:10072000000000040000E8C4000000040000E8C568
++:10073000000000040000E8C6000000040000E928F2
++:10074000000000040000E929000000040000E92A7C
++:1007500000000008000000E4000000040000E92898
++:10076000000000040000E929000000040000E92A5C
++:1007700000000008000000EB0000000402C02000A0
++:10078000000000040006000000000034000000F338
++:1007900000000008000000F00000000400008000DD
++:1007A00000000000C000E0000000000000000000A9
++:1007B00000000004000C200000000004001D0018D0
++:1007C00000000004001A000100000034000000FBDB
++:1007D000000000080000004A000000080500A04AD0
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:00000001FF
++/* production radeon ucode r1xx-r6xx */
+diff --git a/firmware/radeon/R420_cp.bin.ihex b/firmware/radeon/R420_cp.bin.ihex
+new file mode 100644
+index 0000000..3815891
+--- /dev/null
++++ b/firmware/radeon/R420_cp.bin.ihex
+@@ -0,0 +1,130 @@
++:10000000000000004200E000000000004000E000AE
++:100010000000000800000099000000080000009D9A
++:10002000000000004A554B4A000000004A4A44675D
++:100030000000000055526F75000000004A7E7D658B
++:1000400000000000D9D3DFF6000000004AC54A4A8C
++:1000500000000000C882828200000000BF4ACFC1B9
++:100060000000000087B04A4A00000000B583838387
++:10007000000000004A0F85BA00000004000CA00038
++:1000800000000038000D0012000000040000E8B479
++:1000900000000038000D0014000000040000E8B665
++:1000A00000000038000D0016000000040000E854B5
++:1000B00000000038000D0018000000040000E855A2
++:1000C00000000038000D001A000000040000E8568F
++:1000D00000000038000D001C000000040000E8577C
++:1000E00000000038000D001E000000040000E8249D
++:1000F00000000038000D0020000000040000E8258A
++:1001000000000038000D0022000000040000E8306C
++:1001100000000038000D0024000000040000F0C0C2
++:1001200000000038000D0026000000040000F0C1AF
++:1001300000000038000D0028000000040000F0411D
++:1001400000000038000D002A000000040000F184C7
++:1001500000000038000D002C000000040000F185B4
++:1001600000000038000D002E000000040000F186A1
++:1001700000000038000D0030000000040000F1878E
++:1001800000000038000D0032000000040000F18083
++:1001900000000038000D0034000000040000F3935C
++:1001A00000000038000D0036000000040000F38A53
++:1001B00000000038000D0038000000040000F38E3D
++:1001C000000000040000E821000000040140A0003D
++:1001D00000000018000000430000000400CCE8000C
++:1001E00000000004001B000100000004080048009B
++:1001F00000000004001B000100000004080048008B
++:1002000000000004001B000100000004080048007A
++:10021000000000080000003A000000000000A000FC
++:10022000000000042000451D000000040000E580DF
++:1002300000000004000CE581000000040800458077
++:1002400000000004000CE5810000000800000047E9
++:10025000000000000000A00000000004000C2000CE
++:10026000000000040000E50E000000040003200070
++:10027000000000280002205100000024000000516E
++:10028000000000040800450F000000080000A04B1B
++:10029000000000040000E565000000040000E566C1
++:1002A00000000008000000520000000403CCA5B4C8
++:1002B00000000004054320000000000400022000AC
++:1002C000000000304CCCE05E0000000408274565CB
++:1002D000000000300000005E0000000408004564DB
++:1002E000000000040000E566000000080000005562
++:1002F00000000010008020610000000400202000A9
++:1003000000000004001B00FF00000010010000645A
++:1003100000000004001F200000000004001C00FF7B
++:100320000000000C0000000000000030000000721F
++:100330000000000800000055000000040000E57601
++:10034000000000040000E577000000040000E50E56
++:10035000000000040000E50F000000040140A000C0
++:100360000000001800000069000000C200C0E5F9AC
++:100370000000000800000069000000040014E50E01
++:10038000000000040040E50F0000000800C0006C01
++:10039000000000040000E570000000040000E571AA
++:1003A0000000000C0000E572000000040000A00046
++:1003B000000000040140A000000000040000E56807
++:1003C00000000004000C200000000018000000766F
++:1003D00000000004000B00000000000418C0E562EB
++:1003E00000000008000000780000000800C000774E
++:1003F00000000004000700C7000000380000008073
++:10040000000000040000E5BB000000000000E5BCA7
++:10041000000000040000A000000000040000E8212B
++:10042000000000000000E800000000040000E821D7
++:10043000000000000000E82E0000000402CCA00034
++:10044000000000040014000000000004000CE1CCD7
++:1004500000000004050DE1CD000000040040000094
++:10046000000000180000008F0000000400C0A00081
++:10047000000000080000008C000000200000009137
++:10048000000000004200E00000000038000000987A
++:1004900000000004000CA000000000040014000094
++:1004A00000000004000C2000000000040016000002
++:1004B00000000004700CE00000000008001400942C
++:1004C000000000004000E0000000000402400000C6
++:1004D00000000004400EE0000000000402400000A4
++:1004E000000000004000E00000000004000C2000BC
++:1004F000000000040240E51B000000050080E50A42
++:10050000000000050080E50B000000040022000050
++:1005100000000004000700C700000038000000A42D
++:10052000000000050080E5BD000000050000E5BBFF
++:10053000000000050080E5BC000000040021000070
++:1005400000000004028000000000001800C000ABA2
++:10055000000000404180E00000000024000000ADE9
++:100560000000000C010000000000000C0100E51D6F
++:1005700000000004000045BB00000008000080A748
++:10058000000000040000F3CE000000040140A000C1
++:100590000000000400CC20000000004008C053CF41
++:1005A0000000000000008000000000040000F3D202
++:1005B000000000040140A0000000000400CC200066
++:1005C0000000004008C053D300000000000080007D
++:1005D000000000040000F39D000000040140A000A2
++:1005E0000000000400CC20000000004008C0539E22
++:1005F00000000000000080000000000403C008307C
++:10060000000000004200E000000000040000A00024
++:1006100000000004200045E0000000000000E5E1CB
++:10062000000000000000000100000004000700C4FA
++:10063000000000000800E39400000000000000003B
++:10064000000000040000E8C4000000040000E8C549
++:10065000000000040000E8C6000000040000E928D3
++:10066000000000040000E929000000040000E92A5D
++:1006700000000008000000C8000000040000E92895
++:10068000000000040000E929000000040000E92A3D
++:1006900000000008000000CF0000000402C020009D
++:1006A000000000040006000000000034000000D735
++:1006B00000000008000000D40000000400008000DA
++:1006C00000000000C000E000000000040000E1CCD9
++:1006D000000000040500E1CD00000004000CA000B3
++:1006E00000000034000000DE00000008000000DA16
++:1006F000000000000000A000000000040019E1CC90
++:1007000000000004001B0001000000040500A00020
++:1007100000000004080041CD00000004000CA0000F
++:1007200000000034000000FB000000080000004A48
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B00000000004000C200000000004001D0018D0
++:1007C00000000004001A000100000034000000FBDB
++:1007D000000000080000004A000000080500A04AD0
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:00000001FF
++/* production radeon ucode r1xx-r6xx */
+diff --git a/firmware/radeon/R520_cp.bin.ihex b/firmware/radeon/R520_cp.bin.ihex
+new file mode 100644
+index 0000000..372ff82
+--- /dev/null
++++ b/firmware/radeon/R520_cp.bin.ihex
+@@ -0,0 +1,130 @@
++:10000000000000004200E000000000004000E000AE
++:100010000000000800000099000000080000009D9A
++:10002000000000004A554B4A000000004A4A44675D
++:100030000000000055526F75000000004A7E7D658B
++:1000400000000000E0DAE6F6000000004AC54A4A77
++:1000500000000000C882828200000000BF4ACFC1B9
++:100060000000000087B04AD500000000B5838383FC
++:10007000000000004A0F85BA00000004000CA00038
++:1000800000000038000D0012000000040000E8B479
++:1000900000000038000D0014000000040000E8B665
++:1000A00000000038000D0016000000040000E854B5
++:1000B00000000038000D0018000000040000E855A2
++:1000C00000000038000D001A000000040000E8568F
++:1000D00000000038000D001C000000040000E8577C
++:1000E00000000038000D001E000000040000E8249D
++:1000F00000000038000D0020000000040000E8258A
++:1001000000000038000D0022000000040000E8306C
++:1001100000000038000D0024000000040000F0C0C2
++:1001200000000038000D0026000000040000F0C1AF
++:1001300000000038000D0028000000040000E0006E
++:1001400000000038000D002A000000040000E0005C
++:1001500000000038000D002C000000040000E0004A
++:1001600000000038000D002E000000040000E00038
++:1001700000000038000D0030000000040000E00026
++:1001800000000038000D0032000000040000F18083
++:1001900000000038000D0034000000040000F3935C
++:1001A00000000038000D0036000000040000F38A53
++:1001B00000000038000D0038000000040000F38E3D
++:1001C000000000040000E821000000040140A0003D
++:1001D00000000018000000430000000400CCE8000C
++:1001E00000000004001B000100000004080048009B
++:1001F00000000004001B000100000004080048008B
++:1002000000000004001B000100000004080048007A
++:10021000000000080000003A000000000000A000FC
++:10022000000000042000451D000000040000E580DF
++:1002300000000004000CE581000000040800458077
++:1002400000000004000CE5810000000800000047E9
++:10025000000000000000A00000000004000C2000CE
++:10026000000000040000E50E000000040003200070
++:10027000000000280002205100000024000000516E
++:10028000000000040800450F000000080000A04B1B
++:10029000000000040000E565000000040000E566C1
++:1002A00000000008000000520000000403CCA5B4C8
++:1002B00000000004054320000000000400022000AC
++:1002C000000000304CCCE05E0000000408274565CB
++:1002D000000000300000005E0000000408004564DB
++:1002E000000000040000E566000000080000005562
++:1002F00000000010008020610000000400202000A9
++:1003000000000004001B00FF00000010010000645A
++:1003100000000004001F200000000004001C00FF7B
++:100320000000000C0000000000000030000000721F
++:100330000000000800000055000000040000E57601
++:10034000000000040000E577000000040000E50E56
++:10035000000000040000E50F000000040140A000C0
++:100360000000001800000069000000C200C0E5F9AC
++:100370000000000800000069000000040014E50E01
++:10038000000000040040E50F0000000800C0006C01
++:10039000000000040000E570000000040000E571AA
++:1003A0000000000C0000E572000000040000A00046
++:1003B000000000040140A000000000040000E56807
++:1003C00000000004000C200000000018000000766F
++:1003D00000000004000B00000000000418C0E562EB
++:1003E00000000008000000780000000800C000774E
++:1003F00000000004000700C7000000380000008073
++:10040000000000040000E5BB000000000000E5BCA7
++:10041000000000040000A000000000040000E8212B
++:10042000000000000000E800000000040000E821D7
++:10043000000000000000E82E0000000402CCA00034
++:10044000000000040014000000000004000CE1CCD7
++:1004500000000004050DE1CD000000040040000094
++:10046000000000180000008F0000000400C0A00081
++:10047000000000080000008C000000200000009137
++:10048000000000004200E00000000038000000987A
++:1004900000000004000CA000000000040014000094
++:1004A00000000004000C2000000000040016000002
++:1004B00000000004700CE00000000008001400942C
++:1004C000000000004000E0000000000402400000C6
++:1004D00000000004400EE0000000000402400000A4
++:1004E000000000004000E00000000004000C2000BC
++:1004F000000000040240E51B000000050080E50A42
++:10050000000000050080E50B000000040022000050
++:1005100000000004000700C700000038000000A42D
++:10052000000000050080E5BD000000050000E5BBFF
++:10053000000000050080E5BC000000040021000070
++:1005400000000004028000000000001800C000ABA2
++:10055000000000404180E00000000024000000ADE9
++:100560000000000C010000000000000C0100E51D6F
++:1005700000000004000045BB00000008000080A748
++:10058000000000040000F3CE000000040140A000C1
++:100590000000000400CC20000000004008C053CF41
++:1005A0000000000000008000000000040000F3D202
++:1005B000000000040140A0000000000400CC200066
++:1005C0000000004008C053D300000000000080007D
++:1005D000000000040000F39D000000040140A000A2
++:1005E0000000000400CC20000000004008C0539E22
++:1005F00000000000000080000000000403C008307C
++:10060000000000004200E000000000040000A00024
++:1006100000000004200045E0000000000000E5E1CB
++:10062000000000000000000100000004000700C4FA
++:10063000000000000800E39400000000000000003B
++:10064000000000040000E8C4000000040000E8C549
++:10065000000000040000E8C6000000040000E928D3
++:10066000000000040000E929000000040000E92A5D
++:1006700000000008000000C8000000040000E92895
++:10068000000000040000E929000000040000E92A3D
++:1006900000000008000000CF00000000DEADBEEF4B
++:1006A000000000000000011600000004000700D355
++:1006B00000000004080050E700000004000700D418
++:1006C000000000040800401C000000000000E01DC5
++:1006D0000000000402C0200000000004000600002A
++:1006E00000000034000000DE00000008000000DB15
++:1006F000000000040000800000000000C000E000D6
++:10070000000000040000E1CC000000040500E1CD81
++:1007100000000004000CA00000000034000000E510
++:1007200000000008000000E1000000000000A00040
++:10073000000000040019E1CC00000004001B0001CF
++:10074000000000040500A00000000004080041CDE6
++:1007500000000004000CA00000000034000000FBBA
++:10076000000000080000004A000000000000000037
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B00000000004000C200000000004001D0018D0
++:1007C00000000004001A000100000034000000FBDB
++:1007D000000000080000004A000000080500A04AD0
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:00000001FF
++/* production radeon ucode r1xx-r6xx */
+diff --git a/firmware/radeon/R600_me.bin.ihex b/firmware/radeon/R600_me.bin.ihex
+new file mode 100644
+index 0000000..30d4c14
+--- /dev/null
++++ b/firmware/radeon/R600_me.bin.ihex
+@@ -0,0 +1,1345 @@
++:1000000000000000C020040000000000000000000C
++:1000100000A0000A000000000000FFFF00284621A9
++:100020000000000000000000D900480000000000AF
++:1000300000000000C02004000000000000000000DC
++:1000400000A0000A000000000000000000E0000026
++:100050000000000000010000C02946200000000050
++:1000600000000000D900480000000000000000006F
++:10007000C0200400000000000000000000A0000AF2
++:10008000000000008100000000204411000000007A
++:1000900000000001002048110000000000042004BE
++:1000A0000060441100000614000000000060000021
++:1000B000000005B20000000000600000000005C55F
++:1000C00000000000C02008000000000000000F0039
++:1000D000002816220000000000000008002116255C
++:1000E0000000000000000020002036250000000075
++:1000F0008D000000002044110000000000000004FA
++:10010000002F022500000000000000000CE00000AD
++:1001100000000018004120000040481100000019B4
++:100120000042200000204811000000008E00000066
++:1001300000204411000000000000003100204A2D82
++:1001400000000000900000000020441100000000AA
++:100150000000000000204805000000000000000C26
++:1001600000211622000000000000000300281625D0
++:10017000000000000000001900211A220000000009
++:100180000000000400281A26000000000000000003
++:10019000002914C5000000000000002100203625C1
++:1001A0000000000000000000003A140200000000FF
++:1001B00000000016002116250000000000000003CA
++:1001C00000281625000000000000001D00200E2D54
++:1001D00000000000FFFFFFFC00280E2300000000CD
++:1001E00000000000002914A3000000000000001D12
++:1001F00000203625000000000000800000280E22AC
++:10020000000000000000000700220E230000000094
++:10021000000000000029386E0000000020000000EF
++:1002200000280E22000000000000000600210E231E
++:1002300000000000000000000029386E00000000EF
++:100240000000000000220222000000000000000068
++:1002500014E0000000000038000000002EE0000064
++:1002600000000035000000002CE000000000003716
++:100270000000000000400E2D0000003900000008C2
++:1002800000200E2D00000000000000090040122D8B
++:10029000000000460000000100400E2D0000003963
++:1002A00000000000C0200C0000000000003FFFFC28
++:1002B0000028122300000000000000020022122487
++:1002C000000000000000001F00211E2300000000AD
++:1002D0000000000014E000000000003E00000008E4
++:1002E00000401C11000000410000000D00201E2DE8
++:1002F000000000000000000F00281E270000000082
++:100300000000000300221E27000000007FC0000044
++:1003100000281A23000000000000001400211A2603
++:10032000000000000000000100331A260000000059
++:100330000000000800221A26000000000000000053
++:1003400000290CC700000000000000300020362407
++:100350000000000000007F000028122100000000C3
++:1003600000001400002F0224000000000000000024
++:100370000CE000000000004B0000000100290E23EB
++:1003800000000000000000100020362300000000E4
++:100390000000E0000020441100000000FFF8000011
++:1003A00000294A230000000000000000003A2C024F
++:1003B000000000000000000200220E2B00000000E0
++:1003C000FC00000000280E230000000000000011C7
++:1003D000002036230000000000001FFF00294A23F0
++:1003E000000000000000003000204A2D0000000046
++:1003F0000000000000204811000000000000003252
++:1004000000200E2D00000000060A020000294A23E9
++:100410000000000000000000002048110000000063
++:100420000000000000204811000000000000000152
++:1004300000210222000000000000000014E0000083
++:1004400000000061000000002EE000000000005FDE
++:10045000000000002CE000000000005E0000000032
++:1004600000400E2D000000620000000100400E2D33
++:10047000000000620000000A00200E2D00000000B5
++:100480000000000B0040122D0000006A0000000078
++:10049000C0200C0000000000003FFFFC00281223D9
++:1004A00000000000000000020022122400000000F2
++:1004B0007FC0000000281623000000000000001488
++:1004C0000021162500000000000000010033162561
++:1004D000000000008000000000280E230000000043
++:1004E0000000000000290CA3000000003FFFFC00FA
++:1004F00000290E23000000000000001F00211E2321
++:10050000000000000000000014E000000000006D8A
++:100510000000010000401C11000000700000000DF0
++:1005200000201E2D00000000000000F000281E2703
++:10053000000000000000000400221E270000000050
++:100540008100000000204411000000000000000DA8
++:100550000020481100000000FFFFF0FF00281A30C3
++:10056000000000000000A02800204411000000004E
++:1005700000000000002948E6000000000000A0186C
++:1005800000204411000000003FFFFFFF00284A2325
++:10059000000000000000A010002044110000000036
++:1005A0000000000000204804000000000000002DB2
++:1005B0000020162D0000000000000000002F00A306
++:1005C00000000000000000000CC0000000000080DF
++:1005D0000000002E0020162D00000000000000008A
++:1005E000002F00A400000000000000000CC000006C
++:1005F00000000081000000000040000000000087B3
++:100600000000002D00203623000000000000002E16
++:1006100000203624000000000000001D00201E2DD8
++:10062000000000000000000200210227000000007E
++:100630000000000014E0000000000087000000003F
++:1006400000600000000005ED0000000000600000F8
++:10065000000005E10000000200210E220000000061
++:100660000000000014C000000000008A0000001814
++:10067000C040362000000090000000002EE0000086
++:100680000000008E000000002CE000000000008D43
++:100690000000000200400E2D0000008F000000034B
++:1006A00000400E2D0000008F0000000C00200E2DD9
++:1006B00000000000000000180020362300000000A9
++:1006C0000000000300210E220000000000000000D6
++:1006D00014C00000000000950000A00C0020441190
++:1006E0000000000000000000C020480000000000E2
++:1006F00000000000C04048000000009D0000A00C69
++:1007000000204411000000000000000000204811FB
++:1007100000000000000000002EE000000000009B30
++:10072000000000002CE000000000009A0000000221
++:1007300000400E2D0000009C0000000300400E2D24
++:100740000000009C0000000C00200E2D00000000A6
++:10075000000000000020480300000000000000002E
++:10076000003A0C0200000000003F000000280E23A9
++:10077000000000000000001000210E230000000017
++:100780000000001300203623000000000000001EBF
++:100790000021022B000000000000000014C0000037
++:1007A000000000A40000001CC02036200000000053
++:1007B0000000001F0021022B0000000000000000CC
++:1007C00014C00000000000A70000001BC02036205D
++:1007D000000000000000000800210E2B00000000B7
++:1007E0000000007F00280E23000000000000000031
++:1007F000002F022300000000000000000CE00000B9
++:10080000000000DB000000002700000000000000E6
++:1008100000000000006000000000028C8100000069
++:1008200000204411000000000000000600204811D4
++:10083000000000000000000C00221E30000000003C
++:100840009980000000204411000000000000000416
++:100850000020122D000000000000000800221224D9
++:10086000000000000000001000201811000000002F
++:100870000000000000291CE400000000000000004F
++:1008800000604807000001289B0000000020441180
++:1008900000000000000000000020480200000000EE
++:1008A0009C00000000204411000000000000000037
++:1008B0000033146F000000000000000100333E23ED
++:1008C0000000000000000000D90048000000000007
++:1008D0000000000000203C05000000008100000036
++:1008E00000204411000000000000000E002048110C
++:1008F00000000000000000000020101000000000B8
++:100900000000E00700204411000000000000000F7C
++:100910000021022B000000000000000014C00000B5
++:10092000000000C500F8FF0800204811000000008A
++:100930009800000000404811000000D6000000F0C0
++:1009400000280E2200000000000000A0002F02235B
++:1009500000000000000000000CC00000000000D4F7
++:100960000000001300200E2D000000000000000118
++:10097000002F022300000000000000000CE0000037
++:10098000000000CF00000002002F02230000000042
++:10099000000000000CE00000000000CE00003F005E
++:1009A00000400C11000000D000001F0000400C119E
++:1009B000000000D000000F0000200C11000000001B
++:1009C0000038000900294A23000000003F00000011
++:1009D00000280E2B000000000000000200220E2361
++:1009E000000000000000000700494A23000000D674
++:1009F00000380F09002048110000000068000007BF
++:100A000000204811000000000000000800214A27D3
++:100A1000000000000000000000204811000000005D
++:100A2000060A020000294A2400000000000000001D
++:100A300000204811000000000000000000204811C4
++:100A4000000000000000A20200204411000000008D
++:100A500000FF000000284A220000000000000030D3
++:100A600000200E2D000000000000002E0020122D9E
++:100A70000000000000000000002F008300000000C4
++:100A8000000000000CE00000000000E30000000097
++:100A900000600000000005E70000000000400000CA
++:100AA000000000E40000000000600000000005EA13
++:100AB000000000070020222D0000000000000005BB
++:100AC00000220E22000000000010000000280E236B
++:100AD0000000000000000000002920680000000065
++:100AE00000000000003A0C0200000000000000EFCF
++:100AF00000280E23000000000000000000292068EC
++:100B0000000000000000001D00200E2D000000006D
++:100B1000000000030021022300000000000000008C
++:100B200014E00000000000F10000000B002102288A
++:100B3000000000000000000014C00000000000F1F0
++:100B40000000040000292228000000000000001A14
++:100B500000203628000000000000001C00210E22AA
++:100B6000000000000000000014C00000000000F6BB
++:100B70000000A30C00204411000000000000000051
++:100B800000204811000000000000001E00210E227D
++:100B9000000000000000000014C00000000001047C
++:100BA0000000A30F0020441100000000000000130B
++:100BB00000200E2D0000000000000001002F022385
++:100BC00000000000000000000CC00000000000FD5C
++:100BD000FFFFFFFF00404811000001040000000279
++:100BE000002F022300000000000000000CC00000E5
++:100BF000000001000000FFFF004048110000010458
++:100C000000000004002F022300000000000000008C
++:100C10000CC0000000000103000000FF004048116C
++:100C20000000010400000001002048110000000045
++:100C30000002C40000204411000000000000001F5A
++:100C400000210E22000000000000000014C000007F
++:100C50000000010B0000001040210E2000000000E9
++:100C600000000019002036230000000000000018DA
++:100C700040224A200000000000000010C0424A202C
++:100C80000000010D0000000000200C110000000019
++:100C900000000019002036230000000000000000C2
++:100CA0000020481100000000000000000020481152
++:100CB000000000000000000A0020101100000000E9
++:100CC00000000000002F02240000000000000000CF
++:100CD0000CE000000000011400000000002048119A
++:100CE0000000000000000001005312240000011069
++:100CF000FFBFFFFF00283A2E000000000000001B8D
++:100D000000210222000000000000000014C00000CA
++:100D100000000127810000000020441100000000B5
++:100D20000000000D00204811000000000000001825
++:100D300000220E3000000000FC00000000280E23FE
++:100D400000000000810000000020441100000000AD
++:100D50000000000E0020481100000000000000000C
++:100D600000201010000000000000E00E00204411E0
++:100D70000000000007F8FF080020481100000000F4
++:100D80000000000000294A230000000000000024A9
++:100D900000201E2D000000000000000800214A274E
++:100DA00000000000000000000020481100000000CA
++:100DB000060A020000294A2400000000000000008A
++:100DC0000020481100000000000000000020481131
++:100DD0000000000000000000008000000000000093
++:100DE000810000000020441100000000000000010C
++:100DF00000204811000000000000217C0020441168
++:100E000000000000008000000020481100000000E9
++:100E1000000000000020480600000000000000085C
++:100E200000214A2700000000000000001700000019
++:100E3000000000000004217F00604411000006143F
++:100E40000000001F00210230000000000000000030
++:100E500014C00000000006130000000400404C1104
++:100E60000000012E00000000006000000000000BE8
++:100E70000000000000600411000002FE00000000FD
++:100E800000200411000000000000000000600811B4
++:100E90000000019F00000000006000000000015100
++:100EA0000000FFFF40280E2000000000000000109E
++:100EB000C0211220000000000000FFFF4028062093
++:100EC0000000000000000010C0210A200000000007
++:100ED0000000000000341461000000000000000069
++:100EE00000741882000002A40001A1FD00604411FA
++:100EF000000002C900003FFF002F022F0000000089
++:100F0000000000000CC000000000013800000000DC
++:100F1000C04004000000000100000000006000006C
++:100F20000000000B0000000000600411000002FE41
++:100F3000000000000020041100000000000000007C
++:100F4000006008110000019F00003FFF002F022FEA
++:100F500000000000000000000CE0000000000000A5
++:100F600000000000006000000000015100000010BF
++:100F700040210E20000000000000FFFFC0281220CA
++:100F800000000000000000104021162000000000BA
++:100F90000000FFFFC0681A20000002A40001A1FDAC
++:100FA00000604411000002C900003FFF002F022F23
++:100FB00000000000000000000CC00000000001491B
++:100FC00000000000C0400400000000010000225C9E
++:100FD00000204411000000000000000100300A2F32
++:100FE000000000000000000100210A2200000000B3
++:100FF0000000000300384A220000000000002256D2
++:1010000000204411000000000000001A00204811D8
++:10101000000000000000A1FC0020441100000000BE
++:1010200000000001008048110000000000000000E6
++:10103000006000000000000B0000000000600000E5
++:101040000000017C00000000006000000000018D35
++:1010500000003FFF002F022F0000000000000000F2
++:101060000CE00000000000000000000000202C0840
++:10107000000000000000000000202411000000001B
++:10108000000000000020281100000000000022568F
++:10109000002044110000000000000016002048114C
++:1010A000000000000000225C00204411000000004D
++:1010B00000000003002048110000000093800000A1
++:1010C00000204411000000000000000200221E2940
++:1010D0000000000000000000007048EB00000189E3
++:1010E0000000000000600000000002A400000001F9
++:1010F000403306200000000000000000C03024093A
++:101100000000000000003FFF002F022F0000000041
++:10111000000000000CE000000000000000000000E3
++:10112000006000000000028C9500000000204411C7
++:101130000000000000000000002F0221000000005D
++:10114000000000000CE0000000000173000000003F
++:10115000C0204800000000000000000100530621EC
++:101160000000016F92000000002044110000000008
++:1011700000000000C0604800000001840001A1FDE3
++:101180000020441100000000000000130020062D84
++:1011900000000000000000000078042A000002E4C3
++:1011A00000000000002028090000000000003FFFB0
++:1011B000002F022F00000000000000000CC0000003
++:1011C0000000016500000000C040040000000001B4
++:1011D0000000021000600411000002FE00003FFF4A
++:1011E000002F022F00000000000000000CE00000B3
++:1011F000000001810000001BC0203620000000001C
++:101200000000001CC0203620000000003F800000CD
++:1012100000200411000000004600000000600811DA
++:101220000000019F0000000000800000000000009E
++:101230000000A1FC002044110000000000003FFF5E
++:10124000002F022F00000000000000000CC0000072
++:10125000000001880000000100804811000000002B
++:101260000000002100804811000000000000FFFF86
++:1012700040280E200000000000000010C0211220B5
++:10128000000000000000FFFF4028162000000000C2
++:1012900000000010C0811A20000000008100000042
++:1012A000002044110000000000000006002048114A
++:1012B000000000000000000800221E3000000000B6
++:1012C0000000003200201A2D000000000000E000A5
++:1012D0000020441100000000FFFBFF09002048111E
++:1012E00000000000000000110020222D000000007E
++:1012F00000001FFF00294A2800000000000000062F
++:101300000020222D0000000000000000002920E83D
++:10131000000000000000000000204808000000005D
++:10132000000000000020481100000000060A020032
++:1013300000294A260000000000000000002048119B
++:101340000000000000000000002048110000000024
++:10135000000001000020181100000000000000083B
++:1013600000621E28000001280000000800822228D8
++:10137000000000000002C000002044110000000036
++:101380000000001B00600E2D000001AA0000001CE0
++:1013900000600E2D000001AA0000C00800204411CA
++:1013A000000000000000001D00200E2D00000000C5
++:1013B0000000000014C00000000001A600000000B2
++:1013C000002004110000000000000000002048017F
++:1013D000000000003900000000204811000000005B
++:1013E0000000000000204811000000000000000084
++:1013F00000804802000000000000002000202E2D88
++:101400000000000000000000003B0D630000000031
++:101410000000000800224A23000000000000001025
++:1014200000224A23000000000000001800224A2386
++:1014300000000000000000000080480300000000E1
++:1014400000000000006000000000000B0000100021
++:1014500000600411000002FE0000000000200411E2
++:101460000000000000000000006008110000019F63
++:10147000000000070021062F0000000000000019F6
++:1014800000200A2D000000000000000100202C11A7
++:10149000000000000000FFFF4028222000000000A4
++:1014A0000000000F002622280000000000000010AD
++:1014B00040212620000000000000000F0026262901
++:1014C00000000000000000000020280200000000D2
++:1014D0000000225600204411000000000000001B04
++:1014E000002048110000000000000000002F022131
++:1014F00000000000000000000CE00000000001CD32
++:101500000000225C00204411000000000000008167
++:1015100000204811000000000000A1FC0020441140
++:101520000000000000000001002048110000000041
++:101530000000008000201C110000000000000000DE
++:10154000002F022700000000000000000CE0000057
++:10155000000001C90000000000600000000001D68A
++:101560000000000100531E27000001C5000000011B
++:1015700000202C11000000000000001F00280A229B
++:10158000000000000000001F00282A2A00000000C0
++:101590000000000100530621000001BE0000225C93
++:1015A00000204411000000000000000200304A2F1B
++:1015B000000000000000A1FC002044110000000019
++:1015C00000000001002048110000000000000001A0
++:1015D00000301E2F0000000000000000002F022736
++:1015E00000000000000000000CE00000000000000F
++:1015F0000000000000600000000001D600000001B3
++:1016000000531E27000001D20000FFFF40280E20DB
++:10161000000000000000000F00260E230000000064
++:1016200000000010C0211220000000000000000F88
++:101630000026122400000000000000000020141109
++:10164000000000000000000000601811000002A46B
++:101650000001A1FD00204411000000000000000076
++:10166000002F022B00000000000000000CE0000032
++:10167000000001E500000010002216280000000014
++:10168000FFFF000000281625000000000000FFFFFB
++:1016900000281A290000000000000000002948C5A9
++:1016A00000000000000000000020480A00000000C8
++:1016B0000000000000202C110000000000000010BD
++:1016C0000022162300000000FFFF0000002816255E
++:1016D000000000000000FFFF00281A2400000000A6
++:1016E00000000000002948C50000000000000000C4
++:1016F00000731503000001F200000000002018052F
++:10170000000000000000000000731524000001F23A
++:1017100000000000002D14C50000000000000000C3
++:10172000003008A200000000000000000020480275
++:10173000000000000000000000202802000000005F
++:101740000000000000202003000000000000000056
++:1017500000802404000000000000000F002102258A
++:10176000000000000000000014C00000000006138C
++:1017700000000000002B1405000000000000000124
++:10178000009016250000000000000000006000002E
++:101790000000000B0000000000600411000002FEC9
++:1017A0000000000000200411000000000000000004
++:1017B000006008110000019F000022560020441123
++:1017C000000000000000001A00294A22000000006A
++:1017D00000000000C02000000000000000003FFFEB
++:1017E000002F022F00000000000000000CE00000AD
++:1017F0000000000000000000C02004000000000005
++:101800000000225C002044110000000000000003E2
++:1018100000384A21000000000000A1FC0020441113
++:10182000000000000000000100204811000000003E
++:101830000000FFFF40281220000000000000001000
++:10184000C0211A20000000000000FFFF40280E20E9
++:101850000000000000000010C02116200000000061
++:101860000000000000741465000002A40001A1FD46
++:1018700000604411000002C900000001003306218D
++:101880000000000000000000002F02210000000006
++:10189000000000000CC000000000020600003FFF36
++:1018A000002F022F00000000000000000CC000000C
++:1018B000000001FF00000000C04004000000000123
++:1018C0000000000000600000000005C500000000EE
++:1018D0000040040F00000200000000000060000053
++:1018E000000005B20000000000600000000005C517
++:1018F0000000021000600411000002FE0000000061
++:10190000006000000000018D000000000060000089
++:10191000000001890000000000600000000002A437
++:1019200000000000006000000000028C93800000B6
++:1019300000204411000000000000000000204808C2
++:10194000000000009500000000204411000000008D
++:1019500000000000002F022F000000000000000027
++:101960000CE000000000021F00000000C040480022
++:101970000000021C92000000002044110000000042
++:1019800000000000C02048000000000000002256B7
++:101990000020441100000000000000160020481143
++:1019A000000000000000225C002044110000000044
++:1019B0000000000300204811000000000000A1FC0E
++:1019C0000020441100000000000000010020481128
++:1019D000000000000001A1FD0020441100000000F3
++:1019E0000000000000600411000002E4000000009C
++:1019F000C040040000000001000000000060000082
++:101A0000000005B20000A00C0020441100000000FE
++:101A100000000000C020480000000000000000009E
++:101A2000C04048000000000000000000006000000E
++:101A30000000000B0000001840210A2000000000F8
++:101A400000000003002F0222000000000000000040
++:101A50000AE00000000002350000001A0020222DDC
++:101A600000000000000801010029222800000000F9
++:101A70000000001A00203628000000000000A30C1F
++:101A8000002044110000000000000000C0204800B9
++:101A90000000000000000000C0204800000000001E
++:101AA00000000000C04048000000023A00000000B2
++:101AB000006000000000000B000000100060041136
++:101AC000000002FE3F800000002004110000000022
++:101AD00000000000006008110000019F0000225C6F
++:101AE0000020441100000000000000030020481105
++:101AF000000000000000000000600000000002651F
++:101B00000000001D00201E2D00000000000000014C
++:101B100000211E27000000000000000014E000006B
++:101B2000000002530000001800201E2D00000000DD
++:101B30000000FFFF00281E2700000000000000003A
++:101B400000341C27000000000000000012C000004C
++:101B5000000002480000000000201C1100000000EE
++:101B600000000000002F00E5000000000000000061
++:101B700008C000000000024B000000000020140715
++:101B8000000000000000001800201E2D00000000D2
++:101B90000000001000211E270000000000000000CF
++:101BA00000341C47000000000000000012C00000CC
++:101BB000000002500000000000201C110000000086
++:101BC00000000000002F00E6000000000000000000
++:101BD00008C00000000002530000000000201807A9
++:101BE000000000000000000000600000000002AAE9
++:101BF00000002256002044110000000000000000F8
++:101C000000342023000000000000000012C000008B
++:101C10000000025B000000000034204400000000CF
++:101C20000000000012C000000000025A0000001670
++:101C3000004048110000025F0000001800404811F9
++:101C40000000025F0000000000342044000000009B
++:101C50000000000012C000000000025E000000173B
++:101C6000004048110000025F0000001900204811E8
++:101C7000000000000000A1FC002044110000000052
++:101C80000000000100204811000000000001A1FD3B
++:101C900000604411000002D200003FFF002F022F1D
++:101CA00000000000000000000CC000000000023F27
++:101CB00000000000C040040000000001000000100F
++:101CC00040210620000000000000FFFFC0280A207D
++:101CD000000000000000001040210E200000000065
++:101CE0000000FFFFC02812200000000000000010CC
++:101CF00040211620000000000000FFFFC0881A20CD
++:101D000000000000810000000020441100000000DD
++:101D10000000000100204811000000000004200421
++:101D20000060441100000614000000000060000084
++:101D3000000005B200000000C06000000000028C3E
++:101D40000000000500200A2D00000000000000082F
++:101D500000220A22000000000000003400201A2D9A
++:101D6000000000000000002400201E2D00000000E4
++:101D70000000700000281E27000000000000000086
++:101D800000311CE6000000000000003300201A2D86
++:101D9000000000000000000C00221A2600000000D5
++:101DA00000000000002F00E600000000000000001E
++:101DB00006E000000000027B0000000000201C1173
++:101DC000000000000000000000200C1100000000D6
++:101DD0000000003400203623000000000000001046
++:101DE00000201811000000000000000000691CE243
++:101DF0000000012893800000002044110000000032
++:101E000000000000002048070000000095000000CE
++:101E1000002044110000000000000000002F022FED
++:101E200000000000000000000CE00000000002863E
++:101E30000000000100333E2F000000000000000001
++:101E4000D90048000000000092000000002044116A
++:101E50000000000000000000C0204800000000005A
++:101E60000000002400403627000000000000000CA5
++:101E7000C0220A20000000000000003200203622AC
++:101E80000000000000000031C040362000000000CB
++:101E90000000A2A40020441100000000000000097E
++:101EA0000020481100000000A100000000204411A3
++:101EB0000000000000000001008048110000000048
++:101EC0000000002900201E2D00000000000000007E
++:101ED000002C1CE300000000000000290020362731
++:101EE000000000000000002A00201E2D000000005D
++:101EF00000000000002C1CE4000000000000002A8C
++:101F000000203627000000000000002B00201E2DBE
++:101F10000000000000000000003120A300000000CD
++:101F200000000000002D1D07000000000000002B35
++:101F300000203627000000000000002C00201E2D8D
++:101F40000000000000000000003120C4000000007C
++:101F500000000000002D1D07000000000000002C04
++:101F600000803627000000000000002900203623F2
++:101F7000000000000000002A0020362400000000BD
++:101F80000000000000311CA3000000000000002B36
++:101F900000203627000000000000000000311CC4B3
++:101FA000000000000000002C008036270000000028
++:101FB000000000220020362700000000000000235F
++:101FC00000203628000000000000001D00201E2D0B
++:101FD00000000000000000020021022700000000B5
++:101FE0000000000014C00000000002C50000000056
++:101FF00000400000000002C200000022002036273E
++:10200000000000000000002300203628000000002F
++:102010000000001D00201E2D000000000000000236
++:1020200000210227000000000000000014E0000072
++:10203000000002C20000000300210227000000008F
++:102040000000000014E00000000002C50000002BAA
++:1020500000201E2D0000000000000000002E00E106
++:10206000000000000000000002C00000000002C5E7
++:102070000000002900201E2D0000000000000000CC
++:10208000003120A10000000000000000002E00E848
++:10209000000000000000000006C00000000002C5B3
++:1020A0000000002C00201E2D000000000000000099
++:1020B000002E00E2000000000000000002C000004E
++:1020C000000002C50000002A00201E2D00000000B4
++:1020D00000000000003120C20000000000000000ED
++:1020E000002E00E8000000000000000006C0000014
++:1020F000000002C50000000000600000000005EDC7
++:1021000000000000006000000000029E00000000CF
++:1021100000400000000002C7000000000060000056
++:102120000000029E0000000000600000000005E4C6
++:102130000000000000400000000002C70000000096
++:10214000006000000000029000000000004000005D
++:10215000000002C70000002200201E2D0000000029
++:10216000000000230080222D00000000000000106D
++:1021700000221E2300000000000000000029488704
++:10218000000000000000000000311CA3000000005F
++:102190000000001000221E270000000000000000C8
++:1021A00000294887000000000000001000221E23C4
++:1021B0000000000000000000003120C4000000000A
++:1021C0000000FFFF0028222800000000000000009F
++:1021D00000894907000000000000001000221E23B3
++:1021E00000000000000000000029488700000000F7
++:1021F0000000001000221E2100000000000000006E
++:1022000000294847000000000000000000311CA326
++:10221000000000000000001000221E270000000047
++:1022200000000000002948870000000000000000B6
++:1022300000311CA1000000000000001000221E2739
++:1022400000000000000000000029484700000000D6
++:102250000000001000221E2300000000000000000B
++:10226000003120C4000000000000FFFF00282228E9
++:1022700000000000000000000029490700000000E5
++:102280000000001000221E210000000000000000DD
++:10229000003120C2000000000000FFFF00282228BB
++:1022A0000000000000000000008949070000000055
++:1022B0000000001000221E230000000000000000AB
++:1022C00000294887000000000000000100220A21C8
++:1022D0000000000000000000003308A20000000021
++:1022E0000000001000221E2200000000000000106C
++:1022F0000021222200000000000000000029490700
++:10230000000000000000000000311CA300000000DD
++:102310000000001000221E27000000000000000046
++:1023200000294887000000000000000100220A2167
++:102330000000000000000000003008A200000000C3
++:102340000000001000221E2200000000000000100B
++:10235000002122220000000000000000002949079F
++:10236000000000000000001000221E2300000000FA
++:1023700000000000003120C4000000000000FFFF4A
++:102380000028222800000000000000000029490762
++:102390000000000000000000003808C50000000038
++:1023A00000000000003008410000000000000001B3
++:1023B00000220A220000000000000000003308A2F2
++:1023C000000000000000001000221E22000000009B
++:1023D0000000001000212222000000000000000088
++:1023E00000894907000000000000001D0020222D88
++:1023F000000000000000000014C000000000030105
++:10240000FFFFFFEF00280621000000000000001A77
++:102410000020222D000000000000F8E00020441100
++:102420000000000000000000002949010000000039
++:1024300000000000008949010000000000000000C9
++:10244000002048110000000000000000002048119A
++:1024500000000000060A0200008048110000000091
++:1024600000000000C02000000000000097000000F5
++:10247000C02044110000000000000000C0204811EE
++:10248000000000008A00000000204411000000004D
++:102490000000000000204811000000000000225C45
++:1024A000002044110000000000000000C02048008F
++:1024B000000000000000A1FC00204411000000000A
++:1024C00000000000C02048000000000000000000E4
++:1024D000C0200400000000000000000000A0000A6E
++:1024E00000000000970000000020441100000000E0
++:1024F0000000000000204811000000008A000000D9
++:1025000000204411000000000000000000204811DD
++:10251000000000000000225C0020441100000000C8
++:1025200000000000C0204800000000000000A1FCE6
++:10253000002044110000000000000000C0204800FE
++:102540000000000000000000C020040000000000A7
++:102550000000000000A0000A00000000970000003A
++:10256000002044110000000000000000002048117D
++:10257000000000008A00000000204411000000005C
++:102580000000000000204811000000000000225C54
++:10259000002044110000000000000000C02048009E
++:1025A000000000000000A1FC002044110000000019
++:1025B00000000000C0204800000000000001A1FD54
++:1025C000002044110000000000000000D900480075
++:1025D0000000000000000000C02004000000000017
++:1025E0000000000000A0000A0000000000002257C8
++:1025F000002044110000000000000003C0484A20F1
++:10260000000000000000225D0020441100000000D6
++:1026100000000000C0404800000000000000000072
++:1026200000600000000005C500000000C020080098
++:10263000000000000000225C0020441100000000A7
++:102640000000000300384A22000000000000A1FC46
++:10265000002044110000000000000000C0204800DD
++:10266000000000000001A1FD002044110000000056
++:1026700000000000002F0222000000000000000007
++:102680000CE00000000000000000000040204800B6
++:10269000000000000000000140304A20000000005F
++:1026A00000000002C0304A200000000000000001CD
++:1026B00000530A22000003340000003FC0280A2013
++:1026C0000000000081000000002044110000000014
++:1026D000000000010020481100000000000021F867
++:1026E00000204411000000000000001700204811E5
++:1026F00000000000000421F90060441100000614ED
++:102700000000001100210230000000000000000065
++:1027100014E000000000033D00000014002F02221E
++:1027200000000000000000000CC000000000035189
++:102730000000201000204411000000000000800074
++:1027400000204811000000000001A2A40020441154
++:102750000000000000000000002048110000000000
++:1027600000000016006048110000035E0000210018
++:10277000002044110000000000000000C0204800BC
++:102780000000000000000000C02048000000000021
++:1027900000000000C0204800000000000000000011
++:1027A000C0204800000000000001A2A40020441145
++:1027B00000000000000000000020481100000000A0
++:1027C000000000000040480200000000000000047B
++:1027D000002F022200000000000000000CC00000DA
++:1027E00000000355000020100020441100000000EC
++:1027F000000080000040481100000349000000284C
++:10280000002F022200000000000000000CE0000089
++:1028100000000349000021040020441100000000D2
++:1028200000000000C0204800000000000000000080
++:10283000C02048000000000000000000C020480048
++:102840000000000000000000C02048000000000060
++:102850000000A2A4002044110000000000000000BD
++:10286000004048020000000000000035002036262D
++:1028700000000000000000490020181100000000C6
++:1028800000000000002048110000000000000001CE
++:1028900000331A260000000000000000002F02266E
++:1028A00000000000000000000CC0000000000360F9
++:1028B0000000003500801A2D000000000000003FDD
++:1028C000C0280A200000000000000015002F02228E
++:1028D00000000000000000000CE000000000037693
++:1028E0000000001E002F0222000000000000000077
++:1028F0000CE000000000038000000020002F0222F6
++:1029000000000000000000000CE000000000038C4C
++:102910000000000F002F0222000000000000000055
++:102920000CE000000000039800000010002F0222BD
++:1029300000000000000000000CE000000000039810
++:1029400000000006002F022200000000000000002E
++:102950000CE000000000039A00000016002F022285
++:1029600000000000000000000CE000000000039FD9
++:102970000000A2A40020441100000000000000009C
++:1029800000404802000000000800000000290A2260
++:10299000000000000000000340210E2000000000A5
++:1029A0000000000CC0211220000000000008000000
++:1029B000002812240000000000000014C02216208D
++:1029C0000000000000000000002914A40000000026
++:1029D0000000A2A40020441100000000000000003C
++:1029E000002948A2000000000000A1FE00204411C0
++:1029F000000000000000000000404803000000004C
++:102A000081000000002044110000000000000001CF
++:102A10000020481100000000000021F800204411AF
++:102A20000000000000000015002048110000000018
++:102A3000000421F900604411000006140000001594
++:102A400000210230000000000000000014E000003F
++:102A5000000003820000210E00204411000000004D
++:102A600000000000C020480000000000000000003E
++:102A7000C0204800000000000000A2A40020441173
++:102A800000000000000000000040480200000000BC
++:102A9000810000000020441100000000000000013F
++:102AA0000020481100000000000021F8002044111F
++:102AB0000000000000000016002048110000000087
++:102AC000000421F900604411000006140000000316
++:102AD00000210230000000000000000014E00000AF
++:102AE0000000038E000021080020441100000000B7
++:102AF00000000000C02048000000000000000000AE
++:102B0000C0204800000000000000A2A400204411E2
++:102B1000000000000000000000404802000000002B
++:102B20000000201000204411000000000000800080
++:102B30000040481100000000000020100020441157
++:102B4000000000000000800000204811000000008C
++:102B50000001A2A4002044110000000000000000B9
++:102B6000002048110000000000000006004048114D
++:102B700000000000000020100020441100000000B0
++:102B80000000800000204811000000000001A2A405
++:102B90000020441100000000000000000020481147
++:102BA0000000000000000016006048110000035EF5
++:102BB0000000001600404811000000000000000066
++:102BC000C02008000000000000000000C0200C0031
++:102BD000000000000000001D002102230000000092
++:102BE0000000000014E00000000003B981000000B4
++:102BF00000204411000000000000000100204811E6
++:102C000000000000000021F8002044110000000036
++:102C1000000000170020481100000000000421F906
++:102C20000060441100000614000000110021023071
++:102C3000000000000000000014E00000000003ABF2
++:102C400000002100002044110000000000000000EE
++:102C5000002048020000000000000000002048039F
++:102C600000000000BABECAFE0020481100000000AB
++:102C7000CAFEBABE0020481100000000000020106B
++:102C800000204411000000000000800000204811D6
++:102C9000000000000000A2A4002044110000000079
++:102CA00000000004004048110000000000002170F6
++:102CB0000020441100000000000000000020480235
++:102CC0000000000000000000002048030000000099
++:102CD0008100000000204411000000000000000AF4
++:102CE000002048110000000000000000002000103B
++:102CF000000000000000000014C00000000003BE3F
++:102D00008C0000000020441100000000CAFEBABE82
++:102D10000040481100000000810000000020441124
++:102D20000000000000000001002048110000000029
++:102D300000003FFF40280A20000000008000000043
++:102D400040280E200000000040000000C028122093
++:102D50000000000000040000006946220000061484
++:102D6000000000000020141000000000000000001F
++:102D7000002F022300000000000000000CC0000033
++:102D8000000003CC00000000C0401800000003CF8A
++:102D900000003FFFC0281A200000000000040000CF
++:102DA00000694626000006140000000000201810EC
++:102DB0000000000000000000002F022400000000BE
++:102DC000000000000CC00000000003D20000000062
++:102DD000C0401C00000003D500003FFFC0281E209B
++:102DE00000000000000400000069462700000614EF
++:102DF0000000000000201C10000000000000000087
++:102E0000002044020000000000000000002820C54F
++:102E10000000000000000000004948E80000000039
++:102E2000A580000000200811000000000000200024
++:102E300000200C110000000083000000006044111D
++:102E4000000003FD0000000000204402000000001C
++:102E500000000000C020480000000000000000004A
++:102E600040204800000000000000001FC021022098
++:102E7000000000000000000014C00000000003E299
++:102E8000000020100020441100000000000080001D
++:102E900000204811000000000000FFFFC048122081
++:102EA000000003EAA78000000020081100000000D5
++:102EB0000000A00000200C110000000083000000B2
++:102EC00000604411000003FD0000000000204402E7
++:102ED0000000000000000000C020480000000000CA
++:102EE00000000000C0204800000000000000FFFFBC
++:102EF000C0281220000000008300000000204411C0
++:102F000000000000000000000030488300000000C6
++:102F100084000000002044110000000000000000B8
++:102F2000C020480000000000000000001D0000005C
++:102F3000000000008300000000604411000003FD59
++:102F400000000000C040040000000001A980000053
++:102F500000200811000000000000C00000400C111B
++:102F6000000003E5AB800000002008110000000015
++:102F70000000F8E000400C11000003E5AD80000007
++:102F800000200811000000000000F88000400C1133
++:102F9000000003E5B38000000020081100000000DD
++:102FA0000000F3FC00400C11000003E5AF800000BE
++:102FB00000200811000000000000E00000400C119B
++:102FC000000003E5B18000000020081100000000AF
++:102FD0000000F00000400C11000003E58300000039
++:102FE000002044110000000000002148002048118A
++:102FF00000000000840000000020441100000000D8
++:1030000000000000C0204800000000000000000098
++:103010001D00000000000000000000000080000013
++:103020000000000000182000C03046200000000012
++:1030300000000000D900480000000000000000006F
++:10304000C0200400000000000000000000A0000AF2
++:10305000000000000018A000C03046200000000062
++:1030600000000000D900480000000000000000003F
++:10307000C0200400000000000000000000A0000AC2
++:10308000000000000018C000C03046200000000012
++:1030900000000000D900480000000000000000000F
++:1030A000C0200400000000000000000000A0000A92
++:1030B000000000000018F8E0C030462000000000CA
++:1030C00000000000D90048000000000000000000DF
++:1030D000C0200400000000000000000000A0000A62
++:1030E000000000000018F880C030462000000000FA
++:1030F00000000000D90048000000000000000000AF
++:10310000C0200400000000000000000000A0000A31
++:10311000000000000018E000C03046200000000061
++:1031200000000000D900480000000000000000007E
++:10313000C0200400000000000000000000A0000A01
++:10314000000000000018F000C03046200000000021
++:1031500000000000D900480000000000000000004E
++:10316000C0200400000000000000000000A0000AD1
++:10317000000000000018F3FCC030462000000000F2
++:1031800000000000D900480000000000000000001E
++:10319000C0200400000000000000000000A0000AA1
++:1031A0000000000086000000002044110000000024
++:1031B0000000000000404801000000008500000001
++:1031C0000020441100000000000000000040480101
++:1031D000000000000000217C0020441100000000DD
++:1031E00000000000C02048000000000000000000B7
++:1031F000C02048000000000000000000C02048007F
++:1032000000000000810000000020441100000000C8
++:103210000000000100204811000000000000000034
++:10322000C02008000000000000000000170000009F
++:10323000000000000004217F00604411000006141B
++:103240000000001F0021023000000000000000000C
++:1032500014C00000000000000000000000404C020C
++:103260000000042E00000000C0200C000000000040
++:1032700000000000C020100000000000000000005E
++:10328000C02014000000000000000000C020180052
++:103290000000000000000000C0201C000000000032
++:1032A00000007F0000280A21000000000000450007
++:1032B000002F022200000000000000000CE00000CF
++:1032C0000000043C00000000C020200000000000BE
++:1032D00000000000170000000000000000000010C7
++:1032E00000280A230000000000000010002F022226
++:1032F00000000000000000000CE00000000004449A
++:1033000081000000002044110000000000000001C6
++:10331000002048110000000000040000006946245D
++:103320000000061400000000004000000000044DF2
++:103330008100000000204411000000000000000097
++:1033400000204811000000000000216D0020441101
++:103350000000000000000000002048040000000001
++:1033600000000000002048050000000000000000F0
++:103370001AC00000000004499E0000000020441113
++:1033800000000000CAFEBABE002048110000000084
++:10339000000000001AE000000000044C00000000E3
++:1033A000002824F0000000000000000700280A2385
++:1033B0000000000000000001002F022200000000B9
++:1033C000000000000AE000000000045400000000BB
++:1033D000002F00C9000000000000000004E0000011
++:1033E0000000046D00000000004000000000047AAE
++:1033F00000000002002F0222000000000000000078
++:103400000AE000000000045900000000002F00C97D
++:10341000000000000000000002E000000000046D59
++:1034200000000000004000000000047A00000003DB
++:10343000002F022200000000000000000AE000004F
++:103440000000045E00000000002F00C90000000022
++:10345000000000000CE000000000046D000000000F
++:10346000004000000000047A00000004002F022247
++:1034700000000000000000000AE0000000000463FB
++:1034800000000000002F00C9000000000000000044
++:103490000AE000000000046D000000000040000091
++:1034A0000000047A00000005002F02220000000046
++:1034B000000000000AE000000000046800000000B6
++:1034C000002F00C9000000000000000006E000001E
++:1034D0000000046D00000000004000000000047ABD
++:1034E00000000006002F0222000000000000000083
++:1034F0000AE000000000046D00000000002F00C979
++:10350000000000000000000008E000000000046D62
++:1035100000000000004000000000047A00007F006E
++:1035200000280A210000000000004500002F0222B0
++:1035300000000000000000000AE0000000000000A1
++:103540000000000800210A23000000000000000025
++:1035500014C000000000047700002169002044111D
++:103560000000000000000000C02048000000000033
++:1035700000000000C0204800000000000000000023
++:10358000C020480000000000CAFEBABE004048113A
++:103590000000000000000000C02044000000000007
++:1035A00000000000C020000000000000000000003B
++:1035B000C04048000000000000007F0000280A21F1
++:1035C0000000000000004500002F02220000000063
++:1035D000000000000AE0000000000480000000007D
++:1035E000C02000000000000000000000C02000001B
++:1035F0000000000000000000C040000000000000CB
++:103600000000000000404C080000043C00000000E6
++:10361000C0200800000000000000001040210E2023
++:1036200000000000000000114021122000000000F6
++:103630000000001240211620000000000000216957
++:10364000002044110000000000000000002048029B
++:103650000000000000000000002102250000000022
++:103660000000000014E000000000048A00040000D4
++:10367000C0494A200000048BFFFBFFFFC0284A20FE
++:1036800000000000000000000021022300000000F4
++:103690000000000014E0000000000497000000009B
++:1036A000C02048000000000000000000C0204800CA
++:1036B00000000000000000000021022400000000C3
++:1036C0000000000014C000000000000081000000A5
++:1036D00000204411000000000000000C00204811F0
++:1036E00000000000000000000020001000000000AA
++:1036F0000000000014C0000000000493A0000000BF
++:103700000020441100000000CAFEBABE004048116B
++:1037100000000000810000000020441100000000B3
++:103720000000000400204811000000000000216B90
++:10373000002044110000000000000000C0204810DC
++:103740000000000081000000002044110000000083
++:103750000000000500204811000000000000216C5E
++:10376000002044110000000000000000C0204810AC
++:103770000000000000000000002F022400000000F4
++:10378000000000000CE0000000000000000000004D
++:10379000004000000000049100000000C0210A2049
++:1037A000000000000000000014C00000000004AE93
++:1037B0008100000000204411000000000000000013
++:1037C00000204811000000000000216D002044117D
++:1037D0000000000000000000C020480000000000C1
++:1037E00000000000C02048000000000000000000B1
++:1037F0001AC00000000004A99E000000002044112F
++:1038000000000000CAFEBABE0020481100000000FF
++:10381000000000001AE00000000004AC00000000FE
++:1038200000400000000004B28100000000204411AC
++:10383000000000000000000100204811000000000E
++:1038400000040000C0294620000000000000000025
++:10385000C0600000000006140000000100210222E8
++:10386000000000000000000014C00000000004B9C7
++:103870000000216900204411000000000000000049
++:10388000C02048000000000000000000C0204800E8
++:1038900000000000000000000020481000000000B0
++:1038A000CAFEBABE0040481100000000000000003F
++:1038B000C02044000000000000000000C04048108C
++:1038C0000000000081000000002044110000000002
++:1038D000000000010020481100000000000021F855
++:1038E00000204411000000000000000D00204811DD
++:1038F00000000000000421F90060441100000614DB
++:103900000000000000210230000000000000000064
++:1039100014C00000000004BB0000218000204411FE
++:103920000000000000000000C0204800000000006F
++:1039300000000000C02000000000000000000000A7
++:10394000C02048000000000000000000C02000006F
++:103950000000000000000000C0404800000000001F
++:103960000000000300333E2F0000000000000001B3
++:1039700000210221000000000000000014E000000F
++:10398000000004EB0000003500200A2D00000000BC
++:103990000004000018E00C11000004DA000000012F
++:1039A00000333E2F00000000000021690020441178
++:1039B000000000000000000000204802000000009D
++:1039C0000000000000204803000000000000000884
++:1039D00000300A220000000000000000C020480063
++:1039E0000000000000000000C020480000000000AF
++:1039F00000002169002044110000000000000000C8
++:103A000000204802000000000000000000204803E1
++:103A1000000000000000000800300A220000000042
++:103A200000000000C020480000000000000000006E
++:103A3000D8C04800000004CE0000216900204411D5
++:103A4000000000000000000000204802000000000C
++:103A500000000000002048030000000000000008F3
++:103A600000300A220000000000000000C0204800D2
++:103A70000000000000000000C0204800000000001E
++:103A8000000000360020122D0000000000000000A1
++:103A900000290C830000000000002169002044116F
++:103AA00000000000000000000020480200000000AC
++:103AB0000000000000204803000000000000000893
++:103AC00000300A220000000000000000C020480072
++:103AD0000000000000000000C020480000000000BE
++:103AE000000000110021022400000000000000007E
++:103AF00014C00000000000000000000000400000B2
++:103B00000000049100000035C020362000000000B5
++:103B100000000036C0403620000000000000304A9F
++:103B20000020441100000000E0000000C0484A20CE
++:103B3000000000000000000F002102210000000032
++:103B40000000000014C00000000004F200000000AB
++:103B5000006000000000000B00000000D900000021
++:103B60000000000000000000C04004000000000150
++:103B7000810000000020441100000000000000024D
++:103B80000020481100000000000000FF00280E3057
++:103B90000000000000000000002F022300000000D1
++:103BA000000000000CC00000000004F6000000004F
++:103BB000C0200800000000000000000014C0000049
++:103BC0000000050B0000000000200C1100000000A8
++:103BD0000000002400203623000000000000003414
++:103BE00000203623000000000000003200203623B1
++:103BF000000000000000003100203623000000001B
++:103C00000000001D00203623000000000000002DF1
++:103C100000203623000000000000002E0020362384
++:103C2000000000000000001B002036230000000000
++:103C30000000001C0020362300000000FFFFE00011
++:103C400000200C1100000000000000290020362395
++:103C5000000000000000002A0020362300000000C1
++:103C600000001FFF00200C11000000000000002BCE
++:103C700000203623000000000000002C0020362326
++:103C800000000000F1FFFFFF00283A2E00000000B6
++:103C90000000001AC0220E200000000000000000FA
++:103CA0000029386E0000000081000000002044114F
++:103CB0000000000000000006002048110000000085
++:103CC0000000003340203620000000008700000084
++:103CD000002044110000000000000000C020480047
++:103CE000000000000000A1F40020441100000000CA
++:103CF0000000000000204810000000009D000000AF
++:103D000000204411000000000000001F40214A2054
++:103D10000000000096000000002044110000000098
++:103D200000000000C020480000000000000000006B
++:103D3000C0200C000000000000000000C0201000A7
++:103D4000000000000000001F0021162400000000F9
++:103D50000000000014C0000000000000000000256A
++:103D600000203623000000000000000300281E236E
++:103D700000000000000000080022222300000000D4
++:103D8000FFFFF000002822280000000000000000D3
++:103D9000002920E80000000000000027002036284D
++:103DA000000000000000001800211E230000000099
++:103DB000000000280020362700000000000000025C
++:103DC000002216240000000000000000003014A8AB
++:103DD0000000000000000026002036250000000042
++:103DE0000000000300211A24000000001000000061
++:103DF00000281A2600000000EFFFFFFF00283A2EDF
++:103E00000000000000000000004938CE000006025B
++:103E10000000000140280A20000000000000000609
++:103E200040280E200000000000000300C0281220DF
++:103E30000000000000000008002112240000000023
++:103E400000000000C020162000000000000000005C
++:103E5000C0201A2000000000000000000021022203
++:103E6000000000000000000014C000000000054138
++:103E7000810000000020441100000000000000014B
++:103E800000204811000000000000225800300A24E1
++:103E90000000000000040000006946220000061433
++:103EA0000000216900204411000000000000000013
++:103EB00000204805000000000002000000294A26FA
++:103EC000000000000000000000204810000000007A
++:103ED000CAFEBABE00204811000000000000000227
++:103EE000002F022300000000000000000CC00000B2
++:103EF0000000054900000000C0201C100000000068
++:103F000000000000C04000000000055B000000024F
++:103F1000002F022300000000000000000CC0000081
++:103F2000000005498100000000204411000000004D
++:103F3000000000010020481100000000000022588D
++:103F400000300A240000000000040000006946223E
++:103F50000000061400000000C0201C10000000003B
++:103F600000000000C04000000000055B00000000F1
++:103F7000002F022300000000000000000CC0000021
++:103F80000000054D00000000C0201C0000000000E3
++:103F900000000000C04000000000055B00000004BD
++:103FA000002F022300000000000000000CC00000F1
++:103FB00000000559810000000020441100000000AD
++:103FC0000000000000204811000000000000216DEA
++:103FD000002044110000000000000000C020480044
++:103FE0000000000000000000C020480000000000A9
++:103FF000000000001AC00000000005549E000000F0
++:104000000020441100000000CAFEBABE0020481182
++:1040100000000000000000001AE00000000005574A
++:104020000000000000401C100000055B00000000C4
++:10403000C02000000000000000000000C0400000A0
++:1040400000000000000000000EE000000000055D20
++:104050000000000000600000000005A40000000057
++:10406000002F022400000000000000000CC000002F
++:104070000000056D0000A2B7002044110000000000
++:104080000000000000204807000000008100000040
++:104090000020441100000000000000010020481131
++:1040A000000000000004A2B60060441100000614E5
++:1040B0000000001A0021223000000000000000066D
++:1040C00000222630000000000000A2C4002044119D
++:1040D0000000000000000000003048E9000000007F
++:1040E0000000000000E000000000056B0000A2D10D
++:1040F00000204411000000000000000000404808BB
++:10410000000000000000A2D10020441100000000C7
++:104110000000000100504A280000000000000001DB
++:10412000002F022400000000000000000CC000006E
++:104130000000057D0000A2BB00204411000000002B
++:10414000000000000020480700000000810000007F
++:104150000020441100000000000000010020481170
++:10416000000000000004A2BA006044110000061420
++:104170000000001A002122300000000000000006AC
++:1041800000222630000000000000A2C500204411DB
++:104190000000000000000000003048E900000000BE
++:1041A0000000000000E000000000057B0000A2D23B
++:1041B00000204411000000000000000000404808FA
++:1041C000000000000000A2D2002044110000000006
++:1041D0000000000100504A2800000000000000021A
++:1041E000002F022400000000000000000CC00000AE
++:1041F0000000058D0000A2BF002044110000000057
++:1042000000000000002048070000000081000000BE
++:1042100000204411000000000000000100204811AF
++:10422000000000000004A2BE00604411000006145B
++:104230000000001A002122300000000000000006EB
++:1042400000222630000000000000A2C60020441119
++:104250000000000000000000003048E900000000FD
++:104260000000000000E000000000058B0000A2D369
++:104270000020441100000000000000000040480839
++:10428000000000000000A2D3002044110000000044
++:104290000000000100504A28000000000000A2C3F6
++:1042A000002044110000000000000000002048072A
++:1042B0000000000081000000002044110000000008
++:1042C0000000000100204811000000000004A2C20C
++:1042D00000604411000006140000001A0021223082
++:1042E0000000000000000006002226300000000050
++:1042F0000000A2C7002044110000000000000000E0
++:10430000003048E9000000000000000000E000006C
++:10431000000005990000A2D4002044110000000014
++:104320000000000000404808000000000000A2D487
++:1043300000204411000000000000000100504A2845
++:104340000000000085000000002044110000000073
++:104350000000000000204801000000000000304A7A
++:10436000002044110000000001000000002048115E
++:104370000000000000000000004000000000059F59
++:10438000A4000000C0204411000000000000000054
++:10439000C04048000000000000000000C0600000B5
++:1043A000000005A400000000C0400400000000015F
++:1043B0000001A2A400204411000000000000000041
++:1043C00000204811000000000000000000204811FB
++:1043D0000000000000000000002048110000000064
++:1043E000000000000020481100000000000000054F
++:1043F00000204811000000000000A1F4002044113A
++:104400000000000000000000002048110000000033
++:10441000880000000020441100000000000000019E
++:104420000020481100000000FF000000002044119F
++:104430000000000000000000002048110000000003
++:1044400000000001002048110000000000000002F0
++:104450000080481100000000000000000EE0000095
++:10446000000005B700001000002008110000000047
++:104470000000003400203622000000000000000090
++:1044800000600000000005BB0000000000600000AC
++:10449000000005A498000000002044110000000066
++:1044A0000000000000804811000000000000000033
++:1044B000C0600000000005BB00000000C040040018
++:1044C000000000010000A2A4002044110000000030
++:1044D00000000022002048110000000089000000B8
++:1044E00000204411000000000000000100204811DD
++:1044F00000000000FF000000002044110000000048
++:104500000000000000204811000000000000000131
++:104510000020481100000000000000020080481147
++:10452000000000000000217AC020441100000000BB
++:10453000000000000040481100000000970000004B
++:10454000002044110000000000000000002048117D
++:10455000000000008A00000000204411000000005C
++:10456000000000000020481100000000FF000000D3
++:10457000002044110000000000000000002048114D
++:1045800000000000000000010020481100000000B1
++:104590000000000200804811000000000000000040
++:1045A00000600000000005E1000020100020441120
++:1045B0000000000000008000002048110000000002
++:1045C0000001A2A4C020441100000000000000006F
++:1045D0000020481100000000000000160060481193
++:1045E0000000035E000000160020481100000000DB
++:1045F0000000201000204411000000000001000015
++:10460000002048110000000081000000002044113B
++:104610000000000000000001002048110000000020
++:104620000000217C002044110000000009800000EF
++:104630000020481100000000FFFFFFFF002048118C
++:1046400000000000000000000020481100000000F1
++:104650000000000017000000000000000004217F9F
++:1046600000604411000006140000001F0021023009
++:10467000000000000000000014C000000000000066
++:104680000000000400404C11000005DC0000001D8B
++:1046900000201E2D000000000000000400291E273D
++:1046A000000000000000001D008036270000000010
++:1046B0000000001D00201E2D00000000FFFFFFFB7A
++:1046C00000281E27000000000000001D0080362783
++:1046D000000000000000001D00201E2D0000000052
++:1046E0000000000800291E27000000000000001D37
++:1046F00000803627000000000000001D00201E2D55
++:1047000000000000FFFFFFF700281E270000000048
++:104710000000001D0080362700000000000020106F
++:10472000002044110000000000008000002048111B
++:10473000000000000001A2A40020441100000000BD
++:1047400000000000002048110000000000000016DA
++:10475000006048110000035E0000001600204811B0
++:1047600000000000000020100020441100000000A4
++:104770000001000000204811000000000000217C22
++:1047800000204411000000000180000000204811BA
++:104790000000000000FFFFFF0020481100000000A3
++:1047A0000000000000204811000000000000000090
++:1047B00017000000000000008100000000204411EC
++:1047C000000000000000000100204811000000006F
++:1047D0000004217F00604411000006140000000066
++:1047E00000200010000000000000000014C00000C5
++:1047F000000006130000001000404C11000005F9F5
++:1048000000000000C02004000000000000000000C4
++:1048100038C00000000000000000002500200A2D24
++:10482000000000000000002600200E2D0000000007
++:10483000000000270020122D0000000000000028CA
++:104840000020162D00000000000021690020441106
++:1048500000000000000000000020480400000000EC
++:1048600000000000002048050000000000000000DB
++:104870000020480100000000CAFEBABE0020481116
++:1048800000000000000000040030122400000000BE
++:1048900000000000002F0064000000000000000085
++:1048A0000CC00000000006120000000300281A22BD
++:1048B000000000000000000800221222000000009A
++:1048C000FFFFF0000028122400000000000000009C
++:1048D000002910C40000000000000027004036241A
++:1048E0000000000000000000008000000000000048
++:1048F000000000001AC00000000006149F00000025
++:104900000020441100000000CAFEBABE0020481179
++:1049100000000000000000001AE000000000061780
++:104920000000000000800000000000000000000007
++:10493000006000000000000B000010000060041187
++:10494000000002FE00000000002004110000000032
++:1049500000000000006008110000019F0000225CC0
++:104960000020441100000000000000030020481156
++:10497000000000000000225600204411000000004A
++:104980000000001B00204811000000000000A1FCF6
++:104990000020441100000000000000010020481128
++:1049A000000000000001A1FDC02044110000000033
++:1049B0000000002900201E2D000000000000001053
++:1049C00000221E27000000000000002C0020222DE5
++:1049D000000000000000FFFF002822280000000067
++:1049E000000000000029490700000000000000004E
++:1049F00000204811000000000000002A0020222DA5
++:104A0000000000000000FFFF002822280000000036
++:104A1000000000000029490700000000000000001D
++:104A200000204811000000000000002B00201E2D77
++:104A3000000000000000001000221E2700000000FF
++:104A400000000000002949070000000000000000ED
++:104A500000404811000000000000000000000000BD
++:104A60000000000000000000000000000000000046
++:104A70000000000000000000000000000000000036
++:104A80000000000000000000000000000000000026
++:104A90000000000000000000000000000000000016
++:104AA0000000000000000000000000000000000006
++:104AB00000000000000000000000000000000000F6
++:104AC00000000000000000000000000000000000E6
++:104AD00000000000000000000000000000000000D6
++:104AE00000000000000000000000000000000000C6
++:104AF00000000000000000000000000000000000B6
++:104B000000000000000000000000000000000000A5
++:104B10000000000000000000000000000000000095
++:104B20000000000000000000000000000000000085
++:104B30000000000000000000000000000000000075
++:104B40000000000000000000000000000000000065
++:104B50000000000000000000000000000000000055
++:104B60000000000000000000000000000000000045
++:104B70000000000000000000000000000000000035
++:104B80000000000000000000000000000000000025
++:104B90000000000000000000000000000000000015
++:104BA0000000000000000000000000000000000005
++:104BB00000000000000000000000000000000000F5
++:104BC00000000000000000000000000000000000E5
++:104BD00000000000000000000000000000000000D5
++:104BE00000000000000000000000000000000000C5
++:104BF00000000000000000000000000000000000B5
++:104C000000000000000000000000000000000000A4
++:104C10000000000000000000000000000000000094
++:104C20000000000000000000000000000000000084
++:104C30000000000000000000000000000000000074
++:104C40000000000000000000000000000000000064
++:104C50000000000000000000000000000000000054
++:104C60000000000000000000000000000000000044
++:104C70000000000000000000000000000000000034
++:104C80000000000000000000000000000000000024
++:104C90000000000000000000000000000000000014
++:104CA0000000000000000000000000000000000004
++:104CB00000000000000000000000000000000000F4
++:104CC00000000000000000000000000000000000E4
++:104CD00000000000000000000000000000000000D4
++:104CE00000000000000000000000000000000000C4
++:104CF00000000000000000000000000000000000B4
++:104D000000000000000000000000000000000000A3
++:104D10000000000000000000000000000000000093
++:104D20000000000000000000000000000000000083
++:104D30000000000000000000000000000000000073
++:104D40000000000000000000000000000000000063
++:104D50000000000000000000000000000000000053
++:104D60000000000000000000000000000000000043
++:104D70000000000000000000000000000000000033
++:104D80000000000000000000000000000000000023
++:104D90000000000000000000000000000000000013
++:104DA0000000000000000000000000000000000003
++:104DB00000000000000000000000000000000000F3
++:104DC00000000000000000000000000000000000E3
++:104DD00000000000000000000000000000000000D3
++:104DE00000000000000000000000000000000000C3
++:104DF00000000000000000000000000000000000B3
++:104E000000000000000000000000000000000000A2
++:104E10000000000000000000000000000000000092
++:104E20000000000000000000000000000000000082
++:104E30000000000000000000000000000000000072
++:104E40000000000000000000000000000000000062
++:104E50000000000000000000000000000000000052
++:104E60000000000000000000000000000000000042
++:104E70000000000000000000000000000000000032
++:104E80000000000000000000000000000000000022
++:104E90000000000000000000000000000000000012
++:104EA0000000000000000000000000000000000002
++:104EB00000000000000000000000000000000000F2
++:104EC00000000000000000000000000000000000E2
++:104ED00000000000000000000000000000000000D2
++:104EE00000000000000000000000000000000000C2
++:104EF00000000000000000000000000000000000B2
++:104F000000000000000000000000000000000000A1
++:104F10000000000000000000000000000000000091
++:104F20000000000000000000000000000000000081
++:104F30000000000000000000000000000000000071
++:104F40000000000000000000000000000000000061
++:104F50000000000000000000000000000000000051
++:104F60000000000000000000000000000000000041
++:104F70000000000000000000000000000000000031
++:104F80000000000000000000000000000000000021
++:104F90000000000000000000000000000000000011
++:104FA0000000000000000000000000000000000001
++:104FB00000000000000000000000000000000000F1
++:104FC00000000000000000000000000000000000E1
++:104FD00000000000000000000000000000000000D1
++:104FE00000000000000000000000000000000000C1
++:104FF00000000000000000000000000000000000B1
++:1050000000000000000000000000000000000000A0
++:105010000000000000000000000000000000000090
++:105020000000000000000000000000000000000080
++:105030000000000000000000000000000000000070
++:105040000000000000000000000000000000000060
++:105050000000000000000000000000000000000050
++:105060000000000000000000000000000000000040
++:105070000000000000000000000000000000000030
++:105080000000000000000000000000000000000020
++:105090000000000000000000000000000000000010
++:1050A0000000000000000000000000000000000000
++:1050B00000000000000000000000000000000000F0
++:1050C00000000000000000000000000000000000E0
++:1050D00000000000000000000000000000000000D0
++:1050E00000000000000000000000000000000000C0
++:1050F00000000000000000000000000000000000B0
++:10510000000000000000000000000000000000009F
++:10511000000000000000000000000000000000008F
++:10512000000000000000000000000000000000007F
++:10513000000000000000000000000000000000006F
++:10514000000000000000000000000000000000005F
++:10515000000000000000000000000000000000004F
++:10516000000000000000000000000000000000003F
++:10517000000000000000000000000000000000002F
++:10518000000000000000000000000000000000001F
++:10519000000000000000000000000000000000000F
++:1051A00000000000000000000000000000000000FF
++:1051B00000000000000000000000000000000000EF
++:1051C00000000000000000000000000000000000DF
++:1051D00000000000000000000000000000000000CF
++:1051E00000000000000000000000000000000000BF
++:1051F00000000000000000000000000000000000AF
++:10520000000000000000000000000000000000009E
++:10521000000000000000000000000000000000008E
++:10522000000000000000000000000000000000007E
++:10523000000000000000000000000000000000006E
++:10524000000000000000000000000000000000005E
++:10525000000000000000000000000000000000004E
++:10526000000000000000000000000000000000003E
++:10527000000000000000000000000000000000002E
++:10528000000000000000000000000000000000001E
++:10529000000000000000000000000000000000000E
++:1052A00000000000000000000000000000000000FE
++:1052B000013304EF059B02390000000001B00159E1
++:1052C0000425059B00000000021201F6023901428C
++:1052D000000000000210022E0289022A00000000D5
++:1052E00003C2059B059B059B0000000005CD05CE74
++:1052F0000308059B00000000059B05A00309032986
++:10530000000000000313026B032B031D00000000CC
++:10531000059B059B059B059B00000000059B052C3C
++:10532000059B059B0000000003A5059B04A2032D1F
++:1053300000000000048104330423059B00000000EA
++:1053400004BB04ED042704C800000000043304F487
++:10535000033A036500000000059B059B059B059B28
++:1053600000000000059B059B059B059B00000000BD
++:10537000059B059B05B905A200000000059B059B48
++:105380000007059B00000000059B059B059B059BF6
++:1053900000000000059B059B059B059B000000008D
++:1053A00003E303D803F303F10000000003F903F55E
++:1053B00003F703FB0000000004070403040F040BC1
++:1053C0000000000004170413041F041B0000000069
++:1053D000059B059B059B059B00000000059B059B0D
++:1053E000059B059B00000000059B059B059B059BFD
++:1053F0000000000000020600061900060000000080
++:00000001FF
+diff --git a/firmware/radeon/R600_pfp.bin.ihex b/firmware/radeon/R600_pfp.bin.ihex
+new file mode 100644
+index 0000000..5236108
+--- /dev/null
++++ b/firmware/radeon/R600_pfp.bin.ihex
+@@ -0,0 +1,145 @@
++:1000000000D4007100D4007200CA040000A00000F7
++:10001000007E828B0080000300CA040000D4401ED2
++:1000200000EE001E00CA040000A00000007E828BCB
++:1000300000C4183800CA240000CA2800009581A80E
++:1000400000C41C3A00C3C00000CA080000CA0C006B
++:10005000007C744B00C200050099C00000C41C3A2B
++:10006000007C744C00C0FFF000042C0400309002AF
++:10007000007D250000351402007D350B002554035A
++:10008000007CD58000259C030095C00400D5001B92
++:10009000007EDDC1007D9D8000D6801B00D5801BC9
++:1000A00000D4401E00D5401E00D6401E00D6801E43
++:1000B00000D4801E00D4C01E009783D400D5C01E7B
++:1000C00000CA08000080001B00CA0C0000E4011EEA
++:1000D00000D4001E0080000D00C4183800E4013E6A
++:1000E00000D4001E0080000D00C4183800D4401E4B
++:1000F00000EE001E00CA040000A00000007E828BFB
++:1001000000E4011E00D4001E00D4401E00EE001EBC
++:1001100000CA040000A00000007E828B00E4013EC3
++:1001200000D4001E00D4401E00EE001E00CA0400D1
++:1001300000A00000007E828B00CA180000D4401E80
++:1001400000D5801E0080005400D4007300D4401EEF
++:1001500000CA080000CA0C0000CA100000D48019B0
++:1001600000D4C01800D5001700D4801E00D4C01ED3
++:1001700000D5001E00E2001E00CA040000A000001E
++:10018000007E828B00CA080000D4806000D4401E2C
++:100190000080000200D4801E00CA080000D48061E4
++:1001A00000D4401E0080000200D4801E00CA080057
++:1001B00000CA0C0000D4401E00D4801600D4C01623
++:1001C00000D4801E008001B900D4C01E00C6083EC5
++:1001D00000CA0C0000CA10000094800400CA140079
++:1001E00000E420F300D4201300D5606500D4E01CA7
++:1001F00000D5201C00D5601C0080000200062001F4
++:1002000000C6083E00CA0C0000CA1000009483F724
++:1002100000CA140000E420F30080007A00D4201308
++:1002200000C6083E00CA0C0000CA1000009883EF08
++:1002300000CA140000D400640080008E000000009A
++:1002400000C4143200C6183E00C4082F00954005B3
++:1002500000C40C3000D4401E0080000200EE001EDE
++:10026000009583F500C4103100D4403300D52065DB
++:1002700000D4A01C00D4E01C00D5201C00D40073C6
++:1002800000E4015E00D4001E008001B900062001D8
++:10029000000A200100D6007400C4083600C61040D1
++:1002A0000098800700CC38350095010F00D4001F5E
++:1002B00000D460620080000200D4206200CC1433BD
++:1002C000008401BC00D4007000D5401E00800002F4
++:1002D00000EE001E00CA0C0000CA100000D4C01AB4
++:1002E000008401BC00D5001A00CC04430035101F67
++:1002F000002C9401007D098B00984005007D15CBF2
++:1003000000D4001A008001B900D4006D003444010B
++:1003100000CC0C440098403A00CC2C460095800458
++:1003200000CC0445008001B900D4001A00D4C01AE2
++:1003300000282801008400F300CC10030098801BE3
++:100340000004380C008400F300CC100300988017E0
++:1003500000043808008400F300CC100300988013D8
++:1003600000043804008400F300CC100300988014CB
++:1003700000CC1047009A800900CC1448009840DA5D
++:1003800000D4006D00CC184400D5001A00D5401AE6
++:10039000008000CC00D5801A0096C0D300D4006D38
++:1003A000008001B900D4006E009AC00300D4006D33
++:1003B00000D4006E0080000200EC007F009AC0CAEA
++:1003C00000D4006D008001B900D4006E00CC14038D
++:1003D00000CC180300CC1C03007D9103007DD58365
++:1003E000007D190C0035CC1F0035701F007CF0CB50
++:1003F000007CD08B00880000007E8E8B0095C004AE
++:1004000000D4006E008001B900D4001A00D4C01AD4
++:1004100000CC080300CC0C0300CC100300CC140368
++:1004200000CC180300CC1C0300CC240300CC280310
++:100430000035C41F0036B01F007C704B0034F01F25
++:10044000007C704B0035701F007C704B007D8881F4
++:10045000007DCCC1007E5101007E9541007C9082E0
++:10046000007CD4C2007C848B009AC003007C8C8BFF
++:10047000002C88010098809C00D4006D0098409A60
++:1004800000D4006E00CC084700CC0C4800CC1044CF
++:1004900000D4801A00D4C01A0080010400D5001ACC
++:1004A00000CC083200D40032009482D800CA0C007C
++:1004B00000D4401E0080000200D4001E00E4011E93
++:1004C00000D4001E00CA080000CA0C0000CA1000B8
++:1004D00000D4401E00CA140000D4801E00D4C01EE8
++:1004E00000D5001E00D5401E00D54034008000021B
++:1004F00000EE001E0028040400E2001A00E2001AC8
++:1005000000D4401A00CA380000CC080300CC0C0309
++:1005100000CC0C0300CC0C03009882BC000000004F
++:10052000008401BC00D7806F0080000200EE001F35
++:1005300000CA040000C2FF0000CC083400C13FFF25
++:10054000007C74CB007CC90B007D010F009902AFC9
++:10055000007C738B008401BC00D7806F0080000298
++:1005600000EE001F00CA080000281900007D898BDA
++:10057000009580140028140400CA0C0000CA100062
++:1005800000CA1C0000CA240000E2001F00D4C01AE8
++:1005900000D5001A00D5401A00CC180300CC2C035B
++:1005A00000CC2C0300CC2C03007DA58B007D9C4748
++:1005B00000984296000000000080016400D4C01A38
++:1005C00000D4401E00D4801E0080000200EE001EF9
++:1005D00000E4011E00D4001E00D4401E00EE001EE8
++:1005E00000CA040000A00000007E828B00E4013EEF
++:1005F00000D4001E00D4401E00EE001E00CA0400FD
++:1006000000A00000007E828B00CA080000248C0637
++:10061000000CCC060098C00600CC104900990004DC
++:1006200000D4007100E4011E00D4001E00D4401E5E
++:1006300000D4801E0080000200EE001E00CA0800E8
++:1006400000CA0C000034D018002510010095001FCE
++:1006500000C17FFF00CA100000CA140000CA1800C1
++:1006600000D4801D00D4C01D007DB18B00C14202AA
++:1006700000C2C00100D5801D0034DC0E007D5D4C41
++:10068000007F734C00D7401E00D5001E00D5401ED1
++:1006900000C1420000C2C00000099C010031DC1012
++:1006A000007F5F4C007F734C007D838000D5806F9E
++:1006B00000D5806600D7401E00EC005E00C8240212
++:1006C000008001B900D6007400D4401E00D4801E02
++:1006D00000D4C01E0080000200EE001E0080000258
++:1006E00000EE001F00D4001F0080000200D4001F95
++:1006F00000D4001F0088000000D4001F000000008C
++:1007000000000000000000000000000000000000E9
++:1007100000000000000000000000000000000000D9
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:10080000000101740002017B0003009000040080DD
++:100810000005000500060040000700330008012F16
++:1008200000090047000A0037001001B7001700A4B4
++:100830000022013D0023014C002000B500240128C6
++:100840000027004E0028006B002A0061002B005397
++:10085000002F00660032008800340182003C0159FC
++:10086000003F00730041018F0044013100550176C3
++:100870000056017D0060000C006100350062003907
++:1008800000630039006400390065003900660039F2
++:10089000006700390068003B00690042006A0049B7
++:1008A000006B0049006C0049006D0049006E004972
++:1008B000006F0049007301B7000000070000000747
++:1008C000000000070000000700000007000000070C
++:1008D00000000007000000070000000700000007FC
++:1008E00000000007000000070000000700000007EC
++:1008F00000000007000000070000000700000007DC
++:00000001FF
+diff --git a/firmware/radeon/RS600_cp.bin.ihex b/firmware/radeon/RS600_cp.bin.ihex
+new file mode 100644
+index 0000000..4a89501
+--- /dev/null
++++ b/firmware/radeon/RS600_cp.bin.ihex
+@@ -0,0 +1,130 @@
++:10000000000000004200E000000000004000E000AE
++:1000100000000008000000A000000008000000A48C
++:10002000000000004A554B4A000000004A4A44675D
++:100030000000000055526F75000000004A7E7D658B
++:10004000000000004AE74AF6000000004AD34A4A8E
++:1000500000000000D689898900000000CD4ADDCF6C
++:10006000000000008EBE4AE200000000C38A8A8AB7
++:10007000000000004A0F8CC800000004000CA00023
++:1000800000000038000D0012000000040000E8B479
++:1000900000000038000D0014000000040000E8B665
++:1000A00000000038000D0016000000040000E854B5
++:1000B00000000038000D0018000000040000E855A2
++:1000C00000000038000D001A000000040000E8568F
++:1000D00000000038000D001C000000040000E8577C
++:1000E00000000038000D001E000000040000E8249D
++:1000F00000000038000D0020000000040000E8258A
++:1001000000000038000D0022000000040000E8306C
++:1001100000000038000D0024000000040000F0C0C2
++:1001200000000038000D0026000000040000F0C1AF
++:1001300000000038000D0028000000040000F0411D
++:1001400000000038000D002A000000040000F184C7
++:1001500000000038000D002C000000040000F185B4
++:1001600000000038000D002E000000040000F186A1
++:1001700000000038000D0030000000040000F1878E
++:1001800000000038000D0032000000040000F18083
++:1001900000000038000D0034000000040000F3935C
++:1001A00000000038000D0036000000040000F38A53
++:1001B00000000038000D0038000000040000F38E3D
++:1001C000000000040000E821000000040140A0003D
++:1001D00000000018000000430000000400CCE8000C
++:1001E00000000004001B000100000004080048009B
++:1001F00000000004001B000100000004080048008B
++:1002000000000004001B000100000004080048007A
++:10021000000000080000003A000000000000A000FC
++:10022000000000042000451D000000040000E580DF
++:1002300000000004000CE581000000040800458077
++:1002400000000004000CE5810000000800000047E9
++:10025000000000000000A00000000004000C2000CE
++:10026000000000040000E50E000000040003200070
++:10027000000000280002205100000024000000516E
++:10028000000000040800450F000000080000A04B1B
++:10029000000000040000E565000000040000E566C1
++:1002A00000000008000000520000000403CCA5B4C8
++:1002B00000000004054320000000000400022000AC
++:1002C000000000304CCCE05E0000000408274565CB
++:1002D000000000300000005E0000000408004564DB
++:1002E000000000040000E566000000080000005562
++:1002F00000000010008020610000000400202000A9
++:1003000000000004001B00FF00000010010000645A
++:1003100000000004001F200000000004001C00FF7B
++:100320000000000C0000000000000030000000721F
++:100330000000000800000055000000040000E57601
++:10034000000000040000E577000000040000E50E56
++:10035000000000040000E50F000000040140A000C0
++:100360000000001800000069000000C200C0E5F9AC
++:100370000000000800000069000000040014E50E01
++:10038000000000040040E50F0000000800C0006C01
++:10039000000000040000E570000000040000E571AA
++:1003A0000000000C0000E572000000040000A00046
++:1003B000000000040140A000000000040000E56807
++:1003C00000000004000C200000000018000000766F
++:1003D00000000004000B00000000000418C0E562EB
++:1003E00000000008000000780000000800C000774E
++:1003F00000000004000700D5000000380000008461
++:1004000000000030000CA08600000004080045BB7E
++:1004100000000030000C2087000000000800E5BC50
++:10042000000000040000E5BB000000000000E5BC87
++:100430000000000C00120000000000040012000088
++:100440000000000C001B0002000000040000A000DF
++:10045000000000040000E821000000000000E800A7
++:10046000000000040000E821000000000000E82E69
++:100470000000000402CCA0000000000400140000F2
++:1004800000000004000CE1CC00000004050DE1CDEB
++:10049000000000040040000000000018000000966A
++:1004A0000000000400C0A00000000008000000934D
++:1004B0000000002000000098000000004200E00062
++:1004C000000000380000009F00000004000CA000A5
++:1004D000000000040014000000000004000C2000D4
++:1004E000000000040016000000000004700CE00092
++:1004F000000000080014009B000000004000E00025
++:10050000000000040240000000000004400EE00073
++:100510000000000402400000000000004000E00075
++:1005200000000004000C2000000000040240E51B55
++:10053000000000050080E50A000000050080E50BD2
++:10054000000000040022000000000004000700D5A5
++:1005500000000038000000B200000030000C2087CE
++:10056000000000050880E5BD00000030000C20867A
++:10057000000000050800E5BB00000030000C2087EB
++:10058000000000050880E5BC00000008000000B580
++:10059000000000050080E5BD000000050000E5BB8F
++:1005A000000000050080E5BC000000040021000000
++:1005B00000000004028000000000001800C000B924
++:1005C000000000404180E00000000024000000BB6B
++:1005D0000000000C010000000000000C0100E51DFF
++:1005E00000000004000045BB00000008000080B5CA
++:1005F000000000040000F3CE000000040140A00051
++:100600000000000400CC20000000004008C053CFD0
++:100610000000000000008000000000040000F3D291
++:10062000000000040140A0000000000400CC2000F5
++:100630000000004008C053D300000000000080000C
++:10064000000000040000F39D000000040140A00031
++:100650000000000400CC20000000004008C0539EB1
++:1006600000000000000080000000000403C008300B
++:10067000000000004200E000000000040000A000B4
++:1006800000000004200045E0000000000000E5E15B
++:10069000000000000000000100000004000700D27C
++:1006A000000000000800E3940000000000000000CB
++:1006B000000000040000E8C4000000040000E8C5D9
++:1006C000000000040000E8C6000000040000E92863
++:1006D000000000040000E929000000040000E92AED
++:1006E00000000008000000D6000000040000E92817
++:1006F000000000040000E929000000040000E92ACD
++:1007000000000008000000DD0000000000E001160D
++:1007100000000004000700E1000000040800401C85
++:1007200000000004200050E7000000040000E01D6D
++:1007300000000008000000E40000000402C02000E7
++:10074000000000040006000000000034000000EB80
++:1007500000000008000000E8000000040000800025
++:1007600000000000C000E0000000000000000000E9
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B00000000004000C200000000004001D0018D0
++:1007C00000000004001A000100000034000000FBDB
++:1007D000000000080000004A000000080500A04AD0
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:00000001FF
++/* production radeon ucode r1xx-r6xx */
+diff --git a/firmware/radeon/RS690_cp.bin.ihex b/firmware/radeon/RS690_cp.bin.ihex
+new file mode 100644
+index 0000000..6896274
+--- /dev/null
++++ b/firmware/radeon/RS690_cp.bin.ihex
+@@ -0,0 +1,130 @@
++:1000000000000008000000DD00000008000000DF24
++:1000100000000008000000A000000008000000A48C
++:10002000000000004A554B4A000000004A4A44675D
++:100030000000000055526F75000000004A7E7D658B
++:10004000000000004AD74AF6000000004AC94A4AA8
++:1000500000000000CC89898900000000C34AD3C594
++:10006000000000008E4A4A4A000000004A8A8A8A3C
++:10007000000000004A0F8C4A00000004000CA000A1
++:1000800000000038000D0012000000040000E8B479
++:1000900000000038000D0014000000040000E8B665
++:1000A00000000038000D0016000000040000E854B5
++:1000B00000000038000D0018000000040000E855A2
++:1000C00000000038000D001A000000040000E8568F
++:1000D00000000038000D001C000000040000E8577C
++:1000E00000000038000D001E000000040000E8249D
++:1000F00000000038000D0020000000040000E8258A
++:1001000000000038000D0022000000040000E8306C
++:1001100000000038000D0024000000040000F0C0C2
++:1001200000000038000D0026000000040000F0C1AF
++:1001300000000038000D0028000000040000F0411D
++:1001400000000038000D002A000000040000F184C7
++:1001500000000038000D002C000000040000F185B4
++:1001600000000038000D002E000000040000F186A1
++:1001700000000038000D0030000000040000F1878E
++:1001800000000038000D0032000000040000F18083
++:1001900000000038000D0034000000040000F3935C
++:1001A00000000038000D0036000000040000F38A53
++:1001B00000000038000D0038000000040000F38E3D
++:1001C000000000040000E821000000040140A0003D
++:1001D00000000018000000430000000400CCE8000C
++:1001E00000000004001B000100000004080048009B
++:1001F00000000004001B000100000004080048008B
++:1002000000000004001B000100000004080048007A
++:10021000000000080000003A000000000000A000FC
++:10022000000000042000451D000000040000E580DF
++:1002300000000004000CE581000000040800458077
++:1002400000000004000CE5810000000800000047E9
++:10025000000000000000A00000000004000C2000CE
++:10026000000000040000E50E000000040003200070
++:10027000000000280002205100000024000000516E
++:10028000000000040800450F000000080000A04B1B
++:10029000000000040000E565000000040000E566C1
++:1002A00000000008000000520000000403CCA5B4C8
++:1002B00000000004054320000000000400022000AC
++:1002C000000000304CCCE05E0000000408274565CB
++:1002D000000000300000005E0000000408004564DB
++:1002E000000000040000E566000000080000005562
++:1002F00000000010008020610000000400202000A9
++:1003000000000004001B00FF00000010010000645A
++:1003100000000004001F200000000004001C00FF7B
++:100320000000000C0000000000000030000000721F
++:100330000000000800000055000000040000E57601
++:10034000000000040000E577000000040000E50E56
++:10035000000000040000E50F000000040140A000C0
++:100360000000001800000069000000C200C0E5F9AC
++:100370000000000800000069000000040014E50E01
++:10038000000000040040E50F0000000800C0006C01
++:10039000000000040000E570000000040000E571AA
++:1003A0000000000C0000E572000000040000A00046
++:1003B000000000040140A000000000040000E56807
++:1003C00000000004000C200000000018000000766F
++:1003D00000000004000B00000000000418C0E562EB
++:1003E00000000008000000780000000800C000774E
++:1003F00000000004000700CB00000038000000846B
++:1004000000000030000CA08600000004080045BB7E
++:1004100000000030000C2087000000000800E5BC50
++:10042000000000040000E5BB000000000000E5BC87
++:100430000000000C00120000000000040012000088
++:100440000000000C001B0002000000040000A000DF
++:10045000000000040000E821000000000000E800A7
++:10046000000000040000E821000000000000E82E69
++:100470000000000402CCA0000000000400140000F2
++:1004800000000004000CE1CC00000004050DE1CDEB
++:10049000000000040040000000000018000000966A
++:1004A0000000000400C0A00000000008000000934D
++:1004B0000000002000000098000000004200E00062
++:1004C000000000380000009F00000004000CA000A5
++:1004D000000000040014000000000004000C2000D4
++:1004E000000000040016000000000004700CE00092
++:1004F000000000080014009B000000004000E00025
++:10050000000000040240000000000004400EE00073
++:100510000000000402400000000000004000E00075
++:100520000000002C0010000000000000000040004F
++:1005300000000004080045C8000000040024000575
++:100540000000000408004D0B00000004000C200017
++:10055000000000040240E51B000000050080E50AE1
++:10056000000000050080E50B0000000400220000F0
++:1005700000000004000700CB00000038000000B7B6
++:1005800000000030000C2087000000050880E5BD59
++:1005900000000030000C2086000000050800E5BBCC
++:1005A00000000030000C2087000000050880E5BC3A
++:1005B00000000008000000BA000000050080E5BD52
++:1005C000000000050000E5BB000000050080E5BC60
++:1005D0000000000400210000000000040280000070
++:1005E0000000001800C000BE000000404180E00094
++:1005F00000000024000000C00000000C010000000A
++:100600000000000C0100E51D00000004000045BBD7
++:1006100000000008000080BA0000000403C0083099
++:10062000000000004200E000000000040000A00004
++:1006300000000004200045E0000000000000E5E1AB
++:10064000000000000000000100000004000700C8D6
++:10065000000000000800E39400000000000000001B
++:10066000000000040000E8C4000000040000E8C529
++:10067000000000040000E8C6000000040000E928B3
++:10068000000000040000E929000000040000E92A3D
++:1006900000000008000000CC000000040000E92871
++:1006A000000000040000E929000000040000E92A1D
++:1006B00000000008000000D30000000402C0200079
++:1006C000000000040006000000000034000000DB11
++:1006D00000000008000000D80000000400008000B6
++:1006E00000000000C000E00000000030000000E159
++:1006F000000000004200E00000000030000000E1C7
++:10070000000000004000E000000000040025001B85
++:100710000000000400230000000000040025000584
++:1007200000000034000000E60000000C00000000A3
++:10073000000000040024400000000004080045C838
++:1007400000000004002400050000000C08004D0B10
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B00000000004000C200000000004001D0018D0
++:1007C00000000004001A000100000034000000FBDB
++:1007D000000000080000004A000000080500A04AD0
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:00000001FF
++/* production radeon ucode r1xx-r6xx */
+diff --git a/firmware/radeon/RS780_me.bin.ihex b/firmware/radeon/RS780_me.bin.ihex
+new file mode 100644
+index 0000000..6479c10
+--- /dev/null
++++ b/firmware/radeon/RS780_me.bin.ihex
+@@ -0,0 +1,1345 @@
++:1000000000000000C020040000000000000000000C
++:1000100000A0000A000000000000FFFF00284621A9
++:100020000000000000000000D900480000000000AF
++:1000300000000000C02004000000000000000000DC
++:1000400000A0000A000000000000000000E0000026
++:100050000000000000010000C02946200000000050
++:1000600000000000D900480000000000000000006F
++:10007000C0200400000000000000000000A0000AF2
++:10008000000000008100000000204411000000007A
++:1000900000000001002048110000000000042004BE
++:1000A0000060441100000622000000000060000013
++:1000B000000005D10000000000600000000005DE27
++:1000C00000000000C02008000000000000000F0039
++:1000D000002816220000000000000008002116255C
++:1000E000000000000000001800203625000000007D
++:1000F0008D000000002044110000000000000004FA
++:10010000002F022500000000000000000CE00000AD
++:1001100000000018004120000040481100000019B4
++:100120000042200000204811000000008E00000066
++:1001300000204411000000000000002800204A2D8B
++:1001400000000000900000000020441100000000AA
++:100150000000000000204805000000000000000C26
++:1001600000211622000000000000000300281625D0
++:10017000000000000000001900211A220000000009
++:100180000000000400281A26000000000000000003
++:10019000002914C5000000000000001900203625C9
++:1001A0000000000000000000003A140200000000FF
++:1001B00000000016002116250000000000000003CA
++:1001C00000281625000000000000001700200E2D5A
++:1001D00000000000FFFFFFFC00280E2300000000CD
++:1001E00000000000002914A3000000000000001718
++:1001F00000203625000000000000800000280E22AC
++:10020000000000000000000700220E230000000094
++:10021000000000000029386E0000000020000000EF
++:1002200000280E22000000000000000600210E231E
++:1002300000000000000000000029386E00000000EF
++:100240000000000000220222000000000000000068
++:1002500014E0000000000038000000002EE0000064
++:1002600000000035000000002CE000000000003716
++:100270000000000000400E2D0000003900000008C2
++:1002800000200E2D00000000000000090040122D8B
++:10029000000000460000000100400E2D0000003963
++:1002A00000000000C0200C0000000000003FFFFC28
++:1002B0000028122300000000000000020022122487
++:1002C000000000000000001F00211E2300000000AD
++:1002D0000000000014E000000000003E00000008E4
++:1002E00000401C11000000410000000D00201E2DE8
++:1002F000000000000000000F00281E270000000082
++:100300000000000300221E27000000007FC0000044
++:1003100000281A23000000000000001400211A2603
++:10032000000000000000000100331A260000000059
++:100330000000000800221A26000000000000000053
++:1003400000290CC700000000000000270020362410
++:100350000000000000007F000028122100000000C3
++:1003600000001400002F0224000000000000000024
++:100370000CE000000000004B0000000100290E23EB
++:10038000000000000000000E0020362300000000E6
++:100390000000E0000020441100000000FFF8000011
++:1003A00000294A230000000000000000003A2C024F
++:1003B000000000000000000200220E2B00000000E0
++:1003C000FC00000000280E23000000000000000FC9
++:1003D000002036230000000000001FFF00294A23F0
++:1003E000000000000000002700204A2D000000004F
++:1003F000000000000020481100000000000000295B
++:1004000000200E2D00000000060A020000294A23E9
++:100410000000000000000000002048110000000063
++:100420000000000000204811000000000000000152
++:1004300000210222000000000000000014E0000083
++:1004400000000061000000002EE000000000005FDE
++:10045000000000002CE000000000005E0000000032
++:1004600000400E2D000000620000000100400E2D33
++:10047000000000620000000A00200E2D00000000B5
++:100480000000000B0040122D0000006A0000000078
++:10049000C0200C0000000000003FFFFC00281223D9
++:1004A00000000000000000020022122400000000F2
++:1004B0007FC0000000281623000000000000001488
++:1004C0000021162500000000000000010033162561
++:1004D000000000008000000000280E230000000043
++:1004E0000000000000290CA3000000003FFFFC00FA
++:1004F00000290E23000000000000001F00211E2321
++:10050000000000000000000014E000000000006D8A
++:100510000000010000401C11000000700000000DF0
++:1005200000201E2D00000000000000F000281E2703
++:10053000000000000000000400221E270000000050
++:100540008100000000204411000000000000000DA8
++:100550000020481100000000FFFFF0FF00281A30C3
++:10056000000000000000A02800204411000000004E
++:1005700000000000002948E6000000000000A0186C
++:1005800000204411000000003FFFFFFF00284A2325
++:10059000000000000000A010002044110000000036
++:1005A00000000000002048040000000000000030AF
++:1005B0000020162D00000000000000020029162572
++:1005C0000000000000000030002036250000000080
++:1005D000000000250020162D000000000000000093
++:1005E000002F00A300000000000000000CC000006D
++:1005F00000000083000000260020162D00000000EF
++:1006000000000000002F00A4000000000000000017
++:100610000CC000000000008400000000004000004A
++:100620000000008A000000250020362300000000A2
++:100630000000002600203624000000000000001703
++:1006400000201E2D000000000000000200210227F3
++:10065000000000000000000014E000000000008A1C
++:100660000000000000600000000005FF0000000026
++:1006700000600000000005F30000000200210E22CF
++:10068000000000000000000014C000000000008D09
++:1006900000000012C040362000000093000000005F
++:1006A0002EE0000000000091000000002CE000009F
++:1006B000000000900000000200400E2D000000929B
++:1006C0000000000300400E2D000000920000000C0E
++:1006D00000200E2D00000000000000120020362334
++:1006E000000000000000000300210E2200000000B6
++:1006F0000000000014C00000000000980000A00CE2
++:10070000002044110000000000000000C02048004C
++:100710000000000000000000C0404800000000A0F1
++:100720000000A00C002044110000000000000000A8
++:100730000020481100000000000000002EE0000032
++:100740000000009E000000002CE000000000009D62
++:100750000000000200400E2D0000009F000000037A
++:1007600000400E2D0000009F0000000C00200E2D08
++:10077000000000000000000000204803000000000E
++:1007800000000000003A0C0200000000003F0000E2
++:1007900000280E23000000000000001000210E239E
++:1007A00000000000000000110020362300000000BF
++:1007B0000000001E0021022B0000000000000000CD
++:1007C00014C00000000000A700000016C020362062
++:1007D000000000000000001F0021022B00000000AC
++:1007E0000000000014C00000000000AA0000001576
++:1007F000C0203620000000000000000800210E2B61
++:10080000000000000000007F00280E230000000010
++:1008100000000000002F0223000000000000000084
++:100820000CE00000000000E10000000027000000D4
++:10083000000000000000000000600000000002A3B3
++:1008400000000001002F0223000000000000000053
++:100850000AE00000000000B300000000006000009B
++:100860000000013A81000000002044110000000057
++:100870000000000600204811000000000000000CED
++:1008800000221E300000000099800000002044116A
++:1008900000000000000000040020122D00000000F5
++:1008A00000000008002212240000000000000010D8
++:1008B00000201811000000000000000000291CE4C6
++:1008C0000000000000000000006048070000012F49
++:1008D0009B00000000204411000000000000000008
++:1008E00000204802000000009C000000002044118D
++:1008F00000000000000000000033146F0000000042
++:100900000000000100333E23000000000000000052
++:10091000D9004800000000000000000000203C0555
++:1009200000000000810000000020441100000000D1
++:100930000000000E00204811000000000000000030
++:1009400000201010000000000000E007002044110B
++:10095000000000000000000F0021022B000000003A
++:100960000000000014C00000000000CB00F8FF08E9
++:1009700000204811000000009800000000404811CD
++:10098000000000DC000000F000280E220000000043
++:10099000000000A0002F0223000000000000000063
++:1009A0000CC00000000000DA0000001100200E2D35
++:1009B0000000000000000001002F022300000000E2
++:1009C000000000000CE00000000000D50000000264
++:1009D000002F022300000000000000000CE00000D7
++:1009E000000000D400003F0000400C11000000D6C1
++:1009F00000001F0000400C11000000D600000F0096
++:100A000000200C11000000000038000900294A23D2
++:100A1000000000003F00000000280E2B0000000036
++:100A20000000000200220E2300000000000000076A
++:100A300000494A23000000DC00380F09002048115B
++:100A400000000000680000070020481100000000BE
++:100A50000000000800214A270000000000000000FC
++:100A60000020481100000000060A020000294A2464
++:100A700000000000000000000020481100000000FD
++:100A80000000000000204811000000000000A20249
++:100A9000002044110000000000FF000000280E228A
++:100AA000000000000000008000294A230000000030
++:100AB0000000002700200E2D00000000000000268E
++:100AC0000020122D0000000000000000002F008315
++:100AD00000000000000000000CE00000000000EA40
++:100AE0000000000000600000000005F900000000A8
++:100AF00000400000000000EB00000000006000006B
++:100B0000000005FC000000070020222D000000006E
++:100B10000000000500220E2200000000001000006E
++:100B200000280E23000000000000000000292068BB
++:100B30000000000000000000003A0C02000000006D
++:100B4000000000EF00280E2300000000000000005D
++:100B500000292068000000000000001700200E2D72
++:100B6000000000000000000300210223000000003C
++:100B70000000000014E00000000000F80000000B7E
++:100B800000210228000000000000000014C0000046
++:100B9000000000F8000004000029222800000000E6
++:100BA0000000001400203628000000000000001C97
++:100BB00000210E22000000000000000014C0000010
++:100BC000000000FD0000A30C002044110000000004
++:100BD0000000000000204811000000000000001E7E
++:100BE00000210E22000000000000000014C00000E0
++:100BF0000000010B0000A30F0020441100000000C2
++:100C00000000001100200E2D000000000000000177
++:100C1000002F022300000000000000000CC00000B4
++:100C200000000104FFFFFFFF004048110000010B1E
++:100C300000000002002F022300000000000000005E
++:100C40000CC00000000001070000FFFF0040481139
++:100C50000000010B00000004002F02230000000030
++:100C6000000000000CC000000000010A000000FFAE
++:100C7000004048110000010B000000010020481155
++:100C8000000000000002C400002044110000000029
++:100C90000000001F00210E220000000000000000E4
++:100CA00014C00000000001120000001040210E20BE
++:100CB00000000000000000130020362300000000A8
++:100CC0000000001840224A20000000000000001030
++:100CD000C0424A20000001140000000000200C1156
++:100CE0000000000000000013002036230000000078
++:100CF000000000000020481100000000000000007B
++:100D000000204811000000000000000A002010111F
++:100D10000000000000000000002F0224000000007E
++:100D2000000000000CE000000000011B00000000BB
++:100D300000204811000000000000000100531224B0
++:100D400000000117FFBFFFFF00283A2E000000003F
++:100D50000000001B00210222000000000000000033
++:100D600014C000000000012E81000000002044118A
++:100D7000000000000000000D0020481100000000ED
++:100D80000000001800220E3000000000FC000000EF
++:100D900000280E2300000000810000000020441104
++:100DA000000000000000000E0020481100000000BC
++:100DB0000000000000201010000000000000E00E05
++:100DC000002044110000000007F8FF08002048112F
++:100DD000000000000000000000294A23000000007D
++:100DE0000000001C00201E2D000000000000000874
++:100DF00000214A27000000000000000000204811E8
++:100E000000000000060A020000294A240000000039
++:100E10000000000000204811000000000000000059
++:100E200000204811000000000000000000800000C9
++:100E300000000000810000000020441100000000BC
++:100E40000000000100204811000000000000217C8B
++:100E50000020441100000000008000000020481124
++:100E60000000000000000000002048060000000014
++:100E70000000000800214A270000000000000000D8
++:100E800017000000000000000004217F00604411F2
++:100E9000000006220000001F0021023000000000B8
++:100EA0000000000014C00000000006210000000443
++:100EB00000404C1100000135810000000020441169
++:100EC00000000000000000010020481100000000A8
++:100ED000000021F800204411000000000000001C68
++:100EE0000020481100000000000421F900604411B6
++:100EF0000000062200000011002102300000000066
++:100F00000000000014E000000000013C00000000B0
++:100F100000800000000000000000000000600000F1
++:100F20000000000B00000000006004110000031529
++:100F3000000000000020041100000000000000007C
++:100F400000600811000001B2000000000060000015
++:100F5000000001600000FFFF40280E20000000009C
++:100F600000000010C0211220000000000000FFFF60
++:100F7000402806200000000000000010C0210A20C8
++:100F800000000000000000000034146100000000B8
++:100F90000000000000741882000002BB0001A1FDE7
++:100FA00000604411000002E000003FFF002F022F0C
++:100FB00000000000000000000CC00000000001471D
++:100FC00000000000C040040000000001000000001C
++:100FD000006000000000000B000000000060041131
++:100FE00000000315000000000020041100000000B4
++:100FF0000000000000600811000001B200003FFF87
++:10100000002F022F00000000000000000CE0000094
++:10101000000000000000000000600000000001600F
++:101020000000001040210E20000000000000FFFF23
++:10103000C0281220000000000000001040211620EF
++:10104000000000000000FFFFC0681A20000002BB83
++:101050000001A1FD00604411000002E000003FFF1C
++:10106000002F022F00000000000000000CC0000054
++:101070000000015800000000C04004000000000112
++:101080000000225C0020441100000000000000016C
++:1010900000300A2F000000000000000100210A2299
++:1010A000000000000000000300384A220000000099
++:1010B0000000225600204411000000000000001A29
++:1010C00000204811000000000000A1FC0020441195
++:1010D0000000000000000001008048110000000036
++:1010E00000000000006000000000000B0000000095
++:1010F000006000000000018F0000000000600000A0
++:10110000000001A000003FFF002F022F00000000A0
++:10111000000000000CE000000000000000000000E3
++:1011200000202C0800000000000000000020241116
++:101130000000000000000000002028110000000056
++:10114000000022560020441100000000000000169C
++:1011500000204811000000000000225C0020441123
++:101160000000000000000003002048110000000003
++:1011700093800000002044110000000000000002E5
++:1011800000221E290000000000000000007048EB53
++:101190000000019C0000000000600000000002BB95
++:1011A00000000001403306200000000000000000A5
++:1011B000C03024090000000000003FFF002F022F74
++:1011C00000000000000000000CE000000000000033
++:1011D0000000000000600000000002A3000000000A
++:1011E000002F022100000000000000000AE00000C3
++:1011F0000000018100000000006000000000013AD2
++:101200000000000000400000000001869500000082
++:10121000002044110000000000000000002F022107
++:1012200000000000000000000CE00000000001864B
++:1012300000000000C0204800000000000000000185
++:10124000005306210000018292000000002044119A
++:101250000000000000000000C0604800000001978E
++:101260000001A1FD00204411000000000000001159
++:101270000020062D00000000000000000078042A75
++:10128000000002FB00000000002028090000000010
++:1012900000003FFF002F022F0000000000000000B0
++:1012A0000CC000000000017400000000C0400400F9
++:1012B000000000010000021000600411000003158E
++:1012C00000003FFF002F022F000000000000000080
++:1012D0000CE000000000019400000015C020362042
++:1012E0000000000000000016C020362000000000B2
++:1012F0003F800000002004110000000046000000B4
++:1013000000600811000001B2000000000080000031
++:10131000000000000000A1FC0020441100000000BB
++:1013200000003FFF002F022F00000000000000001F
++:101330000CC000000000019B00000001008048116B
++:1013400000000000000000210080481100000000A3
++:101350000000FFFF40280E200000000000000010E9
++:10136000C0211220000000000000FFFF40281620CE
++:101370000000000000000010C0811A2000000000E2
++:101380008100000000204411000000000000000661
++:1013900000204811000000000000000800221E305C
++:1013A000000000000000002900201A2D00000000AD
++:1013B0000000E0000020441100000000FFFBFF09D6
++:1013C00000204811000000000000000F0020222D26
++:1013D0000000000000001FFF00294A280000000054
++:1013E000000000060020222D000000000000000088
++:1013F000002920E80000000000000000002048084C
++:101400000000000000000000002048110000000063
++:10141000060A020000294A26000000000000000021
++:1014200000204811000000000000000000204811CA
++:101430000000000000000100002018110000000062
++:101440000000000800621E280000012F00000008B4
++:1014500000822228000000000002C0000020441189
++:10146000000000000000001500600E2D000001BD0E
++:101470000000001600600E2D000001BD0000C00835
++:1014800000204411000000000000001700200E2D75
++:10149000000000000000000014C00000000001B9BE
++:1014A0000000000000200411000000000000000007
++:1014B0000020480100000000390000000020481111
++:1014C00000000000000000000020481100000000A3
++:1014D000000000000080480200000000000000182A
++:1014E00000202E2D0000000000000000003B0D63D6
++:1014F000000000000000000800224A230000000055
++:101500000000001000224A23000000000000001824
++:1015100000224A2300000000000000000080480371
++:101520000000000000000000006000000000000B50
++:10153000000010000060041100000315000000000E
++:1015400000200411000000000000000000600811ED
++:10155000000001B2000000070021062F000000007B
++:101560000000001300200A2D000000000000000110
++:1015700000202C11000000000000FFFF4028222066
++:10158000000000000000000F0026222800000000DC
++:101590000000001040212620000000000000000F85
++:1015A000002626290000000000000000002028027C
++:1015B000000000000000225600204411000000003E
++:1015C0000000001B00204811000000000000000087
++:1015D000002F022100000000000000000CE00000CD
++:1015E000000001E00000225C002044110000000027
++:1015F0000000008100204811000000000000A1FC54
++:1016000000204411000000000000000100204811EB
++:10161000000000000000008000201C1100000000FD
++:1016200000000000002F0227000000000000000062
++:101630000CE00000000001DC000000000060000081
++:10164000000001E90000000100531E27000001D83E
++:101650000000000100202C11000000000000001F0D
++:1016600000280A22000000000000001F00282A2A8B
++:10167000000000000000000100530621000001D11D
++:101680000000225C00204411000000000000000265
++:1016900000304A2F000000000000A1FC002044118F
++:1016A00000000000000000010020481100000000C0
++:1016B0000000000100301E2F0000000000000000AC
++:1016C000002F022700000000000000000CE00000D6
++:1016D000000000000000000000600000000001E9C0
++:1016E0000000000100531E27000001E50000FFFF7D
++:1016F00040280E20000000000000000F00260E23EE
++:101700000000000000000010C021122000000000B6
++:101710000000000F0026122400000000000000005E
++:1017200000201411000000000000000000601811EB
++:10173000000002BB0001A1FD0020441100000000D8
++:1017400000000000002F022B00000000000000003D
++:101750000CE00000000001F8000000100022162834
++:1017600000000000FFFF0000002816250000000018
++:101770000000FFFF00281A29000000000000000000
++:10178000002948C500000000000000000020480AB1
++:10179000000000000000000000202C1100000000EC
++:1017A000000000100022162300000000FFFF0000D0
++:1017B00000281625000000000000FFFF00281A2462
++:1017C0000000000000000000002948C500000000E3
++:1017D0000000000000731503000002050000000077
++:1017E0000020180500000000000000000073152410
++:1017F0000000020500000000002D14C500000000DC
++:1018000000000000003008A20000000000000000FE
++:101810000020480200000000000000000020280214
++:101820000000000000000000002020030000000075
++:101830000000000000802404000000000000000FF1
++:1018400000210225000000000000000014C000007C
++:101850000000062100000000002B1405000000001D
++:1018600000000001009016250000000000000000AC
++:10187000006000000000000B000000000060041188
++:10188000000003150000000000200411000000000B
++:101890000000000000600811000001B200002256A4
++:1018A00000204411000000000000001A00294A2214
++:1018B0000000000000000000C02000000000000048
++:1018C00000003FFF002F022F00000000000000007A
++:1018D0000CE000000000000000000000C020040038
++:1018E000000000000000225C002044110000000005
++:1018F0000000000300384A21000000000000A1FCA5
++:1019000000204411000000000000000100204811E8
++:10191000000000000000FFFF40281220000000002F
++:1019200000000010C0211A20000000000000FFFF8E
++:1019300040280E200000000000000010C0211620EA
++:10194000000000000000000000741465000002BBED
++:101950000001A1FD00604411000002E00000000150
++:10196000003306210000000000000000002F0221CB
++:1019700000000000000000000CC000000000021980
++:1019800000003FFF002F022F0000000000000000B9
++:101990000CC000000000021200000000C040040063
++:1019A000000000010000000000600000000005DEF3
++:1019B000000000000040040F0000021300000000BF
++:1019C00000600000000005D1000000000060000081
++:1019D000000005DE00000210006004110000031585
++:1019E0000000000000600000000001A000000000F6
++:1019F000006000000000019C00000000006000008A
++:101A0000000002BB0000000000600000000002A314
++:101A1000938000000020441100000000000000003E
++:101A2000002048080000000000000000002F022FE6
++:101A300000000000000000000AE000000000023288
++:101A400000000000006000000000013A00000000FB
++:101A50000040000000000236950000000020441104
++:101A60000000000000000000002F022F0000000016
++:101A7000000000000CE00000000002360000000042
++:101A8000C0404800000002339200000000204411D2
++:101A90000000000000000000C0204800000000001E
++:101AA0000000225600204411000000000000001633
++:101AB00000204811000000000000225C00204411BA
++:101AC000000000000000000300204811000000009A
++:101AD0000000A1FC002044110000000000000001F3
++:101AE00000204811000000000001A1FD0020441169
++:101AF000000000000000000000600411000002FB74
++:101B000000000000C04004000000000100000000D0
++:101B100000600000000005D10000A00C002044116E
++:101B20000000000000000000C0204800000000008D
++:101B300000000000C040480000000000000000005D
++:101B4000006000000000000B0000001840210A2087
++:101B50000000000000000003002F0222000000002F
++:101B6000000000000AE000000000024C0000001429
++:101B70000020222D00000000000801010029222879
++:101B800000000000000000140020362800000000C3
++:101B90000000A30C00204411000000000000000021
++:101BA000C02048000000000000000000C0204800E5
++:101BB0000000000000000000C0404800000002518A
++:101BC00000000000006000000000000B000000109A
++:101BD00000600411000003153F8000000020041184
++:101BE000000000000000000000600811000001B2C9
++:101BF0000000225C002044110000000000000003EF
++:101C000000204811000000000000000000600000FB
++:101C10000000027C0000001700201E2D00000000C4
++:101C20000000000100211E2700000000000000004D
++:101C300014E000000000026A0000001200201E2DC7
++:101C4000000000000000FFFF00281E270000000029
++:101C50000000000000341C2700000000000000000D
++:101C600012C000000000025F0000000000201C11F4
++:101C70000000000000000000002F00E50000000050
++:101C80000000000008C00000000002620000000028
++:101C900000201407000000000000001200201E2D8C
++:101CA000000000000000001000211E2700000000BE
++:101CB0000000000000341C4700000000000000008D
++:101CC00012C00000000002670000000000201C118C
++:101CD0000000000000000000002F00E600000000EF
++:101CE0000000000008C000000000026A00000000C0
++:101CF0000020180700000000000000000060000045
++:101D0000000002C100002256002044110000000023
++:101D1000000000000034202300000000000000004C
++:101D200012C00000000002720000000000342044D5
++:101D3000000000000000000012C00000000002715E
++:101D40000000001600404811000002760000001854
++:101D500000404811000002760000000000342044DA
++:101D6000000000000000000012C00000000002752A
++:101D70000000001700404811000002760000001922
++:101D800000204811000000000000A1FC00204411C8
++:101D900000000000000000010020481100000000C9
++:101DA0000001A1FD00604411000002E900003FFFB6
++:101DB000002F022F00000000000000000CC00000F7
++:101DC0000000025600000000C040040000000001B6
++:101DD0000000001040210620000000000000FFFF6E
++:101DE000C0280A20000000000000001040210E2042
++:101DF000000000000000FFFFC028122000000000CB
++:101E00000000001040211620000000000000FFFF2D
++:101E1000C0881A200000000081000000002044114A
++:101E20000000000000000001002048110000000038
++:101E3000000420040060441100000622000000009D
++:101E400000600000000005D100000000C06000003C
++:101E5000000002A30000000500200A2D0000000081
++:101E60000000000800220A22000000000000002BF1
++:101E700000201A2D000000000000001C00201E2D74
++:101E8000000000000000700000281E270000000075
++:101E90000000000000311CE6000000000000002AE5
++:101EA00000201A2D000000000000000C00221A265D
++:101EB0000000000000000000002F00E6000000000D
++:101EC0000000000006E00000000002920000000098
++:101ED00000201C11000000000000000000200C1178
++:101EE000000000000000002B00203623000000004E
++:101EF0000000001000201811000000000000000089
++:101F000000691CE20000012F9380000000204411B2
++:101F10000000000000000000002048070000000052
++:101F200095000000002044110000000000000000A7
++:101F3000002F022F00000000000000000CE0000055
++:101F40000000029D0000000100333E2F0000000051
++:101F500000000000D90048000000000092000000CE
++:101F6000002044110000000000000000C0204800D4
++:101F7000000000000000001C0040362700000000A8
++:101F80000000000CC0220A20000000000000002910
++:101F9000002036220000000000000028C04036204B
++:101FA000000000000000A2A4002044110000000076
++:101FB000000000090020481100000000A1000000FE
++:101FC00000204411000000000000000100804811C2
++:101FD000000000000000002100201E2D0000000075
++:101FE00000000000002C1CE30000000000000021A5
++:101FF00000203627000000000000002200201E2DD7
++:102000000000000000000000002C1CE400000000A4
++:1020100000000022002036270000000000000023FE
++:1020200000201E2D0000000000000000003120A351
++:102030000000000000000000002D1D07000000004F
++:1020400000000023002036270000000000000024CC
++:1020500000201E2D0000000000000000003120C400
++:102060000000000000000000002D1D07000000001F
++:10207000000000240080362700000000000000213E
++:10208000002036230000000000000022002036243B
++:10209000000000000000000000311CA30000000050
++:1020A0000000002300203627000000000000000090
++:1020B00000311CC40000000000000024008036270E
++:1020C000000000000000001A002036270000000079
++:1020D0000000001B00203628000000000000001750
++:1020E00000201E2D00000000000000020021022739
++:1020F000000000000000000014C00000000002DC2E
++:102100000000000000400000000002D90000001A9A
++:1021100000203627000000000000001B00203628A9
++:10212000000000000000001700201E2D000000002D
++:102130000000000200210227000000000000000053
++:1021400014E00000000002D9000000030021022773
++:10215000000000000000000014E00000000002DCAD
++:102160000000002300201E2D0000000000000000E1
++:10217000002E00E1000000000000000002C000008E
++:10218000000002DC0000002100201E2D00000000E5
++:1021900000000000003120A100000000000000004D
++:1021A000002E00E8000000000000000006C0000053
++:1021B000000002DC0000002400201E2D00000000B2
++:1021C00000000000002E00E20000000000000000FF
++:1021D00002C00000000002DC0000002200201E2DD2
++:1021E0000000000000000000003120C200000000DC
++:1021F00000000000002E00E80000000000000000C9
++:1022000006C00000000002DC0000000000600000CA
++:10221000000005FF0000000000600000000002B5A3
++:102220000000000000400000000002DE000000008E
++:1022300000600000000002B5000000000060000027
++:10224000000005F60000000000400000000002DE73
++:102250000000000000600000000002A70000000075
++:1022600000400000000002DE0000001A00201E2DC9
++:10227000000000000000001B0080222D0000000074
++:102280000000001000221E230000000000000000DB
++:1022900000294887000000000000000000311CA356
++:1022A000000000000000001000221E2700000000B7
++:1022B0000000000000294887000000000000001016
++:1022C00000221E230000000000000000003120C496
++:1022D000000000000000FFFF00282228000000008E
++:1022E0000000000000894907000000000000001005
++:1022F00000221E2300000000000000000029488783
++:10230000000000000000001000221E21000000005C
++:102310000000000000294847000000000000000005
++:1023200000311CA3000000000000001000221E2746
++:1023300000000000000000000029488700000000A5
++:102340000000000000311CA100000000000000108F
++:1023500000221E270000000000000000002948475E
++:10236000000000000000001000221E2300000000FA
++:1023700000000000003120C4000000000000FFFF4A
++:102380000028222800000000000000000029490762
++:10239000000000000000001000221E2100000000CC
++:1023A00000000000003120C2000000000000FFFF1C
++:1023B00000282228000000000000000000894907D2
++:1023C000000000000000001000221E23000000009A
++:1023D0000000000000294887000000000000000104
++:1023E00000220A210000000000000000003308A2C3
++:1023F000000000000000001000221E22000000006B
++:102400000000001000212222000000000000000057
++:1024100000294907000000000000000000311CA353
++:10242000000000000000001000221E270000000035
++:1024300000000000002948870000000000000001A3
++:1024400000220A210000000000000000003008A265
++:10245000000000000000001000221E22000000000A
++:1024600000000010002122220000000000000000F7
++:1024700000294907000000000000001000221E2370
++:102480000000000000000000003120C40000000037
++:102490000000FFFF002822280000000000000000CC
++:1024A000002949070000000000000000003808C5AE
++:1024B00000000000000000000030084100000000A3
++:1024C0000000000100220A220000000000000000BD
++:1024D000003308A2000000000000001000221E22AD
++:1024E0000000000000000010002122220000000077
++:1024F00000000000008949070000000000000017EC
++:102500000020222D000000000000000014C0000088
++:1025100000000318FFFFFFEF002806210000000065
++:10252000000000140020222D000000000000F8E050
++:1025300000204411000000000000000000294901B3
++:1025400000000000000000000089490100000000B8
++:102550000000000000204811000000000000000002
++:102560000020481100000000060A02000080481107
++:102570000000000000000000C0200000000000007B
++:1025800097000000C020441100000000000000007F
++:10259000C0204811000000008A0000000020441103
++:1025A00000000000000000000020481100000000B2
++:1025B0000000225C00204411000000000000000028
++:1025C000C0204800000000000000A1FC00204411D1
++:1025D0000000000000000000C020480000000000D3
++:1025E00000000000C0200400000000000000000007
++:1025F00000A0000A0000000097000000C020441165
++:102600000000000000000000C02048110000000091
++:102610008A000000C02044110000000000000000FB
++:1026200000204811000000000000225C002044113E
++:102630000000000000000000C02048000000000072
++:102640000000A1FC00204411000000000000000078
++:10265000C02048000000000000000000C02004006E
++:10266000000000000000000000A0000A00000000C0
++:10267000970000000020441100000000000000004E
++:1026800000204811000000008A00000000204411D2
++:1026900000000000000000000020481100000000C1
++:1026A0000000225C00204411000000000000000037
++:1026B000C0204800000000000000A1FC00204411E0
++:1026C0000000000000000000C020480000000000E2
++:1026D00000000000C0200400000000000000000016
++:1026E00000A0000A00000000970000000020441134
++:1026F0000000000000000000002048110000000061
++:102700008A000000002044110000000000000000CA
++:1027100000204811000000000000225C002044114D
++:102720000000000000000000C02048000000000081
++:102730000000A1FC00204411000000000000000087
++:10274000C0204800000000000001A1FD002044114D
++:102750000000000000000000D90048000000000058
++:1027600000000000C0200400000000000000000085
++:1027700000A0000A000000000000225700204411C1
++:102780000000000000000003C0484A2000000000D4
++:102790000000225D00204411000000000000000045
++:1027A000C040480000000000000000000060000081
++:1027B000000005DE00000000C0200800000000004E
++:1027C0000000225C00204411000000000000000313
++:1027D00000384A22000000000000A1FC0020441143
++:1027E0000000000000000000C020480000000000C1
++:1027F0000001A1FD002044110000000000000000C5
++:10280000002F022200000000000000000CE0000089
++:102810000000000000000000402048000000000010
++:102820000000000140304A200000000000000002CB
++:10283000C0304A20000000000000000100530A22BE
++:10284000000003550000003FC0280A2000000000DF
++:102850008100000000204411000000000000000181
++:102860000020481100000000000021F80020441161
++:1028700000000000000000180020481100000000C7
++:10288000000421F90060441100000622000000113C
++:1028900000210230000000000000000014E00000F1
++:1028A0000000035E00000014002F02220000000060
++:1028B000000000000CC000000000036C0001A2A496
++:1028C00000204411000000000000000000604802E9
++:1028D00000000374000021000020441100000000EB
++:1028E00000000000C02048000000000000000000C0
++:1028F000C02048000000000000000000C020480088
++:102900000000000000000000C0404800000000007F
++:1029100000000004002F0222000000000000000060
++:102920000CC00000000003700001A2A400204411AC
++:1029300000000000000000000040480200000367A3
++:1029400000000028002F022200000000000000000C
++:102950000CC00000000005BA0001A2A40020441130
++:102960000000000000000000004048020000036773
++:102970000000002C00203626000000000000004966
++:1029800000201811000000000000003F0020481146
++:10299000000000000000000100331A2600000000C3
++:1029A00000000000002F02260000000000000000D0
++:1029B0000CC00000000003760000002C00801A2DDF
++:1029C000000000000000003FC0280A2000000000B6
++:1029D00000000015002F022200000000000000008F
++:1029E0000CE000000000038C00000006002F022213
++:1029F00000000000000000000CE00000000003B731
++:102A000000000016002F022200000000000000005D
++:102A10000CE00000000003B900000020002F02229B
++:102A200000000000000000000CE00000000003A215
++:102A30000000000F002F0222000000000000000034
++:102A40000CE00000000003AE00000010002F022286
++:102A500000000000000000000CE00000000003AED9
++:102A60000000001E002F02220000000000000000F5
++:102A70000CE00000000003960000A2A40020441116
++:102A800000000000000000000040480200000000BC
++:102A90000800000000290A220000000000000003D6
++:102AA00040210E20000000000000000CC021122078
++:102AB00000000000000800000028122400000000B0
++:102AC00000000014C02216200000000000000000DA
++:102AD000002914A4000000000000A2A4002044115A
++:102AE0000000000000000000002948A200000000D3
++:102AF0000000A1FE002044110000000000000000C2
++:102B00000040480300000000810000000020441144
++:102B1000000000000000000100204811000000003B
++:102B2000000021F800204411000000000000001601
++:102B30000020481100000000000421F90060441149
++:102B400000000622000000150021023000000000F5
++:102B50000000000014E00000000003980000210EB7
++:102B6000002044110000000000000000C0204800C8
++:102B70000000000000000000C0204800000000002D
++:102B80000000A2A40020441100000000000000008A
++:102B900000404802000000008100000000204411B5
++:102BA00000000000000000010020481100000000AB
++:102BB000000021F800204411000000000000001770
++:102BC0000020481100000000000421F900604411B9
++:102BD0000000062200000003002102300000000077
++:102BE0000000000014E00000000003A40000210821
++:102BF000002044110000000000000000C020480038
++:102C00000000000000000000C0204800000000009C
++:102C10000000A2A4002044110000000000000000F9
++:102C200000404802000000000000A2A4002044115F
++:102C3000000000000000000000204802000000002A
++:102C4000800000000020441100000000000000008F
++:102C50000020481100000000810000000020441105
++:102C600000000000000000100020481100000000DB
++:102C70000000000000200010000000000000000024
++:102C800014C00000000003B4000000000040000079
++:102C9000000000000001A2A4002044110000000078
++:102CA0000000000600404811000000000001A2A43E
++:102CB00000204411000000000000001600604811D0
++:102CC000000003740000000000400000000000004D
++:102CD00000000000C020080000000000000000000C
++:102CE000C0200C00000000000000001D0021022395
++:102CF000000000000000000014E00000000003CE0F
++:102D000081000000002044110000000000000001CC
++:102D10000020481100000000000021F800204411AC
++:102D20000000000000000018002048110000000012
++:102D3000000421F900604411000006220000001187
++:102D400000210230000000000000000014E000003C
++:102D5000000003C200002100002044110000000018
++:102D600000000000002048020000000000000000F9
++:102D70000020480300000000BABECAFE002048112F
++:102D800000000000CAFEBABE00204811000000008A
++:102D90000000A2A400204411000000000000000474
++:102DA0000040481100000000000021700020441184
++:102DB00000000000000000000020480200000000A9
++:102DC0000000000000204803000000008100000017
++:102DD00000204411000000000000000A00204811FB
++:102DE00000000000000000000020001000000000B3
++:102DF0000000000014C00000000003D38C0000009D
++:102E00000020441100000000CAFEBABE0040481174
++:102E100000000000810000000020441100000000BC
++:102E200000000001002048110000000000003FFFEA
++:102E300040280A20000000008000000040280E20EA
++:102E40000000000040000000C02812200000000028
++:102E50000004000000694622000006220000000075
++:102E6000002014100000000000000000002F0223CA
++:102E700000000000000000000CC00000000003E1A2
++:102E800000000000C0401800000003E400003FFF05
++:102E9000C0281A2000000000000400000069462637
++:102EA00000000622000000000020181000000000B2
++:102EB00000000000002F02240000000000000000BD
++:102EC0000CC00000000003E700000000C0401C0030
++:102ED000000003EA00003FFFC0281E2000000000A1
++:102EE00000040000006946270000062200000000E0
++:102EF00000201C1000000000000000000020440220
++:102F00000000000000000000002820C500000000B4
++:102F100000000000004948E800000000A580000013
++:102F200000200811000000000000200000200C110B
++:102F30000000000083000000006044110000041243
++:102F4000000000000020440200000000000000001B
++:102F5000C0204800000000000000000040204800A1
++:102F6000000000000000001FC0210220000000003F
++:102F70000000000014C00000000003F70000201053
++:102F800000204411000000000000800000204811D3
++:102F9000000000000000FFFFC0481220000003FFF7
++:102FA000A780000000200811000000000000A00021
++:102FB00000200C110000000083000000006044119C
++:102FC0000000041200000000002044020000000085
++:102FD00000000000C02048000000000000000000C9
++:102FE000C0204800000000000000FFFFC0281220A1
++:102FF00000000000830000000020441100000000D9
++:103000000000000000304883000000008400000041
++:10301000002044110000000000000000C020480013
++:1030200000000000000000001D0000000000000083
++:103030008300000000604411000004120000000042
++:10304000C040040000000001A98000000020081119
++:10305000000000000000C00000400C11000003FA56
++:10306000AB80000000200811000000000000F8E024
++:1030700000400C11000003FAAD8000000020081190
++:10308000000000000000F88000400C11000003FA6E
++:10309000B380000000200811000000000000F3FCD5
++:1030A00000400C11000003FAAF800000002008115E
++:1030B000000000000000E00000400C11000003FAD6
++:1030C000B180000000200811000000000000F000A6
++:1030D00000400C11000003FA83000000002044119E
++:1030E00000000000000021480020481100000000FE
++:1030F00084000000002044110000000000000000D7
++:10310000C020480000000000000000001D0000007A
++:10311000000000000000000000800000000000002F
++:1031200001182000C0304620000000000000000010
++:10313000D90048000000000000000000C02004008A
++:10314000000000000000000000A0000A00000000D5
++:103150000218A000C030462000000000000000005F
++:10316000D90048000000000000000000C02004005A
++:10317000000000000000000000A0000A00000000A5
++:103180000318C000C030462000000000000000000E
++:10319000D90048000000000000000000C02004002A
++:1031A000000000000000000000A0000A0000000075
++:1031B0000418F8E0C03046200000000000000000C5
++:1031C000D90048000000000000000000C0200400FA
++:1031D000000000000000000000A0000A0000000045
++:1031E0000518F880C03046200000000000000000F4
++:1031F000D90048000000000000000000C0200400CA
++:10320000000000000000000000A0000A0000000014
++:103210000618E000C030462000000000000000005A
++:10322000D90048000000000000000000C020040099
++:10323000000000000000000000A0000A00000000E4
++:103240000718F000C0304620000000000000000019
++:10325000D90048000000000000000000C020040069
++:10326000000000000000000000A0000A00000000B4
++:103270000818F3FCC03046200000000000000000E9
++:10328000D90048000000000000000000C020040039
++:10329000000000000000000000A0000A0000000084
++:1032A00000000033C0300A200000000000000000D1
++:1032B000C0403440000000000000003000200A2D13
++:1032C0000000000000000000C0290C4000000000C9
++:1032D0000000003000203623000000000000000045
++:1032E000C0200400000000000000000000A0000A50
++:1032F00000000000860000000020441100000000D3
++:1033000000000000004048010000000085000000AF
++:10331000C0204411000000000000000000404801EF
++:10332000000000000000217C00204411000000008B
++:1033300000000018402102200000000000000000F2
++:1033400014C000000000044700800000C0494A206B
++:103350000000044800000000C020480000000000F9
++:1033600000000000C0204800000000000000000035
++:10337000C02048000000000081000000002044112F
++:1033800000000000000000010020481100000000C3
++:1033900000000000C0200800000000000000000441
++:1033A000002F0222000000000000000006E00000E4
++:1033B000000004500000000400200811000000007C
++:1033C0000000000017000000000000000004217F42
++:1033D00000604411000006220000001F002102309E
++:1033E000000000000000000014C000000000000009
++:1033F0000000000000404C020000045000000000EB
++:10340000C0200C000000000000000000C0201000E0
++:103410000000000000000000C020140000000000B8
++:1034200000000000C02018000000000000000000A4
++:10343000C0201C000000000000007F0000280A21BE
++:103440000000000000004500002F022200000000E4
++:10345000000000000CE0000000000461000000001B
++:10346000C02020000000000000000004002F0228FF
++:10347000000000000000000006E000000000046101
++:1034800000000004002020110000000000000000E7
++:1034900017000000000000000000001000280A23B0
++:1034A0000000000000000010002F022200000000B9
++:1034B000000000000CE00000000004698100000032
++:1034C000002044110000000000000001002048110D
++:1034D00000000000000400000069462400000622ED
++:1034E00000000000004000000000046E81000000A9
++:1034F00000204411000000000000000000204811DE
++:10350000000000000000216D0020441100000000B8
++:10351000000000000020480400000000000000003F
++:10352000006048050000062700000000002824F085
++:10353000000000000000000700280A23000000002F
++:1035400000000001002F0222000000000000000027
++:103550000AE000000000047500000000002F00C910
++:10356000000000000000000004E000000000048EE5
++:1035700000000000004000000000049B000000026A
++:10358000002F022200000000000000000AE00000FE
++:103590000000047A00000000002F00C900000000B5
++:1035A0000000000002E000000000048E00000000A7
++:1035B000004000000000049B00000003002F0222D6
++:1035C00000000000000000000AE000000000047F8E
++:1035D00000000000002F00C90000000000000000F3
++:1035E0000CE000000000048E00000000004000001D
++:1035F0000000049B00000004002F022200000000D5
++:10360000000000000AE00000000004840000000048
++:10361000002F00C900000000000000000AE00000C8
++:103620000000048E00000000004000000000049B29
++:1036300000000005002F0222000000000000000032
++:103640000AE000000000048900000000002F00C90B
++:10365000000000000000000006E000000000048EF2
++:1036600000000000004000000000049B0000000675
++:10367000002F022200000000000000000AE000000D
++:103680000000048E00000000002F00C900000000B0
++:103690000000000008E000000000048E00000000B0
++:1036A000004000000000049B00007F0000280A2169
++:1036B0000000000000004500002F02220000000072
++:1036C000000000000AE00000000000000000000808
++:1036D00000210A23000000000000000014C00000C8
++:1036E000000004980000216900204411000000003F
++:1036F00000000000C02048000000000000000000A2
++:10370000C02048000000000000000000C020480069
++:1037100000000000CAFEBABE0040481100000000D0
++:1037200000000000C0204400000000000000000075
++:10373000C02000000000000000000000C040480061
++:103740000000000000007F0000280A2100000000A7
++:1037500000004500002F02220000000000000000D1
++:103760000AE00000000004A100000000C0200000EA
++:103770000000000000000000C02000000000000069
++:1037800000000000C0400000000000000000000039
++:1037900000404C080000046100000000C020080048
++:1037A000000000000000001040210E20000000007A
++:1037B0000000001140211220000000000000001253
++:1037C0004021162000000000000021690020441163
++:1037D000000000000000000000204802000000007F
++:1037E0000000000000210225000000000000000091
++:1037F00014E00000000004AB00040000C0494A20AF
++:10380000000004ACFFFBFFFFC0284A2000000000BE
++:103810000000000000210223000000000000000062
++:1038200014E00000000004B800000000C0204800C0
++:103830000000000000000000C02048000000000060
++:103840000000000000210224000000000000000031
++:1038500014C000000000000081000000002044119E
++:10386000000000000000000C0020481100000000D3
++:103870000000000000200010000000000000000018
++:1038800014C00000000004B4A00000000020441197
++:1038900000000000CAFEBABE00404811000000004F
++:1038A000810000000020441100000000000000041E
++:1038B00000204811000000000000216B002044118E
++:1038C0000000000000000000C020481000000000C0
++:1038D00081000000002044110000000000000005ED
++:1038E00000204811000000000000216C002044115D
++:1038F0000000000000000000C02048100000000090
++:1039000000000000002F0224000000000000000062
++:103910000CE000000000000000000000004000007B
++:10392000000004B200000000C0210A2000000000D6
++:103930000000000014C00000000004CB8100000063
++:103940000020441100000000000000000020481189
++:10395000000000000000216D002044110000000064
++:1039600000000000C020480000000000000000002F
++:10397000C060480000000627000000000040000072
++:10398000000004CF8100000000204411000000006E
++:1039900000000001002048110000000000040000A9
++:1039A000C02946200000000000000000C0600000A8
++:1039B0000000062200000001002102220000000099
++:1039C0000000000014C00000000004D600002169BF
++:1039D000002044110000000000000000C02048004A
++:1039E0000000000000000000C020480000000000AF
++:1039F000000000000020481000000000CAFEBABE0F
++:103A0000004048110000000000000000C0204400F9
++:103A10000000000000000000C0404810000000004E
++:103A2000810000000020441100000000000000019F
++:103A30000020481100000000000021F8002044117F
++:103A4000000000000000000E0020481100000000EF
++:103A5000000421F90060441100000622000000006B
++:103A600000210230000000000000000014C000002F
++:103A7000000004D800002180002044110000000054
++:103A800000000000C020480000000000000000000E
++:103A9000C02000000000000000000000C02048001E
++:103AA0000000000000000000C02000000000000036
++:103AB00000000000C04048000000000000000003BB
++:103AC00000333E2F00000000000000010021022111
++:103AD000000000000000000014E0000000000508E5
++:103AE0000000002C00200A2D00000000000400004F
++:103AF00018E00C11000004F70000000100333E2F15
++:103B000000000000000021690020441100000000B6
++:103B1000000000000020480200000000000000003B
++:103B200000204803000000000000000800300A22C6
++:103B30000000000000000000C0204800000000005D
++:103B400000000000C02048000000000000002169C3
++:103B50000020441100000000000000000020480286
++:103B600000000000000000000020480300000000EA
++:103B70000000000800300A220000000000000000E1
++:103B8000C02048000000000000000000D8C048002D
++:103B9000000004EB00002169002044110000000037
++:103BA00000000000002048020000000000000000AB
++:103BB00000204803000000000000000800300A2236
++:103BC0000000000000000000C020480000000000CD
++:103BD00000000000C0204800000000000000002D90
++:103BE0000020122D000000000000000000290C83BE
++:103BF00000000000000021690020441100000000C6
++:103C0000000000000020480200000000000000004A
++:103C100000204803000000000000000800300A22D5
++:103C20000000000000000000C0204800000000006C
++:103C300000000000C020480000000000000000114B
++:103C400000210224000000000000000014C0000059
++:103C5000000000000000000000400000000004B26E
++:103C60000000002CC0203620000000000000002DC5
++:103C7000C0403620000000000000000F002102219B
++:103C8000000000000000000014C000000000050D4E
++:103C900000000000006000000000000B00000000B9
++:103CA000D90000000000000000000000C040040037
++:103CB00000000001B50000000020441100000000D9
++:103CC000000020000020481100000000B6000000A5
++:103CD00000204411000000000000A0000020481156
++:103CE00000000000B70000000020441100000000A8
++:103CF0000000C0000020481100000000B8000000D3
++:103D000000204411000000000000F8E000204811ED
++:103D100000000000B9000000002044110000000075
++:103D20000000F8800020481100000000BA000000E8
++:103D300000204411000000000000E00000204811B5
++:103D400000000000BB000000002044110000000043
++:103D50000000F0000020481100000000BC0000003E
++:103D600000204411000000000000F3FC0020481176
++:103D7000000000008100000000204411000000004D
++:103D8000000000020020481100000000000000FFB9
++:103D900000280E300000000000000000002F022369
++:103DA00000000000000000000CC000000000052121
++:103DB00000000000C020080000000000000000001B
++:103DC00014C00000000005360000000000200C11A7
++:103DD000000000000000001C00203623000000004E
++:103DE0000000002B00203623000000000000002906
++:103DF00000203623000000000000002800203623A9
++:103E00000000000000000017002036230000000022
++:103E100000000025002036230000000000000026DE
++:103E2000002036230000000000000015002036238B
++:103E300000000000000000160020362300000000F3
++:103E4000FFFFE00000200C11000000000000002136
++:103E5000002036230000000000000022002036234E
++:103E60000000000000001FFF00200C1100000000F7
++:103E70000000002300203623000000000000002482
++:103E80000020362300000000F1FFFFFF00283A2E3B
++:103E9000000000000000001AC0220E2000000000F8
++:103EA000000000000029386E0000000081000000C2
++:103EB000002044110000000000000006002048110E
++:103EC000000000000000002A402036200000000012
++:103ED00087000000002044110000000000000000E6
++:103EE000C0204800000000000000A1F400204411A0
++:103EF000000000000000000000204810000000004A
++:103F00009D00000000204411000000000000001F80
++:103F100040214A20000000009600000000204411CB
++:103F20000000000000000000C02048000000000069
++:103F300000000000C0200C00000000000000000095
++:103F4000C0201000000000000000001F0021162407
++:103F5000000000000000000014C00000000000008D
++:103F60000000001D002036230000000000000003B8
++:103F700000281E2300000000000000080022222369
++:103F800000000000FFFFF0000028222800000000D1
++:103F900000000000002920E8000000000000001FD1
++:103FA00000203628000000000000001800211E2319
++:103FB0000000000000000020002036270000000064
++:103FC0000000000200221624000000000000000093
++:103FD000003014A8000000000000001E002036255C
++:103FE000000000000000000300211A24000000006F
++:103FF0001000000000281A2600000000EFFFFFFF5D
++:1040000000283A2E0000000000000000004938CED1
++:10401000000006100000000140280A2000000000F7
++:104020000000000640280E200000000000000300F1
++:10403000C028122000000000000000080021122407
++:104040000000000000000000C0201620000000005A
++:1040500000000000C0201A20000000000000000046
++:1040600000210222000000000000000014C0000037
++:104070000000056C810000000020441100000000D9
++:10408000000000010020481100000000000022583C
++:1040900000300A24000000000004000000694622ED
++:1040A00000000622000021690020441100000000E9
++:1040B0000000000000204805000000000002000091
++:1040C00000294A26000000000000000000204810DF
++:1040D00000000000CAFEBABE002048110000000027
++:1040E00000000002002F022300000000000000007A
++:1040F0000CC000000000057400000000C0201C106F
++:104100000000000000000000C04000000000058228
++:1041100000000002002F0223000000000000000049
++:104120000CC0000000000574810000000020441154
++:104130000000000000000001002048110000000005
++:104140000000225800300A24000000000004000093
++:10415000006946220000062200000000C0201C105A
++:104160000000000000000000C040000000000582C8
++:1041700000000000002F02230000000000000000EB
++:104180000CC000000000057800000000C0201C00EA
++:104190000000000000000000C04000000000058298
++:1041A00000000004002F02230000000000000000B7
++:1041B0000CC00000000005808100000000204411B8
++:1041C0000000000000000000002048110000000076
++:1041D0000000216D002044110000000000000000DC
++:1041E000C02048000000000000000000C06048003F
++:1041F000000006270000000000401C10000005829F
++:1042000000000000C02000000000000000000000CE
++:10421000C040000000000000000000000EE00000B0
++:10422000000005840000000000600000000005C3DD
++:1042300000000000002F0224000000000000000029
++:104240000CC00000000005920000A2B7002044113D
++:1042500000000000000000000020480700000000EF
++:10426000000000330020262D000000000000001A8E
++:10427000002122290000000000000006002226295B
++:10428000000000000000A2C4002044110000000053
++:1042900000000000003048E90000000000000000BD
++:1042A00000E00000000005900000A2D100204411B1
++:1042B000000000000000000000404808000000006E
++:1042C0000000A2D100204411000000000000000105
++:1042D00000504A280000000000000001002F0224C6
++:1042E00000000000000000000CC00000000005A05D
++:1042F0000000A2BB002044110000000000000000EC
++:104300000020480700000000000000340020262D97
++:10431000000000000000001A002122290000000017
++:104320000000000600222629000000000000A2C5AF
++:10433000002044110000000000000000003048E9A7
++:10434000000000000000000000E000000000059EEA
++:104350000000A2D200204411000000000000000074
++:1043600000404808000000000000A2D200204411D4
++:10437000000000000000000100504A28000000007A
++:1043800000000002002F02240000000000000000D6
++:104390000CC00000000005AE0000A2BF00204411C8
++:1043A000000000000000000000204807000000009E
++:1043B000000000350020262D000000000000001A3B
++:1043C000002122290000000000000006002226290A
++:1043D000000000000000A2C6002044110000000000
++:1043E00000000000003048E900000000000000006C
++:1043F00000E00000000005AC0000A2D30020441142
++:10440000000000000000000000404808000000001C
++:104410000000A2D3002044110000000000000001B1
++:1044200000504A28000000000000A2C300204411F0
++:10443000000000000000000000204807000000000D
++:10444000000000360020262D000000000000001AA9
++:104450000021222900000000000000060022262979
++:10446000000000000000A2C700204411000000006E
++:1044700000000000003048E90000000000000000DB
++:1044800000E00000000005B80000A2D400204411A4
++:10449000000000000000000000404808000000008C
++:1044A0000000A2D400204411000000000000000120
++:1044B00000504A2800000000850000000020441140
++:1044C0000000000000000000002048010000000083
++:1044D0000000304A002044110000000001000000EC
++:1044E0000020481100000000000000000040000013
++:1044F000000005BEA4000000C02044110000000020
++:1045000000000000C0404800000000000000000063
++:10451000C0600000000005C300000000C0400400AF
++:10452000000000010001A2A40020441100000000CE
++:104530000000003F00204811000000000000003F84
++:1045400000204811000000000000003F002048113A
++:10455000000000000000003F0020481100000000A3
++:104560000000000500204811000000000000A1F438
++:10457000002044110000000000000000002048114D
++:10458000000000008800000000204411000000002E
++:10459000000000010020481100000000FF000000A2
++:1045A000002044110000000000000000002048111D
++:1045B0000000000000000001002048110000000081
++:1045C0000000000200804811000000000000000010
++:1045D0000EE00000000005D60000100000200811C9
++:1045E000000000000000002B002036220000000028
++:1045F0000000000000600000000005DA000000007C
++:1046000000600000000005C3980000000020441175
++:1046100000000000000000000080481100000000C1
++:1046200000000000C0600000000005DA000000008B
++:10463000C0400400000000010000A2A400204411BA
++:1046400000000000000000220020481100000000CF
++:10465000890000000020441100000000000000015B
++:1046600000404811000005CD9700000000204411D3
++:1046700000000000000000000020481100000000C1
++:104680008A0000000020441100000000000000002B
++:1046900000404811000005CD00000000006000004F
++:1046A000000005F30001A2A4C02044110000000096
++:1046B0000000001600604811000003740000201084
++:1046C00000204411000000000001000000204811FB
++:1046D00000000000810000000020441100000000E4
++:1046E0000000000100204811000000000000217CB3
++:1046F0000020441100000000098000000020481143
++:1047000000000000FFFFFFFF002048110000000034
++:104710000000000000204811000000000000000020
++:1047200017000000000000000004217F0060441119
++:10473000000006220000001F0021023000000000DF
++:104740000000000014C00000000000000000000491
++:1047500000404C11000005ED00000000004000008A
++:10476000000000000000001700201E2D00000000C7
++:104770000000000400291E270000000000000017B0
++:1047800000803627000000000000001700201E2DCA
++:1047900000000000FFFFFFFB00281E2700000000B4
++:1047A00000000017008036270000000000000017FE
++:1047B00000201E2D000000000000000800291E2718
++:1047C00000000000000000170080362700000000F5
++:1047D0000000001700201E2D00000000FFFFFFF763
++:1047E00000281E2700000000000000170080362768
++:1047F000000000000001A2A40020441100000000FD
++:104800000000001600604811000003740000201032
++:1048100000204411000000000001000000204811A9
++:10482000000000000000217C002044110000000076
++:10483000018000000020481100000000FFFFFFFF82
++:104840000020481100000000000000000020481176
++:104850000000000000000000170000000000000041
++:104860008100000000204411000000000000000151
++:1048700000204811000000000004217F0060441166
++:10488000000006220000001F00210230000000008E
++:104890000000000014C0000000000621000000100D
++:1048A00000404C110000060700000000C02004007A
++:1048B000000000000000000038C000000000000000
++:1048C0000000001D00200A2D000000000000001E56
++:1048D00000200E2D000000000000001F0020122DFF
++:1048E00000000000000000200020162D0000000045
++:1048F00000002169002044110000000000000000B9
++:1049000000204804000000000000000000204805CE
++:10491000000000000000000000204801000000002E
++:10492000CAFEBABE002048110000000000000004CA
++:10493000003012240000000000000000002F00647E
++:1049400000000000000000000CC000000000062075
++:104950000000000300281A220000000000000008E8
++:104960000022122200000000FFFFF00000281224A5
++:104970000000000000000000002910C4000000003A
++:104980000000001F0040362400000000000000006E
++:104990000080000000000000000000001AC00000BD
++:1049A000000006229F0000000020441100000000CB
++:1049B000CAFEBABE0020481100000000000000003E
++:1049C0001AE0000000000625000000000080000042
++:1049D00000000000000000001AC0000000000627D0
++:1049E0009E0000000020441100000000CAFEBABE74
++:1049F0000020481100000000000000001AE0000044
++:104A00000000062A000000000080000000000000F6
++:104A100000000000006000000000000B000010001B
++:104A200000600411000003150000000000200411C4
++:104A3000000000000000000000600811000001B24A
++:104A40000000225C00204411000000000000000370
++:104A500000204811000000000000225600204411F0
++:104A6000000000000000001B0020481100000000B2
++:104A70000000A1FC00204411000000000000000123
++:104A800000204811000000000001A1FDC0204411D9
++:104A9000000000000000002100201E2D000000008A
++:104AA0000000001000221E2700000000000000246B
++:104AB0000020222D000000000000FFFF0028222817
++:104AC000000000000000000000294907000000006D
++:104AD000000000000020481100000000000000223B
++:104AE0000020222D000000000000FFFF00282228E7
++:104AF000000000000000000000294907000000003D
++:104B00000000000000204811000000000000002309
++:104B100000201E2D000000000000001000221E27B3
++:104B2000000000000000000000294907000000000C
++:104B300000000000004048110000000000000000DC
++:104B40000000000000000000000000000000000065
++:104B50000000000000000000000000000000000055
++:104B60000000000000000000000000000000000045
++:104B70000000000000000000000000000000000035
++:104B80000000000000000000000000000000000025
++:104B90000000000000000000000000000000000015
++:104BA0000000000000000000000000000000000005
++:104BB00000000000000000000000000000000000F5
++:104BC00000000000000000000000000000000000E5
++:104BD00000000000000000000000000000000000D5
++:104BE00000000000000000000000000000000000C5
++:104BF00000000000000000000000000000000000B5
++:104C000000000000000000000000000000000000A4
++:104C10000000000000000000000000000000000094
++:104C20000000000000000000000000000000000084
++:104C30000000000000000000000000000000000074
++:104C40000000000000000000000000000000000064
++:104C50000000000000000000000000000000000054
++:104C60000000000000000000000000000000000044
++:104C70000000000000000000000000000000000034
++:104C80000000000000000000000000000000000024
++:104C90000000000000000000000000000000000014
++:104CA0000000000000000000000000000000000004
++:104CB00000000000000000000000000000000000F4
++:104CC00000000000000000000000000000000000E4
++:104CD00000000000000000000000000000000000D4
++:104CE00000000000000000000000000000000000C4
++:104CF00000000000000000000000000000000000B4
++:104D000000000000000000000000000000000000A3
++:104D10000000000000000000000000000000000093
++:104D20000000000000000000000000000000000083
++:104D30000000000000000000000000000000000073
++:104D40000000000000000000000000000000000063
++:104D50000000000000000000000000000000000053
++:104D60000000000000000000000000000000000043
++:104D70000000000000000000000000000000000033
++:104D80000000000000000000000000000000000023
++:104D90000000000000000000000000000000000013
++:104DA0000000000000000000000000000000000003
++:104DB00000000000000000000000000000000000F3
++:104DC00000000000000000000000000000000000E3
++:104DD00000000000000000000000000000000000D3
++:104DE00000000000000000000000000000000000C3
++:104DF00000000000000000000000000000000000B3
++:104E000000000000000000000000000000000000A2
++:104E10000000000000000000000000000000000092
++:104E20000000000000000000000000000000000082
++:104E30000000000000000000000000000000000072
++:104E40000000000000000000000000000000000062
++:104E50000000000000000000000000000000000052
++:104E60000000000000000000000000000000000042
++:104E70000000000000000000000000000000000032
++:104E80000000000000000000000000000000000022
++:104E90000000000000000000000000000000000012
++:104EA0000000000000000000000000000000000002
++:104EB00000000000000000000000000000000000F2
++:104EC00000000000000000000000000000000000E2
++:104ED00000000000000000000000000000000000D2
++:104EE00000000000000000000000000000000000C2
++:104EF00000000000000000000000000000000000B2
++:104F000000000000000000000000000000000000A1
++:104F10000000000000000000000000000000000091
++:104F20000000000000000000000000000000000081
++:104F30000000000000000000000000000000000071
++:104F40000000000000000000000000000000000061
++:104F50000000000000000000000000000000000051
++:104F60000000000000000000000000000000000041
++:104F70000000000000000000000000000000000031
++:104F80000000000000000000000000000000000021
++:104F90000000000000000000000000000000000011
++:104FA0000000000000000000000000000000000001
++:104FB00000000000000000000000000000000000F1
++:104FC00000000000000000000000000000000000E1
++:104FD00000000000000000000000000000000000D1
++:104FE00000000000000000000000000000000000C1
++:104FF00000000000000000000000000000000000B1
++:1050000000000000000000000000000000000000A0
++:105010000000000000000000000000000000000090
++:105020000000000000000000000000000000000080
++:105030000000000000000000000000000000000070
++:105040000000000000000000000000000000000060
++:105050000000000000000000000000000000000050
++:105060000000000000000000000000000000000040
++:105070000000000000000000000000000000000030
++:105080000000000000000000000000000000000020
++:105090000000000000000000000000000000000010
++:1050A0000000000000000000000000000000000000
++:1050B00000000000000000000000000000000000F0
++:1050C00000000000000000000000000000000000E0
++:1050D00000000000000000000000000000000000D0
++:1050E00000000000000000000000000000000000C0
++:1050F00000000000000000000000000000000000B0
++:10510000000000000000000000000000000000009F
++:10511000000000000000000000000000000000008F
++:10512000000000000000000000000000000000007F
++:10513000000000000000000000000000000000006F
++:10514000000000000000000000000000000000005F
++:10515000000000000000000000000000000000004F
++:10516000000000000000000000000000000000003F
++:10517000000000000000000000000000000000002F
++:10518000000000000000000000000000000000001F
++:10519000000000000000000000000000000000000F
++:1051A00000000000000000000000000000000000FF
++:1051B00000000000000000000000000000000000EF
++:1051C00000000000000000000000000000000000DF
++:1051D00000000000000000000000000000000000CF
++:1051E00000000000000000000000000000000000BF
++:1051F00000000000000000000000000000000000AF
++:10520000000000000000000000000000000000009E
++:10521000000000000000000000000000000000008E
++:10522000000000000000000000000000000000007E
++:10523000000000000000000000000000000000006E
++:10524000000000000000000000000000000000005E
++:10525000000000000000000000000000000000004E
++:10526000000000000000000000000000000000003E
++:10527000000000000000000000000000000000002E
++:10528000000000000000000000000000000000001E
++:10529000000000000000000000000000000000000E
++:1052A00000000000000000000000000000000000FE
++:1052B0000142050A05BA02500000000001C301685E
++:1052C000044105BA00000000022502090250015104
++:1052D000000000000223024502A00241000000007D
++:1052E00003D705BA05BA05BA0000000005E205E3D8
++:1052F000031F05BA00000000032005BF0320034A76
++:105300000000000003340282034C033E0000000052
++:1053100005BA05BA05BA05BA0000000005BA055776
++:1053200005BA032A0000000003BC05BA04C3034EFB
++:105330000000000004A20455043F05BA000000006C
++:1053400004D805BA044304E5000000000455050F25
++:10535000035B037B0000000005BA05BA05BA05BA75
++:105360000000000005BA05BA05BA05BA0000000041
++:1053700005BA05BA05D805C10000000005BA05BA8E
++:10538000000705BA0000000005BA05BA05BA05BA5B
++:105390000000000005BA05BA05BA05BA0000000011
++:1053A00003F803ED0408040600000000040E040ADC
++:1053B000040C041000000000041C04180424042041
++:1053C00000000000042C0428043404300000000015
++:1053D00005BA05BA043A04380000000005BA05BA57
++:1053E00005BA05BA0000000005BA05BA05BA05BA43
++:1053F000000000000002060E062C0006000000005F
++:00000001FF
+diff --git a/firmware/radeon/RS780_pfp.bin.ihex b/firmware/radeon/RS780_pfp.bin.ihex
+new file mode 100644
+index 0000000..4088041
+--- /dev/null
++++ b/firmware/radeon/RS780_pfp.bin.ihex
+@@ -0,0 +1,145 @@
++:1000000000CA040000A00000007E828B007C038BED
++:10001000008001DB007C038B00D4401E00EE001E3C
++:1000200000CA040000A00000007E828B00C41838C3
++:1000300000CA240000CA2800009581CB00C41C3AE5
++:1000400000C3C00000CA080000CA0C00007C744B4A
++:1000500000C200050099C00000C41C3A007C744C2A
++:1000600000C0FFE000042C0800309002007D250055
++:1000700000351402007D350B00255407007CD58027
++:1000800000259C070095C00400D5001B007EDDC143
++:10009000007D9D8000D6801B00D5801B00D4401EB3
++:1000A00000D5401E00D6401E00D6801E00D4801E03
++:1000B00000D4C01E009783D300D5C01E00CA08001C
++:1000C0000080001A00CA0C0000E4011E00D4001ECB
++:1000D0000080000C00C4183800E4013E00D4001E6B
++:1000E0000080000C00C4183800D4401E00EE001E32
++:1000F00000CA040000A00000007E828B00E4011E04
++:1001000000D4001E00D4401E00EE001E00CA0400F1
++:1001100000A00000007E828B00E4013E00D4001E9F
++:1001200000D4401E00EE001E00CA040000A0000023
++:10013000007E828B00CA080000CA0C00008001DB30
++:1001400000D4802400CA0800007C00C000C8142528
++:1001500000C81824007C9488007C988000C20003AA
++:1001600000D40075007C744C0080006400D4401EF4
++:1001700000CA180000D4401E00D5801E0080006216
++:1001800000D4007500D4401E00CA080000CA0C004C
++:1001900000CA100000D4801900D4C01800D5001780
++:1001A00000D4801E00D4C01E00D5001E00E2001E38
++:1001B00000CA040000A00000007E828B00D40075FD
++:1001C00000D4401E00CA080000CA0C0000CA10007B
++:1001D00000D4801900D4C01800D5001700D4801EA8
++:1001E00000D4C01E00D5001E00EE001E00CA040090
++:1001F00000A00000007E828B00CA080000248C0151
++:1002000000D480600094C0030004100100041002B8
++:1002100000D5002500D4401E0080000000D4801EC0
++:1002200000CA080000D4806100D4401E0080000095
++:1002300000D4801E00CA080000CA0C0000D4401E72
++:1002400000D4801600D4C01600D4801E008001DBCC
++:1002500000D4C01E00C6084300CA0C0000CA10002B
++:100260000094800400CA140000E420F300D420139A
++:1002700000D5606500D4E01C00D5201C00D5601CB2
++:10028000008000000006200100C6084300CA0C00E0
++:1002900000CA1000009483F700CA140000E420F3A1
++:1002A0000080009C00D4201300C6084300CA0C0044
++:1002B00000CA1000009883EF00CA140000D4006444
++:1002C000008000B00000000000C4143200C61843D3
++:1002D00000C4082F0095400500C40C3000D4401E17
++:1002E0000080000000EE001E009583F500C4103170
++:1002F00000D4403300D5206500D4A01C00D4E01CFD
++:1003000000D5201C00E4015E00D4001E0080000027
++:100310000006200100CA1800000A200100D600765D
++:1003200000C408360098800700C6104500950110EB
++:1003300000D4001F00D460620080000000D420625E
++:1003400000CC383500CC1433008401DE00D40072B8
++:1003500000D5401E0080000000EE001E00E2001AE2
++:10036000008401DE00E2001A00CC104B00CC0447F0
++:10037000002C9401007D098B00984005007D15CB71
++:1003800000D4001A008001DB00D4006D0034440169
++:1003900000CC0C480098403A00CC2C4A00958004D0
++:1003A00000CC0449008001DB00D4001A00D4C01A3C
++:1003B000002828010084011300CC10030098801B42
++:1003C0000004380C0084011300CC1003009880173F
++:1003D000000438080084011300CC10030098801337
++:1003E000000438040084011300CC1003009880142A
++:1003F00000CC104C009A800900CC144D009840DCD1
++:1004000000D4006D00CC184800D5001A00D5401A61
++:10041000008000EC00D5801A0096C0D500D4006D95
++:10042000008001DB00D4006E009AC00300D4006D90
++:1004300000D4006E0080000000EC007F009AC0CC69
++:1004400000D4006D008001DB00D4006E00CC1403EA
++:1004500000CC180300CC1C03007D9103007DD583E4
++:10046000007D190C0035CC1F0035701F007CF0CBCF
++:10047000007CD08B00880000007E8E8B0095C0042D
++:1004800000D4006E008001DB00D4001A00D4C01A32
++:1004900000CC080300CC0C0300CC100300CC1403E8
++:1004A00000CC180300CC1C0300CC240300CC280390
++:1004B0000035C41F0036B01F007C704B0034F01FA5
++:1004C000007C704B0035701F007C704B007D888174
++:1004D000007DCCC1007E5101007E9541007C908260
++:1004E000007CD4C2007C848B009AC003007C8C8B7F
++:1004F000002C88010098809E00D4006D0098409CDC
++:1005000000D4006E00CC084C00CC0C4D00CC104840
++:1005100000D4801A00D4C01A0080012400D5001A2B
++:1005200000CC083200D40032009482B600CA0C001D
++:1005300000D4401E0080000000D4001E00E4011E14
++:1005400000D4001E00CA080000CA0C0000CA100037
++:1005500000D4401E00CA140000D4801E00D4C01E67
++:1005600000D5001E00D5401E00D54034008000009C
++:1005700000EE001E0028040400E2001A00E2001A47
++:1005800000D4401A00CA380000CC080300CC0C0389
++:1005900000CC0C0300CC0C030098829A00000000F1
++:1005A000008401DE00D7A06F0080000000EE001F75
++:1005B00000CA040000C2FF0000CC083400C13FFFA5
++:1005C000007C74CB007CC90B007D010F0099028D6B
++:1005D000007C738B008401DE00D7A06F00800000D8
++:1005E00000EE001F00CA080000281900007D898B5A
++:1005F000009580140028140400CA0C0000CA1000E2
++:1006000000CA1C0000CA240000E2001F00D4C01A67
++:1006100000D5001A00D5401A00CC180300CC2C03DA
++:1006200000CC2C0300CC2C03007DA58B007D9C47C7
++:1006300000984274000000000080018400D4C01AB9
++:1006400000D4401E00D4801E0080000000EE001E7A
++:1006500000E4011E00D4001E00D4401E00EE001E67
++:1006600000CA040000A00000007E828B00E4013E6E
++:1006700000D4001E00D4401E00EE001E00CA04007C
++:1006800000A00000007E828B00CA080000248C06B7
++:10069000000CCC060098C00600CC104E0099000457
++:1006A00000D4007300E4011E00D4001E00D4401EDC
++:1006B00000D4801E0080000000EE001E00CA08006A
++:1006C00000CA0C000034D01800251001009500214C
++:1006D00000C17FFF00CA100000CA140000CA180041
++:1006E00000D4801D00D4C01D007DB18B00C142022A
++:1006F00000C2C00100D5801D0034DC0E007D5D4CC1
++:10070000007F734C00D7401E00D5001E00D5401E50
++:1007100000C1420000C2C00000099C010031DC1091
++:10072000007F5F4C007F734C00042802007D8380B3
++:1007300000D5A86F00D5806600D7401E00EC005E93
++:1007400000C8240200C82402008001DB00D6007625
++:1007500000D4401E00D4801E00D4C01E00800000C3
++:1007600000EE001E0080000000EE001F00D4001FFD
++:100770000080000000D4001F00D4001F008800008B
++:1007800000D4001F00000000000000000000000076
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:10080000000101940002019B000300B2000400A259
++:10081000000500030006003F000700320008014FFA
++:1008200000090046000A0036001001D9001700C573
++:100830000022015D0023016C002000D70024014844
++:100840000026004D0027005C0028008D0029005183
++:10085000002A007E002B0061002F0088003200AAD1
++:10086000003401A20036006F003C0179003F009582
++:10087000004101AF00440151005501960056019D11
++:100880000060000B00610034006200380063003833
++:1008900000640038006500380066003800670038E2
++:1008A0000068003A00690041006A0048006B004897
++:1008B000006C0048006D0048006E0048006F004862
++:1008C000007301D9000000060000000600000006C9
++:1008D0000000000600000006000000060000000600
++:1008E00000000006000000060000000600000006F0
++:1008F00000000006000000060000000600000006E0
++:00000001FF
+diff --git a/firmware/radeon/RV610_me.bin.ihex b/firmware/radeon/RV610_me.bin.ihex
+new file mode 100644
+index 0000000..ba19ed8
+--- /dev/null
++++ b/firmware/radeon/RV610_me.bin.ihex
+@@ -0,0 +1,1345 @@
++:1000000000000000C020040000000000000000000C
++:1000100000A0000A000000000000FFFF00284621A9
++:100020000000000000000000D900480000000000AF
++:1000300000000000C02004000000000000000000DC
++:1000400000A0000A000000000000000000E0000026
++:100050000000000000010000C02946200000000050
++:1000600000000000D900480000000000000000006F
++:10007000C0200400000000000000000000A0000AF2
++:10008000000000008100000000204411000000007A
++:1000900000000001002048110000000000042004BE
++:1000A000006044110000068D0000000000600000A8
++:1000B000000006310000000000600000000006455E
++:1000C00000000000C02008000000000000000F0039
++:1000D000002816220000000000000008002116255C
++:1000E000000000000000001800203625000000007D
++:1000F0008D000000002044110000000000000004FA
++:10010000002F022500000000000000000CE00000AD
++:1001100000000018004120000040481100000019B4
++:100120000042200000204811000000008E00000066
++:1001300000204411000000000000002800204A2D8B
++:1001400000000000900000000020441100000000AA
++:100150000000000000204805000000000000000C26
++:1001600000211622000000000000000300281625D0
++:10017000000000000000001900211A220000000009
++:100180000000000400281A26000000000000000003
++:10019000002914C5000000000000001900203625C9
++:1001A0000000000000000000003A140200000000FF
++:1001B00000000016002116250000000000000003CA
++:1001C00000281625000000000000001700200E2D5A
++:1001D00000000000FFFFFFFC00280E2300000000CD
++:1001E00000000000002914A3000000000000001718
++:1001F00000203625000000000000800000280E22AC
++:10020000000000000000000700220E230000000094
++:10021000000000000029386E0000000020000000EF
++:1002200000280E22000000000000000600210E231E
++:1002300000000000000000000029386E00000000EF
++:100240000000000000220222000000000000000068
++:1002500014E0000000000038000000002EE0000064
++:1002600000000035000000002CE000000000003716
++:100270000000000000400E2D0000003900000008C2
++:1002800000200E2D00000000000000090040122D8B
++:10029000000000460000000100400E2D0000003963
++:1002A00000000000C0200C0000000000003FFFFC28
++:1002B0000028122300000000000000020022122487
++:1002C000000000000000001F00211E2300000000AD
++:1002D0000000000014E000000000003E00000008E4
++:1002E00000401C11000000410000000D00201E2DE8
++:1002F000000000000000000F00281E270000000082
++:100300000000000300221E27000000007FC0000044
++:1003100000281A23000000000000001400211A2603
++:10032000000000000000000100331A260000000059
++:100330000000000800221A26000000000000000053
++:1003400000290CC700000000000000270020362410
++:100350000000000000007F000028122100000000C3
++:1003600000001400002F0224000000000000000024
++:100370000CE000000000004B0000000100290E23EB
++:10038000000000000000000E0020362300000000E6
++:100390000000E0000020441100000000FFF8000011
++:1003A00000294A230000000000000000003A2C024F
++:1003B000000000000000000200220E2B00000000E0
++:1003C000FC00000000280E23000000000000000FC9
++:1003D000002036230000000000001FFF00294A23F0
++:1003E000000000000000002700204A2D000000004F
++:1003F000000000000020481100000000000000295B
++:1004000000200E2D00000000060A020000294A23E9
++:100410000000000000000000002048110000000063
++:100420000000000000204811000000000000000152
++:1004300000210222000000000000000014E0000083
++:1004400000000061000000002EE000000000005FDE
++:10045000000000002CE000000000005E0000000032
++:1004600000400E2D000000620000000100400E2D33
++:10047000000000620000000A00200E2D00000000B5
++:100480000000000B0040122D0000006A0000000078
++:10049000C0200C0000000000003FFFFC00281223D9
++:1004A00000000000000000020022122400000000F2
++:1004B0007FC0000000281623000000000000001488
++:1004C0000021162500000000000000010033162561
++:1004D000000000008000000000280E230000000043
++:1004E0000000000000290CA3000000003FFFFC00FA
++:1004F00000290E23000000000000001F00211E2321
++:10050000000000000000000014E000000000006D8A
++:100510000000010000401C11000000700000000DF0
++:1005200000201E2D00000000000000F000281E2703
++:10053000000000000000000400221E270000000050
++:100540008100000000204411000000000000000DA8
++:100550000020481100000000FFFFF0FF00281A30C3
++:10056000000000000000A02800204411000000004E
++:1005700000000000002948E6000000000000A0186C
++:1005800000204411000000003FFFFFFF00284A2325
++:10059000000000000000A010002044110000000036
++:1005A00000000000002048040000000000000030AF
++:1005B0000020162D00000000000000020029162572
++:1005C0000000000000000030002036250000000080
++:1005D000000000250020162D000000000000000093
++:1005E000002F00A300000000000000000CC000006D
++:1005F00000000083000000260020162D00000000EF
++:1006000000000000002F00A4000000000000000017
++:100610000CC000000000008400000000004000004A
++:100620000000008A000000250020362300000000A2
++:100630000000002600203624000000000000001703
++:1006400000201E2D000000000000000200210227F3
++:10065000000000000000000014E000000000008A1C
++:1006600000000000006000000000066800000000BC
++:10067000006000000000065C0000000200210E2265
++:10068000000000000000000014C000000000008D09
++:1006900000000012C040362000000093000000005F
++:1006A0002EE0000000000091000000002CE000009F
++:1006B000000000900000000200400E2D000000929B
++:1006C0000000000300400E2D000000920000000C0E
++:1006D00000200E2D00000000000000120020362334
++:1006E000000000000000000300210E2200000000B6
++:1006F0000000000014C00000000000980000A00CE2
++:10070000002044110000000000000000C02048004C
++:100710000000000000000000C0404800000000A0F1
++:100720000000A00C002044110000000000000000A8
++:100730000020481100000000000000002EE0000032
++:100740000000009E000000002CE000000000009D62
++:100750000000000200400E2D0000009F000000037A
++:1007600000400E2D0000009F0000000C00200E2D08
++:10077000000000000000000000204803000000000E
++:1007800000000000003A0C0200000000003F0000E2
++:1007900000280E23000000000000001000210E239E
++:1007A00000000000000000110020362300000000BF
++:1007B0000000001E0021022B0000000000000000CD
++:1007C00014C00000000000A700000016C020362062
++:1007D000000000000000001F0021022B00000000AC
++:1007E0000000000014C00000000000AA0000001576
++:1007F000C0203620000000000000000800210E2B61
++:10080000000000000000007F00280E230000000010
++:1008100000000000002F0223000000000000000084
++:100820000CE00000000000E10000000027000000D4
++:10083000000000000000000000600000000002A3B3
++:1008400000000001002F0223000000000000000053
++:100850000AE00000000000B300000000006000009B
++:100860000000013A81000000002044110000000057
++:100870000000000600204811000000000000000CED
++:1008800000221E300000000099800000002044116A
++:1008900000000000000000040020122D00000000F5
++:1008A00000000008002212240000000000000010D8
++:1008B00000201811000000000000000000291CE4C6
++:1008C0000000000000000000006048070000012F49
++:1008D0009B00000000204411000000000000000008
++:1008E00000204802000000009C000000002044118D
++:1008F00000000000000000000033146F0000000042
++:100900000000000100333E23000000000000000052
++:10091000D9004800000000000000000000203C0555
++:1009200000000000810000000020441100000000D1
++:100930000000000E00204811000000000000000030
++:1009400000201010000000000000E007002044110B
++:10095000000000000000000F0021022B000000003A
++:100960000000000014C00000000000CB00F8FF08E9
++:1009700000204811000000009800000000404811CD
++:10098000000000DC000000F000280E220000000043
++:10099000000000A0002F0223000000000000000063
++:1009A0000CC00000000000DA0000001100200E2D35
++:1009B0000000000000000001002F022300000000E2
++:1009C000000000000CE00000000000D50000000264
++:1009D000002F022300000000000000000CE00000D7
++:1009E000000000D400003F0000400C11000000D6C1
++:1009F00000001F0000400C11000000D600000F0096
++:100A000000200C11000000000038000900294A23D2
++:100A1000000000003F00000000280E2B0000000036
++:100A20000000000200220E2300000000000000076A
++:100A300000494A23000000DC00380F09002048115B
++:100A400000000000680000070020481100000000BE
++:100A50000000000800214A270000000000000000FC
++:100A60000020481100000000060A020000294A2464
++:100A700000000000000000000020481100000000FD
++:100A80000000000000204811000000000000A20249
++:100A9000002044110000000000FF000000280E228A
++:100AA000000000000000008000294A230000000030
++:100AB0000000002700200E2D00000000000000268E
++:100AC0000020122D0000000000000000002F008315
++:100AD00000000000000000000CE00000000000EA40
++:100AE000000000000060000000000662000000003E
++:100AF00000400000000000EB00000000006000006B
++:100B000000000665000000070020222D0000000004
++:100B10000000000500220E2200000000001000006E
++:100B200000280E23000000000000000000292068BB
++:100B30000000000000000000003A0C02000000006D
++:100B4000000000EF00280E2300000000000000005D
++:100B500000292068000000000000001700200E2D72
++:100B6000000000000000000300210223000000003C
++:100B70000000000014E00000000000F80000000B7E
++:100B800000210228000000000000000014C0000046
++:100B9000000000F8000004000029222800000000E6
++:100BA0000000001400203628000000000000001C97
++:100BB00000210E22000000000000000014C0000010
++:100BC000000000FD0000A30C002044110000000004
++:100BD0000000000000204811000000000000001E7E
++:100BE00000210E22000000000000000014C00000E0
++:100BF0000000010B0000A30F0020441100000000C2
++:100C00000000001100200E2D000000000000000177
++:100C1000002F022300000000000000000CC00000B4
++:100C200000000104FFFFFFFF004048110000010B1E
++:100C300000000002002F022300000000000000005E
++:100C40000CC00000000001070000FFFF0040481139
++:100C50000000010B00000004002F02230000000030
++:100C6000000000000CC000000000010A000000FFAE
++:100C7000004048110000010B000000010020481155
++:100C8000000000000002C400002044110000000029
++:100C90000000001F00210E220000000000000000E4
++:100CA00014C00000000001120000001040210E20BE
++:100CB00000000000000000130020362300000000A8
++:100CC0000000001840224A20000000000000001030
++:100CD000C0424A20000001140000000000200C1156
++:100CE0000000000000000013002036230000000078
++:100CF000000000000020481100000000000000007B
++:100D000000204811000000000000000A002010111F
++:100D10000000000000000000002F0224000000007E
++:100D2000000000000CE000000000011B00000000BB
++:100D300000204811000000000000000100531224B0
++:100D400000000117FFBFFFFF00283A2E000000003F
++:100D50000000001B00210222000000000000000033
++:100D600014C000000000012E81000000002044118A
++:100D7000000000000000000D0020481100000000ED
++:100D80000000001800220E3000000000FC000000EF
++:100D900000280E2300000000810000000020441104
++:100DA000000000000000000E0020481100000000BC
++:100DB0000000000000201010000000000000E00E05
++:100DC000002044110000000007F8FF08002048112F
++:100DD000000000000000000000294A23000000007D
++:100DE0000000001C00201E2D000000000000000874
++:100DF00000214A27000000000000000000204811E8
++:100E000000000000060A020000294A240000000039
++:100E10000000000000204811000000000000000059
++:100E200000204811000000000000000000800000C9
++:100E300000000000810000000020441100000000BC
++:100E40000000000100204811000000000000217C8B
++:100E50000020441100000000008000000020481124
++:100E60000000000000000000002048060000000014
++:100E70000000000800214A270000000000000000D8
++:100E800017000000000000000004217F00604411F2
++:100E90000000068D0000001F00210230000000004D
++:100EA0000000000014C000000000068C00000004D8
++:100EB00000404C1100000135810000000020441169
++:100EC00000000000000000010020481100000000A8
++:100ED000000021F800204411000000000000001C68
++:100EE0000020481100000000000421F900604411B6
++:100EF0000000068D000000110021023000000000FB
++:100F00000000000014E000000000013C00000000B0
++:100F100000800000000000000000000000600000F1
++:100F20000000000B00000000006004110000031529
++:100F3000000000000020041100000000000000007C
++:100F400000600811000001B2000000000060000015
++:100F5000000001600000FFFF40280E20000000009C
++:100F600000000010C0211220000000000000FFFF60
++:100F7000402806200000000000000010C0210A20C8
++:100F800000000000000000000034146100000000B8
++:100F90000000000000741882000002BB0001A1FDE7
++:100FA00000604411000002E000003FFF002F022F0C
++:100FB00000000000000000000CC00000000001471D
++:100FC00000000000C040040000000001000000001C
++:100FD000006000000000000B000000000060041131
++:100FE00000000315000000000020041100000000B4
++:100FF0000000000000600811000001B200003FFF87
++:10100000002F022F00000000000000000CE0000094
++:10101000000000000000000000600000000001600F
++:101020000000001040210E20000000000000FFFF23
++:10103000C0281220000000000000001040211620EF
++:10104000000000000000FFFFC0681A20000002BB83
++:101050000001A1FD00604411000002E000003FFF1C
++:10106000002F022F00000000000000000CC0000054
++:101070000000015800000000C04004000000000112
++:101080000000225C0020441100000000000000016C
++:1010900000300A2F000000000000000100210A2299
++:1010A000000000000000000300384A220000000099
++:1010B0000000225600204411000000000000001A29
++:1010C00000204811000000000000A1FC0020441195
++:1010D0000000000000000001008048110000000036
++:1010E00000000000006000000000000B0000000095
++:1010F000006000000000018F0000000000600000A0
++:10110000000001A000003FFF002F022F00000000A0
++:10111000000000000CE000000000000000000000E3
++:1011200000202C0800000000000000000020241116
++:101130000000000000000000002028110000000056
++:10114000000022560020441100000000000000169C
++:1011500000204811000000000000225C0020441123
++:101160000000000000000003002048110000000003
++:1011700093800000002044110000000000000002E5
++:1011800000221E290000000000000000007048EB53
++:101190000000019C0000000000600000000002BB95
++:1011A00000000001403306200000000000000000A5
++:1011B000C03024090000000000003FFF002F022F74
++:1011C00000000000000000000CE000000000000033
++:1011D0000000000000600000000002A3000000000A
++:1011E000002F022100000000000000000AE00000C3
++:1011F0000000018100000000006000000000013AD2
++:101200000000000000400000000001869500000082
++:10121000002044110000000000000000002F022107
++:1012200000000000000000000CE00000000001864B
++:1012300000000000C0204800000000000000000185
++:10124000005306210000018292000000002044119A
++:101250000000000000000000C0604800000001978E
++:101260000001A1FD00204411000000000000001159
++:101270000020062D00000000000000000078042A75
++:10128000000002FB00000000002028090000000010
++:1012900000003FFF002F022F0000000000000000B0
++:1012A0000CC000000000017400000000C0400400F9
++:1012B000000000010000021000600411000003158E
++:1012C00000003FFF002F022F000000000000000080
++:1012D0000CE000000000019400000015C020362042
++:1012E0000000000000000016C020362000000000B2
++:1012F0003F800000002004110000000046000000B4
++:1013000000600811000001B2000000000080000031
++:10131000000000000000A1FC0020441100000000BB
++:1013200000003FFF002F022F00000000000000001F
++:101330000CC000000000019B00000001008048116B
++:1013400000000000000000210080481100000000A3
++:101350000000FFFF40280E200000000000000010E9
++:10136000C0211220000000000000FFFF40281620CE
++:101370000000000000000010C0811A2000000000E2
++:101380008100000000204411000000000000000661
++:1013900000204811000000000000000800221E305C
++:1013A000000000000000002900201A2D00000000AD
++:1013B0000000E0000020441100000000FFFBFF09D6
++:1013C00000204811000000000000000F0020222D26
++:1013D0000000000000001FFF00294A280000000054
++:1013E000000000060020222D000000000000000088
++:1013F000002920E80000000000000000002048084C
++:101400000000000000000000002048110000000063
++:10141000060A020000294A26000000000000000021
++:1014200000204811000000000000000000204811CA
++:101430000000000000000100002018110000000062
++:101440000000000800621E280000012F00000008B4
++:1014500000822228000000000002C0000020441189
++:10146000000000000000001500600E2D000001BD0E
++:101470000000001600600E2D000001BD0000C00835
++:1014800000204411000000000000001700200E2D75
++:10149000000000000000000014C00000000001B9BE
++:1014A0000000000000200411000000000000000007
++:1014B0000020480100000000390000000020481111
++:1014C00000000000000000000020481100000000A3
++:1014D000000000000080480200000000000000182A
++:1014E00000202E2D0000000000000000003B0D63D6
++:1014F000000000000000000800224A230000000055
++:101500000000001000224A23000000000000001824
++:1015100000224A2300000000000000000080480371
++:101520000000000000000000006000000000000B50
++:10153000000010000060041100000315000000000E
++:1015400000200411000000000000000000600811ED
++:10155000000001B2000000070021062F000000007B
++:101560000000001300200A2D000000000000000110
++:1015700000202C11000000000000FFFF4028222066
++:10158000000000000000000F0026222800000000DC
++:101590000000001040212620000000000000000F85
++:1015A000002626290000000000000000002028027C
++:1015B000000000000000225600204411000000003E
++:1015C0000000001B00204811000000000000000087
++:1015D000002F022100000000000000000CE00000CD
++:1015E000000001E00000225C002044110000000027
++:1015F0000000008100204811000000000000A1FC54
++:1016000000204411000000000000000100204811EB
++:10161000000000000000008000201C1100000000FD
++:1016200000000000002F0227000000000000000062
++:101630000CE00000000001DC000000000060000081
++:10164000000001E90000000100531E27000001D83E
++:101650000000000100202C11000000000000001F0D
++:1016600000280A22000000000000001F00282A2A8B
++:10167000000000000000000100530621000001D11D
++:101680000000225C00204411000000000000000265
++:1016900000304A2F000000000000A1FC002044118F
++:1016A00000000000000000010020481100000000C0
++:1016B0000000000100301E2F0000000000000000AC
++:1016C000002F022700000000000000000CE00000D6
++:1016D000000000000000000000600000000001E9C0
++:1016E0000000000100531E27000001E50000FFFF7D
++:1016F00040280E20000000000000000F00260E23EE
++:101700000000000000000010C021122000000000B6
++:101710000000000F0026122400000000000000005E
++:1017200000201411000000000000000000601811EB
++:10173000000002BB0001A1FD0020441100000000D8
++:1017400000000000002F022B00000000000000003D
++:101750000CE00000000001F8000000100022162834
++:1017600000000000FFFF0000002816250000000018
++:101770000000FFFF00281A29000000000000000000
++:10178000002948C500000000000000000020480AB1
++:10179000000000000000000000202C1100000000EC
++:1017A000000000100022162300000000FFFF0000D0
++:1017B00000281625000000000000FFFF00281A2462
++:1017C0000000000000000000002948C500000000E3
++:1017D0000000000000731503000002050000000077
++:1017E0000020180500000000000000000073152410
++:1017F0000000020500000000002D14C500000000DC
++:1018000000000000003008A20000000000000000FE
++:101810000020480200000000000000000020280214
++:101820000000000000000000002020030000000075
++:101830000000000000802404000000000000000FF1
++:1018400000210225000000000000000014C000007C
++:101850000000068C00000000002B140500000000B2
++:1018600000000001009016250000000000000000AC
++:10187000006000000000000B000000000060041188
++:10188000000003150000000000200411000000000B
++:101890000000000000600811000001B200002256A4
++:1018A00000204411000000000000001A00294A2214
++:1018B0000000000000000000C02000000000000048
++:1018C00000003FFF002F022F00000000000000007A
++:1018D0000CE000000000000000000000C020040038
++:1018E000000000000000225C002044110000000005
++:1018F0000000000300384A21000000000000A1FCA5
++:1019000000204411000000000000000100204811E8
++:10191000000000000000FFFF40281220000000002F
++:1019200000000010C0211A20000000000000FFFF8E
++:1019300040280E200000000000000010C0211620EA
++:10194000000000000000000000741465000002BBED
++:101950000001A1FD00604411000002E00000000150
++:10196000003306210000000000000000002F0221CB
++:1019700000000000000000000CC000000000021980
++:1019800000003FFF002F022F0000000000000000B9
++:101990000CC000000000021200000000C040040063
++:1019A000000000010000000000600000000006458B
++:1019B000000000000040040F0000021300000000BF
++:1019C0000060000000000631000000000060000020
++:1019D000000006450000021000600411000003151D
++:1019E0000000000000600000000001A000000000F6
++:1019F000006000000000019C00000000006000008A
++:101A0000000002BB0000000000600000000002A314
++:101A1000938000000020441100000000000000003E
++:101A2000002048080000000000000000002F022FE6
++:101A300000000000000000000AE000000000023288
++:101A400000000000006000000000013A00000000FB
++:101A50000040000000000236950000000020441104
++:101A60000000000000000000002F022F0000000016
++:101A7000000000000CE00000000002360000000042
++:101A8000C0404800000002339200000000204411D2
++:101A90000000000000000000C0204800000000001E
++:101AA0000000225600204411000000000000001633
++:101AB00000204811000000000000225C00204411BA
++:101AC000000000000000000300204811000000009A
++:101AD0000000A1FC002044110000000000000001F3
++:101AE00000204811000000000001A1FD0020441169
++:101AF000000000000000000000600411000002FB74
++:101B000000000000C04004000000000100000000D0
++:101B100000600000000006310000A00C002044110D
++:101B20000000000000000000C0204800000000008D
++:101B300000000000C040480000000000000000005D
++:101B4000006000000000000B0000001840210A2087
++:101B50000000000000000003002F0222000000002F
++:101B6000000000000AE000000000024C0000001429
++:101B70000020222D00000000000801010029222879
++:101B800000000000000000140020362800000000C3
++:101B90000000A30C00204411000000000000000021
++:101BA000C02048000000000000000000C0204800E5
++:101BB0000000000000000000C0404800000002518A
++:101BC00000000000006000000000000B000000109A
++:101BD00000600411000003153F8000000020041184
++:101BE000000000000000000000600811000001B2C9
++:101BF0000000225C002044110000000000000003EF
++:101C000000204811000000000000000000600000FB
++:101C10000000027C0000001700201E2D00000000C4
++:101C20000000000100211E2700000000000000004D
++:101C300014E000000000026A0000001200201E2DC7
++:101C4000000000000000FFFF00281E270000000029
++:101C50000000000000341C2700000000000000000D
++:101C600012C000000000025F0000000000201C11F4
++:101C70000000000000000000002F00E50000000050
++:101C80000000000008C00000000002620000000028
++:101C900000201407000000000000001200201E2D8C
++:101CA000000000000000001000211E2700000000BE
++:101CB0000000000000341C4700000000000000008D
++:101CC00012C00000000002670000000000201C118C
++:101CD0000000000000000000002F00E600000000EF
++:101CE0000000000008C000000000026A00000000C0
++:101CF0000020180700000000000000000060000045
++:101D0000000002C100002256002044110000000023
++:101D1000000000000034202300000000000000004C
++:101D200012C00000000002720000000000342044D5
++:101D3000000000000000000012C00000000002715E
++:101D40000000001600404811000002760000001854
++:101D500000404811000002760000000000342044DA
++:101D6000000000000000000012C00000000002752A
++:101D70000000001700404811000002760000001922
++:101D800000204811000000000000A1FC00204411C8
++:101D900000000000000000010020481100000000C9
++:101DA0000001A1FD00604411000002E900003FFFB6
++:101DB000002F022F00000000000000000CC00000F7
++:101DC0000000025600000000C040040000000001B6
++:101DD0000000001040210620000000000000FFFF6E
++:101DE000C0280A20000000000000001040210E2042
++:101DF000000000000000FFFFC028122000000000CB
++:101E00000000001040211620000000000000FFFF2D
++:101E1000C0881A200000000081000000002044114A
++:101E20000000000000000001002048110000000038
++:101E300000042004006044110000068D0000000032
++:101E4000006000000000063100000000C0600000DB
++:101E5000000002A30000000500200A2D0000000081
++:101E60000000000800220A22000000000000002BF1
++:101E700000201A2D000000000000001C00201E2D74
++:101E8000000000000000700000281E270000000075
++:101E90000000000000311CE6000000000000002AE5
++:101EA00000201A2D000000000000000C00221A265D
++:101EB0000000000000000000002F00E6000000000D
++:101EC0000000000006E00000000002920000000098
++:101ED00000201C11000000000000000000200C1178
++:101EE000000000000000002B00203623000000004E
++:101EF0000000001000201811000000000000000089
++:101F000000691CE20000012F9380000000204411B2
++:101F10000000000000000000002048070000000052
++:101F200095000000002044110000000000000000A7
++:101F3000002F022F00000000000000000CE0000055
++:101F40000000029D0000000100333E2F0000000051
++:101F500000000000D90048000000000092000000CE
++:101F6000002044110000000000000000C0204800D4
++:101F7000000000000000001C0040362700000000A8
++:101F80000000000CC0220A20000000000000002910
++:101F9000002036220000000000000028C04036204B
++:101FA000000000000000A2A4002044110000000076
++:101FB000000000090020481100000000A1000000FE
++:101FC00000204411000000000000000100804811C2
++:101FD000000000000000002100201E2D0000000075
++:101FE00000000000002C1CE30000000000000021A5
++:101FF00000203627000000000000002200201E2DD7
++:102000000000000000000000002C1CE400000000A4
++:1020100000000022002036270000000000000023FE
++:1020200000201E2D0000000000000000003120A351
++:102030000000000000000000002D1D07000000004F
++:1020400000000023002036270000000000000024CC
++:1020500000201E2D0000000000000000003120C400
++:102060000000000000000000002D1D07000000001F
++:10207000000000240080362700000000000000213E
++:10208000002036230000000000000022002036243B
++:10209000000000000000000000311CA30000000050
++:1020A0000000002300203627000000000000000090
++:1020B00000311CC40000000000000024008036270E
++:1020C000000000000000001A002036270000000079
++:1020D0000000001B00203628000000000000001750
++:1020E00000201E2D00000000000000020021022739
++:1020F000000000000000000014C00000000002DC2E
++:102100000000000000400000000002D90000001A9A
++:1021100000203627000000000000001B00203628A9
++:10212000000000000000001700201E2D000000002D
++:102130000000000200210227000000000000000053
++:1021400014E00000000002D9000000030021022773
++:10215000000000000000000014E00000000002DCAD
++:102160000000002300201E2D0000000000000000E1
++:10217000002E00E1000000000000000002C000008E
++:10218000000002DC0000002100201E2D00000000E5
++:1021900000000000003120A100000000000000004D
++:1021A000002E00E8000000000000000006C0000053
++:1021B000000002DC0000002400201E2D00000000B2
++:1021C00000000000002E00E20000000000000000FF
++:1021D00002C00000000002DC0000002200201E2DD2
++:1021E0000000000000000000003120C200000000DC
++:1021F00000000000002E00E80000000000000000C9
++:1022000006C00000000002DC0000000000600000CA
++:10221000000006680000000000600000000002B539
++:102220000000000000400000000002DE000000008E
++:1022300000600000000002B5000000000060000027
++:102240000000065F0000000000400000000002DE09
++:102250000000000000600000000002A70000000075
++:1022600000400000000002DE0000001A00201E2DC9
++:10227000000000000000001B0080222D0000000074
++:102280000000001000221E230000000000000000DB
++:1022900000294887000000000000000000311CA356
++:1022A000000000000000001000221E2700000000B7
++:1022B0000000000000294887000000000000001016
++:1022C00000221E230000000000000000003120C496
++:1022D000000000000000FFFF00282228000000008E
++:1022E0000000000000894907000000000000001005
++:1022F00000221E2300000000000000000029488783
++:10230000000000000000001000221E21000000005C
++:102310000000000000294847000000000000000005
++:1023200000311CA3000000000000001000221E2746
++:1023300000000000000000000029488700000000A5
++:102340000000000000311CA100000000000000108F
++:1023500000221E270000000000000000002948475E
++:10236000000000000000001000221E2300000000FA
++:1023700000000000003120C4000000000000FFFF4A
++:102380000028222800000000000000000029490762
++:10239000000000000000001000221E2100000000CC
++:1023A00000000000003120C2000000000000FFFF1C
++:1023B00000282228000000000000000000894907D2
++:1023C000000000000000001000221E23000000009A
++:1023D0000000000000294887000000000000000104
++:1023E00000220A210000000000000000003308A2C3
++:1023F000000000000000001000221E22000000006B
++:102400000000001000212222000000000000000057
++:1024100000294907000000000000000000311CA353
++:10242000000000000000001000221E270000000035
++:1024300000000000002948870000000000000001A3
++:1024400000220A210000000000000000003008A265
++:10245000000000000000001000221E22000000000A
++:1024600000000010002122220000000000000000F7
++:1024700000294907000000000000001000221E2370
++:102480000000000000000000003120C40000000037
++:102490000000FFFF002822280000000000000000CC
++:1024A000002949070000000000000000003808C5AE
++:1024B00000000000000000000030084100000000A3
++:1024C0000000000100220A220000000000000000BD
++:1024D000003308A2000000000000001000221E22AD
++:1024E0000000000000000010002122220000000077
++:1024F00000000000008949070000000000000017EC
++:102500000020222D000000000000000014C0000088
++:1025100000000318FFFFFFEF002806210000000065
++:10252000000000140020222D000000000000F8E050
++:1025300000204411000000000000000000294901B3
++:1025400000000000000000000089490100000000B8
++:102550000000000000204811000000000000000002
++:102560000020481100000000060A02000080481107
++:102570000000000000000000C0200000000000007B
++:1025800097000000C020441100000000000000007F
++:10259000C0204811000000008A0000000020441103
++:1025A00000000000000000000020481100000000B2
++:1025B0000000225C00204411000000000000000028
++:1025C000C0204800000000000000A1FC00204411D1
++:1025D0000000000000000000C020480000000000D3
++:1025E00000000000C0200400000000000000000007
++:1025F00000A0000A00000000970000000020441125
++:102600000000000000000000002048110000000051
++:102610008A000000002044110000000000000000BB
++:1026200000204811000000000000225C002044113E
++:102630000000000000000000C02048000000000072
++:102640000000A1FC00204411000000000000000078
++:10265000C02048000000000000000000C02004006E
++:10266000000000000000000000A0000A00000000C0
++:10267000970000000020441100000000000000004E
++:1026800000204811000000008A00000000204411D2
++:1026900000000000000000000020481100000000C1
++:1026A0000000225C00204411000000000000000037
++:1026B000C0204800000000000000A1FC00204411E0
++:1026C0000000000000000000C020480000000000E2
++:1026D0000001A1FD002044110000000000000000E6
++:1026E000D90048000000000000000000C0200400E5
++:1026F000000000000000000000A0000A0000000030
++:1027000000002257002044110000000000000003D8
++:10271000C0484A20000000000000225D0020441153
++:102720000000000000000000C04048000000000061
++:1027300000000000006000000000064500000000EE
++:10274000C0200800000000000000225C00204411AE
++:10275000000000000000000300384A2200000000D2
++:102760000000A1FC00204411000000000000000057
++:10277000C0204800000000000001A1FD002044111D
++:102780000000000000000000002F022200000000F6
++:10279000000000000CE0000000000000000000004D
++:1027A00040204800000000000000000140304A20A6
++:1027B0000000000000000002C0304A2000000000BD
++:1027C0000000000100530A220000034B0000003FFC
++:1027D000C0280A20000000008100000000204411F1
++:1027E000000000000000000100204811000000006F
++:1027F000000021F800204411000000000000001833
++:102800000020481100000000000421F9006044117C
++:102810000000068D000000110021023000000000C1
++:102820000000000014E00000000003540000001449
++:10283000002F022200000000000000000CC0000079
++:10284000000003640000201000204411000000007C
++:102850000000800000204811000000000001A2A438
++:102860000020441100000000000000000060480249
++:102870000000036E00002100002044110000000051
++:1028800000000000C0204800000000000000000020
++:10289000C02048000000000000000000C0204800E8
++:1028A0000000000000000000C040480000000000E0
++:1028B00000000004002F02220000000000000000C1
++:1028C0000CC000000000036A00002010002044112A
++:1028D00000000000000080000020481100000000FF
++:1028E0000001A2A40020441100000000000000002C
++:1028F000004048020000035F00000028002F022271
++:1029000000000000000000000CC00000000005C036
++:102910000001A2A4002044110000000000000000FB
++:10292000004048020000035F0000002C0020362613
++:102930000000000000000049002018110000000005
++:102940000000003F002048110000000000000001CE
++:1029500000331A260000000000000000002F0226AD
++:1029600000000000000000000CC000000000037028
++:102970000000002C00801A2D000000000000003F25
++:10298000C0280A200000000000000015002F0222CD
++:1029900000000000000000000CE0000000000386C2
++:1029A00000000006002F02220000000000000000CE
++:1029B0000CE00000000003B100000016002F02220E
++:1029C00000000000000000000CE00000000003B563
++:1029D00000000020002F0222000000000000000084
++:1029E0000CE000000000039C0000000F002F0222FA
++:1029F00000000000000000000CE00000000003A840
++:102A000000000010002F0222000000000000000063
++:102A10000CE00000000003A80000001E002F0222AE
++:102A200000000000000000000CE000000000039027
++:102A30000000A2A4002044110000000000000000DB
++:102A400000404802000000000800000000290A229F
++:102A5000000000000000000340210E2000000000E4
++:102A60000000000CC021122000000000000800003F
++:102A7000002812240000000000000014C0221620CC
++:102A80000000000000000000002914A40000000065
++:102A90000000A2A40020441100000000000000007B
++:102AA000002948A2000000000000A1FE00204411FF
++:102AB000000000000000000000404803000000008B
++:102AC000810000000020441100000000000000010F
++:102AD0000020481100000000000021F800204411EF
++:102AE0000000000000000016002048110000000057
++:102AF000000421F9006044110000068D000000155B
++:102B000000210230000000000000000014E000007E
++:102B1000000003920000210E00204411000000007C
++:102B200000000000C020480000000000000000007D
++:102B3000C0204800000000000000A2A400204411B2
++:102B400000000000000000000040480200000000FB
++:102B5000810000000020441100000000000000017E
++:102B60000020481100000000000021F8002044115E
++:102B700000000000000000170020481100000000C5
++:102B8000000421F9006044110000068D00000003DC
++:102B900000210230000000000000000014E00000EE
++:102BA0000000039E000021080020441100000000E6
++:102BB00000000000C02048000000000000000000ED
++:102BC000C0204800000000000000A2A40020441122
++:102BD000000000000000000000404802000000006B
++:102BE0000000A2A40020441100000000000000002A
++:102BF0000020480200000000800000000020441176
++:102C0000000000000000000000204811000000004B
++:102C100081000000002044110000000000000010AE
++:102C200000204811000000000000000000200010FB
++:102C3000000000000000000014C00000000003AE0F
++:102C40000000000000400000000000000000201014
++:102C50000020441100000000000080000020481106
++:102C6000000000000001A2A40020441100000000A8
++:102C70000000000600404811000000000000201085
++:102C800000204411000000000000800000204811D6
++:102C9000000000000001A2A4002044110000000078
++:102CA00000000016006048110000036E00000000E4
++:102CB000004000000000000000000000C0200800EC
++:102CC0000000000000000000C0200C000000000018
++:102CD0000000001D00210223000000000000000091
++:102CE00014E00000000003CE810000000020441129
++:102CF000000000000000000100204811000000005A
++:102D0000000021F80020441100000000000000181D
++:102D10000020481100000000000421F90060441167
++:102D20000000068D000000110021023000000000AC
++:102D30000000000014E00000000003C000002100BB
++:102D400000204411000000000000000000204802A4
++:102D50000000000000000000002048030000000008
++:102D6000BABECAFE0020481100000000CAFEBABE6A
++:102D70000020481100000000000020100020441135
++:102D8000000000000000800000204811000000004A
++:102D90000000A2A400204411000000000000000474
++:102DA0000040481100000000000021700020441184
++:102DB00000000000000000000020480200000000A9
++:102DC0000000000000204803000000008100000017
++:102DD00000204411000000000000000A00204811FB
++:102DE00000000000000000000020001000000000B3
++:102DF0000000000014C00000000003D38C0000009D
++:102E00000020441100000000CAFEBABE0040481174
++:102E100000000000810000000020441100000000BC
++:102E200000000001002048110000000000003FFFEA
++:102E300040280A20000000008000000040280E20EA
++:102E40000000000040000000C02812200000000028
++:102E500000040000006946220000068D000000000A
++:102E6000002014100000000000000000002F0223CA
++:102E700000000000000000000CC00000000003E1A2
++:102E800000000000C0401800000003E400003FFF05
++:102E9000C0281A2000000000000400000069462637
++:102EA0000000068D00000000002018100000000047
++:102EB00000000000002F02240000000000000000BD
++:102EC0000CC00000000003E700000000C0401C0030
++:102ED000000003EA00003FFFC0281E2000000000A1
++:102EE00000040000006946270000068D0000000075
++:102EF00000201C1000000000000000000020440220
++:102F00000000000000000000002820C500000000B4
++:102F100000000000004948E800000000A580000013
++:102F200000200811000000000000200000200C110B
++:102F30000000000083000000006044110000041243
++:102F4000000000000020440200000000000000001B
++:102F5000C0204800000000000000000040204800A1
++:102F6000000000000000001FC0210220000000003F
++:102F70000000000014C00000000003F70000201053
++:102F800000204411000000000000800000204811D3
++:102F9000000000000000FFFFC0481220000003FFF7
++:102FA000A780000000200811000000000000A00021
++:102FB00000200C110000000083000000006044119C
++:102FC0000000041200000000002044020000000085
++:102FD00000000000C02048000000000000000000C9
++:102FE000C0204800000000000000FFFFC0281220A1
++:102FF00000000000830000000020441100000000D9
++:103000000000000000304883000000008400000041
++:10301000002044110000000000000000C020480013
++:1030200000000000000000001D0000000000000083
++:103030008300000000604411000004120000000042
++:10304000C040040000000001A98000000020081119
++:10305000000000000000C00000400C11000003FA56
++:10306000AB80000000200811000000000000F8E024
++:1030700000400C11000003FAAD8000000020081190
++:10308000000000000000F88000400C11000003FA6E
++:10309000B380000000200811000000000000F3FCD5
++:1030A00000400C11000003FAAF800000002008115E
++:1030B000000000000000E00000400C11000003FAD6
++:1030C000B180000000200811000000000000F000A6
++:1030D00000400C11000003FA83000000002044119E
++:1030E00000000000000021480020481100000000FE
++:1030F00084000000002044110000000000000000D7
++:10310000C020480000000000000000001D0000007A
++:10311000000000000000000000800000000000002F
++:1031200001182000C0304620000000000000000010
++:10313000D90048000000000000000000C02004008A
++:10314000000000000000000000A0000A00000000D5
++:103150000218A000C030462000000000000000005F
++:10316000D90048000000000000000000C02004005A
++:10317000000000000000000000A0000A00000000A5
++:103180000318C000C030462000000000000000000E
++:10319000D90048000000000000000000C02004002A
++:1031A000000000000000000000A0000A0000000075
++:1031B0000418F8E0C03046200000000000000000C5
++:1031C000D90048000000000000000000C0200400FA
++:1031D000000000000000000000A0000A0000000045
++:1031E0000518F880C03046200000000000000000F4
++:1031F000D90048000000000000000000C0200400CA
++:10320000000000000000000000A0000A0000000014
++:103210000618E000C030462000000000000000005A
++:10322000D90048000000000000000000C020040099
++:10323000000000000000000000A0000A00000000E4
++:103240000718F000C0304620000000000000000019
++:10325000D90048000000000000000000C020040069
++:10326000000000000000000000A0000A00000000B4
++:103270000818F3FCC03046200000000000000000E9
++:10328000D90048000000000000000000C020040039
++:10329000000000000000000000A0000A0000000084
++:1032A0000000003000200A2D000000000000000097
++:1032B000C0290C4000000000000000300020362330
++:1032C0000000000000000000C0200400000000001A
++:1032D0000000000000A0000A0000000086000000BE
++:1032E00000204411000000000000000000404801E0
++:1032F0000000000085000000C02044110000000014
++:103300000000000000404801000000000000217C97
++:10331000002044110000000000000018402102209D
++:10332000000000000000000014C000000000044580
++:1033300000800000C0494A20000004460000000050
++:10334000C02048000000000000000000C02048002D
++:103350000000000000000000C02048000000000045
++:103360008100000000204411000000000000000166
++:10337000002048110000000000000000C0200800EC
++:103380000000000000000000170000000000000026
++:103390000004217F006044110000068D0000001F22
++:1033A00000210230000000000000000014C00000F6
++:1033B000000000000000000000404C020000044B30
++:1033C00000000000C0200C00000000000000000011
++:1033D000C02010000000000000000000C020140009
++:1033E0000000000000000000C020180000000000E5
++:1033F00000000000C0201C000000000000007F0052
++:1034000000280A210000000000004500002F0222D1
++:1034100000000000000000000CE000000000045963
++:1034200000000000C020200000000000000000009C
++:1034300017000000000000000000001000280A2310
++:103440000000000000000010002F02220000000019
++:10345000000000000CE0000000000461810000009A
++:10346000002044110000000000000001002048116D
++:103470000000000000040000006946240000068DE2
++:103480000000000000400000000004668100000011
++:10349000002044110000000000000000002048113E
++:1034A000000000000000216D002044110000000019
++:1034B00000000000002048040000000000000000A0
++:1034C000006048050000069200000000002824F07B
++:1034D000000000000000000700280A230000000090
++:1034E00000000001002F0222000000000000000088
++:1034F0000AE000000000046D00000000002F00C979
++:10350000000000000000000004E00000000004864D
++:1035100000000000004000000000049300000002D2
++:10352000002F022200000000000000000AE000005E
++:103530000000047200000000002F00C9000000001D
++:103540000000000002E0000000000486000000000F
++:10355000004000000000049300000003002F02223E
++:1035600000000000000000000AE0000000000477F6
++:1035700000000000002F00C9000000000000000053
++:103580000CE0000000000486000000000040000085
++:103590000000049300000004002F0222000000003D
++:1035A000000000000AE000000000047C00000000B1
++:1035B000002F00C900000000000000000AE0000029
++:1035C000000004860000000000400000000004939A
++:1035D00000000005002F0222000000000000000093
++:1035E0000AE000000000048100000000002F00C974
++:1035F000000000000000000006E00000000004865B
++:1036000000000000004000000000049300000006DD
++:10361000002F022200000000000000000AE000006D
++:103620000000048600000000002F00C90000000018
++:103630000000000008E00000000004860000000018
++:10364000004000000000049300007F0000280A21D1
++:103650000000000000004500002F022200000000D2
++:10366000000000000AE00000000000000000000868
++:1036700000210A23000000000000000014C0000028
++:1036800000000490000021690020441100000000A7
++:1036900000000000C0204800000000000000000002
++:1036A000C02048000000000000000000C0204800CA
++:1036B00000000000CAFEBABE004048110000000031
++:1036C00000000000C02044000000000000000000D6
++:1036D000C02000000000000000000000C0404800C2
++:1036E0000000000000007F0000280A210000000008
++:1036F00000004500002F0222000000000000000032
++:103700000AE000000000049900000000C020000052
++:103710000000000000000000C020000000000000C9
++:1037200000000000C0400000000000000000000099
++:1037300000404C080000045900000000C0200800B0
++:10374000000000000000001040210E2000000000DA
++:1037500000000011402112200000000000000012B3
++:1037600040211620000000000000216900204411C3
++:1037700000000000000000000020480200000000DF
++:1037800000000000002102250000000000000000F1
++:1037900014E00000000004A300040000C0494A2017
++:1037A000000004A4FFFBFFFFC0284A200000000027
++:1037B00000000000002102230000000000000000C3
++:1037C00014E00000000004B000000000C020480029
++:1037D0000000000000000000C020480000000000C1
++:1037E0000000000000210224000000000000000092
++:1037F00014C00000000000008100000000204411FF
++:10380000000000000000000C002048110000000033
++:103810000000000000200010000000000000000078
++:1038200014C00000000004ACA000000000204411FF
++:1038300000000000CAFEBABE0040481100000000AF
++:10384000810000000020441100000000000000047E
++:1038500000204811000000000000216B00204411EE
++:103860000000000000000000C02048100000000020
++:10387000810000000020441100000000000000054D
++:1038800000204811000000000000216C00204411BD
++:103890000000000000000000C020481000000000F0
++:1038A00000000000002F02240000000000000000C3
++:1038B0000CE00000000000000000000000400000DC
++:1038C000000004AA00000000C0210A20000000003F
++:1038D0000000000014C00000000004C381000000CC
++:1038E00000204411000000000000000000204811EA
++:1038F000000000000000216D0020441100000000C5
++:1039000000000000C020480000000000000000008F
++:10391000C060480000000692000000000040000067
++:10392000000004C7810000000020441100000000D6
++:103930000000000100204811000000000004000009
++:10394000C02946200000000000000000C060000008
++:103950000000068D0000000100210222000000008E
++:103960000000000014C00000000004CE0000216927
++:10397000002044110000000000000000C0204800AA
++:103980000000000000000000C0204800000000000F
++:10399000000000000020481000000000CAFEBABE6F
++:1039A000004048110000000000000000C02044005A
++:1039B0000000000000000000C040481000000000AF
++:1039C0008100000000204411000000000000000100
++:1039D0000020481100000000000021F800204411E0
++:1039E000000000000000000E002048110000000050
++:1039F000000421F9006044110000068D0000000061
++:103A000000210230000000000000000014C000008F
++:103A1000000004D0000021800020441100000000BC
++:103A200000000000C020480000000000000000006E
++:103A3000C02000000000000000000000C02048007E
++:103A40000000000000000000C02000000000000096
++:103A500000000000C040480000000000000000031B
++:103A600000333E2F00000000000000010021022171
++:103A7000000000000000000014E00000000005004D
++:103A80000000002C00200A2D0000000000040000AF
++:103A900018E00C11000004EF0000000100333E2F7D
++:103AA0000000000000002169002044110000000017
++:103AB000000000000020480200000000000000009C
++:103AC00000204803000000000000000800300A2227
++:103AD0000000000000000000C020480000000000BE
++:103AE00000000000C0204800000000000000216924
++:103AF00000204411000000000000000000204802E7
++:103B0000000000000000000000204803000000004A
++:103B10000000000800300A22000000000000000041
++:103B2000C02048000000000000000000D8C048008D
++:103B3000000004E30000216900204411000000009F
++:103B4000000000000020480200000000000000000B
++:103B500000204803000000000000000800300A2296
++:103B60000000000000000000C0204800000000002D
++:103B700000000000C0204800000000000000002DF0
++:103B80000020122D000000000000000000290C831E
++:103B90000000000000002169002044110000000026
++:103BA00000000000002048020000000000000000AB
++:103BB00000204803000000000000000800300A2236
++:103BC0000000000000000000C020480000000000CD
++:103BD00000000000C02048000000000000000011AC
++:103BE00000210224000000000000000014C00000BA
++:103BF000000000000000000000400000000004AAD7
++:103C00000000002CC0203620000000000000002D25
++:103C1000C0403620000000000000000F00210221FB
++:103C2000000000000000000014C0000000000505B6
++:103C300000000000006000000000000B0000000019
++:103C4000D90000000000000000000000C040040097
++:103C500000000001B5000000002044110000000039
++:103C6000000020000020481100000000B600000005
++:103C700000204411000000000000A00000204811B6
++:103C800000000000B7000000002044110000000008
++:103C90000000C0000020481100000000B800000033
++:103CA00000204411000000000000F8E0002048114E
++:103CB00000000000B90000000020441100000000D6
++:103CC0000000F8800020481100000000BA00000049
++:103CD00000204411000000000000E0000020481116
++:103CE00000000000BB0000000020441100000000A4
++:103CF0000000F0000020481100000000BC0000009F
++:103D000000204411000000000000F3FC00204811D6
++:103D100000000000810000000020441100000000AD
++:103D2000000000020020481100000000000000FF19
++:103D300000280E300000000000000000002F0223C9
++:103D400000000000000000000CC000000000051989
++:103D500000000000C020080000000000000000007B
++:103D600014C000000000052E0000000000200C110F
++:103D7000000000000000001C0020362300000000AE
++:103D80000000002B00203623000000000000002966
++:103D90000020362300000000000000280020362309
++:103DA0000000000000000017002036230000000083
++:103DB000000000250020362300000000000000263F
++:103DC00000203623000000000000001500203623EC
++:103DD0000000000000000016002036230000000054
++:103DE000FFFFE00000200C11000000000000002197
++:103DF00000203623000000000000002200203623AF
++:103E00000000000000001FFF00200C110000000057
++:103E100000000023002036230000000000000024E2
++:103E20000020362300000000F1FFFFFF00283A2E9B
++:103E3000000000000000001AC0220E200000000058
++:103E4000000000000029386E000000008100000022
++:103E5000002044110000000000000006002048116E
++:103E6000000000000000002A402036200000000072
++:103E70008700000000204411000000000000000046
++:103E8000C0204800000000000000A1F40020441100
++:103E900000000000000000000020481000000000AA
++:103EA0000000000000200C110000000000000030A5
++:103EB00000203623000000009D0000000020441177
++:103EC000000000000000001F40214A200000000008
++:103ED00096000000002044110000000000000000D7
++:103EE000C02048000000000000000000C0200C00BE
++:103EF0000000000000000000C020100000000000D2
++:103F00000000001F00211624000000000000000037
++:103F100014C00000000000000000001D0020362337
++:103F2000000000000000000300281E230000000025
++:103F3000000000080022222300000000FFFFF00024
++:103F4000002822280000000000000000002920E8CE
++:103F5000000000000000001F0020362800000000C4
++:103F60000000001800211E230000000000000020B7
++:103F70000020362700000000000000020022162466
++:103F80000000000000000000003014A80000000045
++:103F90000000001E00203625000000000000000385
++:103FA00000211A24000000001000000000281A263A
++:103FB00000000000EFFFFFFF00283A2E0000000085
++:103FC00000000000004938CE0000067B0000000120
++:103FD00040280A20000000000000000640280E20B3
++:103FE0000000000000000300C028122000000000B4
++:103FF0000000000800211224000000000000000062
++:10400000C02016200000000000000000C0201A2080
++:10401000000000000000000000210222000000005B
++:104020000000000014C000000000056681000000D0
++:104030000020441100000000000000010020481191
++:10404000000000000000225800300A240000000098
++:1040500000040000006946220000068D000021696E
++:10406000002044110000000000000000002048056E
++:10407000000000000002000000294A2600000000A5
++:10408000000000000020481000000000CAFEBABE78
++:10409000002048110000000000000002002F022351
++:1040A00000000000000000000CC000000000056ED1
++:1040B00000000000C0201C100000000000000000F4
++:1040C000C04000000000057C00000002002F022319
++:1040D00000000000000000000CC000000000056EA1
++:1040E00081000000002044110000000000000001D9
++:1040F00000204811000000000000225800300A246F
++:104100000000000000040000006946220000068D47
++:1041100000000000C0201C10000000000000000093
++:10412000C04000000000057C00000000002F0223BA
++:1041300000000000000000000CC00000000005723C
++:1041400000000000C0201C00000000000000000073
++:10415000C04000000000057C00000004002F022386
++:1041600000000000000000000CC000000000057A04
++:104170008100000000204411000000000000000049
++:1041800000204811000000000000216D00204411B3
++:104190000000000000000000C020480000000000F7
++:1041A00000000000C060480000000692000000000F
++:1041B00000401C100000057C00000000C020000032
++:1041C0000000000000000000C040000000000000EF
++:1041D000000000000EE000000000057E000000006E
++:1041E00000600000000005C900000000002F02244C
++:1041F00000000000000000000CC000000000058F5F
++:104200000000A2B7002044110000000000000000E0
++:104210000020480700000000810000000020441139
++:104220000000000000000001002048110000000014
++:104230000004A2B6006044110000068D0000001AC0
++:10424000002122300000000000000006002226307D
++:104250000000000000042004006044110000068DEE
++:104260000000A2C400204411000000000000000073
++:10427000003048E9000000000000000000E00000FD
++:104280000000058D0000A2D10020441100000000B4
++:104290000000000000404808000000000000A2D11B
++:1042A00000204411000000000000000100504A28D6
++:1042B0000000000000000001002F022400000000A8
++:1042C000000000000CC00000000005A00000A2BB20
++:1042D00000204411000000000000000000204807FA
++:1042E00000000000810000000020441100000000D8
++:1042F0000000000100204811000000000004A2BAE4
++:10430000006044110000068D0000001A00212230D8
++:10431000000000000000000600222630000000001F
++:1043200000042004006044110000068D0000A2C5B6
++:10433000002044110000000000000000003048E9A7
++:10434000000000000000000000E000000000059EEA
++:104350000000A2D200204411000000000000000074
++:1043600000404808000000000000A2D200204411D4
++:10437000000000000000000100504A28000000007A
++:1043800000000002002F02240000000000000000D6
++:104390000CC00000000005B10000A2BF00204411C5
++:1043A000000000000000000000204807000000009E
++:1043B0008100000000204411000000000000000106
++:1043C00000204811000000000004A2BE006044115B
++:1043D0000000068D0000001A0021223000000000BD
++:1043E0000000000600222630000000000004200427
++:1043F000006044110000068D0000A2C60020441198
++:104400000000000000000000003048E9000000004B
++:104410000000000000E00000000005AF0000A2D393
++:104420000020441100000000000000000040480887
++:10443000000000000000A2D3002044110000000092
++:104440000000000100504A28000000000000A2C344
++:104450000020441100000000000000000020480778
++:104460000000000081000000002044110000000056
++:104470000000000100204811000000000004A2C25A
++:10448000006044110000068D0000001A0021223057
++:10449000000000000000000600222630000000009E
++:1044A00000042004006044110000068D0000A2C733
++:1044B000002044110000000000000000003048E926
++:1044C000000000000000000000E00000000005BE49
++:1044D0000000A2D4002044110000000000000000F1
++:1044E00000404808000000000000A2D40020441151
++:1044F000000000000000000100504A2800000000F9
++:1045000085000000002044110000000000000000B1
++:1045100000204801000000000000304A0020441143
++:104520000000000001000000002048110000000011
++:104530000000000000400000000005C4A4000000CE
++:10454000C02044110000000000000000C0404800EE
++:104550000000000000000000C0600000000005C96D
++:1045600000000000C0400400000000010000002C1A
++:1045700000203621000000008100000000204411CE
++:1045800000000000000000060020481100000000AC
++:1045900000000000002F02300000000000000000BA
++:1045A0000CC00000000005D0000000000020041135
++:1045B000000000000000003000403621000005E34C
++:1045C000000000300020062D0000000000007E00EA
++:1045D000002806210000000000000000002F02213A
++:1045E00000000000000000000CE00000000005E3F7
++:1045F00081000000002044110000000000000001C4
++:1046000000204811000000000004A0920060441146
++:104610000000068D00000031002036300000000050
++:104620000004A093006044110000068D00000032D9
++:1046300000203630000000000004A2B600604411E3
++:104640000000068D0000003300203630000000001E
++:104650000004A2BA006044110000068D000000347E
++:1046600000203630000000000004A2BE00604411AB
++:104670000000068D000000350020363000000000EC
++:104680000004A2C2006044110000068D0000003644
++:1046900000203630000000000004200400604411B7
++:1046A0000000068D0001A2A40020441100000000BB
++:1046B0000000003F00204811000000000000003F03
++:1046C00000204811000000000000003F00204811B9
++:1046D000000000000000003F002048110000000022
++:1046E0000000000500204811000000000000A1F4B7
++:1046F00000204411000000000000000000204811CC
++:1047000000000000880000000020441100000000AC
++:10471000000000010020481100000000810000009E
++:104720000020441100000000000000060020481195
++:104730000000000000000001002F02300000000017
++:10474000000000000CE000000000062C000000301B
++:104750000020062D0000000000000000002F0221B4
++:1047600000000000000000000CE000000000062C2B
++:104770008100000000204411000000000000000142
++:10478000002048110000000000007E0000280621E3
++:104790000000000000000000002F022100000000C7
++:1047A000000000000CE00000000006050000A092E0
++:1047B00000204411000000000000003100204A2DBC
++:1047C000000000000000A093002044110000000041
++:1047D0000000003200204A2D000000000000A2B6B8
++:1047E00000204411000000000000003300204A2D8A
++:1047F000000000000000A2BA0020441100000000E8
++:104800000000003400204A2D000000000000A2BE7D
++:1048100000204411000000000000003500204A2D57
++:10482000000000000000A2C20020441100000000AF
++:104830000000003600204A2D00000000000000307B
++:104840000020062D00000000000001FF00280621C6
++:104850000000000000000000002F02210000000006
++:10486000000000000CE000000000062B000000002B
++:1048700000210221000000000000000014C0000020
++:104880000000060E0004A003006044110000068D25
++:104890000000A00300204411000000000000000000
++:1048A0000020481000000000000000010021062147
++:1048B000000000000000000014C00000000006130B
++:1048C0000004A010006044110000068D0000A0103C
++:1048D00000204411000000000000000000204810EB
++:1048E000000000000000000100210621000000007F
++:1048F00000000000002F0221000000000000000066
++:104900000CE000000000062B0004A0110060441120
++:104910000000068D0000A0110020441100000000DE
++:104920000000000000204810000000000004A01259
++:10493000006044110000068D0000A0120020441108
++:1049400000000000000000000020481000000000EF
++:104950000004A013006044110000068D0000A013A5
++:10496000002044110000000000000000002048105A
++:10497000000000000004A014006044110000068D37
++:104980000000A014002044110000000000000000FE
++:1049900000204810000000000004A0150060441131
++:1049A0000000068D0000A01500204411000000004A
++:1049B0000000000000204810000000000004A016C5
++:1049C000006044110000068D0000A0160020441174
++:1049D000000000000000000000204810000000005F
++:1049E0000004A017006044110000068D0000A0170D
++:1049F00000204411000000000000000000204810CA
++:104A00000000000000042004006044110000068D36
++:104A10000000002C0080062D00000000FF000000B8
++:104A20000020441100000000000000000020481198
++:104A300000000000000000010020481100000000FC
++:104A4000000000020080481100000000000000008B
++:104A50000EE000000000063D000000300020062DA2
++:104A600000000000000000020028062100000000F5
++:104A700000000000002F02210000000000000000E4
++:104A80000CE000000000063B810000000020441103
++:104A9000000000000000000100204811000000009C
++:104AA00000042004006044110000068D0000100086
++:104AB00000200811000000000000002B002036221A
++:104AC000000000000000000000600000000006413F
++:104AD0000000000000600000000005C99800000010
++:104AE0000020441100000000000000000080481178
++:104AF0000000000000000000C0600000000006414F
++:104B000000000000C0400400000000010000A2A45A
++:104B10000020441100000000000000220020481185
++:104B20000000000089000000002044110000000087
++:104B300000000001004048110000062D9700000011
++:104B40000020441100000000000000000020481177
++:104B5000000000008A000000002044110000000056
++:104B600000000000004048110000062D0000000079
++:104B7000006000000000065C0000201000204411CE
++:104B8000000000000000800000204811000000002C
++:104B90000001A2A4C0204411000000000000001683
++:104BA000006048110000036E000020100020441136
++:104BB000000000000001000000204811000000007B
++:104BC00081000000002044110000000000000001EE
++:104BD00000204811000000000000217C002044114A
++:104BE00000000000098000000020481100000000C3
++:104BF000FFFFFFFF00204811000000000000000040
++:104C00000020481100000000000000001700000014
++:104C1000000000000004217F006044110000068DA8
++:104C20000000001F00210230000000000000000012
++:104C300014C00000000000000000000400404C11FF
++:104C400000000656000000000040000000000000C8
++:104C50000000001700201E2D0000000000000004CE
++:104C600000291E27000000000000001700803627E2
++:104C7000000000000000001700201E2D00000000B2
++:104C8000FFFFFFFB00281E270000000000000017A8
++:104C900000803627000000000000001700201E2DB5
++:104CA000000000000000000800291E27000000008E
++:104CB00000000017008036270000000000000017E9
++:104CC00000201E2D00000000FFFFFFF700281E2718
++:104CD00000000000000000170080362700000000E0
++:104CE000000020100020441100000000000080009F
++:104CF00000204811000000000001A2A4002044117F
++:104D00000000000000000016006048110000036E63
++:104D100000002010002044110000000000010000ED
++:104D200000204811000000000000217C00204411F8
++:104D30000000000001800000002048110000000079
++:104D4000FFFFFFFF002048110000000000000000EE
++:104D500000204811000000000000000017000000C3
++:104D6000000000008100000000204411000000004D
++:104D70000000000100204811000000000004217F15
++:104D8000006044110000068D0000001F0021023069
++:104D9000000000000000000014C000000000068CAD
++:104DA0000000001000404C110000067200000000DE
++:104DB000C0200400000000000000000038C0000017
++:104DC000000000000000001D00200A2D000000006F
++:104DD0000000001E00200E2D000000000000001F3B
++:104DE0000020122D00000000000000200020162DE1
++:104DF00000000000000021690020441100000000B4
++:104E00000000000000204804000000000000000036
++:104E100000204805000000000000000000204801BC
++:104E200000000000CAFEBABE0020481100000000C9
++:104E30000000000400301224000000000000000008
++:104E4000002F006400000000000000000CC0000003
++:104E50000000068B0000000300281A22000000005A
++:104E6000000000080022122200000000FFFFF000F6
++:104E7000002812240000000000000000002910C4D7
++:104E8000000000000000001F004036240000000069
++:104E90000000000000800000000000000000000092
++:104EA0001AC000000000068D9F0000000020441181
++:104EB00000000000CAFEBABE002048110000000039
++:104EC000000000001AE00000000006900000000052
++:104ED0000080000000000000000000001AC0000078
++:104EE000000006929E000000002044110000000017
++:104EF000CAFEBABE002048110000000000000000F9
++:104F00001AE000000000069500000000008000008C
++:104F10000000000000000000006000000000000B26
++:104F200000001000006004110000031500000000E4
++:104F300000200411000000000000000000600811C3
++:104F4000000001B20000225C0020441100000000BB
++:104F5000000000030020481100000000000022565D
++:104F600000204411000000000000001B0020481138
++:104F7000000000000000A1FC00204411000000001F
++:104F80000000000100204811000000000001A1FD08
++:104F9000C0204411000000000000002100201E2D50
++:104FA000000000000000001000221E27000000008A
++:104FB000000000240020222D000000000000FFFF60
++:104FC00000282228000000000000000000294907F6
++:104FD0000000000000000000002048110000000058
++:104FE000000000220020222D000000000000FFFF32
++:104FF00000282228000000000000000000294907C6
++:105000000000000000000000002048110000000027
++:105010000000002300201E2D0000000000000010F2
++:1050200000221E27000000000000000000294907A0
++:1050300000000000000000000040481100000000D7
++:105040000000000000000000000000000000000060
++:105050000000000000000000000000000000000050
++:105060000000000000000000000000000000000040
++:105070000000000000000000000000000000000030
++:105080000000000000000000000000000000000020
++:105090000000000000000000000000000000000010
++:1050A0000000000000000000000000000000000000
++:1050B00000000000000000000000000000000000F0
++:1050C00000000000000000000000000000000000E0
++:1050D00000000000000000000000000000000000D0
++:1050E00000000000000000000000000000000000C0
++:1050F00000000000000000000000000000000000B0
++:10510000000000000000000000000000000000009F
++:10511000000000000000000000000000000000008F
++:10512000000000000000000000000000000000007F
++:10513000000000000000000000000000000000006F
++:10514000000000000000000000000000000000005F
++:10515000000000000000000000000000000000004F
++:10516000000000000000000000000000000000003F
++:10517000000000000000000000000000000000002F
++:10518000000000000000000000000000000000001F
++:10519000000000000000000000000000000000000F
++:1051A00000000000000000000000000000000000FF
++:1051B00000000000000000000000000000000000EF
++:1051C00000000000000000000000000000000000DF
++:1051D00000000000000000000000000000000000CF
++:1051E00000000000000000000000000000000000BF
++:1051F00000000000000000000000000000000000AF
++:10520000000000000000000000000000000000009E
++:10521000000000000000000000000000000000008E
++:10522000000000000000000000000000000000007E
++:10523000000000000000000000000000000000006E
++:10524000000000000000000000000000000000005E
++:10525000000000000000000000000000000000004E
++:10526000000000000000000000000000000000003E
++:10527000000000000000000000000000000000002E
++:10528000000000000000000000000000000000001E
++:10529000000000000000000000000000000000000E
++:1052A00000000000000000000000000000000000FE
++:1052B0000142050205C002500000000001C3016860
++:1052C000043F05C000000000022502090250015100
++:1052D000000000000223024502A00241000000007D
++:1052E00003D705C005C005C0000000000649064AF6
++:1052F000031F05C00000000005C005C503200340D2
++:1053000000000000032A0282034203340000000070
++:1053100005C005C005C005C00000000005C005515E
++:1053200005C005C00000000003BA05C004BB03446B
++:1053300000000000049A0450043D05C00000000075
++:1053400004D005C0044104DD00000000045005073E
++:10535000035103750000000005C005C005C005C06D
++:105360000000000005C005C005C005C00000000029
++:1053700005C005C0063F05C70000000005C005C008
++:10538000000705C00000000005C005C005C005C03D
++:105390000000000005C005C005C005C000000000F9
++:1053A00003F803ED0408040600000000040E040ADC
++:1053B000040C041000000000041C04180424042041
++:1053C00000000000042C0428043404300000000015
++:1053D00005C005C0043805C00000000005C005C0B8
++:1053E00005C005C00000000005C005C005C005C01F
++:1053F0000000000000020679069700060000000089
++:00000001FF
+diff --git a/firmware/radeon/RV610_pfp.bin.ihex b/firmware/radeon/RV610_pfp.bin.ihex
+new file mode 100644
+index 0000000..f55292c
+--- /dev/null
++++ b/firmware/radeon/RV610_pfp.bin.ihex
+@@ -0,0 +1,145 @@
++:1000000000CA040000A00000007E828B007C038BED
++:10001000008001B8007C038B00D4401E00EE001E5F
++:1000200000CA040000A00000007E828B00C41838C3
++:1000300000CA240000CA2800009581A800C41C3A08
++:1000400000C3C00000CA080000CA0C00007C744B4A
++:1000500000C200050099C00000C41C3A007C744C2A
++:1000600000C0FFF000042C0400309002007D250049
++:1000700000351402007D350B00255403007CD5802B
++:1000800000259C030095C00400D5001B007EDDC147
++:10009000007D9D8000D6801B00D5801B00D4401EB3
++:1000A00000D5401E00D6401E00D6801E00D4801E03
++:1000B00000D4C01E009783D300D5C01E00CA08001C
++:1000C0000080001A00CA0C0000E4011E00D4001ECB
++:1000D0000080000C00C4183800E4013E00D4001E6B
++:1000E0000080000C00C4183800D4401E00EE001E32
++:1000F00000CA040000A00000007E828B00E4011E04
++:1001000000D4001E00D4401E00EE001E00CA0400F1
++:1001100000A00000007E828B00E4013E00D4001E9F
++:1001200000D4401E00EE001E00CA040000A0000023
++:10013000007E828B00CA180000D4401E00D5801EAD
++:100140000080005300D4007500D4401E00CA08008F
++:1001500000CA0C0000CA100000D4801900D4C018D6
++:1001600000D5001700D4801E00D4C01E00D5001E8C
++:1001700000E2001E00CA040000A00000007E828B86
++:1001800000CA080000D4806000D4401E0080000037
++:1001900000D4801E00CA080000D4806100D4401E34
++:1001A0000080000000D4801E00CA080000CA0C00B5
++:1001B00000D4401E00D4801600D4C01600D4801E87
++:1001C000008001B800D4C01E00C6084300CA0C005D
++:1001D00000CA10000094800400CA140000E420F358
++:1001E00000D4201300D5606500D4E01C00D5201C8D
++:1001F00000D5601C008000000006200100C60843F6
++:1002000000CA0C0000CA1000009483F700CA140052
++:1002100000E420F30080007900D4201300C60843D6
++:1002200000CA0C0000CA1000009883EF00CA140036
++:1002300000D400640080008D0000000000C414326F
++:1002400000C6184300C4082F0095400500C40C30B8
++:1002500000D4401E0080000000EE001E009583F5D3
++:1002600000C4103100D4403300D5206500D4A01C58
++:1002700000D4E01C00D5201C00E4015E00D4001E68
++:10028000008000000006200100CA1800000A2001BA
++:1002900000D6007600C408360098800700C61045D6
++:1002A0000095011000D4001F00D46062008000009F
++:1002B00000D4206200CC383500CC1433008401BB5C
++:1002C00000D4007200D5401E0080000000EE001E29
++:1002D00000E2001A008401BB00E2001A00CC104BBF
++:1002E00000CC0447002C9401007D098B0098400548
++:1002F000007D15CB00D4001A008001B800D4006D39
++:100300000034440100CC0C480098403A00CC2C4A00
++:100310000095800400CC0449008001B800D4001A84
++:1003200000D4C01A00282801008400F000CC10037B
++:100330000098801B0004380C008400F000CC1003EF
++:100340000098801700043808008400F000CC1003E7
++:100350000098801300043804008400F000CC1003DF
++:100360000098801400CC104C009A800900CC144DE9
++:10037000009840DC00D4006D00CC184800D5001A6D
++:1003800000D5401A008000C900D5801A0096C0D55B
++:1003900000D4006D008001B800D4006E009AC00344
++:1003A00000D4006D00D4006E0080000000EC007FDF
++:1003B000009AC0CC00D4006D008001B800D4006E5B
++:1003C00000CC140300CC180300CC1C03007D910367
++:1003D000007DD583007D190C0035CC1F0035701FC2
++:1003E000007CF0CB007CD08B00880000007E8E8BE0
++:1003F0000095C00400D4006E008001B800D4001A3B
++:1004000000D4C01A00CC080300CC0C0300CC1003AD
++:1004100000CC140300CC180300CC1C0300CC240334
++:1004200000CC28030035C41F0036B01F007C704B81
++:100430000034F01F007C704B0035701F007C704B47
++:10044000007D8881007DCCC1007E5101007E9541F8
++:10045000007C9082007CD4C2007C848B009AC00314
++:10046000007C8C8B002C88010098809E00D4006D4D
++:100470000098409C00D4006E00CC084C00CC0C4D81
++:1004800000CC104800D4801A00D4C01A00800101AA
++:1004900000D5001A00CC083200D40032009482D972
++:1004A00000CA0C0000D4401E0080000000D4001ED2
++:1004B00000E4011E00D4001E00CA080000CA0C009F
++:1004C00000CA100000D4401E00CA140000D4801ED0
++:1004D00000D4C01E00D5001E00D5401E00D54034FB
++:1004E0000080000000EE001E0028040400E2001A54
++:1004F00000E2001A00D4401A00CA380000CC0803F9
++:1005000000CC0C0300CC0C0300CC0C03009882BD83
++:1005100000000000008401BB00D7A06F0080000035
++:1005200000EE001F00CA040000C2FF0000CC083427
++:1005300000C13FFF007C74CB007CC90B007D010F24
++:10054000009902B0007C738B008401BB00D7A06FC0
++:100550000080000000EE001F00CA080000281900FB
++:10056000007D898B009580140028140400CA0C00BB
++:1005700000CA100000CA1C0000CA240000E2001FCC
++:1005800000D4C01A00D5001A00D5401A00CC1803B8
++:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
++:1005A000007D9C4700984297000000000080016198
++:1005B00000D4C01A00D4401E00D4801E0080000069
++:1005C00000EE001E00E4011E00D4001E00D4401EF8
++:1005D00000EE001E00CA040000A00000007E828B16
++:1005E00000E4013E00D4001E00D4401E00EE001EB8
++:1005F00000CA040000A00000007E828B00CA080030
++:1006000000248C06000CCC060098C00600CC104ECE
++:100610000099000400D4007300E4011E00D4001E01
++:1006200000D4401E00D4801E0080000000EE001E9A
++:1006300000CA080000CA0C000034D01800251001C0
++:100640000095002100C17FFF00CA100000CA1400FD
++:1006500000CA180000D4801D00D4C01D007DB18BDD
++:1006600000C1420200C2C00100D5801D0034DC0E72
++:10067000007D5D4C007F734C00D7401E00D5001EEE
++:1006800000D5401E00C1420000C2C00000099C010C
++:100690000031DC10007F5F4C007F734C00042802A7
++:1006A000007D838000D5A86F00D5806600D7401EEE
++:1006B00000EC005E00C8240200C82402008001B8DB
++:1006C00000D6007600D4401E00D4801E00D4C01E88
++:1006D0000080000000EE001E0080000000EE001F01
++:1006E00000D4001F0080000000D4001F00D4001FB1
++:1006F0000088000000D4001F00000000000000007F
++:1007000000000000000000000000000000000000E9
++:1007100000000000000000000000000000000000D9
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:1008000000010171000201780003008F0004007FE5
++:10081000000500030006003F000700320008012C1D
++:1008200000090046000A0036001001B6001700A2B9
++:100830000022013A00230149002000B400240125D0
++:100840000027004D0028006A002A0060002B00529B
++:10085000002F0065003200870034017F003C015604
++:10086000003F00720041018C0044012E00550173CD
++:100870000056017A0060000B00610034006200380D
++:1008800000630038006400380065003800660038F6
++:10089000006700380068003A00690041006A0048BB
++:1008A000006B0048006C0048006D0048006E004876
++:1008B000006F00480000000600000006000000066F
++:1008C0000000000600000006000000060000000610
++:1008D0000000000600000006000000060000000600
++:1008E00000000006000000060000000600000006F0
++:1008F00000000006000000060000000600000006E0
++:00000001FF
+diff --git a/firmware/radeon/RV620_me.bin.ihex b/firmware/radeon/RV620_me.bin.ihex
+new file mode 100644
+index 0000000..ba19ed8
+--- /dev/null
++++ b/firmware/radeon/RV620_me.bin.ihex
+@@ -0,0 +1,1345 @@
++:1000000000000000C020040000000000000000000C
++:1000100000A0000A000000000000FFFF00284621A9
++:100020000000000000000000D900480000000000AF
++:1000300000000000C02004000000000000000000DC
++:1000400000A0000A000000000000000000E0000026
++:100050000000000000010000C02946200000000050
++:1000600000000000D900480000000000000000006F
++:10007000C0200400000000000000000000A0000AF2
++:10008000000000008100000000204411000000007A
++:1000900000000001002048110000000000042004BE
++:1000A000006044110000068D0000000000600000A8
++:1000B000000006310000000000600000000006455E
++:1000C00000000000C02008000000000000000F0039
++:1000D000002816220000000000000008002116255C
++:1000E000000000000000001800203625000000007D
++:1000F0008D000000002044110000000000000004FA
++:10010000002F022500000000000000000CE00000AD
++:1001100000000018004120000040481100000019B4
++:100120000042200000204811000000008E00000066
++:1001300000204411000000000000002800204A2D8B
++:1001400000000000900000000020441100000000AA
++:100150000000000000204805000000000000000C26
++:1001600000211622000000000000000300281625D0
++:10017000000000000000001900211A220000000009
++:100180000000000400281A26000000000000000003
++:10019000002914C5000000000000001900203625C9
++:1001A0000000000000000000003A140200000000FF
++:1001B00000000016002116250000000000000003CA
++:1001C00000281625000000000000001700200E2D5A
++:1001D00000000000FFFFFFFC00280E2300000000CD
++:1001E00000000000002914A3000000000000001718
++:1001F00000203625000000000000800000280E22AC
++:10020000000000000000000700220E230000000094
++:10021000000000000029386E0000000020000000EF
++:1002200000280E22000000000000000600210E231E
++:1002300000000000000000000029386E00000000EF
++:100240000000000000220222000000000000000068
++:1002500014E0000000000038000000002EE0000064
++:1002600000000035000000002CE000000000003716
++:100270000000000000400E2D0000003900000008C2
++:1002800000200E2D00000000000000090040122D8B
++:10029000000000460000000100400E2D0000003963
++:1002A00000000000C0200C0000000000003FFFFC28
++:1002B0000028122300000000000000020022122487
++:1002C000000000000000001F00211E2300000000AD
++:1002D0000000000014E000000000003E00000008E4
++:1002E00000401C11000000410000000D00201E2DE8
++:1002F000000000000000000F00281E270000000082
++:100300000000000300221E27000000007FC0000044
++:1003100000281A23000000000000001400211A2603
++:10032000000000000000000100331A260000000059
++:100330000000000800221A26000000000000000053
++:1003400000290CC700000000000000270020362410
++:100350000000000000007F000028122100000000C3
++:1003600000001400002F0224000000000000000024
++:100370000CE000000000004B0000000100290E23EB
++:10038000000000000000000E0020362300000000E6
++:100390000000E0000020441100000000FFF8000011
++:1003A00000294A230000000000000000003A2C024F
++:1003B000000000000000000200220E2B00000000E0
++:1003C000FC00000000280E23000000000000000FC9
++:1003D000002036230000000000001FFF00294A23F0
++:1003E000000000000000002700204A2D000000004F
++:1003F000000000000020481100000000000000295B
++:1004000000200E2D00000000060A020000294A23E9
++:100410000000000000000000002048110000000063
++:100420000000000000204811000000000000000152
++:1004300000210222000000000000000014E0000083
++:1004400000000061000000002EE000000000005FDE
++:10045000000000002CE000000000005E0000000032
++:1004600000400E2D000000620000000100400E2D33
++:10047000000000620000000A00200E2D00000000B5
++:100480000000000B0040122D0000006A0000000078
++:10049000C0200C0000000000003FFFFC00281223D9
++:1004A00000000000000000020022122400000000F2
++:1004B0007FC0000000281623000000000000001488
++:1004C0000021162500000000000000010033162561
++:1004D000000000008000000000280E230000000043
++:1004E0000000000000290CA3000000003FFFFC00FA
++:1004F00000290E23000000000000001F00211E2321
++:10050000000000000000000014E000000000006D8A
++:100510000000010000401C11000000700000000DF0
++:1005200000201E2D00000000000000F000281E2703
++:10053000000000000000000400221E270000000050
++:100540008100000000204411000000000000000DA8
++:100550000020481100000000FFFFF0FF00281A30C3
++:10056000000000000000A02800204411000000004E
++:1005700000000000002948E6000000000000A0186C
++:1005800000204411000000003FFFFFFF00284A2325
++:10059000000000000000A010002044110000000036
++:1005A00000000000002048040000000000000030AF
++:1005B0000020162D00000000000000020029162572
++:1005C0000000000000000030002036250000000080
++:1005D000000000250020162D000000000000000093
++:1005E000002F00A300000000000000000CC000006D
++:1005F00000000083000000260020162D00000000EF
++:1006000000000000002F00A4000000000000000017
++:100610000CC000000000008400000000004000004A
++:100620000000008A000000250020362300000000A2
++:100630000000002600203624000000000000001703
++:1006400000201E2D000000000000000200210227F3
++:10065000000000000000000014E000000000008A1C
++:1006600000000000006000000000066800000000BC
++:10067000006000000000065C0000000200210E2265
++:10068000000000000000000014C000000000008D09
++:1006900000000012C040362000000093000000005F
++:1006A0002EE0000000000091000000002CE000009F
++:1006B000000000900000000200400E2D000000929B
++:1006C0000000000300400E2D000000920000000C0E
++:1006D00000200E2D00000000000000120020362334
++:1006E000000000000000000300210E2200000000B6
++:1006F0000000000014C00000000000980000A00CE2
++:10070000002044110000000000000000C02048004C
++:100710000000000000000000C0404800000000A0F1
++:100720000000A00C002044110000000000000000A8
++:100730000020481100000000000000002EE0000032
++:100740000000009E000000002CE000000000009D62
++:100750000000000200400E2D0000009F000000037A
++:1007600000400E2D0000009F0000000C00200E2D08
++:10077000000000000000000000204803000000000E
++:1007800000000000003A0C0200000000003F0000E2
++:1007900000280E23000000000000001000210E239E
++:1007A00000000000000000110020362300000000BF
++:1007B0000000001E0021022B0000000000000000CD
++:1007C00014C00000000000A700000016C020362062
++:1007D000000000000000001F0021022B00000000AC
++:1007E0000000000014C00000000000AA0000001576
++:1007F000C0203620000000000000000800210E2B61
++:10080000000000000000007F00280E230000000010
++:1008100000000000002F0223000000000000000084
++:100820000CE00000000000E10000000027000000D4
++:10083000000000000000000000600000000002A3B3
++:1008400000000001002F0223000000000000000053
++:100850000AE00000000000B300000000006000009B
++:100860000000013A81000000002044110000000057
++:100870000000000600204811000000000000000CED
++:1008800000221E300000000099800000002044116A
++:1008900000000000000000040020122D00000000F5
++:1008A00000000008002212240000000000000010D8
++:1008B00000201811000000000000000000291CE4C6
++:1008C0000000000000000000006048070000012F49
++:1008D0009B00000000204411000000000000000008
++:1008E00000204802000000009C000000002044118D
++:1008F00000000000000000000033146F0000000042
++:100900000000000100333E23000000000000000052
++:10091000D9004800000000000000000000203C0555
++:1009200000000000810000000020441100000000D1
++:100930000000000E00204811000000000000000030
++:1009400000201010000000000000E007002044110B
++:10095000000000000000000F0021022B000000003A
++:100960000000000014C00000000000CB00F8FF08E9
++:1009700000204811000000009800000000404811CD
++:10098000000000DC000000F000280E220000000043
++:10099000000000A0002F0223000000000000000063
++:1009A0000CC00000000000DA0000001100200E2D35
++:1009B0000000000000000001002F022300000000E2
++:1009C000000000000CE00000000000D50000000264
++:1009D000002F022300000000000000000CE00000D7
++:1009E000000000D400003F0000400C11000000D6C1
++:1009F00000001F0000400C11000000D600000F0096
++:100A000000200C11000000000038000900294A23D2
++:100A1000000000003F00000000280E2B0000000036
++:100A20000000000200220E2300000000000000076A
++:100A300000494A23000000DC00380F09002048115B
++:100A400000000000680000070020481100000000BE
++:100A50000000000800214A270000000000000000FC
++:100A60000020481100000000060A020000294A2464
++:100A700000000000000000000020481100000000FD
++:100A80000000000000204811000000000000A20249
++:100A9000002044110000000000FF000000280E228A
++:100AA000000000000000008000294A230000000030
++:100AB0000000002700200E2D00000000000000268E
++:100AC0000020122D0000000000000000002F008315
++:100AD00000000000000000000CE00000000000EA40
++:100AE000000000000060000000000662000000003E
++:100AF00000400000000000EB00000000006000006B
++:100B000000000665000000070020222D0000000004
++:100B10000000000500220E2200000000001000006E
++:100B200000280E23000000000000000000292068BB
++:100B30000000000000000000003A0C02000000006D
++:100B4000000000EF00280E2300000000000000005D
++:100B500000292068000000000000001700200E2D72
++:100B6000000000000000000300210223000000003C
++:100B70000000000014E00000000000F80000000B7E
++:100B800000210228000000000000000014C0000046
++:100B9000000000F8000004000029222800000000E6
++:100BA0000000001400203628000000000000001C97
++:100BB00000210E22000000000000000014C0000010
++:100BC000000000FD0000A30C002044110000000004
++:100BD0000000000000204811000000000000001E7E
++:100BE00000210E22000000000000000014C00000E0
++:100BF0000000010B0000A30F0020441100000000C2
++:100C00000000001100200E2D000000000000000177
++:100C1000002F022300000000000000000CC00000B4
++:100C200000000104FFFFFFFF004048110000010B1E
++:100C300000000002002F022300000000000000005E
++:100C40000CC00000000001070000FFFF0040481139
++:100C50000000010B00000004002F02230000000030
++:100C6000000000000CC000000000010A000000FFAE
++:100C7000004048110000010B000000010020481155
++:100C8000000000000002C400002044110000000029
++:100C90000000001F00210E220000000000000000E4
++:100CA00014C00000000001120000001040210E20BE
++:100CB00000000000000000130020362300000000A8
++:100CC0000000001840224A20000000000000001030
++:100CD000C0424A20000001140000000000200C1156
++:100CE0000000000000000013002036230000000078
++:100CF000000000000020481100000000000000007B
++:100D000000204811000000000000000A002010111F
++:100D10000000000000000000002F0224000000007E
++:100D2000000000000CE000000000011B00000000BB
++:100D300000204811000000000000000100531224B0
++:100D400000000117FFBFFFFF00283A2E000000003F
++:100D50000000001B00210222000000000000000033
++:100D600014C000000000012E81000000002044118A
++:100D7000000000000000000D0020481100000000ED
++:100D80000000001800220E3000000000FC000000EF
++:100D900000280E2300000000810000000020441104
++:100DA000000000000000000E0020481100000000BC
++:100DB0000000000000201010000000000000E00E05
++:100DC000002044110000000007F8FF08002048112F
++:100DD000000000000000000000294A23000000007D
++:100DE0000000001C00201E2D000000000000000874
++:100DF00000214A27000000000000000000204811E8
++:100E000000000000060A020000294A240000000039
++:100E10000000000000204811000000000000000059
++:100E200000204811000000000000000000800000C9
++:100E300000000000810000000020441100000000BC
++:100E40000000000100204811000000000000217C8B
++:100E50000020441100000000008000000020481124
++:100E60000000000000000000002048060000000014
++:100E70000000000800214A270000000000000000D8
++:100E800017000000000000000004217F00604411F2
++:100E90000000068D0000001F00210230000000004D
++:100EA0000000000014C000000000068C00000004D8
++:100EB00000404C1100000135810000000020441169
++:100EC00000000000000000010020481100000000A8
++:100ED000000021F800204411000000000000001C68
++:100EE0000020481100000000000421F900604411B6
++:100EF0000000068D000000110021023000000000FB
++:100F00000000000014E000000000013C00000000B0
++:100F100000800000000000000000000000600000F1
++:100F20000000000B00000000006004110000031529
++:100F3000000000000020041100000000000000007C
++:100F400000600811000001B2000000000060000015
++:100F5000000001600000FFFF40280E20000000009C
++:100F600000000010C0211220000000000000FFFF60
++:100F7000402806200000000000000010C0210A20C8
++:100F800000000000000000000034146100000000B8
++:100F90000000000000741882000002BB0001A1FDE7
++:100FA00000604411000002E000003FFF002F022F0C
++:100FB00000000000000000000CC00000000001471D
++:100FC00000000000C040040000000001000000001C
++:100FD000006000000000000B000000000060041131
++:100FE00000000315000000000020041100000000B4
++:100FF0000000000000600811000001B200003FFF87
++:10100000002F022F00000000000000000CE0000094
++:10101000000000000000000000600000000001600F
++:101020000000001040210E20000000000000FFFF23
++:10103000C0281220000000000000001040211620EF
++:10104000000000000000FFFFC0681A20000002BB83
++:101050000001A1FD00604411000002E000003FFF1C
++:10106000002F022F00000000000000000CC0000054
++:101070000000015800000000C04004000000000112
++:101080000000225C0020441100000000000000016C
++:1010900000300A2F000000000000000100210A2299
++:1010A000000000000000000300384A220000000099
++:1010B0000000225600204411000000000000001A29
++:1010C00000204811000000000000A1FC0020441195
++:1010D0000000000000000001008048110000000036
++:1010E00000000000006000000000000B0000000095
++:1010F000006000000000018F0000000000600000A0
++:10110000000001A000003FFF002F022F00000000A0
++:10111000000000000CE000000000000000000000E3
++:1011200000202C0800000000000000000020241116
++:101130000000000000000000002028110000000056
++:10114000000022560020441100000000000000169C
++:1011500000204811000000000000225C0020441123
++:101160000000000000000003002048110000000003
++:1011700093800000002044110000000000000002E5
++:1011800000221E290000000000000000007048EB53
++:101190000000019C0000000000600000000002BB95
++:1011A00000000001403306200000000000000000A5
++:1011B000C03024090000000000003FFF002F022F74
++:1011C00000000000000000000CE000000000000033
++:1011D0000000000000600000000002A3000000000A
++:1011E000002F022100000000000000000AE00000C3
++:1011F0000000018100000000006000000000013AD2
++:101200000000000000400000000001869500000082
++:10121000002044110000000000000000002F022107
++:1012200000000000000000000CE00000000001864B
++:1012300000000000C0204800000000000000000185
++:10124000005306210000018292000000002044119A
++:101250000000000000000000C0604800000001978E
++:101260000001A1FD00204411000000000000001159
++:101270000020062D00000000000000000078042A75
++:10128000000002FB00000000002028090000000010
++:1012900000003FFF002F022F0000000000000000B0
++:1012A0000CC000000000017400000000C0400400F9
++:1012B000000000010000021000600411000003158E
++:1012C00000003FFF002F022F000000000000000080
++:1012D0000CE000000000019400000015C020362042
++:1012E0000000000000000016C020362000000000B2
++:1012F0003F800000002004110000000046000000B4
++:1013000000600811000001B2000000000080000031
++:10131000000000000000A1FC0020441100000000BB
++:1013200000003FFF002F022F00000000000000001F
++:101330000CC000000000019B00000001008048116B
++:1013400000000000000000210080481100000000A3
++:101350000000FFFF40280E200000000000000010E9
++:10136000C0211220000000000000FFFF40281620CE
++:101370000000000000000010C0811A2000000000E2
++:101380008100000000204411000000000000000661
++:1013900000204811000000000000000800221E305C
++:1013A000000000000000002900201A2D00000000AD
++:1013B0000000E0000020441100000000FFFBFF09D6
++:1013C00000204811000000000000000F0020222D26
++:1013D0000000000000001FFF00294A280000000054
++:1013E000000000060020222D000000000000000088
++:1013F000002920E80000000000000000002048084C
++:101400000000000000000000002048110000000063
++:10141000060A020000294A26000000000000000021
++:1014200000204811000000000000000000204811CA
++:101430000000000000000100002018110000000062
++:101440000000000800621E280000012F00000008B4
++:1014500000822228000000000002C0000020441189
++:10146000000000000000001500600E2D000001BD0E
++:101470000000001600600E2D000001BD0000C00835
++:1014800000204411000000000000001700200E2D75
++:10149000000000000000000014C00000000001B9BE
++:1014A0000000000000200411000000000000000007
++:1014B0000020480100000000390000000020481111
++:1014C00000000000000000000020481100000000A3
++:1014D000000000000080480200000000000000182A
++:1014E00000202E2D0000000000000000003B0D63D6
++:1014F000000000000000000800224A230000000055
++:101500000000001000224A23000000000000001824
++:1015100000224A2300000000000000000080480371
++:101520000000000000000000006000000000000B50
++:10153000000010000060041100000315000000000E
++:1015400000200411000000000000000000600811ED
++:10155000000001B2000000070021062F000000007B
++:101560000000001300200A2D000000000000000110
++:1015700000202C11000000000000FFFF4028222066
++:10158000000000000000000F0026222800000000DC
++:101590000000001040212620000000000000000F85
++:1015A000002626290000000000000000002028027C
++:1015B000000000000000225600204411000000003E
++:1015C0000000001B00204811000000000000000087
++:1015D000002F022100000000000000000CE00000CD
++:1015E000000001E00000225C002044110000000027
++:1015F0000000008100204811000000000000A1FC54
++:1016000000204411000000000000000100204811EB
++:10161000000000000000008000201C1100000000FD
++:1016200000000000002F0227000000000000000062
++:101630000CE00000000001DC000000000060000081
++:10164000000001E90000000100531E27000001D83E
++:101650000000000100202C11000000000000001F0D
++:1016600000280A22000000000000001F00282A2A8B
++:10167000000000000000000100530621000001D11D
++:101680000000225C00204411000000000000000265
++:1016900000304A2F000000000000A1FC002044118F
++:1016A00000000000000000010020481100000000C0
++:1016B0000000000100301E2F0000000000000000AC
++:1016C000002F022700000000000000000CE00000D6
++:1016D000000000000000000000600000000001E9C0
++:1016E0000000000100531E27000001E50000FFFF7D
++:1016F00040280E20000000000000000F00260E23EE
++:101700000000000000000010C021122000000000B6
++:101710000000000F0026122400000000000000005E
++:1017200000201411000000000000000000601811EB
++:10173000000002BB0001A1FD0020441100000000D8
++:1017400000000000002F022B00000000000000003D
++:101750000CE00000000001F8000000100022162834
++:1017600000000000FFFF0000002816250000000018
++:101770000000FFFF00281A29000000000000000000
++:10178000002948C500000000000000000020480AB1
++:10179000000000000000000000202C1100000000EC
++:1017A000000000100022162300000000FFFF0000D0
++:1017B00000281625000000000000FFFF00281A2462
++:1017C0000000000000000000002948C500000000E3
++:1017D0000000000000731503000002050000000077
++:1017E0000020180500000000000000000073152410
++:1017F0000000020500000000002D14C500000000DC
++:1018000000000000003008A20000000000000000FE
++:101810000020480200000000000000000020280214
++:101820000000000000000000002020030000000075
++:101830000000000000802404000000000000000FF1
++:1018400000210225000000000000000014C000007C
++:101850000000068C00000000002B140500000000B2
++:1018600000000001009016250000000000000000AC
++:10187000006000000000000B000000000060041188
++:10188000000003150000000000200411000000000B
++:101890000000000000600811000001B200002256A4
++:1018A00000204411000000000000001A00294A2214
++:1018B0000000000000000000C02000000000000048
++:1018C00000003FFF002F022F00000000000000007A
++:1018D0000CE000000000000000000000C020040038
++:1018E000000000000000225C002044110000000005
++:1018F0000000000300384A21000000000000A1FCA5
++:1019000000204411000000000000000100204811E8
++:10191000000000000000FFFF40281220000000002F
++:1019200000000010C0211A20000000000000FFFF8E
++:1019300040280E200000000000000010C0211620EA
++:10194000000000000000000000741465000002BBED
++:101950000001A1FD00604411000002E00000000150
++:10196000003306210000000000000000002F0221CB
++:1019700000000000000000000CC000000000021980
++:1019800000003FFF002F022F0000000000000000B9
++:101990000CC000000000021200000000C040040063
++:1019A000000000010000000000600000000006458B
++:1019B000000000000040040F0000021300000000BF
++:1019C0000060000000000631000000000060000020
++:1019D000000006450000021000600411000003151D
++:1019E0000000000000600000000001A000000000F6
++:1019F000006000000000019C00000000006000008A
++:101A0000000002BB0000000000600000000002A314
++:101A1000938000000020441100000000000000003E
++:101A2000002048080000000000000000002F022FE6
++:101A300000000000000000000AE000000000023288
++:101A400000000000006000000000013A00000000FB
++:101A50000040000000000236950000000020441104
++:101A60000000000000000000002F022F0000000016
++:101A7000000000000CE00000000002360000000042
++:101A8000C0404800000002339200000000204411D2
++:101A90000000000000000000C0204800000000001E
++:101AA0000000225600204411000000000000001633
++:101AB00000204811000000000000225C00204411BA
++:101AC000000000000000000300204811000000009A
++:101AD0000000A1FC002044110000000000000001F3
++:101AE00000204811000000000001A1FD0020441169
++:101AF000000000000000000000600411000002FB74
++:101B000000000000C04004000000000100000000D0
++:101B100000600000000006310000A00C002044110D
++:101B20000000000000000000C0204800000000008D
++:101B300000000000C040480000000000000000005D
++:101B4000006000000000000B0000001840210A2087
++:101B50000000000000000003002F0222000000002F
++:101B6000000000000AE000000000024C0000001429
++:101B70000020222D00000000000801010029222879
++:101B800000000000000000140020362800000000C3
++:101B90000000A30C00204411000000000000000021
++:101BA000C02048000000000000000000C0204800E5
++:101BB0000000000000000000C0404800000002518A
++:101BC00000000000006000000000000B000000109A
++:101BD00000600411000003153F8000000020041184
++:101BE000000000000000000000600811000001B2C9
++:101BF0000000225C002044110000000000000003EF
++:101C000000204811000000000000000000600000FB
++:101C10000000027C0000001700201E2D00000000C4
++:101C20000000000100211E2700000000000000004D
++:101C300014E000000000026A0000001200201E2DC7
++:101C4000000000000000FFFF00281E270000000029
++:101C50000000000000341C2700000000000000000D
++:101C600012C000000000025F0000000000201C11F4
++:101C70000000000000000000002F00E50000000050
++:101C80000000000008C00000000002620000000028
++:101C900000201407000000000000001200201E2D8C
++:101CA000000000000000001000211E2700000000BE
++:101CB0000000000000341C4700000000000000008D
++:101CC00012C00000000002670000000000201C118C
++:101CD0000000000000000000002F00E600000000EF
++:101CE0000000000008C000000000026A00000000C0
++:101CF0000020180700000000000000000060000045
++:101D0000000002C100002256002044110000000023
++:101D1000000000000034202300000000000000004C
++:101D200012C00000000002720000000000342044D5
++:101D3000000000000000000012C00000000002715E
++:101D40000000001600404811000002760000001854
++:101D500000404811000002760000000000342044DA
++:101D6000000000000000000012C00000000002752A
++:101D70000000001700404811000002760000001922
++:101D800000204811000000000000A1FC00204411C8
++:101D900000000000000000010020481100000000C9
++:101DA0000001A1FD00604411000002E900003FFFB6
++:101DB000002F022F00000000000000000CC00000F7
++:101DC0000000025600000000C040040000000001B6
++:101DD0000000001040210620000000000000FFFF6E
++:101DE000C0280A20000000000000001040210E2042
++:101DF000000000000000FFFFC028122000000000CB
++:101E00000000001040211620000000000000FFFF2D
++:101E1000C0881A200000000081000000002044114A
++:101E20000000000000000001002048110000000038
++:101E300000042004006044110000068D0000000032
++:101E4000006000000000063100000000C0600000DB
++:101E5000000002A30000000500200A2D0000000081
++:101E60000000000800220A22000000000000002BF1
++:101E700000201A2D000000000000001C00201E2D74
++:101E8000000000000000700000281E270000000075
++:101E90000000000000311CE6000000000000002AE5
++:101EA00000201A2D000000000000000C00221A265D
++:101EB0000000000000000000002F00E6000000000D
++:101EC0000000000006E00000000002920000000098
++:101ED00000201C11000000000000000000200C1178
++:101EE000000000000000002B00203623000000004E
++:101EF0000000001000201811000000000000000089
++:101F000000691CE20000012F9380000000204411B2
++:101F10000000000000000000002048070000000052
++:101F200095000000002044110000000000000000A7
++:101F3000002F022F00000000000000000CE0000055
++:101F40000000029D0000000100333E2F0000000051
++:101F500000000000D90048000000000092000000CE
++:101F6000002044110000000000000000C0204800D4
++:101F7000000000000000001C0040362700000000A8
++:101F80000000000CC0220A20000000000000002910
++:101F9000002036220000000000000028C04036204B
++:101FA000000000000000A2A4002044110000000076
++:101FB000000000090020481100000000A1000000FE
++:101FC00000204411000000000000000100804811C2
++:101FD000000000000000002100201E2D0000000075
++:101FE00000000000002C1CE30000000000000021A5
++:101FF00000203627000000000000002200201E2DD7
++:102000000000000000000000002C1CE400000000A4
++:1020100000000022002036270000000000000023FE
++:1020200000201E2D0000000000000000003120A351
++:102030000000000000000000002D1D07000000004F
++:1020400000000023002036270000000000000024CC
++:1020500000201E2D0000000000000000003120C400
++:102060000000000000000000002D1D07000000001F
++:10207000000000240080362700000000000000213E
++:10208000002036230000000000000022002036243B
++:10209000000000000000000000311CA30000000050
++:1020A0000000002300203627000000000000000090
++:1020B00000311CC40000000000000024008036270E
++:1020C000000000000000001A002036270000000079
++:1020D0000000001B00203628000000000000001750
++:1020E00000201E2D00000000000000020021022739
++:1020F000000000000000000014C00000000002DC2E
++:102100000000000000400000000002D90000001A9A
++:1021100000203627000000000000001B00203628A9
++:10212000000000000000001700201E2D000000002D
++:102130000000000200210227000000000000000053
++:1021400014E00000000002D9000000030021022773
++:10215000000000000000000014E00000000002DCAD
++:102160000000002300201E2D0000000000000000E1
++:10217000002E00E1000000000000000002C000008E
++:10218000000002DC0000002100201E2D00000000E5
++:1021900000000000003120A100000000000000004D
++:1021A000002E00E8000000000000000006C0000053
++:1021B000000002DC0000002400201E2D00000000B2
++:1021C00000000000002E00E20000000000000000FF
++:1021D00002C00000000002DC0000002200201E2DD2
++:1021E0000000000000000000003120C200000000DC
++:1021F00000000000002E00E80000000000000000C9
++:1022000006C00000000002DC0000000000600000CA
++:10221000000006680000000000600000000002B539
++:102220000000000000400000000002DE000000008E
++:1022300000600000000002B5000000000060000027
++:102240000000065F0000000000400000000002DE09
++:102250000000000000600000000002A70000000075
++:1022600000400000000002DE0000001A00201E2DC9
++:10227000000000000000001B0080222D0000000074
++:102280000000001000221E230000000000000000DB
++:1022900000294887000000000000000000311CA356
++:1022A000000000000000001000221E2700000000B7
++:1022B0000000000000294887000000000000001016
++:1022C00000221E230000000000000000003120C496
++:1022D000000000000000FFFF00282228000000008E
++:1022E0000000000000894907000000000000001005
++:1022F00000221E2300000000000000000029488783
++:10230000000000000000001000221E21000000005C
++:102310000000000000294847000000000000000005
++:1023200000311CA3000000000000001000221E2746
++:1023300000000000000000000029488700000000A5
++:102340000000000000311CA100000000000000108F
++:1023500000221E270000000000000000002948475E
++:10236000000000000000001000221E2300000000FA
++:1023700000000000003120C4000000000000FFFF4A
++:102380000028222800000000000000000029490762
++:10239000000000000000001000221E2100000000CC
++:1023A00000000000003120C2000000000000FFFF1C
++:1023B00000282228000000000000000000894907D2
++:1023C000000000000000001000221E23000000009A
++:1023D0000000000000294887000000000000000104
++:1023E00000220A210000000000000000003308A2C3
++:1023F000000000000000001000221E22000000006B
++:102400000000001000212222000000000000000057
++:1024100000294907000000000000000000311CA353
++:10242000000000000000001000221E270000000035
++:1024300000000000002948870000000000000001A3
++:1024400000220A210000000000000000003008A265
++:10245000000000000000001000221E22000000000A
++:1024600000000010002122220000000000000000F7
++:1024700000294907000000000000001000221E2370
++:102480000000000000000000003120C40000000037
++:102490000000FFFF002822280000000000000000CC
++:1024A000002949070000000000000000003808C5AE
++:1024B00000000000000000000030084100000000A3
++:1024C0000000000100220A220000000000000000BD
++:1024D000003308A2000000000000001000221E22AD
++:1024E0000000000000000010002122220000000077
++:1024F00000000000008949070000000000000017EC
++:102500000020222D000000000000000014C0000088
++:1025100000000318FFFFFFEF002806210000000065
++:10252000000000140020222D000000000000F8E050
++:1025300000204411000000000000000000294901B3
++:1025400000000000000000000089490100000000B8
++:102550000000000000204811000000000000000002
++:102560000020481100000000060A02000080481107
++:102570000000000000000000C0200000000000007B
++:1025800097000000C020441100000000000000007F
++:10259000C0204811000000008A0000000020441103
++:1025A00000000000000000000020481100000000B2
++:1025B0000000225C00204411000000000000000028
++:1025C000C0204800000000000000A1FC00204411D1
++:1025D0000000000000000000C020480000000000D3
++:1025E00000000000C0200400000000000000000007
++:1025F00000A0000A00000000970000000020441125
++:102600000000000000000000002048110000000051
++:102610008A000000002044110000000000000000BB
++:1026200000204811000000000000225C002044113E
++:102630000000000000000000C02048000000000072
++:102640000000A1FC00204411000000000000000078
++:10265000C02048000000000000000000C02004006E
++:10266000000000000000000000A0000A00000000C0
++:10267000970000000020441100000000000000004E
++:1026800000204811000000008A00000000204411D2
++:1026900000000000000000000020481100000000C1
++:1026A0000000225C00204411000000000000000037
++:1026B000C0204800000000000000A1FC00204411E0
++:1026C0000000000000000000C020480000000000E2
++:1026D0000001A1FD002044110000000000000000E6
++:1026E000D90048000000000000000000C0200400E5
++:1026F000000000000000000000A0000A0000000030
++:1027000000002257002044110000000000000003D8
++:10271000C0484A20000000000000225D0020441153
++:102720000000000000000000C04048000000000061
++:1027300000000000006000000000064500000000EE
++:10274000C0200800000000000000225C00204411AE
++:10275000000000000000000300384A2200000000D2
++:102760000000A1FC00204411000000000000000057
++:10277000C0204800000000000001A1FD002044111D
++:102780000000000000000000002F022200000000F6
++:10279000000000000CE0000000000000000000004D
++:1027A00040204800000000000000000140304A20A6
++:1027B0000000000000000002C0304A2000000000BD
++:1027C0000000000100530A220000034B0000003FFC
++:1027D000C0280A20000000008100000000204411F1
++:1027E000000000000000000100204811000000006F
++:1027F000000021F800204411000000000000001833
++:102800000020481100000000000421F9006044117C
++:102810000000068D000000110021023000000000C1
++:102820000000000014E00000000003540000001449
++:10283000002F022200000000000000000CC0000079
++:10284000000003640000201000204411000000007C
++:102850000000800000204811000000000001A2A438
++:102860000020441100000000000000000060480249
++:102870000000036E00002100002044110000000051
++:1028800000000000C0204800000000000000000020
++:10289000C02048000000000000000000C0204800E8
++:1028A0000000000000000000C040480000000000E0
++:1028B00000000004002F02220000000000000000C1
++:1028C0000CC000000000036A00002010002044112A
++:1028D00000000000000080000020481100000000FF
++:1028E0000001A2A40020441100000000000000002C
++:1028F000004048020000035F00000028002F022271
++:1029000000000000000000000CC00000000005C036
++:102910000001A2A4002044110000000000000000FB
++:10292000004048020000035F0000002C0020362613
++:102930000000000000000049002018110000000005
++:102940000000003F002048110000000000000001CE
++:1029500000331A260000000000000000002F0226AD
++:1029600000000000000000000CC000000000037028
++:102970000000002C00801A2D000000000000003F25
++:10298000C0280A200000000000000015002F0222CD
++:1029900000000000000000000CE0000000000386C2
++:1029A00000000006002F02220000000000000000CE
++:1029B0000CE00000000003B100000016002F02220E
++:1029C00000000000000000000CE00000000003B563
++:1029D00000000020002F0222000000000000000084
++:1029E0000CE000000000039C0000000F002F0222FA
++:1029F00000000000000000000CE00000000003A840
++:102A000000000010002F0222000000000000000063
++:102A10000CE00000000003A80000001E002F0222AE
++:102A200000000000000000000CE000000000039027
++:102A30000000A2A4002044110000000000000000DB
++:102A400000404802000000000800000000290A229F
++:102A5000000000000000000340210E2000000000E4
++:102A60000000000CC021122000000000000800003F
++:102A7000002812240000000000000014C0221620CC
++:102A80000000000000000000002914A40000000065
++:102A90000000A2A40020441100000000000000007B
++:102AA000002948A2000000000000A1FE00204411FF
++:102AB000000000000000000000404803000000008B
++:102AC000810000000020441100000000000000010F
++:102AD0000020481100000000000021F800204411EF
++:102AE0000000000000000016002048110000000057
++:102AF000000421F9006044110000068D000000155B
++:102B000000210230000000000000000014E000007E
++:102B1000000003920000210E00204411000000007C
++:102B200000000000C020480000000000000000007D
++:102B3000C0204800000000000000A2A400204411B2
++:102B400000000000000000000040480200000000FB
++:102B5000810000000020441100000000000000017E
++:102B60000020481100000000000021F8002044115E
++:102B700000000000000000170020481100000000C5
++:102B8000000421F9006044110000068D00000003DC
++:102B900000210230000000000000000014E00000EE
++:102BA0000000039E000021080020441100000000E6
++:102BB00000000000C02048000000000000000000ED
++:102BC000C0204800000000000000A2A40020441122
++:102BD000000000000000000000404802000000006B
++:102BE0000000A2A40020441100000000000000002A
++:102BF0000020480200000000800000000020441176
++:102C0000000000000000000000204811000000004B
++:102C100081000000002044110000000000000010AE
++:102C200000204811000000000000000000200010FB
++:102C3000000000000000000014C00000000003AE0F
++:102C40000000000000400000000000000000201014
++:102C50000020441100000000000080000020481106
++:102C6000000000000001A2A40020441100000000A8
++:102C70000000000600404811000000000000201085
++:102C800000204411000000000000800000204811D6
++:102C9000000000000001A2A4002044110000000078
++:102CA00000000016006048110000036E00000000E4
++:102CB000004000000000000000000000C0200800EC
++:102CC0000000000000000000C0200C000000000018
++:102CD0000000001D00210223000000000000000091
++:102CE00014E00000000003CE810000000020441129
++:102CF000000000000000000100204811000000005A
++:102D0000000021F80020441100000000000000181D
++:102D10000020481100000000000421F90060441167
++:102D20000000068D000000110021023000000000AC
++:102D30000000000014E00000000003C000002100BB
++:102D400000204411000000000000000000204802A4
++:102D50000000000000000000002048030000000008
++:102D6000BABECAFE0020481100000000CAFEBABE6A
++:102D70000020481100000000000020100020441135
++:102D8000000000000000800000204811000000004A
++:102D90000000A2A400204411000000000000000474
++:102DA0000040481100000000000021700020441184
++:102DB00000000000000000000020480200000000A9
++:102DC0000000000000204803000000008100000017
++:102DD00000204411000000000000000A00204811FB
++:102DE00000000000000000000020001000000000B3
++:102DF0000000000014C00000000003D38C0000009D
++:102E00000020441100000000CAFEBABE0040481174
++:102E100000000000810000000020441100000000BC
++:102E200000000001002048110000000000003FFFEA
++:102E300040280A20000000008000000040280E20EA
++:102E40000000000040000000C02812200000000028
++:102E500000040000006946220000068D000000000A
++:102E6000002014100000000000000000002F0223CA
++:102E700000000000000000000CC00000000003E1A2
++:102E800000000000C0401800000003E400003FFF05
++:102E9000C0281A2000000000000400000069462637
++:102EA0000000068D00000000002018100000000047
++:102EB00000000000002F02240000000000000000BD
++:102EC0000CC00000000003E700000000C0401C0030
++:102ED000000003EA00003FFFC0281E2000000000A1
++:102EE00000040000006946270000068D0000000075
++:102EF00000201C1000000000000000000020440220
++:102F00000000000000000000002820C500000000B4
++:102F100000000000004948E800000000A580000013
++:102F200000200811000000000000200000200C110B
++:102F30000000000083000000006044110000041243
++:102F4000000000000020440200000000000000001B
++:102F5000C0204800000000000000000040204800A1
++:102F6000000000000000001FC0210220000000003F
++:102F70000000000014C00000000003F70000201053
++:102F800000204411000000000000800000204811D3
++:102F9000000000000000FFFFC0481220000003FFF7
++:102FA000A780000000200811000000000000A00021
++:102FB00000200C110000000083000000006044119C
++:102FC0000000041200000000002044020000000085
++:102FD00000000000C02048000000000000000000C9
++:102FE000C0204800000000000000FFFFC0281220A1
++:102FF00000000000830000000020441100000000D9
++:103000000000000000304883000000008400000041
++:10301000002044110000000000000000C020480013
++:1030200000000000000000001D0000000000000083
++:103030008300000000604411000004120000000042
++:10304000C040040000000001A98000000020081119
++:10305000000000000000C00000400C11000003FA56
++:10306000AB80000000200811000000000000F8E024
++:1030700000400C11000003FAAD8000000020081190
++:10308000000000000000F88000400C11000003FA6E
++:10309000B380000000200811000000000000F3FCD5
++:1030A00000400C11000003FAAF800000002008115E
++:1030B000000000000000E00000400C11000003FAD6
++:1030C000B180000000200811000000000000F000A6
++:1030D00000400C11000003FA83000000002044119E
++:1030E00000000000000021480020481100000000FE
++:1030F00084000000002044110000000000000000D7
++:10310000C020480000000000000000001D0000007A
++:10311000000000000000000000800000000000002F
++:1031200001182000C0304620000000000000000010
++:10313000D90048000000000000000000C02004008A
++:10314000000000000000000000A0000A00000000D5
++:103150000218A000C030462000000000000000005F
++:10316000D90048000000000000000000C02004005A
++:10317000000000000000000000A0000A00000000A5
++:103180000318C000C030462000000000000000000E
++:10319000D90048000000000000000000C02004002A
++:1031A000000000000000000000A0000A0000000075
++:1031B0000418F8E0C03046200000000000000000C5
++:1031C000D90048000000000000000000C0200400FA
++:1031D000000000000000000000A0000A0000000045
++:1031E0000518F880C03046200000000000000000F4
++:1031F000D90048000000000000000000C0200400CA
++:10320000000000000000000000A0000A0000000014
++:103210000618E000C030462000000000000000005A
++:10322000D90048000000000000000000C020040099
++:10323000000000000000000000A0000A00000000E4
++:103240000718F000C0304620000000000000000019
++:10325000D90048000000000000000000C020040069
++:10326000000000000000000000A0000A00000000B4
++:103270000818F3FCC03046200000000000000000E9
++:10328000D90048000000000000000000C020040039
++:10329000000000000000000000A0000A0000000084
++:1032A0000000003000200A2D000000000000000097
++:1032B000C0290C4000000000000000300020362330
++:1032C0000000000000000000C0200400000000001A
++:1032D0000000000000A0000A0000000086000000BE
++:1032E00000204411000000000000000000404801E0
++:1032F0000000000085000000C02044110000000014
++:103300000000000000404801000000000000217C97
++:10331000002044110000000000000018402102209D
++:10332000000000000000000014C000000000044580
++:1033300000800000C0494A20000004460000000050
++:10334000C02048000000000000000000C02048002D
++:103350000000000000000000C02048000000000045
++:103360008100000000204411000000000000000166
++:10337000002048110000000000000000C0200800EC
++:103380000000000000000000170000000000000026
++:103390000004217F006044110000068D0000001F22
++:1033A00000210230000000000000000014C00000F6
++:1033B000000000000000000000404C020000044B30
++:1033C00000000000C0200C00000000000000000011
++:1033D000C02010000000000000000000C020140009
++:1033E0000000000000000000C020180000000000E5
++:1033F00000000000C0201C000000000000007F0052
++:1034000000280A210000000000004500002F0222D1
++:1034100000000000000000000CE000000000045963
++:1034200000000000C020200000000000000000009C
++:1034300017000000000000000000001000280A2310
++:103440000000000000000010002F02220000000019
++:10345000000000000CE0000000000461810000009A
++:10346000002044110000000000000001002048116D
++:103470000000000000040000006946240000068DE2
++:103480000000000000400000000004668100000011
++:10349000002044110000000000000000002048113E
++:1034A000000000000000216D002044110000000019
++:1034B00000000000002048040000000000000000A0
++:1034C000006048050000069200000000002824F07B
++:1034D000000000000000000700280A230000000090
++:1034E00000000001002F0222000000000000000088
++:1034F0000AE000000000046D00000000002F00C979
++:10350000000000000000000004E00000000004864D
++:1035100000000000004000000000049300000002D2
++:10352000002F022200000000000000000AE000005E
++:103530000000047200000000002F00C9000000001D
++:103540000000000002E0000000000486000000000F
++:10355000004000000000049300000003002F02223E
++:1035600000000000000000000AE0000000000477F6
++:1035700000000000002F00C9000000000000000053
++:103580000CE0000000000486000000000040000085
++:103590000000049300000004002F0222000000003D
++:1035A000000000000AE000000000047C00000000B1
++:1035B000002F00C900000000000000000AE0000029
++:1035C000000004860000000000400000000004939A
++:1035D00000000005002F0222000000000000000093
++:1035E0000AE000000000048100000000002F00C974
++:1035F000000000000000000006E00000000004865B
++:1036000000000000004000000000049300000006DD
++:10361000002F022200000000000000000AE000006D
++:103620000000048600000000002F00C90000000018
++:103630000000000008E00000000004860000000018
++:10364000004000000000049300007F0000280A21D1
++:103650000000000000004500002F022200000000D2
++:10366000000000000AE00000000000000000000868
++:1036700000210A23000000000000000014C0000028
++:1036800000000490000021690020441100000000A7
++:1036900000000000C0204800000000000000000002
++:1036A000C02048000000000000000000C0204800CA
++:1036B00000000000CAFEBABE004048110000000031
++:1036C00000000000C02044000000000000000000D6
++:1036D000C02000000000000000000000C0404800C2
++:1036E0000000000000007F0000280A210000000008
++:1036F00000004500002F0222000000000000000032
++:103700000AE000000000049900000000C020000052
++:103710000000000000000000C020000000000000C9
++:1037200000000000C0400000000000000000000099
++:1037300000404C080000045900000000C0200800B0
++:10374000000000000000001040210E2000000000DA
++:1037500000000011402112200000000000000012B3
++:1037600040211620000000000000216900204411C3
++:1037700000000000000000000020480200000000DF
++:1037800000000000002102250000000000000000F1
++:1037900014E00000000004A300040000C0494A2017
++:1037A000000004A4FFFBFFFFC0284A200000000027
++:1037B00000000000002102230000000000000000C3
++:1037C00014E00000000004B000000000C020480029
++:1037D0000000000000000000C020480000000000C1
++:1037E0000000000000210224000000000000000092
++:1037F00014C00000000000008100000000204411FF
++:10380000000000000000000C002048110000000033
++:103810000000000000200010000000000000000078
++:1038200014C00000000004ACA000000000204411FF
++:1038300000000000CAFEBABE0040481100000000AF
++:10384000810000000020441100000000000000047E
++:1038500000204811000000000000216B00204411EE
++:103860000000000000000000C02048100000000020
++:10387000810000000020441100000000000000054D
++:1038800000204811000000000000216C00204411BD
++:103890000000000000000000C020481000000000F0
++:1038A00000000000002F02240000000000000000C3
++:1038B0000CE00000000000000000000000400000DC
++:1038C000000004AA00000000C0210A20000000003F
++:1038D0000000000014C00000000004C381000000CC
++:1038E00000204411000000000000000000204811EA
++:1038F000000000000000216D0020441100000000C5
++:1039000000000000C020480000000000000000008F
++:10391000C060480000000692000000000040000067
++:10392000000004C7810000000020441100000000D6
++:103930000000000100204811000000000004000009
++:10394000C02946200000000000000000C060000008
++:103950000000068D0000000100210222000000008E
++:103960000000000014C00000000004CE0000216927
++:10397000002044110000000000000000C0204800AA
++:103980000000000000000000C0204800000000000F
++:10399000000000000020481000000000CAFEBABE6F
++:1039A000004048110000000000000000C02044005A
++:1039B0000000000000000000C040481000000000AF
++:1039C0008100000000204411000000000000000100
++:1039D0000020481100000000000021F800204411E0
++:1039E000000000000000000E002048110000000050
++:1039F000000421F9006044110000068D0000000061
++:103A000000210230000000000000000014C000008F
++:103A1000000004D0000021800020441100000000BC
++:103A200000000000C020480000000000000000006E
++:103A3000C02000000000000000000000C02048007E
++:103A40000000000000000000C02000000000000096
++:103A500000000000C040480000000000000000031B
++:103A600000333E2F00000000000000010021022171
++:103A7000000000000000000014E00000000005004D
++:103A80000000002C00200A2D0000000000040000AF
++:103A900018E00C11000004EF0000000100333E2F7D
++:103AA0000000000000002169002044110000000017
++:103AB000000000000020480200000000000000009C
++:103AC00000204803000000000000000800300A2227
++:103AD0000000000000000000C020480000000000BE
++:103AE00000000000C0204800000000000000216924
++:103AF00000204411000000000000000000204802E7
++:103B0000000000000000000000204803000000004A
++:103B10000000000800300A22000000000000000041
++:103B2000C02048000000000000000000D8C048008D
++:103B3000000004E30000216900204411000000009F
++:103B4000000000000020480200000000000000000B
++:103B500000204803000000000000000800300A2296
++:103B60000000000000000000C0204800000000002D
++:103B700000000000C0204800000000000000002DF0
++:103B80000020122D000000000000000000290C831E
++:103B90000000000000002169002044110000000026
++:103BA00000000000002048020000000000000000AB
++:103BB00000204803000000000000000800300A2236
++:103BC0000000000000000000C020480000000000CD
++:103BD00000000000C02048000000000000000011AC
++:103BE00000210224000000000000000014C00000BA
++:103BF000000000000000000000400000000004AAD7
++:103C00000000002CC0203620000000000000002D25
++:103C1000C0403620000000000000000F00210221FB
++:103C2000000000000000000014C0000000000505B6
++:103C300000000000006000000000000B0000000019
++:103C4000D90000000000000000000000C040040097
++:103C500000000001B5000000002044110000000039
++:103C6000000020000020481100000000B600000005
++:103C700000204411000000000000A00000204811B6
++:103C800000000000B7000000002044110000000008
++:103C90000000C0000020481100000000B800000033
++:103CA00000204411000000000000F8E0002048114E
++:103CB00000000000B90000000020441100000000D6
++:103CC0000000F8800020481100000000BA00000049
++:103CD00000204411000000000000E0000020481116
++:103CE00000000000BB0000000020441100000000A4
++:103CF0000000F0000020481100000000BC0000009F
++:103D000000204411000000000000F3FC00204811D6
++:103D100000000000810000000020441100000000AD
++:103D2000000000020020481100000000000000FF19
++:103D300000280E300000000000000000002F0223C9
++:103D400000000000000000000CC000000000051989
++:103D500000000000C020080000000000000000007B
++:103D600014C000000000052E0000000000200C110F
++:103D7000000000000000001C0020362300000000AE
++:103D80000000002B00203623000000000000002966
++:103D90000020362300000000000000280020362309
++:103DA0000000000000000017002036230000000083
++:103DB000000000250020362300000000000000263F
++:103DC00000203623000000000000001500203623EC
++:103DD0000000000000000016002036230000000054
++:103DE000FFFFE00000200C11000000000000002197
++:103DF00000203623000000000000002200203623AF
++:103E00000000000000001FFF00200C110000000057
++:103E100000000023002036230000000000000024E2
++:103E20000020362300000000F1FFFFFF00283A2E9B
++:103E3000000000000000001AC0220E200000000058
++:103E4000000000000029386E000000008100000022
++:103E5000002044110000000000000006002048116E
++:103E6000000000000000002A402036200000000072
++:103E70008700000000204411000000000000000046
++:103E8000C0204800000000000000A1F40020441100
++:103E900000000000000000000020481000000000AA
++:103EA0000000000000200C110000000000000030A5
++:103EB00000203623000000009D0000000020441177
++:103EC000000000000000001F40214A200000000008
++:103ED00096000000002044110000000000000000D7
++:103EE000C02048000000000000000000C0200C00BE
++:103EF0000000000000000000C020100000000000D2
++:103F00000000001F00211624000000000000000037
++:103F100014C00000000000000000001D0020362337
++:103F2000000000000000000300281E230000000025
++:103F3000000000080022222300000000FFFFF00024
++:103F4000002822280000000000000000002920E8CE
++:103F5000000000000000001F0020362800000000C4
++:103F60000000001800211E230000000000000020B7
++:103F70000020362700000000000000020022162466
++:103F80000000000000000000003014A80000000045
++:103F90000000001E00203625000000000000000385
++:103FA00000211A24000000001000000000281A263A
++:103FB00000000000EFFFFFFF00283A2E0000000085
++:103FC00000000000004938CE0000067B0000000120
++:103FD00040280A20000000000000000640280E20B3
++:103FE0000000000000000300C028122000000000B4
++:103FF0000000000800211224000000000000000062
++:10400000C02016200000000000000000C0201A2080
++:10401000000000000000000000210222000000005B
++:104020000000000014C000000000056681000000D0
++:104030000020441100000000000000010020481191
++:10404000000000000000225800300A240000000098
++:1040500000040000006946220000068D000021696E
++:10406000002044110000000000000000002048056E
++:10407000000000000002000000294A2600000000A5
++:10408000000000000020481000000000CAFEBABE78
++:10409000002048110000000000000002002F022351
++:1040A00000000000000000000CC000000000056ED1
++:1040B00000000000C0201C100000000000000000F4
++:1040C000C04000000000057C00000002002F022319
++:1040D00000000000000000000CC000000000056EA1
++:1040E00081000000002044110000000000000001D9
++:1040F00000204811000000000000225800300A246F
++:104100000000000000040000006946220000068D47
++:1041100000000000C0201C10000000000000000093
++:10412000C04000000000057C00000000002F0223BA
++:1041300000000000000000000CC00000000005723C
++:1041400000000000C0201C00000000000000000073
++:10415000C04000000000057C00000004002F022386
++:1041600000000000000000000CC000000000057A04
++:104170008100000000204411000000000000000049
++:1041800000204811000000000000216D00204411B3
++:104190000000000000000000C020480000000000F7
++:1041A00000000000C060480000000692000000000F
++:1041B00000401C100000057C00000000C020000032
++:1041C0000000000000000000C040000000000000EF
++:1041D000000000000EE000000000057E000000006E
++:1041E00000600000000005C900000000002F02244C
++:1041F00000000000000000000CC000000000058F5F
++:104200000000A2B7002044110000000000000000E0
++:104210000020480700000000810000000020441139
++:104220000000000000000001002048110000000014
++:104230000004A2B6006044110000068D0000001AC0
++:10424000002122300000000000000006002226307D
++:104250000000000000042004006044110000068DEE
++:104260000000A2C400204411000000000000000073
++:10427000003048E9000000000000000000E00000FD
++:104280000000058D0000A2D10020441100000000B4
++:104290000000000000404808000000000000A2D11B
++:1042A00000204411000000000000000100504A28D6
++:1042B0000000000000000001002F022400000000A8
++:1042C000000000000CC00000000005A00000A2BB20
++:1042D00000204411000000000000000000204807FA
++:1042E00000000000810000000020441100000000D8
++:1042F0000000000100204811000000000004A2BAE4
++:10430000006044110000068D0000001A00212230D8
++:10431000000000000000000600222630000000001F
++:1043200000042004006044110000068D0000A2C5B6
++:10433000002044110000000000000000003048E9A7
++:10434000000000000000000000E000000000059EEA
++:104350000000A2D200204411000000000000000074
++:1043600000404808000000000000A2D200204411D4
++:10437000000000000000000100504A28000000007A
++:1043800000000002002F02240000000000000000D6
++:104390000CC00000000005B10000A2BF00204411C5
++:1043A000000000000000000000204807000000009E
++:1043B0008100000000204411000000000000000106
++:1043C00000204811000000000004A2BE006044115B
++:1043D0000000068D0000001A0021223000000000BD
++:1043E0000000000600222630000000000004200427
++:1043F000006044110000068D0000A2C60020441198
++:104400000000000000000000003048E9000000004B
++:104410000000000000E00000000005AF0000A2D393
++:104420000020441100000000000000000040480887
++:10443000000000000000A2D3002044110000000092
++:104440000000000100504A28000000000000A2C344
++:104450000020441100000000000000000020480778
++:104460000000000081000000002044110000000056
++:104470000000000100204811000000000004A2C25A
++:10448000006044110000068D0000001A0021223057
++:10449000000000000000000600222630000000009E
++:1044A00000042004006044110000068D0000A2C733
++:1044B000002044110000000000000000003048E926
++:1044C000000000000000000000E00000000005BE49
++:1044D0000000A2D4002044110000000000000000F1
++:1044E00000404808000000000000A2D40020441151
++:1044F000000000000000000100504A2800000000F9
++:1045000085000000002044110000000000000000B1
++:1045100000204801000000000000304A0020441143
++:104520000000000001000000002048110000000011
++:104530000000000000400000000005C4A4000000CE
++:10454000C02044110000000000000000C0404800EE
++:104550000000000000000000C0600000000005C96D
++:1045600000000000C0400400000000010000002C1A
++:1045700000203621000000008100000000204411CE
++:1045800000000000000000060020481100000000AC
++:1045900000000000002F02300000000000000000BA
++:1045A0000CC00000000005D0000000000020041135
++:1045B000000000000000003000403621000005E34C
++:1045C000000000300020062D0000000000007E00EA
++:1045D000002806210000000000000000002F02213A
++:1045E00000000000000000000CE00000000005E3F7
++:1045F00081000000002044110000000000000001C4
++:1046000000204811000000000004A0920060441146
++:104610000000068D00000031002036300000000050
++:104620000004A093006044110000068D00000032D9
++:1046300000203630000000000004A2B600604411E3
++:104640000000068D0000003300203630000000001E
++:104650000004A2BA006044110000068D000000347E
++:1046600000203630000000000004A2BE00604411AB
++:104670000000068D000000350020363000000000EC
++:104680000004A2C2006044110000068D0000003644
++:1046900000203630000000000004200400604411B7
++:1046A0000000068D0001A2A40020441100000000BB
++:1046B0000000003F00204811000000000000003F03
++:1046C00000204811000000000000003F00204811B9
++:1046D000000000000000003F002048110000000022
++:1046E0000000000500204811000000000000A1F4B7
++:1046F00000204411000000000000000000204811CC
++:1047000000000000880000000020441100000000AC
++:10471000000000010020481100000000810000009E
++:104720000020441100000000000000060020481195
++:104730000000000000000001002F02300000000017
++:10474000000000000CE000000000062C000000301B
++:104750000020062D0000000000000000002F0221B4
++:1047600000000000000000000CE000000000062C2B
++:104770008100000000204411000000000000000142
++:10478000002048110000000000007E0000280621E3
++:104790000000000000000000002F022100000000C7
++:1047A000000000000CE00000000006050000A092E0
++:1047B00000204411000000000000003100204A2DBC
++:1047C000000000000000A093002044110000000041
++:1047D0000000003200204A2D000000000000A2B6B8
++:1047E00000204411000000000000003300204A2D8A
++:1047F000000000000000A2BA0020441100000000E8
++:104800000000003400204A2D000000000000A2BE7D
++:1048100000204411000000000000003500204A2D57
++:10482000000000000000A2C20020441100000000AF
++:104830000000003600204A2D00000000000000307B
++:104840000020062D00000000000001FF00280621C6
++:104850000000000000000000002F02210000000006
++:10486000000000000CE000000000062B000000002B
++:1048700000210221000000000000000014C0000020
++:104880000000060E0004A003006044110000068D25
++:104890000000A00300204411000000000000000000
++:1048A0000020481000000000000000010021062147
++:1048B000000000000000000014C00000000006130B
++:1048C0000004A010006044110000068D0000A0103C
++:1048D00000204411000000000000000000204810EB
++:1048E000000000000000000100210621000000007F
++:1048F00000000000002F0221000000000000000066
++:104900000CE000000000062B0004A0110060441120
++:104910000000068D0000A0110020441100000000DE
++:104920000000000000204810000000000004A01259
++:10493000006044110000068D0000A0120020441108
++:1049400000000000000000000020481000000000EF
++:104950000004A013006044110000068D0000A013A5
++:10496000002044110000000000000000002048105A
++:10497000000000000004A014006044110000068D37
++:104980000000A014002044110000000000000000FE
++:1049900000204810000000000004A0150060441131
++:1049A0000000068D0000A01500204411000000004A
++:1049B0000000000000204810000000000004A016C5
++:1049C000006044110000068D0000A0160020441174
++:1049D000000000000000000000204810000000005F
++:1049E0000004A017006044110000068D0000A0170D
++:1049F00000204411000000000000000000204810CA
++:104A00000000000000042004006044110000068D36
++:104A10000000002C0080062D00000000FF000000B8
++:104A20000020441100000000000000000020481198
++:104A300000000000000000010020481100000000FC
++:104A4000000000020080481100000000000000008B
++:104A50000EE000000000063D000000300020062DA2
++:104A600000000000000000020028062100000000F5
++:104A700000000000002F02210000000000000000E4
++:104A80000CE000000000063B810000000020441103
++:104A9000000000000000000100204811000000009C
++:104AA00000042004006044110000068D0000100086
++:104AB00000200811000000000000002B002036221A
++:104AC000000000000000000000600000000006413F
++:104AD0000000000000600000000005C99800000010
++:104AE0000020441100000000000000000080481178
++:104AF0000000000000000000C0600000000006414F
++:104B000000000000C0400400000000010000A2A45A
++:104B10000020441100000000000000220020481185
++:104B20000000000089000000002044110000000087
++:104B300000000001004048110000062D9700000011
++:104B40000020441100000000000000000020481177
++:104B5000000000008A000000002044110000000056
++:104B600000000000004048110000062D0000000079
++:104B7000006000000000065C0000201000204411CE
++:104B8000000000000000800000204811000000002C
++:104B90000001A2A4C0204411000000000000001683
++:104BA000006048110000036E000020100020441136
++:104BB000000000000001000000204811000000007B
++:104BC00081000000002044110000000000000001EE
++:104BD00000204811000000000000217C002044114A
++:104BE00000000000098000000020481100000000C3
++:104BF000FFFFFFFF00204811000000000000000040
++:104C00000020481100000000000000001700000014
++:104C1000000000000004217F006044110000068DA8
++:104C20000000001F00210230000000000000000012
++:104C300014C00000000000000000000400404C11FF
++:104C400000000656000000000040000000000000C8
++:104C50000000001700201E2D0000000000000004CE
++:104C600000291E27000000000000001700803627E2
++:104C7000000000000000001700201E2D00000000B2
++:104C8000FFFFFFFB00281E270000000000000017A8
++:104C900000803627000000000000001700201E2DB5
++:104CA000000000000000000800291E27000000008E
++:104CB00000000017008036270000000000000017E9
++:104CC00000201E2D00000000FFFFFFF700281E2718
++:104CD00000000000000000170080362700000000E0
++:104CE000000020100020441100000000000080009F
++:104CF00000204811000000000001A2A4002044117F
++:104D00000000000000000016006048110000036E63
++:104D100000002010002044110000000000010000ED
++:104D200000204811000000000000217C00204411F8
++:104D30000000000001800000002048110000000079
++:104D4000FFFFFFFF002048110000000000000000EE
++:104D500000204811000000000000000017000000C3
++:104D6000000000008100000000204411000000004D
++:104D70000000000100204811000000000004217F15
++:104D8000006044110000068D0000001F0021023069
++:104D9000000000000000000014C000000000068CAD
++:104DA0000000001000404C110000067200000000DE
++:104DB000C0200400000000000000000038C0000017
++:104DC000000000000000001D00200A2D000000006F
++:104DD0000000001E00200E2D000000000000001F3B
++:104DE0000020122D00000000000000200020162DE1
++:104DF00000000000000021690020441100000000B4
++:104E00000000000000204804000000000000000036
++:104E100000204805000000000000000000204801BC
++:104E200000000000CAFEBABE0020481100000000C9
++:104E30000000000400301224000000000000000008
++:104E4000002F006400000000000000000CC0000003
++:104E50000000068B0000000300281A22000000005A
++:104E6000000000080022122200000000FFFFF000F6
++:104E7000002812240000000000000000002910C4D7
++:104E8000000000000000001F004036240000000069
++:104E90000000000000800000000000000000000092
++:104EA0001AC000000000068D9F0000000020441181
++:104EB00000000000CAFEBABE002048110000000039
++:104EC000000000001AE00000000006900000000052
++:104ED0000080000000000000000000001AC0000078
++:104EE000000006929E000000002044110000000017
++:104EF000CAFEBABE002048110000000000000000F9
++:104F00001AE000000000069500000000008000008C
++:104F10000000000000000000006000000000000B26
++:104F200000001000006004110000031500000000E4
++:104F300000200411000000000000000000600811C3
++:104F4000000001B20000225C0020441100000000BB
++:104F5000000000030020481100000000000022565D
++:104F600000204411000000000000001B0020481138
++:104F7000000000000000A1FC00204411000000001F
++:104F80000000000100204811000000000001A1FD08
++:104F9000C0204411000000000000002100201E2D50
++:104FA000000000000000001000221E27000000008A
++:104FB000000000240020222D000000000000FFFF60
++:104FC00000282228000000000000000000294907F6
++:104FD0000000000000000000002048110000000058
++:104FE000000000220020222D000000000000FFFF32
++:104FF00000282228000000000000000000294907C6
++:105000000000000000000000002048110000000027
++:105010000000002300201E2D0000000000000010F2
++:1050200000221E27000000000000000000294907A0
++:1050300000000000000000000040481100000000D7
++:105040000000000000000000000000000000000060
++:105050000000000000000000000000000000000050
++:105060000000000000000000000000000000000040
++:105070000000000000000000000000000000000030
++:105080000000000000000000000000000000000020
++:105090000000000000000000000000000000000010
++:1050A0000000000000000000000000000000000000
++:1050B00000000000000000000000000000000000F0
++:1050C00000000000000000000000000000000000E0
++:1050D00000000000000000000000000000000000D0
++:1050E00000000000000000000000000000000000C0
++:1050F00000000000000000000000000000000000B0
++:10510000000000000000000000000000000000009F
++:10511000000000000000000000000000000000008F
++:10512000000000000000000000000000000000007F
++:10513000000000000000000000000000000000006F
++:10514000000000000000000000000000000000005F
++:10515000000000000000000000000000000000004F
++:10516000000000000000000000000000000000003F
++:10517000000000000000000000000000000000002F
++:10518000000000000000000000000000000000001F
++:10519000000000000000000000000000000000000F
++:1051A00000000000000000000000000000000000FF
++:1051B00000000000000000000000000000000000EF
++:1051C00000000000000000000000000000000000DF
++:1051D00000000000000000000000000000000000CF
++:1051E00000000000000000000000000000000000BF
++:1051F00000000000000000000000000000000000AF
++:10520000000000000000000000000000000000009E
++:10521000000000000000000000000000000000008E
++:10522000000000000000000000000000000000007E
++:10523000000000000000000000000000000000006E
++:10524000000000000000000000000000000000005E
++:10525000000000000000000000000000000000004E
++:10526000000000000000000000000000000000003E
++:10527000000000000000000000000000000000002E
++:10528000000000000000000000000000000000001E
++:10529000000000000000000000000000000000000E
++:1052A00000000000000000000000000000000000FE
++:1052B0000142050205C002500000000001C3016860
++:1052C000043F05C000000000022502090250015100
++:1052D000000000000223024502A00241000000007D
++:1052E00003D705C005C005C0000000000649064AF6
++:1052F000031F05C00000000005C005C503200340D2
++:1053000000000000032A0282034203340000000070
++:1053100005C005C005C005C00000000005C005515E
++:1053200005C005C00000000003BA05C004BB03446B
++:1053300000000000049A0450043D05C00000000075
++:1053400004D005C0044104DD00000000045005073E
++:10535000035103750000000005C005C005C005C06D
++:105360000000000005C005C005C005C00000000029
++:1053700005C005C0063F05C70000000005C005C008
++:10538000000705C00000000005C005C005C005C03D
++:105390000000000005C005C005C005C000000000F9
++:1053A00003F803ED0408040600000000040E040ADC
++:1053B000040C041000000000041C04180424042041
++:1053C00000000000042C0428043404300000000015
++:1053D00005C005C0043805C00000000005C005C0B8
++:1053E00005C005C00000000005C005C005C005C01F
++:1053F0000000000000020679069700060000000089
++:00000001FF
+diff --git a/firmware/radeon/RV620_pfp.bin.ihex b/firmware/radeon/RV620_pfp.bin.ihex
+new file mode 100644
+index 0000000..f55292c
+--- /dev/null
++++ b/firmware/radeon/RV620_pfp.bin.ihex
+@@ -0,0 +1,145 @@
++:1000000000CA040000A00000007E828B007C038BED
++:10001000008001B8007C038B00D4401E00EE001E5F
++:1000200000CA040000A00000007E828B00C41838C3
++:1000300000CA240000CA2800009581A800C41C3A08
++:1000400000C3C00000CA080000CA0C00007C744B4A
++:1000500000C200050099C00000C41C3A007C744C2A
++:1000600000C0FFF000042C0400309002007D250049
++:1000700000351402007D350B00255403007CD5802B
++:1000800000259C030095C00400D5001B007EDDC147
++:10009000007D9D8000D6801B00D5801B00D4401EB3
++:1000A00000D5401E00D6401E00D6801E00D4801E03
++:1000B00000D4C01E009783D300D5C01E00CA08001C
++:1000C0000080001A00CA0C0000E4011E00D4001ECB
++:1000D0000080000C00C4183800E4013E00D4001E6B
++:1000E0000080000C00C4183800D4401E00EE001E32
++:1000F00000CA040000A00000007E828B00E4011E04
++:1001000000D4001E00D4401E00EE001E00CA0400F1
++:1001100000A00000007E828B00E4013E00D4001E9F
++:1001200000D4401E00EE001E00CA040000A0000023
++:10013000007E828B00CA180000D4401E00D5801EAD
++:100140000080005300D4007500D4401E00CA08008F
++:1001500000CA0C0000CA100000D4801900D4C018D6
++:1001600000D5001700D4801E00D4C01E00D5001E8C
++:1001700000E2001E00CA040000A00000007E828B86
++:1001800000CA080000D4806000D4401E0080000037
++:1001900000D4801E00CA080000D4806100D4401E34
++:1001A0000080000000D4801E00CA080000CA0C00B5
++:1001B00000D4401E00D4801600D4C01600D4801E87
++:1001C000008001B800D4C01E00C6084300CA0C005D
++:1001D00000CA10000094800400CA140000E420F358
++:1001E00000D4201300D5606500D4E01C00D5201C8D
++:1001F00000D5601C008000000006200100C60843F6
++:1002000000CA0C0000CA1000009483F700CA140052
++:1002100000E420F30080007900D4201300C60843D6
++:1002200000CA0C0000CA1000009883EF00CA140036
++:1002300000D400640080008D0000000000C414326F
++:1002400000C6184300C4082F0095400500C40C30B8
++:1002500000D4401E0080000000EE001E009583F5D3
++:1002600000C4103100D4403300D5206500D4A01C58
++:1002700000D4E01C00D5201C00E4015E00D4001E68
++:10028000008000000006200100CA1800000A2001BA
++:1002900000D6007600C408360098800700C61045D6
++:1002A0000095011000D4001F00D46062008000009F
++:1002B00000D4206200CC383500CC1433008401BB5C
++:1002C00000D4007200D5401E0080000000EE001E29
++:1002D00000E2001A008401BB00E2001A00CC104BBF
++:1002E00000CC0447002C9401007D098B0098400548
++:1002F000007D15CB00D4001A008001B800D4006D39
++:100300000034440100CC0C480098403A00CC2C4A00
++:100310000095800400CC0449008001B800D4001A84
++:1003200000D4C01A00282801008400F000CC10037B
++:100330000098801B0004380C008400F000CC1003EF
++:100340000098801700043808008400F000CC1003E7
++:100350000098801300043804008400F000CC1003DF
++:100360000098801400CC104C009A800900CC144DE9
++:10037000009840DC00D4006D00CC184800D5001A6D
++:1003800000D5401A008000C900D5801A0096C0D55B
++:1003900000D4006D008001B800D4006E009AC00344
++:1003A00000D4006D00D4006E0080000000EC007FDF
++:1003B000009AC0CC00D4006D008001B800D4006E5B
++:1003C00000CC140300CC180300CC1C03007D910367
++:1003D000007DD583007D190C0035CC1F0035701FC2
++:1003E000007CF0CB007CD08B00880000007E8E8BE0
++:1003F0000095C00400D4006E008001B800D4001A3B
++:1004000000D4C01A00CC080300CC0C0300CC1003AD
++:1004100000CC140300CC180300CC1C0300CC240334
++:1004200000CC28030035C41F0036B01F007C704B81
++:100430000034F01F007C704B0035701F007C704B47
++:10044000007D8881007DCCC1007E5101007E9541F8
++:10045000007C9082007CD4C2007C848B009AC00314
++:10046000007C8C8B002C88010098809E00D4006D4D
++:100470000098409C00D4006E00CC084C00CC0C4D81
++:1004800000CC104800D4801A00D4C01A00800101AA
++:1004900000D5001A00CC083200D40032009482D972
++:1004A00000CA0C0000D4401E0080000000D4001ED2
++:1004B00000E4011E00D4001E00CA080000CA0C009F
++:1004C00000CA100000D4401E00CA140000D4801ED0
++:1004D00000D4C01E00D5001E00D5401E00D54034FB
++:1004E0000080000000EE001E0028040400E2001A54
++:1004F00000E2001A00D4401A00CA380000CC0803F9
++:1005000000CC0C0300CC0C0300CC0C03009882BD83
++:1005100000000000008401BB00D7A06F0080000035
++:1005200000EE001F00CA040000C2FF0000CC083427
++:1005300000C13FFF007C74CB007CC90B007D010F24
++:10054000009902B0007C738B008401BB00D7A06FC0
++:100550000080000000EE001F00CA080000281900FB
++:10056000007D898B009580140028140400CA0C00BB
++:1005700000CA100000CA1C0000CA240000E2001FCC
++:1005800000D4C01A00D5001A00D5401A00CC1803B8
++:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
++:1005A000007D9C4700984297000000000080016198
++:1005B00000D4C01A00D4401E00D4801E0080000069
++:1005C00000EE001E00E4011E00D4001E00D4401EF8
++:1005D00000EE001E00CA040000A00000007E828B16
++:1005E00000E4013E00D4001E00D4401E00EE001EB8
++:1005F00000CA040000A00000007E828B00CA080030
++:1006000000248C06000CCC060098C00600CC104ECE
++:100610000099000400D4007300E4011E00D4001E01
++:1006200000D4401E00D4801E0080000000EE001E9A
++:1006300000CA080000CA0C000034D01800251001C0
++:100640000095002100C17FFF00CA100000CA1400FD
++:1006500000CA180000D4801D00D4C01D007DB18BDD
++:1006600000C1420200C2C00100D5801D0034DC0E72
++:10067000007D5D4C007F734C00D7401E00D5001EEE
++:1006800000D5401E00C1420000C2C00000099C010C
++:100690000031DC10007F5F4C007F734C00042802A7
++:1006A000007D838000D5A86F00D5806600D7401EEE
++:1006B00000EC005E00C8240200C82402008001B8DB
++:1006C00000D6007600D4401E00D4801E00D4C01E88
++:1006D0000080000000EE001E0080000000EE001F01
++:1006E00000D4001F0080000000D4001F00D4001FB1
++:1006F0000088000000D4001F00000000000000007F
++:1007000000000000000000000000000000000000E9
++:1007100000000000000000000000000000000000D9
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:1008000000010171000201780003008F0004007FE5
++:10081000000500030006003F000700320008012C1D
++:1008200000090046000A0036001001B6001700A2B9
++:100830000022013A00230149002000B400240125D0
++:100840000027004D0028006A002A0060002B00529B
++:10085000002F0065003200870034017F003C015604
++:10086000003F00720041018C0044012E00550173CD
++:100870000056017A0060000B00610034006200380D
++:1008800000630038006400380065003800660038F6
++:10089000006700380068003A00690041006A0048BB
++:1008A000006B0048006C0048006D0048006E004876
++:1008B000006F00480000000600000006000000066F
++:1008C0000000000600000006000000060000000610
++:1008D0000000000600000006000000060000000600
++:1008E00000000006000000060000000600000006F0
++:1008F00000000006000000060000000600000006E0
++:00000001FF
+diff --git a/firmware/radeon/RV630_me.bin.ihex b/firmware/radeon/RV630_me.bin.ihex
+new file mode 100644
+index 0000000..ba3a7e6
+--- /dev/null
++++ b/firmware/radeon/RV630_me.bin.ihex
+@@ -0,0 +1,1345 @@
++:1000000000000000C020040000000000000000000C
++:1000100000A0000A000000000000FFFF00284621A9
++:100020000000000000000000D900480000000000AF
++:1000300000000000C02004000000000000000000DC
++:1000400000A0000A000000000000000000E0000026
++:100050000000000000010000C02946200000000050
++:1000600000000000D900480000000000000000006F
++:10007000C0200400000000000000000000A0000AF2
++:10008000000000008100000000204411000000007A
++:1000900000000001002048110000000000042004BE
++:1000A000006044110000068A0000000000600000AB
++:1000B0000000062E00000000006000000000064264
++:1000C00000000000C02008000000000000000F0039
++:1000D000002816220000000000000008002116255C
++:1000E000000000000000001800203625000000007D
++:1000F0008D000000002044110000000000000004FA
++:10010000002F022500000000000000000CE00000AD
++:1001100000000018004120000040481100000019B4
++:100120000042200000204811000000008E00000066
++:1001300000204411000000000000002800204A2D8B
++:1001400000000000900000000020441100000000AA
++:100150000000000000204805000000000000000C26
++:1001600000211622000000000000000300281625D0
++:10017000000000000000001900211A220000000009
++:100180000000000400281A26000000000000000003
++:10019000002914C5000000000000001900203625C9
++:1001A0000000000000000000003A140200000000FF
++:1001B00000000016002116250000000000000003CA
++:1001C00000281625000000000000001700200E2D5A
++:1001D00000000000FFFFFFFC00280E2300000000CD
++:1001E00000000000002914A3000000000000001718
++:1001F00000203625000000000000800000280E22AC
++:10020000000000000000000700220E230000000094
++:10021000000000000029386E0000000020000000EF
++:1002200000280E22000000000000000600210E231E
++:1002300000000000000000000029386E00000000EF
++:100240000000000000220222000000000000000068
++:1002500014E0000000000038000000002EE0000064
++:1002600000000035000000002CE000000000003716
++:100270000000000000400E2D0000003900000008C2
++:1002800000200E2D00000000000000090040122D8B
++:10029000000000460000000100400E2D0000003963
++:1002A00000000000C0200C0000000000003FFFFC28
++:1002B0000028122300000000000000020022122487
++:1002C000000000000000001F00211E2300000000AD
++:1002D0000000000014E000000000003E00000008E4
++:1002E00000401C11000000410000000D00201E2DE8
++:1002F000000000000000000F00281E270000000082
++:100300000000000300221E27000000007FC0000044
++:1003100000281A23000000000000001400211A2603
++:10032000000000000000000100331A260000000059
++:100330000000000800221A26000000000000000053
++:1003400000290CC700000000000000270020362410
++:100350000000000000007F000028122100000000C3
++:1003600000001400002F0224000000000000000024
++:100370000CE000000000004B0000000100290E23EB
++:10038000000000000000000E0020362300000000E6
++:100390000000E0000020441100000000FFF8000011
++:1003A00000294A230000000000000000003A2C024F
++:1003B000000000000000000200220E2B00000000E0
++:1003C000FC00000000280E23000000000000000FC9
++:1003D000002036230000000000001FFF00294A23F0
++:1003E000000000000000002700204A2D000000004F
++:1003F000000000000020481100000000000000295B
++:1004000000200E2D00000000060A020000294A23E9
++:100410000000000000000000002048110000000063
++:100420000000000000204811000000000000000152
++:1004300000210222000000000000000014E0000083
++:1004400000000061000000002EE000000000005FDE
++:10045000000000002CE000000000005E0000000032
++:1004600000400E2D000000620000000100400E2D33
++:10047000000000620000000A00200E2D00000000B5
++:100480000000000B0040122D0000006A0000000078
++:10049000C0200C0000000000003FFFFC00281223D9
++:1004A00000000000000000020022122400000000F2
++:1004B0007FC0000000281623000000000000001488
++:1004C0000021162500000000000000010033162561
++:1004D000000000008000000000280E230000000043
++:1004E0000000000000290CA3000000003FFFFC00FA
++:1004F00000290E23000000000000001F00211E2321
++:10050000000000000000000014E000000000006D8A
++:100510000000010000401C11000000700000000DF0
++:1005200000201E2D00000000000000F000281E2703
++:10053000000000000000000400221E270000000050
++:100540008100000000204411000000000000000DA8
++:100550000020481100000000FFFFF0FF00281A30C3
++:10056000000000000000A02800204411000000004E
++:1005700000000000002948E6000000000000A0186C
++:1005800000204411000000003FFFFFFF00284A2325
++:10059000000000000000A010002044110000000036
++:1005A00000000000002048040000000000000030AF
++:1005B0000020162D00000000000000020029162572
++:1005C0000000000000000030002036250000000080
++:1005D000000000250020162D000000000000000093
++:1005E000002F00A300000000000000000CC000006D
++:1005F00000000083000000260020162D00000000EF
++:1006000000000000002F00A4000000000000000017
++:100610000CC000000000008400000000004000004A
++:100620000000008A000000250020362300000000A2
++:100630000000002600203624000000000000001703
++:1006400000201E2D000000000000000200210227F3
++:10065000000000000000000014E000000000008A1C
++:1006600000000000006000000000066500000000BF
++:1006700000600000000006590000000200210E2268
++:10068000000000000000000014C000000000008D09
++:1006900000000012C040362000000093000000005F
++:1006A0002EE0000000000091000000002CE000009F
++:1006B000000000900000000200400E2D000000929B
++:1006C0000000000300400E2D000000920000000C0E
++:1006D00000200E2D00000000000000120020362334
++:1006E000000000000000000300210E2200000000B6
++:1006F0000000000014C00000000000980000A00CE2
++:10070000002044110000000000000000C02048004C
++:100710000000000000000000C0404800000000A0F1
++:100720000000A00C002044110000000000000000A8
++:100730000020481100000000000000002EE0000032
++:100740000000009E000000002CE000000000009D62
++:100750000000000200400E2D0000009F000000037A
++:1007600000400E2D0000009F0000000C00200E2D08
++:10077000000000000000000000204803000000000E
++:1007800000000000003A0C0200000000003F0000E2
++:1007900000280E23000000000000001000210E239E
++:1007A00000000000000000110020362300000000BF
++:1007B0000000001E0021022B0000000000000000CD
++:1007C00014C00000000000A700000016C020362062
++:1007D000000000000000001F0021022B00000000AC
++:1007E0000000000014C00000000000AA0000001576
++:1007F000C0203620000000000000000800210E2B61
++:10080000000000000000007F00280E230000000010
++:1008100000000000002F0223000000000000000084
++:100820000CE00000000000E10000000027000000D4
++:10083000000000000000000000600000000002A3B3
++:1008400000000001002F0223000000000000000053
++:100850000AE00000000000B300000000006000009B
++:100860000000013A81000000002044110000000057
++:100870000000000600204811000000000000000CED
++:1008800000221E300000000099800000002044116A
++:1008900000000000000000040020122D00000000F5
++:1008A00000000008002212240000000000000010D8
++:1008B00000201811000000000000000000291CE4C6
++:1008C0000000000000000000006048070000012F49
++:1008D0009B00000000204411000000000000000008
++:1008E00000204802000000009C000000002044118D
++:1008F00000000000000000000033146F0000000042
++:100900000000000100333E23000000000000000052
++:10091000D9004800000000000000000000203C0555
++:1009200000000000810000000020441100000000D1
++:100930000000000E00204811000000000000000030
++:1009400000201010000000000000E007002044110B
++:10095000000000000000000F0021022B000000003A
++:100960000000000014C00000000000CB00F8FF08E9
++:1009700000204811000000009800000000404811CD
++:10098000000000DC000000F000280E220000000043
++:10099000000000A0002F0223000000000000000063
++:1009A0000CC00000000000DA0000001100200E2D35
++:1009B0000000000000000001002F022300000000E2
++:1009C000000000000CE00000000000D50000000264
++:1009D000002F022300000000000000000CE00000D7
++:1009E000000000D400003F0000400C11000000D6C1
++:1009F00000001F0000400C11000000D600000F0096
++:100A000000200C11000000000038000900294A23D2
++:100A1000000000003F00000000280E2B0000000036
++:100A20000000000200220E2300000000000000076A
++:100A300000494A23000000DC00380F09002048115B
++:100A400000000000680000070020481100000000BE
++:100A50000000000800214A270000000000000000FC
++:100A60000020481100000000060A020000294A2464
++:100A700000000000000000000020481100000000FD
++:100A80000000000000204811000000000000A20249
++:100A9000002044110000000000FF000000280E228A
++:100AA000000000000000008000294A230000000030
++:100AB0000000002700200E2D00000000000000268E
++:100AC0000020122D0000000000000000002F008315
++:100AD00000000000000000000CE00000000000EA40
++:100AE00000000000006000000000065F0000000041
++:100AF00000400000000000EB00000000006000006B
++:100B000000000662000000070020222D0000000007
++:100B10000000000500220E2200000000001000006E
++:100B200000280E23000000000000000000292068BB
++:100B30000000000000000000003A0C02000000006D
++:100B4000000000EF00280E2300000000000000005D
++:100B500000292068000000000000001700200E2D72
++:100B6000000000000000000300210223000000003C
++:100B70000000000014E00000000000F80000000B7E
++:100B800000210228000000000000000014C0000046
++:100B9000000000F8000004000029222800000000E6
++:100BA0000000001400203628000000000000001C97
++:100BB00000210E22000000000000000014C0000010
++:100BC000000000FD0000A30C002044110000000004
++:100BD0000000000000204811000000000000001E7E
++:100BE00000210E22000000000000000014C00000E0
++:100BF0000000010B0000A30F0020441100000000C2
++:100C00000000001100200E2D000000000000000177
++:100C1000002F022300000000000000000CC00000B4
++:100C200000000104FFFFFFFF004048110000010B1E
++:100C300000000002002F022300000000000000005E
++:100C40000CC00000000001070000FFFF0040481139
++:100C50000000010B00000004002F02230000000030
++:100C6000000000000CC000000000010A000000FFAE
++:100C7000004048110000010B000000010020481155
++:100C8000000000000002C400002044110000000029
++:100C90000000001F00210E220000000000000000E4
++:100CA00014C00000000001120000001040210E20BE
++:100CB00000000000000000130020362300000000A8
++:100CC0000000001840224A20000000000000001030
++:100CD000C0424A20000001140000000000200C1156
++:100CE0000000000000000013002036230000000078
++:100CF000000000000020481100000000000000007B
++:100D000000204811000000000000000A002010111F
++:100D10000000000000000000002F0224000000007E
++:100D2000000000000CE000000000011B00000000BB
++:100D300000204811000000000000000100531224B0
++:100D400000000117FFBFFFFF00283A2E000000003F
++:100D50000000001B00210222000000000000000033
++:100D600014C000000000012E81000000002044118A
++:100D7000000000000000000D0020481100000000ED
++:100D80000000001800220E3000000000FC000000EF
++:100D900000280E2300000000810000000020441104
++:100DA000000000000000000E0020481100000000BC
++:100DB0000000000000201010000000000000E00E05
++:100DC000002044110000000007F8FF08002048112F
++:100DD000000000000000000000294A23000000007D
++:100DE0000000001C00201E2D000000000000000874
++:100DF00000214A27000000000000000000204811E8
++:100E000000000000060A020000294A240000000039
++:100E10000000000000204811000000000000000059
++:100E200000204811000000000000000000800000C9
++:100E300000000000810000000020441100000000BC
++:100E40000000000100204811000000000000217C8B
++:100E50000020441100000000008000000020481124
++:100E60000000000000000000002048060000000014
++:100E70000000000800214A270000000000000000D8
++:100E800017000000000000000004217F00604411F2
++:100E90000000068A0000001F002102300000000050
++:100EA0000000000014C000000000068900000004DB
++:100EB00000404C1100000135810000000020441169
++:100EC00000000000000000010020481100000000A8
++:100ED000000021F800204411000000000000001C68
++:100EE0000020481100000000000421F900604411B6
++:100EF0000000068A000000110021023000000000FE
++:100F00000000000014E000000000013C00000000B0
++:100F100000800000000000000000000000600000F1
++:100F20000000000B00000000006004110000031529
++:100F3000000000000020041100000000000000007C
++:100F400000600811000001B2000000000060000015
++:100F5000000001600000FFFF40280E20000000009C
++:100F600000000010C0211220000000000000FFFF60
++:100F7000402806200000000000000010C0210A20C8
++:100F800000000000000000000034146100000000B8
++:100F90000000000000741882000002BB0001A1FDE7
++:100FA00000604411000002E000003FFF002F022F0C
++:100FB00000000000000000000CC00000000001471D
++:100FC00000000000C040040000000001000000001C
++:100FD000006000000000000B000000000060041131
++:100FE00000000315000000000020041100000000B4
++:100FF0000000000000600811000001B200003FFF87
++:10100000002F022F00000000000000000CE0000094
++:10101000000000000000000000600000000001600F
++:101020000000001040210E20000000000000FFFF23
++:10103000C0281220000000000000001040211620EF
++:10104000000000000000FFFFC0681A20000002BB83
++:101050000001A1FD00604411000002E000003FFF1C
++:10106000002F022F00000000000000000CC0000054
++:101070000000015800000000C04004000000000112
++:101080000000225C0020441100000000000000016C
++:1010900000300A2F000000000000000100210A2299
++:1010A000000000000000000300384A220000000099
++:1010B0000000225600204411000000000000001A29
++:1010C00000204811000000000000A1FC0020441195
++:1010D0000000000000000001008048110000000036
++:1010E00000000000006000000000000B0000000095
++:1010F000006000000000018F0000000000600000A0
++:10110000000001A000003FFF002F022F00000000A0
++:10111000000000000CE000000000000000000000E3
++:1011200000202C0800000000000000000020241116
++:101130000000000000000000002028110000000056
++:10114000000022560020441100000000000000169C
++:1011500000204811000000000000225C0020441123
++:101160000000000000000003002048110000000003
++:1011700093800000002044110000000000000002E5
++:1011800000221E290000000000000000007048EB53
++:101190000000019C0000000000600000000002BB95
++:1011A00000000001403306200000000000000000A5
++:1011B000C03024090000000000003FFF002F022F74
++:1011C00000000000000000000CE000000000000033
++:1011D0000000000000600000000002A3000000000A
++:1011E000002F022100000000000000000AE00000C3
++:1011F0000000018100000000006000000000013AD2
++:101200000000000000400000000001869500000082
++:10121000002044110000000000000000002F022107
++:1012200000000000000000000CE00000000001864B
++:1012300000000000C0204800000000000000000185
++:10124000005306210000018292000000002044119A
++:101250000000000000000000C0604800000001978E
++:101260000001A1FD00204411000000000000001159
++:101270000020062D00000000000000000078042A75
++:10128000000002FB00000000002028090000000010
++:1012900000003FFF002F022F0000000000000000B0
++:1012A0000CC000000000017400000000C0400400F9
++:1012B000000000010000021000600411000003158E
++:1012C00000003FFF002F022F000000000000000080
++:1012D0000CE000000000019400000015C020362042
++:1012E0000000000000000016C020362000000000B2
++:1012F0003F800000002004110000000046000000B4
++:1013000000600811000001B2000000000080000031
++:10131000000000000000A1FC0020441100000000BB
++:1013200000003FFF002F022F00000000000000001F
++:101330000CC000000000019B00000001008048116B
++:1013400000000000000000210080481100000000A3
++:101350000000FFFF40280E200000000000000010E9
++:10136000C0211220000000000000FFFF40281620CE
++:101370000000000000000010C0811A2000000000E2
++:101380008100000000204411000000000000000661
++:1013900000204811000000000000000800221E305C
++:1013A000000000000000002900201A2D00000000AD
++:1013B0000000E0000020441100000000FFFBFF09D6
++:1013C00000204811000000000000000F0020222D26
++:1013D0000000000000001FFF00294A280000000054
++:1013E000000000060020222D000000000000000088
++:1013F000002920E80000000000000000002048084C
++:101400000000000000000000002048110000000063
++:10141000060A020000294A26000000000000000021
++:1014200000204811000000000000000000204811CA
++:101430000000000000000100002018110000000062
++:101440000000000800621E280000012F00000008B4
++:1014500000822228000000000002C0000020441189
++:10146000000000000000001500600E2D000001BD0E
++:101470000000001600600E2D000001BD0000C00835
++:1014800000204411000000000000001700200E2D75
++:10149000000000000000000014C00000000001B9BE
++:1014A0000000000000200411000000000000000007
++:1014B0000020480100000000390000000020481111
++:1014C00000000000000000000020481100000000A3
++:1014D000000000000080480200000000000000182A
++:1014E00000202E2D0000000000000000003B0D63D6
++:1014F000000000000000000800224A230000000055
++:101500000000001000224A23000000000000001824
++:1015100000224A2300000000000000000080480371
++:101520000000000000000000006000000000000B50
++:10153000000010000060041100000315000000000E
++:1015400000200411000000000000000000600811ED
++:10155000000001B2000000070021062F000000007B
++:101560000000001300200A2D000000000000000110
++:1015700000202C11000000000000FFFF4028222066
++:10158000000000000000000F0026222800000000DC
++:101590000000001040212620000000000000000F85
++:1015A000002626290000000000000000002028027C
++:1015B000000000000000225600204411000000003E
++:1015C0000000001B00204811000000000000000087
++:1015D000002F022100000000000000000CE00000CD
++:1015E000000001E00000225C002044110000000027
++:1015F0000000008100204811000000000000A1FC54
++:1016000000204411000000000000000100204811EB
++:10161000000000000000008000201C1100000000FD
++:1016200000000000002F0227000000000000000062
++:101630000CE00000000001DC000000000060000081
++:10164000000001E90000000100531E27000001D83E
++:101650000000000100202C11000000000000001F0D
++:1016600000280A22000000000000001F00282A2A8B
++:10167000000000000000000100530621000001D11D
++:101680000000225C00204411000000000000000265
++:1016900000304A2F000000000000A1FC002044118F
++:1016A00000000000000000010020481100000000C0
++:1016B0000000000100301E2F0000000000000000AC
++:1016C000002F022700000000000000000CE00000D6
++:1016D000000000000000000000600000000001E9C0
++:1016E0000000000100531E27000001E50000FFFF7D
++:1016F00040280E20000000000000000F00260E23EE
++:101700000000000000000010C021122000000000B6
++:101710000000000F0026122400000000000000005E
++:1017200000201411000000000000000000601811EB
++:10173000000002BB0001A1FD0020441100000000D8
++:1017400000000000002F022B00000000000000003D
++:101750000CE00000000001F8000000100022162834
++:1017600000000000FFFF0000002816250000000018
++:101770000000FFFF00281A29000000000000000000
++:10178000002948C500000000000000000020480AB1
++:10179000000000000000000000202C1100000000EC
++:1017A000000000100022162300000000FFFF0000D0
++:1017B00000281625000000000000FFFF00281A2462
++:1017C0000000000000000000002948C500000000E3
++:1017D0000000000000731503000002050000000077
++:1017E0000020180500000000000000000073152410
++:1017F0000000020500000000002D14C500000000DC
++:1018000000000000003008A20000000000000000FE
++:101810000020480200000000000000000020280214
++:101820000000000000000000002020030000000075
++:101830000000000000802404000000000000000FF1
++:1018400000210225000000000000000014C000007C
++:101850000000068900000000002B140500000000B5
++:1018600000000001009016250000000000000000AC
++:10187000006000000000000B000000000060041188
++:10188000000003150000000000200411000000000B
++:101890000000000000600811000001B200002256A4
++:1018A00000204411000000000000001A00294A2214
++:1018B0000000000000000000C02000000000000048
++:1018C00000003FFF002F022F00000000000000007A
++:1018D0000CE000000000000000000000C020040038
++:1018E000000000000000225C002044110000000005
++:1018F0000000000300384A21000000000000A1FCA5
++:1019000000204411000000000000000100204811E8
++:10191000000000000000FFFF40281220000000002F
++:1019200000000010C0211A20000000000000FFFF8E
++:1019300040280E200000000000000010C0211620EA
++:10194000000000000000000000741465000002BBED
++:101950000001A1FD00604411000002E00000000150
++:10196000003306210000000000000000002F0221CB
++:1019700000000000000000000CC000000000021980
++:1019800000003FFF002F022F0000000000000000B9
++:101990000CC000000000021200000000C040040063
++:1019A000000000010000000000600000000006428E
++:1019B000000000000040040F0000021300000000BF
++:1019C000006000000000062E000000000060000023
++:1019D0000000064200000210006004110000031520
++:1019E0000000000000600000000001A000000000F6
++:1019F000006000000000019C00000000006000008A
++:101A0000000002BB0000000000600000000002A314
++:101A1000938000000020441100000000000000003E
++:101A2000002048080000000000000000002F022FE6
++:101A300000000000000000000AE000000000023288
++:101A400000000000006000000000013A00000000FB
++:101A50000040000000000236950000000020441104
++:101A60000000000000000000002F022F0000000016
++:101A7000000000000CE00000000002360000000042
++:101A8000C0404800000002339200000000204411D2
++:101A90000000000000000000C0204800000000001E
++:101AA0000000225600204411000000000000001633
++:101AB00000204811000000000000225C00204411BA
++:101AC000000000000000000300204811000000009A
++:101AD0000000A1FC002044110000000000000001F3
++:101AE00000204811000000000001A1FD0020441169
++:101AF000000000000000000000600411000002FB74
++:101B000000000000C04004000000000100000000D0
++:101B1000006000000000062E0000A00C0020441110
++:101B20000000000000000000C0204800000000008D
++:101B300000000000C040480000000000000000005D
++:101B4000006000000000000B0000001840210A2087
++:101B50000000000000000003002F0222000000002F
++:101B6000000000000AE000000000024C0000001429
++:101B70000020222D00000000000801010029222879
++:101B800000000000000000140020362800000000C3
++:101B90000000A30C00204411000000000000000021
++:101BA000C02048000000000000000000C0204800E5
++:101BB0000000000000000000C0404800000002518A
++:101BC00000000000006000000000000B000000109A
++:101BD00000600411000003153F8000000020041184
++:101BE000000000000000000000600811000001B2C9
++:101BF0000000225C002044110000000000000003EF
++:101C000000204811000000000000000000600000FB
++:101C10000000027C0000001700201E2D00000000C4
++:101C20000000000100211E2700000000000000004D
++:101C300014E000000000026A0000001200201E2DC7
++:101C4000000000000000FFFF00281E270000000029
++:101C50000000000000341C2700000000000000000D
++:101C600012C000000000025F0000000000201C11F4
++:101C70000000000000000000002F00E50000000050
++:101C80000000000008C00000000002620000000028
++:101C900000201407000000000000001200201E2D8C
++:101CA000000000000000001000211E2700000000BE
++:101CB0000000000000341C4700000000000000008D
++:101CC00012C00000000002670000000000201C118C
++:101CD0000000000000000000002F00E600000000EF
++:101CE0000000000008C000000000026A00000000C0
++:101CF0000020180700000000000000000060000045
++:101D0000000002C100002256002044110000000023
++:101D1000000000000034202300000000000000004C
++:101D200012C00000000002720000000000342044D5
++:101D3000000000000000000012C00000000002715E
++:101D40000000001600404811000002760000001854
++:101D500000404811000002760000000000342044DA
++:101D6000000000000000000012C00000000002752A
++:101D70000000001700404811000002760000001922
++:101D800000204811000000000000A1FC00204411C8
++:101D900000000000000000010020481100000000C9
++:101DA0000001A1FD00604411000002E900003FFFB6
++:101DB000002F022F00000000000000000CC00000F7
++:101DC0000000025600000000C040040000000001B6
++:101DD0000000001040210620000000000000FFFF6E
++:101DE000C0280A20000000000000001040210E2042
++:101DF000000000000000FFFFC028122000000000CB
++:101E00000000001040211620000000000000FFFF2D
++:101E1000C0881A200000000081000000002044114A
++:101E20000000000000000001002048110000000038
++:101E300000042004006044110000068A0000000035
++:101E4000006000000000062E00000000C0600000DE
++:101E5000000002A30000000500200A2D0000000081
++:101E60000000000800220A22000000000000002BF1
++:101E700000201A2D000000000000001C00201E2D74
++:101E8000000000000000700000281E270000000075
++:101E90000000000000311CE6000000000000002AE5
++:101EA00000201A2D000000000000000C00221A265D
++:101EB0000000000000000000002F00E6000000000D
++:101EC0000000000006E00000000002920000000098
++:101ED00000201C11000000000000000000200C1178
++:101EE000000000000000002B00203623000000004E
++:101EF0000000001000201811000000000000000089
++:101F000000691CE20000012F9380000000204411B2
++:101F10000000000000000000002048070000000052
++:101F200095000000002044110000000000000000A7
++:101F3000002F022F00000000000000000CE0000055
++:101F40000000029D0000000100333E2F0000000051
++:101F500000000000D90048000000000092000000CE
++:101F6000002044110000000000000000C0204800D4
++:101F7000000000000000001C0040362700000000A8
++:101F80000000000CC0220A20000000000000002910
++:101F9000002036220000000000000028C04036204B
++:101FA000000000000000A2A4002044110000000076
++:101FB000000000090020481100000000A1000000FE
++:101FC00000204411000000000000000100804811C2
++:101FD000000000000000002100201E2D0000000075
++:101FE00000000000002C1CE30000000000000021A5
++:101FF00000203627000000000000002200201E2DD7
++:102000000000000000000000002C1CE400000000A4
++:1020100000000022002036270000000000000023FE
++:1020200000201E2D0000000000000000003120A351
++:102030000000000000000000002D1D07000000004F
++:1020400000000023002036270000000000000024CC
++:1020500000201E2D0000000000000000003120C400
++:102060000000000000000000002D1D07000000001F
++:10207000000000240080362700000000000000213E
++:10208000002036230000000000000022002036243B
++:10209000000000000000000000311CA30000000050
++:1020A0000000002300203627000000000000000090
++:1020B00000311CC40000000000000024008036270E
++:1020C000000000000000001A002036270000000079
++:1020D0000000001B00203628000000000000001750
++:1020E00000201E2D00000000000000020021022739
++:1020F000000000000000000014C00000000002DC2E
++:102100000000000000400000000002D90000001A9A
++:1021100000203627000000000000001B00203628A9
++:10212000000000000000001700201E2D000000002D
++:102130000000000200210227000000000000000053
++:1021400014E00000000002D9000000030021022773
++:10215000000000000000000014E00000000002DCAD
++:102160000000002300201E2D0000000000000000E1
++:10217000002E00E1000000000000000002C000008E
++:10218000000002DC0000002100201E2D00000000E5
++:1021900000000000003120A100000000000000004D
++:1021A000002E00E8000000000000000006C0000053
++:1021B000000002DC0000002400201E2D00000000B2
++:1021C00000000000002E00E20000000000000000FF
++:1021D00002C00000000002DC0000002200201E2DD2
++:1021E0000000000000000000003120C200000000DC
++:1021F00000000000002E00E80000000000000000C9
++:1022000006C00000000002DC0000000000600000CA
++:10221000000006650000000000600000000002B53C
++:102220000000000000400000000002DE000000008E
++:1022300000600000000002B5000000000060000027
++:102240000000065C0000000000400000000002DE0C
++:102250000000000000600000000002A70000000075
++:1022600000400000000002DE0000001A00201E2DC9
++:10227000000000000000001B0080222D0000000074
++:102280000000001000221E230000000000000000DB
++:1022900000294887000000000000000000311CA356
++:1022A000000000000000001000221E2700000000B7
++:1022B0000000000000294887000000000000001016
++:1022C00000221E230000000000000000003120C496
++:1022D000000000000000FFFF00282228000000008E
++:1022E0000000000000894907000000000000001005
++:1022F00000221E2300000000000000000029488783
++:10230000000000000000001000221E21000000005C
++:102310000000000000294847000000000000000005
++:1023200000311CA3000000000000001000221E2746
++:1023300000000000000000000029488700000000A5
++:102340000000000000311CA100000000000000108F
++:1023500000221E270000000000000000002948475E
++:10236000000000000000001000221E2300000000FA
++:1023700000000000003120C4000000000000FFFF4A
++:102380000028222800000000000000000029490762
++:10239000000000000000001000221E2100000000CC
++:1023A00000000000003120C2000000000000FFFF1C
++:1023B00000282228000000000000000000894907D2
++:1023C000000000000000001000221E23000000009A
++:1023D0000000000000294887000000000000000104
++:1023E00000220A210000000000000000003308A2C3
++:1023F000000000000000001000221E22000000006B
++:102400000000001000212222000000000000000057
++:1024100000294907000000000000000000311CA353
++:10242000000000000000001000221E270000000035
++:1024300000000000002948870000000000000001A3
++:1024400000220A210000000000000000003008A265
++:10245000000000000000001000221E22000000000A
++:1024600000000010002122220000000000000000F7
++:1024700000294907000000000000001000221E2370
++:102480000000000000000000003120C40000000037
++:102490000000FFFF002822280000000000000000CC
++:1024A000002949070000000000000000003808C5AE
++:1024B00000000000000000000030084100000000A3
++:1024C0000000000100220A220000000000000000BD
++:1024D000003308A2000000000000001000221E22AD
++:1024E0000000000000000010002122220000000077
++:1024F00000000000008949070000000000000017EC
++:102500000020222D000000000000000014C0000088
++:1025100000000318FFFFFFEF002806210000000065
++:10252000000000140020222D000000000000F8E050
++:1025300000204411000000000000000000294901B3
++:1025400000000000000000000089490100000000B8
++:102550000000000000204811000000000000000002
++:102560000020481100000000060A02000080481107
++:102570000000000000000000C0200000000000007B
++:1025800097000000C020441100000000000000007F
++:10259000C0204811000000008A0000000020441103
++:1025A00000000000000000000020481100000000B2
++:1025B0000000225C00204411000000000000000028
++:1025C000C0204800000000000000A1FC00204411D1
++:1025D0000000000000000000C020480000000000D3
++:1025E00000000000C0200400000000000000000007
++:1025F00000A0000A00000000970000000020441125
++:102600000000000000000000002048110000000051
++:102610008A000000002044110000000000000000BB
++:1026200000204811000000000000225C002044113E
++:102630000000000000000000C02048000000000072
++:102640000000A1FC00204411000000000000000078
++:10265000C02048000000000000000000C02004006E
++:10266000000000000000000000A0000A00000000C0
++:10267000970000000020441100000000000000004E
++:1026800000204811000000008A00000000204411D2
++:1026900000000000000000000020481100000000C1
++:1026A0000000225C00204411000000000000000037
++:1026B000C0204800000000000000A1FC00204411E0
++:1026C0000000000000000000C020480000000000E2
++:1026D0000001A1FD002044110000000000000000E6
++:1026E000D90048000000000000000000C0200400E5
++:1026F000000000000000000000A0000A0000000030
++:1027000000002257002044110000000000000003D8
++:10271000C0484A20000000000000225D0020441153
++:102720000000000000000000C04048000000000061
++:1027300000000000006000000000064200000000F1
++:10274000C0200800000000000000225C00204411AE
++:10275000000000000000000300384A2200000000D2
++:102760000000A1FC00204411000000000000000057
++:10277000C0204800000000000001A1FD002044111D
++:102780000000000000000000002F022200000000F6
++:10279000000000000CE0000000000000000000004D
++:1027A00040204800000000000000000140304A20A6
++:1027B0000000000000000002C0304A2000000000BD
++:1027C0000000000100530A220000034B0000003FFC
++:1027D000C0280A20000000008100000000204411F1
++:1027E000000000000000000100204811000000006F
++:1027F000000021F800204411000000000000001833
++:102800000020481100000000000421F9006044117C
++:102810000000068A000000110021023000000000C4
++:102820000000000014E00000000003540000001449
++:10283000002F022200000000000000000CC0000079
++:10284000000003640000201000204411000000007C
++:102850000000800000204811000000000001A2A438
++:102860000020441100000000000000000060480249
++:102870000000036E00002100002044110000000051
++:1028800000000000C0204800000000000000000020
++:10289000C02048000000000000000000C0204800E8
++:1028A0000000000000000000C040480000000000E0
++:1028B00000000004002F02220000000000000000C1
++:1028C0000CC000000000036A00002010002044112A
++:1028D00000000000000080000020481100000000FF
++:1028E0000001A2A40020441100000000000000002C
++:1028F000004048020000035F00000028002F022271
++:1029000000000000000000000CC00000000005BD39
++:102910000001A2A4002044110000000000000000FB
++:10292000004048020000035F0000002C0020362613
++:102930000000000000000049002018110000000005
++:102940000000003F002048110000000000000001CE
++:1029500000331A260000000000000000002F0226AD
++:1029600000000000000000000CC000000000037028
++:102970000000002C00801A2D000000000000003F25
++:10298000C0280A200000000000000015002F0222CD
++:1029900000000000000000000CE0000000000386C2
++:1029A00000000006002F02220000000000000000CE
++:1029B0000CE00000000003B100000016002F02220E
++:1029C00000000000000000000CE00000000003B563
++:1029D00000000020002F0222000000000000000084
++:1029E0000CE000000000039C0000000F002F0222FA
++:1029F00000000000000000000CE00000000003A840
++:102A000000000010002F0222000000000000000063
++:102A10000CE00000000003A80000001E002F0222AE
++:102A200000000000000000000CE000000000039027
++:102A30000000A2A4002044110000000000000000DB
++:102A400000404802000000000800000000290A229F
++:102A5000000000000000000340210E2000000000E4
++:102A60000000000CC021122000000000000800003F
++:102A7000002812240000000000000014C0221620CC
++:102A80000000000000000000002914A40000000065
++:102A90000000A2A40020441100000000000000007B
++:102AA000002948A2000000000000A1FE00204411FF
++:102AB000000000000000000000404803000000008B
++:102AC000810000000020441100000000000000010F
++:102AD0000020481100000000000021F800204411EF
++:102AE0000000000000000016002048110000000057
++:102AF000000421F9006044110000068A000000155E
++:102B000000210230000000000000000014E000007E
++:102B1000000003920000210E00204411000000007C
++:102B200000000000C020480000000000000000007D
++:102B3000C0204800000000000000A2A400204411B2
++:102B400000000000000000000040480200000000FB
++:102B5000810000000020441100000000000000017E
++:102B60000020481100000000000021F8002044115E
++:102B700000000000000000170020481100000000C5
++:102B8000000421F9006044110000068A00000003DF
++:102B900000210230000000000000000014E00000EE
++:102BA0000000039E000021080020441100000000E6
++:102BB00000000000C02048000000000000000000ED
++:102BC000C0204800000000000000A2A40020441122
++:102BD000000000000000000000404802000000006B
++:102BE0000000A2A40020441100000000000000002A
++:102BF0000020480200000000800000000020441176
++:102C0000000000000000000000204811000000004B
++:102C100081000000002044110000000000000010AE
++:102C200000204811000000000000000000200010FB
++:102C3000000000000000000014C00000000003AE0F
++:102C40000000000000400000000000000000201014
++:102C50000020441100000000000080000020481106
++:102C6000000000000001A2A40020441100000000A8
++:102C70000000000600404811000000000000201085
++:102C800000204411000000000000800000204811D6
++:102C9000000000000001A2A4002044110000000078
++:102CA00000000016006048110000036E00000000E4
++:102CB000004000000000000000000000C0200800EC
++:102CC0000000000000000000C0200C000000000018
++:102CD0000000001D00210223000000000000000091
++:102CE00014E00000000003CE810000000020441129
++:102CF000000000000000000100204811000000005A
++:102D0000000021F80020441100000000000000181D
++:102D10000020481100000000000421F90060441167
++:102D20000000068A000000110021023000000000AF
++:102D30000000000014E00000000003C000002100BB
++:102D400000204411000000000000000000204802A4
++:102D50000000000000000000002048030000000008
++:102D6000BABECAFE0020481100000000CAFEBABE6A
++:102D70000020481100000000000020100020441135
++:102D8000000000000000800000204811000000004A
++:102D90000000A2A400204411000000000000000474
++:102DA0000040481100000000000021700020441184
++:102DB00000000000000000000020480200000000A9
++:102DC0000000000000204803000000008100000017
++:102DD00000204411000000000000000A00204811FB
++:102DE00000000000000000000020001000000000B3
++:102DF0000000000014C00000000003D38C0000009D
++:102E00000020441100000000CAFEBABE0040481174
++:102E100000000000810000000020441100000000BC
++:102E200000000001002048110000000000003FFFEA
++:102E300040280A20000000008000000040280E20EA
++:102E40000000000040000000C02812200000000028
++:102E500000040000006946220000068A000000000D
++:102E6000002014100000000000000000002F0223CA
++:102E700000000000000000000CC00000000003E1A2
++:102E800000000000C0401800000003E400003FFF05
++:102E9000C0281A2000000000000400000069462637
++:102EA0000000068A0000000000201810000000004A
++:102EB00000000000002F02240000000000000000BD
++:102EC0000CC00000000003E700000000C0401C0030
++:102ED000000003EA00003FFFC0281E2000000000A1
++:102EE00000040000006946270000068A0000000078
++:102EF00000201C1000000000000000000020440220
++:102F00000000000000000000002820C500000000B4
++:102F100000000000004948E800000000A580000013
++:102F200000200811000000000000200000200C110B
++:102F30000000000083000000006044110000041243
++:102F4000000000000020440200000000000000001B
++:102F5000C0204800000000000000000040204800A1
++:102F6000000000000000001FC0210220000000003F
++:102F70000000000014C00000000003F70000201053
++:102F800000204411000000000000800000204811D3
++:102F9000000000000000FFFFC0481220000003FFF7
++:102FA000A780000000200811000000000000A00021
++:102FB00000200C110000000083000000006044119C
++:102FC0000000041200000000002044020000000085
++:102FD00000000000C02048000000000000000000C9
++:102FE000C0204800000000000000FFFFC0281220A1
++:102FF00000000000830000000020441100000000D9
++:103000000000000000304883000000008400000041
++:10301000002044110000000000000000C020480013
++:1030200000000000000000001D0000000000000083
++:103030008300000000604411000004120000000042
++:10304000C040040000000001A98000000020081119
++:10305000000000000000C00000400C11000003FA56
++:10306000AB80000000200811000000000000F8E024
++:1030700000400C11000003FAAD8000000020081190
++:10308000000000000000F88000400C11000003FA6E
++:10309000B380000000200811000000000000F3FCD5
++:1030A00000400C11000003FAAF800000002008115E
++:1030B000000000000000E00000400C11000003FAD6
++:1030C000B180000000200811000000000000F000A6
++:1030D00000400C11000003FA83000000002044119E
++:1030E00000000000000021480020481100000000FE
++:1030F00084000000002044110000000000000000D7
++:10310000C020480000000000000000001D0000007A
++:10311000000000000000000000800000000000002F
++:1031200001182000C0304620000000000000000010
++:10313000D90048000000000000000000C02004008A
++:10314000000000000000000000A0000A00000000D5
++:103150000218A000C030462000000000000000005F
++:10316000D90048000000000000000000C02004005A
++:10317000000000000000000000A0000A00000000A5
++:103180000318C000C030462000000000000000000E
++:10319000D90048000000000000000000C02004002A
++:1031A000000000000000000000A0000A0000000075
++:1031B0000418F8E0C03046200000000000000000C5
++:1031C000D90048000000000000000000C0200400FA
++:1031D000000000000000000000A0000A0000000045
++:1031E0000518F880C03046200000000000000000F4
++:1031F000D90048000000000000000000C0200400CA
++:10320000000000000000000000A0000A0000000014
++:103210000618E000C030462000000000000000005A
++:10322000D90048000000000000000000C020040099
++:10323000000000000000000000A0000A00000000E4
++:103240000718F000C0304620000000000000000019
++:10325000D90048000000000000000000C020040069
++:10326000000000000000000000A0000A00000000B4
++:103270000818F3FCC03046200000000000000000E9
++:10328000D90048000000000000000000C020040039
++:10329000000000000000000000A0000A0000000084
++:1032A0000000003000200A2D000000000000000097
++:1032B000C0290C4000000000000000300020362330
++:1032C0000000000000000000C0200400000000001A
++:1032D0000000000000A0000A0000000086000000BE
++:1032E00000204411000000000000000000404801E0
++:1032F0000000000085000000C02044110000000014
++:103300000000000000404801000000000000217C97
++:10331000002044110000000000000000C020480010
++:103320000000000000000000C02048000000000075
++:1033300000000000C02048000000000081000000E4
++:10334000002044110000000000000001002048118E
++:103350000000000000000000C02008000000000085
++:103360000000000017000000000000000004217FA2
++:10337000006044110000068A0000001F0021023096
++:10338000000000000000000014C000000000000069
++:103390000000000000404C02000004480000000053
++:1033A000C0200C000000000000000000C020100041
++:1033B0000000000000000000C02014000000000019
++:1033C00000000000C0201800000000000000000005
++:1033D000C0201C000000000000007F0000280A211F
++:1033E0000000000000004500002F02220000000045
++:1033F000000000000CE00000000004560000000087
++:10340000C0202000000000000000000017000000A5
++:10341000000000000000001000280A230000000047
++:1034200000000010002F0222000000000000000039
++:103430000CE000000000045E810000000020441148
++:103440000000000000000001002048110000000002
++:1034500000040000006946240000068A0000000005
++:1034600000400000000004638100000000204411BF
++:1034700000000000000000000020481100000000D3
++:103480000000216D00204411000000000000000039
++:103490000020480400000000000000000060480513
++:1034A0000000068F00000000002824F0000000004B
++:1034B0000000000700280A230000000000000001AF
++:1034C000002F022200000000000000000AE00000BF
++:1034D0000000046A00000000002F00C90000000086
++:1034E0000000000004E00000000004830000000071
++:1034F000004000000000049000000002002F0222A3
++:1035000000000000000000000AE000000000046F5E
++:1035100000000000002F00C90000000000000000B3
++:1035200002E00000000004830000000000400000F2
++:103530000000049000000003002F022200000000A1
++:10354000000000000AE00000000004740000000019
++:10355000002F00C900000000000000000CE0000087
++:103560000000048300000000004000000000049000
++:1035700000000004002F02220000000000000000F4
++:103580000AE000000000047900000000002F00C9DC
++:1035900000000000000000000AE0000000000483BA
++:1035A0000000000000400000000004900000000542
++:1035B000002F022200000000000000000AE00000CE
++:1035C0000000047E00000000002F00C90000000081
++:1035D0000000000006E0000000000483000000007E
++:1035E000004000000000049000000006002F0222AE
++:1035F00000000000000000000AE00000000004835A
++:1036000000000000002F00C90000000000000000C2
++:1036100008E00000000004830000000000400000FB
++:103620000000049000007F0000280A210000000034
++:1036300000004500002F02220000000000000000F2
++:103640000AE00000000000000000000800210A233A
++:10365000000000000000000014C000000000048D05
++:10366000000021690020441100000000000000005B
++:10367000C02048000000000000000000C0204800FA
++:103680000000000000000000C02048000000000012
++:10369000CAFEBABE00404811000000000000000051
++:1036A000C02044000000000000000000C020000016
++:1036B0000000000000000000C040480000000000C2
++:1036C00000007F0000280A210000000000004500E3
++:1036D000002F022200000000000000000AE00000AD
++:1036E0000000049600000000C02000000000000060
++:1036F00000000000C02000000000000000000000EA
++:10370000C0400000000000000000000000404C0825
++:103710000000045600000000C02008000000000067
++:103720000000001040210E200000000000000011E9
++:10373000402112200000000000000012402116204D
++:10374000000000000000216900204411000000007A
++:1037500000000000002048020000000000000000FF
++:1037600000210225000000000000000014E000001D
++:10377000000004A000040000C0494A20000004A189
++:10378000FFFBFFFFC0284A200000000000000000EF
++:1037900000210223000000000000000014E00000EF
++:1037A000000004AD00000000C02048000000000040
++:1037B00000000000C02048000000000000000000E1
++:1037C00000210224000000000000000014C00000DE
++:1037D00000000000810000000020441100000000F3
++:1037E0000000000C00204811000000000000000054
++:1037F00000200010000000000000000014C00000C5
++:10380000000004A9A00000000020441100000000F6
++:10381000CAFEBABE0040481100000000810000004E
++:1038200000204411000000000000000400204811A6
++:10383000000000000000216B002044110000000087
++:1038400000000000C02048100000000081000000BF
++:103850000020441100000000000000050020481175
++:10386000000000000000216C002044110000000056
++:1038700000000000C0204810000000000000000010
++:10388000002F022400000000000000000CE00000F7
++:10389000000000000000000000400000000004A73D
++:1038A00000000000C0210A2000000000000000000D
++:1038B00014C00000000004C081000000002044117A
++:1038C000000000000000000000204811000000007F
++:1038D0000000216D002044110000000000000000E5
++:1038E000C02048000000000000000000C060480048
++:1038F0000000068F0000000000400000000004C42B
++:1039000081000000002044110000000000000001C0
++:10391000002048110000000000040000C0294620DB
++:103920000000000000000000C06000000000068AE7
++:103930000000000100210222000000000000000041
++:1039400014C00000000004CB0000216900204411D5
++:103950000000000000000000C0204800000000003F
++:1039600000000000C020480000000000000000002F
++:103970000020481000000000CAFEBABE00404811F6
++:103980000000000000000000C02044000000000013
++:1039900000000000C040481000000000810000004E
++:1039A0000020441100000000000000010020481128
++:1039B00000000000000021F8002044110000000079
++:1039C0000000000E0020481100000000000421F952
++:1039D000006044110000068A00000000002102304F
++:1039E000000000000000000014C00000000004CD32
++:1039F00000002180002044110000000000000000B1
++:103A0000C02048000000000000000000C0200000AE
++:103A10000000000000000000C0204800000000007E
++:103A200000000000C02000000000000000000000B6
++:103A3000C0404800000000000000000300333E2F9B
++:103A40000000000000000001002102210000000031
++:103A50000000000014E00000000004FD0000002C45
++:103A600000200A2D000000000004000018E00C11E6
++:103A7000000004EC0000000100333E2F00000000B5
++:103A80000000216900204411000000000000000037
++:103A90000020480200000000000000000020480351
++:103AA000000000000000000800300A2200000000B2
++:103AB00000000000C02048000000000000000000DE
++:103AC000C0204800000000000000216900204411CF
++:103AD000000000000000000000204802000000007C
++:103AE0000000000000204803000000000000000863
++:103AF00000300A220000000000000000C020480042
++:103B00000000000000000000D8C04800000004E0F1
++:103B100000002169002044110000000000000000A6
++:103B200000204802000000000000000000204803C0
++:103B3000000000000000000800300A220000000021
++:103B400000000000C020480000000000000000004D
++:103B5000C0204800000000000000002D0020122DB1
++:103B6000000000000000000000290C83000000009D
++:103B70000000216900204411000000000000000046
++:103B80000020480200000000000000000020480360
++:103B9000000000000000000800300A2200000000C1
++:103BA00000000000C02048000000000000000000ED
++:103BB000C020480000000000000000110021022485
++:103BC000000000000000000014C000000000000021
++:103BD0000000000000400000000004A70000002CCE
++:103BE000C0203620000000000000002DC04036201C
++:103BF000000000000000000F002102210000000072
++:103C00000000000014C000000000050200000000D9
++:103C1000006000000000000B00000000D900000060
++:103C20000000000000000000C0400400000000018F
++:103C3000B50000000020441100000000000020003A
++:103C40000020481100000000B600000000204411D0
++:103C5000000000000000A00000204811000000004B
++:103C6000B700000000204411000000000000C00068
++:103C70000020481100000000B8000000002044119E
++:103C8000000000000000F8E00020481100000000E3
++:103C9000B900000000204411000000000000F8807E
++:103CA0000020481100000000BA000000002044116C
++:103CB000000000000000E0000020481100000000AB
++:103CC000BB00000000204411000000000000F000D4
++:103CD0000020481100000000BC000000002044113A
++:103CE000000000000000F3FC00204811000000006C
++:103CF00081000000002044110000000000000002CC
++:103D00000020481100000000000000FF00280E30D5
++:103D10000000000000000000002F0223000000004F
++:103D2000000000000CC000000000051600000000AC
++:103D3000C0200800000000000000000014C00000C7
++:103D40000000052B0000000000200C110000000006
++:103D50000000001C00203623000000000000002BA3
++:103D60000020362300000000000000290020362338
++:103D700000000000000000280020362300000000A2
++:103D8000000000170020362300000000000000257E
++:103D9000002036230000000000000026002036230B
++:103DA0000000000000000015002036230000000085
++:103DB000000000160020362300000000FFFFE00096
++:103DC00000200C110000000000000021002036231C
++:103DD0000000000000000022002036230000000048
++:103DE00000001FFF00200C11000000000000002355
++:103DF00000203623000000000000002400203623AD
++:103E000000000000F1FFFFFF00283A2E0000000034
++:103E10000000001AC0220E20000000000000000078
++:103E20000029386E000000008100000000204411CD
++:103E30000000000000000006002048110000000003
++:103E40000000002A4020362000000000870000000B
++:103E5000002044110000000000000000C0204800C5
++:103E6000000000000000A1F4002044110000000048
++:103E700000000000002048100000000000000000CA
++:103E800000200C110000000000000030002036234C
++:103E9000000000009D000000002044110000000010
++:103EA0000000001F40214A20000000009600000092
++:103EB000002044110000000000000000C020480065
++:103EC0000000000000000000C0200C000000000006
++:103ED00000000000C0201000000000000000001FD3
++:103EE00000211624000000000000000014C00000A3
++:103EF000000000000000001D00203623000000002C
++:103F00000000000300281E2300000000000000083D
++:103F10000022222300000000FFFFF00000282228DA
++:103F20000000000000000000002920E80000000060
++:103F30000000001F002036280000000000000018CC
++:103F400000211E2300000000000000200020362772
++:103F50000000000000000002002216240000000003
++:103F600000000000003014A8000000000000001E47
++:103F700000203625000000000000000300211A2464
++:103F8000000000001000000000281A2600000000B9
++:103F9000EFFFFFFF00283A2E0000000000000000A5
++:103FA000004938CE000006780000000140280A20B1
++:103FB000000000000000000640280E200000000065
++:103FC00000000300C02812200000000000000008CC
++:103FD000002112240000000000000000C020162074
++:103FE0000000000000000000C0201A2000000000B7
++:103FF000000000000021022200000000000000007C
++:1040000014C000000000056381000000002044117E
++:104010000000000000000001002048110000000026
++:104020000000225800300A240000000000040000B4
++:10403000006946220000068A000021690020441120
++:104040000000000000000000002048050000000003
++:104050000002000000294A260000000000000000C5
++:104060000020481000000000CAFEBABE002048111F
++:104070000000000000000002002F022300000000EA
++:10408000000000000CC000000000056B00000000F4
++:10409000C0201C100000000000000000C040000014
++:1040A0000000057900000002002F0223000000003C
++:1040B000000000000CC000000000056B8100000043
++:1040C0000020441100000000000000010020481101
++:1040D000000000000000225800300A240000000008
++:1040E00000040000006946220000068A000000006B
++:1040F000C0201C100000000000000000C0400000B4
++:104100000000057900000000002F022300000000DD
++:10411000000000000CC000000000056F000000005F
++:10412000C0201C000000000000000000C040000093
++:104130000000057900000004002F022300000000A9
++:10414000000000000CC000000000057781000000A6
++:104150000020441100000000000000000020481171
++:10416000000000000000216D00204411000000004C
++:1041700000000000C0204800000000000000000017
++:10418000C06048000000068F0000000000401C10C6
++:104190000000057900000000C020000000000000C1
++:1041A00000000000C040000000000000000000000F
++:1041B0000EE000000000057B000000000060000031
++:1041C000000005C600000000002F022400000000CF
++:1041D000000000000CC000000000058C0000A2B729
++:1041E00000204411000000000000000000204807EB
++:1041F00000000000810000000020441100000000C9
++:104200000000000100204811000000000004A2B6D8
++:10421000006044110000068A0000001A00212230CC
++:104220000000000000000006002226300000000010
++:1042300000042004006044110000068A0000A2C4AB
++:10424000002044110000000000000000003048E998
++:10425000000000000000000000E000000000058AEF
++:104260000000A2D100204411000000000000000066
++:1042700000404808000000000000A2D100204411C6
++:10428000000000000000000100504A28000000006B
++:1042900000000001002F02240000000000000000C8
++:1042A0000CC000000000059D0000A2BB00204411CE
++:1042B000000000000000000000204807000000008F
++:1042C00081000000002044110000000000000001F7
++:1042D00000204811000000000004A2BA0060441150
++:1042E0000000068A0000001A0021223000000000B1
++:1042F0000000000600222630000000000004200418
++:10430000006044110000068A0000A2C5002044118C
++:104310000000000000000000003048E9000000003C
++:104320000000000000E000000000059B0000A2D299
++:104330000020441100000000000000000040480878
++:10434000000000000000A2D2002044110000000084
++:104350000000000100504A28000000000000000298
++:10436000002F022400000000000000000CC000002C
++:10437000000005AE0000A2BF0020441100000000B4
++:10438000000000000020480700000000810000003D
++:10439000002044110000000000000001002048112E
++:1043A000000000000004A2BE006044110000068A64
++:1043B0000000001A0021223000000000000000066A
++:1043C0000022263000000000000420040060441198
++:1043D0000000068A0000A2C6002044110000000070
++:1043E00000000000003048E900000000000000006C
++:1043F00000E00000000005AC0000A2D30020441142
++:10440000000000000000000000404808000000001C
++:104410000000A2D3002044110000000000000001B1
++:1044200000504A28000000000000A2C300204411F0
++:10443000000000000000000000204807000000000D
++:104440008100000000204411000000000000000175
++:1044500000204811000000000004A2C200604411C6
++:104460000000068A0000001A00212230000000002F
++:104470000000000600222630000000000004200496
++:10448000006044110000068A0000A2C70020441109
++:104490000000000000000000003048E900000000BB
++:1044A0000000000000E00000000005BB0000A2D4F6
++:1044B00000204411000000000000000000404808F7
++:1044C000000000000000A2D4002044110000000001
++:1044D0000000000100504A28000000008500000094
++:1044E00000204411000000000000000000204801EE
++:1044F000000000000000304A0020441100000000CD
++:104500000100000000204811000000000000000031
++:1045100000400000000005C1A4000000C0204411BC
++:104520000000000000000000C04048000000000043
++:1045300000000000C0600000000005C60000000090
++:10454000C0400400000000010000002C00203621C3
++:104550000000000081000000002044110000000065
++:1045600000000006002048110000000000000000CC
++:10457000002F023000000000000000000CC000000E
++:10458000000005CD00000000002004110000000024
++:104590000000003000403621000005E0000000303F
++:1045A0000020062D0000000000007E0000280621EB
++:1045B0000000000000000000002F022100000000A9
++:1045C000000000000CE00000000005E08100000099
++:1045D00000204411000000000000000100204811EC
++:1045E000000000000004A092006044110000068A50
++:1045F0000000003100203630000000000004A093CD
++:10460000006044110000068A0000003200203630AD
++:10461000000000000004A2B6006044110000068AF9
++:104620000000003300203630000000000004A2BA71
++:10463000006044110000068A00000034002036307B
++:10464000000000000004A2BE006044110000068AC1
++:104650000000003500203630000000000004A2C237
++:10466000006044110000068A000000360020363049
++:104670000000000000042004006044110000068ACD
++:104680000001A2A400204411000000000000003F2F
++:1046900000204811000000000000003F00204811E9
++:1046A000000000000000003F002048110000000052
++:1046B0000000003F0020481100000000000000053D
++:1046C00000204811000000000000A1F40020441167
++:1046D0000000000000000000002048110000000061
++:1046E00088000000002044110000000000000001CC
++:1046F000002048110000000081000000002044114B
++:10470000000000000000000600204811000000002A
++:1047100000000001002F0230000000000000000037
++:104720000CE0000000000629000000300020062DEB
++:104730000000000000000000002F02210000000027
++:10474000000000000CE000000000062981000000CD
++:10475000002044110000000000000001002048116A
++:104760000000000000007E0000280621000000007C
++:1047700000000000002F02210000000000000000E7
++:104780000CE00000000006020000A092002044118E
++:10479000000000000000003100204A2D0000000051
++:1047A0000000A0930020441100000000000000322F
++:1047B00000204A2D000000000000A2B60020441195
++:1047C000000000000000003300204A2D000000001F
++:1047D0000000A2BA002044110000000000000034D4
++:1047E00000204A2D000000000000A2BE002044115D
++:1047F000000000000000003500204A2D00000000ED
++:104800000000A2C200204411000000000000003699
++:1048100000204A2D00000000000000300020062D7E
++:1048200000000000000001FF002806210000000039
++:1048300000000000002F0221000000000000000026
++:104840000CE000000000062800000000002102210A
++:10485000000000000000000014C000000000060B73
++:104860000004A003006044110000068A0000A003B9
++:10487000002044110000000000000000002048104B
++:1048800000000000000000010021062100000000DF
++:104890000000000014C00000000006100004A0107A
++:1048A000006044110000068A0000A010002044119E
++:1048B0000000000000000000002048100000000080
++:1048C000000000010021062100000000000000009F
++:1048D000002F022100000000000000000CE000009A
++:1048E000000006280004A011006044110000068AA0
++:1048F0000000A01100204411000000000000000092
++:1049000000204810000000000004A01200604411C4
++:104910000000068A0000A0120020441100000000E0
++:104920000000000000204810000000000004A01358
++:10493000006044110000068A0000A013002044110A
++:1049400000000000000000000020481000000000EF
++:104950000004A014006044110000068A0000A014A6
++:10496000002044110000000000000000002048105A
++:10497000000000000004A015006044110000068A39
++:104980000000A015002044110000000000000000FD
++:1049900000204810000000000004A0160060441130
++:1049A0000000068A0000A01600204411000000004C
++:1049B0000000000000204810000000000004A017C4
++:1049C000006044110000068A0000A0170020441176
++:1049D000000000000000000000204810000000005F
++:1049E00000042004006044110000068A0000002C2E
++:1049F0000080062D00000000FF0000000020441190
++:104A0000000000000000000000204811000000002D
++:104A1000000000010020481100000000000000021A
++:104A20000080481100000000000000000EE00000BF
++:104A30000000063A000000300020062D00000000B3
++:104A40000000000200280621000000000000000015
++:104A5000002F022100000000000000000CE0000018
++:104A60000000063881000000002044110000000012
++:104A70000000000100204811000000000004200494
++:104A8000006044110000068A000010000020081198
++:104A9000000000000000002B002036220000000073
++:104AA00000000000006000000000063E0000000062
++:104AB00000600000000005C69800000000204411BE
++:104AC000000000000000000000804811000000000D
++:104AD00000000000C06000000000063E0000000072
++:104AE000C0400400000000010000A2A40020441106
++:104AF000000000000000002200204811000000001B
++:104B000089000000002044110000000000000001A6
++:104B1000004048110000062A9700000000204411C0
++:104B2000000000000000000000204811000000000C
++:104B30008A00000000204411000000000000000076
++:104B4000004048110000062A00000000006000003C
++:104B50000000065900002010002044110000000051
++:104B60000000800000204811000000000001A2A405
++:104B7000C020441100000000000000160060481131
++:104B80000000036E0000201000204411000000000F
++:104B9000000100000020481100000000810000001A
++:104BA0000020441100000000000000010020481116
++:104BB000000000000000217C0020441100000000E3
++:104BC000098000000020481100000000FFFFFFFFE7
++:104BD00000204811000000000000000000204811E3
++:104BE00000000000000000001700000000000000AE
++:104BF0000004217F006044110000068A0000001FAD
++:104C000000210230000000000000000014C000007D
++:104C1000000000000000000400404C11000006539A
++:104C2000000000000040000000000000000000172D
++:104C300000201E2D000000000000000400291E2797
++:104C40000000000000000017008036270000000070
++:104C50000000001700201E2D00000000FFFFFFFBDA
++:104C600000281E27000000000000001700803627E3
++:104C7000000000000000001700201E2D00000000B2
++:104C80000000000800291E27000000000000001797
++:104C900000803627000000000000001700201E2DB5
++:104CA00000000000FFFFFFF700281E2700000000A3
++:104CB00000000017008036270000000000002010D0
++:104CC0000020441100000000000080000020481176
++:104CD000000000000001A2A4002044110000000018
++:104CE00000000016006048110000036E0000201054
++:104CF00000204411000000000001000000204811C5
++:104D0000000000000000217C002044110000000091
++:104D1000018000000020481100000000FFFFFFFF9D
++:104D20000020481100000000000000000020481191
++:104D3000000000000000000017000000000000005C
++:104D4000810000000020441100000000000000016C
++:104D500000204811000000000004217F0060441181
++:104D60000000068A0000001F002102300000000041
++:104D70000000000014C000000000068900000010C0
++:104D800000404C110000066F00000000C02004002D
++:104D9000000000000000000038C00000000000001B
++:104DA0000000001D00200A2D000000000000001E71
++:104DB00000200E2D000000000000001F0020122D1A
++:104DC00000000000000000200020162D0000000060
++:104DD00000002169002044110000000000000000D4
++:104DE00000204804000000000000000000204805EA
++:104DF000000000000000000000204801000000004A
++:104E0000CAFEBABE002048110000000000000004E5
++:104E1000003012240000000000000000002F006499
++:104E200000000000000000000CC000000000068828
++:104E30000000000300281A22000000000000000803
++:104E40000022122200000000FFFFF00000281224C0
++:104E50000000000000000000002910C40000000055
++:104E60000000001F00403624000000000000000089
++:104E70000080000000000000000000001AC00000D8
++:104E80000000068A9F00000000204411000000007E
++:104E9000CAFEBABE00204811000000000000000059
++:104EA0001AE000000000068D0000000000800000F5
++:104EB00000000000000000001AC000000000068F83
++:104EC0009E0000000020441100000000CAFEBABE8F
++:104ED0000020481100000000000000001AE000005F
++:104EE00000000692000000000080000000000000AA
++:104EF00000000000006000000000000B0000100037
++:104F000000600411000003150000000000200411DF
++:104F1000000000000000000000600811000001B265
++:104F20000000225C0020441100000000000000038B
++:104F3000002048110000000000002256002044110B
++:104F4000000000000000001B0020481100000000CD
++:104F50000000A1FC0020441100000000000000013E
++:104F600000204811000000000001A1FDC0204411F4
++:104F7000000000000000002100201E2D00000000A5
++:104F80000000001000221E27000000000000002486
++:104F90000020222D000000000000FFFF0028222832
++:104FA0000000000000000000002949070000000088
++:104FB0000000000000204811000000000000002256
++:104FC0000020222D000000000000FFFF0028222802
++:104FD0000000000000000000002949070000000058
++:104FE0000000000000204811000000000000002325
++:104FF00000201E2D000000000000001000221E27CF
++:105000000000000000000000002949070000000027
++:1050100000000000004048110000000000000000F7
++:105020000000000000000000000000000000000080
++:105030000000000000000000000000000000000070
++:105040000000000000000000000000000000000060
++:105050000000000000000000000000000000000050
++:105060000000000000000000000000000000000040
++:105070000000000000000000000000000000000030
++:105080000000000000000000000000000000000020
++:105090000000000000000000000000000000000010
++:1050A0000000000000000000000000000000000000
++:1050B00000000000000000000000000000000000F0
++:1050C00000000000000000000000000000000000E0
++:1050D00000000000000000000000000000000000D0
++:1050E00000000000000000000000000000000000C0
++:1050F00000000000000000000000000000000000B0
++:10510000000000000000000000000000000000009F
++:10511000000000000000000000000000000000008F
++:10512000000000000000000000000000000000007F
++:10513000000000000000000000000000000000006F
++:10514000000000000000000000000000000000005F
++:10515000000000000000000000000000000000004F
++:10516000000000000000000000000000000000003F
++:10517000000000000000000000000000000000002F
++:10518000000000000000000000000000000000001F
++:10519000000000000000000000000000000000000F
++:1051A00000000000000000000000000000000000FF
++:1051B00000000000000000000000000000000000EF
++:1051C00000000000000000000000000000000000DF
++:1051D00000000000000000000000000000000000CF
++:1051E00000000000000000000000000000000000BF
++:1051F00000000000000000000000000000000000AF
++:10520000000000000000000000000000000000009E
++:10521000000000000000000000000000000000008E
++:10522000000000000000000000000000000000007E
++:10523000000000000000000000000000000000006E
++:10524000000000000000000000000000000000005E
++:10525000000000000000000000000000000000004E
++:10526000000000000000000000000000000000003E
++:10527000000000000000000000000000000000002E
++:10528000000000000000000000000000000000001E
++:10529000000000000000000000000000000000000E
++:1052A00000000000000000000000000000000000FE
++:1052B000014204FF05BD02500000000001C3016867
++:1052C000043F05BD00000000022502090250015103
++:1052D000000000000223024502A00241000000007D
++:1052E00003D705BD05BD05BD000000000646064705
++:1052F000031F05BD0000000005BD05C203200340DB
++:1053000000000000032A0282034203340000000070
++:1053100005BD05BD05BD05BD0000000005BD054E70
++:1053200005BD05BD0000000003BA05BD04B8034477
++:10533000000000000497044D043D05BD000000007E
++:1053400004CD05BD044104DA00000000044D05044D
++:10535000035103750000000005BD05BD05BD05BD79
++:105360000000000005BD05BD05BD05BD0000000035
++:1053700005BD05BD063C05C40000000005BD05BD1A
++:10538000000705BD0000000005BD05BD05BD05BD4C
++:105390000000000005BD05BD05BD05BD0000000005
++:1053A00003F803ED0408040600000000040E040ADC
++:1053B000040C041000000000041C04180424042041
++:1053C00000000000042C0428043404300000000015
++:1053D00005BD05BD043805BD0000000005BD05BDC7
++:1053E00005BD05BD0000000005BD05BD05BD05BD31
++:1053F000000000000002067606940006000000008F
++:00000001FF
+diff --git a/firmware/radeon/RV630_pfp.bin.ihex b/firmware/radeon/RV630_pfp.bin.ihex
+new file mode 100644
+index 0000000..f55292c
+--- /dev/null
++++ b/firmware/radeon/RV630_pfp.bin.ihex
+@@ -0,0 +1,145 @@
++:1000000000CA040000A00000007E828B007C038BED
++:10001000008001B8007C038B00D4401E00EE001E5F
++:1000200000CA040000A00000007E828B00C41838C3
++:1000300000CA240000CA2800009581A800C41C3A08
++:1000400000C3C00000CA080000CA0C00007C744B4A
++:1000500000C200050099C00000C41C3A007C744C2A
++:1000600000C0FFF000042C0400309002007D250049
++:1000700000351402007D350B00255403007CD5802B
++:1000800000259C030095C00400D5001B007EDDC147
++:10009000007D9D8000D6801B00D5801B00D4401EB3
++:1000A00000D5401E00D6401E00D6801E00D4801E03
++:1000B00000D4C01E009783D300D5C01E00CA08001C
++:1000C0000080001A00CA0C0000E4011E00D4001ECB
++:1000D0000080000C00C4183800E4013E00D4001E6B
++:1000E0000080000C00C4183800D4401E00EE001E32
++:1000F00000CA040000A00000007E828B00E4011E04
++:1001000000D4001E00D4401E00EE001E00CA0400F1
++:1001100000A00000007E828B00E4013E00D4001E9F
++:1001200000D4401E00EE001E00CA040000A0000023
++:10013000007E828B00CA180000D4401E00D5801EAD
++:100140000080005300D4007500D4401E00CA08008F
++:1001500000CA0C0000CA100000D4801900D4C018D6
++:1001600000D5001700D4801E00D4C01E00D5001E8C
++:1001700000E2001E00CA040000A00000007E828B86
++:1001800000CA080000D4806000D4401E0080000037
++:1001900000D4801E00CA080000D4806100D4401E34
++:1001A0000080000000D4801E00CA080000CA0C00B5
++:1001B00000D4401E00D4801600D4C01600D4801E87
++:1001C000008001B800D4C01E00C6084300CA0C005D
++:1001D00000CA10000094800400CA140000E420F358
++:1001E00000D4201300D5606500D4E01C00D5201C8D
++:1001F00000D5601C008000000006200100C60843F6
++:1002000000CA0C0000CA1000009483F700CA140052
++:1002100000E420F30080007900D4201300C60843D6
++:1002200000CA0C0000CA1000009883EF00CA140036
++:1002300000D400640080008D0000000000C414326F
++:1002400000C6184300C4082F0095400500C40C30B8
++:1002500000D4401E0080000000EE001E009583F5D3
++:1002600000C4103100D4403300D5206500D4A01C58
++:1002700000D4E01C00D5201C00E4015E00D4001E68
++:10028000008000000006200100CA1800000A2001BA
++:1002900000D6007600C408360098800700C61045D6
++:1002A0000095011000D4001F00D46062008000009F
++:1002B00000D4206200CC383500CC1433008401BB5C
++:1002C00000D4007200D5401E0080000000EE001E29
++:1002D00000E2001A008401BB00E2001A00CC104BBF
++:1002E00000CC0447002C9401007D098B0098400548
++:1002F000007D15CB00D4001A008001B800D4006D39
++:100300000034440100CC0C480098403A00CC2C4A00
++:100310000095800400CC0449008001B800D4001A84
++:1003200000D4C01A00282801008400F000CC10037B
++:100330000098801B0004380C008400F000CC1003EF
++:100340000098801700043808008400F000CC1003E7
++:100350000098801300043804008400F000CC1003DF
++:100360000098801400CC104C009A800900CC144DE9
++:10037000009840DC00D4006D00CC184800D5001A6D
++:1003800000D5401A008000C900D5801A0096C0D55B
++:1003900000D4006D008001B800D4006E009AC00344
++:1003A00000D4006D00D4006E0080000000EC007FDF
++:1003B000009AC0CC00D4006D008001B800D4006E5B
++:1003C00000CC140300CC180300CC1C03007D910367
++:1003D000007DD583007D190C0035CC1F0035701FC2
++:1003E000007CF0CB007CD08B00880000007E8E8BE0
++:1003F0000095C00400D4006E008001B800D4001A3B
++:1004000000D4C01A00CC080300CC0C0300CC1003AD
++:1004100000CC140300CC180300CC1C0300CC240334
++:1004200000CC28030035C41F0036B01F007C704B81
++:100430000034F01F007C704B0035701F007C704B47
++:10044000007D8881007DCCC1007E5101007E9541F8
++:10045000007C9082007CD4C2007C848B009AC00314
++:10046000007C8C8B002C88010098809E00D4006D4D
++:100470000098409C00D4006E00CC084C00CC0C4D81
++:1004800000CC104800D4801A00D4C01A00800101AA
++:1004900000D5001A00CC083200D40032009482D972
++:1004A00000CA0C0000D4401E0080000000D4001ED2
++:1004B00000E4011E00D4001E00CA080000CA0C009F
++:1004C00000CA100000D4401E00CA140000D4801ED0
++:1004D00000D4C01E00D5001E00D5401E00D54034FB
++:1004E0000080000000EE001E0028040400E2001A54
++:1004F00000E2001A00D4401A00CA380000CC0803F9
++:1005000000CC0C0300CC0C0300CC0C03009882BD83
++:1005100000000000008401BB00D7A06F0080000035
++:1005200000EE001F00CA040000C2FF0000CC083427
++:1005300000C13FFF007C74CB007CC90B007D010F24
++:10054000009902B0007C738B008401BB00D7A06FC0
++:100550000080000000EE001F00CA080000281900FB
++:10056000007D898B009580140028140400CA0C00BB
++:1005700000CA100000CA1C0000CA240000E2001FCC
++:1005800000D4C01A00D5001A00D5401A00CC1803B8
++:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
++:1005A000007D9C4700984297000000000080016198
++:1005B00000D4C01A00D4401E00D4801E0080000069
++:1005C00000EE001E00E4011E00D4001E00D4401EF8
++:1005D00000EE001E00CA040000A00000007E828B16
++:1005E00000E4013E00D4001E00D4401E00EE001EB8
++:1005F00000CA040000A00000007E828B00CA080030
++:1006000000248C06000CCC060098C00600CC104ECE
++:100610000099000400D4007300E4011E00D4001E01
++:1006200000D4401E00D4801E0080000000EE001E9A
++:1006300000CA080000CA0C000034D01800251001C0
++:100640000095002100C17FFF00CA100000CA1400FD
++:1006500000CA180000D4801D00D4C01D007DB18BDD
++:1006600000C1420200C2C00100D5801D0034DC0E72
++:10067000007D5D4C007F734C00D7401E00D5001EEE
++:1006800000D5401E00C1420000C2C00000099C010C
++:100690000031DC10007F5F4C007F734C00042802A7
++:1006A000007D838000D5A86F00D5806600D7401EEE
++:1006B00000EC005E00C8240200C82402008001B8DB
++:1006C00000D6007600D4401E00D4801E00D4C01E88
++:1006D0000080000000EE001E0080000000EE001F01
++:1006E00000D4001F0080000000D4001F00D4001FB1
++:1006F0000088000000D4001F00000000000000007F
++:1007000000000000000000000000000000000000E9
++:1007100000000000000000000000000000000000D9
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:1008000000010171000201780003008F0004007FE5
++:10081000000500030006003F000700320008012C1D
++:1008200000090046000A0036001001B6001700A2B9
++:100830000022013A00230149002000B400240125D0
++:100840000027004D0028006A002A0060002B00529B
++:10085000002F0065003200870034017F003C015604
++:10086000003F00720041018C0044012E00550173CD
++:100870000056017A0060000B00610034006200380D
++:1008800000630038006400380065003800660038F6
++:10089000006700380068003A00690041006A0048BB
++:1008A000006B0048006C0048006D0048006E004876
++:1008B000006F00480000000600000006000000066F
++:1008C0000000000600000006000000060000000610
++:1008D0000000000600000006000000060000000600
++:1008E00000000006000000060000000600000006F0
++:1008F00000000006000000060000000600000006E0
++:00000001FF
+diff --git a/firmware/radeon/RV635_me.bin.ihex b/firmware/radeon/RV635_me.bin.ihex
+new file mode 100644
+index 0000000..ba3a7e6
+--- /dev/null
++++ b/firmware/radeon/RV635_me.bin.ihex
+@@ -0,0 +1,1345 @@
++:1000000000000000C020040000000000000000000C
++:1000100000A0000A000000000000FFFF00284621A9
++:100020000000000000000000D900480000000000AF
++:1000300000000000C02004000000000000000000DC
++:1000400000A0000A000000000000000000E0000026
++:100050000000000000010000C02946200000000050
++:1000600000000000D900480000000000000000006F
++:10007000C0200400000000000000000000A0000AF2
++:10008000000000008100000000204411000000007A
++:1000900000000001002048110000000000042004BE
++:1000A000006044110000068A0000000000600000AB
++:1000B0000000062E00000000006000000000064264
++:1000C00000000000C02008000000000000000F0039
++:1000D000002816220000000000000008002116255C
++:1000E000000000000000001800203625000000007D
++:1000F0008D000000002044110000000000000004FA
++:10010000002F022500000000000000000CE00000AD
++:1001100000000018004120000040481100000019B4
++:100120000042200000204811000000008E00000066
++:1001300000204411000000000000002800204A2D8B
++:1001400000000000900000000020441100000000AA
++:100150000000000000204805000000000000000C26
++:1001600000211622000000000000000300281625D0
++:10017000000000000000001900211A220000000009
++:100180000000000400281A26000000000000000003
++:10019000002914C5000000000000001900203625C9
++:1001A0000000000000000000003A140200000000FF
++:1001B00000000016002116250000000000000003CA
++:1001C00000281625000000000000001700200E2D5A
++:1001D00000000000FFFFFFFC00280E2300000000CD
++:1001E00000000000002914A3000000000000001718
++:1001F00000203625000000000000800000280E22AC
++:10020000000000000000000700220E230000000094
++:10021000000000000029386E0000000020000000EF
++:1002200000280E22000000000000000600210E231E
++:1002300000000000000000000029386E00000000EF
++:100240000000000000220222000000000000000068
++:1002500014E0000000000038000000002EE0000064
++:1002600000000035000000002CE000000000003716
++:100270000000000000400E2D0000003900000008C2
++:1002800000200E2D00000000000000090040122D8B
++:10029000000000460000000100400E2D0000003963
++:1002A00000000000C0200C0000000000003FFFFC28
++:1002B0000028122300000000000000020022122487
++:1002C000000000000000001F00211E2300000000AD
++:1002D0000000000014E000000000003E00000008E4
++:1002E00000401C11000000410000000D00201E2DE8
++:1002F000000000000000000F00281E270000000082
++:100300000000000300221E27000000007FC0000044
++:1003100000281A23000000000000001400211A2603
++:10032000000000000000000100331A260000000059
++:100330000000000800221A26000000000000000053
++:1003400000290CC700000000000000270020362410
++:100350000000000000007F000028122100000000C3
++:1003600000001400002F0224000000000000000024
++:100370000CE000000000004B0000000100290E23EB
++:10038000000000000000000E0020362300000000E6
++:100390000000E0000020441100000000FFF8000011
++:1003A00000294A230000000000000000003A2C024F
++:1003B000000000000000000200220E2B00000000E0
++:1003C000FC00000000280E23000000000000000FC9
++:1003D000002036230000000000001FFF00294A23F0
++:1003E000000000000000002700204A2D000000004F
++:1003F000000000000020481100000000000000295B
++:1004000000200E2D00000000060A020000294A23E9
++:100410000000000000000000002048110000000063
++:100420000000000000204811000000000000000152
++:1004300000210222000000000000000014E0000083
++:1004400000000061000000002EE000000000005FDE
++:10045000000000002CE000000000005E0000000032
++:1004600000400E2D000000620000000100400E2D33
++:10047000000000620000000A00200E2D00000000B5
++:100480000000000B0040122D0000006A0000000078
++:10049000C0200C0000000000003FFFFC00281223D9
++:1004A00000000000000000020022122400000000F2
++:1004B0007FC0000000281623000000000000001488
++:1004C0000021162500000000000000010033162561
++:1004D000000000008000000000280E230000000043
++:1004E0000000000000290CA3000000003FFFFC00FA
++:1004F00000290E23000000000000001F00211E2321
++:10050000000000000000000014E000000000006D8A
++:100510000000010000401C11000000700000000DF0
++:1005200000201E2D00000000000000F000281E2703
++:10053000000000000000000400221E270000000050
++:100540008100000000204411000000000000000DA8
++:100550000020481100000000FFFFF0FF00281A30C3
++:10056000000000000000A02800204411000000004E
++:1005700000000000002948E6000000000000A0186C
++:1005800000204411000000003FFFFFFF00284A2325
++:10059000000000000000A010002044110000000036
++:1005A00000000000002048040000000000000030AF
++:1005B0000020162D00000000000000020029162572
++:1005C0000000000000000030002036250000000080
++:1005D000000000250020162D000000000000000093
++:1005E000002F00A300000000000000000CC000006D
++:1005F00000000083000000260020162D00000000EF
++:1006000000000000002F00A4000000000000000017
++:100610000CC000000000008400000000004000004A
++:100620000000008A000000250020362300000000A2
++:100630000000002600203624000000000000001703
++:1006400000201E2D000000000000000200210227F3
++:10065000000000000000000014E000000000008A1C
++:1006600000000000006000000000066500000000BF
++:1006700000600000000006590000000200210E2268
++:10068000000000000000000014C000000000008D09
++:1006900000000012C040362000000093000000005F
++:1006A0002EE0000000000091000000002CE000009F
++:1006B000000000900000000200400E2D000000929B
++:1006C0000000000300400E2D000000920000000C0E
++:1006D00000200E2D00000000000000120020362334
++:1006E000000000000000000300210E2200000000B6
++:1006F0000000000014C00000000000980000A00CE2
++:10070000002044110000000000000000C02048004C
++:100710000000000000000000C0404800000000A0F1
++:100720000000A00C002044110000000000000000A8
++:100730000020481100000000000000002EE0000032
++:100740000000009E000000002CE000000000009D62
++:100750000000000200400E2D0000009F000000037A
++:1007600000400E2D0000009F0000000C00200E2D08
++:10077000000000000000000000204803000000000E
++:1007800000000000003A0C0200000000003F0000E2
++:1007900000280E23000000000000001000210E239E
++:1007A00000000000000000110020362300000000BF
++:1007B0000000001E0021022B0000000000000000CD
++:1007C00014C00000000000A700000016C020362062
++:1007D000000000000000001F0021022B00000000AC
++:1007E0000000000014C00000000000AA0000001576
++:1007F000C0203620000000000000000800210E2B61
++:10080000000000000000007F00280E230000000010
++:1008100000000000002F0223000000000000000084
++:100820000CE00000000000E10000000027000000D4
++:10083000000000000000000000600000000002A3B3
++:1008400000000001002F0223000000000000000053
++:100850000AE00000000000B300000000006000009B
++:100860000000013A81000000002044110000000057
++:100870000000000600204811000000000000000CED
++:1008800000221E300000000099800000002044116A
++:1008900000000000000000040020122D00000000F5
++:1008A00000000008002212240000000000000010D8
++:1008B00000201811000000000000000000291CE4C6
++:1008C0000000000000000000006048070000012F49
++:1008D0009B00000000204411000000000000000008
++:1008E00000204802000000009C000000002044118D
++:1008F00000000000000000000033146F0000000042
++:100900000000000100333E23000000000000000052
++:10091000D9004800000000000000000000203C0555
++:1009200000000000810000000020441100000000D1
++:100930000000000E00204811000000000000000030
++:1009400000201010000000000000E007002044110B
++:10095000000000000000000F0021022B000000003A
++:100960000000000014C00000000000CB00F8FF08E9
++:1009700000204811000000009800000000404811CD
++:10098000000000DC000000F000280E220000000043
++:10099000000000A0002F0223000000000000000063
++:1009A0000CC00000000000DA0000001100200E2D35
++:1009B0000000000000000001002F022300000000E2
++:1009C000000000000CE00000000000D50000000264
++:1009D000002F022300000000000000000CE00000D7
++:1009E000000000D400003F0000400C11000000D6C1
++:1009F00000001F0000400C11000000D600000F0096
++:100A000000200C11000000000038000900294A23D2
++:100A1000000000003F00000000280E2B0000000036
++:100A20000000000200220E2300000000000000076A
++:100A300000494A23000000DC00380F09002048115B
++:100A400000000000680000070020481100000000BE
++:100A50000000000800214A270000000000000000FC
++:100A60000020481100000000060A020000294A2464
++:100A700000000000000000000020481100000000FD
++:100A80000000000000204811000000000000A20249
++:100A9000002044110000000000FF000000280E228A
++:100AA000000000000000008000294A230000000030
++:100AB0000000002700200E2D00000000000000268E
++:100AC0000020122D0000000000000000002F008315
++:100AD00000000000000000000CE00000000000EA40
++:100AE00000000000006000000000065F0000000041
++:100AF00000400000000000EB00000000006000006B
++:100B000000000662000000070020222D0000000007
++:100B10000000000500220E2200000000001000006E
++:100B200000280E23000000000000000000292068BB
++:100B30000000000000000000003A0C02000000006D
++:100B4000000000EF00280E2300000000000000005D
++:100B500000292068000000000000001700200E2D72
++:100B6000000000000000000300210223000000003C
++:100B70000000000014E00000000000F80000000B7E
++:100B800000210228000000000000000014C0000046
++:100B9000000000F8000004000029222800000000E6
++:100BA0000000001400203628000000000000001C97
++:100BB00000210E22000000000000000014C0000010
++:100BC000000000FD0000A30C002044110000000004
++:100BD0000000000000204811000000000000001E7E
++:100BE00000210E22000000000000000014C00000E0
++:100BF0000000010B0000A30F0020441100000000C2
++:100C00000000001100200E2D000000000000000177
++:100C1000002F022300000000000000000CC00000B4
++:100C200000000104FFFFFFFF004048110000010B1E
++:100C300000000002002F022300000000000000005E
++:100C40000CC00000000001070000FFFF0040481139
++:100C50000000010B00000004002F02230000000030
++:100C6000000000000CC000000000010A000000FFAE
++:100C7000004048110000010B000000010020481155
++:100C8000000000000002C400002044110000000029
++:100C90000000001F00210E220000000000000000E4
++:100CA00014C00000000001120000001040210E20BE
++:100CB00000000000000000130020362300000000A8
++:100CC0000000001840224A20000000000000001030
++:100CD000C0424A20000001140000000000200C1156
++:100CE0000000000000000013002036230000000078
++:100CF000000000000020481100000000000000007B
++:100D000000204811000000000000000A002010111F
++:100D10000000000000000000002F0224000000007E
++:100D2000000000000CE000000000011B00000000BB
++:100D300000204811000000000000000100531224B0
++:100D400000000117FFBFFFFF00283A2E000000003F
++:100D50000000001B00210222000000000000000033
++:100D600014C000000000012E81000000002044118A
++:100D7000000000000000000D0020481100000000ED
++:100D80000000001800220E3000000000FC000000EF
++:100D900000280E2300000000810000000020441104
++:100DA000000000000000000E0020481100000000BC
++:100DB0000000000000201010000000000000E00E05
++:100DC000002044110000000007F8FF08002048112F
++:100DD000000000000000000000294A23000000007D
++:100DE0000000001C00201E2D000000000000000874
++:100DF00000214A27000000000000000000204811E8
++:100E000000000000060A020000294A240000000039
++:100E10000000000000204811000000000000000059
++:100E200000204811000000000000000000800000C9
++:100E300000000000810000000020441100000000BC
++:100E40000000000100204811000000000000217C8B
++:100E50000020441100000000008000000020481124
++:100E60000000000000000000002048060000000014
++:100E70000000000800214A270000000000000000D8
++:100E800017000000000000000004217F00604411F2
++:100E90000000068A0000001F002102300000000050
++:100EA0000000000014C000000000068900000004DB
++:100EB00000404C1100000135810000000020441169
++:100EC00000000000000000010020481100000000A8
++:100ED000000021F800204411000000000000001C68
++:100EE0000020481100000000000421F900604411B6
++:100EF0000000068A000000110021023000000000FE
++:100F00000000000014E000000000013C00000000B0
++:100F100000800000000000000000000000600000F1
++:100F20000000000B00000000006004110000031529
++:100F3000000000000020041100000000000000007C
++:100F400000600811000001B2000000000060000015
++:100F5000000001600000FFFF40280E20000000009C
++:100F600000000010C0211220000000000000FFFF60
++:100F7000402806200000000000000010C0210A20C8
++:100F800000000000000000000034146100000000B8
++:100F90000000000000741882000002BB0001A1FDE7
++:100FA00000604411000002E000003FFF002F022F0C
++:100FB00000000000000000000CC00000000001471D
++:100FC00000000000C040040000000001000000001C
++:100FD000006000000000000B000000000060041131
++:100FE00000000315000000000020041100000000B4
++:100FF0000000000000600811000001B200003FFF87
++:10100000002F022F00000000000000000CE0000094
++:10101000000000000000000000600000000001600F
++:101020000000001040210E20000000000000FFFF23
++:10103000C0281220000000000000001040211620EF
++:10104000000000000000FFFFC0681A20000002BB83
++:101050000001A1FD00604411000002E000003FFF1C
++:10106000002F022F00000000000000000CC0000054
++:101070000000015800000000C04004000000000112
++:101080000000225C0020441100000000000000016C
++:1010900000300A2F000000000000000100210A2299
++:1010A000000000000000000300384A220000000099
++:1010B0000000225600204411000000000000001A29
++:1010C00000204811000000000000A1FC0020441195
++:1010D0000000000000000001008048110000000036
++:1010E00000000000006000000000000B0000000095
++:1010F000006000000000018F0000000000600000A0
++:10110000000001A000003FFF002F022F00000000A0
++:10111000000000000CE000000000000000000000E3
++:1011200000202C0800000000000000000020241116
++:101130000000000000000000002028110000000056
++:10114000000022560020441100000000000000169C
++:1011500000204811000000000000225C0020441123
++:101160000000000000000003002048110000000003
++:1011700093800000002044110000000000000002E5
++:1011800000221E290000000000000000007048EB53
++:101190000000019C0000000000600000000002BB95
++:1011A00000000001403306200000000000000000A5
++:1011B000C03024090000000000003FFF002F022F74
++:1011C00000000000000000000CE000000000000033
++:1011D0000000000000600000000002A3000000000A
++:1011E000002F022100000000000000000AE00000C3
++:1011F0000000018100000000006000000000013AD2
++:101200000000000000400000000001869500000082
++:10121000002044110000000000000000002F022107
++:1012200000000000000000000CE00000000001864B
++:1012300000000000C0204800000000000000000185
++:10124000005306210000018292000000002044119A
++:101250000000000000000000C0604800000001978E
++:101260000001A1FD00204411000000000000001159
++:101270000020062D00000000000000000078042A75
++:10128000000002FB00000000002028090000000010
++:1012900000003FFF002F022F0000000000000000B0
++:1012A0000CC000000000017400000000C0400400F9
++:1012B000000000010000021000600411000003158E
++:1012C00000003FFF002F022F000000000000000080
++:1012D0000CE000000000019400000015C020362042
++:1012E0000000000000000016C020362000000000B2
++:1012F0003F800000002004110000000046000000B4
++:1013000000600811000001B2000000000080000031
++:10131000000000000000A1FC0020441100000000BB
++:1013200000003FFF002F022F00000000000000001F
++:101330000CC000000000019B00000001008048116B
++:1013400000000000000000210080481100000000A3
++:101350000000FFFF40280E200000000000000010E9
++:10136000C0211220000000000000FFFF40281620CE
++:101370000000000000000010C0811A2000000000E2
++:101380008100000000204411000000000000000661
++:1013900000204811000000000000000800221E305C
++:1013A000000000000000002900201A2D00000000AD
++:1013B0000000E0000020441100000000FFFBFF09D6
++:1013C00000204811000000000000000F0020222D26
++:1013D0000000000000001FFF00294A280000000054
++:1013E000000000060020222D000000000000000088
++:1013F000002920E80000000000000000002048084C
++:101400000000000000000000002048110000000063
++:10141000060A020000294A26000000000000000021
++:1014200000204811000000000000000000204811CA
++:101430000000000000000100002018110000000062
++:101440000000000800621E280000012F00000008B4
++:1014500000822228000000000002C0000020441189
++:10146000000000000000001500600E2D000001BD0E
++:101470000000001600600E2D000001BD0000C00835
++:1014800000204411000000000000001700200E2D75
++:10149000000000000000000014C00000000001B9BE
++:1014A0000000000000200411000000000000000007
++:1014B0000020480100000000390000000020481111
++:1014C00000000000000000000020481100000000A3
++:1014D000000000000080480200000000000000182A
++:1014E00000202E2D0000000000000000003B0D63D6
++:1014F000000000000000000800224A230000000055
++:101500000000001000224A23000000000000001824
++:1015100000224A2300000000000000000080480371
++:101520000000000000000000006000000000000B50
++:10153000000010000060041100000315000000000E
++:1015400000200411000000000000000000600811ED
++:10155000000001B2000000070021062F000000007B
++:101560000000001300200A2D000000000000000110
++:1015700000202C11000000000000FFFF4028222066
++:10158000000000000000000F0026222800000000DC
++:101590000000001040212620000000000000000F85
++:1015A000002626290000000000000000002028027C
++:1015B000000000000000225600204411000000003E
++:1015C0000000001B00204811000000000000000087
++:1015D000002F022100000000000000000CE00000CD
++:1015E000000001E00000225C002044110000000027
++:1015F0000000008100204811000000000000A1FC54
++:1016000000204411000000000000000100204811EB
++:10161000000000000000008000201C1100000000FD
++:1016200000000000002F0227000000000000000062
++:101630000CE00000000001DC000000000060000081
++:10164000000001E90000000100531E27000001D83E
++:101650000000000100202C11000000000000001F0D
++:1016600000280A22000000000000001F00282A2A8B
++:10167000000000000000000100530621000001D11D
++:101680000000225C00204411000000000000000265
++:1016900000304A2F000000000000A1FC002044118F
++:1016A00000000000000000010020481100000000C0
++:1016B0000000000100301E2F0000000000000000AC
++:1016C000002F022700000000000000000CE00000D6
++:1016D000000000000000000000600000000001E9C0
++:1016E0000000000100531E27000001E50000FFFF7D
++:1016F00040280E20000000000000000F00260E23EE
++:101700000000000000000010C021122000000000B6
++:101710000000000F0026122400000000000000005E
++:1017200000201411000000000000000000601811EB
++:10173000000002BB0001A1FD0020441100000000D8
++:1017400000000000002F022B00000000000000003D
++:101750000CE00000000001F8000000100022162834
++:1017600000000000FFFF0000002816250000000018
++:101770000000FFFF00281A29000000000000000000
++:10178000002948C500000000000000000020480AB1
++:10179000000000000000000000202C1100000000EC
++:1017A000000000100022162300000000FFFF0000D0
++:1017B00000281625000000000000FFFF00281A2462
++:1017C0000000000000000000002948C500000000E3
++:1017D0000000000000731503000002050000000077
++:1017E0000020180500000000000000000073152410
++:1017F0000000020500000000002D14C500000000DC
++:1018000000000000003008A20000000000000000FE
++:101810000020480200000000000000000020280214
++:101820000000000000000000002020030000000075
++:101830000000000000802404000000000000000FF1
++:1018400000210225000000000000000014C000007C
++:101850000000068900000000002B140500000000B5
++:1018600000000001009016250000000000000000AC
++:10187000006000000000000B000000000060041188
++:10188000000003150000000000200411000000000B
++:101890000000000000600811000001B200002256A4
++:1018A00000204411000000000000001A00294A2214
++:1018B0000000000000000000C02000000000000048
++:1018C00000003FFF002F022F00000000000000007A
++:1018D0000CE000000000000000000000C020040038
++:1018E000000000000000225C002044110000000005
++:1018F0000000000300384A21000000000000A1FCA5
++:1019000000204411000000000000000100204811E8
++:10191000000000000000FFFF40281220000000002F
++:1019200000000010C0211A20000000000000FFFF8E
++:1019300040280E200000000000000010C0211620EA
++:10194000000000000000000000741465000002BBED
++:101950000001A1FD00604411000002E00000000150
++:10196000003306210000000000000000002F0221CB
++:1019700000000000000000000CC000000000021980
++:1019800000003FFF002F022F0000000000000000B9
++:101990000CC000000000021200000000C040040063
++:1019A000000000010000000000600000000006428E
++:1019B000000000000040040F0000021300000000BF
++:1019C000006000000000062E000000000060000023
++:1019D0000000064200000210006004110000031520
++:1019E0000000000000600000000001A000000000F6
++:1019F000006000000000019C00000000006000008A
++:101A0000000002BB0000000000600000000002A314
++:101A1000938000000020441100000000000000003E
++:101A2000002048080000000000000000002F022FE6
++:101A300000000000000000000AE000000000023288
++:101A400000000000006000000000013A00000000FB
++:101A50000040000000000236950000000020441104
++:101A60000000000000000000002F022F0000000016
++:101A7000000000000CE00000000002360000000042
++:101A8000C0404800000002339200000000204411D2
++:101A90000000000000000000C0204800000000001E
++:101AA0000000225600204411000000000000001633
++:101AB00000204811000000000000225C00204411BA
++:101AC000000000000000000300204811000000009A
++:101AD0000000A1FC002044110000000000000001F3
++:101AE00000204811000000000001A1FD0020441169
++:101AF000000000000000000000600411000002FB74
++:101B000000000000C04004000000000100000000D0
++:101B1000006000000000062E0000A00C0020441110
++:101B20000000000000000000C0204800000000008D
++:101B300000000000C040480000000000000000005D
++:101B4000006000000000000B0000001840210A2087
++:101B50000000000000000003002F0222000000002F
++:101B6000000000000AE000000000024C0000001429
++:101B70000020222D00000000000801010029222879
++:101B800000000000000000140020362800000000C3
++:101B90000000A30C00204411000000000000000021
++:101BA000C02048000000000000000000C0204800E5
++:101BB0000000000000000000C0404800000002518A
++:101BC00000000000006000000000000B000000109A
++:101BD00000600411000003153F8000000020041184
++:101BE000000000000000000000600811000001B2C9
++:101BF0000000225C002044110000000000000003EF
++:101C000000204811000000000000000000600000FB
++:101C10000000027C0000001700201E2D00000000C4
++:101C20000000000100211E2700000000000000004D
++:101C300014E000000000026A0000001200201E2DC7
++:101C4000000000000000FFFF00281E270000000029
++:101C50000000000000341C2700000000000000000D
++:101C600012C000000000025F0000000000201C11F4
++:101C70000000000000000000002F00E50000000050
++:101C80000000000008C00000000002620000000028
++:101C900000201407000000000000001200201E2D8C
++:101CA000000000000000001000211E2700000000BE
++:101CB0000000000000341C4700000000000000008D
++:101CC00012C00000000002670000000000201C118C
++:101CD0000000000000000000002F00E600000000EF
++:101CE0000000000008C000000000026A00000000C0
++:101CF0000020180700000000000000000060000045
++:101D0000000002C100002256002044110000000023
++:101D1000000000000034202300000000000000004C
++:101D200012C00000000002720000000000342044D5
++:101D3000000000000000000012C00000000002715E
++:101D40000000001600404811000002760000001854
++:101D500000404811000002760000000000342044DA
++:101D6000000000000000000012C00000000002752A
++:101D70000000001700404811000002760000001922
++:101D800000204811000000000000A1FC00204411C8
++:101D900000000000000000010020481100000000C9
++:101DA0000001A1FD00604411000002E900003FFFB6
++:101DB000002F022F00000000000000000CC00000F7
++:101DC0000000025600000000C040040000000001B6
++:101DD0000000001040210620000000000000FFFF6E
++:101DE000C0280A20000000000000001040210E2042
++:101DF000000000000000FFFFC028122000000000CB
++:101E00000000001040211620000000000000FFFF2D
++:101E1000C0881A200000000081000000002044114A
++:101E20000000000000000001002048110000000038
++:101E300000042004006044110000068A0000000035
++:101E4000006000000000062E00000000C0600000DE
++:101E5000000002A30000000500200A2D0000000081
++:101E60000000000800220A22000000000000002BF1
++:101E700000201A2D000000000000001C00201E2D74
++:101E8000000000000000700000281E270000000075
++:101E90000000000000311CE6000000000000002AE5
++:101EA00000201A2D000000000000000C00221A265D
++:101EB0000000000000000000002F00E6000000000D
++:101EC0000000000006E00000000002920000000098
++:101ED00000201C11000000000000000000200C1178
++:101EE000000000000000002B00203623000000004E
++:101EF0000000001000201811000000000000000089
++:101F000000691CE20000012F9380000000204411B2
++:101F10000000000000000000002048070000000052
++:101F200095000000002044110000000000000000A7
++:101F3000002F022F00000000000000000CE0000055
++:101F40000000029D0000000100333E2F0000000051
++:101F500000000000D90048000000000092000000CE
++:101F6000002044110000000000000000C0204800D4
++:101F7000000000000000001C0040362700000000A8
++:101F80000000000CC0220A20000000000000002910
++:101F9000002036220000000000000028C04036204B
++:101FA000000000000000A2A4002044110000000076
++:101FB000000000090020481100000000A1000000FE
++:101FC00000204411000000000000000100804811C2
++:101FD000000000000000002100201E2D0000000075
++:101FE00000000000002C1CE30000000000000021A5
++:101FF00000203627000000000000002200201E2DD7
++:102000000000000000000000002C1CE400000000A4
++:1020100000000022002036270000000000000023FE
++:1020200000201E2D0000000000000000003120A351
++:102030000000000000000000002D1D07000000004F
++:1020400000000023002036270000000000000024CC
++:1020500000201E2D0000000000000000003120C400
++:102060000000000000000000002D1D07000000001F
++:10207000000000240080362700000000000000213E
++:10208000002036230000000000000022002036243B
++:10209000000000000000000000311CA30000000050
++:1020A0000000002300203627000000000000000090
++:1020B00000311CC40000000000000024008036270E
++:1020C000000000000000001A002036270000000079
++:1020D0000000001B00203628000000000000001750
++:1020E00000201E2D00000000000000020021022739
++:1020F000000000000000000014C00000000002DC2E
++:102100000000000000400000000002D90000001A9A
++:1021100000203627000000000000001B00203628A9
++:10212000000000000000001700201E2D000000002D
++:102130000000000200210227000000000000000053
++:1021400014E00000000002D9000000030021022773
++:10215000000000000000000014E00000000002DCAD
++:102160000000002300201E2D0000000000000000E1
++:10217000002E00E1000000000000000002C000008E
++:10218000000002DC0000002100201E2D00000000E5
++:1021900000000000003120A100000000000000004D
++:1021A000002E00E8000000000000000006C0000053
++:1021B000000002DC0000002400201E2D00000000B2
++:1021C00000000000002E00E20000000000000000FF
++:1021D00002C00000000002DC0000002200201E2DD2
++:1021E0000000000000000000003120C200000000DC
++:1021F00000000000002E00E80000000000000000C9
++:1022000006C00000000002DC0000000000600000CA
++:10221000000006650000000000600000000002B53C
++:102220000000000000400000000002DE000000008E
++:1022300000600000000002B5000000000060000027
++:102240000000065C0000000000400000000002DE0C
++:102250000000000000600000000002A70000000075
++:1022600000400000000002DE0000001A00201E2DC9
++:10227000000000000000001B0080222D0000000074
++:102280000000001000221E230000000000000000DB
++:1022900000294887000000000000000000311CA356
++:1022A000000000000000001000221E2700000000B7
++:1022B0000000000000294887000000000000001016
++:1022C00000221E230000000000000000003120C496
++:1022D000000000000000FFFF00282228000000008E
++:1022E0000000000000894907000000000000001005
++:1022F00000221E2300000000000000000029488783
++:10230000000000000000001000221E21000000005C
++:102310000000000000294847000000000000000005
++:1023200000311CA3000000000000001000221E2746
++:1023300000000000000000000029488700000000A5
++:102340000000000000311CA100000000000000108F
++:1023500000221E270000000000000000002948475E
++:10236000000000000000001000221E2300000000FA
++:1023700000000000003120C4000000000000FFFF4A
++:102380000028222800000000000000000029490762
++:10239000000000000000001000221E2100000000CC
++:1023A00000000000003120C2000000000000FFFF1C
++:1023B00000282228000000000000000000894907D2
++:1023C000000000000000001000221E23000000009A
++:1023D0000000000000294887000000000000000104
++:1023E00000220A210000000000000000003308A2C3
++:1023F000000000000000001000221E22000000006B
++:102400000000001000212222000000000000000057
++:1024100000294907000000000000000000311CA353
++:10242000000000000000001000221E270000000035
++:1024300000000000002948870000000000000001A3
++:1024400000220A210000000000000000003008A265
++:10245000000000000000001000221E22000000000A
++:1024600000000010002122220000000000000000F7
++:1024700000294907000000000000001000221E2370
++:102480000000000000000000003120C40000000037
++:102490000000FFFF002822280000000000000000CC
++:1024A000002949070000000000000000003808C5AE
++:1024B00000000000000000000030084100000000A3
++:1024C0000000000100220A220000000000000000BD
++:1024D000003308A2000000000000001000221E22AD
++:1024E0000000000000000010002122220000000077
++:1024F00000000000008949070000000000000017EC
++:102500000020222D000000000000000014C0000088
++:1025100000000318FFFFFFEF002806210000000065
++:10252000000000140020222D000000000000F8E050
++:1025300000204411000000000000000000294901B3
++:1025400000000000000000000089490100000000B8
++:102550000000000000204811000000000000000002
++:102560000020481100000000060A02000080481107
++:102570000000000000000000C0200000000000007B
++:1025800097000000C020441100000000000000007F
++:10259000C0204811000000008A0000000020441103
++:1025A00000000000000000000020481100000000B2
++:1025B0000000225C00204411000000000000000028
++:1025C000C0204800000000000000A1FC00204411D1
++:1025D0000000000000000000C020480000000000D3
++:1025E00000000000C0200400000000000000000007
++:1025F00000A0000A00000000970000000020441125
++:102600000000000000000000002048110000000051
++:102610008A000000002044110000000000000000BB
++:1026200000204811000000000000225C002044113E
++:102630000000000000000000C02048000000000072
++:102640000000A1FC00204411000000000000000078
++:10265000C02048000000000000000000C02004006E
++:10266000000000000000000000A0000A00000000C0
++:10267000970000000020441100000000000000004E
++:1026800000204811000000008A00000000204411D2
++:1026900000000000000000000020481100000000C1
++:1026A0000000225C00204411000000000000000037
++:1026B000C0204800000000000000A1FC00204411E0
++:1026C0000000000000000000C020480000000000E2
++:1026D0000001A1FD002044110000000000000000E6
++:1026E000D90048000000000000000000C0200400E5
++:1026F000000000000000000000A0000A0000000030
++:1027000000002257002044110000000000000003D8
++:10271000C0484A20000000000000225D0020441153
++:102720000000000000000000C04048000000000061
++:1027300000000000006000000000064200000000F1
++:10274000C0200800000000000000225C00204411AE
++:10275000000000000000000300384A2200000000D2
++:102760000000A1FC00204411000000000000000057
++:10277000C0204800000000000001A1FD002044111D
++:102780000000000000000000002F022200000000F6
++:10279000000000000CE0000000000000000000004D
++:1027A00040204800000000000000000140304A20A6
++:1027B0000000000000000002C0304A2000000000BD
++:1027C0000000000100530A220000034B0000003FFC
++:1027D000C0280A20000000008100000000204411F1
++:1027E000000000000000000100204811000000006F
++:1027F000000021F800204411000000000000001833
++:102800000020481100000000000421F9006044117C
++:102810000000068A000000110021023000000000C4
++:102820000000000014E00000000003540000001449
++:10283000002F022200000000000000000CC0000079
++:10284000000003640000201000204411000000007C
++:102850000000800000204811000000000001A2A438
++:102860000020441100000000000000000060480249
++:102870000000036E00002100002044110000000051
++:1028800000000000C0204800000000000000000020
++:10289000C02048000000000000000000C0204800E8
++:1028A0000000000000000000C040480000000000E0
++:1028B00000000004002F02220000000000000000C1
++:1028C0000CC000000000036A00002010002044112A
++:1028D00000000000000080000020481100000000FF
++:1028E0000001A2A40020441100000000000000002C
++:1028F000004048020000035F00000028002F022271
++:1029000000000000000000000CC00000000005BD39
++:102910000001A2A4002044110000000000000000FB
++:10292000004048020000035F0000002C0020362613
++:102930000000000000000049002018110000000005
++:102940000000003F002048110000000000000001CE
++:1029500000331A260000000000000000002F0226AD
++:1029600000000000000000000CC000000000037028
++:102970000000002C00801A2D000000000000003F25
++:10298000C0280A200000000000000015002F0222CD
++:1029900000000000000000000CE0000000000386C2
++:1029A00000000006002F02220000000000000000CE
++:1029B0000CE00000000003B100000016002F02220E
++:1029C00000000000000000000CE00000000003B563
++:1029D00000000020002F0222000000000000000084
++:1029E0000CE000000000039C0000000F002F0222FA
++:1029F00000000000000000000CE00000000003A840
++:102A000000000010002F0222000000000000000063
++:102A10000CE00000000003A80000001E002F0222AE
++:102A200000000000000000000CE000000000039027
++:102A30000000A2A4002044110000000000000000DB
++:102A400000404802000000000800000000290A229F
++:102A5000000000000000000340210E2000000000E4
++:102A60000000000CC021122000000000000800003F
++:102A7000002812240000000000000014C0221620CC
++:102A80000000000000000000002914A40000000065
++:102A90000000A2A40020441100000000000000007B
++:102AA000002948A2000000000000A1FE00204411FF
++:102AB000000000000000000000404803000000008B
++:102AC000810000000020441100000000000000010F
++:102AD0000020481100000000000021F800204411EF
++:102AE0000000000000000016002048110000000057
++:102AF000000421F9006044110000068A000000155E
++:102B000000210230000000000000000014E000007E
++:102B1000000003920000210E00204411000000007C
++:102B200000000000C020480000000000000000007D
++:102B3000C0204800000000000000A2A400204411B2
++:102B400000000000000000000040480200000000FB
++:102B5000810000000020441100000000000000017E
++:102B60000020481100000000000021F8002044115E
++:102B700000000000000000170020481100000000C5
++:102B8000000421F9006044110000068A00000003DF
++:102B900000210230000000000000000014E00000EE
++:102BA0000000039E000021080020441100000000E6
++:102BB00000000000C02048000000000000000000ED
++:102BC000C0204800000000000000A2A40020441122
++:102BD000000000000000000000404802000000006B
++:102BE0000000A2A40020441100000000000000002A
++:102BF0000020480200000000800000000020441176
++:102C0000000000000000000000204811000000004B
++:102C100081000000002044110000000000000010AE
++:102C200000204811000000000000000000200010FB
++:102C3000000000000000000014C00000000003AE0F
++:102C40000000000000400000000000000000201014
++:102C50000020441100000000000080000020481106
++:102C6000000000000001A2A40020441100000000A8
++:102C70000000000600404811000000000000201085
++:102C800000204411000000000000800000204811D6
++:102C9000000000000001A2A4002044110000000078
++:102CA00000000016006048110000036E00000000E4
++:102CB000004000000000000000000000C0200800EC
++:102CC0000000000000000000C0200C000000000018
++:102CD0000000001D00210223000000000000000091
++:102CE00014E00000000003CE810000000020441129
++:102CF000000000000000000100204811000000005A
++:102D0000000021F80020441100000000000000181D
++:102D10000020481100000000000421F90060441167
++:102D20000000068A000000110021023000000000AF
++:102D30000000000014E00000000003C000002100BB
++:102D400000204411000000000000000000204802A4
++:102D50000000000000000000002048030000000008
++:102D6000BABECAFE0020481100000000CAFEBABE6A
++:102D70000020481100000000000020100020441135
++:102D8000000000000000800000204811000000004A
++:102D90000000A2A400204411000000000000000474
++:102DA0000040481100000000000021700020441184
++:102DB00000000000000000000020480200000000A9
++:102DC0000000000000204803000000008100000017
++:102DD00000204411000000000000000A00204811FB
++:102DE00000000000000000000020001000000000B3
++:102DF0000000000014C00000000003D38C0000009D
++:102E00000020441100000000CAFEBABE0040481174
++:102E100000000000810000000020441100000000BC
++:102E200000000001002048110000000000003FFFEA
++:102E300040280A20000000008000000040280E20EA
++:102E40000000000040000000C02812200000000028
++:102E500000040000006946220000068A000000000D
++:102E6000002014100000000000000000002F0223CA
++:102E700000000000000000000CC00000000003E1A2
++:102E800000000000C0401800000003E400003FFF05
++:102E9000C0281A2000000000000400000069462637
++:102EA0000000068A0000000000201810000000004A
++:102EB00000000000002F02240000000000000000BD
++:102EC0000CC00000000003E700000000C0401C0030
++:102ED000000003EA00003FFFC0281E2000000000A1
++:102EE00000040000006946270000068A0000000078
++:102EF00000201C1000000000000000000020440220
++:102F00000000000000000000002820C500000000B4
++:102F100000000000004948E800000000A580000013
++:102F200000200811000000000000200000200C110B
++:102F30000000000083000000006044110000041243
++:102F4000000000000020440200000000000000001B
++:102F5000C0204800000000000000000040204800A1
++:102F6000000000000000001FC0210220000000003F
++:102F70000000000014C00000000003F70000201053
++:102F800000204411000000000000800000204811D3
++:102F9000000000000000FFFFC0481220000003FFF7
++:102FA000A780000000200811000000000000A00021
++:102FB00000200C110000000083000000006044119C
++:102FC0000000041200000000002044020000000085
++:102FD00000000000C02048000000000000000000C9
++:102FE000C0204800000000000000FFFFC0281220A1
++:102FF00000000000830000000020441100000000D9
++:103000000000000000304883000000008400000041
++:10301000002044110000000000000000C020480013
++:1030200000000000000000001D0000000000000083
++:103030008300000000604411000004120000000042
++:10304000C040040000000001A98000000020081119
++:10305000000000000000C00000400C11000003FA56
++:10306000AB80000000200811000000000000F8E024
++:1030700000400C11000003FAAD8000000020081190
++:10308000000000000000F88000400C11000003FA6E
++:10309000B380000000200811000000000000F3FCD5
++:1030A00000400C11000003FAAF800000002008115E
++:1030B000000000000000E00000400C11000003FAD6
++:1030C000B180000000200811000000000000F000A6
++:1030D00000400C11000003FA83000000002044119E
++:1030E00000000000000021480020481100000000FE
++:1030F00084000000002044110000000000000000D7
++:10310000C020480000000000000000001D0000007A
++:10311000000000000000000000800000000000002F
++:1031200001182000C0304620000000000000000010
++:10313000D90048000000000000000000C02004008A
++:10314000000000000000000000A0000A00000000D5
++:103150000218A000C030462000000000000000005F
++:10316000D90048000000000000000000C02004005A
++:10317000000000000000000000A0000A00000000A5
++:103180000318C000C030462000000000000000000E
++:10319000D90048000000000000000000C02004002A
++:1031A000000000000000000000A0000A0000000075
++:1031B0000418F8E0C03046200000000000000000C5
++:1031C000D90048000000000000000000C0200400FA
++:1031D000000000000000000000A0000A0000000045
++:1031E0000518F880C03046200000000000000000F4
++:1031F000D90048000000000000000000C0200400CA
++:10320000000000000000000000A0000A0000000014
++:103210000618E000C030462000000000000000005A
++:10322000D90048000000000000000000C020040099
++:10323000000000000000000000A0000A00000000E4
++:103240000718F000C0304620000000000000000019
++:10325000D90048000000000000000000C020040069
++:10326000000000000000000000A0000A00000000B4
++:103270000818F3FCC03046200000000000000000E9
++:10328000D90048000000000000000000C020040039
++:10329000000000000000000000A0000A0000000084
++:1032A0000000003000200A2D000000000000000097
++:1032B000C0290C4000000000000000300020362330
++:1032C0000000000000000000C0200400000000001A
++:1032D0000000000000A0000A0000000086000000BE
++:1032E00000204411000000000000000000404801E0
++:1032F0000000000085000000C02044110000000014
++:103300000000000000404801000000000000217C97
++:10331000002044110000000000000000C020480010
++:103320000000000000000000C02048000000000075
++:1033300000000000C02048000000000081000000E4
++:10334000002044110000000000000001002048118E
++:103350000000000000000000C02008000000000085
++:103360000000000017000000000000000004217FA2
++:10337000006044110000068A0000001F0021023096
++:10338000000000000000000014C000000000000069
++:103390000000000000404C02000004480000000053
++:1033A000C0200C000000000000000000C020100041
++:1033B0000000000000000000C02014000000000019
++:1033C00000000000C0201800000000000000000005
++:1033D000C0201C000000000000007F0000280A211F
++:1033E0000000000000004500002F02220000000045
++:1033F000000000000CE00000000004560000000087
++:10340000C0202000000000000000000017000000A5
++:10341000000000000000001000280A230000000047
++:1034200000000010002F0222000000000000000039
++:103430000CE000000000045E810000000020441148
++:103440000000000000000001002048110000000002
++:1034500000040000006946240000068A0000000005
++:1034600000400000000004638100000000204411BF
++:1034700000000000000000000020481100000000D3
++:103480000000216D00204411000000000000000039
++:103490000020480400000000000000000060480513
++:1034A0000000068F00000000002824F0000000004B
++:1034B0000000000700280A230000000000000001AF
++:1034C000002F022200000000000000000AE00000BF
++:1034D0000000046A00000000002F00C90000000086
++:1034E0000000000004E00000000004830000000071
++:1034F000004000000000049000000002002F0222A3
++:1035000000000000000000000AE000000000046F5E
++:1035100000000000002F00C90000000000000000B3
++:1035200002E00000000004830000000000400000F2
++:103530000000049000000003002F022200000000A1
++:10354000000000000AE00000000004740000000019
++:10355000002F00C900000000000000000CE0000087
++:103560000000048300000000004000000000049000
++:1035700000000004002F02220000000000000000F4
++:103580000AE000000000047900000000002F00C9DC
++:1035900000000000000000000AE0000000000483BA
++:1035A0000000000000400000000004900000000542
++:1035B000002F022200000000000000000AE00000CE
++:1035C0000000047E00000000002F00C90000000081
++:1035D0000000000006E0000000000483000000007E
++:1035E000004000000000049000000006002F0222AE
++:1035F00000000000000000000AE00000000004835A
++:1036000000000000002F00C90000000000000000C2
++:1036100008E00000000004830000000000400000FB
++:103620000000049000007F0000280A210000000034
++:1036300000004500002F02220000000000000000F2
++:103640000AE00000000000000000000800210A233A
++:10365000000000000000000014C000000000048D05
++:10366000000021690020441100000000000000005B
++:10367000C02048000000000000000000C0204800FA
++:103680000000000000000000C02048000000000012
++:10369000CAFEBABE00404811000000000000000051
++:1036A000C02044000000000000000000C020000016
++:1036B0000000000000000000C040480000000000C2
++:1036C00000007F0000280A210000000000004500E3
++:1036D000002F022200000000000000000AE00000AD
++:1036E0000000049600000000C02000000000000060
++:1036F00000000000C02000000000000000000000EA
++:10370000C0400000000000000000000000404C0825
++:103710000000045600000000C02008000000000067
++:103720000000001040210E200000000000000011E9
++:10373000402112200000000000000012402116204D
++:10374000000000000000216900204411000000007A
++:1037500000000000002048020000000000000000FF
++:1037600000210225000000000000000014E000001D
++:10377000000004A000040000C0494A20000004A189
++:10378000FFFBFFFFC0284A200000000000000000EF
++:1037900000210223000000000000000014E00000EF
++:1037A000000004AD00000000C02048000000000040
++:1037B00000000000C02048000000000000000000E1
++:1037C00000210224000000000000000014C00000DE
++:1037D00000000000810000000020441100000000F3
++:1037E0000000000C00204811000000000000000054
++:1037F00000200010000000000000000014C00000C5
++:10380000000004A9A00000000020441100000000F6
++:10381000CAFEBABE0040481100000000810000004E
++:1038200000204411000000000000000400204811A6
++:10383000000000000000216B002044110000000087
++:1038400000000000C02048100000000081000000BF
++:103850000020441100000000000000050020481175
++:10386000000000000000216C002044110000000056
++:1038700000000000C0204810000000000000000010
++:10388000002F022400000000000000000CE00000F7
++:10389000000000000000000000400000000004A73D
++:1038A00000000000C0210A2000000000000000000D
++:1038B00014C00000000004C081000000002044117A
++:1038C000000000000000000000204811000000007F
++:1038D0000000216D002044110000000000000000E5
++:1038E000C02048000000000000000000C060480048
++:1038F0000000068F0000000000400000000004C42B
++:1039000081000000002044110000000000000001C0
++:10391000002048110000000000040000C0294620DB
++:103920000000000000000000C06000000000068AE7
++:103930000000000100210222000000000000000041
++:1039400014C00000000004CB0000216900204411D5
++:103950000000000000000000C0204800000000003F
++:1039600000000000C020480000000000000000002F
++:103970000020481000000000CAFEBABE00404811F6
++:103980000000000000000000C02044000000000013
++:1039900000000000C040481000000000810000004E
++:1039A0000020441100000000000000010020481128
++:1039B00000000000000021F8002044110000000079
++:1039C0000000000E0020481100000000000421F952
++:1039D000006044110000068A00000000002102304F
++:1039E000000000000000000014C00000000004CD32
++:1039F00000002180002044110000000000000000B1
++:103A0000C02048000000000000000000C0200000AE
++:103A10000000000000000000C0204800000000007E
++:103A200000000000C02000000000000000000000B6
++:103A3000C0404800000000000000000300333E2F9B
++:103A40000000000000000001002102210000000031
++:103A50000000000014E00000000004FD0000002C45
++:103A600000200A2D000000000004000018E00C11E6
++:103A7000000004EC0000000100333E2F00000000B5
++:103A80000000216900204411000000000000000037
++:103A90000020480200000000000000000020480351
++:103AA000000000000000000800300A2200000000B2
++:103AB00000000000C02048000000000000000000DE
++:103AC000C0204800000000000000216900204411CF
++:103AD000000000000000000000204802000000007C
++:103AE0000000000000204803000000000000000863
++:103AF00000300A220000000000000000C020480042
++:103B00000000000000000000D8C04800000004E0F1
++:103B100000002169002044110000000000000000A6
++:103B200000204802000000000000000000204803C0
++:103B3000000000000000000800300A220000000021
++:103B400000000000C020480000000000000000004D
++:103B5000C0204800000000000000002D0020122DB1
++:103B6000000000000000000000290C83000000009D
++:103B70000000216900204411000000000000000046
++:103B80000020480200000000000000000020480360
++:103B9000000000000000000800300A2200000000C1
++:103BA00000000000C02048000000000000000000ED
++:103BB000C020480000000000000000110021022485
++:103BC000000000000000000014C000000000000021
++:103BD0000000000000400000000004A70000002CCE
++:103BE000C0203620000000000000002DC04036201C
++:103BF000000000000000000F002102210000000072
++:103C00000000000014C000000000050200000000D9
++:103C1000006000000000000B00000000D900000060
++:103C20000000000000000000C0400400000000018F
++:103C3000B50000000020441100000000000020003A
++:103C40000020481100000000B600000000204411D0
++:103C5000000000000000A00000204811000000004B
++:103C6000B700000000204411000000000000C00068
++:103C70000020481100000000B8000000002044119E
++:103C8000000000000000F8E00020481100000000E3
++:103C9000B900000000204411000000000000F8807E
++:103CA0000020481100000000BA000000002044116C
++:103CB000000000000000E0000020481100000000AB
++:103CC000BB00000000204411000000000000F000D4
++:103CD0000020481100000000BC000000002044113A
++:103CE000000000000000F3FC00204811000000006C
++:103CF00081000000002044110000000000000002CC
++:103D00000020481100000000000000FF00280E30D5
++:103D10000000000000000000002F0223000000004F
++:103D2000000000000CC000000000051600000000AC
++:103D3000C0200800000000000000000014C00000C7
++:103D40000000052B0000000000200C110000000006
++:103D50000000001C00203623000000000000002BA3
++:103D60000020362300000000000000290020362338
++:103D700000000000000000280020362300000000A2
++:103D8000000000170020362300000000000000257E
++:103D9000002036230000000000000026002036230B
++:103DA0000000000000000015002036230000000085
++:103DB000000000160020362300000000FFFFE00096
++:103DC00000200C110000000000000021002036231C
++:103DD0000000000000000022002036230000000048
++:103DE00000001FFF00200C11000000000000002355
++:103DF00000203623000000000000002400203623AD
++:103E000000000000F1FFFFFF00283A2E0000000034
++:103E10000000001AC0220E20000000000000000078
++:103E20000029386E000000008100000000204411CD
++:103E30000000000000000006002048110000000003
++:103E40000000002A4020362000000000870000000B
++:103E5000002044110000000000000000C0204800C5
++:103E6000000000000000A1F4002044110000000048
++:103E700000000000002048100000000000000000CA
++:103E800000200C110000000000000030002036234C
++:103E9000000000009D000000002044110000000010
++:103EA0000000001F40214A20000000009600000092
++:103EB000002044110000000000000000C020480065
++:103EC0000000000000000000C0200C000000000006
++:103ED00000000000C0201000000000000000001FD3
++:103EE00000211624000000000000000014C00000A3
++:103EF000000000000000001D00203623000000002C
++:103F00000000000300281E2300000000000000083D
++:103F10000022222300000000FFFFF00000282228DA
++:103F20000000000000000000002920E80000000060
++:103F30000000001F002036280000000000000018CC
++:103F400000211E2300000000000000200020362772
++:103F50000000000000000002002216240000000003
++:103F600000000000003014A8000000000000001E47
++:103F700000203625000000000000000300211A2464
++:103F8000000000001000000000281A2600000000B9
++:103F9000EFFFFFFF00283A2E0000000000000000A5
++:103FA000004938CE000006780000000140280A20B1
++:103FB000000000000000000640280E200000000065
++:103FC00000000300C02812200000000000000008CC
++:103FD000002112240000000000000000C020162074
++:103FE0000000000000000000C0201A2000000000B7
++:103FF000000000000021022200000000000000007C
++:1040000014C000000000056381000000002044117E
++:104010000000000000000001002048110000000026
++:104020000000225800300A240000000000040000B4
++:10403000006946220000068A000021690020441120
++:104040000000000000000000002048050000000003
++:104050000002000000294A260000000000000000C5
++:104060000020481000000000CAFEBABE002048111F
++:104070000000000000000002002F022300000000EA
++:10408000000000000CC000000000056B00000000F4
++:10409000C0201C100000000000000000C040000014
++:1040A0000000057900000002002F0223000000003C
++:1040B000000000000CC000000000056B8100000043
++:1040C0000020441100000000000000010020481101
++:1040D000000000000000225800300A240000000008
++:1040E00000040000006946220000068A000000006B
++:1040F000C0201C100000000000000000C0400000B4
++:104100000000057900000000002F022300000000DD
++:10411000000000000CC000000000056F000000005F
++:10412000C0201C000000000000000000C040000093
++:104130000000057900000004002F022300000000A9
++:10414000000000000CC000000000057781000000A6
++:104150000020441100000000000000000020481171
++:10416000000000000000216D00204411000000004C
++:1041700000000000C0204800000000000000000017
++:10418000C06048000000068F0000000000401C10C6
++:104190000000057900000000C020000000000000C1
++:1041A00000000000C040000000000000000000000F
++:1041B0000EE000000000057B000000000060000031
++:1041C000000005C600000000002F022400000000CF
++:1041D000000000000CC000000000058C0000A2B729
++:1041E00000204411000000000000000000204807EB
++:1041F00000000000810000000020441100000000C9
++:104200000000000100204811000000000004A2B6D8
++:10421000006044110000068A0000001A00212230CC
++:104220000000000000000006002226300000000010
++:1042300000042004006044110000068A0000A2C4AB
++:10424000002044110000000000000000003048E998
++:10425000000000000000000000E000000000058AEF
++:104260000000A2D100204411000000000000000066
++:1042700000404808000000000000A2D100204411C6
++:10428000000000000000000100504A28000000006B
++:1042900000000001002F02240000000000000000C8
++:1042A0000CC000000000059D0000A2BB00204411CE
++:1042B000000000000000000000204807000000008F
++:1042C00081000000002044110000000000000001F7
++:1042D00000204811000000000004A2BA0060441150
++:1042E0000000068A0000001A0021223000000000B1
++:1042F0000000000600222630000000000004200418
++:10430000006044110000068A0000A2C5002044118C
++:104310000000000000000000003048E9000000003C
++:104320000000000000E000000000059B0000A2D299
++:104330000020441100000000000000000040480878
++:10434000000000000000A2D2002044110000000084
++:104350000000000100504A28000000000000000298
++:10436000002F022400000000000000000CC000002C
++:10437000000005AE0000A2BF0020441100000000B4
++:10438000000000000020480700000000810000003D
++:10439000002044110000000000000001002048112E
++:1043A000000000000004A2BE006044110000068A64
++:1043B0000000001A0021223000000000000000066A
++:1043C0000022263000000000000420040060441198
++:1043D0000000068A0000A2C6002044110000000070
++:1043E00000000000003048E900000000000000006C
++:1043F00000E00000000005AC0000A2D30020441142
++:10440000000000000000000000404808000000001C
++:104410000000A2D3002044110000000000000001B1
++:1044200000504A28000000000000A2C300204411F0
++:10443000000000000000000000204807000000000D
++:104440008100000000204411000000000000000175
++:1044500000204811000000000004A2C200604411C6
++:104460000000068A0000001A00212230000000002F
++:104470000000000600222630000000000004200496
++:10448000006044110000068A0000A2C70020441109
++:104490000000000000000000003048E900000000BB
++:1044A0000000000000E00000000005BB0000A2D4F6
++:1044B00000204411000000000000000000404808F7
++:1044C000000000000000A2D4002044110000000001
++:1044D0000000000100504A28000000008500000094
++:1044E00000204411000000000000000000204801EE
++:1044F000000000000000304A0020441100000000CD
++:104500000100000000204811000000000000000031
++:1045100000400000000005C1A4000000C0204411BC
++:104520000000000000000000C04048000000000043
++:1045300000000000C0600000000005C60000000090
++:10454000C0400400000000010000002C00203621C3
++:104550000000000081000000002044110000000065
++:1045600000000006002048110000000000000000CC
++:10457000002F023000000000000000000CC000000E
++:10458000000005CD00000000002004110000000024
++:104590000000003000403621000005E0000000303F
++:1045A0000020062D0000000000007E0000280621EB
++:1045B0000000000000000000002F022100000000A9
++:1045C000000000000CE00000000005E08100000099
++:1045D00000204411000000000000000100204811EC
++:1045E000000000000004A092006044110000068A50
++:1045F0000000003100203630000000000004A093CD
++:10460000006044110000068A0000003200203630AD
++:10461000000000000004A2B6006044110000068AF9
++:104620000000003300203630000000000004A2BA71
++:10463000006044110000068A00000034002036307B
++:10464000000000000004A2BE006044110000068AC1
++:104650000000003500203630000000000004A2C237
++:10466000006044110000068A000000360020363049
++:104670000000000000042004006044110000068ACD
++:104680000001A2A400204411000000000000003F2F
++:1046900000204811000000000000003F00204811E9
++:1046A000000000000000003F002048110000000052
++:1046B0000000003F0020481100000000000000053D
++:1046C00000204811000000000000A1F40020441167
++:1046D0000000000000000000002048110000000061
++:1046E00088000000002044110000000000000001CC
++:1046F000002048110000000081000000002044114B
++:10470000000000000000000600204811000000002A
++:1047100000000001002F0230000000000000000037
++:104720000CE0000000000629000000300020062DEB
++:104730000000000000000000002F02210000000027
++:10474000000000000CE000000000062981000000CD
++:10475000002044110000000000000001002048116A
++:104760000000000000007E0000280621000000007C
++:1047700000000000002F02210000000000000000E7
++:104780000CE00000000006020000A092002044118E
++:10479000000000000000003100204A2D0000000051
++:1047A0000000A0930020441100000000000000322F
++:1047B00000204A2D000000000000A2B60020441195
++:1047C000000000000000003300204A2D000000001F
++:1047D0000000A2BA002044110000000000000034D4
++:1047E00000204A2D000000000000A2BE002044115D
++:1047F000000000000000003500204A2D00000000ED
++:104800000000A2C200204411000000000000003699
++:1048100000204A2D00000000000000300020062D7E
++:1048200000000000000001FF002806210000000039
++:1048300000000000002F0221000000000000000026
++:104840000CE000000000062800000000002102210A
++:10485000000000000000000014C000000000060B73
++:104860000004A003006044110000068A0000A003B9
++:10487000002044110000000000000000002048104B
++:1048800000000000000000010021062100000000DF
++:104890000000000014C00000000006100004A0107A
++:1048A000006044110000068A0000A010002044119E
++:1048B0000000000000000000002048100000000080
++:1048C000000000010021062100000000000000009F
++:1048D000002F022100000000000000000CE000009A
++:1048E000000006280004A011006044110000068AA0
++:1048F0000000A01100204411000000000000000092
++:1049000000204810000000000004A01200604411C4
++:104910000000068A0000A0120020441100000000E0
++:104920000000000000204810000000000004A01358
++:10493000006044110000068A0000A013002044110A
++:1049400000000000000000000020481000000000EF
++:104950000004A014006044110000068A0000A014A6
++:10496000002044110000000000000000002048105A
++:10497000000000000004A015006044110000068A39
++:104980000000A015002044110000000000000000FD
++:1049900000204810000000000004A0160060441130
++:1049A0000000068A0000A01600204411000000004C
++:1049B0000000000000204810000000000004A017C4
++:1049C000006044110000068A0000A0170020441176
++:1049D000000000000000000000204810000000005F
++:1049E00000042004006044110000068A0000002C2E
++:1049F0000080062D00000000FF0000000020441190
++:104A0000000000000000000000204811000000002D
++:104A1000000000010020481100000000000000021A
++:104A20000080481100000000000000000EE00000BF
++:104A30000000063A000000300020062D00000000B3
++:104A40000000000200280621000000000000000015
++:104A5000002F022100000000000000000CE0000018
++:104A60000000063881000000002044110000000012
++:104A70000000000100204811000000000004200494
++:104A8000006044110000068A000010000020081198
++:104A9000000000000000002B002036220000000073
++:104AA00000000000006000000000063E0000000062
++:104AB00000600000000005C69800000000204411BE
++:104AC000000000000000000000804811000000000D
++:104AD00000000000C06000000000063E0000000072
++:104AE000C0400400000000010000A2A40020441106
++:104AF000000000000000002200204811000000001B
++:104B000089000000002044110000000000000001A6
++:104B1000004048110000062A9700000000204411C0
++:104B2000000000000000000000204811000000000C
++:104B30008A00000000204411000000000000000076
++:104B4000004048110000062A00000000006000003C
++:104B50000000065900002010002044110000000051
++:104B60000000800000204811000000000001A2A405
++:104B7000C020441100000000000000160060481131
++:104B80000000036E0000201000204411000000000F
++:104B9000000100000020481100000000810000001A
++:104BA0000020441100000000000000010020481116
++:104BB000000000000000217C0020441100000000E3
++:104BC000098000000020481100000000FFFFFFFFE7
++:104BD00000204811000000000000000000204811E3
++:104BE00000000000000000001700000000000000AE
++:104BF0000004217F006044110000068A0000001FAD
++:104C000000210230000000000000000014C000007D
++:104C1000000000000000000400404C11000006539A
++:104C2000000000000040000000000000000000172D
++:104C300000201E2D000000000000000400291E2797
++:104C40000000000000000017008036270000000070
++:104C50000000001700201E2D00000000FFFFFFFBDA
++:104C600000281E27000000000000001700803627E3
++:104C7000000000000000001700201E2D00000000B2
++:104C80000000000800291E27000000000000001797
++:104C900000803627000000000000001700201E2DB5
++:104CA00000000000FFFFFFF700281E2700000000A3
++:104CB00000000017008036270000000000002010D0
++:104CC0000020441100000000000080000020481176
++:104CD000000000000001A2A4002044110000000018
++:104CE00000000016006048110000036E0000201054
++:104CF00000204411000000000001000000204811C5
++:104D0000000000000000217C002044110000000091
++:104D1000018000000020481100000000FFFFFFFF9D
++:104D20000020481100000000000000000020481191
++:104D3000000000000000000017000000000000005C
++:104D4000810000000020441100000000000000016C
++:104D500000204811000000000004217F0060441181
++:104D60000000068A0000001F002102300000000041
++:104D70000000000014C000000000068900000010C0
++:104D800000404C110000066F00000000C02004002D
++:104D9000000000000000000038C00000000000001B
++:104DA0000000001D00200A2D000000000000001E71
++:104DB00000200E2D000000000000001F0020122D1A
++:104DC00000000000000000200020162D0000000060
++:104DD00000002169002044110000000000000000D4
++:104DE00000204804000000000000000000204805EA
++:104DF000000000000000000000204801000000004A
++:104E0000CAFEBABE002048110000000000000004E5
++:104E1000003012240000000000000000002F006499
++:104E200000000000000000000CC000000000068828
++:104E30000000000300281A22000000000000000803
++:104E40000022122200000000FFFFF00000281224C0
++:104E50000000000000000000002910C40000000055
++:104E60000000001F00403624000000000000000089
++:104E70000080000000000000000000001AC00000D8
++:104E80000000068A9F00000000204411000000007E
++:104E9000CAFEBABE00204811000000000000000059
++:104EA0001AE000000000068D0000000000800000F5
++:104EB00000000000000000001AC000000000068F83
++:104EC0009E0000000020441100000000CAFEBABE8F
++:104ED0000020481100000000000000001AE000005F
++:104EE00000000692000000000080000000000000AA
++:104EF00000000000006000000000000B0000100037
++:104F000000600411000003150000000000200411DF
++:104F1000000000000000000000600811000001B265
++:104F20000000225C0020441100000000000000038B
++:104F3000002048110000000000002256002044110B
++:104F4000000000000000001B0020481100000000CD
++:104F50000000A1FC0020441100000000000000013E
++:104F600000204811000000000001A1FDC0204411F4
++:104F7000000000000000002100201E2D00000000A5
++:104F80000000001000221E27000000000000002486
++:104F90000020222D000000000000FFFF0028222832
++:104FA0000000000000000000002949070000000088
++:104FB0000000000000204811000000000000002256
++:104FC0000020222D000000000000FFFF0028222802
++:104FD0000000000000000000002949070000000058
++:104FE0000000000000204811000000000000002325
++:104FF00000201E2D000000000000001000221E27CF
++:105000000000000000000000002949070000000027
++:1050100000000000004048110000000000000000F7
++:105020000000000000000000000000000000000080
++:105030000000000000000000000000000000000070
++:105040000000000000000000000000000000000060
++:105050000000000000000000000000000000000050
++:105060000000000000000000000000000000000040
++:105070000000000000000000000000000000000030
++:105080000000000000000000000000000000000020
++:105090000000000000000000000000000000000010
++:1050A0000000000000000000000000000000000000
++:1050B00000000000000000000000000000000000F0
++:1050C00000000000000000000000000000000000E0
++:1050D00000000000000000000000000000000000D0
++:1050E00000000000000000000000000000000000C0
++:1050F00000000000000000000000000000000000B0
++:10510000000000000000000000000000000000009F
++:10511000000000000000000000000000000000008F
++:10512000000000000000000000000000000000007F
++:10513000000000000000000000000000000000006F
++:10514000000000000000000000000000000000005F
++:10515000000000000000000000000000000000004F
++:10516000000000000000000000000000000000003F
++:10517000000000000000000000000000000000002F
++:10518000000000000000000000000000000000001F
++:10519000000000000000000000000000000000000F
++:1051A00000000000000000000000000000000000FF
++:1051B00000000000000000000000000000000000EF
++:1051C00000000000000000000000000000000000DF
++:1051D00000000000000000000000000000000000CF
++:1051E00000000000000000000000000000000000BF
++:1051F00000000000000000000000000000000000AF
++:10520000000000000000000000000000000000009E
++:10521000000000000000000000000000000000008E
++:10522000000000000000000000000000000000007E
++:10523000000000000000000000000000000000006E
++:10524000000000000000000000000000000000005E
++:10525000000000000000000000000000000000004E
++:10526000000000000000000000000000000000003E
++:10527000000000000000000000000000000000002E
++:10528000000000000000000000000000000000001E
++:10529000000000000000000000000000000000000E
++:1052A00000000000000000000000000000000000FE
++:1052B000014204FF05BD02500000000001C3016867
++:1052C000043F05BD00000000022502090250015103
++:1052D000000000000223024502A00241000000007D
++:1052E00003D705BD05BD05BD000000000646064705
++:1052F000031F05BD0000000005BD05C203200340DB
++:1053000000000000032A0282034203340000000070
++:1053100005BD05BD05BD05BD0000000005BD054E70
++:1053200005BD05BD0000000003BA05BD04B8034477
++:10533000000000000497044D043D05BD000000007E
++:1053400004CD05BD044104DA00000000044D05044D
++:10535000035103750000000005BD05BD05BD05BD79
++:105360000000000005BD05BD05BD05BD0000000035
++:1053700005BD05BD063C05C40000000005BD05BD1A
++:10538000000705BD0000000005BD05BD05BD05BD4C
++:105390000000000005BD05BD05BD05BD0000000005
++:1053A00003F803ED0408040600000000040E040ADC
++:1053B000040C041000000000041C04180424042041
++:1053C00000000000042C0428043404300000000015
++:1053D00005BD05BD043805BD0000000005BD05BDC7
++:1053E00005BD05BD0000000005BD05BD05BD05BD31
++:1053F000000000000002067606940006000000008F
++:00000001FF
+diff --git a/firmware/radeon/RV635_pfp.bin.ihex b/firmware/radeon/RV635_pfp.bin.ihex
+new file mode 100644
+index 0000000..f55292c
+--- /dev/null
++++ b/firmware/radeon/RV635_pfp.bin.ihex
+@@ -0,0 +1,145 @@
++:1000000000CA040000A00000007E828B007C038BED
++:10001000008001B8007C038B00D4401E00EE001E5F
++:1000200000CA040000A00000007E828B00C41838C3
++:1000300000CA240000CA2800009581A800C41C3A08
++:1000400000C3C00000CA080000CA0C00007C744B4A
++:1000500000C200050099C00000C41C3A007C744C2A
++:1000600000C0FFF000042C0400309002007D250049
++:1000700000351402007D350B00255403007CD5802B
++:1000800000259C030095C00400D5001B007EDDC147
++:10009000007D9D8000D6801B00D5801B00D4401EB3
++:1000A00000D5401E00D6401E00D6801E00D4801E03
++:1000B00000D4C01E009783D300D5C01E00CA08001C
++:1000C0000080001A00CA0C0000E4011E00D4001ECB
++:1000D0000080000C00C4183800E4013E00D4001E6B
++:1000E0000080000C00C4183800D4401E00EE001E32
++:1000F00000CA040000A00000007E828B00E4011E04
++:1001000000D4001E00D4401E00EE001E00CA0400F1
++:1001100000A00000007E828B00E4013E00D4001E9F
++:1001200000D4401E00EE001E00CA040000A0000023
++:10013000007E828B00CA180000D4401E00D5801EAD
++:100140000080005300D4007500D4401E00CA08008F
++:1001500000CA0C0000CA100000D4801900D4C018D6
++:1001600000D5001700D4801E00D4C01E00D5001E8C
++:1001700000E2001E00CA040000A00000007E828B86
++:1001800000CA080000D4806000D4401E0080000037
++:1001900000D4801E00CA080000D4806100D4401E34
++:1001A0000080000000D4801E00CA080000CA0C00B5
++:1001B00000D4401E00D4801600D4C01600D4801E87
++:1001C000008001B800D4C01E00C6084300CA0C005D
++:1001D00000CA10000094800400CA140000E420F358
++:1001E00000D4201300D5606500D4E01C00D5201C8D
++:1001F00000D5601C008000000006200100C60843F6
++:1002000000CA0C0000CA1000009483F700CA140052
++:1002100000E420F30080007900D4201300C60843D6
++:1002200000CA0C0000CA1000009883EF00CA140036
++:1002300000D400640080008D0000000000C414326F
++:1002400000C6184300C4082F0095400500C40C30B8
++:1002500000D4401E0080000000EE001E009583F5D3
++:1002600000C4103100D4403300D5206500D4A01C58
++:1002700000D4E01C00D5201C00E4015E00D4001E68
++:10028000008000000006200100CA1800000A2001BA
++:1002900000D6007600C408360098800700C61045D6
++:1002A0000095011000D4001F00D46062008000009F
++:1002B00000D4206200CC383500CC1433008401BB5C
++:1002C00000D4007200D5401E0080000000EE001E29
++:1002D00000E2001A008401BB00E2001A00CC104BBF
++:1002E00000CC0447002C9401007D098B0098400548
++:1002F000007D15CB00D4001A008001B800D4006D39
++:100300000034440100CC0C480098403A00CC2C4A00
++:100310000095800400CC0449008001B800D4001A84
++:1003200000D4C01A00282801008400F000CC10037B
++:100330000098801B0004380C008400F000CC1003EF
++:100340000098801700043808008400F000CC1003E7
++:100350000098801300043804008400F000CC1003DF
++:100360000098801400CC104C009A800900CC144DE9
++:10037000009840DC00D4006D00CC184800D5001A6D
++:1003800000D5401A008000C900D5801A0096C0D55B
++:1003900000D4006D008001B800D4006E009AC00344
++:1003A00000D4006D00D4006E0080000000EC007FDF
++:1003B000009AC0CC00D4006D008001B800D4006E5B
++:1003C00000CC140300CC180300CC1C03007D910367
++:1003D000007DD583007D190C0035CC1F0035701FC2
++:1003E000007CF0CB007CD08B00880000007E8E8BE0
++:1003F0000095C00400D4006E008001B800D4001A3B
++:1004000000D4C01A00CC080300CC0C0300CC1003AD
++:1004100000CC140300CC180300CC1C0300CC240334
++:1004200000CC28030035C41F0036B01F007C704B81
++:100430000034F01F007C704B0035701F007C704B47
++:10044000007D8881007DCCC1007E5101007E9541F8
++:10045000007C9082007CD4C2007C848B009AC00314
++:10046000007C8C8B002C88010098809E00D4006D4D
++:100470000098409C00D4006E00CC084C00CC0C4D81
++:1004800000CC104800D4801A00D4C01A00800101AA
++:1004900000D5001A00CC083200D40032009482D972
++:1004A00000CA0C0000D4401E0080000000D4001ED2
++:1004B00000E4011E00D4001E00CA080000CA0C009F
++:1004C00000CA100000D4401E00CA140000D4801ED0
++:1004D00000D4C01E00D5001E00D5401E00D54034FB
++:1004E0000080000000EE001E0028040400E2001A54
++:1004F00000E2001A00D4401A00CA380000CC0803F9
++:1005000000CC0C0300CC0C0300CC0C03009882BD83
++:1005100000000000008401BB00D7A06F0080000035
++:1005200000EE001F00CA040000C2FF0000CC083427
++:1005300000C13FFF007C74CB007CC90B007D010F24
++:10054000009902B0007C738B008401BB00D7A06FC0
++:100550000080000000EE001F00CA080000281900FB
++:10056000007D898B009580140028140400CA0C00BB
++:1005700000CA100000CA1C0000CA240000E2001FCC
++:1005800000D4C01A00D5001A00D5401A00CC1803B8
++:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
++:1005A000007D9C4700984297000000000080016198
++:1005B00000D4C01A00D4401E00D4801E0080000069
++:1005C00000EE001E00E4011E00D4001E00D4401EF8
++:1005D00000EE001E00CA040000A00000007E828B16
++:1005E00000E4013E00D4001E00D4401E00EE001EB8
++:1005F00000CA040000A00000007E828B00CA080030
++:1006000000248C06000CCC060098C00600CC104ECE
++:100610000099000400D4007300E4011E00D4001E01
++:1006200000D4401E00D4801E0080000000EE001E9A
++:1006300000CA080000CA0C000034D01800251001C0
++:100640000095002100C17FFF00CA100000CA1400FD
++:1006500000CA180000D4801D00D4C01D007DB18BDD
++:1006600000C1420200C2C00100D5801D0034DC0E72
++:10067000007D5D4C007F734C00D7401E00D5001EEE
++:1006800000D5401E00C1420000C2C00000099C010C
++:100690000031DC10007F5F4C007F734C00042802A7
++:1006A000007D838000D5A86F00D5806600D7401EEE
++:1006B00000EC005E00C8240200C82402008001B8DB
++:1006C00000D6007600D4401E00D4801E00D4C01E88
++:1006D0000080000000EE001E0080000000EE001F01
++:1006E00000D4001F0080000000D4001F00D4001FB1
++:1006F0000088000000D4001F00000000000000007F
++:1007000000000000000000000000000000000000E9
++:1007100000000000000000000000000000000000D9
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:1008000000010171000201780003008F0004007FE5
++:10081000000500030006003F000700320008012C1D
++:1008200000090046000A0036001001B6001700A2B9
++:100830000022013A00230149002000B400240125D0
++:100840000027004D0028006A002A0060002B00529B
++:10085000002F0065003200870034017F003C015604
++:10086000003F00720041018C0044012E00550173CD
++:100870000056017A0060000B00610034006200380D
++:1008800000630038006400380065003800660038F6
++:10089000006700380068003A00690041006A0048BB
++:1008A000006B0048006C0048006D0048006E004876
++:1008B000006F00480000000600000006000000066F
++:1008C0000000000600000006000000060000000610
++:1008D0000000000600000006000000060000000600
++:1008E00000000006000000060000000600000006F0
++:1008F00000000006000000060000000600000006E0
++:00000001FF
+diff --git a/firmware/radeon/RV670_me.bin.ihex b/firmware/radeon/RV670_me.bin.ihex
+new file mode 100644
+index 0000000..9fbfc0e
+--- /dev/null
++++ b/firmware/radeon/RV670_me.bin.ihex
+@@ -0,0 +1,1345 @@
++:1000000000000000C020040000000000000000000C
++:1000100000A0000A000000000000FFFF00284621A9
++:100020000000000000000000D900480000000000AF
++:1000300000000000C02004000000000000000000DC
++:1000400000A0000A000000000000000000E0000026
++:100050000000000000010000C02946200000000050
++:1000600000000000D900480000000000000000006F
++:10007000C0200400000000000000000000A0000AF2
++:10008000000000008100000000204411000000007A
++:1000900000000001002048110000000000042004BE
++:1000A000006044110000067C0000000000600000B9
++:1000B0000000062400000000006000000000063878
++:1000C00000000000C02008000000000000000F0039
++:1000D000002816220000000000000008002116255C
++:1000E000000000000000001800203625000000007D
++:1000F0008D000000002044110000000000000004FA
++:10010000002F022500000000000000000CE00000AD
++:1001100000000018004120000040481100000019B4
++:100120000042200000204811000000008E00000066
++:1001300000204411000000000000002800204A2D8B
++:1001400000000000900000000020441100000000AA
++:100150000000000000204805000000000000000C26
++:1001600000211622000000000000000300281625D0
++:10017000000000000000001900211A220000000009
++:100180000000000400281A26000000000000000003
++:10019000002914C5000000000000001900203625C9
++:1001A0000000000000000000003A140200000000FF
++:1001B00000000016002116250000000000000003CA
++:1001C00000281625000000000000001700200E2D5A
++:1001D00000000000FFFFFFFC00280E2300000000CD
++:1001E00000000000002914A3000000000000001718
++:1001F00000203625000000000000800000280E22AC
++:10020000000000000000000700220E230000000094
++:10021000000000000029386E0000000020000000EF
++:1002200000280E22000000000000000600210E231E
++:1002300000000000000000000029386E00000000EF
++:100240000000000000220222000000000000000068
++:1002500014E0000000000038000000002EE0000064
++:1002600000000035000000002CE000000000003716
++:100270000000000000400E2D0000003900000008C2
++:1002800000200E2D00000000000000090040122D8B
++:10029000000000460000000100400E2D0000003963
++:1002A00000000000C0200C0000000000003FFFFC28
++:1002B0000028122300000000000000020022122487
++:1002C000000000000000001F00211E2300000000AD
++:1002D0000000000014E000000000003E00000008E4
++:1002E00000401C11000000410000000D00201E2DE8
++:1002F000000000000000000F00281E270000000082
++:100300000000000300221E27000000007FC0000044
++:1003100000281A23000000000000001400211A2603
++:10032000000000000000000100331A260000000059
++:100330000000000800221A26000000000000000053
++:1003400000290CC700000000000000270020362410
++:100350000000000000007F000028122100000000C3
++:1003600000001400002F0224000000000000000024
++:100370000CE000000000004B0000000100290E23EB
++:10038000000000000000000E0020362300000000E6
++:100390000000E0000020441100000000FFF8000011
++:1003A00000294A230000000000000000003A2C024F
++:1003B000000000000000000200220E2B00000000E0
++:1003C000FC00000000280E23000000000000000FC9
++:1003D000002036230000000000001FFF00294A23F0
++:1003E000000000000000002700204A2D000000004F
++:1003F000000000000020481100000000000000295B
++:1004000000200E2D00000000060A020000294A23E9
++:100410000000000000000000002048110000000063
++:100420000000000000204811000000000000000152
++:1004300000210222000000000000000014E0000083
++:1004400000000061000000002EE000000000005FDE
++:10045000000000002CE000000000005E0000000032
++:1004600000400E2D000000620000000100400E2D33
++:10047000000000620000000A00200E2D00000000B5
++:100480000000000B0040122D0000006A0000000078
++:10049000C0200C0000000000003FFFFC00281223D9
++:1004A00000000000000000020022122400000000F2
++:1004B0007FC0000000281623000000000000001488
++:1004C0000021162500000000000000010033162561
++:1004D000000000008000000000280E230000000043
++:1004E0000000000000290CA3000000003FFFFC00FA
++:1004F00000290E23000000000000001F00211E2321
++:10050000000000000000000014E000000000006D8A
++:100510000000010000401C11000000700000000DF0
++:1005200000201E2D00000000000000F000281E2703
++:10053000000000000000000400221E270000000050
++:100540008100000000204411000000000000000DA8
++:100550000020481100000000FFFFF0FF00281A30C3
++:10056000000000000000A02800204411000000004E
++:1005700000000000002948E6000000000000A0186C
++:1005800000204411000000003FFFFFFF00284A2325
++:10059000000000000000A010002044110000000036
++:1005A00000000000002048040000000000000030AF
++:1005B0000020162D00000000000000020029162572
++:1005C0000000000000000030002036250000000080
++:1005D000000000250020162D000000000000000093
++:1005E000002F00A300000000000000000CC000006D
++:1005F00000000083000000260020162D00000000EF
++:1006000000000000002F00A4000000000000000017
++:100610000CC000000000008400000000004000004A
++:100620000000008A000000250020362300000000A2
++:100630000000002600203624000000000000001703
++:1006400000201E2D000000000000000200210227F3
++:10065000000000000000000014E000000000008A1C
++:1006600000000000006000000000065900000000CB
++:10067000006000000000064D0000000200210E2274
++:10068000000000000000000014C000000000008D09
++:1006900000000012C040362000000093000000005F
++:1006A0002EE0000000000091000000002CE000009F
++:1006B000000000900000000200400E2D000000929B
++:1006C0000000000300400E2D000000920000000C0E
++:1006D00000200E2D00000000000000120020362334
++:1006E000000000000000000300210E2200000000B6
++:1006F0000000000014C00000000000980000A00CE2
++:10070000002044110000000000000000C02048004C
++:100710000000000000000000C0404800000000A0F1
++:100720000000A00C002044110000000000000000A8
++:100730000020481100000000000000002EE0000032
++:100740000000009E000000002CE000000000009D62
++:100750000000000200400E2D0000009F000000037A
++:1007600000400E2D0000009F0000000C00200E2D08
++:10077000000000000000000000204803000000000E
++:1007800000000000003A0C0200000000003F0000E2
++:1007900000280E23000000000000001000210E239E
++:1007A00000000000000000110020362300000000BF
++:1007B0000000001E0021022B0000000000000000CD
++:1007C00014C00000000000A700000016C020362062
++:1007D000000000000000001F0021022B00000000AC
++:1007E0000000000014C00000000000AA0000001576
++:1007F000C0203620000000000000000800210E2B61
++:10080000000000000000007F00280E230000000010
++:1008100000000000002F0223000000000000000084
++:100820000CE00000000000E10000000027000000D4
++:10083000000000000000000000600000000002A3B3
++:1008400000000001002F0223000000000000000053
++:100850000AE00000000000B300000000006000009B
++:100860000000013A81000000002044110000000057
++:100870000000000600204811000000000000000CED
++:1008800000221E300000000099800000002044116A
++:1008900000000000000000040020122D00000000F5
++:1008A00000000008002212240000000000000010D8
++:1008B00000201811000000000000000000291CE4C6
++:1008C0000000000000000000006048070000012F49
++:1008D0009B00000000204411000000000000000008
++:1008E00000204802000000009C000000002044118D
++:1008F00000000000000000000033146F0000000042
++:100900000000000100333E23000000000000000052
++:10091000D9004800000000000000000000203C0555
++:1009200000000000810000000020441100000000D1
++:100930000000000E00204811000000000000000030
++:1009400000201010000000000000E007002044110B
++:10095000000000000000000F0021022B000000003A
++:100960000000000014C00000000000CB00F8FF08E9
++:1009700000204811000000009800000000404811CD
++:10098000000000DC000000F000280E220000000043
++:10099000000000A0002F0223000000000000000063
++:1009A0000CC00000000000DA0000001100200E2D35
++:1009B0000000000000000001002F022300000000E2
++:1009C000000000000CE00000000000D50000000264
++:1009D000002F022300000000000000000CE00000D7
++:1009E000000000D400003F0000400C11000000D6C1
++:1009F00000001F0000400C11000000D600000F0096
++:100A000000200C11000000000038000900294A23D2
++:100A1000000000003F00000000280E2B0000000036
++:100A20000000000200220E2300000000000000076A
++:100A300000494A23000000DC00380F09002048115B
++:100A400000000000680000070020481100000000BE
++:100A50000000000800214A270000000000000000FC
++:100A60000020481100000000060A020000294A2464
++:100A700000000000000000000020481100000000FD
++:100A80000000000000204811000000000000A20249
++:100A9000002044110000000000FF000000280E228A
++:100AA000000000000000008000294A230000000030
++:100AB0000000002700200E2D00000000000000268E
++:100AC0000020122D0000000000000000002F008315
++:100AD00000000000000000000CE00000000000EA40
++:100AE000000000000060000000000653000000004D
++:100AF00000400000000000EB00000000006000006B
++:100B000000000656000000070020222D0000000013
++:100B10000000000500220E2200000000001000006E
++:100B200000280E23000000000000000000292068BB
++:100B30000000000000000000003A0C02000000006D
++:100B4000000000EF00280E2300000000000000005D
++:100B500000292068000000000000001700200E2D72
++:100B6000000000000000000300210223000000003C
++:100B70000000000014E00000000000F80000000B7E
++:100B800000210228000000000000000014C0000046
++:100B9000000000F8000004000029222800000000E6
++:100BA0000000001400203628000000000000001C97
++:100BB00000210E22000000000000000014C0000010
++:100BC000000000FD0000A30C002044110000000004
++:100BD0000000000000204811000000000000001E7E
++:100BE00000210E22000000000000000014C00000E0
++:100BF0000000010B0000A30F0020441100000000C2
++:100C00000000001100200E2D000000000000000177
++:100C1000002F022300000000000000000CC00000B4
++:100C200000000104FFFFFFFF004048110000010B1E
++:100C300000000002002F022300000000000000005E
++:100C40000CC00000000001070000FFFF0040481139
++:100C50000000010B00000004002F02230000000030
++:100C6000000000000CC000000000010A000000FFAE
++:100C7000004048110000010B000000010020481155
++:100C8000000000000002C400002044110000000029
++:100C90000000001F00210E220000000000000000E4
++:100CA00014C00000000001120000001040210E20BE
++:100CB00000000000000000130020362300000000A8
++:100CC0000000001840224A20000000000000001030
++:100CD000C0424A20000001140000000000200C1156
++:100CE0000000000000000013002036230000000078
++:100CF000000000000020481100000000000000007B
++:100D000000204811000000000000000A002010111F
++:100D10000000000000000000002F0224000000007E
++:100D2000000000000CE000000000011B00000000BB
++:100D300000204811000000000000000100531224B0
++:100D400000000117FFBFFFFF00283A2E000000003F
++:100D50000000001B00210222000000000000000033
++:100D600014C000000000012E81000000002044118A
++:100D7000000000000000000D0020481100000000ED
++:100D80000000001800220E3000000000FC000000EF
++:100D900000280E2300000000810000000020441104
++:100DA000000000000000000E0020481100000000BC
++:100DB0000000000000201010000000000000E00E05
++:100DC000002044110000000007F8FF08002048112F
++:100DD000000000000000000000294A23000000007D
++:100DE0000000001C00201E2D000000000000000874
++:100DF00000214A27000000000000000000204811E8
++:100E000000000000060A020000294A240000000039
++:100E10000000000000204811000000000000000059
++:100E200000204811000000000000000000800000C9
++:100E300000000000810000000020441100000000BC
++:100E40000000000100204811000000000000217C8B
++:100E50000020441100000000008000000020481124
++:100E60000000000000000000002048060000000014
++:100E70000000000800214A270000000000000000D8
++:100E800017000000000000000004217F00604411F2
++:100E90000000067C0000001F00210230000000005E
++:100EA0000000000014C000000000067B00000004E9
++:100EB00000404C1100000135810000000020441169
++:100EC00000000000000000010020481100000000A8
++:100ED000000021F800204411000000000000001C68
++:100EE0000020481100000000000421F900604411B6
++:100EF0000000067C0000001100210230000000000C
++:100F00000000000014E000000000013C00000000B0
++:100F100000800000000000000000000000600000F1
++:100F20000000000B00000000006004110000031529
++:100F3000000000000020041100000000000000007C
++:100F400000600811000001B2000000000060000015
++:100F5000000001600000FFFF40280E20000000009C
++:100F600000000010C0211220000000000000FFFF60
++:100F7000402806200000000000000010C0210A20C8
++:100F800000000000000000000034146100000000B8
++:100F90000000000000741882000002BB0001A1FDE7
++:100FA00000604411000002E000003FFF002F022F0C
++:100FB00000000000000000000CC00000000001471D
++:100FC00000000000C040040000000001000000001C
++:100FD000006000000000000B000000000060041131
++:100FE00000000315000000000020041100000000B4
++:100FF0000000000000600811000001B200003FFF87
++:10100000002F022F00000000000000000CE0000094
++:10101000000000000000000000600000000001600F
++:101020000000001040210E20000000000000FFFF23
++:10103000C0281220000000000000001040211620EF
++:10104000000000000000FFFFC0681A20000002BB83
++:101050000001A1FD00604411000002E000003FFF1C
++:10106000002F022F00000000000000000CC0000054
++:101070000000015800000000C04004000000000112
++:101080000000225C0020441100000000000000016C
++:1010900000300A2F000000000000000100210A2299
++:1010A000000000000000000300384A220000000099
++:1010B0000000225600204411000000000000001A29
++:1010C00000204811000000000000A1FC0020441195
++:1010D0000000000000000001008048110000000036
++:1010E00000000000006000000000000B0000000095
++:1010F000006000000000018F0000000000600000A0
++:10110000000001A000003FFF002F022F00000000A0
++:10111000000000000CE000000000000000000000E3
++:1011200000202C0800000000000000000020241116
++:101130000000000000000000002028110000000056
++:10114000000022560020441100000000000000169C
++:1011500000204811000000000000225C0020441123
++:101160000000000000000003002048110000000003
++:1011700093800000002044110000000000000002E5
++:1011800000221E290000000000000000007048EB53
++:101190000000019C0000000000600000000002BB95
++:1011A00000000001403306200000000000000000A5
++:1011B000C03024090000000000003FFF002F022F74
++:1011C00000000000000000000CE000000000000033
++:1011D0000000000000600000000002A3000000000A
++:1011E000002F022100000000000000000AE00000C3
++:1011F0000000018100000000006000000000013AD2
++:101200000000000000400000000001869500000082
++:10121000002044110000000000000000002F022107
++:1012200000000000000000000CE00000000001864B
++:1012300000000000C0204800000000000000000185
++:10124000005306210000018292000000002044119A
++:101250000000000000000000C0604800000001978E
++:101260000001A1FD00204411000000000000001159
++:101270000020062D00000000000000000078042A75
++:10128000000002FB00000000002028090000000010
++:1012900000003FFF002F022F0000000000000000B0
++:1012A0000CC000000000017400000000C0400400F9
++:1012B000000000010000021000600411000003158E
++:1012C00000003FFF002F022F000000000000000080
++:1012D0000CE000000000019400000015C020362042
++:1012E0000000000000000016C020362000000000B2
++:1012F0003F800000002004110000000046000000B4
++:1013000000600811000001B2000000000080000031
++:10131000000000000000A1FC0020441100000000BB
++:1013200000003FFF002F022F00000000000000001F
++:101330000CC000000000019B00000001008048116B
++:1013400000000000000000210080481100000000A3
++:101350000000FFFF40280E200000000000000010E9
++:10136000C0211220000000000000FFFF40281620CE
++:101370000000000000000010C0811A2000000000E2
++:101380008100000000204411000000000000000661
++:1013900000204811000000000000000800221E305C
++:1013A000000000000000002900201A2D00000000AD
++:1013B0000000E0000020441100000000FFFBFF09D6
++:1013C00000204811000000000000000F0020222D26
++:1013D0000000000000001FFF00294A280000000054
++:1013E000000000060020222D000000000000000088
++:1013F000002920E80000000000000000002048084C
++:101400000000000000000000002048110000000063
++:10141000060A020000294A26000000000000000021
++:1014200000204811000000000000000000204811CA
++:101430000000000000000100002018110000000062
++:101440000000000800621E280000012F00000008B4
++:1014500000822228000000000002C0000020441189
++:10146000000000000000001500600E2D000001BD0E
++:101470000000001600600E2D000001BD0000C00835
++:1014800000204411000000000000001700200E2D75
++:10149000000000000000000014C00000000001B9BE
++:1014A0000000000000200411000000000000000007
++:1014B0000020480100000000390000000020481111
++:1014C00000000000000000000020481100000000A3
++:1014D000000000000080480200000000000000182A
++:1014E00000202E2D0000000000000000003B0D63D6
++:1014F000000000000000000800224A230000000055
++:101500000000001000224A23000000000000001824
++:1015100000224A2300000000000000000080480371
++:101520000000000000000000006000000000000B50
++:10153000000010000060041100000315000000000E
++:1015400000200411000000000000000000600811ED
++:10155000000001B2000000070021062F000000007B
++:101560000000001300200A2D000000000000000110
++:1015700000202C11000000000000FFFF4028222066
++:10158000000000000000000F0026222800000000DC
++:101590000000001040212620000000000000000F85
++:1015A000002626290000000000000000002028027C
++:1015B000000000000000225600204411000000003E
++:1015C0000000001B00204811000000000000000087
++:1015D000002F022100000000000000000CE00000CD
++:1015E000000001E00000225C002044110000000027
++:1015F0000000008100204811000000000000A1FC54
++:1016000000204411000000000000000100204811EB
++:10161000000000000000008000201C1100000000FD
++:1016200000000000002F0227000000000000000062
++:101630000CE00000000001DC000000000060000081
++:10164000000001E90000000100531E27000001D83E
++:101650000000000100202C11000000000000001F0D
++:1016600000280A22000000000000001F00282A2A8B
++:10167000000000000000000100530621000001D11D
++:101680000000225C00204411000000000000000265
++:1016900000304A2F000000000000A1FC002044118F
++:1016A00000000000000000010020481100000000C0
++:1016B0000000000100301E2F0000000000000000AC
++:1016C000002F022700000000000000000CE00000D6
++:1016D000000000000000000000600000000001E9C0
++:1016E0000000000100531E27000001E50000FFFF7D
++:1016F00040280E20000000000000000F00260E23EE
++:101700000000000000000010C021122000000000B6
++:101710000000000F0026122400000000000000005E
++:1017200000201411000000000000000000601811EB
++:10173000000002BB0001A1FD0020441100000000D8
++:1017400000000000002F022B00000000000000003D
++:101750000CE00000000001F8000000100022162834
++:1017600000000000FFFF0000002816250000000018
++:101770000000FFFF00281A29000000000000000000
++:10178000002948C500000000000000000020480AB1
++:10179000000000000000000000202C1100000000EC
++:1017A000000000100022162300000000FFFF0000D0
++:1017B00000281625000000000000FFFF00281A2462
++:1017C0000000000000000000002948C500000000E3
++:1017D0000000000000731503000002050000000077
++:1017E0000020180500000000000000000073152410
++:1017F0000000020500000000002D14C500000000DC
++:1018000000000000003008A20000000000000000FE
++:101810000020480200000000000000000020280214
++:101820000000000000000000002020030000000075
++:101830000000000000802404000000000000000FF1
++:1018400000210225000000000000000014C000007C
++:101850000000067B00000000002B140500000000C3
++:1018600000000001009016250000000000000000AC
++:10187000006000000000000B000000000060041188
++:10188000000003150000000000200411000000000B
++:101890000000000000600811000001B200002256A4
++:1018A00000204411000000000000001A00294A2214
++:1018B0000000000000000000C02000000000000048
++:1018C00000003FFF002F022F00000000000000007A
++:1018D0000CE000000000000000000000C020040038
++:1018E000000000000000225C002044110000000005
++:1018F0000000000300384A21000000000000A1FCA5
++:1019000000204411000000000000000100204811E8
++:10191000000000000000FFFF40281220000000002F
++:1019200000000010C0211A20000000000000FFFF8E
++:1019300040280E200000000000000010C0211620EA
++:10194000000000000000000000741465000002BBED
++:101950000001A1FD00604411000002E00000000150
++:10196000003306210000000000000000002F0221CB
++:1019700000000000000000000CC000000000021980
++:1019800000003FFF002F022F0000000000000000B9
++:101990000CC000000000021200000000C040040063
++:1019A0000000000100000000006000000000063898
++:1019B000000000000040040F0000021300000000BF
++:1019C000006000000000062400000000006000002D
++:1019D000000006380000021000600411000003152A
++:1019E0000000000000600000000001A000000000F6
++:1019F000006000000000019C00000000006000008A
++:101A0000000002BB0000000000600000000002A314
++:101A1000938000000020441100000000000000003E
++:101A2000002048080000000000000000002F022FE6
++:101A300000000000000000000AE000000000023288
++:101A400000000000006000000000013A00000000FB
++:101A50000040000000000236950000000020441104
++:101A60000000000000000000002F022F0000000016
++:101A7000000000000CE00000000002360000000042
++:101A8000C0404800000002339200000000204411D2
++:101A90000000000000000000C0204800000000001E
++:101AA0000000225600204411000000000000001633
++:101AB00000204811000000000000225C00204411BA
++:101AC000000000000000000300204811000000009A
++:101AD0000000A1FC002044110000000000000001F3
++:101AE00000204811000000000001A1FD0020441169
++:101AF000000000000000000000600411000002FB74
++:101B000000000000C04004000000000100000000D0
++:101B100000600000000006240000A00C002044111A
++:101B20000000000000000000C0204800000000008D
++:101B300000000000C040480000000000000000005D
++:101B4000006000000000000B0000001840210A2087
++:101B50000000000000000003002F0222000000002F
++:101B6000000000000AE000000000024C0000001429
++:101B70000020222D00000000000801010029222879
++:101B800000000000000000140020362800000000C3
++:101B90000000A30C00204411000000000000000021
++:101BA000C02048000000000000000000C0204800E5
++:101BB0000000000000000000C0404800000002518A
++:101BC00000000000006000000000000B000000109A
++:101BD00000600411000003153F8000000020041184
++:101BE000000000000000000000600811000001B2C9
++:101BF0000000225C002044110000000000000003EF
++:101C000000204811000000000000000000600000FB
++:101C10000000027C0000001700201E2D00000000C4
++:101C20000000000100211E2700000000000000004D
++:101C300014E000000000026A0000001200201E2DC7
++:101C4000000000000000FFFF00281E270000000029
++:101C50000000000000341C2700000000000000000D
++:101C600012C000000000025F0000000000201C11F4
++:101C70000000000000000000002F00E50000000050
++:101C80000000000008C00000000002620000000028
++:101C900000201407000000000000001200201E2D8C
++:101CA000000000000000001000211E2700000000BE
++:101CB0000000000000341C4700000000000000008D
++:101CC00012C00000000002670000000000201C118C
++:101CD0000000000000000000002F00E600000000EF
++:101CE0000000000008C000000000026A00000000C0
++:101CF0000020180700000000000000000060000045
++:101D0000000002C100002256002044110000000023
++:101D1000000000000034202300000000000000004C
++:101D200012C00000000002720000000000342044D5
++:101D3000000000000000000012C00000000002715E
++:101D40000000001600404811000002760000001854
++:101D500000404811000002760000000000342044DA
++:101D6000000000000000000012C00000000002752A
++:101D70000000001700404811000002760000001922
++:101D800000204811000000000000A1FC00204411C8
++:101D900000000000000000010020481100000000C9
++:101DA0000001A1FD00604411000002E900003FFFB6
++:101DB000002F022F00000000000000000CC00000F7
++:101DC0000000025600000000C040040000000001B6
++:101DD0000000001040210620000000000000FFFF6E
++:101DE000C0280A20000000000000001040210E2042
++:101DF000000000000000FFFFC028122000000000CB
++:101E00000000001040211620000000000000FFFF2D
++:101E1000C0881A200000000081000000002044114A
++:101E20000000000000000001002048110000000038
++:101E300000042004006044110000067C0000000043
++:101E4000006000000000062400000000C0600000E8
++:101E5000000002A30000000500200A2D0000000081
++:101E60000000000800220A22000000000000002BF1
++:101E700000201A2D000000000000001C00201E2D74
++:101E8000000000000000700000281E270000000075
++:101E90000000000000311CE6000000000000002AE5
++:101EA00000201A2D000000000000000C00221A265D
++:101EB0000000000000000000002F00E6000000000D
++:101EC0000000000006E00000000002920000000098
++:101ED00000201C11000000000000000000200C1178
++:101EE000000000000000002B00203623000000004E
++:101EF0000000001000201811000000000000000089
++:101F000000691CE20000012F9380000000204411B2
++:101F10000000000000000000002048070000000052
++:101F200095000000002044110000000000000000A7
++:101F3000002F022F00000000000000000CE0000055
++:101F40000000029D0000000100333E2F0000000051
++:101F500000000000D90048000000000092000000CE
++:101F6000002044110000000000000000C0204800D4
++:101F7000000000000000001C0040362700000000A8
++:101F80000000000CC0220A20000000000000002910
++:101F9000002036220000000000000028C04036204B
++:101FA000000000000000A2A4002044110000000076
++:101FB000000000090020481100000000A1000000FE
++:101FC00000204411000000000000000100804811C2
++:101FD000000000000000002100201E2D0000000075
++:101FE00000000000002C1CE30000000000000021A5
++:101FF00000203627000000000000002200201E2DD7
++:102000000000000000000000002C1CE400000000A4
++:1020100000000022002036270000000000000023FE
++:1020200000201E2D0000000000000000003120A351
++:102030000000000000000000002D1D07000000004F
++:1020400000000023002036270000000000000024CC
++:1020500000201E2D0000000000000000003120C400
++:102060000000000000000000002D1D07000000001F
++:10207000000000240080362700000000000000213E
++:10208000002036230000000000000022002036243B
++:10209000000000000000000000311CA30000000050
++:1020A0000000002300203627000000000000000090
++:1020B00000311CC40000000000000024008036270E
++:1020C000000000000000001A002036270000000079
++:1020D0000000001B00203628000000000000001750
++:1020E00000201E2D00000000000000020021022739
++:1020F000000000000000000014C00000000002DC2E
++:102100000000000000400000000002D90000001A9A
++:1021100000203627000000000000001B00203628A9
++:10212000000000000000001700201E2D000000002D
++:102130000000000200210227000000000000000053
++:1021400014E00000000002D9000000030021022773
++:10215000000000000000000014E00000000002DCAD
++:102160000000002300201E2D0000000000000000E1
++:10217000002E00E1000000000000000002C000008E
++:10218000000002DC0000002100201E2D00000000E5
++:1021900000000000003120A100000000000000004D
++:1021A000002E00E8000000000000000006C0000053
++:1021B000000002DC0000002400201E2D00000000B2
++:1021C00000000000002E00E20000000000000000FF
++:1021D00002C00000000002DC0000002200201E2DD2
++:1021E0000000000000000000003120C200000000DC
++:1021F00000000000002E00E80000000000000000C9
++:1022000006C00000000002DC0000000000600000CA
++:10221000000006590000000000600000000002B548
++:102220000000000000400000000002DE000000008E
++:1022300000600000000002B5000000000060000027
++:10224000000006500000000000400000000002DE18
++:102250000000000000600000000002A70000000075
++:1022600000400000000002DE0000001A00201E2DC9
++:10227000000000000000001B0080222D0000000074
++:102280000000001000221E230000000000000000DB
++:1022900000294887000000000000000000311CA356
++:1022A000000000000000001000221E2700000000B7
++:1022B0000000000000294887000000000000001016
++:1022C00000221E230000000000000000003120C496
++:1022D000000000000000FFFF00282228000000008E
++:1022E0000000000000894907000000000000001005
++:1022F00000221E2300000000000000000029488783
++:10230000000000000000001000221E21000000005C
++:102310000000000000294847000000000000000005
++:1023200000311CA3000000000000001000221E2746
++:1023300000000000000000000029488700000000A5
++:102340000000000000311CA100000000000000108F
++:1023500000221E270000000000000000002948475E
++:10236000000000000000001000221E2300000000FA
++:1023700000000000003120C4000000000000FFFF4A
++:102380000028222800000000000000000029490762
++:10239000000000000000001000221E2100000000CC
++:1023A00000000000003120C2000000000000FFFF1C
++:1023B00000282228000000000000000000894907D2
++:1023C000000000000000001000221E23000000009A
++:1023D0000000000000294887000000000000000104
++:1023E00000220A210000000000000000003308A2C3
++:1023F000000000000000001000221E22000000006B
++:102400000000001000212222000000000000000057
++:1024100000294907000000000000000000311CA353
++:10242000000000000000001000221E270000000035
++:1024300000000000002948870000000000000001A3
++:1024400000220A210000000000000000003008A265
++:10245000000000000000001000221E22000000000A
++:1024600000000010002122220000000000000000F7
++:1024700000294907000000000000001000221E2370
++:102480000000000000000000003120C40000000037
++:102490000000FFFF002822280000000000000000CC
++:1024A000002949070000000000000000003808C5AE
++:1024B00000000000000000000030084100000000A3
++:1024C0000000000100220A220000000000000000BD
++:1024D000003308A2000000000000001000221E22AD
++:1024E0000000000000000010002122220000000077
++:1024F00000000000008949070000000000000017EC
++:102500000020222D000000000000000014C0000088
++:1025100000000318FFFFFFEF002806210000000065
++:10252000000000140020222D000000000000F8E050
++:1025300000204411000000000000000000294901B3
++:1025400000000000000000000089490100000000B8
++:102550000000000000204811000000000000000002
++:102560000020481100000000060A02000080481107
++:102570000000000000000000C0200000000000007B
++:1025800097000000C020441100000000000000007F
++:10259000C0204811000000008A0000000020441103
++:1025A00000000000000000000020481100000000B2
++:1025B0000000225C00204411000000000000000028
++:1025C000C0204800000000000000A1FC00204411D1
++:1025D0000000000000000000C020480000000000D3
++:1025E00000000000C0200400000000000000000007
++:1025F00000A0000A00000000970000000020441125
++:102600000000000000000000002048110000000051
++:102610008A000000002044110000000000000000BB
++:1026200000204811000000000000225C002044113E
++:102630000000000000000000C02048000000000072
++:102640000000A1FC00204411000000000000000078
++:10265000C02048000000000000000000C02004006E
++:10266000000000000000000000A0000A00000000C0
++:10267000970000000020441100000000000000004E
++:1026800000204811000000008A00000000204411D2
++:1026900000000000000000000020481100000000C1
++:1026A0000000225C00204411000000000000000037
++:1026B000C0204800000000000000A1FC00204411E0
++:1026C0000000000000000000C020480000000000E2
++:1026D0000001A1FD002044110000000000000000E6
++:1026E000D90048000000000000000000C0200400E5
++:1026F000000000000000000000A0000A0000000030
++:1027000000002257002044110000000000000003D8
++:10271000C0484A20000000000000225D0020441153
++:102720000000000000000000C04048000000000061
++:1027300000000000006000000000063800000000FB
++:10274000C0200800000000000000225C00204411AE
++:10275000000000000000000300384A2200000000D2
++:102760000000A1FC00204411000000000000000057
++:10277000C0204800000000000001A1FD002044111D
++:102780000000000000000000002F022200000000F6
++:10279000000000000CE0000000000000000000004D
++:1027A00040204800000000000000000140304A20A6
++:1027B0000000000000000002C0304A2000000000BD
++:1027C0000000000100530A220000034B0000003FFC
++:1027D000C0280A20000000008100000000204411F1
++:1027E000000000000000000100204811000000006F
++:1027F000000021F800204411000000000000001833
++:102800000020481100000000000421F9006044117C
++:102810000000067C000000110021023000000000D2
++:102820000000000014E00000000003540000001449
++:10283000002F022200000000000000000CC0000079
++:10284000000003620001A2A4002044110000000067
++:1028500000000000006048020000036A0000210040
++:10286000002044110000000000000000C0204800CB
++:102870000000000000000000C02048000000000030
++:1028800000000000C0204800000000000000000020
++:10289000C04048000000000000000004002F022299
++:1028A00000000000000000000CC0000000000366F3
++:1028B0000001A2A40020441100000000000000005C
++:1028C000004048020000035D00000028002F0222A3
++:1028D00000000000000000000CC00000000005B374
++:1028E0000001A2A40020441100000000000000002C
++:1028F000004048020000035D0000002C0020362646
++:102900000000000000000049002018110000000035
++:102910000000003F002048110000000000000001FE
++:1029200000331A260000000000000000002F0226DD
++:1029300000000000000000000CC000000000036C5C
++:102940000000002C00801A2D000000000000003F55
++:10295000C0280A200000000000000015002F0222FD
++:1029600000000000000000000CE0000000000382F6
++:1029700000000006002F02220000000000000000FE
++:102980000CE00000000003AD00000016002F022242
++:1029900000000000000000000CE00000000003AF99
++:1029A00000000020002F02220000000000000000B4
++:1029B0000CE00000000003980000000F002F02222E
++:1029C00000000000000000000CE00000000003A474
++:1029D00000000010002F0222000000000000000094
++:1029E0000CE00000000003A40000001E002F0222E3
++:1029F00000000000000000000CE000000000038C5C
++:102A00000000A2A40020441100000000000000000B
++:102A100000404802000000000800000000290A22CF
++:102A2000000000000000000340210E200000000014
++:102A30000000000CC021122000000000000800006F
++:102A4000002812240000000000000014C0221620FC
++:102A50000000000000000000002914A40000000095
++:102A60000000A2A4002044110000000000000000AB
++:102A7000002948A2000000000000A1FE002044112F
++:102A800000000000000000000040480300000000BB
++:102A9000810000000020441100000000000000013F
++:102AA0000020481100000000000021F8002044111F
++:102AB0000000000000000016002048110000000087
++:102AC000000421F9006044110000067C000000159C
++:102AD00000210230000000000000000014E00000AF
++:102AE0000000038E0000210E0020441100000000B1
++:102AF00000000000C02048000000000000000000AE
++:102B0000C0204800000000000000A2A400204411E2
++:102B1000000000000000000000404802000000002B
++:102B200081000000002044110000000000000001AE
++:102B30000020481100000000000021F8002044118E
++:102B400000000000000000170020481100000000F5
++:102B5000000421F9006044110000067C000000031D
++:102B600000210230000000000000000014E000001E
++:102B70000000039A0000210800204411000000001A
++:102B800000000000C020480000000000000000001D
++:102B9000C0204800000000000000A2A40020441152
++:102BA000000000000000000000404802000000009B
++:102BB0000000A2A40020441100000000000000005A
++:102BC00000204802000000008000000000204411A6
++:102BD000000000000000000000204811000000007C
++:102BE00081000000002044110000000000000010DF
++:102BF000002048110000000000000000002000102C
++:102C0000000000000000000014C00000000003AA43
++:102C10000000000000400000000000000001A2A42D
++:102C20000020441100000000000000060040481190
++:102C3000000000000001A2A40020441100000000D8
++:102C400000000016006048110000036A0000000048
++:102C5000004000000000000000000000C02008004C
++:102C60000000000000000000C0200C000000000078
++:102C70000000001D002102230000000000000000F1
++:102C800014E00000000003C4810000000020441193
++:102C900000000000000000010020481100000000BA
++:102CA000000021F80020441100000000000000187E
++:102CB0000020481100000000000421F900604411C8
++:102CC0000000067C0000001100210230000000001E
++:102CD0000000000014E00000000003B80000210024
++:102CE0000020441100000000000000000020480205
++:102CF0000000000000000000002048030000000069
++:102D0000BABECAFE0020481100000000CAFEBABECA
++:102D100000204811000000000000A2A4002044117F
++:102D20000000000000000004004048110000000006
++:102D3000000021700020441100000000000000008D
++:102D400000204802000000000000000000204803AE
++:102D5000000000008100000000204411000000007D
++:102D60000000000A002048110000000000000000E0
++:102D700000200010000000000000000014C000004F
++:102D8000000003C98C000000002044110000000076
++:102D9000CAFEBABE004048110000000081000000D9
++:102DA0000020441100000000000000010020481134
++:102DB0000000000000003FFF40280A200000000043
++:102DC0008000000040280E200000000040000000AD
++:102DD000C028122000000000000400000069462204
++:102DE0000000067C0000000000201410000000001D
++:102DF00000000000002F022300000000000000007F
++:102E00000CC00000000003D700000000C040180004
++:102E1000000003DA00003FFFC0281A200000000075
++:102E200000040000006946260000067C0000000047
++:102E3000002018100000000000000000002F0224F5
++:102E400000000000000000000CC00000000003DDD6
++:102E500000000000C0401C00000003E000003FFF35
++:102E6000C0281E2000000000000400000069462762
++:102E70000000067C0000000000201C100000000084
++:102E800000000000002044020000000000000000DC
++:102E9000002820C50000000000000000004948E8AC
++:102EA00000000000A58000000020081100000000C4
++:102EB0000000200000200C11000000008300000032
++:102EC00000604411000004080000000000204402DB
++:102ED0000000000000000000C020480000000000CA
++:102EE0000000000040204800000000000000001F1B
++:102EF000C0210220000000000000000014C00000FB
++:102F0000000003ED0000201000204411000000002C
++:102F10000000800000204811000000000000FFFFBA
++:102F2000C0481220000003F5A7800000002008110F
++:102F3000000000000000A00000200C1100000000B4
++:102F4000830000000060441100000408000000003D
++:102F5000002044020000000000000000C0204800E3
++:102F60000000000000000000C02048000000000039
++:102F70000000FFFFC02812200000000083000000B6
++:102F800000204411000000000000000000304883D1
++:102F90000000000084000000002044110000000038
++:102FA00000000000C02048000000000000000000F9
++:102FB0001D000000000000008300000000604411BC
++:102FC0000000040800000000C040040000000001F0
++:102FD000A980000000200811000000000000C000CF
++:102FE00000400C11000003F0AB800000002008112D
++:102FF000000000000000F8E000400C11000003F0A9
++:10300000AD80000000200811000000000000F880E2
++:1030100000400C11000003F0B380000000200811F4
++:10302000000000000000F3FC00400C11000003F061
++:10303000AF80000000200811000000000000E00048
++:1030400000400C11000003F0B180000000200811C6
++:10305000000000000000F00000400C11000003F030
++:1030600083000000002044110000000000002148FF
++:1030700000204811000000008400000000204411DE
++:103080000000000000000000C02048000000000018
++:10309000000000001D000000000000000000000013
++:1030A000008000000000000001182000C030462011
++:1030B0000000000000000000D900480000000000EF
++:1030C00000000000C020040000000000000000001C
++:1030D00000A0000A000000000218A000C030462036
++:1030E0000000000000000000D900480000000000BF
++:1030F00000000000C02004000000000000000000EC
++:1031000000A0000A000000000318C000C0304620E4
++:103110000000000000000000D9004800000000008E
++:1031200000000000C02004000000000000000000BB
++:1031300000A0000A000000000418F8E0C03046209B
++:103140000000000000000000D9004800000000005E
++:1031500000000000C020040000000000000000008B
++:1031600000A0000A000000000518F880C0304620CA
++:103170000000000000000000D9004800000000002E
++:1031800000000000C020040000000000000000005B
++:1031900000A0000A000000000618E000C030462031
++:1031A0000000000000000000D900480000000000FE
++:1031B00000000000C020040000000000000000002B
++:1031C00000A0000A000000000718F000C0304620F0
++:1031D0000000000000000000D900480000000000CE
++:1031E00000000000C02004000000000000000000FB
++:1031F00000A0000A000000000818F3FCC0304620C0
++:103200000000000000000000D9004800000000009D
++:1032100000000000C02004000000000000000000CA
++:1032200000A0000A000000000000003000200A2D6D
++:103230000000000000000000C0290C400000000059
++:1032400000000030002036230000000000000000D5
++:10325000C0200400000000000000000000A0000AE0
++:103260000000000086000000002044110000000063
++:103270000000000000404801000000008500000040
++:10328000C020441100000000000000000040480180
++:10329000000000000000217C00204411000000001C
++:1032A00000000000C02048000000000000000000F6
++:1032B000C02048000000000000000000C0204800BE
++:1032C0000000000081000000002044110000000008
++:1032D0000000000100204811000000000000000074
++:1032E000C0200800000000000000000017000000DF
++:1032F000000000000004217F006044110000067CF3
++:103300000000001F0021023000000000000000004B
++:1033100014C00000000000000000000000404C024B
++:103320000000043E00000000C0200C00000000006F
++:1033300000000000C020100000000000000000009D
++:10334000C02014000000000000000000C020180091
++:103350000000000000000000C0201C000000000071
++:1033600000007F0000280A21000000000000450046
++:10337000002F022200000000000000000CE000000E
++:103380000000044C00000000C020200000000000ED
++:103390000000000017000000000000000000001006
++:1033A00000280A230000000000000010002F022265
++:1033B00000000000000000000CE0000000000454C9
++:1033C0008100000000204411000000000000000106
++:1033D000002048110000000000040000006946249D
++:1033E0000000067C000000000040000000000459BE
++:1033F00081000000002044110000000000000000D7
++:1034000000204811000000000000216D0020441140
++:103410000000000000000000002048040000000040
++:103420000000000000604805000006810000000068
++:10343000002824F0000000000000000700280A23F4
++:103440000000000000000001002F02220000000028
++:10345000000000000AE0000000000460000000001E
++:10346000002F00C9000000000000000004E0000080
++:103470000000047900000000004000000000048605
++:1034800000000002002F02220000000000000000E7
++:103490000AE000000000046500000000002F00C9E1
++:1034A000000000000000000002E0000000000479BD
++:1034B000000000000040000000000486000000033F
++:1034C000002F022200000000000000000AE00000BF
++:1034D0000000046A00000000002F00C90000000086
++:1034E000000000000CE00000000004790000000073
++:1034F000004000000000048600000004002F0222AB
++:1035000000000000000000000AE000000000046F5E
++:1035100000000000002F00C90000000000000000B3
++:103520000AE00000000004790000000000400000F4
++:103530000000048600000005002F022200000000A9
++:10354000000000000AE00000000004740000000019
++:10355000002F00C9000000000000000006E000008D
++:103560000000047900000000004000000000048614
++:1035700000000006002F02220000000000000000F2
++:103580000AE000000000047900000000002F00C9DC
++:10359000000000000000000008E0000000000479C6
++:1035A00000000000004000000000048600007F00D2
++:1035B00000280A210000000000004500002F022220
++:1035C00000000000000000000AE000000000000011
++:1035D0000000000800210A23000000000000000095
++:1035E00014C0000000000483000021690020441181
++:1035F0000000000000000000C020480000000000A3
++:1036000000000000C0204800000000000000000092
++:10361000C020480000000000CAFEBABE00404811A9
++:103620000000000000000000C02044000000000076
++:1036300000000000C02000000000000000000000AA
++:10364000C04048000000000000007F0000280A2160
++:103650000000000000004500002F022200000000D2
++:10366000000000000AE000000000048C00000000E0
++:10367000C02000000000000000000000C02000008A
++:103680000000000000000000C0400000000000003A
++:103690000000000000404C080000044C0000000046
++:1036A000C0200800000000000000001040210E2093
++:1036B0000000000000000011402112200000000066
++:1036C00000000012402116200000000000002169C7
++:1036D000002044110000000000000000002048020B
++:1036E0000000000000000000002102250000000092
++:1036F0000000000014E00000000004960004000038
++:10370000C0494A2000000497FFFBFFFFC0284A2061
++:103710000000000000000000002102230000000063
++:103720000000000014E00000000004A300000000FE
++:10373000C02048000000000000000000C020480039
++:103740000000000000000000002102240000000032
++:103750000000000014C00000000000008100000014
++:1037600000204411000000000000000C002048115F
++:103770000000000000000000002000100000000019
++:103780000000000014C000000000049FA000000022
++:103790000020441100000000CAFEBABE00404811DB
++:1037A0000000000081000000002044110000000023
++:1037B0000000000400204811000000000000216B00
++:1037C000002044110000000000000000C02048104C
++:1037D00000000000810000000020441100000000F3
++:1037E0000000000500204811000000000000216CCE
++:1037F000002044110000000000000000C02048101C
++:103800000000000000000000002F02240000000063
++:10381000000000000CE000000000000000000000BC
++:10382000004000000000049D00000000C0210A20AC
++:10383000000000000000000014C00000000004B6FA
++:103840008100000000204411000000000000000082
++:1038500000204811000000000000216D00204411EC
++:103860000000000000000000C02048000000000030
++:1038700000000000C0604800000006810000000059
++:1038800000400000000004BA810000000020441144
++:1038900000000000000000010020481100000000AE
++:1038A00000040000C02946200000000000000000C5
++:1038B000C06000000000067C000000010021022220
++:1038C000000000000000000014C00000000004C15F
++:1038D00000002169002044110000000000000000E9
++:1038E000C02048000000000000000000C020480088
++:1038F0000000000000000000002048100000000050
++:10390000CAFEBABE004048110000000000000000DE
++:10391000C02044000000000000000000C04048102B
++:1039200000000000810000000020441100000000A1
++:10393000000000010020481100000000000021F8F4
++:1039400000204411000000000000000E002048117B
++:1039500000000000000421F9006044110000067C12
++:103960000000000000210230000000000000000004
++:1039700014C00000000004C3000021800020441196
++:103980000000000000000000C0204800000000000F
++:1039900000000000C0200000000000000000000047
++:1039A000C02048000000000000000000C02000000F
++:1039B0000000000000000000C040480000000000BF
++:1039C0000000000300333E2F000000000000000153
++:1039D00000210221000000000000000014E00000AF
++:1039E000000004F30000002C00200A2D000000005D
++:1039F0000004000018E00C11000004E200000001C7
++:103A000000333E2F00000000000021690020441117
++:103A1000000000000000000000204802000000003C
++:103A20000000000000204803000000000000000823
++:103A300000300A220000000000000000C020480002
++:103A40000000000000000000C0204800000000004E
++:103A50000000216900204411000000000000000067
++:103A60000020480200000000000000000020480381
++:103A7000000000000000000800300A2200000000E2
++:103A800000000000C020480000000000000000000E
++:103A9000D8C04800000004D600002169002044116D
++:103AA00000000000000000000020480200000000AC
++:103AB0000000000000204803000000000000000893
++:103AC00000300A220000000000000000C020480072
++:103AD0000000000000000000C020480000000000BE
++:103AE0000000002D0020122D00000000000000004A
++:103AF00000290C830000000000002169002044110F
++:103B0000000000000000000000204802000000004B
++:103B10000000000000204803000000000000000832
++:103B200000300A220000000000000000C020480011
++:103B30000000000000000000C0204800000000005D
++:103B4000000000110021022400000000000000001D
++:103B500014C0000000000000000000000040000051
++:103B60000000049D0000002CC02036200000000052
++:103B70000000002DC0403620000000000000000FB3
++:103B800000210221000000000000000014C000001D
++:103B9000000004F800000000006000000000000BBE
++:103BA00000000000D900000000000000000000003C
++:103BB000C040040000000001B500000000204411D6
++:103BC000000000000000200000204811000000005C
++:103BD000B600000000204411000000000000A0001A
++:103BE0000020481100000000B70000000020441130
++:103BF000000000000000C00000204811000000008C
++:103C0000B800000000204411000000000000F8E0AF
++:103C10000020481100000000B900000000204411FD
++:103C2000000000000000F8800020481100000000A3
++:103C3000BA00000000204411000000000000E00075
++:103C40000020481100000000BB00000000204411CB
++:103C5000000000000000F0000020481100000000FB
++:103C6000BC00000000204411000000000000F3FC34
++:103C700000204811000000008100000000204411D5
++:103C800000000000000000020020481100000000B9
++:103C9000000000FF00280E300000000000000000BF
++:103CA000002F022300000000000000000CC00000F4
++:103CB0000000050C00000000C0200800000000000B
++:103CC0000000000014C000000000052100000000FA
++:103CD00000200C11000000000000001C0020362312
++:103CE000000000000000002B002036230000000030
++:103CF00000000029002036230000000000000028FA
++:103D000000203623000000000000001700203623AA
++:103D10000000000000000025002036230000000005
++:103D200000000026002036230000000000000015DF
++:103D3000002036230000000000000016002036237B
++:103D400000000000FFFFE00000200C110000000058
++:103D500000000021002036230000000000000022A7
++:103D6000002036230000000000001FFF00200C117F
++:103D700000000000000000230020362300000000A7
++:103D8000000000240020362300000000F1FFFFFFA8
++:103D900000283A2E000000000000001AC0220E2069
++:103DA00000000000000000000029386E0000000044
++:103DB0008100000000204411000000000000000607
++:103DC00000204811000000000000002A402036209A
++:103DD00000000000870000000020441100000000E7
++:103DE00000000000C0204800000000000000A1F416
++:103DF00000204411000000000000000000204810D6
++:103E0000000000000000000000200C110000000075
++:103E10000000003000203623000000009D0000005C
++:103E200000204411000000000000001F40214A2033
++:103E30000000000096000000002044110000000077
++:103E400000000000C020480000000000000000004A
++:103E5000C0200C000000000000000000C020100086
++:103E6000000000000000001F0021162400000000D8
++:103E70000000000014C00000000000000000001D51
++:103E800000203623000000000000000300281E234D
++:103E900000000000000000080022222300000000B3
++:103EA000FFFFF000002822280000000000000000B2
++:103EB000002920E8000000000000001F0020362834
++:103EC000000000000000001800211E230000000078
++:103ED0000000002000203627000000000000000243
++:103EE000002216240000000000000000003014A88A
++:103EF000000000000000001E002036250000000029
++:103F00000000000300211A2400000000100000003F
++:103F100000281A2600000000EFFFFFFF00283A2EBD
++:103F20000000000000000000004938CE0000066AD2
++:103F30000000000140280A200000000000000006E8
++:103F400040280E200000000000000300C0281220BE
++:103F50000000000000000008002112240000000002
++:103F600000000000C020162000000000000000003B
++:103F7000C0201A20000000000000000000210222E2
++:103F8000000000000000000014C0000000000559FF
++:103F9000810000000020441100000000000000012A
++:103FA00000204811000000000000225800300A24C0
++:103FB0000000000000040000006946220000067CAA
++:103FC00000002169002044110000000000000000F2
++:103FD00000204805000000000002000000294A26D9
++:103FE0000000000000000000002048100000000059
++:103FF000CAFEBABE00204811000000000000000206
++:10400000002F022300000000000000000CC0000090
++:104010000000056100000000C0201C10000000002E
++:1040200000000000C04000000000056F000000021A
++:10403000002F022300000000000000000CC0000060
++:104040000000056181000000002044110000000014
++:10405000000000010020481100000000000022586C
++:1040600000300A240000000000040000006946221D
++:104070000000067C00000000C0201C1000000000B2
++:1040800000000000C04000000000056F00000000BC
++:10409000002F022300000000000000000CC0000000
++:1040A0000000056500000000C0201C0000000000AA
++:1040B00000000000C04000000000056F0000000488
++:1040C000002F022300000000000000000CC00000D0
++:1040D0000000056D81000000002044110000000078
++:1040E0000000000000204811000000000000216DC9
++:1040F000002044110000000000000000C020480023
++:104100000000000000000000C060480000000681C0
++:104110000000000000401C100000056F00000000BF
++:10412000C02000000000000000000000C0400000AF
++:1041300000000000000000000EE00000000005711B
++:104140000000000000600000000005BC000000004E
++:10415000002F022400000000000000000CC000003E
++:10416000000005820000A2B70020441100000000FA
++:10417000000000000020480700000000810000004F
++:104180000020441100000000000000010020481140
++:10419000000000000004A2B6006044110000067C8C
++:1041A0000000001A0021223000000000000000067C
++:1041B00000222630000000000004200400604411AA
++:1041C0000000067C0000A2C4002044110000000092
++:1041D00000000000003048E900000000000000007E
++:1041E00000E00000000005800000A2D10020441182
++:1041F000000000000000000000404808000000002F
++:104200000000A2D1002044110000000000000001C5
++:1042100000504A280000000000000001002F022486
++:1042200000000000000000000CC00000000005932A
++:104230000000A2BB002044110000000000000000AC
++:104240000020480700000000810000000020441109
++:1042500000000000000000010020481100000000E4
++:104260000004A2BA006044110000067C0000001A9D
++:10427000002122300000000000000006002226304D
++:104280000000000000042004006044110000067CCF
++:104290000000A2C500204411000000000000000042
++:1042A000003048E9000000000000000000E00000CD
++:1042B000000005910000A2D200204411000000007F
++:1042C0000000000000404808000000000000A2D2EA
++:1042D00000204411000000000000000100504A28A6
++:1042E0000000000000000002002F02240000000077
++:1042F000000000000CC00000000005A40000A2BFE8
++:1043000000204411000000000000000000204807C9
++:1043100000000000810000000020441100000000A7
++:104320000000000100204811000000000004A2BEAF
++:10433000006044110000067C0000001A00212230B9
++:1043400000000000000000060022263000000000EF
++:1043500000042004006044110000067C0000A2C696
++:10436000002044110000000000000000003048E977
++:10437000000000000000000000E00000000005A2B6
++:104380000000A2D300204411000000000000000043
++:1043900000404808000000000000A2D300204411A3
++:1043A000000000000000000100504A28000000004A
++:1043B0000000A2C300204411000000000000000023
++:1043C0000020480700000000810000000020441188
++:1043D0000000000000000001002048110000000063
++:1043E0000004A2C2006044110000067C0000001A14
++:1043F00000212230000000000000000600222630CC
++:104400000000000000042004006044110000067C4D
++:104410000000A2C7002044110000000000000000BE
++:10442000003048E9000000000000000000E000004B
++:10443000000005B10000A2D40020441100000000DB
++:104440000000000000404808000000000000A2D466
++:1044500000204411000000000000000100504A2824
++:104460000000000085000000002044110000000052
++:104470000000000000204801000000000000304A59
++:10448000002044110000000001000000002048113D
++:10449000000000000000000000400000000005B720
++:1044A000A4000000C0204411000000000000000033
++:1044B000C04048000000000000000000C060000094
++:1044C000000005BC00000000C04004000000000126
++:1044D0000000002C002036210000000081000000B8
++:1044E00000204411000000000000000600204811D8
++:1044F0000000000000000000002F0230000000005B
++:10450000000000000CC00000000005C30000000017
++:10451000002004110000000000000030004036219F
++:10452000000005D6000000300020062D000000002D
++:1045300000007E00002806210000000000000000AE
++:10454000002F022100000000000000000CE000002D
++:10455000000005D68100000000204411000000008A
++:104560000000000100204811000000000004A0929B
++:10457000006044110000067C00000031002036304D
++:10458000000000000004A093006044110000067CBD
++:104590000000003200203630000000000004A2B607
++:1045A000006044110000067C00000033002036301B
++:1045B000000000000004A2BA006044110000067C64
++:1045C0000000003400203630000000000004A2BECD
++:1045D000006044110000067C0000003500203630E9
++:1045E000000000000004A2C2006044110000067C2C
++:1045F00000000036002036300000000000042004D7
++:10460000006044110000067C0001A2A400204411B7
++:10461000000000000000003F0020481100000000E2
++:104620000000003F00204811000000000000003F93
++:1046300000204811000000000000003F0020481149
++:1046400000000000000000050020481100000000EC
++:104650000000A1F400204411000000000000000050
++:1046600000204811000000008800000000204411D4
++:1046700000000000000000010020481100000000C0
++:10468000810000000020441100000000000000062E
++:10469000002048110000000000000001002F02303F
++:1046A00000000000000000000CE000000000061FF9
++:1046B000000000300020062D000000000000000077
++:1046C000002F022100000000000000000CE00000AC
++:1046D0000000061F810000000020441100000000BF
++:1046E00000000001002048110000000000007E00D2
++:1046F000002806210000000000000000002F022119
++:1047000000000000000000000CE00000000005F8C0
++:104710000000A092002044110000000000000031C1
++:1047200000204A2D000000000000A093002044114A
++:10473000000000000000003200204A2D00000000B0
++:104740000000A2B600204411000000000000003369
++:1047500000204A2D000000000000A2BA00204411F1
++:10476000000000000000003400204A2D000000007E
++:104770000000A2BE0020441100000000000000352F
++:1047800000204A2D000000000000A2C200204411B9
++:10479000000000000000003600204A2D000000004C
++:1047A000000000300020062D00000000000001FF86
++:1047B000002806210000000000000000002F022158
++:1047C00000000000000000000CE000000000061ED9
++:1047D0000000000000210221000000000000000095
++:1047E00014C00000000006010004A0030060441192
++:1047F0000000067C0000A00300204411000000001F
++:10480000000000000020481000000000000000012F
++:1048100000210621000000000000000014C000007C
++:10482000000006060004A010006044110000067C91
++:104830000000A01000204411000000000000000053
++:1048400000204810000000000000000100210621A7
++:104850000000000000000000002F02210000000006
++:10486000000000000CE000000000061E0004A01183
++:10487000006044110000067C0000A01100204411DB
++:1048800000000000000000000020481000000000B0
++:104890000004A012006044110000067C0000A01279
++:1048A000002044110000000000000000002048101B
++:1048B000000000000004A013006044110000067C0A
++:1048C0000000A013002044110000000000000000C0
++:1048D00000204810000000000004A01400604411F3
++:1048E0000000067C0000A01400204411000000001D
++:1048F0000000000000204810000000000004A01587
++:10490000006044110000067C0000A0150020441146
++:10491000000000000000000000204810000000001F
++:104920000004A016006044110000067C0000A016E0
++:10493000002044110000000000000000002048108A
++:10494000000000000004A017006044110000067C75
++:104950000000A0170020441100000000000000002B
++:1049600000204810000000000004200400604411F2
++:104970000000067C0000002C0080062D00000000D6
++:10498000FF000000002044110000000000000000B3
++:104990000020481100000000000000010020481124
++:1049A000000000000000000200804811000000002C
++:1049B000000000000EE000000000063000000030A3
++:1049C0000020062D00000000000000020028062143
++:1049D0000000000000000000002F02210000000085
++:1049E000000000000CE000000000062E8100000026
++:1049F00000204411000000000000000100204811C8
++:104A00000000000000042004006044110000067C47
++:104A10000000100000200811000000000000002B22
++:104A200000203622000000000000000000600000AE
++:104A3000000006340000000000600000000005BC1B
++:104A40009800000000204411000000000000000059
++:104A5000008048110000000000000000C06000005D
++:104A60000000063400000000C04004000000000107
++:104A70000000A2A400204411000000000000002259
++:104A800000204811000000008900000000204411AF
++:104A90000000000000000001004048110000062056
++:104AA00097000000002044110000000000000000FA
++:104AB00000204811000000008A000000002044117E
++:104AC0000000000000000000004048110000062027
++:104AD00000000000006000000000064D0001A2A4DC
++:104AE000C0204411000000000000001600604811C2
++:104AF0000000036A000020100020441100000000A4
++:104B000000010000002048110000000081000000AA
++:104B100000204411000000000000000100204811A6
++:104B2000000000000000217C002044110000000073
++:104B3000098000000020481100000000FFFFFFFF77
++:104B40000020481100000000000000000020481173
++:104B5000000000000000000017000000000000003E
++:104B60000004217F006044110000067C0000001F4B
++:104B700000210230000000000000000014C000000E
++:104B8000000000000000000400404C110000064737
++:104B900000000000004000000000000000000017BE
++:104BA00000201E2D000000000000000400291E2728
++:104BB0000000000000000017008036270000000001
++:104BC0000000001700201E2D00000000FFFFFFFB6B
++:104BD00000281E2700000000000000170080362774
++:104BE000000000000000001700201E2D0000000043
++:104BF0000000000800291E27000000000000001728
++:104C000000803627000000000000001700201E2D45
++:104C100000000000FFFFFFF700281E270000000033
++:104C20000000001700803627000000000001A2A449
++:104C30000020441100000000000000160060481130
++:104C40000000036A00002010002044110000000052
++:104C50000001000000204811000000000000217C3D
++:104C600000204411000000000180000000204811D5
++:104C700000000000FFFFFFFF0020481100000000BF
++:104C800000000000002048110000000000000000AB
++:104C90001700000000000000810000000020441107
++:104CA000000000000000000100204811000000008A
++:104CB0000004217F006044110000067C0000001FFA
++:104CC00000210230000000000000000014C00000BD
++:104CD0000000067B0000001000404C11000006613F
++:104CE00000000000C02004000000000000000000E0
++:104CF00038C00000000000000000001D00200A2D48
++:104D0000000000000000001E00200E2D000000002A
++:104D10000000001F0020122D0000000000000020F5
++:104D20000020162D00000000000021690020441121
++:104D30000000000000000000002048040000000007
++:104D400000000000002048050000000000000000F6
++:104D50000020480100000000CAFEBABE0020481131
++:104D600000000000000000040030122400000000D9
++:104D700000000000002F00640000000000000000A0
++:104D80000CC000000000067A0000000300281A2270
++:104D900000000000000000080022122200000000B5
++:104DA000FFFFF000002812240000000000000000B7
++:104DB000002910C4000000000000001F004036243D
++:104DC0000000000000000000008000000000000063
++:104DD000000000001AC000000000067C9F000000D8
++:104DE0000020441100000000CAFEBABE0020481195
++:104DF00000000000000000001AE000000000067F34
++:104E00000000000000800000000000000000000022
++:104E10001AC00000000006819E000000002044111E
++:104E200000000000CAFEBABE0020481100000000C9
++:104E3000000000001AE000000000068400000000EE
++:104E40000080000000000000000000000060000082
++:104E50000000000B000010000060041100000315AA
++:104E6000000000000020041100000000000000000D
++:104E700000600811000001B20000225C0020441113
++:104E800000000000000000030020481100000000A6
++:104E90000000225600204411000000000000001B0A
++:104EA00000204811000000000000A1FC0020441177
++:104EB0000000000000000001002048110000000078
++:104EC0000001A1FDC02044110000000000000021ED
++:104ED00000201E2D000000000000001000221E27F0
++:104EE00000000000000000240020222D000000002F
++:104EF0000000FFFF00282228000000000000000042
++:104F000000294907000000000000000000204811AF
++:104F100000000000000000220020222D0000000000
++:104F20000000FFFF00282228000000000000000011
++:104F3000002949070000000000000000002048117F
++:104F4000000000000000002300201E2D00000000D3
++:104F50000000001000221E270000000000000000DA
++:104F6000002949070000000000000000004048112F
++:104F70000000000000000000000000000000000031
++:104F80000000000000000000000000000000000021
++:104F90000000000000000000000000000000000011
++:104FA0000000000000000000000000000000000001
++:104FB00000000000000000000000000000000000F1
++:104FC00000000000000000000000000000000000E1
++:104FD00000000000000000000000000000000000D1
++:104FE00000000000000000000000000000000000C1
++:104FF00000000000000000000000000000000000B1
++:1050000000000000000000000000000000000000A0
++:105010000000000000000000000000000000000090
++:105020000000000000000000000000000000000080
++:105030000000000000000000000000000000000070
++:105040000000000000000000000000000000000060
++:105050000000000000000000000000000000000050
++:105060000000000000000000000000000000000040
++:105070000000000000000000000000000000000030
++:105080000000000000000000000000000000000020
++:105090000000000000000000000000000000000010
++:1050A0000000000000000000000000000000000000
++:1050B00000000000000000000000000000000000F0
++:1050C00000000000000000000000000000000000E0
++:1050D00000000000000000000000000000000000D0
++:1050E00000000000000000000000000000000000C0
++:1050F00000000000000000000000000000000000B0
++:10510000000000000000000000000000000000009F
++:10511000000000000000000000000000000000008F
++:10512000000000000000000000000000000000007F
++:10513000000000000000000000000000000000006F
++:10514000000000000000000000000000000000005F
++:10515000000000000000000000000000000000004F
++:10516000000000000000000000000000000000003F
++:10517000000000000000000000000000000000002F
++:10518000000000000000000000000000000000001F
++:10519000000000000000000000000000000000000F
++:1051A00000000000000000000000000000000000FF
++:1051B00000000000000000000000000000000000EF
++:1051C00000000000000000000000000000000000DF
++:1051D00000000000000000000000000000000000CF
++:1051E00000000000000000000000000000000000BF
++:1051F00000000000000000000000000000000000AF
++:10520000000000000000000000000000000000009E
++:10521000000000000000000000000000000000008E
++:10522000000000000000000000000000000000007E
++:10523000000000000000000000000000000000006E
++:10524000000000000000000000000000000000005E
++:10525000000000000000000000000000000000004E
++:10526000000000000000000000000000000000003E
++:10527000000000000000000000000000000000002E
++:10528000000000000000000000000000000000001E
++:10529000000000000000000000000000000000000E
++:1052A00000000000000000000000000000000000FE
++:1052B000014204F505B302500000000001C301687B
++:1052C000043505B300000000022502090250015117
++:1052D000000000000223024502A00241000000007D
++:1052E00003CD05B305B305B300000000063C063D41
++:1052F000031F05B30000000005B305B803200340F9
++:1053000000000000032A0282034203340000000070
++:1053100005B305B305B305B30000000005B30544AC
++:1053200005B305B30000000003B205B304AE0344A7
++:1053300000000000048D0443043305B300000000A6
++:1053400004C305B3043704D000000000044304FA8A
++:10535000035103710000000005B305B305B305B3A5
++:105360000000000005B305B305B305B3000000005D
++:1053700005B305B3063205BA0000000005B305B356
++:10538000000705B30000000005B305B305B305B37E
++:105390000000000005B305B305B305B3000000002D
++:1053A00003EE03E303FE03FC00000000040404001A
++:1053B00004020406000000000412040E041A04167D
++:1053C000000000000422041E042A0426000000003D
++:1053D00005B305B3042E05B30000000005B305B303
++:1053E00005B305B30000000005B305B305B305B36D
++:1053F00000000000000206680686000600000000AB
++:00000001FF
+diff --git a/firmware/radeon/RV670_pfp.bin.ihex b/firmware/radeon/RV670_pfp.bin.ihex
+new file mode 100644
+index 0000000..f55292c
+--- /dev/null
++++ b/firmware/radeon/RV670_pfp.bin.ihex
+@@ -0,0 +1,145 @@
++:1000000000CA040000A00000007E828B007C038BED
++:10001000008001B8007C038B00D4401E00EE001E5F
++:1000200000CA040000A00000007E828B00C41838C3
++:1000300000CA240000CA2800009581A800C41C3A08
++:1000400000C3C00000CA080000CA0C00007C744B4A
++:1000500000C200050099C00000C41C3A007C744C2A
++:1000600000C0FFF000042C0400309002007D250049
++:1000700000351402007D350B00255403007CD5802B
++:1000800000259C030095C00400D5001B007EDDC147
++:10009000007D9D8000D6801B00D5801B00D4401EB3
++:1000A00000D5401E00D6401E00D6801E00D4801E03
++:1000B00000D4C01E009783D300D5C01E00CA08001C
++:1000C0000080001A00CA0C0000E4011E00D4001ECB
++:1000D0000080000C00C4183800E4013E00D4001E6B
++:1000E0000080000C00C4183800D4401E00EE001E32
++:1000F00000CA040000A00000007E828B00E4011E04
++:1001000000D4001E00D4401E00EE001E00CA0400F1
++:1001100000A00000007E828B00E4013E00D4001E9F
++:1001200000D4401E00EE001E00CA040000A0000023
++:10013000007E828B00CA180000D4401E00D5801EAD
++:100140000080005300D4007500D4401E00CA08008F
++:1001500000CA0C0000CA100000D4801900D4C018D6
++:1001600000D5001700D4801E00D4C01E00D5001E8C
++:1001700000E2001E00CA040000A00000007E828B86
++:1001800000CA080000D4806000D4401E0080000037
++:1001900000D4801E00CA080000D4806100D4401E34
++:1001A0000080000000D4801E00CA080000CA0C00B5
++:1001B00000D4401E00D4801600D4C01600D4801E87
++:1001C000008001B800D4C01E00C6084300CA0C005D
++:1001D00000CA10000094800400CA140000E420F358
++:1001E00000D4201300D5606500D4E01C00D5201C8D
++:1001F00000D5601C008000000006200100C60843F6
++:1002000000CA0C0000CA1000009483F700CA140052
++:1002100000E420F30080007900D4201300C60843D6
++:1002200000CA0C0000CA1000009883EF00CA140036
++:1002300000D400640080008D0000000000C414326F
++:1002400000C6184300C4082F0095400500C40C30B8
++:1002500000D4401E0080000000EE001E009583F5D3
++:1002600000C4103100D4403300D5206500D4A01C58
++:1002700000D4E01C00D5201C00E4015E00D4001E68
++:10028000008000000006200100CA1800000A2001BA
++:1002900000D6007600C408360098800700C61045D6
++:1002A0000095011000D4001F00D46062008000009F
++:1002B00000D4206200CC383500CC1433008401BB5C
++:1002C00000D4007200D5401E0080000000EE001E29
++:1002D00000E2001A008401BB00E2001A00CC104BBF
++:1002E00000CC0447002C9401007D098B0098400548
++:1002F000007D15CB00D4001A008001B800D4006D39
++:100300000034440100CC0C480098403A00CC2C4A00
++:100310000095800400CC0449008001B800D4001A84
++:1003200000D4C01A00282801008400F000CC10037B
++:100330000098801B0004380C008400F000CC1003EF
++:100340000098801700043808008400F000CC1003E7
++:100350000098801300043804008400F000CC1003DF
++:100360000098801400CC104C009A800900CC144DE9
++:10037000009840DC00D4006D00CC184800D5001A6D
++:1003800000D5401A008000C900D5801A0096C0D55B
++:1003900000D4006D008001B800D4006E009AC00344
++:1003A00000D4006D00D4006E0080000000EC007FDF
++:1003B000009AC0CC00D4006D008001B800D4006E5B
++:1003C00000CC140300CC180300CC1C03007D910367
++:1003D000007DD583007D190C0035CC1F0035701FC2
++:1003E000007CF0CB007CD08B00880000007E8E8BE0
++:1003F0000095C00400D4006E008001B800D4001A3B
++:1004000000D4C01A00CC080300CC0C0300CC1003AD
++:1004100000CC140300CC180300CC1C0300CC240334
++:1004200000CC28030035C41F0036B01F007C704B81
++:100430000034F01F007C704B0035701F007C704B47
++:10044000007D8881007DCCC1007E5101007E9541F8
++:10045000007C9082007CD4C2007C848B009AC00314
++:10046000007C8C8B002C88010098809E00D4006D4D
++:100470000098409C00D4006E00CC084C00CC0C4D81
++:1004800000CC104800D4801A00D4C01A00800101AA
++:1004900000D5001A00CC083200D40032009482D972
++:1004A00000CA0C0000D4401E0080000000D4001ED2
++:1004B00000E4011E00D4001E00CA080000CA0C009F
++:1004C00000CA100000D4401E00CA140000D4801ED0
++:1004D00000D4C01E00D5001E00D5401E00D54034FB
++:1004E0000080000000EE001E0028040400E2001A54
++:1004F00000E2001A00D4401A00CA380000CC0803F9
++:1005000000CC0C0300CC0C0300CC0C03009882BD83
++:1005100000000000008401BB00D7A06F0080000035
++:1005200000EE001F00CA040000C2FF0000CC083427
++:1005300000C13FFF007C74CB007CC90B007D010F24
++:10054000009902B0007C738B008401BB00D7A06FC0
++:100550000080000000EE001F00CA080000281900FB
++:10056000007D898B009580140028140400CA0C00BB
++:1005700000CA100000CA1C0000CA240000E2001FCC
++:1005800000D4C01A00D5001A00D5401A00CC1803B8
++:1005900000CC2C0300CC2C0300CC2C03007DA58BBD
++:1005A000007D9C4700984297000000000080016198
++:1005B00000D4C01A00D4401E00D4801E0080000069
++:1005C00000EE001E00E4011E00D4001E00D4401EF8
++:1005D00000EE001E00CA040000A00000007E828B16
++:1005E00000E4013E00D4001E00D4401E00EE001EB8
++:1005F00000CA040000A00000007E828B00CA080030
++:1006000000248C06000CCC060098C00600CC104ECE
++:100610000099000400D4007300E4011E00D4001E01
++:1006200000D4401E00D4801E0080000000EE001E9A
++:1006300000CA080000CA0C000034D01800251001C0
++:100640000095002100C17FFF00CA100000CA1400FD
++:1006500000CA180000D4801D00D4C01D007DB18BDD
++:1006600000C1420200C2C00100D5801D0034DC0E72
++:10067000007D5D4C007F734C00D7401E00D5001EEE
++:1006800000D5401E00C1420000C2C00000099C010C
++:100690000031DC10007F5F4C007F734C00042802A7
++:1006A000007D838000D5A86F00D5806600D7401EEE
++:1006B00000EC005E00C8240200C82402008001B8DB
++:1006C00000D6007600D4401E00D4801E00D4C01E88
++:1006D0000080000000EE001E0080000000EE001F01
++:1006E00000D4001F0080000000D4001F00D4001FB1
++:1006F0000088000000D4001F00000000000000007F
++:1007000000000000000000000000000000000000E9
++:1007100000000000000000000000000000000000D9
++:1007200000000000000000000000000000000000C9
++:1007300000000000000000000000000000000000B9
++:1007400000000000000000000000000000000000A9
++:100750000000000000000000000000000000000099
++:100760000000000000000000000000000000000089
++:100770000000000000000000000000000000000079
++:100780000000000000000000000000000000000069
++:100790000000000000000000000000000000000059
++:1007A0000000000000000000000000000000000049
++:1007B0000000000000000000000000000000000039
++:1007C0000000000000000000000000000000000029
++:1007D0000000000000000000000000000000000019
++:1007E0000000000000000000000000000000000009
++:1007F00000000000000000000000000000000000F9
++:1008000000010171000201780003008F0004007FE5
++:10081000000500030006003F000700320008012C1D
++:1008200000090046000A0036001001B6001700A2B9
++:100830000022013A00230149002000B400240125D0
++:100840000027004D0028006A002A0060002B00529B
++:10085000002F0065003200870034017F003C015604
++:10086000003F00720041018C0044012E00550173CD
++:100870000056017A0060000B00610034006200380D
++:1008800000630038006400380065003800660038F6
++:10089000006700380068003A00690041006A0048BB
++:1008A000006B0048006C0048006D0048006E004876
++:1008B000006F00480000000600000006000000066F
++:1008C0000000000600000006000000060000000610
++:1008D0000000000600000006000000060000000600
++:1008E00000000006000000060000000600000006F0
++:1008F00000000006000000060000000600000006E0
++:00000001FF
+diff --git a/firmware/radeon/RV710_me.bin.ihex b/firmware/radeon/RV710_me.bin.ihex
+new file mode 100644
+index 0000000..5cdfe30
+--- /dev/null
++++ b/firmware/radeon/RV710_me.bin.ihex
+@@ -0,0 +1,341 @@
++:10000000CC0003EA04080003CC8000437C4080005D
++:10001000A0000000CC80006280000003D040007F80
++:1000200080000003CC4000417C40C000C0160004AA
++:1000300030D03FFF7D15000CCC11000028D8001EE9
++:100040003198000128DC001FC820000495C000067C
++:100050007C424000CC0000627E56800CCC2900001F
++:10006000C82400047E26000B958000067C42C00058
++:10007000CC0000627ED7000CCC310000C82C0004FC
++:100080007E2E000CCC00006231103FFF8000000388
++:10009000CE1100007C40C00080000003CC40004036
++:1000A00080000003CC4122577C418000CC400045B9
++:1000B000CC400048CC41225CCC41A1FC7C4080007B
++:1000C000A0000000CC800062CC400045CC4000483D
++:1000D0007C40C000CC41225CCC41A1FC7C40800033
++:1000E000A0000000CC800062CC000045CC0000489D
++:1000F000CC41225CCC41A1FC7C408000A0000000EF
++:10010000CC800062040CA1FDC0120001CC000045AF
++:10011000CC0000487CD0C00CCC41225CCC41A1FC7E
++:10012000D04D00007C408000A0000000CC80006228
++:1001300080000003CC41225D7C4080007C40C000F8
++:10014000C02A00027C4100007D29000C309400018F
++:1001500030980006309C030029DC00087C42000037
++:100160007C4240009540000FC02E000405F022584C
++:100170007F2F000CCC310000C8280004CCC12169BD
++:10018000CD01216ACE81216B0DB40002CC01216C1E
++:100190009740000E0DB400008000007DC834000AB6
++:1001A0000DB40002974000090DB40000C02E0004F9
++:1001B00005F022587F2F000CCC310000C828000425
++:1001C0008000007DC834000A974000047E02800051
++:1001D0008000007DC834000A0DB400049740FF8CF5
++:1001E00000000000CE01216DCE41216EC828000321
++:1001F000C834000A9B400004043C00058400026DE2
++:10020000CC0000620DF400009740000BC82C03E600
++:10021000CE81A2B7C03000067EF34028C030002057
++:100220007F6B80207FB3C029CF81A2C480000003F0
++:10023000CFC1A2D10DF400019740000BC82C03E7F9
++:10024000CE81A2BBC03000067EF34028C030002023
++:100250007F6B80207FB3C029CF81A2C580000003BF
++:10026000CFC1A2D20DF400029740000BC82C03E8C6
++:10027000CE81A2BFC03000067EF34028C0300020EF
++:100280007F6B80207FB3C029CF81A2C6800000038E
++:10029000CFC1A2D3C82C03E9CE81A2C3C0300006CF
++:1002A0007EF34028C03000207F6B80207FB3C029C0
++:1002B000CF81A2C780000003CFC1A2D48000000379
++:1002C000CC4000427C40C0007C4100002914001D4D
++:1002D000315400019940000C31181000C81C001165
++:1002E00095C00000C81C0011CCC12100CD01210126
++:1002F000CCC12102CD012103041800048000037E3B
++:10030000CD81A2A4C02A00049580000836A821A3AC
++:10031000CC290000C8280004C81C00110DE40040CE
++:100320009640FFFFC81C0011CCC12170CD01217186
++:10033000C820001296000000C82000128000037E32
++:10034000CC0000647C40C0007C410000CC00004533
++:10035000CC00004840D40003CD41225CCD01A1FC7B
++:10036000C01A0001041CA1FD7DD9C00C7C42000014
++:1003700008CC00010624000106280002CE1D000062
++:10038000CE5D000098C0FFFACE9D00007C4080004A
++:10039000A0000000CC8000627C40C00030D0000192
++:1003A00028CC00017C414000950000067C41800083
++:1003B000CD41216DCD81216E800000F4C81C000369
++:1003C000C02200047E16000CCC210000C81C0004D2
++:1003D0007C42400098C000047C4280008000000302
++:1003E000CDE50000CE412169CE81216ACDC1216BCE
++:1003F00080000003CC01216C7C40C0007C410000E7
++:100400007C4140007C4180007C41C00028A4000861
++:10041000326400FF0E68003C9680000A7C020000F7
++:100420007C4200001E300003CC00006A9B000003E9
++:100430004220000504200040800001117C024000A1
++:100440007E0240009A4000000A64000130EC001077
++:100450009AC0000ACC000062C02A0004C82C002107
++:100460007E92800CCC000041CC290000CEC000213F
++:1004700080000121C8300004CD01216DCD41216EE5
++:10048000C83000037F1F000B30F4000727780001FD
++:100490009740002A07B801269F8000000000000056
++:1004A000800001367F1B80048000013A7F1B80059D
++:1004B0008000013E7F1B8002800001427F1B800381
++:1004C000800001467F1B80078000014A7F1B800659
++:1004D0008000014F28A400089B80001928A4000870
++:1004E0008000015F326400FF9B80001528A4000893
++:1004F0008000015F326400FF9B80001128A4000887
++:100500008000015F326400FF9B80000D28A400087A
++:100510008000015F326400FF9B80000928A400086E
++:100520008000015F326400FF9B80000528A4000862
++:100530008000015F326400FF28A40008326400FFDD
++:100540000E68003C9A80FEB228EC00087C43400014
++:100550007C4380007C43C00096C00007CC00006252
++:10056000CF412169CF81216ACFC1216B8000000377
++:10057000CC01216C80000003CFF50000CC00006BA3
++:10058000840003810E68003C9A800004C82800158E
++:1005900080000003D040007F9680FFAB7E024000C9
++:1005A0008400023BC00E0002CC00004180000239F2
++:1005B000CCC1304A7C40C0007C410000C01E00011C
++:1005C00029240012C022000296400005C026000423
++:1005D000C027FFFB7D25000BC02600007DD2800BCD
++:1005E0007E12C00B7D25000C7C4140007C418000C8
++:1005F000CCC121699A80000ACD01216ACD41216BCD
++:1006000096C0FE83CD81216CC83000189700000091
++:10061000C830001880000003CC000018840003815B
++:10062000CC00007FC8140013C8180014CD41216B02
++:1006300096C0FE77CD81216C80000183C830001800
++:10064000C80C000898C00000C80C00087C410000DD
++:1006500095000002000000007C414000C820000915
++:10066000CC400043CE01A1F4CC400044C00E800039
++:100670007C4240007C4280002AAC001F96C0FE6491
++:10068000C035F000CE4003E232780003267C00083B
++:100690007FF7C00B7FFBC00C2A780018CFC003E3A4
++:1006A000CF8003E426B000027F3F0000CF0003E5C7
++:1006B0008000031F7C80C0007C40C00028D0000860
++:1006C0003110000F9500000F2528000106A801B485
++:1006D0009E80000000000000800001D5C0120800CC
++:1006E000800001E3C814000F800001EAC814001064
++:1006F000800001F1CCC1A2A4800001FAC81400114D
++:1007000030D0003F0D2800159A8000120D28001EE1
++:100710009A80001E0D2800209A8000230D24000FCF
++:100720000D2800107E6A800C9A8000260D2000049F
++:100730000D2400140D2800287E62400C7EA6800C3B
++:100740009A80002AC814001180000003CCC1A2A422
++:10075000C01208007C4140007D0CC00CC012000893
++:1007600029580003295C000C7C4200007DD1C00B9D
++:10077000262000147E1E400C7E4E800CCE81A2A44A
++:1007800080000003CD81A1FEC814000F0410210ECB
++:1007900095400000C814000FD051000080000003F5
++:1007A000CCC1A2A4C8140010041021089540000078
++:1007B000C8140010D051000080000003CCC1A2A4D6
++:1007C000CCC1A2A404100001CD0000198400038153
++:1007D000CC00007FC810001999000000C810001953
++:1007E000800000047C40800004102100954000003F
++:1007F000C8140011D05100008000037ECCC1A2A417
++:100800007C40C000CC40000D94C0FE01CC40000EE6
++:100810007C4100009500000508CC0001C8140005CB
++:10082000994000140000000098C0FFFB7C410000CC
++:10083000800000047D008000C81400057C40C000DA
++:100840009940000CC818000C7C4100009580FDF018
++:10085000C820000EC81C000D662000207E1E002C43
++:10086000252400027E62402080000003CCE60000C8
++:100870007C410000CC00006CCC00006DC818001F4B
++:10088000C81C001E659800207DD9C02C7CD4C00CEB
++:10089000CCDE000045DC0004C82800179680000F5D
++:1008A000C00E0001286800082AAC001632A800FF1C
++:1008B0000EB000497F2F000B9700000600000000DB
++:1008C000C81400057C40C000800002237C41000069
++:1008D00080000226D040007F8400023BCC00004113
++:1008E000CCC1304A94000000C83C001A043C00050A
++:1008F000CFC1A2A4C0361F90C0387FFF7C03C010B8
++:100900007F7B400CCF41217CCFC1217DCC01217E5A
++:10091000C03A00040434217F7F7B400CCC350000BA
++:10092000C83C00042BFC001F0438002097C00005C1
++:10093000CC0000629B8000000BB8000180000247E1
++:10094000CC000071CC01A1F404380016C0360002BE
++:10095000CF81A2A488000000CF4120107C40C000BD
++:1009600028D0001C9500000504D40001CD4000658E
++:1009700080000003CD40006809540002800000039D
++:10098000CD4000668400026CC81803EA7C40C000B9
++:100990009980FD9FC814001608D000019940002BD3
++:1009A000CD0000687C408000A0000000CC80006288
++:1009B000043C0005CFC1A2A4CC01A1F484000381B2
++:1009C000CC00004688000000CC00007F8400027E3E
++:1009D000C81803EA7C40C0009980FD8DC814001639
++:1009E00008D0000199400019CD0000687C408000CB
++:1009F000A0000000CC800062043C0022CFC1A2A471
++:100A000084000381CC00004788000000CC00007FF8
++:100A1000C81000169900000DCC400067800000044B
++:100A20007C408000C81803EA9980FD797C40C000B2
++:100A300094C00003C810001699000004CCC00068E0
++:100A4000800000047C4080008400023BC0148000D1
++:100A5000CC000041CD41304AC01480009900000014
++:100A6000C8100016800000047C408000C012000105
++:100A70007C51400C80000003D05500007C40C00039
++:100A80007C4100007C4140007C418000291C001F0B
++:100A9000CCC0004ACD00004B95C00003C01C8000B4
++:100AA000CDC12010DD830000055C2000CC00006279
++:100AB00080000003D81F41007C40C0007C41000042
++:100AC0007C4140007C418000CCC0004CCD00004DFA
++:100AD000DD830000055CA00080000003D81F4100FA
++:100AE0007C40C0007C4100007C4140007C41800093
++:100AF000CCC0004ECD00004FDD830000055CC0007F
++:100B000080000003D81F41007C40C0007C410000F1
++:100B10007C4140007C418000CCC00050CD000051A1
++:100B2000DD830000055CF8E080000003D81F410071
++:100B30007C40C0007C4100007C4140007C41800042
++:100B4000CCC00052CD000053DD830000055CF8806E
++:100B500080000003D81F41007C40C0007C410000A1
++:100B60007C4140007C418000CCC00054CD00005549
++:100B7000DD830000055CE00080000003D81F410019
++:100B80007C40C0007C4100007C4140007C418000F2
++:100B9000CCC00056CD000057DD830000055CF0009E
++:100BA00080000003D81F41007C40C0007C41000051
++:100BB0007C4140007C418000CCC00058CD000059F1
++:100BC000DD830000055CF3FC80000003D81F4100BA
++:100BD000D04320007C408000A0000000CC80006258
++:100BE000D043A0007C408000A0000000CC800062C8
++:100BF000D043C0007C408000A0000000CC80006298
++:100C0000D043F8E07C408000A0000000CC8000626F
++:100C1000D043F8807C408000A0000000CC800062BF
++:100C2000D043E0007C408000A0000000CC80006247
++:100C3000D043F0007C408000A0000000CC80006227
++:100C4000D043F3FC7C408000A0000000CC80006218
++:100C5000C81403E0CC430000CC430000CC430000A8
++:100C60007D45C000CDC30000D04300007C40800023
++:100C7000A0000000CC8000627C40C000C81003E2ED
++:100C8000C81403E5C81803E3C81C03E4CD81216937
++:100C9000CDC1216ACCC1216BCC01216C04200004A0
++:100CA0007DA180007D9640029640FCD9CD8003E373
++:100CB00031280003C02DF000251800087DAD800B01
++:100CC0007DA9800C80000003CD8003E3308CFFFF02
++:100CD000D04D00007C408000A0000000CC8000626D
++:100CE000C8140020155800029580FFFFC81400208A
++:100CF000CC00006ECC4121807C40C000CCC1218D55
++:100D0000CC41218128D0001F34588000CD81218C16
++:100D10009500FCBFCC412182C81400209940FFFF00
++:100D2000C8140020800000047C4080007C40C0008B
++:100D300028D0001831100001C01600809500000373
++:100D4000C02A00047CD4C00CCCC1217CCC41217DC4
++:100D5000CC41217E7C4180001DB0000336A0217F64
++:100D60009B000003419C0005041C004099C000004A
++:100D700009DC0001CC210000C82400042A6C001FFB
++:100D8000419C00059AC0FFFACC80006280000004FC
++:100D90007C4080007C40C00004D403E68000000357
++:100DA000CC5400008000037ECC4003EAC01C8000CD
++:100DB000044CA000CDC120107C410000C8140009E3
++:100DC00004180000041C0008CD80007109DC00013B
++:100DD00005980001CD0D000099C0FFFCCC80006299
++:100DE0008000037ECD400071C00E0100CC000041A8
++:100DF000CCC1304AC83C007FCC00007F800000039B
++:100E0000CC00007FCC00007F88000000CC00007F79
++:100E100000000000000000000000000000000000D2
++:100E200000000000000000000000000000000000C2
++:100E300000000000000000000000000000000000B2
++:100E400000000000000000000000000000000000A2
++:100E50000000000000000000000000000000000092
++:100E60000000000000000000000000000000000082
++:100E70000000000000000000000000000000000072
++:100E80000000000000000000000000000000000062
++:100E90000000000000000000000000000000000052
++:100EA0000000000000000000000000000000000042
++:100EB0000000000000000000000000000000000032
++:100EC0000000000000000000000000000000000022
++:100ED0000000000000000000000000000000000012
++:100EE0000000000000000000000000000000000002
++:100EF00000000000000000000000000000000000F2
++:100F000000000000000000000000000000000000E1
++:100F100000000000000000000000000000000000D1
++:100F200000000000000000000000000000000000C1
++:100F300000000000000000000000000000000000B1
++:100F400000000000000000000000000000000000A1
++:100F50000000000000000000000000000000000091
++:100F60000000000000000000000000000000000081
++:100F70000000000000000000000000000000000071
++:100F80000000000000000000000000000000000061
++:100F90000000000000000000000000000000000051
++:100FA0000000000000000000000000000000000041
++:100FB0000000000000000000000000000000000031
++:100FC0000000000000000000000000000000000021
++:100FD0000000000000000000000000000000000011
++:100FE0000000000000000000000000000000000001
++:100FF00000000000000000000000000000000000F1
++:1010000000000000000000000000000000000000E0
++:1010100000000000000000000000000000000000D0
++:1010200000000000000000000000000000000000C0
++:1010300000000000000000000000000000000000B0
++:1010400000000000000000000000000000000000A0
++:101050000000000000000000000000000000000090
++:101060000000000000000000000000000000000080
++:101070000000000000000000000000000000000070
++:101080000000000000000000000000000000000060
++:101090000000000000000000000000000000000050
++:1010A0000000000000000000000000000000000040
++:1010B0000000000000000000000000000000000030
++:1010C0000000000000000000000000000000000020
++:1010D0000000000000000000000000000000000010
++:1010E0000000000000000000000000000000000000
++:1010F00000000000000000000000000000000000F0
++:1011000000000000000000000000000000000000DF
++:1011100000000000000000000000000000000000CF
++:1011200000000000000000000000000000000000BF
++:1011300000000000000000000000000000000000AF
++:10114000000000000000000000000000000000009F
++:10115000000000000000000000000000000000008F
++:10116000000000000000000000000000000000007F
++:10117000000000000000000000000000000000006F
++:10118000000000000000000000000000000000005F
++:10119000000000000000000000000000000000004F
++:1011A000000000000000000000000000000000003F
++:1011B000000000000000000000000000000000002F
++:1011C000000000000000000000000000000000001F
++:1011D000000000000000000000000000000000000F
++:1011E00000000000000000000000000000000000FF
++:1011F00000000000000000000000000000000000EF
++:1012000000000000000000000000000000000000DE
++:1012100000000000000000000000000000000000CE
++:1012200000000000000000000000000000000000BE
++:1012300000000000000000000000000000000000AE
++:10124000000000000000000000000000000000009E
++:10125000000000000000000000000000000000008E
++:10126000000000000000000000000000000000007E
++:10127000000000000000000000000000000000006E
++:10128000000000000000000000000000000000005E
++:10129000000000000000000000000000000000004E
++:1012A000000000000000000000000000000000003E
++:1012B000000000000000000000000000000000002E
++:1012C000000000000000000000000000000000001E
++:1012D000000000000000000000000000000000000E
++:1012E00000000000000000000000000000000000FE
++:1012F00000000000000000000000000000000000EE
++:1013000000000000000000000000000000000000DD
++:1013100000000000000000000000000000000000CD
++:1013200000000000000000000000000000000000BD
++:1013300000000000000000000000000000000000AD
++:10134000000000000000000000000000000000009D
++:10135000000000000000000000000000000000008D
++:10136000000000000000000000000000000000007D
++:10137000000000000000000000000000000000006D
++:10138000000000000000000000000000000000005D
++:10139000000000000000000000000000000000004D
++:1013A000000000000000000000000000000000003D
++:1013B000000000000000000000000000000000002D
++:1013C000000000000000000000000000000000001D
++:1013D000000000000000000000000000000000000D
++:1013E00000000000000000000000000000000000FD
++:1013F00000000000000000000000000000000000ED
++:101400000001033300100006001700080021000A45
++:101410000027002A002800250029002B002A002888
++:10142000002B002B002D003A002E0041002F004C15
++:101430000034004E00360032003900B1003A00D1CD
++:10144000003B00E6003C00FE003D016D003F00AFA8
++:10145000004103380043034B00440190004500FE67
++:10146000004601AE004701AE004802000049020EEE
++:10147000004A0257004B028400520261005302737B
++:10148000005402890057029B0060029F006102AE77
++:10149000006202B8006302C2006402CC006502D69A
++:1014A000006602E0006702EA006802F4006902F8E0
++:1014B000006A02FC006B0300006C0304006D03086B
++:1014C000006E030C006F03100070031400720365BC
++:1014D0000074036B00790369007C031E000F037A1C
++:1014E000000F037A000F037A000F037A000F037ACC
++:1014F000000F037A000F037A000F037A000F037ABC
++:10150000000F037A000F037A000F037A000F037AAB
++:10151000000F037A000F037A000F037A000F037A9B
++:10152000000F037A000F037A000F037A000F037A8B
++:10153000000F037A000F037A000F037A000F037A7B
++:00000001FF
+diff --git a/firmware/radeon/RV710_pfp.bin.ihex b/firmware/radeon/RV710_pfp.bin.ihex
+new file mode 100644
+index 0000000..3d811ff
+--- /dev/null
++++ b/firmware/radeon/RV710_pfp.bin.ihex
+@@ -0,0 +1,213 @@
++:100000007C408000A00000007E82800B8000000009
++:10001000DC030000CC800040D04000407C408000E9
++:10002000A00000007E82800BC818000E31980001ED
++:100030007C4240009580023A7C428000C81C001C33
++:10004000C037C0007C40C0007C4100007CB4800B05
++:10005000C036000399C00000C81C001C7CB4800C92
++:1000600024D400027D654000CD400043CE80004393
++:10007000CD000043CC800040CE400040CE80004008
++:10008000CCC00040DC3A00009780FFDECD0000408D
++:100090007C40C000800000187C410000D400034078
++:1000A000D4000FC0D4000FA2C818000E8000000CAE
++:1000B00031980002D40003C0D4000FC0D4000FA2B6
++:1000C000C818000E288C000830CC000F3410000136
++:1000D0007D0D00088000000C7D91800BCC800040DD
++:1000E000D04000407C408000A00000007E82800B59
++:1000F000D4000340D4000FC0D4000FA2CC80004035
++:10010000D04000407C408000A00000007E82800B38
++:10011000D40003C0D4000FC0D4000FA2CC80004094
++:10012000D04000407C408000A00000007E82800B18
++:10013000CC4003F980000249CC4003F8C037FFFFF0
++:100140007C414000CF41A29EC82003F8C81C03F99F
++:1001500066200020C81803FB7DE1C02C7D58C00834
++:100160007CDCC02069100020C0360003CC000054A5
++:100170007CB4800C80000069CC8000407C41800011
++:10018000CD81A29ECC80004080000067CD800040E1
++:10019000C019FFFFCC800040CD81A29E7C40C000F2
++:1001A0007C4100007C414000CCC1A1FACD01A1F905
++:1001B000CD41A29DCCC00040CD000040CD400040CC
++:1001C000CC4000407C408000A00000007E82800B7C
++:1001D000CC000054CC8000407C40C0007C4100003A
++:1001E0007C414000CCC1A1FACD01A1F9CD41A29D35
++:1001F000CCC00040CD000040CD400040D040004089
++:100200007C408000A00000007E82800B7C40C0000B
++:1002100030D00001CCC1A29F95000003041400015E
++:1002200004140002CD4003FBCC800040800000009D
++:10023000CCC000407C40C000CC800040CCC1A2A219
++:1002400080000000CCC000407C40C00028D4001FCB
++:10025000CC800040954000037C410000CCC000579A
++:100260002918001FCCC0004095800003CD0000403D
++:10027000CD00005880000249CC00007FC820001744
++:10028000C83000229A0000060E280001C824001E73
++:100290000A640001D4001240CE400040C036C000C5
++:1002A0009680000737747900041C0001CF4000409D
++:1002B000CDC00040CF0003FA7C030000CA0C001040
++:1002C0007C41000094C000047C414000D42002C462
++:1002D000CDE000449B00000B7C418000CC00004B33
++:1002E000CDA00049CD200041CD600041CDA000410E
++:1002F00006200001CE00005680000249CC00007F9D
++:10030000C8280020C82C0021CC0000637EEA4001F0
++:10031000657400207F53402C269C00027DF5C02090
++:1003200069F80020CE80004BCE600049CDE000414E
++:10033000CFA00041CE600041271C00027DF5C02007
++:1003400069F800207DB24001CF00004BCE6000492B
++:10035000CDE00041CFA00041800000BCCE60004154
++:10036000C8200017C83000229A0000060E2800019D
++:10037000C824001E0A640001D4001240CE40004090
++:10038000CA0C00107C41000094C0000BC036C000B5
++:100390009680000737747900041C0001CF400040AC
++:1003A000CDC00040CF0003FA7C030000800000B500
++:1003B0007C414000CC000048800000EE00000000BE
++:1003C000C8200017C81C00230E24000299C0001585
++:1003D0007C4180000A200001CE000056D400044079
++:1003E000CC000040C036C000CA140013964000077D
++:1003F00037747900CF400040CC000040C83003FA89
++:1004000080000103CF000022CC000022954001466D
++:10041000CC00007FCCA0004680000000CC2000462D
++:1004200080000249CC000064C8200017C810001FDB
++:100430009600000509100001D4000440CD000040E2
++:10044000CD000022CC800040D0400040C80C0025E8
++:1004500094C0FEECC8100008CD000040D4000FC0CE
++:1004600080000000D4000FA27C40C0007C4100004E
++:10047000CCC003FDCD0003FCCCC00042CD00004247
++:100480002914001F29180010319800073B5C000157
++:100490007D76000B998000057D5E400BCC0000420C
++:1004A00080000249CC00004D29980001292C000849
++:1004B0009980003D32EC0001960000042930000CC8
++:1004C00080000249CC00004204140010CD400042DC
++:1004D00033300001342800018400015DC81400039A
++:1004E0009B40001B0438000C8400015DC81400030D
++:1004F0009B400017043800088400015DC814000305
++:100500009B400013043800048400015DC8140003FC
++:100510009B400015C80C03FD9A800009C81003FC1D
++:100520009B000101CC00004D04140010CCC000421F
++:10053000CD00004280000135CD40004296C000FA57
++:10054000CC00004D80000249CC00004E9AC0000350
++:10055000CC00004DCC00004EDF8300008000000086
++:10056000D80301FF9AC000F0CC00004D8000024982
++:10057000CC00004EC8180003C81C0003C8200003AC
++:100580007D5D40037DA1C0037D5D400C2A10001FEE
++:10059000299C001F7D1D000B7D17400B880000006B
++:1005A0007E92800B96400004CC00004E80000249F1
++:1005B000CC00004204380008CF800042C808000385
++:1005C000C80C0003C8100003C8140003C8180003B7
++:1005D000C81C0003C8240003C828000329FC001F0E
++:1005E0002AB0001F7FF3C00B28F0001F7FF3C00B61
++:1005F0002970001F7FF3C00B7D8880017DCCC00176
++:100600007E5100017E9540017C9080027CD4C00226
++:100610007CBC800B9AC000037C8F400B38B4000177
++:100620009B4000C1CC00004D9BC000BFCC00004EE1
++:10063000C80C03FDC81003FCCCC000428000016E52
++:10064000CD000042D4000340D4000FC0D4000FA25C
++:10065000CC800040CC400040CC400040CC4000402A
++:100660007C40C000CCC00040CCC0000D8000000029
++:10067000D04000407C40C0007C4100006514002058
++:100680007D4D402C245800027D5980207C41C000C3
++:10069000CD80004269980020CD800042CDC000424C
++:1006A000C023C00005E400027CA0800B266400107B
++:1006B0007CA4800CCC800040CDC00040CCC0004069
++:1006C00095C0000ECD00004009DC0001C8280003E1
++:1006D00096800008CE800040C834001D974000007E
++:1006E000C834001D26A800088400024CCC2B000052
++:1006F00099C0FFF709DC0001DC3A00009780000494
++:100700007C418000800001A225980002A00000002A
++:100710007D808000C818001D7C40C00064D00008A7
++:1007200095800000C818001DCC130000CC8000404C
++:10073000CCC0004080000000CC400040C810001F2A
++:100740007C40C000CC8000407CD1400CCD400040BB
++:100750000518000180000000CD8000227C40C00010
++:10076000645000208400024CCC0000617CD0C02C7E
++:10077000C8200017C8D60000994000087C438000BC
++:10078000DF830000CFA0004F8400024CCC00006249
++:1007900080000000D040007F80000249CC00006251
++:1007A0008400024CCC000061C82000177C40C000CF
++:1007B000C036FF00C810000DC0303FFF7CF5400B75
++:1007C0007D51800B7D81800F998000087CF3800B28
++:1007D000DF830000CFA0004F8400024CCC000062F9
++:1007E00080000000D040007F80000249CC00006201
++:1007F0008400024C7C40C00028DC000895C0001931
++:1008000030DC00107C41000099C0000464540020DA
++:1008100080000208C91D00007D15002CC91E0000C3
++:100820007C4200007C4240007C4180007DE5C00BA2
++:100830007DE280079A80000E41AC00059AC000005E
++:100840000AEC000130DC001099C000040000000038
++:100850008000020BC91D00008000020BC91E0000B1
++:10086000CC800040CCC00040D0400040C80C0025E7
++:1008700094C0FDE4C8100008CD000040D4000FC0B3
++:1008800080000000D4000FA2D4000340D4000FC0A9
++:10089000D4000FA2CC800040D04000407C408000BB
++:1008A000A00000007E82800BD40003C0D4000FC0E3
++:1008B000D4000FA2CC800040D04000407C4080009B
++:1008C000A00000007E82800B7C40C00030D000067B
++:1008D0000D10000699000007C81400159940000586
++:1008E000CC000052D4000340D4000FC0D4000FA2AB
++:1008F000CC800040CCC0004080000000D0400040D0
++:100900007C40C000CC4D0000DC3A00009780FDBD6B
++:1009100004CC000180000242CC4D000080000000A9
++:10092000D040007FCC00007F80000000CC00007F22
++:10093000CC00007F88000000CC00007F0000000099
++:1009400000000000000000000000000000000000A7
++:100950000000000000000000000000000000000097
++:100960000000000000000000000000000000000087
++:100970000000000000000000000000000000000077
++:100980000000000000000000000000000000000067
++:100990000000000000000000000000000000000057
++:1009A0000000000000000000000000000000000047
++:1009B0000000000000000000000000000000000037
++:1009C0000000000000000000000000000000000027
++:1009D0000000000000000000000000000000000017
++:1009E0000000000000000000000000000000000007
++:1009F00000000000000000000000000000000000F7
++:100A000000000000000000000000000000000000E6
++:100A100000000000000000000000000000000000D6
++:100A200000000000000000000000000000000000C6
++:100A300000000000000000000000000000000000B6
++:100A400000000000000000000000000000000000A6
++:100A50000000000000000000000000000000000096
++:100A60000000000000000000000000000000000086
++:100A70000000000000000000000000000000000076
++:100A80000000000000000000000000000000000066
++:100A90000000000000000000000000000000000056
++:100AA0000000000000000000000000000000000046
++:100AB0000000000000000000000000000000000036
++:100AC0000000000000000000000000000000000026
++:100AD0000000000000000000000000000000000016
++:100AE0000000000000000000000000000000000006
++:100AF00000000000000000000000000000000000F6
++:100B000000000000000000000000000000000000E5
++:100B100000000000000000000000000000000000D5
++:100B200000000000000000000000000000000000C5
++:100B300000000000000000000000000000000000B5
++:100B400000000000000000000000000000000000A5
++:100B50000000000000000000000000000000000095
++:100B60000000000000000000000000000000000085
++:100B70000000000000000000000000000000000075
++:100B80000000000000000000000000000000000065
++:100B90000000000000000000000000000000000055
++:100BA0000000000000000000000000000000000045
++:100BB0000000000000000000000000000000000035
++:100BC0000000000000000000000000000000000025
++:100BD0000000000000000000000000000000000015
++:100BE0000000000000000000000000000000000005
++:100BF00000000000000000000000000000000000F5
++:100C0000000302220004022A0005009F00020003E4
++:100C10000006003C0007002700080191000900447D
++:100C2000000A002D00100247001700F0002201D733
++:100C3000002301E80026004C0027005F0020011A75
++:100C4000002800920029004F002A0083002B006436
++:100C5000002F008D003200D80034023200360074BC
++:100C60000039010A003C01FC003F009F00410005E3
++:100C7000004401940048019D004901C5004A01CF8C
++:100C8000005502250056022D0060000A0061002A6E
++:100C90000062003000630030006400300065003006
++:100CA0000066003000670030006800370069003FD0
++:100CB000006A0047006B0047006C0047006D00476A
++:100CC000006E0047006F0047007000470073024746
++:100CD000007B024000000005000000050000000548
++:100CE00000000005000000050000000500000005F0
++:100CF00000000005000000050000000500000005E0
++:100D000000000005000000050000000500000005CF
++:100D100000000005000000050000000500000005BF
++:100D200000000005000000050000000500000005AF
++:100D3000000000050000000500000005000000059F
++:00000001FF
+diff --git a/firmware/radeon/RV730_me.bin.ihex b/firmware/radeon/RV730_me.bin.ihex
+new file mode 100644
+index 0000000..390c18e
+--- /dev/null
++++ b/firmware/radeon/RV730_me.bin.ihex
+@@ -0,0 +1,341 @@
++:10000000CC0003EA7C408000A0000000CC800062AD
++:1000100080000001D040007F80000001CC40004102
++:100020007C40C000C016000430D03FFF7D15000C9E
++:10003000CC11000028D8001E3198000128DC001FD8
++:10004000C820000495C000067C424000CC0000623D
++:100050007E56800CCC290000C82400047E26000BAC
++:10006000958000067C42C000CC0000627ED7000C68
++:10007000CC310000C82C00047E2E000CCC000062A5
++:1000800031103FFF80000001CE1100007C40C00015
++:1000900080000001CC40004080000001CC4122578C
++:1000A0007C418000CC400045CC400048CC41225CE3
++:1000B000CC41A1FC7C408000A0000000CC8000620C
++:1000C000CC400045CC4000487C40C000CC41225C84
++:1000D000CC41A1FC7C408000A0000000CC800062EC
++:1000E000CC000045CC000048CC41225CCC41A1FCB6
++:1000F0007C408000A0000000CC800062040CA1FDC8
++:10010000C0120001CC000045CC0000487CD0C00CDF
++:10011000CC41225CCC41A1FCD04D00007C40800051
++:10012000A0000000CC80006280000001CC41225D74
++:100130007C4080007C40C000C02A00027C4100005E
++:100140007D29000C3094000130980006309C03009B
++:1001500029DC00087C4200007C4240009540000FF2
++:10016000C02E000405F022587F2F000CCC31000077
++:10017000C8280004CCC12169CD01216ACE81216B40
++:100180000DB40002CC01216C9740000E0DB40000AC
++:100190008000007BC834000A0DB4000297400009BB
++:1001A0000DB40000C02E000405F022587F2F000C73
++:1001B000CC310000C82800048000007BC834000A4D
++:1001C000974000047E0280008000007BC834000A53
++:1001D0000DB400049740FF8C00000000CE01216D9B
++:1001E000CE41216EC8280003C834000A9B40000499
++:1001F000043C00058400026BCC0000620DF400009A
++:100200009740000BC82C03E6CE81A2B7C030000691
++:100210007EF34028C03000207F6B80207FB3C02950
++:10022000CF81A2C480000001CFC1A2D10DF4000192
++:100230009740000BC82C03E7CE81A2BBC03000065C
++:100240007EF34028C03000207F6B80207FB3C02920
++:10025000CF81A2C580000001CFC1A2D20DF400025F
++:100260009740000BC82C03E8CE81A2BFC030000627
++:100270007EF34028C03000207F6B80207FB3C029F0
++:10028000CF81A2C680000001CFC1A2D3C82C03E950
++:10029000CE81A2C3C03000067EF34028C0300020CB
++:1002A0007F6B80207FB3C029CF81A2C7800000016F
++:1002B000CFC1A2D480000001CC4000427C40C000ED
++:1002C0007C4100002914001D315400019940000CAC
++:1002D00031181000C81C001195C00000C81C001186
++:1002E000CCC12100CD012101CCC12102CD012103CE
++:1002F000041800048000037CCD81A2A4C02A00045D
++:100300009580000836A821A3CC290000C828000445
++:10031000C81C00110DE400409640FFFFC81C0011EE
++:10032000CCC12170CD012171C820001296000000BF
++:10033000C82000128000037CCC0000647C40C00018
++:100340007C410000CC000045CC00004840D40003B4
++:10035000CD41225CCD01A1FCC01A0001041CA1FD0D
++:100360007DD9C00C7C42000008CC000106240001AD
++:1003700006280002CE1D0000CE5D000098C0FFFAE6
++:10038000CE9D00007C408000A0000000CC80006278
++:100390007C40C00030D0000128CC00017C414000EE
++:1003A000950000067C418000CD41216DCD81216EFC
++:1003B000800000F2C81C0003C02200047E16000C5E
++:1003C000CC210000C81C00047C42400098C00004FE
++:1003D0007C42800080000001CDE50000CE41216913
++:1003E000CE81216ACDC1216B80000001CC01216C3E
++:1003F0007C40C0007C4100007C4140007C4180008A
++:100400007C41C00028A40008326400FF0E68003C54
++:100410009680000A7C0200007C4200001E3000032F
++:10042000CC00006A9B00000342200005042000402D
++:100430008000010F7C0240007E0240009A400000D4
++:100440000A64000130EC00109AC0000ACC0000627F
++:10045000C02A0004C82C00217E92800CCC000041F0
++:10046000CC290000CEC000218000011FC83000044C
++:10047000CD01216DCD41216EC83000037F1F000BDF
++:1004800030F40007277800019740002A07B80124BC
++:100490009F80000000000000800001347F1B80046A
++:1004A000800001387F1B80058000013C7F1B80029B
++:1004B000800001407F1B8003800001447F1B800778
++:1004C000800001487F1B80068000014D28A40008A1
++:1004D0009B80001928A400088000015D326400FFA1
++:1004E0009B80001528A400088000015D326400FF95
++:1004F0009B80001128A400088000015D326400FF89
++:100500009B80000D28A400088000015D326400FF7C
++:100510009B80000928A400088000015D326400FF70
++:100520009B80000528A400088000015D326400FF64
++:1005300028A40008326400FF0E68003C9A80FEB2D6
++:1005400028EC00087C4340007C4380007C43C000D2
++:1005500096C00007CC000062CF412169CF81216A9B
++:10056000CFC1216B80000001CC01216C8000000113
++:10057000CFF50000CC00006B8400037F0E68003CC8
++:100580009A800004C828001580000001D040007F38
++:100590009680FFAB7E02400084000239C00E00024C
++:1005A000CC00004180000237CCC1304A7C40C00002
++:1005B0007C410000C01E000129240012C02200025C
++:1005C00096400005C0260004C027FFFB7D25000BD8
++:1005D000C02600007DD2800B7E12C00B7D25000C52
++:1005E0007C4140007C418000CCC121699A80000A96
++:1005F000CD01216ACD41216B96C0FE83CD81216C56
++:10060000C830001897000000C830001880000001B2
++:10061000CC0000188400037FCC00007FC8140013B6
++:10062000C8180014CD41216B96C0FE77CD81216C96
++:1006300080000181C8300018C80C000898C0000074
++:10064000C80C00087C41000095000002000000007A
++:100650007C414000C8200009CC400043CE01A1F4F9
++:10066000CC400044C00E80007C4240007C428000B0
++:100670002AAC001F96C0FE64C035F000CE4003E2F5
++:1006800032780003267C00087FF7C00B7FFBC00C8C
++:100690002A780018CFC003E3CF8003E426B000021D
++:1006A0007F3F0000CF0003E58000031D7C80C00079
++:1006B0007C40C00028D000083110000F9500000FCA
++:1006C0002528000106A801B29E800000000000005D
++:1006D000800001D3C0120800800001E1C814000F9F
++:1006E000800001E8C8140010800001EFCCC1A2A472
++:1006F000800001F8C814001130D0003F0D2800150B
++:100700009A8000120D28001E9A80001E0D280020DD
++:100710009A8000230D24000F0D2800107E6A800CA3
++:100720009A8000260D2000040D2400140D280028B6
++:100730007E62400C7EA6800C9A80002AC8140011AC
++:1007400080000001CCC1A2A4C01208007C4140007E
++:100750007D0CC00CC012000829580003295C000C55
++:100760007C4200007DD1C00B262000147E1E400C70
++:100770007E4E800CCE81A2A480000001CD81A1FE1E
++:10078000C814000F0410210E95400000C814000F7B
++:10079000D051000080000001CCC1A2A4C8140010F8
++:1007A0000410210895400000C8140010D05100002A
++:1007B00080000001CCC1A2A4CCC1A2A404100001FD
++:1007C000CD0000198400037FCC00007FC810001901
++:1007D00099000000C8100019800000027C408000D1
++:1007E0000410210095400000C8140011D0510000F1
++:1007F0008000037CCCC1A2A47C40C000CC40000D92
++:1008000094C0FE01CC40000E7C4100009500000524
++:1008100008CC0001C8140005994000140000000035
++:1008200098C0FFFB7C410000800000027D0080003A
++:10083000C81400057C40C0009940000CC818000C8A
++:100840007C4100009580FDF0C820000EC81C000D02
++:10085000662000207E1E002C252400027E6240209F
++:1008600080000001CCE600007C410000CC00006C60
++:10087000CC00006DC818001FC81C001E6598002021
++:100880007DD9C02C7CD4C00CCCDE000045DC00043B
++:10089000C82800179680000FC00E000128680008C5
++:1008A0002AAC001632A800FF0EB000497F2F000BC3
++:1008B0009700000600000000C81400057C40C0003E
++:1008C000800002217C41000080000224D040007F93
++:1008D00084000239CC000041CCC1304A94000000B1
++:1008E000C83C001A043C0005CFC1A2A4C0361F902A
++:1008F000C0387FFF7C03C0107F7B400CCF41217C40
++:10090000CFC1217DCC01217EC03A00040434217F77
++:100910007F7B400CCC350000C83C00042BFC001F42
++:100920000438002097C00005CC0000629B800000C6
++:100930000BB8000180000245CC000071CC01A1F48D
++:1009400004380016C0360002CF81A2A4880000003F
++:10095000CF4120107C40C00028D0001C950000052D
++:1009600004D40001CD40006580000001CD40006846
++:100970000954000280000001CD4000668400026A34
++:10098000C81803EA7C40C0009980FD9FC814001677
++:1009900008D000019940002BCD0000687C40800009
++:1009A000A0000000CC800062043C0005CFC1A2A4DE
++:1009B000CC01A1F48400037FCC0000468800000035
++:1009C000CC00007F8400027CC81803EA7C40C00091
++:1009D0009980FD8DC814001608D0000199400019B7
++:1009E000CD0000687C408000A0000000CC80006248
++:1009F000043C0022CFC1A2A48400037FCC000047A6
++:100A000088000000CC00007FC81000169900000D7F
++:100A1000CC400067800000027C408000C81803EAD8
++:100A20009980FD797C40C00094C00003C810001676
++:100A300099000004CCC00068800000027C40800067
++:100A400084000239C0148000CC000041CD41304AFE
++:100A5000C014800099000000C81000168000000239
++:100A60007C408000C01200017C51400C80000001DD
++:100A7000D05500007C40C0007C4100007C4140001B
++:100A80007C418000291C001FCCC0004ACD00004BD7
++:100A900095C00003C01C8000CDC12010DD83000084
++:100AA000055C2000CC00006280000001D81F4100DE
++:100AB0007C40C0007C4100007C4140007C418000C3
++:100AC000CCC0004CCD00004DDD830000055CA000D3
++:100AD00080000001D81F41007C40C0007C41000024
++:100AE0007C4140007C418000CCC0004ECD00004FD6
++:100AF000DD830000055CC00080000001D81F4100BC
++:100B00007C40C0007C4100007C4140007C41800072
++:100B1000CCC00050CD000051DD830000055CF8E042
++:100B200080000001D81F41007C40C0007C410000D3
++:100B30007C4140007C418000CCC00052CD0000537D
++:100B4000DD830000055CF88080000001D81F4100B3
++:100B50007C40C0007C4100007C4140007C41800022
++:100B6000CCC00054CD000055DD830000055CE000E2
++:100B700080000001D81F41007C40C0007C41000083
++:100B80007C4140007C418000CCC00056CD00005725
++:100B9000DD830000055CF00080000001D81F4100EB
++:100BA0007C40C0007C4100007C4140007C418000D2
++:100BB000CCC00058CD000059DD830000055CF3FC7B
++:100BC00080000001D81F4100D04320007C408000FD
++:100BD000A0000000CC800062D043A0007C408000D8
++:100BE000A0000000CC800062D043C0007C408000A8
++:100BF000A0000000CC800062D043F8E07C40800080
++:100C0000A0000000CC800062D043F8807C408000CF
++:100C1000A0000000CC800062D043E0007C40800057
++:100C2000A0000000CC800062D043F0007C40800037
++:100C3000A0000000CC800062D043F3FC7C40800028
++:100C4000A0000000CC800062C81403E0CC43000088
++:100C5000CC430000CC4300007D45C000CDC3000064
++:100C6000D04300007C408000A0000000CC800062E7
++:100C70007C40C000C81003E2C81403E5C81803E3B1
++:100C8000C81C03E4CD812169CDC1216ACCC1216B8F
++:100C9000CC01216C042000047DA180007D964002DF
++:100CA0009640FCD9CD8003E331280003C02DF0002D
++:100CB000251800087DAD800B7DA9800C8000000107
++:100CC000CD8003E3308CFFFFD04D00007C408000DE
++:100CD000A0000000CC800062C8140020155800025B
++:100CE0009580FFFFC8140020CC00006ECC4121800D
++:100CF0007C40C000CCC1218DCC41218128D0001F77
++:100D000034588000CD81218C9500FCBFCC412182DC
++:100D1000C81400209940FFFFC81400208000000282
++:100D20007C4080007C40C00028D0001831100001B9
++:100D3000C016008095000003C02A00047CD4C00CBB
++:100D4000CCC1217CCC41217DCC41217E7C418000E5
++:100D50001DB0000336A0217F9B000003419C0005CD
++:100D6000041C004099C0000009DC0001CC210000F7
++:100D7000C82400042A6C001F419C00059AC0FFFA99
++:100D8000CC800062800000027C4080007C40C0007B
++:100D900004D403E680000001CC5400008000037CF2
++:100DA000CC4003EAC01C8000044CA000CDC1201040
++:100DB0007C410000C814000904180000041C00084D
++:100DC000CD80007109DC000105980001CD0D000007
++:100DD00099C0FFFCCC8000628000037CCD40007194
++:100DE000C00E0100CC000041CCC1304AC83C007F9D
++:100DF000CC00007F80000001CC00007FCC00007F91
++:100E000088000000CC00007F00000000000000000F
++:100E100000000000000000000000000000000000D2
++:100E200000000000000000000000000000000000C2
++:100E300000000000000000000000000000000000B2
++:100E400000000000000000000000000000000000A2
++:100E50000000000000000000000000000000000092
++:100E60000000000000000000000000000000000082
++:100E70000000000000000000000000000000000072
++:100E80000000000000000000000000000000000062
++:100E90000000000000000000000000000000000052
++:100EA0000000000000000000000000000000000042
++:100EB0000000000000000000000000000000000032
++:100EC0000000000000000000000000000000000022
++:100ED0000000000000000000000000000000000012
++:100EE0000000000000000000000000000000000002
++:100EF00000000000000000000000000000000000F2
++:100F000000000000000000000000000000000000E1
++:100F100000000000000000000000000000000000D1
++:100F200000000000000000000000000000000000C1
++:100F300000000000000000000000000000000000B1
++:100F400000000000000000000000000000000000A1
++:100F50000000000000000000000000000000000091
++:100F60000000000000000000000000000000000081
++:100F70000000000000000000000000000000000071
++:100F80000000000000000000000000000000000061
++:100F90000000000000000000000000000000000051
++:100FA0000000000000000000000000000000000041
++:100FB0000000000000000000000000000000000031
++:100FC0000000000000000000000000000000000021
++:100FD0000000000000000000000000000000000011
++:100FE0000000000000000000000000000000000001
++:100FF00000000000000000000000000000000000F1
++:1010000000000000000000000000000000000000E0
++:1010100000000000000000000000000000000000D0
++:1010200000000000000000000000000000000000C0
++:1010300000000000000000000000000000000000B0
++:1010400000000000000000000000000000000000A0
++:101050000000000000000000000000000000000090
++:101060000000000000000000000000000000000080
++:101070000000000000000000000000000000000070
++:101080000000000000000000000000000000000060
++:101090000000000000000000000000000000000050
++:1010A0000000000000000000000000000000000040
++:1010B0000000000000000000000000000000000030
++:1010C0000000000000000000000000000000000020
++:1010D0000000000000000000000000000000000010
++:1010E0000000000000000000000000000000000000
++:1010F00000000000000000000000000000000000F0
++:1011000000000000000000000000000000000000DF
++:1011100000000000000000000000000000000000CF
++:1011200000000000000000000000000000000000BF
++:1011300000000000000000000000000000000000AF
++:10114000000000000000000000000000000000009F
++:10115000000000000000000000000000000000008F
++:10116000000000000000000000000000000000007F
++:10117000000000000000000000000000000000006F
++:10118000000000000000000000000000000000005F
++:10119000000000000000000000000000000000004F
++:1011A000000000000000000000000000000000003F
++:1011B000000000000000000000000000000000002F
++:1011C000000000000000000000000000000000001F
++:1011D000000000000000000000000000000000000F
++:1011E00000000000000000000000000000000000FF
++:1011F00000000000000000000000000000000000EF
++:1012000000000000000000000000000000000000DE
++:1012100000000000000000000000000000000000CE
++:1012200000000000000000000000000000000000BE
++:1012300000000000000000000000000000000000AE
++:10124000000000000000000000000000000000009E
++:10125000000000000000000000000000000000008E
++:10126000000000000000000000000000000000007E
++:10127000000000000000000000000000000000006E
++:10128000000000000000000000000000000000005E
++:10129000000000000000000000000000000000004E
++:1012A000000000000000000000000000000000003E
++:1012B000000000000000000000000000000000002E
++:1012C000000000000000000000000000000000001E
++:1012D000000000000000000000000000000000000E
++:1012E00000000000000000000000000000000000FE
++:1012F00000000000000000000000000000000000EE
++:1013000000000000000000000000000000000000DD
++:1013100000000000000000000000000000000000CD
++:1013200000000000000000000000000000000000BD
++:1013300000000000000000000000000000000000AD
++:10134000000000000000000000000000000000009D
++:10135000000000000000000000000000000000008D
++:10136000000000000000000000000000000000007D
++:10137000000000000000000000000000000000006D
++:10138000000000000000000000000000000000005D
++:10139000000000000000000000000000000000004D
++:1013A000000000000000000000000000000000003D
++:1013B000000000000000000000000000000000002D
++:1013C000000000000000000000000000000000001D
++:1013D000000000000000000000000000000000000D
++:1013E00000000000000000000000000000000000FD
++:1013F00000000000000000000000000000000000ED
++:10140000000103310010000400170006002100084D
++:10141000002700280028002300290029002A002690
++:10142000002B0029002D0038002E003F002F004A1D
++:101430000034004C00360030003900AF003A00CFD5
++:10144000003B00E4003C00FC003D016B003F00ADB0
++:1014500000410336004303490044018E004500FC6F
++:10146000004601AC004701AC004801FE0049020CF7
++:10147000004A0255004B02820052025F0053027183
++:1014800000540287005702990060029D006102AC7F
++:10149000006202B6006302C0006402CA006502D4A2
++:1014A000006602DE006702E8006802F2006902F6E8
++:1014B000006A02FA006B02FE006C0302006D030674
++:1014C000006E030A006F030E0070031200720363C4
++:1014D0000074036900790367007C031C000F037824
++:1014E000000F0378000F0378000F0378000F0378D4
++:1014F000000F0378000F0378000F0378000F0378C4
++:10150000000F0378000F0378000F0378000F0378B3
++:10151000000F0378000F0378000F0378000F0378A3
++:10152000000F0378000F0378000F0378000F037893
++:10153000000F0378000F0378000F0378000F037883
++:00000001FF
+diff --git a/firmware/radeon/RV730_pfp.bin.ihex b/firmware/radeon/RV730_pfp.bin.ihex
+new file mode 100644
+index 0000000..3d811ff
+--- /dev/null
++++ b/firmware/radeon/RV730_pfp.bin.ihex
+@@ -0,0 +1,213 @@
++:100000007C408000A00000007E82800B8000000009
++:10001000DC030000CC800040D04000407C408000E9
++:10002000A00000007E82800BC818000E31980001ED
++:100030007C4240009580023A7C428000C81C001C33
++:10004000C037C0007C40C0007C4100007CB4800B05
++:10005000C036000399C00000C81C001C7CB4800C92
++:1000600024D400027D654000CD400043CE80004393
++:10007000CD000043CC800040CE400040CE80004008
++:10008000CCC00040DC3A00009780FFDECD0000408D
++:100090007C40C000800000187C410000D400034078
++:1000A000D4000FC0D4000FA2C818000E8000000CAE
++:1000B00031980002D40003C0D4000FC0D4000FA2B6
++:1000C000C818000E288C000830CC000F3410000136
++:1000D0007D0D00088000000C7D91800BCC800040DD
++:1000E000D04000407C408000A00000007E82800B59
++:1000F000D4000340D4000FC0D4000FA2CC80004035
++:10010000D04000407C408000A00000007E82800B38
++:10011000D40003C0D4000FC0D4000FA2CC80004094
++:10012000D04000407C408000A00000007E82800B18
++:10013000CC4003F980000249CC4003F8C037FFFFF0
++:100140007C414000CF41A29EC82003F8C81C03F99F
++:1001500066200020C81803FB7DE1C02C7D58C00834
++:100160007CDCC02069100020C0360003CC000054A5
++:100170007CB4800C80000069CC8000407C41800011
++:10018000CD81A29ECC80004080000067CD800040E1
++:10019000C019FFFFCC800040CD81A29E7C40C000F2
++:1001A0007C4100007C414000CCC1A1FACD01A1F905
++:1001B000CD41A29DCCC00040CD000040CD400040CC
++:1001C000CC4000407C408000A00000007E82800B7C
++:1001D000CC000054CC8000407C40C0007C4100003A
++:1001E0007C414000CCC1A1FACD01A1F9CD41A29D35
++:1001F000CCC00040CD000040CD400040D040004089
++:100200007C408000A00000007E82800B7C40C0000B
++:1002100030D00001CCC1A29F95000003041400015E
++:1002200004140002CD4003FBCC800040800000009D
++:10023000CCC000407C40C000CC800040CCC1A2A219
++:1002400080000000CCC000407C40C00028D4001FCB
++:10025000CC800040954000037C410000CCC000579A
++:100260002918001FCCC0004095800003CD0000403D
++:10027000CD00005880000249CC00007FC820001744
++:10028000C83000229A0000060E280001C824001E73
++:100290000A640001D4001240CE400040C036C000C5
++:1002A0009680000737747900041C0001CF4000409D
++:1002B000CDC00040CF0003FA7C030000CA0C001040
++:1002C0007C41000094C000047C414000D42002C462
++:1002D000CDE000449B00000B7C418000CC00004B33
++:1002E000CDA00049CD200041CD600041CDA000410E
++:1002F00006200001CE00005680000249CC00007F9D
++:10030000C8280020C82C0021CC0000637EEA4001F0
++:10031000657400207F53402C269C00027DF5C02090
++:1003200069F80020CE80004BCE600049CDE000414E
++:10033000CFA00041CE600041271C00027DF5C02007
++:1003400069F800207DB24001CF00004BCE6000492B
++:10035000CDE00041CFA00041800000BCCE60004154
++:10036000C8200017C83000229A0000060E2800019D
++:10037000C824001E0A640001D4001240CE40004090
++:10038000CA0C00107C41000094C0000BC036C000B5
++:100390009680000737747900041C0001CF400040AC
++:1003A000CDC00040CF0003FA7C030000800000B500
++:1003B0007C414000CC000048800000EE00000000BE
++:1003C000C8200017C81C00230E24000299C0001585
++:1003D0007C4180000A200001CE000056D400044079
++:1003E000CC000040C036C000CA140013964000077D
++:1003F00037747900CF400040CC000040C83003FA89
++:1004000080000103CF000022CC000022954001466D
++:10041000CC00007FCCA0004680000000CC2000462D
++:1004200080000249CC000064C8200017C810001FDB
++:100430009600000509100001D4000440CD000040E2
++:10044000CD000022CC800040D0400040C80C0025E8
++:1004500094C0FEECC8100008CD000040D4000FC0CE
++:1004600080000000D4000FA27C40C0007C4100004E
++:10047000CCC003FDCD0003FCCCC00042CD00004247
++:100480002914001F29180010319800073B5C000157
++:100490007D76000B998000057D5E400BCC0000420C
++:1004A00080000249CC00004D29980001292C000849
++:1004B0009980003D32EC0001960000042930000CC8
++:1004C00080000249CC00004204140010CD400042DC
++:1004D00033300001342800018400015DC81400039A
++:1004E0009B40001B0438000C8400015DC81400030D
++:1004F0009B400017043800088400015DC814000305
++:100500009B400013043800048400015DC8140003FC
++:100510009B400015C80C03FD9A800009C81003FC1D
++:100520009B000101CC00004D04140010CCC000421F
++:10053000CD00004280000135CD40004296C000FA57
++:10054000CC00004D80000249CC00004E9AC0000350
++:10055000CC00004DCC00004EDF8300008000000086
++:10056000D80301FF9AC000F0CC00004D8000024982
++:10057000CC00004EC8180003C81C0003C8200003AC
++:100580007D5D40037DA1C0037D5D400C2A10001FEE
++:10059000299C001F7D1D000B7D17400B880000006B
++:1005A0007E92800B96400004CC00004E80000249F1
++:1005B000CC00004204380008CF800042C808000385
++:1005C000C80C0003C8100003C8140003C8180003B7
++:1005D000C81C0003C8240003C828000329FC001F0E
++:1005E0002AB0001F7FF3C00B28F0001F7FF3C00B61
++:1005F0002970001F7FF3C00B7D8880017DCCC00176
++:100600007E5100017E9540017C9080027CD4C00226
++:100610007CBC800B9AC000037C8F400B38B4000177
++:100620009B4000C1CC00004D9BC000BFCC00004EE1
++:10063000C80C03FDC81003FCCCC000428000016E52
++:10064000CD000042D4000340D4000FC0D4000FA25C
++:10065000CC800040CC400040CC400040CC4000402A
++:100660007C40C000CCC00040CCC0000D8000000029
++:10067000D04000407C40C0007C4100006514002058
++:100680007D4D402C245800027D5980207C41C000C3
++:10069000CD80004269980020CD800042CDC000424C
++:1006A000C023C00005E400027CA0800B266400107B
++:1006B0007CA4800CCC800040CDC00040CCC0004069
++:1006C00095C0000ECD00004009DC0001C8280003E1
++:1006D00096800008CE800040C834001D974000007E
++:1006E000C834001D26A800088400024CCC2B000052
++:1006F00099C0FFF709DC0001DC3A00009780000494
++:100700007C418000800001A225980002A00000002A
++:100710007D808000C818001D7C40C00064D00008A7
++:1007200095800000C818001DCC130000CC8000404C
++:10073000CCC0004080000000CC400040C810001F2A
++:100740007C40C000CC8000407CD1400CCD400040BB
++:100750000518000180000000CD8000227C40C00010
++:10076000645000208400024CCC0000617CD0C02C7E
++:10077000C8200017C8D60000994000087C438000BC
++:10078000DF830000CFA0004F8400024CCC00006249
++:1007900080000000D040007F80000249CC00006251
++:1007A0008400024CCC000061C82000177C40C000CF
++:1007B000C036FF00C810000DC0303FFF7CF5400B75
++:1007C0007D51800B7D81800F998000087CF3800B28
++:1007D000DF830000CFA0004F8400024CCC000062F9
++:1007E00080000000D040007F80000249CC00006201
++:1007F0008400024C7C40C00028DC000895C0001931
++:1008000030DC00107C41000099C0000464540020DA
++:1008100080000208C91D00007D15002CC91E0000C3
++:100820007C4200007C4240007C4180007DE5C00BA2
++:100830007DE280079A80000E41AC00059AC000005E
++:100840000AEC000130DC001099C000040000000038
++:100850008000020BC91D00008000020BC91E0000B1
++:10086000CC800040CCC00040D0400040C80C0025E7
++:1008700094C0FDE4C8100008CD000040D4000FC0B3
++:1008800080000000D4000FA2D4000340D4000FC0A9
++:10089000D4000FA2CC800040D04000407C408000BB
++:1008A000A00000007E82800BD40003C0D4000FC0E3
++:1008B000D4000FA2CC800040D04000407C4080009B
++:1008C000A00000007E82800B7C40C00030D000067B
++:1008D0000D10000699000007C81400159940000586
++:1008E000CC000052D4000340D4000FC0D4000FA2AB
++:1008F000CC800040CCC0004080000000D0400040D0
++:100900007C40C000CC4D0000DC3A00009780FDBD6B
++:1009100004CC000180000242CC4D000080000000A9
++:10092000D040007FCC00007F80000000CC00007F22
++:10093000CC00007F88000000CC00007F0000000099
++:1009400000000000000000000000000000000000A7
++:100950000000000000000000000000000000000097
++:100960000000000000000000000000000000000087
++:100970000000000000000000000000000000000077
++:100980000000000000000000000000000000000067
++:100990000000000000000000000000000000000057
++:1009A0000000000000000000000000000000000047
++:1009B0000000000000000000000000000000000037
++:1009C0000000000000000000000000000000000027
++:1009D0000000000000000000000000000000000017
++:1009E0000000000000000000000000000000000007
++:1009F00000000000000000000000000000000000F7
++:100A000000000000000000000000000000000000E6
++:100A100000000000000000000000000000000000D6
++:100A200000000000000000000000000000000000C6
++:100A300000000000000000000000000000000000B6
++:100A400000000000000000000000000000000000A6
++:100A50000000000000000000000000000000000096
++:100A60000000000000000000000000000000000086
++:100A70000000000000000000000000000000000076
++:100A80000000000000000000000000000000000066
++:100A90000000000000000000000000000000000056
++:100AA0000000000000000000000000000000000046
++:100AB0000000000000000000000000000000000036
++:100AC0000000000000000000000000000000000026
++:100AD0000000000000000000000000000000000016
++:100AE0000000000000000000000000000000000006
++:100AF00000000000000000000000000000000000F6
++:100B000000000000000000000000000000000000E5
++:100B100000000000000000000000000000000000D5
++:100B200000000000000000000000000000000000C5
++:100B300000000000000000000000000000000000B5
++:100B400000000000000000000000000000000000A5
++:100B50000000000000000000000000000000000095
++:100B60000000000000000000000000000000000085
++:100B70000000000000000000000000000000000075
++:100B80000000000000000000000000000000000065
++:100B90000000000000000000000000000000000055
++:100BA0000000000000000000000000000000000045
++:100BB0000000000000000000000000000000000035
++:100BC0000000000000000000000000000000000025
++:100BD0000000000000000000000000000000000015
++:100BE0000000000000000000000000000000000005
++:100BF00000000000000000000000000000000000F5
++:100C0000000302220004022A0005009F00020003E4
++:100C10000006003C0007002700080191000900447D
++:100C2000000A002D00100247001700F0002201D733
++:100C3000002301E80026004C0027005F0020011A75
++:100C4000002800920029004F002A0083002B006436
++:100C5000002F008D003200D80034023200360074BC
++:100C60000039010A003C01FC003F009F00410005E3
++:100C7000004401940048019D004901C5004A01CF8C
++:100C8000005502250056022D0060000A0061002A6E
++:100C90000062003000630030006400300065003006
++:100CA0000066003000670030006800370069003FD0
++:100CB000006A0047006B0047006C0047006D00476A
++:100CC000006E0047006F0047007000470073024746
++:100CD000007B024000000005000000050000000548
++:100CE00000000005000000050000000500000005F0
++:100CF00000000005000000050000000500000005E0
++:100D000000000005000000050000000500000005CF
++:100D100000000005000000050000000500000005BF
++:100D200000000005000000050000000500000005AF
++:100D3000000000050000000500000005000000059F
++:00000001FF
+diff --git a/firmware/radeon/RV770_me.bin.ihex b/firmware/radeon/RV770_me.bin.ihex
+new file mode 100644
+index 0000000..a0e1699
+--- /dev/null
++++ b/firmware/radeon/RV770_me.bin.ihex
+@@ -0,0 +1,341 @@
++:10000000CC0003EA7C408000A0000000CC800062AD
++:1000100080000001D040007F80000001CC40004102
++:100020007C40C000C016000430D03FFF7D15000C9E
++:10003000CC11000028D8001E3198000128DC001FD8
++:10004000C820000495C000067C424000CC0000623D
++:100050007E56800CCC290000C82400047E26000BAC
++:10006000958000067C42C000CC0000627ED7000C68
++:10007000CC310000C82C00047E2E000CCC000062A5
++:1000800031103FFF80000001CE1100007C40C00015
++:1000900080000001CC40004080000001CC4122578C
++:1000A0007C418000CC400045CC400048CC41225CE3
++:1000B000CC41A1FC7C408000A0000000CC8000620C
++:1000C000CC400045CC4000487C40C000CC41225C84
++:1000D000CC41A1FC7C408000A0000000CC800062EC
++:1000E000CC000045CC000048CC41225CCC41A1FCB6
++:1000F0007C408000A0000000CC800062040CA1FDC8
++:10010000C0120001CC000045CC0000487CD0C00CDF
++:10011000CC41225CCC41A1FCD04D00007C40800051
++:10012000A0000000CC80006280000001CC41225D74
++:100130007C4080007C40C000C02A00027C4100005E
++:100140007D29000C3094000130980006309C03009B
++:1001500029DC00087C4200007C4240009540000FF2
++:10016000C02E000405F022587F2F000CCC31000077
++:10017000C8280004CCC12169CD01216ACE81216B40
++:100180000DB40002CC01216C9740000E0DB40000AC
++:100190008000007BC834000A0DB4000297400009BB
++:1001A0000DB40000C02E000405F022587F2F000C73
++:1001B000CC310000C82800048000007BC834000A4D
++:1001C000974000047E0280008000007BC834000A53
++:1001D0000DB400049740FF8C00000000CE01216D9B
++:1001E000CE41216EC8280003C834000A9B40000499
++:1001F000043C00058400026DCC0000620DF4000098
++:100200009740000BC82C03E6CE81A2B7C030000691
++:100210007EF34028C03000207F6B80207FB3C02950
++:10022000CF81A2C480000001CFC1A2D10DF4000192
++:100230009740000BC82C03E7CE81A2BBC03000065C
++:100240007EF34028C03000207F6B80207FB3C02920
++:10025000CF81A2C580000001CFC1A2D20DF400025F
++:100260009740000BC82C03E8CE81A2BFC030000627
++:100270007EF34028C03000207F6B80207FB3C029F0
++:10028000CF81A2C680000001CFC1A2D3C82C03E950
++:10029000CE81A2C3C03000067EF34028C0300020CB
++:1002A0007F6B80207FB3C029CF81A2C7800000016F
++:1002B000CFC1A2D480000001CC4000427C40C000ED
++:1002C0007C4100002914001D315400019940000DAB
++:1002D00031181000C81C001109DC000195C0FFFF97
++:1002E000C81C0011CCC12100CD012101CCC12102CB
++:1002F000CD012103041800048000039FCD81A2A436
++:10030000C02A00049580000836A821A3CC2900004B
++:10031000C8280004C81C00110DE400409640FFFFEF
++:10032000C81C0011CCC12170CD012171C820001260
++:1003300096000000C82000128000039FCC000064DB
++:100340007C40C0007C410000CC000045CC0000484F
++:1003500040D40003CD41225CCD01A1FCC01A0001B4
++:10036000041CA1FD7DD9C00C7C42000008CC00011A
++:100370000624000106280002CE1D0000CE5D00000C
++:1003800098C0FFFACE9D00007C408000A0000000D5
++:10039000CC8000627C40C00030D0000128CC00013D
++:1003A0007C414000950000067C418000CD41216DDC
++:1003B000CD81216E800000F3C81C0003C022000420
++:1003C0007E16000CCC210000C81C00047C424000BA
++:1003D00098C000047C42800080000001CDE5000050
++:1003E000CE412169CE81216ACDC1216B80000001FF
++:1003F000CC01216C7C40C0007C4100007C4140006D
++:100400007C4180007C41C00028A40008326400FFC9
++:100410000E68003C9680000A7C0200007C420000CE
++:100420001E300003CC00006A9B0000034220000540
++:1004300004200040800001107C0240007E02400049
++:100440009A4000000A64000130EC00109AC0000AD3
++:10045000CC000062C02A0004C82C00217E92800CCF
++:10046000CC000041CC290000CEC00021800001203A
++:10047000C8300004CD01216DCD41216EC83000038C
++:100480007F1F000B30F40007277800019740002AF7
++:1004900007B801259F8000000000000080000135A2
++:1004A0007F1B8004800001397F1B80058000013D97
++:1004B0007F1B8002800001417F1B8003800001457B
++:1004C0007F1B8007800001497F1B80068000014E52
++:1004D00028A400089B80001928A400088000015E61
++:1004E000326400FF9B80001528A400088000015E94
++:1004F000326400FF9B80001128A400088000015E88
++:10050000326400FF9B80000D28A400088000015E7B
++:10051000326400FF9B80000928A400088000015E6F
++:10052000326400FF9B80000528A400088000015E63
++:10053000326400FF28A40008326400FF0E68003C0B
++:100540009A80FEB128EC00087C4340007C43800088
++:100550007C43C00096C00007CC000062CF412169F7
++:10056000CF81216ACFC1216B80000001CC01216CB9
++:1005700080000001CFF50000CC00006B840003A2D6
++:100580000E68003C9A800004C82800158000000115
++:10059000D040007F9680FFAB7E0240008400023B8B
++:1005A000C00E0002CC00004180000239CCC1304AAC
++:1005B0007C40C0007C410000C01E000129240012C4
++:1005C000C022000296400005C0260004C027FFFBA1
++:1005D0007D25000BC02600007DD2800B7E12C00B53
++:1005E0007D25000C7C4140007C418000CCC121690C
++:1005F0009A80000ACD01216ACD41216B96C0FE820E
++:10060000CD81216CC830001897000000C830001858
++:1006100080000001CC000018840003A2CC00007F01
++:10062000C8140013C8180014CD41216B96C0FE7683
++:10063000CD81216C80000182C8300018C80C0008F0
++:1006400098C00000C80C00087C4100009500000222
++:10065000000000007C414000C8200009CC4000435D
++:10066000CE01A1F4CC400044C00E80007C4240008A
++:100670007C4280002AAC001F96C0FE63C035F000AB
++:10068000CE4003E232780003267C00087FF7C00BDF
++:100690007FFBC00C2A780018CFC003E3CF8003E4AF
++:1006A00026B000027F3F0000CF0003E58000031F5B
++:1006B0007C80C0007C40C00028D000083110000FB2
++:1006C0009500000F2528000106A801B39E800000B8
++:1006D00000000000800001D4C0120800800001E288
++:1006E000C814000F800001E9C8140010800001F058
++:1006F000CCC1A2A4800001F9C814001130D0003F81
++:100700000D2800159A8000120D28001E9A80001EE8
++:100710000D2800209A8000230D24000F0D280010C2
++:100720007E6A800C9A8000260D2000040D2400149F
++:100730000D2800287E62400C7EA6800C9A80002A3C
++:10074000C814001180000001CCC1A2A4C01208008E
++:100750007C4140007D0CC00CC012000829580003E9
++:10076000295C000C7C4200007DD1C00B26200014C7
++:100770007E1E400C7E4E800CCE81A2A48000000123
++:10078000CD81A1FEC814000F0410210E9540000079
++:10079000C814000FD051000080000001CCC1A2A4F9
++:1007A000C81400100410210895400000C81400105F
++:1007B000D051000080000001CCC1A2A4CCC1A2A4F1
++:1007C00004100001CD000019840003A2CC00007FBA
++:1007D000C810001999000000C8100019800000021C
++:1007E0007C40800004102100095400019540FFFF67
++:1007F000C8140011D05100008000039FCCC1A2A4F6
++:100800007C40C000CC40000D94C0FDFFCC40000EE9
++:100810007C4100009500000508CC0001C8140005CB
++:10082000994000140000000098C0FFFB7C410000CC
++:10083000800000027D008000C81400057C40C000DC
++:100840009940000CC818000C7C4100009580FDEE1A
++:10085000C820000EC81C000D662000207E1E002C43
++:10086000252400027E62402080000001CCE60000CA
++:100870007C410000CC00006CCC00006DC818001F4B
++:10088000C81C001E659800207DD9C02C7CD4C00CEB
++:10089000CCDE000045DC0004C82800179680000F5D
++:1008A000C00E0001286800082AAC001632A800FF1C
++:1008B0000EB000497F2F000B9700000600000000DB
++:1008C000C81400057C40C000800002237C41000069
++:1008D00080000226D040007F8400023BCC00004113
++:1008E000CCC1304A94000000C83C001A043C00050A
++:1008F000CFC1A2A4C0361F90C0387FFF7C03C010B8
++:100900007F7B400CCF41217CCFC1217DCC01217E5A
++:10091000C03A00040434217F7F7B400CCC350000BA
++:10092000C83C00042BFC001F0438002097C00005C1
++:10093000CC0000629B8000000BB8000180000247E1
++:10094000CC000071CC01A1F404380016C0360002BE
++:10095000CF81A2A488000000CF4120107C40C000BD
++:1009600028D0001C9500000504D40001CD4000658E
++:1009700080000001CD4000680954000280000001A1
++:10098000CD4000668400026CC81803EA7C40C000B9
++:100990009980FD9DC814001608D000019940002BD5
++:1009A000CD0000687C408000A0000000CC80006288
++:1009B000043C0005CFC1A2A4CC01A1F4840003A291
++:1009C000CC00004688000000CC00007F8400027E3E
++:1009D000C81803EA7C40C0009980FD8BC81400163B
++:1009E00008D0000199400019CD0000687C408000CB
++:1009F000A0000000CC800062043C0022CFC1A2A471
++:100A0000840003A2CC00004788000000CC00007FD7
++:100A1000C81000169900000DCC400067800000024D
++:100A20007C408000C81803EA9980FD777C40C000B4
++:100A300094C00003C810001699000004CCC00068E0
++:100A4000800000027C4080008400023BC0148000D3
++:100A5000CC000041CD41304AC01480009900000014
++:100A6000C8100016800000027C408000C012000107
++:100A70007C51400C80000001D05500007C40C0003B
++:100A80007C4100007C4140007C418000291C001F0B
++:100A9000CCC0004ACD00004B95C00003C01C8000B4
++:100AA000CDC12010DD830000055C2000CC00006279
++:100AB00080000001D81F41007C40C0007C41000044
++:100AC0007C4140007C418000CCC0004CCD00004DFA
++:100AD000DD830000055CA00080000001D81F4100FC
++:100AE0007C40C0007C4100007C4140007C41800093
++:100AF000CCC0004ECD00004FDD830000055CC0007F
++:100B000080000001D81F41007C40C0007C410000F3
++:100B10007C4140007C418000CCC00050CD000051A1
++:100B2000DD830000055CF8E080000001D81F410073
++:100B30007C40C0007C4100007C4140007C41800042
++:100B4000CCC00052CD000053DD830000055CF8806E
++:100B500080000001D81F41007C40C0007C410000A3
++:100B60007C4140007C418000CCC00054CD00005549
++:100B7000DD830000055CE00080000001D81F41001B
++:100B80007C40C0007C4100007C4140007C418000F2
++:100B9000CCC00056CD000057DD830000055CF0009E
++:100BA00080000001D81F41007C40C0007C41000053
++:100BB0007C4140007C418000CCC00058CD000059F1
++:100BC000DD830000055CF3FC80000001D81F4100BC
++:100BD000D04320007C408000A0000000CC80006258
++:100BE000D043A0007C408000A0000000CC800062C8
++:100BF000D043C0007C408000A0000000CC80006298
++:100C0000D043F8E07C408000A0000000CC8000626F
++:100C1000D043F8807C408000A0000000CC800062BF
++:100C2000D043E0007C408000A0000000CC80006247
++:100C3000D043F0007C408000A0000000CC80006227
++:100C4000D043F3FC7C408000A0000000CC80006218
++:100C5000C81403E0CC430000CC430000CC430000A8
++:100C60007D45C000CDC30000D04300007C40800023
++:100C7000A0000000CC8000627C40C000C81003E2ED
++:100C8000C81403E5C81803E3C81C03E4CD81216937
++:100C9000CDC1216ACCC1216BCC01216C04200004A0
++:100CA0007DA180007D9640029640FCD7CD8003E375
++:100CB00031280003C02DF000251800087DAD800B01
++:100CC0007DA9800C80000001CD8003E3308CFFFF04
++:100CD000D04D00007C408000A0000000CC8000626D
++:100CE0007C40C0007C4100002924001832640001CF
++:100CF0009A400013C8140020155800029580FFFF89
++:100D0000C8140020CC00006ECCC12180CD01218D03
++:100D1000CC4121812914001F34588000CD81218CC1
++:100D20009540FCB9CC412182C81400209940FFFFB6
++:100D3000C8140020800000027C4080007C414000FC
++:100D40007C4180007C41C00065B400207F57402C6E
++:100D5000D437810047740004D437810047740004FD
++:100D6000D43781004774000409DC0004D4378100C3
++:100D700099C0FFF8477400042924001FC0380019E7
++:100D80009640FCA1C03E0004CF8121F837E021F954
++:100D9000CC210000C82000042A20001832200001C5
++:100DA0009A00FFFBCF8121F8800000027C40800088
++:100DB0007C40C00028D0001831100001C01600800F
++:100DC00095000003C02A00047CD4C00CCCC1217C57
++:100DD000CC41217DCC41217E7C4180001DB00003AF
++:100DE00036A0217F9B000003419C0005041C0040AD
++:100DF00099C0000009DC0001CC210000C8240004D7
++:100E00002A6C001F419C00059AC0FFFACC8000624A
++:100E1000800000027C4080007C40C00004D403E6D7
++:100E200080000001CC5400008000039FCC4003EA06
++:100E3000C01C8000044CA000CDC120107C410000EB
++:100E4000C814000904180000041C0008CD800071BB
++:100E500009DC000105980001CD0D000099C0FFFCE0
++:100E6000CC8000628000039FCD400071C00E010065
++:100E7000CC000041CCC1304AC83C007FCC00007F90
++:100E800080000001CC00007FCC00007F88000000C3
++:100E9000CC00007F00000000000000000000000007
++:100EA0000000000000000000000000000000000042
++:100EB0000000000000000000000000000000000032
++:100EC0000000000000000000000000000000000022
++:100ED0000000000000000000000000000000000012
++:100EE0000000000000000000000000000000000002
++:100EF00000000000000000000000000000000000F2
++:100F000000000000000000000000000000000000E1
++:100F100000000000000000000000000000000000D1
++:100F200000000000000000000000000000000000C1
++:100F300000000000000000000000000000000000B1
++:100F400000000000000000000000000000000000A1
++:100F50000000000000000000000000000000000091
++:100F60000000000000000000000000000000000081
++:100F70000000000000000000000000000000000071
++:100F80000000000000000000000000000000000061
++:100F90000000000000000000000000000000000051
++:100FA0000000000000000000000000000000000041
++:100FB0000000000000000000000000000000000031
++:100FC0000000000000000000000000000000000021
++:100FD0000000000000000000000000000000000011
++:100FE0000000000000000000000000000000000001
++:100FF00000000000000000000000000000000000F1
++:1010000000000000000000000000000000000000E0
++:1010100000000000000000000000000000000000D0
++:1010200000000000000000000000000000000000C0
++:1010300000000000000000000000000000000000B0
++:1010400000000000000000000000000000000000A0
++:101050000000000000000000000000000000000090
++:101060000000000000000000000000000000000080
++:101070000000000000000000000000000000000070
++:101080000000000000000000000000000000000060
++:101090000000000000000000000000000000000050
++:1010A0000000000000000000000000000000000040
++:1010B0000000000000000000000000000000000030
++:1010C0000000000000000000000000000000000020
++:1010D0000000000000000000000000000000000010
++:1010E0000000000000000000000000000000000000
++:1010F00000000000000000000000000000000000F0
++:1011000000000000000000000000000000000000DF
++:1011100000000000000000000000000000000000CF
++:1011200000000000000000000000000000000000BF
++:1011300000000000000000000000000000000000AF
++:10114000000000000000000000000000000000009F
++:10115000000000000000000000000000000000008F
++:10116000000000000000000000000000000000007F
++:10117000000000000000000000000000000000006F
++:10118000000000000000000000000000000000005F
++:10119000000000000000000000000000000000004F
++:1011A000000000000000000000000000000000003F
++:1011B000000000000000000000000000000000002F
++:1011C000000000000000000000000000000000001F
++:1011D000000000000000000000000000000000000F
++:1011E00000000000000000000000000000000000FF
++:1011F00000000000000000000000000000000000EF
++:1012000000000000000000000000000000000000DE
++:1012100000000000000000000000000000000000CE
++:1012200000000000000000000000000000000000BE
++:1012300000000000000000000000000000000000AE
++:10124000000000000000000000000000000000009E
++:10125000000000000000000000000000000000008E
++:10126000000000000000000000000000000000007E
++:10127000000000000000000000000000000000006E
++:10128000000000000000000000000000000000005E
++:10129000000000000000000000000000000000004E
++:1012A000000000000000000000000000000000003E
++:1012B000000000000000000000000000000000002E
++:1012C000000000000000000000000000000000001E
++:1012D000000000000000000000000000000000000E
++:1012E00000000000000000000000000000000000FE
++:1012F00000000000000000000000000000000000EE
++:1013000000000000000000000000000000000000DD
++:1013100000000000000000000000000000000000CD
++:1013200000000000000000000000000000000000BD
++:1013300000000000000000000000000000000000AD
++:10134000000000000000000000000000000000009D
++:10135000000000000000000000000000000000008D
++:10136000000000000000000000000000000000007D
++:10137000000000000000000000000000000000006D
++:10138000000000000000000000000000000000005D
++:10139000000000000000000000000000000000004D
++:1013A000000000000000000000000000000000003D
++:1013B000000000000000000000000000000000002D
++:1013C000000000000000000000000000000000001D
++:1013D000000000000000000000000000000000000D
++:1013E00000000000000000000000000000000000FD
++:1013F00000000000000000000000000000000000ED
++:10140000000103330010000400170006002100084B
++:10141000002700280028002300290029002A002690
++:10142000002B0029002D0038002E003F002F004A1D
++:101430000034004C00360030003900AF003A00D0D4
++:10144000003B00E5003C00FD003D016C003F00ADAD
++:10145000004103380043036C0044018F004500FD48
++:10146000004601AD004701AD004802000049020EF0
++:10147000004A0257004B028400520261005302737B
++:10148000005402890057029B0060029F006102AE77
++:10149000006202B8006302C2006402CC006502D69A
++:1014A000006602E0006702EA006802F4006902F8E0
++:1014B000006A02FC006B0300006C0304006D03086B
++:1014C000006E030C006F031000700314007203869B
++:1014D0000074038C0079038A007C031E000F039BB9
++:1014E000000F039B000F039B000F039B000F039B48
++:1014F000000F039B000F039B000F039B000F039B38
++:10150000000F039B000F039B000F039B000F039B27
++:10151000000F039B000F039B000F039B000F039B17
++:10152000000F039B000F039B000F039B000F039B07
++:10153000000F039B000F039B000F039B000F039BF7
++:00000001FF
+diff --git a/firmware/radeon/RV770_pfp.bin.ihex b/firmware/radeon/RV770_pfp.bin.ihex
+new file mode 100644
+index 0000000..a2d1619
+--- /dev/null
++++ b/firmware/radeon/RV770_pfp.bin.ihex
+@@ -0,0 +1,213 @@
++:100000007C408000A00000007E82800B8000000009
++:10001000DC030000CC800040D04000407C408000E9
++:10002000A00000007E82800BC818000E31980001ED
++:100030007C424000958002527C428000C81C001C1B
++:10004000C037C0007C40C0007C4100007CB4800B05
++:10005000C036000399C00000C81C001C7CB4800C92
++:1000600024D400027D654000CD400043CE80004393
++:10007000CD000043CC800040CE400040CE80004008
++:10008000CCC00040DC3A00009780FFDECD0000408D
++:100090007C40C000800000187C410000D400034078
++:1000A000D4000FC0D4000FA2C818000E8000000CAE
++:1000B00031980002D40003C0D4000FC0D4000FA2B6
++:1000C000C818000E288C000830CC000F3410000136
++:1000D0007D0D00088000000C7D91800BCC800040DD
++:1000E000D04000407C408000A00000007E82800B59
++:1000F000D4000340D4000FC0D4000FA2CC80004035
++:10010000D04000407C408000A00000007E82800B38
++:10011000D40003C0D4000FC0D4000FA2CC80004094
++:10012000D04000407C408000A00000007E82800B18
++:10013000CC4003F980000261CC4003F8C82003F8EA
++:10014000C81C03F9C81803FBC037FFFF7C414000FF
++:10015000CF41A29E662000207DE1C02C7D58C008C2
++:100160007CDCC02068D00020C0360003CC000054E6
++:100170007CB4800C8000006ACC8000407C41800010
++:10018000CD81A29ECC800040CD80004080000068E0
++:10019000CC000054C019FFFFCC800040CD81A29E4E
++:1001A0007C40C0007C4100007C414000CCC1A1FAF1
++:1001B000CD01A1F9CD41A29DCCC00040CD000040B1
++:1001C000CD400040CC4000407C408000A0000000BA
++:1001D0007E82800BCC000054CC8000407C40C0006C
++:1001E0007C4100007C414000CCC1A1FACD01A1F9C5
++:1001F000CD41A29DCCC00040CD000040CD4000408C
++:10020000D04000407C408000A00000007E82800B37
++:100210007C40C00030D00001CCC1A29F95000003FB
++:100220000414000104140002CD4003FBCC80004004
++:1002300080000000CCC000407C40C000CC8000406A
++:10024000CCC1A2A280000000CCC000407C40C00015
++:1002500028D4001FCC800040954000037C41000062
++:10026000CCC000572918001FCCC000409580000367
++:10027000CD000040CD00005880000261CC00007F1E
++:10028000C8200017C83000229A0000060E2800017E
++:10029000C824001E0A640001D4001240CE40004071
++:1002A000C036C0009680000737747900041C000136
++:1002B000CF400040CDC00040CF0003FA7C030000D7
++:1002C000CA0C00107C41000094C000047C41400036
++:1002D000D42002C4CDE000449B00000B7C41800090
++:1002E000CC00004BCDA00049CD200041CD600041A5
++:1002F000CDA0004106200001CE0000568000026122
++:10030000CC00007FC8280020C82C0021CC0000634E
++:100310007EEA4001657400207F53402C269C000239
++:100320007DF5C02069F80020CE80004BCE600049EA
++:10033000CDE00041CFA00041CE600041271C00026B
++:100340007DF5C02069F800207DB24001CF00004B50
++:10035000CE600049CDE00041CFA00041800000BD4B
++:10036000CE600041C8200017C83000229A00000665
++:100370000E280001C824001E0A640001D4001240A7
++:10038000CE400040CA0C00107C41000094C0000B1D
++:10039000C036C0009680000737747900041C000145
++:1003A000CF400040CDC00040CF0003FA7C030000E6
++:1003B000800000B67C414000CC000048800000EF87
++:1003C00000000000C8200017C81C00230E240002F3
++:1003D00099C000157C4180000A200001CE00005623
++:1003E000D4000440CC000040C036C000CA14001342
++:1003F0009640000737747900CF400040CC000040A1
++:10040000C83003FA80000104CF000022CC00002293
++:100410009540015DCC00007FCCA00046800000002C
++:10042000CC20004680000261CC000064C820001788
++:10043000C810001F9600000509100001D4000440F8
++:10044000CD000040CD000022CC800040D0400040D4
++:10045000C80C002594C0FEEBC8100008CD00004079
++:10046000D4000FC080000000D4000FA27C40C00068
++:100470007C410000CCC003FDCD0003FCCCC0004299
++:10048000CD0000422914001F2918001031980007E0
++:100490003B5C00017D76000B998000057D5E400B82
++:1004A000CC00004280000261CC00004D2998000180
++:1004B000292C00089980003D32EC000196000004D0
++:1004C0002930000C80000261CC00004204140010AE
++:1004D000CD40004233300001342800018400015E29
++:1004E000C81400039B40001B0438000C8400015E0C
++:1004F000C81400039B400017043800088400015E04
++:10050000C81400039B400013043800048400015EFB
++:10051000C81400039B400015C80C03FD9A80000915
++:10052000C81003FC9B000118CC00004D04140010FF
++:10053000CCC00042CD00004280000136CD400042D8
++:1005400096C00111CC00004D80000261CC00004E2D
++:100550009AC00003CC00004DCC00004EDF830000A9
++:1005600080000000D80301FF9AC00107CC00004DB5
++:1005700080000261CC00004EC8180003C81C0003B4
++:10058000C82000037D5D40037DA1C0037D5D400C5C
++:100590002A10001F299C001F7D1D000B7D17400B9A
++:1005A000880000007E92800B96400004CC00004E34
++:1005B00080000261CC00004204380008CF80004275
++:1005C000C8080003C80C0003C8100003C8140003C7
++:1005D000C8180003C81C0003C8240003C82800036F
++:1005E00029FC001F2AB0001F7FF3C00B28F0001F5A
++:1005F0007FF3C00B2970001F7FF3C00B7D88800143
++:100600007DCCC0017E5100017E9540017C9080022E
++:100610007CD4C0027CBC800B9AC000037C8F400B52
++:1006200038B400019B4000D8CC00004D9BC000D6E0
++:10063000CC00004EC80C03FDC81003FCCCC0004227
++:100640008000016FCD000042D4000340D4000FC0F1
++:10065000D4000FA2CC800040CC400040CC400040F1
++:10066000CC4000407C40C000CCC00040CCC0000D5D
++:1006700080000000D04000407C40C0007C41000071
++:10068000651400207D4D402C245800027D598020A7
++:100690007C41C000CD80004269980020CD8000429E
++:1006A000CDC00042C023C00005E400027CA0800B46
++:1006B000266400107CA4800CCC800040CDC000409B
++:1006C000CCC0004095C0000ECD00004009DC000108
++:1006D000C828000396800008CE800040C834001D62
++:1006E00097400000C834001D26A80008840002645A
++:1006F000CC2B000099C0FFF709DC0001DC3A0000B8
++:10070000978000047C418000800001A325980002AE
++:10071000A00000007D808000C818001D7C40C00043
++:1007200064D0000895800000C818001DCC1300009C
++:10073000CC800040CCC0004080000000CC40004095
++:10074000C810001F7C40C000CC8000407CD1400C11
++:10075000CD4000400518000180000000CD8000223F
++:100760007C40C0006450002084000264CC00006122
++:100770007CD0C02CC8200017C8D6000099400008C3
++:100780007C438000DF830000CFA0004F8400026420
++:10079000CC00006280000000D040007F8000026139
++:1007A000CC00006284000264CC000061C820001705
++:1007B0007C40C000C036FF00C810000DC0303FFFB5
++:1007C0007CF5400B7D51800B7D81800F9980000866
++:1007D0007CF3800BDF830000CFA0004F8400026415
++:1007E000CC00006280000000D040007F80000261E9
++:1007F000CC000062840002647C40C00028DC000859
++:1008000095C0001930DC00107C41000099C0000444
++:100810006454002080000209C91D00007D15002CD1
++:10082000C91E00007C4200007C4240007C418000E8
++:100830007DE5C00B7DE280079A80000E41AC00058B
++:100840009AC000000AEC000130DC001099C00004DE
++:10085000000000008000020CC91D00008000020C96
++:10086000C91E0000CC800040CCC00040D0400040F9
++:10087000C80C002594C0FDE3C8100008CD0000405E
++:10088000D4000FC080000000D4000FA2D4000340A9
++:10089000D4000FC0D4000FA2CC800040D040004054
++:1008A0007C408000A00000007E82800BD40003C04A
++:1008B000D4000FC0D4000FA2CC800040D040004034
++:1008C0007C408000A00000007E82800B7C40C00045
++:1008D00030D000060D10000699000007C81400155E
++:1008E00099400005CC000052D4000340D4000FC052
++:1008F000D4000FA2CC800040CCC00040800000009B
++:10090000D04000407C40C000CC4D0000DC3A0000EC
++:100910009780FDBC04CC000180000243CC4D000058
++:100920007C40C0007C410000292400183264000192
++:100930009640000FCC8000407C4140007C4180000C
++:100940007C41C000CCC00043CD00004331DC7FFFC0
++:10095000CDC00043CCC00040CD000040CD400040A1
++:10096000CD80004080000000CDC00040CCC00040E1
++:10097000CD00004080000000D0400040800000001A
++:10098000D040007FCC00007F80000000CC00007FC2
++:10099000CC00007F88000000CC00007F0000000039
++:1009A0000000000000000000000000000000000047
++:1009B0000000000000000000000000000000000037
++:1009C0000000000000000000000000000000000027
++:1009D0000000000000000000000000000000000017
++:1009E0000000000000000000000000000000000007
++:1009F00000000000000000000000000000000000F7
++:100A000000000000000000000000000000000000E6
++:100A100000000000000000000000000000000000D6
++:100A200000000000000000000000000000000000C6
++:100A300000000000000000000000000000000000B6
++:100A400000000000000000000000000000000000A6
++:100A50000000000000000000000000000000000096
++:100A60000000000000000000000000000000000086
++:100A70000000000000000000000000000000000076
++:100A80000000000000000000000000000000000066
++:100A90000000000000000000000000000000000056
++:100AA0000000000000000000000000000000000046
++:100AB0000000000000000000000000000000000036
++:100AC0000000000000000000000000000000000026
++:100AD0000000000000000000000000000000000016
++:100AE0000000000000000000000000000000000006
++:100AF00000000000000000000000000000000000F6
++:100B000000000000000000000000000000000000E5
++:100B100000000000000000000000000000000000D5
++:100B200000000000000000000000000000000000C5
++:100B300000000000000000000000000000000000B5
++:100B400000000000000000000000000000000000A5
++:100B50000000000000000000000000000000000095
++:100B60000000000000000000000000000000000085
++:100B70000000000000000000000000000000000075
++:100B80000000000000000000000000000000000065
++:100B90000000000000000000000000000000000055
++:100BA0000000000000000000000000000000000045
++:100BB0000000000000000000000000000000000035
++:100BC0000000000000000000000000000000000025
++:100BD0000000000000000000000000000000000015
++:100BE0000000000000000000000000000000000005
++:100BF00000000000000000000000000000000000F5
++:100C0000000302230004022B000500A000020003E1
++:100C10000006003C0007002700080192000900447C
++:100C2000000A002D0010025F001700F1002201D819
++:100C3000002301E90026004C0027005F0020011B73
++:100C4000002800930029004F002A0084002B006533
++:100C5000002F008E003200D90034023300360075B8
++:100C60000039010B003C01FD003F00A0004102489B
++:100C7000004401950048019E004901C6004A01D088
++:100C8000005502260056022E0060000A0061002A6C
++:100C90000062003000630030006400300065003006
++:100CA0000066003000670030006800370069003FD0
++:100CB000006A0047006B0047006C0047006D00476A
++:100CC000006E0047006F0047007000470073025F2E
++:100CD000007B024100000005000000050000000547
++:100CE00000000005000000050000000500000005F0
++:100CF00000000005000000050000000500000005E0
++:100D000000000005000000050000000500000005CF
++:100D100000000005000000050000000500000005BF
++:100D200000000005000000050000000500000005AF
++:100D3000000000050000000500000005000000059F
++:00000001FF
+diff --git a/include/drm/drmP.h b/include/drm/drmP.h
+index 45b67d9..eeefb63 100644
+--- a/include/drm/drmP.h
++++ b/include/drm/drmP.h
+@@ -88,7 +88,37 @@ struct drm_device;
+ #define DRM_UT_CORE 0x01
+ #define DRM_UT_DRIVER 0x02
+ #define DRM_UT_KMS 0x04
+-#define DRM_UT_MODE 0x08
++/*
++ * Three debug levels are defined.
++ * drm_core, drm_driver, drm_kms
++ * drm_core level can be used in the generic drm code. For example:
++ * drm_ioctl, drm_mm, drm_memory
++ * The macro definiton of DRM_DEBUG is used.
++ * DRM_DEBUG(fmt, args...)
++ * The debug info by using the DRM_DEBUG can be obtained by adding
++ * the boot option of "drm.debug=1".
++ *
++ * drm_driver level can be used in the specific drm driver. It is used
++ * to add the debug info related with the drm driver. For example:
++ * i915_drv, i915_dma, i915_gem, radeon_drv,
++ * The macro definition of DRM_DEBUG_DRIVER can be used.
++ * DRM_DEBUG_DRIVER(fmt, args...)
++ * The debug info by using the DRM_DEBUG_DRIVER can be obtained by
++ * adding the boot option of "drm.debug=0x02"
++ *
++ * drm_kms level can be used in the KMS code related with specific drm driver.
++ * It is used to add the debug info related with KMS mode. For example:
++ * the connector/crtc ,
++ * The macro definition of DRM_DEBUG_KMS can be used.
++ * DRM_DEBUG_KMS(fmt, args...)
++ * The debug info by using the DRM_DEBUG_KMS can be obtained by
++ * adding the boot option of "drm.debug=0x04"
++ *
++ * If we add the boot option of "drm.debug=0x06", we can get the debug info by
++ * using the DRM_DEBUG_KMS and DRM_DEBUG_DRIVER.
++ * If we add the boot option of "drm.debug=0x05", we can get the debug info by
++ * using the DRM_DEBUG_KMS and DRM_DEBUG.
++ */
+
+ extern void drm_ut_debug_printk(unsigned int request_level,
+ const char *prefix,
+@@ -174,19 +204,14 @@ extern void drm_ut_debug_printk(unsigned int request_level,
+ __func__, fmt, ##args); \
+ } while (0)
+
+-#define DRM_DEBUG_DRIVER(prefix, fmt, args...) \
++#define DRM_DEBUG_DRIVER(fmt, args...) \
+ do { \
+- drm_ut_debug_printk(DRM_UT_DRIVER, prefix, \
++ drm_ut_debug_printk(DRM_UT_DRIVER, DRM_NAME, \
+ __func__, fmt, ##args); \
+ } while (0)
+-#define DRM_DEBUG_KMS(prefix, fmt, args...) \
+- do { \
+- drm_ut_debug_printk(DRM_UT_KMS, prefix, \
+- __func__, fmt, ##args); \
+- } while (0)
+-#define DRM_DEBUG_MODE(prefix, fmt, args...) \
++#define DRM_DEBUG_KMS(fmt, args...) \
+ do { \
+- drm_ut_debug_printk(DRM_UT_MODE, prefix, \
++ drm_ut_debug_printk(DRM_UT_KMS, DRM_NAME, \
+ __func__, fmt, ##args); \
+ } while (0)
+ #define DRM_LOG(fmt, args...) \
+@@ -210,9 +235,8 @@ extern void drm_ut_debug_printk(unsigned int request_level,
+ NULL, fmt, ##args); \
+ } while (0)
+ #else
+-#define DRM_DEBUG_DRIVER(prefix, fmt, args...) do { } while (0)
+-#define DRM_DEBUG_KMS(prefix, fmt, args...) do { } while (0)
+-#define DRM_DEBUG_MODE(prefix, fmt, args...) do { } while (0)
++#define DRM_DEBUG_DRIVER(fmt, args...) do { } while (0)
++#define DRM_DEBUG_KMS(fmt, args...) do { } while (0)
+ #define DRM_DEBUG(fmt, arg...) do { } while (0)
+ #define DRM_LOG(fmt, arg...) do { } while (0)
+ #define DRM_LOG_KMS(fmt, args...) do { } while (0)
+@@ -1417,7 +1441,7 @@ drm_gem_object_unreference(struct drm_gem_object *obj)
+
+ int drm_gem_handle_create(struct drm_file *file_priv,
+ struct drm_gem_object *obj,
+- int *handlep);
++ u32 *handlep);
+
+ static inline void
+ drm_gem_object_handle_reference(struct drm_gem_object *obj)
+@@ -1443,7 +1467,7 @@ drm_gem_object_handle_unreference(struct drm_gem_object *obj)
+
+ struct drm_gem_object *drm_gem_object_lookup(struct drm_device *dev,
+ struct drm_file *filp,
+- int handle);
++ u32 handle);
+ int drm_gem_close_ioctl(struct drm_device *dev, void *data,
+ struct drm_file *file_priv);
+ int drm_gem_flink_ioctl(struct drm_device *dev, void *data,
+diff --git a/include/drm/drm_cache.h b/include/drm/drm_cache.h
+new file mode 100644
+index 0000000..7bfb063
+--- /dev/null
++++ b/include/drm/drm_cache.h
+@@ -0,0 +1,38 @@
++/**************************************************************************
++ *
++ * Copyright 2009 Red Hat Inc.
++ * All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining a
++ * copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sub license, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial portions
++ * of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
++ * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
++ * FITNESS FOR A PARTICULAR PURPOSE AND NON-INFRINGEMENT. IN NO EVENT SHALL
++ * THE COPYRIGHT HOLDERS, AUTHORS AND/OR ITS SUPPLIERS BE LIABLE FOR ANY CLAIM,
++ * DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR
++ * OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE
++ * USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ *
++ **************************************************************************/
++/*
++ * Authors:
++ * Dave Airlie <airlied@redhat.com>
++ */
++
++#ifndef _DRM_CACHE_H_
++#define _DRM_CACHE_H_
++
++void drm_clflush_pages(struct page *pages[], unsigned long num_pages);
++
++#endif
+diff --git a/include/drm/drm_crtc.h b/include/drm/drm_crtc.h
+index 7300fb8..b69347b 100644
+--- a/include/drm/drm_crtc.h
++++ b/include/drm/drm_crtc.h
+@@ -259,6 +259,8 @@ struct drm_framebuffer {
+ void *fbdev;
+ u32 pseudo_palette[17];
+ struct list_head filp_head;
++ /* if you are using the helper */
++ void *helper_private;
+ };
+
+ struct drm_property_blob {
+@@ -385,6 +387,7 @@ struct drm_crtc {
+ * @get_modes: get mode list for this connector
+ * @set_property: property for this connector may need update
+ * @destroy: make object go away
++ * @force: notify the driver the connector is forced on
+ *
+ * Each CRTC may have one or more connectors attached to it. The functions
+ * below allow the core DRM code to control connectors, enumerate available modes,
+@@ -399,6 +402,7 @@ struct drm_connector_funcs {
+ int (*set_property)(struct drm_connector *connector, struct drm_property *property,
+ uint64_t val);
+ void (*destroy)(struct drm_connector *connector);
++ void (*force)(struct drm_connector *connector);
+ };
+
+ struct drm_encoder_funcs {
+@@ -427,6 +431,13 @@ struct drm_encoder {
+ void *helper_private;
+ };
+
++enum drm_connector_force {
++ DRM_FORCE_UNSPECIFIED,
++ DRM_FORCE_OFF,
++ DRM_FORCE_ON, /* force on analog part normally */
++ DRM_FORCE_ON_DIGITAL, /* for DVI-I use digital connector */
++};
++
+ /**
+ * drm_connector - central DRM connector control structure
+ * @crtc: CRTC this connector is currently connected to, NULL if none
+@@ -476,9 +487,12 @@ struct drm_connector {
+
+ void *helper_private;
+
++ /* forced on connector */
++ enum drm_connector_force force;
+ uint32_t encoder_ids[DRM_CONNECTOR_MAX_ENCODER];
+ uint32_t force_encoder_id;
+ struct drm_encoder *encoder; /* currently active encoder */
++ void *fb_helper_private;
+ };
+
+ /**
+@@ -572,6 +586,12 @@ struct drm_mode_config {
+ struct drm_property *tv_right_margin_property;
+ struct drm_property *tv_top_margin_property;
+ struct drm_property *tv_bottom_margin_property;
++ struct drm_property *tv_brightness_property;
++ struct drm_property *tv_contrast_property;
++ struct drm_property *tv_flicker_reduction_property;
++ struct drm_property *tv_overscan_property;
++ struct drm_property *tv_saturation_property;
++ struct drm_property *tv_hue_property;
+
+ /* Optional properties */
+ struct drm_property *scaling_mode_property;
+@@ -736,4 +756,12 @@ extern int drm_mode_gamma_get_ioctl(struct drm_device *dev,
+ extern int drm_mode_gamma_set_ioctl(struct drm_device *dev,
+ void *data, struct drm_file *file_priv);
+ extern bool drm_detect_hdmi_monitor(struct edid *edid);
++extern struct drm_display_mode *drm_cvt_mode(struct drm_device *dev,
++ int hdisplay, int vdisplay, int vrefresh,
++ bool reduced, bool interlaced, bool margins);
++extern struct drm_display_mode *drm_gtf_mode(struct drm_device *dev,
++ int hdisplay, int vdisplay, int vrefresh,
++ bool interlaced, int margins);
++extern int drm_add_modes_noedid(struct drm_connector *connector,
++ int hdisplay, int vdisplay);
+ #endif /* __DRM_CRTC_H__ */
+diff --git a/include/drm/drm_crtc_helper.h b/include/drm/drm_crtc_helper.h
+index 6769ff6..ef47dfd 100644
+--- a/include/drm/drm_crtc_helper.h
++++ b/include/drm/drm_crtc_helper.h
+@@ -39,6 +39,7 @@
+
+ #include <linux/fb.h>
+
++#include "drm_fb_helper.h"
+ struct drm_crtc_helper_funcs {
+ /*
+ * Control power levels on the CRTC. If the mode passed in is
+@@ -79,6 +80,8 @@ struct drm_encoder_helper_funcs {
+ /* detect for DAC style encoders */
+ enum drm_connector_status (*detect)(struct drm_encoder *encoder,
+ struct drm_connector *connector);
++ /* disable encoder when not in use - more explicit than dpms off */
++ void (*disable)(struct drm_encoder *encoder);
+ };
+
+ struct drm_connector_helper_funcs {
+@@ -98,6 +101,7 @@ extern bool drm_crtc_helper_set_mode(struct drm_crtc *crtc,
+ int x, int y,
+ struct drm_framebuffer *old_fb);
+ extern bool drm_helper_crtc_in_use(struct drm_crtc *crtc);
++extern bool drm_helper_encoder_in_use(struct drm_encoder *encoder);
+
+ extern void drm_helper_connector_dpms(struct drm_connector *connector, int mode);
+
+@@ -116,10 +120,11 @@ static inline void drm_encoder_helper_add(struct drm_encoder *encoder,
+ encoder->helper_private = (void *)funcs;
+ }
+
+-static inline void drm_connector_helper_add(struct drm_connector *connector,
++static inline int drm_connector_helper_add(struct drm_connector *connector,
+ const struct drm_connector_helper_funcs *funcs)
+ {
+ connector->helper_private = (void *)funcs;
++ return drm_fb_helper_add_connector(connector);
+ }
+
+ extern int drm_helper_resume_force_mode(struct drm_device *dev);
+diff --git a/include/drm/drm_encoder_slave.h b/include/drm/drm_encoder_slave.h
+new file mode 100644
+index 0000000..2f65633
+--- /dev/null
++++ b/include/drm/drm_encoder_slave.h
+@@ -0,0 +1,162 @@
++/*
++ * Copyright (C) 2009 Francisco Jerez.
++ * All Rights Reserved.
++ *
++ * Permission is hereby granted, free of charge, to any person obtaining
++ * a copy of this software and associated documentation files (the
++ * "Software"), to deal in the Software without restriction, including
++ * without limitation the rights to use, copy, modify, merge, publish,
++ * distribute, sublicense, and/or sell copies of the Software, and to
++ * permit persons to whom the Software is furnished to do so, subject to
++ * the following conditions:
++ *
++ * The above copyright notice and this permission notice (including the
++ * next paragraph) shall be included in all copies or substantial
++ * portions of the Software.
++ *
++ * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
++ * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
++ * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT.
++ * IN NO EVENT SHALL THE COPYRIGHT OWNER(S) AND/OR ITS SUPPLIERS BE
++ * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
++ * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
++ * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
++ *
++ */
++
++#ifndef __DRM_ENCODER_SLAVE_H__
++#define __DRM_ENCODER_SLAVE_H__
++
++#include "drmP.h"
++#include "drm_crtc.h"
++
++/**
++ * struct drm_encoder_slave_funcs - Entry points exposed by a slave encoder driver
++ * @set_config: Initialize any encoder-specific modesetting parameters.
++ * The meaning of the @params parameter is implementation
++ * dependent. It will usually be a structure with DVO port
++ * data format settings or timings. It's not required for
++ * the new parameters to take effect until the next mode
++ * is set.
++ *
++ * Most of its members are analogous to the function pointers in
++ * &drm_encoder_helper_funcs and they can optionally be used to
++ * initialize the latter. Connector-like methods (e.g. @get_modes and
++ * @set_property) will typically be wrapped around and only be called
++ * if the encoder is the currently selected one for the connector.
++ */
++struct drm_encoder_slave_funcs {
++ void (*set_config)(struct drm_encoder *encoder,
++ void *params);
++
++ void (*destroy)(struct drm_encoder *encoder);
++ void (*dpms)(struct drm_encoder *encoder, int mode);
++ void (*save)(struct drm_encoder *encoder);
++ void (*restore)(struct drm_encoder *encoder);
++ bool (*mode_fixup)(struct drm_encoder *encoder,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode);
++ int (*mode_valid)(struct drm_encoder *encoder,
++ struct drm_display_mode *mode);
++ void (*mode_set)(struct drm_encoder *encoder,
++ struct drm_display_mode *mode,
++ struct drm_display_mode *adjusted_mode);
++
++ enum drm_connector_status (*detect)(struct drm_encoder *encoder,
++ struct drm_connector *connector);
++ int (*get_modes)(struct drm_encoder *encoder,
++ struct drm_connector *connector);
++ int (*create_resources)(struct drm_encoder *encoder,
++ struct drm_connector *connector);
++ int (*set_property)(struct drm_encoder *encoder,
++ struct drm_connector *connector,
++ struct drm_property *property,
++ uint64_t val);
++
++};
++
++/**
++ * struct drm_encoder_slave - Slave encoder struct
++ * @base: DRM encoder object.
++ * @slave_funcs: Slave encoder callbacks.
++ * @slave_priv: Slave encoder private data.
++ * @bus_priv: Bus specific data.
++ *
++ * A &drm_encoder_slave has two sets of callbacks, @slave_funcs and the
++ * ones in @base. The former are never actually called by the common
++ * CRTC code, it's just a convenience for splitting the encoder
++ * functions in an upper, GPU-specific layer and a (hopefully)
++ * GPU-agnostic lower layer: It's the GPU driver responsibility to
++ * call the slave methods when appropriate.
++ *
++ * drm_i2c_encoder_init() provides a way to get an implementation of
++ * this.
++ */
++struct drm_encoder_slave {
++ struct drm_encoder base;
++
++ struct drm_encoder_slave_funcs *slave_funcs;
++ void *slave_priv;
++ void *bus_priv;
++};
++#define to_encoder_slave(x) container_of((x), struct drm_encoder_slave, base)
++
++int drm_i2c_encoder_init(struct drm_device *dev,
++ struct drm_encoder_slave *encoder,
++ struct i2c_adapter *adap,
++ const struct i2c_board_info *info);
++
++
++/**
++ * struct drm_i2c_encoder_driver
++ *
++ * Describes a device driver for an encoder connected to the GPU
++ * through an I2C bus. In addition to the entry points in @i2c_driver
++ * an @encoder_init function should be provided. It will be called to
++ * give the driver an opportunity to allocate any per-encoder data
++ * structures and to initialize the @slave_funcs and (optionally)
++ * @slave_priv members of @encoder.
++ */
++struct drm_i2c_encoder_driver {
++ struct i2c_driver i2c_driver;
++
++ int (*encoder_init)(struct i2c_client *client,
++ struct drm_device *dev,
++ struct drm_encoder_slave *encoder);
++
++};
++#define to_drm_i2c_encoder_driver(x) container_of((x), \
++ struct drm_i2c_encoder_driver, \
++ i2c_driver)
++
++/**
++ * drm_i2c_encoder_get_client - Get the I2C client corresponding to an encoder
++ */
++static inline struct i2c_client *drm_i2c_encoder_get_client(struct drm_encoder *encoder)
++{
++ return (struct i2c_client *)to_encoder_slave(encoder)->bus_priv;
++}
++
++/**
++ * drm_i2c_encoder_register - Register an I2C encoder driver
++ * @owner: Module containing the driver.
++ * @driver: Driver to be registered.
++ */
++static inline int drm_i2c_encoder_register(struct module *owner,
++ struct drm_i2c_encoder_driver *driver)
++{
++ return i2c_register_driver(owner, &driver->i2c_driver);
++}
++
++/**
++ * drm_i2c_encoder_unregister - Unregister an I2C encoder driver
++ * @driver: Driver to be unregistered.
++ */
++static inline void drm_i2c_encoder_unregister(struct drm_i2c_encoder_driver *driver)
++{
++ i2c_del_driver(&driver->i2c_driver);
++}
++
++void drm_i2c_encoder_destroy(struct drm_encoder *encoder);
++
++#endif
+diff --git a/include/drm/drm_fb_helper.h b/include/drm/drm_fb_helper.h
+new file mode 100644
+index 0000000..4aa5740
+--- /dev/null
++++ b/include/drm/drm_fb_helper.h
+@@ -0,0 +1,106 @@
++/*
++ * Copyright (c) 2006-2009 Red Hat Inc.
++ * Copyright (c) 2006-2008 Intel Corporation
++ * Copyright (c) 2007 Dave Airlie <airlied@linux.ie>
++ *
++ * DRM framebuffer helper functions
++ *
++ * Permission to use, copy, modify, distribute, and sell this software and its
++ * documentation for any purpose is hereby granted without fee, provided that
++ * the above copyright notice appear in all copies and that both that copyright
++ * notice and this permission notice appear in supporting documentation, and
++ * that the name of the copyright holders not be used in advertising or
++ * publicity pertaining to distribution of the software without specific,
++ * written prior permission. The copyright holders make no representations
++ * about the suitability of this software for any purpose. It is provided "as
++ * is" without express or implied warranty.
++ *
++ * THE COPYRIGHT HOLDERS DISCLAIM ALL WARRANTIES WITH REGARD TO THIS SOFTWARE,
++ * INCLUDING ALL IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS, IN NO
++ * EVENT SHALL THE COPYRIGHT HOLDERS BE LIABLE FOR ANY SPECIAL, INDIRECT OR
++ * CONSEQUENTIAL DAMAGES OR ANY DAMAGES WHATSOEVER RESULTING FROM LOSS OF USE,
++ * DATA OR PROFITS, WHETHER IN AN ACTION OF CONTRACT, NEGLIGENCE OR OTHER
++ * TORTIOUS ACTION, ARISING OUT OF OR IN CONNECTION WITH THE USE OR PERFORMANCE
++ * OF THIS SOFTWARE.
++ *
++ * Authors:
++ * Dave Airlie <airlied@linux.ie>
++ * Jesse Barnes <jesse.barnes@intel.com>
++ */
++#ifndef DRM_FB_HELPER_H
++#define DRM_FB_HELPER_H
++
++struct drm_fb_helper_crtc {
++ uint32_t crtc_id;
++ struct drm_mode_set mode_set;
++};
++
++
++struct drm_fb_helper_funcs {
++ void (*gamma_set)(struct drm_crtc *crtc, u16 red, u16 green,
++ u16 blue, int regno);
++};
++
++/* mode specified on the command line */
++struct drm_fb_helper_cmdline_mode {
++ bool specified;
++ bool refresh_specified;
++ bool bpp_specified;
++ int xres, yres;
++ int bpp;
++ int refresh;
++ bool rb;
++ bool interlace;
++ bool cvt;
++ bool margins;
++};
++
++struct drm_fb_helper_connector {
++ struct drm_fb_helper_cmdline_mode cmdline_mode;
++};
++
++struct drm_fb_helper {
++ struct drm_framebuffer *fb;
++ struct drm_device *dev;
++ struct drm_display_mode *mode;
++ int crtc_count;
++ struct drm_fb_helper_crtc *crtc_info;
++ struct drm_fb_helper_funcs *funcs;
++ int conn_limit;
++ struct list_head kernel_fb_list;
++};
++
++int drm_fb_helper_single_fb_probe(struct drm_device *dev,
++ int (*fb_create)(struct drm_device *dev,
++ uint32_t fb_width,
++ uint32_t fb_height,
++ uint32_t surface_width,
++ uint32_t surface_height,
++ uint32_t surface_depth,
++ uint32_t surface_bpp,
++ struct drm_framebuffer **fb_ptr));
++int drm_fb_helper_init_crtc_count(struct drm_fb_helper *helper, int crtc_count,
++ int max_conn);
++void drm_fb_helper_free(struct drm_fb_helper *helper);
++int drm_fb_helper_blank(int blank, struct fb_info *info);
++int drm_fb_helper_pan_display(struct fb_var_screeninfo *var,
++ struct fb_info *info);
++int drm_fb_helper_set_par(struct fb_info *info);
++int drm_fb_helper_check_var(struct fb_var_screeninfo *var,
++ struct fb_info *info);
++int drm_fb_helper_setcolreg(unsigned regno,
++ unsigned red,
++ unsigned green,
++ unsigned blue,
++ unsigned transp,
++ struct fb_info *info);
++
++void drm_fb_helper_restore(void);
++void drm_fb_helper_fill_var(struct fb_info *info, struct drm_framebuffer *fb,
++ uint32_t fb_width, uint32_t fb_height);
++void drm_fb_helper_fill_fix(struct fb_info *info, uint32_t pitch);
++
++int drm_fb_helper_add_connector(struct drm_connector *connector);
++int drm_fb_helper_parse_command_line(struct drm_device *dev);
++
++#endif
+diff --git a/include/drm/drm_mm.h b/include/drm/drm_mm.h
+index f833207..62329f9 100644
+--- a/include/drm/drm_mm.h
++++ b/include/drm/drm_mm.h
+@@ -37,6 +37,9 @@
+ * Generic range manager structs
+ */
+ #include <linux/list.h>
++#ifdef CONFIG_DEBUG_FS
++#include <linux/seq_file.h>
++#endif
+
+ struct drm_mm_node {
+ struct list_head fl_entry;
+@@ -96,4 +99,8 @@ static inline struct drm_mm *drm_get_mm(struct drm_mm_node *block)
+ return block->mm;
+ }
+
++#ifdef CONFIG_DEBUG_FS
++int drm_mm_dump_table(struct seq_file *m, struct drm_mm *mm);
++#endif
++
+ #endif
+diff --git a/include/drm/drm_mode.h b/include/drm/drm_mode.h
+index ae304cc..1f90841 100644
+--- a/include/drm/drm_mode.h
++++ b/include/drm/drm_mode.h
+@@ -68,10 +68,11 @@
+ #define DRM_MODE_DPMS_OFF 3
+
+ /* Scaling mode options */
+-#define DRM_MODE_SCALE_NON_GPU 0
+-#define DRM_MODE_SCALE_FULLSCREEN 1
+-#define DRM_MODE_SCALE_NO_SCALE 2
+-#define DRM_MODE_SCALE_ASPECT 3
++#define DRM_MODE_SCALE_NONE 0 /* Unmodified timing (display or
++ software can still scale) */
++#define DRM_MODE_SCALE_FULLSCREEN 1 /* Full screen, ignore aspect */
++#define DRM_MODE_SCALE_CENTER 2 /* Centered, no scaling */
++#define DRM_MODE_SCALE_ASPECT 3 /* Full screen, preserve aspect */
+
+ /* Dithering mode options */
+ #define DRM_MODE_DITHERING_OFF 0
+@@ -141,6 +142,7 @@ struct drm_mode_get_encoder {
+ #define DRM_MODE_SUBCONNECTOR_Composite 5
+ #define DRM_MODE_SUBCONNECTOR_SVIDEO 6
+ #define DRM_MODE_SUBCONNECTOR_Component 8
++#define DRM_MODE_SUBCONNECTOR_SCART 9
+
+ #define DRM_MODE_CONNECTOR_Unknown 0
+ #define DRM_MODE_CONNECTOR_VGA 1
+@@ -155,6 +157,7 @@ struct drm_mode_get_encoder {
+ #define DRM_MODE_CONNECTOR_DisplayPort 10
+ #define DRM_MODE_CONNECTOR_HDMIA 11
+ #define DRM_MODE_CONNECTOR_HDMIB 12
++#define DRM_MODE_CONNECTOR_TV 13
+
+ struct drm_mode_get_connector {
+
+diff --git a/include/drm/drm_sysfs.h b/include/drm/drm_sysfs.h
+new file mode 100644
+index 0000000..1d8e033
+--- /dev/null
++++ b/include/drm/drm_sysfs.h
+@@ -0,0 +1,12 @@
++#ifndef _DRM_SYSFS_H_
++#define _DRM_SYSFS_H_
++
++/**
++ * This minimalistic include file is intended for users (read TTM) that
++ * don't want to include the full drmP.h file.
++ */
++
++extern int drm_class_device_register(struct device *dev);
++extern void drm_class_device_unregister(struct device *dev);
++
++#endif
+diff --git a/include/drm/radeon_drm.h b/include/drm/radeon_drm.h
+index 2ba61e1..3b9932a 100644
+--- a/include/drm/radeon_drm.h
++++ b/include/drm/radeon_drm.h
+@@ -802,11 +802,12 @@ struct drm_radeon_gem_create {
+ uint32_t flags;
+ };
+
+-#define RADEON_TILING_MACRO 0x1
+-#define RADEON_TILING_MICRO 0x2
+-#define RADEON_TILING_SWAP 0x4
+-#define RADEON_TILING_SURFACE 0x8 /* this object requires a surface
+- * when mapped - i.e. front buffer */
++#define RADEON_TILING_MACRO 0x1
++#define RADEON_TILING_MICRO 0x2
++#define RADEON_TILING_SWAP_16BIT 0x4
++#define RADEON_TILING_SWAP_32BIT 0x8
++#define RADEON_TILING_SURFACE 0x10 /* this object requires a surface
++ * when mapped - i.e. front buffer */
+
+ struct drm_radeon_gem_set_tiling {
+ uint32_t handle;
+@@ -899,6 +900,7 @@ struct drm_radeon_cs {
+ #define RADEON_INFO_DEVICE_ID 0x00
+ #define RADEON_INFO_NUM_GB_PIPES 0x01
+ #define RADEON_INFO_NUM_Z_PIPES 0x02
++#define RADEON_INFO_ACCEL_WORKING 0x03
+
+ struct drm_radeon_info {
+ uint32_t request;
+diff --git a/include/drm/ttm/ttm_bo_api.h b/include/drm/ttm/ttm_bo_api.h
+index cd22ab4..4911461 100644
+--- a/include/drm/ttm/ttm_bo_api.h
++++ b/include/drm/ttm/ttm_bo_api.h
+@@ -155,6 +155,7 @@ struct ttm_buffer_object {
+ * Members constant at init.
+ */
+
++ struct ttm_bo_global *glob;
+ struct ttm_bo_device *bdev;
+ unsigned long buffer_start;
+ enum ttm_bo_type type;
+@@ -245,14 +246,15 @@ struct ttm_buffer_object {
+ * premapped region.
+ */
+
++#define TTM_BO_MAP_IOMEM_MASK 0x80
+ struct ttm_bo_kmap_obj {
+ void *virtual;
+ struct page *page;
+ enum {
+- ttm_bo_map_iomap,
+- ttm_bo_map_vmap,
+- ttm_bo_map_kmap,
+- ttm_bo_map_premapped,
++ ttm_bo_map_iomap = 1 | TTM_BO_MAP_IOMEM_MASK,
++ ttm_bo_map_vmap = 2,
++ ttm_bo_map_kmap = 3,
++ ttm_bo_map_premapped = 4 | TTM_BO_MAP_IOMEM_MASK,
+ } bo_kmap_type;
+ };
+
+@@ -522,8 +524,7 @@ extern int ttm_bo_evict_mm(struct ttm_bo_device *bdev, unsigned mem_type);
+ static inline void *ttm_kmap_obj_virtual(struct ttm_bo_kmap_obj *map,
+ bool *is_iomem)
+ {
+- *is_iomem = (map->bo_kmap_type == ttm_bo_map_iomap ||
+- map->bo_kmap_type == ttm_bo_map_premapped);
++ *is_iomem = !!(map->bo_kmap_type & TTM_BO_MAP_IOMEM_MASK);
+ return map->virtual;
+ }
+
+diff --git a/include/drm/ttm/ttm_bo_driver.h b/include/drm/ttm/ttm_bo_driver.h
+index a68829d..e8cd6d2 100644
+--- a/include/drm/ttm/ttm_bo_driver.h
++++ b/include/drm/ttm/ttm_bo_driver.h
+@@ -32,6 +32,7 @@
+
+ #include "ttm/ttm_bo_api.h"
+ #include "ttm/ttm_memory.h"
++#include "ttm/ttm_module.h"
+ #include "drm_mm.h"
+ #include "linux/workqueue.h"
+ #include "linux/fs.h"
+@@ -161,7 +162,7 @@ struct ttm_tt {
+ long last_lomem_page;
+ uint32_t page_flags;
+ unsigned long num_pages;
+- struct ttm_bo_device *bdev;
++ struct ttm_bo_global *glob;
+ struct ttm_backend *be;
+ struct task_struct *tsk;
+ unsigned long start;
+@@ -364,24 +365,73 @@ struct ttm_bo_driver {
+ void (*fault_reserve_notify)(struct ttm_buffer_object *bo);
+ };
+
+-#define TTM_NUM_MEM_TYPES 8
++/**
++ * struct ttm_bo_global_ref - Argument to initialize a struct ttm_bo_global.
++ */
++
++struct ttm_bo_global_ref {
++ struct ttm_global_reference ref;
++ struct ttm_mem_global *mem_glob;
++};
+
+-#define TTM_BO_PRIV_FLAG_MOVING 0 /* Buffer object is moving and needs
+- idling before CPU mapping */
+-#define TTM_BO_PRIV_FLAG_MAX 1
+ /**
+- * struct ttm_bo_device - Buffer object driver device-specific data.
++ * struct ttm_bo_global - Buffer object driver global data.
+ *
+ * @mem_glob: Pointer to a struct ttm_mem_global object for accounting.
+- * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver.
+- * @count: Current number of buffer object.
+- * @pages: Current number of pinned pages.
+ * @dummy_read_page: Pointer to a dummy page used for mapping requests
+ * of unpopulated pages.
+- * @shrink: A shrink callback object used for buffre object swap.
++ * @shrink: A shrink callback object used for buffer object swap.
+ * @ttm_bo_extra_size: Extra size (sizeof(struct ttm_buffer_object) excluded)
+ * used by a buffer object. This is excluding page arrays and backing pages.
+ * @ttm_bo_size: This is @ttm_bo_extra_size + sizeof(struct ttm_buffer_object).
++ * @device_list_mutex: Mutex protecting the device list.
++ * This mutex is held while traversing the device list for pm options.
++ * @lru_lock: Spinlock protecting the bo subsystem lru lists.
++ * @device_list: List of buffer object devices.
++ * @swap_lru: Lru list of buffer objects used for swapping.
++ */
++
++struct ttm_bo_global {
++
++ /**
++ * Constant after init.
++ */
++
++ struct kobject kobj;
++ struct ttm_mem_global *mem_glob;
++ struct page *dummy_read_page;
++ struct ttm_mem_shrink shrink;
++ size_t ttm_bo_extra_size;
++ size_t ttm_bo_size;
++ struct mutex device_list_mutex;
++ spinlock_t lru_lock;
++
++ /**
++ * Protected by device_list_mutex.
++ */
++ struct list_head device_list;
++
++ /**
++ * Protected by the lru_lock.
++ */
++ struct list_head swap_lru;
++
++ /**
++ * Internal protection.
++ */
++ atomic_t bo_count;
++};
++
++
++#define TTM_NUM_MEM_TYPES 8
++
++#define TTM_BO_PRIV_FLAG_MOVING 0 /* Buffer object is moving and needs
++ idling before CPU mapping */
++#define TTM_BO_PRIV_FLAG_MAX 1
++/**
++ * struct ttm_bo_device - Buffer object driver device-specific data.
++ *
++ * @driver: Pointer to a struct ttm_bo_driver struct setup by the driver.
+ * @man: An array of mem_type_managers.
+ * @addr_space_mm: Range manager for the device address space.
+ * lru_lock: Spinlock that protects the buffer+device lru lists and
+@@ -399,32 +449,21 @@ struct ttm_bo_device {
+ /*
+ * Constant after bo device init / atomic.
+ */
+-
+- struct ttm_mem_global *mem_glob;
++ struct list_head device_list;
++ struct ttm_bo_global *glob;
+ struct ttm_bo_driver *driver;
+- struct page *dummy_read_page;
+- struct ttm_mem_shrink shrink;
+-
+- size_t ttm_bo_extra_size;
+- size_t ttm_bo_size;
+-
+ rwlock_t vm_lock;
++ struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES];
+ /*
+ * Protected by the vm lock.
+ */
+- struct ttm_mem_type_manager man[TTM_NUM_MEM_TYPES];
+ struct rb_root addr_space_rb;
+ struct drm_mm addr_space_mm;
+
+ /*
+- * Might want to change this to one lock per manager.
+- */
+- spinlock_t lru_lock;
+- /*
+- * Protected by the lru lock.
++ * Protected by the global:lru lock.
+ */
+ struct list_head ddestroy;
+- struct list_head swap_lru;
+
+ /*
+ * Protected by load / firstopen / lastclose /unload sync.
+@@ -640,6 +679,9 @@ extern int ttm_bo_pci_offset(struct ttm_bo_device *bdev,
+ unsigned long *bus_offset,
+ unsigned long *bus_size);
+
++extern void ttm_bo_global_release(struct ttm_global_reference *ref);
++extern int ttm_bo_global_init(struct ttm_global_reference *ref);
++
+ extern int ttm_bo_device_release(struct ttm_bo_device *bdev);
+
+ /**
+@@ -657,7 +699,7 @@ extern int ttm_bo_device_release(struct ttm_bo_device *bdev);
+ * !0: Failure.
+ */
+ extern int ttm_bo_device_init(struct ttm_bo_device *bdev,
+- struct ttm_mem_global *mem_glob,
++ struct ttm_bo_global *glob,
+ struct ttm_bo_driver *driver,
+ uint64_t file_page_offset, bool need_dma32);
+
+diff --git a/include/drm/ttm/ttm_memory.h b/include/drm/ttm/ttm_memory.h
+index d8b8f04..6983a7c 100644
+--- a/include/drm/ttm/ttm_memory.h
++++ b/include/drm/ttm/ttm_memory.h
+@@ -32,6 +32,7 @@
+ #include <linux/spinlock.h>
+ #include <linux/wait.h>
+ #include <linux/errno.h>
++#include <linux/kobject.h>
+
+ /**
+ * struct ttm_mem_shrink - callback to shrink TTM memory usage.
+@@ -60,34 +61,33 @@ struct ttm_mem_shrink {
+ * @queue: Wait queue for processes suspended waiting for memory.
+ * @lock: Lock to protect the @shrink - and the memory accounting members,
+ * that is, essentially the whole structure with some exceptions.
+- * @emer_memory: Lowmem memory limit available for root.
+- * @max_memory: Lowmem memory limit available for non-root.
+- * @swap_limit: Lowmem memory limit where the shrink workqueue kicks in.
+- * @used_memory: Currently used lowmem memory.
+- * @used_total_memory: Currently used total (lowmem + highmem) memory.
+- * @total_memory_swap_limit: Total memory limit where the shrink workqueue
+- * kicks in.
+- * @max_total_memory: Total memory available to non-root processes.
+- * @emer_total_memory: Total memory available to root processes.
++ * @zones: Array of pointers to accounting zones.
++ * @num_zones: Number of populated entries in the @zones array.
++ * @zone_kernel: Pointer to the kernel zone.
++ * @zone_highmem: Pointer to the highmem zone if there is one.
++ * @zone_dma32: Pointer to the dma32 zone if there is one.
+ *
+ * Note that this structure is not per device. It should be global for all
+ * graphics devices.
+ */
+
++#define TTM_MEM_MAX_ZONES 2
++struct ttm_mem_zone;
+ struct ttm_mem_global {
++ struct kobject kobj;
+ struct ttm_mem_shrink *shrink;
+ struct workqueue_struct *swap_queue;
+ struct work_struct work;
+ wait_queue_head_t queue;
+ spinlock_t lock;
+- uint64_t emer_memory;
+- uint64_t max_memory;
+- uint64_t swap_limit;
+- uint64_t used_memory;
+- uint64_t used_total_memory;
+- uint64_t total_memory_swap_limit;
+- uint64_t max_total_memory;
+- uint64_t emer_total_memory;
++ struct ttm_mem_zone *zones[TTM_MEM_MAX_ZONES];
++ unsigned int num_zones;
++ struct ttm_mem_zone *zone_kernel;
++#ifdef CONFIG_HIGHMEM
++ struct ttm_mem_zone *zone_highmem;
++#else
++ struct ttm_mem_zone *zone_dma32;
++#endif
+ };
+
+ /**
+@@ -146,8 +146,13 @@ static inline void ttm_mem_unregister_shrink(struct ttm_mem_global *glob,
+ extern int ttm_mem_global_init(struct ttm_mem_global *glob);
+ extern void ttm_mem_global_release(struct ttm_mem_global *glob);
+ extern int ttm_mem_global_alloc(struct ttm_mem_global *glob, uint64_t memory,
+- bool no_wait, bool interruptible, bool himem);
++ bool no_wait, bool interruptible);
+ extern void ttm_mem_global_free(struct ttm_mem_global *glob,
+- uint64_t amount, bool himem);
++ uint64_t amount);
++extern int ttm_mem_global_alloc_page(struct ttm_mem_global *glob,
++ struct page *page,
++ bool no_wait, bool interruptible);
++extern void ttm_mem_global_free_page(struct ttm_mem_global *glob,
++ struct page *page);
+ extern size_t ttm_round_pot(size_t size);
+ #endif
+diff --git a/include/drm/ttm/ttm_module.h b/include/drm/ttm/ttm_module.h
+index d1d4338..cf416ae 100644
+--- a/include/drm/ttm/ttm_module.h
++++ b/include/drm/ttm/ttm_module.h
+@@ -32,6 +32,7 @@
+ #define _TTM_MODULE_H_
+
+ #include <linux/kernel.h>
++struct kobject;
+
+ #define TTM_PFX "[TTM] "
+
+@@ -54,5 +55,6 @@ extern void ttm_global_init(void);
+ extern void ttm_global_release(void);
+ extern int ttm_global_item_ref(struct ttm_global_reference *ref);
+ extern void ttm_global_item_unref(struct ttm_global_reference *ref);
++extern struct kobject *ttm_get_kobj(void);
+
+ #endif /* _TTM_MODULE_H_ */
diff --git a/sys-kernel/thinkpad-sources/files/2.6.28/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch b/sys-kernel/thinkpad-sources/files/2.6.31/linux-phc-0.3.2-2.6.31.patch
index 4a4db8b..e48f4a0 100644
--- a/sys-kernel/thinkpad-sources/files/2.6.28/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch
+++ b/sys-kernel/thinkpad-sources/files/2.6.31/linux-phc-0.3.2-2.6.31.patch
@@ -1,14 +1,15 @@
-diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c linux-source-2.6.26-rc9-custom8/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
---- linux-source-2.6.26-rc9_orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2008-07-09 16:59:37.000000000 +0200
-+++ linux-source-2.6.26-rc9-custom8/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2008-07-09 12:41:37.000000000 +0200
+diff --new-file -a --unified=5 --recursive linux-source-2.6.31_orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c linux-source-2.6.31_phc/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c
+--- linux-source-2.6.30_orig/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2009-07-14 09:15:09.864904000 +0200
++++ linux-source-2.6.30_phc/arch/x86/kernel/cpu/cpufreq/acpi-cpufreq.c 2009-07-18 09:31:50.687906676 +0200
+
@@ -23,10 +23,14 @@
* 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA.
*
* ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
*/
-+/* This file has been patched with Linux PHC: http://phc.athousandnights.de
-+ * Patch version: linux-phc-0.3.1-kernel-vanilla-2.6.26.patch
++/* This file has been patched with Linux PHC: www.linux-phc.org
++ * Patch version: linux-phc-0.3.2
+ */
+
#include <linux/kernel.h>
@@ -16,7 +17,7 @@ diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x8
#include <linux/init.h>
#include <linux/smp.h>
#include <linux/sched.h>
-@@ -56,17 +60,22 @@
+@@ -59,16 +63,21 @@
SYSTEM_IO_CAPABLE,
};
@@ -25,12 +26,11 @@ diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x8
+#define INTEL_MSR_VID_MASK (0x00ff)
+#define INTEL_MSR_FID_MASK (0xff00)
+#define INTEL_MSR_FID_SHIFT (0x8)
-+#define PHC_VERSION_STRING "0.3.2:1"
++#define PHC_VERSION_STRING "0.3.2:2"
struct acpi_cpufreq_data {
struct acpi_processor_performance *acpi_data;
struct cpufreq_frequency_table *freq_table;
- unsigned int max_freq;
unsigned int resume;
unsigned int cpu_feature;
+ acpi_integer *original_controls;
@@ -38,8 +38,8 @@ diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x8
static DEFINE_PER_CPU(struct acpi_cpufreq_data *, drv_data);
- /* acpi_perf_data is a pointer to percpu data. */
-@@ -102,17 +111,18 @@
+ struct acpi_msr_data {
+@@ -108,17 +117,18 @@
}
static unsigned extract_msr(u32 msr, struct acpi_cpufreq_data *data)
@@ -52,7 +52,7 @@ diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x8
+ fid = msr & INTEL_MSR_FID_MASK;
perf = data->acpi_data;
- for (i=0; data->freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
+ for (i = 0; data->freq_table[i].frequency != CPUFREQ_TABLE_END; i++) {
- if (msr == perf->states[data->freq_table[i].index].status)
+ if (fid == (perf->states[data->freq_table[i].index].status & INTEL_MSR_FID_MASK))
return data->freq_table[i].frequency;
@@ -60,7 +60,7 @@ diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x8
return data->freq_table[0].frequency;
}
-@@ -740,10 +750,12 @@
+@@ -776,10 +786,12 @@
if (data) {
cpufreq_frequency_table_put_attr(policy->cpu);
per_cpu(drv_data, policy->cpu) = NULL;
@@ -73,15 +73,12 @@ diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x8
return 0;
}
-@@ -757,12 +769,477 @@
+@@ -793,12 +805,474 @@
data->resume = 1;
return 0;
}
-+
-+
-+
+/* sysfs interface to change operating points voltages */
+
+static unsigned int extract_fid_from_control(unsigned int control)
@@ -540,8 +537,8 @@ diff --new-file -a --unified=5 --recursive linux-source-2.6.26-rc9_orig/arch/x8
+
static struct freq_attr *acpi_cpufreq_attr[] = {
- &cpufreq_freq_attr_scaling_available_freqs,
-+ &cpufreq_freq_attr_phc_version,
+ &cpufreq_freq_attr_scaling_available_freqs,
++ &cpufreq_freq_attr_phc_version,
+ &cpufreq_freq_attr_vids,
+ &cpufreq_freq_attr_default_vids,
+ &cpufreq_freq_attr_fids,
diff --git a/sys-kernel/thinkpad-sources/files/2.6.28/01-mac80211_2.6.28-rc4-wl_frag+ack_v2.patch b/sys-kernel/thinkpad-sources/files/2.6.31/mac80211.compat08082009.wl_frag+ack_v1.patch
index cd33cf2..8b7add3 100644
--- a/sys-kernel/thinkpad-sources/files/2.6.28/01-mac80211_2.6.28-rc4-wl_frag+ack_v2.patch
+++ b/sys-kernel/thinkpad-sources/files/2.6.31/mac80211.compat08082009.wl_frag+ack_v1.patch
@@ -2,7 +2,7 @@ diff --git a/net/mac80211/tx.c b/net/mac80211/tx.c
index 0855cac..221bed6 100644
--- a/net/mac80211/tx.c
+++ b/net/mac80211/tx.c
-@@ -611,11 +611,19 @@ ieee80211_tx_h_sequence(struct ieee80211_tx_data *tx)
+@@ -677,11 +677,19 @@ int tid;
/*
* Packet injection may want to control the sequence
@@ -15,9 +15,9 @@ index 0855cac..221bed6 100644
+ * FIXME This may break hostapd and some other injectors.
+ * This should be done using a radiotap flag.
*/
-- if (unlikely(!info->control.vif))
-+ if (unlikely(info->flags & IEEE80211_TX_CTL_INJECTED) &&
-+ !(tx->sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES)) {
+- if (unlikely(info->control.vif->type == NL80211_IFTYPE_MONITOR))
++ if (unlikely((info->flags & IEEE80211_TX_CTL_INJECTED) &&
++ !(tx->sdata->u.mntr_flags & MONITOR_FLAG_COOK_FRAMES))) {
+ if (!ieee80211_has_morefrags(hdr->frame_control))
+ info->flags |= IEEE80211_TX_CTL_NO_ACK;
return TX_CONTINUE;
diff --git a/sys-kernel/thinkpad-sources/files/2.6.31/thinkpad-acpi-0.23-20090920-fix1.patch.gz b/sys-kernel/thinkpad-sources/files/2.6.31/thinkpad-acpi-0.23-20090920-fix1.patch.gz
new file mode 100644
index 0000000..433f8fa
--- /dev/null
+++ b/sys-kernel/thinkpad-sources/files/2.6.31/thinkpad-acpi-0.23-20090920-fix1.patch.gz
Binary files differ
diff --git a/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.27 b/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.27
deleted file mode 100644
index dfe476a..0000000
--- a/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.27
+++ /dev/null
@@ -1,2393 +0,0 @@
-#
-# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.27-thinkpad
-# Mon Dec 1 13:16:10 2008
-#
-# CONFIG_64BIT is not set
-CONFIG_X86_32=y
-# CONFIG_X86_64 is not set
-CONFIG_X86=y
-CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
-# CONFIG_GENERIC_LOCKBREAK is not set
-CONFIG_GENERIC_TIME=y
-CONFIG_GENERIC_CMOS_UPDATE=y
-CONFIG_CLOCKSOURCE_WATCHDOG=y
-CONFIG_GENERIC_CLOCKEVENTS=y
-CONFIG_GENERIC_CLOCKEVENTS_BROADCAST=y
-CONFIG_LOCKDEP_SUPPORT=y
-CONFIG_STACKTRACE_SUPPORT=y
-CONFIG_HAVE_LATENCYTOP_SUPPORT=y
-CONFIG_FAST_CMPXCHG_LOCAL=y
-CONFIG_MMU=y
-CONFIG_ZONE_DMA=y
-CONFIG_GENERIC_ISA_DMA=y
-CONFIG_GENERIC_IOMAP=y
-CONFIG_GENERIC_BUG=y
-CONFIG_GENERIC_HWEIGHT=y
-# CONFIG_GENERIC_GPIO is not set
-CONFIG_ARCH_MAY_HAVE_PC_FDC=y
-# CONFIG_RWSEM_GENERIC_SPINLOCK is not set
-CONFIG_RWSEM_XCHGADD_ALGORITHM=y
-# CONFIG_ARCH_HAS_ILOG2_U32 is not set
-# CONFIG_ARCH_HAS_ILOG2_U64 is not set
-CONFIG_ARCH_HAS_CPU_IDLE_WAIT=y
-CONFIG_GENERIC_CALIBRATE_DELAY=y
-# CONFIG_GENERIC_TIME_VSYSCALL is not set
-CONFIG_ARCH_HAS_CPU_RELAX=y
-CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
-CONFIG_HAVE_SETUP_PER_CPU_AREA=y
-# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
-CONFIG_ARCH_HIBERNATION_POSSIBLE=y
-CONFIG_ARCH_SUSPEND_POSSIBLE=y
-# CONFIG_ZONE_DMA32 is not set
-CONFIG_ARCH_POPULATES_NODE_MAP=y
-# CONFIG_AUDIT_ARCH is not set
-CONFIG_ARCH_SUPPORTS_AOUT=y
-CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
-CONFIG_GENERIC_HARDIRQS=y
-CONFIG_GENERIC_IRQ_PROBE=y
-CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
-CONFIG_X86_32_SMP=y
-CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
-CONFIG_X86_TRAMPOLINE=y
-CONFIG_KTIME_SCALAR=y
-CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
-
-#
-# General setup
-#
-CONFIG_EXPERIMENTAL=y
-CONFIG_LOCK_KERNEL=y
-CONFIG_INIT_ENV_ARG_LIMIT=32
-CONFIG_LOCALVERSION=""
-CONFIG_LOCALVERSION_AUTO=y
-CONFIG_SWAP=y
-CONFIG_SYSVIPC=y
-CONFIG_SYSVIPC_SYSCTL=y
-CONFIG_POSIX_MQUEUE=y
-CONFIG_BSD_PROCESS_ACCT=y
-CONFIG_BSD_PROCESS_ACCT_V3=y
-# CONFIG_TASKSTATS is not set
-CONFIG_AUDIT=y
-CONFIG_AUDITSYSCALL=y
-CONFIG_AUDIT_TREE=y
-# CONFIG_IKCONFIG is not set
-CONFIG_LOG_BUF_SHIFT=15
-# CONFIG_CGROUPS is not set
-CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
-CONFIG_GROUP_SCHED=y
-CONFIG_FAIR_GROUP_SCHED=y
-# CONFIG_RT_GROUP_SCHED is not set
-CONFIG_USER_SCHED=y
-# CONFIG_CGROUP_SCHED is not set
-CONFIG_SYSFS_DEPRECATED=y
-CONFIG_SYSFS_DEPRECATED_V2=y
-# CONFIG_RELAY is not set
-CONFIG_NAMESPACES=y
-# CONFIG_UTS_NS is not set
-# CONFIG_IPC_NS is not set
-# CONFIG_USER_NS is not set
-# CONFIG_PID_NS is not set
-# CONFIG_BLK_DEV_INITRD is not set
-# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
-CONFIG_SYSCTL=y
-# CONFIG_EMBEDDED is not set
-CONFIG_UID16=y
-CONFIG_SYSCTL_SYSCALL=y
-CONFIG_KALLSYMS=y
-# CONFIG_KALLSYMS_ALL is not set
-# CONFIG_KALLSYMS_EXTRA_PASS is not set
-CONFIG_HOTPLUG=y
-CONFIG_PRINTK=y
-CONFIG_BUG=y
-CONFIG_ELF_CORE=y
-CONFIG_PCSPKR_PLATFORM=y
-# CONFIG_COMPAT_BRK is not set
-CONFIG_BASE_FULL=y
-CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
-CONFIG_EPOLL=y
-CONFIG_SIGNALFD=y
-CONFIG_TIMERFD=y
-CONFIG_EVENTFD=y
-CONFIG_SHMEM=y
-CONFIG_VM_EVENT_COUNTERS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
-# CONFIG_SLOB is not set
-# CONFIG_PROFILING is not set
-# CONFIG_MARKERS is not set
-CONFIG_HAVE_OPROFILE=y
-# CONFIG_KPROBES is not set
-CONFIG_HAVE_EFFICIENT_UNALIGNED_ACCESS=y
-CONFIG_HAVE_IOREMAP_PROT=y
-CONFIG_HAVE_KPROBES=y
-CONFIG_HAVE_KRETPROBES=y
-# CONFIG_HAVE_ARCH_TRACEHOOK is not set
-# CONFIG_HAVE_DMA_ATTRS is not set
-CONFIG_USE_GENERIC_SMP_HELPERS=y
-# CONFIG_HAVE_CLK is not set
-CONFIG_PROC_PAGE_MONITOR=y
-CONFIG_HAVE_GENERIC_DMA_COHERENT=y
-CONFIG_SLABINFO=y
-CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
-CONFIG_BASE_SMALL=0
-CONFIG_MODULES=y
-# CONFIG_MODULE_FORCE_LOAD is not set
-CONFIG_MODULE_UNLOAD=y
-CONFIG_MODULE_FORCE_UNLOAD=y
-# CONFIG_MODVERSIONS is not set
-# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
-CONFIG_STOP_MACHINE=y
-CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-CONFIG_LSF=y
-# CONFIG_BLK_DEV_BSG is not set
-CONFIG_BLK_DEV_INTEGRITY=y
-
-#
-# IO Schedulers
-#
-CONFIG_IOSCHED_NOOP=y
-CONFIG_IOSCHED_AS=y
-CONFIG_IOSCHED_DEADLINE=y
-CONFIG_IOSCHED_CFQ=y
-# CONFIG_DEFAULT_AS is not set
-# CONFIG_DEFAULT_DEADLINE is not set
-CONFIG_DEFAULT_CFQ=y
-# CONFIG_DEFAULT_NOOP is not set
-CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_CLASSIC_RCU=y
-
-#
-# Processor type and features
-#
-CONFIG_TICK_ONESHOT=y
-CONFIG_NO_HZ=y
-CONFIG_HIGH_RES_TIMERS=y
-CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
-CONFIG_SMP=y
-CONFIG_X86_FIND_SMP_CONFIG=y
-CONFIG_X86_MPPARSE=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_VSMP is not set
-# CONFIG_X86_RDC321X is not set
-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
-# CONFIG_PARAVIRT_GUEST is not set
-# CONFIG_MEMTEST is not set
-# CONFIG_M386 is not set
-# CONFIG_M486 is not set
-# CONFIG_M586 is not set
-# CONFIG_M586TSC is not set
-# CONFIG_M586MMX is not set
-# CONFIG_M686 is not set
-# CONFIG_MPENTIUMII is not set
-# CONFIG_MPENTIUMIII is not set
-# CONFIG_MPENTIUMM is not set
-CONFIG_MPENTIUM4=y
-# CONFIG_MK6 is not set
-# CONFIG_MK7 is not set
-# CONFIG_MK8 is not set
-# CONFIG_MCRUSOE is not set
-# CONFIG_MEFFICEON is not set
-# CONFIG_MWINCHIPC6 is not set
-# CONFIG_MWINCHIP2 is not set
-# CONFIG_MWINCHIP3D is not set
-# CONFIG_MGEODEGX1 is not set
-# CONFIG_MGEODE_LX is not set
-# CONFIG_MCYRIXIII is not set
-# CONFIG_MVIAC3_2 is not set
-# CONFIG_MVIAC7 is not set
-# CONFIG_MPSC is not set
-# CONFIG_MCORE2 is not set
-# CONFIG_GENERIC_CPU is not set
-# CONFIG_X86_GENERIC is not set
-CONFIG_X86_CPU=y
-CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=7
-CONFIG_X86_XADD=y
-CONFIG_X86_WP_WORKS_OK=y
-CONFIG_X86_INVLPG=y
-CONFIG_X86_BSWAP=y
-CONFIG_X86_POPAD_OK=y
-CONFIG_X86_INTEL_USERCOPY=y
-CONFIG_X86_USE_PPRO_CHECKSUM=y
-CONFIG_X86_TSC=y
-CONFIG_X86_CMOV=y
-CONFIG_X86_MINIMUM_CPU_FAMILY=4
-CONFIG_X86_DEBUGCTLMSR=y
-CONFIG_HPET_TIMER=y
-CONFIG_HPET_EMULATE_RTC=y
-CONFIG_DMI=y
-# CONFIG_IOMMU_HELPER is not set
-CONFIG_NR_CPUS=2
-# CONFIG_SCHED_SMT is not set
-CONFIG_SCHED_MC=y
-# CONFIG_PREEMPT_NONE is not set
-# CONFIG_PREEMPT_VOLUNTARY is not set
-CONFIG_PREEMPT=y
-# CONFIG_PREEMPT_RCU is not set
-CONFIG_X86_LOCAL_APIC=y
-CONFIG_X86_IO_APIC=y
-CONFIG_X86_MCE=y
-# CONFIG_X86_MCE_NONFATAL is not set
-# CONFIG_X86_MCE_P4THERMAL is not set
-CONFIG_VM86=y
-# CONFIG_TOSHIBA is not set
-# CONFIG_I8K is not set
-# CONFIG_X86_REBOOTFIXUPS is not set
-# CONFIG_MICROCODE is not set
-# CONFIG_X86_MSR is not set
-# CONFIG_X86_CPUID is not set
-# CONFIG_NOHIGHMEM is not set
-CONFIG_HIGHMEM4G=y
-# CONFIG_HIGHMEM64G is not set
-CONFIG_PAGE_OFFSET=0xC0000000
-CONFIG_HIGHMEM=y
-CONFIG_ARCH_FLATMEM_ENABLE=y
-CONFIG_ARCH_SPARSEMEM_ENABLE=y
-CONFIG_ARCH_SELECT_MEMORY_MODEL=y
-CONFIG_SELECT_MEMORY_MODEL=y
-CONFIG_FLATMEM_MANUAL=y
-# CONFIG_DISCONTIGMEM_MANUAL is not set
-# CONFIG_SPARSEMEM_MANUAL is not set
-CONFIG_FLATMEM=y
-CONFIG_FLAT_NODE_MEM_MAP=y
-CONFIG_SPARSEMEM_STATIC=y
-# CONFIG_SPARSEMEM_VMEMMAP_ENABLE is not set
-CONFIG_PAGEFLAGS_EXTENDED=y
-CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
-CONFIG_ZONE_DMA_FLAG=1
-CONFIG_BOUNCE=y
-CONFIG_VIRT_TO_BUS=y
-CONFIG_HIGHPTE=y
-# CONFIG_X86_RESERVE_LOW_64K is not set
-# CONFIG_MATH_EMULATION is not set
-CONFIG_MTRR=y
-CONFIG_MTRR_SANITIZER=y
-CONFIG_MTRR_SANITIZER_ENABLE_DEFAULT=0
-CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
-CONFIG_X86_PAT=y
-# CONFIG_EFI is not set
-# CONFIG_IRQBALANCE is not set
-CONFIG_SECCOMP=y
-# CONFIG_HZ_100 is not set
-# CONFIG_HZ_250 is not set
-CONFIG_HZ_300=y
-# CONFIG_HZ_1000 is not set
-CONFIG_HZ=300
-CONFIG_SCHED_HRTICK=y
-# CONFIG_KEXEC is not set
-# CONFIG_CRASH_DUMP is not set
-CONFIG_PHYSICAL_START=0x100000
-# CONFIG_RELOCATABLE is not set
-CONFIG_PHYSICAL_ALIGN=0x100000
-CONFIG_HOTPLUG_CPU=y
-# CONFIG_COMPAT_VDSO is not set
-CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y
-
-#
-# Power management options
-#
-CONFIG_PM=y
-# CONFIG_PM_DEBUG is not set
-CONFIG_PM_SLEEP_SMP=y
-CONFIG_PM_SLEEP=y
-CONFIG_SUSPEND=y
-CONFIG_SUSPEND_FREEZER=y
-CONFIG_HIBERNATION=y
-CONFIG_PM_STD_PARTITION="/dev/sda5"
-CONFIG_TOI_CORE=y
-
-#
-# Image Storage (you need at least one allocator)
-#
-CONFIG_TOI_FILE=y
-CONFIG_TOI_SWAP=y
-
-#
-# General Options
-#
-CONFIG_TOI_DEFAULT_PRE_HIBERNATE=""
-CONFIG_TOI_DEFAULT_POST_HIBERNATE=""
-CONFIG_TOI_CRYPTO=y
-CONFIG_TOI_USERUI=y
-CONFIG_TOI_USERUI_DEFAULT_PATH="/usr/local/sbin/tuxonice_fbsplash"
-# CONFIG_TOI_KEEP_IMAGE is not set
-CONFIG_TOI_REPLACE_SWSUSP=y
-# CONFIG_TOI_IGNORE_LATE_INITCALL is not set
-CONFIG_TOI_CHECKSUM=y
-CONFIG_TOI_DEFAULT_WAIT=25
-CONFIG_TOI_DEFAULT_EXTRA_PAGES_ALLOWANCE=15300
-# CONFIG_TOI_PAGEFLAGS_TEST is not set
-CONFIG_TOI=y
-CONFIG_ACPI=y
-CONFIG_ACPI_SLEEP=y
-CONFIG_ACPI_PROCFS=y
-CONFIG_ACPI_PROCFS_POWER=y
-CONFIG_ACPI_SYSFS_POWER=y
-CONFIG_ACPI_PROC_EVENT=y
-CONFIG_ACPI_AC=y
-CONFIG_ACPI_BATTERY=y
-CONFIG_ACPI_BUTTON=y
-CONFIG_ACPI_VIDEO=y
-CONFIG_ACPI_FAN=y
-CONFIG_ACPI_DOCK=y
-CONFIG_ACPI_BAY=m
-CONFIG_ACPI_PROCESSOR=y
-CONFIG_ACPI_HOTPLUG_CPU=y
-CONFIG_ACPI_THERMAL=y
-CONFIG_ACPI_WMI=y
-# CONFIG_ACPI_ASUS is not set
-# CONFIG_ACPI_TOSHIBA is not set
-# CONFIG_ACPI_CUSTOM_DSDT is not set
-CONFIG_ACPI_BLACKLIST_YEAR=0
-# CONFIG_ACPI_DEBUG is not set
-CONFIG_ACPI_EC=y
-# CONFIG_ACPI_PCI_SLOT is not set
-CONFIG_ACPI_POWER=y
-CONFIG_ACPI_SYSTEM=y
-CONFIG_X86_PM_TIMER=y
-CONFIG_ACPI_CONTAINER=y
-# CONFIG_ACPI_SBS is not set
-# CONFIG_APM is not set
-
-#
-# CPU Frequency scaling
-#
-CONFIG_CPU_FREQ=y
-CONFIG_CPU_FREQ_TABLE=y
-# CONFIG_CPU_FREQ_DEBUG is not set
-CONFIG_CPU_FREQ_STAT=y
-CONFIG_CPU_FREQ_STAT_DETAILS=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_PERFORMANCE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_POWERSAVE is not set
-# CONFIG_CPU_FREQ_DEFAULT_GOV_USERSPACE is not set
-CONFIG_CPU_FREQ_DEFAULT_GOV_ONDEMAND=y
-# CONFIG_CPU_FREQ_DEFAULT_GOV_CONSERVATIVE is not set
-CONFIG_CPU_FREQ_GOV_PERFORMANCE=y
-CONFIG_CPU_FREQ_GOV_POWERSAVE=y
-CONFIG_CPU_FREQ_GOV_USERSPACE=y
-CONFIG_CPU_FREQ_GOV_ONDEMAND=y
-CONFIG_CPU_FREQ_GOV_CONSERVATIVE=y
-
-#
-# CPUFreq processor drivers
-#
-CONFIG_X86_ACPI_CPUFREQ=y
-# CONFIG_X86_POWERNOW_K6 is not set
-# CONFIG_X86_POWERNOW_K7 is not set
-# CONFIG_X86_POWERNOW_K8 is not set
-# CONFIG_X86_GX_SUSPMOD is not set
-# CONFIG_X86_SPEEDSTEP_CENTRINO is not set
-CONFIG_X86_SPEEDSTEP_ICH=y
-CONFIG_X86_SPEEDSTEP_SMI=y
-# CONFIG_X86_P4_CLOCKMOD is not set
-# CONFIG_X86_CPUFREQ_NFORCE2 is not set
-# CONFIG_X86_LONGRUN is not set
-# CONFIG_X86_LONGHAUL is not set
-# CONFIG_X86_E_POWERSAVER is not set
-
-#
-# shared options
-#
-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
-CONFIG_X86_SPEEDSTEP_LIB=y
-# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
-CONFIG_CPU_IDLE=y
-CONFIG_CPU_IDLE_GOV_LADDER=y
-CONFIG_CPU_IDLE_GOV_MENU=y
-
-#
-# Bus options (PCI etc.)
-#
-CONFIG_PCI=y
-# CONFIG_PCI_GOBIOS is not set
-# CONFIG_PCI_GOMMCONFIG is not set
-# CONFIG_PCI_GODIRECT is not set
-# CONFIG_PCI_GOOLPC is not set
-CONFIG_PCI_GOANY=y
-CONFIG_PCI_BIOS=y
-CONFIG_PCI_DIRECT=y
-CONFIG_PCI_MMCONFIG=y
-CONFIG_PCI_DOMAINS=y
-CONFIG_PCIEPORTBUS=y
-CONFIG_HOTPLUG_PCI_PCIE=y
-CONFIG_PCIEAER=y
-CONFIG_PCIEASPM=y
-# CONFIG_PCIEASPM_DEBUG is not set
-CONFIG_ARCH_SUPPORTS_MSI=y
-CONFIG_PCI_MSI=y
-CONFIG_PCI_LEGACY=y
-# CONFIG_PCI_DEBUG is not set
-CONFIG_HT_IRQ=y
-CONFIG_ISA_DMA_API=y
-CONFIG_ISA=y
-# CONFIG_EISA is not set
-# CONFIG_MCA is not set
-# CONFIG_SCx200 is not set
-# CONFIG_OLPC is not set
-CONFIG_PCCARD=y
-# CONFIG_PCMCIA_DEBUG is not set
-CONFIG_PCMCIA=y
-CONFIG_PCMCIA_LOAD_CIS=y
-CONFIG_PCMCIA_IOCTL=y
-CONFIG_CARDBUS=y
-
-#
-# PC-card bridges
-#
-CONFIG_YENTA=y
-CONFIG_YENTA_O2=y
-CONFIG_YENTA_RICOH=y
-CONFIG_YENTA_TI=y
-CONFIG_YENTA_ENE_TUNE=y
-CONFIG_YENTA_TOSHIBA=y
-# CONFIG_PD6729 is not set
-# CONFIG_I82092 is not set
-# CONFIG_I82365 is not set
-# CONFIG_TCIC is not set
-CONFIG_PCMCIA_PROBE=y
-CONFIG_PCCARD_NONSTATIC=y
-CONFIG_HOTPLUG_PCI=y
-# CONFIG_HOTPLUG_PCI_FAKE is not set
-# CONFIG_HOTPLUG_PCI_COMPAQ is not set
-CONFIG_HOTPLUG_PCI_IBM=y
-CONFIG_HOTPLUG_PCI_ACPI=y
-# CONFIG_HOTPLUG_PCI_ACPI_IBM is not set
-# CONFIG_HOTPLUG_PCI_CPCI is not set
-# CONFIG_HOTPLUG_PCI_SHPC is not set
-
-#
-# Executable file formats / Emulations
-#
-CONFIG_BINFMT_ELF=y
-CONFIG_BINFMT_AOUT=y
-CONFIG_BINFMT_MISC=y
-CONFIG_NET=y
-
-#
-# Networking options
-#
-CONFIG_PACKET=y
-CONFIG_PACKET_MMAP=y
-CONFIG_UNIX=y
-CONFIG_XFRM=y
-CONFIG_XFRM_USER=m
-# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
-# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_NET_KEY is not set
-CONFIG_INET=y
-CONFIG_IP_MULTICAST=y
-CONFIG_IP_ADVANCED_ROUTER=y
-CONFIG_ASK_IP_FIB_HASH=y
-# CONFIG_IP_FIB_TRIE is not set
-CONFIG_IP_FIB_HASH=y
-# CONFIG_IP_MULTIPLE_TABLES is not set
-# CONFIG_IP_ROUTE_MULTIPATH is not set
-# CONFIG_IP_ROUTE_VERBOSE is not set
-# CONFIG_IP_PNP is not set
-CONFIG_NET_IPIP=y
-# CONFIG_NET_IPGRE is not set
-# CONFIG_IP_MROUTE is not set
-# CONFIG_ARPD is not set
-CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
-CONFIG_INET_TUNNEL=y
-CONFIG_INET_XFRM_MODE_TRANSPORT=m
-CONFIG_INET_XFRM_MODE_TUNNEL=m
-CONFIG_INET_XFRM_MODE_BEET=m
-# CONFIG_INET_LRO is not set
-CONFIG_INET_DIAG=y
-CONFIG_INET_TCP_DIAG=y
-# CONFIG_TCP_CONG_ADVANCED is not set
-CONFIG_TCP_CONG_CUBIC=y
-CONFIG_DEFAULT_TCP_CONG="cubic"
-CONFIG_TCP_MD5SIG=y
-# CONFIG_IP_VS is not set
-CONFIG_IPV6=y
-# CONFIG_IPV6_PRIVACY is not set
-# CONFIG_IPV6_ROUTER_PREF is not set
-# CONFIG_IPV6_OPTIMISTIC_DAD is not set
-# CONFIG_INET6_AH is not set
-# CONFIG_INET6_ESP is not set
-# CONFIG_INET6_IPCOMP is not set
-CONFIG_IPV6_MIP6=y
-# CONFIG_INET6_XFRM_TUNNEL is not set
-# CONFIG_INET6_TUNNEL is not set
-CONFIG_INET6_XFRM_MODE_TRANSPORT=m
-CONFIG_INET6_XFRM_MODE_TUNNEL=m
-CONFIG_INET6_XFRM_MODE_BEET=m
-CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION=m
-CONFIG_IPV6_SIT=m
-CONFIG_IPV6_NDISC_NODETYPE=y
-# CONFIG_IPV6_TUNNEL is not set
-# CONFIG_IPV6_MULTIPLE_TABLES is not set
-# CONFIG_IPV6_MROUTE is not set
-# CONFIG_NETWORK_SECMARK is not set
-CONFIG_NETFILTER=y
-# CONFIG_NETFILTER_DEBUG is not set
-CONFIG_NETFILTER_ADVANCED=y
-
-#
-# Core Netfilter Configuration
-#
-CONFIG_NETFILTER_NETLINK=y
-CONFIG_NETFILTER_NETLINK_QUEUE=y
-CONFIG_NETFILTER_NETLINK_LOG=y
-CONFIG_NF_CONNTRACK=m
-CONFIG_NF_CT_ACCT=y
-CONFIG_NF_CONNTRACK_MARK=y
-CONFIG_NF_CONNTRACK_EVENTS=y
-# CONFIG_NF_CT_PROTO_DCCP is not set
-CONFIG_NF_CT_PROTO_GRE=m
-CONFIG_NF_CT_PROTO_SCTP=m
-# CONFIG_NF_CT_PROTO_UDPLITE is not set
-# CONFIG_NF_CONNTRACK_AMANDA is not set
-CONFIG_NF_CONNTRACK_FTP=m
-CONFIG_NF_CONNTRACK_H323=m
-CONFIG_NF_CONNTRACK_IRC=m
-CONFIG_NF_CONNTRACK_NETBIOS_NS=m
-CONFIG_NF_CONNTRACK_PPTP=m
-# CONFIG_NF_CONNTRACK_SANE is not set
-CONFIG_NF_CONNTRACK_SIP=m
-CONFIG_NF_CONNTRACK_TFTP=m
-CONFIG_NF_CT_NETLINK=m
-CONFIG_NETFILTER_XTABLES=y
-CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
-CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
-CONFIG_NETFILTER_XT_TARGET_DSCP=m
-CONFIG_NETFILTER_XT_TARGET_MARK=y
-CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
-CONFIG_NETFILTER_XT_TARGET_NFLOG=m
-CONFIG_NETFILTER_XT_TARGET_NOTRACK=m
-CONFIG_NETFILTER_XT_TARGET_RATEEST=m
-CONFIG_NETFILTER_XT_TARGET_TRACE=m
-CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
-CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
-CONFIG_NETFILTER_XT_MATCH_COMMENT=y
-CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
-CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
-CONFIG_NETFILTER_XT_MATCH_CONNMARK=m
-CONFIG_NETFILTER_XT_MATCH_CONNTRACK=m
-CONFIG_NETFILTER_XT_MATCH_DCCP=y
-CONFIG_NETFILTER_XT_MATCH_DSCP=m
-# CONFIG_NETFILTER_XT_MATCH_ESP is not set
-CONFIG_NETFILTER_XT_MATCH_HELPER=m
-CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
-CONFIG_NETFILTER_XT_MATCH_LENGTH=y
-CONFIG_NETFILTER_XT_MATCH_LIMIT=y
-CONFIG_NETFILTER_XT_MATCH_MAC=y
-CONFIG_NETFILTER_XT_MATCH_MARK=y
-CONFIG_NETFILTER_XT_MATCH_OWNER=m
-CONFIG_NETFILTER_XT_MATCH_POLICY=m
-# CONFIG_NETFILTER_XT_MATCH_MULTIPORT is not set
-CONFIG_NETFILTER_XT_MATCH_PKTTYPE=y
-CONFIG_NETFILTER_XT_MATCH_QUOTA=m
-CONFIG_NETFILTER_XT_MATCH_RATEEST=m
-CONFIG_NETFILTER_XT_MATCH_REALM=y
-CONFIG_NETFILTER_XT_MATCH_SCTP=y
-CONFIG_NETFILTER_XT_MATCH_STATE=m
-CONFIG_NETFILTER_XT_MATCH_STATISTIC=m
-CONFIG_NETFILTER_XT_MATCH_STRING=y
-CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
-# CONFIG_NETFILTER_XT_MATCH_TIME is not set
-CONFIG_NETFILTER_XT_MATCH_U32=m
-CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
-
-#
-# IP: Netfilter Configuration
-#
-CONFIG_NF_CONNTRACK_IPV4=m
-# CONFIG_NF_CONNTRACK_PROC_COMPAT is not set
-CONFIG_IP_NF_QUEUE=y
-CONFIG_IP_NF_IPTABLES=y
-CONFIG_IP_NF_MATCH_RECENT=y
-CONFIG_IP_NF_MATCH_ECN=y
-# CONFIG_IP_NF_MATCH_AH is not set
-CONFIG_IP_NF_MATCH_TTL=y
-CONFIG_IP_NF_MATCH_ADDRTYPE=y
-CONFIG_IP_NF_FILTER=y
-CONFIG_IP_NF_TARGET_REJECT=y
-CONFIG_IP_NF_TARGET_LOG=y
-CONFIG_IP_NF_TARGET_ULOG=y
-CONFIG_NF_NAT=m
-CONFIG_NF_NAT_NEEDED=y
-CONFIG_IP_NF_TARGET_MASQUERADE=m
-CONFIG_IP_NF_TARGET_REDIRECT=m
-CONFIG_IP_NF_TARGET_NETMAP=m
-CONFIG_NF_NAT_SNMP_BASIC=m
-CONFIG_NF_NAT_PROTO_GRE=m
-CONFIG_NF_NAT_PROTO_SCTP=m
-CONFIG_NF_NAT_FTP=m
-CONFIG_NF_NAT_IRC=m
-CONFIG_NF_NAT_TFTP=m
-# CONFIG_NF_NAT_AMANDA is not set
-CONFIG_NF_NAT_PPTP=m
-CONFIG_NF_NAT_H323=m
-CONFIG_NF_NAT_SIP=m
-CONFIG_IP_NF_MANGLE=y
-CONFIG_IP_NF_TARGET_ECN=y
-CONFIG_IP_NF_TARGET_TTL=y
-CONFIG_IP_NF_TARGET_CLUSTERIP=m
-CONFIG_IP_NF_RAW=y
-CONFIG_IP_NF_ARPTABLES=y
-CONFIG_IP_NF_ARPFILTER=y
-CONFIG_IP_NF_ARP_MANGLE=y
-
-#
-# IPv6: Netfilter Configuration
-#
-CONFIG_NF_CONNTRACK_IPV6=m
-CONFIG_IP6_NF_QUEUE=y
-CONFIG_IP6_NF_IPTABLES=y
-CONFIG_IP6_NF_MATCH_RT=y
-CONFIG_IP6_NF_MATCH_OPTS=y
-CONFIG_IP6_NF_MATCH_FRAG=y
-CONFIG_IP6_NF_MATCH_HL=y
-CONFIG_IP6_NF_MATCH_IPV6HEADER=y
-# CONFIG_IP6_NF_MATCH_AH is not set
-CONFIG_IP6_NF_MATCH_MH=m
-CONFIG_IP6_NF_MATCH_EUI64=y
-CONFIG_IP6_NF_FILTER=y
-CONFIG_IP6_NF_TARGET_LOG=y
-CONFIG_IP6_NF_TARGET_REJECT=y
-CONFIG_IP6_NF_MANGLE=y
-CONFIG_IP6_NF_TARGET_HL=y
-CONFIG_IP6_NF_RAW=y
-# CONFIG_IP_DCCP is not set
-# CONFIG_IP_SCTP is not set
-# CONFIG_TIPC is not set
-# CONFIG_ATM is not set
-# CONFIG_BRIDGE is not set
-# CONFIG_VLAN_8021Q is not set
-# CONFIG_DECNET is not set
-# CONFIG_LLC2 is not set
-# CONFIG_IPX is not set
-# CONFIG_ATALK is not set
-# CONFIG_X25 is not set
-# CONFIG_LAPB is not set
-# CONFIG_ECONET is not set
-# CONFIG_WAN_ROUTER is not set
-CONFIG_NET_SCHED=y
-
-#
-# Queueing/Scheduling
-#
-# CONFIG_NET_SCH_CBQ is not set
-# CONFIG_NET_SCH_HTB is not set
-# CONFIG_NET_SCH_HFSC is not set
-# CONFIG_NET_SCH_PRIO is not set
-# CONFIG_NET_SCH_RED is not set
-# CONFIG_NET_SCH_SFQ is not set
-# CONFIG_NET_SCH_TEQL is not set
-# CONFIG_NET_SCH_TBF is not set
-# CONFIG_NET_SCH_GRED is not set
-# CONFIG_NET_SCH_DSMARK is not set
-# CONFIG_NET_SCH_NETEM is not set
-
-#
-# Classification
-#
-# CONFIG_NET_CLS_BASIC is not set
-# CONFIG_NET_CLS_TCINDEX is not set
-# CONFIG_NET_CLS_ROUTE4 is not set
-CONFIG_NET_CLS_ROUTE=y
-# CONFIG_NET_CLS_FW is not set
-# CONFIG_NET_CLS_U32 is not set
-# CONFIG_NET_CLS_RSVP is not set
-# CONFIG_NET_CLS_RSVP6 is not set
-# CONFIG_NET_CLS_FLOW is not set
-# CONFIG_NET_EMATCH is not set
-# CONFIG_NET_CLS_ACT is not set
-CONFIG_NET_SCH_FIFO=y
-
-#
-# Network testing
-#
-# CONFIG_NET_PKTGEN is not set
-# CONFIG_HAMRADIO is not set
-# CONFIG_CAN is not set
-# CONFIG_IRDA is not set
-CONFIG_BT=m
-CONFIG_BT_L2CAP=m
-CONFIG_BT_SCO=m
-CONFIG_BT_RFCOMM=m
-CONFIG_BT_RFCOMM_TTY=y
-# CONFIG_BT_BNEP is not set
-CONFIG_BT_HIDP=m
-
-#
-# Bluetooth device drivers
-#
-CONFIG_BT_HCIBTUSB=m
-# CONFIG_BT_HCIUART is not set
-# CONFIG_BT_HCIBCM203X is not set
-# CONFIG_BT_HCIBPA10X is not set
-# CONFIG_BT_HCIBFUSB is not set
-# CONFIG_BT_HCIDTL1 is not set
-# CONFIG_BT_HCIBT3C is not set
-# CONFIG_BT_HCIBLUECARD is not set
-# CONFIG_BT_HCIBTUART is not set
-# CONFIG_BT_HCIVHCI is not set
-# CONFIG_AF_RXRPC is not set
-
-#
-# Wireless
-#
-CONFIG_CFG80211=m
-CONFIG_NL80211=y
-CONFIG_WIRELESS_EXT=y
-CONFIG_WIRELESS_EXT_SYSFS=y
-CONFIG_MAC80211=m
-
-#
-# Rate control algorithm selection
-#
-CONFIG_MAC80211_RC_PID=y
-CONFIG_MAC80211_RC_DEFAULT_PID=y
-CONFIG_MAC80211_RC_DEFAULT="pid"
-CONFIG_MAC80211_MESH=y
-CONFIG_MAC80211_LEDS=y
-# CONFIG_MAC80211_DEBUG_MENU is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
-CONFIG_RFKILL=y
-CONFIG_RFKILL_INPUT=y
-CONFIG_RFKILL_LEDS=y
-# CONFIG_NET_9P is not set
-
-#
-# Device Drivers
-#
-
-#
-# Generic Driver Options
-#
-CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug"
-CONFIG_STANDALONE=y
-CONFIG_PREVENT_FIRMWARE_BUILD=y
-CONFIG_FW_LOADER=y
-CONFIG_FIRMWARE_IN_KERNEL=y
-CONFIG_EXTRA_FIRMWARE=""
-# CONFIG_DEBUG_DRIVER is not set
-# CONFIG_DEBUG_DEVRES is not set
-# CONFIG_SYS_HYPERVISOR is not set
-# CONFIG_CONNECTOR is not set
-# CONFIG_MTD is not set
-CONFIG_PARPORT=y
-CONFIG_PARPORT_PC=y
-# CONFIG_PARPORT_SERIAL is not set
-# CONFIG_PARPORT_PC_FIFO is not set
-# CONFIG_PARPORT_PC_SUPERIO is not set
-# CONFIG_PARPORT_PC_PCMCIA is not set
-# CONFIG_PARPORT_GSC is not set
-# CONFIG_PARPORT_AX88796 is not set
-# CONFIG_PARPORT_1284 is not set
-CONFIG_PNP=y
-# CONFIG_PNP_DEBUG is not set
-
-#
-# Protocols
-#
-# CONFIG_ISAPNP is not set
-# CONFIG_PNPBIOS is not set
-CONFIG_PNPACPI=y
-CONFIG_BLK_DEV=y
-# CONFIG_BLK_DEV_FD is not set
-# CONFIG_BLK_DEV_XD is not set
-# CONFIG_PARIDE is not set
-# CONFIG_BLK_CPQ_DA is not set
-# CONFIG_BLK_CPQ_CISS_DA is not set
-# CONFIG_BLK_DEV_DAC960 is not set
-# CONFIG_BLK_DEV_UMEM is not set
-# CONFIG_BLK_DEV_COW_COMMON is not set
-CONFIG_BLK_DEV_LOOP=y
-CONFIG_BLK_DEV_CRYPTOLOOP=y
-# CONFIG_BLK_DEV_NBD is not set
-# CONFIG_BLK_DEV_SX8 is not set
-# CONFIG_BLK_DEV_UB is not set
-# CONFIG_BLK_DEV_RAM is not set
-# CONFIG_CDROM_PKTCDVD is not set
-# CONFIG_ATA_OVER_ETH is not set
-# CONFIG_BLK_DEV_HD is not set
-CONFIG_MISC_DEVICES=y
-# CONFIG_IBM_ASM is not set
-# CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
-# CONFIG_SGI_IOC4 is not set
-# CONFIG_TIFM_CORE is not set
-# CONFIG_ACER_WMI is not set
-# CONFIG_ASUS_LAPTOP is not set
-# CONFIG_FUJITSU_LAPTOP is not set
-# CONFIG_TC1100_WMI is not set
-# CONFIG_HP_WMI is not set
-# CONFIG_MSI_LAPTOP is not set
-# CONFIG_COMPAL_LAPTOP is not set
-# CONFIG_SONY_LAPTOP is not set
-CONFIG_THINKPAD_ACPI=m
-# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
-# CONFIG_THINKPAD_ACPI_DEBUG is not set
-# CONFIG_THINKPAD_ACPI_BAY is not set
-# CONFIG_THINKPAD_ACPI_VIDEO is not set
-CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_INTEL_MENLOW=m
-# CONFIG_EEEPC_LAPTOP is not set
-# CONFIG_ENCLOSURE_SERVICES is not set
-# CONFIG_HP_ILO is not set
-CONFIG_HAVE_IDE=y
-# CONFIG_IDE is not set
-
-#
-# SCSI device support
-#
-# CONFIG_RAID_ATTRS is not set
-CONFIG_SCSI=y
-CONFIG_SCSI_DMA=y
-# CONFIG_SCSI_TGT is not set
-# CONFIG_SCSI_NETLINK is not set
-CONFIG_SCSI_PROC_FS=y
-
-#
-# SCSI support type (disk, tape, CD-ROM)
-#
-CONFIG_BLK_DEV_SD=y
-# CONFIG_CHR_DEV_ST is not set
-# CONFIG_CHR_DEV_OSST is not set
-CONFIG_BLK_DEV_SR=y
-CONFIG_BLK_DEV_SR_VENDOR=y
-CONFIG_CHR_DEV_SG=y
-# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
-# CONFIG_SCSI_MULTI_LUN is not set
-# CONFIG_SCSI_CONSTANTS is not set
-# CONFIG_SCSI_LOGGING is not set
-# CONFIG_SCSI_SCAN_ASYNC is not set
-CONFIG_SCSI_WAIT_SCAN=m
-
-#
-# SCSI Transports
-#
-# CONFIG_SCSI_SPI_ATTRS is not set
-# CONFIG_SCSI_FC_ATTRS is not set
-# CONFIG_SCSI_ISCSI_ATTRS is not set
-# CONFIG_SCSI_SAS_LIBSAS is not set
-# CONFIG_SCSI_SRP_ATTRS is not set
-# CONFIG_SCSI_LOWLEVEL is not set
-# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
-# CONFIG_SCSI_DH is not set
-CONFIG_ATA=y
-# CONFIG_ATA_NONSTANDARD is not set
-CONFIG_ATA_ACPI=y
-# CONFIG_SATA_PMP is not set
-CONFIG_SATA_AHCI=y
-# CONFIG_SATA_SIL24 is not set
-CONFIG_ATA_SFF=y
-# CONFIG_SATA_SVW is not set
-CONFIG_ATA_PIIX=y
-# CONFIG_SATA_MV is not set
-# CONFIG_SATA_NV is not set
-# CONFIG_PDC_ADMA is not set
-# CONFIG_SATA_QSTOR is not set
-# CONFIG_SATA_PROMISE is not set
-# CONFIG_SATA_SX4 is not set
-# CONFIG_SATA_SIL is not set
-# CONFIG_SATA_SIS is not set
-# CONFIG_SATA_ULI is not set
-# CONFIG_SATA_VIA is not set
-# CONFIG_SATA_VITESSE is not set
-# CONFIG_SATA_INIC162X is not set
-CONFIG_PATA_ACPI=y
-# CONFIG_PATA_ALI is not set
-# CONFIG_PATA_AMD is not set
-# CONFIG_PATA_ARTOP is not set
-# CONFIG_PATA_ATIIXP is not set
-# CONFIG_PATA_CMD640_PCI is not set
-# CONFIG_PATA_CMD64X is not set
-# CONFIG_PATA_CS5520 is not set
-# CONFIG_PATA_CS5530 is not set
-# CONFIG_PATA_CS5535 is not set
-# CONFIG_PATA_CS5536 is not set
-# CONFIG_PATA_CYPRESS is not set
-# CONFIG_PATA_EFAR is not set
-# CONFIG_ATA_GENERIC is not set
-# CONFIG_PATA_HPT366 is not set
-# CONFIG_PATA_HPT37X is not set
-# CONFIG_PATA_HPT3X2N is not set
-# CONFIG_PATA_HPT3X3 is not set
-# CONFIG_PATA_IT821X is not set
-# CONFIG_PATA_IT8213 is not set
-# CONFIG_PATA_JMICRON is not set
-# CONFIG_PATA_LEGACY is not set
-# CONFIG_PATA_TRIFLEX is not set
-# CONFIG_PATA_MARVELL is not set
-# CONFIG_PATA_MPIIX is not set
-# CONFIG_PATA_OLDPIIX is not set
-# CONFIG_PATA_NETCELL is not set
-# CONFIG_PATA_NINJA32 is not set
-# CONFIG_PATA_NS87410 is not set
-# CONFIG_PATA_NS87415 is not set
-# CONFIG_PATA_OPTI is not set
-# CONFIG_PATA_OPTIDMA is not set
-CONFIG_PATA_PCMCIA=m
-# CONFIG_PATA_PDC_OLD is not set
-# CONFIG_PATA_QDI is not set
-# CONFIG_PATA_RADISYS is not set
-# CONFIG_PATA_RZ1000 is not set
-# CONFIG_PATA_SC1200 is not set
-# CONFIG_PATA_SERVERWORKS is not set
-# CONFIG_PATA_PDC2027X is not set
-# CONFIG_PATA_SIL680 is not set
-# CONFIG_PATA_SIS is not set
-# CONFIG_PATA_VIA is not set
-# CONFIG_PATA_WINBOND is not set
-# CONFIG_PATA_WINBOND_VLB is not set
-# CONFIG_PATA_SCH is not set
-# CONFIG_MD is not set
-# CONFIG_FUSION is not set
-
-#
-# IEEE 1394 (FireWire) support
-#
-
-#
-# Enable only one of the two stacks, unless you know what you are doing
-#
-# CONFIG_FIREWIRE is not set
-# CONFIG_IEEE1394 is not set
-# CONFIG_I2O is not set
-# CONFIG_MACINTOSH_DRIVERS is not set
-CONFIG_NETDEVICES=y
-# CONFIG_DUMMY is not set
-# CONFIG_BONDING is not set
-# CONFIG_MACVLAN is not set
-# CONFIG_EQUALIZER is not set
-CONFIG_TUN=y
-# CONFIG_VETH is not set
-# CONFIG_NET_SB1000 is not set
-# CONFIG_ARCNET is not set
-# CONFIG_NET_ETHERNET is not set
-CONFIG_MII=m
-CONFIG_NETDEV_1000=y
-# CONFIG_ACENIC is not set
-# CONFIG_DL2K is not set
-CONFIG_E1000=m
-CONFIG_E1000_DISABLE_PACKET_SPLIT=y
-CONFIG_E1000E=m
-# CONFIG_IP1000 is not set
-CONFIG_IGB=m
-# CONFIG_IGB_LRO is not set
-# CONFIG_NS83820 is not set
-# CONFIG_HAMACHI is not set
-# CONFIG_YELLOWFIN is not set
-# CONFIG_R8169 is not set
-# CONFIG_SIS190 is not set
-# CONFIG_SKGE is not set
-# CONFIG_SKY2 is not set
-# CONFIG_VIA_VELOCITY is not set
-# CONFIG_TIGON3 is not set
-# CONFIG_BNX2 is not set
-# CONFIG_QLA3XXX is not set
-# CONFIG_ATL1 is not set
-# CONFIG_ATL1E is not set
-# CONFIG_NETDEV_10000 is not set
-# CONFIG_TR is not set
-
-#
-# Wireless LAN
-#
-# CONFIG_WLAN_PRE80211 is not set
-CONFIG_WLAN_80211=y
-# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_IPW2100 is not set
-# CONFIG_IPW2200 is not set
-# CONFIG_LIBERTAS is not set
-# CONFIG_AIRO is not set
-# CONFIG_HERMES is not set
-# CONFIG_ATMEL is not set
-# CONFIG_AIRO_CS is not set
-# CONFIG_PCMCIA_WL3501 is not set
-# CONFIG_PRISM54 is not set
-# CONFIG_USB_ZD1201 is not set
-# CONFIG_USB_NET_RNDIS_WLAN is not set
-# CONFIG_RTL8180 is not set
-# CONFIG_RTL8187 is not set
-# CONFIG_ADM8211 is not set
-# CONFIG_MAC80211_HWSIM is not set
-# CONFIG_P54_COMMON is not set
-CONFIG_ATH5K=m
-# CONFIG_ATH5K_DEBUG is not set
-CONFIG_ATH9K=m
-CONFIG_IWLWIFI=m
-CONFIG_IWLCORE=m
-CONFIG_IWLWIFI_LEDS=y
-CONFIG_IWLWIFI_RFKILL=y
-# CONFIG_IWLWIFI_DEBUG is not set
-CONFIG_IWLAGN=m
-CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
-CONFIG_IWLAGN_LEDS=y
-# CONFIG_IWL4965 is not set
-CONFIG_IWL5000=y
-CONFIG_IWL3945=m
-CONFIG_IWL3945_RFKILL=y
-CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
-CONFIG_IWL3945_LEDS=y
-# CONFIG_IWL3945_DEBUG is not set
-# CONFIG_HOSTAP is not set
-# CONFIG_B43 is not set
-# CONFIG_B43LEGACY is not set
-# CONFIG_ZD1211RW is not set
-# CONFIG_RT2X00 is not set
-
-#
-# USB Network Adapters
-#
-# CONFIG_USB_CATC is not set
-# CONFIG_USB_KAWETH is not set
-# CONFIG_USB_PEGASUS is not set
-# CONFIG_USB_RTL8150 is not set
-# CONFIG_USB_USBNET is not set
-CONFIG_USB_HSO=m
-CONFIG_NET_PCMCIA=y
-CONFIG_PCMCIA_3C589=m
-CONFIG_PCMCIA_3C574=m
-CONFIG_PCMCIA_FMVJ18X=m
-CONFIG_PCMCIA_PCNET=m
-CONFIG_PCMCIA_NMCLAN=m
-CONFIG_PCMCIA_SMC91C92=m
-CONFIG_PCMCIA_XIRC2PS=m
-CONFIG_PCMCIA_AXNET=m
-# CONFIG_WAN is not set
-# CONFIG_FDDI is not set
-# CONFIG_HIPPI is not set
-# CONFIG_PLIP is not set
-CONFIG_PPP=m
-# CONFIG_PPP_MULTILINK is not set
-# CONFIG_PPP_FILTER is not set
-CONFIG_PPP_ASYNC=m
-CONFIG_PPP_SYNC_TTY=m
-CONFIG_PPP_DEFLATE=m
-CONFIG_PPP_BSDCOMP=m
-CONFIG_PPP_MPPE=m
-CONFIG_PPPOE=m
-CONFIG_PPPOL2TP=m
-# CONFIG_SLIP is not set
-CONFIG_SLHC=m
-# CONFIG_NET_FC is not set
-# CONFIG_NETCONSOLE is not set
-# CONFIG_NETPOLL is not set
-# CONFIG_NET_POLL_CONTROLLER is not set
-# CONFIG_ISDN is not set
-# CONFIG_PHONE is not set
-
-#
-# Input device support
-#
-CONFIG_INPUT=y
-# CONFIG_INPUT_FF_MEMLESS is not set
-CONFIG_INPUT_POLLDEV=m
-
-#
-# Userland interfaces
-#
-CONFIG_INPUT_MOUSEDEV=y
-CONFIG_INPUT_MOUSEDEV_PSAUX=y
-CONFIG_INPUT_MOUSEDEV_SCREEN_X=1400
-CONFIG_INPUT_MOUSEDEV_SCREEN_Y=1050
-# CONFIG_INPUT_JOYDEV is not set
-CONFIG_INPUT_EVDEV=y
-# CONFIG_INPUT_EVBUG is not set
-
-#
-# Input Device Drivers
-#
-CONFIG_INPUT_KEYBOARD=y
-CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
-# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
-# CONFIG_KEYBOARD_NEWTON is not set
-# CONFIG_KEYBOARD_STOWAWAY is not set
-CONFIG_INPUT_MOUSE=y
-CONFIG_MOUSE_PS2=y
-CONFIG_MOUSE_PS2_ALPS=y
-CONFIG_MOUSE_PS2_LOGIPS2PP=y
-CONFIG_MOUSE_PS2_SYNAPTICS=y
-CONFIG_MOUSE_PS2_LIFEBOOK=y
-CONFIG_MOUSE_PS2_TRACKPOINT=y
-# CONFIG_MOUSE_PS2_TOUCHKIT is not set
-# CONFIG_MOUSE_SERIAL is not set
-# CONFIG_MOUSE_APPLETOUCH is not set
-# CONFIG_MOUSE_BCM5974 is not set
-# CONFIG_MOUSE_INPORT is not set
-# CONFIG_MOUSE_LOGIBM is not set
-# CONFIG_MOUSE_PC110PAD is not set
-# CONFIG_MOUSE_VSXXXAA is not set
-# CONFIG_INPUT_JOYSTICK is not set
-# CONFIG_INPUT_TABLET is not set
-# CONFIG_INPUT_TOUCHSCREEN is not set
-CONFIG_INPUT_MISC=y
-# CONFIG_INPUT_PCSPKR is not set
-# CONFIG_INPUT_APANEL is not set
-# CONFIG_INPUT_WISTRON_BTNS is not set
-# CONFIG_INPUT_ATLAS_BTNS is not set
-# CONFIG_INPUT_ATI_REMOTE is not set
-# CONFIG_INPUT_ATI_REMOTE2 is not set
-# CONFIG_INPUT_KEYSPAN_REMOTE is not set
-# CONFIG_INPUT_POWERMATE is not set
-# CONFIG_INPUT_YEALINK is not set
-CONFIG_INPUT_UINPUT=m
-
-#
-# Hardware I/O ports
-#
-CONFIG_SERIO=y
-CONFIG_SERIO_I8042=y
-# CONFIG_SERIO_SERPORT is not set
-# CONFIG_SERIO_CT82C710 is not set
-# CONFIG_SERIO_PARKBD is not set
-# CONFIG_SERIO_PCIPS2 is not set
-CONFIG_SERIO_LIBPS2=y
-# CONFIG_SERIO_RAW is not set
-# CONFIG_GAMEPORT is not set
-
-#
-# Character devices
-#
-CONFIG_VT=y
-CONFIG_CONSOLE_TRANSLATIONS=y
-CONFIG_VT_CONSOLE=y
-CONFIG_VT_CKO=y
-CONFIG_VT_PRINTK_EMERG_COLOR=0x09
-CONFIG_VT_PRINTK_ALERT_COLOR=0x01
-CONFIG_VT_PRINTK_CRIT_COLOR=0x05
-CONFIG_VT_PRINTK_ERR_COLOR=0x07
-CONFIG_VT_PRINTK_WARNING_COLOR=0x0B
-CONFIG_VT_PRINTK_NOTICE_COLOR=0x02
-CONFIG_VT_PRINTK_INFO_COLOR=0x04
-CONFIG_VT_PRINTK_DEBUG_COLOR=0x07
-CONFIG_HW_CONSOLE=y
-# CONFIG_VT_HW_CONSOLE_BINDING is not set
-CONFIG_DEVKMEM=y
-# CONFIG_SERIAL_NONSTANDARD is not set
-CONFIG_NOZOMI=m
-
-#
-# Serial drivers
-#
-CONFIG_SERIAL_8250=y
-# CONFIG_SERIAL_8250_CONSOLE is not set
-CONFIG_FIX_EARLYCON_MEM=y
-CONFIG_SERIAL_8250_PCI=y
-CONFIG_SERIAL_8250_PNP=y
-CONFIG_SERIAL_8250_CS=m
-CONFIG_SERIAL_8250_NR_UARTS=4
-CONFIG_SERIAL_8250_RUNTIME_UARTS=4
-# CONFIG_SERIAL_8250_EXTENDED is not set
-
-#
-# Non-8250 serial port support
-#
-CONFIG_SERIAL_CORE=y
-# CONFIG_SERIAL_JSM is not set
-CONFIG_UNIX98_PTYS=y
-CONFIG_LEGACY_PTYS=y
-CONFIG_LEGACY_PTY_COUNT=256
-CONFIG_PRINTER=y
-# CONFIG_LP_CONSOLE is not set
-# CONFIG_PPDEV is not set
-# CONFIG_IPMI_HANDLER is not set
-# CONFIG_HW_RANDOM is not set
-CONFIG_NVRAM=y
-# CONFIG_DTLK is not set
-# CONFIG_R3964 is not set
-# CONFIG_APPLICOM is not set
-# CONFIG_SONYPI is not set
-
-#
-# PCMCIA character devices
-#
-# CONFIG_SYNCLINK_CS is not set
-# CONFIG_CARDMAN_4000 is not set
-# CONFIG_CARDMAN_4040 is not set
-# CONFIG_IPWIRELESS is not set
-# CONFIG_MWAVE is not set
-# CONFIG_PC8736x_GPIO is not set
-# CONFIG_NSC_GPIO is not set
-# CONFIG_CS5535_GPIO is not set
-# CONFIG_RAW_DRIVER is not set
-CONFIG_HPET=y
-CONFIG_HPET_MMAP=y
-# CONFIG_HANGCHECK_TIMER is not set
-# CONFIG_TCG_TPM is not set
-# CONFIG_TELCLOCK is not set
-CONFIG_DEVPORT=y
-CONFIG_I2C=m
-CONFIG_I2C_BOARDINFO=y
-CONFIG_I2C_CHARDEV=m
-CONFIG_I2C_HELPER_AUTO=y
-CONFIG_I2C_ALGOBIT=m
-
-#
-# I2C Hardware Bus support
-#
-
-#
-# PC SMBus host controller drivers
-#
-# CONFIG_I2C_ALI1535 is not set
-# CONFIG_I2C_ALI1563 is not set
-# CONFIG_I2C_ALI15X3 is not set
-# CONFIG_I2C_AMD756 is not set
-# CONFIG_I2C_AMD8111 is not set
-# CONFIG_I2C_I801 is not set
-# CONFIG_I2C_ISCH is not set
-# CONFIG_I2C_PIIX4 is not set
-# CONFIG_I2C_NFORCE2 is not set
-# CONFIG_I2C_SIS5595 is not set
-# CONFIG_I2C_SIS630 is not set
-# CONFIG_I2C_SIS96X is not set
-# CONFIG_I2C_VIA is not set
-# CONFIG_I2C_VIAPRO is not set
-
-#
-# I2C system bus drivers (mostly embedded / system-on-chip)
-#
-# CONFIG_I2C_OCORES is not set
-# CONFIG_I2C_SIMTEC is not set
-
-#
-# External I2C/SMBus adapter drivers
-#
-# CONFIG_I2C_PARPORT is not set
-# CONFIG_I2C_PARPORT_LIGHT is not set
-# CONFIG_I2C_TAOS_EVM is not set
-# CONFIG_I2C_TINY_USB is not set
-
-#
-# Graphics adapter I2C/DDC channel drivers
-#
-# CONFIG_I2C_VOODOO3 is not set
-
-#
-# Other I2C/SMBus bus drivers
-#
-# CONFIG_I2C_PCA_ISA is not set
-# CONFIG_I2C_PCA_PLATFORM is not set
-# CONFIG_I2C_STUB is not set
-# CONFIG_SCx200_ACB is not set
-
-#
-# Miscellaneous I2C Chip support
-#
-# CONFIG_DS1682 is not set
-# CONFIG_AT24 is not set
-# CONFIG_SENSORS_EEPROM is not set
-# CONFIG_SENSORS_PCF8574 is not set
-# CONFIG_PCF8575 is not set
-# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
-# CONFIG_SENSORS_TSL2550 is not set
-# CONFIG_I2C_DEBUG_CORE is not set
-# CONFIG_I2C_DEBUG_ALGO is not set
-# CONFIG_I2C_DEBUG_BUS is not set
-# CONFIG_I2C_DEBUG_CHIP is not set
-# CONFIG_SPI is not set
-CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
-# CONFIG_GPIOLIB is not set
-# CONFIG_W1 is not set
-CONFIG_POWER_SUPPLY=y
-# CONFIG_POWER_SUPPLY_DEBUG is not set
-# CONFIG_PDA_POWER is not set
-# CONFIG_BATTERY_DS2760 is not set
-CONFIG_HWMON=y
-# CONFIG_HWMON_VID is not set
-# CONFIG_SENSORS_ABITUGURU is not set
-# CONFIG_SENSORS_ABITUGURU3 is not set
-# CONFIG_SENSORS_AD7414 is not set
-# CONFIG_SENSORS_AD7418 is not set
-# CONFIG_SENSORS_ADM1021 is not set
-# CONFIG_SENSORS_ADM1025 is not set
-# CONFIG_SENSORS_ADM1026 is not set
-# CONFIG_SENSORS_ADM1029 is not set
-# CONFIG_SENSORS_ADM1031 is not set
-# CONFIG_SENSORS_ADM9240 is not set
-# CONFIG_SENSORS_ADT7470 is not set
-# CONFIG_SENSORS_ADT7473 is not set
-# CONFIG_SENSORS_K8TEMP is not set
-# CONFIG_SENSORS_ASB100 is not set
-# CONFIG_SENSORS_ATXP1 is not set
-# CONFIG_SENSORS_DS1621 is not set
-# CONFIG_SENSORS_I5K_AMB is not set
-# CONFIG_SENSORS_F71805F is not set
-# CONFIG_SENSORS_F71882FG is not set
-# CONFIG_SENSORS_F75375S is not set
-# CONFIG_SENSORS_FSCHER is not set
-# CONFIG_SENSORS_FSCPOS is not set
-# CONFIG_SENSORS_FSCHMD is not set
-# CONFIG_SENSORS_GL518SM is not set
-# CONFIG_SENSORS_GL520SM is not set
-CONFIG_SENSORS_CORETEMP=y
-# CONFIG_SENSORS_IT87 is not set
-# CONFIG_SENSORS_LM63 is not set
-# CONFIG_SENSORS_LM75 is not set
-# CONFIG_SENSORS_LM77 is not set
-# CONFIG_SENSORS_LM78 is not set
-# CONFIG_SENSORS_LM80 is not set
-# CONFIG_SENSORS_LM83 is not set
-# CONFIG_SENSORS_LM85 is not set
-# CONFIG_SENSORS_LM87 is not set
-# CONFIG_SENSORS_LM90 is not set
-# CONFIG_SENSORS_LM92 is not set
-# CONFIG_SENSORS_LM93 is not set
-# CONFIG_SENSORS_MAX1619 is not set
-# CONFIG_SENSORS_MAX6650 is not set
-# CONFIG_SENSORS_PC87360 is not set
-# CONFIG_SENSORS_PC87427 is not set
-# CONFIG_SENSORS_SIS5595 is not set
-# CONFIG_SENSORS_DME1737 is not set
-# CONFIG_SENSORS_SMSC47M1 is not set
-# CONFIG_SENSORS_SMSC47M192 is not set
-# CONFIG_SENSORS_SMSC47B397 is not set
-# CONFIG_SENSORS_ADS7828 is not set
-# CONFIG_SENSORS_THMC50 is not set
-# CONFIG_SENSORS_VIA686A is not set
-# CONFIG_SENSORS_VT1211 is not set
-# CONFIG_SENSORS_VT8231 is not set
-# CONFIG_SENSORS_W83781D is not set
-# CONFIG_SENSORS_W83791D is not set
-# CONFIG_SENSORS_W83792D is not set
-# CONFIG_SENSORS_W83793 is not set
-# CONFIG_SENSORS_W83L785TS is not set
-# CONFIG_SENSORS_W83L786NG is not set
-# CONFIG_SENSORS_W83627HF is not set
-# CONFIG_SENSORS_W83627EHF is not set
-# CONFIG_SENSORS_HDAPS is not set
-# CONFIG_SENSORS_APPLESMC is not set
-# CONFIG_HWMON_DEBUG_CHIP is not set
-CONFIG_THERMAL=y
-CONFIG_THERMAL_HWMON=y
-# CONFIG_WATCHDOG is not set
-
-#
-# Sonics Silicon Backplane
-#
-CONFIG_SSB_POSSIBLE=y
-# CONFIG_SSB is not set
-
-#
-# Multifunction device drivers
-#
-# CONFIG_MFD_CORE is not set
-# CONFIG_MFD_SM501 is not set
-# CONFIG_HTC_PASIC3 is not set
-# CONFIG_MFD_TMIO is not set
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-CONFIG_VIDEO_DEV=m
-CONFIG_VIDEO_V4L2_COMMON=m
-# CONFIG_VIDEO_ALLOW_V4L1 is not set
-CONFIG_VIDEO_V4L1_COMPAT=y
-CONFIG_DVB_CORE=m
-CONFIG_VIDEO_MEDIA=m
-
-#
-# Multimedia drivers
-#
-CONFIG_VIDEO_SAA7146=m
-CONFIG_VIDEO_SAA7146_VV=m
-CONFIG_MEDIA_ATTACH=y
-CONFIG_MEDIA_TUNER=m
-# CONFIG_MEDIA_TUNER_CUSTOMIZE is not set
-CONFIG_MEDIA_TUNER_SIMPLE=m
-CONFIG_MEDIA_TUNER_TDA8290=m
-CONFIG_MEDIA_TUNER_TDA827X=m
-CONFIG_MEDIA_TUNER_TDA18271=m
-CONFIG_MEDIA_TUNER_TDA9887=m
-CONFIG_MEDIA_TUNER_TEA5761=m
-CONFIG_MEDIA_TUNER_TEA5767=m
-CONFIG_MEDIA_TUNER_MT20XX=m
-CONFIG_MEDIA_TUNER_MT2060=m
-CONFIG_MEDIA_TUNER_MT2266=m
-CONFIG_MEDIA_TUNER_QT1010=m
-CONFIG_MEDIA_TUNER_XC2028=m
-CONFIG_MEDIA_TUNER_XC5000=m
-CONFIG_MEDIA_TUNER_MXL5005S=m
-CONFIG_VIDEO_V4L2=m
-CONFIG_VIDEOBUF_GEN=m
-CONFIG_VIDEOBUF_DMA_SG=m
-CONFIG_VIDEOBUF_VMALLOC=m
-CONFIG_VIDEOBUF_DVB=m
-CONFIG_VIDEO_BTCX=m
-CONFIG_VIDEO_IR=m
-CONFIG_VIDEO_TVEEPROM=m
-CONFIG_VIDEO_TUNER=m
-CONFIG_VIDEO_CAPTURE_DRIVERS=y
-# CONFIG_VIDEO_ADV_DEBUG is not set
-CONFIG_VIDEO_HELPER_CHIPS_AUTO=y
-CONFIG_VIDEO_IR_I2C=m
-CONFIG_VIDEO_TVAUDIO=m
-CONFIG_VIDEO_TDA7432=m
-CONFIG_VIDEO_TDA9875=m
-CONFIG_VIDEO_MSP3400=m
-CONFIG_VIDEO_CS53L32A=m
-CONFIG_VIDEO_WM8775=m
-CONFIG_VIDEO_OV7670=m
-CONFIG_VIDEO_SAA711X=m
-CONFIG_VIDEO_TVP5150=m
-CONFIG_VIDEO_CX25840=m
-CONFIG_VIDEO_CX2341X=m
-CONFIG_VIDEO_VIVI=m
-CONFIG_VIDEO_BT848=m
-# CONFIG_VIDEO_BT848_DVB is not set
-CONFIG_VIDEO_SAA6588=m
-CONFIG_VIDEO_SAA5246A=m
-CONFIG_VIDEO_SAA5249=m
-CONFIG_VIDEO_SAA7134=m
-# CONFIG_VIDEO_SAA7134_ALSA is not set
-CONFIG_VIDEO_SAA7134_DVB=m
-CONFIG_VIDEO_HEXIUM_ORION=m
-CONFIG_VIDEO_HEXIUM_GEMINI=m
-CONFIG_VIDEO_CX88=m
-# CONFIG_VIDEO_CX88_ALSA is not set
-CONFIG_VIDEO_CX88_BLACKBIRD=m
-CONFIG_VIDEO_CX88_DVB=m
-CONFIG_VIDEO_CX88_VP3054=m
-# CONFIG_VIDEO_CX23885 is not set
-# CONFIG_VIDEO_AU0828 is not set
-# CONFIG_VIDEO_CX18 is not set
-CONFIG_VIDEO_CAFE_CCIC=m
-CONFIG_V4L_USB_DRIVERS=y
-CONFIG_USB_VIDEO_CLASS=m
-CONFIG_USB_VIDEO_CLASS_INPUT_EVDEV=y
-# CONFIG_USB_GSPCA is not set
-CONFIG_VIDEO_PVRUSB2=m
-CONFIG_VIDEO_PVRUSB2_SYSFS=y
-CONFIG_VIDEO_PVRUSB2_DVB=y
-# CONFIG_VIDEO_PVRUSB2_DEBUGIFC is not set
-CONFIG_VIDEO_EM28XX=m
-CONFIG_VIDEO_EM28XX_ALSA=m
-CONFIG_VIDEO_EM28XX_DVB=m
-CONFIG_VIDEO_USBVISION=m
-CONFIG_USB_ET61X251=m
-CONFIG_USB_SN9C102=m
-CONFIG_USB_ZC0301=m
-CONFIG_USB_ZR364XX=m
-CONFIG_USB_STKWEBCAM=m
-# CONFIG_USB_S2255 is not set
-CONFIG_SOC_CAMERA=m
-CONFIG_SOC_CAMERA_MT9M001=m
-CONFIG_SOC_CAMERA_MT9V022=m
-# CONFIG_SOC_CAMERA_PLATFORM is not set
-# CONFIG_VIDEO_SH_MOBILE_CEU is not set
-# CONFIG_RADIO_ADAPTERS is not set
-CONFIG_DVB_CAPTURE_DRIVERS=y
-
-#
-# Supported SAA7146 based PCI Adapters
-#
-# CONFIG_TTPCI_EEPROM is not set
-# CONFIG_DVB_AV7110 is not set
-# CONFIG_DVB_BUDGET_CORE is not set
-
-#
-# Supported USB Adapters
-#
-CONFIG_DVB_USB=m
-# CONFIG_DVB_USB_DEBUG is not set
-CONFIG_DVB_USB_A800=m
-CONFIG_DVB_USB_DIBUSB_MB=m
-# CONFIG_DVB_USB_DIBUSB_MB_FAULTY is not set
-CONFIG_DVB_USB_DIBUSB_MC=m
-CONFIG_DVB_USB_DIB0700=m
-CONFIG_DVB_USB_UMT_010=m
-CONFIG_DVB_USB_CXUSB=m
-CONFIG_DVB_USB_M920X=m
-CONFIG_DVB_USB_GL861=m
-CONFIG_DVB_USB_AU6610=m
-CONFIG_DVB_USB_DIGITV=m
-CONFIG_DVB_USB_VP7045=m
-CONFIG_DVB_USB_VP702X=m
-CONFIG_DVB_USB_GP8PSK=m
-CONFIG_DVB_USB_NOVA_T_USB2=m
-CONFIG_DVB_USB_TTUSB2=m
-CONFIG_DVB_USB_DTT200U=m
-CONFIG_DVB_USB_OPERA1=m
-CONFIG_DVB_USB_AF9005=m
-CONFIG_DVB_USB_AF9005_REMOTE=m
-# CONFIG_DVB_USB_DW2102 is not set
-# CONFIG_DVB_USB_ANYSEE is not set
-CONFIG_DVB_TTUSB_BUDGET=m
-CONFIG_DVB_TTUSB_DEC=m
-CONFIG_DVB_CINERGYT2=m
-# CONFIG_DVB_CINERGYT2_TUNING is not set
-# CONFIG_DVB_SIANO_SMS1XXX is not set
-
-#
-# Supported FlexCopII (B2C2) Adapters
-#
-CONFIG_DVB_B2C2_FLEXCOP=m
-CONFIG_DVB_B2C2_FLEXCOP_PCI=m
-CONFIG_DVB_B2C2_FLEXCOP_USB=m
-# CONFIG_DVB_B2C2_FLEXCOP_DEBUG is not set
-
-#
-# Supported BT878 Adapters
-#
-CONFIG_DVB_BT8XX=m
-
-#
-# Supported Pluto2 Adapters
-#
-CONFIG_DVB_PLUTO2=m
-
-#
-# Supported DVB Frontends
-#
-
-#
-# Customise DVB Frontends
-#
-# CONFIG_DVB_FE_CUSTOMISE is not set
-
-#
-# DVB-S (satellite) frontends
-#
-CONFIG_DVB_CX24110=m
-CONFIG_DVB_CX24123=m
-CONFIG_DVB_MT312=m
-CONFIG_DVB_S5H1420=m
-CONFIG_DVB_STV0299=m
-CONFIG_DVB_TDA8083=m
-CONFIG_DVB_TDA10086=m
-CONFIG_DVB_VES1X93=m
-CONFIG_DVB_TUNER_ITD1000=m
-CONFIG_DVB_TDA826X=m
-CONFIG_DVB_TUA6100=m
-
-#
-# DVB-T (terrestrial) frontends
-#
-CONFIG_DVB_SP8870=m
-CONFIG_DVB_SP887X=m
-CONFIG_DVB_CX22700=m
-CONFIG_DVB_CX22702=m
-# CONFIG_DVB_DRX397XD is not set
-CONFIG_DVB_L64781=m
-CONFIG_DVB_TDA1004X=m
-CONFIG_DVB_NXT6000=m
-CONFIG_DVB_MT352=m
-CONFIG_DVB_ZL10353=m
-CONFIG_DVB_DIB3000MB=m
-CONFIG_DVB_DIB3000MC=m
-CONFIG_DVB_DIB7000M=m
-CONFIG_DVB_DIB7000P=m
-CONFIG_DVB_TDA10048=m
-
-#
-# DVB-C (cable) frontends
-#
-CONFIG_DVB_VES1820=m
-CONFIG_DVB_TDA10021=m
-CONFIG_DVB_TDA10023=m
-CONFIG_DVB_STV0297=m
-
-#
-# ATSC (North American/Korean Terrestrial/Cable DTV) frontends
-#
-CONFIG_DVB_NXT200X=m
-CONFIG_DVB_OR51211=m
-CONFIG_DVB_OR51132=m
-CONFIG_DVB_BCM3510=m
-CONFIG_DVB_LGDT330X=m
-CONFIG_DVB_S5H1409=m
-CONFIG_DVB_AU8522=m
-CONFIG_DVB_S5H1411=m
-
-#
-# Digital terrestrial only tuners/PLL
-#
-CONFIG_DVB_PLL=m
-CONFIG_DVB_TUNER_DIB0070=m
-
-#
-# SEC control devices for DVB-S
-#
-CONFIG_DVB_LNBP21=m
-CONFIG_DVB_ISL6405=m
-CONFIG_DVB_ISL6421=m
-# CONFIG_DAB is not set
-
-#
-# Graphics support
-#
-# CONFIG_AGP is not set
-# CONFIG_DRM is not set
-# CONFIG_VGASTATE is not set
-CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
-CONFIG_BACKLIGHT_LCD_SUPPORT=y
-CONFIG_LCD_CLASS_DEVICE=y
-# CONFIG_LCD_ILI9320 is not set
-CONFIG_LCD_PLATFORM=y
-CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
-# CONFIG_BACKLIGHT_PROGEAR is not set
-# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
-
-#
-# Display device support
-#
-# CONFIG_DISPLAY_SUPPORT is not set
-
-#
-# Console display driver support
-#
-CONFIG_VGA_CONSOLE=y
-# CONFIG_VGACON_SOFT_SCROLLBACK is not set
-# CONFIG_VIDEO_SELECT is not set
-# CONFIG_MDA_CONSOLE is not set
-CONFIG_DUMMY_CONSOLE=y
-CONFIG_SOUND=y
-CONFIG_SND=y
-CONFIG_SND_TIMER=m
-CONFIG_SND_PCM=m
-CONFIG_SND_SEQUENCER=m
-# CONFIG_SND_SEQ_DUMMY is not set
-CONFIG_SND_OSSEMUL=y
-CONFIG_SND_MIXER_OSS=m
-CONFIG_SND_PCM_OSS=m
-CONFIG_SND_PCM_OSS_PLUGINS=y
-CONFIG_SND_SEQUENCER_OSS=y
-# CONFIG_SND_DYNAMIC_MINORS is not set
-CONFIG_SND_SUPPORT_OLD_API=y
-CONFIG_SND_VERBOSE_PROCFS=y
-# CONFIG_SND_VERBOSE_PRINTK is not set
-# CONFIG_SND_DEBUG is not set
-CONFIG_SND_VMASTER=y
-# CONFIG_SND_DRIVERS is not set
-# CONFIG_SND_ISA is not set
-CONFIG_SND_PCI=y
-# CONFIG_SND_AD1889 is not set
-# CONFIG_SND_ALS300 is not set
-# CONFIG_SND_ALS4000 is not set
-# CONFIG_SND_ALI5451 is not set
-# CONFIG_SND_ATIIXP is not set
-# CONFIG_SND_ATIIXP_MODEM is not set
-# CONFIG_SND_AU8810 is not set
-# CONFIG_SND_AU8820 is not set
-# CONFIG_SND_AU8830 is not set
-# CONFIG_SND_AW2 is not set
-# CONFIG_SND_AZT3328 is not set
-# CONFIG_SND_BT87X is not set
-# CONFIG_SND_CA0106 is not set
-# CONFIG_SND_CMIPCI is not set
-# CONFIG_SND_OXYGEN is not set
-# CONFIG_SND_CS4281 is not set
-# CONFIG_SND_CS46XX is not set
-# CONFIG_SND_CS5530 is not set
-# CONFIG_SND_CS5535AUDIO is not set
-# CONFIG_SND_DARLA20 is not set
-# CONFIG_SND_GINA20 is not set
-# CONFIG_SND_LAYLA20 is not set
-# CONFIG_SND_DARLA24 is not set
-# CONFIG_SND_GINA24 is not set
-# CONFIG_SND_LAYLA24 is not set
-# CONFIG_SND_MONA is not set
-# CONFIG_SND_MIA is not set
-# CONFIG_SND_ECHO3G is not set
-# CONFIG_SND_INDIGO is not set
-# CONFIG_SND_INDIGOIO is not set
-# CONFIG_SND_INDIGODJ is not set
-# CONFIG_SND_EMU10K1 is not set
-# CONFIG_SND_EMU10K1X is not set
-# CONFIG_SND_ENS1370 is not set
-# CONFIG_SND_ENS1371 is not set
-# CONFIG_SND_ES1938 is not set
-# CONFIG_SND_ES1968 is not set
-# CONFIG_SND_FM801 is not set
-CONFIG_SND_HDA_INTEL=m
-# CONFIG_SND_HDA_HWDEP is not set
-# CONFIG_SND_HDA_CODEC_REALTEK is not set
-CONFIG_SND_HDA_CODEC_ANALOG=y
-# CONFIG_SND_HDA_CODEC_SIGMATEL is not set
-# CONFIG_SND_HDA_CODEC_VIA is not set
-# CONFIG_SND_HDA_CODEC_ATIHDMI is not set
-# CONFIG_SND_HDA_CODEC_CONEXANT is not set
-# CONFIG_SND_HDA_CODEC_CMEDIA is not set
-# CONFIG_SND_HDA_CODEC_SI3054 is not set
-# CONFIG_SND_HDA_GENERIC is not set
-CONFIG_SND_HDA_POWER_SAVE=y
-CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5
-# CONFIG_SND_HDSP is not set
-# CONFIG_SND_HDSPM is not set
-# CONFIG_SND_HIFIER is not set
-# CONFIG_SND_ICE1712 is not set
-# CONFIG_SND_ICE1724 is not set
-# CONFIG_SND_INTEL8X0 is not set
-# CONFIG_SND_INTEL8X0M is not set
-# CONFIG_SND_KORG1212 is not set
-# CONFIG_SND_MAESTRO3 is not set
-# CONFIG_SND_MIXART is not set
-# CONFIG_SND_NM256 is not set
-# CONFIG_SND_PCXHR is not set
-# CONFIG_SND_RIPTIDE is not set
-# CONFIG_SND_RME32 is not set
-# CONFIG_SND_RME96 is not set
-# CONFIG_SND_RME9652 is not set
-# CONFIG_SND_SIS7019 is not set
-# CONFIG_SND_SONICVIBES is not set
-# CONFIG_SND_TRIDENT is not set
-# CONFIG_SND_VIA82XX is not set
-# CONFIG_SND_VIA82XX_MODEM is not set
-# CONFIG_SND_VIRTUOSO is not set
-# CONFIG_SND_VX222 is not set
-# CONFIG_SND_YMFPCI is not set
-# CONFIG_SND_USB is not set
-# CONFIG_SND_PCMCIA is not set
-# CONFIG_SND_SOC is not set
-# CONFIG_SOUND_PRIME is not set
-CONFIG_HID_SUPPORT=y
-CONFIG_HID=y
-# CONFIG_HID_DEBUG is not set
-# CONFIG_HIDRAW is not set
-
-#
-# USB Input Devices
-#
-CONFIG_USB_HID=y
-# CONFIG_USB_HIDINPUT_POWERBOOK is not set
-# CONFIG_HID_FF is not set
-CONFIG_USB_HIDDEV=y
-CONFIG_USB_SUPPORT=y
-CONFIG_USB_ARCH_HAS_HCD=y
-CONFIG_USB_ARCH_HAS_OHCI=y
-CONFIG_USB_ARCH_HAS_EHCI=y
-CONFIG_USB=y
-# CONFIG_USB_DEBUG is not set
-CONFIG_USB_ANNOUNCE_NEW_DEVICES=y
-
-#
-# Miscellaneous USB options
-#
-CONFIG_USB_DEVICEFS=y
-CONFIG_USB_DEVICE_CLASS=y
-# CONFIG_USB_DYNAMIC_MINORS is not set
-CONFIG_USB_SUSPEND=y
-# CONFIG_USB_OTG is not set
-# CONFIG_USB_MON is not set
-
-#
-# USB Host Controller Drivers
-#
-# CONFIG_USB_C67X00_HCD is not set
-CONFIG_USB_EHCI_HCD=y
-CONFIG_USB_EHCI_ROOT_HUB_TT=y
-CONFIG_USB_EHCI_TT_NEWSCHED=y
-# CONFIG_USB_ISP116X_HCD is not set
-# CONFIG_USB_ISP1760_HCD is not set
-# CONFIG_USB_OHCI_HCD is not set
-CONFIG_USB_UHCI_HCD=m
-# CONFIG_USB_SL811_HCD is not set
-# CONFIG_USB_R8A66597_HCD is not set
-
-#
-# USB Device Class drivers
-#
-# CONFIG_USB_ACM is not set
-CONFIG_USB_PRINTER=y
-# CONFIG_USB_WDM is not set
-
-#
-# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
-#
-
-#
-# may also be needed; see USB_STORAGE Help for more information
-#
-CONFIG_USB_STORAGE=y
-# CONFIG_USB_STORAGE_DEBUG is not set
-# CONFIG_USB_STORAGE_DATAFAB is not set
-# CONFIG_USB_STORAGE_FREECOM is not set
-# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
-# CONFIG_USB_STORAGE_USBAT is not set
-# CONFIG_USB_STORAGE_SDDR09 is not set
-# CONFIG_USB_STORAGE_SDDR55 is not set
-# CONFIG_USB_STORAGE_JUMPSHOT is not set
-# CONFIG_USB_STORAGE_ALAUDA is not set
-# CONFIG_USB_STORAGE_ONETOUCH is not set
-# CONFIG_USB_STORAGE_KARMA is not set
-# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set
-# CONFIG_USB_LIBUSUAL is not set
-
-#
-# USB Imaging devices
-#
-# CONFIG_USB_MDC800 is not set
-# CONFIG_USB_MICROTEK is not set
-
-#
-# USB port drivers
-#
-# CONFIG_USB_USS720 is not set
-CONFIG_USB_SERIAL=m
-# CONFIG_USB_EZUSB is not set
-# CONFIG_USB_SERIAL_GENERIC is not set
-# CONFIG_USB_SERIAL_AIRCABLE is not set
-# CONFIG_USB_SERIAL_ARK3116 is not set
-# CONFIG_USB_SERIAL_BELKIN is not set
-# CONFIG_USB_SERIAL_CH341 is not set
-# CONFIG_USB_SERIAL_WHITEHEAT is not set
-# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
-# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
-# CONFIG_USB_SERIAL_EMPEG is not set
-CONFIG_USB_SERIAL_FTDI_SIO=m
-# CONFIG_USB_SERIAL_FUNSOFT is not set
-# CONFIG_USB_SERIAL_VISOR is not set
-# CONFIG_USB_SERIAL_IPAQ is not set
-# CONFIG_USB_SERIAL_IR is not set
-# CONFIG_USB_SERIAL_EDGEPORT is not set
-# CONFIG_USB_SERIAL_EDGEPORT_TI is not set
-# CONFIG_USB_SERIAL_GARMIN is not set
-# CONFIG_USB_SERIAL_IPW is not set
-# CONFIG_USB_SERIAL_IUU is not set
-# CONFIG_USB_SERIAL_KEYSPAN_PDA is not set
-# CONFIG_USB_SERIAL_KEYSPAN is not set
-# CONFIG_USB_SERIAL_KLSI is not set
-# CONFIG_USB_SERIAL_KOBIL_SCT is not set
-# CONFIG_USB_SERIAL_MCT_U232 is not set
-# CONFIG_USB_SERIAL_MOS7720 is not set
-# CONFIG_USB_SERIAL_MOS7840 is not set
-# CONFIG_USB_SERIAL_MOTOROLA is not set
-# CONFIG_USB_SERIAL_NAVMAN is not set
-# CONFIG_USB_SERIAL_PL2303 is not set
-# CONFIG_USB_SERIAL_OTI6858 is not set
-# CONFIG_USB_SERIAL_SPCP8X5 is not set
-# CONFIG_USB_SERIAL_HP4X is not set
-# CONFIG_USB_SERIAL_SAFE is not set
-# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
-# CONFIG_USB_SERIAL_TI is not set
-# CONFIG_USB_SERIAL_CYBERJACK is not set
-# CONFIG_USB_SERIAL_XIRCOM is not set
-# CONFIG_USB_SERIAL_OPTION is not set
-# CONFIG_USB_SERIAL_OMNINET is not set
-# CONFIG_USB_SERIAL_DEBUG is not set
-
-#
-# USB Miscellaneous drivers
-#
-# CONFIG_USB_EMI62 is not set
-# CONFIG_USB_EMI26 is not set
-# CONFIG_USB_ADUTUX is not set
-# CONFIG_USB_RIO500 is not set
-# CONFIG_USB_LEGOTOWER is not set
-# CONFIG_USB_LCD is not set
-# CONFIG_USB_BERRY_CHARGE is not set
-# CONFIG_USB_LED is not set
-# CONFIG_USB_CYPRESS_CY7C63 is not set
-# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
-# CONFIG_USB_IDMOUSE is not set
-# CONFIG_USB_FTDI_ELAN is not set
-# CONFIG_USB_APPLEDISPLAY is not set
-# CONFIG_USB_SISUSBVGA is not set
-# CONFIG_USB_LD is not set
-# CONFIG_USB_TRANCEVIBRATOR is not set
-# CONFIG_USB_IOWARRIOR is not set
-# CONFIG_USB_TEST is not set
-# CONFIG_USB_ISIGHTFW is not set
-# CONFIG_USB_GADGET is not set
-# CONFIG_MMC is not set
-# CONFIG_MEMSTICK is not set
-CONFIG_NEW_LEDS=y
-CONFIG_LEDS_CLASS=m
-
-#
-# LED drivers
-#
-# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_CLEVO_MAIL is not set
-# CONFIG_LEDS_PCA955X is not set
-
-#
-# LED Triggers
-#
-CONFIG_LEDS_TRIGGERS=y
-CONFIG_LEDS_TRIGGER_TIMER=m
-CONFIG_LEDS_TRIGGER_HEARTBEAT=m
-CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
-# CONFIG_ACCESSIBILITY is not set
-# CONFIG_INFINIBAND is not set
-# CONFIG_EDAC is not set
-CONFIG_RTC_LIB=y
-CONFIG_RTC_CLASS=y
-CONFIG_RTC_HCTOSYS=y
-CONFIG_RTC_HCTOSYS_DEVICE="rtc0"
-# CONFIG_RTC_DEBUG is not set
-
-#
-# RTC interfaces
-#
-CONFIG_RTC_INTF_SYSFS=y
-CONFIG_RTC_INTF_PROC=y
-CONFIG_RTC_INTF_DEV=y
-# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set
-# CONFIG_RTC_DRV_TEST is not set
-
-#
-# I2C RTC drivers
-#
-# CONFIG_RTC_DRV_DS1307 is not set
-# CONFIG_RTC_DRV_DS1374 is not set
-# CONFIG_RTC_DRV_DS1672 is not set
-# CONFIG_RTC_DRV_MAX6900 is not set
-# CONFIG_RTC_DRV_RS5C372 is not set
-# CONFIG_RTC_DRV_ISL1208 is not set
-# CONFIG_RTC_DRV_X1205 is not set
-# CONFIG_RTC_DRV_PCF8563 is not set
-# CONFIG_RTC_DRV_PCF8583 is not set
-# CONFIG_RTC_DRV_M41T80 is not set
-# CONFIG_RTC_DRV_S35390A is not set
-# CONFIG_RTC_DRV_FM3130 is not set
-
-#
-# SPI RTC drivers
-#
-
-#
-# Platform RTC drivers
-#
-CONFIG_RTC_DRV_CMOS=y
-# CONFIG_RTC_DRV_DS1511 is not set
-# CONFIG_RTC_DRV_DS1553 is not set
-# CONFIG_RTC_DRV_DS1742 is not set
-# CONFIG_RTC_DRV_STK17TA8 is not set
-# CONFIG_RTC_DRV_M48T86 is not set
-# CONFIG_RTC_DRV_M48T59 is not set
-# CONFIG_RTC_DRV_V3020 is not set
-
-#
-# on-CPU RTC drivers
-#
-CONFIG_DMADEVICES=y
-
-#
-# DMA Devices
-#
-# CONFIG_INTEL_IOATDMA is not set
-CONFIG_AUXDISPLAY=y
-# CONFIG_KS0108 is not set
-# CONFIG_UIO is not set
-
-#
-# Firmware Drivers
-#
-# CONFIG_EDD is not set
-CONFIG_FIRMWARE_MEMMAP=y
-# CONFIG_DELL_RBU is not set
-# CONFIG_DCDBAS is not set
-CONFIG_DMIID=y
-# CONFIG_ISCSI_IBFT_FIND is not set
-
-#
-# File systems
-#
-CONFIG_EXT2_FS=y
-CONFIG_EXT2_FS_XATTR=y
-CONFIG_EXT2_FS_POSIX_ACL=y
-CONFIG_EXT2_FS_SECURITY=y
-CONFIG_EXT2_FS_XIP=y
-CONFIG_FS_XIP=y
-CONFIG_EXT3_FS=y
-CONFIG_EXT3_FS_XATTR=y
-CONFIG_EXT3_FS_POSIX_ACL=y
-CONFIG_EXT3_FS_SECURITY=y
-CONFIG_EXT4DEV_FS=y
-CONFIG_EXT4DEV_FS_XATTR=y
-CONFIG_EXT4DEV_FS_POSIX_ACL=y
-CONFIG_EXT4DEV_FS_SECURITY=y
-CONFIG_JBD=y
-CONFIG_JBD2=y
-CONFIG_FS_MBCACHE=y
-# CONFIG_REISERFS_FS is not set
-# CONFIG_JFS_FS is not set
-CONFIG_FS_POSIX_ACL=y
-CONFIG_XFS_FS=m
-CONFIG_XFS_QUOTA=y
-CONFIG_XFS_POSIX_ACL=y
-CONFIG_XFS_RT=y
-# CONFIG_XFS_DEBUG is not set
-# CONFIG_OCFS2_FS is not set
-CONFIG_DNOTIFY=y
-CONFIG_INOTIFY=y
-CONFIG_INOTIFY_USER=y
-# CONFIG_QUOTA is not set
-CONFIG_QUOTACTL=y
-# CONFIG_AUTOFS_FS is not set
-CONFIG_AUTOFS4_FS=y
-CONFIG_FUSE_FS=y
-
-#
-# CD-ROM/DVD Filesystems
-#
-CONFIG_ISO9660_FS=y
-CONFIG_JOLIET=y
-CONFIG_ZISOFS=y
-CONFIG_UDF_FS=y
-CONFIG_UDF_NLS=y
-
-#
-# DOS/FAT/NT Filesystems
-#
-CONFIG_FAT_FS=y
-CONFIG_MSDOS_FS=y
-CONFIG_VFAT_FS=y
-CONFIG_FAT_DEFAULT_CODEPAGE=850
-CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-15"
-# CONFIG_NTFS_FS is not set
-
-#
-# Pseudo filesystems
-#
-CONFIG_PROC_FS=y
-CONFIG_PROC_KCORE=y
-CONFIG_PROC_SYSCTL=y
-CONFIG_SYSFS=y
-CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
-# CONFIG_HUGETLBFS is not set
-# CONFIG_HUGETLB_PAGE is not set
-# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
-CONFIG_NETWORK_FILESYSTEMS=y
-CONFIG_NFS_FS=y
-CONFIG_NFS_V3=y
-CONFIG_NFS_V3_ACL=y
-CONFIG_NFS_V4=y
-CONFIG_NFSD=y
-CONFIG_NFSD_V2_ACL=y
-CONFIG_NFSD_V3=y
-CONFIG_NFSD_V3_ACL=y
-CONFIG_NFSD_V4=y
-CONFIG_LOCKD=y
-CONFIG_LOCKD_V4=y
-CONFIG_EXPORTFS=y
-CONFIG_NFS_ACL_SUPPORT=y
-CONFIG_NFS_COMMON=y
-CONFIG_SUNRPC=y
-CONFIG_SUNRPC_GSS=y
-CONFIG_RPCSEC_GSS_KRB5=y
-# CONFIG_RPCSEC_GSS_SPKM3 is not set
-CONFIG_SMB_FS=y
-# CONFIG_SMB_NLS_DEFAULT is not set
-CONFIG_CIFS=y
-CONFIG_CIFS_STATS=y
-# CONFIG_CIFS_STATS2 is not set
-CONFIG_CIFS_WEAK_PW_HASH=y
-CONFIG_CIFS_XATTR=y
-CONFIG_CIFS_POSIX=y
-# CONFIG_CIFS_DEBUG2 is not set
-CONFIG_CIFS_EXPERIMENTAL=y
-# CONFIG_NCP_FS is not set
-# CONFIG_CODA_FS is not set
-# CONFIG_AFS_FS is not set
-
-#
-# Partition Types
-#
-# CONFIG_PARTITION_ADVANCED is not set
-CONFIG_MSDOS_PARTITION=y
-CONFIG_NLS=y
-CONFIG_NLS_DEFAULT="utf8"
-# CONFIG_NLS_CODEPAGE_437 is not set
-# CONFIG_NLS_CODEPAGE_737 is not set
-# CONFIG_NLS_CODEPAGE_775 is not set
-CONFIG_NLS_CODEPAGE_850=y
-# CONFIG_NLS_CODEPAGE_852 is not set
-# CONFIG_NLS_CODEPAGE_855 is not set
-# CONFIG_NLS_CODEPAGE_857 is not set
-# CONFIG_NLS_CODEPAGE_860 is not set
-# CONFIG_NLS_CODEPAGE_861 is not set
-# CONFIG_NLS_CODEPAGE_862 is not set
-# CONFIG_NLS_CODEPAGE_863 is not set
-# CONFIG_NLS_CODEPAGE_864 is not set
-# CONFIG_NLS_CODEPAGE_865 is not set
-# CONFIG_NLS_CODEPAGE_866 is not set
-# CONFIG_NLS_CODEPAGE_869 is not set
-# CONFIG_NLS_CODEPAGE_936 is not set
-# CONFIG_NLS_CODEPAGE_950 is not set
-# CONFIG_NLS_CODEPAGE_932 is not set
-# CONFIG_NLS_CODEPAGE_949 is not set
-# CONFIG_NLS_CODEPAGE_874 is not set
-# CONFIG_NLS_ISO8859_8 is not set
-# CONFIG_NLS_CODEPAGE_1250 is not set
-# CONFIG_NLS_CODEPAGE_1251 is not set
-# CONFIG_NLS_ASCII is not set
-CONFIG_NLS_ISO8859_1=y
-# CONFIG_NLS_ISO8859_2 is not set
-# CONFIG_NLS_ISO8859_3 is not set
-# CONFIG_NLS_ISO8859_4 is not set
-# CONFIG_NLS_ISO8859_5 is not set
-# CONFIG_NLS_ISO8859_6 is not set
-# CONFIG_NLS_ISO8859_7 is not set
-# CONFIG_NLS_ISO8859_9 is not set
-# CONFIG_NLS_ISO8859_13 is not set
-# CONFIG_NLS_ISO8859_14 is not set
-CONFIG_NLS_ISO8859_15=y
-# CONFIG_NLS_KOI8_R is not set
-# CONFIG_NLS_KOI8_U is not set
-CONFIG_NLS_UTF8=y
-# CONFIG_DLM is not set
-
-#
-# Kernel hacking
-#
-CONFIG_TRACE_IRQFLAGS_SUPPORT=y
-# CONFIG_PRINTK_TIME is not set
-CONFIG_ENABLE_WARN_DEPRECATED=y
-CONFIG_ENABLE_MUST_CHECK=y
-CONFIG_FRAME_WARN=1024
-CONFIG_MAGIC_SYSRQ=y
-CONFIG_UNUSED_SYMBOLS=y
-# CONFIG_DEBUG_FS is not set
-# CONFIG_HEADERS_CHECK is not set
-CONFIG_DEBUG_KERNEL=y
-# CONFIG_DEBUG_SHIRQ is not set
-# CONFIG_DETECT_SOFTLOCKUP is not set
-# CONFIG_SCHED_DEBUG is not set
-# CONFIG_SCHEDSTATS is not set
-CONFIG_TIMER_STATS=y
-# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_DEBUG_SLAB is not set
-CONFIG_DEBUG_PREEMPT=y
-# CONFIG_DEBUG_RT_MUTEXES is not set
-# CONFIG_RT_MUTEX_TESTER is not set
-# CONFIG_DEBUG_SPINLOCK is not set
-# CONFIG_DEBUG_MUTEXES is not set
-# CONFIG_DEBUG_LOCK_ALLOC is not set
-# CONFIG_PROVE_LOCKING is not set
-# CONFIG_LOCK_STAT is not set
-# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
-# CONFIG_DEBUG_LOCKING_API_SELFTESTS is not set
-# CONFIG_DEBUG_KOBJECT is not set
-# CONFIG_DEBUG_HIGHMEM is not set
-CONFIG_DEBUG_BUGVERBOSE=y
-# CONFIG_DEBUG_INFO is not set
-# CONFIG_DEBUG_VM is not set
-# CONFIG_DEBUG_WRITECOUNT is not set
-CONFIG_DEBUG_MEMORY_INIT=y
-# CONFIG_DEBUG_LIST is not set
-# CONFIG_DEBUG_SG is not set
-# CONFIG_FRAME_POINTER is not set
-# CONFIG_BOOT_PRINTK_DELAY is not set
-# CONFIG_RCU_TORTURE_TEST is not set
-# CONFIG_BACKTRACE_SELF_TEST is not set
-# CONFIG_FAULT_INJECTION is not set
-# CONFIG_LATENCYTOP is not set
-CONFIG_SYSCTL_SYSCALL_CHECK=y
-CONFIG_HAVE_FTRACE=y
-CONFIG_HAVE_DYNAMIC_FTRACE=y
-# CONFIG_FTRACE is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
-# CONFIG_SYSPROF_TRACER is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
-# CONFIG_SAMPLES is not set
-CONFIG_HAVE_ARCH_KGDB=y
-# CONFIG_KGDB is not set
-# CONFIG_STRICT_DEVMEM is not set
-# CONFIG_X86_VERBOSE_BOOTUP is not set
-CONFIG_EARLY_PRINTK=y
-# CONFIG_DEBUG_STACKOVERFLOW is not set
-# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
-# CONFIG_DEBUG_PER_CPU_MAPS is not set
-# CONFIG_X86_PTDUMP is not set
-# CONFIG_DEBUG_RODATA is not set
-# CONFIG_DEBUG_NX_TEST is not set
-# CONFIG_4KSTACKS is not set
-CONFIG_DOUBLEFAULT=y
-# CONFIG_MMIOTRACE is not set
-CONFIG_IO_DELAY_TYPE_0X80=0
-CONFIG_IO_DELAY_TYPE_0XED=1
-CONFIG_IO_DELAY_TYPE_UDELAY=2
-CONFIG_IO_DELAY_TYPE_NONE=3
-CONFIG_IO_DELAY_0X80=y
-# CONFIG_IO_DELAY_0XED is not set
-# CONFIG_IO_DELAY_UDELAY is not set
-# CONFIG_IO_DELAY_NONE is not set
-CONFIG_DEFAULT_IO_DELAY_TYPE=0
-# CONFIG_CPA_DEBUG is not set
-# CONFIG_OPTIMIZE_INLINING is not set
-
-#
-# Security options
-#
-# CONFIG_KEYS is not set
-# CONFIG_SECURITY is not set
-# CONFIG_SECURITY_FILE_CAPABILITIES is not set
-CONFIG_CRYPTO=y
-
-#
-# Crypto core or helper
-#
-CONFIG_CRYPTO_ALGAPI=y
-CONFIG_CRYPTO_BLKCIPHER=y
-CONFIG_CRYPTO_HASH=y
-CONFIG_CRYPTO_MANAGER=y
-CONFIG_CRYPTO_GF128MUL=m
-# CONFIG_CRYPTO_NULL is not set
-# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
-# CONFIG_CRYPTO_TEST is not set
-
-#
-# Authenticated Encryption with Associated Data
-#
-# CONFIG_CRYPTO_CCM is not set
-# CONFIG_CRYPTO_GCM is not set
-# CONFIG_CRYPTO_SEQIV is not set
-
-#
-# Block modes
-#
-CONFIG_CRYPTO_CBC=y
-# CONFIG_CRYPTO_CTR is not set
-# CONFIG_CRYPTO_CTS is not set
-CONFIG_CRYPTO_ECB=y
-CONFIG_CRYPTO_LRW=m
-CONFIG_CRYPTO_PCBC=y
-# CONFIG_CRYPTO_XTS is not set
-
-#
-# Hash modes
-#
-# CONFIG_CRYPTO_HMAC is not set
-CONFIG_CRYPTO_XCBC=y
-
-#
-# Digest
-#
-CONFIG_CRYPTO_CRC32C=y
-CONFIG_CRYPTO_MD4=y
-CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_MICHAEL_MIC=y
-# CONFIG_CRYPTO_RMD128 is not set
-# CONFIG_CRYPTO_RMD160 is not set
-# CONFIG_CRYPTO_RMD256 is not set
-# CONFIG_CRYPTO_RMD320 is not set
-CONFIG_CRYPTO_SHA1=y
-CONFIG_CRYPTO_SHA256=y
-CONFIG_CRYPTO_SHA512=y
-# CONFIG_CRYPTO_TGR192 is not set
-# CONFIG_CRYPTO_WP512 is not set
-
-#
-# Ciphers
-#
-CONFIG_CRYPTO_AES=y
-CONFIG_CRYPTO_AES_586=y
-# CONFIG_CRYPTO_ANUBIS is not set
-CONFIG_CRYPTO_ARC4=y
-CONFIG_CRYPTO_BLOWFISH=y
-CONFIG_CRYPTO_CAMELLIA=y
-# CONFIG_CRYPTO_CAST5 is not set
-# CONFIG_CRYPTO_CAST6 is not set
-CONFIG_CRYPTO_DES=y
-CONFIG_CRYPTO_FCRYPT=y
-# CONFIG_CRYPTO_KHAZAD is not set
-# CONFIG_CRYPTO_SALSA20 is not set
-# CONFIG_CRYPTO_SALSA20_586 is not set
-# CONFIG_CRYPTO_SEED is not set
-CONFIG_CRYPTO_SERPENT=y
-# CONFIG_CRYPTO_TEA is not set
-CONFIG_CRYPTO_TWOFISH=y
-CONFIG_CRYPTO_TWOFISH_COMMON=y
-# CONFIG_CRYPTO_TWOFISH_586 is not set
-
-#
-# Compression
-#
-# CONFIG_CRYPTO_DEFLATE is not set
-CONFIG_CRYPTO_LZO=y
-CONFIG_CRYPTO_LZF=y
-# CONFIG_CRYPTO_HW is not set
-CONFIG_HAVE_KVM=y
-# CONFIG_VIRTUALIZATION is not set
-
-#
-# Library routines
-#
-CONFIG_BITREVERSE=y
-CONFIG_GENERIC_FIND_FIRST_BIT=y
-CONFIG_GENERIC_FIND_NEXT_BIT=y
-CONFIG_CRC_CCITT=m
-CONFIG_CRC16=y
-CONFIG_CRC_T10DIF=y
-CONFIG_CRC_ITU_T=y
-CONFIG_CRC32=y
-CONFIG_CRC7=y
-CONFIG_LIBCRC32C=y
-CONFIG_AUDIT_GENERIC=y
-CONFIG_ZLIB_INFLATE=y
-CONFIG_ZLIB_DEFLATE=m
-CONFIG_LZO_COMPRESS=y
-CONFIG_LZO_DECOMPRESS=y
-CONFIG_TEXTSEARCH=y
-CONFIG_TEXTSEARCH_KMP=y
-CONFIG_TEXTSEARCH_BM=y
-CONFIG_TEXTSEARCH_FSM=y
-CONFIG_PLIST=y
-CONFIG_HAS_IOMEM=y
-CONFIG_HAS_IOPORT=y
-CONFIG_HAS_DMA=y
diff --git a/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.28-r1 b/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.31
index dfe7ef6..bb4166c 100644
--- a/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.28-r1
+++ b/sys-kernel/thinkpad-sources/files/configs/config-for-core-2.6.31
@@ -1,12 +1,13 @@
#
# Automatically generated make config: don't edit
-# Linux kernel version: 2.6.28-thinkpad-r1
-# Fri Jan 9 09:55:32 2009
+# Linux kernel version: 2.6.31-thinkpad
+# Sat Oct 3 11:24:22 2009
#
# CONFIG_64BIT is not set
CONFIG_X86_32=y
# CONFIG_X86_64 is not set
CONFIG_X86=y
+CONFIG_OUTPUT_FORMAT="elf32-i386"
CONFIG_ARCH_DEFCONFIG="arch/x86/configs/i386_defconfig"
CONFIG_GENERIC_TIME=y
CONFIG_GENERIC_CMOS_UPDATE=y
@@ -33,6 +34,7 @@ CONFIG_ARCH_HAS_CPU_RELAX=y
CONFIG_ARCH_HAS_DEFAULT_IDLE=y
CONFIG_ARCH_HAS_CACHE_LINE_SIZE=y
CONFIG_HAVE_SETUP_PER_CPU_AREA=y
+CONFIG_HAVE_DYNAMIC_PER_CPU_AREA=y
# CONFIG_HAVE_CPUMASK_OF_CPU_MAP is not set
CONFIG_ARCH_HIBERNATION_POSSIBLE=y
CONFIG_ARCH_SUSPEND_POSSIBLE=y
@@ -40,17 +42,19 @@ CONFIG_ARCH_SUSPEND_POSSIBLE=y
CONFIG_ARCH_POPULATES_NODE_MAP=y
# CONFIG_AUDIT_ARCH is not set
CONFIG_ARCH_SUPPORTS_OPTIMIZED_INLINING=y
+CONFIG_ARCH_SUPPORTS_DEBUG_PAGEALLOC=y
CONFIG_GENERIC_HARDIRQS=y
+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y
CONFIG_GENERIC_IRQ_PROBE=y
CONFIG_GENERIC_PENDING_IRQ=y
-CONFIG_X86_SMP=y
CONFIG_USE_GENERIC_SMP_HELPERS=y
CONFIG_X86_32_SMP=y
CONFIG_X86_HT=y
-CONFIG_X86_BIOS_REBOOT=y
CONFIG_X86_TRAMPOLINE=y
+CONFIG_X86_32_LAZY_GS=y
CONFIG_KTIME_SCALAR=y
CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config"
+CONFIG_CONSTRUCTORS=y
#
# General setup
@@ -60,36 +64,53 @@ CONFIG_LOCK_KERNEL=y
CONFIG_INIT_ENV_ARG_LIMIT=32
CONFIG_LOCALVERSION=""
CONFIG_LOCALVERSION_AUTO=y
+CONFIG_HAVE_KERNEL_GZIP=y
+CONFIG_HAVE_KERNEL_BZIP2=y
+CONFIG_HAVE_KERNEL_LZMA=y
+CONFIG_KERNEL_GZIP=y
+# CONFIG_KERNEL_BZIP2 is not set
+# CONFIG_KERNEL_LZMA is not set
CONFIG_SWAP=y
CONFIG_SYSVIPC=y
CONFIG_SYSVIPC_SYSCTL=y
CONFIG_POSIX_MQUEUE=y
+CONFIG_POSIX_MQUEUE_SYSCTL=y
CONFIG_BSD_PROCESS_ACCT=y
CONFIG_BSD_PROCESS_ACCT_V3=y
# CONFIG_TASKSTATS is not set
CONFIG_AUDIT=y
CONFIG_AUDITSYSCALL=y
CONFIG_AUDIT_TREE=y
+
+#
+# RCU Subsystem
+#
+CONFIG_CLASSIC_RCU=y
+# CONFIG_TREE_RCU is not set
+# CONFIG_PREEMPT_RCU is not set
+# CONFIG_TREE_RCU_TRACE is not set
+# CONFIG_PREEMPT_RCU_TRACE is not set
# CONFIG_IKCONFIG is not set
CONFIG_LOG_BUF_SHIFT=15
-# CONFIG_CGROUPS is not set
CONFIG_HAVE_UNSTABLE_SCHED_CLOCK=y
CONFIG_GROUP_SCHED=y
CONFIG_FAIR_GROUP_SCHED=y
# CONFIG_RT_GROUP_SCHED is not set
CONFIG_USER_SCHED=y
# CONFIG_CGROUP_SCHED is not set
-CONFIG_SYSFS_DEPRECATED=y
-CONFIG_SYSFS_DEPRECATED_V2=y
+# CONFIG_CGROUPS is not set
+# CONFIG_SYSFS_DEPRECATED_V2 is not set
# CONFIG_RELAY is not set
CONFIG_NAMESPACES=y
# CONFIG_UTS_NS is not set
# CONFIG_IPC_NS is not set
# CONFIG_USER_NS is not set
# CONFIG_PID_NS is not set
+# CONFIG_NET_NS is not set
# CONFIG_BLK_DEV_INITRD is not set
# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
CONFIG_SYSCTL=y
+CONFIG_ANON_INODES=y
# CONFIG_EMBEDDED is not set
CONFIG_UID16=y
CONFIG_SYSCTL_SYSCALL=y
@@ -101,20 +122,27 @@ CONFIG_PRINTK=y
CONFIG_BUG=y
CONFIG_ELF_CORE=y
CONFIG_PCSPKR_PLATFORM=y
-# CONFIG_COMPAT_BRK is not set
CONFIG_BASE_FULL=y
CONFIG_FUTEX=y
-CONFIG_ANON_INODES=y
CONFIG_EPOLL=y
CONFIG_SIGNALFD=y
CONFIG_TIMERFD=y
CONFIG_EVENTFD=y
CONFIG_SHMEM=y
CONFIG_AIO=y
+CONFIG_HAVE_PERF_COUNTERS=y
+
+#
+# Performance Counters
+#
+CONFIG_PERF_COUNTERS=y
CONFIG_VM_EVENT_COUNTERS=y
CONFIG_PCI_QUIRKS=y
-CONFIG_SLAB=y
-# CONFIG_SLUB is not set
+CONFIG_SLUB_DEBUG=y
+CONFIG_STRIP_ASM_SYMS=y
+# CONFIG_COMPAT_BRK is not set
+# CONFIG_SLAB is not set
+CONFIG_SLUB=y
# CONFIG_SLOB is not set
# CONFIG_PROFILING is not set
# CONFIG_MARKERS is not set
@@ -125,10 +153,16 @@ CONFIG_HAVE_IOREMAP_PROT=y
CONFIG_HAVE_KPROBES=y
CONFIG_HAVE_KRETPROBES=y
CONFIG_HAVE_ARCH_TRACEHOOK=y
+CONFIG_HAVE_DMA_ATTRS=y
+CONFIG_HAVE_DMA_API_DEBUG=y
+
+#
+# GCOV-based kernel profiling
+#
+# CONFIG_SLOW_WORK is not set
CONFIG_HAVE_GENERIC_DMA_COHERENT=y
CONFIG_SLABINFO=y
CONFIG_RT_MUTEXES=y
-# CONFIG_TINY_SHMEM is not set
CONFIG_BASE_SMALL=0
CONFIG_MODULES=y
# CONFIG_MODULE_FORCE_LOAD is not set
@@ -136,13 +170,10 @@ CONFIG_MODULE_UNLOAD=y
CONFIG_MODULE_FORCE_UNLOAD=y
# CONFIG_MODVERSIONS is not set
# CONFIG_MODULE_SRCVERSION_ALL is not set
-CONFIG_KMOD=y
CONFIG_STOP_MACHINE=y
CONFIG_BLOCK=y
-# CONFIG_LBD is not set
-# CONFIG_BLK_DEV_IO_TRACE is not set
-CONFIG_LSF=y
-# CONFIG_BLK_DEV_BSG is not set
+CONFIG_LBDAF=y
+CONFIG_BLK_DEV_BSG=y
CONFIG_BLK_DEV_INTEGRITY=y
#
@@ -157,7 +188,6 @@ CONFIG_IOSCHED_CFQ=y
CONFIG_DEFAULT_CFQ=y
# CONFIG_DEFAULT_NOOP is not set
CONFIG_DEFAULT_IOSCHED="cfq"
-CONFIG_CLASSIC_RCU=y
CONFIG_FREEZER=y
#
@@ -168,15 +198,11 @@ CONFIG_NO_HZ=y
CONFIG_HIGH_RES_TIMERS=y
CONFIG_GENERIC_CLOCKEVENTS_BUILD=y
CONFIG_SMP=y
-CONFIG_X86_FIND_SMP_CONFIG=y
+# CONFIG_SPARSE_IRQ is not set
CONFIG_X86_MPPARSE=y
-CONFIG_X86_PC=y
-# CONFIG_X86_ELAN is not set
-# CONFIG_X86_VOYAGER is not set
-# CONFIG_X86_GENERICARCH is not set
-# CONFIG_X86_VSMP is not set
-# CONFIG_X86_RDC321X is not set
-CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+# CONFIG_X86_BIGSMP is not set
+# CONFIG_X86_EXTENDED_PLATFORM is not set
+CONFIG_SCHED_OMIT_FRAME_POINTER=y
# CONFIG_PARAVIRT_GUEST is not set
# CONFIG_MEMTEST is not set
# CONFIG_M386 is not set
@@ -188,7 +214,7 @@ CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
# CONFIG_MPENTIUMII is not set
# CONFIG_MPENTIUMIII is not set
# CONFIG_MPENTIUMM is not set
-CONFIG_MPENTIUM4=y
+# CONFIG_MPENTIUM4 is not set
# CONFIG_MK6 is not set
# CONFIG_MK7 is not set
# CONFIG_MK8 is not set
@@ -202,12 +228,14 @@ CONFIG_MPENTIUM4=y
# CONFIG_MVIAC3_2 is not set
# CONFIG_MVIAC7 is not set
# CONFIG_MPSC is not set
-# CONFIG_MCORE2 is not set
+CONFIG_MCORE2=y
# CONFIG_GENERIC_CPU is not set
# CONFIG_X86_GENERIC is not set
CONFIG_X86_CPU=y
+CONFIG_X86_L1_CACHE_BYTES=64
+CONFIG_X86_INTERNODE_CACHE_BYTES=64
CONFIG_X86_CMPXCHG=y
-CONFIG_X86_L1_CACHE_SHIFT=7
+CONFIG_X86_L1_CACHE_SHIFT=6
CONFIG_X86_XADD=y
CONFIG_X86_WP_WORKS_OK=y
CONFIG_X86_INVLPG=y
@@ -222,7 +250,7 @@ CONFIG_X86_DEBUGCTLMSR=y
CONFIG_CPU_SUP_INTEL=y
CONFIG_CPU_SUP_CYRIX_32=y
CONFIG_CPU_SUP_AMD=y
-CONFIG_CPU_SUP_CENTAUR_32=y
+CONFIG_CPU_SUP_CENTAUR=y
CONFIG_CPU_SUP_TRANSMETA_32=y
CONFIG_CPU_SUP_UMC_32=y
# CONFIG_X86_DS is not set
@@ -230,18 +258,25 @@ CONFIG_HPET_TIMER=y
CONFIG_HPET_EMULATE_RTC=y
CONFIG_DMI=y
# CONFIG_IOMMU_HELPER is not set
+# CONFIG_IOMMU_API is not set
CONFIG_NR_CPUS=2
# CONFIG_SCHED_SMT is not set
CONFIG_SCHED_MC=y
# CONFIG_PREEMPT_NONE is not set
# CONFIG_PREEMPT_VOLUNTARY is not set
CONFIG_PREEMPT=y
-# CONFIG_PREEMPT_RCU is not set
CONFIG_X86_LOCAL_APIC=y
CONFIG_X86_IO_APIC=y
+# CONFIG_X86_REROUTE_FOR_BROKEN_BOOT_IRQS is not set
CONFIG_X86_MCE=y
-# CONFIG_X86_MCE_NONFATAL is not set
-# CONFIG_X86_MCE_P4THERMAL is not set
+# CONFIG_X86_OLD_MCE is not set
+CONFIG_X86_NEW_MCE=y
+CONFIG_X86_MCE_INTEL=y
+# CONFIG_X86_MCE_AMD is not set
+# CONFIG_X86_ANCIENT_MCE is not set
+CONFIG_X86_MCE_THRESHOLD=y
+# CONFIG_X86_MCE_INJECT is not set
+CONFIG_X86_THERMAL_VECTOR=y
CONFIG_VM86=y
# CONFIG_TOSHIBA is not set
# CONFIG_I8K is not set
@@ -249,6 +284,7 @@ CONFIG_VM86=y
# CONFIG_MICROCODE is not set
# CONFIG_X86_MSR is not set
# CONFIG_X86_CPUID is not set
+# CONFIG_X86_CPU_DEBUG is not set
# CONFIG_NOHIGHMEM is not set
CONFIG_HIGHMEM4G=y
# CONFIG_HIGHMEM64G is not set
@@ -267,12 +303,13 @@ CONFIG_FLAT_NODE_MEM_MAP=y
CONFIG_SPARSEMEM_STATIC=y
CONFIG_PAGEFLAGS_EXTENDED=y
CONFIG_SPLIT_PTLOCK_CPUS=4
-# CONFIG_RESOURCES_64BIT is not set
# CONFIG_PHYS_ADDR_T_64BIT is not set
CONFIG_ZONE_DMA_FLAG=1
CONFIG_BOUNCE=y
CONFIG_VIRT_TO_BUS=y
-CONFIG_UNEVICTABLE_LRU=y
+CONFIG_HAVE_MLOCK=y
+CONFIG_HAVE_MLOCKED_PAGE_BIT=y
+CONFIG_DEFAULT_MMAP_MIN_ADDR=4096
CONFIG_HIGHPTE=y
# CONFIG_X86_CHECK_BIOS_CORRUPTION is not set
# CONFIG_X86_RESERVE_LOW_64K is not set
@@ -284,6 +321,7 @@ CONFIG_MTRR_SANITIZER_SPARE_REG_NR_DEFAULT=1
CONFIG_X86_PAT=y
# CONFIG_EFI is not set
CONFIG_SECCOMP=y
+# CONFIG_CC_STACKPROTECTOR is not set
# CONFIG_HZ_100 is not set
# CONFIG_HZ_250 is not set
CONFIG_HZ_300=y
@@ -292,7 +330,7 @@ CONFIG_HZ=300
CONFIG_SCHED_HRTICK=y
# CONFIG_KEXEC is not set
# CONFIG_CRASH_DUMP is not set
-CONFIG_PHYSICAL_START=0x100000
+CONFIG_PHYSICAL_START=0x1000000
# CONFIG_RELOCATABLE is not set
CONFIG_PHYSICAL_ALIGN=0x100000
CONFIG_HOTPLUG_CPU=y
@@ -309,6 +347,7 @@ CONFIG_PM_SLEEP_SMP=y
CONFIG_PM_SLEEP=y
CONFIG_SUSPEND=y
CONFIG_SUSPEND_FREEZER=y
+CONFIG_HIBERNATION_NVS=y
CONFIG_HIBERNATION=y
CONFIG_PM_STD_PARTITION="/dev/sda5"
CONFIG_TOI_CORE=y
@@ -322,8 +361,6 @@ CONFIG_TOI_SWAP=y
#
# General Options
#
-CONFIG_TOI_DEFAULT_PRE_HIBERNATE=""
-CONFIG_TOI_DEFAULT_POST_HIBERNATE=""
CONFIG_TOI_CRYPTO=y
CONFIG_TOI_USERUI=y
CONFIG_TOI_USERUI_DEFAULT_PATH="/usr/local/sbin/tuxonice_fbsplash"
@@ -349,14 +386,10 @@ CONFIG_ACPI_DOCK=y
CONFIG_ACPI_PROCESSOR=y
CONFIG_ACPI_HOTPLUG_CPU=y
CONFIG_ACPI_THERMAL=y
-CONFIG_ACPI_WMI=y
-# CONFIG_ACPI_ASUS is not set
-# CONFIG_ACPI_TOSHIBA is not set
# CONFIG_ACPI_CUSTOM_DSDT is not set
CONFIG_ACPI_BLACKLIST_YEAR=0
# CONFIG_ACPI_DEBUG is not set
# CONFIG_ACPI_PCI_SLOT is not set
-CONFIG_ACPI_SYSTEM=y
CONFIG_X86_PM_TIMER=y
CONFIG_ACPI_CONTAINER=y
# CONFIG_ACPI_SBS is not set
@@ -401,7 +434,6 @@ CONFIG_X86_SPEEDSTEP_SMI=y
#
# shared options
#
-# CONFIG_X86_ACPI_CPUFREQ_PROC_INTF is not set
CONFIG_X86_SPEEDSTEP_LIB=y
# CONFIG_X86_SPEEDSTEP_RELAXED_CAP_CHECK is not set
CONFIG_CPU_IDLE=y
@@ -421,16 +453,21 @@ CONFIG_PCI_BIOS=y
CONFIG_PCI_DIRECT=y
CONFIG_PCI_MMCONFIG=y
CONFIG_PCI_DOMAINS=y
+# CONFIG_DMAR is not set
CONFIG_PCIEPORTBUS=y
CONFIG_HOTPLUG_PCI_PCIE=y
CONFIG_PCIEAER=y
+# CONFIG_PCIE_ECRC is not set
+# CONFIG_PCIEAER_INJECT is not set
CONFIG_PCIEASPM=y
# CONFIG_PCIEASPM_DEBUG is not set
CONFIG_ARCH_SUPPORTS_MSI=y
CONFIG_PCI_MSI=y
CONFIG_PCI_LEGACY=y
# CONFIG_PCI_DEBUG is not set
+# CONFIG_PCI_STUB is not set
CONFIG_HT_IRQ=y
+# CONFIG_PCI_IOV is not set
CONFIG_ISA_DMA_API=y
CONFIG_ISA=y
# CONFIG_EISA is not set
@@ -488,9 +525,11 @@ CONFIG_UNIX=y
CONFIG_XFRM=y
CONFIG_XFRM_USER=m
# CONFIG_XFRM_SUB_POLICY is not set
-# CONFIG_XFRM_MIGRATE is not set
+CONFIG_XFRM_MIGRATE=y
# CONFIG_XFRM_STATISTICS is not set
-# CONFIG_NET_KEY is not set
+CONFIG_XFRM_IPCOMP=m
+CONFIG_NET_KEY=m
+CONFIG_NET_KEY_MIGRATE=y
CONFIG_INET=y
CONFIG_IP_MULTICAST=y
CONFIG_IP_ADVANCED_ROUTER=y
@@ -506,10 +545,10 @@ CONFIG_NET_IPIP=y
# CONFIG_IP_MROUTE is not set
# CONFIG_ARPD is not set
CONFIG_SYN_COOKIES=y
-# CONFIG_INET_AH is not set
-# CONFIG_INET_ESP is not set
-# CONFIG_INET_IPCOMP is not set
-# CONFIG_INET_XFRM_TUNNEL is not set
+CONFIG_INET_AH=m
+CONFIG_INET_ESP=m
+CONFIG_INET_IPCOMP=m
+CONFIG_INET_XFRM_TUNNEL=m
CONFIG_INET_TUNNEL=y
CONFIG_INET_XFRM_MODE_TRANSPORT=m
CONFIG_INET_XFRM_MODE_TUNNEL=m
@@ -574,6 +613,8 @@ CONFIG_NETFILTER_XTABLES=y
CONFIG_NETFILTER_XT_TARGET_CLASSIFY=y
CONFIG_NETFILTER_XT_TARGET_CONNMARK=m
CONFIG_NETFILTER_XT_TARGET_DSCP=m
+CONFIG_NETFILTER_XT_TARGET_HL=y
+CONFIG_NETFILTER_XT_TARGET_LED=m
CONFIG_NETFILTER_XT_TARGET_MARK=y
CONFIG_NETFILTER_XT_TARGET_NFLOG=m
CONFIG_NETFILTER_XT_TARGET_NFQUEUE=y
@@ -583,6 +624,7 @@ CONFIG_NETFILTER_XT_TARGET_TPROXY=m
CONFIG_NETFILTER_XT_TARGET_TRACE=m
CONFIG_NETFILTER_XT_TARGET_TCPMSS=m
CONFIG_NETFILTER_XT_TARGET_TCPOPTSTRIP=m
+# CONFIG_NETFILTER_XT_MATCH_CLUSTER is not set
CONFIG_NETFILTER_XT_MATCH_COMMENT=y
CONFIG_NETFILTER_XT_MATCH_CONNBYTES=m
CONFIG_NETFILTER_XT_MATCH_CONNLIMIT=m
@@ -593,6 +635,7 @@ CONFIG_NETFILTER_XT_MATCH_DSCP=m
# CONFIG_NETFILTER_XT_MATCH_ESP is not set
CONFIG_NETFILTER_XT_MATCH_HASHLIMIT=m
CONFIG_NETFILTER_XT_MATCH_HELPER=m
+CONFIG_NETFILTER_XT_MATCH_HL=y
CONFIG_NETFILTER_XT_MATCH_IPRANGE=m
CONFIG_NETFILTER_XT_MATCH_LENGTH=y
CONFIG_NETFILTER_XT_MATCH_LIMIT=y
@@ -615,6 +658,7 @@ CONFIG_NETFILTER_XT_MATCH_STRING=y
CONFIG_NETFILTER_XT_MATCH_TCPMSS=y
# CONFIG_NETFILTER_XT_MATCH_TIME is not set
CONFIG_NETFILTER_XT_MATCH_U32=m
+CONFIG_NETFILTER_XT_MATCH_OSF=m
# CONFIG_IP_VS is not set
#
@@ -671,11 +715,11 @@ CONFIG_IP6_NF_MATCH_HL=y
CONFIG_IP6_NF_MATCH_IPV6HEADER=y
CONFIG_IP6_NF_MATCH_MH=m
CONFIG_IP6_NF_MATCH_RT=y
+CONFIG_IP6_NF_TARGET_HL=y
CONFIG_IP6_NF_TARGET_LOG=y
CONFIG_IP6_NF_FILTER=y
CONFIG_IP6_NF_TARGET_REJECT=y
CONFIG_IP6_NF_MANGLE=y
-CONFIG_IP6_NF_TARGET_HL=y
CONFIG_IP6_NF_RAW=y
# CONFIG_IP_DCCP is not set
# CONFIG_IP_SCTP is not set
@@ -692,6 +736,8 @@ CONFIG_IP6_NF_RAW=y
# CONFIG_LAPB is not set
# CONFIG_ECONET is not set
# CONFIG_WAN_ROUTER is not set
+# CONFIG_PHONET is not set
+# CONFIG_IEEE802154 is not set
CONFIG_NET_SCHED=y
#
@@ -709,6 +755,7 @@ CONFIG_NET_SCHED=y
# CONFIG_NET_SCH_GRED is not set
# CONFIG_NET_SCH_DSMARK is not set
# CONFIG_NET_SCH_NETEM is not set
+# CONFIG_NET_SCH_DRR is not set
#
# Classification
@@ -725,6 +772,7 @@ CONFIG_NET_CLS_ROUTE=y
# CONFIG_NET_EMATCH is not set
# CONFIG_NET_CLS_ACT is not set
CONFIG_NET_SCH_FIFO=y
+# CONFIG_DCB is not set
#
# Network testing
@@ -755,34 +803,35 @@ CONFIG_BT_HCIBTUSB=m
# CONFIG_BT_HCIBTUART is not set
# CONFIG_BT_HCIVHCI is not set
# CONFIG_AF_RXRPC is not set
-# CONFIG_PHONET is not set
CONFIG_WIRELESS=y
CONFIG_CFG80211=m
-CONFIG_NL80211=y
+# CONFIG_CFG80211_REG_DEBUG is not set
# CONFIG_WIRELESS_OLD_REGULATORY is not set
CONFIG_WIRELESS_EXT=y
CONFIG_WIRELESS_EXT_SYSFS=y
+CONFIG_LIB80211=y
+CONFIG_LIB80211_CRYPT_WEP=m
+CONFIG_LIB80211_CRYPT_CCMP=m
+CONFIG_LIB80211_CRYPT_TKIP=m
+# CONFIG_LIB80211_DEBUG is not set
CONFIG_MAC80211=m
+CONFIG_MAC80211_DEFAULT_PS=y
+CONFIG_MAC80211_DEFAULT_PS_VALUE=1
#
# Rate control algorithm selection
#
-CONFIG_MAC80211_RC_PID=y
CONFIG_MAC80211_RC_MINSTREL=y
-CONFIG_MAC80211_RC_DEFAULT_PID=y
-# CONFIG_MAC80211_RC_DEFAULT_MINSTREL is not set
-CONFIG_MAC80211_RC_DEFAULT="pid"
-CONFIG_MAC80211_MESH=y
+# CONFIG_MAC80211_RC_DEFAULT_PID is not set
+CONFIG_MAC80211_RC_DEFAULT_MINSTREL=y
+CONFIG_MAC80211_RC_DEFAULT="minstrel"
CONFIG_MAC80211_LEDS=y
# CONFIG_MAC80211_DEBUG_MENU is not set
-CONFIG_IEEE80211=m
-# CONFIG_IEEE80211_DEBUG is not set
-CONFIG_IEEE80211_CRYPT_WEP=m
-CONFIG_IEEE80211_CRYPT_CCMP=m
-CONFIG_IEEE80211_CRYPT_TKIP=m
+CONFIG_WIMAX=y
+CONFIG_WIMAX_DEBUG_LEVEL=8
CONFIG_RFKILL=y
-CONFIG_RFKILL_INPUT=y
CONFIG_RFKILL_LEDS=y
+CONFIG_RFKILL_INPUT=y
# CONFIG_NET_9P is not set
#
@@ -842,30 +891,22 @@ CONFIG_BLK_DEV_CRYPTOLOOP=y
CONFIG_MISC_DEVICES=y
# CONFIG_IBM_ASM is not set
# CONFIG_PHANTOM is not set
-# CONFIG_EEPROM_93CX6 is not set
# CONFIG_SGI_IOC4 is not set
# CONFIG_TIFM_CORE is not set
-# CONFIG_ACER_WMI is not set
-# CONFIG_ASUS_LAPTOP is not set
-# CONFIG_FUJITSU_LAPTOP is not set
-# CONFIG_TC1100_WMI is not set
-# CONFIG_HP_WMI is not set
# CONFIG_ICS932S401 is not set
-# CONFIG_MSI_LAPTOP is not set
-# CONFIG_PANASONIC_LAPTOP is not set
-# CONFIG_COMPAL_LAPTOP is not set
-# CONFIG_SONY_LAPTOP is not set
-CONFIG_THINKPAD_ACPI=m
-# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
-# CONFIG_THINKPAD_ACPI_DEBUG is not set
-# CONFIG_THINKPAD_ACPI_BAY is not set
-# CONFIG_THINKPAD_ACPI_VIDEO is not set
-CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
-CONFIG_INTEL_MENLOW=m
-# CONFIG_EEEPC_LAPTOP is not set
# CONFIG_ENCLOSURE_SERVICES is not set
# CONFIG_HP_ILO is not set
+# CONFIG_ISL29003 is not set
# CONFIG_C2PORT is not set
+
+#
+# EEPROM support
+#
+# CONFIG_EEPROM_AT24 is not set
+# CONFIG_EEPROM_LEGACY is not set
+# CONFIG_EEPROM_MAX6875 is not set
+# CONFIG_EEPROM_93CX6 is not set
+# CONFIG_CB710_CORE is not set
CONFIG_HAVE_IDE=y
# CONFIG_IDE is not set
@@ -889,10 +930,6 @@ CONFIG_BLK_DEV_SR=y
CONFIG_BLK_DEV_SR_VENDOR=y
CONFIG_CHR_DEV_SG=y
# CONFIG_CHR_DEV_SCH is not set
-
-#
-# Some SCSI devices (e.g. CD jukebox) support multiple LUNs
-#
# CONFIG_SCSI_MULTI_LUN is not set
# CONFIG_SCSI_CONSTANTS is not set
# CONFIG_SCSI_LOGGING is not set
@@ -905,11 +942,13 @@ CONFIG_SCSI_WAIT_SCAN=m
# CONFIG_SCSI_SPI_ATTRS is not set
# CONFIG_SCSI_FC_ATTRS is not set
# CONFIG_SCSI_ISCSI_ATTRS is not set
+# CONFIG_SCSI_SAS_ATTRS is not set
# CONFIG_SCSI_SAS_LIBSAS is not set
# CONFIG_SCSI_SRP_ATTRS is not set
# CONFIG_SCSI_LOWLEVEL is not set
# CONFIG_SCSI_LOWLEVEL_PCMCIA is not set
# CONFIG_SCSI_DH is not set
+# CONFIG_SCSI_OSD_INITIATOR is not set
CONFIG_ATA=y
# CONFIG_ATA_NONSTANDARD is not set
CONFIG_ATA_ACPI=y
@@ -985,7 +1024,11 @@ CONFIG_PATA_PCMCIA=m
#
#
-# Enable only one of the two stacks, unless you know what you are doing
+# You can enable one or both FireWire driver stacks.
+#
+
+#
+# See the help texts for more information.
#
# CONFIG_FIREWIRE is not set
# CONFIG_IEEE1394 is not set
@@ -1009,7 +1052,7 @@ CONFIG_E1000=m
CONFIG_E1000E=m
# CONFIG_IP1000 is not set
CONFIG_IGB=m
-# CONFIG_IGB_LRO is not set
+CONFIG_IGBVF=m
# CONFIG_NS83820 is not set
# CONFIG_HAMACHI is not set
# CONFIG_YELLOWFIN is not set
@@ -1020,9 +1063,11 @@ CONFIG_IGB=m
# CONFIG_VIA_VELOCITY is not set
# CONFIG_TIGON3 is not set
# CONFIG_BNX2 is not set
+# CONFIG_CNIC is not set
# CONFIG_QLA3XXX is not set
# CONFIG_ATL1 is not set
# CONFIG_ATL1E is not set
+# CONFIG_ATL1C is not set
# CONFIG_JME is not set
# CONFIG_NETDEV_10000 is not set
# CONFIG_TR is not set
@@ -1033,18 +1078,11 @@ CONFIG_IGB=m
# CONFIG_WLAN_PRE80211 is not set
CONFIG_WLAN_80211=y
# CONFIG_PCMCIA_RAYCS is not set
-# CONFIG_IPW2100 is not set
-CONFIG_IPW2200=m
-CONFIG_IPW2200_MONITOR=y
-CONFIG_IPW2200_RADIOTAP=y
-CONFIG_IPW2200_PROMISCUOUS=y
-CONFIG_IPW2200_QOS=y
-# CONFIG_IPW2200_DEBUG is not set
# CONFIG_LIBERTAS is not set
# CONFIG_LIBERTAS_THINFIRM is not set
# CONFIG_AIRO is not set
-# CONFIG_HERMES is not set
# CONFIG_ATMEL is not set
+# CONFIG_AT76C50X_USB is not set
# CONFIG_AIRO_CS is not set
# CONFIG_PCMCIA_WL3501 is not set
# CONFIG_PRISM54 is not set
@@ -1054,30 +1092,50 @@ CONFIG_IPW2200_QOS=y
# CONFIG_RTL8187 is not set
# CONFIG_ADM8211 is not set
# CONFIG_MAC80211_HWSIM is not set
+# CONFIG_MWL8K is not set
# CONFIG_P54_COMMON is not set
+CONFIG_ATH_COMMON=m
CONFIG_ATH5K=m
# CONFIG_ATH5K_DEBUG is not set
CONFIG_ATH9K=m
+# CONFIG_ATH9K_DEBUG is not set
+CONFIG_AR9170_USB=m
+CONFIG_AR9170_LEDS=y
+# CONFIG_IPW2100 is not set
+CONFIG_IPW2200=m
+CONFIG_IPW2200_MONITOR=y
+CONFIG_IPW2200_RADIOTAP=y
+CONFIG_IPW2200_PROMISCUOUS=y
+CONFIG_IPW2200_QOS=y
+# CONFIG_IPW2200_DEBUG is not set
+CONFIG_LIBIPW=m
+# CONFIG_LIBIPW_DEBUG is not set
CONFIG_IWLWIFI=m
-CONFIG_IWLCORE=m
CONFIG_IWLWIFI_LEDS=y
-CONFIG_IWLWIFI_RFKILL=y
+CONFIG_IWLWIFI_SPECTRUM_MEASUREMENT=y
# CONFIG_IWLWIFI_DEBUG is not set
CONFIG_IWLAGN=m
-CONFIG_IWLAGN_SPECTRUM_MEASUREMENT=y
-CONFIG_IWLAGN_LEDS=y
CONFIG_IWL4965=y
CONFIG_IWL5000=y
CONFIG_IWL3945=m
-CONFIG_IWL3945_RFKILL=y
CONFIG_IWL3945_SPECTRUM_MEASUREMENT=y
-CONFIG_IWL3945_LEDS=y
-# CONFIG_IWL3945_DEBUG is not set
# CONFIG_HOSTAP is not set
# CONFIG_B43 is not set
# CONFIG_B43LEGACY is not set
# CONFIG_ZD1211RW is not set
# CONFIG_RT2X00 is not set
+# CONFIG_HERMES is not set
+
+#
+# WiMAX Wireless Broadband devices
+#
+CONFIG_WIMAX_I2400M=m
+
+#
+# Enable MMC support to see WiMAX SDIO drivers
+#
+CONFIG_WIMAX_I2400M_USB=m
+CONFIG_WIMAX_I2400M_DEBUG_LEVEL=8
#
# USB Network Adapters
@@ -1143,11 +1201,12 @@ CONFIG_INPUT_EVDEV=y
#
CONFIG_INPUT_KEYBOARD=y
CONFIG_KEYBOARD_ATKBD=y
-# CONFIG_KEYBOARD_SUNKBD is not set
# CONFIG_KEYBOARD_LKKBD is not set
-# CONFIG_KEYBOARD_XTKBD is not set
+# CONFIG_KEYBOARD_LM8323 is not set
# CONFIG_KEYBOARD_NEWTON is not set
# CONFIG_KEYBOARD_STOWAWAY is not set
+# CONFIG_KEYBOARD_SUNKBD is not set
+# CONFIG_KEYBOARD_XTKBD is not set
CONFIG_INPUT_MOUSE=y
CONFIG_MOUSE_PS2=y
CONFIG_MOUSE_PS2_ALPS=y
@@ -1164,6 +1223,7 @@ CONFIG_MOUSE_PS2_TRACKPOINT=y
# CONFIG_MOUSE_LOGIBM is not set
# CONFIG_MOUSE_PC110PAD is not set
# CONFIG_MOUSE_VSXXXAA is not set
+# CONFIG_MOUSE_SYNAPTICS_I2C is not set
# CONFIG_INPUT_JOYSTICK is not set
# CONFIG_INPUT_TABLET is not set
# CONFIG_INPUT_TOUCHSCREEN is not set
@@ -1233,6 +1293,7 @@ CONFIG_SERIAL_8250_RUNTIME_UARTS=4
CONFIG_SERIAL_CORE=y
# CONFIG_SERIAL_JSM is not set
CONFIG_UNIX98_PTYS=y
+# CONFIG_DEVPTS_MULTIPLE_INSTANCES is not set
CONFIG_LEGACY_PTYS=y
CONFIG_LEGACY_PTY_COUNT=256
CONFIG_PRINTER=y
@@ -1264,10 +1325,11 @@ CONFIG_HPET_MMAP=y
# CONFIG_TCG_TPM is not set
# CONFIG_TELCLOCK is not set
CONFIG_DEVPORT=y
-CONFIG_I2C=m
+CONFIG_I2C=y
CONFIG_I2C_BOARDINFO=y
CONFIG_I2C_CHARDEV=m
CONFIG_I2C_HELPER_AUTO=y
+CONFIG_I2C_ALGOBIT=y
#
# I2C Hardware Bus support
@@ -1322,19 +1384,20 @@ CONFIG_I2C_HELPER_AUTO=y
# Miscellaneous I2C Chip support
#
# CONFIG_DS1682 is not set
-# CONFIG_AT24 is not set
-# CONFIG_SENSORS_EEPROM is not set
# CONFIG_SENSORS_PCF8574 is not set
# CONFIG_PCF8575 is not set
# CONFIG_SENSORS_PCA9539 is not set
-# CONFIG_SENSORS_PCF8591 is not set
-# CONFIG_SENSORS_MAX6875 is not set
# CONFIG_SENSORS_TSL2550 is not set
# CONFIG_I2C_DEBUG_CORE is not set
# CONFIG_I2C_DEBUG_ALGO is not set
# CONFIG_I2C_DEBUG_BUS is not set
# CONFIG_I2C_DEBUG_CHIP is not set
# CONFIG_SPI is not set
+
+#
+# PPS support
+#
+# CONFIG_PPS is not set
CONFIG_ARCH_WANT_OPTIONAL_GPIOLIB=y
# CONFIG_GPIOLIB is not set
# CONFIG_W1 is not set
@@ -1342,7 +1405,9 @@ CONFIG_POWER_SUPPLY=y
# CONFIG_POWER_SUPPLY_DEBUG is not set
# CONFIG_PDA_POWER is not set
# CONFIG_BATTERY_DS2760 is not set
+# CONFIG_BATTERY_DS2782 is not set
# CONFIG_BATTERY_BQ27x00 is not set
+# CONFIG_BATTERY_MAX17040 is not set
CONFIG_HWMON=y
# CONFIG_HWMON_VID is not set
# CONFIG_SENSORS_ABITUGURU is not set
@@ -1358,8 +1423,10 @@ CONFIG_HWMON=y
# CONFIG_SENSORS_ADT7462 is not set
# CONFIG_SENSORS_ADT7470 is not set
# CONFIG_SENSORS_ADT7473 is not set
+# CONFIG_SENSORS_ADT7475 is not set
# CONFIG_SENSORS_K8TEMP is not set
# CONFIG_SENSORS_ASB100 is not set
+# CONFIG_SENSORS_ATK0110 is not set
# CONFIG_SENSORS_ATXP1 is not set
# CONFIG_SENSORS_DS1621 is not set
# CONFIG_SENSORS_I5K_AMB is not set
@@ -1369,6 +1436,7 @@ CONFIG_HWMON=y
# CONFIG_SENSORS_FSCHER is not set
# CONFIG_SENSORS_FSCPOS is not set
# CONFIG_SENSORS_FSCHMD is not set
+# CONFIG_SENSORS_G760A is not set
# CONFIG_SENSORS_GL518SM is not set
# CONFIG_SENSORS_GL520SM is not set
CONFIG_SENSORS_CORETEMP=y
@@ -1384,10 +1452,14 @@ CONFIG_SENSORS_CORETEMP=y
# CONFIG_SENSORS_LM90 is not set
# CONFIG_SENSORS_LM92 is not set
# CONFIG_SENSORS_LM93 is not set
+# CONFIG_SENSORS_LTC4215 is not set
+# CONFIG_SENSORS_LTC4245 is not set
+# CONFIG_SENSORS_LM95241 is not set
# CONFIG_SENSORS_MAX1619 is not set
# CONFIG_SENSORS_MAX6650 is not set
# CONFIG_SENSORS_PC87360 is not set
# CONFIG_SENSORS_PC87427 is not set
+# CONFIG_SENSORS_PCF8591 is not set
# CONFIG_SENSORS_SIS5595 is not set
# CONFIG_SENSORS_DME1737 is not set
# CONFIG_SENSORS_SMSC47M1 is not set
@@ -1395,6 +1467,7 @@ CONFIG_SENSORS_CORETEMP=y
# CONFIG_SENSORS_SMSC47B397 is not set
# CONFIG_SENSORS_ADS7828 is not set
# CONFIG_SENSORS_THMC50 is not set
+# CONFIG_SENSORS_TMP401 is not set
# CONFIG_SENSORS_VIA686A is not set
# CONFIG_SENSORS_VT1211 is not set
# CONFIG_SENSORS_VT8231 is not set
@@ -1426,45 +1499,103 @@ CONFIG_SSB_POSSIBLE=y
# CONFIG_MFD_CORE is not set
# CONFIG_MFD_SM501 is not set
# CONFIG_HTC_PASIC3 is not set
+# CONFIG_TWL4030_CORE is not set
# CONFIG_MFD_TMIO is not set
+# CONFIG_PMIC_DA903X is not set
# CONFIG_MFD_WM8400 is not set
# CONFIG_MFD_WM8350_I2C is not set
+# CONFIG_MFD_PCF50633 is not set
+# CONFIG_AB3100_CORE is not set
CONFIG_REGULATOR=y
# CONFIG_REGULATOR_DEBUG is not set
# CONFIG_REGULATOR_FIXED_VOLTAGE is not set
# CONFIG_REGULATOR_VIRTUAL_CONSUMER is not set
+# CONFIG_REGULATOR_USERSPACE_CONSUMER is not set
# CONFIG_REGULATOR_BQ24022 is not set
-
-#
-# Multimedia devices
-#
-
-#
-# Multimedia core support
-#
-# CONFIG_VIDEO_DEV is not set
-# CONFIG_DVB_CORE is not set
-# CONFIG_VIDEO_MEDIA is not set
-
-#
-# Multimedia drivers
-#
-# CONFIG_DAB is not set
+# CONFIG_REGULATOR_MAX1586 is not set
+# CONFIG_REGULATOR_LP3971 is not set
+# CONFIG_MEDIA_SUPPORT is not set
#
# Graphics support
#
# CONFIG_AGP is not set
-# CONFIG_DRM is not set
+CONFIG_DRM=m
+# CONFIG_DRM_TDFX is not set
+# CONFIG_DRM_R128 is not set
+CONFIG_DRM_RADEON=m
+# CONFIG_DRM_MGA is not set
+# CONFIG_DRM_VIA is not set
+# CONFIG_DRM_SAVAGE is not set
# CONFIG_VGASTATE is not set
CONFIG_VIDEO_OUTPUT_CONTROL=y
-# CONFIG_FB is not set
+CONFIG_FB=y
+# CONFIG_FIRMWARE_EDID is not set
+CONFIG_FB_DDC=y
+# CONFIG_FB_BOOT_VESA_SUPPORT is not set
+CONFIG_FB_CFB_FILLRECT=y
+CONFIG_FB_CFB_COPYAREA=y
+CONFIG_FB_CFB_IMAGEBLIT=y
+# CONFIG_FB_CFB_REV_PIXELS_IN_BYTE is not set
+# CONFIG_FB_SYS_FILLRECT is not set
+# CONFIG_FB_SYS_COPYAREA is not set
+# CONFIG_FB_SYS_IMAGEBLIT is not set
+# CONFIG_FB_FOREIGN_ENDIAN is not set
+# CONFIG_FB_SYS_FOPS is not set
+# CONFIG_FB_SVGALIB is not set
+# CONFIG_FB_MACMODES is not set
+CONFIG_FB_BACKLIGHT=y
+CONFIG_FB_MODE_HELPERS=y
+# CONFIG_FB_TILEBLITTING is not set
+
+#
+# Frame buffer hardware drivers
+#
+# CONFIG_FB_CIRRUS is not set
+# CONFIG_FB_PM2 is not set
+# CONFIG_FB_CYBER2000 is not set
+# CONFIG_FB_ARC is not set
+# CONFIG_FB_ASILIANT is not set
+# CONFIG_FB_IMSTT is not set
+# CONFIG_FB_VGA16 is not set
+# CONFIG_FB_VESA is not set
+# CONFIG_FB_N411 is not set
+# CONFIG_FB_HGA is not set
+# CONFIG_FB_S1D13XXX is not set
+# CONFIG_FB_NVIDIA is not set
+# CONFIG_FB_RIVA is not set
+# CONFIG_FB_LE80578 is not set
+# CONFIG_FB_MATROX is not set
+CONFIG_FB_RADEON=y
+CONFIG_FB_RADEON_I2C=y
+CONFIG_FB_RADEON_BACKLIGHT=y
+# CONFIG_FB_RADEON_DEBUG is not set
+# CONFIG_FB_ATY128 is not set
+# CONFIG_FB_ATY is not set
+# CONFIG_FB_S3 is not set
+# CONFIG_FB_SAVAGE is not set
+# CONFIG_FB_SIS is not set
+# CONFIG_FB_VIA is not set
+# CONFIG_FB_NEOMAGIC is not set
+# CONFIG_FB_KYRO is not set
+# CONFIG_FB_3DFX is not set
+# CONFIG_FB_VOODOO1 is not set
+# CONFIG_FB_VT8623 is not set
+# CONFIG_FB_TRIDENT is not set
+# CONFIG_FB_ARK is not set
+# CONFIG_FB_PM3 is not set
+# CONFIG_FB_CARMINE is not set
+# CONFIG_FB_GEODE is not set
+# CONFIG_FB_VIRTUAL is not set
+# CONFIG_FB_METRONOME is not set
+# CONFIG_FB_MB862XX is not set
+# CONFIG_FB_BROADSHEET is not set
CONFIG_BACKLIGHT_LCD_SUPPORT=y
CONFIG_LCD_CLASS_DEVICE=y
# CONFIG_LCD_ILI9320 is not set
CONFIG_LCD_PLATFORM=y
CONFIG_BACKLIGHT_CLASS_DEVICE=y
-# CONFIG_BACKLIGHT_CORGI is not set
+CONFIG_BACKLIGHT_GENERIC=y
# CONFIG_BACKLIGHT_PROGEAR is not set
# CONFIG_BACKLIGHT_MBP_NVIDIA is not set
# CONFIG_BACKLIGHT_SAHARA is not set
@@ -1472,7 +1603,11 @@ CONFIG_BACKLIGHT_CLASS_DEVICE=y
#
# Display device support
#
-# CONFIG_DISPLAY_SUPPORT is not set
+CONFIG_DISPLAY_SUPPORT=m
+
+#
+# Display hardware drivers
+#
#
# Console display driver support
@@ -1481,11 +1616,23 @@ CONFIG_VGA_CONSOLE=y
# CONFIG_VGACON_SOFT_SCROLLBACK is not set
# CONFIG_MDA_CONSOLE is not set
CONFIG_DUMMY_CONSOLE=y
+CONFIG_FRAMEBUFFER_CONSOLE=y
+# CONFIG_FRAMEBUFFER_CONSOLE_DETECT_PRIMARY is not set
+# CONFIG_FRAMEBUFFER_CONSOLE_ROTATION is not set
+# CONFIG_FB_CON_DECOR is not set
+# CONFIG_FONTS is not set
+CONFIG_FONT_8x8=y
+CONFIG_FONT_8x16=y
+CONFIG_LOGO=y
+# CONFIG_LOGO_LINUX_MONO is not set
+# CONFIG_LOGO_LINUX_VGA16 is not set
+CONFIG_LOGO_LINUX_CLUT224=y
CONFIG_SOUND=y
CONFIG_SOUND_OSS_CORE=y
CONFIG_SND=y
-CONFIG_SND_TIMER=m
+CONFIG_SND_TIMER=y
CONFIG_SND_PCM=m
+CONFIG_SND_JACK=y
CONFIG_SND_SEQUENCER=m
# CONFIG_SND_SEQ_DUMMY is not set
CONFIG_SND_OSSEMUL=y
@@ -1493,12 +1640,19 @@ CONFIG_SND_MIXER_OSS=m
CONFIG_SND_PCM_OSS=m
CONFIG_SND_PCM_OSS_PLUGINS=y
CONFIG_SND_SEQUENCER_OSS=y
+CONFIG_SND_HRTIMER=y
+CONFIG_SND_SEQ_HRTIMER_DEFAULT=y
# CONFIG_SND_DYNAMIC_MINORS is not set
CONFIG_SND_SUPPORT_OLD_API=y
CONFIG_SND_VERBOSE_PROCFS=y
# CONFIG_SND_VERBOSE_PRINTK is not set
# CONFIG_SND_DEBUG is not set
CONFIG_SND_VMASTER=y
+# CONFIG_SND_RAWMIDI_SEQ is not set
+# CONFIG_SND_OPL3_LIB_SEQ is not set
+# CONFIG_SND_OPL4_LIB_SEQ is not set
+# CONFIG_SND_SBAWE_SEQ is not set
+# CONFIG_SND_EMU10K1_SEQ is not set
# CONFIG_SND_DRIVERS is not set
# CONFIG_SND_ISA is not set
CONFIG_SND_PCI=y
@@ -1521,6 +1675,7 @@ CONFIG_SND_PCI=y
# CONFIG_SND_CS46XX is not set
# CONFIG_SND_CS5530 is not set
# CONFIG_SND_CS5535AUDIO is not set
+# CONFIG_SND_CTXFI is not set
# CONFIG_SND_DARLA20 is not set
# CONFIG_SND_GINA20 is not set
# CONFIG_SND_LAYLA20 is not set
@@ -1533,6 +1688,8 @@ CONFIG_SND_PCI=y
# CONFIG_SND_INDIGO is not set
# CONFIG_SND_INDIGOIO is not set
# CONFIG_SND_INDIGODJ is not set
+# CONFIG_SND_INDIGOIOX is not set
+# CONFIG_SND_INDIGODJX is not set
# CONFIG_SND_EMU10K1 is not set
# CONFIG_SND_EMU10K1X is not set
# CONFIG_SND_ENS1370 is not set
@@ -1543,13 +1700,17 @@ CONFIG_SND_PCI=y
CONFIG_SND_HDA_INTEL=m
# CONFIG_SND_HDA_HWDEP is not set
CONFIG_SND_HDA_INPUT_BEEP=y
+CONFIG_SND_HDA_INPUT_JACK=y
# CONFIG_SND_HDA_CODEC_REALTEK is not set
CONFIG_SND_HDA_CODEC_ANALOG=y
# CONFIG_SND_HDA_CODEC_SIGMATEL is not set
# CONFIG_SND_HDA_CODEC_VIA is not set
# CONFIG_SND_HDA_CODEC_ATIHDMI is not set
# CONFIG_SND_HDA_CODEC_NVHDMI is not set
+CONFIG_SND_HDA_CODEC_INTELHDMI=y
+CONFIG_SND_HDA_ELD=y
# CONFIG_SND_HDA_CODEC_CONEXANT is not set
+# CONFIG_SND_HDA_CODEC_CA0110 is not set
# CONFIG_SND_HDA_CODEC_CMEDIA is not set
# CONFIG_SND_HDA_CODEC_SI3054 is not set
# CONFIG_SND_HDA_GENERIC is not set
@@ -1563,6 +1724,7 @@ CONFIG_SND_HDA_POWER_SAVE_DEFAULT=5
# CONFIG_SND_INTEL8X0 is not set
# CONFIG_SND_INTEL8X0M is not set
# CONFIG_SND_KORG1212 is not set
+# CONFIG_SND_LX6464ES is not set
# CONFIG_SND_MAESTRO3 is not set
# CONFIG_SND_MIXART is not set
# CONFIG_SND_NM256 is not set
@@ -1598,29 +1760,39 @@ CONFIG_USB_HIDDEV=y
#
# Special HID drivers
#
-# CONFIG_HID_COMPAT is not set
CONFIG_HID_A4TECH=y
CONFIG_HID_APPLE=y
CONFIG_HID_BELKIN=y
-CONFIG_HID_BRIGHT=y
CONFIG_HID_CHERRY=y
CONFIG_HID_CHICONY=y
CONFIG_HID_CYPRESS=y
-CONFIG_HID_DELL=y
+CONFIG_HID_DRAGONRISE=y
+# CONFIG_DRAGONRISE_FF is not set
CONFIG_HID_EZKEY=y
+CONFIG_HID_KYE=y
CONFIG_HID_GYRATION=y
+CONFIG_HID_KENSINGTON=y
CONFIG_HID_LOGITECH=y
# CONFIG_LOGITECH_FF is not set
# CONFIG_LOGIRUMBLEPAD2_FF is not set
CONFIG_HID_MICROSOFT=y
CONFIG_HID_MONTEREY=y
+CONFIG_HID_NTRIG=y
CONFIG_HID_PANTHERLORD=y
# CONFIG_PANTHERLORD_FF is not set
CONFIG_HID_PETALYNX=y
CONFIG_HID_SAMSUNG=y
CONFIG_HID_SONY=y
CONFIG_HID_SUNPLUS=y
+CONFIG_HID_GREENASIA=y
+# CONFIG_GREENASIA_FF is not set
+CONFIG_HID_SMARTJOYPLUS=y
+# CONFIG_SMARTJOYPLUS_FF is not set
+CONFIG_HID_TOPSEED=y
+CONFIG_HID_THRUSTMASTER=y
# CONFIG_THRUSTMASTER_FF is not set
+CONFIG_HID_WACOM=m
+CONFIG_HID_ZEROPLUS=y
# CONFIG_ZEROPLUS_FF is not set
CONFIG_USB_SUPPORT=y
CONFIG_USB_ARCH_HAS_HCD=y
@@ -1647,9 +1819,11 @@ CONFIG_USB_WUSB_CBAF=y
# USB Host Controller Drivers
#
# CONFIG_USB_C67X00_HCD is not set
+# CONFIG_USB_XHCI_HCD is not set
CONFIG_USB_EHCI_HCD=y
CONFIG_USB_EHCI_ROOT_HUB_TT=y
CONFIG_USB_EHCI_TT_NEWSCHED=y
+# CONFIG_USB_OXU210HP_HCD is not set
# CONFIG_USB_ISP116X_HCD is not set
# CONFIG_USB_ISP1760_HCD is not set
# CONFIG_USB_OHCI_HCD is not set
@@ -1658,28 +1832,28 @@ CONFIG_USB_UHCI_HCD=m
# CONFIG_USB_R8A66597_HCD is not set
CONFIG_USB_WHCI_HCD=y
# CONFIG_USB_HWA_HCD is not set
+# CONFIG_USB_GADGET_MUSB_HDRC is not set
#
# USB Device Class drivers
#
-# CONFIG_USB_ACM is not set
+CONFIG_USB_ACM=m
CONFIG_USB_PRINTER=y
CONFIG_USB_WDM=m
# CONFIG_USB_TMC is not set
#
-# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed;
+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may
#
#
-# see USB_STORAGE Help for more information
+# also be needed; see USB_STORAGE Help for more info
#
CONFIG_USB_STORAGE=y
# CONFIG_USB_STORAGE_DEBUG is not set
# CONFIG_USB_STORAGE_DATAFAB is not set
# CONFIG_USB_STORAGE_FREECOM is not set
# CONFIG_USB_STORAGE_ISD200 is not set
-# CONFIG_USB_STORAGE_DPCM is not set
# CONFIG_USB_STORAGE_USBAT is not set
# CONFIG_USB_STORAGE_SDDR09 is not set
# CONFIG_USB_STORAGE_SDDR55 is not set
@@ -1709,7 +1883,7 @@ CONFIG_USB_SERIAL=m
# CONFIG_USB_SERIAL_CH341 is not set
# CONFIG_USB_SERIAL_WHITEHEAT is not set
# CONFIG_USB_SERIAL_DIGI_ACCELEPORT is not set
-# CONFIG_USB_SERIAL_CP2101 is not set
+# CONFIG_USB_SERIAL_CP210X is not set
# CONFIG_USB_SERIAL_CYPRESS_M8 is not set
# CONFIG_USB_SERIAL_EMPEG is not set
CONFIG_USB_SERIAL_FTDI_SIO=m
@@ -1733,15 +1907,19 @@ CONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_SERIAL_NAVMAN is not set
# CONFIG_USB_SERIAL_PL2303 is not set
# CONFIG_USB_SERIAL_OTI6858 is not set
+# CONFIG_USB_SERIAL_QUALCOMM is not set
# CONFIG_USB_SERIAL_SPCP8X5 is not set
# CONFIG_USB_SERIAL_HP4X is not set
# CONFIG_USB_SERIAL_SAFE is not set
+# CONFIG_USB_SERIAL_SIEMENS_MPI is not set
# CONFIG_USB_SERIAL_SIERRAWIRELESS is not set
+# CONFIG_USB_SERIAL_SYMBOL is not set
# CONFIG_USB_SERIAL_TI is not set
# CONFIG_USB_SERIAL_CYBERJACK is not set
# CONFIG_USB_SERIAL_XIRCOM is not set
# CONFIG_USB_SERIAL_OPTION is not set
# CONFIG_USB_SERIAL_OMNINET is not set
+# CONFIG_USB_SERIAL_OPTICON is not set
# CONFIG_USB_SERIAL_DEBUG is not set
#
@@ -1758,7 +1936,6 @@ CONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_LED is not set
# CONFIG_USB_CYPRESS_CY7C63 is not set
# CONFIG_USB_CYTHERM is not set
-# CONFIG_USB_PHIDGET is not set
# CONFIG_USB_IDMOUSE is not set
# CONFIG_USB_FTDI_ELAN is not set
# CONFIG_USB_APPLEDISPLAY is not set
@@ -1769,7 +1946,45 @@ CONFIG_USB_SERIAL_FTDI_SIO=m
# CONFIG_USB_TEST is not set
# CONFIG_USB_ISIGHTFW is not set
# CONFIG_USB_VST is not set
-# CONFIG_USB_GADGET is not set
+CONFIG_USB_GADGET=m
+# CONFIG_USB_GADGET_DEBUG is not set
+# CONFIG_USB_GADGET_DEBUG_FILES is not set
+CONFIG_USB_GADGET_VBUS_DRAW=2
+CONFIG_USB_GADGET_SELECTED=y
+# CONFIG_USB_GADGET_AT91 is not set
+# CONFIG_USB_GADGET_ATMEL_USBA is not set
+# CONFIG_USB_GADGET_FSL_USB2 is not set
+# CONFIG_USB_GADGET_LH7A40X is not set
+# CONFIG_USB_GADGET_OMAP is not set
+# CONFIG_USB_GADGET_PXA25X is not set
+# CONFIG_USB_GADGET_PXA27X is not set
+# CONFIG_USB_GADGET_S3C_HSOTG is not set
+# CONFIG_USB_GADGET_IMX is not set
+# CONFIG_USB_GADGET_S3C2410 is not set
+CONFIG_USB_GADGET_M66592=y
+CONFIG_USB_M66592=m
+# CONFIG_USB_GADGET_AMD5536UDC is not set
+# CONFIG_USB_GADGET_FSL_QE is not set
+# CONFIG_USB_GADGET_CI13XXX is not set
+# CONFIG_USB_GADGET_NET2280 is not set
+# CONFIG_USB_GADGET_GOKU is not set
+# CONFIG_USB_GADGET_LANGWELL is not set
+# CONFIG_USB_GADGET_DUMMY_HCD is not set
+CONFIG_USB_GADGET_DUALSPEED=y
+# CONFIG_USB_ZERO is not set
+# CONFIG_USB_AUDIO is not set
+# CONFIG_USB_ETH is not set
+# CONFIG_USB_GADGETFS is not set
+# CONFIG_USB_FILE_STORAGE is not set
+CONFIG_USB_G_SERIAL=m
+# CONFIG_USB_MIDI_GADGET is not set
+# CONFIG_USB_G_PRINTER is not set
+CONFIG_USB_CDC_COMPOSITE=m
+
+#
+# OTG and related infrastructure
+#
+# CONFIG_NOP_USB_XCEIV is not set
CONFIG_UWB=y
# CONFIG_UWB_HWA is not set
CONFIG_UWB_WHCI=y
@@ -1782,10 +1997,12 @@ CONFIG_LEDS_CLASS=m
#
# LED drivers
#
+# CONFIG_LEDS_ALIX2 is not set
# CONFIG_LEDS_PCA9532 is not set
-# CONFIG_LEDS_HP_DISK is not set
+# CONFIG_LEDS_LP3944 is not set
# CONFIG_LEDS_CLEVO_MAIL is not set
# CONFIG_LEDS_PCA955X is not set
+# CONFIG_LEDS_BD2802 is not set
#
# LED Triggers
@@ -1795,6 +2012,10 @@ CONFIG_LEDS_TRIGGER_TIMER=m
CONFIG_LEDS_TRIGGER_HEARTBEAT=m
CONFIG_LEDS_TRIGGER_BACKLIGHT=m
CONFIG_LEDS_TRIGGER_DEFAULT_ON=m
+
+#
+# iptables trigger is under Netfilter config (LED target)
+#
# CONFIG_ACCESSIBILITY is not set
# CONFIG_INFINIBAND is not set
# CONFIG_EDAC is not set
@@ -1829,6 +2050,7 @@ CONFIG_RTC_INTF_DEV=y
# CONFIG_RTC_DRV_S35390A is not set
# CONFIG_RTC_DRV_FM3130 is not set
# CONFIG_RTC_DRV_RX8581 is not set
+# CONFIG_RTC_DRV_RX8025 is not set
#
# SPI RTC drivers
@@ -1860,7 +2082,34 @@ CONFIG_DMADEVICES=y
# CONFIG_INTEL_IOATDMA is not set
# CONFIG_AUXDISPLAY is not set
# CONFIG_UIO is not set
+
+#
+# TI VLYNQ
+#
# CONFIG_STAGING is not set
+CONFIG_X86_PLATFORM_DEVICES=y
+# CONFIG_ACER_WMI is not set
+# CONFIG_ACERHDF is not set
+# CONFIG_ASUS_LAPTOP is not set
+# CONFIG_DELL_WMI is not set
+# CONFIG_FUJITSU_LAPTOP is not set
+# CONFIG_TC1100_WMI is not set
+# CONFIG_HP_WMI is not set
+# CONFIG_MSI_LAPTOP is not set
+# CONFIG_PANASONIC_LAPTOP is not set
+# CONFIG_COMPAL_LAPTOP is not set
+# CONFIG_SONY_LAPTOP is not set
+CONFIG_THINKPAD_ACPI=m
+# CONFIG_THINKPAD_ACPI_DEBUGFACILITIES is not set
+# CONFIG_THINKPAD_ACPI_DEBUG is not set
+# CONFIG_THINKPAD_ACPI_UNSAFE_LEDS is not set
+# CONFIG_THINKPAD_ACPI_VIDEO is not set
+CONFIG_THINKPAD_ACPI_HOTKEY_POLL=y
+CONFIG_INTEL_MENLOW=m
+# CONFIG_EEEPC_LAPTOP is not set
+CONFIG_ACPI_WMI=y
+# CONFIG_ACPI_ASUS is not set
+# CONFIG_ACPI_TOSHIBA is not set
#
# Firmware Drivers
@@ -1881,6 +2130,7 @@ CONFIG_EXT2_FS_POSIX_ACL=y
CONFIG_EXT2_FS_SECURITY=y
CONFIG_EXT2_FS_XIP=y
CONFIG_EXT3_FS=y
+# CONFIG_EXT3_DEFAULTS_TO_ORDERED is not set
CONFIG_EXT3_FS_XATTR=y
CONFIG_EXT3_FS_POSIX_ACL=y
CONFIG_EXT3_FS_SECURITY=y
@@ -1896,13 +2146,16 @@ CONFIG_FS_MBCACHE=y
# CONFIG_REISERFS_FS is not set
# CONFIG_JFS_FS is not set
CONFIG_FS_POSIX_ACL=y
-CONFIG_FILE_LOCKING=y
CONFIG_XFS_FS=m
CONFIG_XFS_QUOTA=y
CONFIG_XFS_POSIX_ACL=y
CONFIG_XFS_RT=y
# CONFIG_XFS_DEBUG is not set
+# CONFIG_GFS2_FS is not set
# CONFIG_OCFS2_FS is not set
+# CONFIG_BTRFS_FS is not set
+CONFIG_FILE_LOCKING=y
+CONFIG_FSNOTIFY=y
CONFIG_DNOTIFY=y
CONFIG_INOTIFY=y
CONFIG_INOTIFY_USER=y
@@ -1911,6 +2164,13 @@ CONFIG_QUOTACTL=y
# CONFIG_AUTOFS_FS is not set
CONFIG_AUTOFS4_FS=y
CONFIG_FUSE_FS=y
+CONFIG_CUSE=y
+CONFIG_GENERIC_ACL=y
+
+#
+# Caches
+#
+# CONFIG_FSCACHE is not set
#
# CD-ROM/DVD Filesystems
@@ -1940,36 +2200,17 @@ CONFIG_PROC_SYSCTL=y
CONFIG_PROC_PAGE_MONITOR=y
CONFIG_SYSFS=y
CONFIG_TMPFS=y
-# CONFIG_TMPFS_POSIX_ACL is not set
+CONFIG_TMPFS_POSIX_ACL=y
# CONFIG_HUGETLBFS is not set
# CONFIG_HUGETLB_PAGE is not set
# CONFIG_CONFIGFS_FS is not set
-
-#
-# Miscellaneous filesystems
-#
-# CONFIG_ADFS_FS is not set
-# CONFIG_AFFS_FS is not set
-# CONFIG_HFS_FS is not set
-# CONFIG_HFSPLUS_FS is not set
-# CONFIG_BEFS_FS is not set
-# CONFIG_BFS_FS is not set
-# CONFIG_EFS_FS is not set
-# CONFIG_CRAMFS is not set
-# CONFIG_SQUASHFS is not set
-# CONFIG_VXFS_FS is not set
-# CONFIG_MINIX_FS is not set
-# CONFIG_OMFS_FS is not set
-# CONFIG_HPFS_FS is not set
-# CONFIG_QNX4FS_FS is not set
-# CONFIG_ROMFS_FS is not set
-# CONFIG_SYSV_FS is not set
-# CONFIG_UFS_FS is not set
+# CONFIG_MISC_FILESYSTEMS is not set
CONFIG_NETWORK_FILESYSTEMS=y
CONFIG_NFS_FS=y
CONFIG_NFS_V3=y
CONFIG_NFS_V3_ACL=y
CONFIG_NFS_V4=y
+# CONFIG_NFS_V4_1 is not set
CONFIG_NFSD=y
CONFIG_NFSD_V2_ACL=y
CONFIG_NFSD_V3=y
@@ -1982,7 +2223,6 @@ CONFIG_NFS_ACL_SUPPORT=y
CONFIG_NFS_COMMON=y
CONFIG_SUNRPC=y
CONFIG_SUNRPC_GSS=y
-# CONFIG_SUNRPC_REGISTER_V4 is not set
CONFIG_RPCSEC_GSS_KRB5=y
# CONFIG_RPCSEC_GSS_SPKM3 is not set
CONFIG_SMB_FS=y
@@ -2061,11 +2301,14 @@ CONFIG_UNUSED_SYMBOLS=y
CONFIG_DEBUG_KERNEL=y
# CONFIG_DEBUG_SHIRQ is not set
# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_DETECT_HUNG_TASK is not set
# CONFIG_SCHED_DEBUG is not set
# CONFIG_SCHEDSTATS is not set
CONFIG_TIMER_STATS=y
# CONFIG_DEBUG_OBJECTS is not set
-# CONFIG_DEBUG_SLAB is not set
+# CONFIG_SLUB_DEBUG_ON is not set
+# CONFIG_SLUB_STATS is not set
+# CONFIG_DEBUG_KMEMLEAK is not set
CONFIG_DEBUG_PREEMPT=y
# CONFIG_DEBUG_RT_MUTEXES is not set
# CONFIG_RT_MUTEX_TESTER is not set
@@ -2086,6 +2329,8 @@ CONFIG_DEBUG_BUGVERBOSE=y
CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_DEBUG_LIST is not set
# CONFIG_DEBUG_SG is not set
+# CONFIG_DEBUG_NOTIFIERS is not set
+CONFIG_ARCH_WANT_FRAME_POINTERS=y
# CONFIG_FRAME_POINTER is not set
# CONFIG_BOOT_PRINTK_DELAY is not set
# CONFIG_RCU_TORTURE_TEST is not set
@@ -2095,40 +2340,38 @@ CONFIG_DEBUG_MEMORY_INIT=y
# CONFIG_FAULT_INJECTION is not set
# CONFIG_LATENCYTOP is not set
CONFIG_SYSCTL_SYSCALL_CHECK=y
+# CONFIG_DEBUG_PAGEALLOC is not set
+CONFIG_USER_STACKTRACE_SUPPORT=y
CONFIG_HAVE_FUNCTION_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_TRACER=y
+CONFIG_HAVE_FUNCTION_GRAPH_FP_TEST=y
+CONFIG_HAVE_FUNCTION_TRACE_MCOUNT_TEST=y
CONFIG_HAVE_DYNAMIC_FTRACE=y
CONFIG_HAVE_FTRACE_MCOUNT_RECORD=y
-
-#
-# Tracers
-#
-# CONFIG_FUNCTION_TRACER is not set
-# CONFIG_IRQSOFF_TRACER is not set
-# CONFIG_PREEMPT_TRACER is not set
-# CONFIG_SYSPROF_TRACER is not set
-# CONFIG_SCHED_TRACER is not set
-# CONFIG_CONTEXT_SWITCH_TRACER is not set
-# CONFIG_BOOT_TRACER is not set
-# CONFIG_STACK_TRACER is not set
+CONFIG_HAVE_FTRACE_SYSCALLS=y
+CONFIG_TRACING_SUPPORT=y
+# CONFIG_FTRACE is not set
# CONFIG_PROVIDE_OHCI1394_DMA_INIT is not set
-# CONFIG_DYNAMIC_PRINTK_DEBUG is not set
+# CONFIG_DMA_API_DEBUG is not set
# CONFIG_SAMPLES is not set
CONFIG_HAVE_ARCH_KGDB=y
# CONFIG_KGDB is not set
+CONFIG_HAVE_ARCH_KMEMCHECK=y
+# CONFIG_KMEMCHECK is not set
# CONFIG_STRICT_DEVMEM is not set
# CONFIG_X86_VERBOSE_BOOTUP is not set
CONFIG_EARLY_PRINTK=y
# CONFIG_EARLY_PRINTK_DBGP is not set
# CONFIG_DEBUG_STACKOVERFLOW is not set
# CONFIG_DEBUG_STACK_USAGE is not set
-# CONFIG_DEBUG_PAGEALLOC is not set
# CONFIG_DEBUG_PER_CPU_MAPS is not set
# CONFIG_X86_PTDUMP is not set
# CONFIG_DEBUG_RODATA is not set
# CONFIG_DEBUG_NX_TEST is not set
# CONFIG_4KSTACKS is not set
CONFIG_DOUBLEFAULT=y
-# CONFIG_MMIOTRACE is not set
+# CONFIG_IOMMU_STRESS is not set
+CONFIG_HAVE_MMIOTRACE_SUPPORT=y
CONFIG_IO_DELAY_TYPE_0X80=0
CONFIG_IO_DELAY_TYPE_0XED=1
CONFIG_IO_DELAY_TYPE_UDELAY=2
@@ -2148,6 +2391,7 @@ CONFIG_DEFAULT_IO_DELAY_TYPE=0
# CONFIG_SECURITY is not set
# CONFIG_SECURITYFS is not set
# CONFIG_SECURITY_FILE_CAPABILITIES is not set
+# CONFIG_IMA is not set
CONFIG_CRYPTO=y
#
@@ -2156,18 +2400,21 @@ CONFIG_CRYPTO=y
# CONFIG_CRYPTO_FIPS is not set
CONFIG_CRYPTO_ALGAPI=y
CONFIG_CRYPTO_ALGAPI2=y
+CONFIG_CRYPTO_AEAD=m
CONFIG_CRYPTO_AEAD2=y
CONFIG_CRYPTO_BLKCIPHER=y
CONFIG_CRYPTO_BLKCIPHER2=y
CONFIG_CRYPTO_HASH=y
CONFIG_CRYPTO_HASH2=y
CONFIG_CRYPTO_RNG2=y
+CONFIG_CRYPTO_PCOMP=y
CONFIG_CRYPTO_MANAGER=y
CONFIG_CRYPTO_MANAGER2=y
CONFIG_CRYPTO_GF128MUL=m
-# CONFIG_CRYPTO_NULL is not set
+CONFIG_CRYPTO_NULL=m
+CONFIG_CRYPTO_WORKQUEUE=y
# CONFIG_CRYPTO_CRYPTD is not set
-# CONFIG_CRYPTO_AUTHENC is not set
+CONFIG_CRYPTO_AUTHENC=m
# CONFIG_CRYPTO_TEST is not set
#
@@ -2191,7 +2438,7 @@ CONFIG_CRYPTO_PCBC=y
#
# Hash modes
#
-# CONFIG_CRYPTO_HMAC is not set
+CONFIG_CRYPTO_HMAC=m
CONFIG_CRYPTO_XCBC=y
#
@@ -2201,7 +2448,6 @@ CONFIG_CRYPTO_CRC32C=y
# CONFIG_CRYPTO_CRC32C_INTEL is not set
CONFIG_CRYPTO_MD4=y
CONFIG_CRYPTO_MD5=y
-CONFIG_CRYPTO_LZF=y
CONFIG_CRYPTO_MICHAEL_MIC=y
# CONFIG_CRYPTO_RMD128 is not set
# CONFIG_CRYPTO_RMD160 is not set
@@ -2239,7 +2485,8 @@ CONFIG_CRYPTO_TWOFISH_COMMON=y
#
# Compression
#
-# CONFIG_CRYPTO_DEFLATE is not set
+CONFIG_CRYPTO_DEFLATE=m
+CONFIG_CRYPTO_ZLIB=m
CONFIG_CRYPTO_LZO=y
#
@@ -2248,7 +2495,9 @@ CONFIG_CRYPTO_LZO=y
# CONFIG_CRYPTO_ANSI_CPRNG is not set
# CONFIG_CRYPTO_HW is not set
CONFIG_HAVE_KVM=y
+CONFIG_HAVE_KVM_IRQCHIP=y
# CONFIG_VIRTUALIZATION is not set
+# CONFIG_BINARY_PRINTF is not set
#
# Library routines
@@ -2256,6 +2505,7 @@ CONFIG_HAVE_KVM=y
CONFIG_BITREVERSE=y
CONFIG_GENERIC_FIND_FIRST_BIT=y
CONFIG_GENERIC_FIND_NEXT_BIT=y
+CONFIG_GENERIC_FIND_LAST_BIT=y
CONFIG_CRC_CCITT=m
CONFIG_CRC16=y
CONFIG_CRC_T10DIF=y
@@ -2272,7 +2522,7 @@ CONFIG_TEXTSEARCH=y
CONFIG_TEXTSEARCH_KMP=y
CONFIG_TEXTSEARCH_BM=y
CONFIG_TEXTSEARCH_FSM=y
-CONFIG_PLIST=y
CONFIG_HAS_IOMEM=y
CONFIG_HAS_IOPORT=y
CONFIG_HAS_DMA=y
+CONFIG_NLATTR=y
diff --git a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.27-r2.ebuild b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.27-r2.ebuild
deleted file mode 100644
index 8f16d0d..0000000
--- a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.27-r2.ebuild
+++ /dev/null
@@ -1,70 +0,0 @@
-# Copyright 1999-2009 Gentoo Foundation
-# Distributed under the terms of the GNU General Public License v2
-# $Header: sys-kernel/thinkpad-sources/thinkpad-sources-2.6.27-r2.ebuild 2009 01 09
-
-ETYPE="sources"
-K_WANT_GENPATCHES="base extras"
-K_GENPATCHES_VER="9"
-inherit kernel-2
-detect_version
-detect_arch
-
-KEYWORDS="~amd64 ~x86"
-IUSE=""
-HOMEPAGE="http://dev.gentoo.org/~dsd/genpatches http://www.tuxonice.net http://ibm-acpi.sourceforge.net/"
-
-DESCRIPTION="TuxOnIce + Gentoo patches + Latest THINKPAD-Acpi + PCI-E ASPM + Colored Printk + Libata Powermanagement + Bay Fixes + hdaps + phc + ipw2200 inject"
-
-TUXONICE_VERSION="3.0-rc8"
-TUXONICE_TARGET="2.6.27"
-TUXONICE_SRC="tuxonice-${TUXONICE_VERSION}-for-${TUXONICE_TARGET}"
-TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}.patch.bz2"
-
-THINKPAD_ACPI_VERSION="0.21-20081111"
-THINKPAD_ACPI_TARGET="2.6.27.5"
-THINKPAD_ACPI_SRC="thinkpad-acpi-${THINKPAD_ACPI_VERSION}_v${THINKPAD_ACPI_TARGET}.patch.gz"
-THINKPAD_ACPI_URI="mirror://sourceforge/ibm-acpi/${THINKPAD_ACPI_SRC}"
-
-
-UNIPATCH_LIST=""
-
-MY_PV="${PV}"
-UNIPATCH_LIST="${UNIPATCH_LIST}
- ${FILESDIR}/${MY_PV}/colored-printk-2.6.26.patch
- ${FILESDIR}/${MY_PV}/01-disk-protect-for-2.6.27.2.patch
- ${FILESDIR}/${MY_PV}/02-ipw2200-inject-for-2.6.27.patch
- ${FILESDIR}/${MY_PV}/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch
- ${DISTDIR}/${THINKPAD_ACPI_SRC}
- ${DISTDIR}/${TUXONICE_SRC}.patch.bz2
- ${FILESDIR}/${MY_PV}/power-off-unused-ports.patch
-"
-
-
-UNIPATCH_STRICTORDER="yes"
-SRC_URI="${KERNEL_URI} ${GENPATCHES_URI} ${ARCH_URI} ${TUXONICE_URI} ${THINKPAD_ACPI_URI} ${IEEE80211_URI} ${HRT_URI}"
-
-
-RDEPEND="${RDEPEND}
- >=sys-apps/tuxonice-userui-0.7.3
- >=sys-power/hibernate-script-1.99"
-
-pkg_postinst() {
- kernel-2_pkg_postinst
- einfo "For more info on this patchset, and how to report problems, see:"
- einfo "${HOMEPAGE}"
- einfo "AND send a mail to linux-thinkpad mailinglist,"
- einfo "so the patch could be retested and rerated"
- einfo "In files dir is an example config suitable for T60"
- einfo "and hopefully all pci-express driven Thinkpads"
- einfo "but at all you should try for all Thinkpads"
- einfo "to NOT alter the given storage device controller configuration"
- einfo "for powersaving i recommend to append these kernel options:"
- einfo "usbcore.autosuspend=1 pcie_aspm.policy=powersave"
- einfo "additional powertweaks possible (depending on your hardware):"
- einfo "snd_hda_intel.power_save=1"
- einfo "echo 7 > /sys/bus/pci/drivers/iwl3945/0000\:03\:00.0/power_level"
- einfo "echo min_power > /sys/class/scsi_host/host0/link_power_management_policy"
- einfo "echo 5 >/proc/sys/vm/laptop_mode"
- einfo "echo 1500 >/proc/sys/vm/dirty_writeback_centisecs"
- einfo "echo 1 >/sys/devices/system/cpu/sched_mc_power_savings"
-}
diff --git a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r1.ebuild b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.31-r1.ebuild
index 6f67549..f20f127 100644
--- a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r1.ebuild
+++ b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.31-r1.ebuild
@@ -1,27 +1,28 @@
# Copyright 1999-2009 Gentoo Foundation
# Distributed under the terms of the GNU General Public License v2
-# $Header: sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r1.ebuild 2009 01 09
+# $Header: sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r2.ebuild 2009 01 19
ETYPE="sources"
K_WANT_GENPATCHES="base extras"
-K_GENPATCHES_VER="1"
+K_GENPATCHES_VER="2"
inherit kernel-2
detect_version
detect_arch
-KEYWORDS="~amd64 ~x86"
+#KEYWORDS="~amd64 ~x86"
+KEYWORDS=""
IUSE=""
HOMEPAGE="http://dev.gentoo.org/~dsd/genpatches http://www.tuxonice.net http://ibm-acpi.sourceforge.net/"
DESCRIPTION="TuxOnIce + Gentoo patches + Latest THINKPAD-Acpi + PCI-E ASPM + Colored Printk + Libata Powermanagement + Bay Fixes + hdaps + phc + ipw2200 inject"
-TUXONICE_VERSION="3.0-rc8"
-TUXONICE_TARGET="2.6.28"
-TUXONICE_SRC="tuxonice-${TUXONICE_VERSION}-for-${TUXONICE_TARGET}"
-TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}.patch.bz2"
+TUXONICE_VERSION="20090911"
+TUXONICE_TARGET="2.6.31"
+TUXONICE_SRC="current-tuxonice-for-${TUXONICE_TARGET}.patch-${TUXONICE_VERSION}-v1.bz2"
+TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}"
-THINKPAD_ACPI_VERSION="0.21-20081111"
-THINKPAD_ACPI_TARGET="2.6.28-rc7"
+THINKPAD_ACPI_VERSION="0.23-20090920"
+THINKPAD_ACPI_TARGET="2.6.31"
THINKPAD_ACPI_SRC="thinkpad-acpi-${THINKPAD_ACPI_VERSION}_v${THINKPAD_ACPI_TARGET}.patch.gz"
THINKPAD_ACPI_URI="mirror://sourceforge/ibm-acpi/${THINKPAD_ACPI_SRC}"
@@ -30,14 +31,15 @@ UNIPATCH_LIST=""
MY_PV="${PV}"
UNIPATCH_LIST="${UNIPATCH_LIST}
- ${FILESDIR}/${MY_PV}/colored-printk-2.6.26.patch
- ${FILESDIR}/${MY_PV}/01-mac80211_2.6.28-rc4-wl_frag+ack_v2.patch
- ${FILESDIR}/${MY_PV}/02-ipw2200-inject-for-2.6.27.patch
- ${FILESDIR}/${MY_PV}/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch
+ ${FILESDIR}/${MY_PV}/drm-next.patch
+ ${FILESDIR}/${MY_PV}/colored-printk-2.6.30.patch
+ ${FILESDIR}/${MY_PV}/linux-phc-0.3.2-2.6.31.patch
${DISTDIR}/${THINKPAD_ACPI_SRC}
- ${DISTDIR}/${TUXONICE_SRC}.patch.bz2
- ${FILESDIR}/${MY_PV}/power-off-unused-ports.patch
+ ${FILESDIR}/${MY_PV}/thinkpad-acpi-0.23-20090920-fix1.patch.gz
+ ${DISTDIR}/${TUXONICE_SRC}
"
+# ${FILESDIR}/${MY_PV}/02-ipw2200-inject-for-2.6.27.patch
+# ${FILESDIR}/${MY_PV}/mac80211.compat08082009.wl_frag+ack_v1.patch
UNIPATCH_STRICTORDER="yes"
@@ -46,7 +48,7 @@ SRC_URI="${KERNEL_URI} ${GENPATCHES_URI} ${ARCH_URI} ${TUXONICE_URI} ${THINKPAD_
RDEPEND="${RDEPEND}
>=sys-apps/tuxonice-userui-0.7.3
- >=sys-power/hibernate-script-1.99"
+ >=sys-power/hibernate-script-1.99-r1"
pkg_postinst() {
kernel-2_pkg_postinst
diff --git a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r2.ebuild b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.31.ebuild
index 87306c2..958ea38 100644
--- a/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.28-r2.ebuild
+++ b/sys-kernel/thinkpad-sources/thinkpad-sources-2.6.31.ebuild
@@ -15,14 +15,14 @@ HOMEPAGE="http://dev.gentoo.org/~dsd/genpatches http://www.tuxonice.net http://i
DESCRIPTION="TuxOnIce + Gentoo patches + Latest THINKPAD-Acpi + PCI-E ASPM + Colored Printk + Libata Powermanagement + Bay Fixes + hdaps + phc + ipw2200 inject"
-TUXONICE_VERSION="3.0-rc8"
-TUXONICE_TARGET="2.6.28"
-TUXONICE_SRC="tuxonice-${TUXONICE_VERSION}-for-${TUXONICE_TARGET}"
-TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}.patch.bz2"
+TUXONICE_VERSION="20090911"
+TUXONICE_TARGET="2.6.31"
+TUXONICE_SRC="current-tuxonice-for-${TUXONICE_TARGET}.patch-${TUXONICE_VERSION}-v1.bz2"
+TUXONICE_URI="http://www.tuxonice.net/downloads/all/${TUXONICE_SRC}"
-THINKPAD_ACPI_VERSION="0.22"
-THINKPAD_ACPI_TARGET="2.6.28"
-THINKPAD_ACPI_SRC="thinkpad-acpi-${THINKPAD_ACPI_VERSION}_v${THINKPAD_ACPI_TARGET}.gz"
+THINKPAD_ACPI_VERSION="0.23-20090920"
+THINKPAD_ACPI_TARGET="2.6.31"
+THINKPAD_ACPI_SRC="thinkpad-acpi-${THINKPAD_ACPI_VERSION}_v${THINKPAD_ACPI_TARGET}.patch.gz"
THINKPAD_ACPI_URI="mirror://sourceforge/ibm-acpi/${THINKPAD_ACPI_SRC}"
@@ -30,14 +30,14 @@ UNIPATCH_LIST=""
MY_PV="${PV}"
UNIPATCH_LIST="${UNIPATCH_LIST}
- ${FILESDIR}/${MY_PV}/colored-printk-2.6.26.patch
- ${FILESDIR}/${MY_PV}/01-mac80211_2.6.28-rc4-wl_frag+ack_v2.patch
- ${FILESDIR}/${MY_PV}/02-ipw2200-inject-for-2.6.27.patch
- ${FILESDIR}/${MY_PV}/linux-phc-0.3.2-kernel-vanilla-2.6.26.patch
+ ${FILESDIR}/${MY_PV}/colored-printk-2.6.30.patch
+ ${FILESDIR}/${MY_PV}/linux-phc-0.3.2-2.6.31.patch
${DISTDIR}/${THINKPAD_ACPI_SRC}
- ${DISTDIR}/${TUXONICE_SRC}.patch.bz2
- ${FILESDIR}/${MY_PV}/power-off-unused-ports.patch
+ ${FILESDIR}/${MY_PV}/thinkpad-acpi-0.23-20090920-fix1.patch.gz
+ ${DISTDIR}/${TUXONICE_SRC}
"
+# ${FILESDIR}/${MY_PV}/02-ipw2200-inject-for-2.6.27.patch
+# ${FILESDIR}/${MY_PV}/mac80211.compat08082009.wl_frag+ack_v1.patch
UNIPATCH_STRICTORDER="yes"