summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorShrenuj Bansal <shrenujb@codeaurora.org>2015-11-03 13:28:02 -0800
committerDavid Keitel <dkeitel@codeaurora.org>2016-03-23 21:21:32 -0700
commit479fb507ddfe64d4a22e93d001fd67db1287766c (patch)
tree07a9740c6dcc60c04a8a1a243d8e6455ee356947
parentf6536636d15a8fb894b4dda048e489b1b83f152d (diff)
msm: kgsl: Submit a set of critical packets right after ME init
During the initialization sequence, submit a set of important packets to the GPU in order to pre-load the I-cache with the critical ucode instructions. CRs-Fixed: 978777 Change-Id: Ic6a17b24d8c3aa383af8e25cf9ef771459d65796 Signed-off-by: Shrenuj Bansal <shrenujb@codeaurora.org>
-rw-r--r--Documentation/devicetree/bindings/gpu/adreno.txt11
-rw-r--r--arch/arm/boot/dts/qcom/msm8996-v3.dtsi1
-rw-r--r--arch/arm/boot/dts/qcom/msm8996pro.dtsi2
-rw-r--r--drivers/gpu/msm/adreno.c5
-rw-r--r--drivers/gpu/msm/adreno.h3
-rw-r--r--drivers/gpu/msm/adreno_a5xx.c155
-rw-r--r--drivers/gpu/msm/adreno_a5xx_packets.h1402
-rw-r--r--drivers/gpu/msm/kgsl_iommu.c55
-rw-r--r--drivers/gpu/msm/kgsl_mmu.h2
9 files changed, 1627 insertions, 9 deletions
diff --git a/Documentation/devicetree/bindings/gpu/adreno.txt b/Documentation/devicetree/bindings/gpu/adreno.txt
index 202335a3207f..cb9cd634ccb0 100644
--- a/Documentation/devicetree/bindings/gpu/adreno.txt
+++ b/Documentation/devicetree/bindings/gpu/adreno.txt
@@ -111,9 +111,6 @@ Optional Properties:
Force the GPU to use 32 bit data sizes even if
it is capable of doing 64 bit.
-- qcom,gpu-quirk-two-pass-use-wfi:
- Signal the GPU to set Set TWOPASSUSEWFI bit in
- A5XX_PC_DBG_ECO_CNTL (5XX only)
- qcom,gpu-speed-bin: GPU speed bin information in the format
<offset mask shift>
offset - offset of the efuse register from the base.
@@ -130,6 +127,14 @@ Optional Properties:
rendering thread is running on masked CPUs.
Bit 0 is for CPU-0, bit 1 is for CPU-1...
+GPU Quirks:
+- qcom,gpu-quirk-two-pass-use-wfi:
+ Signal the GPU to set Set TWOPASSUSEWFI bit in
+ A5XX_PC_DBG_ECO_CNTL (5XX only)
+- qcom,gpu-quirk-critical-packets:
+ Submit a set of critical PM4 packets when the GPU wakes up
+
+
The following properties are optional as collecting data via coresight might
not be supported for every chipset. The documentation for coresight
properties can be found in:
diff --git a/arch/arm/boot/dts/qcom/msm8996-v3.dtsi b/arch/arm/boot/dts/qcom/msm8996-v3.dtsi
index 1ee48883b7f2..e7199e412c7d 100644
--- a/arch/arm/boot/dts/qcom/msm8996-v3.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996-v3.dtsi
@@ -103,6 +103,7 @@
/* Quirks */
qcom,gpu-quirk-two-pass-use-wfi;
+ qcom,gpu-quirk-critical-packets;
qcom,gpu-pwrlevel-bins {
#address-cells = <1>;
diff --git a/arch/arm/boot/dts/qcom/msm8996pro.dtsi b/arch/arm/boot/dts/qcom/msm8996pro.dtsi
index cf3c9792e04a..c73989d0c98b 100644
--- a/arch/arm/boot/dts/qcom/msm8996pro.dtsi
+++ b/arch/arm/boot/dts/qcom/msm8996pro.dtsi
@@ -964,6 +964,8 @@
/* Updated chip ID */
qcom,chipid = <0x05030004>;
+ /delete-property/ qcom,gpu-quirk-critical-packets;
+
qcom,gpu-speed-bin = <0x413c 0x30000000 28>;
qcom,gpu-pwrlevel-bins {
diff --git a/drivers/gpu/msm/adreno.c b/drivers/gpu/msm/adreno.c
index bfd359b0d26b..3a016ae1711c 100644
--- a/drivers/gpu/msm/adreno.c
+++ b/drivers/gpu/msm/adreno.c
@@ -797,6 +797,7 @@ static struct {
} adreno_quirks[] = {
{ ADRENO_QUIRK_TWO_PASS_USE_WFI, "qcom,gpu-quirk-two-pass-use-wfi" },
{ ADRENO_QUIRK_IOMMU_SYNC, "qcom,gpu-quirk-iommu-sync" },
+ { ADRENO_QUIRK_CRITICAL_PACKETS, "qcom,gpu-quirk-critical-packets" },
};
static int adreno_of_get_power(struct adreno_device *adreno_dev,
@@ -1000,6 +1001,7 @@ static void _adreno_free_memories(struct adreno_device *adreno_dev)
static int adreno_remove(struct platform_device *pdev)
{
struct adreno_device *adreno_dev = adreno_get_dev(pdev);
+ struct adreno_gpudev *gpudev = ADRENO_GPU_DEVICE(adreno_dev);
struct kgsl_device *device;
if (adreno_dev == NULL)
@@ -1007,6 +1009,9 @@ static int adreno_remove(struct platform_device *pdev)
device = KGSL_DEVICE(adreno_dev);
+ if (gpudev->remove != NULL)
+ gpudev->remove(adreno_dev);
+
/* The memory is fading */
_adreno_free_memories(adreno_dev);
diff --git a/drivers/gpu/msm/adreno.h b/drivers/gpu/msm/adreno.h
index f40a14165acc..36577adc1e48 100644
--- a/drivers/gpu/msm/adreno.h
+++ b/drivers/gpu/msm/adreno.h
@@ -120,6 +120,8 @@
#define ADRENO_QUIRK_TWO_PASS_USE_WFI BIT(0)
/* Lock/unlock mutex to sync with the IOMMU */
#define ADRENO_QUIRK_IOMMU_SYNC BIT(1)
+/* Submit critical packets at GPU wake up */
+#define ADRENO_QUIRK_CRITICAL_PACKETS BIT(2)
/* Flags to control command packet settings */
#define KGSL_CMD_FLAGS_NONE 0
@@ -696,6 +698,7 @@ struct adreno_gpudev {
void (*snapshot)(struct adreno_device *, struct kgsl_snapshot *);
void (*platform_setup)(struct adreno_device *);
void (*init)(struct adreno_device *);
+ void (*remove)(struct adreno_device *);
int (*rb_init)(struct adreno_device *, struct adreno_ringbuffer *);
int (*hw_init)(struct adreno_device *);
int (*microcode_read)(struct adreno_device *);
diff --git a/drivers/gpu/msm/adreno_a5xx.c b/drivers/gpu/msm/adreno_a5xx.c
index f4ee6c06bb61..b0003f0e0c92 100644
--- a/drivers/gpu/msm/adreno_a5xx.c
+++ b/drivers/gpu/msm/adreno_a5xx.c
@@ -26,8 +26,17 @@
#include "kgsl_sharedmem.h"
#include "kgsl_log.h"
#include "kgsl.h"
+#include "adreno_a5xx_packets.h"
static int zap_ucode_loaded;
+static int critical_packet_constructed;
+
+static struct kgsl_memdesc crit_pkts;
+static unsigned int crit_pkts_dwords;
+static struct kgsl_memdesc crit_pkts_refbuf0;
+static struct kgsl_memdesc crit_pkts_refbuf1;
+static struct kgsl_memdesc crit_pkts_refbuf2;
+static struct kgsl_memdesc crit_pkts_refbuf3;
void a5xx_snapshot(struct adreno_device *adreno_dev,
struct kgsl_snapshot *snapshot);
@@ -444,15 +453,124 @@ static void a5xx_platform_setup(struct adreno_device *adreno_dev)
a5xx_check_features(adreno_dev);
}
+static void a5xx_critical_packet_destroy(struct adreno_device *adreno_dev)
+{
+ kgsl_free_global(&adreno_dev->dev, &crit_pkts);
+ kgsl_free_global(&adreno_dev->dev, &crit_pkts_refbuf1);
+ kgsl_free_global(&adreno_dev->dev, &crit_pkts_refbuf2);
+ kgsl_free_global(&adreno_dev->dev, &crit_pkts_refbuf3);
+
+ kgsl_sharedmem_free(&crit_pkts_refbuf0);
+
+}
+
+static void _do_fixup(const struct adreno_critical_fixup *fixups, int count,
+ uint64_t *gpuaddrs, unsigned int *buffer)
+{
+ int i;
+
+ for (i = 0; i < count; i++) {
+ buffer[fixups[i].lo_offset] =
+ lower_32_bits(gpuaddrs[fixups[i].buffer]) |
+ fixups[i].mem_offset;
+
+ buffer[fixups[i].hi_offset] =
+ upper_32_bits(gpuaddrs[fixups[i].buffer]);
+ }
+}
+
+static int a5xx_critical_packet_construct(struct adreno_device *adreno_dev)
+{
+
+ unsigned int *cmds;
+ uint64_t gpuaddrs[CRITICAL_PACKET_MAX];
+ int ret;
+
+ ret = kgsl_allocate_global(&adreno_dev->dev,
+ &crit_pkts, PAGE_SIZE,
+ KGSL_MEMFLAGS_GPUREADONLY, 0);
+ if (ret)
+ return ret;
+
+ ret = kgsl_allocate_user(&adreno_dev->dev, &crit_pkts_refbuf0,
+ NULL, PAGE_SIZE, KGSL_MEMFLAGS_SECURE);
+ if (ret)
+ return ret;
+
+ kgsl_add_global_secure_entry(&adreno_dev->dev,
+ &crit_pkts_refbuf0);
+
+ ret = kgsl_allocate_global(&adreno_dev->dev,
+ &crit_pkts_refbuf1,
+ PAGE_SIZE, 0, 0);
+ if (ret)
+ return ret;
+
+ ret = kgsl_allocate_global(&adreno_dev->dev,
+ &crit_pkts_refbuf2,
+ PAGE_SIZE, 0, 0);
+ if (ret)
+ return ret;
+
+ ret = kgsl_allocate_global(&adreno_dev->dev,
+ &crit_pkts_refbuf3,
+ PAGE_SIZE, 0, 0);
+ if (ret)
+ return ret;
+
+ cmds = crit_pkts.hostptr;
+
+ gpuaddrs[CRITICAL_PACKET0] = crit_pkts_refbuf0.gpuaddr;
+ gpuaddrs[CRITICAL_PACKET1] = crit_pkts_refbuf1.gpuaddr;
+ gpuaddrs[CRITICAL_PACKET2] = crit_pkts_refbuf2.gpuaddr;
+ gpuaddrs[CRITICAL_PACKET3] = crit_pkts_refbuf3.gpuaddr;
+
+ crit_pkts_dwords = ARRAY_SIZE(_a5xx_critical_pkts);
+
+ memcpy(cmds, _a5xx_critical_pkts, crit_pkts_dwords << 2);
+
+ _do_fixup(critical_pkt_fixups, ARRAY_SIZE(critical_pkt_fixups),
+ gpuaddrs, cmds);
+
+ cmds = crit_pkts_refbuf1.hostptr;
+ memcpy(cmds, _a5xx_critical_pkts_mem01,
+ ARRAY_SIZE(_a5xx_critical_pkts_mem01) << 2);
+
+ cmds = crit_pkts_refbuf2.hostptr;
+ memcpy(cmds, _a5xx_critical_pkts_mem02,
+ ARRAY_SIZE(_a5xx_critical_pkts_mem02) << 2);
+
+ cmds = crit_pkts_refbuf3.hostptr;
+ memcpy(cmds, _a5xx_critical_pkts_mem03,
+ ARRAY_SIZE(_a5xx_critical_pkts_mem03) << 2);
+
+ _do_fixup(critical_pkt_mem03_fixups,
+ ARRAY_SIZE(critical_pkt_mem03_fixups), gpuaddrs, cmds);
+
+ critical_packet_constructed = 1;
+
+ return 0;
+}
+
static void a5xx_init(struct adreno_device *adreno_dev)
{
if (ADRENO_FEATURE(adreno_dev, ADRENO_GPMU))
INIT_WORK(&adreno_dev->gpmu_work, a5xx_gpmu_reset);
INIT_WORK(&adreno_dev->irq_storm_work, a5xx_irq_storm_worker);
+
+ if (ADRENO_QUIRK(adreno_dev, ADRENO_QUIRK_CRITICAL_PACKETS))
+ a5xx_critical_packet_construct(adreno_dev);
+
a5xx_crashdump_init(adreno_dev);
}
+static void a5xx_remove(struct adreno_device *adreno_dev)
+{
+ if (ADRENO_QUIRK(adreno_dev, ADRENO_QUIRK_CRITICAL_PACKETS))
+ a5xx_critical_packet_destroy(adreno_dev);
+}
+
/**
* a5xx_protect_init() - Initializes register protection on a5xx
* @device: Pointer to the device structure
@@ -2406,6 +2524,36 @@ static void _set_ordinals(struct adreno_device *adreno_dev,
*cmds++ = 0x0;
}
+static int a5xx_critical_packet_submit(struct adreno_device *adreno_dev,
+ struct adreno_ringbuffer *rb)
+{
+ unsigned int *cmds;
+ int ret;
+
+ if (!critical_packet_constructed)
+ return 0;
+
+ cmds = adreno_ringbuffer_allocspace(rb, 4);
+ if (IS_ERR(cmds))
+ return PTR_ERR(cmds);
+
+ *cmds++ = cp_mem_packet(adreno_dev, CP_INDIRECT_BUFFER_PFE, 2, 1);
+ cmds += cp_gpuaddr(adreno_dev, cmds, crit_pkts.gpuaddr);
+ *cmds++ = crit_pkts_dwords;
+
+ ret = adreno_ringbuffer_submit_spin(rb, NULL, 20);
+ if (ret != 0) {
+ struct kgsl_device *device = &adreno_dev->dev;
+
+ dev_err(device->dev,
+ "Critical packet submission failed to idle\n");
+ spin_idle_debug(device);
+ kgsl_device_snapshot(device, NULL);
+ }
+
+ return ret;
+}
+
/*
* a5xx_rb_init() - Initialize ringbuffer
* @adreno_dev: Pointer to adreno device
@@ -2438,6 +2586,12 @@ static int a5xx_rb_init(struct adreno_device *adreno_dev,
kgsl_device_snapshot(device, NULL);
}
+ if (ADRENO_QUIRK(adreno_dev, ADRENO_QUIRK_CRITICAL_PACKETS)) {
+ ret = a5xx_critical_packet_submit(adreno_dev, rb);
+ if (ret)
+ return ret;
+ }
+
/* GPU comes up in secured mode, make it unsecured by default */
if (ADRENO_FEATURE(adreno_dev, ADRENO_CONTENT_PROTECTION))
ret = a5xx_switch_to_unsecure_mode(adreno_dev, rb);
@@ -3961,6 +4115,7 @@ struct adreno_gpudev adreno_a5xx_gpudev = {
.num_prio_levels = KGSL_PRIORITY_MAX_RB_LEVELS,
.platform_setup = a5xx_platform_setup,
.init = a5xx_init,
+ .remove = a5xx_remove,
.rb_init = a5xx_rb_init,
.hw_init = a5xx_hw_init,
.microcode_read = a5xx_microcode_read,
diff --git a/drivers/gpu/msm/adreno_a5xx_packets.h b/drivers/gpu/msm/adreno_a5xx_packets.h
new file mode 100644
index 000000000000..0029dd6bbd67
--- /dev/null
+++ b/drivers/gpu/msm/adreno_a5xx_packets.h
@@ -0,0 +1,1402 @@
+/* Copyright (c) 2016, The Linux Foundation. All rights reserved.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 and
+ * only version 2 as published by the Free Software Foundation.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ */
+
+enum adreno_critical_fixup_buffers {
+ CRITICAL_PACKET0 = 0,
+ CRITICAL_PACKET1,
+ CRITICAL_PACKET2,
+ CRITICAL_PACKET3,
+ CRITICAL_PACKET_MAX,
+};
+
+struct adreno_critical_fixup {
+ unsigned int lo_offset;
+ unsigned int hi_offset;
+ enum adreno_critical_fixup_buffers buffer;
+ uint64_t mem_offset;
+};
+
+static unsigned int _a5xx_critical_pkts[] = {
+ 0x400E0601, /* [0x0000] == TYPE4 == */
+ 0x00000002, /* [0x0001] A5X_HLSQ_MODE_CNTL (0x0E06)*/
+ 0x40E78A01, /* [0x0002] == TYPE4 == */
+ 0x000FFFFF, /* [0x0003] A5X_HLSQ_UPDATE_CNTL_CTX_0 (0xE78A)*/
+ 0x48E78401, /* [0x0004] == TYPE4 == */
+ 0x00000005, /* [0x0005] A5X_HLSQ_CNTL_0_CTX_0 (0xE784)*/
+ 0x40E78501, /* [0x0006] == TYPE4 == */
+ 0x00000009, /* [0x0007] A5X_HLSQ_CNTL_1_CTX_0 (0xE785)*/
+ 0x48E78B85, /* [0x0008] == TYPE4 == */
+ 0x00000001, /* [0x0009] A5X_HLSQ_VS_CONFIG_CTX_0 (0xE78B)*/
+ 0x00002085, /* [0x000A] A5X_HLSQ_PS_CONFIG_CTX_0 (0xE78C)*/
+ 0x00002084, /* [0x000B] A5X_HLSQ_HS_CONFIG_CTX_0 (0xE78D)*/
+ 0x00002084, /* [0x000C] A5X_HLSQ_DS_CONFIG_CTX_0 (0xE78E)*/
+ 0x00002084, /* [0x000D] A5X_HLSQ_GS_CONFIG_CTX_0 (0xE78F)*/
+ 0x40E58485, /* [0x000E] == TYPE4 == */
+ 0x00000001, /* [0x000F] A5X_SP_VS_CONFIG_CTX_0 (0xE584)*/
+ 0x00002085, /* [0x0010] A5X_SP_PS_CONFIG_CTX_0 (0xE585)*/
+ 0x00002084, /* [0x0011] A5X_SP_HS_CONFIG_CTX_0 (0xE586)*/
+ 0x00002084, /* [0x0012] A5X_SP_DS_CONFIG_CTX_0 (0xE587)*/
+ 0x00002084, /* [0x0013] A5X_SP_GS_CONFIG_CTX_0 (0xE588)*/
+ 0x40E79101, /* [0x0014] == TYPE4 == */
+ 0x00000004, /* [0x0015] A5X_HLSQ_VS_CNTL_CTX_0 (0xE791)*/
+ 0x40E79201, /* [0x0016] == TYPE4 == */
+ 0x00000002, /* [0x0017] A5X_HLSQ_PS_CNTL_CTX_0 (0xE792)*/
+ 0x48E58001, /* [0x0018] == TYPE4 == */
+ 0x00000010, /* [0x0019] A5X_SP_SP_CNTL_CTX_0 (0xE580)*/
+ 0x70B00043, /* [0x001A] == TYPE7: LOAD_STATE (30) == */
+ 0x00A00000, /* [0x001B] */
+ 0x00000000, /* [0x001C] */
+ 0x00000000, /* [0x001D] */
+ 0x20020003, /* [0x001E] */
+ 0x56D81803, /* [0x001F] */
+ 0x00000003, /* [0x0020] */
+ 0x20150000, /* [0x0021] */
+ 0x00000000, /* [0x0022] */
+ 0x00000200, /* [0x0023] */
+ 0x00000000, /* [0x0024] */
+ 0x201100F4, /* [0x0025] */
+ 0x00000000, /* [0x0026] */
+ 0x00000500, /* [0x0027] */
+ 0x00000C21, /* [0x0028] */
+ 0x20154004, /* [0x0029] */
+ 0x00000C20, /* [0x002A] */
+ 0x20154003, /* [0x002B] */
+ 0x00000C23, /* [0x002C] */
+ 0x20154008, /* [0x002D] */
+ 0x00000C22, /* [0x002E] */
+ 0x20156007, /* [0x002F] */
+ 0x00000000, /* [0x0030] */
+ 0x20554005, /* [0x0031] */
+ 0x3F800000, /* [0x0032] */
+ 0x20554006, /* [0x0033] */
+ 0x00000000, /* [0x0034] */
+ 0x03000000, /* [0x0035] */
+ 0x20050000, /* [0x0036] */
+ 0x46F00009, /* [0x0037] */
+ 0x201F0000, /* [0x0038] */
+ 0x4398000A, /* [0x0039] */
+ 0x201F0009, /* [0x003A] */
+ 0x43980809, /* [0x003B] */
+ 0x20180009, /* [0x003C] */
+ 0x46100809, /* [0x003D] */
+ 0x00091014, /* [0x003E] */
+ 0x62050009, /* [0x003F] */
+ 0x00000000, /* [0x0040] */
+ 0x00000500, /* [0x0041] */
+ 0x04800006, /* [0x0042] */
+ 0xC2C61300, /* [0x0043] */
+ 0x0280000E, /* [0x0044] */
+ 0xC2C61310, /* [0x0045] */
+ 0x00000000, /* [0x0046] */
+ 0x04800000, /* [0x0047] */
+ 0x00000000, /* [0x0048] */
+ 0x05000000, /* [0x0049] */
+ 0x00000000, /* [0x004A] */
+ 0x00000000, /* [0x004B] */
+ 0x00000000, /* [0x004C] */
+ 0x00000000, /* [0x004D] */
+ 0x00000000, /* [0x004E] */
+ 0x00000000, /* [0x004F] */
+ 0x00000000, /* [0x0050] */
+ 0x00000000, /* [0x0051] */
+ 0x00000000, /* [0x0052] */
+ 0x00000000, /* [0x0053] */
+ 0x00000000, /* [0x0054] */
+ 0x00000000, /* [0x0055] */
+ 0x00000000, /* [0x0056] */
+ 0x00000000, /* [0x0057] */
+ 0x00000000, /* [0x0058] */
+ 0x00000000, /* [0x0059] */
+ 0x00000000, /* [0x005A] */
+ 0x00000000, /* [0x005B] */
+ 0x00000000, /* [0x005C] */
+ 0x00000000, /* [0x005D] */
+ 0x70B00023, /* [0x005E] == TYPE7: LOAD_STATE (30) == */
+ 0x00700000, /* [0x005F] */
+ 0x00000000, /* [0x0060] */
+ 0x00000000, /* [0x0061] */
+ 0x00000000, /* [0x0062] */
+ 0x03000000, /* [0x0063] */
+ 0x00000000, /* [0x0064] */
+ 0x00000000, /* [0x0065] */
+ 0x00000000, /* [0x0066] */
+ 0x00000000, /* [0x0067] */
+ 0x00000000, /* [0x0068] */
+ 0x00000000, /* [0x0069] */
+ 0x00000000, /* [0x006A] */
+ 0x00000000, /* [0x006B] */
+ 0x00000000, /* [0x006C] */
+ 0x00000000, /* [0x006D] */
+ 0x00000000, /* [0x006E] */
+ 0x00000000, /* [0x006F] */
+ 0x00000000, /* [0x0070] */
+ 0x00000000, /* [0x0071] */
+ 0x00000000, /* [0x0072] */
+ 0x00000000, /* [0x0073] */
+ 0x00000000, /* [0x0074] */
+ 0x00000000, /* [0x0075] */
+ 0x00000000, /* [0x0076] */
+ 0x00000000, /* [0x0077] */
+ 0x00000000, /* [0x0078] */
+ 0x00000000, /* [0x0079] */
+ 0x00000000, /* [0x007A] */
+ 0x00000000, /* [0x007B] */
+ 0x00000000, /* [0x007C] */
+ 0x00000000, /* [0x007D] */
+ 0x00000000, /* [0x007E] */
+ 0x00000000, /* [0x007F] */
+ 0x00000000, /* [0x0080] */
+ 0x00000000, /* [0x0081] */
+ 0x70B08003, /* [0x0082] == TYPE7: LOAD_STATE (30) == */
+ 0x00620000, /* [0x0083] */
+ 0x00000000, /* [0x0084] */
+ 0x00000000, /* [0x0085] */
+ 0x70B08003, /* [0x0086] == TYPE7: LOAD_STATE (30) == */
+ 0x01220008, /* [0x0087] */
+ 0x00000000, /* [0x0088] */
+ 0x00000000, /* [0x0089] */
+ 0x70B0000B, /* [0x008A] == TYPE7: LOAD_STATE (30) == */
+ 0x01180000, /* [0x008B] */
+ 0x00000001, /* [0x008C] */
+ 0x00000000, /* [0x008D] */
+ 0x00000000, /* [0x008E] */
+ 0x00000000, /* [0x008F] */
+ 0x00000000, /* [0x0090] */
+ 0x00000000, /* [0x0091] */
+ 0x00000000, /* [0x0092] */
+ 0x00000000, /* [0x0093] */
+ 0x00000000, /* [0x0094] */
+ 0x01400000, /* [0x0095] */
+ 0x70460001, /* [0x0096] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000019, /* [0x0097] */
+ 0x70460004, /* [0x0098] == TYPE7: EVENT_WRITE (46) == */
+ 0x0000001D, /* [0x0099] */
+ 0x00000000, /* [0x009A] */
+ 0x00000000, /* [0x009B] */
+ 0x00000001, /* [0x009C] */
+ 0x70460004, /* [0x009D] == TYPE7: EVENT_WRITE (46) == */
+ 0x0000001C, /* [0x009E] */
+ 0x00000000, /* [0x009F] */
+ 0x00000000, /* [0x00A0] */
+ 0x00000001, /* [0x00A1] */
+ 0x480E9185, /* [0x00A2] == TYPE4 == */
+ 0x00000000, /* [0x00A3] A5X_UCHE_CACHE_INVALIDATE_MIN_LO (0x0E91)*/
+ 0x00000000, /* [0x00A4] A5X_UCHE_CACHE_INVALIDATE_MIN_HI (0x0E92)*/
+ 0x00000000, /* [0x00A5] A5X_UCHE_CACHE_INVALIDATE_MAX_LO (0x0E93)*/
+ 0x00000000, /* [0x00A6] A5X_UCHE_CACHE_INVALIDATE_MAX_HI (0x0E94)*/
+ 0x00000012, /* [0x00A7] A5X_UCHE_CACHE_INVALIDATE (0x0E95)*/
+ 0x70268000, /* [0x00A8] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x40E78A01, /* [0x00A9] == TYPE4 == */
+ 0x000FFFFF, /* [0x00AA] A5X_HLSQ_UPDATE_CNTL_CTX_0 (0xE78A)*/
+ 0x70D08003, /* [0x00AB] == TYPE7: PERFCOUNTER_ACTION (50) == */
+ 0x00000000, /* [0x00AC] */
+ 0x00000000, /* [0x00AD] */
+ 0x00000000, /* [0x00AE] */
+ 0x70D08003, /* [0x00AF] == TYPE7: PERFCOUNTER_ACTION (50) == */
+ 0x00000010, /* [0x00B0] */
+ 0x00000000, /* [0x00B1] */
+ 0x00000000, /* [0x00B2] */
+ 0x70268000, /* [0x00B3] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x48E38C01, /* [0x00B4] == TYPE4 == */
+ 0xFFFFFFFF, /* [0x00B5] A5X_PC_RESTART_INDEX_CTX_0 (0xE38C)*/
+ 0x40E38801, /* [0x00B6] == TYPE4 == */
+ 0x00000012, /* [0x00B7] A5X_PC_RASTER_CNTL_CTX_0 (0xE388)*/
+ 0x48E09102, /* [0x00B8] == TYPE4 == */
+ 0xFFC00010, /* [0x00B9] A5X_GRAS_SU_POINT_MINMAX_CTX_0 (0xE091)*/
+ 0x00000008, /* [0x00BA] A5X_GRAS_SU_POINT_SIZE_CTX_0 (0xE092)*/
+ 0x40E09901, /* [0x00BB] == TYPE4 == */
+ 0x00000000, /* [0x00BC] A5X_GRAS_SU_CONSERVATIVE_RAS_CNTL_CTX_0 (0xE099)*/
+ 0x48E0A401, /* [0x00BD] == TYPE4 == */
+ 0x00000000, /* [0x00BE] A5X_GRAS_SC_SCREEN_SCISSOR_CNTL_CTX_0 (0xE0A4)*/
+ 0x48E58A01, /* [0x00BF] == TYPE4 == */
+ 0x00000000, /* [0x00C0] A5X_SP_VS_CONFIG_MAX_CONST_CTX_0 (0xE58A)*/
+ 0x40E58B01, /* [0x00C1] == TYPE4 == */
+ 0x00000000, /* [0x00C2] A5X_SP_PS_CONFIG_MAX_CONST_CTX_0 (0xE58B)*/
+ 0x480CC601, /* [0x00C3] == TYPE4 == */
+ 0x00000044, /* [0x00C4] A5X_RB_MODE_CNTL (0x0CC6)*/
+ 0x400CC401, /* [0x00C5] == TYPE4 == */
+ 0x00100000, /* [0x00C6] A5X_RB_DBG_ECO_CNTL (0x0CC4)*/
+ 0x400E4201, /* [0x00C7] == TYPE4 == */
+ 0x00000000, /* [0x00C8] A5X_VFD_MODE_CNTL (0x0E42)*/
+ 0x480D0201, /* [0x00C9] == TYPE4 == */
+ 0x0000001F, /* [0x00CA] A5X_PC_MODE_CNTL (0x0D02)*/
+ 0x480EC201, /* [0x00CB] == TYPE4 == */
+ 0x0000001E, /* [0x00CC] A5X_SP_MODE_CNTL (0x0EC2)*/
+ 0x400EC001, /* [0x00CD] == TYPE4 == */
+ 0x40000800, /* [0x00CE] A5X_SP_DBG_ECO_CNTL (0x0EC0)*/
+ 0x400F0201, /* [0x00CF] == TYPE4 == */
+ 0x00000544, /* [0x00D0] A5X_TPL1_MODE_CNTL (0x0F02)*/
+ 0x400E0002, /* [0x00D1] == TYPE4 == */
+ 0x00000080, /* [0x00D2] A5X_HLSQ_TIMEOUT_THRESHOLD_0 (0x0E00)*/
+ 0x00000000, /* [0x00D3] A5X_HLSQ_TIMEOUT_THRESHOLD_1 (0x0E01)*/
+ 0x400E6001, /* [0x00D4] == TYPE4 == */
+ 0x00000400, /* [0x00D5] A5X_VPC_DBG_ECO_CNTL (0x0E60)*/
+ 0x400E0601, /* [0x00D6] == TYPE4 == */
+ 0x00000001, /* [0x00D7] A5X_HLSQ_MODE_CNTL (0x0E06)*/
+ 0x480E6201, /* [0x00D8] == TYPE4 == */
+ 0x00000000, /* [0x00D9] A5X_VPC_MODE_CNTL (0x0E62)*/
+ 0x70EC8005, /* [0x00DA] == TYPE7: SET_RENDER_MODE (6C) == */
+ 0x00000002, /* [0x00DB] */
+ 0x00000000, /* [0x00DC] */
+ 0x00000000, /* [0x00DD] */
+ 0x00000008, /* [0x00DE] */
+ 0x00000001, /* [0x00DF] */
+ 0x40E14001, /* [0x00E0] == TYPE4 == */
+ 0x00000204, /* [0x00E1] A5X_RB_CNTL_CTX_0 (0xE140)*/
+ 0x709D0001, /* [0x00E2] == TYPE7: SKIP_IB2_ENABLE_GLOBAL (1D) == */
+ 0x00000000, /* [0x00E3] */
+ 0x48E0EA02, /* [0x00E4] == TYPE4 == */
+ 0x00000000, /* [0x00E5] A5X_GRAS_SC_WINDOW_SCISSOR_TL_CTX_0 (0xE0EA)*/
+ 0x001F0073, /* [0x00E6] A5X_GRAS_SC_WINDOW_SCISSOR_BR_CTX_0 (0xE0EB)*/
+ 0x48E21102, /* [0x00E7] == TYPE4 == */
+ 0x00000000, /* [0x00E8] A5X_RB_RESOLVE_CNTL_1_CTX_0 (0xE211)*/
+ 0x00000000, /* [0x00E9] A5X_RB_RESOLVE_CNTL_2_CTX_0 (0xE212)*/
+ 0x480BC283, /* [0x00EA] == TYPE4 == */
+ 0x00000204, /* [0x00EB] UNKNOWN (0x0BC2)*/
+ 0x00000000, /* [0x00EC] UNKNOWN (0x0BC3)*/
+ 0x00000000, /* [0x00ED] UNKNOWN (0x0BC4)*/
+ 0x400BC502, /* [0x00EE] == TYPE4 == */
+ 0x00000000, /* [0x00EF] UNKNOWN (0x0BC5)*/
+ 0x00000000, /* [0x00F0] UNKNOWN (0x0BC6)*/
+ 0x480BD001, /* [0x00F1] == TYPE4 == */
+ 0x01100000, /* [0x00F2] UNKNOWN (0x0BD0)*/
+ 0x480BE002, /* [0x00F3] == TYPE4 == */
+ 0x00000000, /* [0x00F4] UNKNOWN (0x0BE0)*/
+ 0x00000000, /* [0x00F5] UNKNOWN (0x0BE1)*/
+ 0x480C0001, /* [0x00F6] == TYPE4 == */
+ 0x00000020, /* [0x00F7] A5X_VSC_PIPE_DATA_LENGTH_0 (0x0C00)*/
+ 0x48E3B001, /* [0x00F8] == TYPE4 == */
+ 0x00000003, /* [0x00F9] A5X_PC_POWER_CNTL_CTX_0 (0xE3B0)*/
+ 0x48E4F001, /* [0x00FA] == TYPE4 == */
+ 0x00000003, /* [0x00FB] A5X_VFD_POWER_CNTL_CTX_0 (0xE4F0)*/
+ 0x480E6201, /* [0x00FC] == TYPE4 == */
+ 0x00000001, /* [0x00FD] A5X_VPC_MODE_CNTL (0x0E62)*/
+ 0x70460001, /* [0x00FE] == TYPE7: EVENT_WRITE (46) == */
+ 0x0000002C, /* [0x00FF] */
+ 0x40E1D001, /* [0x0100] == TYPE4 == */
+ 0x00000000, /* [0x0101] A5X_RB_WINDOW_OFFSET_CTX_0 (0xE1D0)*/
+ 0x70BF8003, /* [0x0102] == TYPE7: INDIRECT_BUFFER_PFE (3F) == */
+ 0x00000000, /* [0x0103] */
+ 0x00000000, /* [0x0104] */
+ 0x000000A0, /* [0x0105] */
+ 0x70460001, /* [0x0106] == TYPE7: EVENT_WRITE (46) == */
+ 0x0000002D, /* [0x0107] */
+ 0x70460004, /* [0x0108] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000004, /* [0x0109] */
+ 0x00000000, /* [0x010A] */
+ 0x00000000, /* [0x010B] */
+ 0x00000000, /* [0x010C] */
+ 0x70268000, /* [0x010D] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x480E6201, /* [0x010E] == TYPE4 == */
+ 0x00000000, /* [0x010F] A5X_VPC_MODE_CNTL (0x0E62)*/
+ 0x48E3B001, /* [0x0110] == TYPE4 == */
+ 0x00000003, /* [0x0111] A5X_PC_POWER_CNTL_CTX_0 (0xE3B0)*/
+ 0x48E4F001, /* [0x0112] == TYPE4 == */
+ 0x00000003, /* [0x0113] A5X_VFD_POWER_CNTL_CTX_0 (0xE4F0)*/
+ 0x70268000, /* [0x0114] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x400CC701, /* [0x0115] == TYPE4 == */
+ 0x7C13C080, /* [0x0116] A5X_RB_CCU_CNTL (0x0CC7)*/
+ 0x70EC8005, /* [0x0117] == TYPE7: SET_RENDER_MODE (6C) == */
+ 0x00000001, /* [0x0118] */
+ 0x00000000, /* [0x0119] */
+ 0x00000000, /* [0x011A] */
+ 0x00000010, /* [0x011B] */
+ 0x00000001, /* [0x011C] */
+ 0x70EA0001, /* [0x011D] == TYPE7: PREEMPT_ENABLE_LOCAL (6A) == */
+ 0x00000000, /* [0x011E] */
+ 0x48E0EA02, /* [0x011F] == TYPE4 == */
+ 0x00000000, /* [0x0120] A5X_GRAS_SC_WINDOW_SCISSOR_TL_CTX_0 (0xE0EA)*/
+ 0x001F0073, /* [0x0121] A5X_GRAS_SC_WINDOW_SCISSOR_BR_CTX_0 (0xE0EB)*/
+ 0x48E21102, /* [0x0122] == TYPE4 == */
+ 0x00000000, /* [0x0123] A5X_RB_RESOLVE_CNTL_1_CTX_0 (0xE211)*/
+ 0x00030007, /* [0x0124] A5X_RB_RESOLVE_CNTL_2_CTX_0 (0xE212)*/
+ 0x70138000, /* [0x0125] == TYPE7: WAIT_FOR_ME (13) == */
+ 0x70640001, /* [0x0126] == TYPE7: SET_VISIBILITY_OVERRIDE (64) == */
+ 0x00000000, /* [0x0127] */
+ 0x702F8005, /* [0x0128] == TYPE7: SET_BIN_DATA (2F) == */
+ 0x00010000, /* [0x0129] */
+ 0x00000000, /* [0x012A] */
+ 0x00000000, /* [0x012B] */
+ 0x00000000, /* [0x012C] */
+ 0x00000000, /* [0x012D] */
+ 0x40E1D001, /* [0x012E] == TYPE4 == */
+ 0x00000000, /* [0x012F] A5X_RB_WINDOW_OFFSET_CTX_0 (0xE1D0)*/
+ 0x40E2A201, /* [0x0130] == TYPE4 == */
+ 0x00000001, /* [0x0131] A5X_VPC_SO_OVERRIDE_CTX_0 (0xE2A2)*/
+ 0x70640001, /* [0x0132] == TYPE7: SET_VISIBILITY_OVERRIDE (64) == */
+ 0x00000000, /* [0x0133] */
+ 0x48E1B285, /* [0x0134] == TYPE4 == */
+ 0x00000001, /* [0x0135] A5X_RB_DEPTH_BUFFER_INFO_CTX_0 (0xE1B2)*/
+ 0x00004000, /* [0x0136] A5X_RB_DEPTH_BUFFER_BASE_LO_CTX_0 (0xE1B3)*/
+ 0x00000000, /* [0x0137] A5X_RB_DEPTH_BUFFER_BASE_HI_CTX_0 (0xE1B4)*/
+ 0x00000004, /* [0x0138] A5X_RB_DEPTH_BUFFER_PITCH_CTX_0 (0xE1B5)*/
+ 0x000000C0, /* [0x0139] A5X_RB_DEPTH_BUFFER_ARRAY_PITCH_CTX_0 (0xE1B6)*/
+ 0x48E09801, /* [0x013A] == TYPE4 == */
+ 0x00000001, /* [0x013B] A5X_GRAS_SU_DEPTH_BUFFER_INFO_CTX_0 (0xE098)*/
+ 0x40E24083, /* [0x013C] == TYPE4 == */
+ 0x00000000, /* [0x013D] A5X_RB_DEPTH_FLAG_BUFFER_BASE_LO_CTX_0 (0xE240)*/
+ 0x00000000, /* [0x013E] A5X_RB_DEPTH_FLAG_BUFFER_BASE_HI_CTX_0 (0xE241)*/
+ 0x00000000, /* [0x013F] A5X_RB_DEPTH_FLAG_BUFFER_PITCH_CTX_0 (0xE242)*/
+ 0x40E15285, /* [0x0140] == TYPE4 == */
+ 0x00001230, /* [0x0141] A5X_RB_MRT_BUFFER_INFO_0_CTX_0 (0xE152)*/
+ 0x00000008, /* [0x0142] A5X_RB_MRT_BUFFER_PITCH_0_CTX_0 (0xE153)*/
+ 0x00000100, /* [0x0143] A5X_RB_MRT_BUFFER_ARRAY_PITCH_0_CTX_0 (0xE154)*/
+ 0x00000000, /* [0x0144] A5X_RB_MRT_BUFFER_BASE_LO_0_CTX_0 (0xE155)*/
+ 0x00000000, /* [0x0145] A5X_RB_MRT_BUFFER_BASE_HI_0_CTX_0 (0xE156)*/
+ 0x40E40801, /* [0x0146] == TYPE4 == */
+ 0x00000000, /* [0x0147] A5X_VFD_INDEX_OFFSET_CTX_0 (0xE408)*/
+ 0x48E40901, /* [0x0148] == TYPE4 == */
+ 0x00000000, /* [0x0149] A5X_VFD_INSTANCE_START_OFFSET_CTX_0 (0xE409)*/
+ 0x70BF8003, /* [0x014A] == TYPE7: INDIRECT_BUFFER_PFE (3F) == */
+ 0x00000000, /* [0x014B] */
+ 0x00000000, /* [0x014C] */
+ 0x00000112, /* [0x014D] */
+ 0x70230001, /* [0x014E] == TYPE7: SKIP_IB2_ENABLE_LOCAL (23) == */
+ 0x00000000, /* [0x014F] */
+ 0x70BF8003, /* [0x0150] == TYPE7: INDIRECT_BUFFER_PFE (3F) == */
+ 0x00000000, /* [0x0151] */
+ 0x00000000, /* [0x0152] */
+ 0x0000001B, /* [0x0153] */
+ 0x70EC8005, /* [0x0154] == TYPE7: SET_RENDER_MODE (6C) == */
+ 0x00000001, /* [0x0155] */
+ 0x00000000, /* [0x0156] */
+ 0x00000000, /* [0x0157] */
+ 0x00000000, /* [0x0158] */
+ 0x00000001, /* [0x0159] */
+ 0x70438003, /* [0x015A] == TYPE7: SET_DRAW_STATE (43) == */
+ 0x00080059, /* [0x015B] */
+ 0x00000000, /* [0x015C] */
+ 0x00000000, /* [0x015D] */
+ 0x70388003, /* [0x015E] == TYPE7: DRAW_INDX_OFFSET (38) == */
+ 0x00000888, /* [0x015F] */
+ 0x00000000, /* [0x0160] */
+ 0x00000002, /* [0x0161] */
+ 0x70A88003, /* [0x0162] == TYPE7: DRAW_INDIRECT (28) == */
+ 0x00200884, /* [0x0163] */
+ 0x00000000, /* [0x0164] */
+ 0x00000000, /* [0x0165] */
+ 0x70298006, /* [0x0166] == TYPE7: DRAW_INDX_INDIRECT (29) == */
+ 0x00200404, /* [0x0167] */
+ 0x00000000, /* [0x0168] */
+ 0x00000000, /* [0x0169] */
+ 0x00000006, /* [0x016A] */
+ 0x00000000, /* [0x016B] */
+ 0x00000000, /* [0x016C] */
+ 0x40E2A783, /* [0x016D] == TYPE4 == */
+ 0x00000000, /* [0x016E] A5X_VPC_SO_BUFFER_BASE_LO_0_CTX_0 (0xE2A7)*/
+ 0x00000000, /* [0x016F] A5X_VPC_SO_BUFFER_BASE_HI_0_CTX_0 (0xE2A8)*/
+ 0x00000004, /* [0x0170] A5X_VPC_SO_BUFFER_SIZE_0_CTX_0 (0xE2A9)*/
+ 0x48E2AC02, /* [0x0171] == TYPE4 == */
+ 0x00000000, /* [0x0172] A5X_VPC_SO_FLUSH_BASE_LO_0_CTX_0 (0xE2AC)*/
+ 0x00000000, /* [0x0173] A5X_VPC_SO_FLUSH_BASE_HI_0_CTX_0 (0xE2AD)*/
+ 0x70460001, /* [0x0174] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000011, /* [0x0175] */
+ 0x48E10001, /* [0x0176] == TYPE4 == */
+ 0x00000009, /* [0x0177] A5X_GRAS_LRZ_CNTL_CTX_0 (0xE100)*/
+ 0x70460001, /* [0x0178] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000026, /* [0x0179] */
+ 0x48E10001, /* [0x017A] == TYPE4 == */
+ 0x00000008, /* [0x017B] A5X_GRAS_LRZ_CNTL_CTX_0 (0xE100)*/
+ 0x40E10185, /* [0x017C] == TYPE4 == */
+ 0x00000000, /* [0x017D] A5X_GRAS_LRZ_BUFFER_BASE_LO_CTX_0 (0xE101)*/
+ 0x00000000, /* [0x017E] A5X_GRAS_LRZ_BUFFER_BASE_HI_CTX_0 (0xE102)*/
+ 0x00000001, /* [0x017F] A5X_GRAS_LRZ_BUFFER_PITCH_CTX_0 (0xE103)*/
+ 0x00000000, /* [0x0180] A5X_GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_LO_CTX_0 (0xE104)*/
+ 0x00000000, /* [0x0181] A5X_GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_HI_CTX_0 (0xE105)*/
+ 0x70460001, /* [0x0182] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000025, /* [0x0183] */
+ 0x70460001, /* [0x0184] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000019, /* [0x0185] */
+ 0x70460001, /* [0x0186] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000018, /* [0x0187] */
+ 0x70EA0001, /* [0x0188] == TYPE7: PREEMPT_ENABLE_LOCAL (6A) == */
+ 0x00000000, /* [0x0189] */
+ 0x70EC0001, /* [0x018A] == TYPE7: SET_RENDER_MODE (6C) == */
+ 0x00000006, /* [0x018B] */
+ 0x70438003, /* [0x018C] == TYPE7: SET_DRAW_STATE (43) == */
+ 0x00080059, /* [0x018D] */
+ 0x00000000, /* [0x018E] */
+ 0x00000000, /* [0x018F] */
+ 0x70DC0002, /* [0x0190] == TYPE7: CONTEXT_REG_BUNCH (5C) == */
+ 0x0000E2A1, /* [0x0191] */
+ 0x00008001, /* [0x0192] */
+ 0x709D0001, /* [0x0193] == TYPE7: SKIP_IB2_ENABLE_GLOBAL (1D) == */
+ 0x00000000, /* [0x0194] */
+ 0x70138000, /* [0x0195] == TYPE7: WAIT_FOR_ME (13) == */
+ 0x70640001, /* [0x0196] == TYPE7: SET_VISIBILITY_OVERRIDE (64) == */
+ 0x00000001, /* [0x0197] */
+ 0x70380007, /* [0x0198] == TYPE7: DRAW_INDX_OFFSET (38) == */
+ 0x00200506, /* [0x0199] */
+ 0x00000000, /* [0x019A] */
+ 0x00000004, /* [0x019B] */
+ 0x00000000, /* [0x019C] */
+ 0x00000000, /* [0x019D] */
+ 0x00000000, /* [0x019E] */
+ 0x00000004, /* [0x019F] */
+ 0x703D8005, /* [0x01A0] == TYPE7: MEM_WRITE (3D) == */
+ 0x00000000, /* [0x01A1] */
+ 0x00000000, /* [0x01A2] */
+ 0x00000001, /* [0x01A3] */
+ 0x00000001, /* [0x01A4] */
+ 0x00000001, /* [0x01A5] */
+ 0x70928000, /* [0x01A6] == TYPE7: WAIT_MEM_WRITES (12) == */
+ 0x70BF8003, /* [0x01A7] == TYPE7: INDIRECT_BUFFER_PFE (3F) == */
+ 0x00000000, /* [0x01A8] */
+ 0x00000000, /* [0x01A9] */
+ 0x00000028, /* [0x01AA] */
+ 0x70C48006, /* [0x01AB] == TYPE7: COND_EXEC (44) == */
+ 0x00000000, /* [0x01AC] */
+ 0x00000000, /* [0x01AD] */
+ 0x00000000, /* [0x01AE] */
+ 0x00000000, /* [0x01AF] */
+ 0x00000001, /* [0x01B0] */
+ 0x00000002, /* [0x01B1] */
+ 0x70100001, /* [0x01B2] == TYPE7: NOP (10) == */
+ 0x00000000, /* [0x01B3] */
+ 0x70C28003, /* [0x01B4] == TYPE7: MEM_TO_REG (42) == */
+ 0xC000E2AB, /* [0x01B5] */
+ 0x00000000, /* [0x01B6] */
+ 0x00000000, /* [0x01B7] */
+ 0x70230001, /* [0x01B8] == TYPE7: SKIP_IB2_ENABLE_LOCAL (23) == */
+ 0x00000000, /* [0x01B9] */
+ 0x70E90001, /* [0x01BA] == TYPE7: PREEMPT_ENABLE_GLOBAL (69) == */
+ 0x00000000, /* [0x01BB] */
+ 0x70BC8006, /* [0x01BC] == TYPE7: WAIT_REG_MEM (3C) == */
+ 0x00000010, /* [0x01BD] */
+ 0x00000000, /* [0x01BE] */
+ 0x00000000, /* [0x01BF] */
+ 0x00000001, /* [0x01C0] */
+ 0xFFFFFFFF, /* [0x01C1] */
+ 0x00000001, /* [0x01C2] */
+ 0x70738009, /* [0x01C3] == TYPE7: MEM_TO_MEM (73) == */
+ 0x20000004, /* [0x01C4] */
+ 0x00000000, /* [0x01C5] */
+ 0x00000000, /* [0x01C6] */
+ 0x00000000, /* [0x01C7] */
+ 0x00000000, /* [0x01C8] */
+ 0x00000000, /* [0x01C9] */
+ 0x00000000, /* [0x01CA] */
+ 0x00000000, /* [0x01CB] */
+ 0x00000000, /* [0x01CC] */
+ 0x70738009, /* [0x01CD] == TYPE7: MEM_TO_MEM (73) == */
+ 0xE0000004, /* [0x01CE] */
+ 0x00000000, /* [0x01CF] */
+ 0x00000000, /* [0x01D0] */
+ 0x00000000, /* [0x01D1] */
+ 0x00000000, /* [0x01D2] */
+ 0x00000000, /* [0x01D3] */
+ 0x00000000, /* [0x01D4] */
+ 0x00000000, /* [0x01D5] */
+ 0x00000000, /* [0x01D6] */
+ 0x70B50001, /* [0x01D7] == TYPE7: SET_SUBDRAW_SIZE (35) == */
+ 0x00000001, /* [0x01D8] */
+ 0x40E78A01, /* [0x01D9] == TYPE4 == */
+ 0x000FFFFF, /* [0x01DA] A5X_HLSQ_UPDATE_CNTL_CTX_0 (0xE78A)*/
+ 0x70268000, /* [0x01DB] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x400E0601, /* [0x01DC] == TYPE4 == */
+ 0x00000001, /* [0x01DD] A5X_HLSQ_MODE_CNTL (0x0E06)*/
+ 0x706E0004, /* [0x01DE] == TYPE7: COMPUTE_CHECKPOINT (6E) == */
+ 0x00000000, /* [0x01DF] */
+ 0x00000000, /* [0x01E0] */
+ 0x00000018, /* [0x01E1] */
+ 0x00000001, /* [0x01E2] */
+ 0x40E14001, /* [0x01E3] == TYPE4 == */
+ 0x00020000, /* [0x01E4] A5X_RB_CNTL_CTX_0 (0xE140)*/
+ 0x40E78A01, /* [0x01E5] == TYPE4 == */
+ 0x01F00000, /* [0x01E6] A5X_HLSQ_UPDATE_CNTL_CTX_0 (0xE78A)*/
+ 0x70268000, /* [0x01E7] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x48E38C01, /* [0x01E8] == TYPE4 == */
+ 0xFFFFFFFF, /* [0x01E9] A5X_PC_RESTART_INDEX_CTX_0 (0xE38C)*/
+ 0x480D0201, /* [0x01EA] == TYPE4 == */
+ 0x0000001F, /* [0x01EB] A5X_PC_MODE_CNTL (0x0D02)*/
+ 0x480EC201, /* [0x01EC] == TYPE4 == */
+ 0x0000001E, /* [0x01ED] A5X_SP_MODE_CNTL (0x0EC2)*/
+ 0x48E58001, /* [0x01EE] == TYPE4 == */
+ 0x00000000, /* [0x01EF] A5X_SP_SP_CNTL_CTX_0 (0xE580)*/
+ 0x40E2A201, /* [0x01F0] == TYPE4 == */
+ 0x00000001, /* [0x01F1] A5X_VPC_SO_OVERRIDE_CTX_0 (0xE2A2)*/
+ 0x70640001, /* [0x01F2] == TYPE7: SET_VISIBILITY_OVERRIDE (64) == */
+ 0x00000001, /* [0x01F3] */
+ 0x48E78401, /* [0x01F4] == TYPE4 == */
+ 0x00000881, /* [0x01F5] A5X_HLSQ_CNTL_0_CTX_0 (0xE784)*/
+ 0x40E5F001, /* [0x01F6] == TYPE4 == */
+ 0x00000C06, /* [0x01F7] A5X_SP_CS_CNTL_0_CTX_0 (0xE5F0)*/
+ 0x48E79001, /* [0x01F8] == TYPE4 == */
+ 0x00000001, /* [0x01F9] A5X_HLSQ_CS_CONFIG_CTX_0 (0xE790)*/
+ 0x48E79601, /* [0x01FA] == TYPE4 == */
+ 0x00000005, /* [0x01FB] A5X_HLSQ_CS_CNTL_CTX_0 (0xE796)*/
+ 0x48E58901, /* [0x01FC] == TYPE4 == */
+ 0x00000001, /* [0x01FD] A5X_SP_CS_CONFIG_CTX_0 (0xE589)*/
+ 0x40E7DC01, /* [0x01FE] == TYPE4 == */
+ 0x00000030, /* [0x01FF] A5X_HLSQ_CONTEXT_SWITCH_CS_SW_3_CTX_0 (0xE7DC)*/
+ 0x48E7DD01, /* [0x0200] == TYPE4 == */
+ 0x00000002, /* [0x0201] A5X_HLSQ_CONTEXT_SWITCH_CS_SW_4_CTX_0 (0xE7DD)*/
+ 0x40E7B001, /* [0x0202] == TYPE4 == */
+ 0x00000003, /* [0x0203] A5X_HLSQ_CS_NDRANGE_0_CTX_0 (0xE7B0)*/
+ 0x48E7B702, /* [0x0204] == TYPE4 == */
+ 0x00FCC0CF, /* [0x0205] A5X_HLSQ_CS_CNTL_0_CTX_0 (0xE7B7)*/
+ 0x00000000, /* [0x0206] A5X_HLSQ_CS_CNTL_1_CTX_0 (0xE7B8)*/
+ 0x40E7B983, /* [0x0207] == TYPE4 == */
+ 0x00000001, /* [0x0208] A5X_HLSQ_CS_KERNEL_GROUP_X_CTX_0 (0xE7B9)*/
+ 0x00000001, /* [0x0209] A5X_HLSQ_CS_KERNEL_GROUP_Y_CTX_0 (0xE7BA)*/
+ 0x00000001, /* [0x020A] A5X_HLSQ_CS_KERNEL_GROUP_Z_CTX_0 (0xE7BB)*/
+ 0x70B08003, /* [0x020B] == TYPE7: LOAD_STATE (30) == */
+ 0x00B60000, /* [0x020C] */
+ 0x00000000, /* [0x020D] */
+ 0x00000000, /* [0x020E] */
+ 0x70B08003, /* [0x020F] == TYPE7: LOAD_STATE (30) == */
+ 0x01360008, /* [0x0210] */
+ 0x00000000, /* [0x0211] */
+ 0x00000000, /* [0x0212] */
+ 0x70B0000B, /* [0x0213] == TYPE7: LOAD_STATE (30) == */
+ 0x00BC0000, /* [0x0214] */
+ 0x00000000, /* [0x0215] */
+ 0x00000000, /* [0x0216] */
+ 0x00000000, /* [0x0217] */
+ 0x00000000, /* [0x0218] */
+ 0x00000000, /* [0x0219] */
+ 0x00000000, /* [0x021A] */
+ 0x00000000, /* [0x021B] */
+ 0x00000000, /* [0x021C] */
+ 0x00000000, /* [0x021D] */
+ 0x00000000, /* [0x021E] */
+ 0x70B00007, /* [0x021F] == TYPE7: LOAD_STATE (30) == */
+ 0x00BC0000, /* [0x0220] */
+ 0x00000001, /* [0x0221] */
+ 0x00000000, /* [0x0222] */
+ 0x00040000, /* [0x0223] */
+ 0x00000000, /* [0x0224] */
+ 0x00040000, /* [0x0225] */
+ 0x00000000, /* [0x0226] */
+ 0x70B00007, /* [0x0227] == TYPE7: LOAD_STATE (30) == */
+ 0x00BC0000, /* [0x0228] */
+ 0x00000002, /* [0x0229] */
+ 0x00000000, /* [0x022A] */
+ 0x00000000, /* [0x022B] */
+ 0x00000000, /* [0x022C] */
+ 0x00000000, /* [0x022D] */
+ 0x00000000, /* [0x022E] */
+ 0x48E7B186, /* [0x022F] == TYPE4 == */
+ 0x00000001, /* [0x0230] A5X_HLSQ_CS_NDRANGE_1_CTX_0 (0xE7B1)*/
+ 0x00000000, /* [0x0231] A5X_HLSQ_CS_NDRANGE_2_CTX_0 (0xE7B2)*/
+ 0x00000001, /* [0x0232] A5X_HLSQ_CS_NDRANGE_3_CTX_0 (0xE7B3)*/
+ 0x00000000, /* [0x0233] A5X_HLSQ_CS_NDRANGE_4_CTX_0 (0xE7B4)*/
+ 0x00000001, /* [0x0234] A5X_HLSQ_CS_NDRANGE_5_CTX_0 (0xE7B5)*/
+ 0x00000000, /* [0x0235] A5X_HLSQ_CS_NDRANGE_6_CTX_0 (0xE7B6)*/
+ 0x70B30004, /* [0x0236] == TYPE7: EXEC_CS (33) == */
+ 0x00000000, /* [0x0237] */
+ 0x00000001, /* [0x0238] */
+ 0x00000001, /* [0x0239] */
+ 0x00000001, /* [0x023A] */
+ 0x480E6201, /* [0x023B] == TYPE4 == */
+ 0x00000001, /* [0x023C] A5X_VPC_MODE_CNTL (0x0E62)*/
+};
+
+/*
+ * These are fixups for the addresses _a5xx_critical_pkts[]. The first two
+ * numbers are the dword offsets into the buffer above. The third enum is a
+ * clue as to which buffer is being patched in and the final number is an offset
+ * in said buffer.
+ */
+static const struct adreno_critical_fixup critical_pkt_fixups[] = {
+ { 132, 133, CRITICAL_PACKET2, 0x0000 },
+ { 136, 137, CRITICAL_PACKET2, 0x0001 },
+ { 154, 155, CRITICAL_PACKET2, 0x0100 },
+ { 159, 160, CRITICAL_PACKET2, 0x0104 },
+ { 173, 174, CRITICAL_PACKET2, 0x0200 },
+ { 177, 178, CRITICAL_PACKET2, 0x0300 },
+ { 236, 237, CRITICAL_PACKET0, 0x0000 },
+ { 244, 245, CRITICAL_PACKET0, 0x0040 },
+ { 259, 260, CRITICAL_PACKET3, 0x0000 },
+ { 266, 267, CRITICAL_PACKET2, 0x0108 },
+ { 298, 299, CRITICAL_PACKET0, 0x0040 },
+ { 300, 301, CRITICAL_PACKET2, 0x0080 },
+ { 331, 332, CRITICAL_PACKET3, 0x02A0 },
+ { 337, 338, CRITICAL_PACKET3, 0x0700 },
+ { 348, 349, CRITICAL_PACKET3, 0x0920 },
+ { 356, 357, CRITICAL_PACKET1, 0x008C },
+ { 360, 361, CRITICAL_PACKET1, 0x0080 },
+ { 363, 364, CRITICAL_PACKET1, 0x008C },
+ { 366, 367, CRITICAL_PACKET0, 0x0100 },
+ { 370, 371, CRITICAL_PACKET0, 0x0120 },
+ { 381, 382, CRITICAL_PACKET1, 0x0480 },
+ { 384, 385, CRITICAL_PACKET1, 0x0400 },
+ { 398, 399, CRITICAL_PACKET3, 0x0920 },
+ { 413, 414, CRITICAL_PACKET1, 0x0080 },
+ { 417, 418, CRITICAL_PACKET1, 0x0300 },
+ { 424, 425, CRITICAL_PACKET3, 0x0880 },
+ { 428, 429, CRITICAL_PACKET1, 0x0300 },
+ { 430, 431, CRITICAL_PACKET1, 0x0300 },
+ { 438, 439, CRITICAL_PACKET1, 0x0300 },
+ { 446, 447, CRITICAL_PACKET1, 0x0300 },
+ { 453, 454, CRITICAL_PACKET1, 0x0320 },
+ { 455, 456, CRITICAL_PACKET1, 0x0300 },
+ { 457, 458, CRITICAL_PACKET1, 0x0304 },
+ { 459, 460, CRITICAL_PACKET1, 0x0308 },
+ { 463, 464, CRITICAL_PACKET1, 0x0320 },
+ { 465, 466, CRITICAL_PACKET1, 0x0300 },
+ { 467, 468, CRITICAL_PACKET1, 0x0304 },
+ { 469, 470, CRITICAL_PACKET1, 0x0308 },
+ { 525, 526, CRITICAL_PACKET1, 0x0160 },
+ { 529, 530, CRITICAL_PACKET1, 0x0101 },
+ { 535, 536, CRITICAL_PACKET1, 0x0140 },
+ { 539, 540, CRITICAL_PACKET0, 0x0800 },
+ { 555, 556, CRITICAL_PACKET1, 0x0140 },
+ { 557, 558, CRITICAL_PACKET0, 0x0800 },
+};
+
+static unsigned int _a5xx_critical_pkts_mem01[] = {
+ 0xBECCCCCD, 0x00000000, 0x3ECCCCCD, 0x00000000, 0x3ECCCCCD, 0x3ECCCCCD,
+ 0xBECCCCCD, 0x00000000, 0xBECCCCCD, 0x3ECCCCCD, 0x3ECCCCCD, 0x00000000,
+ 0xBECCCCCD, 0x00000000, 0x3ECCCCCD, 0x00000000, 0x3ECCCCCD, 0xBECCCCCD,
+ 0xBECCCCCD, 0x00000000, 0xBECCCCCD, 0xBECCCCCD, 0x3ECCCCCD, 0x00000000,
+ 0x3ECCCCCD, 0x00000000, 0x3ECCCCCD, 0x00000000, 0x3ECCCCCD, 0x00000000,
+ 0x00000000, 0x00000000, 0x00040003, 0x00090005, 0x000B000A, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000003, 0x00000001,
+ 0x00000006, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000003, 0x00000001, 0x00000003, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000001, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x3EF5C28F, 0x3ED1EB85, 0x3E6147AE, 0x3F800000,
+ 0x3E947AE1, 0x3E6147AE, 0x3D4CCCCD, 0x3F800000, 0x00000000, 0x20554002,
+ 0x3F800000, 0x20444003, 0x000000CF, 0x20044904, 0x00000000, 0x00000200,
+ 0x00050001, 0x42300001, 0x00000002, 0x20154005, 0x00000020, 0x20244006,
+ 0x00000000, 0x00000000, 0x10200001, 0x46500007, 0x20030004, 0x46D00004,
+ 0x00000000, 0x20554008, 0x00070001, 0x61830806, 0x00061020, 0x61808001,
+ 0x00040000, 0x42380800, 0x00010000, 0x42380800, 0x20040000, 0x46D80800,
+ 0x00000000, 0x20154007, 0x20020000, 0x46F80000, 0x00000007, 0x20154001,
+ 0x00000000, 0x00000200, 0x60030001, 0x43900004, 0x60030001, 0x43900001,
+ 0x00000000, 0x00000400, 0x00013600, 0xC6E20004, 0x40040003, 0x50180104,
+ 0x40060003, 0x40180803, 0x00000003, 0x20044006, 0x00000000, 0x00000500,
+ 0x00003609, 0xC7260201, 0x00000000, 0x03000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000,
+};
+
+static unsigned int _a5xx_critical_pkts_mem02[] = {
+ 0x00000000, 0x03000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x0000000C, 0x00000000, 0x00000000, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x8ACFE7F3, 0x00000000,
+ 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000, 0x00000000,
+};
+
+static unsigned int _a5xx_critical_pkts_mem03[] = {
+ 0x70438003, /* [0x0000] == TYPE7: SET_DRAW_STATE (43) == */
+ 0x0008003A, /* [0x0001] */
+ 0x00000000, /* [0x0002] */
+ 0x00000000, /* [0x0003] */
+ 0x70B08003, /* [0x0004] == TYPE7: LOAD_STATE (30) == */
+ 0x00620000, /* [0x0005] */
+ 0x00000000, /* [0x0006] */
+ 0x00000000, /* [0x0007] */
+ 0x40E29801, /* [0x0008] == TYPE4 == */
+ 0x0000FFFF, /* [0x0009] A5X_VPC_GS_SIV_CNTL_CTX_0 (0xE298)*/
+ 0x48E2A001, /* [0x000A] == TYPE4 == */
+ 0x000000FF, /* [0x000B] A5X_VPC_PS_PRIMITIVEID_CNTL_CTX_0 (0xE2A0)*/
+ 0x40E40185, /* [0x000C] == TYPE4 == */
+ 0x00FCFCFC, /* [0x000D] A5X_VFD_CNTL_1_CTX_0 (0xE401)*/
+ 0x0000FCFC, /* [0x000E] A5X_VFD_CNTL_2_CTX_0 (0xE402)*/
+ 0x0000FCFC, /* [0x000F] A5X_VFD_CNTL_3_CTX_0 (0xE403)*/
+ 0x000000FC, /* [0x0010] A5X_VFD_CNTL_4_CTX_0 (0xE404)*/
+ 0x00000000, /* [0x0011] A5X_VFD_CNTL_5_CTX_0 (0xE405)*/
+ 0x48E38F01, /* [0x0012] == TYPE4 == */
+ 0x00000000, /* [0x0013] A5X_PC_HS_PARAM_CTX_0 (0xE38F)*/
+ 0x48E58001, /* [0x0014] == TYPE4 == */
+ 0x00000010, /* [0x0015] A5X_SP_SP_CNTL_CTX_0 (0xE580)*/
+ 0x40E00001, /* [0x0016] == TYPE4 == */
+ 0x00000080, /* [0x0017] A5X_GRAS_CL_CNTL_CTX_0 (0xE000)*/
+ 0x40E09583, /* [0x0018] == TYPE4 == */
+ 0x00000000, /* [0x0019] A5X_GRAS_SU_POLY_OFFSET_SCALE_CTX_0 (0xE095)*/
+ 0x00000000, /* [0x001A] A5X_GRAS_SU_POLY_OFFSET_OFFSET_CTX_0 (0xE096)*/
+ 0x00000000, /* [0x001B] A5X_GRAS_SU_POLY_OFFSET_OFFSET_CLAMP_CTX_0 (0xE097)*/
+ 0x40E09001, /* [0x001C] == TYPE4 == */
+ 0x00000010, /* [0x001D] A5X_GRAS_SU_CNTL_CTX_0 (0xE090)*/
+ 0x40E0AA02, /* [0x001E] == TYPE4 == */
+ 0x00000000, /* [0x001F] A5X_GRAS_SC_SCREEN_SCISSOR_TL_0_CTX_0 (0xE0AA)*/
+ 0x001F0073, /* [0x0020] A5X_GRAS_SC_SCREEN_SCISSOR_BR_0_CTX_0 (0xE0AB)*/
+ 0x48E01086, /* [0x0021] == TYPE4 == */
+ 0x42680000, /* [0x0022] A5X_GRAS_CL_VIEWPORT_XOFFSET_0_CTX_0 (0xE010)*/
+ 0x42680000, /* [0x0023] A5X_GRAS_CL_VIEWPORT_XSCALE_0_CTX_0 (0xE011)*/
+ 0x41800000, /* [0x0024] A5X_GRAS_CL_VIEWPORT_YOFFSET_0_CTX_0 (0xE012)*/
+ 0xC1800000, /* [0x0025] A5X_GRAS_CL_VIEWPORT_YSCALE_0_CTX_0 (0xE013)*/
+ 0x3EFFFEE0, /* [0x0026] A5X_GRAS_CL_VIEWPORT_ZOFFSET_0_CTX_0 (0xE014)*/
+ 0x3EFFFEE0, /* [0x0027] A5X_GRAS_CL_VIEWPORT_ZSCALE_0_CTX_0 (0xE015)*/
+ 0x40E0CA02, /* [0x0028] == TYPE4 == */
+ 0x00000000, /* [0x0029] A5X_GRAS_SC_VIEWPORT_SCISSOR_TL_0_CTX_0 (0xE0CA)*/
+ 0x001F0073, /* [0x002A] A5X_GRAS_SC_VIEWPORT_SCISSOR_BR_0_CTX_0 (0xE0CB)*/
+ 0x40E00601, /* [0x002B] == TYPE4 == */
+ 0x0007FDFF, /* [0x002C] A5X_GRAS_CL_GUARDBAND_CLIP_ADJ_CTX_0 (0xE006)*/
+ 0x40E70401, /* [0x002D] == TYPE4 == */
+ 0x00000000, /* [0x002E] A5X_TPL1_TP_RAS_MSAA_CNTL_CTX_0 (0xE704)*/
+ 0x48E70501, /* [0x002F] == TYPE4 == */
+ 0x00000004, /* [0x0030] A5X_TPL1_TP_DEST_MSAA_CNTL_CTX_0 (0xE705)*/
+ 0x48E14201, /* [0x0031] == TYPE4 == */
+ 0x00000000, /* [0x0032] A5X_RB_RAS_MSAA_CNTL_CTX_0 (0xE142)*/
+ 0x40E14301, /* [0x0033] == TYPE4 == */
+ 0x00000004, /* [0x0034] A5X_RB_DEST_MSAA_CNTL_CTX_0 (0xE143)*/
+ 0x40E78683, /* [0x0035] == TYPE4 == */
+ 0xFCFCFCFC, /* [0x0036] A5X_HLSQ_CNTL_2_CTX_0 (0xE786)*/
+ 0xFCFCFCFC, /* [0x0037] A5X_HLSQ_CNTL_3_CTX_0 (0xE787)*/
+ 0xFCFCFCFC, /* [0x0038] A5X_HLSQ_CNTL_4_CTX_0 (0xE788)*/
+ 0x48E0A201, /* [0x0039] == TYPE4 == */
+ 0x00000000, /* [0x003A] A5X_GRAS_SC_RAS_MSAA_CNTL_CTX_0 (0xE0A2)*/
+ 0x40E0A301, /* [0x003B] == TYPE4 == */
+ 0x00000004, /* [0x003C] A5X_GRAS_SC_DEST_MSAA_CNTL_CTX_0 (0xE0A3)*/
+ 0x48E14101, /* [0x003D] == TYPE4 == */
+ 0x0000C089, /* [0x003E] A5X_RB_RENDER_CNTL_CTX_0 (0xE141)*/
+ 0x40E0A001, /* [0x003F] == TYPE4 == */
+ 0x00000009, /* [0x0040] A5X_GRAS_SC_CNTL_CTX_0 (0xE0A0)*/
+ 0x40E28001, /* [0x0041] == TYPE4 == */
+ 0x00010004, /* [0x0042] A5X_VPC_CNTL_0_CTX_0 (0xE280)*/
+ 0x40E38401, /* [0x0043] == TYPE4 == */
+ 0x00000404, /* [0x0044] A5X_PC_PRIMITIVE_CNTL_CTX_0 (0xE384)*/
+ 0x40E78501, /* [0x0045] == TYPE4 == */
+ 0x0000003F, /* [0x0046] A5X_HLSQ_CNTL_1_CTX_0 (0xE785)*/
+ 0x48E5D301, /* [0x0047] == TYPE4 == */
+ 0x00000030, /* [0x0048] A5X_SP_PS_MRT_0_CTX_0 (0xE5D3)*/
+ 0x48E5CB01, /* [0x0049] == TYPE4 == */
+ 0x00000100, /* [0x004A] A5X_SP_PS_OUTPUT_0_CTX_0 (0xE5CB)*/
+ 0x40E5CA01, /* [0x004B] == TYPE4 == */
+ 0x001F9F81, /* [0x004C] A5X_SP_PS_OUTPUT_CNTL_CTX_0 (0xE5CA)*/
+ 0x40E14601, /* [0x004D] == TYPE4 == */
+ 0x00000001, /* [0x004E] A5X_RB_PS_OUTPUT_CNTL_CTX_0 (0xE146)*/
+ 0x40E38E01, /* [0x004F] == TYPE4 == */
+ 0x00000000, /* [0x0050] A5X_PC_GS_PARAM_CTX_0 (0xE38E)*/
+ 0x40E28A01, /* [0x0051] == TYPE4 == */
+ 0x00000000, /* [0x0052] A5X_VPC_VARYING_REPLACE_MODE_0_CTX_0 (0xE28A)*/
+ 0x48E1A901, /* [0x0053] == TYPE4 == */
+ 0xFFFF0100, /* [0x0054] A5X_RB_BLEND_CNTL_CTX_0 (0xE1A9)*/
+ 0x40E5C901, /* [0x0055] == TYPE4 == */
+ 0x00000100, /* [0x0056] A5X_SP_BLEND_CNTL_CTX_0 (0xE5C9)*/
+ 0x40E76401, /* [0x0057] == TYPE4 == */
+ 0x00000000, /* [0x0058] A5X_TPL1_TP_PS_ROTATION_CNTL_CTX_0 (0xE764)*/
+ 0x48E09401, /* [0x0059] == TYPE4 == */
+ 0x00000000, /* [0x005A] A5X_GRAS_SU_DEPTH_PLANE_CNTL_CTX_0 (0xE094)*/
+ 0x40E1B001, /* [0x005B] == TYPE4 == */
+ 0x00000000, /* [0x005C] A5X_RB_DEPTH_PLANE_CNTL_CTX_0 (0xE1B0)*/
+ 0x48E1B101, /* [0x005D] == TYPE4 == */
+ 0x00000000, /* [0x005E] A5X_RB_DEPTH_CNTL_CTX_0 (0xE1B1)*/
+ 0x48E40001, /* [0x005F] == TYPE4 == */
+ 0x00000001, /* [0x0060] A5X_VFD_CNTL_0_CTX_0 (0xE400)*/
+ 0x48E40A04, /* [0x0061] == TYPE4 == */
+ 0x00000000, /* [0x0062] A5X_VFD_VERTEX_BUFFER_BASE_LO_0_CTX_0 (0xE40A)*/
+ 0x00000000, /* [0x0063] A5X_VFD_VERTEX_BUFFER_BASE_HI_0_CTX_0 (0xE40B)*/
+ 0x00000078, /* [0x0064] A5X_VFD_VERTEX_BUFFER_SIZE_0_CTX_0 (0xE40C)*/
+ 0x00000008, /* [0x0065] A5X_VFD_VERTEX_BUFFER_STRIDE_0_CTX_0 (0xE40D)*/
+ 0x40E48A02, /* [0x0066] == TYPE4 == */
+ 0xC6700000, /* [0x0067] A5X_VFD_FETCH_INSTR_0_CTX_0 (0xE48A)*/
+ 0x00000001, /* [0x0068] A5X_VFD_FETCH_INSTR_STEP_RATE_0_CTX_0 (0xE48B)*/
+ 0x48E4CA01, /* [0x0069] == TYPE4 == */
+ 0x0000000F, /* [0x006A] A5X_VFD_DEST_CNTL_0_CTX_0 (0xE4CA)*/
+ 0x48E10001, /* [0x006B] == TYPE4 == */
+ 0x00000008, /* [0x006C] A5X_GRAS_LRZ_CNTL_CTX_0 (0xE100)*/
+ 0x48E0A101, /* [0x006D] == TYPE4 == */
+ 0x00000004, /* [0x006E] A5X_GRAS_SC_BIN_CNTL_CTX_0 (0xE0A1)*/
+ 0x40E10185, /* [0x006F] == TYPE4 == */
+ 0x00000000, /* [0x0070] A5X_GRAS_LRZ_BUFFER_BASE_LO_CTX_0 (0xE101)*/
+ 0x00000000, /* [0x0071] A5X_GRAS_LRZ_BUFFER_BASE_HI_CTX_0 (0xE102)*/
+ 0x00000001, /* [0x0072] A5X_GRAS_LRZ_BUFFER_PITCH_CTX_0 (0xE103)*/
+ 0x00000000, /* [0x0073] A5X_GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_LO_CTX_0 (0xE104)*/
+ 0x00000000, /* [0x0074] A5X_GRAS_LRZ_FAST_CLEAR_BUFFER_BASE_HI_CTX_0 (0xE105)*/
+ 0x70388003, /* [0x0075] == TYPE7: DRAW_INDX_OFFSET (38) == */
+ 0x00200884, /* [0x0076] */
+ 0x00000001, /* [0x0077] */
+ 0x00000003, /* [0x0078] */
+ 0x70380007, /* [0x0079] == TYPE7: DRAW_INDX_OFFSET (38) == */
+ 0x00200404, /* [0x007A] */
+ 0x00000001, /* [0x007B] */
+ 0x00000003, /* [0x007C] */
+ 0x00000000, /* [0x007D] */
+ 0x00000000, /* [0x007E] */
+ 0x00000000, /* [0x007F] */
+ 0x00000006, /* [0x0080] */
+ 0x70460004, /* [0x0081] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000004, /* [0x0082] */
+ 0x00000000, /* [0x0083] */
+ 0x00000000, /* [0x0084] */
+ 0x00000001, /* [0x0085] */
+ 0x70268000, /* [0x0086] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x70A88003, /* [0x0087] == TYPE7: DRAW_INDIRECT (28) == */
+ 0x00200884, /* [0x0088] */
+ 0x00000000, /* [0x0089] */
+ 0x00000000, /* [0x008A] */
+ 0x70460004, /* [0x008B] == TYPE7: EVENT_WRITE (46) == */
+ 0x00000004, /* [0x008C] */
+ 0x00000000, /* [0x008D] */
+ 0x00000000, /* [0x008E] */
+ 0x00000001, /* [0x008F] */
+ 0x70268000, /* [0x0090] == TYPE7: WAIT_FOR_IDLE (26) == */
+ 0x70298006, /* [0x0091] == TYPE7: DRAW_INDX_INDIRECT (29) == */
+ 0x00200404, /* [0x0092] */
+ 0x00000000, /* [0x0093] */
+ 0x00000000, /* [0x0094] */
+ 0x00000006, /* [0x0095] */
+ 0x00000000, /* [0x0096] */
+ 0x00000000, /* [0x0097] */
+ 0x40E40801, /* [0x0098] == TYPE4 == */
+ 0x0000000D, /* [0x0099] A5X_VFD_INDEX_OFFSET_CTX_0 (0xE408)*/
+ 0x48E40901, /* [0x009A] == TYPE4 == */
+ 0x00000000, /* [0x009B] A5X_VFD_INSTANCE_START_OFFSET_CTX_0 (0xE409)*/
+ 0x70388003, /* [0x009C] == TYPE7: DRAW_INDX_OFFSET (38) == */
+ 0x00200884, /* [0x009D] */
+ 0x00000001, /* [0x009E] */
+ 0x00000003, /* [0x009F] */
+ 0x00000000, /* [0x00A0] */
+ 0x00000000, /* [0x00A1] */
+ 0x00000000, /* [0x00A2] */
+ 0x00000000, /* [0x00A3] */
+ 0x00000000, /* [0x00A4] */
+ 0x00000000, /* [0x00A5] */
+ 0x00000000, /* [0x00A6] */
+ 0x00000000, /* [0x00A7] */
+ 0x48E78401, /* [0x00A8] */
+ 0x00000881, /* [0x00A9] */
+ 0x40E5C001, /* [0x00AA] */
+ 0x0004001E, /* [0x00AB] */
+ 0x70438003, /* [0x00AC] */
+ 0x0000003A, /* [0x00AD] */
+ 0x00000000, /* [0x00AE] */
+ 0x00000000, /* [0x00AF] */
+ 0x70B00023, /* [0x00B0] */
+ 0x00600000, /* [0x00B1] */
+ 0x00000000, /* [0x00B2] */
+ 0x00000000, /* [0x00B3] */
+ 0x00000000, /* [0x00B4] */
+ 0x03000000, /* [0x00B5] */
+ 0x00000000, /* [0x00B6] */
+ 0x00000000, /* [0x00B7] */
+ 0x00000000, /* [0x00B8] */
+ 0x00000000, /* [0x00B9] */
+ 0x00000000, /* [0x00BA] */
+ 0x00000000, /* [0x00BB] */
+ 0x00000000, /* [0x00BC] */
+ 0x00000000, /* [0x00BD] */
+ 0x00000000, /* [0x00BE] */
+ 0x00000000, /* [0x00BF] */
+ 0x00000000, /* [0x00C0] */
+ 0x00000000, /* [0x00C1] */
+ 0x00000000, /* [0x00C2] */
+ 0x00000000, /* [0x00C3] */
+ 0x00000000, /* [0x00C4] */
+ 0x00000000, /* [0x00C5] */
+ 0x00000000, /* [0x00C6] */
+ 0x00000000, /* [0x00C7] */
+ 0x00000000, /* [0x00C8] */
+ 0x00000000, /* [0x00C9] */
+ 0x00000000, /* [0x00CA] */
+ 0x00000000, /* [0x00CB] */
+ 0x00000000, /* [0x00CC] */
+ 0x00000000, /* [0x00CD] */
+ 0x00000000, /* [0x00CE] */
+ 0x00000000, /* [0x00CF] */
+ 0x00000000, /* [0x00D0] */
+ 0x00000000, /* [0x00D1] */
+ 0x00000000, /* [0x00D2] */
+ 0x00000000, /* [0x00D3] */
+ 0x40E09301, /* [0x00D4] */
+ 0x00000000, /* [0x00D5] */
+ 0x40E38D01, /* [0x00D6] */
+ 0x00000000, /* [0x00D7] */
+ 0x40E29801, /* [0x00D8] */
+ 0x0000FFFF, /* [0x00D9] */
+ 0x48E28201, /* [0x00DA] */
+ 0xEAEAEAEA, /* [0x00DB] */
+ 0x40E29404, /* [0x00DC] */
+ 0xFFFFFFFF, /* [0x00DD] */
+ 0xFFFFFFFF, /* [0x00DE] */
+ 0xFFFFFFFF, /* [0x00DF] */
+ 0xFFFFFFFF, /* [0x00E0] */
+ 0x40E5DB01, /* [0x00E1] */
+ 0x00000000, /* [0x00E2] */
+ 0x48E14701, /* [0x00E3] */
+ 0x0000000F, /* [0x00E4] */
+ 0x70B00023, /* [0x00E5] */
+ 0x00700000, /* [0x00E6] */
+ 0x00000000, /* [0x00E7] */
+ 0x00000000, /* [0x00E8] */
+ 0x00003C00, /* [0x00E9] */
+ 0x20400000, /* [0x00EA] */
+ 0x00000000, /* [0x00EB] */
+ 0x20400001, /* [0x00EC] */
+ 0x00000000, /* [0x00ED] */
+ 0x20400002, /* [0x00EE] */
+ 0x00003C00, /* [0x00EF] */
+ 0x20400003, /* [0x00F0] */
+ 0x00000000, /* [0x00F1] */
+ 0x03000000, /* [0x00F2] */
+ 0x00000000, /* [0x00F3] */
+ 0x00000000, /* [0x00F4] */
+ 0x00000000, /* [0x00F5] */
+ 0x00000000, /* [0x00F6] */
+ 0x00000000, /* [0x00F7] */
+ 0x00000000, /* [0x00F8] */
+ 0x00000000, /* [0x00F9] */
+ 0x00000000, /* [0x00FA] */
+ 0x00000000, /* [0x00FB] */
+ 0x00000000, /* [0x00FC] */
+ 0x00000000, /* [0x00FD] */
+ 0x00000000, /* [0x00FE] */
+ 0x00000000, /* [0x00FF] */
+ 0x00000000, /* [0x0100] */
+ 0x00000000, /* [0x0101] */
+ 0x00000000, /* [0x0102] */
+ 0x00000000, /* [0x0103] */
+ 0x00000000, /* [0x0104] */
+ 0x00000000, /* [0x0105] */
+ 0x00000000, /* [0x0106] */
+ 0x00000000, /* [0x0107] */
+ 0x00000000, /* [0x0108] */
+ 0x48E2A001, /* [0x0109] */
+ 0x000000FF, /* [0x010A] */
+ 0x40E40185, /* [0x010B] */
+ 0x00FCFCFC, /* [0x010C] */
+ 0x0000FCFC, /* [0x010D] */
+ 0x0000FCFC, /* [0x010E] */
+ 0x000000FC, /* [0x010F] */
+ 0x00000000, /* [0x0110] */
+ 0x48E38F01, /* [0x0111] */
+ 0x00000000, /* [0x0112] */
+ 0x48E58001, /* [0x0113] */
+ 0x00000010, /* [0x0114] */
+ 0x40E1A801, /* [0x0115] */
+ 0x00000E00, /* [0x0116] */
+ 0x48E15001, /* [0x0117] */
+ 0x000007E0, /* [0x0118] */
+ 0x40E15101, /* [0x0119] */
+ 0x00000000, /* [0x011A] */
+ 0x40E00001, /* [0x011B] */
+ 0x00000080, /* [0x011C] */
+ 0x40E09583, /* [0x011D] */
+ 0x00000000, /* [0x011E] */
+ 0x00000000, /* [0x011F] */
+ 0x00000000, /* [0x0120] */
+ 0x40E09001, /* [0x0121] */
+ 0x00000010, /* [0x0122] */
+ 0x40E0AA02, /* [0x0123] */
+ 0x00000000, /* [0x0124] */
+ 0x001F0073, /* [0x0125] */
+ 0x48E01086, /* [0x0126] */
+ 0x42680000, /* [0x0127] */
+ 0x42680000, /* [0x0128] */
+ 0x41800000, /* [0x0129] */
+ 0xC1800000, /* [0x012A] */
+ 0x3EFFFEE0, /* [0x012B] */
+ 0x3EFFFEE0, /* [0x012C] */
+ 0x40E0CA02, /* [0x012D] */
+ 0x00000000, /* [0x012E] */
+ 0x001F0073, /* [0x012F] */
+ 0x40E00601, /* [0x0130] */
+ 0x0007FDFF, /* [0x0131] */
+ 0x40E70401, /* [0x0132] */
+ 0x00000000, /* [0x0133] */
+ 0x48E70501, /* [0x0134] */
+ 0x00000004, /* [0x0135] */
+ 0x48E14201, /* [0x0136] */
+ 0x00000000, /* [0x0137] */
+ 0x40E14301, /* [0x0138] */
+ 0x00000004, /* [0x0139] */
+ 0x40E78683, /* [0x013A] */
+ 0xFCFCFCFC, /* [0x013B] */
+ 0xFCFCFCFC, /* [0x013C] */
+ 0xFCFCFCFC, /* [0x013D] */
+ 0x48E0A201, /* [0x013E] */
+ 0x00000000, /* [0x013F] */
+ 0x40E0A301, /* [0x0140] */
+ 0x00000004, /* [0x0141] */
+ 0x48E1B285, /* [0x0142] */
+ 0x00000001, /* [0x0143] */
+ 0x00004000, /* [0x0144] */
+ 0x00000000, /* [0x0145] */
+ 0x00000004, /* [0x0146] */
+ 0x000000C0, /* [0x0147] */
+ 0x48E09801, /* [0x0148] */
+ 0x00000001, /* [0x0149] */
+ 0x48E00401, /* [0x014A] */
+ 0x00000000, /* [0x014B] */
+ 0x480CDD02, /* [0x014C] */
+ 0x00200074, /* [0x014D] */
+ 0x00000000, /* [0x014E] */
+ 0x40E15285, /* [0x014F] */
+ 0x00000A30, /* [0x0150] */
+ 0x00000008, /* [0x0151] */
+ 0x00000100, /* [0x0152] */
+ 0x00000000, /* [0x0153] */
+ 0x00000000, /* [0x0154] */
+ 0x48E14101, /* [0x0155] */
+ 0x0000C008, /* [0x0156] */
+ 0x40E0A001, /* [0x0157] */
+ 0x00000008, /* [0x0158] */
+ 0x40E28001, /* [0x0159] */
+ 0x00010004, /* [0x015A] */
+ 0x40E38401, /* [0x015B] */
+ 0x00000404, /* [0x015C] */
+ 0x40E78501, /* [0x015D] */
+ 0x0000003F, /* [0x015E] */
+ 0x48E5D301, /* [0x015F] */
+ 0x00000030, /* [0x0160] */
+ 0x48E5CB01, /* [0x0161] */
+ 0x00000100, /* [0x0162] */
+ 0x40E5CA01, /* [0x0163] */
+ 0x001F9F81, /* [0x0164] */
+ 0x40E14601, /* [0x0165] */
+ 0x00000001, /* [0x0166] */
+ 0x40E38E01, /* [0x0167] */
+ 0x00000000, /* [0x0168] */
+ 0x40E28A01, /* [0x0169] */
+ 0x00000000, /* [0x016A] */
+ 0x48E1A901, /* [0x016B] */
+ 0xFFFF0100, /* [0x016C] */
+ 0x40E5C901, /* [0x016D] */
+ 0x00000100, /* [0x016E] */
+ 0x40E76401, /* [0x016F] */
+ 0x00000000, /* [0x0170] */
+ 0x48E09401, /* [0x0171] */
+ 0x00000000, /* [0x0172] */
+ 0x40E1B001, /* [0x0173] */
+ 0x00000000, /* [0x0174] */
+ 0x48E1B101, /* [0x0175] */
+ 0x00000006, /* [0x0176] */
+ 0x48E40001, /* [0x0177] */
+ 0x00000001, /* [0x0178] */
+ 0x48E40A04, /* [0x0179] */
+ 0x00000000, /* [0x017A] */
+ 0x00000000, /* [0x017B] */
+ 0x00000078, /* [0x017C] */
+ 0x00000008, /* [0x017D] */
+ 0x40E48A02, /* [0x017E] */
+ 0xC6700000, /* [0x017F] */
+ 0x00000001, /* [0x0180] */
+ 0x48E4CA01, /* [0x0181] */
+ 0x0000000F, /* [0x0182] */
+ 0x48E10001, /* [0x0183] */
+ 0x00000008, /* [0x0184] */
+ 0x48E0A101, /* [0x0185] */
+ 0x00000000, /* [0x0186] */
+ 0x40E10185, /* [0x0187] */
+ 0x00000000, /* [0x0188] */
+ 0x00000000, /* [0x0189] */
+ 0x00000001, /* [0x018A] */
+ 0x00000000, /* [0x018B] */
+ 0x00000000, /* [0x018C] */
+ 0x70230001, /* [0x018D] */
+ 0x00000000, /* [0x018E] */
+ 0x70388003, /* [0x018F] */
+ 0x00200984, /* [0x0190] */
+ 0x00000001, /* [0x0191] */
+ 0x00000003, /* [0x0192] */
+ 0x70380007, /* [0x0193] */
+ 0x00200504, /* [0x0194] */
+ 0x00000001, /* [0x0195] */
+ 0x00000003, /* [0x0196] */
+ 0x00000000, /* [0x0197] */
+ 0x00000000, /* [0x0198] */
+ 0x00000000, /* [0x0199] */
+ 0x00000006, /* [0x019A] */
+ 0x70460004, /* [0x019B] */
+ 0x00000004, /* [0x019C] */
+ 0x00000000, /* [0x019D] */
+ 0x00000000, /* [0x019E] */
+ 0x00000000, /* [0x019F] */
+ 0x70268000, /* [0x01A0] */
+ 0x70A88003, /* [0x01A1] */
+ 0x00200984, /* [0x01A2] */
+ 0x00000000, /* [0x01A3] */
+ 0x00000000, /* [0x01A4] */
+ 0x70460004, /* [0x01A5] */
+ 0x00000004, /* [0x01A6] */
+ 0x00000000, /* [0x01A7] */
+ 0x00000000, /* [0x01A8] */
+ 0x00000001, /* [0x01A9] */
+ 0x70268000, /* [0x01AA] */
+ 0x70298006, /* [0x01AB] */
+ 0x00200504, /* [0x01AC] */
+ 0x00000000, /* [0x01AD] */
+ 0x00000000, /* [0x01AE] */
+ 0x00000006, /* [0x01AF] */
+ 0x00000000, /* [0x01B0] */
+ 0x00000000, /* [0x01B1] */
+ 0x40E40801, /* [0x01B2] */
+ 0x0000000D, /* [0x01B3] */
+ 0x48E40901, /* [0x01B4] */
+ 0x00000000, /* [0x01B5] */
+ 0x70388003, /* [0x01B6] */
+ 0x00200984, /* [0x01B7] */
+ 0x00000001, /* [0x01B8] */
+ 0x00000003, /* [0x01B9] */
+ 0x00000000, /* [0x01BA] */
+ 0x00000000, /* [0x01BB] */
+ 0x00000000, /* [0x01BC] */
+ 0x00000000, /* [0x01BD] */
+ 0x00000000, /* [0x01BE] */
+ 0x00000000, /* [0x01BF] */
+ 0x70EA0001, /* [0x01C0] */
+ 0x00000000, /* [0x01C1] */
+ 0x40E78A01, /* [0x01C2] */
+ 0x000FFFFF, /* [0x01C3] */
+ 0x40E09001, /* [0x01C4] */
+ 0x00000000, /* [0x01C5] */
+ 0x40E00501, /* [0x01C6] */
+ 0x00000000, /* [0x01C7] */
+ 0x40E00001, /* [0x01C8] */
+ 0x00000181, /* [0x01C9] */
+ 0x48E10001, /* [0x01CA] */
+ 0x00000000, /* [0x01CB] */
+ 0x40E21385, /* [0x01CC] */
+ 0x00000004, /* [0x01CD] */
+ 0x00000000, /* [0x01CE] */
+ 0x00000000, /* [0x01CF] */
+ 0x00000001, /* [0x01D0] */
+ 0x00000001, /* [0x01D1] */
+ 0x40E21C01, /* [0x01D2] */
+ 0x00000000, /* [0x01D3] */
+ 0x40E21001, /* [0x01D4] */
+ 0x00000000, /* [0x01D5] */
+ 0x70460004, /* [0x01D6] */
+ 0x0000001E, /* [0x01D7] */
+ 0x00000000, /* [0x01D8] */
+ 0x00000000, /* [0x01D9] */
+ 0x00000001, /* [0x01DA] */
+ 0x00000000, /* [0x01DB] */
+ 0x00000000, /* [0x01DC] */
+ 0x00000000, /* [0x01DD] */
+ 0x00000000, /* [0x01DE] */
+ 0x00000000, /* [0x01DF] */
+ 0x40E78A01, /* [0x01E0] */
+ 0x020FFFFF, /* [0x01E1] */
+ 0x48E78B85, /* [0x01E2] */
+ 0x00000001, /* [0x01E3] */
+ 0x00003F05, /* [0x01E4] */
+ 0x00003F04, /* [0x01E5] */
+ 0x00003F04, /* [0x01E6] */
+ 0x00003F04, /* [0x01E7] */
+ 0x48E79001, /* [0x01E8] */
+ 0x00000000, /* [0x01E9] */
+ 0x40E79101, /* [0x01EA] */
+ 0x00000002, /* [0x01EB] */
+ 0x40E79201, /* [0x01EC] */
+ 0x00000002, /* [0x01ED] */
+ 0x40E58485, /* [0x01EE] */
+ 0x00000001, /* [0x01EF] */
+ 0x00003F05, /* [0x01F0] */
+ 0x00003F04, /* [0x01F1] */
+ 0x00003F04, /* [0x01F2] */
+ 0x00003F04, /* [0x01F3] */
+ 0x48E58901, /* [0x01F4] */
+ 0x00000000, /* [0x01F5] */
+ 0x48E7C302, /* [0x01F6] */
+ 0x00000002, /* [0x01F7] */
+ 0x00000001, /* [0x01F8] */
+ 0x48E7D702, /* [0x01F9] */
+ 0x00000002, /* [0x01FA] */
+ 0x00000001, /* [0x01FB] */
+ 0x40E7C802, /* [0x01FC] */
+ 0x00000000, /* [0x01FD] */
+ 0x00000000, /* [0x01FE] */
+ 0x40E7CD02, /* [0x01FF] */
+ 0x00000000, /* [0x0200] */
+ 0x00000000, /* [0x0201] */
+ 0x48E7D202, /* [0x0202] */
+ 0x00000000, /* [0x0203] */
+ 0x00000000, /* [0x0204] */
+ 0x40E7DC02, /* [0x0205] */
+ 0x00000000, /* [0x0206] */
+ 0x00000000, /* [0x0207] */
+ 0x48E38901, /* [0x0208] */
+ 0x00000000, /* [0x0209] */
+ 0x48E29A01, /* [0x020A] */
+ 0x00FFFF00, /* [0x020B] */
+ 0x48E00101, /* [0x020C] */
+ 0x00000000, /* [0x020D] */
+ 0x40E29D01, /* [0x020E] */
+ 0x0000FF00, /* [0x020F] */
+ 0x40E59001, /* [0x0210] */
+ 0x00000406, /* [0x0211] */
+ 0x48E59201, /* [0x0212] */
+ 0x00000001, /* [0x0213] */
+ 0x40E59301, /* [0x0214] */
+ 0x00000F00, /* [0x0215] */
+ 0x40E5A301, /* [0x0216] */
+ 0x00000000, /* [0x0217] */
+ 0x48E38501, /* [0x0218] */
+ 0x00000000, /* [0x0219] */
+ 0x00000000, /* [0x021A] */
+ 0x00000000, /* [0x021B] */
+ 0x00000000, /* [0x021C] */
+ 0x00000000, /* [0x021D] */
+ 0x00000000, /* [0x021E] */
+ 0x00000000, /* [0x021F] */
+ 0x48210001, /* [0x0220] */
+ 0x86000000, /* [0x0221] */
+ 0x40218001, /* [0x0222] */
+ 0x86000000, /* [0x0223] */
+ 0x40211089, /* [0x0224] */
+ 0x00001331, /* [0x0225] */
+ 0x00000000, /* [0x0226] */
+ 0x00000000, /* [0x0227] */
+ 0x00020001, /* [0x0228] */
+ 0x00000000, /* [0x0229] */
+ 0x00000000, /* [0x022A] */
+ 0x00000000, /* [0x022B] */
+ 0x00000000, /* [0x022C] */
+ 0x00000000, /* [0x022D] */
+ 0x48218201, /* [0x022E] */
+ 0x00001331, /* [0x022F] */
+ 0x40214383, /* [0x0230] */
+ 0x00000000, /* [0x0231] */
+ 0x00000000, /* [0x0232] */
+ 0x00000001, /* [0x0233] */
+ 0x40210789, /* [0x0234] */
+ 0x00000021, /* [0x0235] */
+ 0x00000000, /* [0x0236] */
+ 0x00000000, /* [0x0237] */
+ 0x00020001, /* [0x0238] */
+ 0x00000000, /* [0x0239] */
+ 0x00000000, /* [0x023A] */
+ 0x00000000, /* [0x023B] */
+ 0x00000000, /* [0x023C] */
+ 0x00000000, /* [0x023D] */
+ 0x48218101, /* [0x023E] */
+ 0x00000021, /* [0x023F] */
+ 0x48218401, /* [0x0240] */
+ 0x00000001, /* [0x0241] */
+ 0x702C8005, /* [0x0242] */
+ 0x00000002, /* [0x0243] */
+ 0x00000000, /* [0x0244] */
+ 0x00010001, /* [0x0245] */
+ 0x00000000, /* [0x0246] */
+ 0x00010001, /* [0x0247] */
+ 0x70B00023, /* [0x0248] */
+ 0x00600000, /* [0x0249] */
+ 0x00000000, /* [0x024A] */
+ 0x00000000, /* [0x024B] */
+ 0x00000000, /* [0x024C] */
+ 0x03000000, /* [0x024D] */
+ 0x00000000, /* [0x024E] */
+ 0x00000000, /* [0x024F] */
+ 0x00000000, /* [0x0250] */
+ 0x00000000, /* [0x0251] */
+ 0x00000000, /* [0x0252] */
+ 0x00000000, /* [0x0253] */
+ 0x00000000, /* [0x0254] */
+ 0x00000000, /* [0x0255] */
+ 0x00000000, /* [0x0256] */
+ 0x00000000, /* [0x0257] */
+ 0x00000000, /* [0x0258] */
+ 0x00000000, /* [0x0259] */
+ 0x00000000, /* [0x025A] */
+ 0x00000000, /* [0x025B] */
+ 0x00000000, /* [0x025C] */
+ 0x00000000, /* [0x025D] */
+ 0x00000000, /* [0x025E] */
+ 0x00000000, /* [0x025F] */
+ 0x00000000, /* [0x0260] */
+ 0x00000000, /* [0x0261] */
+ 0x00000000, /* [0x0262] */
+ 0x00000000, /* [0x0263] */
+ 0x00000000, /* [0x0264] */
+ 0x00000000, /* [0x0265] */
+ 0x00000000, /* [0x0266] */
+ 0x00000000, /* [0x0267] */
+ 0x00000000, /* [0x0268] */
+ 0x00000000, /* [0x0269] */
+ 0x00000000, /* [0x026A] */
+ 0x00000000, /* [0x026B] */
+ 0x40E09301, /* [0x026C] */
+ 0x00000000, /* [0x026D] */
+ 0x40E38D01, /* [0x026E] */
+ 0x00000000, /* [0x026F] */
+ 0x40E29801, /* [0x0270] */
+ 0x0000FFFF, /* [0x0271] */
+ 0x48E28201, /* [0x0272] */
+ 0xEAEAEAEA, /* [0x0273] */
+ 0x40E29404, /* [0x0274] */
+ 0xFFFFFFFF, /* [0x0275] */
+ 0xFFFFFFFF, /* [0x0276] */
+ 0xFFFFFFFF, /* [0x0277] */
+ 0xFFFFFFFF, /* [0x0278] */
+ 0x40E5DB01, /* [0x0279] */
+ 0x00000000, /* [0x027A] */
+ 0x48E14701, /* [0x027B] */
+ 0x0000000F, /* [0x027C] */
+ 0x70B00023, /* [0x027D] */
+ 0x00700000, /* [0x027E] */
+ 0x00000000, /* [0x027F] */
+ 0x00000000, /* [0x0280] */
+ 0x00003C00, /* [0x0281] */
+ 0x20400000, /* [0x0282] */
+ 0x00000000, /* [0x0283] */
+ 0x20400001, /* [0x0284] */
+ 0x00000000, /* [0x0285] */
+ 0x20400002, /* [0x0286] */
+ 0x00003C00, /* [0x0287] */
+ 0x20400003, /* [0x0288] */
+ 0x00000000, /* [0x0289] */
+ 0x03000000, /* [0x028A] */
+ 0x00000000, /* [0x028B] */
+ 0x00000000, /* [0x028C] */
+ 0x00000000, /* [0x028D] */
+ 0x00000000, /* [0x028E] */
+ 0x00000000, /* [0x028F] */
+ 0x00000000, /* [0x0290] */
+ 0x00000000, /* [0x0291] */
+ 0x00000000, /* [0x0292] */
+ 0x00000000, /* [0x0293] */
+ 0x00000000, /* [0x0294] */
+ 0x00000000, /* [0x0295] */
+ 0x00000000, /* [0x0296] */
+ 0x00000000, /* [0x0297] */
+ 0x00000000, /* [0x0298] */
+ 0x00000000, /* [0x0299] */
+ 0x00000000, /* [0x029A] */
+ 0x00000000, /* [0x029B] */
+ 0x00000000, /* [0x029C] */
+ 0x00000000, /* [0x029D] */
+ 0x00000000, /* [0x029E] */
+ 0x00000000, /* [0x029F] */
+ 0x00000000, /* [0x02A0] */
+};
+
+/* Fixups for the IBs in _a5xx_critical_pkts_mem03 */
+static const struct adreno_critical_fixup critical_pkt_mem03_fixups[] = {
+ { 2, 3, CRITICAL_PACKET3, 0x0780 },
+ { 6, 7, CRITICAL_PACKET2, 0x0000 },
+ { 98, 99, CRITICAL_PACKET1, 0x0000 },
+ { 112, 113, CRITICAL_PACKET1, 0x0480 },
+ { 115, 116, CRITICAL_PACKET1, 0x0400 },
+ { 126, 127, CRITICAL_PACKET1, 0x0080 },
+ { 131, 132, CRITICAL_PACKET2, 0x0108 },
+ { 137, 138, CRITICAL_PACKET1, 0x00A0 },
+ { 141, 142, CRITICAL_PACKET2, 0x0108 },
+ { 147, 148, CRITICAL_PACKET1, 0x0080 },
+ { 150, 151, CRITICAL_PACKET1, 0x00C0 },
+ { 174, 175, CRITICAL_PACKET3, 0x0780 },
+ { 378, 379, CRITICAL_PACKET1, 0x0000 },
+ { 392, 393, CRITICAL_PACKET1, 0x0480 },
+ { 395, 396, CRITICAL_PACKET1, 0x0400 },
+ { 408, 409, CRITICAL_PACKET1, 0x0080 },
+ { 413, 414, CRITICAL_PACKET2, 0x0108 },
+ { 419, 420, CRITICAL_PACKET1, 0x00A0 },
+ { 423, 424, CRITICAL_PACKET2, 0x0108 },
+ { 429, 430, CRITICAL_PACKET1, 0x0080 },
+ { 432, 433, CRITICAL_PACKET1, 0x00C0 },
+ { 462, 463, CRITICAL_PACKET0, 0x0700 },
+ { 472, 473, CRITICAL_PACKET2, 0x0110 },
+ { 550, 551, CRITICAL_PACKET1, 0x0500 },
+ { 561, 562, CRITICAL_PACKET1, 0x0600 },
+ { 566, 567, CRITICAL_PACKET1, 0x0700 },
+};
diff --git a/drivers/gpu/msm/kgsl_iommu.c b/drivers/gpu/msm/kgsl_iommu.c
index fb5eba5bbd01..978d7ac405aa 100644
--- a/drivers/gpu/msm/kgsl_iommu.c
+++ b/drivers/gpu/msm/kgsl_iommu.c
@@ -93,6 +93,7 @@ static struct kmem_cache *addr_entry_cache;
#define GLOBAL_PT_ENTRIES 32
static struct kgsl_memdesc *global_pt_entries[GLOBAL_PT_ENTRIES];
+static struct kgsl_memdesc *kgsl_global_secure_pt_entry;
static int global_pt_count;
uint64_t global_pt_alloc;
@@ -119,6 +120,28 @@ static void kgsl_iommu_map_globals(struct kgsl_pagetable *pagetable)
}
}
+static void kgsl_iommu_unmap_global_secure_pt_entry(struct kgsl_pagetable
+ *pagetable)
+{
+ struct kgsl_memdesc *entry = kgsl_global_secure_pt_entry;
+
+ if (entry != NULL)
+ kgsl_mmu_unmap(pagetable, entry);
+
+}
+
+static void kgsl_map_global_secure_pt_entry(struct kgsl_pagetable *pagetable)
+{
+ int ret;
+ struct kgsl_memdesc *entry = kgsl_global_secure_pt_entry;
+
+ if (entry != NULL) {
+ entry->pagetable = pagetable;
+ ret = kgsl_mmu_map(pagetable, entry);
+ BUG_ON(ret);
+ }
+}
+
static void kgsl_iommu_remove_global(struct kgsl_mmu *mmu,
struct kgsl_memdesc *memdesc)
{
@@ -153,6 +176,14 @@ static void kgsl_iommu_add_global(struct kgsl_mmu *mmu,
global_pt_entries[global_pt_count++] = memdesc;
}
+void kgsl_add_global_secure_entry(struct kgsl_device *device,
+ struct kgsl_memdesc *memdesc)
+{
+ memdesc->gpuaddr = KGSL_IOMMU_SECURE_BASE;
+ kgsl_global_secure_pt_entry = memdesc;
+}
+
+
static inline void _iommu_sync_mmu_pc(bool lock)
{
if (need_iommu_sync == false)
@@ -694,8 +725,10 @@ static void kgsl_iommu_destroy_pagetable(struct kgsl_pagetable *pt)
iommu = _IOMMU_PRIV(mmu);
- if (KGSL_MMU_SECURE_PT == pt->name)
+ if (KGSL_MMU_SECURE_PT == pt->name) {
ctx = &iommu->ctx[KGSL_IOMMU_CONTEXT_SECURE];
+ kgsl_iommu_unmap_global_secure_pt_entry(pt);
+ }
else {
ctx = &iommu->ctx[KGSL_IOMMU_CONTEXT_USER];
kgsl_iommu_unmap_globals(pt);
@@ -716,10 +749,13 @@ static void setup_64bit_pagetable(struct kgsl_mmu *mmu,
struct kgsl_pagetable *pagetable,
struct kgsl_iommu_pt *pt)
{
+ unsigned int secure_global_size = kgsl_global_secure_pt_entry != NULL ?
+ kgsl_global_secure_pt_entry->size : 0;
if (mmu->secured && pagetable->name == KGSL_MMU_SECURE_PT) {
- pt->compat_va_start = KGSL_IOMMU_SECURE_BASE;
+ pt->compat_va_start = KGSL_IOMMU_SECURE_BASE +
+ secure_global_size;
pt->compat_va_end = KGSL_IOMMU_SECURE_END;
- pt->va_start = KGSL_IOMMU_SECURE_BASE;
+ pt->va_start = KGSL_IOMMU_SECURE_BASE + secure_global_size;
pt->va_end = KGSL_IOMMU_SECURE_END;
} else {
pt->compat_va_start = KGSL_IOMMU_SVM_BASE32;
@@ -744,15 +780,20 @@ static void setup_32bit_pagetable(struct kgsl_mmu *mmu,
struct kgsl_pagetable *pagetable,
struct kgsl_iommu_pt *pt)
{
+ unsigned int secure_global_size = kgsl_global_secure_pt_entry != NULL ?
+ kgsl_global_secure_pt_entry->size : 0;
if (mmu->secured) {
if (pagetable->name == KGSL_MMU_SECURE_PT) {
- pt->compat_va_start = KGSL_IOMMU_SECURE_BASE;
+ pt->compat_va_start = KGSL_IOMMU_SECURE_BASE +
+ secure_global_size;
pt->compat_va_end = KGSL_IOMMU_SECURE_END;
- pt->va_start = KGSL_IOMMU_SECURE_BASE;
+ pt->va_start = KGSL_IOMMU_SECURE_BASE +
+ secure_global_size;
pt->va_end = KGSL_IOMMU_SECURE_END;
} else {
pt->va_start = KGSL_IOMMU_SVM_BASE32;
- pt->va_end = KGSL_IOMMU_SECURE_BASE;
+ pt->va_end = KGSL_IOMMU_SECURE_BASE +
+ secure_global_size;
pt->compat_va_start = pt->va_start;
pt->compat_va_end = pt->va_end;
}
@@ -942,6 +983,8 @@ static int _init_secure_pt(struct kgsl_mmu *mmu, struct kgsl_pagetable *pt)
ctx->regbase = iommu->regbase + KGSL_IOMMU_CB0_OFFSET
+ (cb_num << KGSL_IOMMU_CB_SHIFT);
+ kgsl_map_global_secure_pt_entry(pt);
+
done:
if (ret)
_free_pt(ctx, pt);
diff --git a/drivers/gpu/msm/kgsl_mmu.h b/drivers/gpu/msm/kgsl_mmu.h
index 21a3470fcb55..576a6acd4538 100644
--- a/drivers/gpu/msm/kgsl_mmu.h
+++ b/drivers/gpu/msm/kgsl_mmu.h
@@ -155,6 +155,8 @@ int kgsl_mmu_start(struct kgsl_device *device);
struct kgsl_pagetable *kgsl_mmu_getpagetable_ptbase(struct kgsl_mmu *,
u64 ptbase);
+void kgsl_add_global_secure_entry(struct kgsl_device *device,
+ struct kgsl_memdesc *memdesc);
void kgsl_mmu_putpagetable(struct kgsl_pagetable *pagetable);
int kgsl_mmu_get_gpuaddr(struct kgsl_pagetable *pagetable,