diff options
author | Dave Airlie <airlied@redhat.com> | 2016-01-10 20:48:18 -0500 |
---|---|---|
committer | Dave Airlie <airlied@redhat.com> | 2016-01-10 20:48:18 -0500 |
commit | 57b4f7e68720e8a9f5e6e9e61446ec36822e4c57 (patch) | |
tree | e6143801b0e29d132695b8056872a4e56f5a699c | |
parent | b483666bb4939ee14501da9978e5f87e4aa22228 (diff) | |
parent | a18c91decee6ba4fc252bf82108adc1207dd1f86 (diff) |
Merge branch 'linux-4.5' of git://github.com/skeggsb/linux into drm-next
- gk20a instmem fixes / improvements
- more gm10x vs gm20x differences deal with
- better support for high-frequency hdmi modes
- pstate control interfaces moved to debugfs
- support for pcie link speed changes
- misc other fixes across the board
* 'linux-4.5' of git://github.com/skeggsb/linux: (50 commits)
drm/nouveau/pmu: prevent falcon from acking interrupts routed to the host
drm/nouveau/perf: change pcie speed on pstate change
drm/nouveau/perf: add fields for pci speed and width and use it for the pstates
drm/nouveau/bios/perf: parse the pci speed from the bios for tesla and newer cards
drm/nouveau/pci: implement pcie speed change for kepler+
drm/nouveau/pci: implement pcie speed change for Fermi
drm/nouveau/pci: implement pcie speed change for tesla
drm/nouveau/pci: implement generic code for pcie speed change
drm/nouveau/pci: add gk104 variant
drm/nouveau/pci: add gf106 variant
drm/nouveau/kms: take mode_config mutex in connector hotplug path
drm/nouveau/nouveau/perfmon: add interface files for current core voltage
drm/nouveau/sysfs: remove pstate interface
drm/nouveau/debugfs: add copy of sysfs pstate interface ported to debugfs
drm/nouveau/debugfs: we need a ctrl object for debugfs
drm/nouveau/debugfs: rename functions to indicate they are used inside drm
drm/nouveau/debugfs: add infrastructure to add files with other fops than only read
drm/nouveau/fifo/gf100: remove references to "daemon"
drm/nouveau/fb/nv50: remove references to "daemon"
drm/nouveau/clk: remove references to "daemon"
...
141 files changed, 4879 insertions, 3704 deletions
diff --git a/drivers/gpu/drm/nouveau/Kbuild b/drivers/gpu/drm/nouveau/Kbuild index a34b437dbc8f..2527bf4ca5d9 100644 --- a/drivers/gpu/drm/nouveau/Kbuild +++ b/drivers/gpu/drm/nouveau/Kbuild | |||
@@ -24,7 +24,6 @@ nouveau-y += nouveau_hwmon.o | |||
24 | nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o | 24 | nouveau-$(CONFIG_COMPAT) += nouveau_ioc32.o |
25 | nouveau-y += nouveau_nvif.o | 25 | nouveau-y += nouveau_nvif.o |
26 | nouveau-$(CONFIG_NOUVEAU_PLATFORM_DRIVER) += nouveau_platform.o | 26 | nouveau-$(CONFIG_NOUVEAU_PLATFORM_DRIVER) += nouveau_platform.o |
27 | nouveau-y += nouveau_sysfs.o | ||
28 | nouveau-y += nouveau_usif.o # userspace <-> nvif | 27 | nouveau-y += nouveau_usif.o # userspace <-> nvif |
29 | nouveau-y += nouveau_vga.o | 28 | nouveau-y += nouveau_vga.o |
30 | 29 | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl0002.h b/drivers/gpu/drm/nouveau/include/nvif/cl0002.h new file mode 100644 index 000000000000..6d72ed38da32 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl0002.h | |||
@@ -0,0 +1,66 @@ | |||
1 | #ifndef __NVIF_CL0002_H__ | ||
2 | #define __NVIF_CL0002_H__ | ||
3 | |||
4 | struct nv_dma_v0 { | ||
5 | __u8 version; | ||
6 | #define NV_DMA_V0_TARGET_VM 0x00 | ||
7 | #define NV_DMA_V0_TARGET_VRAM 0x01 | ||
8 | #define NV_DMA_V0_TARGET_PCI 0x02 | ||
9 | #define NV_DMA_V0_TARGET_PCI_US 0x03 | ||
10 | #define NV_DMA_V0_TARGET_AGP 0x04 | ||
11 | __u8 target; | ||
12 | #define NV_DMA_V0_ACCESS_VM 0x00 | ||
13 | #define NV_DMA_V0_ACCESS_RD 0x01 | ||
14 | #define NV_DMA_V0_ACCESS_WR 0x02 | ||
15 | #define NV_DMA_V0_ACCESS_RDWR (NV_DMA_V0_ACCESS_RD | NV_DMA_V0_ACCESS_WR) | ||
16 | __u8 access; | ||
17 | __u8 pad03[5]; | ||
18 | __u64 start; | ||
19 | __u64 limit; | ||
20 | /* ... chipset-specific class data */ | ||
21 | }; | ||
22 | |||
23 | struct nv50_dma_v0 { | ||
24 | __u8 version; | ||
25 | #define NV50_DMA_V0_PRIV_VM 0x00 | ||
26 | #define NV50_DMA_V0_PRIV_US 0x01 | ||
27 | #define NV50_DMA_V0_PRIV__S 0x02 | ||
28 | __u8 priv; | ||
29 | #define NV50_DMA_V0_PART_VM 0x00 | ||
30 | #define NV50_DMA_V0_PART_256 0x01 | ||
31 | #define NV50_DMA_V0_PART_1KB 0x02 | ||
32 | __u8 part; | ||
33 | #define NV50_DMA_V0_COMP_NONE 0x00 | ||
34 | #define NV50_DMA_V0_COMP_1 0x01 | ||
35 | #define NV50_DMA_V0_COMP_2 0x02 | ||
36 | #define NV50_DMA_V0_COMP_VM 0x03 | ||
37 | __u8 comp; | ||
38 | #define NV50_DMA_V0_KIND_PITCH 0x00 | ||
39 | #define NV50_DMA_V0_KIND_VM 0x7f | ||
40 | __u8 kind; | ||
41 | __u8 pad05[3]; | ||
42 | }; | ||
43 | |||
44 | struct gf100_dma_v0 { | ||
45 | __u8 version; | ||
46 | #define GF100_DMA_V0_PRIV_VM 0x00 | ||
47 | #define GF100_DMA_V0_PRIV_US 0x01 | ||
48 | #define GF100_DMA_V0_PRIV__S 0x02 | ||
49 | __u8 priv; | ||
50 | #define GF100_DMA_V0_KIND_PITCH 0x00 | ||
51 | #define GF100_DMA_V0_KIND_VM 0xff | ||
52 | __u8 kind; | ||
53 | __u8 pad03[5]; | ||
54 | }; | ||
55 | |||
56 | struct gf119_dma_v0 { | ||
57 | __u8 version; | ||
58 | #define GF119_DMA_V0_PAGE_LP 0x00 | ||
59 | #define GF119_DMA_V0_PAGE_SP 0x01 | ||
60 | __u8 page; | ||
61 | #define GF119_DMA_V0_KIND_PITCH 0x00 | ||
62 | #define GF119_DMA_V0_KIND_VM 0xff | ||
63 | __u8 kind; | ||
64 | __u8 pad03[5]; | ||
65 | }; | ||
66 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl0046.h b/drivers/gpu/drm/nouveau/include/nvif/cl0046.h new file mode 100644 index 000000000000..a6a71f4ad91e --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl0046.h | |||
@@ -0,0 +1,28 @@ | |||
1 | #ifndef __NVIF_CL0046_H__ | ||
2 | #define __NVIF_CL0046_H__ | ||
3 | |||
4 | #define NV04_DISP_NTFY_VBLANK 0x00 | ||
5 | #define NV04_DISP_NTFY_CONN 0x01 | ||
6 | |||
7 | struct nv04_disp_mthd_v0 { | ||
8 | __u8 version; | ||
9 | #define NV04_DISP_SCANOUTPOS 0x00 | ||
10 | __u8 method; | ||
11 | __u8 head; | ||
12 | __u8 pad03[5]; | ||
13 | }; | ||
14 | |||
15 | struct nv04_disp_scanoutpos_v0 { | ||
16 | __u8 version; | ||
17 | __u8 pad01[7]; | ||
18 | __s64 time[2]; | ||
19 | __u16 vblanks; | ||
20 | __u16 vblanke; | ||
21 | __u16 vtotal; | ||
22 | __u16 vline; | ||
23 | __u16 hblanks; | ||
24 | __u16 hblanke; | ||
25 | __u16 htotal; | ||
26 | __u16 hline; | ||
27 | }; | ||
28 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl006b.h b/drivers/gpu/drm/nouveau/include/nvif/cl006b.h new file mode 100644 index 000000000000..309ab8a3d9e8 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl006b.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __NVIF_CL006B_H__ | ||
2 | #define __NVIF_CL006B_H__ | ||
3 | |||
4 | struct nv03_channel_dma_v0 { | ||
5 | __u8 version; | ||
6 | __u8 chid; | ||
7 | __u8 pad02[2]; | ||
8 | __u32 offset; | ||
9 | __u64 pushbuf; | ||
10 | }; | ||
11 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl0080.h b/drivers/gpu/drm/nouveau/include/nvif/cl0080.h new file mode 100644 index 000000000000..331620a52afa --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl0080.h | |||
@@ -0,0 +1,45 @@ | |||
1 | #ifndef __NVIF_CL0080_H__ | ||
2 | #define __NVIF_CL0080_H__ | ||
3 | |||
4 | struct nv_device_v0 { | ||
5 | __u8 version; | ||
6 | __u8 pad01[7]; | ||
7 | __u64 device; /* device identifier, ~0 for client default */ | ||
8 | }; | ||
9 | |||
10 | #define NV_DEVICE_V0_INFO 0x00 | ||
11 | #define NV_DEVICE_V0_TIME 0x01 | ||
12 | |||
13 | struct nv_device_info_v0 { | ||
14 | __u8 version; | ||
15 | #define NV_DEVICE_INFO_V0_IGP 0x00 | ||
16 | #define NV_DEVICE_INFO_V0_PCI 0x01 | ||
17 | #define NV_DEVICE_INFO_V0_AGP 0x02 | ||
18 | #define NV_DEVICE_INFO_V0_PCIE 0x03 | ||
19 | #define NV_DEVICE_INFO_V0_SOC 0x04 | ||
20 | __u8 platform; | ||
21 | __u16 chipset; /* from NV_PMC_BOOT_0 */ | ||
22 | __u8 revision; /* from NV_PMC_BOOT_0 */ | ||
23 | #define NV_DEVICE_INFO_V0_TNT 0x01 | ||
24 | #define NV_DEVICE_INFO_V0_CELSIUS 0x02 | ||
25 | #define NV_DEVICE_INFO_V0_KELVIN 0x03 | ||
26 | #define NV_DEVICE_INFO_V0_RANKINE 0x04 | ||
27 | #define NV_DEVICE_INFO_V0_CURIE 0x05 | ||
28 | #define NV_DEVICE_INFO_V0_TESLA 0x06 | ||
29 | #define NV_DEVICE_INFO_V0_FERMI 0x07 | ||
30 | #define NV_DEVICE_INFO_V0_KEPLER 0x08 | ||
31 | #define NV_DEVICE_INFO_V0_MAXWELL 0x09 | ||
32 | __u8 family; | ||
33 | __u8 pad06[2]; | ||
34 | __u64 ram_size; | ||
35 | __u64 ram_user; | ||
36 | char chip[16]; | ||
37 | char name[64]; | ||
38 | }; | ||
39 | |||
40 | struct nv_device_time_v0 { | ||
41 | __u8 version; | ||
42 | __u8 pad01[7]; | ||
43 | __u64 time; | ||
44 | }; | ||
45 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl506e.h b/drivers/gpu/drm/nouveau/include/nvif/cl506e.h new file mode 100644 index 000000000000..aa94b8cf9679 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl506e.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef __NVIF_CL506E_H__ | ||
2 | #define __NVIF_CL506E_H__ | ||
3 | |||
4 | struct nv50_channel_dma_v0 { | ||
5 | __u8 version; | ||
6 | __u8 chid; | ||
7 | __u8 pad02[6]; | ||
8 | __u64 vm; | ||
9 | __u64 pushbuf; | ||
10 | __u64 offset; | ||
11 | }; | ||
12 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl506f.h b/drivers/gpu/drm/nouveau/include/nvif/cl506f.h new file mode 100644 index 000000000000..3b7101966de4 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl506f.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef __NVIF_CL506F_H__ | ||
2 | #define __NVIF_CL506F_H__ | ||
3 | |||
4 | struct nv50_channel_gpfifo_v0 { | ||
5 | __u8 version; | ||
6 | __u8 chid; | ||
7 | __u8 pad02[2]; | ||
8 | __u32 ilength; | ||
9 | __u64 ioffset; | ||
10 | __u64 pushbuf; | ||
11 | __u64 vm; | ||
12 | }; | ||
13 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl5070.h b/drivers/gpu/drm/nouveau/include/nvif/cl5070.h new file mode 100644 index 000000000000..d15c296b5f33 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl5070.h | |||
@@ -0,0 +1,99 @@ | |||
1 | #ifndef __NVIF_CL5070_H__ | ||
2 | #define __NVIF_CL5070_H__ | ||
3 | |||
4 | #define NV50_DISP_MTHD 0x00 | ||
5 | |||
6 | struct nv50_disp_mthd_v0 { | ||
7 | __u8 version; | ||
8 | #define NV50_DISP_SCANOUTPOS 0x00 | ||
9 | __u8 method; | ||
10 | __u8 head; | ||
11 | __u8 pad03[5]; | ||
12 | }; | ||
13 | |||
14 | struct nv50_disp_scanoutpos_v0 { | ||
15 | __u8 version; | ||
16 | __u8 pad01[7]; | ||
17 | __s64 time[2]; | ||
18 | __u16 vblanks; | ||
19 | __u16 vblanke; | ||
20 | __u16 vtotal; | ||
21 | __u16 vline; | ||
22 | __u16 hblanks; | ||
23 | __u16 hblanke; | ||
24 | __u16 htotal; | ||
25 | __u16 hline; | ||
26 | }; | ||
27 | |||
28 | struct nv50_disp_mthd_v1 { | ||
29 | __u8 version; | ||
30 | #define NV50_DISP_MTHD_V1_DAC_PWR 0x10 | ||
31 | #define NV50_DISP_MTHD_V1_DAC_LOAD 0x11 | ||
32 | #define NV50_DISP_MTHD_V1_SOR_PWR 0x20 | ||
33 | #define NV50_DISP_MTHD_V1_SOR_HDA_ELD 0x21 | ||
34 | #define NV50_DISP_MTHD_V1_SOR_HDMI_PWR 0x22 | ||
35 | #define NV50_DISP_MTHD_V1_SOR_LVDS_SCRIPT 0x23 | ||
36 | #define NV50_DISP_MTHD_V1_SOR_DP_PWR 0x24 | ||
37 | #define NV50_DISP_MTHD_V1_PIOR_PWR 0x30 | ||
38 | __u8 method; | ||
39 | __u16 hasht; | ||
40 | __u16 hashm; | ||
41 | __u8 pad06[2]; | ||
42 | }; | ||
43 | |||
44 | struct nv50_disp_dac_pwr_v0 { | ||
45 | __u8 version; | ||
46 | __u8 state; | ||
47 | __u8 data; | ||
48 | __u8 vsync; | ||
49 | __u8 hsync; | ||
50 | __u8 pad05[3]; | ||
51 | }; | ||
52 | |||
53 | struct nv50_disp_dac_load_v0 { | ||
54 | __u8 version; | ||
55 | __u8 load; | ||
56 | __u8 pad02[2]; | ||
57 | __u32 data; | ||
58 | }; | ||
59 | |||
60 | struct nv50_disp_sor_pwr_v0 { | ||
61 | __u8 version; | ||
62 | __u8 state; | ||
63 | __u8 pad02[6]; | ||
64 | }; | ||
65 | |||
66 | struct nv50_disp_sor_hda_eld_v0 { | ||
67 | __u8 version; | ||
68 | __u8 pad01[7]; | ||
69 | __u8 data[]; | ||
70 | }; | ||
71 | |||
72 | struct nv50_disp_sor_hdmi_pwr_v0 { | ||
73 | __u8 version; | ||
74 | __u8 state; | ||
75 | __u8 max_ac_packet; | ||
76 | __u8 rekey; | ||
77 | __u8 pad04[4]; | ||
78 | }; | ||
79 | |||
80 | struct nv50_disp_sor_lvds_script_v0 { | ||
81 | __u8 version; | ||
82 | __u8 pad01[1]; | ||
83 | __u16 script; | ||
84 | __u8 pad04[4]; | ||
85 | }; | ||
86 | |||
87 | struct nv50_disp_sor_dp_pwr_v0 { | ||
88 | __u8 version; | ||
89 | __u8 state; | ||
90 | __u8 pad02[6]; | ||
91 | }; | ||
92 | |||
93 | struct nv50_disp_pior_pwr_v0 { | ||
94 | __u8 version; | ||
95 | __u8 state; | ||
96 | __u8 type; | ||
97 | __u8 pad03[5]; | ||
98 | }; | ||
99 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl507a.h b/drivers/gpu/drm/nouveau/include/nvif/cl507a.h new file mode 100644 index 000000000000..12e0643b78bd --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl507a.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __NVIF_CL507A_H__ | ||
2 | #define __NVIF_CL507A_H__ | ||
3 | |||
4 | struct nv50_disp_cursor_v0 { | ||
5 | __u8 version; | ||
6 | __u8 head; | ||
7 | __u8 pad02[6]; | ||
8 | }; | ||
9 | |||
10 | #define NV50_DISP_CURSOR_V0_NTFY_UEVENT 0x00 | ||
11 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl507b.h b/drivers/gpu/drm/nouveau/include/nvif/cl507b.h new file mode 100644 index 000000000000..99e9d8c47f60 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl507b.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __NVIF_CL507B_H__ | ||
2 | #define __NVIF_CL507B_H__ | ||
3 | |||
4 | struct nv50_disp_overlay_v0 { | ||
5 | __u8 version; | ||
6 | __u8 head; | ||
7 | __u8 pad02[6]; | ||
8 | }; | ||
9 | |||
10 | #define NV50_DISP_OVERLAY_V0_NTFY_UEVENT 0x00 | ||
11 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl507c.h b/drivers/gpu/drm/nouveau/include/nvif/cl507c.h new file mode 100644 index 000000000000..6af70dbdfd9f --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl507c.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef __NVIF_CL507C_H__ | ||
2 | #define __NVIF_CL507C_H__ | ||
3 | |||
4 | struct nv50_disp_base_channel_dma_v0 { | ||
5 | __u8 version; | ||
6 | __u8 head; | ||
7 | __u8 pad02[6]; | ||
8 | __u64 pushbuf; | ||
9 | }; | ||
10 | |||
11 | #define NV50_DISP_BASE_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
12 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl507d.h b/drivers/gpu/drm/nouveau/include/nvif/cl507d.h new file mode 100644 index 000000000000..5ab0c9e4c6a3 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl507d.h | |||
@@ -0,0 +1,11 @@ | |||
1 | #ifndef __NVIF_CL507D_H__ | ||
2 | #define __NVIF_CL507D_H__ | ||
3 | |||
4 | struct nv50_disp_core_channel_dma_v0 { | ||
5 | __u8 version; | ||
6 | __u8 pad01[7]; | ||
7 | __u64 pushbuf; | ||
8 | }; | ||
9 | |||
10 | #define NV50_DISP_CORE_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
11 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl507e.h b/drivers/gpu/drm/nouveau/include/nvif/cl507e.h new file mode 100644 index 000000000000..c06209f3cac4 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl507e.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef __NVIF_CL507E_H__ | ||
2 | #define __NVIF_CL507E_H__ | ||
3 | |||
4 | struct nv50_disp_overlay_channel_dma_v0 { | ||
5 | __u8 version; | ||
6 | __u8 head; | ||
7 | __u8 pad02[6]; | ||
8 | __u64 pushbuf; | ||
9 | }; | ||
10 | |||
11 | #define NV50_DISP_OVERLAY_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
12 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl826e.h b/drivers/gpu/drm/nouveau/include/nvif/cl826e.h new file mode 100644 index 000000000000..05e6ef7cd190 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl826e.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef __NVIF_CL826E_H__ | ||
2 | #define __NVIF_CL826E_H__ | ||
3 | |||
4 | struct g82_channel_dma_v0 { | ||
5 | __u8 version; | ||
6 | __u8 chid; | ||
7 | __u8 pad02[6]; | ||
8 | __u64 vm; | ||
9 | __u64 pushbuf; | ||
10 | __u64 offset; | ||
11 | }; | ||
12 | |||
13 | #define G82_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
14 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl826f.h b/drivers/gpu/drm/nouveau/include/nvif/cl826f.h new file mode 100644 index 000000000000..cecafcb1e954 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl826f.h | |||
@@ -0,0 +1,15 @@ | |||
1 | #ifndef __NVIF_CL826F_H__ | ||
2 | #define __NVIF_CL826F_H__ | ||
3 | |||
4 | struct g82_channel_gpfifo_v0 { | ||
5 | __u8 version; | ||
6 | __u8 chid; | ||
7 | __u8 pad02[2]; | ||
8 | __u32 ilength; | ||
9 | __u64 ioffset; | ||
10 | __u64 pushbuf; | ||
11 | __u64 vm; | ||
12 | }; | ||
13 | |||
14 | #define G82_CHANNEL_GPFIFO_V0_NTFY_UEVENT 0x00 | ||
15 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl906f.h b/drivers/gpu/drm/nouveau/include/nvif/cl906f.h new file mode 100644 index 000000000000..2caf0838fcfd --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl906f.h | |||
@@ -0,0 +1,14 @@ | |||
1 | #ifndef __NVIF_CL906F_H__ | ||
2 | #define __NVIF_CL906F_H__ | ||
3 | |||
4 | struct fermi_channel_gpfifo_v0 { | ||
5 | __u8 version; | ||
6 | __u8 chid; | ||
7 | __u8 pad02[2]; | ||
8 | __u32 ilength; | ||
9 | __u64 ioffset; | ||
10 | __u64 vm; | ||
11 | }; | ||
12 | |||
13 | #define FERMI_CHANNEL_GPFIFO_V0_NTFY_UEVENT 0x00 | ||
14 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cl9097.h b/drivers/gpu/drm/nouveau/include/nvif/cl9097.h new file mode 100644 index 000000000000..4057676d2981 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cl9097.h | |||
@@ -0,0 +1,44 @@ | |||
1 | #ifndef __NVIF_CL9097_H__ | ||
2 | #define __NVIF_CL9097_H__ | ||
3 | |||
4 | #define FERMI_A_ZBC_COLOR 0x00 | ||
5 | #define FERMI_A_ZBC_DEPTH 0x01 | ||
6 | |||
7 | struct fermi_a_zbc_color_v0 { | ||
8 | __u8 version; | ||
9 | #define FERMI_A_ZBC_COLOR_V0_FMT_ZERO 0x01 | ||
10 | #define FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE 0x02 | ||
11 | #define FERMI_A_ZBC_COLOR_V0_FMT_RF32_GF32_BF32_AF32 0x04 | ||
12 | #define FERMI_A_ZBC_COLOR_V0_FMT_R16_G16_B16_A16 0x08 | ||
13 | #define FERMI_A_ZBC_COLOR_V0_FMT_RN16_GN16_BN16_AN16 0x0c | ||
14 | #define FERMI_A_ZBC_COLOR_V0_FMT_RS16_GS16_BS16_AS16 0x10 | ||
15 | #define FERMI_A_ZBC_COLOR_V0_FMT_RU16_GU16_BU16_AU16 0x14 | ||
16 | #define FERMI_A_ZBC_COLOR_V0_FMT_RF16_GF16_BF16_AF16 0x16 | ||
17 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8R8G8B8 0x18 | ||
18 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8RL8GL8BL8 0x1c | ||
19 | #define FERMI_A_ZBC_COLOR_V0_FMT_A2B10G10R10 0x20 | ||
20 | #define FERMI_A_ZBC_COLOR_V0_FMT_AU2BU10GU10RU10 0x24 | ||
21 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8B8G8R8 0x28 | ||
22 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8BL8GL8RL8 0x2c | ||
23 | #define FERMI_A_ZBC_COLOR_V0_FMT_AN8BN8GN8RN8 0x30 | ||
24 | #define FERMI_A_ZBC_COLOR_V0_FMT_AS8BS8GS8RS8 0x34 | ||
25 | #define FERMI_A_ZBC_COLOR_V0_FMT_AU8BU8GU8RU8 0x38 | ||
26 | #define FERMI_A_ZBC_COLOR_V0_FMT_A2R10G10B10 0x3c | ||
27 | #define FERMI_A_ZBC_COLOR_V0_FMT_BF10GF11RF11 0x40 | ||
28 | __u8 format; | ||
29 | __u8 index; | ||
30 | __u8 pad03[5]; | ||
31 | __u32 ds[4]; | ||
32 | __u32 l2[4]; | ||
33 | }; | ||
34 | |||
35 | struct fermi_a_zbc_depth_v0 { | ||
36 | __u8 version; | ||
37 | #define FERMI_A_ZBC_DEPTH_V0_FMT_FP32 0x01 | ||
38 | __u8 format; | ||
39 | __u8 index; | ||
40 | __u8 pad03[5]; | ||
41 | __u32 ds; | ||
42 | __u32 l2; | ||
43 | }; | ||
44 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/cla06f.h b/drivers/gpu/drm/nouveau/include/nvif/cla06f.h new file mode 100644 index 000000000000..85b7827eb782 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/cla06f.h | |||
@@ -0,0 +1,21 @@ | |||
1 | #ifndef __NVIF_CLA06F_H__ | ||
2 | #define __NVIF_CLA06F_H__ | ||
3 | |||
4 | struct kepler_channel_gpfifo_a_v0 { | ||
5 | __u8 version; | ||
6 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_GR 0x01 | ||
7 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSPDEC 0x02 | ||
8 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSPPP 0x04 | ||
9 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSVLD 0x08 | ||
10 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_CE0 0x10 | ||
11 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_CE1 0x20 | ||
12 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_ENC 0x40 | ||
13 | __u8 engine; | ||
14 | __u16 chid; | ||
15 | __u32 ilength; | ||
16 | __u64 ioffset; | ||
17 | __u64 vm; | ||
18 | }; | ||
19 | |||
20 | #define KEPLER_CHANNEL_GPFIFO_A_V0_NTFY_UEVENT 0x00 | ||
21 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/class.h b/drivers/gpu/drm/nouveau/include/nvif/class.h index 95a64d89547c..4179cd65ac0a 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/class.h +++ b/drivers/gpu/drm/nouveau/include/nvif/class.h | |||
@@ -1,16 +1,21 @@ | |||
1 | #ifndef __NVIF_CLASS_H__ | 1 | #ifndef __NVIF_CLASS_H__ |
2 | #define __NVIF_CLASS_H__ | 2 | #define __NVIF_CLASS_H__ |
3 | 3 | ||
4 | /******************************************************************************* | 4 | /* these class numbers are made up by us, and not nvidia-assigned */ |
5 | * class identifiers | 5 | #define NVIF_CLASS_CONTROL /* if0001.h */ -1 |
6 | ******************************************************************************/ | 6 | #define NVIF_CLASS_PERFMON /* if0002.h */ -2 |
7 | #define NVIF_CLASS_PERFDOM /* if0003.h */ -3 | ||
8 | #define NVIF_CLASS_SW_NV04 /* if0004.h */ -4 | ||
9 | #define NVIF_CLASS_SW_NV10 /* if0005.h */ -5 | ||
10 | #define NVIF_CLASS_SW_NV50 /* if0005.h */ -6 | ||
11 | #define NVIF_CLASS_SW_GF100 /* if0005.h */ -7 | ||
7 | 12 | ||
8 | /* the below match nvidia-assigned (either in hw, or sw) class numbers */ | 13 | /* the below match nvidia-assigned (either in hw, or sw) class numbers */ |
9 | #define NV_DEVICE 0x00000080 | 14 | #define NV_DEVICE /* cl0080.h */ 0x00000080 |
10 | 15 | ||
11 | #define NV_DMA_FROM_MEMORY 0x00000002 | 16 | #define NV_DMA_FROM_MEMORY /* cl0002.h */ 0x00000002 |
12 | #define NV_DMA_TO_MEMORY 0x00000003 | 17 | #define NV_DMA_TO_MEMORY /* cl0002.h */ 0x00000003 |
13 | #define NV_DMA_IN_MEMORY 0x0000003d | 18 | #define NV_DMA_IN_MEMORY /* cl0002.h */ 0x0000003d |
14 | 19 | ||
15 | #define FERMI_TWOD_A 0x0000902d | 20 | #define FERMI_TWOD_A 0x0000902d |
16 | 21 | ||
@@ -19,85 +24,85 @@ | |||
19 | #define KEPLER_INLINE_TO_MEMORY_A 0x0000a040 | 24 | #define KEPLER_INLINE_TO_MEMORY_A 0x0000a040 |
20 | #define KEPLER_INLINE_TO_MEMORY_B 0x0000a140 | 25 | #define KEPLER_INLINE_TO_MEMORY_B 0x0000a140 |
21 | 26 | ||
22 | #define NV04_DISP 0x00000046 | 27 | #define NV04_DISP /* cl0046.h */ 0x00000046 |
23 | 28 | ||
24 | #define NV03_CHANNEL_DMA 0x0000006b | 29 | #define NV03_CHANNEL_DMA /* cl506b.h */ 0x0000006b |
25 | #define NV10_CHANNEL_DMA 0x0000006e | 30 | #define NV10_CHANNEL_DMA /* cl506b.h */ 0x0000006e |
26 | #define NV17_CHANNEL_DMA 0x0000176e | 31 | #define NV17_CHANNEL_DMA /* cl506b.h */ 0x0000176e |
27 | #define NV40_CHANNEL_DMA 0x0000406e | 32 | #define NV40_CHANNEL_DMA /* cl506b.h */ 0x0000406e |
28 | #define NV50_CHANNEL_DMA 0x0000506e | 33 | #define NV50_CHANNEL_DMA /* cl506e.h */ 0x0000506e |
29 | #define G82_CHANNEL_DMA 0x0000826e | 34 | #define G82_CHANNEL_DMA /* cl826e.h */ 0x0000826e |
30 | 35 | ||
31 | #define NV50_CHANNEL_GPFIFO 0x0000506f | 36 | #define NV50_CHANNEL_GPFIFO /* cl506f.h */ 0x0000506f |
32 | #define G82_CHANNEL_GPFIFO 0x0000826f | 37 | #define G82_CHANNEL_GPFIFO /* cl826f.h */ 0x0000826f |
33 | #define FERMI_CHANNEL_GPFIFO 0x0000906f | 38 | #define FERMI_CHANNEL_GPFIFO /* cl906f.h */ 0x0000906f |
34 | #define KEPLER_CHANNEL_GPFIFO_A 0x0000a06f | 39 | #define KEPLER_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000a06f |
35 | #define MAXWELL_CHANNEL_GPFIFO_A 0x0000b06f | 40 | #define MAXWELL_CHANNEL_GPFIFO_A /* cla06f.h */ 0x0000b06f |
36 | 41 | ||
37 | #define NV50_DISP 0x00005070 | 42 | #define NV50_DISP /* cl5070.h */ 0x00005070 |
38 | #define G82_DISP 0x00008270 | 43 | #define G82_DISP /* cl5070.h */ 0x00008270 |
39 | #define GT200_DISP 0x00008370 | 44 | #define GT200_DISP /* cl5070.h */ 0x00008370 |
40 | #define GT214_DISP 0x00008570 | 45 | #define GT214_DISP /* cl5070.h */ 0x00008570 |
41 | #define GT206_DISP 0x00008870 | 46 | #define GT206_DISP /* cl5070.h */ 0x00008870 |
42 | #define GF110_DISP 0x00009070 | 47 | #define GF110_DISP /* cl5070.h */ 0x00009070 |
43 | #define GK104_DISP 0x00009170 | 48 | #define GK104_DISP /* cl5070.h */ 0x00009170 |
44 | #define GK110_DISP 0x00009270 | 49 | #define GK110_DISP /* cl5070.h */ 0x00009270 |
45 | #define GM107_DISP 0x00009470 | 50 | #define GM107_DISP /* cl5070.h */ 0x00009470 |
46 | #define GM204_DISP 0x00009570 | 51 | #define GM204_DISP /* cl5070.h */ 0x00009570 |
47 | 52 | ||
48 | #define NV31_MPEG 0x00003174 | 53 | #define NV31_MPEG 0x00003174 |
49 | #define G82_MPEG 0x00008274 | 54 | #define G82_MPEG 0x00008274 |
50 | 55 | ||
51 | #define NV74_VP2 0x00007476 | 56 | #define NV74_VP2 0x00007476 |
52 | 57 | ||
53 | #define NV50_DISP_CURSOR 0x0000507a | 58 | #define NV50_DISP_CURSOR /* cl507a.h */ 0x0000507a |
54 | #define G82_DISP_CURSOR 0x0000827a | 59 | #define G82_DISP_CURSOR /* cl507a.h */ 0x0000827a |
55 | #define GT214_DISP_CURSOR 0x0000857a | 60 | #define GT214_DISP_CURSOR /* cl507a.h */ 0x0000857a |
56 | #define GF110_DISP_CURSOR 0x0000907a | 61 | #define GF110_DISP_CURSOR /* cl507a.h */ 0x0000907a |
57 | #define GK104_DISP_CURSOR 0x0000917a | 62 | #define GK104_DISP_CURSOR /* cl507a.h */ 0x0000917a |
58 | 63 | ||
59 | #define NV50_DISP_OVERLAY 0x0000507b | 64 | #define NV50_DISP_OVERLAY /* cl507b.h */ 0x0000507b |
60 | #define G82_DISP_OVERLAY 0x0000827b | 65 | #define G82_DISP_OVERLAY /* cl507b.h */ 0x0000827b |
61 | #define GT214_DISP_OVERLAY 0x0000857b | 66 | #define GT214_DISP_OVERLAY /* cl507b.h */ 0x0000857b |
62 | #define GF110_DISP_OVERLAY 0x0000907b | 67 | #define GF110_DISP_OVERLAY /* cl507b.h */ 0x0000907b |
63 | #define GK104_DISP_OVERLAY 0x0000917b | 68 | #define GK104_DISP_OVERLAY /* cl507b.h */ 0x0000917b |
64 | 69 | ||
65 | #define NV50_DISP_BASE_CHANNEL_DMA 0x0000507c | 70 | #define NV50_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000507c |
66 | #define G82_DISP_BASE_CHANNEL_DMA 0x0000827c | 71 | #define G82_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000827c |
67 | #define GT200_DISP_BASE_CHANNEL_DMA 0x0000837c | 72 | #define GT200_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000837c |
68 | #define GT214_DISP_BASE_CHANNEL_DMA 0x0000857c | 73 | #define GT214_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000857c |
69 | #define GF110_DISP_BASE_CHANNEL_DMA 0x0000907c | 74 | #define GF110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000907c |
70 | #define GK104_DISP_BASE_CHANNEL_DMA 0x0000917c | 75 | #define GK104_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000917c |
71 | #define GK110_DISP_BASE_CHANNEL_DMA 0x0000927c | 76 | #define GK110_DISP_BASE_CHANNEL_DMA /* cl507c.h */ 0x0000927c |
72 | 77 | ||
73 | #define NV50_DISP_CORE_CHANNEL_DMA 0x0000507d | 78 | #define NV50_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000507d |
74 | #define G82_DISP_CORE_CHANNEL_DMA 0x0000827d | 79 | #define G82_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000827d |
75 | #define GT200_DISP_CORE_CHANNEL_DMA 0x0000837d | 80 | #define GT200_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000837d |
76 | #define GT214_DISP_CORE_CHANNEL_DMA 0x0000857d | 81 | #define GT214_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000857d |
77 | #define GT206_DISP_CORE_CHANNEL_DMA 0x0000887d | 82 | #define GT206_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000887d |
78 | #define GF110_DISP_CORE_CHANNEL_DMA 0x0000907d | 83 | #define GF110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000907d |
79 | #define GK104_DISP_CORE_CHANNEL_DMA 0x0000917d | 84 | #define GK104_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000917d |
80 | #define GK110_DISP_CORE_CHANNEL_DMA 0x0000927d | 85 | #define GK110_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000927d |
81 | #define GM107_DISP_CORE_CHANNEL_DMA 0x0000947d | 86 | #define GM107_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000947d |
82 | #define GM204_DISP_CORE_CHANNEL_DMA 0x0000957d | 87 | #define GM204_DISP_CORE_CHANNEL_DMA /* cl507d.h */ 0x0000957d |
83 | 88 | ||
84 | #define NV50_DISP_OVERLAY_CHANNEL_DMA 0x0000507e | 89 | #define NV50_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000507e |
85 | #define G82_DISP_OVERLAY_CHANNEL_DMA 0x0000827e | 90 | #define G82_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000827e |
86 | #define GT200_DISP_OVERLAY_CHANNEL_DMA 0x0000837e | 91 | #define GT200_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000837e |
87 | #define GT214_DISP_OVERLAY_CHANNEL_DMA 0x0000857e | 92 | #define GT214_DISP_OVERLAY_CHANNEL_DMA /* cl507e.h */ 0x0000857e |
88 | #define GF110_DISP_OVERLAY_CONTROL_DMA 0x0000907e | 93 | #define GF110_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000907e |
89 | #define GK104_DISP_OVERLAY_CONTROL_DMA 0x0000917e | 94 | #define GK104_DISP_OVERLAY_CONTROL_DMA /* cl507e.h */ 0x0000917e |
90 | 95 | ||
91 | #define FERMI_A 0x00009097 | 96 | #define FERMI_A /* cl9097.h */ 0x00009097 |
92 | #define FERMI_B 0x00009197 | 97 | #define FERMI_B /* cl9097.h */ 0x00009197 |
93 | #define FERMI_C 0x00009297 | 98 | #define FERMI_C /* cl9097.h */ 0x00009297 |
94 | 99 | ||
95 | #define KEPLER_A 0x0000a097 | 100 | #define KEPLER_A /* cl9097.h */ 0x0000a097 |
96 | #define KEPLER_B 0x0000a197 | 101 | #define KEPLER_B /* cl9097.h */ 0x0000a197 |
97 | #define KEPLER_C 0x0000a297 | 102 | #define KEPLER_C /* cl9097.h */ 0x0000a297 |
98 | 103 | ||
99 | #define MAXWELL_A 0x0000b097 | 104 | #define MAXWELL_A /* cl9097.h */ 0x0000b097 |
100 | #define MAXWELL_B 0x0000b197 | 105 | #define MAXWELL_B /* cl9097.h */ 0x0000b197 |
101 | 106 | ||
102 | #define NV74_BSP 0x000074b0 | 107 | #define NV74_BSP 0x000074b0 |
103 | 108 | ||
@@ -133,540 +138,4 @@ | |||
133 | #define MAXWELL_COMPUTE_B 0x0000b1c0 | 138 | #define MAXWELL_COMPUTE_B 0x0000b1c0 |
134 | 139 | ||
135 | #define NV74_CIPHER 0x000074c1 | 140 | #define NV74_CIPHER 0x000074c1 |
136 | |||
137 | /******************************************************************************* | ||
138 | * client | ||
139 | ******************************************************************************/ | ||
140 | |||
141 | #define NV_CLIENT_DEVLIST 0x00 | ||
142 | |||
143 | struct nv_client_devlist_v0 { | ||
144 | __u8 version; | ||
145 | __u8 count; | ||
146 | __u8 pad02[6]; | ||
147 | __u64 device[]; | ||
148 | }; | ||
149 | |||
150 | |||
151 | /******************************************************************************* | ||
152 | * device | ||
153 | ******************************************************************************/ | ||
154 | |||
155 | struct nv_device_v0 { | ||
156 | __u8 version; | ||
157 | __u8 pad01[7]; | ||
158 | __u64 device; /* device identifier, ~0 for client default */ | ||
159 | }; | ||
160 | |||
161 | #define NV_DEVICE_V0_INFO 0x00 | ||
162 | #define NV_DEVICE_V0_TIME 0x01 | ||
163 | |||
164 | struct nv_device_info_v0 { | ||
165 | __u8 version; | ||
166 | #define NV_DEVICE_INFO_V0_IGP 0x00 | ||
167 | #define NV_DEVICE_INFO_V0_PCI 0x01 | ||
168 | #define NV_DEVICE_INFO_V0_AGP 0x02 | ||
169 | #define NV_DEVICE_INFO_V0_PCIE 0x03 | ||
170 | #define NV_DEVICE_INFO_V0_SOC 0x04 | ||
171 | __u8 platform; | ||
172 | __u16 chipset; /* from NV_PMC_BOOT_0 */ | ||
173 | __u8 revision; /* from NV_PMC_BOOT_0 */ | ||
174 | #define NV_DEVICE_INFO_V0_TNT 0x01 | ||
175 | #define NV_DEVICE_INFO_V0_CELSIUS 0x02 | ||
176 | #define NV_DEVICE_INFO_V0_KELVIN 0x03 | ||
177 | #define NV_DEVICE_INFO_V0_RANKINE 0x04 | ||
178 | #define NV_DEVICE_INFO_V0_CURIE 0x05 | ||
179 | #define NV_DEVICE_INFO_V0_TESLA 0x06 | ||
180 | #define NV_DEVICE_INFO_V0_FERMI 0x07 | ||
181 | #define NV_DEVICE_INFO_V0_KEPLER 0x08 | ||
182 | #define NV_DEVICE_INFO_V0_MAXWELL 0x09 | ||
183 | __u8 family; | ||
184 | __u8 pad06[2]; | ||
185 | __u64 ram_size; | ||
186 | __u64 ram_user; | ||
187 | char chip[16]; | ||
188 | char name[64]; | ||
189 | }; | ||
190 | |||
191 | struct nv_device_time_v0 { | ||
192 | __u8 version; | ||
193 | __u8 pad01[7]; | ||
194 | __u64 time; | ||
195 | }; | ||
196 | |||
197 | |||
198 | /******************************************************************************* | ||
199 | * context dma | ||
200 | ******************************************************************************/ | ||
201 | |||
202 | struct nv_dma_v0 { | ||
203 | __u8 version; | ||
204 | #define NV_DMA_V0_TARGET_VM 0x00 | ||
205 | #define NV_DMA_V0_TARGET_VRAM 0x01 | ||
206 | #define NV_DMA_V0_TARGET_PCI 0x02 | ||
207 | #define NV_DMA_V0_TARGET_PCI_US 0x03 | ||
208 | #define NV_DMA_V0_TARGET_AGP 0x04 | ||
209 | __u8 target; | ||
210 | #define NV_DMA_V0_ACCESS_VM 0x00 | ||
211 | #define NV_DMA_V0_ACCESS_RD 0x01 | ||
212 | #define NV_DMA_V0_ACCESS_WR 0x02 | ||
213 | #define NV_DMA_V0_ACCESS_RDWR (NV_DMA_V0_ACCESS_RD | NV_DMA_V0_ACCESS_WR) | ||
214 | __u8 access; | ||
215 | __u8 pad03[5]; | ||
216 | __u64 start; | ||
217 | __u64 limit; | ||
218 | /* ... chipset-specific class data */ | ||
219 | }; | ||
220 | |||
221 | struct nv50_dma_v0 { | ||
222 | __u8 version; | ||
223 | #define NV50_DMA_V0_PRIV_VM 0x00 | ||
224 | #define NV50_DMA_V0_PRIV_US 0x01 | ||
225 | #define NV50_DMA_V0_PRIV__S 0x02 | ||
226 | __u8 priv; | ||
227 | #define NV50_DMA_V0_PART_VM 0x00 | ||
228 | #define NV50_DMA_V0_PART_256 0x01 | ||
229 | #define NV50_DMA_V0_PART_1KB 0x02 | ||
230 | __u8 part; | ||
231 | #define NV50_DMA_V0_COMP_NONE 0x00 | ||
232 | #define NV50_DMA_V0_COMP_1 0x01 | ||
233 | #define NV50_DMA_V0_COMP_2 0x02 | ||
234 | #define NV50_DMA_V0_COMP_VM 0x03 | ||
235 | __u8 comp; | ||
236 | #define NV50_DMA_V0_KIND_PITCH 0x00 | ||
237 | #define NV50_DMA_V0_KIND_VM 0x7f | ||
238 | __u8 kind; | ||
239 | __u8 pad05[3]; | ||
240 | }; | ||
241 | |||
242 | struct gf100_dma_v0 { | ||
243 | __u8 version; | ||
244 | #define GF100_DMA_V0_PRIV_VM 0x00 | ||
245 | #define GF100_DMA_V0_PRIV_US 0x01 | ||
246 | #define GF100_DMA_V0_PRIV__S 0x02 | ||
247 | __u8 priv; | ||
248 | #define GF100_DMA_V0_KIND_PITCH 0x00 | ||
249 | #define GF100_DMA_V0_KIND_VM 0xff | ||
250 | __u8 kind; | ||
251 | __u8 pad03[5]; | ||
252 | }; | ||
253 | |||
254 | struct gf119_dma_v0 { | ||
255 | __u8 version; | ||
256 | #define GF119_DMA_V0_PAGE_LP 0x00 | ||
257 | #define GF119_DMA_V0_PAGE_SP 0x01 | ||
258 | __u8 page; | ||
259 | #define GF119_DMA_V0_KIND_PITCH 0x00 | ||
260 | #define GF119_DMA_V0_KIND_VM 0xff | ||
261 | __u8 kind; | ||
262 | __u8 pad03[5]; | ||
263 | }; | ||
264 | |||
265 | |||
266 | /******************************************************************************* | ||
267 | * perfmon | ||
268 | ******************************************************************************/ | ||
269 | |||
270 | #define NVIF_PERFMON_V0_QUERY_DOMAIN 0x00 | ||
271 | #define NVIF_PERFMON_V0_QUERY_SIGNAL 0x01 | ||
272 | #define NVIF_PERFMON_V0_QUERY_SOURCE 0x02 | ||
273 | |||
274 | struct nvif_perfmon_query_domain_v0 { | ||
275 | __u8 version; | ||
276 | __u8 id; | ||
277 | __u8 counter_nr; | ||
278 | __u8 iter; | ||
279 | __u16 signal_nr; | ||
280 | __u8 pad05[2]; | ||
281 | char name[64]; | ||
282 | }; | ||
283 | |||
284 | struct nvif_perfmon_query_signal_v0 { | ||
285 | __u8 version; | ||
286 | __u8 domain; | ||
287 | __u16 iter; | ||
288 | __u8 signal; | ||
289 | __u8 source_nr; | ||
290 | __u8 pad05[2]; | ||
291 | char name[64]; | ||
292 | }; | ||
293 | |||
294 | struct nvif_perfmon_query_source_v0 { | ||
295 | __u8 version; | ||
296 | __u8 domain; | ||
297 | __u8 signal; | ||
298 | __u8 iter; | ||
299 | __u8 pad04[4]; | ||
300 | __u32 source; | ||
301 | __u32 mask; | ||
302 | char name[64]; | ||
303 | }; | ||
304 | |||
305 | |||
306 | /******************************************************************************* | ||
307 | * perfdom | ||
308 | ******************************************************************************/ | ||
309 | |||
310 | struct nvif_perfdom_v0 { | ||
311 | __u8 version; | ||
312 | __u8 domain; | ||
313 | __u8 mode; | ||
314 | __u8 pad03[1]; | ||
315 | struct { | ||
316 | __u8 signal[4]; | ||
317 | __u64 source[4][8]; | ||
318 | __u16 logic_op; | ||
319 | } ctr[4]; | ||
320 | }; | ||
321 | |||
322 | #define NVIF_PERFDOM_V0_INIT 0x00 | ||
323 | #define NVIF_PERFDOM_V0_SAMPLE 0x01 | ||
324 | #define NVIF_PERFDOM_V0_READ 0x02 | ||
325 | |||
326 | struct nvif_perfdom_init { | ||
327 | }; | ||
328 | |||
329 | struct nvif_perfdom_sample { | ||
330 | }; | ||
331 | |||
332 | struct nvif_perfdom_read_v0 { | ||
333 | __u8 version; | ||
334 | __u8 pad01[7]; | ||
335 | __u32 ctr[4]; | ||
336 | __u32 clk; | ||
337 | __u8 pad04[4]; | ||
338 | }; | ||
339 | |||
340 | |||
341 | /******************************************************************************* | ||
342 | * device control | ||
343 | ******************************************************************************/ | ||
344 | |||
345 | #define NVIF_CONTROL_PSTATE_INFO 0x00 | ||
346 | #define NVIF_CONTROL_PSTATE_ATTR 0x01 | ||
347 | #define NVIF_CONTROL_PSTATE_USER 0x02 | ||
348 | |||
349 | struct nvif_control_pstate_info_v0 { | ||
350 | __u8 version; | ||
351 | __u8 count; /* out: number of power states */ | ||
352 | #define NVIF_CONTROL_PSTATE_INFO_V0_USTATE_DISABLE (-1) | ||
353 | #define NVIF_CONTROL_PSTATE_INFO_V0_USTATE_PERFMON (-2) | ||
354 | __s8 ustate_ac; /* out: target pstate index */ | ||
355 | __s8 ustate_dc; /* out: target pstate index */ | ||
356 | __s8 pwrsrc; /* out: current power source */ | ||
357 | #define NVIF_CONTROL_PSTATE_INFO_V0_PSTATE_UNKNOWN (-1) | ||
358 | #define NVIF_CONTROL_PSTATE_INFO_V0_PSTATE_PERFMON (-2) | ||
359 | __s8 pstate; /* out: current pstate index */ | ||
360 | __u8 pad06[2]; | ||
361 | }; | ||
362 | |||
363 | struct nvif_control_pstate_attr_v0 { | ||
364 | __u8 version; | ||
365 | #define NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT (-1) | ||
366 | __s8 state; /* in: index of pstate to query | ||
367 | * out: pstate identifier | ||
368 | */ | ||
369 | __u8 index; /* in: index of attribute to query | ||
370 | * out: index of next attribute, or 0 if no more | ||
371 | */ | ||
372 | __u8 pad03[5]; | ||
373 | __u32 min; | ||
374 | __u32 max; | ||
375 | char name[32]; | ||
376 | char unit[16]; | ||
377 | }; | ||
378 | |||
379 | struct nvif_control_pstate_user_v0 { | ||
380 | __u8 version; | ||
381 | #define NVIF_CONTROL_PSTATE_USER_V0_STATE_UNKNOWN (-1) | ||
382 | #define NVIF_CONTROL_PSTATE_USER_V0_STATE_PERFMON (-2) | ||
383 | __s8 ustate; /* in: pstate identifier */ | ||
384 | __s8 pwrsrc; /* in: target power source */ | ||
385 | __u8 pad03[5]; | ||
386 | }; | ||
387 | |||
388 | |||
389 | /******************************************************************************* | ||
390 | * DMA FIFO channels | ||
391 | ******************************************************************************/ | ||
392 | |||
393 | struct nv03_channel_dma_v0 { | ||
394 | __u8 version; | ||
395 | __u8 chid; | ||
396 | __u8 pad02[2]; | ||
397 | __u32 offset; | ||
398 | __u64 pushbuf; | ||
399 | }; | ||
400 | |||
401 | struct nv50_channel_dma_v0 { | ||
402 | __u8 version; | ||
403 | __u8 chid; | ||
404 | __u8 pad02[6]; | ||
405 | __u64 vm; | ||
406 | __u64 pushbuf; | ||
407 | __u64 offset; | ||
408 | }; | ||
409 | |||
410 | #define G82_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
411 | |||
412 | /******************************************************************************* | ||
413 | * GPFIFO channels | ||
414 | ******************************************************************************/ | ||
415 | |||
416 | struct nv50_channel_gpfifo_v0 { | ||
417 | __u8 version; | ||
418 | __u8 chid; | ||
419 | __u8 pad02[2]; | ||
420 | __u32 ilength; | ||
421 | __u64 ioffset; | ||
422 | __u64 pushbuf; | ||
423 | __u64 vm; | ||
424 | }; | ||
425 | |||
426 | struct fermi_channel_gpfifo_v0 { | ||
427 | __u8 version; | ||
428 | __u8 chid; | ||
429 | __u8 pad02[2]; | ||
430 | __u32 ilength; | ||
431 | __u64 ioffset; | ||
432 | __u64 vm; | ||
433 | }; | ||
434 | |||
435 | struct kepler_channel_gpfifo_a_v0 { | ||
436 | __u8 version; | ||
437 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_GR 0x01 | ||
438 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSPDEC 0x02 | ||
439 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSPPP 0x04 | ||
440 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_MSVLD 0x08 | ||
441 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_CE0 0x10 | ||
442 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_CE1 0x20 | ||
443 | #define KEPLER_CHANNEL_GPFIFO_A_V0_ENGINE_ENC 0x40 | ||
444 | __u8 engine; | ||
445 | __u16 chid; | ||
446 | __u32 ilength; | ||
447 | __u64 ioffset; | ||
448 | __u64 vm; | ||
449 | }; | ||
450 | |||
451 | /******************************************************************************* | ||
452 | * legacy display | ||
453 | ******************************************************************************/ | ||
454 | |||
455 | #define NV04_DISP_NTFY_VBLANK 0x00 | ||
456 | #define NV04_DISP_NTFY_CONN 0x01 | ||
457 | |||
458 | struct nv04_disp_mthd_v0 { | ||
459 | __u8 version; | ||
460 | #define NV04_DISP_SCANOUTPOS 0x00 | ||
461 | __u8 method; | ||
462 | __u8 head; | ||
463 | __u8 pad03[5]; | ||
464 | }; | ||
465 | |||
466 | struct nv04_disp_scanoutpos_v0 { | ||
467 | __u8 version; | ||
468 | __u8 pad01[7]; | ||
469 | __s64 time[2]; | ||
470 | __u16 vblanks; | ||
471 | __u16 vblanke; | ||
472 | __u16 vtotal; | ||
473 | __u16 vline; | ||
474 | __u16 hblanks; | ||
475 | __u16 hblanke; | ||
476 | __u16 htotal; | ||
477 | __u16 hline; | ||
478 | }; | ||
479 | |||
480 | /******************************************************************************* | ||
481 | * display | ||
482 | ******************************************************************************/ | ||
483 | |||
484 | #define NV50_DISP_MTHD 0x00 | ||
485 | |||
486 | struct nv50_disp_mthd_v0 { | ||
487 | __u8 version; | ||
488 | #define NV50_DISP_SCANOUTPOS 0x00 | ||
489 | __u8 method; | ||
490 | __u8 head; | ||
491 | __u8 pad03[5]; | ||
492 | }; | ||
493 | |||
494 | struct nv50_disp_mthd_v1 { | ||
495 | __u8 version; | ||
496 | #define NV50_DISP_MTHD_V1_DAC_PWR 0x10 | ||
497 | #define NV50_DISP_MTHD_V1_DAC_LOAD 0x11 | ||
498 | #define NV50_DISP_MTHD_V1_SOR_PWR 0x20 | ||
499 | #define NV50_DISP_MTHD_V1_SOR_HDA_ELD 0x21 | ||
500 | #define NV50_DISP_MTHD_V1_SOR_HDMI_PWR 0x22 | ||
501 | #define NV50_DISP_MTHD_V1_SOR_LVDS_SCRIPT 0x23 | ||
502 | #define NV50_DISP_MTHD_V1_SOR_DP_PWR 0x24 | ||
503 | #define NV50_DISP_MTHD_V1_PIOR_PWR 0x30 | ||
504 | __u8 method; | ||
505 | __u16 hasht; | ||
506 | __u16 hashm; | ||
507 | __u8 pad06[2]; | ||
508 | }; | ||
509 | |||
510 | struct nv50_disp_dac_pwr_v0 { | ||
511 | __u8 version; | ||
512 | __u8 state; | ||
513 | __u8 data; | ||
514 | __u8 vsync; | ||
515 | __u8 hsync; | ||
516 | __u8 pad05[3]; | ||
517 | }; | ||
518 | |||
519 | struct nv50_disp_dac_load_v0 { | ||
520 | __u8 version; | ||
521 | __u8 load; | ||
522 | __u8 pad02[2]; | ||
523 | __u32 data; | ||
524 | }; | ||
525 | |||
526 | struct nv50_disp_sor_pwr_v0 { | ||
527 | __u8 version; | ||
528 | __u8 state; | ||
529 | __u8 pad02[6]; | ||
530 | }; | ||
531 | |||
532 | struct nv50_disp_sor_hda_eld_v0 { | ||
533 | __u8 version; | ||
534 | __u8 pad01[7]; | ||
535 | __u8 data[]; | ||
536 | }; | ||
537 | |||
538 | struct nv50_disp_sor_hdmi_pwr_v0 { | ||
539 | __u8 version; | ||
540 | __u8 state; | ||
541 | __u8 max_ac_packet; | ||
542 | __u8 rekey; | ||
543 | __u8 pad04[4]; | ||
544 | }; | ||
545 | |||
546 | struct nv50_disp_sor_lvds_script_v0 { | ||
547 | __u8 version; | ||
548 | __u8 pad01[1]; | ||
549 | __u16 script; | ||
550 | __u8 pad04[4]; | ||
551 | }; | ||
552 | |||
553 | struct nv50_disp_sor_dp_pwr_v0 { | ||
554 | __u8 version; | ||
555 | __u8 state; | ||
556 | __u8 pad02[6]; | ||
557 | }; | ||
558 | |||
559 | struct nv50_disp_pior_pwr_v0 { | ||
560 | __u8 version; | ||
561 | __u8 state; | ||
562 | __u8 type; | ||
563 | __u8 pad03[5]; | ||
564 | }; | ||
565 | |||
566 | /* core */ | ||
567 | struct nv50_disp_core_channel_dma_v0 { | ||
568 | __u8 version; | ||
569 | __u8 pad01[7]; | ||
570 | __u64 pushbuf; | ||
571 | }; | ||
572 | |||
573 | #define NV50_DISP_CORE_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
574 | |||
575 | /* cursor immediate */ | ||
576 | struct nv50_disp_cursor_v0 { | ||
577 | __u8 version; | ||
578 | __u8 head; | ||
579 | __u8 pad02[6]; | ||
580 | }; | ||
581 | |||
582 | #define NV50_DISP_CURSOR_V0_NTFY_UEVENT 0x00 | ||
583 | |||
584 | /* base */ | ||
585 | struct nv50_disp_base_channel_dma_v0 { | ||
586 | __u8 version; | ||
587 | __u8 head; | ||
588 | __u8 pad02[6]; | ||
589 | __u64 pushbuf; | ||
590 | }; | ||
591 | |||
592 | #define NV50_DISP_BASE_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
593 | |||
594 | /* overlay */ | ||
595 | struct nv50_disp_overlay_channel_dma_v0 { | ||
596 | __u8 version; | ||
597 | __u8 head; | ||
598 | __u8 pad02[6]; | ||
599 | __u64 pushbuf; | ||
600 | }; | ||
601 | |||
602 | #define NV50_DISP_OVERLAY_CHANNEL_DMA_V0_NTFY_UEVENT 0x00 | ||
603 | |||
604 | /* overlay immediate */ | ||
605 | struct nv50_disp_overlay_v0 { | ||
606 | __u8 version; | ||
607 | __u8 head; | ||
608 | __u8 pad02[6]; | ||
609 | }; | ||
610 | |||
611 | #define NV50_DISP_OVERLAY_V0_NTFY_UEVENT 0x00 | ||
612 | |||
613 | /******************************************************************************* | ||
614 | * software | ||
615 | ******************************************************************************/ | ||
616 | |||
617 | #define NVSW_NTFY_UEVENT 0x00 | ||
618 | |||
619 | #define NV04_NVSW_GET_REF 0x00 | ||
620 | |||
621 | struct nv04_nvsw_get_ref_v0 { | ||
622 | __u8 version; | ||
623 | __u8 pad01[3]; | ||
624 | __u32 ref; | ||
625 | }; | ||
626 | |||
627 | /******************************************************************************* | ||
628 | * fermi | ||
629 | ******************************************************************************/ | ||
630 | |||
631 | #define FERMI_A_ZBC_COLOR 0x00 | ||
632 | #define FERMI_A_ZBC_DEPTH 0x01 | ||
633 | |||
634 | struct fermi_a_zbc_color_v0 { | ||
635 | __u8 version; | ||
636 | #define FERMI_A_ZBC_COLOR_V0_FMT_ZERO 0x01 | ||
637 | #define FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE 0x02 | ||
638 | #define FERMI_A_ZBC_COLOR_V0_FMT_RF32_GF32_BF32_AF32 0x04 | ||
639 | #define FERMI_A_ZBC_COLOR_V0_FMT_R16_G16_B16_A16 0x08 | ||
640 | #define FERMI_A_ZBC_COLOR_V0_FMT_RN16_GN16_BN16_AN16 0x0c | ||
641 | #define FERMI_A_ZBC_COLOR_V0_FMT_RS16_GS16_BS16_AS16 0x10 | ||
642 | #define FERMI_A_ZBC_COLOR_V0_FMT_RU16_GU16_BU16_AU16 0x14 | ||
643 | #define FERMI_A_ZBC_COLOR_V0_FMT_RF16_GF16_BF16_AF16 0x16 | ||
644 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8R8G8B8 0x18 | ||
645 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8RL8GL8BL8 0x1c | ||
646 | #define FERMI_A_ZBC_COLOR_V0_FMT_A2B10G10R10 0x20 | ||
647 | #define FERMI_A_ZBC_COLOR_V0_FMT_AU2BU10GU10RU10 0x24 | ||
648 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8B8G8R8 0x28 | ||
649 | #define FERMI_A_ZBC_COLOR_V0_FMT_A8BL8GL8RL8 0x2c | ||
650 | #define FERMI_A_ZBC_COLOR_V0_FMT_AN8BN8GN8RN8 0x30 | ||
651 | #define FERMI_A_ZBC_COLOR_V0_FMT_AS8BS8GS8RS8 0x34 | ||
652 | #define FERMI_A_ZBC_COLOR_V0_FMT_AU8BU8GU8RU8 0x38 | ||
653 | #define FERMI_A_ZBC_COLOR_V0_FMT_A2R10G10B10 0x3c | ||
654 | #define FERMI_A_ZBC_COLOR_V0_FMT_BF10GF11RF11 0x40 | ||
655 | __u8 format; | ||
656 | __u8 index; | ||
657 | __u8 pad03[5]; | ||
658 | __u32 ds[4]; | ||
659 | __u32 l2[4]; | ||
660 | }; | ||
661 | |||
662 | struct fermi_a_zbc_depth_v0 { | ||
663 | __u8 version; | ||
664 | #define FERMI_A_ZBC_DEPTH_V0_FMT_FP32 0x01 | ||
665 | __u8 format; | ||
666 | __u8 index; | ||
667 | __u8 pad03[5]; | ||
668 | __u32 ds; | ||
669 | __u32 l2; | ||
670 | }; | ||
671 | |||
672 | #endif | 141 | #endif |
diff --git a/drivers/gpu/drm/nouveau/include/nvif/device.h b/drivers/gpu/drm/nouveau/include/nvif/device.h index 700a9b206726..e0ed2f4b2f43 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/device.h +++ b/drivers/gpu/drm/nouveau/include/nvif/device.h | |||
@@ -2,7 +2,7 @@ | |||
2 | #define __NVIF_DEVICE_H__ | 2 | #define __NVIF_DEVICE_H__ |
3 | 3 | ||
4 | #include <nvif/object.h> | 4 | #include <nvif/object.h> |
5 | #include <nvif/class.h> | 5 | #include <nvif/cl0080.h> |
6 | 6 | ||
7 | struct nvif_device { | 7 | struct nvif_device { |
8 | struct nvif_object object; | 8 | struct nvif_object object; |
@@ -63,6 +63,7 @@ u64 nvif_device_time(struct nvif_device *); | |||
63 | #define nvxx_clk(a) nvxx_device(a)->clk | 63 | #define nvxx_clk(a) nvxx_device(a)->clk |
64 | #define nvxx_i2c(a) nvxx_device(a)->i2c | 64 | #define nvxx_i2c(a) nvxx_device(a)->i2c |
65 | #define nvxx_therm(a) nvxx_device(a)->therm | 65 | #define nvxx_therm(a) nvxx_device(a)->therm |
66 | #define nvxx_volt(a) nvxx_device(a)->volt | ||
66 | 67 | ||
67 | #include <core/device.h> | 68 | #include <core/device.h> |
68 | #include <engine/fifo.h> | 69 | #include <engine/fifo.h> |
diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0000.h b/drivers/gpu/drm/nouveau/include/nvif/if0000.h new file mode 100644 index 000000000000..85c44e8a1201 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/if0000.h | |||
@@ -0,0 +1,12 @@ | |||
1 | #ifndef __NVIF_IF0000_H__ | ||
2 | #define __NVIF_IF0000_H__ | ||
3 | |||
4 | #define NV_CLIENT_DEVLIST 0x00 | ||
5 | |||
6 | struct nv_client_devlist_v0 { | ||
7 | __u8 version; | ||
8 | __u8 count; | ||
9 | __u8 pad02[6]; | ||
10 | __u64 device[]; | ||
11 | }; | ||
12 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0001.h b/drivers/gpu/drm/nouveau/include/nvif/if0001.h new file mode 100644 index 000000000000..bd5b64125eed --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/if0001.h | |||
@@ -0,0 +1,46 @@ | |||
1 | #ifndef __NVIF_IF0001_H__ | ||
2 | #define __NVIF_IF0001_H__ | ||
3 | |||
4 | #define NVIF_CONTROL_PSTATE_INFO 0x00 | ||
5 | #define NVIF_CONTROL_PSTATE_ATTR 0x01 | ||
6 | #define NVIF_CONTROL_PSTATE_USER 0x02 | ||
7 | |||
8 | struct nvif_control_pstate_info_v0 { | ||
9 | __u8 version; | ||
10 | __u8 count; /* out: number of power states */ | ||
11 | #define NVIF_CONTROL_PSTATE_INFO_V0_USTATE_DISABLE (-1) | ||
12 | #define NVIF_CONTROL_PSTATE_INFO_V0_USTATE_PERFMON (-2) | ||
13 | __s8 ustate_ac; /* out: target pstate index */ | ||
14 | __s8 ustate_dc; /* out: target pstate index */ | ||
15 | __s8 pwrsrc; /* out: current power source */ | ||
16 | #define NVIF_CONTROL_PSTATE_INFO_V0_PSTATE_UNKNOWN (-1) | ||
17 | #define NVIF_CONTROL_PSTATE_INFO_V0_PSTATE_PERFMON (-2) | ||
18 | __s8 pstate; /* out: current pstate index */ | ||
19 | __u8 pad06[2]; | ||
20 | }; | ||
21 | |||
22 | struct nvif_control_pstate_attr_v0 { | ||
23 | __u8 version; | ||
24 | #define NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT (-1) | ||
25 | __s8 state; /* in: index of pstate to query | ||
26 | * out: pstate identifier | ||
27 | */ | ||
28 | __u8 index; /* in: index of attribute to query | ||
29 | * out: index of next attribute, or 0 if no more | ||
30 | */ | ||
31 | __u8 pad03[5]; | ||
32 | __u32 min; | ||
33 | __u32 max; | ||
34 | char name[32]; | ||
35 | char unit[16]; | ||
36 | }; | ||
37 | |||
38 | struct nvif_control_pstate_user_v0 { | ||
39 | __u8 version; | ||
40 | #define NVIF_CONTROL_PSTATE_USER_V0_STATE_UNKNOWN (-1) | ||
41 | #define NVIF_CONTROL_PSTATE_USER_V0_STATE_PERFMON (-2) | ||
42 | __s8 ustate; /* in: pstate identifier */ | ||
43 | __s8 pwrsrc; /* in: target power source */ | ||
44 | __u8 pad03[5]; | ||
45 | }; | ||
46 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0002.h b/drivers/gpu/drm/nouveau/include/nvif/if0002.h new file mode 100644 index 000000000000..c04c91d0b818 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/if0002.h | |||
@@ -0,0 +1,38 @@ | |||
1 | #ifndef __NVIF_IF0002_H__ | ||
2 | #define __NVIF_IF0002_H__ | ||
3 | |||
4 | #define NVIF_PERFMON_V0_QUERY_DOMAIN 0x00 | ||
5 | #define NVIF_PERFMON_V0_QUERY_SIGNAL 0x01 | ||
6 | #define NVIF_PERFMON_V0_QUERY_SOURCE 0x02 | ||
7 | |||
8 | struct nvif_perfmon_query_domain_v0 { | ||
9 | __u8 version; | ||
10 | __u8 id; | ||
11 | __u8 counter_nr; | ||
12 | __u8 iter; | ||
13 | __u16 signal_nr; | ||
14 | __u8 pad05[2]; | ||
15 | char name[64]; | ||
16 | }; | ||
17 | |||
18 | struct nvif_perfmon_query_signal_v0 { | ||
19 | __u8 version; | ||
20 | __u8 domain; | ||
21 | __u16 iter; | ||
22 | __u8 signal; | ||
23 | __u8 source_nr; | ||
24 | __u8 pad05[2]; | ||
25 | char name[64]; | ||
26 | }; | ||
27 | |||
28 | struct nvif_perfmon_query_source_v0 { | ||
29 | __u8 version; | ||
30 | __u8 domain; | ||
31 | __u8 signal; | ||
32 | __u8 iter; | ||
33 | __u8 pad04[4]; | ||
34 | __u32 source; | ||
35 | __u32 mask; | ||
36 | char name[64]; | ||
37 | }; | ||
38 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0003.h b/drivers/gpu/drm/nouveau/include/nvif/if0003.h new file mode 100644 index 000000000000..0cd03efb80a1 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/if0003.h | |||
@@ -0,0 +1,33 @@ | |||
1 | #ifndef __NVIF_IF0003_H__ | ||
2 | #define __NVIF_IF0003_H__ | ||
3 | |||
4 | struct nvif_perfdom_v0 { | ||
5 | __u8 version; | ||
6 | __u8 domain; | ||
7 | __u8 mode; | ||
8 | __u8 pad03[1]; | ||
9 | struct { | ||
10 | __u8 signal[4]; | ||
11 | __u64 source[4][8]; | ||
12 | __u16 logic_op; | ||
13 | } ctr[4]; | ||
14 | }; | ||
15 | |||
16 | #define NVIF_PERFDOM_V0_INIT 0x00 | ||
17 | #define NVIF_PERFDOM_V0_SAMPLE 0x01 | ||
18 | #define NVIF_PERFDOM_V0_READ 0x02 | ||
19 | |||
20 | struct nvif_perfdom_init { | ||
21 | }; | ||
22 | |||
23 | struct nvif_perfdom_sample { | ||
24 | }; | ||
25 | |||
26 | struct nvif_perfdom_read_v0 { | ||
27 | __u8 version; | ||
28 | __u8 pad01[7]; | ||
29 | __u32 ctr[4]; | ||
30 | __u32 clk; | ||
31 | __u8 pad04[4]; | ||
32 | }; | ||
33 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0004.h b/drivers/gpu/drm/nouveau/include/nvif/if0004.h new file mode 100644 index 000000000000..bd5cd428cfd7 --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/if0004.h | |||
@@ -0,0 +1,13 @@ | |||
1 | #ifndef __NVIF_IF0004_H__ | ||
2 | #define __NVIF_IF0004_H__ | ||
3 | |||
4 | #define NV04_NVSW_NTFY_UEVENT 0x00 | ||
5 | |||
6 | #define NV04_NVSW_GET_REF 0x00 | ||
7 | |||
8 | struct nv04_nvsw_get_ref_v0 { | ||
9 | __u8 version; | ||
10 | __u8 pad01[3]; | ||
11 | __u32 ref; | ||
12 | }; | ||
13 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/if0005.h b/drivers/gpu/drm/nouveau/include/nvif/if0005.h new file mode 100644 index 000000000000..abfd373bb68b --- /dev/null +++ b/drivers/gpu/drm/nouveau/include/nvif/if0005.h | |||
@@ -0,0 +1,4 @@ | |||
1 | #ifndef __NVIF_IF0005_H__ | ||
2 | #define __NVIF_IF0005_H__ | ||
3 | #define NV10_NVSW_NTFY_UEVENT 0x00 | ||
4 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/include/nvif/ioctl.h b/drivers/gpu/drm/nouveau/include/nvif/ioctl.h index b0ac0215ebf9..c5f5eb83a594 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/ioctl.h +++ b/drivers/gpu/drm/nouveau/include/nvif/ioctl.h | |||
@@ -55,14 +55,6 @@ struct nvif_ioctl_new_v0 { | |||
55 | __u64 token; | 55 | __u64 token; |
56 | __u64 object; | 56 | __u64 object; |
57 | __u32 handle; | 57 | __u32 handle; |
58 | /* these class numbers are made up by us, and not nvidia-assigned */ | ||
59 | #define NVIF_IOCTL_NEW_V0_CONTROL -1 | ||
60 | #define NVIF_IOCTL_NEW_V0_PERFMON -2 | ||
61 | #define NVIF_IOCTL_NEW_V0_PERFDOM -3 | ||
62 | #define NVIF_IOCTL_NEW_V0_SW_NV04 -4 | ||
63 | #define NVIF_IOCTL_NEW_V0_SW_NV10 -5 | ||
64 | #define NVIF_IOCTL_NEW_V0_SW_NV50 -6 | ||
65 | #define NVIF_IOCTL_NEW_V0_SW_GF100 -7 | ||
66 | __s32 oclass; | 58 | __s32 oclass; |
67 | __u8 data[]; /* class data (class.h) */ | 59 | __u8 data[]; /* class data (class.h) */ |
68 | }; | 60 | }; |
diff --git a/drivers/gpu/drm/nouveau/include/nvif/unpack.h b/drivers/gpu/drm/nouveau/include/nvif/unpack.h index 5933188b4a77..751bcf4930a7 100644 --- a/drivers/gpu/drm/nouveau/include/nvif/unpack.h +++ b/drivers/gpu/drm/nouveau/include/nvif/unpack.h | |||
@@ -1,24 +1,28 @@ | |||
1 | #ifndef __NVIF_UNPACK_H__ | 1 | #ifndef __NVIF_UNPACK_H__ |
2 | #define __NVIF_UNPACK_H__ | 2 | #define __NVIF_UNPACK_H__ |
3 | 3 | ||
4 | #define nvif_unvers(d) ({ \ | 4 | #define nvif_unvers(r,d,s,m) ({ \ |
5 | ret = (size == sizeof(d)) ? 0 : -ENOSYS; \ | 5 | void **_data = (d); __u32 *_size = (s); int _ret = (r); \ |
6 | (ret == 0); \ | 6 | if (_ret == -ENOSYS && *_size == sizeof(m)) { \ |
7 | *_data = NULL; \ | ||
8 | *_size = _ret = 0; \ | ||
9 | } \ | ||
10 | _ret; \ | ||
7 | }) | 11 | }) |
8 | 12 | ||
9 | #define nvif_unpack(d,vl,vh,m) ({ \ | 13 | #define nvif_unpack(r,d,s,m,vl,vh,x) ({ \ |
10 | if ((vl) == 0 || ret == -ENOSYS) { \ | 14 | void **_data = (d); __u32 *_size = (s); \ |
11 | int _size = sizeof(d); \ | 15 | int _ret = (r), _vl = (vl), _vh = (vh); \ |
12 | if (_size <= size && (d).version >= (vl) && \ | 16 | if (_ret == -ENOSYS && *_size >= sizeof(m) && \ |
13 | (d).version <= (vh)) { \ | 17 | (m).version >= _vl && (m).version <= _vh) { \ |
14 | data = (u8 *)data + _size; \ | 18 | *_data = (__u8 *)*_data + sizeof(m); \ |
15 | size = size - _size; \ | 19 | *_size = *_size - sizeof(m); \ |
16 | ret = ((m) || !size) ? 0 : -E2BIG; \ | 20 | if (_ret = 0, !(x)) { \ |
17 | } else { \ | 21 | _ret = *_size ? -E2BIG : 0; \ |
18 | ret = -ENOSYS; \ | 22 | *_data = NULL; \ |
23 | *_size = 0; \ | ||
19 | } \ | 24 | } \ |
20 | } \ | 25 | } \ |
21 | (ret == 0); \ | 26 | _ret; \ |
22 | }) | 27 | }) |
23 | |||
24 | #endif | 28 | #endif |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h index 7cc2becabc69..d3bd250103d5 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/bios/perf.h | |||
@@ -13,6 +13,8 @@ struct nvbios_perfE { | |||
13 | u32 vdec; | 13 | u32 vdec; |
14 | u32 disp; | 14 | u32 disp; |
15 | u32 script; | 15 | u32 script; |
16 | u8 pcie_speed; | ||
17 | u8 pcie_width; | ||
16 | }; | 18 | }; |
17 | 19 | ||
18 | u16 nvbios_perf_entry(struct nvkm_bios *, int idx, | 20 | u16 nvbios_perf_entry(struct nvkm_bios *, int idx, |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h index 8708f0a4e188..6b33bc058924 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/clk.h | |||
@@ -2,6 +2,7 @@ | |||
2 | #define __NVKM_CLK_H__ | 2 | #define __NVKM_CLK_H__ |
3 | #include <core/subdev.h> | 3 | #include <core/subdev.h> |
4 | #include <core/notify.h> | 4 | #include <core/notify.h> |
5 | #include <subdev/pci.h> | ||
5 | struct nvbios_pll; | 6 | struct nvbios_pll; |
6 | struct nvkm_pll_vals; | 7 | struct nvkm_pll_vals; |
7 | 8 | ||
@@ -38,7 +39,7 @@ enum nv_clk_src { | |||
38 | nv_clk_src_hubk06, | 39 | nv_clk_src_hubk06, |
39 | nv_clk_src_hubk07, | 40 | nv_clk_src_hubk07, |
40 | nv_clk_src_copy, | 41 | nv_clk_src_copy, |
41 | nv_clk_src_daemon, | 42 | nv_clk_src_pmu, |
42 | nv_clk_src_disp, | 43 | nv_clk_src_disp, |
43 | nv_clk_src_vdec, | 44 | nv_clk_src_vdec, |
44 | 45 | ||
@@ -59,6 +60,8 @@ struct nvkm_pstate { | |||
59 | struct nvkm_cstate base; | 60 | struct nvkm_cstate base; |
60 | u8 pstate; | 61 | u8 pstate; |
61 | u8 fanspeed; | 62 | u8 fanspeed; |
63 | enum nvkm_pcie_speed pcie_speed; | ||
64 | u8 pcie_width; | ||
62 | }; | 65 | }; |
63 | 66 | ||
64 | struct nvkm_domain { | 67 | struct nvkm_domain { |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h index c4dcd2680fe1..ea23e24a246c 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ibus.h | |||
@@ -6,4 +6,5 @@ int gf100_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); | |||
6 | int gf117_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); | 6 | int gf117_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); |
7 | int gk104_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); | 7 | int gk104_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); |
8 | int gk20a_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); | 8 | int gk20a_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); |
9 | int gm204_ibus_new(struct nvkm_device *, int, struct nvkm_subdev **); | ||
9 | #endif | 10 | #endif |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h index 3d4dbbf9aab3..0ffa2ec106d6 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/ltc.h | |||
@@ -37,4 +37,5 @@ int gf100_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); | |||
37 | int gk104_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); | 37 | int gk104_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); |
38 | int gk20a_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); | 38 | int gk20a_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); |
39 | int gm107_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); | 39 | int gm107_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); |
40 | int gm204_ltc_new(struct nvkm_device *, int, struct nvkm_ltc **); | ||
40 | #endif | 41 | #endif |
diff --git a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h index fee0a97c44c5..ddb913889d7e 100644 --- a/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h +++ b/drivers/gpu/drm/nouveau/include/nvkm/subdev/pci.h | |||
@@ -2,6 +2,12 @@ | |||
2 | #define __NVKM_PCI_H__ | 2 | #define __NVKM_PCI_H__ |
3 | #include <core/subdev.h> | 3 | #include <core/subdev.h> |
4 | 4 | ||
5 | enum nvkm_pcie_speed { | ||
6 | NVKM_PCIE_SPEED_2_5, | ||
7 | NVKM_PCIE_SPEED_5_0, | ||
8 | NVKM_PCIE_SPEED_8_0, | ||
9 | }; | ||
10 | |||
5 | struct nvkm_pci { | 11 | struct nvkm_pci { |
6 | const struct nvkm_pci_func *func; | 12 | const struct nvkm_pci_func *func; |
7 | struct nvkm_subdev subdev; | 13 | struct nvkm_subdev subdev; |
@@ -18,6 +24,11 @@ struct nvkm_pci { | |||
18 | bool acquired; | 24 | bool acquired; |
19 | } agp; | 25 | } agp; |
20 | 26 | ||
27 | struct { | ||
28 | enum nvkm_pcie_speed speed; | ||
29 | u8 width; | ||
30 | } pcie; | ||
31 | |||
21 | bool msi; | 32 | bool msi; |
22 | }; | 33 | }; |
23 | 34 | ||
@@ -34,4 +45,9 @@ int nv4c_pci_new(struct nvkm_device *, int, struct nvkm_pci **); | |||
34 | int g84_pci_new(struct nvkm_device *, int, struct nvkm_pci **); | 45 | int g84_pci_new(struct nvkm_device *, int, struct nvkm_pci **); |
35 | int g94_pci_new(struct nvkm_device *, int, struct nvkm_pci **); | 46 | int g94_pci_new(struct nvkm_device *, int, struct nvkm_pci **); |
36 | int gf100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); | 47 | int gf100_pci_new(struct nvkm_device *, int, struct nvkm_pci **); |
48 | int gf106_pci_new(struct nvkm_device *, int, struct nvkm_pci **); | ||
49 | int gk104_pci_new(struct nvkm_device *, int, struct nvkm_pci **); | ||
50 | |||
51 | /* pcie functions */ | ||
52 | int nvkm_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8 width); | ||
37 | #endif | 53 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nouveau_abi16.c b/drivers/gpu/drm/nouveau/nouveau_abi16.c index 7f50cf5f929e..50f52ffe5b0c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_abi16.c +++ b/drivers/gpu/drm/nouveau/nouveau_abi16.c | |||
@@ -25,6 +25,8 @@ | |||
25 | #include <nvif/driver.h> | 25 | #include <nvif/driver.h> |
26 | #include <nvif/ioctl.h> | 26 | #include <nvif/ioctl.h> |
27 | #include <nvif/class.h> | 27 | #include <nvif/class.h> |
28 | #include <nvif/cl0002.h> | ||
29 | #include <nvif/cla06f.h> | ||
28 | #include <nvif/unpack.h> | 30 | #include <nvif/unpack.h> |
29 | 31 | ||
30 | #include "nouveau_drm.h" | 32 | #include "nouveau_drm.h" |
@@ -87,18 +89,18 @@ nouveau_abi16_swclass(struct nouveau_drm *drm) | |||
87 | { | 89 | { |
88 | switch (drm->device.info.family) { | 90 | switch (drm->device.info.family) { |
89 | case NV_DEVICE_INFO_V0_TNT: | 91 | case NV_DEVICE_INFO_V0_TNT: |
90 | return NVIF_IOCTL_NEW_V0_SW_NV04; | 92 | return NVIF_CLASS_SW_NV04; |
91 | case NV_DEVICE_INFO_V0_CELSIUS: | 93 | case NV_DEVICE_INFO_V0_CELSIUS: |
92 | case NV_DEVICE_INFO_V0_KELVIN: | 94 | case NV_DEVICE_INFO_V0_KELVIN: |
93 | case NV_DEVICE_INFO_V0_RANKINE: | 95 | case NV_DEVICE_INFO_V0_RANKINE: |
94 | case NV_DEVICE_INFO_V0_CURIE: | 96 | case NV_DEVICE_INFO_V0_CURIE: |
95 | return NVIF_IOCTL_NEW_V0_SW_NV10; | 97 | return NVIF_CLASS_SW_NV10; |
96 | case NV_DEVICE_INFO_V0_TESLA: | 98 | case NV_DEVICE_INFO_V0_TESLA: |
97 | return NVIF_IOCTL_NEW_V0_SW_NV50; | 99 | return NVIF_CLASS_SW_NV50; |
98 | case NV_DEVICE_INFO_V0_FERMI: | 100 | case NV_DEVICE_INFO_V0_FERMI: |
99 | case NV_DEVICE_INFO_V0_KEPLER: | 101 | case NV_DEVICE_INFO_V0_KEPLER: |
100 | case NV_DEVICE_INFO_V0_MAXWELL: | 102 | case NV_DEVICE_INFO_V0_MAXWELL: |
101 | return NVIF_IOCTL_NEW_V0_SW_GF100; | 103 | return NVIF_CLASS_SW_GF100; |
102 | } | 104 | } |
103 | 105 | ||
104 | return 0x0000; | 106 | return 0x0000; |
@@ -355,9 +357,9 @@ nouveau_abi16_usif(struct drm_file *file_priv, void *data, u32 size) | |||
355 | } *args = data; | 357 | } *args = data; |
356 | struct nouveau_abi16_chan *chan; | 358 | struct nouveau_abi16_chan *chan; |
357 | struct nouveau_abi16 *abi16; | 359 | struct nouveau_abi16 *abi16; |
358 | int ret; | 360 | int ret = -ENOSYS; |
359 | 361 | ||
360 | if (nvif_unpack(args->v0, 0, 0, true)) { | 362 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
361 | switch (args->v0.type) { | 363 | switch (args->v0.type) { |
362 | case NVIF_IOCTL_V0_NEW: | 364 | case NVIF_IOCTL_V0_NEW: |
363 | case NVIF_IOCTL_V0_MTHD: | 365 | case NVIF_IOCTL_V0_MTHD: |
@@ -433,10 +435,10 @@ nouveau_abi16_ioctl_grobj_alloc(ABI16_IOCTL_ARGS) | |||
433 | /* nvsw: compatibility with older 0x*6e class identifier */ | 435 | /* nvsw: compatibility with older 0x*6e class identifier */ |
434 | for (i = 0; !oclass && i < ret; i++) { | 436 | for (i = 0; !oclass && i < ret; i++) { |
435 | switch (sclass[i].oclass) { | 437 | switch (sclass[i].oclass) { |
436 | case NVIF_IOCTL_NEW_V0_SW_NV04: | 438 | case NVIF_CLASS_SW_NV04: |
437 | case NVIF_IOCTL_NEW_V0_SW_NV10: | 439 | case NVIF_CLASS_SW_NV10: |
438 | case NVIF_IOCTL_NEW_V0_SW_NV50: | 440 | case NVIF_CLASS_SW_NV50: |
439 | case NVIF_IOCTL_NEW_V0_SW_GF100: | 441 | case NVIF_CLASS_SW_GF100: |
440 | oclass = sclass[i].oclass; | 442 | oclass = sclass[i].oclass; |
441 | break; | 443 | break; |
442 | default: | 444 | default: |
diff --git a/drivers/gpu/drm/nouveau/nouveau_chan.c b/drivers/gpu/drm/nouveau/nouveau_chan.c index 1860f389f21f..3f804a8c590c 100644 --- a/drivers/gpu/drm/nouveau/nouveau_chan.c +++ b/drivers/gpu/drm/nouveau/nouveau_chan.c | |||
@@ -24,6 +24,11 @@ | |||
24 | 24 | ||
25 | #include <nvif/os.h> | 25 | #include <nvif/os.h> |
26 | #include <nvif/class.h> | 26 | #include <nvif/class.h> |
27 | #include <nvif/cl0002.h> | ||
28 | #include <nvif/cl006b.h> | ||
29 | #include <nvif/cl506f.h> | ||
30 | #include <nvif/cl906f.h> | ||
31 | #include <nvif/cla06f.h> | ||
27 | #include <nvif/ioctl.h> | 32 | #include <nvif/ioctl.h> |
28 | 33 | ||
29 | /*XXX*/ | 34 | /*XXX*/ |
@@ -378,7 +383,7 @@ nouveau_channel_init(struct nouveau_channel *chan, u32 vram, u32 gart) | |||
378 | /* allocate software object class (used for fences on <= nv05) */ | 383 | /* allocate software object class (used for fences on <= nv05) */ |
379 | if (device->info.family < NV_DEVICE_INFO_V0_CELSIUS) { | 384 | if (device->info.family < NV_DEVICE_INFO_V0_CELSIUS) { |
380 | ret = nvif_object_init(&chan->user, 0x006e, | 385 | ret = nvif_object_init(&chan->user, 0x006e, |
381 | NVIF_IOCTL_NEW_V0_SW_NV04, | 386 | NVIF_CLASS_SW_NV04, |
382 | NULL, 0, &chan->nvsw); | 387 | NULL, 0, &chan->nvsw); |
383 | if (ret) | 388 | if (ret) |
384 | return ret; | 389 | return ret; |
diff --git a/drivers/gpu/drm/nouveau/nouveau_connector.c b/drivers/gpu/drm/nouveau/nouveau_connector.c index 5dd1d0111cac..fcebfae5d426 100644 --- a/drivers/gpu/drm/nouveau/nouveau_connector.c +++ b/drivers/gpu/drm/nouveau/nouveau_connector.c | |||
@@ -42,6 +42,8 @@ | |||
42 | #include "nouveau_encoder.h" | 42 | #include "nouveau_encoder.h" |
43 | #include "nouveau_crtc.h" | 43 | #include "nouveau_crtc.h" |
44 | 44 | ||
45 | #include <nvif/class.h> | ||
46 | #include <nvif/cl0046.h> | ||
45 | #include <nvif/event.h> | 47 | #include <nvif/event.h> |
46 | 48 | ||
47 | MODULE_PARM_DESC(tv_disable, "Disable TV-out detection"); | 49 | MODULE_PARM_DESC(tv_disable, "Disable TV-out detection"); |
@@ -56,6 +58,10 @@ MODULE_PARM_DESC(duallink, "Allow dual-link TMDS (default: enabled)"); | |||
56 | int nouveau_duallink = 1; | 58 | int nouveau_duallink = 1; |
57 | module_param_named(duallink, nouveau_duallink, int, 0400); | 59 | module_param_named(duallink, nouveau_duallink, int, 0400); |
58 | 60 | ||
61 | MODULE_PARM_DESC(hdmimhz, "Force a maximum HDMI pixel clock (in MHz)"); | ||
62 | int nouveau_hdmimhz = 0; | ||
63 | module_param_named(hdmimhz, nouveau_hdmimhz, int, 0400); | ||
64 | |||
59 | struct nouveau_encoder * | 65 | struct nouveau_encoder * |
60 | find_encoder(struct drm_connector *connector, int type) | 66 | find_encoder(struct drm_connector *connector, int type) |
61 | { | 67 | { |
@@ -809,12 +815,23 @@ nouveau_connector_get_modes(struct drm_connector *connector) | |||
809 | } | 815 | } |
810 | 816 | ||
811 | static unsigned | 817 | static unsigned |
812 | get_tmds_link_bandwidth(struct drm_connector *connector) | 818 | get_tmds_link_bandwidth(struct drm_connector *connector, bool hdmi) |
813 | { | 819 | { |
814 | struct nouveau_connector *nv_connector = nouveau_connector(connector); | 820 | struct nouveau_connector *nv_connector = nouveau_connector(connector); |
815 | struct nouveau_drm *drm = nouveau_drm(connector->dev); | 821 | struct nouveau_drm *drm = nouveau_drm(connector->dev); |
816 | struct dcb_output *dcb = nv_connector->detected_encoder->dcb; | 822 | struct dcb_output *dcb = nv_connector->detected_encoder->dcb; |
817 | 823 | ||
824 | if (hdmi) { | ||
825 | if (nouveau_hdmimhz > 0) | ||
826 | return nouveau_hdmimhz * 1000; | ||
827 | /* Note: these limits are conservative, some Fermi's | ||
828 | * can do 297 MHz. Unclear how this can be determined. | ||
829 | */ | ||
830 | if (drm->device.info.family >= NV_DEVICE_INFO_V0_KEPLER) | ||
831 | return 297000; | ||
832 | if (drm->device.info.family >= NV_DEVICE_INFO_V0_FERMI) | ||
833 | return 225000; | ||
834 | } | ||
818 | if (dcb->location != DCB_LOC_ON_CHIP || | 835 | if (dcb->location != DCB_LOC_ON_CHIP || |
819 | drm->device.info.chipset >= 0x46) | 836 | drm->device.info.chipset >= 0x46) |
820 | return 165000; | 837 | return 165000; |
@@ -835,6 +852,7 @@ nouveau_connector_mode_valid(struct drm_connector *connector, | |||
835 | struct drm_encoder *encoder = to_drm_encoder(nv_encoder); | 852 | struct drm_encoder *encoder = to_drm_encoder(nv_encoder); |
836 | unsigned min_clock = 25000, max_clock = min_clock; | 853 | unsigned min_clock = 25000, max_clock = min_clock; |
837 | unsigned clock = mode->clock; | 854 | unsigned clock = mode->clock; |
855 | bool hdmi; | ||
838 | 856 | ||
839 | switch (nv_encoder->dcb->type) { | 857 | switch (nv_encoder->dcb->type) { |
840 | case DCB_OUTPUT_LVDS: | 858 | case DCB_OUTPUT_LVDS: |
@@ -847,8 +865,10 @@ nouveau_connector_mode_valid(struct drm_connector *connector, | |||
847 | max_clock = 400000; | 865 | max_clock = 400000; |
848 | break; | 866 | break; |
849 | case DCB_OUTPUT_TMDS: | 867 | case DCB_OUTPUT_TMDS: |
850 | max_clock = get_tmds_link_bandwidth(connector); | 868 | hdmi = drm_detect_hdmi_monitor(nv_connector->edid); |
851 | if (nouveau_duallink && nv_encoder->dcb->duallink_possible) | 869 | max_clock = get_tmds_link_bandwidth(connector, hdmi); |
870 | if (!hdmi && nouveau_duallink && | ||
871 | nv_encoder->dcb->duallink_possible) | ||
852 | max_clock *= 2; | 872 | max_clock *= 2; |
853 | break; | 873 | break; |
854 | case DCB_OUTPUT_ANALOG: | 874 | case DCB_OUTPUT_ANALOG: |
@@ -963,10 +983,13 @@ nouveau_connector_hotplug(struct nvif_notify *notify) | |||
963 | 983 | ||
964 | NV_DEBUG(drm, "%splugged %s\n", plugged ? "" : "un", name); | 984 | NV_DEBUG(drm, "%splugged %s\n", plugged ? "" : "un", name); |
965 | 985 | ||
986 | mutex_lock(&drm->dev->mode_config.mutex); | ||
966 | if (plugged) | 987 | if (plugged) |
967 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); | 988 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_ON); |
968 | else | 989 | else |
969 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); | 990 | drm_helper_connector_dpms(connector, DRM_MODE_DPMS_OFF); |
991 | mutex_unlock(&drm->dev->mode_config.mutex); | ||
992 | |||
970 | drm_helper_hpd_irq_event(connector->dev); | 993 | drm_helper_hpd_irq_event(connector->dev); |
971 | } | 994 | } |
972 | 995 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.c b/drivers/gpu/drm/nouveau/nouveau_debugfs.c index 5392e07edfc6..3d0dc199b253 100644 --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.c +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.c | |||
@@ -28,6 +28,9 @@ | |||
28 | * Ben Skeggs <bskeggs@redhat.com> | 28 | * Ben Skeggs <bskeggs@redhat.com> |
29 | */ | 29 | */ |
30 | 30 | ||
31 | #include <linux/debugfs.h> | ||
32 | #include <nvif/class.h> | ||
33 | #include <nvif/if0001.h> | ||
31 | #include "nouveau_debugfs.h" | 34 | #include "nouveau_debugfs.h" |
32 | #include "nouveau_drm.h" | 35 | #include "nouveau_drm.h" |
33 | 36 | ||
@@ -43,22 +46,233 @@ nouveau_debugfs_vbios_image(struct seq_file *m, void *data) | |||
43 | return 0; | 46 | return 0; |
44 | } | 47 | } |
45 | 48 | ||
49 | static int | ||
50 | nouveau_debugfs_pstate_get(struct seq_file *m, void *data) | ||
51 | { | ||
52 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
53 | struct nouveau_debugfs *debugfs = nouveau_debugfs(node->minor->dev); | ||
54 | struct nvif_object *ctrl = &debugfs->ctrl; | ||
55 | struct nvif_control_pstate_info_v0 info = {}; | ||
56 | int ret, i; | ||
57 | |||
58 | if (!debugfs) | ||
59 | return -ENODEV; | ||
60 | |||
61 | ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_INFO, &info, sizeof(info)); | ||
62 | if (ret) | ||
63 | return ret; | ||
64 | |||
65 | for (i = 0; i < info.count + 1; i++) { | ||
66 | const s32 state = i < info.count ? i : | ||
67 | NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT; | ||
68 | struct nvif_control_pstate_attr_v0 attr = { | ||
69 | .state = state, | ||
70 | .index = 0, | ||
71 | }; | ||
72 | |||
73 | ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_ATTR, | ||
74 | &attr, sizeof(attr)); | ||
75 | if (ret) | ||
76 | return ret; | ||
77 | |||
78 | if (i < info.count) | ||
79 | seq_printf(m, "%02x:", attr.state); | ||
80 | else | ||
81 | seq_printf(m, "%s:", info.pwrsrc == 0 ? "DC" : | ||
82 | info.pwrsrc == 1 ? "AC" : "--"); | ||
83 | |||
84 | attr.index = 0; | ||
85 | do { | ||
86 | attr.state = state; | ||
87 | ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_ATTR, | ||
88 | &attr, sizeof(attr)); | ||
89 | if (ret) | ||
90 | return ret; | ||
91 | |||
92 | seq_printf(m, " %s %d", attr.name, attr.min); | ||
93 | if (attr.min != attr.max) | ||
94 | seq_printf(m, "-%d", attr.max); | ||
95 | seq_printf(m, " %s", attr.unit); | ||
96 | } while (attr.index); | ||
97 | |||
98 | if (state >= 0) { | ||
99 | if (info.ustate_ac == state) | ||
100 | seq_printf(m, " AC"); | ||
101 | if (info.ustate_dc == state) | ||
102 | seq_printf(m, " DC"); | ||
103 | if (info.pstate == state) | ||
104 | seq_printf(m, " *"); | ||
105 | } else { | ||
106 | if (info.ustate_ac < -1) | ||
107 | seq_printf(m, " AC"); | ||
108 | if (info.ustate_dc < -1) | ||
109 | seq_printf(m, " DC"); | ||
110 | } | ||
111 | |||
112 | seq_printf(m, "\n"); | ||
113 | } | ||
114 | |||
115 | return 0; | ||
116 | } | ||
117 | |||
118 | static ssize_t | ||
119 | nouveau_debugfs_pstate_set(struct file *file, const char __user *ubuf, | ||
120 | size_t len, loff_t *offp) | ||
121 | { | ||
122 | struct seq_file *m = file->private_data; | ||
123 | struct drm_info_node *node = (struct drm_info_node *) m->private; | ||
124 | struct nouveau_debugfs *debugfs = nouveau_debugfs(node->minor->dev); | ||
125 | struct nvif_object *ctrl = &debugfs->ctrl; | ||
126 | struct nvif_control_pstate_user_v0 args = { .pwrsrc = -EINVAL }; | ||
127 | char buf[32] = {}, *tmp, *cur = buf; | ||
128 | long value, ret; | ||
129 | |||
130 | if (!debugfs) | ||
131 | return -ENODEV; | ||
132 | |||
133 | if (len >= sizeof(buf)) | ||
134 | return -EINVAL; | ||
135 | |||
136 | if (copy_from_user(buf, ubuf, len)) | ||
137 | return -EFAULT; | ||
138 | |||
139 | if ((tmp = strchr(buf, '\n'))) | ||
140 | *tmp = '\0'; | ||
141 | |||
142 | if (!strncasecmp(cur, "dc:", 3)) { | ||
143 | args.pwrsrc = 0; | ||
144 | cur += 3; | ||
145 | } else | ||
146 | if (!strncasecmp(cur, "ac:", 3)) { | ||
147 | args.pwrsrc = 1; | ||
148 | cur += 3; | ||
149 | } | ||
150 | |||
151 | if (!strcasecmp(cur, "none")) | ||
152 | args.ustate = NVIF_CONTROL_PSTATE_USER_V0_STATE_UNKNOWN; | ||
153 | else | ||
154 | if (!strcasecmp(cur, "auto")) | ||
155 | args.ustate = NVIF_CONTROL_PSTATE_USER_V0_STATE_PERFMON; | ||
156 | else { | ||
157 | ret = kstrtol(cur, 16, &value); | ||
158 | if (ret) | ||
159 | return ret; | ||
160 | args.ustate = value; | ||
161 | } | ||
162 | |||
163 | ret = nvif_mthd(ctrl, NVIF_CONTROL_PSTATE_USER, &args, sizeof(args)); | ||
164 | if (ret < 0) | ||
165 | return ret; | ||
166 | |||
167 | return len; | ||
168 | } | ||
169 | |||
170 | static int | ||
171 | nouveau_debugfs_pstate_open(struct inode *inode, struct file *file) | ||
172 | { | ||
173 | return single_open(file, nouveau_debugfs_pstate_get, inode->i_private); | ||
174 | } | ||
175 | |||
176 | static const struct file_operations nouveau_pstate_fops = { | ||
177 | .owner = THIS_MODULE, | ||
178 | .open = nouveau_debugfs_pstate_open, | ||
179 | .read = seq_read, | ||
180 | .write = nouveau_debugfs_pstate_set, | ||
181 | }; | ||
182 | |||
46 | static struct drm_info_list nouveau_debugfs_list[] = { | 183 | static struct drm_info_list nouveau_debugfs_list[] = { |
47 | { "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL }, | 184 | { "vbios.rom", nouveau_debugfs_vbios_image, 0, NULL }, |
48 | }; | 185 | }; |
49 | #define NOUVEAU_DEBUGFS_ENTRIES ARRAY_SIZE(nouveau_debugfs_list) | 186 | #define NOUVEAU_DEBUGFS_ENTRIES ARRAY_SIZE(nouveau_debugfs_list) |
50 | 187 | ||
51 | int | 188 | static const struct nouveau_debugfs_files { |
52 | nouveau_debugfs_init(struct drm_minor *minor) | 189 | const char *name; |
190 | const struct file_operations *fops; | ||
191 | } nouveau_debugfs_files[] = { | ||
192 | {"pstate", &nouveau_pstate_fops}, | ||
193 | }; | ||
194 | |||
195 | static int | ||
196 | nouveau_debugfs_create_file(struct drm_minor *minor, | ||
197 | const struct nouveau_debugfs_files *ndf) | ||
53 | { | 198 | { |
54 | drm_debugfs_create_files(nouveau_debugfs_list, NOUVEAU_DEBUGFS_ENTRIES, | 199 | struct drm_info_node *node; |
55 | minor->debugfs_root, minor); | 200 | |
201 | node = kmalloc(sizeof(*node), GFP_KERNEL); | ||
202 | if (node == NULL) | ||
203 | return -ENOMEM; | ||
204 | |||
205 | node->minor = minor; | ||
206 | node->info_ent = (const void *)ndf->fops; | ||
207 | node->dent = debugfs_create_file(ndf->name, S_IRUGO | S_IWUSR, | ||
208 | minor->debugfs_root, node, ndf->fops); | ||
209 | if (!node->dent) { | ||
210 | kfree(node); | ||
211 | return -ENOMEM; | ||
212 | } | ||
213 | |||
214 | mutex_lock(&minor->debugfs_lock); | ||
215 | list_add(&node->list, &minor->debugfs_list); | ||
216 | mutex_unlock(&minor->debugfs_lock); | ||
56 | return 0; | 217 | return 0; |
57 | } | 218 | } |
58 | 219 | ||
220 | int | ||
221 | nouveau_drm_debugfs_init(struct drm_minor *minor) | ||
222 | { | ||
223 | int i, ret; | ||
224 | |||
225 | for (i = 0; i < ARRAY_SIZE(nouveau_debugfs_files); i++) { | ||
226 | ret = nouveau_debugfs_create_file(minor, | ||
227 | &nouveau_debugfs_files[i]); | ||
228 | |||
229 | if (ret) | ||
230 | return ret; | ||
231 | } | ||
232 | |||
233 | return drm_debugfs_create_files(nouveau_debugfs_list, | ||
234 | NOUVEAU_DEBUGFS_ENTRIES, | ||
235 | minor->debugfs_root, minor); | ||
236 | } | ||
237 | |||
59 | void | 238 | void |
60 | nouveau_debugfs_takedown(struct drm_minor *minor) | 239 | nouveau_drm_debugfs_cleanup(struct drm_minor *minor) |
61 | { | 240 | { |
241 | int i; | ||
242 | |||
62 | drm_debugfs_remove_files(nouveau_debugfs_list, NOUVEAU_DEBUGFS_ENTRIES, | 243 | drm_debugfs_remove_files(nouveau_debugfs_list, NOUVEAU_DEBUGFS_ENTRIES, |
63 | minor); | 244 | minor); |
245 | |||
246 | for (i = 0; i < ARRAY_SIZE(nouveau_debugfs_files); i++) { | ||
247 | drm_debugfs_remove_files((struct drm_info_list *) | ||
248 | nouveau_debugfs_files[i].fops, | ||
249 | 1, minor); | ||
250 | } | ||
251 | } | ||
252 | |||
253 | int | ||
254 | nouveau_debugfs_init(struct nouveau_drm *drm) | ||
255 | { | ||
256 | int ret; | ||
257 | |||
258 | drm->debugfs = kzalloc(sizeof(*drm->debugfs), GFP_KERNEL); | ||
259 | if (!drm->debugfs) | ||
260 | return -ENOMEM; | ||
261 | |||
262 | ret = nvif_object_init(&drm->device.object, 0, NVIF_CLASS_CONTROL, | ||
263 | NULL, 0, &drm->debugfs->ctrl); | ||
264 | if (ret) | ||
265 | return ret; | ||
266 | |||
267 | return 0; | ||
268 | } | ||
269 | |||
270 | void | ||
271 | nouveau_debugfs_fini(struct nouveau_drm *drm) | ||
272 | { | ||
273 | if (drm->debugfs && drm->debugfs->ctrl.priv) | ||
274 | nvif_object_fini(&drm->debugfs->ctrl); | ||
275 | |||
276 | kfree(drm->debugfs); | ||
277 | drm->debugfs = NULL; | ||
64 | } | 278 | } |
diff --git a/drivers/gpu/drm/nouveau/nouveau_debugfs.h b/drivers/gpu/drm/nouveau/nouveau_debugfs.h index a62af6fb5f99..52c7161297d7 100644 --- a/drivers/gpu/drm/nouveau/nouveau_debugfs.h +++ b/drivers/gpu/drm/nouveau/nouveau_debugfs.h | |||
@@ -4,16 +4,43 @@ | |||
4 | #include <drm/drmP.h> | 4 | #include <drm/drmP.h> |
5 | 5 | ||
6 | #if defined(CONFIG_DEBUG_FS) | 6 | #if defined(CONFIG_DEBUG_FS) |
7 | extern int nouveau_debugfs_init(struct drm_minor *); | 7 | |
8 | extern void nouveau_debugfs_takedown(struct drm_minor *); | 8 | #include "nouveau_drm.h" |
9 | |||
10 | struct nouveau_debugfs { | ||
11 | struct nvif_object ctrl; | ||
12 | }; | ||
13 | |||
14 | static inline struct nouveau_debugfs * | ||
15 | nouveau_debugfs(struct drm_device *dev) | ||
16 | { | ||
17 | return nouveau_drm(dev)->debugfs; | ||
18 | } | ||
19 | |||
20 | extern int nouveau_drm_debugfs_init(struct drm_minor *); | ||
21 | extern void nouveau_drm_debugfs_cleanup(struct drm_minor *); | ||
22 | extern int nouveau_debugfs_init(struct nouveau_drm *); | ||
23 | extern void nouveau_debugfs_fini(struct nouveau_drm *); | ||
9 | #else | 24 | #else |
10 | static inline int | 25 | static inline int |
11 | nouveau_debugfs_init(struct drm_minor *minor) | 26 | nouveau_drm_debugfs_init(struct drm_minor *minor) |
12 | { | 27 | { |
13 | return 0; | 28 | return 0; |
14 | } | 29 | } |
15 | 30 | ||
16 | static inline void nouveau_debugfs_takedown(struct drm_minor *minor) | 31 | static inline void |
32 | nouveau_drm_debugfs_cleanup(struct drm_minor *minor) | ||
33 | { | ||
34 | } | ||
35 | |||
36 | static inline int | ||
37 | nouveau_debugfs_init(struct nouveau_drm *) | ||
38 | { | ||
39 | return 0; | ||
40 | } | ||
41 | |||
42 | static inline void | ||
43 | nouveau_debugfs_fini(struct nouveau_drm *) | ||
17 | { | 44 | { |
18 | } | 45 | } |
19 | 46 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_display.c b/drivers/gpu/drm/nouveau/nouveau_display.c index 18676b8c1721..24be27d3cd18 100644 --- a/drivers/gpu/drm/nouveau/nouveau_display.c +++ b/drivers/gpu/drm/nouveau/nouveau_display.c | |||
@@ -39,6 +39,7 @@ | |||
39 | 39 | ||
40 | #include "nouveau_fence.h" | 40 | #include "nouveau_fence.h" |
41 | 41 | ||
42 | #include <nvif/cl0046.h> | ||
42 | #include <nvif/event.h> | 43 | #include <nvif/event.h> |
43 | 44 | ||
44 | static int | 45 | static int |
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.c b/drivers/gpu/drm/nouveau/nouveau_drm.c index b3a563c44bcd..2f2f252e3fb6 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.c +++ b/drivers/gpu/drm/nouveau/nouveau_drm.c | |||
@@ -37,12 +37,16 @@ | |||
37 | #include <core/pci.h> | 37 | #include <core/pci.h> |
38 | #include <core/tegra.h> | 38 | #include <core/tegra.h> |
39 | 39 | ||
40 | #include <nvif/class.h> | ||
41 | #include <nvif/cl0002.h> | ||
42 | #include <nvif/cla06f.h> | ||
43 | #include <nvif/if0004.h> | ||
44 | |||
40 | #include "nouveau_drm.h" | 45 | #include "nouveau_drm.h" |
41 | #include "nouveau_dma.h" | 46 | #include "nouveau_dma.h" |
42 | #include "nouveau_ttm.h" | 47 | #include "nouveau_ttm.h" |
43 | #include "nouveau_gem.h" | 48 | #include "nouveau_gem.h" |
44 | #include "nouveau_vga.h" | 49 | #include "nouveau_vga.h" |
45 | #include "nouveau_sysfs.h" | ||
46 | #include "nouveau_hwmon.h" | 50 | #include "nouveau_hwmon.h" |
47 | #include "nouveau_acpi.h" | 51 | #include "nouveau_acpi.h" |
48 | #include "nouveau_bios.h" | 52 | #include "nouveau_bios.h" |
@@ -256,8 +260,8 @@ nouveau_accel_init(struct nouveau_drm *drm) | |||
256 | } | 260 | } |
257 | 261 | ||
258 | ret = nvif_notify_init(&drm->nvsw, nouveau_flip_complete, | 262 | ret = nvif_notify_init(&drm->nvsw, nouveau_flip_complete, |
259 | false, NVSW_NTFY_UEVENT, NULL, 0, 0, | 263 | false, NV04_NVSW_NTFY_UEVENT, |
260 | &drm->flip); | 264 | NULL, 0, 0, &drm->flip); |
261 | if (ret == 0) | 265 | if (ret == 0) |
262 | ret = nvif_notify_get(&drm->flip); | 266 | ret = nvif_notify_get(&drm->flip); |
263 | if (ret) { | 267 | if (ret) { |
@@ -448,7 +452,7 @@ nouveau_drm_load(struct drm_device *dev, unsigned long flags) | |||
448 | goto fail_dispinit; | 452 | goto fail_dispinit; |
449 | } | 453 | } |
450 | 454 | ||
451 | nouveau_sysfs_init(dev); | 455 | nouveau_debugfs_init(drm); |
452 | nouveau_hwmon_init(dev); | 456 | nouveau_hwmon_init(dev); |
453 | nouveau_accel_init(drm); | 457 | nouveau_accel_init(drm); |
454 | nouveau_fbcon_init(dev); | 458 | nouveau_fbcon_init(dev); |
@@ -486,7 +490,7 @@ nouveau_drm_unload(struct drm_device *dev) | |||
486 | nouveau_fbcon_fini(dev); | 490 | nouveau_fbcon_fini(dev); |
487 | nouveau_accel_fini(drm); | 491 | nouveau_accel_fini(drm); |
488 | nouveau_hwmon_fini(dev); | 492 | nouveau_hwmon_fini(dev); |
489 | nouveau_sysfs_fini(dev); | 493 | nouveau_debugfs_fini(drm); |
490 | 494 | ||
491 | if (dev->mode_config.num_crtc) | 495 | if (dev->mode_config.num_crtc) |
492 | nouveau_display_fini(dev); | 496 | nouveau_display_fini(dev); |
@@ -928,8 +932,8 @@ driver_stub = { | |||
928 | .lastclose = nouveau_vga_lastclose, | 932 | .lastclose = nouveau_vga_lastclose, |
929 | 933 | ||
930 | #if defined(CONFIG_DEBUG_FS) | 934 | #if defined(CONFIG_DEBUG_FS) |
931 | .debugfs_init = nouveau_debugfs_init, | 935 | .debugfs_init = nouveau_drm_debugfs_init, |
932 | .debugfs_cleanup = nouveau_debugfs_takedown, | 936 | .debugfs_cleanup = nouveau_drm_debugfs_cleanup, |
933 | #endif | 937 | #endif |
934 | 938 | ||
935 | .get_vblank_counter = drm_vblank_no_hw_counter, | 939 | .get_vblank_counter = drm_vblank_no_hw_counter, |
@@ -1003,7 +1007,6 @@ static void nouveau_display_options(void) | |||
1003 | DRM_DEBUG_DRIVER("... modeset : %d\n", nouveau_modeset); | 1007 | DRM_DEBUG_DRIVER("... modeset : %d\n", nouveau_modeset); |
1004 | DRM_DEBUG_DRIVER("... runpm : %d\n", nouveau_runtime_pm); | 1008 | DRM_DEBUG_DRIVER("... runpm : %d\n", nouveau_runtime_pm); |
1005 | DRM_DEBUG_DRIVER("... vram_pushbuf : %d\n", nouveau_vram_pushbuf); | 1009 | DRM_DEBUG_DRIVER("... vram_pushbuf : %d\n", nouveau_vram_pushbuf); |
1006 | DRM_DEBUG_DRIVER("... pstate : %d\n", nouveau_pstate); | ||
1007 | } | 1010 | } |
1008 | 1011 | ||
1009 | static const struct dev_pm_ops nouveau_pm_ops = { | 1012 | static const struct dev_pm_ops nouveau_pm_ops = { |
diff --git a/drivers/gpu/drm/nouveau/nouveau_drm.h b/drivers/gpu/drm/nouveau/nouveau_drm.h index a02813e994ec..5c363ed1c842 100644 --- a/drivers/gpu/drm/nouveau/nouveau_drm.h +++ b/drivers/gpu/drm/nouveau/nouveau_drm.h | |||
@@ -164,7 +164,7 @@ struct nouveau_drm { | |||
164 | 164 | ||
165 | /* power management */ | 165 | /* power management */ |
166 | struct nouveau_hwmon *hwmon; | 166 | struct nouveau_hwmon *hwmon; |
167 | struct nouveau_sysfs *sysfs; | 167 | struct nouveau_debugfs *debugfs; |
168 | 168 | ||
169 | /* display power reference */ | 169 | /* display power reference */ |
170 | bool have_disp_power_ref; | 170 | bool have_disp_power_ref; |
diff --git a/drivers/gpu/drm/nouveau/nouveau_fence.c b/drivers/gpu/drm/nouveau/nouveau_fence.c index 574c36b492ee..9a8c5b727f59 100644 --- a/drivers/gpu/drm/nouveau/nouveau_fence.c +++ b/drivers/gpu/drm/nouveau/nouveau_fence.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <linux/hrtimer.h> | 30 | #include <linux/hrtimer.h> |
31 | #include <trace/events/fence.h> | 31 | #include <trace/events/fence.h> |
32 | 32 | ||
33 | #include <nvif/cl826e.h> | ||
33 | #include <nvif/notify.h> | 34 | #include <nvif/notify.h> |
34 | #include <nvif/event.h> | 35 | #include <nvif/event.h> |
35 | 36 | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_hwmon.c b/drivers/gpu/drm/nouveau/nouveau_hwmon.c index 491c7149d197..8e13467d0ddb 100644 --- a/drivers/gpu/drm/nouveau/nouveau_hwmon.c +++ b/drivers/gpu/drm/nouveau/nouveau_hwmon.c | |||
@@ -34,6 +34,8 @@ | |||
34 | #include "nouveau_drm.h" | 34 | #include "nouveau_drm.h" |
35 | #include "nouveau_hwmon.h" | 35 | #include "nouveau_hwmon.h" |
36 | 36 | ||
37 | #include <nvkm/subdev/volt.h> | ||
38 | |||
37 | #if defined(CONFIG_HWMON) || (defined(MODULE) && defined(CONFIG_HWMON_MODULE)) | 39 | #if defined(CONFIG_HWMON) || (defined(MODULE) && defined(CONFIG_HWMON_MODULE)) |
38 | static ssize_t | 40 | static ssize_t |
39 | nouveau_hwmon_show_temp(struct device *d, struct device_attribute *a, char *buf) | 41 | nouveau_hwmon_show_temp(struct device *d, struct device_attribute *a, char *buf) |
@@ -512,6 +514,35 @@ static SENSOR_DEVICE_ATTR(pwm1_max, S_IRUGO | S_IWUSR, | |||
512 | nouveau_hwmon_get_pwm1_max, | 514 | nouveau_hwmon_get_pwm1_max, |
513 | nouveau_hwmon_set_pwm1_max, 0); | 515 | nouveau_hwmon_set_pwm1_max, 0); |
514 | 516 | ||
517 | static ssize_t | ||
518 | nouveau_hwmon_get_in0_input(struct device *d, | ||
519 | struct device_attribute *a, char *buf) | ||
520 | { | ||
521 | struct drm_device *dev = dev_get_drvdata(d); | ||
522 | struct nouveau_drm *drm = nouveau_drm(dev); | ||
523 | struct nvkm_volt *volt = nvxx_volt(&drm->device); | ||
524 | int ret; | ||
525 | |||
526 | ret = nvkm_volt_get(volt); | ||
527 | if (ret < 0) | ||
528 | return ret; | ||
529 | |||
530 | return sprintf(buf, "%i\n", ret / 1000); | ||
531 | } | ||
532 | |||
533 | static SENSOR_DEVICE_ATTR(in0_input, S_IRUGO, | ||
534 | nouveau_hwmon_get_in0_input, NULL, 0); | ||
535 | |||
536 | static ssize_t | ||
537 | nouveau_hwmon_get_in0_label(struct device *d, | ||
538 | struct device_attribute *a, char *buf) | ||
539 | { | ||
540 | return sprintf(buf, "GPU core\n"); | ||
541 | } | ||
542 | |||
543 | static SENSOR_DEVICE_ATTR(in0_label, S_IRUGO, | ||
544 | nouveau_hwmon_get_in0_label, NULL, 0); | ||
545 | |||
515 | static struct attribute *hwmon_default_attributes[] = { | 546 | static struct attribute *hwmon_default_attributes[] = { |
516 | &sensor_dev_attr_name.dev_attr.attr, | 547 | &sensor_dev_attr_name.dev_attr.attr, |
517 | &sensor_dev_attr_update_rate.dev_attr.attr, | 548 | &sensor_dev_attr_update_rate.dev_attr.attr, |
@@ -542,6 +573,12 @@ static struct attribute *hwmon_pwm_fan_attributes[] = { | |||
542 | NULL | 573 | NULL |
543 | }; | 574 | }; |
544 | 575 | ||
576 | static struct attribute *hwmon_in0_attributes[] = { | ||
577 | &sensor_dev_attr_in0_input.dev_attr.attr, | ||
578 | &sensor_dev_attr_in0_label.dev_attr.attr, | ||
579 | NULL | ||
580 | }; | ||
581 | |||
545 | static const struct attribute_group hwmon_default_attrgroup = { | 582 | static const struct attribute_group hwmon_default_attrgroup = { |
546 | .attrs = hwmon_default_attributes, | 583 | .attrs = hwmon_default_attributes, |
547 | }; | 584 | }; |
@@ -554,6 +591,9 @@ static const struct attribute_group hwmon_fan_rpm_attrgroup = { | |||
554 | static const struct attribute_group hwmon_pwm_fan_attrgroup = { | 591 | static const struct attribute_group hwmon_pwm_fan_attrgroup = { |
555 | .attrs = hwmon_pwm_fan_attributes, | 592 | .attrs = hwmon_pwm_fan_attributes, |
556 | }; | 593 | }; |
594 | static const struct attribute_group hwmon_in0_attrgroup = { | ||
595 | .attrs = hwmon_in0_attributes, | ||
596 | }; | ||
557 | #endif | 597 | #endif |
558 | 598 | ||
559 | int | 599 | int |
@@ -562,6 +602,7 @@ nouveau_hwmon_init(struct drm_device *dev) | |||
562 | #if defined(CONFIG_HWMON) || (defined(MODULE) && defined(CONFIG_HWMON_MODULE)) | 602 | #if defined(CONFIG_HWMON) || (defined(MODULE) && defined(CONFIG_HWMON_MODULE)) |
563 | struct nouveau_drm *drm = nouveau_drm(dev); | 603 | struct nouveau_drm *drm = nouveau_drm(dev); |
564 | struct nvkm_therm *therm = nvxx_therm(&drm->device); | 604 | struct nvkm_therm *therm = nvxx_therm(&drm->device); |
605 | struct nvkm_volt *volt = nvxx_volt(&drm->device); | ||
565 | struct nouveau_hwmon *hwmon; | 606 | struct nouveau_hwmon *hwmon; |
566 | struct device *hwmon_dev; | 607 | struct device *hwmon_dev; |
567 | int ret = 0; | 608 | int ret = 0; |
@@ -613,6 +654,14 @@ nouveau_hwmon_init(struct drm_device *dev) | |||
613 | goto error; | 654 | goto error; |
614 | } | 655 | } |
615 | 656 | ||
657 | if (volt && nvkm_volt_get(volt) >= 0) { | ||
658 | ret = sysfs_create_group(&hwmon_dev->kobj, | ||
659 | &hwmon_in0_attrgroup); | ||
660 | |||
661 | if (ret) | ||
662 | goto error; | ||
663 | } | ||
664 | |||
616 | hwmon->hwmon = hwmon_dev; | 665 | hwmon->hwmon = hwmon_dev; |
617 | 666 | ||
618 | return 0; | 667 | return 0; |
@@ -638,6 +687,7 @@ nouveau_hwmon_fini(struct drm_device *dev) | |||
638 | sysfs_remove_group(&hwmon->hwmon->kobj, &hwmon_temp_attrgroup); | 687 | sysfs_remove_group(&hwmon->hwmon->kobj, &hwmon_temp_attrgroup); |
639 | sysfs_remove_group(&hwmon->hwmon->kobj, &hwmon_pwm_fan_attrgroup); | 688 | sysfs_remove_group(&hwmon->hwmon->kobj, &hwmon_pwm_fan_attrgroup); |
640 | sysfs_remove_group(&hwmon->hwmon->kobj, &hwmon_fan_rpm_attrgroup); | 689 | sysfs_remove_group(&hwmon->hwmon->kobj, &hwmon_fan_rpm_attrgroup); |
690 | sysfs_remove_group(&hwmon->hwmon->kobj, &hwmon_in0_attrgroup); | ||
641 | 691 | ||
642 | hwmon_device_unregister(hwmon->hwmon); | 692 | hwmon_device_unregister(hwmon->hwmon); |
643 | } | 693 | } |
diff --git a/drivers/gpu/drm/nouveau/nouveau_platform.c b/drivers/gpu/drm/nouveau/nouveau_platform.c index 60e32c4e4e49..8a70cec59bcd 100644 --- a/drivers/gpu/drm/nouveau/nouveau_platform.c +++ b/drivers/gpu/drm/nouveau/nouveau_platform.c | |||
@@ -78,3 +78,14 @@ struct platform_driver nouveau_platform_driver = { | |||
78 | .probe = nouveau_platform_probe, | 78 | .probe = nouveau_platform_probe, |
79 | .remove = nouveau_platform_remove, | 79 | .remove = nouveau_platform_remove, |
80 | }; | 80 | }; |
81 | |||
82 | #if IS_ENABLED(CONFIG_ARCH_TEGRA_124_SOC) || IS_ENABLED(CONFIG_ARCH_TEGRA_132_SOC) | ||
83 | MODULE_FIRMWARE("nvidia/gk20a/fecs_data.bin"); | ||
84 | MODULE_FIRMWARE("nvidia/gk20a/fecs_inst.bin"); | ||
85 | MODULE_FIRMWARE("nvidia/gk20a/gpccs_data.bin"); | ||
86 | MODULE_FIRMWARE("nvidia/gk20a/gpccs_inst.bin"); | ||
87 | MODULE_FIRMWARE("nvidia/gk20a/sw_bundle_init.bin"); | ||
88 | MODULE_FIRMWARE("nvidia/gk20a/sw_ctx.bin"); | ||
89 | MODULE_FIRMWARE("nvidia/gk20a/sw_method_init.bin"); | ||
90 | MODULE_FIRMWARE("nvidia/gk20a/sw_nonctx.bin"); | ||
91 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_sysfs.c b/drivers/gpu/drm/nouveau/nouveau_sysfs.c deleted file mode 100644 index 5dac3546c1b8..000000000000 --- a/drivers/gpu/drm/nouveau/nouveau_sysfs.c +++ /dev/null | |||
@@ -1,197 +0,0 @@ | |||
1 | /* | ||
2 | * Copyright 2013 Red Hat Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Authors: Ben Skeggs <bskeggs@redhat.com> | ||
23 | */ | ||
24 | |||
25 | #include <nvif/os.h> | ||
26 | #include <nvif/class.h> | ||
27 | #include <nvif/ioctl.h> | ||
28 | |||
29 | #include "nouveau_sysfs.h" | ||
30 | |||
31 | MODULE_PARM_DESC(pstate, "enable sysfs pstate file, which will be moved in the future"); | ||
32 | int nouveau_pstate; | ||
33 | module_param_named(pstate, nouveau_pstate, int, 0400); | ||
34 | |||
35 | static inline struct drm_device * | ||
36 | drm_device(struct device *d) | ||
37 | { | ||
38 | return dev_get_drvdata(d); | ||
39 | } | ||
40 | |||
41 | #define snappendf(p,r,f,a...) do { \ | ||
42 | snprintf(p, r, f, ##a); \ | ||
43 | r -= strlen(p); \ | ||
44 | p += strlen(p); \ | ||
45 | } while(0) | ||
46 | |||
47 | static ssize_t | ||
48 | nouveau_sysfs_pstate_get(struct device *d, struct device_attribute *a, char *b) | ||
49 | { | ||
50 | struct nouveau_sysfs *sysfs = nouveau_sysfs(drm_device(d)); | ||
51 | struct nvif_control_pstate_info_v0 info = {}; | ||
52 | size_t cnt = PAGE_SIZE; | ||
53 | char *buf = b; | ||
54 | int ret, i; | ||
55 | |||
56 | ret = nvif_mthd(&sysfs->ctrl, NVIF_CONTROL_PSTATE_INFO, | ||
57 | &info, sizeof(info)); | ||
58 | if (ret) | ||
59 | return ret; | ||
60 | |||
61 | for (i = 0; i < info.count + 1; i++) { | ||
62 | const s32 state = i < info.count ? i : | ||
63 | NVIF_CONTROL_PSTATE_ATTR_V0_STATE_CURRENT; | ||
64 | struct nvif_control_pstate_attr_v0 attr = { | ||
65 | .state = state, | ||
66 | .index = 0, | ||
67 | }; | ||
68 | |||
69 | ret = nvif_mthd(&sysfs->ctrl, NVIF_CONTROL_PSTATE_ATTR, | ||
70 | &attr, sizeof(attr)); | ||
71 | if (ret) | ||
72 | return ret; | ||
73 | |||
74 | if (i < info.count) | ||
75 | snappendf(buf, cnt, "%02x:", attr.state); | ||
76 | else | ||
77 | snappendf(buf, cnt, "%s:", info.pwrsrc == 0 ? "DC" : | ||
78 | info.pwrsrc == 1 ? "AC" : | ||
79 | "--"); | ||
80 | |||
81 | attr.index = 0; | ||
82 | do { | ||
83 | attr.state = state; | ||
84 | ret = nvif_mthd(&sysfs->ctrl, | ||
85 | NVIF_CONTROL_PSTATE_ATTR, | ||
86 | &attr, sizeof(attr)); | ||
87 | if (ret) | ||
88 | return ret; | ||
89 | |||
90 | snappendf(buf, cnt, " %s %d", attr.name, attr.min); | ||
91 | if (attr.min != attr.max) | ||
92 | snappendf(buf, cnt, "-%d", attr.max); | ||
93 | snappendf(buf, cnt, " %s", attr.unit); | ||
94 | } while (attr.index); | ||
95 | |||
96 | if (state >= 0) { | ||
97 | if (info.ustate_ac == state) | ||
98 | snappendf(buf, cnt, " AC"); | ||
99 | if (info.ustate_dc == state) | ||
100 | snappendf(buf, cnt, " DC"); | ||
101 | if (info.pstate == state) | ||
102 | snappendf(buf, cnt, " *"); | ||
103 | } else { | ||
104 | if (info.ustate_ac < -1) | ||
105 | snappendf(buf, cnt, " AC"); | ||
106 | if (info.ustate_dc < -1) | ||
107 | snappendf(buf, cnt, " DC"); | ||
108 | } | ||
109 | |||
110 | snappendf(buf, cnt, "\n"); | ||
111 | } | ||
112 | |||
113 | return strlen(b); | ||
114 | } | ||
115 | |||
116 | static ssize_t | ||
117 | nouveau_sysfs_pstate_set(struct device *d, struct device_attribute *a, | ||
118 | const char *buf, size_t count) | ||
119 | { | ||
120 | struct nouveau_sysfs *sysfs = nouveau_sysfs(drm_device(d)); | ||
121 | struct nvif_control_pstate_user_v0 args = { .pwrsrc = -EINVAL }; | ||
122 | long value, ret; | ||
123 | char *tmp; | ||
124 | |||
125 | if ((tmp = strchr(buf, '\n'))) | ||
126 | *tmp = '\0'; | ||
127 | |||
128 | if (!strncasecmp(buf, "dc:", 3)) { | ||
129 | args.pwrsrc = 0; | ||
130 | buf += 3; | ||
131 | } else | ||
132 | if (!strncasecmp(buf, "ac:", 3)) { | ||
133 | args.pwrsrc = 1; | ||
134 | buf += 3; | ||
135 | } | ||
136 | |||
137 | if (!strcasecmp(buf, "none")) | ||
138 | args.ustate = NVIF_CONTROL_PSTATE_USER_V0_STATE_UNKNOWN; | ||
139 | else | ||
140 | if (!strcasecmp(buf, "auto")) | ||
141 | args.ustate = NVIF_CONTROL_PSTATE_USER_V0_STATE_PERFMON; | ||
142 | else { | ||
143 | ret = kstrtol(buf, 16, &value); | ||
144 | if (ret) | ||
145 | return ret; | ||
146 | args.ustate = value; | ||
147 | } | ||
148 | |||
149 | ret = nvif_mthd(&sysfs->ctrl, NVIF_CONTROL_PSTATE_USER, | ||
150 | &args, sizeof(args)); | ||
151 | if (ret < 0) | ||
152 | return ret; | ||
153 | |||
154 | return count; | ||
155 | } | ||
156 | |||
157 | static DEVICE_ATTR(pstate, S_IRUGO | S_IWUSR, | ||
158 | nouveau_sysfs_pstate_get, nouveau_sysfs_pstate_set); | ||
159 | |||
160 | void | ||
161 | nouveau_sysfs_fini(struct drm_device *dev) | ||
162 | { | ||
163 | struct nouveau_sysfs *sysfs = nouveau_sysfs(dev); | ||
164 | struct nouveau_drm *drm = nouveau_drm(dev); | ||
165 | struct nvif_device *device = &drm->device; | ||
166 | |||
167 | if (sysfs && sysfs->ctrl.priv) { | ||
168 | device_remove_file(nvxx_device(device)->dev, &dev_attr_pstate); | ||
169 | nvif_object_fini(&sysfs->ctrl); | ||
170 | } | ||
171 | |||
172 | drm->sysfs = NULL; | ||
173 | kfree(sysfs); | ||
174 | } | ||
175 | |||
176 | int | ||
177 | nouveau_sysfs_init(struct drm_device *dev) | ||
178 | { | ||
179 | struct nouveau_drm *drm = nouveau_drm(dev); | ||
180 | struct nvif_device *device = &drm->device; | ||
181 | struct nouveau_sysfs *sysfs; | ||
182 | int ret; | ||
183 | |||
184 | if (!nouveau_pstate) | ||
185 | return 0; | ||
186 | |||
187 | sysfs = drm->sysfs = kzalloc(sizeof(*sysfs), GFP_KERNEL); | ||
188 | if (!sysfs) | ||
189 | return -ENOMEM; | ||
190 | |||
191 | ret = nvif_object_init(&device->object, 0, NVIF_IOCTL_NEW_V0_CONTROL, | ||
192 | NULL, 0, &sysfs->ctrl); | ||
193 | if (ret == 0) | ||
194 | device_create_file(nvxx_device(device)->dev, &dev_attr_pstate); | ||
195 | |||
196 | return 0; | ||
197 | } | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_sysfs.h b/drivers/gpu/drm/nouveau/nouveau_sysfs.h deleted file mode 100644 index 4e5ea9241b28..000000000000 --- a/drivers/gpu/drm/nouveau/nouveau_sysfs.h +++ /dev/null | |||
@@ -1,21 +0,0 @@ | |||
1 | #ifndef __NOUVEAU_SYSFS_H__ | ||
2 | #define __NOUVEAU_SYSFS_H__ | ||
3 | |||
4 | #include "nouveau_drm.h" | ||
5 | |||
6 | struct nouveau_sysfs { | ||
7 | struct nvif_object ctrl; | ||
8 | }; | ||
9 | |||
10 | static inline struct nouveau_sysfs * | ||
11 | nouveau_sysfs(struct drm_device *dev) | ||
12 | { | ||
13 | return nouveau_drm(dev)->sysfs; | ||
14 | } | ||
15 | |||
16 | int nouveau_sysfs_init(struct drm_device *); | ||
17 | void nouveau_sysfs_fini(struct drm_device *); | ||
18 | |||
19 | extern int nouveau_pstate; | ||
20 | |||
21 | #endif | ||
diff --git a/drivers/gpu/drm/nouveau/nouveau_usif.c b/drivers/gpu/drm/nouveau/nouveau_usif.c index 6ae1b3494bcd..e9f52ef0be83 100644 --- a/drivers/gpu/drm/nouveau/nouveau_usif.c +++ b/drivers/gpu/drm/nouveau/nouveau_usif.c | |||
@@ -130,20 +130,21 @@ usif_notify_new(struct drm_file *f, void *data, u32 size, void *argv, u32 argc) | |||
130 | struct nvif_notify_req_v0 v0; | 130 | struct nvif_notify_req_v0 v0; |
131 | } *req; | 131 | } *req; |
132 | struct usif_notify *ntfy; | 132 | struct usif_notify *ntfy; |
133 | int ret; | 133 | int ret = -ENOSYS; |
134 | 134 | ||
135 | if (nvif_unpack(args->v0, 0, 0, true)) { | 135 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
136 | if (usif_notify_find(f, args->v0.index)) | 136 | if (usif_notify_find(f, args->v0.index)) |
137 | return -EEXIST; | 137 | return -EEXIST; |
138 | } else | 138 | } else |
139 | return ret; | 139 | return ret; |
140 | req = data; | 140 | req = data; |
141 | ret = -ENOSYS; | ||
141 | 142 | ||
142 | if (!(ntfy = kmalloc(sizeof(*ntfy), GFP_KERNEL))) | 143 | if (!(ntfy = kmalloc(sizeof(*ntfy), GFP_KERNEL))) |
143 | return -ENOMEM; | 144 | return -ENOMEM; |
144 | atomic_set(&ntfy->enabled, 0); | 145 | atomic_set(&ntfy->enabled, 0); |
145 | 146 | ||
146 | if (nvif_unpack(req->v0, 0, 0, true)) { | 147 | if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, true))) { |
147 | ntfy->reply = sizeof(struct nvif_notify_rep_v0) + req->v0.reply; | 148 | ntfy->reply = sizeof(struct nvif_notify_rep_v0) + req->v0.reply; |
148 | ntfy->route = req->v0.route; | 149 | ntfy->route = req->v0.route; |
149 | ntfy->token = req->v0.token; | 150 | ntfy->token = req->v0.token; |
@@ -171,9 +172,9 @@ usif_notify_del(struct drm_file *f, void *data, u32 size, void *argv, u32 argc) | |||
171 | struct nvif_ioctl_ntfy_del_v0 v0; | 172 | struct nvif_ioctl_ntfy_del_v0 v0; |
172 | } *args = data; | 173 | } *args = data; |
173 | struct usif_notify *ntfy; | 174 | struct usif_notify *ntfy; |
174 | int ret; | 175 | int ret = -ENOSYS; |
175 | 176 | ||
176 | if (nvif_unpack(args->v0, 0, 0, true)) { | 177 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
177 | if (!(ntfy = usif_notify_find(f, args->v0.index))) | 178 | if (!(ntfy = usif_notify_find(f, args->v0.index))) |
178 | return -ENOENT; | 179 | return -ENOENT; |
179 | } else | 180 | } else |
@@ -194,9 +195,9 @@ usif_notify_get(struct drm_file *f, void *data, u32 size, void *argv, u32 argc) | |||
194 | struct nvif_ioctl_ntfy_del_v0 v0; | 195 | struct nvif_ioctl_ntfy_del_v0 v0; |
195 | } *args = data; | 196 | } *args = data; |
196 | struct usif_notify *ntfy; | 197 | struct usif_notify *ntfy; |
197 | int ret; | 198 | int ret = -ENOSYS; |
198 | 199 | ||
199 | if (nvif_unpack(args->v0, 0, 0, true)) { | 200 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
200 | if (!(ntfy = usif_notify_find(f, args->v0.index))) | 201 | if (!(ntfy = usif_notify_find(f, args->v0.index))) |
201 | return -ENOENT; | 202 | return -ENOENT; |
202 | } else | 203 | } else |
@@ -233,9 +234,9 @@ usif_notify_put(struct drm_file *f, void *data, u32 size, void *argv, u32 argc) | |||
233 | struct nvif_ioctl_ntfy_put_v0 v0; | 234 | struct nvif_ioctl_ntfy_put_v0 v0; |
234 | } *args = data; | 235 | } *args = data; |
235 | struct usif_notify *ntfy; | 236 | struct usif_notify *ntfy; |
236 | int ret; | 237 | int ret = -ENOSYS; |
237 | 238 | ||
238 | if (nvif_unpack(args->v0, 0, 0, true)) { | 239 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
239 | if (!(ntfy = usif_notify_find(f, args->v0.index))) | 240 | if (!(ntfy = usif_notify_find(f, args->v0.index))) |
240 | return -ENOENT; | 241 | return -ENOENT; |
241 | } else | 242 | } else |
@@ -270,13 +271,13 @@ usif_object_new(struct drm_file *f, void *data, u32 size, void *argv, u32 argc) | |||
270 | struct nvif_ioctl_new_v0 v0; | 271 | struct nvif_ioctl_new_v0 v0; |
271 | } *args = data; | 272 | } *args = data; |
272 | struct usif_object *object; | 273 | struct usif_object *object; |
273 | int ret; | 274 | int ret = -ENOSYS; |
274 | 275 | ||
275 | if (!(object = kmalloc(sizeof(*object), GFP_KERNEL))) | 276 | if (!(object = kmalloc(sizeof(*object), GFP_KERNEL))) |
276 | return -ENOMEM; | 277 | return -ENOMEM; |
277 | list_add(&object->head, &cli->objects); | 278 | list_add(&object->head, &cli->objects); |
278 | 279 | ||
279 | if (nvif_unpack(args->v0, 0, 0, true)) { | 280 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
280 | object->route = args->v0.route; | 281 | object->route = args->v0.route; |
281 | object->token = args->v0.token; | 282 | object->token = args->v0.token; |
282 | args->v0.route = NVDRM_OBJECT_USIF; | 283 | args->v0.route = NVDRM_OBJECT_USIF; |
@@ -310,7 +311,7 @@ usif_ioctl(struct drm_file *filp, void __user *user, u32 argc) | |||
310 | if (ret = -EFAULT, copy_from_user(argv, user, size)) | 311 | if (ret = -EFAULT, copy_from_user(argv, user, size)) |
311 | goto done; | 312 | goto done; |
312 | 313 | ||
313 | if (nvif_unpack(argv->v0, 0, 0, true)) { | 314 | if (!(ret = nvif_unpack(-ENOSYS, &data, &size, argv->v0, 0, 0, true))) { |
314 | /* block access to objects not created via this interface */ | 315 | /* block access to objects not created via this interface */ |
315 | owner = argv->v0.owner; | 316 | owner = argv->v0.owner; |
316 | if (argv->v0.object == 0ULL) | 317 | if (argv->v0.object == 0ULL) |
diff --git a/drivers/gpu/drm/nouveau/nv04_fence.c b/drivers/gpu/drm/nouveau/nv04_fence.c index f3d705d67738..3022d24ed88b 100644 --- a/drivers/gpu/drm/nouveau/nv04_fence.c +++ b/drivers/gpu/drm/nouveau/nv04_fence.c | |||
@@ -26,6 +26,8 @@ | |||
26 | #include "nouveau_dma.h" | 26 | #include "nouveau_dma.h" |
27 | #include "nouveau_fence.h" | 27 | #include "nouveau_fence.h" |
28 | 28 | ||
29 | #include <nvif/if0004.h> | ||
30 | |||
29 | struct nv04_fence_chan { | 31 | struct nv04_fence_chan { |
30 | struct nouveau_fence_chan base; | 32 | struct nouveau_fence_chan base; |
31 | }; | 33 | }; |
diff --git a/drivers/gpu/drm/nouveau/nv17_fence.c b/drivers/gpu/drm/nouveau/nv17_fence.c index 80b6eb8b3d02..6a141c9bf5b7 100644 --- a/drivers/gpu/drm/nouveau/nv17_fence.c +++ b/drivers/gpu/drm/nouveau/nv17_fence.c | |||
@@ -24,6 +24,7 @@ | |||
24 | 24 | ||
25 | #include <nvif/os.h> | 25 | #include <nvif/os.h> |
26 | #include <nvif/class.h> | 26 | #include <nvif/class.h> |
27 | #include <nvif/cl0002.h> | ||
27 | 28 | ||
28 | #include "nouveau_drm.h" | 29 | #include "nouveau_drm.h" |
29 | #include "nouveau_dma.h" | 30 | #include "nouveau_dma.h" |
diff --git a/drivers/gpu/drm/nouveau/nv50_display.c b/drivers/gpu/drm/nouveau/nv50_display.c index 44e1952582aa..ea3921652449 100644 --- a/drivers/gpu/drm/nouveau/nv50_display.c +++ b/drivers/gpu/drm/nouveau/nv50_display.c | |||
@@ -31,6 +31,13 @@ | |||
31 | #include <drm/drm_fb_helper.h> | 31 | #include <drm/drm_fb_helper.h> |
32 | 32 | ||
33 | #include <nvif/class.h> | 33 | #include <nvif/class.h> |
34 | #include <nvif/cl0002.h> | ||
35 | #include <nvif/cl5070.h> | ||
36 | #include <nvif/cl507a.h> | ||
37 | #include <nvif/cl507b.h> | ||
38 | #include <nvif/cl507c.h> | ||
39 | #include <nvif/cl507d.h> | ||
40 | #include <nvif/cl507e.h> | ||
34 | 41 | ||
35 | #include "nouveau_drm.h" | 42 | #include "nouveau_drm.h" |
36 | #include "nouveau_dma.h" | 43 | #include "nouveau_dma.h" |
@@ -774,7 +781,6 @@ nv50_crtc_set_scale(struct nouveau_crtc *nv_crtc, bool update) | |||
774 | */ | 781 | */ |
775 | if (nv_connector && ( nv_connector->underscan == UNDERSCAN_ON || | 782 | if (nv_connector && ( nv_connector->underscan == UNDERSCAN_ON || |
776 | (nv_connector->underscan == UNDERSCAN_AUTO && | 783 | (nv_connector->underscan == UNDERSCAN_AUTO && |
777 | nv_connector->edid && | ||
778 | drm_detect_hdmi_monitor(nv_connector->edid)))) { | 784 | drm_detect_hdmi_monitor(nv_connector->edid)))) { |
779 | u32 bX = nv_connector->underscan_hborder; | 785 | u32 bX = nv_connector->underscan_hborder; |
780 | u32 bY = nv_connector->underscan_vborder; | 786 | u32 bY = nv_connector->underscan_vborder; |
@@ -1962,10 +1968,17 @@ nv50_sor_mode_set(struct drm_encoder *encoder, struct drm_display_mode *umode, | |||
1962 | switch (nv_encoder->dcb->type) { | 1968 | switch (nv_encoder->dcb->type) { |
1963 | case DCB_OUTPUT_TMDS: | 1969 | case DCB_OUTPUT_TMDS: |
1964 | if (nv_encoder->dcb->sorconf.link & 1) { | 1970 | if (nv_encoder->dcb->sorconf.link & 1) { |
1965 | if (mode->clock < 165000) | 1971 | proto = 0x1; |
1966 | proto = 0x1; | 1972 | /* Only enable dual-link if: |
1967 | else | 1973 | * - Need to (i.e. rate > 165MHz) |
1968 | proto = 0x5; | 1974 | * - DCB says we can |
1975 | * - Not an HDMI monitor, since there's no dual-link | ||
1976 | * on HDMI. | ||
1977 | */ | ||
1978 | if (mode->clock >= 165000 && | ||
1979 | nv_encoder->dcb->duallink_possible && | ||
1980 | !drm_detect_hdmi_monitor(nv_connector->edid)) | ||
1981 | proto |= 0x4; | ||
1969 | } else { | 1982 | } else { |
1970 | proto = 0x2; | 1983 | proto = 0x2; |
1971 | } | 1984 | } |
diff --git a/drivers/gpu/drm/nouveau/nv50_fence.c b/drivers/gpu/drm/nouveau/nv50_fence.c index f0d96e5da6b4..3695ccce68c7 100644 --- a/drivers/gpu/drm/nouveau/nv50_fence.c +++ b/drivers/gpu/drm/nouveau/nv50_fence.c | |||
@@ -24,6 +24,7 @@ | |||
24 | 24 | ||
25 | #include <nvif/os.h> | 25 | #include <nvif/os.h> |
26 | #include <nvif/class.h> | 26 | #include <nvif/class.h> |
27 | #include <nvif/cl0002.h> | ||
27 | 28 | ||
28 | #include "nouveau_drm.h" | 29 | #include "nouveau_drm.h" |
29 | #include "nouveau_dma.h" | 30 | #include "nouveau_dma.h" |
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/client.c b/drivers/gpu/drm/nouveau/nvkm/core/client.c index 297e1e953fa6..e1943910858e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/client.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/client.c | |||
@@ -28,6 +28,7 @@ | |||
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/event.h> | 30 | #include <nvif/event.h> |
31 | #include <nvif/if0000.h> | ||
31 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
32 | 33 | ||
33 | struct nvkm_client_notify { | 34 | struct nvkm_client_notify { |
@@ -96,7 +97,7 @@ nvkm_client_notify_new(struct nvkm_object *object, | |||
96 | struct nvif_notify_req_v0 v0; | 97 | struct nvif_notify_req_v0 v0; |
97 | } *req = data; | 98 | } *req = data; |
98 | u8 index, reply; | 99 | u8 index, reply; |
99 | int ret; | 100 | int ret = -ENOSYS; |
100 | 101 | ||
101 | for (index = 0; index < ARRAY_SIZE(client->notify); index++) { | 102 | for (index = 0; index < ARRAY_SIZE(client->notify); index++) { |
102 | if (!client->notify[index]) | 103 | if (!client->notify[index]) |
@@ -111,7 +112,7 @@ nvkm_client_notify_new(struct nvkm_object *object, | |||
111 | return -ENOMEM; | 112 | return -ENOMEM; |
112 | 113 | ||
113 | nvif_ioctl(object, "notify new size %d\n", size); | 114 | nvif_ioctl(object, "notify new size %d\n", size); |
114 | if (nvif_unpack(req->v0, 0, 0, true)) { | 115 | if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, true))) { |
115 | nvif_ioctl(object, "notify new vers %d reply %d route %02x " | 116 | nvif_ioctl(object, "notify new vers %d reply %d route %02x " |
116 | "token %llx\n", req->v0.version, | 117 | "token %llx\n", req->v0.version, |
117 | req->v0.reply, req->v0.route, req->v0.token); | 118 | req->v0.reply, req->v0.route, req->v0.token); |
@@ -143,10 +144,10 @@ nvkm_client_mthd_devlist(struct nvkm_object *object, void *data, u32 size) | |||
143 | union { | 144 | union { |
144 | struct nv_client_devlist_v0 v0; | 145 | struct nv_client_devlist_v0 v0; |
145 | } *args = data; | 146 | } *args = data; |
146 | int ret; | 147 | int ret = -ENOSYS; |
147 | 148 | ||
148 | nvif_ioctl(object, "client devlist size %d\n", size); | 149 | nvif_ioctl(object, "client devlist size %d\n", size); |
149 | if (nvif_unpack(args->v0, 0, 0, true)) { | 150 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
150 | nvif_ioctl(object, "client devlist vers %d count %d\n", | 151 | nvif_ioctl(object, "client devlist vers %d count %d\n", |
151 | args->v0.version, args->v0.count); | 152 | args->v0.version, args->v0.count); |
152 | if (size == sizeof(args->v0.device[0]) * args->v0.count) { | 153 | if (size == sizeof(args->v0.device[0]) * args->v0.count) { |
diff --git a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c index d87d6ab03cc7..b0db51847c36 100644 --- a/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c +++ b/drivers/gpu/drm/nouveau/nvkm/core/ioctl.c | |||
@@ -34,10 +34,10 @@ nvkm_ioctl_nop(struct nvkm_object *object, void *data, u32 size) | |||
34 | union { | 34 | union { |
35 | struct nvif_ioctl_nop_v0 v0; | 35 | struct nvif_ioctl_nop_v0 v0; |
36 | } *args = data; | 36 | } *args = data; |
37 | int ret; | 37 | int ret = -ENOSYS; |
38 | 38 | ||
39 | nvif_ioctl(object, "nop size %d\n", size); | 39 | nvif_ioctl(object, "nop size %d\n", size); |
40 | if (nvif_unpack(args->v0, 0, 0, false)) { | 40 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
41 | nvif_ioctl(object, "nop vers %lld\n", args->v0.version); | 41 | nvif_ioctl(object, "nop vers %lld\n", args->v0.version); |
42 | args->v0.version = NVIF_VERSION_LATEST; | 42 | args->v0.version = NVIF_VERSION_LATEST; |
43 | } | 43 | } |
@@ -52,10 +52,10 @@ nvkm_ioctl_sclass(struct nvkm_object *object, void *data, u32 size) | |||
52 | struct nvif_ioctl_sclass_v0 v0; | 52 | struct nvif_ioctl_sclass_v0 v0; |
53 | } *args = data; | 53 | } *args = data; |
54 | struct nvkm_oclass oclass; | 54 | struct nvkm_oclass oclass; |
55 | int ret, i = 0; | 55 | int ret = -ENOSYS, i = 0; |
56 | 56 | ||
57 | nvif_ioctl(object, "sclass size %d\n", size); | 57 | nvif_ioctl(object, "sclass size %d\n", size); |
58 | if (nvif_unpack(args->v0, 0, 0, true)) { | 58 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
59 | nvif_ioctl(object, "sclass vers %d count %d\n", | 59 | nvif_ioctl(object, "sclass vers %d count %d\n", |
60 | args->v0.version, args->v0.count); | 60 | args->v0.version, args->v0.count); |
61 | if (size != args->v0.count * sizeof(args->v0.oclass[0])) | 61 | if (size != args->v0.count * sizeof(args->v0.oclass[0])) |
@@ -86,10 +86,10 @@ nvkm_ioctl_new(struct nvkm_object *parent, void *data, u32 size) | |||
86 | struct nvkm_client *client = parent->client; | 86 | struct nvkm_client *client = parent->client; |
87 | struct nvkm_object *object = NULL; | 87 | struct nvkm_object *object = NULL; |
88 | struct nvkm_oclass oclass; | 88 | struct nvkm_oclass oclass; |
89 | int ret, i = 0; | 89 | int ret = -ENOSYS, i = 0; |
90 | 90 | ||
91 | nvif_ioctl(parent, "new size %d\n", size); | 91 | nvif_ioctl(parent, "new size %d\n", size); |
92 | if (nvif_unpack(args->v0, 0, 0, true)) { | 92 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
93 | nvif_ioctl(parent, "new vers %d handle %08x class %08x " | 93 | nvif_ioctl(parent, "new vers %d handle %08x class %08x " |
94 | "route %02x token %llx object %016llx\n", | 94 | "route %02x token %llx object %016llx\n", |
95 | args->v0.version, args->v0.handle, args->v0.oclass, | 95 | args->v0.version, args->v0.handle, args->v0.oclass, |
@@ -147,10 +147,10 @@ nvkm_ioctl_del(struct nvkm_object *object, void *data, u32 size) | |||
147 | union { | 147 | union { |
148 | struct nvif_ioctl_del none; | 148 | struct nvif_ioctl_del none; |
149 | } *args = data; | 149 | } *args = data; |
150 | int ret; | 150 | int ret = -ENOSYS; |
151 | 151 | ||
152 | nvif_ioctl(object, "delete size %d\n", size); | 152 | nvif_ioctl(object, "delete size %d\n", size); |
153 | if (nvif_unvers(args->none)) { | 153 | if (!(ret = nvif_unvers(ret, &data, &size, args->none))) { |
154 | nvif_ioctl(object, "delete\n"); | 154 | nvif_ioctl(object, "delete\n"); |
155 | nvkm_object_fini(object, false); | 155 | nvkm_object_fini(object, false); |
156 | nvkm_object_del(&object); | 156 | nvkm_object_del(&object); |
@@ -165,10 +165,10 @@ nvkm_ioctl_mthd(struct nvkm_object *object, void *data, u32 size) | |||
165 | union { | 165 | union { |
166 | struct nvif_ioctl_mthd_v0 v0; | 166 | struct nvif_ioctl_mthd_v0 v0; |
167 | } *args = data; | 167 | } *args = data; |
168 | int ret; | 168 | int ret = -ENOSYS; |
169 | 169 | ||
170 | nvif_ioctl(object, "mthd size %d\n", size); | 170 | nvif_ioctl(object, "mthd size %d\n", size); |
171 | if (nvif_unpack(args->v0, 0, 0, true)) { | 171 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
172 | nvif_ioctl(object, "mthd vers %d mthd %02x\n", | 172 | nvif_ioctl(object, "mthd vers %d mthd %02x\n", |
173 | args->v0.version, args->v0.method); | 173 | args->v0.version, args->v0.method); |
174 | ret = nvkm_object_mthd(object, args->v0.method, data, size); | 174 | ret = nvkm_object_mthd(object, args->v0.method, data, size); |
@@ -189,10 +189,10 @@ nvkm_ioctl_rd(struct nvkm_object *object, void *data, u32 size) | |||
189 | u16 b16; | 189 | u16 b16; |
190 | u32 b32; | 190 | u32 b32; |
191 | } v; | 191 | } v; |
192 | int ret; | 192 | int ret = -ENOSYS; |
193 | 193 | ||
194 | nvif_ioctl(object, "rd size %d\n", size); | 194 | nvif_ioctl(object, "rd size %d\n", size); |
195 | if (nvif_unpack(args->v0, 0, 0, false)) { | 195 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
196 | nvif_ioctl(object, "rd vers %d size %d addr %016llx\n", | 196 | nvif_ioctl(object, "rd vers %d size %d addr %016llx\n", |
197 | args->v0.version, args->v0.size, args->v0.addr); | 197 | args->v0.version, args->v0.size, args->v0.addr); |
198 | switch (args->v0.size) { | 198 | switch (args->v0.size) { |
@@ -223,10 +223,10 @@ nvkm_ioctl_wr(struct nvkm_object *object, void *data, u32 size) | |||
223 | union { | 223 | union { |
224 | struct nvif_ioctl_wr_v0 v0; | 224 | struct nvif_ioctl_wr_v0 v0; |
225 | } *args = data; | 225 | } *args = data; |
226 | int ret; | 226 | int ret = -ENOSYS; |
227 | 227 | ||
228 | nvif_ioctl(object, "wr size %d\n", size); | 228 | nvif_ioctl(object, "wr size %d\n", size); |
229 | if (nvif_unpack(args->v0, 0, 0, false)) { | 229 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
230 | nvif_ioctl(object, | 230 | nvif_ioctl(object, |
231 | "wr vers %d size %d addr %016llx data %08x\n", | 231 | "wr vers %d size %d addr %016llx data %08x\n", |
232 | args->v0.version, args->v0.size, args->v0.addr, | 232 | args->v0.version, args->v0.size, args->v0.addr, |
@@ -251,10 +251,10 @@ nvkm_ioctl_map(struct nvkm_object *object, void *data, u32 size) | |||
251 | union { | 251 | union { |
252 | struct nvif_ioctl_map_v0 v0; | 252 | struct nvif_ioctl_map_v0 v0; |
253 | } *args = data; | 253 | } *args = data; |
254 | int ret; | 254 | int ret = -ENOSYS; |
255 | 255 | ||
256 | nvif_ioctl(object, "map size %d\n", size); | 256 | nvif_ioctl(object, "map size %d\n", size); |
257 | if (nvif_unpack(args->v0, 0, 0, false)) { | 257 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
258 | nvif_ioctl(object, "map vers %d\n", args->v0.version); | 258 | nvif_ioctl(object, "map vers %d\n", args->v0.version); |
259 | ret = nvkm_object_map(object, &args->v0.handle, | 259 | ret = nvkm_object_map(object, &args->v0.handle, |
260 | &args->v0.length); | 260 | &args->v0.length); |
@@ -269,10 +269,10 @@ nvkm_ioctl_unmap(struct nvkm_object *object, void *data, u32 size) | |||
269 | union { | 269 | union { |
270 | struct nvif_ioctl_unmap none; | 270 | struct nvif_ioctl_unmap none; |
271 | } *args = data; | 271 | } *args = data; |
272 | int ret; | 272 | int ret = -ENOSYS; |
273 | 273 | ||
274 | nvif_ioctl(object, "unmap size %d\n", size); | 274 | nvif_ioctl(object, "unmap size %d\n", size); |
275 | if (nvif_unvers(args->none)) { | 275 | if (!(ret = nvif_unvers(ret, &data, &size, args->none))) { |
276 | nvif_ioctl(object, "unmap\n"); | 276 | nvif_ioctl(object, "unmap\n"); |
277 | } | 277 | } |
278 | 278 | ||
@@ -286,10 +286,10 @@ nvkm_ioctl_ntfy_new(struct nvkm_object *object, void *data, u32 size) | |||
286 | struct nvif_ioctl_ntfy_new_v0 v0; | 286 | struct nvif_ioctl_ntfy_new_v0 v0; |
287 | } *args = data; | 287 | } *args = data; |
288 | struct nvkm_event *event; | 288 | struct nvkm_event *event; |
289 | int ret; | 289 | int ret = -ENOSYS; |
290 | 290 | ||
291 | nvif_ioctl(object, "ntfy new size %d\n", size); | 291 | nvif_ioctl(object, "ntfy new size %d\n", size); |
292 | if (nvif_unpack(args->v0, 0, 0, true)) { | 292 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
293 | nvif_ioctl(object, "ntfy new vers %d event %02x\n", | 293 | nvif_ioctl(object, "ntfy new vers %d event %02x\n", |
294 | args->v0.version, args->v0.event); | 294 | args->v0.version, args->v0.event); |
295 | ret = nvkm_object_ntfy(object, args->v0.event, &event); | 295 | ret = nvkm_object_ntfy(object, args->v0.event, &event); |
@@ -312,10 +312,10 @@ nvkm_ioctl_ntfy_del(struct nvkm_object *object, void *data, u32 size) | |||
312 | union { | 312 | union { |
313 | struct nvif_ioctl_ntfy_del_v0 v0; | 313 | struct nvif_ioctl_ntfy_del_v0 v0; |
314 | } *args = data; | 314 | } *args = data; |
315 | int ret; | 315 | int ret = -ENOSYS; |
316 | 316 | ||
317 | nvif_ioctl(object, "ntfy del size %d\n", size); | 317 | nvif_ioctl(object, "ntfy del size %d\n", size); |
318 | if (nvif_unpack(args->v0, 0, 0, false)) { | 318 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
319 | nvif_ioctl(object, "ntfy del vers %d index %d\n", | 319 | nvif_ioctl(object, "ntfy del vers %d index %d\n", |
320 | args->v0.version, args->v0.index); | 320 | args->v0.version, args->v0.index); |
321 | ret = nvkm_client_notify_del(client, args->v0.index); | 321 | ret = nvkm_client_notify_del(client, args->v0.index); |
@@ -331,10 +331,10 @@ nvkm_ioctl_ntfy_get(struct nvkm_object *object, void *data, u32 size) | |||
331 | union { | 331 | union { |
332 | struct nvif_ioctl_ntfy_get_v0 v0; | 332 | struct nvif_ioctl_ntfy_get_v0 v0; |
333 | } *args = data; | 333 | } *args = data; |
334 | int ret; | 334 | int ret = -ENOSYS; |
335 | 335 | ||
336 | nvif_ioctl(object, "ntfy get size %d\n", size); | 336 | nvif_ioctl(object, "ntfy get size %d\n", size); |
337 | if (nvif_unpack(args->v0, 0, 0, false)) { | 337 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
338 | nvif_ioctl(object, "ntfy get vers %d index %d\n", | 338 | nvif_ioctl(object, "ntfy get vers %d index %d\n", |
339 | args->v0.version, args->v0.index); | 339 | args->v0.version, args->v0.index); |
340 | ret = nvkm_client_notify_get(client, args->v0.index); | 340 | ret = nvkm_client_notify_get(client, args->v0.index); |
@@ -350,10 +350,10 @@ nvkm_ioctl_ntfy_put(struct nvkm_object *object, void *data, u32 size) | |||
350 | union { | 350 | union { |
351 | struct nvif_ioctl_ntfy_put_v0 v0; | 351 | struct nvif_ioctl_ntfy_put_v0 v0; |
352 | } *args = data; | 352 | } *args = data; |
353 | int ret; | 353 | int ret = -ENOSYS; |
354 | 354 | ||
355 | nvif_ioctl(object, "ntfy put size %d\n", size); | 355 | nvif_ioctl(object, "ntfy put size %d\n", size); |
356 | if (nvif_unpack(args->v0, 0, 0, false)) { | 356 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
357 | nvif_ioctl(object, "ntfy put vers %d index %d\n", | 357 | nvif_ioctl(object, "ntfy put vers %d index %d\n", |
358 | args->v0.version, args->v0.index); | 358 | args->v0.version, args->v0.index); |
359 | ret = nvkm_client_notify_put(client, args->v0.index); | 359 | ret = nvkm_client_notify_put(client, args->v0.index); |
@@ -421,12 +421,12 @@ nvkm_ioctl(struct nvkm_client *client, bool supervisor, | |||
421 | union { | 421 | union { |
422 | struct nvif_ioctl_v0 v0; | 422 | struct nvif_ioctl_v0 v0; |
423 | } *args = data; | 423 | } *args = data; |
424 | int ret; | 424 | int ret = -ENOSYS; |
425 | 425 | ||
426 | client->super = supervisor; | 426 | client->super = supervisor; |
427 | nvif_ioctl(object, "size %d\n", size); | 427 | nvif_ioctl(object, "size %d\n", size); |
428 | 428 | ||
429 | if (nvif_unpack(args->v0, 0, 0, true)) { | 429 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
430 | nvif_ioctl(object, | 430 | nvif_ioctl(object, |
431 | "vers %d type %02x object %016llx owner %02x\n", | 431 | "vers %d type %02x object %016llx owner %02x\n", |
432 | args->v0.version, args->v0.type, args->v0.object, | 432 | args->v0.version, args->v0.type, args->v0.object, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c index c541a1c012dc..e2b944dce9b8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/ce/gk104.c | |||
@@ -22,19 +22,65 @@ | |||
22 | * Authors: Ben Skeggs | 22 | * Authors: Ben Skeggs |
23 | */ | 23 | */ |
24 | #include "priv.h" | 24 | #include "priv.h" |
25 | #include <core/enum.h> | ||
25 | 26 | ||
26 | #include <nvif/class.h> | 27 | #include <nvif/class.h> |
27 | 28 | ||
29 | static const struct nvkm_enum | ||
30 | gk104_ce_launcherr_report[] = { | ||
31 | { 0x0, "NO_ERR" }, | ||
32 | { 0x1, "2D_LAYER_EXCEEDS_DEPTH" }, | ||
33 | { 0x2, "INVALID_ARGUMENT" }, | ||
34 | { 0x3, "MEM2MEM_RECT_OUT_OF_BOUNDS" }, | ||
35 | { 0x4, "SRC_LINE_EXCEEDS_PITCH" }, | ||
36 | { 0x5, "SRC_LINE_EXCEEDS_NEG_PITCH" }, | ||
37 | { 0x6, "DST_LINE_EXCEEDS_PITCH" }, | ||
38 | { 0x7, "DST_LINE_EXCEEDS_NEG_PITCH" }, | ||
39 | { 0x8, "BAD_SRC_PIXEL_COMP_REF" }, | ||
40 | { 0x9, "INVALID_VALUE" }, | ||
41 | { 0xa, "UNUSED_FIELD" }, | ||
42 | { 0xb, "INVALID_OPERATION" }, | ||
43 | {} | ||
44 | }; | ||
45 | |||
46 | static void | ||
47 | gk104_ce_intr_launcherr(struct nvkm_engine *ce, const u32 base) | ||
48 | { | ||
49 | struct nvkm_subdev *subdev = &ce->subdev; | ||
50 | struct nvkm_device *device = subdev->device; | ||
51 | u32 stat = nvkm_rd32(device, 0x104f14 + base); | ||
52 | const struct nvkm_enum *en = | ||
53 | nvkm_enum_find(gk104_ce_launcherr_report, stat & 0x0000000f); | ||
54 | nvkm_warn(subdev, "LAUNCHERR %08x [%s]\n", stat, en ? en->name : ""); | ||
55 | nvkm_wr32(device, 0x104f14 + base, 0x00000000); | ||
56 | } | ||
57 | |||
28 | void | 58 | void |
29 | gk104_ce_intr(struct nvkm_engine *ce) | 59 | gk104_ce_intr(struct nvkm_engine *ce) |
30 | { | 60 | { |
31 | const u32 base = (ce->subdev.index - NVKM_ENGINE_CE0) * 0x1000; | 61 | const u32 base = (ce->subdev.index - NVKM_ENGINE_CE0) * 0x1000; |
32 | struct nvkm_subdev *subdev = &ce->subdev; | 62 | struct nvkm_subdev *subdev = &ce->subdev; |
33 | struct nvkm_device *device = subdev->device; | 63 | struct nvkm_device *device = subdev->device; |
34 | u32 stat = nvkm_rd32(device, 0x104908 + base); | 64 | u32 mask = nvkm_rd32(device, 0x104904 + base); |
35 | if (stat) { | 65 | u32 intr = nvkm_rd32(device, 0x104908 + base) & mask; |
36 | nvkm_warn(subdev, "intr %08x\n", stat); | 66 | if (intr & 0x00000001) { |
37 | nvkm_wr32(device, 0x104908 + base, stat); | 67 | nvkm_warn(subdev, "BLOCKPIPE\n"); |
68 | nvkm_wr32(device, 0x104908 + base, 0x00000001); | ||
69 | intr &= ~0x00000001; | ||
70 | } | ||
71 | if (intr & 0x00000002) { | ||
72 | nvkm_warn(subdev, "NONBLOCKPIPE\n"); | ||
73 | nvkm_wr32(device, 0x104908 + base, 0x00000002); | ||
74 | intr &= ~0x00000002; | ||
75 | } | ||
76 | if (intr & 0x00000004) { | ||
77 | gk104_ce_intr_launcherr(ce, base); | ||
78 | nvkm_wr32(device, 0x104908 + base, 0x00000004); | ||
79 | intr &= ~0x00000004; | ||
80 | } | ||
81 | if (intr) { | ||
82 | nvkm_warn(subdev, "intr %08x\n", intr); | ||
83 | nvkm_wr32(device, 0x104908 + base, intr); | ||
38 | } | 84 | } |
39 | } | 85 | } |
40 | 86 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c index bbc9824af6e0..b1ba1c782a2b 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/base.c | |||
@@ -1388,7 +1388,7 @@ nvc1_chipset = { | |||
1388 | .mc = gf100_mc_new, | 1388 | .mc = gf100_mc_new, |
1389 | .mmu = gf100_mmu_new, | 1389 | .mmu = gf100_mmu_new, |
1390 | .mxm = nv50_mxm_new, | 1390 | .mxm = nv50_mxm_new, |
1391 | .pci = g94_pci_new, | 1391 | .pci = gf106_pci_new, |
1392 | .pmu = gf100_pmu_new, | 1392 | .pmu = gf100_pmu_new, |
1393 | .therm = gt215_therm_new, | 1393 | .therm = gt215_therm_new, |
1394 | .timer = nv41_timer_new, | 1394 | .timer = nv41_timer_new, |
@@ -1423,7 +1423,7 @@ nvc3_chipset = { | |||
1423 | .mc = gf100_mc_new, | 1423 | .mc = gf100_mc_new, |
1424 | .mmu = gf100_mmu_new, | 1424 | .mmu = gf100_mmu_new, |
1425 | .mxm = nv50_mxm_new, | 1425 | .mxm = nv50_mxm_new, |
1426 | .pci = g94_pci_new, | 1426 | .pci = gf106_pci_new, |
1427 | .pmu = gf100_pmu_new, | 1427 | .pmu = gf100_pmu_new, |
1428 | .therm = gt215_therm_new, | 1428 | .therm = gt215_therm_new, |
1429 | .timer = nv41_timer_new, | 1429 | .timer = nv41_timer_new, |
@@ -1566,7 +1566,7 @@ nvcf_chipset = { | |||
1566 | .mc = gf100_mc_new, | 1566 | .mc = gf100_mc_new, |
1567 | .mmu = gf100_mmu_new, | 1567 | .mmu = gf100_mmu_new, |
1568 | .mxm = nv50_mxm_new, | 1568 | .mxm = nv50_mxm_new, |
1569 | .pci = g94_pci_new, | 1569 | .pci = gf106_pci_new, |
1570 | .pmu = gf100_pmu_new, | 1570 | .pmu = gf100_pmu_new, |
1571 | .therm = gt215_therm_new, | 1571 | .therm = gt215_therm_new, |
1572 | .timer = nv41_timer_new, | 1572 | .timer = nv41_timer_new, |
@@ -1601,7 +1601,7 @@ nvd7_chipset = { | |||
1601 | .mc = gf100_mc_new, | 1601 | .mc = gf100_mc_new, |
1602 | .mmu = gf100_mmu_new, | 1602 | .mmu = gf100_mmu_new, |
1603 | .mxm = nv50_mxm_new, | 1603 | .mxm = nv50_mxm_new, |
1604 | .pci = g94_pci_new, | 1604 | .pci = gf106_pci_new, |
1605 | .therm = gf119_therm_new, | 1605 | .therm = gf119_therm_new, |
1606 | .timer = nv41_timer_new, | 1606 | .timer = nv41_timer_new, |
1607 | .ce[0] = gf100_ce_new, | 1607 | .ce[0] = gf100_ce_new, |
@@ -1634,7 +1634,7 @@ nvd9_chipset = { | |||
1634 | .mc = gf100_mc_new, | 1634 | .mc = gf100_mc_new, |
1635 | .mmu = gf100_mmu_new, | 1635 | .mmu = gf100_mmu_new, |
1636 | .mxm = nv50_mxm_new, | 1636 | .mxm = nv50_mxm_new, |
1637 | .pci = g94_pci_new, | 1637 | .pci = gf106_pci_new, |
1638 | .pmu = gf119_pmu_new, | 1638 | .pmu = gf119_pmu_new, |
1639 | .therm = gf119_therm_new, | 1639 | .therm = gf119_therm_new, |
1640 | .timer = nv41_timer_new, | 1640 | .timer = nv41_timer_new, |
@@ -1669,7 +1669,7 @@ nve4_chipset = { | |||
1669 | .mc = gf100_mc_new, | 1669 | .mc = gf100_mc_new, |
1670 | .mmu = gf100_mmu_new, | 1670 | .mmu = gf100_mmu_new, |
1671 | .mxm = nv50_mxm_new, | 1671 | .mxm = nv50_mxm_new, |
1672 | .pci = g94_pci_new, | 1672 | .pci = gk104_pci_new, |
1673 | .pmu = gk104_pmu_new, | 1673 | .pmu = gk104_pmu_new, |
1674 | .therm = gf119_therm_new, | 1674 | .therm = gf119_therm_new, |
1675 | .timer = nv41_timer_new, | 1675 | .timer = nv41_timer_new, |
@@ -1706,7 +1706,7 @@ nve6_chipset = { | |||
1706 | .mc = gf100_mc_new, | 1706 | .mc = gf100_mc_new, |
1707 | .mmu = gf100_mmu_new, | 1707 | .mmu = gf100_mmu_new, |
1708 | .mxm = nv50_mxm_new, | 1708 | .mxm = nv50_mxm_new, |
1709 | .pci = g94_pci_new, | 1709 | .pci = gk104_pci_new, |
1710 | .pmu = gk104_pmu_new, | 1710 | .pmu = gk104_pmu_new, |
1711 | .therm = gf119_therm_new, | 1711 | .therm = gf119_therm_new, |
1712 | .timer = nv41_timer_new, | 1712 | .timer = nv41_timer_new, |
@@ -1743,7 +1743,7 @@ nve7_chipset = { | |||
1743 | .mc = gf100_mc_new, | 1743 | .mc = gf100_mc_new, |
1744 | .mmu = gf100_mmu_new, | 1744 | .mmu = gf100_mmu_new, |
1745 | .mxm = nv50_mxm_new, | 1745 | .mxm = nv50_mxm_new, |
1746 | .pci = g94_pci_new, | 1746 | .pci = gk104_pci_new, |
1747 | .pmu = gk104_pmu_new, | 1747 | .pmu = gk104_pmu_new, |
1748 | .therm = gf119_therm_new, | 1748 | .therm = gf119_therm_new, |
1749 | .timer = nv41_timer_new, | 1749 | .timer = nv41_timer_new, |
@@ -1804,7 +1804,7 @@ nvf0_chipset = { | |||
1804 | .mc = gf100_mc_new, | 1804 | .mc = gf100_mc_new, |
1805 | .mmu = gf100_mmu_new, | 1805 | .mmu = gf100_mmu_new, |
1806 | .mxm = nv50_mxm_new, | 1806 | .mxm = nv50_mxm_new, |
1807 | .pci = g94_pci_new, | 1807 | .pci = gk104_pci_new, |
1808 | .pmu = gk110_pmu_new, | 1808 | .pmu = gk110_pmu_new, |
1809 | .therm = gf119_therm_new, | 1809 | .therm = gf119_therm_new, |
1810 | .timer = nv41_timer_new, | 1810 | .timer = nv41_timer_new, |
@@ -1840,7 +1840,7 @@ nvf1_chipset = { | |||
1840 | .mc = gf100_mc_new, | 1840 | .mc = gf100_mc_new, |
1841 | .mmu = gf100_mmu_new, | 1841 | .mmu = gf100_mmu_new, |
1842 | .mxm = nv50_mxm_new, | 1842 | .mxm = nv50_mxm_new, |
1843 | .pci = g94_pci_new, | 1843 | .pci = gk104_pci_new, |
1844 | .pmu = gk110_pmu_new, | 1844 | .pmu = gk110_pmu_new, |
1845 | .therm = gf119_therm_new, | 1845 | .therm = gf119_therm_new, |
1846 | .timer = nv41_timer_new, | 1846 | .timer = nv41_timer_new, |
@@ -1876,7 +1876,7 @@ nv106_chipset = { | |||
1876 | .mc = gk20a_mc_new, | 1876 | .mc = gk20a_mc_new, |
1877 | .mmu = gf100_mmu_new, | 1877 | .mmu = gf100_mmu_new, |
1878 | .mxm = nv50_mxm_new, | 1878 | .mxm = nv50_mxm_new, |
1879 | .pci = g94_pci_new, | 1879 | .pci = gk104_pci_new, |
1880 | .pmu = gk208_pmu_new, | 1880 | .pmu = gk208_pmu_new, |
1881 | .therm = gf119_therm_new, | 1881 | .therm = gf119_therm_new, |
1882 | .timer = nv41_timer_new, | 1882 | .timer = nv41_timer_new, |
@@ -1912,7 +1912,7 @@ nv108_chipset = { | |||
1912 | .mc = gk20a_mc_new, | 1912 | .mc = gk20a_mc_new, |
1913 | .mmu = gf100_mmu_new, | 1913 | .mmu = gf100_mmu_new, |
1914 | .mxm = nv50_mxm_new, | 1914 | .mxm = nv50_mxm_new, |
1915 | .pci = g94_pci_new, | 1915 | .pci = gk104_pci_new, |
1916 | .pmu = gk208_pmu_new, | 1916 | .pmu = gk208_pmu_new, |
1917 | .therm = gf119_therm_new, | 1917 | .therm = gf119_therm_new, |
1918 | .timer = nv41_timer_new, | 1918 | .timer = nv41_timer_new, |
@@ -1948,7 +1948,7 @@ nv117_chipset = { | |||
1948 | .mc = gk20a_mc_new, | 1948 | .mc = gk20a_mc_new, |
1949 | .mmu = gf100_mmu_new, | 1949 | .mmu = gf100_mmu_new, |
1950 | .mxm = nv50_mxm_new, | 1950 | .mxm = nv50_mxm_new, |
1951 | .pci = g94_pci_new, | 1951 | .pci = gk104_pci_new, |
1952 | .pmu = gm107_pmu_new, | 1952 | .pmu = gm107_pmu_new, |
1953 | .therm = gm107_therm_new, | 1953 | .therm = gm107_therm_new, |
1954 | .timer = gk20a_timer_new, | 1954 | .timer = gk20a_timer_new, |
@@ -1973,13 +1973,13 @@ nv124_chipset = { | |||
1973 | .fuse = gm107_fuse_new, | 1973 | .fuse = gm107_fuse_new, |
1974 | .gpio = gk104_gpio_new, | 1974 | .gpio = gk104_gpio_new, |
1975 | .i2c = gm204_i2c_new, | 1975 | .i2c = gm204_i2c_new, |
1976 | .ibus = gk104_ibus_new, | 1976 | .ibus = gm204_ibus_new, |
1977 | .imem = nv50_instmem_new, | 1977 | .imem = nv50_instmem_new, |
1978 | .ltc = gm107_ltc_new, | 1978 | .ltc = gm204_ltc_new, |
1979 | .mc = gk20a_mc_new, | 1979 | .mc = gk20a_mc_new, |
1980 | .mmu = gf100_mmu_new, | 1980 | .mmu = gf100_mmu_new, |
1981 | .mxm = nv50_mxm_new, | 1981 | .mxm = nv50_mxm_new, |
1982 | .pci = g94_pci_new, | 1982 | .pci = gk104_pci_new, |
1983 | .pmu = gm107_pmu_new, | 1983 | .pmu = gm107_pmu_new, |
1984 | .timer = gk20a_timer_new, | 1984 | .timer = gk20a_timer_new, |
1985 | .volt = gk104_volt_new, | 1985 | .volt = gk104_volt_new, |
@@ -2004,13 +2004,13 @@ nv126_chipset = { | |||
2004 | .fuse = gm107_fuse_new, | 2004 | .fuse = gm107_fuse_new, |
2005 | .gpio = gk104_gpio_new, | 2005 | .gpio = gk104_gpio_new, |
2006 | .i2c = gm204_i2c_new, | 2006 | .i2c = gm204_i2c_new, |
2007 | .ibus = gk104_ibus_new, | 2007 | .ibus = gm204_ibus_new, |
2008 | .imem = nv50_instmem_new, | 2008 | .imem = nv50_instmem_new, |
2009 | .ltc = gm107_ltc_new, | 2009 | .ltc = gm204_ltc_new, |
2010 | .mc = gk20a_mc_new, | 2010 | .mc = gk20a_mc_new, |
2011 | .mmu = gf100_mmu_new, | 2011 | .mmu = gf100_mmu_new, |
2012 | .mxm = nv50_mxm_new, | 2012 | .mxm = nv50_mxm_new, |
2013 | .pci = g94_pci_new, | 2013 | .pci = gk104_pci_new, |
2014 | .pmu = gm107_pmu_new, | 2014 | .pmu = gm107_pmu_new, |
2015 | .timer = gk20a_timer_new, | 2015 | .timer = gk20a_timer_new, |
2016 | .volt = gk104_volt_new, | 2016 | .volt = gk104_volt_new, |
@@ -2033,7 +2033,7 @@ nv12b_chipset = { | |||
2033 | .fuse = gm107_fuse_new, | 2033 | .fuse = gm107_fuse_new, |
2034 | .ibus = gk20a_ibus_new, | 2034 | .ibus = gk20a_ibus_new, |
2035 | .imem = gk20a_instmem_new, | 2035 | .imem = gk20a_instmem_new, |
2036 | .ltc = gm107_ltc_new, | 2036 | .ltc = gm204_ltc_new, |
2037 | .mc = gk20a_mc_new, | 2037 | .mc = gk20a_mc_new, |
2038 | .mmu = gf100_mmu_new, | 2038 | .mmu = gf100_mmu_new, |
2039 | .timer = gk20a_timer_new, | 2039 | .timer = gk20a_timer_new, |
@@ -2494,7 +2494,8 @@ nvkm_device_ctor(const struct nvkm_device_func *func, | |||
2494 | device->pri = ioremap(mmio_base, mmio_size); | 2494 | device->pri = ioremap(mmio_base, mmio_size); |
2495 | if (!device->pri) { | 2495 | if (!device->pri) { |
2496 | nvdev_error(device, "unable to map PRI\n"); | 2496 | nvdev_error(device, "unable to map PRI\n"); |
2497 | return -ENOMEM; | 2497 | ret = -ENOMEM; |
2498 | goto done; | ||
2498 | } | 2499 | } |
2499 | } | 2500 | } |
2500 | 2501 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c index cf8bc068e9b7..b0ece71aefde 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/ctrl.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <subdev/clk.h> | 27 | #include <subdev/clk.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/if0001.h> | ||
30 | #include <nvif/ioctl.h> | 31 | #include <nvif/ioctl.h> |
31 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
32 | 33 | ||
@@ -37,10 +38,10 @@ nvkm_control_mthd_pstate_info(struct nvkm_control *ctrl, void *data, u32 size) | |||
37 | struct nvif_control_pstate_info_v0 v0; | 38 | struct nvif_control_pstate_info_v0 v0; |
38 | } *args = data; | 39 | } *args = data; |
39 | struct nvkm_clk *clk = ctrl->device->clk; | 40 | struct nvkm_clk *clk = ctrl->device->clk; |
40 | int ret; | 41 | int ret = -ENOSYS; |
41 | 42 | ||
42 | nvif_ioctl(&ctrl->object, "control pstate info size %d\n", size); | 43 | nvif_ioctl(&ctrl->object, "control pstate info size %d\n", size); |
43 | if (nvif_unpack(args->v0, 0, 0, false)) { | 44 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
44 | nvif_ioctl(&ctrl->object, "control pstate info vers %d\n", | 45 | nvif_ioctl(&ctrl->object, "control pstate info vers %d\n", |
45 | args->v0.version); | 46 | args->v0.version); |
46 | } else | 47 | } else |
@@ -75,10 +76,10 @@ nvkm_control_mthd_pstate_attr(struct nvkm_control *ctrl, void *data, u32 size) | |||
75 | struct nvkm_cstate *cstate; | 76 | struct nvkm_cstate *cstate; |
76 | int i = 0, j = -1; | 77 | int i = 0, j = -1; |
77 | u32 lo, hi; | 78 | u32 lo, hi; |
78 | int ret; | 79 | int ret = -ENOSYS; |
79 | 80 | ||
80 | nvif_ioctl(&ctrl->object, "control pstate attr size %d\n", size); | 81 | nvif_ioctl(&ctrl->object, "control pstate attr size %d\n", size); |
81 | if (nvif_unpack(args->v0, 0, 0, false)) { | 82 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
82 | nvif_ioctl(&ctrl->object, | 83 | nvif_ioctl(&ctrl->object, |
83 | "control pstate attr vers %d state %d index %d\n", | 84 | "control pstate attr vers %d state %d index %d\n", |
84 | args->v0.version, args->v0.state, args->v0.index); | 85 | args->v0.version, args->v0.state, args->v0.index); |
@@ -143,10 +144,10 @@ nvkm_control_mthd_pstate_user(struct nvkm_control *ctrl, void *data, u32 size) | |||
143 | struct nvif_control_pstate_user_v0 v0; | 144 | struct nvif_control_pstate_user_v0 v0; |
144 | } *args = data; | 145 | } *args = data; |
145 | struct nvkm_clk *clk = ctrl->device->clk; | 146 | struct nvkm_clk *clk = ctrl->device->clk; |
146 | int ret; | 147 | int ret = -ENOSYS; |
147 | 148 | ||
148 | nvif_ioctl(&ctrl->object, "control pstate user size %d\n", size); | 149 | nvif_ioctl(&ctrl->object, "control pstate user size %d\n", size); |
149 | if (nvif_unpack(args->v0, 0, 0, false)) { | 150 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
150 | nvif_ioctl(&ctrl->object, | 151 | nvif_ioctl(&ctrl->object, |
151 | "control pstate user vers %d ustate %d pwrsrc %d\n", | 152 | "control pstate user vers %d ustate %d pwrsrc %d\n", |
152 | args->v0.version, args->v0.ustate, args->v0.pwrsrc); | 153 | args->v0.version, args->v0.ustate, args->v0.pwrsrc); |
@@ -204,7 +205,7 @@ nvkm_control_new(struct nvkm_device *device, const struct nvkm_oclass *oclass, | |||
204 | 205 | ||
205 | const struct nvkm_device_oclass | 206 | const struct nvkm_device_oclass |
206 | nvkm_control_oclass = { | 207 | nvkm_control_oclass = { |
207 | .base.oclass = NVIF_IOCTL_NEW_V0_CONTROL, | 208 | .base.oclass = NVIF_CLASS_CONTROL, |
208 | .base.minver = -1, | 209 | .base.minver = -1, |
209 | .base.maxver = -1, | 210 | .base.maxver = -1, |
210 | .ctor = nvkm_control_new, | 211 | .ctor = nvkm_control_new, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c index 1ae48f27029d..137066426ed7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/device/user.c | |||
@@ -31,6 +31,7 @@ | |||
31 | #include <subdev/timer.h> | 31 | #include <subdev/timer.h> |
32 | 32 | ||
33 | #include <nvif/class.h> | 33 | #include <nvif/class.h> |
34 | #include <nvif/cl0080.h> | ||
34 | #include <nvif/unpack.h> | 35 | #include <nvif/unpack.h> |
35 | 36 | ||
36 | struct nvkm_udevice { | 37 | struct nvkm_udevice { |
@@ -48,10 +49,10 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size) | |||
48 | union { | 49 | union { |
49 | struct nv_device_info_v0 v0; | 50 | struct nv_device_info_v0 v0; |
50 | } *args = data; | 51 | } *args = data; |
51 | int ret; | 52 | int ret = -ENOSYS; |
52 | 53 | ||
53 | nvif_ioctl(object, "device info size %d\n", size); | 54 | nvif_ioctl(object, "device info size %d\n", size); |
54 | if (nvif_unpack(args->v0, 0, 0, false)) { | 55 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
55 | nvif_ioctl(object, "device info vers %d\n", args->v0.version); | 56 | nvif_ioctl(object, "device info vers %d\n", args->v0.version); |
56 | } else | 57 | } else |
57 | return ret; | 58 | return ret; |
@@ -123,13 +124,16 @@ nvkm_udevice_info(struct nvkm_udevice *udev, void *data, u32 size) | |||
123 | static int | 124 | static int |
124 | nvkm_udevice_time(struct nvkm_udevice *udev, void *data, u32 size) | 125 | nvkm_udevice_time(struct nvkm_udevice *udev, void *data, u32 size) |
125 | { | 126 | { |
127 | struct nvkm_object *object = &udev->object; | ||
126 | struct nvkm_device *device = udev->device; | 128 | struct nvkm_device *device = udev->device; |
127 | union { | 129 | union { |
128 | struct nv_device_time_v0 v0; | 130 | struct nv_device_time_v0 v0; |
129 | } *args = data; | 131 | } *args = data; |
130 | int ret; | 132 | int ret = -ENOSYS; |
131 | 133 | ||
132 | if (nvif_unpack(args->v0, 0, 0, false)) { | 134 | nvif_ioctl(object, "device time size %d\n", size); |
135 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { | ||
136 | nvif_ioctl(object, "device time vers %d\n", args->v0.version); | ||
133 | args->v0.time = nvkm_timer_read(device->timer); | 137 | args->v0.time = nvkm_timer_read(device->timer); |
134 | } | 138 | } |
135 | 139 | ||
@@ -140,6 +144,7 @@ static int | |||
140 | nvkm_udevice_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) | 144 | nvkm_udevice_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) |
141 | { | 145 | { |
142 | struct nvkm_udevice *udev = nvkm_udevice(object); | 146 | struct nvkm_udevice *udev = nvkm_udevice(object); |
147 | nvif_ioctl(object, "device mthd %08x\n", mthd); | ||
143 | switch (mthd) { | 148 | switch (mthd) { |
144 | case NV_DEVICE_V0_INFO: | 149 | case NV_DEVICE_V0_INFO: |
145 | return nvkm_udevice_info(udev, data, size); | 150 | return nvkm_udevice_info(udev, data, size); |
@@ -331,10 +336,10 @@ nvkm_udevice_new(const struct nvkm_oclass *oclass, void *data, u32 size, | |||
331 | struct nvkm_object *parent = &client->object; | 336 | struct nvkm_object *parent = &client->object; |
332 | const struct nvkm_object_func *func; | 337 | const struct nvkm_object_func *func; |
333 | struct nvkm_udevice *udev; | 338 | struct nvkm_udevice *udev; |
334 | int ret; | 339 | int ret = -ENOSYS; |
335 | 340 | ||
336 | nvif_ioctl(parent, "create device size %d\n", size); | 341 | nvif_ioctl(parent, "create device size %d\n", size); |
337 | if (nvif_unpack(args->v0, 0, 0, false)) { | 342 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
338 | nvif_ioctl(parent, "create device v%d device %016llx\n", | 343 | nvif_ioctl(parent, "create device v%d device %016llx\n", |
339 | args->v0.version, args->v0.device); | 344 | args->v0.version, args->v0.device); |
340 | } else | 345 | } else |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c index 44b67719f64d..785fa76d0fbf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/base.c | |||
@@ -32,6 +32,7 @@ | |||
32 | #include <subdev/bios/dcb.h> | 32 | #include <subdev/bios/dcb.h> |
33 | 33 | ||
34 | #include <nvif/class.h> | 34 | #include <nvif/class.h> |
35 | #include <nvif/cl0046.h> | ||
35 | #include <nvif/event.h> | 36 | #include <nvif/event.h> |
36 | #include <nvif/unpack.h> | 37 | #include <nvif/unpack.h> |
37 | 38 | ||
@@ -58,9 +59,9 @@ nvkm_disp_vblank_ctor(struct nvkm_object *object, void *data, u32 size, | |||
58 | union { | 59 | union { |
59 | struct nvif_notify_head_req_v0 v0; | 60 | struct nvif_notify_head_req_v0 v0; |
60 | } *req = data; | 61 | } *req = data; |
61 | int ret; | 62 | int ret = -ENOSYS; |
62 | 63 | ||
63 | if (nvif_unpack(req->v0, 0, 0, false)) { | 64 | if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, false))) { |
64 | notify->size = sizeof(struct nvif_notify_head_rep_v0); | 65 | notify->size = sizeof(struct nvif_notify_head_rep_v0); |
65 | if (ret = -ENXIO, req->v0.head <= disp->vblank.index_nr) { | 66 | if (ret = -ENXIO, req->v0.head <= disp->vblank.index_nr) { |
66 | notify->types = 1; | 67 | notify->types = 1; |
@@ -96,9 +97,9 @@ nvkm_disp_hpd_ctor(struct nvkm_object *object, void *data, u32 size, | |||
96 | struct nvif_notify_conn_req_v0 v0; | 97 | struct nvif_notify_conn_req_v0 v0; |
97 | } *req = data; | 98 | } *req = data; |
98 | struct nvkm_output *outp; | 99 | struct nvkm_output *outp; |
99 | int ret; | 100 | int ret = -ENOSYS; |
100 | 101 | ||
101 | if (nvif_unpack(req->v0, 0, 0, false)) { | 102 | if (!(ret = nvif_unpack(ret, &data, &size, req->v0, 0, 0, false))) { |
102 | notify->size = sizeof(struct nvif_notify_conn_rep_v0); | 103 | notify->size = sizeof(struct nvif_notify_conn_rep_v0); |
103 | list_for_each_entry(outp, &disp->outp, head) { | 104 | list_for_each_entry(outp, &disp->outp, head) { |
104 | if (ret = -ENXIO, outp->conn->index == req->v0.conn) { | 105 | if (ret = -ENXIO, outp->conn->index == req->v0.conn) { |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/basenv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/basenv50.c index 1fd89edefc26..83f152300ec0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/basenv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/basenv50.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl507c.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | int | 33 | int |
@@ -41,11 +42,11 @@ nv50_disp_base_new(const struct nv50_disp_dmac_func *func, | |||
41 | } *args = data; | 42 | } *args = data; |
42 | struct nvkm_object *parent = oclass->parent; | 43 | struct nvkm_object *parent = oclass->parent; |
43 | struct nv50_disp *disp = root->disp; | 44 | struct nv50_disp *disp = root->disp; |
44 | int head, ret; | 45 | int head, ret = -ENOSYS; |
45 | u64 push; | 46 | u64 push; |
46 | 47 | ||
47 | nvif_ioctl(parent, "create disp base channel dma size %d\n", size); | 48 | nvif_ioctl(parent, "create disp base channel dma size %d\n", size); |
48 | if (nvif_unpack(args->v0, 0, 0, false)) { | 49 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
49 | nvif_ioctl(parent, "create disp base channel dma vers %d " | 50 | nvif_ioctl(parent, "create disp base channel dma vers %d " |
50 | "pushbuf %016llx head %d\n", | 51 | "pushbuf %016llx head %d\n", |
51 | args->v0.version, args->v0.pushbuf, args->v0.head); | 52 | args->v0.version, args->v0.pushbuf, args->v0.head); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c index 01803c0679b6..dd2953bc9264 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/channv50.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <core/ramht.h> | 28 | #include <core/ramht.h> |
29 | #include <engine/dma.h> | 29 | #include <engine/dma.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/cl507d.h> |
32 | #include <nvif/event.h> | 32 | #include <nvif/event.h> |
33 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
34 | 34 | ||
@@ -134,9 +134,9 @@ nv50_disp_chan_uevent_ctor(struct nvkm_object *object, void *data, u32 size, | |||
134 | union { | 134 | union { |
135 | struct nvif_notify_uevent_req none; | 135 | struct nvif_notify_uevent_req none; |
136 | } *args = data; | 136 | } *args = data; |
137 | int ret; | 137 | int ret = -ENOSYS; |
138 | 138 | ||
139 | if (nvif_unvers(args->none)) { | 139 | if (!(ret = nvif_unvers(ret, &data, &size, args->none))) { |
140 | notify->size = sizeof(struct nvif_notify_uevent_rep); | 140 | notify->size = sizeof(struct nvif_notify_uevent_rep); |
141 | notify->types = 1; | 141 | notify->types = 1; |
142 | notify->index = chan->chid; | 142 | notify->index = chan->chid; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/corenv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/corenv50.c index db4a9b3e0e09..b547c8b833ca 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/corenv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/corenv50.c | |||
@@ -28,6 +28,7 @@ | |||
28 | #include <subdev/timer.h> | 28 | #include <subdev/timer.h> |
29 | 29 | ||
30 | #include <nvif/class.h> | 30 | #include <nvif/class.h> |
31 | #include <nvif/cl507d.h> | ||
31 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
32 | 33 | ||
33 | int | 34 | int |
@@ -42,10 +43,10 @@ nv50_disp_core_new(const struct nv50_disp_dmac_func *func, | |||
42 | } *args = data; | 43 | } *args = data; |
43 | struct nvkm_object *parent = oclass->parent; | 44 | struct nvkm_object *parent = oclass->parent; |
44 | u64 push; | 45 | u64 push; |
45 | int ret; | 46 | int ret = -ENOSYS; |
46 | 47 | ||
47 | nvif_ioctl(parent, "create disp core channel dma size %d\n", size); | 48 | nvif_ioctl(parent, "create disp core channel dma size %d\n", size); |
48 | if (nvif_unpack(args->v0, 0, 0, false)) { | 49 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
49 | nvif_ioctl(parent, "create disp core channel dma vers %d " | 50 | nvif_ioctl(parent, "create disp core channel dma vers %d " |
50 | "pushbuf %016llx\n", | 51 | "pushbuf %016llx\n", |
51 | args->v0.version, args->v0.pushbuf); | 52 | args->v0.version, args->v0.pushbuf); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/cursnv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/cursnv50.c index 225858e62cf6..8b1320499a0f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/cursnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/cursnv50.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl507a.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | int | 33 | int |
@@ -41,10 +42,10 @@ nv50_disp_curs_new(const struct nv50_disp_chan_func *func, | |||
41 | } *args = data; | 42 | } *args = data; |
42 | struct nvkm_object *parent = oclass->parent; | 43 | struct nvkm_object *parent = oclass->parent; |
43 | struct nv50_disp *disp = root->disp; | 44 | struct nv50_disp *disp = root->disp; |
44 | int head, ret; | 45 | int head, ret = -ENOSYS; |
45 | 46 | ||
46 | nvif_ioctl(parent, "create disp cursor size %d\n", size); | 47 | nvif_ioctl(parent, "create disp cursor size %d\n", size); |
47 | if (nvif_unpack(args->v0, 0, 0, false)) { | 48 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
48 | nvif_ioctl(parent, "create disp cursor vers %d head %d\n", | 49 | nvif_ioctl(parent, "create disp cursor vers %d head %d\n", |
49 | args->v0.version, args->v0.head); | 50 | args->v0.version, args->v0.head); |
50 | if (args->v0.head > disp->base.head.nr) | 51 | if (args->v0.head > disp->base.head.nr) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/dacnv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/dacnv50.c index 9bfa9e7dc161..c9b78b8f9c87 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/dacnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/dacnv50.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | #include <subdev/timer.h> | 28 | #include <subdev/timer.h> |
29 | 29 | ||
30 | #include <nvif/class.h> | 30 | #include <nvif/cl5070.h> |
31 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
32 | 32 | ||
33 | int | 33 | int |
@@ -39,10 +39,10 @@ nv50_dac_power(NV50_DISP_MTHD_V1) | |||
39 | struct nv50_disp_dac_pwr_v0 v0; | 39 | struct nv50_disp_dac_pwr_v0 v0; |
40 | } *args = data; | 40 | } *args = data; |
41 | u32 stat; | 41 | u32 stat; |
42 | int ret; | 42 | int ret = -ENOSYS; |
43 | 43 | ||
44 | nvif_ioctl(object, "disp dac pwr size %d\n", size); | 44 | nvif_ioctl(object, "disp dac pwr size %d\n", size); |
45 | if (nvif_unpack(args->v0, 0, 0, false)) { | 45 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
46 | nvif_ioctl(object, "disp dac pwr vers %d state %d data %d " | 46 | nvif_ioctl(object, "disp dac pwr vers %d state %d data %d " |
47 | "vsync %d hsync %d\n", | 47 | "vsync %d hsync %d\n", |
48 | args->v0.version, args->v0.state, args->v0.data, | 48 | args->v0.version, args->v0.state, args->v0.data, |
@@ -76,10 +76,10 @@ nv50_dac_sense(NV50_DISP_MTHD_V1) | |||
76 | } *args = data; | 76 | } *args = data; |
77 | const u32 doff = outp->or * 0x800; | 77 | const u32 doff = outp->or * 0x800; |
78 | u32 loadval; | 78 | u32 loadval; |
79 | int ret; | 79 | int ret = -ENOSYS; |
80 | 80 | ||
81 | nvif_ioctl(object, "disp dac load size %d\n", size); | 81 | nvif_ioctl(object, "disp dac load size %d\n", size); |
82 | if (nvif_unpack(args->v0, 0, 0, false)) { | 82 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
83 | nvif_ioctl(object, "disp dac load vers %d data %08x\n", | 83 | nvif_ioctl(object, "disp dac load vers %d data %08x\n", |
84 | args->v0.version, args->v0.data); | 84 | args->v0.version, args->v0.data); |
85 | if (args->v0.data & 0xfff00000) | 85 | if (args->v0.data & 0xfff00000) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c index 186fd3ac78f6..f0314664349c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/gf119.c | |||
@@ -158,7 +158,7 @@ exec_clkcmp(struct nv50_disp *disp, int head, int id, u32 pclk, u32 *conf) | |||
158 | switch (outp->info.type) { | 158 | switch (outp->info.type) { |
159 | case DCB_OUTPUT_TMDS: | 159 | case DCB_OUTPUT_TMDS: |
160 | *conf = (ctrl & 0x00000f00) >> 8; | 160 | *conf = (ctrl & 0x00000f00) >> 8; |
161 | if (pclk >= 165000) | 161 | if (*conf == 5) |
162 | *conf |= 0x0100; | 162 | *conf |= 0x0100; |
163 | break; | 163 | break; |
164 | case DCB_OUTPUT_LVDS: | 164 | case DCB_OUTPUT_LVDS: |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c index af99efbd63f7..da6129b2b78f 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagf119.c | |||
@@ -29,7 +29,7 @@ | |||
29 | #include <subdev/bios/dcb.h> | 29 | #include <subdev/bios/dcb.h> |
30 | #include <subdev/timer.h> | 30 | #include <subdev/timer.h> |
31 | 31 | ||
32 | #include <nvif/class.h> | 32 | #include <nvif/cl5070.h> |
33 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
34 | 34 | ||
35 | int | 35 | int |
@@ -41,10 +41,10 @@ gf119_hda_eld(NV50_DISP_MTHD_V1) | |||
41 | } *args = data; | 41 | } *args = data; |
42 | const u32 soff = outp->or * 0x030; | 42 | const u32 soff = outp->or * 0x030; |
43 | const u32 hoff = head * 0x800; | 43 | const u32 hoff = head * 0x800; |
44 | int ret, i; | 44 | int ret = -ENOSYS, i; |
45 | 45 | ||
46 | nvif_ioctl(object, "disp sor hda eld size %d\n", size); | 46 | nvif_ioctl(object, "disp sor hda eld size %d\n", size); |
47 | if (nvif_unpack(args->v0, 0, 0, true)) { | 47 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
48 | nvif_ioctl(object, "disp sor hda eld vers %d\n", | 48 | nvif_ioctl(object, "disp sor hda eld vers %d\n", |
49 | args->v0.version); | 49 | args->v0.version); |
50 | if (size > 0x60) | 50 | if (size > 0x60) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c index c1590b746f13..6f0436df0219 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdagt215.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | #include <subdev/timer.h> | 28 | #include <subdev/timer.h> |
29 | 29 | ||
30 | #include <nvif/class.h> | 30 | #include <nvif/cl5070.h> |
31 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
32 | 32 | ||
33 | int | 33 | int |
@@ -38,10 +38,10 @@ gt215_hda_eld(NV50_DISP_MTHD_V1) | |||
38 | struct nv50_disp_sor_hda_eld_v0 v0; | 38 | struct nv50_disp_sor_hda_eld_v0 v0; |
39 | } *args = data; | 39 | } *args = data; |
40 | const u32 soff = outp->or * 0x800; | 40 | const u32 soff = outp->or * 0x800; |
41 | int ret, i; | 41 | int ret = -ENOSYS, i; |
42 | 42 | ||
43 | nvif_ioctl(object, "disp sor hda eld size %d\n", size); | 43 | nvif_ioctl(object, "disp sor hda eld size %d\n", size); |
44 | if (nvif_unpack(args->v0, 0, 0, true)) { | 44 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
45 | nvif_ioctl(object, "disp sor hda eld vers %d\n", | 45 | nvif_ioctl(object, "disp sor hda eld vers %d\n", |
46 | args->v0.version); | 46 | args->v0.version); |
47 | if (size > 0x60) | 47 | if (size > 0x60) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmig84.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmig84.c index ee9e800a8f06..1c4256e8cbd6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmig84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmig84.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #include <core/client.h> | 26 | #include <core/client.h> |
27 | 27 | ||
28 | #include <nvif/class.h> | 28 | #include <nvif/cl5070.h> |
29 | #include <nvif/unpack.h> | 29 | #include <nvif/unpack.h> |
30 | 30 | ||
31 | int | 31 | int |
@@ -37,10 +37,10 @@ g84_hdmi_ctrl(NV50_DISP_MTHD_V1) | |||
37 | struct nv50_disp_sor_hdmi_pwr_v0 v0; | 37 | struct nv50_disp_sor_hdmi_pwr_v0 v0; |
38 | } *args = data; | 38 | } *args = data; |
39 | u32 ctrl; | 39 | u32 ctrl; |
40 | int ret; | 40 | int ret = -ENOSYS; |
41 | 41 | ||
42 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); | 42 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); |
43 | if (nvif_unpack(args->v0, 0, 0, false)) { | 43 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
44 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " | 44 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " |
45 | "max_ac_packet %d rekey %d\n", | 45 | "max_ac_packet %d rekey %d\n", |
46 | args->v0.version, args->v0.state, | 46 | args->v0.version, args->v0.state, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigf119.c index b5af025d3b04..632f02da1382 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigf119.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #include <core/client.h> | 26 | #include <core/client.h> |
27 | 27 | ||
28 | #include <nvif/class.h> | 28 | #include <nvif/cl5070.h> |
29 | #include <nvif/unpack.h> | 29 | #include <nvif/unpack.h> |
30 | 30 | ||
31 | int | 31 | int |
@@ -37,10 +37,10 @@ gf119_hdmi_ctrl(NV50_DISP_MTHD_V1) | |||
37 | struct nv50_disp_sor_hdmi_pwr_v0 v0; | 37 | struct nv50_disp_sor_hdmi_pwr_v0 v0; |
38 | } *args = data; | 38 | } *args = data; |
39 | u32 ctrl; | 39 | u32 ctrl; |
40 | int ret; | 40 | int ret = -ENOSYS; |
41 | 41 | ||
42 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); | 42 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); |
43 | if (nvif_unpack(args->v0, 0, 0, false)) { | 43 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
44 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " | 44 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " |
45 | "max_ac_packet %d rekey %d\n", | 45 | "max_ac_packet %d rekey %d\n", |
46 | args->v0.version, args->v0.state, | 46 | args->v0.version, args->v0.state, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigk104.c index 110dc19e4f67..4e8067d511d7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigk104.c | |||
@@ -25,7 +25,7 @@ | |||
25 | 25 | ||
26 | #include <core/client.h> | 26 | #include <core/client.h> |
27 | 27 | ||
28 | #include <nvif/class.h> | 28 | #include <nvif/cl5070.h> |
29 | #include <nvif/unpack.h> | 29 | #include <nvif/unpack.h> |
30 | 30 | ||
31 | int | 31 | int |
@@ -38,10 +38,10 @@ gk104_hdmi_ctrl(NV50_DISP_MTHD_V1) | |||
38 | struct nv50_disp_sor_hdmi_pwr_v0 v0; | 38 | struct nv50_disp_sor_hdmi_pwr_v0 v0; |
39 | } *args = data; | 39 | } *args = data; |
40 | u32 ctrl; | 40 | u32 ctrl; |
41 | int ret; | 41 | int ret = -ENOSYS; |
42 | 42 | ||
43 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); | 43 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); |
44 | if (nvif_unpack(args->v0, 0, 0, false)) { | 44 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
45 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " | 45 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " |
46 | "max_ac_packet %d rekey %d\n", | 46 | "max_ac_packet %d rekey %d\n", |
47 | args->v0.version, args->v0.state, | 47 | args->v0.version, args->v0.state, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigt215.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigt215.c index 61237dbfa35a..f1afc16494b6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/hdmigt215.c | |||
@@ -26,7 +26,7 @@ | |||
26 | 26 | ||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/cl5070.h> |
30 | #include <nvif/unpack.h> | 30 | #include <nvif/unpack.h> |
31 | 31 | ||
32 | int | 32 | int |
@@ -38,10 +38,10 @@ gt215_hdmi_ctrl(NV50_DISP_MTHD_V1) | |||
38 | struct nv50_disp_sor_hdmi_pwr_v0 v0; | 38 | struct nv50_disp_sor_hdmi_pwr_v0 v0; |
39 | } *args = data; | 39 | } *args = data; |
40 | u32 ctrl; | 40 | u32 ctrl; |
41 | int ret; | 41 | int ret = -ENOSYS; |
42 | 42 | ||
43 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); | 43 | nvif_ioctl(object, "disp sor hdmi ctrl size %d\n", size); |
44 | if (nvif_unpack(args->v0, 0, 0, false)) { | 44 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
45 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " | 45 | nvif_ioctl(object, "disp sor hdmi ctrl vers %d state %d " |
46 | "max_ac_packet %d rekey %d\n", | 46 | "max_ac_packet %d rekey %d\n", |
47 | args->v0.version, args->v0.state, | 47 | args->v0.version, args->v0.state, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c index 32e73a975b58..4226d2153b9c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/nv50.c | |||
@@ -391,7 +391,7 @@ exec_clkcmp(struct nv50_disp *disp, int head, int id, u32 pclk, u32 *conf) | |||
391 | switch (outp->info.type) { | 391 | switch (outp->info.type) { |
392 | case DCB_OUTPUT_TMDS: | 392 | case DCB_OUTPUT_TMDS: |
393 | *conf = (ctrl & 0x00000f00) >> 8; | 393 | *conf = (ctrl & 0x00000f00) >> 8; |
394 | if (pclk >= 165000) | 394 | if (*conf == 5) |
395 | *conf |= 0x0100; | 395 | *conf |= 0x0100; |
396 | break; | 396 | break; |
397 | case DCB_OUTPUT_LVDS: | 397 | case DCB_OUTPUT_LVDS: |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/oimmnv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/oimmnv50.c index cd888a1e443c..3940b9c966ec 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/oimmnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/oimmnv50.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl507b.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | int | 33 | int |
@@ -41,10 +42,10 @@ nv50_disp_oimm_new(const struct nv50_disp_chan_func *func, | |||
41 | } *args = data; | 42 | } *args = data; |
42 | struct nvkm_object *parent = oclass->parent; | 43 | struct nvkm_object *parent = oclass->parent; |
43 | struct nv50_disp *disp = root->disp; | 44 | struct nv50_disp *disp = root->disp; |
44 | int head, ret; | 45 | int head, ret = -ENOSYS; |
45 | 46 | ||
46 | nvif_ioctl(parent, "create disp overlay size %d\n", size); | 47 | nvif_ioctl(parent, "create disp overlay size %d\n", size); |
47 | if (nvif_unpack(args->v0, 0, 0, false)) { | 48 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
48 | nvif_ioctl(parent, "create disp overlay vers %d head %d\n", | 49 | nvif_ioctl(parent, "create disp overlay vers %d head %d\n", |
49 | args->v0.version, args->v0.head); | 50 | args->v0.version, args->v0.head); |
50 | if (args->v0.head > disp->base.head.nr) | 51 | if (args->v0.head > disp->base.head.nr) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ovlynv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ovlynv50.c index 6fa296c047b8..2a49c46425cd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/ovlynv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/ovlynv50.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl507e.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | int | 33 | int |
@@ -41,11 +42,11 @@ nv50_disp_ovly_new(const struct nv50_disp_dmac_func *func, | |||
41 | } *args = data; | 42 | } *args = data; |
42 | struct nvkm_object *parent = oclass->parent; | 43 | struct nvkm_object *parent = oclass->parent; |
43 | struct nv50_disp *disp = root->disp; | 44 | struct nv50_disp *disp = root->disp; |
44 | int head, ret; | 45 | int head, ret = -ENOSYS; |
45 | u64 push; | 46 | u64 push; |
46 | 47 | ||
47 | nvif_ioctl(parent, "create disp overlay channel dma size %d\n", size); | 48 | nvif_ioctl(parent, "create disp overlay channel dma size %d\n", size); |
48 | if (nvif_unpack(args->v0, 0, 0, false)) { | 49 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
49 | nvif_ioctl(parent, "create disp overlay channel dma vers %d " | 50 | nvif_ioctl(parent, "create disp overlay channel dma vers %d " |
50 | "pushbuf %016llx head %d\n", | 51 | "pushbuf %016llx head %d\n", |
51 | args->v0.version, args->v0.pushbuf, args->v0.head); | 52 | args->v0.version, args->v0.pushbuf, args->v0.head); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/piornv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/piornv50.c index ab524bde7795..6c532eadba17 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/piornv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/piornv50.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <subdev/i2c.h> | 28 | #include <subdev/i2c.h> |
29 | #include <subdev/timer.h> | 29 | #include <subdev/timer.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/cl5070.h> |
32 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
33 | 33 | ||
34 | int | 34 | int |
@@ -40,10 +40,10 @@ nv50_pior_power(NV50_DISP_MTHD_V1) | |||
40 | struct nv50_disp_pior_pwr_v0 v0; | 40 | struct nv50_disp_pior_pwr_v0 v0; |
41 | } *args = data; | 41 | } *args = data; |
42 | u32 ctrl, type; | 42 | u32 ctrl, type; |
43 | int ret; | 43 | int ret = -ENOSYS; |
44 | 44 | ||
45 | nvif_ioctl(object, "disp pior pwr size %d\n", size); | 45 | nvif_ioctl(object, "disp pior pwr size %d\n", size); |
46 | if (nvif_unpack(args->v0, 0, 0, false)) { | 46 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
47 | nvif_ioctl(object, "disp pior pwr vers %d state %d type %x\n", | 47 | nvif_ioctl(object, "disp pior pwr vers %d state %d type %x\n", |
48 | args->v0.version, args->v0.state, args->v0.type); | 48 | args->v0.version, args->v0.state, args->v0.type); |
49 | if (args->v0.type > 0x0f) | 49 | if (args->v0.type > 0x0f) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgf119.c index 8591726871ac..335d88823c22 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootgf119.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <subdev/timer.h> | 29 | #include <subdev/timer.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/class.h> |
32 | #include <nvif/cl5070.h> | ||
32 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
33 | 34 | ||
34 | int | 35 | int |
@@ -39,12 +40,12 @@ gf119_disp_root_scanoutpos(NV50_DISP_MTHD_V0) | |||
39 | const u32 blanke = nvkm_rd32(device, 0x64041c + (head * 0x300)); | 40 | const u32 blanke = nvkm_rd32(device, 0x64041c + (head * 0x300)); |
40 | const u32 blanks = nvkm_rd32(device, 0x640420 + (head * 0x300)); | 41 | const u32 blanks = nvkm_rd32(device, 0x640420 + (head * 0x300)); |
41 | union { | 42 | union { |
42 | struct nv04_disp_scanoutpos_v0 v0; | 43 | struct nv50_disp_scanoutpos_v0 v0; |
43 | } *args = data; | 44 | } *args = data; |
44 | int ret; | 45 | int ret = -ENOSYS; |
45 | 46 | ||
46 | nvif_ioctl(object, "disp scanoutpos size %d\n", size); | 47 | nvif_ioctl(object, "disp scanoutpos size %d\n", size); |
47 | if (nvif_unpack(args->v0, 0, 0, false)) { | 48 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
48 | nvif_ioctl(object, "disp scanoutpos vers %d\n", | 49 | nvif_ioctl(object, "disp scanoutpos vers %d\n", |
49 | args->v0.version); | 50 | args->v0.version); |
50 | args->v0.vblanke = (blanke & 0xffff0000) >> 16; | 51 | args->v0.vblanke = (blanke & 0xffff0000) >> 16; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv04.c index 2be846374d39..f535f43231e2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv04.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl0046.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | struct nv04_disp_root { | 33 | struct nv04_disp_root { |
@@ -45,10 +46,10 @@ nv04_disp_scanoutpos(struct nv04_disp_root *root, | |||
45 | struct nv04_disp_scanoutpos_v0 v0; | 46 | struct nv04_disp_scanoutpos_v0 v0; |
46 | } *args = data; | 47 | } *args = data; |
47 | u32 line; | 48 | u32 line; |
48 | int ret; | 49 | int ret = -ENOSYS; |
49 | 50 | ||
50 | nvif_ioctl(object, "disp scanoutpos size %d\n", size); | 51 | nvif_ioctl(object, "disp scanoutpos size %d\n", size); |
51 | if (nvif_unpack(args->v0, 0, 0, false)) { | 52 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
52 | nvif_ioctl(object, "disp scanoutpos vers %d\n", | 53 | nvif_ioctl(object, "disp scanoutpos vers %d\n", |
53 | args->v0.version); | 54 | args->v0.version); |
54 | args->v0.vblanks = nvkm_rd32(device, 0x680800 + hoff) & 0xffff; | 55 | args->v0.vblanks = nvkm_rd32(device, 0x680800 + hoff) & 0xffff; |
@@ -85,10 +86,10 @@ nv04_disp_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) | |||
85 | union { | 86 | union { |
86 | struct nv04_disp_mthd_v0 v0; | 87 | struct nv04_disp_mthd_v0 v0; |
87 | } *args = data; | 88 | } *args = data; |
88 | int head, ret; | 89 | int head, ret = -ENOSYS; |
89 | 90 | ||
90 | nvif_ioctl(object, "disp mthd size %d\n", size); | 91 | nvif_ioctl(object, "disp mthd size %d\n", size); |
91 | if (nvif_unpack(args->v0, 0, 0, true)) { | 92 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
92 | nvif_ioctl(object, "disp mthd vers %d mthd %02x head %d\n", | 93 | nvif_ioctl(object, "disp mthd vers %d mthd %02x head %d\n", |
93 | args->v0.version, args->v0.method, args->v0.head); | 94 | args->v0.version, args->v0.method, args->v0.head); |
94 | mthd = args->v0.method; | 95 | mthd = args->v0.method; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c index 06fb24d88702..2f9cecd81d04 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/rootnv50.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <subdev/timer.h> | 29 | #include <subdev/timer.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/class.h> |
32 | #include <nvif/cl5070.h> | ||
32 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
33 | 34 | ||
34 | int | 35 | int |
@@ -39,12 +40,12 @@ nv50_disp_root_scanoutpos(NV50_DISP_MTHD_V0) | |||
39 | const u32 blanks = nvkm_rd32(device, 0x610af4 + (head * 0x540)); | 40 | const u32 blanks = nvkm_rd32(device, 0x610af4 + (head * 0x540)); |
40 | const u32 total = nvkm_rd32(device, 0x610afc + (head * 0x540)); | 41 | const u32 total = nvkm_rd32(device, 0x610afc + (head * 0x540)); |
41 | union { | 42 | union { |
42 | struct nv04_disp_scanoutpos_v0 v0; | 43 | struct nv50_disp_scanoutpos_v0 v0; |
43 | } *args = data; | 44 | } *args = data; |
44 | int ret; | 45 | int ret = -ENOSYS; |
45 | 46 | ||
46 | nvif_ioctl(object, "disp scanoutpos size %d\n", size); | 47 | nvif_ioctl(object, "disp scanoutpos size %d\n", size); |
47 | if (nvif_unpack(args->v0, 0, 0, false)) { | 48 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
48 | nvif_ioctl(object, "disp scanoutpos vers %d\n", | 49 | nvif_ioctl(object, "disp scanoutpos vers %d\n", |
49 | args->v0.version); | 50 | args->v0.version); |
50 | args->v0.vblanke = (blanke & 0xffff0000) >> 16; | 51 | args->v0.vblanke = (blanke & 0xffff0000) >> 16; |
@@ -78,19 +79,19 @@ nv50_disp_root_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size) | |||
78 | struct nvkm_output *outp = NULL; | 79 | struct nvkm_output *outp = NULL; |
79 | struct nvkm_output *temp; | 80 | struct nvkm_output *temp; |
80 | u16 type, mask = 0; | 81 | u16 type, mask = 0; |
81 | int head, ret; | 82 | int head, ret = -ENOSYS; |
82 | 83 | ||
83 | if (mthd != NV50_DISP_MTHD) | 84 | if (mthd != NV50_DISP_MTHD) |
84 | return -EINVAL; | 85 | return -EINVAL; |
85 | 86 | ||
86 | nvif_ioctl(object, "disp mthd size %d\n", size); | 87 | nvif_ioctl(object, "disp mthd size %d\n", size); |
87 | if (nvif_unpack(args->v0, 0, 0, true)) { | 88 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
88 | nvif_ioctl(object, "disp mthd vers %d mthd %02x head %d\n", | 89 | nvif_ioctl(object, "disp mthd vers %d mthd %02x head %d\n", |
89 | args->v0.version, args->v0.method, args->v0.head); | 90 | args->v0.version, args->v0.method, args->v0.head); |
90 | mthd = args->v0.method; | 91 | mthd = args->v0.method; |
91 | head = args->v0.head; | 92 | head = args->v0.head; |
92 | } else | 93 | } else |
93 | if (nvif_unpack(args->v1, 1, 1, true)) { | 94 | if (!(ret = nvif_unpack(ret, &data, &size, args->v1, 1, 1, true))) { |
94 | nvif_ioctl(object, "disp mthd vers %d mthd %02x " | 95 | nvif_ioctl(object, "disp mthd vers %d mthd %02x " |
95 | "type %04x mask %04x\n", | 96 | "type %04x mask %04x\n", |
96 | args->v1.version, args->v1.method, | 97 | args->v1.version, args->v1.method, |
@@ -143,8 +144,9 @@ nv50_disp_root_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size) | |||
143 | union { | 144 | union { |
144 | struct nv50_disp_sor_lvds_script_v0 v0; | 145 | struct nv50_disp_sor_lvds_script_v0 v0; |
145 | } *args = data; | 146 | } *args = data; |
147 | int ret = -ENOSYS; | ||
146 | nvif_ioctl(object, "disp sor lvds script size %d\n", size); | 148 | nvif_ioctl(object, "disp sor lvds script size %d\n", size); |
147 | if (nvif_unpack(args->v0, 0, 0, false)) { | 149 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
148 | nvif_ioctl(object, "disp sor lvds script " | 150 | nvif_ioctl(object, "disp sor lvds script " |
149 | "vers %d name %04x\n", | 151 | "vers %d name %04x\n", |
150 | args->v0.version, args->v0.script); | 152 | args->v0.version, args->v0.script); |
@@ -159,8 +161,9 @@ nv50_disp_root_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size) | |||
159 | union { | 161 | union { |
160 | struct nv50_disp_sor_dp_pwr_v0 v0; | 162 | struct nv50_disp_sor_dp_pwr_v0 v0; |
161 | } *args = data; | 163 | } *args = data; |
164 | int ret = -ENOSYS; | ||
162 | nvif_ioctl(object, "disp sor dp pwr size %d\n", size); | 165 | nvif_ioctl(object, "disp sor dp pwr size %d\n", size); |
163 | if (nvif_unpack(args->v0, 0, 0, false)) { | 166 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
164 | nvif_ioctl(object, "disp sor dp pwr vers %d state %d\n", | 167 | nvif_ioctl(object, "disp sor dp pwr vers %d state %d\n", |
165 | args->v0.version, args->v0.state); | 168 | args->v0.version, args->v0.state); |
166 | if (args->v0.state == 0) { | 169 | if (args->v0.state == 0) { |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sornv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sornv50.c index 29e0d2a9a839..53596bed3c36 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/disp/sornv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/disp/sornv50.c | |||
@@ -27,7 +27,7 @@ | |||
27 | #include <core/client.h> | 27 | #include <core/client.h> |
28 | #include <subdev/timer.h> | 28 | #include <subdev/timer.h> |
29 | 29 | ||
30 | #include <nvif/class.h> | 30 | #include <nvif/cl5070.h> |
31 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
32 | 32 | ||
33 | int | 33 | int |
@@ -39,10 +39,10 @@ nv50_sor_power(NV50_DISP_MTHD_V1) | |||
39 | } *args = data; | 39 | } *args = data; |
40 | const u32 soff = outp->or * 0x800; | 40 | const u32 soff = outp->or * 0x800; |
41 | u32 stat; | 41 | u32 stat; |
42 | int ret; | 42 | int ret = -ENOSYS; |
43 | 43 | ||
44 | nvif_ioctl(object, "disp sor pwr size %d\n", size); | 44 | nvif_ioctl(object, "disp sor pwr size %d\n", size); |
45 | if (nvif_unpack(args->v0, 0, 0, false)) { | 45 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
46 | nvif_ioctl(object, "disp sor pwr vers %d state %d\n", | 46 | nvif_ioctl(object, "disp sor pwr vers %d state %d\n", |
47 | args->v0.version, args->v0.state); | 47 | args->v0.version, args->v0.state); |
48 | stat = !!args->v0.state; | 48 | stat = !!args->v0.state; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/user.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/user.c index 45ab062661a4..13c661b1ef14 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/user.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/user.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <subdev/fb.h> | 28 | #include <subdev/fb.h> |
29 | #include <subdev/instmem.h> | 29 | #include <subdev/instmem.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/cl0002.h> |
32 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
33 | 33 | ||
34 | static int | 34 | static int |
@@ -69,7 +69,7 @@ nvkm_dmaobj_ctor(const struct nvkm_dmaobj_func *func, struct nvkm_dma *dma, | |||
69 | struct nvkm_fb *fb = device->fb; | 69 | struct nvkm_fb *fb = device->fb; |
70 | void *data = *pdata; | 70 | void *data = *pdata; |
71 | u32 size = *psize; | 71 | u32 size = *psize; |
72 | int ret; | 72 | int ret = -ENOSYS; |
73 | 73 | ||
74 | nvkm_object_ctor(&nvkm_dmaobj_func, oclass, &dmaobj->object); | 74 | nvkm_object_ctor(&nvkm_dmaobj_func, oclass, &dmaobj->object); |
75 | dmaobj->func = func; | 75 | dmaobj->func = func; |
@@ -77,7 +77,7 @@ nvkm_dmaobj_ctor(const struct nvkm_dmaobj_func *func, struct nvkm_dma *dma, | |||
77 | RB_CLEAR_NODE(&dmaobj->rb); | 77 | RB_CLEAR_NODE(&dmaobj->rb); |
78 | 78 | ||
79 | nvif_ioctl(parent, "create dma size %d\n", *psize); | 79 | nvif_ioctl(parent, "create dma size %d\n", *psize); |
80 | if (nvif_unpack(args->v0, 0, 0, true)) { | 80 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, true))) { |
81 | nvif_ioctl(parent, "create dma vers %d target %d access %d " | 81 | nvif_ioctl(parent, "create dma vers %d target %d access %d " |
82 | "start %016llx limit %016llx\n", | 82 | "start %016llx limit %016llx\n", |
83 | args->v0.version, args->v0.target, args->v0.access, | 83 | args->v0.version, args->v0.target, args->v0.access, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c index 13e341cc4e32..ef7ac360101e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf100.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <core/gpuobj.h> | 28 | #include <core/gpuobj.h> |
29 | #include <subdev/fb.h> | 29 | #include <subdev/fb.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/cl0002.h> |
32 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
33 | 33 | ||
34 | struct gf100_dmaobj { | 34 | struct gf100_dmaobj { |
@@ -87,10 +87,11 @@ gf100_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass, | |||
87 | if (ret) | 87 | if (ret) |
88 | return ret; | 88 | return ret; |
89 | 89 | ||
90 | ret = -ENOSYS; | ||
90 | args = data; | 91 | args = data; |
91 | 92 | ||
92 | nvif_ioctl(parent, "create gf100 dma size %d\n", size); | 93 | nvif_ioctl(parent, "create gf100 dma size %d\n", size); |
93 | if (nvif_unpack(args->v0, 0, 0, false)) { | 94 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
94 | nvif_ioctl(parent, | 95 | nvif_ioctl(parent, |
95 | "create gf100 dma vers %d priv %d kind %02x\n", | 96 | "create gf100 dma vers %d priv %d kind %02x\n", |
96 | args->v0.version, args->v0.priv, args->v0.kind); | 97 | args->v0.version, args->v0.priv, args->v0.kind); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c index 0e1af8b4db84..c068cee34588 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usergf119.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <core/gpuobj.h> | 28 | #include <core/gpuobj.h> |
29 | #include <subdev/fb.h> | 29 | #include <subdev/fb.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/cl0002.h> |
32 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
33 | 33 | ||
34 | struct gf119_dmaobj { | 34 | struct gf119_dmaobj { |
@@ -85,10 +85,11 @@ gf119_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass, | |||
85 | if (ret) | 85 | if (ret) |
86 | return ret; | 86 | return ret; |
87 | 87 | ||
88 | ret = -ENOSYS; | ||
88 | args = data; | 89 | args = data; |
89 | 90 | ||
90 | nvif_ioctl(parent, "create gf119 dma size %d\n", size); | 91 | nvif_ioctl(parent, "create gf119 dma size %d\n", size); |
91 | if (nvif_unpack(args->v0, 0, 0, false)) { | 92 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
92 | nvif_ioctl(parent, | 93 | nvif_ioctl(parent, |
93 | "create gf100 dma vers %d page %d kind %02x\n", | 94 | "create gf100 dma vers %d page %d kind %02x\n", |
94 | args->v0.version, args->v0.page, args->v0.kind); | 95 | args->v0.version, args->v0.page, args->v0.kind); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c index 5b7ce313ea14..6a85b5dea643 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/dma/usernv50.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <core/gpuobj.h> | 28 | #include <core/gpuobj.h> |
29 | #include <subdev/fb.h> | 29 | #include <subdev/fb.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/cl0002.h> |
32 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
33 | 33 | ||
34 | struct nv50_dmaobj { | 34 | struct nv50_dmaobj { |
@@ -87,10 +87,11 @@ nv50_dmaobj_new(struct nvkm_dma *dma, const struct nvkm_oclass *oclass, | |||
87 | if (ret) | 87 | if (ret) |
88 | return ret; | 88 | return ret; |
89 | 89 | ||
90 | ret = -ENOSYS; | ||
90 | args = data; | 91 | args = data; |
91 | 92 | ||
92 | nvif_ioctl(parent, "create nv50 dma size %d\n", size); | 93 | nvif_ioctl(parent, "create nv50 dma size %d\n", size); |
93 | if (nvif_unpack(args->v0, 0, 0, false)) { | 94 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
94 | nvif_ioctl(parent, "create nv50 dma vers %d priv %d part %d " | 95 | nvif_ioctl(parent, "create nv50 dma vers %d priv %d part %d " |
95 | "comp %d kind %02x\n", args->v0.version, | 96 | "comp %d kind %02x\n", args->v0.version, |
96 | args->v0.priv, args->v0.part, args->v0.comp, | 97 | args->v0.priv, args->v0.part, args->v0.comp, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c index 1fbbfbe6ca9c..cfc7d5725a61 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/base.c | |||
@@ -129,9 +129,9 @@ nvkm_fifo_uevent_ctor(struct nvkm_object *object, void *data, u32 size, | |||
129 | union { | 129 | union { |
130 | struct nvif_notify_uevent_req none; | 130 | struct nvif_notify_uevent_req none; |
131 | } *req = data; | 131 | } *req = data; |
132 | int ret; | 132 | int ret = -ENOSYS; |
133 | 133 | ||
134 | if (nvif_unvers(req->none)) { | 134 | if (!(ret = nvif_unvers(ret, &data, &size, req->none))) { |
135 | notify->size = sizeof(struct nvif_notify_uevent_rep); | 135 | notify->size = sizeof(struct nvif_notify_uevent_rep); |
136 | notify->types = 1; | 136 | notify->types = 1; |
137 | notify->index = 0; | 137 | notify->index = 0; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c index 04305241ceed..aeb3387a3fb0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/chang84.c | |||
@@ -28,7 +28,7 @@ | |||
28 | #include <subdev/mmu.h> | 28 | #include <subdev/mmu.h> |
29 | #include <subdev/timer.h> | 29 | #include <subdev/timer.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/cl826e.h> |
32 | 32 | ||
33 | int | 33 | int |
34 | g84_fifo_chan_ntfy(struct nvkm_fifo_chan *chan, u32 type, | 34 | g84_fifo_chan_ntfy(struct nvkm_fifo_chan *chan, u32 type, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmag84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmag84.c index a5ca52c7b74f..caa914074752 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmag84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmag84.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/ramht.h> | 27 | #include <core/ramht.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl826e.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | static int | 33 | static int |
@@ -35,14 +36,14 @@ g84_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
35 | { | 36 | { |
36 | struct nvkm_object *parent = oclass->parent; | 37 | struct nvkm_object *parent = oclass->parent; |
37 | union { | 38 | union { |
38 | struct nv50_channel_dma_v0 v0; | 39 | struct g82_channel_dma_v0 v0; |
39 | } *args = data; | 40 | } *args = data; |
40 | struct nv50_fifo *fifo = nv50_fifo(base); | 41 | struct nv50_fifo *fifo = nv50_fifo(base); |
41 | struct nv50_fifo_chan *chan; | 42 | struct nv50_fifo_chan *chan; |
42 | int ret; | 43 | int ret = -ENOSYS; |
43 | 44 | ||
44 | nvif_ioctl(parent, "create channel dma size %d\n", size); | 45 | nvif_ioctl(parent, "create channel dma size %d\n", size); |
45 | if (nvif_unpack(args->v0, 0, 0, false)) { | 46 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
46 | nvif_ioctl(parent, "create channel dma vers %d vm %llx " | 47 | nvif_ioctl(parent, "create channel dma vers %d vm %llx " |
47 | "pushbuf %llx offset %016llx\n", | 48 | "pushbuf %llx offset %016llx\n", |
48 | args->v0.version, args->v0.vm, args->v0.pushbuf, | 49 | args->v0.version, args->v0.vm, args->v0.pushbuf, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c index bfcc6408a772..edec30fd3ecd 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv04.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <subdev/instmem.h> | 29 | #include <subdev/instmem.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/class.h> |
32 | #include <nvif/cl006b.h> | ||
32 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
33 | 34 | ||
34 | void | 35 | void |
@@ -167,10 +168,10 @@ nv04_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
167 | struct nv04_fifo_chan *chan = NULL; | 168 | struct nv04_fifo_chan *chan = NULL; |
168 | struct nvkm_device *device = fifo->base.engine.subdev.device; | 169 | struct nvkm_device *device = fifo->base.engine.subdev.device; |
169 | struct nvkm_instmem *imem = device->imem; | 170 | struct nvkm_instmem *imem = device->imem; |
170 | int ret; | 171 | int ret = -ENOSYS; |
171 | 172 | ||
172 | nvif_ioctl(parent, "create channel dma size %d\n", size); | 173 | nvif_ioctl(parent, "create channel dma size %d\n", size); |
173 | if (nvif_unpack(args->v0, 0, 0, false)) { | 174 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
174 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " | 175 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " |
175 | "offset %08x\n", args->v0.version, | 176 | "offset %08x\n", args->v0.version, |
176 | args->v0.pushbuf, args->v0.offset); | 177 | args->v0.pushbuf, args->v0.offset); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c index 34f68e5bd040..f5f355ff005d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv10.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <subdev/instmem.h> | 29 | #include <subdev/instmem.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/class.h> |
32 | #include <nvif/cl006b.h> | ||
32 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
33 | 34 | ||
34 | static int | 35 | static int |
@@ -43,10 +44,10 @@ nv10_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
43 | struct nv04_fifo_chan *chan = NULL; | 44 | struct nv04_fifo_chan *chan = NULL; |
44 | struct nvkm_device *device = fifo->base.engine.subdev.device; | 45 | struct nvkm_device *device = fifo->base.engine.subdev.device; |
45 | struct nvkm_instmem *imem = device->imem; | 46 | struct nvkm_instmem *imem = device->imem; |
46 | int ret; | 47 | int ret = -ENOSYS; |
47 | 48 | ||
48 | nvif_ioctl(parent, "create channel dma size %d\n", size); | 49 | nvif_ioctl(parent, "create channel dma size %d\n", size); |
49 | if (nvif_unpack(args->v0, 0, 0, false)) { | 50 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
50 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " | 51 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " |
51 | "offset %08x\n", args->v0.version, | 52 | "offset %08x\n", args->v0.version, |
52 | args->v0.pushbuf, args->v0.offset); | 53 | args->v0.pushbuf, args->v0.offset); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c index ed7cc9f2b540..7edc6a564b5d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv17.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <subdev/instmem.h> | 29 | #include <subdev/instmem.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/class.h> |
32 | #include <nvif/cl006b.h> | ||
32 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
33 | 34 | ||
34 | static int | 35 | static int |
@@ -43,10 +44,10 @@ nv17_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
43 | struct nv04_fifo_chan *chan = NULL; | 44 | struct nv04_fifo_chan *chan = NULL; |
44 | struct nvkm_device *device = fifo->base.engine.subdev.device; | 45 | struct nvkm_device *device = fifo->base.engine.subdev.device; |
45 | struct nvkm_instmem *imem = device->imem; | 46 | struct nvkm_instmem *imem = device->imem; |
46 | int ret; | 47 | int ret = -ENOSYS; |
47 | 48 | ||
48 | nvif_ioctl(parent, "create channel dma size %d\n", size); | 49 | nvif_ioctl(parent, "create channel dma size %d\n", size); |
49 | if (nvif_unpack(args->v0, 0, 0, false)) { | 50 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
50 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " | 51 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " |
51 | "offset %08x\n", args->v0.version, | 52 | "offset %08x\n", args->v0.version, |
52 | args->v0.pushbuf, args->v0.offset); | 53 | args->v0.pushbuf, args->v0.offset); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c index 043b6c325949..0ec179fc40a1 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv40.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <subdev/instmem.h> | 29 | #include <subdev/instmem.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/class.h> |
32 | #include <nvif/cl006b.h> | ||
32 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
33 | 34 | ||
34 | static bool | 35 | static bool |
@@ -188,10 +189,10 @@ nv40_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
188 | struct nv04_fifo_chan *chan = NULL; | 189 | struct nv04_fifo_chan *chan = NULL; |
189 | struct nvkm_device *device = fifo->base.engine.subdev.device; | 190 | struct nvkm_device *device = fifo->base.engine.subdev.device; |
190 | struct nvkm_instmem *imem = device->imem; | 191 | struct nvkm_instmem *imem = device->imem; |
191 | int ret; | 192 | int ret = -ENOSYS; |
192 | 193 | ||
193 | nvif_ioctl(parent, "create channel dma size %d\n", size); | 194 | nvif_ioctl(parent, "create channel dma size %d\n", size); |
194 | if (nvif_unpack(args->v0, 0, 0, false)) { | 195 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
195 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " | 196 | nvif_ioctl(parent, "create channel dma vers %d pushbuf %llx " |
196 | "offset %08x\n", args->v0.version, | 197 | "offset %08x\n", args->v0.version, |
197 | args->v0.pushbuf, args->v0.offset); | 198 | args->v0.pushbuf, args->v0.offset); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv50.c index 6b3b15f12c39..480bc3777be5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/dmanv50.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/ramht.h> | 27 | #include <core/ramht.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl506e.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | static int | 33 | static int |
@@ -39,10 +40,10 @@ nv50_fifo_dma_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
39 | } *args = data; | 40 | } *args = data; |
40 | struct nv50_fifo *fifo = nv50_fifo(base); | 41 | struct nv50_fifo *fifo = nv50_fifo(base); |
41 | struct nv50_fifo_chan *chan; | 42 | struct nv50_fifo_chan *chan; |
42 | int ret; | 43 | int ret = -ENOSYS; |
43 | 44 | ||
44 | nvif_ioctl(parent, "create channel dma size %d\n", size); | 45 | nvif_ioctl(parent, "create channel dma size %d\n", size); |
45 | if (nvif_unpack(args->v0, 0, 0, false)) { | 46 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
46 | nvif_ioctl(parent, "create channel dma vers %d vm %llx " | 47 | nvif_ioctl(parent, "create channel dma vers %d vm %llx " |
47 | "pushbuf %llx offset %016llx\n", | 48 | "pushbuf %llx offset %016llx\n", |
48 | args->v0.version, args->v0.vm, args->v0.pushbuf, | 49 | args->v0.version, args->v0.vm, args->v0.pushbuf, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c index ff6fcbda615b..36a39c7fd8d2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.c | |||
@@ -47,7 +47,7 @@ gf100_fifo_uevent_fini(struct nvkm_fifo *fifo) | |||
47 | } | 47 | } |
48 | 48 | ||
49 | void | 49 | void |
50 | gf100_fifo_runlist_update(struct gf100_fifo *fifo) | 50 | gf100_fifo_runlist_commit(struct gf100_fifo *fifo) |
51 | { | 51 | { |
52 | struct gf100_fifo_chan *chan; | 52 | struct gf100_fifo_chan *chan; |
53 | struct nvkm_subdev *subdev = &fifo->base.engine.subdev; | 53 | struct nvkm_subdev *subdev = &fifo->base.engine.subdev; |
@@ -77,6 +77,22 @@ gf100_fifo_runlist_update(struct gf100_fifo *fifo) | |||
77 | mutex_unlock(&subdev->mutex); | 77 | mutex_unlock(&subdev->mutex); |
78 | } | 78 | } |
79 | 79 | ||
80 | void | ||
81 | gf100_fifo_runlist_remove(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan) | ||
82 | { | ||
83 | mutex_lock(&fifo->base.engine.subdev.mutex); | ||
84 | list_del_init(&chan->head); | ||
85 | mutex_unlock(&fifo->base.engine.subdev.mutex); | ||
86 | } | ||
87 | |||
88 | void | ||
89 | gf100_fifo_runlist_insert(struct gf100_fifo *fifo, struct gf100_fifo_chan *chan) | ||
90 | { | ||
91 | mutex_lock(&fifo->base.engine.subdev.mutex); | ||
92 | list_add_tail(&chan->head, &fifo->chan); | ||
93 | mutex_unlock(&fifo->base.engine.subdev.mutex); | ||
94 | } | ||
95 | |||
80 | static inline int | 96 | static inline int |
81 | gf100_fifo_engidx(struct gf100_fifo *fifo, u32 engn) | 97 | gf100_fifo_engidx(struct gf100_fifo *fifo, u32 engn) |
82 | { | 98 | { |
@@ -139,7 +155,7 @@ gf100_fifo_recover_work(struct work_struct *work) | |||
139 | } | 155 | } |
140 | } | 156 | } |
141 | 157 | ||
142 | gf100_fifo_runlist_update(fifo); | 158 | gf100_fifo_runlist_commit(fifo); |
143 | nvkm_wr32(device, 0x00262c, engm); | 159 | nvkm_wr32(device, 0x00262c, engm); |
144 | nvkm_mask(device, 0x002630, engm, 0x00000000); | 160 | nvkm_mask(device, 0x002630, engm, 0x00000000); |
145 | } | 161 | } |
@@ -239,7 +255,7 @@ gf100_fifo_fault_engine[] = { | |||
239 | { 0x14, "PMSPDEC", NULL, NVKM_ENGINE_MSPDEC }, | 255 | { 0x14, "PMSPDEC", NULL, NVKM_ENGINE_MSPDEC }, |
240 | { 0x15, "PCE0", NULL, NVKM_ENGINE_CE0 }, | 256 | { 0x15, "PCE0", NULL, NVKM_ENGINE_CE0 }, |
241 | { 0x16, "PCE1", NULL, NVKM_ENGINE_CE1 }, | 257 | { 0x16, "PCE1", NULL, NVKM_ENGINE_CE1 }, |
242 | { 0x17, "PDAEMON" }, | 258 | { 0x17, "PMU" }, |
243 | {} | 259 | {} |
244 | }; | 260 | }; |
245 | 261 | ||
@@ -270,7 +286,7 @@ gf100_fifo_fault_hubclient[] = { | |||
270 | { 0x0c, "PMSPPP" }, | 286 | { 0x0c, "PMSPPP" }, |
271 | { 0x0d, "PMSVLD" }, | 287 | { 0x0d, "PMSVLD" }, |
272 | { 0x11, "PCOUNTER" }, | 288 | { 0x11, "PCOUNTER" }, |
273 | { 0x12, "PDAEMON" }, | 289 | { 0x12, "PMU" }, |
274 | { 0x14, "CCACHE" }, | 290 | { 0x14, "CCACHE" }, |
275 | { 0x15, "CCACHE_POST" }, | 291 | { 0x15, "CCACHE_POST" }, |
276 | {} | 292 | {} |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.h index c649ca9b53e3..08c33c3ceaf7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gf100.h | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | #include <subdev/mmu.h> | 6 | #include <subdev/mmu.h> |
7 | 7 | ||
8 | struct gf100_fifo_chan; | ||
8 | struct gf100_fifo { | 9 | struct gf100_fifo { |
9 | struct nvkm_fifo base; | 10 | struct nvkm_fifo base; |
10 | 11 | ||
@@ -27,5 +28,7 @@ struct gf100_fifo { | |||
27 | }; | 28 | }; |
28 | 29 | ||
29 | void gf100_fifo_intr_engine(struct gf100_fifo *); | 30 | void gf100_fifo_intr_engine(struct gf100_fifo *); |
30 | void gf100_fifo_runlist_update(struct gf100_fifo *); | 31 | void gf100_fifo_runlist_insert(struct gf100_fifo *, struct gf100_fifo_chan *); |
32 | void gf100_fifo_runlist_remove(struct gf100_fifo *, struct gf100_fifo_chan *); | ||
33 | void gf100_fifo_runlist_commit(struct gf100_fifo *); | ||
31 | #endif | 34 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c index 98970a0b7a66..4fcd147d43c8 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.c | |||
@@ -47,7 +47,7 @@ gk104_fifo_uevent_init(struct nvkm_fifo *fifo) | |||
47 | } | 47 | } |
48 | 48 | ||
49 | void | 49 | void |
50 | gk104_fifo_runlist_update(struct gk104_fifo *fifo, u32 engine) | 50 | gk104_fifo_runlist_commit(struct gk104_fifo *fifo, u32 engine) |
51 | { | 51 | { |
52 | struct gk104_fifo_engn *engn = &fifo->engine[engine]; | 52 | struct gk104_fifo_engn *engn = &fifo->engine[engine]; |
53 | struct gk104_fifo_chan *chan; | 53 | struct gk104_fifo_chan *chan; |
@@ -78,6 +78,22 @@ gk104_fifo_runlist_update(struct gk104_fifo *fifo, u32 engine) | |||
78 | mutex_unlock(&subdev->mutex); | 78 | mutex_unlock(&subdev->mutex); |
79 | } | 79 | } |
80 | 80 | ||
81 | void | ||
82 | gk104_fifo_runlist_remove(struct gk104_fifo *fifo, struct gk104_fifo_chan *chan) | ||
83 | { | ||
84 | mutex_lock(&fifo->base.engine.subdev.mutex); | ||
85 | list_del_init(&chan->head); | ||
86 | mutex_unlock(&fifo->base.engine.subdev.mutex); | ||
87 | } | ||
88 | |||
89 | void | ||
90 | gk104_fifo_runlist_insert(struct gk104_fifo *fifo, struct gk104_fifo_chan *chan) | ||
91 | { | ||
92 | mutex_lock(&fifo->base.engine.subdev.mutex); | ||
93 | list_add_tail(&chan->head, &fifo->engine[chan->engine].chan); | ||
94 | mutex_unlock(&fifo->base.engine.subdev.mutex); | ||
95 | } | ||
96 | |||
81 | static inline struct nvkm_engine * | 97 | static inline struct nvkm_engine * |
82 | gk104_fifo_engine(struct gk104_fifo *fifo, u32 engn) | 98 | gk104_fifo_engine(struct gk104_fifo *fifo, u32 engn) |
83 | { | 99 | { |
@@ -112,7 +128,7 @@ gk104_fifo_recover_work(struct work_struct *work) | |||
112 | nvkm_subdev_fini(&engine->subdev, false); | 128 | nvkm_subdev_fini(&engine->subdev, false); |
113 | WARN_ON(nvkm_subdev_init(&engine->subdev)); | 129 | WARN_ON(nvkm_subdev_init(&engine->subdev)); |
114 | } | 130 | } |
115 | gk104_fifo_runlist_update(fifo, gk104_fifo_subdev_engine(engn)); | 131 | gk104_fifo_runlist_commit(fifo, gk104_fifo_subdev_engine(engn)); |
116 | } | 132 | } |
117 | 133 | ||
118 | nvkm_wr32(device, 0x00262c, engm); | 134 | nvkm_wr32(device, 0x00262c, engm); |
@@ -180,7 +196,7 @@ gk104_fifo_intr_sched_ctxsw(struct gk104_fifo *fifo) | |||
180 | 196 | ||
181 | spin_lock_irqsave(&fifo->base.lock, flags); | 197 | spin_lock_irqsave(&fifo->base.lock, flags); |
182 | for (engn = 0; engn < ARRAY_SIZE(fifo->engine); engn++) { | 198 | for (engn = 0; engn < ARRAY_SIZE(fifo->engine); engn++) { |
183 | u32 stat = nvkm_rd32(device, 0x002640 + (engn * 0x04)); | 199 | u32 stat = nvkm_rd32(device, 0x002640 + (engn * 0x08)); |
184 | u32 busy = (stat & 0x80000000); | 200 | u32 busy = (stat & 0x80000000); |
185 | u32 next = (stat & 0x07ff0000) >> 16; | 201 | u32 next = (stat & 0x07ff0000) >> 16; |
186 | u32 chsw = (stat & 0x00008000); | 202 | u32 chsw = (stat & 0x00008000); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h index 5afd9b5ec5d1..bec519d8f91e 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gk104.h | |||
@@ -5,6 +5,7 @@ | |||
5 | 5 | ||
6 | #include <subdev/mmu.h> | 6 | #include <subdev/mmu.h> |
7 | 7 | ||
8 | struct gk104_fifo_chan; | ||
8 | struct gk104_fifo_engn { | 9 | struct gk104_fifo_engn { |
9 | struct nvkm_memory *runlist[2]; | 10 | struct nvkm_memory *runlist[2]; |
10 | int cur_runlist; | 11 | int cur_runlist; |
@@ -35,7 +36,9 @@ void gk104_fifo_fini(struct nvkm_fifo *); | |||
35 | void gk104_fifo_intr(struct nvkm_fifo *); | 36 | void gk104_fifo_intr(struct nvkm_fifo *); |
36 | void gk104_fifo_uevent_init(struct nvkm_fifo *); | 37 | void gk104_fifo_uevent_init(struct nvkm_fifo *); |
37 | void gk104_fifo_uevent_fini(struct nvkm_fifo *); | 38 | void gk104_fifo_uevent_fini(struct nvkm_fifo *); |
38 | void gk104_fifo_runlist_update(struct gk104_fifo *, u32 engine); | 39 | void gk104_fifo_runlist_insert(struct gk104_fifo *, struct gk104_fifo_chan *); |
40 | void gk104_fifo_runlist_remove(struct gk104_fifo *, struct gk104_fifo_chan *); | ||
41 | void gk104_fifo_runlist_commit(struct gk104_fifo *, u32 engine); | ||
39 | 42 | ||
40 | static inline u64 | 43 | static inline u64 |
41 | gk104_fifo_engine_subdev(int engine) | 44 | gk104_fifo_engine_subdev(int engine) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifog84.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifog84.c index 820132363f68..77c2f2a28bf3 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifog84.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifog84.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/ramht.h> | 27 | #include <core/ramht.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl826f.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | static int | 33 | static int |
@@ -35,15 +36,15 @@ g84_fifo_gpfifo_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
35 | { | 36 | { |
36 | struct nvkm_object *parent = oclass->parent; | 37 | struct nvkm_object *parent = oclass->parent; |
37 | union { | 38 | union { |
38 | struct nv50_channel_gpfifo_v0 v0; | 39 | struct g82_channel_gpfifo_v0 v0; |
39 | } *args = data; | 40 | } *args = data; |
40 | struct nv50_fifo *fifo = nv50_fifo(base); | 41 | struct nv50_fifo *fifo = nv50_fifo(base); |
41 | struct nv50_fifo_chan *chan; | 42 | struct nv50_fifo_chan *chan; |
42 | u64 ioffset, ilength; | 43 | u64 ioffset, ilength; |
43 | int ret; | 44 | int ret = -ENOSYS; |
44 | 45 | ||
45 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); | 46 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); |
46 | if (nvif_unpack(args->v0, 0, 0, false)) { | 47 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
47 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " | 48 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " |
48 | "pushbuf %llx ioffset %016llx " | 49 | "pushbuf %llx ioffset %016llx " |
49 | "ilength %08x\n", | 50 | "ilength %08x\n", |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c index e7cbc139c1d4..cbc67f262322 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogf100.c | |||
@@ -29,6 +29,7 @@ | |||
29 | #include <subdev/timer.h> | 29 | #include <subdev/timer.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | 31 | #include <nvif/class.h> |
32 | #include <nvif/cl906f.h> | ||
32 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
33 | 34 | ||
34 | static u32 | 35 | static u32 |
@@ -138,9 +139,9 @@ gf100_fifo_gpfifo_fini(struct nvkm_fifo_chan *base) | |||
138 | u32 coff = chan->base.chid * 8; | 139 | u32 coff = chan->base.chid * 8; |
139 | 140 | ||
140 | if (!list_empty(&chan->head) && !chan->killed) { | 141 | if (!list_empty(&chan->head) && !chan->killed) { |
141 | list_del_init(&chan->head); | 142 | gf100_fifo_runlist_remove(fifo, chan); |
142 | nvkm_mask(device, 0x003004 + coff, 0x00000001, 0x00000000); | 143 | nvkm_mask(device, 0x003004 + coff, 0x00000001, 0x00000000); |
143 | gf100_fifo_runlist_update(fifo); | 144 | gf100_fifo_runlist_commit(fifo); |
144 | } | 145 | } |
145 | 146 | ||
146 | gf100_fifo_intr_engine(fifo); | 147 | gf100_fifo_intr_engine(fifo); |
@@ -160,9 +161,9 @@ gf100_fifo_gpfifo_init(struct nvkm_fifo_chan *base) | |||
160 | nvkm_wr32(device, 0x003000 + coff, 0xc0000000 | addr); | 161 | nvkm_wr32(device, 0x003000 + coff, 0xc0000000 | addr); |
161 | 162 | ||
162 | if (list_empty(&chan->head) && !chan->killed) { | 163 | if (list_empty(&chan->head) && !chan->killed) { |
163 | list_add_tail(&chan->head, &fifo->chan); | 164 | gf100_fifo_runlist_insert(fifo, chan); |
164 | nvkm_wr32(device, 0x003004 + coff, 0x001f0001); | 165 | nvkm_wr32(device, 0x003004 + coff, 0x001f0001); |
165 | gf100_fifo_runlist_update(fifo); | 166 | gf100_fifo_runlist_commit(fifo); |
166 | } | 167 | } |
167 | } | 168 | } |
168 | 169 | ||
@@ -199,10 +200,10 @@ gf100_fifo_gpfifo_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
199 | struct nvkm_object *parent = oclass->parent; | 200 | struct nvkm_object *parent = oclass->parent; |
200 | struct gf100_fifo_chan *chan; | 201 | struct gf100_fifo_chan *chan; |
201 | u64 usermem, ioffset, ilength; | 202 | u64 usermem, ioffset, ilength; |
202 | int ret, i; | 203 | int ret = -ENOSYS, i; |
203 | 204 | ||
204 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); | 205 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); |
205 | if (nvif_unpack(args->v0, 0, 0, false)) { | 206 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
206 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " | 207 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " |
207 | "ioffset %016llx ilength %08x\n", | 208 | "ioffset %016llx ilength %08x\n", |
208 | args->v0.version, args->v0.vm, args->v0.ioffset, | 209 | args->v0.version, args->v0.vm, args->v0.ioffset, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c index 0b817540a9e4..2e1df01bd928 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifogk104.c | |||
@@ -30,6 +30,7 @@ | |||
30 | #include <subdev/timer.h> | 30 | #include <subdev/timer.h> |
31 | 31 | ||
32 | #include <nvif/class.h> | 32 | #include <nvif/class.h> |
33 | #include <nvif/cla06f.h> | ||
33 | #include <nvif/unpack.h> | 34 | #include <nvif/unpack.h> |
34 | 35 | ||
35 | static int | 36 | static int |
@@ -151,9 +152,9 @@ gk104_fifo_gpfifo_fini(struct nvkm_fifo_chan *base) | |||
151 | u32 coff = chan->base.chid * 8; | 152 | u32 coff = chan->base.chid * 8; |
152 | 153 | ||
153 | if (!list_empty(&chan->head)) { | 154 | if (!list_empty(&chan->head)) { |
154 | list_del_init(&chan->head); | 155 | gk104_fifo_runlist_remove(fifo, chan); |
155 | nvkm_mask(device, 0x800004 + coff, 0x00000800, 0x00000800); | 156 | nvkm_mask(device, 0x800004 + coff, 0x00000800, 0x00000800); |
156 | gk104_fifo_runlist_update(fifo, chan->engine); | 157 | gk104_fifo_runlist_commit(fifo, chan->engine); |
157 | } | 158 | } |
158 | 159 | ||
159 | nvkm_wr32(device, 0x800000 + coff, 0x00000000); | 160 | nvkm_wr32(device, 0x800000 + coff, 0x00000000); |
@@ -172,9 +173,9 @@ gk104_fifo_gpfifo_init(struct nvkm_fifo_chan *base) | |||
172 | nvkm_wr32(device, 0x800000 + coff, 0x80000000 | addr); | 173 | nvkm_wr32(device, 0x800000 + coff, 0x80000000 | addr); |
173 | 174 | ||
174 | if (list_empty(&chan->head) && !chan->killed) { | 175 | if (list_empty(&chan->head) && !chan->killed) { |
175 | list_add_tail(&chan->head, &fifo->engine[chan->engine].chan); | 176 | gk104_fifo_runlist_insert(fifo, chan); |
176 | nvkm_mask(device, 0x800004 + coff, 0x00000400, 0x00000400); | 177 | nvkm_mask(device, 0x800004 + coff, 0x00000400, 0x00000400); |
177 | gk104_fifo_runlist_update(fifo, chan->engine); | 178 | gk104_fifo_runlist_commit(fifo, chan->engine); |
178 | nvkm_mask(device, 0x800004 + coff, 0x00000400, 0x00000400); | 179 | nvkm_mask(device, 0x800004 + coff, 0x00000400, 0x00000400); |
179 | } | 180 | } |
180 | } | 181 | } |
@@ -213,10 +214,10 @@ gk104_fifo_gpfifo_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
213 | struct gk104_fifo_chan *chan; | 214 | struct gk104_fifo_chan *chan; |
214 | u64 usermem, ioffset, ilength; | 215 | u64 usermem, ioffset, ilength; |
215 | u32 engines; | 216 | u32 engines; |
216 | int ret, i; | 217 | int ret = -ENOSYS, i; |
217 | 218 | ||
218 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); | 219 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); |
219 | if (nvif_unpack(args->v0, 0, 0, false)) { | 220 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
220 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " | 221 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " |
221 | "ioffset %016llx ilength %08x engine %08x\n", | 222 | "ioffset %016llx ilength %08x engine %08x\n", |
222 | args->v0.version, args->v0.vm, args->v0.ioffset, | 223 | args->v0.version, args->v0.vm, args->v0.ioffset, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifonv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifonv50.c index a8c69f878221..c5a7de9db259 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifonv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/fifo/gpfifonv50.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include <core/ramht.h> | 27 | #include <core/ramht.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/cl506f.h> | ||
30 | #include <nvif/unpack.h> | 31 | #include <nvif/unpack.h> |
31 | 32 | ||
32 | static int | 33 | static int |
@@ -40,10 +41,10 @@ nv50_fifo_gpfifo_new(struct nvkm_fifo *base, const struct nvkm_oclass *oclass, | |||
40 | struct nv50_fifo *fifo = nv50_fifo(base); | 41 | struct nv50_fifo *fifo = nv50_fifo(base); |
41 | struct nv50_fifo_chan *chan; | 42 | struct nv50_fifo_chan *chan; |
42 | u64 ioffset, ilength; | 43 | u64 ioffset, ilength; |
43 | int ret; | 44 | int ret = -ENOSYS; |
44 | 45 | ||
45 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); | 46 | nvif_ioctl(parent, "create channel gpfifo size %d\n", size); |
46 | if (nvif_unpack(args->v0, 0, 0, false)) { | 47 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
47 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " | 48 | nvif_ioctl(parent, "create channel gpfifo vers %d vm %llx " |
48 | "pushbuf %llx ioffset %016llx " | 49 | "pushbuf %llx ioffset %016llx " |
49 | "ilength %08x\n", | 50 | "ilength %08x\n", |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk20a.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk20a.c index ddaa16a71c84..ad0a6cfe7580 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/ctxgk20a.c | |||
@@ -55,7 +55,7 @@ gk20a_grctx_generate_main(struct gf100_gr *gr, struct gf100_grctx *info) | |||
55 | 55 | ||
56 | gk104_grctx_generate_rop_active_fbps(gr); | 56 | gk104_grctx_generate_rop_active_fbps(gr); |
57 | 57 | ||
58 | nvkm_mask(device, 0x5044b0, 0x8000000, 0x8000000); | 58 | nvkm_mask(device, 0x5044b0, 0x08000000, 0x08000000); |
59 | 59 | ||
60 | gf100_gr_wait_idle(gr); | 60 | gf100_gr_wait_idle(gr); |
61 | 61 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc index 7dacb3cc0668..e168b83a10c9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpc.fuc | |||
@@ -247,10 +247,7 @@ init: | |||
247 | tpc_strand_info(-1); | 247 | tpc_strand_info(-1); |
248 | 248 | ||
249 | ld b32 $r4 D[$r0 + #tpc_count] | 249 | ld b32 $r4 D[$r0 + #tpc_count] |
250 | mov $r5 NV_PGRAPH_GPC0_TPC0 | 250 | gpc_addr($r5, NV_PGRAPH_GPC0_TPC0) |
251 | ld b32 $r6 D[$r0 + #gpc_id] | ||
252 | shl b32 $r6 15 | ||
253 | add b32 $r5 $r6 | ||
254 | tpc_strand_init_tpc_loop: | 251 | tpc_strand_init_tpc_loop: |
255 | add b32 $r14 $r5 NV_TPC_STRAND_CNT | 252 | add b32 $r14 $r5 NV_TPC_STRAND_CNT |
256 | call(nv_rd32) | 253 | call(nv_rd32) |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h index 11bf363a6ae9..5136f9161706 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/fuc/gpcgm107.fuc5.h | |||
@@ -289,7 +289,7 @@ uint32_t gm107_grgpc_code[] = { | |||
289 | 0x020014fe, | 289 | 0x020014fe, |
290 | 0x12004002, | 290 | 0x12004002, |
291 | 0xbd0002f6, | 291 | 0xbd0002f6, |
292 | 0x05b34104, | 292 | 0x05ad4104, |
293 | 0x400010fe, | 293 | 0x400010fe, |
294 | 0x00f60700, | 294 | 0x00f60700, |
295 | 0x0204bd00, | 295 | 0x0204bd00, |
@@ -387,180 +387,180 @@ uint32_t gm107_grgpc_code[] = { | |||
387 | 0x7e00008f, | 387 | 0x7e00008f, |
388 | 0x98000314, | 388 | 0x98000314, |
389 | 0x00850504, | 389 | 0x00850504, |
390 | 0x06985040, | 390 | 0x55f05040, |
391 | 0x0f64b604, | 391 | /* 0x04dd: tpc_strand_init_tpc_loop */ |
392 | /* 0x04e3: tpc_strand_init_tpc_loop */ | 392 | 0x705eb801, |
393 | 0xb80056bb, | 393 | 0x657e0005, |
394 | 0x0005705e, | 394 | 0xf6b20000, |
395 | 0x0000657e, | 395 | /* 0x04ea: tpc_strand_init_idx_loop */ |
396 | 0x74bdf6b2, | 396 | 0x5eb874bd, |
397 | /* 0x04f0: tpc_strand_init_idx_loop */ | 397 | 0xb2000560, |
398 | 0x05605eb8, | 398 | 0x008f7e7f, |
399 | 0x7e7fb200, | 399 | 0x885eb800, |
400 | 0xb800008f, | 400 | 0x2f950005, |
401 | 0x0005885e, | 401 | 0x008f7e08, |
402 | 0x7e082f95, | 402 | 0x8c5eb800, |
403 | 0xb800008f, | 403 | 0x2f950005, |
404 | 0x00058c5e, | 404 | 0x008f7e08, |
405 | 0x7e082f95, | 405 | 0x905eb800, |
406 | 0xb800008f, | 406 | 0x657e0005, |
407 | 0x0005905e, | 407 | 0xf5b60000, |
408 | 0x0000657e, | 408 | 0x01f0b606, |
409 | 0xb606f5b6, | 409 | 0xbb08f4b6, |
410 | 0xf4b601f0, | 410 | 0x3fbb002f, |
411 | 0x002fbb08, | 411 | 0x0170b600, |
412 | 0xb6003fbb, | 412 | 0xf40162b6, |
413 | 0x62b60170, | 413 | 0x50b7bf1b, |
414 | 0xbf1bf401, | 414 | 0x42b60800, |
415 | 0x080050b7, | 415 | 0xa81bf401, |
416 | 0xf40142b6, | ||
417 | 0x3f0fa81b, | ||
418 | 0x501d608e, | ||
419 | 0xb201e5f0, | ||
420 | 0x008f7eff, | ||
421 | 0x8e0d0f00, | ||
422 | 0xf0501da8, | ||
423 | 0xffb201e5, | ||
424 | 0x00008f7e, | ||
425 | 0x0003147e, | ||
426 | 0x02010080, | ||
427 | 0xbd0003f6, | ||
428 | 0xf024bd04, | ||
429 | 0x00801f29, | ||
430 | 0x02f60230, | ||
431 | /* 0x0577: main */ | ||
432 | 0xf404bd00, | ||
433 | 0x28f40031, | ||
434 | 0x7e240d00, | ||
435 | 0xf4000037, | ||
436 | 0xe4b0f401, | ||
437 | 0x1d18f404, | ||
438 | 0x020181fe, | ||
439 | 0xfd20bd06, | ||
440 | 0xe4b60412, | ||
441 | 0x051efd01, | ||
442 | 0x7e0018fe, | ||
443 | 0xf400064a, | ||
444 | /* 0x05a6: main_not_ctx_xfer */ | ||
445 | 0xef94d40e, | ||
446 | 0x01f5f010, | ||
447 | 0x0002f87e, | ||
448 | /* 0x05b3: ih */ | ||
449 | 0xf9c70ef4, | ||
450 | 0x0188fe80, | ||
451 | 0x90f980f9, | ||
452 | 0xb0f9a0f9, | ||
453 | 0xe0f9d0f9, | ||
454 | 0x04bdf0f9, | ||
455 | 0xcf02004a, | ||
456 | 0xabc400aa, | ||
457 | 0x1f0bf404, | ||
458 | 0x004e240d, | ||
459 | 0x00eecf1a, | ||
460 | 0xcf19004f, | ||
461 | 0x047e00ff, | ||
462 | 0x010e0000, | ||
463 | 0xf61d0040, | ||
464 | 0x04bd000e, | ||
465 | /* 0x05f0: ih_no_fifo */ | ||
466 | 0xf6010040, | ||
467 | 0x04bd000a, | ||
468 | 0xe0fcf0fc, | ||
469 | 0xb0fcd0fc, | ||
470 | 0x90fca0fc, | ||
471 | 0x88fe80fc, | ||
472 | 0xf480fc00, | ||
473 | 0x01f80032, | ||
474 | /* 0x0610: hub_barrier_done */ | ||
475 | 0x0e98010f, | ||
476 | 0x04febb04, | ||
477 | 0x188effb2, | ||
478 | 0x8f7e4094, | ||
479 | 0x00f80000, | ||
480 | /* 0x0624: ctx_redswitch */ | ||
481 | 0x0080200f, | ||
482 | 0x0ff60185, | ||
483 | 0x0e04bd00, | ||
484 | /* 0x0631: ctx_redswitch_delay */ | ||
485 | 0x01e2b608, | ||
486 | 0xf1fd1bf4, | ||
487 | 0xf10800f5, | ||
488 | 0x800200f5, | ||
489 | 0xf6018500, | ||
490 | 0x04bd000f, | ||
491 | /* 0x064a: ctx_xfer */ | ||
492 | 0x008000f8, | ||
493 | 0x0ff60281, | ||
494 | 0x8e04bd00, | ||
495 | 0xf0501dc4, | ||
496 | 0xffb201e5, | ||
497 | 0x00008f7e, | ||
498 | 0x7e0711f4, | ||
499 | /* 0x0667: ctx_xfer_not_load */ | ||
500 | 0x7e000624, | ||
501 | 0xbd000216, | ||
502 | 0x47fc8024, | ||
503 | 0x0002f602, | ||
504 | 0x2cf004bd, | ||
505 | 0x0320b601, | ||
506 | 0x024afc80, | ||
507 | 0xbd0002f6, | ||
508 | 0x8e0c0f04, | ||
509 | 0xf0501da8, | ||
510 | 0xffb201e5, | ||
511 | 0x00008f7e, | ||
512 | 0x0003147e, | ||
513 | 0x608e3f0f, | 416 | 0x608e3f0f, |
514 | 0xe5f0501d, | 417 | 0xe5f0501d, |
515 | 0x7effb201, | 418 | 0x7effb201, |
516 | 0x0f00008f, | 419 | 0x0f00008f, |
517 | 0x1d9c8e00, | 420 | 0x1da88e0d, |
518 | 0x01e5f050, | 421 | 0x01e5f050, |
519 | 0x8f7effb2, | 422 | 0x8f7effb2, |
520 | 0x010f0000, | 423 | 0x147e0000, |
521 | 0x0003147e, | 424 | 0x00800003, |
522 | 0xb601fcf0, | 425 | 0x03f60201, |
523 | 0xa88e03f0, | 426 | 0xbd04bd00, |
524 | 0xe5f0501d, | 427 | 0x1f29f024, |
525 | 0x7effb201, | 428 | 0x02300080, |
526 | 0xf000008f, | 429 | 0xbd0002f6, |
527 | 0xa5f001ac, | 430 | /* 0x0571: main */ |
528 | 0x00008b02, | 431 | 0x0031f404, |
529 | 0x040c9850, | 432 | 0x0d0028f4, |
530 | 0xbb0fc4b6, | 433 | 0x00377e24, |
531 | 0x0c9800bc, | 434 | 0xf401f400, |
532 | 0x010d9800, | 435 | 0xf404e4b0, |
533 | 0x3d7e000e, | 436 | 0x81fe1d18, |
534 | 0xacf00001, | 437 | 0xbd060201, |
535 | 0x40008b01, | 438 | 0x0412fd20, |
536 | 0x040c9850, | 439 | 0xfd01e4b6, |
537 | 0xbb0fc4b6, | 440 | 0x18fe051e, |
538 | 0x0c9800bc, | 441 | 0x06447e00, |
539 | 0x020d9801, | 442 | 0xd40ef400, |
540 | 0x4e060f98, | 443 | /* 0x05a0: main_not_ctx_xfer */ |
541 | 0x3d7e0800, | 444 | 0xf010ef94, |
542 | 0xacf00001, | 445 | 0xf87e01f5, |
543 | 0x04a5f001, | 446 | 0x0ef40002, |
544 | 0x5030008b, | 447 | /* 0x05ad: ih */ |
545 | 0xb6040c98, | 448 | 0xfe80f9c7, |
546 | 0xbcbb0fc4, | 449 | 0x80f90188, |
547 | 0x020c9800, | 450 | 0xa0f990f9, |
548 | 0x98030d98, | 451 | 0xd0f9b0f9, |
549 | 0x004e080f, | 452 | 0xf0f9e0f9, |
550 | 0x013d7e02, | 453 | 0x004a04bd, |
551 | 0x020a7e00, | 454 | 0x00aacf02, |
552 | 0x03147e00, | 455 | 0xf404abc4, |
553 | 0x0601f400, | 456 | 0x240d1f0b, |
554 | /* 0x073f: ctx_xfer_post */ | 457 | 0xcf1a004e, |
555 | 0x7e1a12f4, | 458 | 0x004f00ee, |
556 | 0x0f000227, | 459 | 0x00ffcf19, |
557 | 0x1da88e0d, | 460 | 0x0000047e, |
461 | 0x0040010e, | ||
462 | 0x000ef61d, | ||
463 | /* 0x05ea: ih_no_fifo */ | ||
464 | 0x004004bd, | ||
465 | 0x000af601, | ||
466 | 0xf0fc04bd, | ||
467 | 0xd0fce0fc, | ||
468 | 0xa0fcb0fc, | ||
469 | 0x80fc90fc, | ||
470 | 0xfc0088fe, | ||
471 | 0x0032f480, | ||
472 | /* 0x060a: hub_barrier_done */ | ||
473 | 0x010f01f8, | ||
474 | 0xbb040e98, | ||
475 | 0xffb204fe, | ||
476 | 0x4094188e, | ||
477 | 0x00008f7e, | ||
478 | /* 0x061e: ctx_redswitch */ | ||
479 | 0x200f00f8, | ||
480 | 0x01850080, | ||
481 | 0xbd000ff6, | ||
482 | /* 0x062b: ctx_redswitch_delay */ | ||
483 | 0xb6080e04, | ||
484 | 0x1bf401e2, | ||
485 | 0x00f5f1fd, | ||
486 | 0x00f5f108, | ||
487 | 0x85008002, | ||
488 | 0x000ff601, | ||
489 | 0x00f804bd, | ||
490 | /* 0x0644: ctx_xfer */ | ||
491 | 0x02810080, | ||
492 | 0xbd000ff6, | ||
493 | 0x1dc48e04, | ||
494 | 0x01e5f050, | ||
495 | 0x8f7effb2, | ||
496 | 0x11f40000, | ||
497 | 0x061e7e07, | ||
498 | /* 0x0661: ctx_xfer_not_load */ | ||
499 | 0x02167e00, | ||
500 | 0x8024bd00, | ||
501 | 0xf60247fc, | ||
502 | 0x04bd0002, | ||
503 | 0xb6012cf0, | ||
504 | 0xfc800320, | ||
505 | 0x02f6024a, | ||
506 | 0x0f04bd00, | ||
507 | 0x1da88e0c, | ||
558 | 0x01e5f050, | 508 | 0x01e5f050, |
559 | 0x8f7effb2, | 509 | 0x8f7effb2, |
560 | 0x147e0000, | 510 | 0x147e0000, |
561 | /* 0x0756: ctx_xfer_done */ | 511 | 0x3f0f0003, |
562 | 0x107e0003, | 512 | 0x501d608e, |
563 | 0x00f80006, | 513 | 0xb201e5f0, |
514 | 0x008f7eff, | ||
515 | 0x8e000f00, | ||
516 | 0xf0501d9c, | ||
517 | 0xffb201e5, | ||
518 | 0x00008f7e, | ||
519 | 0x147e010f, | ||
520 | 0xfcf00003, | ||
521 | 0x03f0b601, | ||
522 | 0x501da88e, | ||
523 | 0xb201e5f0, | ||
524 | 0x008f7eff, | ||
525 | 0x01acf000, | ||
526 | 0x8b02a5f0, | ||
527 | 0x98500000, | ||
528 | 0xc4b6040c, | ||
529 | 0x00bcbb0f, | ||
530 | 0x98000c98, | ||
531 | 0x000e010d, | ||
532 | 0x00013d7e, | ||
533 | 0x8b01acf0, | ||
534 | 0x98504000, | ||
535 | 0xc4b6040c, | ||
536 | 0x00bcbb0f, | ||
537 | 0x98010c98, | ||
538 | 0x0f98020d, | ||
539 | 0x08004e06, | ||
540 | 0x00013d7e, | ||
541 | 0xf001acf0, | ||
542 | 0x008b04a5, | ||
543 | 0x0c985030, | ||
544 | 0x0fc4b604, | ||
545 | 0x9800bcbb, | ||
546 | 0x0d98020c, | ||
547 | 0x080f9803, | ||
548 | 0x7e02004e, | ||
549 | 0x7e00013d, | ||
550 | 0x7e00020a, | ||
551 | 0xf4000314, | ||
552 | 0x12f40601, | ||
553 | /* 0x0739: ctx_xfer_post */ | ||
554 | 0x02277e1a, | ||
555 | 0x8e0d0f00, | ||
556 | 0xf0501da8, | ||
557 | 0xffb201e5, | ||
558 | 0x00008f7e, | ||
559 | 0x0003147e, | ||
560 | /* 0x0750: ctx_xfer_done */ | ||
561 | 0x00060a7e, | ||
562 | 0x000000f8, | ||
563 | 0x00000000, | ||
564 | 0x00000000, | 564 | 0x00000000, |
565 | 0x00000000, | 565 | 0x00000000, |
566 | 0x00000000, | 566 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c index 9f5dfc85147a..1f81069edc58 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/gr/gf100.c | |||
@@ -34,6 +34,7 @@ | |||
34 | #include <engine/fifo.h> | 34 | #include <engine/fifo.h> |
35 | 35 | ||
36 | #include <nvif/class.h> | 36 | #include <nvif/class.h> |
37 | #include <nvif/cl9097.h> | ||
37 | #include <nvif/unpack.h> | 38 | #include <nvif/unpack.h> |
38 | 39 | ||
39 | /******************************************************************************* | 40 | /******************************************************************************* |
@@ -139,6 +140,12 @@ gf100_gr_zbc_depth_get(struct gf100_gr *gr, int format, | |||
139 | /******************************************************************************* | 140 | /******************************************************************************* |
140 | * Graphics object classes | 141 | * Graphics object classes |
141 | ******************************************************************************/ | 142 | ******************************************************************************/ |
143 | #define gf100_gr_object(p) container_of((p), struct gf100_gr_object, object) | ||
144 | |||
145 | struct gf100_gr_object { | ||
146 | struct nvkm_object object; | ||
147 | struct gf100_gr_chan *chan; | ||
148 | }; | ||
142 | 149 | ||
143 | static int | 150 | static int |
144 | gf100_fermi_mthd_zbc_color(struct nvkm_object *object, void *data, u32 size) | 151 | gf100_fermi_mthd_zbc_color(struct nvkm_object *object, void *data, u32 size) |
@@ -147,9 +154,9 @@ gf100_fermi_mthd_zbc_color(struct nvkm_object *object, void *data, u32 size) | |||
147 | union { | 154 | union { |
148 | struct fermi_a_zbc_color_v0 v0; | 155 | struct fermi_a_zbc_color_v0 v0; |
149 | } *args = data; | 156 | } *args = data; |
150 | int ret; | 157 | int ret = -ENOSYS; |
151 | 158 | ||
152 | if (nvif_unpack(args->v0, 0, 0, false)) { | 159 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
153 | switch (args->v0.format) { | 160 | switch (args->v0.format) { |
154 | case FERMI_A_ZBC_COLOR_V0_FMT_ZERO: | 161 | case FERMI_A_ZBC_COLOR_V0_FMT_ZERO: |
155 | case FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE: | 162 | case FERMI_A_ZBC_COLOR_V0_FMT_UNORM_ONE: |
@@ -193,9 +200,9 @@ gf100_fermi_mthd_zbc_depth(struct nvkm_object *object, void *data, u32 size) | |||
193 | union { | 200 | union { |
194 | struct fermi_a_zbc_depth_v0 v0; | 201 | struct fermi_a_zbc_depth_v0 v0; |
195 | } *args = data; | 202 | } *args = data; |
196 | int ret; | 203 | int ret = -ENOSYS; |
197 | 204 | ||
198 | if (nvif_unpack(args->v0, 0, 0, false)) { | 205 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
199 | switch (args->v0.format) { | 206 | switch (args->v0.format) { |
200 | case FERMI_A_ZBC_DEPTH_V0_FMT_FP32: | 207 | case FERMI_A_ZBC_DEPTH_V0_FMT_FP32: |
201 | ret = gf100_gr_zbc_depth_get(gr, args->v0.format, | 208 | ret = gf100_gr_zbc_depth_get(gr, args->v0.format, |
@@ -213,6 +220,7 @@ gf100_fermi_mthd_zbc_depth(struct nvkm_object *object, void *data, u32 size) | |||
213 | static int | 220 | static int |
214 | gf100_fermi_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) | 221 | gf100_fermi_mthd(struct nvkm_object *object, u32 mthd, void *data, u32 size) |
215 | { | 222 | { |
223 | nvif_ioctl(object, "fermi mthd %08x\n", mthd); | ||
216 | switch (mthd) { | 224 | switch (mthd) { |
217 | case FERMI_A_ZBC_COLOR: | 225 | case FERMI_A_ZBC_COLOR: |
218 | return gf100_fermi_mthd_zbc_color(object, data, size); | 226 | return gf100_fermi_mthd_zbc_color(object, data, size); |
@@ -256,6 +264,27 @@ gf100_gr_mthd_sw(struct nvkm_device *device, u16 class, u32 mthd, u32 data) | |||
256 | return false; | 264 | return false; |
257 | } | 265 | } |
258 | 266 | ||
267 | static const struct nvkm_object_func | ||
268 | gf100_gr_object_func = { | ||
269 | }; | ||
270 | |||
271 | static int | ||
272 | gf100_gr_object_new(const struct nvkm_oclass *oclass, void *data, u32 size, | ||
273 | struct nvkm_object **pobject) | ||
274 | { | ||
275 | struct gf100_gr_chan *chan = gf100_gr_chan(oclass->parent); | ||
276 | struct gf100_gr_object *object; | ||
277 | |||
278 | if (!(object = kzalloc(sizeof(*object), GFP_KERNEL))) | ||
279 | return -ENOMEM; | ||
280 | *pobject = &object->object; | ||
281 | |||
282 | nvkm_object_ctor(oclass->base.func ? oclass->base.func : | ||
283 | &gf100_gr_object_func, oclass, &object->object); | ||
284 | object->chan = chan; | ||
285 | return 0; | ||
286 | } | ||
287 | |||
259 | static int | 288 | static int |
260 | gf100_gr_object_get(struct nvkm_gr *base, int index, struct nvkm_sclass *sclass) | 289 | gf100_gr_object_get(struct nvkm_gr *base, int index, struct nvkm_sclass *sclass) |
261 | { | 290 | { |
@@ -265,6 +294,7 @@ gf100_gr_object_get(struct nvkm_gr *base, int index, struct nvkm_sclass *sclass) | |||
265 | while (gr->func->sclass[c].oclass) { | 294 | while (gr->func->sclass[c].oclass) { |
266 | if (c++ == index) { | 295 | if (c++ == index) { |
267 | *sclass = gr->func->sclass[index]; | 296 | *sclass = gr->func->sclass[index]; |
297 | sclass->ctor = gf100_gr_object_new; | ||
268 | return index; | 298 | return index; |
269 | } | 299 | } |
270 | } | 300 | } |
@@ -826,7 +856,41 @@ gf100_gr_units(struct nvkm_gr *base) | |||
826 | return cfg; | 856 | return cfg; |
827 | } | 857 | } |
828 | 858 | ||
859 | static const struct nvkm_bitfield gf100_dispatch_error[] = { | ||
860 | { 0x00000001, "INJECTED_BUNDLE_ERROR" }, | ||
861 | { 0x00000002, "CLASS_SUBCH_MISMATCH" }, | ||
862 | { 0x00000004, "SUBCHSW_DURING_NOTIFY" }, | ||
863 | {} | ||
864 | }; | ||
865 | |||
866 | static const struct nvkm_bitfield gf100_m2mf_error[] = { | ||
867 | { 0x00000001, "PUSH_TOO_MUCH_DATA" }, | ||
868 | { 0x00000002, "PUSH_NOT_ENOUGH_DATA" }, | ||
869 | {} | ||
870 | }; | ||
871 | |||
872 | static const struct nvkm_bitfield gf100_unk6_error[] = { | ||
873 | { 0x00000001, "TEMP_TOO_SMALL" }, | ||
874 | {} | ||
875 | }; | ||
876 | |||
877 | static const struct nvkm_bitfield gf100_ccache_error[] = { | ||
878 | { 0x00000001, "INTR" }, | ||
879 | { 0x00000002, "LDCONST_OOB" }, | ||
880 | {} | ||
881 | }; | ||
882 | |||
883 | static const struct nvkm_bitfield gf100_macro_error[] = { | ||
884 | { 0x00000001, "TOO_FEW_PARAMS" }, | ||
885 | { 0x00000002, "TOO_MANY_PARAMS" }, | ||
886 | { 0x00000004, "ILLEGAL_OPCODE" }, | ||
887 | { 0x00000008, "DOUBLE_BRANCH" }, | ||
888 | { 0x00000010, "WATCHDOG" }, | ||
889 | {} | ||
890 | }; | ||
891 | |||
829 | static const struct nvkm_bitfield gk104_sked_error[] = { | 892 | static const struct nvkm_bitfield gk104_sked_error[] = { |
893 | { 0x00000040, "CTA_RESUME" }, | ||
830 | { 0x00000080, "CONSTANT_BUFFER_SIZE" }, | 894 | { 0x00000080, "CONSTANT_BUFFER_SIZE" }, |
831 | { 0x00000200, "LOCAL_MEMORY_SIZE_POS" }, | 895 | { 0x00000200, "LOCAL_MEMORY_SIZE_POS" }, |
832 | { 0x00000400, "LOCAL_MEMORY_SIZE_NEG" }, | 896 | { 0x00000400, "LOCAL_MEMORY_SIZE_NEG" }, |
@@ -836,6 +900,8 @@ static const struct nvkm_bitfield gk104_sked_error[] = { | |||
836 | { 0x00040000, "TOTAL_THREADS" }, | 900 | { 0x00040000, "TOTAL_THREADS" }, |
837 | { 0x00100000, "PROGRAM_OFFSET" }, | 901 | { 0x00100000, "PROGRAM_OFFSET" }, |
838 | { 0x00200000, "SHARED_MEMORY_SIZE" }, | 902 | { 0x00200000, "SHARED_MEMORY_SIZE" }, |
903 | { 0x00800000, "CTA_THREAD_DIMENSION_ZERO" }, | ||
904 | { 0x01000000, "MEMORY_WINDOW_OVERLAP" }, | ||
839 | { 0x02000000, "SHARED_CONFIG_TOO_SMALL" }, | 905 | { 0x02000000, "SHARED_CONFIG_TOO_SMALL" }, |
840 | { 0x04000000, "TOTAL_REGISTER_COUNT" }, | 906 | { 0x04000000, "TOTAL_REGISTER_COUNT" }, |
841 | {} | 907 | {} |
@@ -1005,12 +1071,16 @@ gf100_gr_trap_intr(struct gf100_gr *gr) | |||
1005 | { | 1071 | { |
1006 | struct nvkm_subdev *subdev = &gr->base.engine.subdev; | 1072 | struct nvkm_subdev *subdev = &gr->base.engine.subdev; |
1007 | struct nvkm_device *device = subdev->device; | 1073 | struct nvkm_device *device = subdev->device; |
1074 | char error[128]; | ||
1008 | u32 trap = nvkm_rd32(device, 0x400108); | 1075 | u32 trap = nvkm_rd32(device, 0x400108); |
1009 | int rop, gpc; | 1076 | int rop, gpc; |
1010 | 1077 | ||
1011 | if (trap & 0x00000001) { | 1078 | if (trap & 0x00000001) { |
1012 | u32 stat = nvkm_rd32(device, 0x404000); | 1079 | u32 stat = nvkm_rd32(device, 0x404000); |
1013 | nvkm_error(subdev, "DISPATCH %08x\n", stat); | 1080 | |
1081 | nvkm_snprintbf(error, sizeof(error), gf100_dispatch_error, | ||
1082 | stat & 0x3fffffff); | ||
1083 | nvkm_error(subdev, "DISPATCH %08x [%s]\n", stat, error); | ||
1014 | nvkm_wr32(device, 0x404000, 0xc0000000); | 1084 | nvkm_wr32(device, 0x404000, 0xc0000000); |
1015 | nvkm_wr32(device, 0x400108, 0x00000001); | 1085 | nvkm_wr32(device, 0x400108, 0x00000001); |
1016 | trap &= ~0x00000001; | 1086 | trap &= ~0x00000001; |
@@ -1018,7 +1088,11 @@ gf100_gr_trap_intr(struct gf100_gr *gr) | |||
1018 | 1088 | ||
1019 | if (trap & 0x00000002) { | 1089 | if (trap & 0x00000002) { |
1020 | u32 stat = nvkm_rd32(device, 0x404600); | 1090 | u32 stat = nvkm_rd32(device, 0x404600); |
1021 | nvkm_error(subdev, "M2MF %08x\n", stat); | 1091 | |
1092 | nvkm_snprintbf(error, sizeof(error), gf100_m2mf_error, | ||
1093 | stat & 0x3fffffff); | ||
1094 | nvkm_error(subdev, "M2MF %08x [%s]\n", stat, error); | ||
1095 | |||
1022 | nvkm_wr32(device, 0x404600, 0xc0000000); | 1096 | nvkm_wr32(device, 0x404600, 0xc0000000); |
1023 | nvkm_wr32(device, 0x400108, 0x00000002); | 1097 | nvkm_wr32(device, 0x400108, 0x00000002); |
1024 | trap &= ~0x00000002; | 1098 | trap &= ~0x00000002; |
@@ -1026,7 +1100,10 @@ gf100_gr_trap_intr(struct gf100_gr *gr) | |||
1026 | 1100 | ||
1027 | if (trap & 0x00000008) { | 1101 | if (trap & 0x00000008) { |
1028 | u32 stat = nvkm_rd32(device, 0x408030); | 1102 | u32 stat = nvkm_rd32(device, 0x408030); |
1029 | nvkm_error(subdev, "CCACHE %08x\n", stat); | 1103 | |
1104 | nvkm_snprintbf(error, sizeof(error), gf100_m2mf_error, | ||
1105 | stat & 0x3fffffff); | ||
1106 | nvkm_error(subdev, "CCACHE %08x [%s]\n", stat, error); | ||
1030 | nvkm_wr32(device, 0x408030, 0xc0000000); | 1107 | nvkm_wr32(device, 0x408030, 0xc0000000); |
1031 | nvkm_wr32(device, 0x400108, 0x00000008); | 1108 | nvkm_wr32(device, 0x400108, 0x00000008); |
1032 | trap &= ~0x00000008; | 1109 | trap &= ~0x00000008; |
@@ -1034,7 +1111,8 @@ gf100_gr_trap_intr(struct gf100_gr *gr) | |||
1034 | 1111 | ||
1035 | if (trap & 0x00000010) { | 1112 | if (trap & 0x00000010) { |
1036 | u32 stat = nvkm_rd32(device, 0x405840); | 1113 | u32 stat = nvkm_rd32(device, 0x405840); |
1037 | nvkm_error(subdev, "SHADER %08x\n", stat); | 1114 | nvkm_error(subdev, "SHADER %08x, sph: 0x%06x, stage: 0x%02x\n", |
1115 | stat, stat & 0xffffff, (stat >> 24) & 0x3f); | ||
1038 | nvkm_wr32(device, 0x405840, 0xc0000000); | 1116 | nvkm_wr32(device, 0x405840, 0xc0000000); |
1039 | nvkm_wr32(device, 0x400108, 0x00000010); | 1117 | nvkm_wr32(device, 0x400108, 0x00000010); |
1040 | trap &= ~0x00000010; | 1118 | trap &= ~0x00000010; |
@@ -1042,7 +1120,11 @@ gf100_gr_trap_intr(struct gf100_gr *gr) | |||
1042 | 1120 | ||
1043 | if (trap & 0x00000040) { | 1121 | if (trap & 0x00000040) { |
1044 | u32 stat = nvkm_rd32(device, 0x40601c); | 1122 | u32 stat = nvkm_rd32(device, 0x40601c); |
1045 | nvkm_error(subdev, "UNK6 %08x\n", stat); | 1123 | |
1124 | nvkm_snprintbf(error, sizeof(error), gf100_unk6_error, | ||
1125 | stat & 0x3fffffff); | ||
1126 | nvkm_error(subdev, "UNK6 %08x [%s]\n", stat, error); | ||
1127 | |||
1046 | nvkm_wr32(device, 0x40601c, 0xc0000000); | 1128 | nvkm_wr32(device, 0x40601c, 0xc0000000); |
1047 | nvkm_wr32(device, 0x400108, 0x00000040); | 1129 | nvkm_wr32(device, 0x400108, 0x00000040); |
1048 | trap &= ~0x00000040; | 1130 | trap &= ~0x00000040; |
@@ -1050,7 +1132,16 @@ gf100_gr_trap_intr(struct gf100_gr *gr) | |||
1050 | 1132 | ||
1051 | if (trap & 0x00000080) { | 1133 | if (trap & 0x00000080) { |
1052 | u32 stat = nvkm_rd32(device, 0x404490); | 1134 | u32 stat = nvkm_rd32(device, 0x404490); |
1053 | nvkm_error(subdev, "MACRO %08x\n", stat); | 1135 | u32 pc = nvkm_rd32(device, 0x404494); |
1136 | u32 op = nvkm_rd32(device, 0x40449c); | ||
1137 | |||
1138 | nvkm_snprintbf(error, sizeof(error), gf100_macro_error, | ||
1139 | stat & 0x1fffffff); | ||
1140 | nvkm_error(subdev, "MACRO %08x [%s], pc: 0x%03x%s, op: 0x%08x\n", | ||
1141 | stat, error, pc & 0x7ff, | ||
1142 | (pc & 0x10000000) ? "" : " (invalid)", | ||
1143 | op); | ||
1144 | |||
1054 | nvkm_wr32(device, 0x404490, 0xc0000000); | 1145 | nvkm_wr32(device, 0x404490, 0xc0000000); |
1055 | nvkm_wr32(device, 0x400108, 0x00000080); | 1146 | nvkm_wr32(device, 0x400108, 0x00000080); |
1056 | trap &= ~0x00000080; | 1147 | trap &= ~0x00000080; |
@@ -1058,10 +1149,9 @@ gf100_gr_trap_intr(struct gf100_gr *gr) | |||
1058 | 1149 | ||
1059 | if (trap & 0x00000100) { | 1150 | if (trap & 0x00000100) { |
1060 | u32 stat = nvkm_rd32(device, 0x407020) & 0x3fffffff; | 1151 | u32 stat = nvkm_rd32(device, 0x407020) & 0x3fffffff; |
1061 | char sked[128]; | ||
1062 | 1152 | ||
1063 | nvkm_snprintbf(sked, sizeof(sked), gk104_sked_error, stat); | 1153 | nvkm_snprintbf(error, sizeof(error), gk104_sked_error, stat); |
1064 | nvkm_error(subdev, "SKED: %08x [%s]\n", stat, sked); | 1154 | nvkm_error(subdev, "SKED: %08x [%s]\n", stat, error); |
1065 | 1155 | ||
1066 | if (stat) | 1156 | if (stat) |
1067 | nvkm_wr32(device, 0x407020, 0x40000000); | 1157 | nvkm_wr32(device, 0x407020, 0x40000000); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c index 2721592d3031..f19fabef8d73 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/pm/base.c | |||
@@ -27,6 +27,8 @@ | |||
27 | #include <core/option.h> | 27 | #include <core/option.h> |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/if0002.h> | ||
31 | #include <nvif/if0003.h> | ||
30 | #include <nvif/ioctl.h> | 32 | #include <nvif/ioctl.h> |
31 | #include <nvif/unpack.h> | 33 | #include <nvif/unpack.h> |
32 | 34 | ||
@@ -210,10 +212,10 @@ nvkm_perfdom_init(struct nvkm_perfdom *dom, void *data, u32 size) | |||
210 | } *args = data; | 212 | } *args = data; |
211 | struct nvkm_object *object = &dom->object; | 213 | struct nvkm_object *object = &dom->object; |
212 | struct nvkm_pm *pm = dom->perfmon->pm; | 214 | struct nvkm_pm *pm = dom->perfmon->pm; |
213 | int ret, i; | 215 | int ret = -ENOSYS, i; |
214 | 216 | ||
215 | nvif_ioctl(object, "perfdom init size %d\n", size); | 217 | nvif_ioctl(object, "perfdom init size %d\n", size); |
216 | if (nvif_unvers(args->none)) { | 218 | if (!(ret = nvif_unvers(ret, &data, &size, args->none))) { |
217 | nvif_ioctl(object, "perfdom init\n"); | 219 | nvif_ioctl(object, "perfdom init\n"); |
218 | } else | 220 | } else |
219 | return ret; | 221 | return ret; |
@@ -240,10 +242,10 @@ nvkm_perfdom_sample(struct nvkm_perfdom *dom, void *data, u32 size) | |||
240 | } *args = data; | 242 | } *args = data; |
241 | struct nvkm_object *object = &dom->object; | 243 | struct nvkm_object *object = &dom->object; |
242 | struct nvkm_pm *pm = dom->perfmon->pm; | 244 | struct nvkm_pm *pm = dom->perfmon->pm; |
243 | int ret; | 245 | int ret = -ENOSYS; |
244 | 246 | ||
245 | nvif_ioctl(object, "perfdom sample size %d\n", size); | 247 | nvif_ioctl(object, "perfdom sample size %d\n", size); |
246 | if (nvif_unvers(args->none)) { | 248 | if (!(ret = nvif_unvers(ret, &data, &size, args->none))) { |
247 | nvif_ioctl(object, "perfdom sample\n"); | 249 | nvif_ioctl(object, "perfdom sample\n"); |
248 | } else | 250 | } else |
249 | return ret; | 251 | return ret; |
@@ -264,10 +266,10 @@ nvkm_perfdom_read(struct nvkm_perfdom *dom, void *data, u32 size) | |||
264 | } *args = data; | 266 | } *args = data; |
265 | struct nvkm_object *object = &dom->object; | 267 | struct nvkm_object *object = &dom->object; |
266 | struct nvkm_pm *pm = dom->perfmon->pm; | 268 | struct nvkm_pm *pm = dom->perfmon->pm; |
267 | int ret, i; | 269 | int ret = -ENOSYS, i; |
268 | 270 | ||
269 | nvif_ioctl(object, "perfdom read size %d\n", size); | 271 | nvif_ioctl(object, "perfdom read size %d\n", size); |
270 | if (nvif_unpack(args->v0, 0, 0, false)) { | 272 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
271 | nvif_ioctl(object, "perfdom read vers %d\n", args->v0.version); | 273 | nvif_ioctl(object, "perfdom read vers %d\n", args->v0.version); |
272 | } else | 274 | } else |
273 | return ret; | 275 | return ret; |
@@ -374,10 +376,10 @@ nvkm_perfdom_new_(struct nvkm_perfmon *perfmon, | |||
374 | struct nvkm_perfctr *ctr[4] = {}; | 376 | struct nvkm_perfctr *ctr[4] = {}; |
375 | struct nvkm_perfdom *dom; | 377 | struct nvkm_perfdom *dom; |
376 | int c, s, m; | 378 | int c, s, m; |
377 | int ret; | 379 | int ret = -ENOSYS; |
378 | 380 | ||
379 | nvif_ioctl(parent, "create perfdom size %d\n", size); | 381 | nvif_ioctl(parent, "create perfdom size %d\n", size); |
380 | if (nvif_unpack(args->v0, 0, 0, false)) { | 382 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
381 | nvif_ioctl(parent, "create perfdom vers %d dom %d mode %02x\n", | 383 | nvif_ioctl(parent, "create perfdom vers %d dom %d mode %02x\n", |
382 | args->v0.version, args->v0.domain, args->v0.mode); | 384 | args->v0.version, args->v0.domain, args->v0.mode); |
383 | } else | 385 | } else |
@@ -439,10 +441,10 @@ nvkm_perfmon_mthd_query_domain(struct nvkm_perfmon *perfmon, | |||
439 | struct nvkm_pm *pm = perfmon->pm; | 441 | struct nvkm_pm *pm = perfmon->pm; |
440 | struct nvkm_perfdom *dom; | 442 | struct nvkm_perfdom *dom; |
441 | u8 domain_nr; | 443 | u8 domain_nr; |
442 | int di, ret; | 444 | int di, ret = -ENOSYS; |
443 | 445 | ||
444 | nvif_ioctl(object, "perfmon query domain size %d\n", size); | 446 | nvif_ioctl(object, "perfmon query domain size %d\n", size); |
445 | if (nvif_unpack(args->v0, 0, 0, false)) { | 447 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
446 | nvif_ioctl(object, "perfmon domain vers %d iter %02x\n", | 448 | nvif_ioctl(object, "perfmon domain vers %d iter %02x\n", |
447 | args->v0.version, args->v0.iter); | 449 | args->v0.version, args->v0.iter); |
448 | di = (args->v0.iter & 0xff) - 1; | 450 | di = (args->v0.iter & 0xff) - 1; |
@@ -490,10 +492,10 @@ nvkm_perfmon_mthd_query_signal(struct nvkm_perfmon *perfmon, | |||
490 | struct nvkm_perfsig *sig; | 492 | struct nvkm_perfsig *sig; |
491 | const bool all = nvkm_boolopt(device->cfgopt, "NvPmShowAll", false); | 493 | const bool all = nvkm_boolopt(device->cfgopt, "NvPmShowAll", false); |
492 | const bool raw = nvkm_boolopt(device->cfgopt, "NvPmUnnamed", all); | 494 | const bool raw = nvkm_boolopt(device->cfgopt, "NvPmUnnamed", all); |
493 | int ret, si; | 495 | int ret = -ENOSYS, si; |
494 | 496 | ||
495 | nvif_ioctl(object, "perfmon query signal size %d\n", size); | 497 | nvif_ioctl(object, "perfmon query signal size %d\n", size); |
496 | if (nvif_unpack(args->v0, 0, 0, false)) { | 498 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
497 | nvif_ioctl(object, | 499 | nvif_ioctl(object, |
498 | "perfmon query signal vers %d dom %d iter %04x\n", | 500 | "perfmon query signal vers %d dom %d iter %04x\n", |
499 | args->v0.version, args->v0.domain, args->v0.iter); | 501 | args->v0.version, args->v0.domain, args->v0.iter); |
@@ -543,10 +545,10 @@ nvkm_perfmon_mthd_query_source(struct nvkm_perfmon *perfmon, | |||
543 | struct nvkm_perfsig *sig; | 545 | struct nvkm_perfsig *sig; |
544 | struct nvkm_perfsrc *src; | 546 | struct nvkm_perfsrc *src; |
545 | u8 source_nr = 0; | 547 | u8 source_nr = 0; |
546 | int si, ret; | 548 | int si, ret = -ENOSYS; |
547 | 549 | ||
548 | nvif_ioctl(object, "perfmon query source size %d\n", size); | 550 | nvif_ioctl(object, "perfmon query source size %d\n", size); |
549 | if (nvif_unpack(args->v0, 0, 0, false)) { | 551 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
550 | nvif_ioctl(object, | 552 | nvif_ioctl(object, |
551 | "perfmon source vers %d dom %d sig %02x iter %02x\n", | 553 | "perfmon source vers %d dom %d sig %02x iter %02x\n", |
552 | args->v0.version, args->v0.domain, args->v0.signal, | 554 | args->v0.version, args->v0.domain, args->v0.signal, |
@@ -612,7 +614,7 @@ nvkm_perfmon_child_get(struct nvkm_object *object, int index, | |||
612 | struct nvkm_oclass *oclass) | 614 | struct nvkm_oclass *oclass) |
613 | { | 615 | { |
614 | if (index == 0) { | 616 | if (index == 0) { |
615 | oclass->base.oclass = NVIF_IOCTL_NEW_V0_PERFDOM; | 617 | oclass->base.oclass = NVIF_CLASS_PERFDOM; |
616 | oclass->base.minver = 0; | 618 | oclass->base.minver = 0; |
617 | oclass->base.maxver = 0; | 619 | oclass->base.maxver = 0; |
618 | oclass->ctor = nvkm_perfmon_child_new; | 620 | oclass->ctor = nvkm_perfmon_child_new; |
@@ -679,7 +681,7 @@ nvkm_pm_oclass_new(struct nvkm_device *device, const struct nvkm_oclass *oclass, | |||
679 | 681 | ||
680 | static const struct nvkm_device_oclass | 682 | static const struct nvkm_device_oclass |
681 | nvkm_pm_oclass = { | 683 | nvkm_pm_oclass = { |
682 | .base.oclass = NVIF_IOCTL_NEW_V0_PERFMON, | 684 | .base.oclass = NVIF_CLASS_PERFMON, |
683 | .base.minver = -1, | 685 | .base.minver = -1, |
684 | .base.maxver = -1, | 686 | .base.maxver = -1, |
685 | .ctor = nvkm_pm_oclass_new, | 687 | .ctor = nvkm_pm_oclass_new, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/chan.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/chan.c index d082f4f73a80..f28967065639 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/chan.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/chan.c | |||
@@ -53,9 +53,9 @@ nvkm_sw_chan_event_ctor(struct nvkm_object *object, void *data, u32 size, | |||
53 | union { | 53 | union { |
54 | struct nvif_notify_uevent_req none; | 54 | struct nvif_notify_uevent_req none; |
55 | } *req = data; | 55 | } *req = data; |
56 | int ret; | 56 | int ret = -ENOSYS; |
57 | 57 | ||
58 | if (nvif_unvers(req->none)) { | 58 | if (!(ret = nvif_unvers(ret, &data, &size, req->none))) { |
59 | notify->size = sizeof(struct nvif_notify_uevent_rep); | 59 | notify->size = sizeof(struct nvif_notify_uevent_rep); |
60 | notify->types = 1; | 60 | notify->types = 1; |
61 | notify->index = 0; | 61 | notify->index = 0; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c index b01ef7eca906..ea8f4247b628 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/gf100.c | |||
@@ -28,8 +28,8 @@ | |||
28 | #include <engine/disp.h> | 28 | #include <engine/disp.h> |
29 | #include <engine/fifo.h> | 29 | #include <engine/fifo.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | ||
31 | #include <nvif/event.h> | 32 | #include <nvif/event.h> |
32 | #include <nvif/ioctl.h> | ||
33 | 33 | ||
34 | /******************************************************************************* | 34 | /******************************************************************************* |
35 | * software context | 35 | * software context |
@@ -143,7 +143,7 @@ static const struct nvkm_sw_func | |||
143 | gf100_sw = { | 143 | gf100_sw = { |
144 | .chan_new = gf100_sw_chan_new, | 144 | .chan_new = gf100_sw_chan_new, |
145 | .sclass = { | 145 | .sclass = { |
146 | { nvkm_nvsw_new, { -1, -1, NVIF_IOCTL_NEW_V0_SW_GF100 } }, | 146 | { nvkm_nvsw_new, { -1, -1, NVIF_CLASS_SW_GF100 } }, |
147 | {} | 147 | {} |
148 | } | 148 | } |
149 | }; | 149 | }; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c index 445217ffa791..b6675fe1b0ce 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv04.c | |||
@@ -27,6 +27,7 @@ | |||
27 | #include "nvsw.h" | 27 | #include "nvsw.h" |
28 | 28 | ||
29 | #include <nvif/class.h> | 29 | #include <nvif/class.h> |
30 | #include <nvif/if0004.h> | ||
30 | #include <nvif/ioctl.h> | 31 | #include <nvif/ioctl.h> |
31 | #include <nvif/unpack.h> | 32 | #include <nvif/unpack.h> |
32 | 33 | ||
@@ -46,9 +47,9 @@ nv04_nvsw_mthd_get_ref(struct nvkm_nvsw *nvsw, void *data, u32 size) | |||
46 | union { | 47 | union { |
47 | struct nv04_nvsw_get_ref_v0 v0; | 48 | struct nv04_nvsw_get_ref_v0 v0; |
48 | } *args = data; | 49 | } *args = data; |
49 | int ret; | 50 | int ret = -ENOSYS; |
50 | 51 | ||
51 | if (nvif_unpack(args->v0, 0, 0, false)) { | 52 | if (!(ret = nvif_unpack(ret, &data, &size, args->v0, 0, 0, false))) { |
52 | args->v0.ref = atomic_read(&chan->ref); | 53 | args->v0.ref = atomic_read(&chan->ref); |
53 | } | 54 | } |
54 | 55 | ||
@@ -126,7 +127,7 @@ static const struct nvkm_sw_func | |||
126 | nv04_sw = { | 127 | nv04_sw = { |
127 | .chan_new = nv04_sw_chan_new, | 128 | .chan_new = nv04_sw_chan_new, |
128 | .sclass = { | 129 | .sclass = { |
129 | { nv04_nvsw_new, { -1, -1, NVIF_IOCTL_NEW_V0_SW_NV04 } }, | 130 | { nv04_nvsw_new, { -1, -1, NVIF_CLASS_SW_NV04 } }, |
130 | {} | 131 | {} |
131 | } | 132 | } |
132 | }; | 133 | }; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c index adf70d92b244..09d22fcd194c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv10.c | |||
@@ -25,7 +25,7 @@ | |||
25 | #include "chan.h" | 25 | #include "chan.h" |
26 | #include "nvsw.h" | 26 | #include "nvsw.h" |
27 | 27 | ||
28 | #include <nvif/ioctl.h> | 28 | #include <nvif/class.h> |
29 | 29 | ||
30 | /******************************************************************************* | 30 | /******************************************************************************* |
31 | * software context | 31 | * software context |
@@ -56,7 +56,7 @@ static const struct nvkm_sw_func | |||
56 | nv10_sw = { | 56 | nv10_sw = { |
57 | .chan_new = nv10_sw_chan_new, | 57 | .chan_new = nv10_sw_chan_new, |
58 | .sclass = { | 58 | .sclass = { |
59 | { nvkm_nvsw_new, { -1, -1, NVIF_IOCTL_NEW_V0_SW_NV10 } }, | 59 | { nvkm_nvsw_new, { -1, -1, NVIF_CLASS_SW_NV10 } }, |
60 | {} | 60 | {} |
61 | } | 61 | } |
62 | }; | 62 | }; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c index a381196af69d..01573d187f2c 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nv50.c | |||
@@ -28,8 +28,8 @@ | |||
28 | #include <engine/fifo/chan.h> | 28 | #include <engine/fifo/chan.h> |
29 | #include <subdev/bar.h> | 29 | #include <subdev/bar.h> |
30 | 30 | ||
31 | #include <nvif/class.h> | ||
31 | #include <nvif/event.h> | 32 | #include <nvif/event.h> |
32 | #include <nvif/ioctl.h> | ||
33 | 33 | ||
34 | /******************************************************************************* | 34 | /******************************************************************************* |
35 | * software context | 35 | * software context |
@@ -136,7 +136,7 @@ static const struct nvkm_sw_func | |||
136 | nv50_sw = { | 136 | nv50_sw = { |
137 | .chan_new = nv50_sw_chan_new, | 137 | .chan_new = nv50_sw_chan_new, |
138 | .sclass = { | 138 | .sclass = { |
139 | { nvkm_nvsw_new, { -1, -1, NVIF_IOCTL_NEW_V0_SW_NV50 } }, | 139 | { nvkm_nvsw_new, { -1, -1, NVIF_CLASS_SW_NV50 } }, |
140 | {} | 140 | {} |
141 | } | 141 | } |
142 | }; | 142 | }; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c index 66cf986b9572..33dd03fff3c4 100644 --- a/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c +++ b/drivers/gpu/drm/nouveau/nvkm/engine/sw/nvsw.c | |||
@@ -24,7 +24,7 @@ | |||
24 | #include "nvsw.h" | 24 | #include "nvsw.h" |
25 | #include "chan.h" | 25 | #include "chan.h" |
26 | 26 | ||
27 | #include <nvif/class.h> | 27 | #include <nvif/if0004.h> |
28 | 28 | ||
29 | static int | 29 | static int |
30 | nvkm_nvsw_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size) | 30 | nvkm_nvsw_mthd_(struct nvkm_object *object, u32 mthd, void *data, u32 size) |
@@ -41,7 +41,7 @@ nvkm_nvsw_ntfy_(struct nvkm_object *object, u32 mthd, | |||
41 | { | 41 | { |
42 | struct nvkm_nvsw *nvsw = nvkm_nvsw(object); | 42 | struct nvkm_nvsw *nvsw = nvkm_nvsw(object); |
43 | switch (mthd) { | 43 | switch (mthd) { |
44 | case NVSW_NTFY_UEVENT: | 44 | case NV04_NVSW_NTFY_UEVENT: |
45 | *pevent = &nvsw->chan->event; | 45 | *pevent = &nvsw->chan->event; |
46 | return 0; | 46 | return 0; |
47 | default: | 47 | default: |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.c index 8304b806f2a6..a8d5d67feeaf 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/dcb.c | |||
@@ -143,16 +143,19 @@ dcb_outp_parse(struct nvkm_bios *bios, u8 idx, u8 *ver, u8 *len, | |||
143 | switch (outp->type) { | 143 | switch (outp->type) { |
144 | case DCB_OUTPUT_DP: | 144 | case DCB_OUTPUT_DP: |
145 | switch (conf & 0x00e00000) { | 145 | switch (conf & 0x00e00000) { |
146 | case 0x00000000: | 146 | case 0x00000000: /* 1.62 */ |
147 | outp->dpconf.link_bw = 0x06; | 147 | outp->dpconf.link_bw = 0x06; |
148 | break; | 148 | break; |
149 | case 0x00200000: | 149 | case 0x00200000: /* 2.7 */ |
150 | outp->dpconf.link_bw = 0x0a; | 150 | outp->dpconf.link_bw = 0x0a; |
151 | break; | 151 | break; |
152 | case 0x00400000: | 152 | case 0x00400000: /* 5.4 */ |
153 | default: | ||
154 | outp->dpconf.link_bw = 0x14; | 153 | outp->dpconf.link_bw = 0x14; |
155 | break; | 154 | break; |
155 | case 0x00600000: /* 8.1 */ | ||
156 | default: | ||
157 | outp->dpconf.link_bw = 0x1e; | ||
158 | break; | ||
156 | } | 159 | } |
157 | 160 | ||
158 | switch ((conf & 0x0f000000) >> 24) { | 161 | switch ((conf & 0x0f000000) >> 24) { |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c index aa7e33b42b30..636bfb665bb9 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/bios/perf.c | |||
@@ -24,6 +24,7 @@ | |||
24 | #include <subdev/bios.h> | 24 | #include <subdev/bios.h> |
25 | #include <subdev/bios/bit.h> | 25 | #include <subdev/bios/bit.h> |
26 | #include <subdev/bios/perf.h> | 26 | #include <subdev/bios/perf.h> |
27 | #include <subdev/pci.h> | ||
27 | 28 | ||
28 | u16 | 29 | u16 |
29 | nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, | 30 | nvbios_perf_table(struct nvkm_bios *bios, u8 *ver, u8 *hdr, |
@@ -145,6 +146,21 @@ nvbios_perfEp(struct nvkm_bios *bios, int idx, | |||
145 | break; | 146 | break; |
146 | case 0x40: | 147 | case 0x40: |
147 | info->voltage = nvbios_rd08(bios, perf + 0x02); | 148 | info->voltage = nvbios_rd08(bios, perf + 0x02); |
149 | switch (nvbios_rd08(bios, perf + 0xb) & 0x3) { | ||
150 | case 0: | ||
151 | info->pcie_speed = NVKM_PCIE_SPEED_5_0; | ||
152 | break; | ||
153 | case 3: | ||
154 | case 1: | ||
155 | info->pcie_speed = NVKM_PCIE_SPEED_2_5; | ||
156 | break; | ||
157 | case 2: | ||
158 | info->pcie_speed = NVKM_PCIE_SPEED_8_0; | ||
159 | break; | ||
160 | default: | ||
161 | break; | ||
162 | } | ||
163 | info->pcie_width = 0xff; | ||
148 | break; | 164 | break; |
149 | default: | 165 | default: |
150 | return 0x0000; | 166 | return 0x0000; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c index dc8682c91cc7..889cce2eb727 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/base.c | |||
@@ -176,6 +176,7 @@ nvkm_pstate_prog(struct nvkm_clk *clk, int pstatei) | |||
176 | { | 176 | { |
177 | struct nvkm_subdev *subdev = &clk->subdev; | 177 | struct nvkm_subdev *subdev = &clk->subdev; |
178 | struct nvkm_ram *ram = subdev->device->fb->ram; | 178 | struct nvkm_ram *ram = subdev->device->fb->ram; |
179 | struct nvkm_pci *pci = subdev->device->pci; | ||
179 | struct nvkm_pstate *pstate; | 180 | struct nvkm_pstate *pstate; |
180 | int ret, idx = 0; | 181 | int ret, idx = 0; |
181 | 182 | ||
@@ -187,6 +188,8 @@ nvkm_pstate_prog(struct nvkm_clk *clk, int pstatei) | |||
187 | nvkm_debug(subdev, "setting performance state %d\n", pstatei); | 188 | nvkm_debug(subdev, "setting performance state %d\n", pstatei); |
188 | clk->pstate = pstatei; | 189 | clk->pstate = pstatei; |
189 | 190 | ||
191 | nvkm_pcie_set_link(pci, pstate->pcie_speed, pstate->pcie_width); | ||
192 | |||
190 | if (ram && ram->func->calc) { | 193 | if (ram && ram->func->calc) { |
191 | int khz = pstate->base.domain[nv_clk_src_mem]; | 194 | int khz = pstate->base.domain[nv_clk_src_mem]; |
192 | do { | 195 | do { |
@@ -330,6 +333,8 @@ nvkm_pstate_new(struct nvkm_clk *clk, int idx) | |||
330 | 333 | ||
331 | pstate->pstate = perfE.pstate; | 334 | pstate->pstate = perfE.pstate; |
332 | pstate->fanspeed = perfE.fanspeed; | 335 | pstate->fanspeed = perfE.fanspeed; |
336 | pstate->pcie_speed = perfE.pcie_speed; | ||
337 | pstate->pcie_width = perfE.pcie_width; | ||
333 | cstate->voltage = perfE.voltage; | 338 | cstate->voltage = perfE.voltage; |
334 | cstate->domain[nv_clk_src_core] = perfE.core; | 339 | cstate->domain[nv_clk_src_core] = perfE.core; |
335 | cstate->domain[nv_clk_src_shader] = perfE.shader; | 340 | cstate->domain[nv_clk_src_shader] = perfE.shader; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c index a52b7e7fce41..78c449b417b7 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gf100.c | |||
@@ -188,7 +188,7 @@ gf100_clk_read(struct nvkm_clk *base, enum nv_clk_src src) | |||
188 | return read_clk(clk, 0x08); | 188 | return read_clk(clk, 0x08); |
189 | case nv_clk_src_copy: | 189 | case nv_clk_src_copy: |
190 | return read_clk(clk, 0x09); | 190 | return read_clk(clk, 0x09); |
191 | case nv_clk_src_daemon: | 191 | case nv_clk_src_pmu: |
192 | return read_clk(clk, 0x0c); | 192 | return read_clk(clk, 0x0c); |
193 | case nv_clk_src_vdec: | 193 | case nv_clk_src_vdec: |
194 | return read_clk(clk, 0x0e); | 194 | return read_clk(clk, 0x0e); |
@@ -325,7 +325,7 @@ gf100_clk_calc(struct nvkm_clk *base, struct nvkm_cstate *cstate) | |||
325 | (ret = calc_clk(clk, cstate, 0x07, nv_clk_src_hubk06)) || | 325 | (ret = calc_clk(clk, cstate, 0x07, nv_clk_src_hubk06)) || |
326 | (ret = calc_clk(clk, cstate, 0x08, nv_clk_src_hubk01)) || | 326 | (ret = calc_clk(clk, cstate, 0x08, nv_clk_src_hubk01)) || |
327 | (ret = calc_clk(clk, cstate, 0x09, nv_clk_src_copy)) || | 327 | (ret = calc_clk(clk, cstate, 0x09, nv_clk_src_copy)) || |
328 | (ret = calc_clk(clk, cstate, 0x0c, nv_clk_src_daemon)) || | 328 | (ret = calc_clk(clk, cstate, 0x0c, nv_clk_src_pmu)) || |
329 | (ret = calc_clk(clk, cstate, 0x0e, nv_clk_src_vdec))) | 329 | (ret = calc_clk(clk, cstate, 0x0e, nv_clk_src_vdec))) |
330 | return ret; | 330 | return ret; |
331 | 331 | ||
@@ -447,7 +447,7 @@ gf100_clk = { | |||
447 | { nv_clk_src_rop , 0x04 }, | 447 | { nv_clk_src_rop , 0x04 }, |
448 | { nv_clk_src_mem , 0x05, 0, "memory", 1000 }, | 448 | { nv_clk_src_mem , 0x05, 0, "memory", 1000 }, |
449 | { nv_clk_src_vdec , 0x06 }, | 449 | { nv_clk_src_vdec , 0x06 }, |
450 | { nv_clk_src_daemon , 0x0a }, | 450 | { nv_clk_src_pmu , 0x0a }, |
451 | { nv_clk_src_hubk07 , 0x0b }, | 451 | { nv_clk_src_hubk07 , 0x0b }, |
452 | { nv_clk_src_max } | 452 | { nv_clk_src_max } |
453 | } | 453 | } |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c index 396f7e4dad0a..975c401bccab 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gk104.c | |||
@@ -209,7 +209,7 @@ gk104_clk_read(struct nvkm_clk *base, enum nv_clk_src src) | |||
209 | return read_clk(clk, 0x07); | 209 | return read_clk(clk, 0x07); |
210 | case nv_clk_src_hubk01: | 210 | case nv_clk_src_hubk01: |
211 | return read_clk(clk, 0x08); | 211 | return read_clk(clk, 0x08); |
212 | case nv_clk_src_daemon: | 212 | case nv_clk_src_pmu: |
213 | return read_clk(clk, 0x0c); | 213 | return read_clk(clk, 0x0c); |
214 | case nv_clk_src_vdec: | 214 | case nv_clk_src_vdec: |
215 | return read_clk(clk, 0x0e); | 215 | return read_clk(clk, 0x0e); |
@@ -346,7 +346,7 @@ gk104_clk_calc(struct nvkm_clk *base, struct nvkm_cstate *cstate) | |||
346 | (ret = calc_clk(clk, cstate, 0x02, nv_clk_src_hubk07)) || | 346 | (ret = calc_clk(clk, cstate, 0x02, nv_clk_src_hubk07)) || |
347 | (ret = calc_clk(clk, cstate, 0x07, nv_clk_src_hubk06)) || | 347 | (ret = calc_clk(clk, cstate, 0x07, nv_clk_src_hubk06)) || |
348 | (ret = calc_clk(clk, cstate, 0x08, nv_clk_src_hubk01)) || | 348 | (ret = calc_clk(clk, cstate, 0x08, nv_clk_src_hubk01)) || |
349 | (ret = calc_clk(clk, cstate, 0x0c, nv_clk_src_daemon)) || | 349 | (ret = calc_clk(clk, cstate, 0x0c, nv_clk_src_pmu)) || |
350 | (ret = calc_clk(clk, cstate, 0x0e, nv_clk_src_vdec))) | 350 | (ret = calc_clk(clk, cstate, 0x0e, nv_clk_src_vdec))) |
351 | return ret; | 351 | return ret; |
352 | 352 | ||
@@ -492,7 +492,7 @@ gk104_clk = { | |||
492 | { nv_clk_src_hubk06 , 0x04, NVKM_CLK_DOM_FLAG_CORE }, | 492 | { nv_clk_src_hubk06 , 0x04, NVKM_CLK_DOM_FLAG_CORE }, |
493 | { nv_clk_src_hubk01 , 0x05 }, | 493 | { nv_clk_src_hubk01 , 0x05 }, |
494 | { nv_clk_src_vdec , 0x06 }, | 494 | { nv_clk_src_vdec , 0x06 }, |
495 | { nv_clk_src_daemon , 0x07 }, | 495 | { nv_clk_src_pmu , 0x07 }, |
496 | { nv_clk_src_max } | 496 | { nv_clk_src_max } |
497 | } | 497 | } |
498 | }; | 498 | }; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c index c233e3f653ce..056702ef69aa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/clk/gt215.c | |||
@@ -158,7 +158,7 @@ gt215_clk_read(struct nvkm_clk *base, enum nv_clk_src src) | |||
158 | return read_clk(clk, 0x20, false); | 158 | return read_clk(clk, 0x20, false); |
159 | case nv_clk_src_vdec: | 159 | case nv_clk_src_vdec: |
160 | return read_clk(clk, 0x21, false); | 160 | return read_clk(clk, 0x21, false); |
161 | case nv_clk_src_daemon: | 161 | case nv_clk_src_pmu: |
162 | return read_clk(clk, 0x25, false); | 162 | return read_clk(clk, 0x25, false); |
163 | case nv_clk_src_host: | 163 | case nv_clk_src_host: |
164 | hsrc = (nvkm_rd32(device, 0xc040) & 0x30000000) >> 28; | 164 | hsrc = (nvkm_rd32(device, 0xc040) & 0x30000000) >> 28; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c index f5edfadb5b46..1b5fb02eab2a 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/nv50.c | |||
@@ -132,7 +132,7 @@ static const struct nvkm_enum vm_engine[] = { | |||
132 | { 0x0000000b, "PCOUNTER" }, | 132 | { 0x0000000b, "PCOUNTER" }, |
133 | { 0x0000000c, "SEMAPHORE_BG" }, | 133 | { 0x0000000c, "SEMAPHORE_BG" }, |
134 | { 0x0000000d, "PCE0" }, | 134 | { 0x0000000d, "PCE0" }, |
135 | { 0x0000000e, "PDAEMON" }, | 135 | { 0x0000000e, "PMU" }, |
136 | {} | 136 | {} |
137 | }; | 137 | }; |
138 | 138 | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c index 9df45030ff9f..1fa3ade468ae 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/fb/ramgk104.c | |||
@@ -216,11 +216,11 @@ r1373f4_fini(struct gk104_ramfuc *fuc) | |||
216 | ram_wr32(fuc, 0x1373ec, tmp | (v1 << 16)); | 216 | ram_wr32(fuc, 0x1373ec, tmp | (v1 << 16)); |
217 | ram_mask(fuc, 0x1373f0, (~ram->mode & 3), 0x00000000); | 217 | ram_mask(fuc, 0x1373f0, (~ram->mode & 3), 0x00000000); |
218 | if (ram->mode == 2) { | 218 | if (ram->mode == 2) { |
219 | ram_mask(fuc, 0x1373f4, 0x00000003, 0x000000002); | 219 | ram_mask(fuc, 0x1373f4, 0x00000003, 0x00000002); |
220 | ram_mask(fuc, 0x1373f4, 0x00001100, 0x000000000); | 220 | ram_mask(fuc, 0x1373f4, 0x00001100, 0x00000000); |
221 | } else { | 221 | } else { |
222 | ram_mask(fuc, 0x1373f4, 0x00000003, 0x000000001); | 222 | ram_mask(fuc, 0x1373f4, 0x00000003, 0x00000001); |
223 | ram_mask(fuc, 0x1373f4, 0x00010000, 0x000000000); | 223 | ram_mask(fuc, 0x1373f4, 0x00010000, 0x00000000); |
224 | } | 224 | } |
225 | ram_mask(fuc, 0x10f800, 0x00000030, (v0 ^ v1) << 4); | 225 | ram_mask(fuc, 0x10f800, 0x00000030, (v0 ^ v1) << 4); |
226 | } | 226 | } |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild index de888fa62b3e..7e77a7466992 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/Kbuild | |||
@@ -2,3 +2,4 @@ nvkm-y += nvkm/subdev/ibus/gf100.o | |||
2 | nvkm-y += nvkm/subdev/ibus/gf117.o | 2 | nvkm-y += nvkm/subdev/ibus/gf117.o |
3 | nvkm-y += nvkm/subdev/ibus/gk104.o | 3 | nvkm-y += nvkm/subdev/ibus/gk104.o |
4 | nvkm-y += nvkm/subdev/ibus/gk20a.o | 4 | nvkm-y += nvkm/subdev/ibus/gk20a.o |
5 | nvkm-y += nvkm/subdev/ibus/gm204.o | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c index ba33609f643c..b5cee3f89aaa 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gk104.c | |||
@@ -21,7 +21,7 @@ | |||
21 | * | 21 | * |
22 | * Authors: Ben Skeggs | 22 | * Authors: Ben Skeggs |
23 | */ | 23 | */ |
24 | #include <subdev/ibus.h> | 24 | #include "priv.h" |
25 | 25 | ||
26 | static void | 26 | static void |
27 | gk104_ibus_intr_hub(struct nvkm_subdev *ibus, int i) | 27 | gk104_ibus_intr_hub(struct nvkm_subdev *ibus, int i) |
@@ -56,7 +56,7 @@ gk104_ibus_intr_gpc(struct nvkm_subdev *ibus, int i) | |||
56 | nvkm_mask(device, 0x128128 + (i * 0x0800), 0x00000200, 0x00000000); | 56 | nvkm_mask(device, 0x128128 + (i * 0x0800), 0x00000200, 0x00000000); |
57 | } | 57 | } |
58 | 58 | ||
59 | static void | 59 | void |
60 | gk104_ibus_intr(struct nvkm_subdev *ibus) | 60 | gk104_ibus_intr(struct nvkm_subdev *ibus) |
61 | { | 61 | { |
62 | struct nvkm_device *device = ibus->device; | 62 | struct nvkm_device *device = ibus->device; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm204.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm204.c new file mode 100644 index 000000000000..b3839dc254ee --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/gm204.c | |||
@@ -0,0 +1,40 @@ | |||
1 | /* | ||
2 | * Copyright 2015 Red Hat Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Authors: Ben Skeggs <bskeggs@redhat.com> | ||
23 | */ | ||
24 | #include "priv.h" | ||
25 | |||
26 | static const struct nvkm_subdev_func | ||
27 | gm204_ibus = { | ||
28 | .intr = gk104_ibus_intr, | ||
29 | }; | ||
30 | |||
31 | int | ||
32 | gm204_ibus_new(struct nvkm_device *device, int index, | ||
33 | struct nvkm_subdev **pibus) | ||
34 | { | ||
35 | struct nvkm_subdev *ibus; | ||
36 | if (!(ibus = *pibus = kzalloc(sizeof(*ibus), GFP_KERNEL))) | ||
37 | return -ENOMEM; | ||
38 | nvkm_subdev_ctor(&gm204_ibus, device, index, 0, ibus); | ||
39 | return 0; | ||
40 | } | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h index 48e1b6365ce6..01caf798cf31 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ibus/priv.h | |||
@@ -4,4 +4,5 @@ | |||
4 | #include <subdev/ibus.h> | 4 | #include <subdev/ibus.h> |
5 | 5 | ||
6 | void gf100_ibus_intr(struct nvkm_subdev *); | 6 | void gf100_ibus_intr(struct nvkm_subdev *); |
7 | void gk104_ibus_intr(struct nvkm_subdev *); | ||
7 | #endif | 8 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c index 14107b5b7811..4c20fec64d96 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/instmem/gk20a.c | |||
@@ -56,7 +56,6 @@ struct gk20a_instobj { | |||
56 | 56 | ||
57 | /* CPU mapping */ | 57 | /* CPU mapping */ |
58 | u32 *vaddr; | 58 | u32 *vaddr; |
59 | struct list_head vaddr_node; | ||
60 | }; | 59 | }; |
61 | #define gk20a_instobj(p) container_of((p), struct gk20a_instobj, memory) | 60 | #define gk20a_instobj(p) container_of((p), struct gk20a_instobj, memory) |
62 | 61 | ||
@@ -66,7 +65,6 @@ struct gk20a_instobj { | |||
66 | struct gk20a_instobj_dma { | 65 | struct gk20a_instobj_dma { |
67 | struct gk20a_instobj base; | 66 | struct gk20a_instobj base; |
68 | 67 | ||
69 | u32 *cpuaddr; | ||
70 | dma_addr_t handle; | 68 | dma_addr_t handle; |
71 | struct nvkm_mm_node r; | 69 | struct nvkm_mm_node r; |
72 | }; | 70 | }; |
@@ -79,6 +77,11 @@ struct gk20a_instobj_dma { | |||
79 | struct gk20a_instobj_iommu { | 77 | struct gk20a_instobj_iommu { |
80 | struct gk20a_instobj base; | 78 | struct gk20a_instobj base; |
81 | 79 | ||
80 | /* to link into gk20a_instmem::vaddr_lru */ | ||
81 | struct list_head vaddr_node; | ||
82 | /* how many clients are using vaddr? */ | ||
83 | u32 use_cpt; | ||
84 | |||
82 | /* will point to the higher half of pages */ | 85 | /* will point to the higher half of pages */ |
83 | dma_addr_t *dma_addrs; | 86 | dma_addr_t *dma_addrs; |
84 | /* array of base.mem->size pages (+ dma_addr_ts) */ | 87 | /* array of base.mem->size pages (+ dma_addr_ts) */ |
@@ -107,8 +110,6 @@ struct gk20a_instmem { | |||
107 | 110 | ||
108 | /* Only used by DMA API */ | 111 | /* Only used by DMA API */ |
109 | struct dma_attrs attrs; | 112 | struct dma_attrs attrs; |
110 | |||
111 | void __iomem * (*cpu_map)(struct nvkm_memory *); | ||
112 | }; | 113 | }; |
113 | #define gk20a_instmem(p) container_of((p), struct gk20a_instmem, base) | 114 | #define gk20a_instmem(p) container_of((p), struct gk20a_instmem, base) |
114 | 115 | ||
@@ -130,70 +131,58 @@ gk20a_instobj_size(struct nvkm_memory *memory) | |||
130 | return (u64)gk20a_instobj(memory)->mem.size << 12; | 131 | return (u64)gk20a_instobj(memory)->mem.size << 12; |
131 | } | 132 | } |
132 | 133 | ||
133 | static void __iomem * | 134 | /* |
134 | gk20a_instobj_cpu_map_dma(struct nvkm_memory *memory) | 135 | * Recycle the vaddr of obj. Must be called with gk20a_instmem::lock held. |
135 | { | 136 | */ |
136 | #if defined(CONFIG_ARM) || defined(CONFIG_ARM64) | 137 | static void |
137 | struct gk20a_instobj_dma *node = gk20a_instobj_dma(memory); | 138 | gk20a_instobj_iommu_recycle_vaddr(struct gk20a_instobj_iommu *obj) |
138 | struct device *dev = node->base.imem->base.subdev.device->dev; | ||
139 | int npages = nvkm_memory_size(memory) >> 12; | ||
140 | struct page *pages[npages]; | ||
141 | int i; | ||
142 | |||
143 | /* we shouldn't see a gk20a on anything but arm/arm64 anyways */ | ||
144 | /* phys_to_page does not exist on all platforms... */ | ||
145 | pages[0] = pfn_to_page(dma_to_phys(dev, node->handle) >> PAGE_SHIFT); | ||
146 | for (i = 1; i < npages; i++) | ||
147 | pages[i] = pages[0] + i; | ||
148 | |||
149 | return vmap(pages, npages, VM_MAP, pgprot_writecombine(PAGE_KERNEL)); | ||
150 | #else | ||
151 | BUG(); | ||
152 | return NULL; | ||
153 | #endif | ||
154 | } | ||
155 | |||
156 | static void __iomem * | ||
157 | gk20a_instobj_cpu_map_iommu(struct nvkm_memory *memory) | ||
158 | { | 139 | { |
159 | struct gk20a_instobj_iommu *node = gk20a_instobj_iommu(memory); | 140 | struct gk20a_instmem *imem = obj->base.imem; |
160 | int npages = nvkm_memory_size(memory) >> 12; | 141 | /* there should not be any user left... */ |
161 | 142 | WARN_ON(obj->use_cpt); | |
162 | return vmap(node->pages, npages, VM_MAP, | 143 | list_del(&obj->vaddr_node); |
163 | pgprot_writecombine(PAGE_KERNEL)); | 144 | vunmap(obj->base.vaddr); |
145 | obj->base.vaddr = NULL; | ||
146 | imem->vaddr_use -= nvkm_memory_size(&obj->base.memory); | ||
147 | nvkm_debug(&imem->base.subdev, "vaddr used: %x/%x\n", imem->vaddr_use, | ||
148 | imem->vaddr_max); | ||
164 | } | 149 | } |
165 | 150 | ||
166 | /* | 151 | /* |
167 | * Must be called while holding gk20a_instmem_lock | 152 | * Must be called while holding gk20a_instmem::lock |
168 | */ | 153 | */ |
169 | static void | 154 | static void |
170 | gk20a_instmem_vaddr_gc(struct gk20a_instmem *imem, const u64 size) | 155 | gk20a_instmem_vaddr_gc(struct gk20a_instmem *imem, const u64 size) |
171 | { | 156 | { |
172 | while (imem->vaddr_use + size > imem->vaddr_max) { | 157 | while (imem->vaddr_use + size > imem->vaddr_max) { |
173 | struct gk20a_instobj *obj; | ||
174 | |||
175 | /* no candidate that can be unmapped, abort... */ | 158 | /* no candidate that can be unmapped, abort... */ |
176 | if (list_empty(&imem->vaddr_lru)) | 159 | if (list_empty(&imem->vaddr_lru)) |
177 | break; | 160 | break; |
178 | 161 | ||
179 | obj = list_first_entry(&imem->vaddr_lru, struct gk20a_instobj, | 162 | gk20a_instobj_iommu_recycle_vaddr( |
180 | vaddr_node); | 163 | list_first_entry(&imem->vaddr_lru, |
181 | list_del(&obj->vaddr_node); | 164 | struct gk20a_instobj_iommu, vaddr_node)); |
182 | vunmap(obj->vaddr); | ||
183 | obj->vaddr = NULL; | ||
184 | imem->vaddr_use -= nvkm_memory_size(&obj->memory); | ||
185 | nvkm_debug(&imem->base.subdev, "(GC) vaddr used: %x/%x\n", | ||
186 | imem->vaddr_use, imem->vaddr_max); | ||
187 | |||
188 | } | 165 | } |
189 | } | 166 | } |
190 | 167 | ||
191 | static void __iomem * | 168 | static void __iomem * |
192 | gk20a_instobj_acquire(struct nvkm_memory *memory) | 169 | gk20a_instobj_acquire_dma(struct nvkm_memory *memory) |
193 | { | 170 | { |
194 | struct gk20a_instobj *node = gk20a_instobj(memory); | 171 | struct gk20a_instobj *node = gk20a_instobj(memory); |
195 | struct gk20a_instmem *imem = node->imem; | 172 | struct gk20a_instmem *imem = node->imem; |
196 | struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; | 173 | struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; |
174 | |||
175 | nvkm_ltc_flush(ltc); | ||
176 | |||
177 | return node->vaddr; | ||
178 | } | ||
179 | |||
180 | static void __iomem * | ||
181 | gk20a_instobj_acquire_iommu(struct nvkm_memory *memory) | ||
182 | { | ||
183 | struct gk20a_instobj_iommu *node = gk20a_instobj_iommu(memory); | ||
184 | struct gk20a_instmem *imem = node->base.imem; | ||
185 | struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; | ||
197 | const u64 size = nvkm_memory_size(memory); | 186 | const u64 size = nvkm_memory_size(memory); |
198 | unsigned long flags; | 187 | unsigned long flags; |
199 | 188 | ||
@@ -201,19 +190,21 @@ gk20a_instobj_acquire(struct nvkm_memory *memory) | |||
201 | 190 | ||
202 | spin_lock_irqsave(&imem->lock, flags); | 191 | spin_lock_irqsave(&imem->lock, flags); |
203 | 192 | ||
204 | if (node->vaddr) { | 193 | if (node->base.vaddr) { |
205 | /* remove us from the LRU list since we cannot be unmapped */ | 194 | if (!node->use_cpt) { |
206 | list_del(&node->vaddr_node); | 195 | /* remove from LRU list since mapping in use again */ |
207 | 196 | list_del(&node->vaddr_node); | |
197 | } | ||
208 | goto out; | 198 | goto out; |
209 | } | 199 | } |
210 | 200 | ||
211 | /* try to free some address space if we reached the limit */ | 201 | /* try to free some address space if we reached the limit */ |
212 | gk20a_instmem_vaddr_gc(imem, size); | 202 | gk20a_instmem_vaddr_gc(imem, size); |
213 | 203 | ||
214 | node->vaddr = imem->cpu_map(memory); | 204 | /* map the pages */ |
215 | 205 | node->base.vaddr = vmap(node->pages, size >> PAGE_SHIFT, VM_MAP, | |
216 | if (!node->vaddr) { | 206 | pgprot_writecombine(PAGE_KERNEL)); |
207 | if (!node->base.vaddr) { | ||
217 | nvkm_error(&imem->base.subdev, "cannot map instobj - " | 208 | nvkm_error(&imem->base.subdev, "cannot map instobj - " |
218 | "this is not going to end well...\n"); | 209 | "this is not going to end well...\n"); |
219 | goto out; | 210 | goto out; |
@@ -224,24 +215,41 @@ gk20a_instobj_acquire(struct nvkm_memory *memory) | |||
224 | imem->vaddr_use, imem->vaddr_max); | 215 | imem->vaddr_use, imem->vaddr_max); |
225 | 216 | ||
226 | out: | 217 | out: |
218 | node->use_cpt++; | ||
227 | spin_unlock_irqrestore(&imem->lock, flags); | 219 | spin_unlock_irqrestore(&imem->lock, flags); |
228 | 220 | ||
229 | return node->vaddr; | 221 | return node->base.vaddr; |
230 | } | 222 | } |
231 | 223 | ||
232 | static void | 224 | static void |
233 | gk20a_instobj_release(struct nvkm_memory *memory) | 225 | gk20a_instobj_release_dma(struct nvkm_memory *memory) |
234 | { | 226 | { |
235 | struct gk20a_instobj *node = gk20a_instobj(memory); | 227 | struct gk20a_instobj *node = gk20a_instobj(memory); |
236 | struct gk20a_instmem *imem = node->imem; | 228 | struct gk20a_instmem *imem = node->imem; |
237 | struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; | 229 | struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; |
230 | |||
231 | nvkm_ltc_invalidate(ltc); | ||
232 | } | ||
233 | |||
234 | static void | ||
235 | gk20a_instobj_release_iommu(struct nvkm_memory *memory) | ||
236 | { | ||
237 | struct gk20a_instobj_iommu *node = gk20a_instobj_iommu(memory); | ||
238 | struct gk20a_instmem *imem = node->base.imem; | ||
239 | struct nvkm_ltc *ltc = imem->base.subdev.device->ltc; | ||
238 | unsigned long flags; | 240 | unsigned long flags; |
239 | 241 | ||
240 | spin_lock_irqsave(&imem->lock, flags); | 242 | spin_lock_irqsave(&imem->lock, flags); |
241 | 243 | ||
242 | /* add ourselves to the LRU list so our CPU mapping can be freed */ | 244 | /* we should at least have one user to release... */ |
243 | list_add_tail(&node->vaddr_node, &imem->vaddr_lru); | 245 | if (WARN_ON(node->use_cpt == 0)) |
246 | goto out; | ||
247 | |||
248 | /* add unused objs to the LRU list to recycle their mapping */ | ||
249 | if (--node->use_cpt == 0) | ||
250 | list_add_tail(&node->vaddr_node, &imem->vaddr_lru); | ||
244 | 251 | ||
252 | out: | ||
245 | spin_unlock_irqrestore(&imem->lock, flags); | 253 | spin_unlock_irqrestore(&imem->lock, flags); |
246 | 254 | ||
247 | wmb(); | 255 | wmb(); |
@@ -272,37 +280,6 @@ gk20a_instobj_map(struct nvkm_memory *memory, struct nvkm_vma *vma, u64 offset) | |||
272 | nvkm_vm_map_at(vma, offset, &node->mem); | 280 | nvkm_vm_map_at(vma, offset, &node->mem); |
273 | } | 281 | } |
274 | 282 | ||
275 | /* | ||
276 | * Clear the CPU mapping of an instobj if it exists | ||
277 | */ | ||
278 | static void | ||
279 | gk20a_instobj_dtor(struct gk20a_instobj *node) | ||
280 | { | ||
281 | struct gk20a_instmem *imem = node->imem; | ||
282 | struct gk20a_instobj *obj; | ||
283 | unsigned long flags; | ||
284 | |||
285 | spin_lock_irqsave(&imem->lock, flags); | ||
286 | |||
287 | if (!node->vaddr) | ||
288 | goto out; | ||
289 | |||
290 | list_for_each_entry(obj, &imem->vaddr_lru, vaddr_node) { | ||
291 | if (obj == node) { | ||
292 | list_del(&obj->vaddr_node); | ||
293 | break; | ||
294 | } | ||
295 | } | ||
296 | vunmap(node->vaddr); | ||
297 | node->vaddr = NULL; | ||
298 | imem->vaddr_use -= nvkm_memory_size(&node->memory); | ||
299 | nvkm_debug(&imem->base.subdev, "vaddr used: %x/%x\n", | ||
300 | imem->vaddr_use, imem->vaddr_max); | ||
301 | |||
302 | out: | ||
303 | spin_unlock_irqrestore(&imem->lock, flags); | ||
304 | } | ||
305 | |||
306 | static void * | 283 | static void * |
307 | gk20a_instobj_dtor_dma(struct nvkm_memory *memory) | 284 | gk20a_instobj_dtor_dma(struct nvkm_memory *memory) |
308 | { | 285 | { |
@@ -310,12 +287,10 @@ gk20a_instobj_dtor_dma(struct nvkm_memory *memory) | |||
310 | struct gk20a_instmem *imem = node->base.imem; | 287 | struct gk20a_instmem *imem = node->base.imem; |
311 | struct device *dev = imem->base.subdev.device->dev; | 288 | struct device *dev = imem->base.subdev.device->dev; |
312 | 289 | ||
313 | gk20a_instobj_dtor(&node->base); | 290 | if (unlikely(!node->base.vaddr)) |
314 | |||
315 | if (unlikely(!node->cpuaddr)) | ||
316 | goto out; | 291 | goto out; |
317 | 292 | ||
318 | dma_free_attrs(dev, node->base.mem.size << PAGE_SHIFT, node->cpuaddr, | 293 | dma_free_attrs(dev, node->base.mem.size << PAGE_SHIFT, node->base.vaddr, |
319 | node->handle, &imem->attrs); | 294 | node->handle, &imem->attrs); |
320 | 295 | ||
321 | out: | 296 | out: |
@@ -329,13 +304,20 @@ gk20a_instobj_dtor_iommu(struct nvkm_memory *memory) | |||
329 | struct gk20a_instmem *imem = node->base.imem; | 304 | struct gk20a_instmem *imem = node->base.imem; |
330 | struct device *dev = imem->base.subdev.device->dev; | 305 | struct device *dev = imem->base.subdev.device->dev; |
331 | struct nvkm_mm_node *r; | 306 | struct nvkm_mm_node *r; |
307 | unsigned long flags; | ||
332 | int i; | 308 | int i; |
333 | 309 | ||
334 | gk20a_instobj_dtor(&node->base); | ||
335 | |||
336 | if (unlikely(list_empty(&node->base.mem.regions))) | 310 | if (unlikely(list_empty(&node->base.mem.regions))) |
337 | goto out; | 311 | goto out; |
338 | 312 | ||
313 | spin_lock_irqsave(&imem->lock, flags); | ||
314 | |||
315 | /* vaddr has already been recycled */ | ||
316 | if (node->base.vaddr) | ||
317 | gk20a_instobj_iommu_recycle_vaddr(node); | ||
318 | |||
319 | spin_unlock_irqrestore(&imem->lock, flags); | ||
320 | |||
339 | r = list_first_entry(&node->base.mem.regions, struct nvkm_mm_node, | 321 | r = list_first_entry(&node->base.mem.regions, struct nvkm_mm_node, |
340 | rl_entry); | 322 | rl_entry); |
341 | 323 | ||
@@ -366,8 +348,8 @@ gk20a_instobj_func_dma = { | |||
366 | .target = gk20a_instobj_target, | 348 | .target = gk20a_instobj_target, |
367 | .addr = gk20a_instobj_addr, | 349 | .addr = gk20a_instobj_addr, |
368 | .size = gk20a_instobj_size, | 350 | .size = gk20a_instobj_size, |
369 | .acquire = gk20a_instobj_acquire, | 351 | .acquire = gk20a_instobj_acquire_dma, |
370 | .release = gk20a_instobj_release, | 352 | .release = gk20a_instobj_release_dma, |
371 | .rd32 = gk20a_instobj_rd32, | 353 | .rd32 = gk20a_instobj_rd32, |
372 | .wr32 = gk20a_instobj_wr32, | 354 | .wr32 = gk20a_instobj_wr32, |
373 | .map = gk20a_instobj_map, | 355 | .map = gk20a_instobj_map, |
@@ -379,8 +361,8 @@ gk20a_instobj_func_iommu = { | |||
379 | .target = gk20a_instobj_target, | 361 | .target = gk20a_instobj_target, |
380 | .addr = gk20a_instobj_addr, | 362 | .addr = gk20a_instobj_addr, |
381 | .size = gk20a_instobj_size, | 363 | .size = gk20a_instobj_size, |
382 | .acquire = gk20a_instobj_acquire, | 364 | .acquire = gk20a_instobj_acquire_iommu, |
383 | .release = gk20a_instobj_release, | 365 | .release = gk20a_instobj_release_iommu, |
384 | .rd32 = gk20a_instobj_rd32, | 366 | .rd32 = gk20a_instobj_rd32, |
385 | .wr32 = gk20a_instobj_wr32, | 367 | .wr32 = gk20a_instobj_wr32, |
386 | .map = gk20a_instobj_map, | 368 | .map = gk20a_instobj_map, |
@@ -400,10 +382,10 @@ gk20a_instobj_ctor_dma(struct gk20a_instmem *imem, u32 npages, u32 align, | |||
400 | 382 | ||
401 | nvkm_memory_ctor(&gk20a_instobj_func_dma, &node->base.memory); | 383 | nvkm_memory_ctor(&gk20a_instobj_func_dma, &node->base.memory); |
402 | 384 | ||
403 | node->cpuaddr = dma_alloc_attrs(dev, npages << PAGE_SHIFT, | 385 | node->base.vaddr = dma_alloc_attrs(dev, npages << PAGE_SHIFT, |
404 | &node->handle, GFP_KERNEL, | 386 | &node->handle, GFP_KERNEL, |
405 | &imem->attrs); | 387 | &imem->attrs); |
406 | if (!node->cpuaddr) { | 388 | if (!node->base.vaddr) { |
407 | nvkm_error(subdev, "cannot allocate DMA memory\n"); | 389 | nvkm_error(subdev, "cannot allocate DMA memory\n"); |
408 | return -ENOMEM; | 390 | return -ENOMEM; |
409 | } | 391 | } |
@@ -609,18 +591,14 @@ gk20a_instmem_new(struct nvkm_device *device, int index, | |||
609 | imem->mm = &tdev->iommu.mm; | 591 | imem->mm = &tdev->iommu.mm; |
610 | imem->domain = tdev->iommu.domain; | 592 | imem->domain = tdev->iommu.domain; |
611 | imem->iommu_pgshift = tdev->iommu.pgshift; | 593 | imem->iommu_pgshift = tdev->iommu.pgshift; |
612 | imem->cpu_map = gk20a_instobj_cpu_map_iommu; | ||
613 | imem->iommu_bit = tdev->func->iommu_bit; | 594 | imem->iommu_bit = tdev->func->iommu_bit; |
614 | 595 | ||
615 | nvkm_info(&imem->base.subdev, "using IOMMU\n"); | 596 | nvkm_info(&imem->base.subdev, "using IOMMU\n"); |
616 | } else { | 597 | } else { |
617 | init_dma_attrs(&imem->attrs); | 598 | init_dma_attrs(&imem->attrs); |
618 | /* We will access the memory through our own mapping */ | ||
619 | dma_set_attr(DMA_ATTR_NON_CONSISTENT, &imem->attrs); | 599 | dma_set_attr(DMA_ATTR_NON_CONSISTENT, &imem->attrs); |
620 | dma_set_attr(DMA_ATTR_WEAK_ORDERING, &imem->attrs); | 600 | dma_set_attr(DMA_ATTR_WEAK_ORDERING, &imem->attrs); |
621 | dma_set_attr(DMA_ATTR_WRITE_COMBINE, &imem->attrs); | 601 | dma_set_attr(DMA_ATTR_WRITE_COMBINE, &imem->attrs); |
622 | dma_set_attr(DMA_ATTR_NO_KERNEL_MAPPING, &imem->attrs); | ||
623 | imem->cpu_map = gk20a_instobj_cpu_map_dma; | ||
624 | 602 | ||
625 | nvkm_info(&imem->base.subdev, "using DMA API\n"); | 603 | nvkm_info(&imem->base.subdev, "using DMA API\n"); |
626 | } | 604 | } |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/Kbuild index e5df3d865f0c..f8108df3cb38 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/Kbuild | |||
@@ -2,3 +2,4 @@ nvkm-y += nvkm/subdev/ltc/base.o | |||
2 | nvkm-y += nvkm/subdev/ltc/gf100.o | 2 | nvkm-y += nvkm/subdev/ltc/gf100.o |
3 | nvkm-y += nvkm/subdev/ltc/gk104.o | 3 | nvkm-y += nvkm/subdev/ltc/gk104.o |
4 | nvkm-y += nvkm/subdev/ltc/gm107.o | 4 | nvkm-y += nvkm/subdev/ltc/gm107.o |
5 | nvkm-y += nvkm/subdev/ltc/gm204.o | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c index 3043bbfd7384..2af1f9e100fc 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm107.c | |||
@@ -26,16 +26,16 @@ | |||
26 | #include <subdev/fb.h> | 26 | #include <subdev/fb.h> |
27 | #include <subdev/timer.h> | 27 | #include <subdev/timer.h> |
28 | 28 | ||
29 | static void | 29 | void |
30 | gm107_ltc_cbc_clear(struct nvkm_ltc *ltc, u32 start, u32 limit) | 30 | gm107_ltc_cbc_clear(struct nvkm_ltc *ltc, u32 start, u32 limit) |
31 | { | 31 | { |
32 | struct nvkm_device *device = ltc->subdev.device; | 32 | struct nvkm_device *device = ltc->subdev.device; |
33 | nvkm_wr32(device, 0x17e270, start); | 33 | nvkm_wr32(device, 0x17e270, start); |
34 | nvkm_wr32(device, 0x17e274, limit); | 34 | nvkm_wr32(device, 0x17e274, limit); |
35 | nvkm_wr32(device, 0x17e26c, 0x00000004); | 35 | nvkm_mask(device, 0x17e26c, 0x00000000, 0x00000004); |
36 | } | 36 | } |
37 | 37 | ||
38 | static void | 38 | void |
39 | gm107_ltc_cbc_wait(struct nvkm_ltc *ltc) | 39 | gm107_ltc_cbc_wait(struct nvkm_ltc *ltc) |
40 | { | 40 | { |
41 | struct nvkm_device *device = ltc->subdev.device; | 41 | struct nvkm_device *device = ltc->subdev.device; |
@@ -51,7 +51,7 @@ gm107_ltc_cbc_wait(struct nvkm_ltc *ltc) | |||
51 | } | 51 | } |
52 | } | 52 | } |
53 | 53 | ||
54 | static void | 54 | void |
55 | gm107_ltc_zbc_clear_color(struct nvkm_ltc *ltc, int i, const u32 color[4]) | 55 | gm107_ltc_zbc_clear_color(struct nvkm_ltc *ltc, int i, const u32 color[4]) |
56 | { | 56 | { |
57 | struct nvkm_device *device = ltc->subdev.device; | 57 | struct nvkm_device *device = ltc->subdev.device; |
@@ -62,7 +62,7 @@ gm107_ltc_zbc_clear_color(struct nvkm_ltc *ltc, int i, const u32 color[4]) | |||
62 | nvkm_wr32(device, 0x17e348, color[3]); | 62 | nvkm_wr32(device, 0x17e348, color[3]); |
63 | } | 63 | } |
64 | 64 | ||
65 | static void | 65 | void |
66 | gm107_ltc_zbc_clear_depth(struct nvkm_ltc *ltc, int i, const u32 depth) | 66 | gm107_ltc_zbc_clear_depth(struct nvkm_ltc *ltc, int i, const u32 depth) |
67 | { | 67 | { |
68 | struct nvkm_device *device = ltc->subdev.device; | 68 | struct nvkm_device *device = ltc->subdev.device; |
@@ -84,7 +84,7 @@ gm107_ltc_lts_isr(struct nvkm_ltc *ltc, int c, int s) | |||
84 | } | 84 | } |
85 | } | 85 | } |
86 | 86 | ||
87 | static void | 87 | void |
88 | gm107_ltc_intr(struct nvkm_ltc *ltc) | 88 | gm107_ltc_intr(struct nvkm_ltc *ltc) |
89 | { | 89 | { |
90 | struct nvkm_device *device = ltc->subdev.device; | 90 | struct nvkm_device *device = ltc->subdev.device; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm204.c b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm204.c new file mode 100644 index 000000000000..5ad6fb9d022d --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/gm204.c | |||
@@ -0,0 +1,63 @@ | |||
1 | /* | ||
2 | * Copyright 2015 Red Hat Inc. | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Authors: Ben Skeggs <bskeggs@redhat.com> | ||
23 | */ | ||
24 | #include "priv.h" | ||
25 | |||
26 | #include <subdev/fb.h> | ||
27 | #include <subdev/timer.h> | ||
28 | |||
29 | static int | ||
30 | gm204_ltc_oneinit(struct nvkm_ltc *ltc) | ||
31 | { | ||
32 | struct nvkm_device *device = ltc->subdev.device; | ||
33 | |||
34 | ltc->ltc_nr = nvkm_rd32(device, 0x12006c); | ||
35 | ltc->lts_nr = nvkm_rd32(device, 0x17e280) >> 28; | ||
36 | |||
37 | return gf100_ltc_oneinit_tag_ram(ltc); | ||
38 | } | ||
39 | static void | ||
40 | gm204_ltc_init(struct nvkm_ltc *ltc) | ||
41 | { | ||
42 | nvkm_wr32(ltc->subdev.device, 0x17e278, ltc->tag_base); | ||
43 | } | ||
44 | |||
45 | static const struct nvkm_ltc_func | ||
46 | gm204_ltc = { | ||
47 | .oneinit = gm204_ltc_oneinit, | ||
48 | .init = gm204_ltc_init, | ||
49 | .intr = gm107_ltc_intr, /*XXX: not validated */ | ||
50 | .cbc_clear = gm107_ltc_cbc_clear, | ||
51 | .cbc_wait = gm107_ltc_cbc_wait, | ||
52 | .zbc = 16, | ||
53 | .zbc_clear_color = gm107_ltc_zbc_clear_color, | ||
54 | .zbc_clear_depth = gm107_ltc_zbc_clear_depth, | ||
55 | .invalidate = gf100_ltc_invalidate, | ||
56 | .flush = gf100_ltc_flush, | ||
57 | }; | ||
58 | |||
59 | int | ||
60 | gm204_ltc_new(struct nvkm_device *device, int index, struct nvkm_ltc **pltc) | ||
61 | { | ||
62 | return nvkm_ltc_new_(&gm204_ltc, device, index, pltc); | ||
63 | } | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h index 4e3755b82769..6d81c695ed0d 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/ltc/priv.h | |||
@@ -31,4 +31,10 @@ void gf100_ltc_zbc_clear_color(struct nvkm_ltc *, int, const u32[4]); | |||
31 | void gf100_ltc_zbc_clear_depth(struct nvkm_ltc *, int, const u32); | 31 | void gf100_ltc_zbc_clear_depth(struct nvkm_ltc *, int, const u32); |
32 | void gf100_ltc_invalidate(struct nvkm_ltc *); | 32 | void gf100_ltc_invalidate(struct nvkm_ltc *); |
33 | void gf100_ltc_flush(struct nvkm_ltc *); | 33 | void gf100_ltc_flush(struct nvkm_ltc *); |
34 | |||
35 | void gm107_ltc_intr(struct nvkm_ltc *); | ||
36 | void gm107_ltc_cbc_clear(struct nvkm_ltc *, u32, u32); | ||
37 | void gm107_ltc_cbc_wait(struct nvkm_ltc *); | ||
38 | void gm107_ltc_zbc_clear_color(struct nvkm_ltc *, int, const u32[4]); | ||
39 | void gm107_ltc_zbc_clear_depth(struct nvkm_ltc *, int, const u32); | ||
34 | #endif | 40 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/Kbuild b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/Kbuild index 4476ef75acd6..3c2519fdeb81 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/Kbuild +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/Kbuild | |||
@@ -1,5 +1,6 @@ | |||
1 | nvkm-y += nvkm/subdev/pci/agp.o | 1 | nvkm-y += nvkm/subdev/pci/agp.o |
2 | nvkm-y += nvkm/subdev/pci/base.o | 2 | nvkm-y += nvkm/subdev/pci/base.o |
3 | nvkm-y += nvkm/subdev/pci/pcie.o | ||
3 | nvkm-y += nvkm/subdev/pci/nv04.o | 4 | nvkm-y += nvkm/subdev/pci/nv04.o |
4 | nvkm-y += nvkm/subdev/pci/nv40.o | 5 | nvkm-y += nvkm/subdev/pci/nv40.o |
5 | nvkm-y += nvkm/subdev/pci/nv46.o | 6 | nvkm-y += nvkm/subdev/pci/nv46.o |
@@ -7,3 +8,5 @@ nvkm-y += nvkm/subdev/pci/nv4c.o | |||
7 | nvkm-y += nvkm/subdev/pci/g84.o | 8 | nvkm-y += nvkm/subdev/pci/g84.o |
8 | nvkm-y += nvkm/subdev/pci/g94.o | 9 | nvkm-y += nvkm/subdev/pci/g94.o |
9 | nvkm-y += nvkm/subdev/pci/gf100.o | 10 | nvkm-y += nvkm/subdev/pci/gf100.o |
11 | nvkm-y += nvkm/subdev/pci/gf106.o | ||
12 | nvkm-y += nvkm/subdev/pci/gk104.o | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c index d671dcfaff3c..65057c8310a2 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/base.c | |||
@@ -107,6 +107,15 @@ nvkm_pci_preinit(struct nvkm_subdev *subdev) | |||
107 | } | 107 | } |
108 | 108 | ||
109 | static int | 109 | static int |
110 | nvkm_pci_oneinit(struct nvkm_subdev *subdev) | ||
111 | { | ||
112 | struct nvkm_pci *pci = nvkm_pci(subdev); | ||
113 | if (pci_is_pcie(pci->pdev)) | ||
114 | return nvkm_pcie_oneinit(pci); | ||
115 | return 0; | ||
116 | } | ||
117 | |||
118 | static int | ||
110 | nvkm_pci_init(struct nvkm_subdev *subdev) | 119 | nvkm_pci_init(struct nvkm_subdev *subdev) |
111 | { | 120 | { |
112 | struct nvkm_pci *pci = nvkm_pci(subdev); | 121 | struct nvkm_pci *pci = nvkm_pci(subdev); |
@@ -117,6 +126,8 @@ nvkm_pci_init(struct nvkm_subdev *subdev) | |||
117 | ret = nvkm_agp_init(pci); | 126 | ret = nvkm_agp_init(pci); |
118 | if (ret) | 127 | if (ret) |
119 | return ret; | 128 | return ret; |
129 | } else if (pci_is_pcie(pci->pdev)) { | ||
130 | nvkm_pcie_init(pci); | ||
120 | } | 131 | } |
121 | 132 | ||
122 | if (pci->func->init) | 133 | if (pci->func->init) |
@@ -143,6 +154,7 @@ nvkm_pci_dtor(struct nvkm_subdev *subdev) | |||
143 | static const struct nvkm_subdev_func | 154 | static const struct nvkm_subdev_func |
144 | nvkm_pci_func = { | 155 | nvkm_pci_func = { |
145 | .dtor = nvkm_pci_dtor, | 156 | .dtor = nvkm_pci_dtor, |
157 | .oneinit = nvkm_pci_oneinit, | ||
146 | .preinit = nvkm_pci_preinit, | 158 | .preinit = nvkm_pci_preinit, |
147 | .init = nvkm_pci_init, | 159 | .init = nvkm_pci_init, |
148 | .fini = nvkm_pci_fini, | 160 | .fini = nvkm_pci_fini, |
@@ -160,6 +172,8 @@ nvkm_pci_new_(const struct nvkm_pci_func *func, struct nvkm_device *device, | |||
160 | pci->func = func; | 172 | pci->func = func; |
161 | pci->pdev = device->func->pci(device)->pdev; | 173 | pci->pdev = device->func->pci(device)->pdev; |
162 | pci->irq = -1; | 174 | pci->irq = -1; |
175 | pci->pcie.speed = -1; | ||
176 | pci->pcie.width = -1; | ||
163 | 177 | ||
164 | if (device->type == NVKM_DEVICE_AGP) | 178 | if (device->type == NVKM_DEVICE_AGP) |
165 | nvkm_agp_ctor(pci); | 179 | nvkm_agp_ctor(pci); |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c index 3faa6bfb895b..62438d892f42 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g84.c | |||
@@ -25,6 +25,80 @@ | |||
25 | 25 | ||
26 | #include <core/pci.h> | 26 | #include <core/pci.h> |
27 | 27 | ||
28 | static int | ||
29 | g84_pcie_version_supported(struct nvkm_pci *pci) | ||
30 | { | ||
31 | /* g84 and g86 report wrong information about what they support */ | ||
32 | return 1; | ||
33 | } | ||
34 | |||
35 | int | ||
36 | g84_pcie_version(struct nvkm_pci *pci) | ||
37 | { | ||
38 | struct nvkm_device *device = pci->subdev.device; | ||
39 | return (nvkm_rd32(device, 0x00154c) & 0x1) + 1; | ||
40 | } | ||
41 | |||
42 | void | ||
43 | g84_pcie_set_version(struct nvkm_pci *pci, u8 ver) | ||
44 | { | ||
45 | struct nvkm_device *device = pci->subdev.device; | ||
46 | nvkm_mask(device, 0x00154c, 0x1, (ver >= 2 ? 0x1 : 0x0)); | ||
47 | } | ||
48 | |||
49 | static void | ||
50 | g84_pcie_set_cap_speed(struct nvkm_pci *pci, bool full_speed) | ||
51 | { | ||
52 | struct nvkm_device *device = pci->subdev.device; | ||
53 | nvkm_mask(device, 0x00154c, 0x80, full_speed ? 0x80 : 0x0); | ||
54 | } | ||
55 | |||
56 | enum nvkm_pcie_speed | ||
57 | g84_pcie_cur_speed(struct nvkm_pci *pci) | ||
58 | { | ||
59 | u32 reg_v = nvkm_pci_rd32(pci, 0x88) & 0x30000; | ||
60 | switch (reg_v) { | ||
61 | case 0x30000: | ||
62 | return NVKM_PCIE_SPEED_8_0; | ||
63 | case 0x20000: | ||
64 | return NVKM_PCIE_SPEED_5_0; | ||
65 | case 0x10000: | ||
66 | default: | ||
67 | return NVKM_PCIE_SPEED_2_5; | ||
68 | } | ||
69 | } | ||
70 | |||
71 | enum nvkm_pcie_speed | ||
72 | g84_pcie_max_speed(struct nvkm_pci *pci) | ||
73 | { | ||
74 | u32 reg_v = nvkm_pci_rd32(pci, 0x460) & 0x3300; | ||
75 | if (reg_v == 0x2200) | ||
76 | return NVKM_PCIE_SPEED_5_0; | ||
77 | return NVKM_PCIE_SPEED_2_5; | ||
78 | } | ||
79 | |||
80 | void | ||
81 | g84_pcie_set_link_speed(struct nvkm_pci *pci, enum nvkm_pcie_speed speed) | ||
82 | { | ||
83 | u32 mask_value; | ||
84 | |||
85 | if (speed == NVKM_PCIE_SPEED_5_0) | ||
86 | mask_value = 0x20; | ||
87 | else | ||
88 | mask_value = 0x10; | ||
89 | |||
90 | nvkm_pci_mask(pci, 0x460, 0x30, mask_value); | ||
91 | nvkm_pci_mask(pci, 0x460, 0x1, 0x1); | ||
92 | } | ||
93 | |||
94 | int | ||
95 | g84_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) | ||
96 | { | ||
97 | g84_pcie_set_cap_speed(pci, speed == NVKM_PCIE_SPEED_5_0); | ||
98 | g84_pcie_set_link_speed(pci, speed); | ||
99 | return 0; | ||
100 | } | ||
101 | |||
28 | void | 102 | void |
29 | g84_pci_init(struct nvkm_pci *pci) | 103 | g84_pci_init(struct nvkm_pci *pci) |
30 | { | 104 | { |
@@ -48,6 +122,14 @@ g84_pci_init(struct nvkm_pci *pci) | |||
48 | nvkm_pci_mask(pci, 0x041c, 0x00000060, 0x00000000); | 122 | nvkm_pci_mask(pci, 0x041c, 0x00000060, 0x00000000); |
49 | } | 123 | } |
50 | 124 | ||
125 | int | ||
126 | g84_pcie_init(struct nvkm_pci *pci) | ||
127 | { | ||
128 | bool full_speed = g84_pcie_cur_speed(pci) == NVKM_PCIE_SPEED_5_0; | ||
129 | g84_pcie_set_cap_speed(pci, full_speed); | ||
130 | return 0; | ||
131 | } | ||
132 | |||
51 | static const struct nvkm_pci_func | 133 | static const struct nvkm_pci_func |
52 | g84_pci_func = { | 134 | g84_pci_func = { |
53 | .init = g84_pci_init, | 135 | .init = g84_pci_init, |
@@ -55,6 +137,16 @@ g84_pci_func = { | |||
55 | .wr08 = nv40_pci_wr08, | 137 | .wr08 = nv40_pci_wr08, |
56 | .wr32 = nv40_pci_wr32, | 138 | .wr32 = nv40_pci_wr32, |
57 | .msi_rearm = nv46_pci_msi_rearm, | 139 | .msi_rearm = nv46_pci_msi_rearm, |
140 | |||
141 | .pcie.init = g84_pcie_init, | ||
142 | .pcie.set_link = g84_pcie_set_link, | ||
143 | |||
144 | .pcie.max_speed = g84_pcie_max_speed, | ||
145 | .pcie.cur_speed = g84_pcie_cur_speed, | ||
146 | |||
147 | .pcie.set_version = g84_pcie_set_version, | ||
148 | .pcie.version = g84_pcie_version, | ||
149 | .pcie.version_supported = g84_pcie_version_supported, | ||
58 | }; | 150 | }; |
59 | 151 | ||
60 | int | 152 | int |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c index cd311ee311cc..43444123bc04 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/g94.c | |||
@@ -23,6 +23,14 @@ | |||
23 | */ | 23 | */ |
24 | #include "priv.h" | 24 | #include "priv.h" |
25 | 25 | ||
26 | int | ||
27 | g94_pcie_version_supported(struct nvkm_pci *pci) | ||
28 | { | ||
29 | if ((nvkm_pci_rd32(pci, 0x460) & 0x200) == 0x200) | ||
30 | return 2; | ||
31 | return 1; | ||
32 | } | ||
33 | |||
26 | static const struct nvkm_pci_func | 34 | static const struct nvkm_pci_func |
27 | g94_pci_func = { | 35 | g94_pci_func = { |
28 | .init = g84_pci_init, | 36 | .init = g84_pci_init, |
@@ -30,6 +38,16 @@ g94_pci_func = { | |||
30 | .wr08 = nv40_pci_wr08, | 38 | .wr08 = nv40_pci_wr08, |
31 | .wr32 = nv40_pci_wr32, | 39 | .wr32 = nv40_pci_wr32, |
32 | .msi_rearm = nv40_pci_msi_rearm, | 40 | .msi_rearm = nv40_pci_msi_rearm, |
41 | |||
42 | .pcie.init = g84_pcie_init, | ||
43 | .pcie.set_link = g84_pcie_set_link, | ||
44 | |||
45 | .pcie.max_speed = g84_pcie_max_speed, | ||
46 | .pcie.cur_speed = g84_pcie_cur_speed, | ||
47 | |||
48 | .pcie.set_version = g84_pcie_set_version, | ||
49 | .pcie.version = g84_pcie_version, | ||
50 | .pcie.version_supported = g94_pcie_version_supported, | ||
33 | }; | 51 | }; |
34 | 52 | ||
35 | int | 53 | int |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c index 25e1ae70867f..e30ea676baf6 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf100.c | |||
@@ -29,6 +29,53 @@ gf100_pci_msi_rearm(struct nvkm_pci *pci) | |||
29 | nvkm_pci_wr08(pci, 0x0704, 0xff); | 29 | nvkm_pci_wr08(pci, 0x0704, 0xff); |
30 | } | 30 | } |
31 | 31 | ||
32 | void | ||
33 | gf100_pcie_set_version(struct nvkm_pci *pci, u8 ver) | ||
34 | { | ||
35 | struct nvkm_device *device = pci->subdev.device; | ||
36 | nvkm_mask(device, 0x02241c, 0x1, ver > 1 ? 1 : 0); | ||
37 | } | ||
38 | |||
39 | int | ||
40 | gf100_pcie_version(struct nvkm_pci *pci) | ||
41 | { | ||
42 | struct nvkm_device *device = pci->subdev.device; | ||
43 | return (nvkm_rd32(device, 0x02241c) & 0x1) + 1; | ||
44 | } | ||
45 | |||
46 | void | ||
47 | gf100_pcie_set_cap_speed(struct nvkm_pci *pci, bool full_speed) | ||
48 | { | ||
49 | struct nvkm_device *device = pci->subdev.device; | ||
50 | nvkm_mask(device, 0x02241c, 0x80, full_speed ? 0x80 : 0x0); | ||
51 | } | ||
52 | |||
53 | int | ||
54 | gf100_pcie_cap_speed(struct nvkm_pci *pci) | ||
55 | { | ||
56 | struct nvkm_device *device = pci->subdev.device; | ||
57 | u8 punits_pci_cap_speed = nvkm_rd32(device, 0x02241c) & 0x80; | ||
58 | if (punits_pci_cap_speed == 0x80) | ||
59 | return 1; | ||
60 | return 0; | ||
61 | } | ||
62 | |||
63 | int | ||
64 | gf100_pcie_init(struct nvkm_pci *pci) | ||
65 | { | ||
66 | bool full_speed = g84_pcie_cur_speed(pci) == NVKM_PCIE_SPEED_5_0; | ||
67 | gf100_pcie_set_cap_speed(pci, full_speed); | ||
68 | return 0; | ||
69 | } | ||
70 | |||
71 | int | ||
72 | gf100_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) | ||
73 | { | ||
74 | gf100_pcie_set_cap_speed(pci, speed == NVKM_PCIE_SPEED_5_0); | ||
75 | g84_pcie_set_link_speed(pci, speed); | ||
76 | return 0; | ||
77 | } | ||
78 | |||
32 | static const struct nvkm_pci_func | 79 | static const struct nvkm_pci_func |
33 | gf100_pci_func = { | 80 | gf100_pci_func = { |
34 | .init = g84_pci_init, | 81 | .init = g84_pci_init, |
@@ -36,6 +83,16 @@ gf100_pci_func = { | |||
36 | .wr08 = nv40_pci_wr08, | 83 | .wr08 = nv40_pci_wr08, |
37 | .wr32 = nv40_pci_wr32, | 84 | .wr32 = nv40_pci_wr32, |
38 | .msi_rearm = gf100_pci_msi_rearm, | 85 | .msi_rearm = gf100_pci_msi_rearm, |
86 | |||
87 | .pcie.init = gf100_pcie_init, | ||
88 | .pcie.set_link = gf100_pcie_set_link, | ||
89 | |||
90 | .pcie.max_speed = g84_pcie_max_speed, | ||
91 | .pcie.cur_speed = g84_pcie_cur_speed, | ||
92 | |||
93 | .pcie.set_version = gf100_pcie_set_version, | ||
94 | .pcie.version = gf100_pcie_version, | ||
95 | .pcie.version_supported = g94_pcie_version_supported, | ||
39 | }; | 96 | }; |
40 | 97 | ||
41 | int | 98 | int |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c new file mode 100644 index 000000000000..c3b798c5c6dd --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gf106.c | |||
@@ -0,0 +1,49 @@ | |||
1 | /* | ||
2 | * Copyright 2015 Karol Herbst <nouveau@karolherbst.de> | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Authors: Karol Herbst <nouveau@karolherbst.de> | ||
23 | */ | ||
24 | #include "priv.h" | ||
25 | |||
26 | static const struct nvkm_pci_func | ||
27 | gf106_pci_func = { | ||
28 | .init = g84_pci_init, | ||
29 | .rd32 = nv40_pci_rd32, | ||
30 | .wr08 = nv40_pci_wr08, | ||
31 | .wr32 = nv40_pci_wr32, | ||
32 | .msi_rearm = nv40_pci_msi_rearm, | ||
33 | |||
34 | .pcie.init = gf100_pcie_init, | ||
35 | .pcie.set_link = gf100_pcie_set_link, | ||
36 | |||
37 | .pcie.max_speed = g84_pcie_max_speed, | ||
38 | .pcie.cur_speed = g84_pcie_cur_speed, | ||
39 | |||
40 | .pcie.set_version = gf100_pcie_set_version, | ||
41 | .pcie.version = gf100_pcie_version, | ||
42 | .pcie.version_supported = g94_pcie_version_supported, | ||
43 | }; | ||
44 | |||
45 | int | ||
46 | gf106_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) | ||
47 | { | ||
48 | return nvkm_pci_new_(&gf106_pci_func, device, index, ppci); | ||
49 | } | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c new file mode 100644 index 000000000000..e68030507d88 --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/gk104.c | |||
@@ -0,0 +1,228 @@ | |||
1 | /* | ||
2 | * Copyright 2015 Karol Herbst <nouveau@karolherbst.de> | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Authors: Karol Herbst <nouveau@karolherbst.de> | ||
23 | */ | ||
24 | #include "priv.h" | ||
25 | |||
26 | static int | ||
27 | gk104_pcie_version_supported(struct nvkm_pci *pci) | ||
28 | { | ||
29 | return (nvkm_rd32(pci->subdev.device, 0x8c1c0) & 0x4) == 0x4 ? 2 : 1; | ||
30 | } | ||
31 | |||
32 | static void | ||
33 | gk104_pcie_set_cap_speed(struct nvkm_pci *pci, enum nvkm_pcie_speed speed) | ||
34 | { | ||
35 | struct nvkm_device *device = pci->subdev.device; | ||
36 | |||
37 | switch (speed) { | ||
38 | case NVKM_PCIE_SPEED_2_5: | ||
39 | gf100_pcie_set_cap_speed(pci, false); | ||
40 | nvkm_mask(device, 0x8c1c0, 0x30000, 0x10000); | ||
41 | break; | ||
42 | case NVKM_PCIE_SPEED_5_0: | ||
43 | gf100_pcie_set_cap_speed(pci, true); | ||
44 | nvkm_mask(device, 0x8c1c0, 0x30000, 0x20000); | ||
45 | break; | ||
46 | case NVKM_PCIE_SPEED_8_0: | ||
47 | gf100_pcie_set_cap_speed(pci, true); | ||
48 | nvkm_mask(device, 0x8c1c0, 0x30000, 0x30000); | ||
49 | break; | ||
50 | } | ||
51 | } | ||
52 | |||
53 | static enum nvkm_pcie_speed | ||
54 | gk104_pcie_cap_speed(struct nvkm_pci *pci) | ||
55 | { | ||
56 | int speed = gf100_pcie_cap_speed(pci); | ||
57 | |||
58 | if (speed == 0) | ||
59 | return NVKM_PCIE_SPEED_2_5; | ||
60 | |||
61 | if (speed >= 1) { | ||
62 | int speed2 = nvkm_rd32(pci->subdev.device, 0x8c1c0) & 0x30000; | ||
63 | switch (speed2) { | ||
64 | case 0x00000: | ||
65 | case 0x10000: | ||
66 | return NVKM_PCIE_SPEED_2_5; | ||
67 | case 0x20000: | ||
68 | return NVKM_PCIE_SPEED_5_0; | ||
69 | case 0x30000: | ||
70 | return NVKM_PCIE_SPEED_8_0; | ||
71 | } | ||
72 | } | ||
73 | |||
74 | return -EINVAL; | ||
75 | } | ||
76 | |||
77 | static void | ||
78 | gk104_pcie_set_lnkctl_speed(struct nvkm_pci *pci, enum nvkm_pcie_speed speed) | ||
79 | { | ||
80 | u8 reg_v = 0; | ||
81 | switch (speed) { | ||
82 | case NVKM_PCIE_SPEED_2_5: | ||
83 | reg_v = 1; | ||
84 | break; | ||
85 | case NVKM_PCIE_SPEED_5_0: | ||
86 | reg_v = 2; | ||
87 | break; | ||
88 | case NVKM_PCIE_SPEED_8_0: | ||
89 | reg_v = 3; | ||
90 | break; | ||
91 | } | ||
92 | nvkm_pci_mask(pci, 0xa8, 0x3, reg_v); | ||
93 | } | ||
94 | |||
95 | static enum nvkm_pcie_speed | ||
96 | gk104_pcie_lnkctl_speed(struct nvkm_pci *pci) | ||
97 | { | ||
98 | u8 reg_v = nvkm_pci_rd32(pci, 0xa8) & 0x3; | ||
99 | switch (reg_v) { | ||
100 | case 0: | ||
101 | case 1: | ||
102 | return NVKM_PCIE_SPEED_2_5; | ||
103 | case 2: | ||
104 | return NVKM_PCIE_SPEED_5_0; | ||
105 | case 3: | ||
106 | return NVKM_PCIE_SPEED_8_0; | ||
107 | } | ||
108 | return -1; | ||
109 | } | ||
110 | |||
111 | static enum nvkm_pcie_speed | ||
112 | gk104_pcie_max_speed(struct nvkm_pci *pci) | ||
113 | { | ||
114 | u32 max_speed = nvkm_rd32(pci->subdev.device, 0x8c1c0) & 0x300000; | ||
115 | switch (max_speed) { | ||
116 | case 0x000000: | ||
117 | return NVKM_PCIE_SPEED_8_0; | ||
118 | case 0x100000: | ||
119 | return NVKM_PCIE_SPEED_5_0; | ||
120 | case 0x200000: | ||
121 | return NVKM_PCIE_SPEED_2_5; | ||
122 | } | ||
123 | return NVKM_PCIE_SPEED_2_5; | ||
124 | } | ||
125 | |||
126 | static void | ||
127 | gk104_pcie_set_link_speed(struct nvkm_pci *pci, enum nvkm_pcie_speed speed) | ||
128 | { | ||
129 | struct nvkm_device *device = pci->subdev.device; | ||
130 | u32 mask_value; | ||
131 | |||
132 | switch (speed) { | ||
133 | case NVKM_PCIE_SPEED_8_0: | ||
134 | mask_value = 0x00000; | ||
135 | break; | ||
136 | case NVKM_PCIE_SPEED_5_0: | ||
137 | mask_value = 0x40000; | ||
138 | break; | ||
139 | case NVKM_PCIE_SPEED_2_5: | ||
140 | default: | ||
141 | mask_value = 0x80000; | ||
142 | break; | ||
143 | } | ||
144 | |||
145 | nvkm_mask(device, 0x8c040, 0xc0000, mask_value); | ||
146 | nvkm_mask(device, 0x8c040, 0x1, 0x1); | ||
147 | } | ||
148 | |||
149 | static int | ||
150 | gk104_pcie_init(struct nvkm_pci * pci) | ||
151 | { | ||
152 | enum nvkm_pcie_speed lnkctl_speed, max_speed, cap_speed; | ||
153 | struct nvkm_subdev *subdev = &pci->subdev; | ||
154 | |||
155 | if (gf100_pcie_version(pci) < 2) | ||
156 | return 0; | ||
157 | |||
158 | lnkctl_speed = gk104_pcie_lnkctl_speed(pci); | ||
159 | max_speed = gk104_pcie_max_speed(pci); | ||
160 | cap_speed = gk104_pcie_cap_speed(pci); | ||
161 | |||
162 | if (cap_speed != max_speed) { | ||
163 | nvkm_trace(subdev, "adjusting cap to max speed\n"); | ||
164 | gk104_pcie_set_cap_speed(pci, max_speed); | ||
165 | cap_speed = gk104_pcie_cap_speed(pci); | ||
166 | if (cap_speed != max_speed) | ||
167 | nvkm_warn(subdev, "failed to adjust cap speed\n"); | ||
168 | } | ||
169 | |||
170 | if (lnkctl_speed != max_speed) { | ||
171 | nvkm_debug(subdev, "adjusting lnkctl to max speed\n"); | ||
172 | gk104_pcie_set_lnkctl_speed(pci, max_speed); | ||
173 | lnkctl_speed = gk104_pcie_lnkctl_speed(pci); | ||
174 | if (lnkctl_speed != max_speed) | ||
175 | nvkm_error(subdev, "failed to adjust lnkctl speed\n"); | ||
176 | } | ||
177 | |||
178 | return 0; | ||
179 | } | ||
180 | |||
181 | static int | ||
182 | gk104_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) | ||
183 | { | ||
184 | struct nvkm_subdev *subdev = &pci->subdev; | ||
185 | enum nvkm_pcie_speed lnk_ctl_speed = gk104_pcie_lnkctl_speed(pci); | ||
186 | enum nvkm_pcie_speed lnk_cap_speed = gk104_pcie_cap_speed(pci); | ||
187 | |||
188 | if (speed > lnk_cap_speed) { | ||
189 | speed = lnk_cap_speed; | ||
190 | nvkm_warn(subdev, "dropping requested speed due too low cap" | ||
191 | " speed\n"); | ||
192 | } | ||
193 | |||
194 | if (speed > lnk_ctl_speed) { | ||
195 | speed = lnk_ctl_speed; | ||
196 | nvkm_warn(subdev, "dropping requested speed due too low" | ||
197 | " lnkctl speed\n"); | ||
198 | } | ||
199 | |||
200 | gk104_pcie_set_link_speed(pci, speed); | ||
201 | return 0; | ||
202 | } | ||
203 | |||
204 | |||
205 | static const struct nvkm_pci_func | ||
206 | gk104_pci_func = { | ||
207 | .init = g84_pci_init, | ||
208 | .rd32 = nv40_pci_rd32, | ||
209 | .wr08 = nv40_pci_wr08, | ||
210 | .wr32 = nv40_pci_wr32, | ||
211 | .msi_rearm = nv40_pci_msi_rearm, | ||
212 | |||
213 | .pcie.init = gk104_pcie_init, | ||
214 | .pcie.set_link = gk104_pcie_set_link, | ||
215 | |||
216 | .pcie.max_speed = gk104_pcie_max_speed, | ||
217 | .pcie.cur_speed = g84_pcie_cur_speed, | ||
218 | |||
219 | .pcie.set_version = gf100_pcie_set_version, | ||
220 | .pcie.version = gf100_pcie_version, | ||
221 | .pcie.version_supported = gk104_pcie_version_supported, | ||
222 | }; | ||
223 | |||
224 | int | ||
225 | gk104_pci_new(struct nvkm_device *device, int index, struct nvkm_pci **ppci) | ||
226 | { | ||
227 | return nvkm_pci_new_(&gk104_pci_func, device, index, ppci); | ||
228 | } | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c new file mode 100644 index 000000000000..b32954f5311e --- /dev/null +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/pcie.c | |||
@@ -0,0 +1,165 @@ | |||
1 | /* | ||
2 | * Copyright 2015 Karol Herbst <nouveau@karolherbst.de> | ||
3 | * | ||
4 | * Permission is hereby granted, free of charge, to any person obtaining a | ||
5 | * copy of this software and associated documentation files (the "Software"), | ||
6 | * to deal in the Software without restriction, including without limitation | ||
7 | * the rights to use, copy, modify, merge, publish, distribute, sublicense, | ||
8 | * and/or sell copies of the Software, and to permit persons to whom the | ||
9 | * Software is furnished to do so, subject to the following conditions: | ||
10 | * | ||
11 | * The above copyright notice and this permission notice shall be included in | ||
12 | * all copies or substantial portions of the Software. | ||
13 | * | ||
14 | * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR | ||
15 | * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, | ||
16 | * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL | ||
17 | * THE COPYRIGHT HOLDER(S) OR AUTHOR(S) BE LIABLE FOR ANY CLAIM, DAMAGES OR | ||
18 | * OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, | ||
19 | * ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR | ||
20 | * OTHER DEALINGS IN THE SOFTWARE. | ||
21 | * | ||
22 | * Authors: Karol Herbst <git@karolherbst.de> | ||
23 | */ | ||
24 | #include "priv.h" | ||
25 | |||
26 | static char *nvkm_pcie_speeds[] = { | ||
27 | "2.5GT/s", | ||
28 | "5.0GT/s", | ||
29 | "8.0GT/s", | ||
30 | }; | ||
31 | |||
32 | static enum nvkm_pcie_speed | ||
33 | nvkm_pcie_speed(enum pci_bus_speed speed) | ||
34 | { | ||
35 | switch (speed) { | ||
36 | case PCIE_SPEED_2_5GT: | ||
37 | return NVKM_PCIE_SPEED_2_5; | ||
38 | case PCIE_SPEED_5_0GT: | ||
39 | return NVKM_PCIE_SPEED_5_0; | ||
40 | case PCIE_SPEED_8_0GT: | ||
41 | return NVKM_PCIE_SPEED_8_0; | ||
42 | default: | ||
43 | /* XXX 0x16 is 8_0, assume 0x17 will be 16_0 for now */ | ||
44 | if (speed == 0x17) | ||
45 | return NVKM_PCIE_SPEED_8_0; | ||
46 | return -1; | ||
47 | } | ||
48 | } | ||
49 | |||
50 | static int | ||
51 | nvkm_pcie_get_version(struct nvkm_pci *pci) | ||
52 | { | ||
53 | if (!pci->func->pcie.version) | ||
54 | return -ENOSYS; | ||
55 | |||
56 | return pci->func->pcie.version(pci); | ||
57 | } | ||
58 | |||
59 | static int | ||
60 | nvkm_pcie_get_max_version(struct nvkm_pci *pci) | ||
61 | { | ||
62 | if (!pci->func->pcie.version_supported) | ||
63 | return -ENOSYS; | ||
64 | |||
65 | return pci->func->pcie.version_supported(pci); | ||
66 | } | ||
67 | |||
68 | static int | ||
69 | nvkm_pcie_set_version(struct nvkm_pci *pci, int version) | ||
70 | { | ||
71 | if (!pci->func->pcie.set_version) | ||
72 | return -ENOSYS; | ||
73 | |||
74 | nvkm_trace(&pci->subdev, "set to version %i\n", version); | ||
75 | pci->func->pcie.set_version(pci, version); | ||
76 | return nvkm_pcie_get_version(pci); | ||
77 | } | ||
78 | |||
79 | int | ||
80 | nvkm_pcie_oneinit(struct nvkm_pci *pci) | ||
81 | { | ||
82 | if (pci->func->pcie.max_speed) | ||
83 | nvkm_debug(&pci->subdev, "pcie max speed: %s\n", | ||
84 | nvkm_pcie_speeds[pci->func->pcie.max_speed(pci)]); | ||
85 | return 0; | ||
86 | } | ||
87 | |||
88 | int | ||
89 | nvkm_pcie_init(struct nvkm_pci *pci) | ||
90 | { | ||
91 | struct nvkm_subdev *subdev = &pci->subdev; | ||
92 | int ret; | ||
93 | |||
94 | /* raise pcie version first */ | ||
95 | ret = nvkm_pcie_get_version(pci); | ||
96 | if (ret > 0) { | ||
97 | int max_version = nvkm_pcie_get_max_version(pci); | ||
98 | if (max_version > 0 && max_version > ret) | ||
99 | ret = nvkm_pcie_set_version(pci, max_version); | ||
100 | |||
101 | if (ret < max_version) | ||
102 | nvkm_error(subdev, "couldn't raise version: %i\n", ret); | ||
103 | } | ||
104 | |||
105 | if (pci->func->pcie.init) | ||
106 | pci->func->pcie.init(pci); | ||
107 | |||
108 | if (pci->pcie.speed != -1) | ||
109 | nvkm_pcie_set_link(pci, pci->pcie.speed, pci->pcie.width); | ||
110 | |||
111 | return 0; | ||
112 | } | ||
113 | |||
114 | int | ||
115 | nvkm_pcie_set_link(struct nvkm_pci *pci, enum nvkm_pcie_speed speed, u8 width) | ||
116 | { | ||
117 | struct nvkm_subdev *subdev = &pci->subdev; | ||
118 | enum nvkm_pcie_speed cur_speed, max_speed; | ||
119 | struct pci_bus *pbus; | ||
120 | int ret; | ||
121 | |||
122 | if (pci || !pci_is_pcie(pci->pdev)) | ||
123 | return 0; | ||
124 | pbus = pci->pdev->bus; | ||
125 | |||
126 | if (!pci->func->pcie.set_link) | ||
127 | return -ENOSYS; | ||
128 | |||
129 | nvkm_trace(subdev, "requested %s\n", nvkm_pcie_speeds[speed]); | ||
130 | |||
131 | if (pci->func->pcie.version(pci) < 2) { | ||
132 | nvkm_error(subdev, "setting link failed due to low version\n"); | ||
133 | return -ENODEV; | ||
134 | } | ||
135 | |||
136 | cur_speed = pci->func->pcie.cur_speed(pci); | ||
137 | max_speed = min(nvkm_pcie_speed(pbus->max_bus_speed), | ||
138 | pci->func->pcie.max_speed(pci)); | ||
139 | |||
140 | nvkm_trace(subdev, "current speed: %s\n", nvkm_pcie_speeds[cur_speed]); | ||
141 | |||
142 | if (speed > max_speed) { | ||
143 | nvkm_debug(subdev, "%s not supported by bus or card, dropping" | ||
144 | "requested speed to %s", nvkm_pcie_speeds[speed], | ||
145 | nvkm_pcie_speeds[max_speed]); | ||
146 | speed = max_speed; | ||
147 | } | ||
148 | |||
149 | pci->pcie.speed = speed; | ||
150 | pci->pcie.width = width; | ||
151 | |||
152 | if (speed == cur_speed) { | ||
153 | nvkm_debug(subdev, "requested matches current speed\n"); | ||
154 | return speed; | ||
155 | } | ||
156 | |||
157 | nvkm_debug(subdev, "set link to %s x%i\n", | ||
158 | nvkm_pcie_speeds[speed], width); | ||
159 | |||
160 | ret = pci->func->pcie.set_link(pci, speed, width); | ||
161 | if (ret < 0) | ||
162 | nvkm_error(subdev, "setting link failed: %i\n", ret); | ||
163 | |||
164 | return ret; | ||
165 | } | ||
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h index cf46d38d0b0a..23de3180aae5 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pci/priv.h | |||
@@ -12,6 +12,18 @@ struct nvkm_pci_func { | |||
12 | void (*wr08)(struct nvkm_pci *, u16 addr, u8 data); | 12 | void (*wr08)(struct nvkm_pci *, u16 addr, u8 data); |
13 | void (*wr32)(struct nvkm_pci *, u16 addr, u32 data); | 13 | void (*wr32)(struct nvkm_pci *, u16 addr, u32 data); |
14 | void (*msi_rearm)(struct nvkm_pci *); | 14 | void (*msi_rearm)(struct nvkm_pci *); |
15 | |||
16 | struct { | ||
17 | int (*init)(struct nvkm_pci *); | ||
18 | int (*set_link)(struct nvkm_pci *, enum nvkm_pcie_speed, u8); | ||
19 | |||
20 | enum nvkm_pcie_speed (*max_speed)(struct nvkm_pci *); | ||
21 | enum nvkm_pcie_speed (*cur_speed)(struct nvkm_pci *); | ||
22 | |||
23 | void (*set_version)(struct nvkm_pci *, u8); | ||
24 | int (*version)(struct nvkm_pci *); | ||
25 | int (*version_supported)(struct nvkm_pci *); | ||
26 | } pcie; | ||
15 | }; | 27 | }; |
16 | 28 | ||
17 | u32 nv40_pci_rd32(struct nvkm_pci *, u16); | 29 | u32 nv40_pci_rd32(struct nvkm_pci *, u16); |
@@ -22,4 +34,25 @@ void nv40_pci_msi_rearm(struct nvkm_pci *); | |||
22 | void nv46_pci_msi_rearm(struct nvkm_pci *); | 34 | void nv46_pci_msi_rearm(struct nvkm_pci *); |
23 | 35 | ||
24 | void g84_pci_init(struct nvkm_pci *pci); | 36 | void g84_pci_init(struct nvkm_pci *pci); |
37 | |||
38 | /* pcie functions */ | ||
39 | void g84_pcie_set_version(struct nvkm_pci *, u8); | ||
40 | int g84_pcie_version(struct nvkm_pci *); | ||
41 | void g84_pcie_set_link_speed(struct nvkm_pci *, enum nvkm_pcie_speed); | ||
42 | enum nvkm_pcie_speed g84_pcie_cur_speed(struct nvkm_pci *); | ||
43 | enum nvkm_pcie_speed g84_pcie_max_speed(struct nvkm_pci *); | ||
44 | int g84_pcie_init(struct nvkm_pci *); | ||
45 | int g84_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8); | ||
46 | |||
47 | int g94_pcie_version_supported(struct nvkm_pci *); | ||
48 | |||
49 | void gf100_pcie_set_version(struct nvkm_pci *, u8); | ||
50 | int gf100_pcie_version(struct nvkm_pci *); | ||
51 | void gf100_pcie_set_cap_speed(struct nvkm_pci *, bool); | ||
52 | int gf100_pcie_cap_speed(struct nvkm_pci *); | ||
53 | int gf100_pcie_init(struct nvkm_pci *); | ||
54 | int gf100_pcie_set_link(struct nvkm_pci *, enum nvkm_pcie_speed, u8); | ||
55 | |||
56 | int nvkm_pcie_oneinit(struct nvkm_pci *); | ||
57 | int nvkm_pcie_init(struct nvkm_pci *); | ||
25 | #endif | 58 | #endif |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h index 302557c52d03..770294457274 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf100.fuc3.h | |||
@@ -24,8 +24,8 @@ uint32_t gf100_pmu_data[] = { | |||
24 | 0x00000000, | 24 | 0x00000000, |
25 | /* 0x0058: proc_list_head */ | 25 | /* 0x0058: proc_list_head */ |
26 | 0x54534f48, | 26 | 0x54534f48, |
27 | 0x00000512, | 27 | 0x00000507, |
28 | 0x000004af, | 28 | 0x000004a4, |
29 | 0x00000000, | 29 | 0x00000000, |
30 | 0x00000000, | 30 | 0x00000000, |
31 | 0x00000000, | 31 | 0x00000000, |
@@ -46,8 +46,8 @@ uint32_t gf100_pmu_data[] = { | |||
46 | 0x00000000, | 46 | 0x00000000, |
47 | 0x00000000, | 47 | 0x00000000, |
48 | 0x584d454d, | 48 | 0x584d454d, |
49 | 0x0000075e, | 49 | 0x00000753, |
50 | 0x00000750, | 50 | 0x00000745, |
51 | 0x00000000, | 51 | 0x00000000, |
52 | 0x00000000, | 52 | 0x00000000, |
53 | 0x00000000, | 53 | 0x00000000, |
@@ -68,8 +68,8 @@ uint32_t gf100_pmu_data[] = { | |||
68 | 0x00000000, | 68 | 0x00000000, |
69 | 0x00000000, | 69 | 0x00000000, |
70 | 0x46524550, | 70 | 0x46524550, |
71 | 0x00000762, | 71 | 0x00000757, |
72 | 0x00000760, | 72 | 0x00000755, |
73 | 0x00000000, | 73 | 0x00000000, |
74 | 0x00000000, | 74 | 0x00000000, |
75 | 0x00000000, | 75 | 0x00000000, |
@@ -90,8 +90,8 @@ uint32_t gf100_pmu_data[] = { | |||
90 | 0x00000000, | 90 | 0x00000000, |
91 | 0x00000000, | 91 | 0x00000000, |
92 | 0x5f433249, | 92 | 0x5f433249, |
93 | 0x00000b92, | 93 | 0x00000b87, |
94 | 0x00000a35, | 94 | 0x00000a2a, |
95 | 0x00000000, | 95 | 0x00000000, |
96 | 0x00000000, | 96 | 0x00000000, |
97 | 0x00000000, | 97 | 0x00000000, |
@@ -112,8 +112,8 @@ uint32_t gf100_pmu_data[] = { | |||
112 | 0x00000000, | 112 | 0x00000000, |
113 | 0x00000000, | 113 | 0x00000000, |
114 | 0x54534554, | 114 | 0x54534554, |
115 | 0x00000bbb, | 115 | 0x00000bb0, |
116 | 0x00000b94, | 116 | 0x00000b89, |
117 | 0x00000000, | 117 | 0x00000000, |
118 | 0x00000000, | 118 | 0x00000000, |
119 | 0x00000000, | 119 | 0x00000000, |
@@ -134,8 +134,8 @@ uint32_t gf100_pmu_data[] = { | |||
134 | 0x00000000, | 134 | 0x00000000, |
135 | 0x00000000, | 135 | 0x00000000, |
136 | 0x454c4449, | 136 | 0x454c4449, |
137 | 0x00000bc7, | 137 | 0x00000bbc, |
138 | 0x00000bc5, | 138 | 0x00000bba, |
139 | 0x00000000, | 139 | 0x00000000, |
140 | 0x00000000, | 140 | 0x00000000, |
141 | 0x00000000, | 141 | 0x00000000, |
@@ -229,26 +229,26 @@ uint32_t gf100_pmu_data[] = { | |||
229 | /* 0x0370: memx_func_head */ | 229 | /* 0x0370: memx_func_head */ |
230 | 0x00000001, | 230 | 0x00000001, |
231 | 0x00000000, | 231 | 0x00000000, |
232 | 0x00000551, | 232 | 0x00000546, |
233 | /* 0x037c: memx_func_next */ | 233 | /* 0x037c: memx_func_next */ |
234 | 0x00000002, | 234 | 0x00000002, |
235 | 0x00000000, | 235 | 0x00000000, |
236 | 0x000005db, | 236 | 0x000005d0, |
237 | 0x00000003, | 237 | 0x00000003, |
238 | 0x00000002, | 238 | 0x00000002, |
239 | 0x000006a5, | 239 | 0x0000069a, |
240 | 0x00040004, | 240 | 0x00040004, |
241 | 0x00000000, | 241 | 0x00000000, |
242 | 0x000006c1, | 242 | 0x000006b6, |
243 | 0x00010005, | 243 | 0x00010005, |
244 | 0x00000000, | 244 | 0x00000000, |
245 | 0x000006de, | 245 | 0x000006d3, |
246 | 0x00010006, | 246 | 0x00010006, |
247 | 0x00000000, | 247 | 0x00000000, |
248 | 0x00000663, | 248 | 0x00000658, |
249 | 0x00000007, | 249 | 0x00000007, |
250 | 0x00000000, | 250 | 0x00000000, |
251 | 0x000006e9, | 251 | 0x000006de, |
252 | /* 0x03c4: memx_func_tail */ | 252 | /* 0x03c4: memx_func_tail */ |
253 | /* 0x03c4: memx_ts_start */ | 253 | /* 0x03c4: memx_ts_start */ |
254 | 0x00000000, | 254 | 0x00000000, |
@@ -917,7 +917,7 @@ uint32_t gf100_pmu_data[] = { | |||
917 | }; | 917 | }; |
918 | 918 | ||
919 | uint32_t gf100_pmu_code[] = { | 919 | uint32_t gf100_pmu_code[] = { |
920 | 0x039e0ef5, | 920 | 0x03930ef5, |
921 | /* 0x0004: rd32 */ | 921 | /* 0x0004: rd32 */ |
922 | 0x07a007f1, | 922 | 0x07a007f1, |
923 | 0xd00604b6, | 923 | 0xd00604b6, |
@@ -987,7 +987,7 @@ uint32_t gf100_pmu_code[] = { | |||
987 | 0xbb9a0a98, | 987 | 0xbb9a0a98, |
988 | 0x1cf4029a, | 988 | 0x1cf4029a, |
989 | 0x01d7f00f, | 989 | 0x01d7f00f, |
990 | 0x02dd21f5, | 990 | 0x02d221f5, |
991 | 0x0ef494bd, | 991 | 0x0ef494bd, |
992 | /* 0x00f9: intr_watchdog_next_time */ | 992 | /* 0x00f9: intr_watchdog_next_time */ |
993 | 0x9b0a9815, | 993 | 0x9b0a9815, |
@@ -1039,7 +1039,7 @@ uint32_t gf100_pmu_code[] = { | |||
1039 | 0x48e7f1c0, | 1039 | 0x48e7f1c0, |
1040 | 0x53e3f14f, | 1040 | 0x53e3f14f, |
1041 | 0x00d7f054, | 1041 | 0x00d7f054, |
1042 | 0x034221f5, | 1042 | 0x033721f5, |
1043 | 0x07f1c0fc, | 1043 | 0x07f1c0fc, |
1044 | 0x04b604c0, | 1044 | 0x04b604c0, |
1045 | 0x000cd006, | 1045 | 0x000cd006, |
@@ -1048,760 +1048,758 @@ uint32_t gf100_pmu_code[] = { | |||
1048 | 0x04b60688, | 1048 | 0x04b60688, |
1049 | 0x0009d006, | 1049 | 0x0009d006, |
1050 | /* 0x01ca: intr_skip_subintr */ | 1050 | /* 0x01ca: intr_skip_subintr */ |
1051 | 0x89c404bd, | 1051 | 0x97f104bd, |
1052 | 0x070bf420, | 1052 | 0x90bd00e0, |
1053 | 0xffbfa4f1, | 1053 | 0xf00489fd, |
1054 | /* 0x01d4: intr_skip_pause */ | 1054 | 0x04b60407, |
1055 | 0xf44089c4, | 1055 | 0x0008d006, |
1056 | 0xa4f1070b, | 1056 | 0x80fc04bd, |
1057 | /* 0x01de: intr_skip_user0 */ | 1057 | 0xfc0088fe, |
1058 | 0x07f0ffbf, | 1058 | 0xfce0fcf0, |
1059 | 0x0604b604, | 1059 | 0xfcc0fcd0, |
1060 | 0xbd0008d0, | 1060 | 0xfca0fcb0, |
1061 | 0xfe80fc04, | 1061 | 0xfc80fc90, |
1062 | 0xf0fc0088, | 1062 | 0x0032f400, |
1063 | 0xd0fce0fc, | 1063 | /* 0x01fa: ticks_from_ns */ |
1064 | 0xb0fcc0fc, | 1064 | 0xc0f901f8, |
1065 | 0x90fca0fc, | ||
1066 | 0x00fc80fc, | ||
1067 | 0xf80032f4, | ||
1068 | /* 0x0205: ticks_from_ns */ | ||
1069 | 0xf9c0f901, | ||
1070 | 0xcbd7f1b0, | ||
1071 | 0x00d3f000, | ||
1072 | 0x041321f5, | ||
1073 | 0x03e8ccec, | ||
1074 | 0xf400b4b0, | ||
1075 | 0xeeec120b, | ||
1076 | 0xd7f103e8, | ||
1077 | 0xd3f000cb, | ||
1078 | 0x1321f500, | ||
1079 | /* 0x022d: ticks_from_ns_quit */ | ||
1080 | 0x02ceb904, | ||
1081 | 0xc0fcb0fc, | ||
1082 | /* 0x0236: ticks_from_us */ | ||
1083 | 0xc0f900f8, | ||
1084 | 0xd7f1b0f9, | 1065 | 0xd7f1b0f9, |
1085 | 0xd3f000cb, | 1066 | 0xd3f000cb, |
1086 | 0x1321f500, | 1067 | 0x0821f500, |
1087 | 0x02ceb904, | 1068 | 0xe8ccec04, |
1088 | 0xf400b4b0, | 1069 | 0x00b4b003, |
1089 | 0xe4bd050b, | 1070 | 0xec120bf4, |
1090 | /* 0x0250: ticks_from_us_quit */ | 1071 | 0xf103e8ee, |
1091 | 0xc0fcb0fc, | 1072 | 0xf000cbd7, |
1092 | /* 0x0256: ticks_to_us */ | 1073 | 0x21f500d3, |
1093 | 0xd7f100f8, | 1074 | /* 0x0222: ticks_from_ns_quit */ |
1094 | 0xd3f000cb, | 1075 | 0xceb90408, |
1095 | 0xecedff00, | 1076 | 0xfcb0fc02, |
1096 | /* 0x0262: timer */ | 1077 | /* 0x022b: ticks_from_us */ |
1097 | 0x90f900f8, | 1078 | 0xf900f8c0, |
1098 | 0x32f480f9, | 1079 | 0xf1b0f9c0, |
1099 | 0x03f89810, | 1080 | 0xf000cbd7, |
1100 | 0xf40086b0, | 1081 | 0x21f500d3, |
1101 | 0x84bd651c, | 1082 | 0xceb90408, |
1102 | 0xb63807f0, | 1083 | 0x00b4b002, |
1103 | 0x08d00604, | 1084 | 0xbd050bf4, |
1104 | 0xf004bd00, | 1085 | /* 0x0245: ticks_from_us_quit */ |
1105 | 0x84b63487, | 1086 | 0xfcb0fce4, |
1106 | 0x0088cf06, | 1087 | /* 0x024b: ticks_to_us */ |
1107 | 0xbb9a0998, | 1088 | 0xf100f8c0, |
1108 | 0xe9bb0298, | 1089 | 0xf000cbd7, |
1109 | 0x03fe8000, | 1090 | 0xedff00d3, |
1110 | 0xb60887f0, | 1091 | /* 0x0257: timer */ |
1111 | 0x88cf0684, | 1092 | 0xf900f8ec, |
1112 | 0x0284f000, | 1093 | 0xf480f990, |
1113 | 0xf0261bf4, | 1094 | 0xf8981032, |
1114 | 0x84b63487, | 1095 | 0x0086b003, |
1115 | 0x0088cf06, | 1096 | 0xbd651cf4, |
1116 | 0xf406e0b8, | 1097 | 0x3807f084, |
1117 | 0xe8b8090b, | ||
1118 | 0x111cf406, | ||
1119 | /* 0x02b8: timer_reset */ | ||
1120 | 0xb63407f0, | ||
1121 | 0x0ed00604, | ||
1122 | 0x8004bd00, | ||
1123 | /* 0x02c6: timer_enable */ | ||
1124 | 0x87f09a0e, | ||
1125 | 0x3807f001, | ||
1126 | 0xd00604b6, | 1098 | 0xd00604b6, |
1127 | 0x04bd0008, | 1099 | 0x04bd0008, |
1128 | /* 0x02d4: timer_done */ | 1100 | 0xb63487f0, |
1129 | 0xfc1031f4, | 1101 | 0x88cf0684, |
1130 | 0xf890fc80, | 1102 | 0x9a099800, |
1131 | /* 0x02dd: send_proc */ | 1103 | 0xbb0298bb, |
1132 | 0xf980f900, | 1104 | 0xfe8000e9, |
1133 | 0x05e89890, | 1105 | 0x0887f003, |
1134 | 0xf004e998, | 1106 | 0xcf0684b6, |
1135 | 0x89b80486, | 1107 | 0x84f00088, |
1136 | 0x2a0bf406, | 1108 | 0x261bf402, |
1137 | 0x940398c4, | 1109 | 0xb63487f0, |
1138 | 0x80b60488, | 1110 | 0x88cf0684, |
1139 | 0x008ebb18, | 1111 | 0x06e0b800, |
1140 | 0x8000fa98, | 1112 | 0xb8090bf4, |
1141 | 0x8d80008a, | 1113 | 0x1cf406e8, |
1142 | 0x028c8001, | 1114 | /* 0x02ad: timer_reset */ |
1143 | 0xb6038b80, | 1115 | 0x3407f011, |
1144 | 0x94f00190, | ||
1145 | 0x04e98007, | ||
1146 | /* 0x0317: send_done */ | ||
1147 | 0xfc0231f4, | ||
1148 | 0xf880fc90, | ||
1149 | /* 0x031d: find */ | ||
1150 | 0xf080f900, | ||
1151 | 0x31f45887, | ||
1152 | /* 0x0325: find_loop */ | ||
1153 | 0x008a9801, | ||
1154 | 0xf406aeb8, | ||
1155 | 0x80b6100b, | ||
1156 | 0x6886b158, | ||
1157 | 0xf01bf402, | ||
1158 | /* 0x033b: find_done */ | ||
1159 | 0xb90132f4, | ||
1160 | 0x80fc028e, | ||
1161 | /* 0x0342: send */ | ||
1162 | 0x21f500f8, | ||
1163 | 0x01f4031d, | ||
1164 | /* 0x034b: recv */ | ||
1165 | 0xf900f897, | ||
1166 | 0x9880f990, | ||
1167 | 0xe99805e8, | ||
1168 | 0x0132f404, | ||
1169 | 0xf40689b8, | ||
1170 | 0x89c43d0b, | ||
1171 | 0x0180b603, | ||
1172 | 0x800784f0, | ||
1173 | 0xea9805e8, | ||
1174 | 0xfef0f902, | ||
1175 | 0xf0f9018f, | ||
1176 | 0x9402efb9, | ||
1177 | 0xe9bb0499, | ||
1178 | 0x18e0b600, | ||
1179 | 0x9803eb98, | ||
1180 | 0xed9802ec, | ||
1181 | 0x00ee9801, | ||
1182 | 0xf0fca5f9, | ||
1183 | 0xf400f8fe, | ||
1184 | 0xf0fc0131, | ||
1185 | /* 0x0398: recv_done */ | ||
1186 | 0x90fc80fc, | ||
1187 | /* 0x039e: init */ | ||
1188 | 0x17f100f8, | ||
1189 | 0x14b60108, | ||
1190 | 0x0011cf06, | ||
1191 | 0x010911e7, | ||
1192 | 0xfe0814b6, | ||
1193 | 0x17f10014, | ||
1194 | 0x13f000e0, | ||
1195 | 0x1c07f000, | ||
1196 | 0xd00604b6, | ||
1197 | 0x04bd0001, | ||
1198 | 0xf0ff17f0, | ||
1199 | 0x04b61407, | ||
1200 | 0x0001d006, | ||
1201 | 0x17f004bd, | ||
1202 | 0x0015f102, | ||
1203 | 0x1007f008, | ||
1204 | 0xd00604b6, | 1116 | 0xd00604b6, |
1205 | 0x04bd0001, | 1117 | 0x04bd000e, |
1206 | 0x011a17f1, | 1118 | /* 0x02bb: timer_enable */ |
1207 | 0xfe0013f0, | 1119 | 0xf09a0e80, |
1208 | 0x31f40010, | 1120 | 0x07f00187, |
1209 | 0x0117f010, | 1121 | 0x0604b638, |
1210 | 0xb63807f0, | 1122 | 0xbd0008d0, |
1123 | /* 0x02c9: timer_done */ | ||
1124 | 0x1031f404, | ||
1125 | 0x90fc80fc, | ||
1126 | /* 0x02d2: send_proc */ | ||
1127 | 0x80f900f8, | ||
1128 | 0xe89890f9, | ||
1129 | 0x04e99805, | ||
1130 | 0xb80486f0, | ||
1131 | 0x0bf40689, | ||
1132 | 0x0398c42a, | ||
1133 | 0xb6048894, | ||
1134 | 0x8ebb1880, | ||
1135 | 0x00fa9800, | ||
1136 | 0x80008a80, | ||
1137 | 0x8c80018d, | ||
1138 | 0x038b8002, | ||
1139 | 0xf00190b6, | ||
1140 | 0xe9800794, | ||
1141 | 0x0231f404, | ||
1142 | /* 0x030c: send_done */ | ||
1143 | 0x80fc90fc, | ||
1144 | /* 0x0312: find */ | ||
1145 | 0x80f900f8, | ||
1146 | 0xf45887f0, | ||
1147 | /* 0x031a: find_loop */ | ||
1148 | 0x8a980131, | ||
1149 | 0x06aeb800, | ||
1150 | 0xb6100bf4, | ||
1151 | 0x86b15880, | ||
1152 | 0x1bf40268, | ||
1153 | 0x0132f4f0, | ||
1154 | /* 0x0330: find_done */ | ||
1155 | 0xfc028eb9, | ||
1156 | /* 0x0337: send */ | ||
1157 | 0xf500f880, | ||
1158 | 0xf4031221, | ||
1159 | 0x00f89701, | ||
1160 | /* 0x0340: recv */ | ||
1161 | 0x80f990f9, | ||
1162 | 0x9805e898, | ||
1163 | 0x32f404e9, | ||
1164 | 0x0689b801, | ||
1165 | 0xc43d0bf4, | ||
1166 | 0x80b60389, | ||
1167 | 0x0784f001, | ||
1168 | 0x9805e880, | ||
1169 | 0xf0f902ea, | ||
1170 | 0xf9018ffe, | ||
1171 | 0x02efb9f0, | ||
1172 | 0xbb049994, | ||
1173 | 0xe0b600e9, | ||
1174 | 0x03eb9818, | ||
1175 | 0x9802ec98, | ||
1176 | 0xee9801ed, | ||
1177 | 0xfca5f900, | ||
1178 | 0x00f8fef0, | ||
1179 | 0xfc0131f4, | ||
1180 | /* 0x038d: recv_done */ | ||
1181 | 0xfc80fcf0, | ||
1182 | /* 0x0393: init */ | ||
1183 | 0xf100f890, | ||
1184 | 0xb6010817, | ||
1185 | 0x11cf0614, | ||
1186 | 0x0911e700, | ||
1187 | 0x0814b601, | ||
1188 | 0xf10014fe, | ||
1189 | 0xf000e017, | ||
1190 | 0x07f00013, | ||
1191 | 0x0604b61c, | ||
1192 | 0xbd0001d0, | ||
1193 | 0xff17f004, | ||
1194 | 0xb61407f0, | ||
1211 | 0x01d00604, | 1195 | 0x01d00604, |
1212 | 0xf004bd00, | 1196 | 0xf004bd00, |
1213 | /* 0x0402: init_proc */ | 1197 | 0x15f10217, |
1214 | 0xf19858f7, | 1198 | 0x07f00800, |
1215 | 0x0016b001, | 1199 | 0x0604b610, |
1216 | 0xf9fa0bf4, | 1200 | 0xbd0001d0, |
1217 | 0x58f0b615, | 1201 | 0x1a17f104, |
1218 | /* 0x0413: mulu32_32_64 */ | 1202 | 0x0013f001, |
1219 | 0xf9f20ef4, | 1203 | 0xf40010fe, |
1220 | 0xf920f910, | 1204 | 0x17f01031, |
1221 | 0x9540f930, | 1205 | 0x3807f001, |
1222 | 0xd29510e1, | 1206 | 0xd00604b6, |
1223 | 0xbdc4bd10, | 1207 | 0x04bd0001, |
1224 | 0xc0edffb4, | 1208 | /* 0x03f7: init_proc */ |
1225 | 0xb9301dff, | 1209 | 0x9858f7f0, |
1226 | 0x34f10234, | 1210 | 0x16b001f1, |
1227 | 0x34b6ffff, | 1211 | 0xfa0bf400, |
1228 | 0x1045b610, | 1212 | 0xf0b615f9, |
1229 | 0xbb00c3bb, | 1213 | 0xf20ef458, |
1230 | 0xe2ff01b4, | 1214 | /* 0x0408: mulu32_32_64 */ |
1231 | 0x0234b930, | 1215 | 0x20f910f9, |
1232 | 0xffff34f1, | 1216 | 0x40f930f9, |
1233 | 0xb61034b6, | 1217 | 0x9510e195, |
1234 | 0xc3bb1045, | 1218 | 0xc4bd10d2, |
1235 | 0x01b4bb00, | 1219 | 0xedffb4bd, |
1236 | 0xbb3012ff, | 1220 | 0x301dffc0, |
1237 | 0x40fc00b3, | 1221 | 0xf10234b9, |
1238 | 0x20fc30fc, | 1222 | 0xb6ffff34, |
1239 | 0x00f810fc, | 1223 | 0x45b61034, |
1240 | /* 0x0464: host_send */ | 1224 | 0x00c3bb10, |
1241 | 0x04b017f1, | 1225 | 0xff01b4bb, |
1242 | 0xcf0614b6, | 1226 | 0x34b930e2, |
1243 | 0x27f10011, | 1227 | 0xff34f102, |
1244 | 0x24b604a0, | 1228 | 0x1034b6ff, |
1245 | 0x0022cf06, | 1229 | 0xbb1045b6, |
1246 | 0xf40612b8, | 1230 | 0xb4bb00c3, |
1247 | 0x1ec4320b, | 1231 | 0x3012ff01, |
1248 | 0x04ee9407, | 1232 | 0xfc00b3bb, |
1249 | 0x0270e0b7, | 1233 | 0xfc30fc40, |
1250 | 0x9803eb98, | 1234 | 0xf810fc20, |
1251 | 0xed9802ec, | 1235 | /* 0x0459: host_send */ |
1252 | 0x00ee9801, | 1236 | 0xb017f100, |
1253 | 0x034221f5, | ||
1254 | 0xc40110b6, | ||
1255 | 0x07f10f1e, | ||
1256 | 0x04b604b0, | ||
1257 | 0x000ed006, | ||
1258 | 0x0ef404bd, | ||
1259 | /* 0x04ad: host_send_done */ | ||
1260 | /* 0x04af: host_recv */ | ||
1261 | 0xf100f8ba, | ||
1262 | 0xf14e4917, | ||
1263 | 0xb8525413, | ||
1264 | 0x0bf406e1, | ||
1265 | /* 0x04bd: host_recv_wait */ | ||
1266 | 0xcc17f1aa, | ||
1267 | 0x0614b604, | 1237 | 0x0614b604, |
1268 | 0xf10011cf, | 1238 | 0xf10011cf, |
1269 | 0xb604c827, | 1239 | 0xb604a027, |
1270 | 0x22cf0624, | 1240 | 0x22cf0624, |
1271 | 0x0816f000, | 1241 | 0x0612b800, |
1272 | 0xf40612b8, | 1242 | 0xc4320bf4, |
1273 | 0x23c4e60b, | 1243 | 0xee94071e, |
1274 | 0x0434b607, | 1244 | 0x70e0b704, |
1275 | 0x02f030b7, | 1245 | 0x03eb9802, |
1276 | 0x80033b80, | 1246 | 0x9802ec98, |
1277 | 0x3d80023c, | 1247 | 0xee9801ed, |
1278 | 0x003e8001, | 1248 | 0x3721f500, |
1279 | 0xf00120b6, | 1249 | 0x0110b603, |
1280 | 0x07f10f24, | 1250 | 0xf10f1ec4, |
1281 | 0x04b604c8, | 1251 | 0xb604b007, |
1282 | 0x0002d006, | 1252 | 0x0ed00604, |
1283 | 0x27f004bd, | 1253 | 0xf404bd00, |
1284 | 0x0007f040, | 1254 | /* 0x04a2: host_send_done */ |
1285 | 0xd00604b6, | 1255 | 0x00f8ba0e, |
1286 | 0x04bd0002, | 1256 | /* 0x04a4: host_recv */ |
1287 | /* 0x0512: host_init */ | 1257 | 0x4e4917f1, |
1288 | 0x17f100f8, | 1258 | 0x525413f1, |
1259 | 0xf406e1b8, | ||
1260 | /* 0x04b2: host_recv_wait */ | ||
1261 | 0x17f1aa0b, | ||
1262 | 0x14b604cc, | ||
1263 | 0x0011cf06, | ||
1264 | 0x04c827f1, | ||
1265 | 0xcf0624b6, | ||
1266 | 0x16f00022, | ||
1267 | 0x0612b808, | ||
1268 | 0xc4e60bf4, | ||
1269 | 0x34b60723, | ||
1270 | 0xf030b704, | ||
1271 | 0x033b8002, | ||
1272 | 0x80023c80, | ||
1273 | 0x3e80013d, | ||
1274 | 0x0120b600, | ||
1275 | 0xf10f24f0, | ||
1276 | 0xb604c807, | ||
1277 | 0x02d00604, | ||
1278 | 0xf004bd00, | ||
1279 | 0x07f04027, | ||
1280 | 0x0604b600, | ||
1281 | 0xbd0002d0, | ||
1282 | /* 0x0507: host_init */ | ||
1283 | 0xf100f804, | ||
1284 | 0xb6008017, | ||
1285 | 0x15f11014, | ||
1286 | 0x07f10270, | ||
1287 | 0x04b604d0, | ||
1288 | 0x0001d006, | ||
1289 | 0x17f104bd, | ||
1289 | 0x14b60080, | 1290 | 0x14b60080, |
1290 | 0x7015f110, | 1291 | 0xf015f110, |
1291 | 0xd007f102, | 1292 | 0xdc07f102, |
1292 | 0x0604b604, | 1293 | 0x0604b604, |
1293 | 0xbd0001d0, | 1294 | 0xbd0001d0, |
1294 | 0x8017f104, | 1295 | 0x0117f004, |
1295 | 0x1014b600, | 1296 | 0x04c407f1, |
1296 | 0x02f015f1, | ||
1297 | 0x04dc07f1, | ||
1298 | 0xd00604b6, | 1297 | 0xd00604b6, |
1299 | 0x04bd0001, | 1298 | 0x04bd0001, |
1300 | 0xf10117f0, | 1299 | /* 0x0546: memx_func_enter */ |
1301 | 0xb604c407, | 1300 | 0x67f100f8, |
1302 | 0x01d00604, | 1301 | 0x77f11620, |
1303 | 0xf804bd00, | 1302 | 0x73f1f55d, |
1304 | /* 0x0551: memx_func_enter */ | 1303 | 0x6eb9ffff, |
1305 | 0x2067f100, | 1304 | 0x0421f402, |
1306 | 0x5d77f116, | 1305 | 0xfd02d8b9, |
1307 | 0xff73f1f5, | 1306 | 0x60f90487, |
1307 | 0xd0fc80f9, | ||
1308 | 0x21f4e0fc, | ||
1309 | 0xfe77f13f, | ||
1310 | 0xff73f1ff, | ||
1308 | 0x026eb9ff, | 1311 | 0x026eb9ff, |
1309 | 0xb90421f4, | 1312 | 0xb90421f4, |
1310 | 0x87fd02d8, | 1313 | 0x87fd02d8, |
1311 | 0xf960f904, | 1314 | 0xf960f904, |
1312 | 0xfcd0fc80, | 1315 | 0xfcd0fc80, |
1313 | 0x3f21f4e0, | 1316 | 0x3f21f4e0, |
1314 | 0xfffe77f1, | 1317 | 0x26f067f1, |
1315 | 0xffff73f1, | ||
1316 | 0xf4026eb9, | 1318 | 0xf4026eb9, |
1317 | 0xd8b90421, | 1319 | 0xd8b90421, |
1318 | 0x0487fd02, | 1320 | 0x0487fd02, |
1319 | 0x80f960f9, | 1321 | 0x80f960f9, |
1320 | 0xe0fcd0fc, | 1322 | 0xe0fcd0fc, |
1321 | 0xf13f21f4, | 1323 | 0xf03f21f4, |
1322 | 0xb926f067, | ||
1323 | 0x21f4026e, | ||
1324 | 0x02d8b904, | ||
1325 | 0xf90487fd, | ||
1326 | 0xfc80f960, | ||
1327 | 0xf4e0fcd0, | ||
1328 | 0x67f03f21, | ||
1329 | 0xe007f104, | ||
1330 | 0x0604b607, | ||
1331 | 0xbd0006d0, | ||
1332 | /* 0x05bd: memx_func_enter_wait */ | ||
1333 | 0xc067f104, | ||
1334 | 0x0664b607, | ||
1335 | 0xf00066cf, | ||
1336 | 0x0bf40464, | ||
1337 | 0x2c67f0f3, | ||
1338 | 0xcf0664b6, | ||
1339 | 0x06800066, | ||
1340 | /* 0x05db: memx_func_leave */ | ||
1341 | 0xf000f8f1, | ||
1342 | 0x64b62c67, | ||
1343 | 0x0066cf06, | ||
1344 | 0xf0f20680, | ||
1345 | 0x07f10467, | 1324 | 0x07f10467, |
1346 | 0x04b607e4, | 1325 | 0x04b607e0, |
1347 | 0x0006d006, | 1326 | 0x0006d006, |
1348 | /* 0x05f6: memx_func_leave_wait */ | 1327 | /* 0x05b2: memx_func_enter_wait */ |
1349 | 0x67f104bd, | 1328 | 0x67f104bd, |
1350 | 0x64b607c0, | 1329 | 0x64b607c0, |
1351 | 0x0066cf06, | 1330 | 0x0066cf06, |
1352 | 0xf40464f0, | 1331 | 0xf40464f0, |
1353 | 0x67f1f31b, | 1332 | 0x67f0f30b, |
1354 | 0x77f126f0, | 1333 | 0x0664b62c, |
1355 | 0x73f00001, | 1334 | 0x800066cf, |
1356 | 0x026eb900, | 1335 | 0x00f8f106, |
1357 | 0xb90421f4, | 1336 | /* 0x05d0: memx_func_leave */ |
1358 | 0x87fd02d8, | 1337 | 0xb62c67f0, |
1359 | 0xf960f905, | 1338 | 0x66cf0664, |
1360 | 0xfcd0fc80, | 1339 | 0xf2068000, |
1361 | 0x3f21f4e0, | 1340 | 0xf10467f0, |
1362 | 0x162067f1, | 1341 | 0xb607e407, |
1363 | 0xf4026eb9, | 1342 | 0x06d00604, |
1364 | 0xd8b90421, | 1343 | /* 0x05eb: memx_func_leave_wait */ |
1365 | 0x0587fd02, | 1344 | 0xf104bd00, |
1366 | 0x80f960f9, | 1345 | 0xb607c067, |
1367 | 0xe0fcd0fc, | 1346 | 0x66cf0664, |
1368 | 0xf13f21f4, | 1347 | 0x0464f000, |
1369 | 0xf00aa277, | 1348 | 0xf1f31bf4, |
1349 | 0xf126f067, | ||
1350 | 0xf0000177, | ||
1370 | 0x6eb90073, | 1351 | 0x6eb90073, |
1371 | 0x0421f402, | 1352 | 0x0421f402, |
1372 | 0xfd02d8b9, | 1353 | 0xfd02d8b9, |
1373 | 0x60f90587, | 1354 | 0x60f90587, |
1374 | 0xd0fc80f9, | 1355 | 0xd0fc80f9, |
1375 | 0x21f4e0fc, | 1356 | 0x21f4e0fc, |
1376 | /* 0x0663: memx_func_wait_vblank */ | 1357 | 0x2067f13f, |
1377 | 0x9800f83f, | 1358 | 0x026eb916, |
1378 | 0x66b00016, | 1359 | 0xb90421f4, |
1379 | 0x130bf400, | 1360 | 0x87fd02d8, |
1380 | 0xf40166b0, | 1361 | 0xf960f905, |
1381 | 0x0ef4060b, | 1362 | 0xfcd0fc80, |
1382 | /* 0x0675: memx_func_wait_vblank_head1 */ | 1363 | 0x3f21f4e0, |
1383 | 0x2077f12e, | 1364 | 0x0aa277f1, |
1384 | 0x070ef400, | 1365 | 0xb90073f0, |
1385 | /* 0x067c: memx_func_wait_vblank_head0 */ | 1366 | 0x21f4026e, |
1386 | 0x000877f1, | 1367 | 0x02d8b904, |
1387 | /* 0x0680: memx_func_wait_vblank_0 */ | 1368 | 0xf90587fd, |
1388 | 0x07c467f1, | 1369 | 0xfc80f960, |
1389 | 0xcf0664b6, | 1370 | 0xf4e0fcd0, |
1390 | 0x67fd0066, | 1371 | 0x00f83f21, |
1391 | 0xf31bf404, | 1372 | /* 0x0658: memx_func_wait_vblank */ |
1392 | /* 0x0690: memx_func_wait_vblank_1 */ | 1373 | 0xb0001698, |
1393 | 0x07c467f1, | 1374 | 0x0bf40066, |
1394 | 0xcf0664b6, | 1375 | 0x0166b013, |
1395 | 0x67fd0066, | 1376 | 0xf4060bf4, |
1396 | 0xf30bf404, | 1377 | /* 0x066a: memx_func_wait_vblank_head1 */ |
1397 | /* 0x06a0: memx_func_wait_vblank_fini */ | 1378 | 0x77f12e0e, |
1398 | 0xf80410b6, | 1379 | 0x0ef40020, |
1399 | /* 0x06a5: memx_func_wr32 */ | 1380 | /* 0x0671: memx_func_wait_vblank_head0 */ |
1400 | 0x00169800, | 1381 | 0x0877f107, |
1401 | 0xb6011598, | 1382 | /* 0x0675: memx_func_wait_vblank_0 */ |
1402 | 0x60f90810, | 1383 | 0xc467f100, |
1403 | 0xd0fc50f9, | 1384 | 0x0664b607, |
1404 | 0x21f4e0fc, | 1385 | 0xfd0066cf, |
1405 | 0x0242b63f, | 1386 | 0x1bf40467, |
1406 | 0xf8e91bf4, | 1387 | /* 0x0685: memx_func_wait_vblank_1 */ |
1407 | /* 0x06c1: memx_func_wait */ | 1388 | 0xc467f1f3, |
1408 | 0x2c87f000, | 1389 | 0x0664b607, |
1409 | 0xcf0684b6, | 1390 | 0xfd0066cf, |
1410 | 0x1e980088, | 1391 | 0x0bf40467, |
1411 | 0x011d9800, | 1392 | /* 0x0695: memx_func_wait_vblank_fini */ |
1412 | 0x98021c98, | 1393 | 0x0410b6f3, |
1413 | 0x10b6031b, | 1394 | /* 0x069a: memx_func_wr32 */ |
1414 | 0xa421f410, | 1395 | 0x169800f8, |
1415 | /* 0x06de: memx_func_delay */ | 1396 | 0x01159800, |
1416 | 0x1e9800f8, | 1397 | 0xf90810b6, |
1398 | 0xfc50f960, | ||
1399 | 0xf4e0fcd0, | ||
1400 | 0x42b63f21, | ||
1401 | 0xe91bf402, | ||
1402 | /* 0x06b6: memx_func_wait */ | ||
1403 | 0x87f000f8, | ||
1404 | 0x0684b62c, | ||
1405 | 0x980088cf, | ||
1406 | 0x1d98001e, | ||
1407 | 0x021c9801, | ||
1408 | 0xb6031b98, | ||
1409 | 0x21f41010, | ||
1410 | /* 0x06d3: memx_func_delay */ | ||
1411 | 0x9800f8a4, | ||
1412 | 0x10b6001e, | ||
1413 | 0x7f21f404, | ||
1414 | /* 0x06de: memx_func_train */ | ||
1415 | 0x00f800f8, | ||
1416 | /* 0x06e0: memx_exec */ | ||
1417 | 0xd0f9e0f9, | ||
1418 | 0xb902c1b9, | ||
1419 | /* 0x06ea: memx_exec_next */ | ||
1420 | 0x139802b2, | ||
1417 | 0x0410b600, | 1421 | 0x0410b600, |
1422 | 0x01f034e7, | ||
1423 | 0x01e033e7, | ||
1424 | 0xf00132b6, | ||
1425 | 0x35980c30, | ||
1426 | 0xb855f9de, | ||
1427 | 0x1ef40612, | ||
1428 | 0xf10b98e4, | ||
1429 | 0xbbf20c98, | ||
1430 | 0xb7f102cb, | ||
1431 | 0xb4b607c4, | ||
1432 | 0x00bbcf06, | ||
1433 | 0xe0fcd0fc, | ||
1434 | 0x033721f5, | ||
1435 | /* 0x0726: memx_info */ | ||
1436 | 0xc67000f8, | ||
1437 | 0x0e0bf401, | ||
1438 | /* 0x072c: memx_info_data */ | ||
1439 | 0x03ccc7f1, | ||
1440 | 0x0800b7f1, | ||
1441 | /* 0x0737: memx_info_train */ | ||
1442 | 0xf10b0ef4, | ||
1443 | 0xf10bccc7, | ||
1444 | /* 0x073f: memx_info_send */ | ||
1445 | 0xf50100b7, | ||
1446 | 0xf8033721, | ||
1447 | /* 0x0745: memx_recv */ | ||
1448 | 0x01d6b000, | ||
1449 | 0xb0980bf4, | ||
1450 | 0x0bf400d6, | ||
1451 | /* 0x0753: memx_init */ | ||
1452 | 0xf800f8d8, | ||
1453 | /* 0x0755: perf_recv */ | ||
1454 | /* 0x0757: perf_init */ | ||
1455 | 0xf800f800, | ||
1456 | /* 0x0759: i2c_drive_scl */ | ||
1457 | 0x0036b000, | ||
1458 | 0xf1110bf4, | ||
1459 | 0xb607e007, | ||
1460 | 0x01d00604, | ||
1461 | 0xf804bd00, | ||
1462 | /* 0x076d: i2c_drive_scl_lo */ | ||
1463 | 0xe407f100, | ||
1464 | 0x0604b607, | ||
1465 | 0xbd0001d0, | ||
1466 | /* 0x077b: i2c_drive_sda */ | ||
1467 | 0xb000f804, | ||
1468 | 0x0bf40036, | ||
1469 | 0xe007f111, | ||
1470 | 0x0604b607, | ||
1471 | 0xbd0002d0, | ||
1472 | /* 0x078f: i2c_drive_sda_lo */ | ||
1473 | 0xf100f804, | ||
1474 | 0xb607e407, | ||
1475 | 0x02d00604, | ||
1476 | 0xf804bd00, | ||
1477 | /* 0x079d: i2c_sense_scl */ | ||
1478 | 0x0132f400, | ||
1479 | 0x07c437f1, | ||
1480 | 0xcf0634b6, | ||
1481 | 0x31fd0033, | ||
1482 | 0x060bf404, | ||
1483 | /* 0x07b3: i2c_sense_scl_done */ | ||
1484 | 0xf80131f4, | ||
1485 | /* 0x07b5: i2c_sense_sda */ | ||
1486 | 0x0132f400, | ||
1487 | 0x07c437f1, | ||
1488 | 0xcf0634b6, | ||
1489 | 0x32fd0033, | ||
1490 | 0x060bf404, | ||
1491 | /* 0x07cb: i2c_sense_sda_done */ | ||
1492 | 0xf80131f4, | ||
1493 | /* 0x07cd: i2c_raise_scl */ | ||
1494 | 0xf140f900, | ||
1495 | 0xf0089847, | ||
1496 | 0x21f50137, | ||
1497 | /* 0x07da: i2c_raise_scl_wait */ | ||
1498 | 0xe7f10759, | ||
1499 | 0x21f403e8, | ||
1500 | 0x9d21f57f, | ||
1501 | 0x0901f407, | ||
1502 | 0xf40142b6, | ||
1503 | /* 0x07ee: i2c_raise_scl_done */ | ||
1504 | 0x40fcef1b, | ||
1505 | /* 0x07f2: i2c_start */ | ||
1506 | 0x21f500f8, | ||
1507 | 0x11f4079d, | ||
1508 | 0xb521f50d, | ||
1509 | 0x0611f407, | ||
1510 | /* 0x0803: i2c_start_rep */ | ||
1511 | 0xf0300ef4, | ||
1512 | 0x21f50037, | ||
1513 | 0x37f00759, | ||
1514 | 0x7b21f501, | ||
1515 | 0x0076bb07, | ||
1516 | 0xf90465b6, | ||
1517 | 0x04659450, | ||
1518 | 0xbd0256bb, | ||
1519 | 0x0475fd50, | ||
1520 | 0x21f550fc, | ||
1521 | 0x64b607cd, | ||
1522 | 0x1f11f404, | ||
1523 | /* 0x0830: i2c_start_send */ | ||
1524 | 0xf50037f0, | ||
1525 | 0xf1077b21, | ||
1526 | 0xf41388e7, | ||
1527 | 0x37f07f21, | ||
1528 | 0x5921f500, | ||
1529 | 0x88e7f107, | ||
1530 | 0x7f21f413, | ||
1531 | /* 0x084c: i2c_start_out */ | ||
1532 | /* 0x084e: i2c_stop */ | ||
1533 | 0x37f000f8, | ||
1534 | 0x5921f500, | ||
1535 | 0x0037f007, | ||
1536 | 0x077b21f5, | ||
1537 | 0x03e8e7f1, | ||
1538 | 0xf07f21f4, | ||
1539 | 0x21f50137, | ||
1540 | 0xe7f10759, | ||
1541 | 0x21f41388, | ||
1542 | 0x0137f07f, | ||
1543 | 0x077b21f5, | ||
1544 | 0x1388e7f1, | ||
1418 | 0xf87f21f4, | 1545 | 0xf87f21f4, |
1419 | /* 0x06e9: memx_func_train */ | 1546 | /* 0x0881: i2c_bitw */ |
1420 | /* 0x06eb: memx_exec */ | 1547 | 0x7b21f500, |
1421 | 0xf900f800, | ||
1422 | 0xb9d0f9e0, | ||
1423 | 0xb2b902c1, | ||
1424 | /* 0x06f5: memx_exec_next */ | ||
1425 | 0x00139802, | ||
1426 | 0xe70410b6, | ||
1427 | 0xe701f034, | ||
1428 | 0xb601e033, | ||
1429 | 0x30f00132, | ||
1430 | 0xde35980c, | ||
1431 | 0x12b855f9, | ||
1432 | 0xe41ef406, | ||
1433 | 0x98f10b98, | ||
1434 | 0xcbbbf20c, | ||
1435 | 0xc4b7f102, | ||
1436 | 0x06b4b607, | ||
1437 | 0xfc00bbcf, | ||
1438 | 0xf5e0fcd0, | ||
1439 | 0xf8034221, | ||
1440 | /* 0x0731: memx_info */ | ||
1441 | 0x01c67000, | ||
1442 | /* 0x0737: memx_info_data */ | ||
1443 | 0xf10e0bf4, | ||
1444 | 0xf103ccc7, | ||
1445 | 0xf40800b7, | ||
1446 | /* 0x0742: memx_info_train */ | ||
1447 | 0xc7f10b0e, | ||
1448 | 0xb7f10bcc, | ||
1449 | /* 0x074a: memx_info_send */ | ||
1450 | 0x21f50100, | ||
1451 | 0x00f80342, | ||
1452 | /* 0x0750: memx_recv */ | ||
1453 | 0xf401d6b0, | ||
1454 | 0xd6b0980b, | ||
1455 | 0xd80bf400, | ||
1456 | /* 0x075e: memx_init */ | ||
1457 | 0x00f800f8, | ||
1458 | /* 0x0760: perf_recv */ | ||
1459 | /* 0x0762: perf_init */ | ||
1460 | 0x00f800f8, | ||
1461 | /* 0x0764: i2c_drive_scl */ | ||
1462 | 0xf40036b0, | ||
1463 | 0x07f1110b, | ||
1464 | 0x04b607e0, | ||
1465 | 0x0001d006, | ||
1466 | 0x00f804bd, | ||
1467 | /* 0x0778: i2c_drive_scl_lo */ | ||
1468 | 0x07e407f1, | ||
1469 | 0xd00604b6, | ||
1470 | 0x04bd0001, | ||
1471 | /* 0x0786: i2c_drive_sda */ | ||
1472 | 0x36b000f8, | ||
1473 | 0x110bf400, | ||
1474 | 0x07e007f1, | ||
1475 | 0xd00604b6, | ||
1476 | 0x04bd0002, | ||
1477 | /* 0x079a: i2c_drive_sda_lo */ | ||
1478 | 0x07f100f8, | ||
1479 | 0x04b607e4, | ||
1480 | 0x0002d006, | ||
1481 | 0x00f804bd, | ||
1482 | /* 0x07a8: i2c_sense_scl */ | ||
1483 | 0xf10132f4, | ||
1484 | 0xb607c437, | ||
1485 | 0x33cf0634, | ||
1486 | 0x0431fd00, | ||
1487 | 0xf4060bf4, | ||
1488 | /* 0x07be: i2c_sense_scl_done */ | ||
1489 | 0x00f80131, | ||
1490 | /* 0x07c0: i2c_sense_sda */ | ||
1491 | 0xf10132f4, | ||
1492 | 0xb607c437, | ||
1493 | 0x33cf0634, | ||
1494 | 0x0432fd00, | ||
1495 | 0xf4060bf4, | ||
1496 | /* 0x07d6: i2c_sense_sda_done */ | ||
1497 | 0x00f80131, | ||
1498 | /* 0x07d8: i2c_raise_scl */ | ||
1499 | 0x47f140f9, | ||
1500 | 0x37f00898, | ||
1501 | 0x6421f501, | ||
1502 | /* 0x07e5: i2c_raise_scl_wait */ | ||
1503 | 0xe8e7f107, | 1548 | 0xe8e7f107, |
1504 | 0x7f21f403, | 1549 | 0x7f21f403, |
1505 | 0x07a821f5, | ||
1506 | 0xb60901f4, | ||
1507 | 0x1bf40142, | ||
1508 | /* 0x07f9: i2c_raise_scl_done */ | ||
1509 | 0xf840fcef, | ||
1510 | /* 0x07fd: i2c_start */ | ||
1511 | 0xa821f500, | ||
1512 | 0x0d11f407, | ||
1513 | 0x07c021f5, | ||
1514 | 0xf40611f4, | ||
1515 | /* 0x080e: i2c_start_rep */ | ||
1516 | 0x37f0300e, | ||
1517 | 0x6421f500, | ||
1518 | 0x0137f007, | ||
1519 | 0x078621f5, | ||
1520 | 0xb60076bb, | 1550 | 0xb60076bb, |
1521 | 0x50f90465, | 1551 | 0x50f90465, |
1522 | 0xbb046594, | 1552 | 0xbb046594, |
1523 | 0x50bd0256, | 1553 | 0x50bd0256, |
1524 | 0xfc0475fd, | 1554 | 0xfc0475fd, |
1525 | 0xd821f550, | 1555 | 0xcd21f550, |
1526 | 0x0464b607, | 1556 | 0x0464b607, |
1527 | /* 0x083b: i2c_start_send */ | 1557 | 0xf11811f4, |
1528 | 0xf01f11f4, | 1558 | 0xf41388e7, |
1529 | 0x21f50037, | ||
1530 | 0xe7f10786, | ||
1531 | 0x21f41388, | ||
1532 | 0x0037f07f, | ||
1533 | 0x076421f5, | ||
1534 | 0x1388e7f1, | ||
1535 | /* 0x0857: i2c_start_out */ | ||
1536 | 0xf87f21f4, | ||
1537 | /* 0x0859: i2c_stop */ | ||
1538 | 0x0037f000, | ||
1539 | 0x076421f5, | ||
1540 | 0xf50037f0, | ||
1541 | 0xf1078621, | ||
1542 | 0xf403e8e7, | ||
1543 | 0x37f07f21, | 1559 | 0x37f07f21, |
1544 | 0x6421f501, | 1560 | 0x5921f500, |
1545 | 0x88e7f107, | 1561 | 0x88e7f107, |
1546 | 0x7f21f413, | 1562 | 0x7f21f413, |
1547 | 0xf50137f0, | 1563 | /* 0x08c0: i2c_bitw_out */ |
1548 | 0xf1078621, | 1564 | /* 0x08c2: i2c_bitr */ |
1549 | 0xf41388e7, | 1565 | 0x37f000f8, |
1550 | 0x00f87f21, | 1566 | 0x7b21f501, |
1551 | /* 0x088c: i2c_bitw */ | 1567 | 0xe8e7f107, |
1552 | 0x078621f5, | 1568 | 0x7f21f403, |
1553 | 0x03e8e7f1, | 1569 | 0xb60076bb, |
1554 | 0xbb7f21f4, | 1570 | 0x50f90465, |
1555 | 0x65b60076, | 1571 | 0xbb046594, |
1556 | 0x9450f904, | 1572 | 0x50bd0256, |
1557 | 0x56bb0465, | 1573 | 0xfc0475fd, |
1558 | 0xfd50bd02, | 1574 | 0xcd21f550, |
1559 | 0x50fc0475, | 1575 | 0x0464b607, |
1560 | 0x07d821f5, | 1576 | 0xf51b11f4, |
1561 | 0xf40464b6, | 1577 | 0xf007b521, |
1562 | 0xe7f11811, | 1578 | 0x21f50037, |
1579 | 0xe7f10759, | ||
1563 | 0x21f41388, | 1580 | 0x21f41388, |
1564 | 0x0037f07f, | 1581 | 0x013cf07f, |
1565 | 0x076421f5, | 1582 | /* 0x0907: i2c_bitr_done */ |
1566 | 0x1388e7f1, | 1583 | 0xf80131f4, |
1567 | /* 0x08cb: i2c_bitw_out */ | 1584 | /* 0x0909: i2c_get_byte */ |
1568 | 0xf87f21f4, | 1585 | 0x0057f000, |
1569 | /* 0x08cd: i2c_bitr */ | 1586 | /* 0x090f: i2c_get_byte_next */ |
1570 | 0x0137f000, | 1587 | 0xb60847f0, |
1571 | 0x078621f5, | 1588 | 0x76bb0154, |
1572 | 0x03e8e7f1, | 1589 | 0x0465b600, |
1573 | 0xbb7f21f4, | 1590 | 0x659450f9, |
1574 | 0x65b60076, | 1591 | 0x0256bb04, |
1575 | 0x9450f904, | 1592 | 0x75fd50bd, |
1576 | 0x56bb0465, | 1593 | 0xf550fc04, |
1577 | 0xfd50bd02, | 1594 | 0xb608c221, |
1578 | 0x50fc0475, | 1595 | 0x11f40464, |
1579 | 0x07d821f5, | 1596 | 0x0553fd2b, |
1580 | 0xf40464b6, | 1597 | 0xf40142b6, |
1581 | 0x21f51b11, | 1598 | 0x37f0d81b, |
1582 | 0x37f007c0, | ||
1583 | 0x6421f500, | ||
1584 | 0x88e7f107, | ||
1585 | 0x7f21f413, | ||
1586 | 0xf4013cf0, | ||
1587 | /* 0x0912: i2c_bitr_done */ | ||
1588 | 0x00f80131, | ||
1589 | /* 0x0914: i2c_get_byte */ | ||
1590 | 0xf00057f0, | ||
1591 | /* 0x091a: i2c_get_byte_next */ | ||
1592 | 0x54b60847, | ||
1593 | 0x0076bb01, | 1599 | 0x0076bb01, |
1594 | 0xf90465b6, | 1600 | 0xf90465b6, |
1595 | 0x04659450, | 1601 | 0x04659450, |
1596 | 0xbd0256bb, | 1602 | 0xbd0256bb, |
1597 | 0x0475fd50, | 1603 | 0x0475fd50, |
1598 | 0x21f550fc, | 1604 | 0x21f550fc, |
1599 | 0x64b608cd, | 1605 | 0x64b60881, |
1600 | 0x2b11f404, | 1606 | /* 0x0959: i2c_get_byte_done */ |
1601 | 0xb60553fd, | 1607 | /* 0x095b: i2c_put_byte */ |
1602 | 0x1bf40142, | 1608 | 0xf000f804, |
1603 | 0x0137f0d8, | 1609 | /* 0x095e: i2c_put_byte_next */ |
1610 | 0x42b60847, | ||
1611 | 0x3854ff01, | ||
1604 | 0xb60076bb, | 1612 | 0xb60076bb, |
1605 | 0x50f90465, | 1613 | 0x50f90465, |
1606 | 0xbb046594, | 1614 | 0xbb046594, |
1607 | 0x50bd0256, | 1615 | 0x50bd0256, |
1608 | 0xfc0475fd, | 1616 | 0xfc0475fd, |
1609 | 0x8c21f550, | 1617 | 0x8121f550, |
1610 | 0x0464b608, | 1618 | 0x0464b608, |
1611 | /* 0x0964: i2c_get_byte_done */ | 1619 | 0xb03411f4, |
1612 | /* 0x0966: i2c_put_byte */ | 1620 | 0x1bf40046, |
1613 | 0x47f000f8, | 1621 | 0x0076bbd8, |
1614 | /* 0x0969: i2c_put_byte_next */ | ||
1615 | 0x0142b608, | ||
1616 | 0xbb3854ff, | ||
1617 | 0x65b60076, | ||
1618 | 0x9450f904, | ||
1619 | 0x56bb0465, | ||
1620 | 0xfd50bd02, | ||
1621 | 0x50fc0475, | ||
1622 | 0x088c21f5, | ||
1623 | 0xf40464b6, | ||
1624 | 0x46b03411, | ||
1625 | 0xd81bf400, | ||
1626 | 0xb60076bb, | ||
1627 | 0x50f90465, | ||
1628 | 0xbb046594, | ||
1629 | 0x50bd0256, | ||
1630 | 0xfc0475fd, | ||
1631 | 0xcd21f550, | ||
1632 | 0x0464b608, | ||
1633 | 0xbb0f11f4, | ||
1634 | 0x36b00076, | ||
1635 | 0x061bf401, | ||
1636 | /* 0x09bf: i2c_put_byte_done */ | ||
1637 | 0xf80132f4, | ||
1638 | /* 0x09c1: i2c_addr */ | ||
1639 | 0x0076bb00, | ||
1640 | 0xf90465b6, | 1622 | 0xf90465b6, |
1641 | 0x04659450, | 1623 | 0x04659450, |
1642 | 0xbd0256bb, | 1624 | 0xbd0256bb, |
1643 | 0x0475fd50, | 1625 | 0x0475fd50, |
1644 | 0x21f550fc, | 1626 | 0x21f550fc, |
1645 | 0x64b607fd, | 1627 | 0x64b608c2, |
1646 | 0x2911f404, | 1628 | 0x0f11f404, |
1647 | 0x012ec3e7, | 1629 | 0xb00076bb, |
1648 | 0xfd0134b6, | 1630 | 0x1bf40136, |
1649 | 0x76bb0553, | 1631 | 0x0132f406, |
1632 | /* 0x09b4: i2c_put_byte_done */ | ||
1633 | /* 0x09b6: i2c_addr */ | ||
1634 | 0x76bb00f8, | ||
1650 | 0x0465b600, | 1635 | 0x0465b600, |
1651 | 0x659450f9, | 1636 | 0x659450f9, |
1652 | 0x0256bb04, | 1637 | 0x0256bb04, |
1653 | 0x75fd50bd, | 1638 | 0x75fd50bd, |
1654 | 0xf550fc04, | 1639 | 0xf550fc04, |
1655 | 0xb6096621, | 1640 | 0xb607f221, |
1656 | /* 0x0a06: i2c_addr_done */ | 1641 | 0x11f40464, |
1657 | 0x00f80464, | 1642 | 0x2ec3e729, |
1658 | /* 0x0a08: i2c_acquire_addr */ | 1643 | 0x0134b601, |
1659 | 0xb6f8cec7, | 1644 | 0xbb0553fd, |
1660 | 0xe0b702e4, | ||
1661 | 0xee980d1c, | ||
1662 | /* 0x0a17: i2c_acquire */ | ||
1663 | 0xf500f800, | ||
1664 | 0xf40a0821, | ||
1665 | 0xd9f00421, | ||
1666 | 0x3f21f403, | ||
1667 | /* 0x0a26: i2c_release */ | ||
1668 | 0x21f500f8, | ||
1669 | 0x21f40a08, | ||
1670 | 0x03daf004, | ||
1671 | 0xf83f21f4, | ||
1672 | /* 0x0a35: i2c_recv */ | ||
1673 | 0x0132f400, | ||
1674 | 0xb6f8c1c7, | ||
1675 | 0x16b00214, | ||
1676 | 0x3a1ff528, | ||
1677 | 0xf413a001, | ||
1678 | 0x0032980c, | ||
1679 | 0x0ccc13a0, | ||
1680 | 0xf4003198, | ||
1681 | 0xd0f90231, | ||
1682 | 0xd0f9e0f9, | ||
1683 | 0x000067f1, | ||
1684 | 0x100063f1, | ||
1685 | 0xbb016792, | ||
1686 | 0x65b60076, | 1645 | 0x65b60076, |
1687 | 0x9450f904, | 1646 | 0x9450f904, |
1688 | 0x56bb0465, | 1647 | 0x56bb0465, |
1689 | 0xfd50bd02, | 1648 | 0xfd50bd02, |
1690 | 0x50fc0475, | 1649 | 0x50fc0475, |
1691 | 0x0a1721f5, | 1650 | 0x095b21f5, |
1692 | 0xfc0464b6, | 1651 | /* 0x09fb: i2c_addr_done */ |
1693 | 0x00d6b0d0, | 1652 | 0xf80464b6, |
1694 | 0x00b31bf5, | 1653 | /* 0x09fd: i2c_acquire_addr */ |
1695 | 0xbb0057f0, | 1654 | 0xf8cec700, |
1655 | 0xb702e4b6, | ||
1656 | 0x980d1ce0, | ||
1657 | 0x00f800ee, | ||
1658 | /* 0x0a0c: i2c_acquire */ | ||
1659 | 0x09fd21f5, | ||
1660 | 0xf00421f4, | ||
1661 | 0x21f403d9, | ||
1662 | /* 0x0a1b: i2c_release */ | ||
1663 | 0xf500f83f, | ||
1664 | 0xf409fd21, | ||
1665 | 0xdaf00421, | ||
1666 | 0x3f21f403, | ||
1667 | /* 0x0a2a: i2c_recv */ | ||
1668 | 0x32f400f8, | ||
1669 | 0xf8c1c701, | ||
1670 | 0xb00214b6, | ||
1671 | 0x1ff52816, | ||
1672 | 0x13a0013a, | ||
1673 | 0x32980cf4, | ||
1674 | 0xcc13a000, | ||
1675 | 0x0031980c, | ||
1676 | 0xf90231f4, | ||
1677 | 0xf9e0f9d0, | ||
1678 | 0x0067f1d0, | ||
1679 | 0x0063f100, | ||
1680 | 0x01679210, | ||
1681 | 0xb60076bb, | ||
1682 | 0x50f90465, | ||
1683 | 0xbb046594, | ||
1684 | 0x50bd0256, | ||
1685 | 0xfc0475fd, | ||
1686 | 0x0c21f550, | ||
1687 | 0x0464b60a, | ||
1688 | 0xd6b0d0fc, | ||
1689 | 0xb31bf500, | ||
1690 | 0x0057f000, | ||
1691 | 0xb60076bb, | ||
1692 | 0x50f90465, | ||
1693 | 0xbb046594, | ||
1694 | 0x50bd0256, | ||
1695 | 0xfc0475fd, | ||
1696 | 0xb621f550, | ||
1697 | 0x0464b609, | ||
1698 | 0x00d011f5, | ||
1699 | 0xbbe0c5c7, | ||
1696 | 0x65b60076, | 1700 | 0x65b60076, |
1697 | 0x9450f904, | 1701 | 0x9450f904, |
1698 | 0x56bb0465, | 1702 | 0x56bb0465, |
1699 | 0xfd50bd02, | 1703 | 0xfd50bd02, |
1700 | 0x50fc0475, | 1704 | 0x50fc0475, |
1701 | 0x09c121f5, | 1705 | 0x095b21f5, |
1702 | 0xf50464b6, | 1706 | 0xf50464b6, |
1703 | 0xc700d011, | 1707 | 0xf000ad11, |
1704 | 0x76bbe0c5, | 1708 | 0x76bb0157, |
1705 | 0x0465b600, | 1709 | 0x0465b600, |
1706 | 0x659450f9, | 1710 | 0x659450f9, |
1707 | 0x0256bb04, | 1711 | 0x0256bb04, |
1708 | 0x75fd50bd, | 1712 | 0x75fd50bd, |
1709 | 0xf550fc04, | 1713 | 0xf550fc04, |
1710 | 0xb6096621, | 1714 | 0xb609b621, |
1711 | 0x11f50464, | 1715 | 0x11f50464, |
1712 | 0x57f000ad, | 1716 | 0x76bb008a, |
1713 | 0x0076bb01, | 1717 | 0x0465b600, |
1714 | 0xf90465b6, | 1718 | 0x659450f9, |
1715 | 0x04659450, | 1719 | 0x0256bb04, |
1716 | 0xbd0256bb, | 1720 | 0x75fd50bd, |
1717 | 0x0475fd50, | 1721 | 0xf550fc04, |
1718 | 0x21f550fc, | 1722 | 0xb6090921, |
1719 | 0x64b609c1, | 1723 | 0x11f40464, |
1720 | 0x8a11f504, | 1724 | 0xe05bcb6a, |
1721 | 0x0076bb00, | 1725 | 0xb60076bb, |
1722 | 0xf90465b6, | 1726 | 0x50f90465, |
1723 | 0x04659450, | 1727 | 0xbb046594, |
1724 | 0xbd0256bb, | 1728 | 0x50bd0256, |
1725 | 0x0475fd50, | 1729 | 0xfc0475fd, |
1726 | 0x21f550fc, | 1730 | 0x4e21f550, |
1727 | 0x64b60914, | 1731 | 0x0464b608, |
1728 | 0x6a11f404, | 1732 | 0xbd025bb9, |
1729 | 0xbbe05bcb, | 1733 | 0x430ef474, |
1730 | 0x65b60076, | 1734 | /* 0x0b30: i2c_recv_not_rd08 */ |
1731 | 0x9450f904, | 1735 | 0xf401d6b0, |
1732 | 0x56bb0465, | 1736 | 0x57f03d1b, |
1733 | 0xfd50bd02, | 1737 | 0xb621f500, |
1734 | 0x50fc0475, | 1738 | 0x3311f409, |
1735 | 0x085921f5, | 1739 | 0xf5e0c5c7, |
1736 | 0xb90464b6, | 1740 | 0xf4095b21, |
1737 | 0x74bd025b, | 1741 | 0x57f02911, |
1738 | /* 0x0b3b: i2c_recv_not_rd08 */ | 1742 | 0xb621f500, |
1739 | 0xb0430ef4, | 1743 | 0x1f11f409, |
1740 | 0x1bf401d6, | 1744 | 0xf5e0b5c7, |
1741 | 0x0057f03d, | 1745 | 0xf4095b21, |
1742 | 0x09c121f5, | 1746 | 0x21f51511, |
1743 | 0xc73311f4, | 1747 | 0x74bd084e, |
1744 | 0x21f5e0c5, | 1748 | 0xf408c5c7, |
1745 | 0x11f40966, | 1749 | 0x32f4091b, |
1746 | 0x0057f029, | 1750 | 0x030ef402, |
1747 | 0x09c121f5, | 1751 | /* 0x0b70: i2c_recv_not_wr08 */ |
1748 | 0xc71f11f4, | 1752 | /* 0x0b70: i2c_recv_done */ |
1749 | 0x21f5e0b5, | 1753 | 0xf5f8cec7, |
1750 | 0x11f40966, | 1754 | 0xfc0a1b21, |
1751 | 0x5921f515, | 1755 | 0xf4d0fce0, |
1752 | 0xc774bd08, | 1756 | 0x7cb90a12, |
1753 | 0x1bf408c5, | 1757 | 0x3721f502, |
1754 | 0x0232f409, | 1758 | /* 0x0b85: i2c_recv_exit */ |
1755 | /* 0x0b7b: i2c_recv_not_wr08 */ | 1759 | /* 0x0b87: i2c_init */ |
1756 | /* 0x0b7b: i2c_recv_done */ | 1760 | 0xf800f803, |
1757 | 0xc7030ef4, | 1761 | /* 0x0b89: test_recv */ |
1758 | 0x21f5f8ce, | 1762 | 0xd817f100, |
1759 | 0xe0fc0a26, | 1763 | 0x0614b605, |
1760 | 0x12f4d0fc, | 1764 | 0xb60011cf, |
1761 | 0x027cb90a, | 1765 | 0x07f10110, |
1762 | 0x034221f5, | 1766 | 0x04b605d8, |
1763 | /* 0x0b90: i2c_recv_exit */ | 1767 | 0x0001d006, |
1764 | /* 0x0b92: i2c_init */ | 1768 | 0xe7f104bd, |
1769 | 0xe3f1d900, | ||
1770 | 0x21f5134f, | ||
1771 | 0x00f80257, | ||
1772 | /* 0x0bb0: test_init */ | ||
1773 | 0x0800e7f1, | ||
1774 | 0x025721f5, | ||
1775 | /* 0x0bba: idle_recv */ | ||
1765 | 0x00f800f8, | 1776 | 0x00f800f8, |
1766 | /* 0x0b94: test_recv */ | 1777 | /* 0x0bbc: idle */ |
1767 | 0x05d817f1, | 1778 | 0xf10031f4, |
1768 | 0xcf0614b6, | 1779 | 0xb605d417, |
1769 | 0x10b60011, | 1780 | 0x11cf0614, |
1770 | 0xd807f101, | 1781 | 0x0110b600, |
1771 | 0x0604b605, | 1782 | 0x05d407f1, |
1772 | 0xbd0001d0, | 1783 | 0xd00604b6, |
1773 | 0x00e7f104, | 1784 | 0x04bd0001, |
1774 | 0x4fe3f1d9, | 1785 | /* 0x0bd8: idle_loop */ |
1775 | 0x6221f513, | 1786 | 0xf45817f0, |
1776 | /* 0x0bbb: test_init */ | 1787 | /* 0x0bde: idle_proc */ |
1777 | 0xf100f802, | 1788 | /* 0x0bde: idle_proc_exec */ |
1778 | 0xf50800e7, | 1789 | 0x10f90232, |
1779 | 0xf8026221, | 1790 | 0xf5021eb9, |
1780 | /* 0x0bc5: idle_recv */ | 1791 | 0xfc034021, |
1781 | /* 0x0bc7: idle */ | 1792 | 0x0911f410, |
1782 | 0xf400f800, | 1793 | 0xf40231f4, |
1783 | 0x17f10031, | 1794 | /* 0x0bf2: idle_proc_next */ |
1784 | 0x14b605d4, | 1795 | 0x10b6ef0e, |
1785 | 0x0011cf06, | 1796 | 0x061fb858, |
1786 | 0xf10110b6, | 1797 | 0xf4e61bf4, |
1787 | 0xb605d407, | 1798 | 0x28f4dd02, |
1788 | 0x01d00604, | 1799 | 0xbb0ef400, |
1789 | /* 0x0be3: idle_loop */ | 1800 | 0x00000000, |
1790 | 0xf004bd00, | 1801 | 0x00000000, |
1791 | 0x32f45817, | 1802 | 0x00000000, |
1792 | /* 0x0be9: idle_proc */ | ||
1793 | /* 0x0be9: idle_proc_exec */ | ||
1794 | 0xb910f902, | ||
1795 | 0x21f5021e, | ||
1796 | 0x10fc034b, | ||
1797 | 0xf40911f4, | ||
1798 | 0x0ef40231, | ||
1799 | /* 0x0bfd: idle_proc_next */ | ||
1800 | 0x5810b6ef, | ||
1801 | 0xf4061fb8, | ||
1802 | 0x02f4e61b, | ||
1803 | 0x0028f4dd, | ||
1804 | 0x00bb0ef4, | ||
1805 | 0x00000000, | 1803 | 0x00000000, |
1806 | 0x00000000, | 1804 | 0x00000000, |
1807 | 0x00000000, | 1805 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h index 31552af9b06e..7bf6b39ed205 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gf119.fuc4.h | |||
@@ -24,8 +24,8 @@ uint32_t gf119_pmu_data[] = { | |||
24 | 0x00000000, | 24 | 0x00000000, |
25 | /* 0x0058: proc_list_head */ | 25 | /* 0x0058: proc_list_head */ |
26 | 0x54534f48, | 26 | 0x54534f48, |
27 | 0x0000049d, | 27 | 0x00000492, |
28 | 0x00000446, | 28 | 0x0000043b, |
29 | 0x00000000, | 29 | 0x00000000, |
30 | 0x00000000, | 30 | 0x00000000, |
31 | 0x00000000, | 31 | 0x00000000, |
@@ -46,8 +46,8 @@ uint32_t gf119_pmu_data[] = { | |||
46 | 0x00000000, | 46 | 0x00000000, |
47 | 0x00000000, | 47 | 0x00000000, |
48 | 0x584d454d, | 48 | 0x584d454d, |
49 | 0x0000068b, | 49 | 0x00000680, |
50 | 0x0000067d, | 50 | 0x00000672, |
51 | 0x00000000, | 51 | 0x00000000, |
52 | 0x00000000, | 52 | 0x00000000, |
53 | 0x00000000, | 53 | 0x00000000, |
@@ -68,8 +68,8 @@ uint32_t gf119_pmu_data[] = { | |||
68 | 0x00000000, | 68 | 0x00000000, |
69 | 0x00000000, | 69 | 0x00000000, |
70 | 0x46524550, | 70 | 0x46524550, |
71 | 0x0000068f, | 71 | 0x00000684, |
72 | 0x0000068d, | 72 | 0x00000682, |
73 | 0x00000000, | 73 | 0x00000000, |
74 | 0x00000000, | 74 | 0x00000000, |
75 | 0x00000000, | 75 | 0x00000000, |
@@ -90,8 +90,8 @@ uint32_t gf119_pmu_data[] = { | |||
90 | 0x00000000, | 90 | 0x00000000, |
91 | 0x00000000, | 91 | 0x00000000, |
92 | 0x5f433249, | 92 | 0x5f433249, |
93 | 0x00000aaa, | 93 | 0x00000a9f, |
94 | 0x0000094d, | 94 | 0x00000942, |
95 | 0x00000000, | 95 | 0x00000000, |
96 | 0x00000000, | 96 | 0x00000000, |
97 | 0x00000000, | 97 | 0x00000000, |
@@ -112,8 +112,8 @@ uint32_t gf119_pmu_data[] = { | |||
112 | 0x00000000, | 112 | 0x00000000, |
113 | 0x00000000, | 113 | 0x00000000, |
114 | 0x54534554, | 114 | 0x54534554, |
115 | 0x00000acd, | 115 | 0x00000ac2, |
116 | 0x00000aac, | 116 | 0x00000aa1, |
117 | 0x00000000, | 117 | 0x00000000, |
118 | 0x00000000, | 118 | 0x00000000, |
119 | 0x00000000, | 119 | 0x00000000, |
@@ -134,8 +134,8 @@ uint32_t gf119_pmu_data[] = { | |||
134 | 0x00000000, | 134 | 0x00000000, |
135 | 0x00000000, | 135 | 0x00000000, |
136 | 0x454c4449, | 136 | 0x454c4449, |
137 | 0x00000ad9, | 137 | 0x00000ace, |
138 | 0x00000ad7, | 138 | 0x00000acc, |
139 | 0x00000000, | 139 | 0x00000000, |
140 | 0x00000000, | 140 | 0x00000000, |
141 | 0x00000000, | 141 | 0x00000000, |
@@ -229,26 +229,26 @@ uint32_t gf119_pmu_data[] = { | |||
229 | /* 0x0370: memx_func_head */ | 229 | /* 0x0370: memx_func_head */ |
230 | 0x00000001, | 230 | 0x00000001, |
231 | 0x00000000, | 231 | 0x00000000, |
232 | 0x000004d3, | 232 | 0x000004c8, |
233 | /* 0x037c: memx_func_next */ | 233 | /* 0x037c: memx_func_next */ |
234 | 0x00000002, | 234 | 0x00000002, |
235 | 0x00000000, | 235 | 0x00000000, |
236 | 0x00000554, | 236 | 0x00000549, |
237 | 0x00000003, | 237 | 0x00000003, |
238 | 0x00000002, | 238 | 0x00000002, |
239 | 0x000005d8, | 239 | 0x000005cd, |
240 | 0x00040004, | 240 | 0x00040004, |
241 | 0x00000000, | 241 | 0x00000000, |
242 | 0x000005f4, | 242 | 0x000005e9, |
243 | 0x00010005, | 243 | 0x00010005, |
244 | 0x00000000, | 244 | 0x00000000, |
245 | 0x0000060e, | 245 | 0x00000603, |
246 | 0x00010006, | 246 | 0x00010006, |
247 | 0x00000000, | 247 | 0x00000000, |
248 | 0x000005d3, | 248 | 0x000005c8, |
249 | 0x00000007, | 249 | 0x00000007, |
250 | 0x00000000, | 250 | 0x00000000, |
251 | 0x00000619, | 251 | 0x0000060e, |
252 | /* 0x03c4: memx_func_tail */ | 252 | /* 0x03c4: memx_func_tail */ |
253 | /* 0x03c4: memx_ts_start */ | 253 | /* 0x03c4: memx_ts_start */ |
254 | 0x00000000, | 254 | 0x00000000, |
@@ -916,7 +916,7 @@ uint32_t gf119_pmu_data[] = { | |||
916 | }; | 916 | }; |
917 | 917 | ||
918 | uint32_t gf119_pmu_code[] = { | 918 | uint32_t gf119_pmu_code[] = { |
919 | 0x034d0ef5, | 919 | 0x03420ef5, |
920 | /* 0x0004: rd32 */ | 920 | /* 0x0004: rd32 */ |
921 | 0x07a007f1, | 921 | 0x07a007f1, |
922 | 0xbd000ed0, | 922 | 0xbd000ed0, |
@@ -977,7 +977,7 @@ uint32_t gf119_pmu_code[] = { | |||
977 | 0xbb9a0a98, | 977 | 0xbb9a0a98, |
978 | 0x1cf4029a, | 978 | 0x1cf4029a, |
979 | 0x01d7f00f, | 979 | 0x01d7f00f, |
980 | 0x028c21f5, | 980 | 0x028121f5, |
981 | 0x0ef494bd, | 981 | 0x0ef494bd, |
982 | /* 0x00d5: intr_watchdog_next_time */ | 982 | /* 0x00d5: intr_watchdog_next_time */ |
983 | 0x9b0a9815, | 983 | 0x9b0a9815, |
@@ -1025,716 +1025,714 @@ uint32_t gf119_pmu_code[] = { | |||
1025 | 0xf14f48e7, | 1025 | 0xf14f48e7, |
1026 | 0xf05453e3, | 1026 | 0xf05453e3, |
1027 | 0x21f500d7, | 1027 | 0x21f500d7, |
1028 | 0xc0fc02f1, | 1028 | 0xc0fc02e6, |
1029 | 0x04c007f1, | 1029 | 0x04c007f1, |
1030 | 0xbd000cd0, | 1030 | 0xbd000cd0, |
1031 | /* 0x0185: intr_subintr_skip_fifo */ | 1031 | /* 0x0185: intr_subintr_skip_fifo */ |
1032 | 0x8807f104, | 1032 | 0x8807f104, |
1033 | 0x0009d006, | 1033 | 0x0009d006, |
1034 | /* 0x018e: intr_skip_subintr */ | 1034 | /* 0x018e: intr_skip_subintr */ |
1035 | 0x89c404bd, | 1035 | 0x97f104bd, |
1036 | 0x070bf420, | 1036 | 0x90bd00e0, |
1037 | 0xffbfa4f1, | 1037 | 0xf00489fd, |
1038 | /* 0x0198: intr_skip_pause */ | 1038 | 0x08d00407, |
1039 | 0xf44089c4, | 1039 | 0xfc04bd00, |
1040 | 0xa4f1070b, | 1040 | 0x0088fe80, |
1041 | /* 0x01a2: intr_skip_user0 */ | 1041 | 0xe0fcf0fc, |
1042 | 0x07f0ffbf, | 1042 | 0xc0fcd0fc, |
1043 | 0x0008d004, | 1043 | 0xa0fcb0fc, |
1044 | 0x80fc04bd, | 1044 | 0x80fc90fc, |
1045 | 0xfc0088fe, | 1045 | 0x32f400fc, |
1046 | 0xfce0fcf0, | 1046 | /* 0x01bb: ticks_from_ns */ |
1047 | 0xfcc0fcd0, | 1047 | 0xf901f800, |
1048 | 0xfca0fcb0, | ||
1049 | 0xfc80fc90, | ||
1050 | 0x0032f400, | ||
1051 | /* 0x01c6: ticks_from_ns */ | ||
1052 | 0xc0f901f8, | ||
1053 | 0xd7f1b0f9, | ||
1054 | 0xd3f00144, | ||
1055 | 0xb321f500, | ||
1056 | 0xe8ccec03, | ||
1057 | 0x00b4b003, | ||
1058 | 0xec120bf4, | ||
1059 | 0xf103e8ee, | ||
1060 | 0xf00144d7, | ||
1061 | 0x21f500d3, | ||
1062 | /* 0x01ee: ticks_from_ns_quit */ | ||
1063 | 0xceb903b3, | ||
1064 | 0xfcb0fc02, | ||
1065 | /* 0x01f7: ticks_from_us */ | ||
1066 | 0xf900f8c0, | ||
1067 | 0xf1b0f9c0, | 1048 | 0xf1b0f9c0, |
1068 | 0xf00144d7, | 1049 | 0xf00144d7, |
1069 | 0x21f500d3, | 1050 | 0x21f500d3, |
1070 | 0xceb903b3, | 1051 | 0xccec03a8, |
1071 | 0x00b4b002, | 1052 | 0xb4b003e8, |
1072 | 0xbd050bf4, | 1053 | 0x120bf400, |
1073 | /* 0x0211: ticks_from_us_quit */ | 1054 | 0x03e8eeec, |
1074 | 0xfcb0fce4, | 1055 | 0x0144d7f1, |
1075 | /* 0x0217: ticks_to_us */ | 1056 | 0xf500d3f0, |
1076 | 0xf100f8c0, | 1057 | /* 0x01e3: ticks_from_ns_quit */ |
1077 | 0xf00144d7, | 1058 | 0xb903a821, |
1078 | 0xedff00d3, | 1059 | 0xb0fc02ce, |
1079 | /* 0x0223: timer */ | 1060 | 0x00f8c0fc, |
1080 | 0xf900f8ec, | 1061 | /* 0x01ec: ticks_from_us */ |
1081 | 0xf480f990, | 1062 | 0xb0f9c0f9, |
1082 | 0xf8981032, | 1063 | 0x0144d7f1, |
1083 | 0x0086b003, | 1064 | 0xf500d3f0, |
1084 | 0xbd531cf4, | 1065 | 0xb903a821, |
1085 | 0x3807f084, | 1066 | 0xb4b002ce, |
1086 | 0xbd0008d0, | 1067 | 0x050bf400, |
1087 | 0x3487f004, | 1068 | /* 0x0206: ticks_from_us_quit */ |
1088 | 0x980088cf, | 1069 | 0xb0fce4bd, |
1089 | 0x98bb9a09, | 1070 | 0x00f8c0fc, |
1090 | 0x00e9bb02, | 1071 | /* 0x020c: ticks_to_us */ |
1091 | 0xf003fe80, | 1072 | 0x0144d7f1, |
1092 | 0x88cf0887, | 1073 | 0xff00d3f0, |
1093 | 0x0284f000, | 1074 | 0x00f8eced, |
1094 | 0xf0201bf4, | 1075 | /* 0x0218: timer */ |
1095 | 0x88cf3487, | 1076 | 0x80f990f9, |
1096 | 0x06e0b800, | 1077 | 0x981032f4, |
1097 | 0xb8090bf4, | 1078 | 0x86b003f8, |
1098 | 0x1cf406e8, | 1079 | 0x531cf400, |
1099 | /* 0x026d: timer_reset */ | 1080 | 0x07f084bd, |
1100 | 0x3407f00e, | 1081 | 0x0008d038, |
1101 | 0xbd000ed0, | 1082 | 0x87f004bd, |
1102 | 0x9a0e8004, | 1083 | 0x0088cf34, |
1103 | /* 0x0278: timer_enable */ | 1084 | 0xbb9a0998, |
1104 | 0xf00187f0, | 1085 | 0xe9bb0298, |
1105 | 0x08d03807, | 1086 | 0x03fe8000, |
1106 | /* 0x0283: timer_done */ | 1087 | 0xcf0887f0, |
1107 | 0xf404bd00, | 1088 | 0x84f00088, |
1108 | 0x80fc1031, | 1089 | 0x201bf402, |
1109 | 0x00f890fc, | 1090 | 0xcf3487f0, |
1110 | /* 0x028c: send_proc */ | 1091 | 0xe0b80088, |
1111 | 0x90f980f9, | 1092 | 0x090bf406, |
1112 | 0x9805e898, | 1093 | 0xf406e8b8, |
1113 | 0x86f004e9, | 1094 | /* 0x0262: timer_reset */ |
1114 | 0x0689b804, | 1095 | 0x07f00e1c, |
1115 | 0xc42a0bf4, | 1096 | 0x000ed034, |
1116 | 0x88940398, | 1097 | 0x0e8004bd, |
1117 | 0x1880b604, | 1098 | /* 0x026d: timer_enable */ |
1118 | 0x98008ebb, | 1099 | 0x0187f09a, |
1119 | 0x8a8000fa, | 1100 | 0xd03807f0, |
1120 | 0x018d8000, | 1101 | 0x04bd0008, |
1121 | 0x80028c80, | 1102 | /* 0x0278: timer_done */ |
1122 | 0x90b6038b, | 1103 | 0xfc1031f4, |
1123 | 0x0794f001, | ||
1124 | 0xf404e980, | ||
1125 | /* 0x02c6: send_done */ | ||
1126 | 0x90fc0231, | ||
1127 | 0x00f880fc, | ||
1128 | /* 0x02cc: find */ | ||
1129 | 0x87f080f9, | ||
1130 | 0x0131f458, | ||
1131 | /* 0x02d4: find_loop */ | ||
1132 | 0xb8008a98, | ||
1133 | 0x0bf406ae, | ||
1134 | 0x5880b610, | ||
1135 | 0x026886b1, | ||
1136 | 0xf4f01bf4, | ||
1137 | /* 0x02ea: find_done */ | ||
1138 | 0x8eb90132, | ||
1139 | 0xf880fc02, | ||
1140 | /* 0x02f1: send */ | ||
1141 | 0xcc21f500, | ||
1142 | 0x9701f402, | ||
1143 | /* 0x02fa: recv */ | ||
1144 | 0x90f900f8, | ||
1145 | 0xe89880f9, | ||
1146 | 0x04e99805, | ||
1147 | 0xb80132f4, | ||
1148 | 0x0bf40689, | ||
1149 | 0x0389c43d, | ||
1150 | 0xf00180b6, | ||
1151 | 0xe8800784, | ||
1152 | 0x02ea9805, | ||
1153 | 0x8ffef0f9, | ||
1154 | 0xb9f0f901, | ||
1155 | 0x999402ef, | ||
1156 | 0x00e9bb04, | ||
1157 | 0x9818e0b6, | ||
1158 | 0xec9803eb, | ||
1159 | 0x01ed9802, | ||
1160 | 0xf900ee98, | ||
1161 | 0xfef0fca5, | ||
1162 | 0x31f400f8, | ||
1163 | /* 0x0347: recv_done */ | ||
1164 | 0xfcf0fc01, | ||
1165 | 0xf890fc80, | 1104 | 0xf890fc80, |
1166 | /* 0x034d: init */ | 1105 | /* 0x0281: send_proc */ |
1167 | 0x0817f100, | 1106 | 0xf980f900, |
1168 | 0x0011cf01, | 1107 | 0x05e89890, |
1169 | 0x010911e7, | 1108 | 0xf004e998, |
1170 | 0xfe0814b6, | 1109 | 0x89b80486, |
1171 | 0x17f10014, | 1110 | 0x2a0bf406, |
1172 | 0x13f000e0, | 1111 | 0x940398c4, |
1173 | 0x1c07f000, | 1112 | 0x80b60488, |
1113 | 0x008ebb18, | ||
1114 | 0x8000fa98, | ||
1115 | 0x8d80008a, | ||
1116 | 0x028c8001, | ||
1117 | 0xb6038b80, | ||
1118 | 0x94f00190, | ||
1119 | 0x04e98007, | ||
1120 | /* 0x02bb: send_done */ | ||
1121 | 0xfc0231f4, | ||
1122 | 0xf880fc90, | ||
1123 | /* 0x02c1: find */ | ||
1124 | 0xf080f900, | ||
1125 | 0x31f45887, | ||
1126 | /* 0x02c9: find_loop */ | ||
1127 | 0x008a9801, | ||
1128 | 0xf406aeb8, | ||
1129 | 0x80b6100b, | ||
1130 | 0x6886b158, | ||
1131 | 0xf01bf402, | ||
1132 | /* 0x02df: find_done */ | ||
1133 | 0xb90132f4, | ||
1134 | 0x80fc028e, | ||
1135 | /* 0x02e6: send */ | ||
1136 | 0x21f500f8, | ||
1137 | 0x01f402c1, | ||
1138 | /* 0x02ef: recv */ | ||
1139 | 0xf900f897, | ||
1140 | 0x9880f990, | ||
1141 | 0xe99805e8, | ||
1142 | 0x0132f404, | ||
1143 | 0xf40689b8, | ||
1144 | 0x89c43d0b, | ||
1145 | 0x0180b603, | ||
1146 | 0x800784f0, | ||
1147 | 0xea9805e8, | ||
1148 | 0xfef0f902, | ||
1149 | 0xf0f9018f, | ||
1150 | 0x9402efb9, | ||
1151 | 0xe9bb0499, | ||
1152 | 0x18e0b600, | ||
1153 | 0x9803eb98, | ||
1154 | 0xed9802ec, | ||
1155 | 0x00ee9801, | ||
1156 | 0xf0fca5f9, | ||
1157 | 0xf400f8fe, | ||
1158 | 0xf0fc0131, | ||
1159 | /* 0x033c: recv_done */ | ||
1160 | 0x90fc80fc, | ||
1161 | /* 0x0342: init */ | ||
1162 | 0x17f100f8, | ||
1163 | 0x11cf0108, | ||
1164 | 0x0911e700, | ||
1165 | 0x0814b601, | ||
1166 | 0xf10014fe, | ||
1167 | 0xf000e017, | ||
1168 | 0x07f00013, | ||
1169 | 0x0001d01c, | ||
1170 | 0x17f004bd, | ||
1171 | 0x1407f0ff, | ||
1174 | 0xbd0001d0, | 1172 | 0xbd0001d0, |
1175 | 0xff17f004, | 1173 | 0x0217f004, |
1176 | 0xd01407f0, | 1174 | 0x080015f1, |
1175 | 0xd01007f0, | ||
1177 | 0x04bd0001, | 1176 | 0x04bd0001, |
1178 | 0xf10217f0, | 1177 | 0x00f617f1, |
1179 | 0xf0080015, | 1178 | 0xfe0013f0, |
1180 | 0x01d01007, | 1179 | 0x31f40010, |
1181 | 0xf104bd00, | 1180 | 0x0117f010, |
1182 | 0xf000f617, | 1181 | 0xd03807f0, |
1183 | 0x10fe0013, | 1182 | 0x04bd0001, |
1184 | 0x1031f400, | 1183 | /* 0x0397: init_proc */ |
1185 | 0xf00117f0, | 1184 | 0x9858f7f0, |
1186 | 0x01d03807, | 1185 | 0x16b001f1, |
1187 | 0xf004bd00, | 1186 | 0xfa0bf400, |
1188 | /* 0x03a2: init_proc */ | 1187 | 0xf0b615f9, |
1189 | 0xf19858f7, | 1188 | 0xf20ef458, |
1190 | 0x0016b001, | 1189 | /* 0x03a8: mulu32_32_64 */ |
1191 | 0xf9fa0bf4, | 1190 | 0x20f910f9, |
1192 | 0x58f0b615, | 1191 | 0x40f930f9, |
1193 | /* 0x03b3: mulu32_32_64 */ | 1192 | 0x9510e195, |
1194 | 0xf9f20ef4, | 1193 | 0xc4bd10d2, |
1195 | 0xf920f910, | 1194 | 0xedffb4bd, |
1196 | 0x9540f930, | 1195 | 0x301dffc0, |
1197 | 0xd29510e1, | 1196 | 0xf10234b9, |
1198 | 0xbdc4bd10, | 1197 | 0xb6ffff34, |
1199 | 0xc0edffb4, | 1198 | 0x45b61034, |
1200 | 0xb9301dff, | 1199 | 0x00c3bb10, |
1201 | 0x34f10234, | 1200 | 0xff01b4bb, |
1202 | 0x34b6ffff, | 1201 | 0x34b930e2, |
1203 | 0x1045b610, | 1202 | 0xff34f102, |
1204 | 0xbb00c3bb, | 1203 | 0x1034b6ff, |
1205 | 0xe2ff01b4, | 1204 | 0xbb1045b6, |
1206 | 0x0234b930, | 1205 | 0xb4bb00c3, |
1207 | 0xffff34f1, | 1206 | 0x3012ff01, |
1208 | 0xb61034b6, | 1207 | 0xfc00b3bb, |
1209 | 0xc3bb1045, | 1208 | 0xfc30fc40, |
1210 | 0x01b4bb00, | 1209 | 0xf810fc20, |
1211 | 0xbb3012ff, | 1210 | /* 0x03f9: host_send */ |
1212 | 0x40fc00b3, | 1211 | 0xb017f100, |
1213 | 0x20fc30fc, | 1212 | 0x0011cf04, |
1214 | 0x00f810fc, | 1213 | 0x04a027f1, |
1215 | /* 0x0404: host_send */ | 1214 | 0xb80022cf, |
1216 | 0x04b017f1, | 1215 | 0x0bf40612, |
1217 | 0xf10011cf, | 1216 | 0x071ec42f, |
1218 | 0xcf04a027, | 1217 | 0xb704ee94, |
1219 | 0x12b80022, | 1218 | 0x980270e0, |
1220 | 0x2f0bf406, | 1219 | 0xec9803eb, |
1221 | 0x94071ec4, | 1220 | 0x01ed9802, |
1222 | 0xe0b704ee, | 1221 | 0xf500ee98, |
1223 | 0xeb980270, | 1222 | 0xb602e621, |
1224 | 0x02ec9803, | 1223 | 0x1ec40110, |
1225 | 0x9801ed98, | 1224 | 0xb007f10f, |
1226 | 0x21f500ee, | 1225 | 0x000ed004, |
1227 | 0x10b602f1, | 1226 | 0x0ef404bd, |
1228 | 0x0f1ec401, | 1227 | /* 0x0439: host_send_done */ |
1229 | 0x04b007f1, | 1228 | /* 0x043b: host_recv */ |
1230 | 0xbd000ed0, | 1229 | 0xf100f8c3, |
1231 | 0xc30ef404, | 1230 | 0xf14e4917, |
1232 | /* 0x0444: host_send_done */ | 1231 | 0xb8525413, |
1233 | /* 0x0446: host_recv */ | 1232 | 0x0bf406e1, |
1234 | 0x17f100f8, | 1233 | /* 0x0449: host_recv_wait */ |
1235 | 0x13f14e49, | 1234 | 0xcc17f1b3, |
1236 | 0xe1b85254, | 1235 | 0x0011cf04, |
1237 | 0xb30bf406, | 1236 | 0x04c827f1, |
1238 | /* 0x0454: host_recv_wait */ | 1237 | 0xf00022cf, |
1239 | 0x04cc17f1, | 1238 | 0x12b80816, |
1240 | 0xf10011cf, | 1239 | 0xec0bf406, |
1241 | 0xcf04c827, | 1240 | 0xb60723c4, |
1242 | 0x16f00022, | 1241 | 0x30b70434, |
1243 | 0x0612b808, | 1242 | 0x3b8002f0, |
1244 | 0xc4ec0bf4, | 1243 | 0x023c8003, |
1245 | 0x34b60723, | 1244 | 0x80013d80, |
1246 | 0xf030b704, | 1245 | 0x20b6003e, |
1247 | 0x033b8002, | 1246 | 0x0f24f001, |
1248 | 0x80023c80, | 1247 | 0x04c807f1, |
1249 | 0x3e80013d, | 1248 | 0xbd0002d0, |
1250 | 0x0120b600, | 1249 | 0x4027f004, |
1251 | 0xf10f24f0, | 1250 | 0xd00007f0, |
1252 | 0xd004c807, | ||
1253 | 0x04bd0002, | 1251 | 0x04bd0002, |
1254 | 0xf04027f0, | 1252 | /* 0x0492: host_init */ |
1255 | 0x02d00007, | 1253 | 0x17f100f8, |
1256 | 0xf804bd00, | 1254 | 0x14b60080, |
1257 | /* 0x049d: host_init */ | 1255 | 0x7015f110, |
1258 | 0x8017f100, | 1256 | 0xd007f102, |
1259 | 0x1014b600, | 1257 | 0x0001d004, |
1260 | 0x027015f1, | 1258 | 0x17f104bd, |
1261 | 0x04d007f1, | 1259 | 0x14b60080, |
1262 | 0xbd0001d0, | 1260 | 0xf015f110, |
1263 | 0x8017f104, | 1261 | 0xdc07f102, |
1264 | 0x1014b600, | 1262 | 0x0001d004, |
1265 | 0x02f015f1, | 1263 | 0x17f004bd, |
1266 | 0x04dc07f1, | 1264 | 0xc407f101, |
1267 | 0xbd0001d0, | 1265 | 0x0001d004, |
1268 | 0x0117f004, | 1266 | 0x00f804bd, |
1269 | 0x04c407f1, | 1267 | /* 0x04c8: memx_func_enter */ |
1270 | 0xbd0001d0, | 1268 | 0x162067f1, |
1271 | /* 0x04d3: memx_func_enter */ | 1269 | 0xf55d77f1, |
1272 | 0xf100f804, | 1270 | 0xffff73f1, |
1273 | 0xf1162067, | 1271 | 0xf4026eb9, |
1274 | 0xf1f55d77, | 1272 | 0xd8b90421, |
1273 | 0x0487fd02, | ||
1274 | 0x80f960f9, | ||
1275 | 0xe0fcd0fc, | ||
1276 | 0xf13321f4, | ||
1277 | 0xf1fffe77, | ||
1275 | 0xb9ffff73, | 1278 | 0xb9ffff73, |
1276 | 0x21f4026e, | 1279 | 0x21f4026e, |
1277 | 0x02d8b904, | 1280 | 0x02d8b904, |
1278 | 0xf90487fd, | 1281 | 0xf90487fd, |
1279 | 0xfc80f960, | 1282 | 0xfc80f960, |
1280 | 0xf4e0fcd0, | 1283 | 0xf4e0fcd0, |
1281 | 0x77f13321, | 1284 | 0x67f13321, |
1282 | 0x73f1fffe, | 1285 | 0x6eb926f0, |
1283 | 0x6eb9ffff, | ||
1284 | 0x0421f402, | 1286 | 0x0421f402, |
1285 | 0xfd02d8b9, | 1287 | 0xfd02d8b9, |
1286 | 0x60f90487, | 1288 | 0x60f90487, |
1287 | 0xd0fc80f9, | 1289 | 0xd0fc80f9, |
1288 | 0x21f4e0fc, | 1290 | 0x21f4e0fc, |
1289 | 0xf067f133, | 1291 | 0x0467f033, |
1290 | 0x026eb926, | 1292 | 0x07e007f1, |
1291 | 0xb90421f4, | ||
1292 | 0x87fd02d8, | ||
1293 | 0xf960f904, | ||
1294 | 0xfcd0fc80, | ||
1295 | 0x3321f4e0, | ||
1296 | 0xf10467f0, | ||
1297 | 0xd007e007, | ||
1298 | 0x04bd0006, | ||
1299 | /* 0x053c: memx_func_enter_wait */ | ||
1300 | 0x07c067f1, | ||
1301 | 0xf00066cf, | ||
1302 | 0x0bf40464, | ||
1303 | 0x2c67f0f6, | ||
1304 | 0x800066cf, | ||
1305 | 0x00f8f106, | ||
1306 | /* 0x0554: memx_func_leave */ | ||
1307 | 0xcf2c67f0, | ||
1308 | 0x06800066, | ||
1309 | 0x0467f0f2, | ||
1310 | 0x07e407f1, | ||
1311 | 0xbd0006d0, | 1293 | 0xbd0006d0, |
1312 | /* 0x0569: memx_func_leave_wait */ | 1294 | /* 0x0531: memx_func_enter_wait */ |
1313 | 0xc067f104, | 1295 | 0xc067f104, |
1314 | 0x0066cf07, | 1296 | 0x0066cf07, |
1315 | 0xf40464f0, | 1297 | 0xf40464f0, |
1316 | 0x67f1f61b, | 1298 | 0x67f0f60b, |
1317 | 0x77f126f0, | 1299 | 0x0066cf2c, |
1318 | 0x73f00001, | 1300 | 0xf8f10680, |
1319 | 0x026eb900, | 1301 | /* 0x0549: memx_func_leave */ |
1320 | 0xb90421f4, | 1302 | 0x2c67f000, |
1321 | 0x87fd02d8, | 1303 | 0x800066cf, |
1322 | 0xf960f905, | 1304 | 0x67f0f206, |
1323 | 0xfcd0fc80, | 1305 | 0xe407f104, |
1324 | 0x3321f4e0, | 1306 | 0x0006d007, |
1325 | 0x162067f1, | 1307 | /* 0x055e: memx_func_leave_wait */ |
1326 | 0xf4026eb9, | 1308 | 0x67f104bd, |
1327 | 0xd8b90421, | 1309 | 0x66cf07c0, |
1328 | 0x0587fd02, | 1310 | 0x0464f000, |
1329 | 0x80f960f9, | 1311 | 0xf1f61bf4, |
1330 | 0xe0fcd0fc, | 1312 | 0xf126f067, |
1331 | 0xf13321f4, | 1313 | 0xf0000177, |
1332 | 0xf00aa277, | ||
1333 | 0x6eb90073, | 1314 | 0x6eb90073, |
1334 | 0x0421f402, | 1315 | 0x0421f402, |
1335 | 0xfd02d8b9, | 1316 | 0xfd02d8b9, |
1336 | 0x60f90587, | 1317 | 0x60f90587, |
1337 | 0xd0fc80f9, | 1318 | 0xd0fc80f9, |
1338 | 0x21f4e0fc, | 1319 | 0x21f4e0fc, |
1339 | /* 0x05d3: memx_func_wait_vblank */ | 1320 | 0x2067f133, |
1340 | 0xb600f833, | 1321 | 0x026eb916, |
1341 | 0x00f80410, | 1322 | 0xb90421f4, |
1342 | /* 0x05d8: memx_func_wr32 */ | 1323 | 0x87fd02d8, |
1343 | 0x98001698, | 1324 | 0xf960f905, |
1344 | 0x10b60115, | 1325 | 0xfcd0fc80, |
1345 | 0xf960f908, | ||
1346 | 0xfcd0fc50, | ||
1347 | 0x3321f4e0, | 1326 | 0x3321f4e0, |
1348 | 0xf40242b6, | 1327 | 0x0aa277f1, |
1349 | 0x00f8e91b, | 1328 | 0xb90073f0, |
1350 | /* 0x05f4: memx_func_wait */ | 1329 | 0x21f4026e, |
1351 | 0xcf2c87f0, | 1330 | 0x02d8b904, |
1352 | 0x1e980088, | 1331 | 0xf90587fd, |
1353 | 0x011d9800, | 1332 | 0xfc80f960, |
1354 | 0x98021c98, | 1333 | 0xf4e0fcd0, |
1355 | 0x10b6031b, | 1334 | 0x00f83321, |
1356 | 0x8621f410, | 1335 | /* 0x05c8: memx_func_wait_vblank */ |
1357 | /* 0x060e: memx_func_delay */ | 1336 | 0xf80410b6, |
1358 | 0x1e9800f8, | 1337 | /* 0x05cd: memx_func_wr32 */ |
1338 | 0x00169800, | ||
1339 | 0xb6011598, | ||
1340 | 0x60f90810, | ||
1341 | 0xd0fc50f9, | ||
1342 | 0x21f4e0fc, | ||
1343 | 0x0242b633, | ||
1344 | 0xf8e91bf4, | ||
1345 | /* 0x05e9: memx_func_wait */ | ||
1346 | 0x2c87f000, | ||
1347 | 0x980088cf, | ||
1348 | 0x1d98001e, | ||
1349 | 0x021c9801, | ||
1350 | 0xb6031b98, | ||
1351 | 0x21f41010, | ||
1352 | /* 0x0603: memx_func_delay */ | ||
1353 | 0x9800f886, | ||
1354 | 0x10b6001e, | ||
1355 | 0x6721f404, | ||
1356 | /* 0x060e: memx_func_train */ | ||
1357 | 0x00f800f8, | ||
1358 | /* 0x0610: memx_exec */ | ||
1359 | 0xd0f9e0f9, | ||
1360 | 0xb902c1b9, | ||
1361 | /* 0x061a: memx_exec_next */ | ||
1362 | 0x139802b2, | ||
1359 | 0x0410b600, | 1363 | 0x0410b600, |
1360 | 0xf86721f4, | 1364 | 0x01f034e7, |
1361 | /* 0x0619: memx_func_train */ | 1365 | 0x01e033e7, |
1362 | /* 0x061b: memx_exec */ | 1366 | 0xf00132b6, |
1363 | 0xf900f800, | 1367 | 0x35980c30, |
1364 | 0xb9d0f9e0, | 1368 | 0xb855f9de, |
1365 | 0xb2b902c1, | 1369 | 0x1ef40612, |
1366 | /* 0x0625: memx_exec_next */ | 1370 | 0xf10b98e4, |
1367 | 0x00139802, | 1371 | 0xbbf20c98, |
1368 | 0xe70410b6, | 1372 | 0xb7f102cb, |
1369 | 0xe701f034, | 1373 | 0xbbcf07c4, |
1370 | 0xb601e033, | 1374 | 0xfcd0fc00, |
1371 | 0x30f00132, | 1375 | 0xe621f5e0, |
1372 | 0xde35980c, | 1376 | /* 0x0653: memx_info */ |
1373 | 0x12b855f9, | 1377 | 0x7000f802, |
1374 | 0xe41ef406, | 1378 | 0x0bf401c6, |
1375 | 0x98f10b98, | 1379 | /* 0x0659: memx_info_data */ |
1376 | 0xcbbbf20c, | 1380 | 0xccc7f10e, |
1377 | 0xc4b7f102, | 1381 | 0x00b7f103, |
1378 | 0x00bbcf07, | 1382 | 0x0b0ef408, |
1379 | 0xe0fcd0fc, | 1383 | /* 0x0664: memx_info_train */ |
1380 | 0x02f121f5, | 1384 | 0x0bccc7f1, |
1381 | /* 0x065e: memx_info */ | 1385 | 0x0100b7f1, |
1382 | 0xc67000f8, | 1386 | /* 0x066c: memx_info_send */ |
1383 | 0x0e0bf401, | 1387 | 0x02e621f5, |
1384 | /* 0x0664: memx_info_data */ | 1388 | /* 0x0672: memx_recv */ |
1385 | 0x03ccc7f1, | 1389 | 0xd6b000f8, |
1386 | 0x0800b7f1, | 1390 | 0x9b0bf401, |
1387 | /* 0x066f: memx_info_train */ | 1391 | 0xf400d6b0, |
1388 | 0xf10b0ef4, | 1392 | 0x00f8d80b, |
1389 | 0xf10bccc7, | 1393 | /* 0x0680: memx_init */ |
1390 | /* 0x0677: memx_info_send */ | 1394 | /* 0x0682: perf_recv */ |
1391 | 0xf50100b7, | 1395 | 0x00f800f8, |
1392 | 0xf802f121, | 1396 | /* 0x0684: perf_init */ |
1393 | /* 0x067d: memx_recv */ | 1397 | /* 0x0686: i2c_drive_scl */ |
1394 | 0x01d6b000, | 1398 | 0x36b000f8, |
1395 | 0xb09b0bf4, | 1399 | 0x0e0bf400, |
1396 | 0x0bf400d6, | 1400 | 0x07e007f1, |
1397 | /* 0x068b: memx_init */ | 1401 | 0xbd0001d0, |
1398 | 0xf800f8d8, | 1402 | /* 0x0697: i2c_drive_scl_lo */ |
1399 | /* 0x068d: perf_recv */ | 1403 | 0xf100f804, |
1400 | /* 0x068f: perf_init */ | 1404 | 0xd007e407, |
1401 | 0xf800f800, | ||
1402 | /* 0x0691: i2c_drive_scl */ | ||
1403 | 0x0036b000, | ||
1404 | 0xf10e0bf4, | ||
1405 | 0xd007e007, | ||
1406 | 0x04bd0001, | 1405 | 0x04bd0001, |
1407 | /* 0x06a2: i2c_drive_scl_lo */ | 1406 | /* 0x06a2: i2c_drive_sda */ |
1408 | 0x07f100f8, | 1407 | 0x36b000f8, |
1409 | 0x01d007e4, | 1408 | 0x0e0bf400, |
1410 | 0xf804bd00, | 1409 | 0x07e007f1, |
1411 | /* 0x06ad: i2c_drive_sda */ | 1410 | 0xbd0002d0, |
1412 | 0x0036b000, | 1411 | /* 0x06b3: i2c_drive_sda_lo */ |
1413 | 0xf10e0bf4, | 1412 | 0xf100f804, |
1414 | 0xd007e007, | 1413 | 0xd007e407, |
1415 | 0x04bd0002, | 1414 | 0x04bd0002, |
1416 | /* 0x06be: i2c_drive_sda_lo */ | 1415 | /* 0x06be: i2c_sense_scl */ |
1417 | 0x07f100f8, | ||
1418 | 0x02d007e4, | ||
1419 | 0xf804bd00, | ||
1420 | /* 0x06c9: i2c_sense_scl */ | ||
1421 | 0x0132f400, | ||
1422 | 0x07c437f1, | ||
1423 | 0xfd0033cf, | ||
1424 | 0x0bf40431, | ||
1425 | 0x0131f406, | ||
1426 | /* 0x06dc: i2c_sense_scl_done */ | ||
1427 | /* 0x06de: i2c_sense_sda */ | ||
1428 | 0x32f400f8, | 1416 | 0x32f400f8, |
1429 | 0xc437f101, | 1417 | 0xc437f101, |
1430 | 0x0033cf07, | 1418 | 0x0033cf07, |
1431 | 0xf40432fd, | 1419 | 0xf40431fd, |
1432 | 0x31f4060b, | 1420 | 0x31f4060b, |
1433 | /* 0x06f1: i2c_sense_sda_done */ | 1421 | /* 0x06d1: i2c_sense_scl_done */ |
1434 | /* 0x06f3: i2c_raise_scl */ | 1422 | /* 0x06d3: i2c_sense_sda */ |
1435 | 0xf900f801, | 1423 | 0xf400f801, |
1436 | 0x9847f140, | 1424 | 0x37f10132, |
1437 | 0x0137f008, | 1425 | 0x33cf07c4, |
1438 | 0x069121f5, | 1426 | 0x0432fd00, |
1439 | /* 0x0700: i2c_raise_scl_wait */ | 1427 | 0xf4060bf4, |
1440 | 0x03e8e7f1, | 1428 | /* 0x06e6: i2c_sense_sda_done */ |
1441 | 0xf56721f4, | 1429 | 0x00f80131, |
1442 | 0xf406c921, | 1430 | /* 0x06e8: i2c_raise_scl */ |
1443 | 0x42b60901, | 1431 | 0x47f140f9, |
1444 | 0xef1bf401, | 1432 | 0x37f00898, |
1445 | /* 0x0714: i2c_raise_scl_done */ | 1433 | 0x8621f501, |
1446 | 0x00f840fc, | 1434 | /* 0x06f5: i2c_raise_scl_wait */ |
1447 | /* 0x0718: i2c_start */ | 1435 | 0xe8e7f106, |
1448 | 0x06c921f5, | 1436 | 0x6721f403, |
1449 | 0xf50d11f4, | 1437 | 0x06be21f5, |
1450 | 0xf406de21, | 1438 | 0xb60901f4, |
1451 | 0x0ef40611, | 1439 | 0x1bf40142, |
1452 | /* 0x0729: i2c_start_rep */ | 1440 | /* 0x0709: i2c_raise_scl_done */ |
1453 | 0x0037f030, | 1441 | 0xf840fcef, |
1454 | 0x069121f5, | 1442 | /* 0x070d: i2c_start */ |
1443 | 0xbe21f500, | ||
1444 | 0x0d11f406, | ||
1445 | 0x06d321f5, | ||
1446 | 0xf40611f4, | ||
1447 | /* 0x071e: i2c_start_rep */ | ||
1448 | 0x37f0300e, | ||
1449 | 0x8621f500, | ||
1450 | 0x0137f006, | ||
1451 | 0x06a221f5, | ||
1452 | 0xb60076bb, | ||
1453 | 0x50f90465, | ||
1454 | 0xbb046594, | ||
1455 | 0x50bd0256, | ||
1456 | 0xfc0475fd, | ||
1457 | 0xe821f550, | ||
1458 | 0x0464b606, | ||
1459 | /* 0x074b: i2c_start_send */ | ||
1460 | 0xf01f11f4, | ||
1461 | 0x21f50037, | ||
1462 | 0xe7f106a2, | ||
1463 | 0x21f41388, | ||
1464 | 0x0037f067, | ||
1465 | 0x068621f5, | ||
1466 | 0x1388e7f1, | ||
1467 | /* 0x0767: i2c_start_out */ | ||
1468 | 0xf86721f4, | ||
1469 | /* 0x0769: i2c_stop */ | ||
1470 | 0x0037f000, | ||
1471 | 0x068621f5, | ||
1472 | 0xf50037f0, | ||
1473 | 0xf106a221, | ||
1474 | 0xf403e8e7, | ||
1475 | 0x37f06721, | ||
1476 | 0x8621f501, | ||
1477 | 0x88e7f106, | ||
1478 | 0x6721f413, | ||
1455 | 0xf50137f0, | 1479 | 0xf50137f0, |
1456 | 0xbb06ad21, | 1480 | 0xf106a221, |
1481 | 0xf41388e7, | ||
1482 | 0x00f86721, | ||
1483 | /* 0x079c: i2c_bitw */ | ||
1484 | 0x06a221f5, | ||
1485 | 0x03e8e7f1, | ||
1486 | 0xbb6721f4, | ||
1457 | 0x65b60076, | 1487 | 0x65b60076, |
1458 | 0x9450f904, | 1488 | 0x9450f904, |
1459 | 0x56bb0465, | 1489 | 0x56bb0465, |
1460 | 0xfd50bd02, | 1490 | 0xfd50bd02, |
1461 | 0x50fc0475, | 1491 | 0x50fc0475, |
1462 | 0x06f321f5, | 1492 | 0x06e821f5, |
1463 | 0xf40464b6, | 1493 | 0xf40464b6, |
1464 | /* 0x0756: i2c_start_send */ | 1494 | 0xe7f11811, |
1465 | 0x37f01f11, | ||
1466 | 0xad21f500, | ||
1467 | 0x88e7f106, | ||
1468 | 0x6721f413, | ||
1469 | 0xf50037f0, | ||
1470 | 0xf1069121, | ||
1471 | 0xf41388e7, | ||
1472 | /* 0x0772: i2c_start_out */ | ||
1473 | 0x00f86721, | ||
1474 | /* 0x0774: i2c_stop */ | ||
1475 | 0xf50037f0, | ||
1476 | 0xf0069121, | ||
1477 | 0x21f50037, | ||
1478 | 0xe7f106ad, | ||
1479 | 0x21f403e8, | ||
1480 | 0x0137f067, | ||
1481 | 0x069121f5, | ||
1482 | 0x1388e7f1, | ||
1483 | 0xf06721f4, | ||
1484 | 0x21f50137, | ||
1485 | 0xe7f106ad, | ||
1486 | 0x21f41388, | 1495 | 0x21f41388, |
1487 | /* 0x07a7: i2c_bitw */ | 1496 | 0x0037f067, |
1488 | 0xf500f867, | 1497 | 0x068621f5, |
1489 | 0xf106ad21, | ||
1490 | 0xf403e8e7, | ||
1491 | 0x76bb6721, | ||
1492 | 0x0465b600, | ||
1493 | 0x659450f9, | ||
1494 | 0x0256bb04, | ||
1495 | 0x75fd50bd, | ||
1496 | 0xf550fc04, | ||
1497 | 0xb606f321, | ||
1498 | 0x11f40464, | ||
1499 | 0x88e7f118, | ||
1500 | 0x6721f413, | ||
1501 | 0xf50037f0, | ||
1502 | 0xf1069121, | ||
1503 | 0xf41388e7, | ||
1504 | /* 0x07e6: i2c_bitw_out */ | ||
1505 | 0x00f86721, | ||
1506 | /* 0x07e8: i2c_bitr */ | ||
1507 | 0xf50137f0, | ||
1508 | 0xf106ad21, | ||
1509 | 0xf403e8e7, | ||
1510 | 0x76bb6721, | ||
1511 | 0x0465b600, | ||
1512 | 0x659450f9, | ||
1513 | 0x0256bb04, | ||
1514 | 0x75fd50bd, | ||
1515 | 0xf550fc04, | ||
1516 | 0xb606f321, | ||
1517 | 0x11f40464, | ||
1518 | 0xde21f51b, | ||
1519 | 0x0037f006, | ||
1520 | 0x069121f5, | ||
1521 | 0x1388e7f1, | 1498 | 0x1388e7f1, |
1522 | 0xf06721f4, | 1499 | /* 0x07db: i2c_bitw_out */ |
1523 | 0x31f4013c, | 1500 | 0xf86721f4, |
1524 | /* 0x082d: i2c_bitr_done */ | 1501 | /* 0x07dd: i2c_bitr */ |
1525 | /* 0x082f: i2c_get_byte */ | 1502 | 0x0137f000, |
1526 | 0xf000f801, | 1503 | 0x06a221f5, |
1527 | 0x47f00057, | 1504 | 0x03e8e7f1, |
1528 | /* 0x0835: i2c_get_byte_next */ | 1505 | 0xbb6721f4, |
1529 | 0x0154b608, | 1506 | 0x65b60076, |
1507 | 0x9450f904, | ||
1508 | 0x56bb0465, | ||
1509 | 0xfd50bd02, | ||
1510 | 0x50fc0475, | ||
1511 | 0x06e821f5, | ||
1512 | 0xf40464b6, | ||
1513 | 0x21f51b11, | ||
1514 | 0x37f006d3, | ||
1515 | 0x8621f500, | ||
1516 | 0x88e7f106, | ||
1517 | 0x6721f413, | ||
1518 | 0xf4013cf0, | ||
1519 | /* 0x0822: i2c_bitr_done */ | ||
1520 | 0x00f80131, | ||
1521 | /* 0x0824: i2c_get_byte */ | ||
1522 | 0xf00057f0, | ||
1523 | /* 0x082a: i2c_get_byte_next */ | ||
1524 | 0x54b60847, | ||
1525 | 0x0076bb01, | ||
1526 | 0xf90465b6, | ||
1527 | 0x04659450, | ||
1528 | 0xbd0256bb, | ||
1529 | 0x0475fd50, | ||
1530 | 0x21f550fc, | ||
1531 | 0x64b607dd, | ||
1532 | 0x2b11f404, | ||
1533 | 0xb60553fd, | ||
1534 | 0x1bf40142, | ||
1535 | 0x0137f0d8, | ||
1530 | 0xb60076bb, | 1536 | 0xb60076bb, |
1531 | 0x50f90465, | 1537 | 0x50f90465, |
1532 | 0xbb046594, | 1538 | 0xbb046594, |
1533 | 0x50bd0256, | 1539 | 0x50bd0256, |
1534 | 0xfc0475fd, | 1540 | 0xfc0475fd, |
1535 | 0xe821f550, | 1541 | 0x9c21f550, |
1536 | 0x0464b607, | 1542 | 0x0464b607, |
1537 | 0xfd2b11f4, | 1543 | /* 0x0874: i2c_get_byte_done */ |
1538 | 0x42b60553, | 1544 | /* 0x0876: i2c_put_byte */ |
1539 | 0xd81bf401, | 1545 | 0x47f000f8, |
1540 | 0xbb0137f0, | 1546 | /* 0x0879: i2c_put_byte_next */ |
1547 | 0x0142b608, | ||
1548 | 0xbb3854ff, | ||
1541 | 0x65b60076, | 1549 | 0x65b60076, |
1542 | 0x9450f904, | 1550 | 0x9450f904, |
1543 | 0x56bb0465, | 1551 | 0x56bb0465, |
1544 | 0xfd50bd02, | 1552 | 0xfd50bd02, |
1545 | 0x50fc0475, | 1553 | 0x50fc0475, |
1546 | 0x07a721f5, | 1554 | 0x079c21f5, |
1547 | /* 0x087f: i2c_get_byte_done */ | ||
1548 | 0xf80464b6, | ||
1549 | /* 0x0881: i2c_put_byte */ | ||
1550 | 0x0847f000, | ||
1551 | /* 0x0884: i2c_put_byte_next */ | ||
1552 | 0xff0142b6, | ||
1553 | 0x76bb3854, | ||
1554 | 0x0465b600, | ||
1555 | 0x659450f9, | ||
1556 | 0x0256bb04, | ||
1557 | 0x75fd50bd, | ||
1558 | 0xf550fc04, | ||
1559 | 0xb607a721, | ||
1560 | 0x11f40464, | ||
1561 | 0x0046b034, | ||
1562 | 0xbbd81bf4, | ||
1563 | 0x65b60076, | ||
1564 | 0x9450f904, | ||
1565 | 0x56bb0465, | ||
1566 | 0xfd50bd02, | ||
1567 | 0x50fc0475, | ||
1568 | 0x07e821f5, | ||
1569 | 0xf40464b6, | 1555 | 0xf40464b6, |
1570 | 0x76bb0f11, | 1556 | 0x46b03411, |
1571 | 0x0136b000, | 1557 | 0xd81bf400, |
1572 | 0xf4061bf4, | ||
1573 | /* 0x08da: i2c_put_byte_done */ | ||
1574 | 0x00f80132, | ||
1575 | /* 0x08dc: i2c_addr */ | ||
1576 | 0xb60076bb, | 1558 | 0xb60076bb, |
1577 | 0x50f90465, | 1559 | 0x50f90465, |
1578 | 0xbb046594, | 1560 | 0xbb046594, |
1579 | 0x50bd0256, | 1561 | 0x50bd0256, |
1580 | 0xfc0475fd, | 1562 | 0xfc0475fd, |
1581 | 0x1821f550, | 1563 | 0xdd21f550, |
1582 | 0x0464b607, | 1564 | 0x0464b607, |
1583 | 0xe72911f4, | 1565 | 0xbb0f11f4, |
1584 | 0xb6012ec3, | 1566 | 0x36b00076, |
1585 | 0x53fd0134, | 1567 | 0x061bf401, |
1586 | 0x0076bb05, | 1568 | /* 0x08cf: i2c_put_byte_done */ |
1569 | 0xf80132f4, | ||
1570 | /* 0x08d1: i2c_addr */ | ||
1571 | 0x0076bb00, | ||
1587 | 0xf90465b6, | 1572 | 0xf90465b6, |
1588 | 0x04659450, | 1573 | 0x04659450, |
1589 | 0xbd0256bb, | 1574 | 0xbd0256bb, |
1590 | 0x0475fd50, | 1575 | 0x0475fd50, |
1591 | 0x21f550fc, | 1576 | 0x21f550fc, |
1592 | 0x64b60881, | 1577 | 0x64b6070d, |
1593 | /* 0x0921: i2c_addr_done */ | 1578 | 0x2911f404, |
1594 | /* 0x0923: i2c_acquire_addr */ | 1579 | 0x012ec3e7, |
1595 | 0xc700f804, | 1580 | 0xfd0134b6, |
1596 | 0xe4b6f8ce, | 1581 | 0x76bb0553, |
1597 | 0x14e0b705, | 1582 | 0x0465b600, |
1598 | /* 0x092f: i2c_acquire */ | 1583 | 0x659450f9, |
1599 | 0xf500f8d0, | 1584 | 0x0256bb04, |
1600 | 0xf4092321, | 1585 | 0x75fd50bd, |
1601 | 0xd9f00421, | 1586 | 0xf550fc04, |
1587 | 0xb6087621, | ||
1588 | /* 0x0916: i2c_addr_done */ | ||
1589 | 0x00f80464, | ||
1590 | /* 0x0918: i2c_acquire_addr */ | ||
1591 | 0xb6f8cec7, | ||
1592 | 0xe0b705e4, | ||
1593 | 0x00f8d014, | ||
1594 | /* 0x0924: i2c_acquire */ | ||
1595 | 0x091821f5, | ||
1596 | 0xf00421f4, | ||
1597 | 0x21f403d9, | ||
1598 | /* 0x0933: i2c_release */ | ||
1599 | 0xf500f833, | ||
1600 | 0xf4091821, | ||
1601 | 0xdaf00421, | ||
1602 | 0x3321f403, | 1602 | 0x3321f403, |
1603 | /* 0x093e: i2c_release */ | 1603 | /* 0x0942: i2c_recv */ |
1604 | 0x21f500f8, | 1604 | 0x32f400f8, |
1605 | 0x21f40923, | 1605 | 0xf8c1c701, |
1606 | 0x03daf004, | 1606 | 0xb00214b6, |
1607 | 0xf83321f4, | 1607 | 0x1ff52816, |
1608 | /* 0x094d: i2c_recv */ | 1608 | 0x13a0013a, |
1609 | 0x0132f400, | 1609 | 0x32980cf4, |
1610 | 0xb6f8c1c7, | 1610 | 0xcc13a000, |
1611 | 0x16b00214, | 1611 | 0x0031980c, |
1612 | 0x3a1ff528, | 1612 | 0xf90231f4, |
1613 | 0xf413a001, | 1613 | 0xf9e0f9d0, |
1614 | 0x0032980c, | 1614 | 0x0067f1d0, |
1615 | 0x0ccc13a0, | 1615 | 0x0063f100, |
1616 | 0xf4003198, | 1616 | 0x01679210, |
1617 | 0xd0f90231, | 1617 | 0xb60076bb, |
1618 | 0xd0f9e0f9, | 1618 | 0x50f90465, |
1619 | 0x000067f1, | 1619 | 0xbb046594, |
1620 | 0x100063f1, | 1620 | 0x50bd0256, |
1621 | 0xbb016792, | 1621 | 0xfc0475fd, |
1622 | 0x65b60076, | 1622 | 0x2421f550, |
1623 | 0x9450f904, | 1623 | 0x0464b609, |
1624 | 0x56bb0465, | 1624 | 0xd6b0d0fc, |
1625 | 0xfd50bd02, | 1625 | 0xb31bf500, |
1626 | 0x50fc0475, | 1626 | 0x0057f000, |
1627 | 0x092f21f5, | 1627 | 0xb60076bb, |
1628 | 0xfc0464b6, | 1628 | 0x50f90465, |
1629 | 0x00d6b0d0, | 1629 | 0xbb046594, |
1630 | 0x00b31bf5, | 1630 | 0x50bd0256, |
1631 | 0xbb0057f0, | 1631 | 0xfc0475fd, |
1632 | 0xd121f550, | ||
1633 | 0x0464b608, | ||
1634 | 0x00d011f5, | ||
1635 | 0xbbe0c5c7, | ||
1632 | 0x65b60076, | 1636 | 0x65b60076, |
1633 | 0x9450f904, | 1637 | 0x9450f904, |
1634 | 0x56bb0465, | 1638 | 0x56bb0465, |
1635 | 0xfd50bd02, | 1639 | 0xfd50bd02, |
1636 | 0x50fc0475, | 1640 | 0x50fc0475, |
1637 | 0x08dc21f5, | 1641 | 0x087621f5, |
1638 | 0xf50464b6, | 1642 | 0xf50464b6, |
1639 | 0xc700d011, | 1643 | 0xf000ad11, |
1640 | 0x76bbe0c5, | 1644 | 0x76bb0157, |
1641 | 0x0465b600, | 1645 | 0x0465b600, |
1642 | 0x659450f9, | 1646 | 0x659450f9, |
1643 | 0x0256bb04, | 1647 | 0x0256bb04, |
1644 | 0x75fd50bd, | 1648 | 0x75fd50bd, |
1645 | 0xf550fc04, | 1649 | 0xf550fc04, |
1646 | 0xb6088121, | 1650 | 0xb608d121, |
1647 | 0x11f50464, | 1651 | 0x11f50464, |
1648 | 0x57f000ad, | 1652 | 0x76bb008a, |
1649 | 0x0076bb01, | 1653 | 0x0465b600, |
1650 | 0xf90465b6, | 1654 | 0x659450f9, |
1651 | 0x04659450, | 1655 | 0x0256bb04, |
1652 | 0xbd0256bb, | 1656 | 0x75fd50bd, |
1653 | 0x0475fd50, | 1657 | 0xf550fc04, |
1654 | 0x21f550fc, | 1658 | 0xb6082421, |
1655 | 0x64b608dc, | 1659 | 0x11f40464, |
1656 | 0x8a11f504, | 1660 | 0xe05bcb6a, |
1657 | 0x0076bb00, | 1661 | 0xb60076bb, |
1658 | 0xf90465b6, | 1662 | 0x50f90465, |
1659 | 0x04659450, | 1663 | 0xbb046594, |
1660 | 0xbd0256bb, | 1664 | 0x50bd0256, |
1661 | 0x0475fd50, | 1665 | 0xfc0475fd, |
1662 | 0x21f550fc, | 1666 | 0x6921f550, |
1663 | 0x64b6082f, | 1667 | 0x0464b607, |
1664 | 0x6a11f404, | 1668 | 0xbd025bb9, |
1665 | 0xbbe05bcb, | 1669 | 0x430ef474, |
1666 | 0x65b60076, | 1670 | /* 0x0a48: i2c_recv_not_rd08 */ |
1667 | 0x9450f904, | 1671 | 0xf401d6b0, |
1668 | 0x56bb0465, | 1672 | 0x57f03d1b, |
1669 | 0xfd50bd02, | 1673 | 0xd121f500, |
1670 | 0x50fc0475, | 1674 | 0x3311f408, |
1671 | 0x077421f5, | 1675 | 0xf5e0c5c7, |
1672 | 0xb90464b6, | 1676 | 0xf4087621, |
1673 | 0x74bd025b, | 1677 | 0x57f02911, |
1674 | /* 0x0a53: i2c_recv_not_rd08 */ | 1678 | 0xd121f500, |
1675 | 0xb0430ef4, | 1679 | 0x1f11f408, |
1676 | 0x1bf401d6, | 1680 | 0xf5e0b5c7, |
1677 | 0x0057f03d, | 1681 | 0xf4087621, |
1678 | 0x08dc21f5, | 1682 | 0x21f51511, |
1679 | 0xc73311f4, | 1683 | 0x74bd0769, |
1680 | 0x21f5e0c5, | 1684 | 0xf408c5c7, |
1681 | 0x11f40881, | 1685 | 0x32f4091b, |
1682 | 0x0057f029, | 1686 | 0x030ef402, |
1683 | 0x08dc21f5, | 1687 | /* 0x0a88: i2c_recv_not_wr08 */ |
1684 | 0xc71f11f4, | 1688 | /* 0x0a88: i2c_recv_done */ |
1685 | 0x21f5e0b5, | 1689 | 0xf5f8cec7, |
1686 | 0x11f40881, | 1690 | 0xfc093321, |
1687 | 0x7421f515, | 1691 | 0xf4d0fce0, |
1688 | 0xc774bd07, | 1692 | 0x7cb90a12, |
1689 | 0x1bf408c5, | 1693 | 0xe621f502, |
1690 | 0x0232f409, | 1694 | /* 0x0a9d: i2c_recv_exit */ |
1691 | /* 0x0a93: i2c_recv_not_wr08 */ | 1695 | /* 0x0a9f: i2c_init */ |
1692 | /* 0x0a93: i2c_recv_done */ | ||
1693 | 0xc7030ef4, | ||
1694 | 0x21f5f8ce, | ||
1695 | 0xe0fc093e, | ||
1696 | 0x12f4d0fc, | ||
1697 | 0x027cb90a, | ||
1698 | 0x02f121f5, | ||
1699 | /* 0x0aa8: i2c_recv_exit */ | ||
1700 | /* 0x0aaa: i2c_init */ | ||
1701 | 0x00f800f8, | ||
1702 | /* 0x0aac: test_recv */ | ||
1703 | 0x05d817f1, | ||
1704 | 0xb60011cf, | ||
1705 | 0x07f10110, | ||
1706 | 0x01d005d8, | ||
1707 | 0xf104bd00, | ||
1708 | 0xf1d900e7, | ||
1709 | 0xf5134fe3, | ||
1710 | 0xf8022321, | ||
1711 | /* 0x0acd: test_init */ | ||
1712 | 0x00e7f100, | ||
1713 | 0x2321f508, | ||
1714 | /* 0x0ad7: idle_recv */ | ||
1715 | 0xf800f802, | 1696 | 0xf800f802, |
1716 | /* 0x0ad9: idle */ | 1697 | /* 0x0aa1: test_recv */ |
1717 | 0x0031f400, | 1698 | 0xd817f100, |
1718 | 0x05d417f1, | 1699 | 0x0011cf05, |
1719 | 0xb60011cf, | 1700 | 0xf10110b6, |
1720 | 0x07f10110, | 1701 | 0xd005d807, |
1721 | 0x01d005d4, | 1702 | 0x04bd0001, |
1722 | /* 0x0aef: idle_loop */ | 1703 | 0xd900e7f1, |
1723 | 0xf004bd00, | 1704 | 0x134fe3f1, |
1724 | 0x32f45817, | 1705 | 0x021821f5, |
1725 | /* 0x0af5: idle_proc */ | 1706 | /* 0x0ac2: test_init */ |
1726 | /* 0x0af5: idle_proc_exec */ | 1707 | 0xe7f100f8, |
1727 | 0xb910f902, | 1708 | 0x21f50800, |
1728 | 0x21f5021e, | 1709 | 0x00f80218, |
1729 | 0x10fc02fa, | 1710 | /* 0x0acc: idle_recv */ |
1730 | 0xf40911f4, | 1711 | /* 0x0ace: idle */ |
1731 | 0x0ef40231, | 1712 | 0x31f400f8, |
1732 | /* 0x0b09: idle_proc_next */ | 1713 | 0xd417f100, |
1733 | 0x5810b6ef, | 1714 | 0x0011cf05, |
1734 | 0xf4061fb8, | 1715 | 0xf10110b6, |
1735 | 0x02f4e61b, | 1716 | 0xd005d407, |
1736 | 0x0028f4dd, | 1717 | 0x04bd0001, |
1737 | 0x00c10ef4, | 1718 | /* 0x0ae4: idle_loop */ |
1719 | 0xf45817f0, | ||
1720 | /* 0x0aea: idle_proc */ | ||
1721 | /* 0x0aea: idle_proc_exec */ | ||
1722 | 0x10f90232, | ||
1723 | 0xf5021eb9, | ||
1724 | 0xfc02ef21, | ||
1725 | 0x0911f410, | ||
1726 | 0xf40231f4, | ||
1727 | /* 0x0afe: idle_proc_next */ | ||
1728 | 0x10b6ef0e, | ||
1729 | 0x061fb858, | ||
1730 | 0xf4e61bf4, | ||
1731 | 0x28f4dd02, | ||
1732 | 0xc10ef400, | ||
1733 | 0x00000000, | ||
1734 | 0x00000000, | ||
1735 | 0x00000000, | ||
1738 | 0x00000000, | 1736 | 0x00000000, |
1739 | 0x00000000, | 1737 | 0x00000000, |
1740 | 0x00000000, | 1738 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h index fe4f63deeaab..8a2b628642ac 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gk208.fuc5.h | |||
@@ -24,8 +24,8 @@ uint32_t gk208_pmu_data[] = { | |||
24 | 0x00000000, | 24 | 0x00000000, |
25 | /* 0x0058: proc_list_head */ | 25 | /* 0x0058: proc_list_head */ |
26 | 0x54534f48, | 26 | 0x54534f48, |
27 | 0x00000453, | 27 | 0x00000447, |
28 | 0x00000404, | 28 | 0x000003f8, |
29 | 0x00000000, | 29 | 0x00000000, |
30 | 0x00000000, | 30 | 0x00000000, |
31 | 0x00000000, | 31 | 0x00000000, |
@@ -46,8 +46,8 @@ uint32_t gk208_pmu_data[] = { | |||
46 | 0x00000000, | 46 | 0x00000000, |
47 | 0x00000000, | 47 | 0x00000000, |
48 | 0x584d454d, | 48 | 0x584d454d, |
49 | 0x0000062d, | 49 | 0x00000621, |
50 | 0x0000061f, | 50 | 0x00000613, |
51 | 0x00000000, | 51 | 0x00000000, |
52 | 0x00000000, | 52 | 0x00000000, |
53 | 0x00000000, | 53 | 0x00000000, |
@@ -68,8 +68,8 @@ uint32_t gk208_pmu_data[] = { | |||
68 | 0x00000000, | 68 | 0x00000000, |
69 | 0x00000000, | 69 | 0x00000000, |
70 | 0x46524550, | 70 | 0x46524550, |
71 | 0x00000631, | 71 | 0x00000625, |
72 | 0x0000062f, | 72 | 0x00000623, |
73 | 0x00000000, | 73 | 0x00000000, |
74 | 0x00000000, | 74 | 0x00000000, |
75 | 0x00000000, | 75 | 0x00000000, |
@@ -90,8 +90,8 @@ uint32_t gk208_pmu_data[] = { | |||
90 | 0x00000000, | 90 | 0x00000000, |
91 | 0x00000000, | 91 | 0x00000000, |
92 | 0x5f433249, | 92 | 0x5f433249, |
93 | 0x00000a35, | 93 | 0x00000a29, |
94 | 0x000008dc, | 94 | 0x000008d0, |
95 | 0x00000000, | 95 | 0x00000000, |
96 | 0x00000000, | 96 | 0x00000000, |
97 | 0x00000000, | 97 | 0x00000000, |
@@ -112,8 +112,8 @@ uint32_t gk208_pmu_data[] = { | |||
112 | 0x00000000, | 112 | 0x00000000, |
113 | 0x00000000, | 113 | 0x00000000, |
114 | 0x54534554, | 114 | 0x54534554, |
115 | 0x00000a56, | 115 | 0x00000a4a, |
116 | 0x00000a37, | 116 | 0x00000a2b, |
117 | 0x00000000, | 117 | 0x00000000, |
118 | 0x00000000, | 118 | 0x00000000, |
119 | 0x00000000, | 119 | 0x00000000, |
@@ -134,8 +134,8 @@ uint32_t gk208_pmu_data[] = { | |||
134 | 0x00000000, | 134 | 0x00000000, |
135 | 0x00000000, | 135 | 0x00000000, |
136 | 0x454c4449, | 136 | 0x454c4449, |
137 | 0x00000a61, | 137 | 0x00000a55, |
138 | 0x00000a5f, | 138 | 0x00000a53, |
139 | 0x00000000, | 139 | 0x00000000, |
140 | 0x00000000, | 140 | 0x00000000, |
141 | 0x00000000, | 141 | 0x00000000, |
@@ -229,26 +229,26 @@ uint32_t gk208_pmu_data[] = { | |||
229 | /* 0x0370: memx_func_head */ | 229 | /* 0x0370: memx_func_head */ |
230 | 0x00000001, | 230 | 0x00000001, |
231 | 0x00000000, | 231 | 0x00000000, |
232 | 0x00000483, | 232 | 0x00000477, |
233 | /* 0x037c: memx_func_next */ | 233 | /* 0x037c: memx_func_next */ |
234 | 0x00000002, | 234 | 0x00000002, |
235 | 0x00000000, | 235 | 0x00000000, |
236 | 0x00000500, | 236 | 0x000004f4, |
237 | 0x00000003, | 237 | 0x00000003, |
238 | 0x00000002, | 238 | 0x00000002, |
239 | 0x00000580, | 239 | 0x00000574, |
240 | 0x00040004, | 240 | 0x00040004, |
241 | 0x00000000, | 241 | 0x00000000, |
242 | 0x0000059d, | 242 | 0x00000591, |
243 | 0x00010005, | 243 | 0x00010005, |
244 | 0x00000000, | 244 | 0x00000000, |
245 | 0x000005b7, | 245 | 0x000005ab, |
246 | 0x00010006, | 246 | 0x00010006, |
247 | 0x00000000, | 247 | 0x00000000, |
248 | 0x0000057b, | 248 | 0x0000056f, |
249 | 0x00000007, | 249 | 0x00000007, |
250 | 0x00000000, | 250 | 0x00000000, |
251 | 0x000005c3, | 251 | 0x000005b7, |
252 | /* 0x03c4: memx_func_tail */ | 252 | /* 0x03c4: memx_func_tail */ |
253 | /* 0x03c4: memx_ts_start */ | 253 | /* 0x03c4: memx_ts_start */ |
254 | 0x00000000, | 254 | 0x00000000, |
@@ -916,7 +916,7 @@ uint32_t gk208_pmu_data[] = { | |||
916 | }; | 916 | }; |
917 | 917 | ||
918 | uint32_t gk208_pmu_code[] = { | 918 | uint32_t gk208_pmu_code[] = { |
919 | 0x031c0ef5, | 919 | 0x03100ef5, |
920 | /* 0x0004: rd32 */ | 920 | /* 0x0004: rd32 */ |
921 | 0xf607a040, | 921 | 0xf607a040, |
922 | 0x04bd000e, | 922 | 0x04bd000e, |
@@ -972,7 +972,7 @@ uint32_t gk208_pmu_code[] = { | |||
972 | 0x0a98280b, | 972 | 0x0a98280b, |
973 | 0x029abb9a, | 973 | 0x029abb9a, |
974 | 0x0d0e1cf4, | 974 | 0x0d0e1cf4, |
975 | 0x02617e01, | 975 | 0x02557e01, |
976 | 0xf494bd00, | 976 | 0xf494bd00, |
977 | /* 0x00c2: intr_watchdog_next_time */ | 977 | /* 0x00c2: intr_watchdog_next_time */ |
978 | 0x0a98140e, | 978 | 0x0a98140e, |
@@ -1017,21 +1017,16 @@ uint32_t gk208_pmu_code[] = { | |||
1017 | 0xc0f900cc, | 1017 | 0xc0f900cc, |
1018 | 0xf14f484e, | 1018 | 0xf14f484e, |
1019 | 0x0d5453e3, | 1019 | 0x0d5453e3, |
1020 | 0x02c27e00, | 1020 | 0x02b67e00, |
1021 | 0x40c0fc00, | 1021 | 0x40c0fc00, |
1022 | 0x0cf604c0, | 1022 | 0x0cf604c0, |
1023 | /* 0x0167: intr_subintr_skip_fifo */ | 1023 | /* 0x0167: intr_subintr_skip_fifo */ |
1024 | 0x4004bd00, | 1024 | 0x4004bd00, |
1025 | 0x09f60688, | 1025 | 0x09f60688, |
1026 | /* 0x016f: intr_skip_subintr */ | 1026 | /* 0x016f: intr_skip_subintr */ |
1027 | 0xc404bd00, | 1027 | 0x4904bd00, |
1028 | 0x0bf42089, | 1028 | 0x90bd00e0, |
1029 | 0xbfa4f107, | 1029 | 0x000489fd, |
1030 | /* 0x0179: intr_skip_pause */ | ||
1031 | 0x4089c4ff, | ||
1032 | 0xf1070bf4, | ||
1033 | /* 0x0183: intr_skip_user0 */ | ||
1034 | 0x00ffbfa4, | ||
1035 | 0x0008f604, | 1030 | 0x0008f604, |
1036 | 0x80fc04bd, | 1031 | 0x80fc04bd, |
1037 | 0xfc0088fe, | 1032 | 0xfc0088fe, |
@@ -1040,35 +1035,35 @@ uint32_t gk208_pmu_code[] = { | |||
1040 | 0xfca0fcb0, | 1035 | 0xfca0fcb0, |
1041 | 0xfc80fc90, | 1036 | 0xfc80fc90, |
1042 | 0x0032f400, | 1037 | 0x0032f400, |
1043 | /* 0x01a6: ticks_from_ns */ | 1038 | /* 0x019a: ticks_from_ns */ |
1044 | 0xc0f901f8, | 1039 | 0xc0f901f8, |
1045 | 0xd7f1b0f9, | 1040 | 0xd7f1b0f9, |
1046 | 0xd3f00144, | 1041 | 0xd3f00144, |
1047 | 0x7721f500, | 1042 | 0x6b21f500, |
1048 | 0xe8ccec03, | 1043 | 0xe8ccec03, |
1049 | 0x00b4b003, | 1044 | 0x00b4b003, |
1050 | 0xec120bf4, | 1045 | 0xec120bf4, |
1051 | 0xf103e8ee, | 1046 | 0xf103e8ee, |
1052 | 0xf00144d7, | 1047 | 0xf00144d7, |
1053 | 0x21f500d3, | 1048 | 0x21f500d3, |
1054 | /* 0x01ce: ticks_from_ns_quit */ | 1049 | /* 0x01c2: ticks_from_ns_quit */ |
1055 | 0xceb20377, | 1050 | 0xceb2036b, |
1056 | 0xc0fcb0fc, | 1051 | 0xc0fcb0fc, |
1057 | /* 0x01d6: ticks_from_us */ | 1052 | /* 0x01ca: ticks_from_us */ |
1058 | 0xc0f900f8, | 1053 | 0xc0f900f8, |
1059 | 0xd7f1b0f9, | 1054 | 0xd7f1b0f9, |
1060 | 0xd3f00144, | 1055 | 0xd3f00144, |
1061 | 0x7721f500, | 1056 | 0x6b21f500, |
1062 | 0xb0ceb203, | 1057 | 0xb0ceb203, |
1063 | 0x0bf400b4, | 1058 | 0x0bf400b4, |
1064 | /* 0x01ef: ticks_from_us_quit */ | 1059 | /* 0x01e3: ticks_from_us_quit */ |
1065 | 0xfce4bd05, | 1060 | 0xfce4bd05, |
1066 | 0xf8c0fcb0, | 1061 | 0xf8c0fcb0, |
1067 | /* 0x01f5: ticks_to_us */ | 1062 | /* 0x01e9: ticks_to_us */ |
1068 | 0x44d7f100, | 1063 | 0x44d7f100, |
1069 | 0x00d3f001, | 1064 | 0x00d3f001, |
1070 | 0xf8ecedff, | 1065 | 0xf8ecedff, |
1071 | /* 0x0201: timer */ | 1066 | /* 0x01f5: timer */ |
1072 | 0xf990f900, | 1067 | 0xf990f900, |
1073 | 0x1032f480, | 1068 | 0x1032f480, |
1074 | 0xb003f898, | 1069 | 0xb003f898, |
@@ -1086,17 +1081,17 @@ uint32_t gk208_pmu_code[] = { | |||
1086 | 0xa60088cf, | 1081 | 0xa60088cf, |
1087 | 0x080bf4e0, | 1082 | 0x080bf4e0, |
1088 | 0x1cf4e8a6, | 1083 | 0x1cf4e8a6, |
1089 | /* 0x0245: timer_reset */ | 1084 | /* 0x0239: timer_reset */ |
1090 | 0xf634000d, | 1085 | 0xf634000d, |
1091 | 0x04bd000e, | 1086 | 0x04bd000e, |
1092 | /* 0x024f: timer_enable */ | 1087 | /* 0x0243: timer_enable */ |
1093 | 0x089a0eb5, | 1088 | 0x089a0eb5, |
1094 | 0xf6380001, | 1089 | 0xf6380001, |
1095 | 0x04bd0008, | 1090 | 0x04bd0008, |
1096 | /* 0x0258: timer_done */ | 1091 | /* 0x024c: timer_done */ |
1097 | 0xfc1031f4, | 1092 | 0xfc1031f4, |
1098 | 0xf890fc80, | 1093 | 0xf890fc80, |
1099 | /* 0x0261: send_proc */ | 1094 | /* 0x0255: send_proc */ |
1100 | 0xf980f900, | 1095 | 0xf980f900, |
1101 | 0x05e89890, | 1096 | 0x05e89890, |
1102 | 0xf004e998, | 1097 | 0xf004e998, |
@@ -1111,24 +1106,24 @@ uint32_t gk208_pmu_code[] = { | |||
1111 | 0x90b6038b, | 1106 | 0x90b6038b, |
1112 | 0x0794f001, | 1107 | 0x0794f001, |
1113 | 0xf404e9b5, | 1108 | 0xf404e9b5, |
1114 | /* 0x029a: send_done */ | 1109 | /* 0x028e: send_done */ |
1115 | 0x90fc0231, | 1110 | 0x90fc0231, |
1116 | 0x00f880fc, | 1111 | 0x00f880fc, |
1117 | /* 0x02a0: find */ | 1112 | /* 0x0294: find */ |
1118 | 0x580880f9, | 1113 | 0x580880f9, |
1119 | /* 0x02a7: find_loop */ | 1114 | /* 0x029b: find_loop */ |
1120 | 0x980131f4, | 1115 | 0x980131f4, |
1121 | 0xaea6008a, | 1116 | 0xaea6008a, |
1122 | 0xb6100bf4, | 1117 | 0xb6100bf4, |
1123 | 0x86b15880, | 1118 | 0x86b15880, |
1124 | 0x1bf40268, | 1119 | 0x1bf40268, |
1125 | 0x0132f4f1, | 1120 | 0x0132f4f1, |
1126 | /* 0x02bc: find_done */ | 1121 | /* 0x02b0: find_done */ |
1127 | 0x80fc8eb2, | 1122 | 0x80fc8eb2, |
1128 | /* 0x02c2: send */ | 1123 | /* 0x02b6: send */ |
1129 | 0xa07e00f8, | 1124 | 0x947e00f8, |
1130 | 0x01f40002, | 1125 | 0x01f40002, |
1131 | /* 0x02cb: recv */ | 1126 | /* 0x02bf: recv */ |
1132 | 0xf900f89b, | 1127 | 0xf900f89b, |
1133 | 0x9880f990, | 1128 | 0x9880f990, |
1134 | 0xe99805e8, | 1129 | 0xe99805e8, |
@@ -1148,10 +1143,10 @@ uint32_t gk208_pmu_code[] = { | |||
1148 | 0xa5f900ee, | 1143 | 0xa5f900ee, |
1149 | 0xf8fef0fc, | 1144 | 0xf8fef0fc, |
1150 | 0x0131f400, | 1145 | 0x0131f400, |
1151 | /* 0x0316: recv_done */ | 1146 | /* 0x030a: recv_done */ |
1152 | 0x80fcf0fc, | 1147 | 0x80fcf0fc, |
1153 | 0x00f890fc, | 1148 | 0x00f890fc, |
1154 | /* 0x031c: init */ | 1149 | /* 0x0310: init */ |
1155 | 0xcf010841, | 1150 | 0xcf010841, |
1156 | 0x11e70011, | 1151 | 0x11e70011, |
1157 | 0x14b60109, | 1152 | 0x14b60109, |
@@ -1170,12 +1165,12 @@ uint32_t gk208_pmu_code[] = { | |||
1170 | 0x011031f4, | 1165 | 0x011031f4, |
1171 | 0xf6380001, | 1166 | 0xf6380001, |
1172 | 0x04bd0001, | 1167 | 0x04bd0001, |
1173 | /* 0x0366: init_proc */ | 1168 | /* 0x035a: init_proc */ |
1174 | 0xf198580f, | 1169 | 0xf198580f, |
1175 | 0x0016b001, | 1170 | 0x0016b001, |
1176 | 0xf9fa0bf4, | 1171 | 0xf9fa0bf4, |
1177 | 0x58f0b615, | 1172 | 0x58f0b615, |
1178 | /* 0x0377: mulu32_32_64 */ | 1173 | /* 0x036b: mulu32_32_64 */ |
1179 | 0xf9f20ef4, | 1174 | 0xf9f20ef4, |
1180 | 0xf920f910, | 1175 | 0xf920f910, |
1181 | 0x9540f930, | 1176 | 0x9540f930, |
@@ -1196,7 +1191,7 @@ uint32_t gk208_pmu_code[] = { | |||
1196 | 0x00b3bb30, | 1191 | 0x00b3bb30, |
1197 | 0x30fc40fc, | 1192 | 0x30fc40fc, |
1198 | 0x10fc20fc, | 1193 | 0x10fc20fc, |
1199 | /* 0x03c6: host_send */ | 1194 | /* 0x03ba: host_send */ |
1200 | 0xb04100f8, | 1195 | 0xb04100f8, |
1201 | 0x0011cf04, | 1196 | 0x0011cf04, |
1202 | 0xcf04a042, | 1197 | 0xcf04a042, |
@@ -1207,18 +1202,18 @@ uint32_t gk208_pmu_code[] = { | |||
1207 | 0x03eb9802, | 1202 | 0x03eb9802, |
1208 | 0x9802ec98, | 1203 | 0x9802ec98, |
1209 | 0xee9801ed, | 1204 | 0xee9801ed, |
1210 | 0x02c27e00, | 1205 | 0x02b67e00, |
1211 | 0x0110b600, | 1206 | 0x0110b600, |
1212 | 0x400f1ec4, | 1207 | 0x400f1ec4, |
1213 | 0x0ef604b0, | 1208 | 0x0ef604b0, |
1214 | 0xf404bd00, | 1209 | 0xf404bd00, |
1215 | /* 0x0402: host_send_done */ | 1210 | /* 0x03f6: host_send_done */ |
1216 | 0x00f8c70e, | 1211 | 0x00f8c70e, |
1217 | /* 0x0404: host_recv */ | 1212 | /* 0x03f8: host_recv */ |
1218 | 0xf14e4941, | 1213 | 0xf14e4941, |
1219 | 0xa6525413, | 1214 | 0xa6525413, |
1220 | 0xb90bf4e1, | 1215 | 0xb90bf4e1, |
1221 | /* 0x0410: host_recv_wait */ | 1216 | /* 0x0404: host_recv_wait */ |
1222 | 0xcf04cc41, | 1217 | 0xcf04cc41, |
1223 | 0xc8420011, | 1218 | 0xc8420011, |
1224 | 0x0022cf04, | 1219 | 0x0022cf04, |
@@ -1235,7 +1230,7 @@ uint32_t gk208_pmu_code[] = { | |||
1235 | 0x04bd0002, | 1230 | 0x04bd0002, |
1236 | 0x00004002, | 1231 | 0x00004002, |
1237 | 0xbd0002f6, | 1232 | 0xbd0002f6, |
1238 | /* 0x0453: host_init */ | 1233 | /* 0x0447: host_init */ |
1239 | 0x4100f804, | 1234 | 0x4100f804, |
1240 | 0x14b60080, | 1235 | 0x14b60080, |
1241 | 0x7015f110, | 1236 | 0x7015f110, |
@@ -1248,7 +1243,7 @@ uint32_t gk208_pmu_code[] = { | |||
1248 | 0x0104bd00, | 1243 | 0x0104bd00, |
1249 | 0x04c44001, | 1244 | 0x04c44001, |
1250 | 0xbd0001f6, | 1245 | 0xbd0001f6, |
1251 | /* 0x0483: memx_func_enter */ | 1246 | /* 0x0477: memx_func_enter */ |
1252 | 0xf100f804, | 1247 | 0xf100f804, |
1253 | 0xf1162067, | 1248 | 0xf1162067, |
1254 | 0xf1f55d77, | 1249 | 0xf1f55d77, |
@@ -1275,19 +1270,19 @@ uint32_t gk208_pmu_code[] = { | |||
1275 | 0x00002e7e, | 1270 | 0x00002e7e, |
1276 | 0xe0400406, | 1271 | 0xe0400406, |
1277 | 0x0006f607, | 1272 | 0x0006f607, |
1278 | /* 0x04ea: memx_func_enter_wait */ | 1273 | /* 0x04de: memx_func_enter_wait */ |
1279 | 0xc04604bd, | 1274 | 0xc04604bd, |
1280 | 0x0066cf07, | 1275 | 0x0066cf07, |
1281 | 0xf40464f0, | 1276 | 0xf40464f0, |
1282 | 0x2c06f70b, | 1277 | 0x2c06f70b, |
1283 | 0xb50066cf, | 1278 | 0xb50066cf, |
1284 | 0x00f8f106, | 1279 | 0x00f8f106, |
1285 | /* 0x0500: memx_func_leave */ | 1280 | /* 0x04f4: memx_func_leave */ |
1286 | 0x66cf2c06, | 1281 | 0x66cf2c06, |
1287 | 0xf206b500, | 1282 | 0xf206b500, |
1288 | 0xe4400406, | 1283 | 0xe4400406, |
1289 | 0x0006f607, | 1284 | 0x0006f607, |
1290 | /* 0x0512: memx_func_leave_wait */ | 1285 | /* 0x0506: memx_func_leave_wait */ |
1291 | 0xc04604bd, | 1286 | 0xc04604bd, |
1292 | 0x0066cf07, | 1287 | 0x0066cf07, |
1293 | 0xf40464f0, | 1288 | 0xf40464f0, |
@@ -1314,10 +1309,10 @@ uint32_t gk208_pmu_code[] = { | |||
1314 | 0xf960f905, | 1309 | 0xf960f905, |
1315 | 0xfcd0fc80, | 1310 | 0xfcd0fc80, |
1316 | 0x002e7ee0, | 1311 | 0x002e7ee0, |
1317 | /* 0x057b: memx_func_wait_vblank */ | 1312 | /* 0x056f: memx_func_wait_vblank */ |
1318 | 0xb600f800, | 1313 | 0xb600f800, |
1319 | 0x00f80410, | 1314 | 0x00f80410, |
1320 | /* 0x0580: memx_func_wr32 */ | 1315 | /* 0x0574: memx_func_wr32 */ |
1321 | 0x98001698, | 1316 | 0x98001698, |
1322 | 0x10b60115, | 1317 | 0x10b60115, |
1323 | 0xf960f908, | 1318 | 0xf960f908, |
@@ -1325,23 +1320,23 @@ uint32_t gk208_pmu_code[] = { | |||
1325 | 0x002e7ee0, | 1320 | 0x002e7ee0, |
1326 | 0x0242b600, | 1321 | 0x0242b600, |
1327 | 0xf8e81bf4, | 1322 | 0xf8e81bf4, |
1328 | /* 0x059d: memx_func_wait */ | 1323 | /* 0x0591: memx_func_wait */ |
1329 | 0xcf2c0800, | 1324 | 0xcf2c0800, |
1330 | 0x1e980088, | 1325 | 0x1e980088, |
1331 | 0x011d9800, | 1326 | 0x011d9800, |
1332 | 0x98021c98, | 1327 | 0x98021c98, |
1333 | 0x10b6031b, | 1328 | 0x10b6031b, |
1334 | 0x00797e10, | 1329 | 0x00797e10, |
1335 | /* 0x05b7: memx_func_delay */ | 1330 | /* 0x05ab: memx_func_delay */ |
1336 | 0x9800f800, | 1331 | 0x9800f800, |
1337 | 0x10b6001e, | 1332 | 0x10b6001e, |
1338 | 0x005d7e04, | 1333 | 0x005d7e04, |
1339 | /* 0x05c3: memx_func_train */ | 1334 | /* 0x05b7: memx_func_train */ |
1340 | 0xf800f800, | 1335 | 0xf800f800, |
1341 | /* 0x05c5: memx_exec */ | 1336 | /* 0x05b9: memx_exec */ |
1342 | 0xf9e0f900, | 1337 | 0xf9e0f900, |
1343 | 0xb2c1b2d0, | 1338 | 0xb2c1b2d0, |
1344 | /* 0x05cd: memx_exec_next */ | 1339 | /* 0x05c1: memx_exec_next */ |
1345 | 0x001398b2, | 1340 | 0x001398b2, |
1346 | 0xe70410b6, | 1341 | 0xe70410b6, |
1347 | 0xe701f034, | 1342 | 0xe701f034, |
@@ -1354,111 +1349,111 @@ uint32_t gk208_pmu_code[] = { | |||
1354 | 0x02cbbbf2, | 1349 | 0x02cbbbf2, |
1355 | 0xcf07c44b, | 1350 | 0xcf07c44b, |
1356 | 0xd0fc00bb, | 1351 | 0xd0fc00bb, |
1357 | 0xc27ee0fc, | 1352 | 0xb67ee0fc, |
1358 | 0x00f80002, | 1353 | 0x00f80002, |
1359 | /* 0x0604: memx_info */ | 1354 | /* 0x05f8: memx_info */ |
1360 | 0xf401c670, | 1355 | 0xf401c670, |
1361 | /* 0x060a: memx_info_data */ | 1356 | /* 0x05fe: memx_info_data */ |
1362 | 0xcc4c0c0b, | 1357 | 0xcc4c0c0b, |
1363 | 0x08004b03, | 1358 | 0x08004b03, |
1364 | /* 0x0613: memx_info_train */ | 1359 | /* 0x0607: memx_info_train */ |
1365 | 0x4c090ef4, | 1360 | 0x4c090ef4, |
1366 | 0x004b0bcc, | 1361 | 0x004b0bcc, |
1367 | /* 0x0619: memx_info_send */ | 1362 | /* 0x060d: memx_info_send */ |
1368 | 0x02c27e01, | 1363 | 0x02b67e01, |
1369 | /* 0x061f: memx_recv */ | 1364 | /* 0x0613: memx_recv */ |
1370 | 0xb000f800, | 1365 | 0xb000f800, |
1371 | 0x0bf401d6, | 1366 | 0x0bf401d6, |
1372 | 0x00d6b0a3, | 1367 | 0x00d6b0a3, |
1373 | 0xf8dc0bf4, | 1368 | 0xf8dc0bf4, |
1374 | /* 0x062d: memx_init */ | 1369 | /* 0x0621: memx_init */ |
1375 | /* 0x062f: perf_recv */ | 1370 | /* 0x0623: perf_recv */ |
1376 | 0xf800f800, | 1371 | 0xf800f800, |
1377 | /* 0x0631: perf_init */ | 1372 | /* 0x0625: perf_init */ |
1378 | /* 0x0633: i2c_drive_scl */ | 1373 | /* 0x0627: i2c_drive_scl */ |
1379 | 0xb000f800, | 1374 | 0xb000f800, |
1380 | 0x0bf40036, | 1375 | 0x0bf40036, |
1381 | 0x07e0400d, | 1376 | 0x07e0400d, |
1382 | 0xbd0001f6, | 1377 | 0xbd0001f6, |
1383 | /* 0x0643: i2c_drive_scl_lo */ | 1378 | /* 0x0637: i2c_drive_scl_lo */ |
1384 | 0x4000f804, | 1379 | 0x4000f804, |
1385 | 0x01f607e4, | 1380 | 0x01f607e4, |
1386 | 0xf804bd00, | 1381 | 0xf804bd00, |
1387 | /* 0x064d: i2c_drive_sda */ | 1382 | /* 0x0641: i2c_drive_sda */ |
1388 | 0x0036b000, | 1383 | 0x0036b000, |
1389 | 0x400d0bf4, | 1384 | 0x400d0bf4, |
1390 | 0x02f607e0, | 1385 | 0x02f607e0, |
1391 | 0xf804bd00, | 1386 | 0xf804bd00, |
1392 | /* 0x065d: i2c_drive_sda_lo */ | 1387 | /* 0x0651: i2c_drive_sda_lo */ |
1393 | 0x07e44000, | 1388 | 0x07e44000, |
1394 | 0xbd0002f6, | 1389 | 0xbd0002f6, |
1395 | /* 0x0667: i2c_sense_scl */ | 1390 | /* 0x065b: i2c_sense_scl */ |
1396 | 0xf400f804, | 1391 | 0xf400f804, |
1397 | 0xc4430132, | 1392 | 0xc4430132, |
1398 | 0x0033cf07, | 1393 | 0x0033cf07, |
1399 | 0xf40431fd, | 1394 | 0xf40431fd, |
1400 | 0x31f4060b, | 1395 | 0x31f4060b, |
1401 | /* 0x0679: i2c_sense_scl_done */ | 1396 | /* 0x066d: i2c_sense_scl_done */ |
1402 | /* 0x067b: i2c_sense_sda */ | 1397 | /* 0x066f: i2c_sense_sda */ |
1403 | 0xf400f801, | 1398 | 0xf400f801, |
1404 | 0xc4430132, | 1399 | 0xc4430132, |
1405 | 0x0033cf07, | 1400 | 0x0033cf07, |
1406 | 0xf40432fd, | 1401 | 0xf40432fd, |
1407 | 0x31f4060b, | 1402 | 0x31f4060b, |
1408 | /* 0x068d: i2c_sense_sda_done */ | 1403 | /* 0x0681: i2c_sense_sda_done */ |
1409 | /* 0x068f: i2c_raise_scl */ | 1404 | /* 0x0683: i2c_raise_scl */ |
1410 | 0xf900f801, | 1405 | 0xf900f801, |
1411 | 0x08984440, | 1406 | 0x08984440, |
1412 | 0x337e0103, | 1407 | 0x277e0103, |
1413 | /* 0x069a: i2c_raise_scl_wait */ | 1408 | /* 0x068e: i2c_raise_scl_wait */ |
1414 | 0xe84e0006, | 1409 | 0xe84e0006, |
1415 | 0x005d7e03, | 1410 | 0x005d7e03, |
1416 | 0x06677e00, | 1411 | 0x065b7e00, |
1417 | 0x0901f400, | 1412 | 0x0901f400, |
1418 | 0xf40142b6, | 1413 | 0xf40142b6, |
1419 | /* 0x06ae: i2c_raise_scl_done */ | 1414 | /* 0x06a2: i2c_raise_scl_done */ |
1420 | 0x40fcef1b, | 1415 | 0x40fcef1b, |
1421 | /* 0x06b2: i2c_start */ | 1416 | /* 0x06a6: i2c_start */ |
1422 | 0x677e00f8, | 1417 | 0x5b7e00f8, |
1423 | 0x11f40006, | 1418 | 0x11f40006, |
1424 | 0x067b7e0d, | 1419 | 0x066f7e0d, |
1425 | 0x0611f400, | 1420 | 0x0611f400, |
1426 | /* 0x06c3: i2c_start_rep */ | 1421 | /* 0x06b7: i2c_start_rep */ |
1427 | 0x032e0ef4, | 1422 | 0x032e0ef4, |
1428 | 0x06337e00, | 1423 | 0x06277e00, |
1429 | 0x7e010300, | 1424 | 0x7e010300, |
1430 | 0xbb00064d, | 1425 | 0xbb000641, |
1431 | 0x65b60076, | 1426 | 0x65b60076, |
1432 | 0x9450f904, | 1427 | 0x9450f904, |
1433 | 0x56bb0465, | 1428 | 0x56bb0465, |
1434 | 0xfd50bd02, | 1429 | 0xfd50bd02, |
1435 | 0x50fc0475, | 1430 | 0x50fc0475, |
1436 | 0x00068f7e, | 1431 | 0x0006837e, |
1437 | 0xf40464b6, | 1432 | 0xf40464b6, |
1438 | /* 0x06ee: i2c_start_send */ | 1433 | /* 0x06e2: i2c_start_send */ |
1439 | 0x00031d11, | 1434 | 0x00031d11, |
1440 | 0x00064d7e, | 1435 | 0x0006417e, |
1441 | 0x7e13884e, | 1436 | 0x7e13884e, |
1442 | 0x0300005d, | 1437 | 0x0300005d, |
1443 | 0x06337e00, | 1438 | 0x06277e00, |
1444 | 0x13884e00, | 1439 | 0x13884e00, |
1445 | 0x00005d7e, | 1440 | 0x00005d7e, |
1446 | /* 0x0708: i2c_start_out */ | 1441 | /* 0x06fc: i2c_start_out */ |
1447 | /* 0x070a: i2c_stop */ | 1442 | /* 0x06fe: i2c_stop */ |
1448 | 0x000300f8, | 1443 | 0x000300f8, |
1449 | 0x0006337e, | 1444 | 0x0006277e, |
1450 | 0x4d7e0003, | 1445 | 0x417e0003, |
1451 | 0xe84e0006, | 1446 | 0xe84e0006, |
1452 | 0x005d7e03, | 1447 | 0x005d7e03, |
1453 | 0x7e010300, | 1448 | 0x7e010300, |
1454 | 0x4e000633, | 1449 | 0x4e000627, |
1455 | 0x5d7e1388, | 1450 | 0x5d7e1388, |
1456 | 0x01030000, | 1451 | 0x01030000, |
1457 | 0x00064d7e, | 1452 | 0x0006417e, |
1458 | 0x7e13884e, | 1453 | 0x7e13884e, |
1459 | 0xf800005d, | 1454 | 0xf800005d, |
1460 | /* 0x0739: i2c_bitw */ | 1455 | /* 0x072d: i2c_bitw */ |
1461 | 0x064d7e00, | 1456 | 0x06417e00, |
1462 | 0x03e84e00, | 1457 | 0x03e84e00, |
1463 | 0x00005d7e, | 1458 | 0x00005d7e, |
1464 | 0xb60076bb, | 1459 | 0xb60076bb, |
@@ -1466,18 +1461,18 @@ uint32_t gk208_pmu_code[] = { | |||
1466 | 0xbb046594, | 1461 | 0xbb046594, |
1467 | 0x50bd0256, | 1462 | 0x50bd0256, |
1468 | 0xfc0475fd, | 1463 | 0xfc0475fd, |
1469 | 0x068f7e50, | 1464 | 0x06837e50, |
1470 | 0x0464b600, | 1465 | 0x0464b600, |
1471 | 0x4e1711f4, | 1466 | 0x4e1711f4, |
1472 | 0x5d7e1388, | 1467 | 0x5d7e1388, |
1473 | 0x00030000, | 1468 | 0x00030000, |
1474 | 0x0006337e, | 1469 | 0x0006277e, |
1475 | 0x7e13884e, | 1470 | 0x7e13884e, |
1476 | /* 0x0777: i2c_bitw_out */ | 1471 | /* 0x076b: i2c_bitw_out */ |
1477 | 0xf800005d, | 1472 | 0xf800005d, |
1478 | /* 0x0779: i2c_bitr */ | 1473 | /* 0x076d: i2c_bitr */ |
1479 | 0x7e010300, | 1474 | 0x7e010300, |
1480 | 0x4e00064d, | 1475 | 0x4e000641, |
1481 | 0x5d7e03e8, | 1476 | 0x5d7e03e8, |
1482 | 0x76bb0000, | 1477 | 0x76bb0000, |
1483 | 0x0465b600, | 1478 | 0x0465b600, |
@@ -1485,25 +1480,25 @@ uint32_t gk208_pmu_code[] = { | |||
1485 | 0x0256bb04, | 1480 | 0x0256bb04, |
1486 | 0x75fd50bd, | 1481 | 0x75fd50bd, |
1487 | 0x7e50fc04, | 1482 | 0x7e50fc04, |
1488 | 0xb600068f, | 1483 | 0xb6000683, |
1489 | 0x11f40464, | 1484 | 0x11f40464, |
1490 | 0x067b7e1a, | 1485 | 0x066f7e1a, |
1491 | 0x7e000300, | 1486 | 0x7e000300, |
1492 | 0x4e000633, | 1487 | 0x4e000627, |
1493 | 0x5d7e1388, | 1488 | 0x5d7e1388, |
1494 | 0x3cf00000, | 1489 | 0x3cf00000, |
1495 | 0x0131f401, | 1490 | 0x0131f401, |
1496 | /* 0x07bc: i2c_bitr_done */ | 1491 | /* 0x07b0: i2c_bitr_done */ |
1497 | /* 0x07be: i2c_get_byte */ | 1492 | /* 0x07b2: i2c_get_byte */ |
1498 | 0x000500f8, | 1493 | 0x000500f8, |
1499 | /* 0x07c2: i2c_get_byte_next */ | 1494 | /* 0x07b6: i2c_get_byte_next */ |
1500 | 0x54b60804, | 1495 | 0x54b60804, |
1501 | 0x0076bb01, | 1496 | 0x0076bb01, |
1502 | 0xf90465b6, | 1497 | 0xf90465b6, |
1503 | 0x04659450, | 1498 | 0x04659450, |
1504 | 0xbd0256bb, | 1499 | 0xbd0256bb, |
1505 | 0x0475fd50, | 1500 | 0x0475fd50, |
1506 | 0x797e50fc, | 1501 | 0x6d7e50fc, |
1507 | 0x64b60007, | 1502 | 0x64b60007, |
1508 | 0x2a11f404, | 1503 | 0x2a11f404, |
1509 | 0xb60553fd, | 1504 | 0xb60553fd, |
@@ -1514,11 +1509,11 @@ uint32_t gk208_pmu_code[] = { | |||
1514 | 0x56bb0465, | 1509 | 0x56bb0465, |
1515 | 0xfd50bd02, | 1510 | 0xfd50bd02, |
1516 | 0x50fc0475, | 1511 | 0x50fc0475, |
1517 | 0x0007397e, | 1512 | 0x00072d7e, |
1518 | /* 0x080b: i2c_get_byte_done */ | 1513 | /* 0x07ff: i2c_get_byte_done */ |
1519 | 0xf80464b6, | 1514 | 0xf80464b6, |
1520 | /* 0x080d: i2c_put_byte */ | 1515 | /* 0x0801: i2c_put_byte */ |
1521 | /* 0x080f: i2c_put_byte_next */ | 1516 | /* 0x0803: i2c_put_byte_next */ |
1522 | 0xb6080400, | 1517 | 0xb6080400, |
1523 | 0x54ff0142, | 1518 | 0x54ff0142, |
1524 | 0x0076bb38, | 1519 | 0x0076bb38, |
@@ -1526,7 +1521,7 @@ uint32_t gk208_pmu_code[] = { | |||
1526 | 0x04659450, | 1521 | 0x04659450, |
1527 | 0xbd0256bb, | 1522 | 0xbd0256bb, |
1528 | 0x0475fd50, | 1523 | 0x0475fd50, |
1529 | 0x397e50fc, | 1524 | 0x2d7e50fc, |
1530 | 0x64b60007, | 1525 | 0x64b60007, |
1531 | 0x3411f404, | 1526 | 0x3411f404, |
1532 | 0xf40046b0, | 1527 | 0xf40046b0, |
@@ -1536,20 +1531,20 @@ uint32_t gk208_pmu_code[] = { | |||
1536 | 0x0256bb04, | 1531 | 0x0256bb04, |
1537 | 0x75fd50bd, | 1532 | 0x75fd50bd, |
1538 | 0x7e50fc04, | 1533 | 0x7e50fc04, |
1539 | 0xb6000779, | 1534 | 0xb600076d, |
1540 | 0x11f40464, | 1535 | 0x11f40464, |
1541 | 0x0076bb0f, | 1536 | 0x0076bb0f, |
1542 | 0xf40136b0, | 1537 | 0xf40136b0, |
1543 | 0x32f4061b, | 1538 | 0x32f4061b, |
1544 | /* 0x0865: i2c_put_byte_done */ | 1539 | /* 0x0859: i2c_put_byte_done */ |
1545 | /* 0x0867: i2c_addr */ | 1540 | /* 0x085b: i2c_addr */ |
1546 | 0xbb00f801, | 1541 | 0xbb00f801, |
1547 | 0x65b60076, | 1542 | 0x65b60076, |
1548 | 0x9450f904, | 1543 | 0x9450f904, |
1549 | 0x56bb0465, | 1544 | 0x56bb0465, |
1550 | 0xfd50bd02, | 1545 | 0xfd50bd02, |
1551 | 0x50fc0475, | 1546 | 0x50fc0475, |
1552 | 0x0006b27e, | 1547 | 0x0006a67e, |
1553 | 0xf40464b6, | 1548 | 0xf40464b6, |
1554 | 0xc3e72911, | 1549 | 0xc3e72911, |
1555 | 0x34b6012e, | 1550 | 0x34b6012e, |
@@ -1559,25 +1554,25 @@ uint32_t gk208_pmu_code[] = { | |||
1559 | 0xbb046594, | 1554 | 0xbb046594, |
1560 | 0x50bd0256, | 1555 | 0x50bd0256, |
1561 | 0xfc0475fd, | 1556 | 0xfc0475fd, |
1562 | 0x080d7e50, | 1557 | 0x08017e50, |
1563 | 0x0464b600, | 1558 | 0x0464b600, |
1564 | /* 0x08ac: i2c_addr_done */ | 1559 | /* 0x08a0: i2c_addr_done */ |
1565 | /* 0x08ae: i2c_acquire_addr */ | 1560 | /* 0x08a2: i2c_acquire_addr */ |
1566 | 0xcec700f8, | 1561 | 0xcec700f8, |
1567 | 0x05e4b6f8, | 1562 | 0x05e4b6f8, |
1568 | 0xd014e0b7, | 1563 | 0xd014e0b7, |
1569 | /* 0x08ba: i2c_acquire */ | 1564 | /* 0x08ae: i2c_acquire */ |
1570 | 0xae7e00f8, | 1565 | 0xa27e00f8, |
1571 | 0x047e0008, | 1566 | 0x047e0008, |
1572 | 0xd9f00000, | 1567 | 0xd9f00000, |
1573 | 0x002e7e03, | 1568 | 0x002e7e03, |
1574 | /* 0x08cb: i2c_release */ | 1569 | /* 0x08bf: i2c_release */ |
1575 | 0x7e00f800, | 1570 | 0x7e00f800, |
1576 | 0x7e0008ae, | 1571 | 0x7e0008a2, |
1577 | 0xf0000004, | 1572 | 0xf0000004, |
1578 | 0x2e7e03da, | 1573 | 0x2e7e03da, |
1579 | 0x00f80000, | 1574 | 0x00f80000, |
1580 | /* 0x08dc: i2c_recv */ | 1575 | /* 0x08d0: i2c_recv */ |
1581 | 0xc70132f4, | 1576 | 0xc70132f4, |
1582 | 0x14b6f8c1, | 1577 | 0x14b6f8c1, |
1583 | 0x2816b002, | 1578 | 0x2816b002, |
@@ -1596,7 +1591,7 @@ uint32_t gk208_pmu_code[] = { | |||
1596 | 0xbb046594, | 1591 | 0xbb046594, |
1597 | 0x50bd0256, | 1592 | 0x50bd0256, |
1598 | 0xfc0475fd, | 1593 | 0xfc0475fd, |
1599 | 0x08ba7e50, | 1594 | 0x08ae7e50, |
1600 | 0x0464b600, | 1595 | 0x0464b600, |
1601 | 0xd6b0d0fc, | 1596 | 0xd6b0d0fc, |
1602 | 0xb01bf500, | 1597 | 0xb01bf500, |
@@ -1606,7 +1601,7 @@ uint32_t gk208_pmu_code[] = { | |||
1606 | 0x56bb0465, | 1601 | 0x56bb0465, |
1607 | 0xfd50bd02, | 1602 | 0xfd50bd02, |
1608 | 0x50fc0475, | 1603 | 0x50fc0475, |
1609 | 0x0008677e, | 1604 | 0x00085b7e, |
1610 | 0xf50464b6, | 1605 | 0xf50464b6, |
1611 | 0xc700cc11, | 1606 | 0xc700cc11, |
1612 | 0x76bbe0c5, | 1607 | 0x76bbe0c5, |
@@ -1615,7 +1610,7 @@ uint32_t gk208_pmu_code[] = { | |||
1615 | 0x0256bb04, | 1610 | 0x0256bb04, |
1616 | 0x75fd50bd, | 1611 | 0x75fd50bd, |
1617 | 0x7e50fc04, | 1612 | 0x7e50fc04, |
1618 | 0xb600080d, | 1613 | 0xb6000801, |
1619 | 0x11f50464, | 1614 | 0x11f50464, |
1620 | 0x010500a9, | 1615 | 0x010500a9, |
1621 | 0xb60076bb, | 1616 | 0xb60076bb, |
@@ -1623,7 +1618,7 @@ uint32_t gk208_pmu_code[] = { | |||
1623 | 0xbb046594, | 1618 | 0xbb046594, |
1624 | 0x50bd0256, | 1619 | 0x50bd0256, |
1625 | 0xfc0475fd, | 1620 | 0xfc0475fd, |
1626 | 0x08677e50, | 1621 | 0x085b7e50, |
1627 | 0x0464b600, | 1622 | 0x0464b600, |
1628 | 0x008711f5, | 1623 | 0x008711f5, |
1629 | 0xb60076bb, | 1624 | 0xb60076bb, |
@@ -1631,7 +1626,7 @@ uint32_t gk208_pmu_code[] = { | |||
1631 | 0xbb046594, | 1626 | 0xbb046594, |
1632 | 0x50bd0256, | 1627 | 0x50bd0256, |
1633 | 0xfc0475fd, | 1628 | 0xfc0475fd, |
1634 | 0x07be7e50, | 1629 | 0x07b27e50, |
1635 | 0x0464b600, | 1630 | 0x0464b600, |
1636 | 0xcb6711f4, | 1631 | 0xcb6711f4, |
1637 | 0x76bbe05b, | 1632 | 0x76bbe05b, |
@@ -1640,36 +1635,36 @@ uint32_t gk208_pmu_code[] = { | |||
1640 | 0x0256bb04, | 1635 | 0x0256bb04, |
1641 | 0x75fd50bd, | 1636 | 0x75fd50bd, |
1642 | 0x7e50fc04, | 1637 | 0x7e50fc04, |
1643 | 0xb600070a, | 1638 | 0xb60006fe, |
1644 | 0x5bb20464, | 1639 | 0x5bb20464, |
1645 | 0x0ef474bd, | 1640 | 0x0ef474bd, |
1646 | /* 0x09e1: i2c_recv_not_rd08 */ | 1641 | /* 0x09d5: i2c_recv_not_rd08 */ |
1647 | 0x01d6b041, | 1642 | 0x01d6b041, |
1648 | 0x053b1bf4, | 1643 | 0x053b1bf4, |
1649 | 0x08677e00, | 1644 | 0x085b7e00, |
1650 | 0x3211f400, | 1645 | 0x3211f400, |
1651 | 0x7ee0c5c7, | 1646 | 0x7ee0c5c7, |
1652 | 0xf400080d, | 1647 | 0xf4000801, |
1653 | 0x00052811, | 1648 | 0x00052811, |
1654 | 0x0008677e, | 1649 | 0x00085b7e, |
1655 | 0xc71f11f4, | 1650 | 0xc71f11f4, |
1656 | 0x0d7ee0b5, | 1651 | 0x017ee0b5, |
1657 | 0x11f40008, | 1652 | 0x11f40008, |
1658 | 0x070a7e15, | 1653 | 0x06fe7e15, |
1659 | 0xc774bd00, | 1654 | 0xc774bd00, |
1660 | 0x1bf408c5, | 1655 | 0x1bf408c5, |
1661 | 0x0232f409, | 1656 | 0x0232f409, |
1662 | /* 0x0a1f: i2c_recv_not_wr08 */ | 1657 | /* 0x0a13: i2c_recv_not_wr08 */ |
1663 | /* 0x0a1f: i2c_recv_done */ | 1658 | /* 0x0a13: i2c_recv_done */ |
1664 | 0xc7030ef4, | 1659 | 0xc7030ef4, |
1665 | 0xcb7ef8ce, | 1660 | 0xbf7ef8ce, |
1666 | 0xe0fc0008, | 1661 | 0xe0fc0008, |
1667 | 0x12f4d0fc, | 1662 | 0x12f4d0fc, |
1668 | 0x7e7cb209, | 1663 | 0x7e7cb209, |
1669 | /* 0x0a33: i2c_recv_exit */ | 1664 | /* 0x0a27: i2c_recv_exit */ |
1670 | 0xf80002c2, | 1665 | 0xf80002b6, |
1671 | /* 0x0a35: i2c_init */ | 1666 | /* 0x0a29: i2c_init */ |
1672 | /* 0x0a37: test_recv */ | 1667 | /* 0x0a2b: test_recv */ |
1673 | 0x4100f800, | 1668 | 0x4100f800, |
1674 | 0x11cf0458, | 1669 | 0x11cf0458, |
1675 | 0x0110b600, | 1670 | 0x0110b600, |
@@ -1677,28 +1672,28 @@ uint32_t gk208_pmu_code[] = { | |||
1677 | 0x04bd0001, | 1672 | 0x04bd0001, |
1678 | 0xd900e7f1, | 1673 | 0xd900e7f1, |
1679 | 0x134fe3f1, | 1674 | 0x134fe3f1, |
1680 | 0x0002017e, | 1675 | 0x0001f57e, |
1681 | /* 0x0a56: test_init */ | 1676 | /* 0x0a4a: test_init */ |
1682 | 0x004e00f8, | 1677 | 0x004e00f8, |
1683 | 0x02017e08, | 1678 | 0x01f57e08, |
1684 | /* 0x0a5f: idle_recv */ | 1679 | /* 0x0a53: idle_recv */ |
1685 | 0xf800f800, | 1680 | 0xf800f800, |
1686 | /* 0x0a61: idle */ | 1681 | /* 0x0a55: idle */ |
1687 | 0x0031f400, | 1682 | 0x0031f400, |
1688 | 0xcf045441, | 1683 | 0xcf045441, |
1689 | 0x10b60011, | 1684 | 0x10b60011, |
1690 | 0x04544001, | 1685 | 0x04544001, |
1691 | 0xbd0001f6, | 1686 | 0xbd0001f6, |
1692 | /* 0x0a75: idle_loop */ | 1687 | /* 0x0a69: idle_loop */ |
1693 | 0xf4580104, | 1688 | 0xf4580104, |
1694 | /* 0x0a7a: idle_proc */ | 1689 | /* 0x0a6e: idle_proc */ |
1695 | /* 0x0a7a: idle_proc_exec */ | 1690 | /* 0x0a6e: idle_proc_exec */ |
1696 | 0x10f90232, | 1691 | 0x10f90232, |
1697 | 0xcb7e1eb2, | 1692 | 0xbf7e1eb2, |
1698 | 0x10fc0002, | 1693 | 0x10fc0002, |
1699 | 0xf40911f4, | 1694 | 0xf40911f4, |
1700 | 0x0ef40231, | 1695 | 0x0ef40231, |
1701 | /* 0x0a8d: idle_proc_next */ | 1696 | /* 0x0a81: idle_proc_next */ |
1702 | 0x5810b6f0, | 1697 | 0x5810b6f0, |
1703 | 0x1bf41fa6, | 1698 | 0x1bf41fa6, |
1704 | 0xe002f4e8, | 1699 | 0xe002f4e8, |
@@ -1728,4 +1723,7 @@ uint32_t gk208_pmu_code[] = { | |||
1728 | 0x00000000, | 1723 | 0x00000000, |
1729 | 0x00000000, | 1724 | 0x00000000, |
1730 | 0x00000000, | 1725 | 0x00000000, |
1726 | 0x00000000, | ||
1727 | 0x00000000, | ||
1728 | 0x00000000, | ||
1731 | }; | 1729 | }; |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h index 2686f8fad0f5..516569270bac 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/gt215.fuc3.h | |||
@@ -24,8 +24,8 @@ uint32_t gt215_pmu_data[] = { | |||
24 | 0x00000000, | 24 | 0x00000000, |
25 | /* 0x0058: proc_list_head */ | 25 | /* 0x0058: proc_list_head */ |
26 | 0x54534f48, | 26 | 0x54534f48, |
27 | 0x00000512, | 27 | 0x00000507, |
28 | 0x000004af, | 28 | 0x000004a4, |
29 | 0x00000000, | 29 | 0x00000000, |
30 | 0x00000000, | 30 | 0x00000000, |
31 | 0x00000000, | 31 | 0x00000000, |
@@ -46,8 +46,8 @@ uint32_t gt215_pmu_data[] = { | |||
46 | 0x00000000, | 46 | 0x00000000, |
47 | 0x00000000, | 47 | 0x00000000, |
48 | 0x584d454d, | 48 | 0x584d454d, |
49 | 0x00000842, | 49 | 0x00000837, |
50 | 0x00000834, | 50 | 0x00000829, |
51 | 0x00000000, | 51 | 0x00000000, |
52 | 0x00000000, | 52 | 0x00000000, |
53 | 0x00000000, | 53 | 0x00000000, |
@@ -68,8 +68,8 @@ uint32_t gt215_pmu_data[] = { | |||
68 | 0x00000000, | 68 | 0x00000000, |
69 | 0x00000000, | 69 | 0x00000000, |
70 | 0x46524550, | 70 | 0x46524550, |
71 | 0x00000846, | 71 | 0x0000083b, |
72 | 0x00000844, | 72 | 0x00000839, |
73 | 0x00000000, | 73 | 0x00000000, |
74 | 0x00000000, | 74 | 0x00000000, |
75 | 0x00000000, | 75 | 0x00000000, |
@@ -90,8 +90,8 @@ uint32_t gt215_pmu_data[] = { | |||
90 | 0x00000000, | 90 | 0x00000000, |
91 | 0x00000000, | 91 | 0x00000000, |
92 | 0x5f433249, | 92 | 0x5f433249, |
93 | 0x00000c76, | 93 | 0x00000c6b, |
94 | 0x00000b19, | 94 | 0x00000b0e, |
95 | 0x00000000, | 95 | 0x00000000, |
96 | 0x00000000, | 96 | 0x00000000, |
97 | 0x00000000, | 97 | 0x00000000, |
@@ -112,8 +112,8 @@ uint32_t gt215_pmu_data[] = { | |||
112 | 0x00000000, | 112 | 0x00000000, |
113 | 0x00000000, | 113 | 0x00000000, |
114 | 0x54534554, | 114 | 0x54534554, |
115 | 0x00000c9f, | 115 | 0x00000c94, |
116 | 0x00000c78, | 116 | 0x00000c6d, |
117 | 0x00000000, | 117 | 0x00000000, |
118 | 0x00000000, | 118 | 0x00000000, |
119 | 0x00000000, | 119 | 0x00000000, |
@@ -134,8 +134,8 @@ uint32_t gt215_pmu_data[] = { | |||
134 | 0x00000000, | 134 | 0x00000000, |
135 | 0x00000000, | 135 | 0x00000000, |
136 | 0x454c4449, | 136 | 0x454c4449, |
137 | 0x00000cab, | 137 | 0x00000ca0, |
138 | 0x00000ca9, | 138 | 0x00000c9e, |
139 | 0x00000000, | 139 | 0x00000000, |
140 | 0x00000000, | 140 | 0x00000000, |
141 | 0x00000000, | 141 | 0x00000000, |
@@ -229,26 +229,26 @@ uint32_t gt215_pmu_data[] = { | |||
229 | /* 0x0370: memx_func_head */ | 229 | /* 0x0370: memx_func_head */ |
230 | 0x00000001, | 230 | 0x00000001, |
231 | 0x00000000, | 231 | 0x00000000, |
232 | 0x00000551, | 232 | 0x00000546, |
233 | /* 0x037c: memx_func_next */ | 233 | /* 0x037c: memx_func_next */ |
234 | 0x00000002, | 234 | 0x00000002, |
235 | 0x00000000, | 235 | 0x00000000, |
236 | 0x000005a8, | 236 | 0x0000059d, |
237 | 0x00000003, | 237 | 0x00000003, |
238 | 0x00000002, | 238 | 0x00000002, |
239 | 0x0000063a, | 239 | 0x0000062f, |
240 | 0x00040004, | 240 | 0x00040004, |
241 | 0x00000000, | 241 | 0x00000000, |
242 | 0x00000656, | 242 | 0x0000064b, |
243 | 0x00010005, | 243 | 0x00010005, |
244 | 0x00000000, | 244 | 0x00000000, |
245 | 0x00000673, | 245 | 0x00000668, |
246 | 0x00010006, | 246 | 0x00010006, |
247 | 0x00000000, | 247 | 0x00000000, |
248 | 0x000005f8, | 248 | 0x000005ed, |
249 | 0x00000007, | 249 | 0x00000007, |
250 | 0x00000000, | 250 | 0x00000000, |
251 | 0x0000067e, | 251 | 0x00000673, |
252 | /* 0x03c4: memx_func_tail */ | 252 | /* 0x03c4: memx_func_tail */ |
253 | /* 0x03c4: memx_ts_start */ | 253 | /* 0x03c4: memx_ts_start */ |
254 | 0x00000000, | 254 | 0x00000000, |
@@ -917,7 +917,7 @@ uint32_t gt215_pmu_data[] = { | |||
917 | }; | 917 | }; |
918 | 918 | ||
919 | uint32_t gt215_pmu_code[] = { | 919 | uint32_t gt215_pmu_code[] = { |
920 | 0x039e0ef5, | 920 | 0x03930ef5, |
921 | /* 0x0004: rd32 */ | 921 | /* 0x0004: rd32 */ |
922 | 0x07a007f1, | 922 | 0x07a007f1, |
923 | 0xd00604b6, | 923 | 0xd00604b6, |
@@ -987,7 +987,7 @@ uint32_t gt215_pmu_code[] = { | |||
987 | 0xbb9a0a98, | 987 | 0xbb9a0a98, |
988 | 0x1cf4029a, | 988 | 0x1cf4029a, |
989 | 0x01d7f00f, | 989 | 0x01d7f00f, |
990 | 0x02dd21f5, | 990 | 0x02d221f5, |
991 | 0x0ef494bd, | 991 | 0x0ef494bd, |
992 | /* 0x00f9: intr_watchdog_next_time */ | 992 | /* 0x00f9: intr_watchdog_next_time */ |
993 | 0x9b0a9815, | 993 | 0x9b0a9815, |
@@ -1039,7 +1039,7 @@ uint32_t gt215_pmu_code[] = { | |||
1039 | 0x48e7f1c0, | 1039 | 0x48e7f1c0, |
1040 | 0x53e3f14f, | 1040 | 0x53e3f14f, |
1041 | 0x00d7f054, | 1041 | 0x00d7f054, |
1042 | 0x034221f5, | 1042 | 0x033721f5, |
1043 | 0x07f1c0fc, | 1043 | 0x07f1c0fc, |
1044 | 0x04b604c0, | 1044 | 0x04b604c0, |
1045 | 0x000cd006, | 1045 | 0x000cd006, |
@@ -1048,820 +1048,818 @@ uint32_t gt215_pmu_code[] = { | |||
1048 | 0x04b60688, | 1048 | 0x04b60688, |
1049 | 0x0009d006, | 1049 | 0x0009d006, |
1050 | /* 0x01ca: intr_skip_subintr */ | 1050 | /* 0x01ca: intr_skip_subintr */ |
1051 | 0x89c404bd, | 1051 | 0x97f104bd, |
1052 | 0x070bf420, | 1052 | 0x90bd00e0, |
1053 | 0xffbfa4f1, | 1053 | 0xf00489fd, |
1054 | /* 0x01d4: intr_skip_pause */ | 1054 | 0x04b60407, |
1055 | 0xf44089c4, | 1055 | 0x0008d006, |
1056 | 0xa4f1070b, | 1056 | 0x80fc04bd, |
1057 | /* 0x01de: intr_skip_user0 */ | 1057 | 0xfc0088fe, |
1058 | 0x07f0ffbf, | 1058 | 0xfce0fcf0, |
1059 | 0x0604b604, | 1059 | 0xfcc0fcd0, |
1060 | 0xbd0008d0, | 1060 | 0xfca0fcb0, |
1061 | 0xfe80fc04, | 1061 | 0xfc80fc90, |
1062 | 0xf0fc0088, | 1062 | 0x0032f400, |
1063 | 0xd0fce0fc, | 1063 | /* 0x01fa: ticks_from_ns */ |
1064 | 0xb0fcc0fc, | 1064 | 0xc0f901f8, |
1065 | 0x90fca0fc, | ||
1066 | 0x00fc80fc, | ||
1067 | 0xf80032f4, | ||
1068 | /* 0x0205: ticks_from_ns */ | ||
1069 | 0xf9c0f901, | ||
1070 | 0xcbd7f1b0, | ||
1071 | 0x00d3f000, | ||
1072 | 0x041321f5, | ||
1073 | 0x03e8ccec, | ||
1074 | 0xf400b4b0, | ||
1075 | 0xeeec120b, | ||
1076 | 0xd7f103e8, | ||
1077 | 0xd3f000cb, | ||
1078 | 0x1321f500, | ||
1079 | /* 0x022d: ticks_from_ns_quit */ | ||
1080 | 0x02ceb904, | ||
1081 | 0xc0fcb0fc, | ||
1082 | /* 0x0236: ticks_from_us */ | ||
1083 | 0xc0f900f8, | ||
1084 | 0xd7f1b0f9, | 1065 | 0xd7f1b0f9, |
1085 | 0xd3f000cb, | 1066 | 0xd3f000cb, |
1086 | 0x1321f500, | 1067 | 0x0821f500, |
1087 | 0x02ceb904, | 1068 | 0xe8ccec04, |
1088 | 0xf400b4b0, | 1069 | 0x00b4b003, |
1089 | 0xe4bd050b, | 1070 | 0xec120bf4, |
1090 | /* 0x0250: ticks_from_us_quit */ | 1071 | 0xf103e8ee, |
1091 | 0xc0fcb0fc, | 1072 | 0xf000cbd7, |
1092 | /* 0x0256: ticks_to_us */ | 1073 | 0x21f500d3, |
1093 | 0xd7f100f8, | 1074 | /* 0x0222: ticks_from_ns_quit */ |
1094 | 0xd3f000cb, | 1075 | 0xceb90408, |
1095 | 0xecedff00, | 1076 | 0xfcb0fc02, |
1096 | /* 0x0262: timer */ | 1077 | /* 0x022b: ticks_from_us */ |
1097 | 0x90f900f8, | 1078 | 0xf900f8c0, |
1098 | 0x32f480f9, | 1079 | 0xf1b0f9c0, |
1099 | 0x03f89810, | 1080 | 0xf000cbd7, |
1100 | 0xf40086b0, | 1081 | 0x21f500d3, |
1101 | 0x84bd651c, | 1082 | 0xceb90408, |
1102 | 0xb63807f0, | 1083 | 0x00b4b002, |
1103 | 0x08d00604, | 1084 | 0xbd050bf4, |
1104 | 0xf004bd00, | 1085 | /* 0x0245: ticks_from_us_quit */ |
1105 | 0x84b63487, | 1086 | 0xfcb0fce4, |
1106 | 0x0088cf06, | 1087 | /* 0x024b: ticks_to_us */ |
1107 | 0xbb9a0998, | 1088 | 0xf100f8c0, |
1108 | 0xe9bb0298, | 1089 | 0xf000cbd7, |
1109 | 0x03fe8000, | 1090 | 0xedff00d3, |
1110 | 0xb60887f0, | 1091 | /* 0x0257: timer */ |
1111 | 0x88cf0684, | 1092 | 0xf900f8ec, |
1112 | 0x0284f000, | 1093 | 0xf480f990, |
1113 | 0xf0261bf4, | 1094 | 0xf8981032, |
1114 | 0x84b63487, | 1095 | 0x0086b003, |
1115 | 0x0088cf06, | 1096 | 0xbd651cf4, |
1116 | 0xf406e0b8, | 1097 | 0x3807f084, |
1117 | 0xe8b8090b, | ||
1118 | 0x111cf406, | ||
1119 | /* 0x02b8: timer_reset */ | ||
1120 | 0xb63407f0, | ||
1121 | 0x0ed00604, | ||
1122 | 0x8004bd00, | ||
1123 | /* 0x02c6: timer_enable */ | ||
1124 | 0x87f09a0e, | ||
1125 | 0x3807f001, | ||
1126 | 0xd00604b6, | 1098 | 0xd00604b6, |
1127 | 0x04bd0008, | 1099 | 0x04bd0008, |
1128 | /* 0x02d4: timer_done */ | 1100 | 0xb63487f0, |
1129 | 0xfc1031f4, | 1101 | 0x88cf0684, |
1130 | 0xf890fc80, | 1102 | 0x9a099800, |
1131 | /* 0x02dd: send_proc */ | 1103 | 0xbb0298bb, |
1132 | 0xf980f900, | 1104 | 0xfe8000e9, |
1133 | 0x05e89890, | 1105 | 0x0887f003, |
1134 | 0xf004e998, | 1106 | 0xcf0684b6, |
1135 | 0x89b80486, | 1107 | 0x84f00088, |
1136 | 0x2a0bf406, | 1108 | 0x261bf402, |
1137 | 0x940398c4, | 1109 | 0xb63487f0, |
1138 | 0x80b60488, | 1110 | 0x88cf0684, |
1139 | 0x008ebb18, | 1111 | 0x06e0b800, |
1140 | 0x8000fa98, | 1112 | 0xb8090bf4, |
1141 | 0x8d80008a, | 1113 | 0x1cf406e8, |
1142 | 0x028c8001, | 1114 | /* 0x02ad: timer_reset */ |
1143 | 0xb6038b80, | 1115 | 0x3407f011, |
1144 | 0x94f00190, | ||
1145 | 0x04e98007, | ||
1146 | /* 0x0317: send_done */ | ||
1147 | 0xfc0231f4, | ||
1148 | 0xf880fc90, | ||
1149 | /* 0x031d: find */ | ||
1150 | 0xf080f900, | ||
1151 | 0x31f45887, | ||
1152 | /* 0x0325: find_loop */ | ||
1153 | 0x008a9801, | ||
1154 | 0xf406aeb8, | ||
1155 | 0x80b6100b, | ||
1156 | 0x6886b158, | ||
1157 | 0xf01bf402, | ||
1158 | /* 0x033b: find_done */ | ||
1159 | 0xb90132f4, | ||
1160 | 0x80fc028e, | ||
1161 | /* 0x0342: send */ | ||
1162 | 0x21f500f8, | ||
1163 | 0x01f4031d, | ||
1164 | /* 0x034b: recv */ | ||
1165 | 0xf900f897, | ||
1166 | 0x9880f990, | ||
1167 | 0xe99805e8, | ||
1168 | 0x0132f404, | ||
1169 | 0xf40689b8, | ||
1170 | 0x89c43d0b, | ||
1171 | 0x0180b603, | ||
1172 | 0x800784f0, | ||
1173 | 0xea9805e8, | ||
1174 | 0xfef0f902, | ||
1175 | 0xf0f9018f, | ||
1176 | 0x9402efb9, | ||
1177 | 0xe9bb0499, | ||
1178 | 0x18e0b600, | ||
1179 | 0x9803eb98, | ||
1180 | 0xed9802ec, | ||
1181 | 0x00ee9801, | ||
1182 | 0xf0fca5f9, | ||
1183 | 0xf400f8fe, | ||
1184 | 0xf0fc0131, | ||
1185 | /* 0x0398: recv_done */ | ||
1186 | 0x90fc80fc, | ||
1187 | /* 0x039e: init */ | ||
1188 | 0x17f100f8, | ||
1189 | 0x14b60108, | ||
1190 | 0x0011cf06, | ||
1191 | 0x010911e7, | ||
1192 | 0xfe0814b6, | ||
1193 | 0x17f10014, | ||
1194 | 0x13f000e0, | ||
1195 | 0x1c07f000, | ||
1196 | 0xd00604b6, | ||
1197 | 0x04bd0001, | ||
1198 | 0xf0ff17f0, | ||
1199 | 0x04b61407, | ||
1200 | 0x0001d006, | ||
1201 | 0x17f004bd, | ||
1202 | 0x0015f102, | ||
1203 | 0x1007f008, | ||
1204 | 0xd00604b6, | 1116 | 0xd00604b6, |
1205 | 0x04bd0001, | 1117 | 0x04bd000e, |
1206 | 0x011a17f1, | 1118 | /* 0x02bb: timer_enable */ |
1207 | 0xfe0013f0, | 1119 | 0xf09a0e80, |
1208 | 0x31f40010, | 1120 | 0x07f00187, |
1209 | 0x0117f010, | 1121 | 0x0604b638, |
1210 | 0xb63807f0, | 1122 | 0xbd0008d0, |
1123 | /* 0x02c9: timer_done */ | ||
1124 | 0x1031f404, | ||
1125 | 0x90fc80fc, | ||
1126 | /* 0x02d2: send_proc */ | ||
1127 | 0x80f900f8, | ||
1128 | 0xe89890f9, | ||
1129 | 0x04e99805, | ||
1130 | 0xb80486f0, | ||
1131 | 0x0bf40689, | ||
1132 | 0x0398c42a, | ||
1133 | 0xb6048894, | ||
1134 | 0x8ebb1880, | ||
1135 | 0x00fa9800, | ||
1136 | 0x80008a80, | ||
1137 | 0x8c80018d, | ||
1138 | 0x038b8002, | ||
1139 | 0xf00190b6, | ||
1140 | 0xe9800794, | ||
1141 | 0x0231f404, | ||
1142 | /* 0x030c: send_done */ | ||
1143 | 0x80fc90fc, | ||
1144 | /* 0x0312: find */ | ||
1145 | 0x80f900f8, | ||
1146 | 0xf45887f0, | ||
1147 | /* 0x031a: find_loop */ | ||
1148 | 0x8a980131, | ||
1149 | 0x06aeb800, | ||
1150 | 0xb6100bf4, | ||
1151 | 0x86b15880, | ||
1152 | 0x1bf40268, | ||
1153 | 0x0132f4f0, | ||
1154 | /* 0x0330: find_done */ | ||
1155 | 0xfc028eb9, | ||
1156 | /* 0x0337: send */ | ||
1157 | 0xf500f880, | ||
1158 | 0xf4031221, | ||
1159 | 0x00f89701, | ||
1160 | /* 0x0340: recv */ | ||
1161 | 0x80f990f9, | ||
1162 | 0x9805e898, | ||
1163 | 0x32f404e9, | ||
1164 | 0x0689b801, | ||
1165 | 0xc43d0bf4, | ||
1166 | 0x80b60389, | ||
1167 | 0x0784f001, | ||
1168 | 0x9805e880, | ||
1169 | 0xf0f902ea, | ||
1170 | 0xf9018ffe, | ||
1171 | 0x02efb9f0, | ||
1172 | 0xbb049994, | ||
1173 | 0xe0b600e9, | ||
1174 | 0x03eb9818, | ||
1175 | 0x9802ec98, | ||
1176 | 0xee9801ed, | ||
1177 | 0xfca5f900, | ||
1178 | 0x00f8fef0, | ||
1179 | 0xfc0131f4, | ||
1180 | /* 0x038d: recv_done */ | ||
1181 | 0xfc80fcf0, | ||
1182 | /* 0x0393: init */ | ||
1183 | 0xf100f890, | ||
1184 | 0xb6010817, | ||
1185 | 0x11cf0614, | ||
1186 | 0x0911e700, | ||
1187 | 0x0814b601, | ||
1188 | 0xf10014fe, | ||
1189 | 0xf000e017, | ||
1190 | 0x07f00013, | ||
1191 | 0x0604b61c, | ||
1192 | 0xbd0001d0, | ||
1193 | 0xff17f004, | ||
1194 | 0xb61407f0, | ||
1211 | 0x01d00604, | 1195 | 0x01d00604, |
1212 | 0xf004bd00, | 1196 | 0xf004bd00, |
1213 | /* 0x0402: init_proc */ | 1197 | 0x15f10217, |
1214 | 0xf19858f7, | 1198 | 0x07f00800, |
1215 | 0x0016b001, | 1199 | 0x0604b610, |
1216 | 0xf9fa0bf4, | 1200 | 0xbd0001d0, |
1217 | 0x58f0b615, | 1201 | 0x1a17f104, |
1218 | /* 0x0413: mulu32_32_64 */ | 1202 | 0x0013f001, |
1219 | 0xf9f20ef4, | 1203 | 0xf40010fe, |
1220 | 0xf920f910, | 1204 | 0x17f01031, |
1221 | 0x9540f930, | 1205 | 0x3807f001, |
1222 | 0xd29510e1, | 1206 | 0xd00604b6, |
1223 | 0xbdc4bd10, | 1207 | 0x04bd0001, |
1224 | 0xc0edffb4, | 1208 | /* 0x03f7: init_proc */ |
1225 | 0xb9301dff, | 1209 | 0x9858f7f0, |
1226 | 0x34f10234, | 1210 | 0x16b001f1, |
1227 | 0x34b6ffff, | 1211 | 0xfa0bf400, |
1228 | 0x1045b610, | 1212 | 0xf0b615f9, |
1229 | 0xbb00c3bb, | 1213 | 0xf20ef458, |
1230 | 0xe2ff01b4, | 1214 | /* 0x0408: mulu32_32_64 */ |
1231 | 0x0234b930, | 1215 | 0x20f910f9, |
1232 | 0xffff34f1, | 1216 | 0x40f930f9, |
1233 | 0xb61034b6, | 1217 | 0x9510e195, |
1234 | 0xc3bb1045, | 1218 | 0xc4bd10d2, |
1235 | 0x01b4bb00, | 1219 | 0xedffb4bd, |
1236 | 0xbb3012ff, | 1220 | 0x301dffc0, |
1237 | 0x40fc00b3, | 1221 | 0xf10234b9, |
1238 | 0x20fc30fc, | 1222 | 0xb6ffff34, |
1239 | 0x00f810fc, | 1223 | 0x45b61034, |
1240 | /* 0x0464: host_send */ | 1224 | 0x00c3bb10, |
1241 | 0x04b017f1, | 1225 | 0xff01b4bb, |
1242 | 0xcf0614b6, | 1226 | 0x34b930e2, |
1243 | 0x27f10011, | 1227 | 0xff34f102, |
1244 | 0x24b604a0, | 1228 | 0x1034b6ff, |
1245 | 0x0022cf06, | 1229 | 0xbb1045b6, |
1246 | 0xf40612b8, | 1230 | 0xb4bb00c3, |
1247 | 0x1ec4320b, | 1231 | 0x3012ff01, |
1248 | 0x04ee9407, | 1232 | 0xfc00b3bb, |
1249 | 0x0270e0b7, | 1233 | 0xfc30fc40, |
1250 | 0x9803eb98, | 1234 | 0xf810fc20, |
1251 | 0xed9802ec, | 1235 | /* 0x0459: host_send */ |
1252 | 0x00ee9801, | 1236 | 0xb017f100, |
1253 | 0x034221f5, | ||
1254 | 0xc40110b6, | ||
1255 | 0x07f10f1e, | ||
1256 | 0x04b604b0, | ||
1257 | 0x000ed006, | ||
1258 | 0x0ef404bd, | ||
1259 | /* 0x04ad: host_send_done */ | ||
1260 | /* 0x04af: host_recv */ | ||
1261 | 0xf100f8ba, | ||
1262 | 0xf14e4917, | ||
1263 | 0xb8525413, | ||
1264 | 0x0bf406e1, | ||
1265 | /* 0x04bd: host_recv_wait */ | ||
1266 | 0xcc17f1aa, | ||
1267 | 0x0614b604, | 1237 | 0x0614b604, |
1268 | 0xf10011cf, | 1238 | 0xf10011cf, |
1269 | 0xb604c827, | 1239 | 0xb604a027, |
1270 | 0x22cf0624, | 1240 | 0x22cf0624, |
1271 | 0x0816f000, | 1241 | 0x0612b800, |
1272 | 0xf40612b8, | 1242 | 0xc4320bf4, |
1273 | 0x23c4e60b, | 1243 | 0xee94071e, |
1274 | 0x0434b607, | 1244 | 0x70e0b704, |
1275 | 0x02f030b7, | 1245 | 0x03eb9802, |
1276 | 0x80033b80, | 1246 | 0x9802ec98, |
1277 | 0x3d80023c, | 1247 | 0xee9801ed, |
1278 | 0x003e8001, | 1248 | 0x3721f500, |
1279 | 0xf00120b6, | 1249 | 0x0110b603, |
1280 | 0x07f10f24, | 1250 | 0xf10f1ec4, |
1281 | 0x04b604c8, | 1251 | 0xb604b007, |
1282 | 0x0002d006, | 1252 | 0x0ed00604, |
1283 | 0x27f004bd, | 1253 | 0xf404bd00, |
1284 | 0x0007f040, | 1254 | /* 0x04a2: host_send_done */ |
1285 | 0xd00604b6, | 1255 | 0x00f8ba0e, |
1286 | 0x04bd0002, | 1256 | /* 0x04a4: host_recv */ |
1287 | /* 0x0512: host_init */ | 1257 | 0x4e4917f1, |
1288 | 0x17f100f8, | 1258 | 0x525413f1, |
1259 | 0xf406e1b8, | ||
1260 | /* 0x04b2: host_recv_wait */ | ||
1261 | 0x17f1aa0b, | ||
1262 | 0x14b604cc, | ||
1263 | 0x0011cf06, | ||
1264 | 0x04c827f1, | ||
1265 | 0xcf0624b6, | ||
1266 | 0x16f00022, | ||
1267 | 0x0612b808, | ||
1268 | 0xc4e60bf4, | ||
1269 | 0x34b60723, | ||
1270 | 0xf030b704, | ||
1271 | 0x033b8002, | ||
1272 | 0x80023c80, | ||
1273 | 0x3e80013d, | ||
1274 | 0x0120b600, | ||
1275 | 0xf10f24f0, | ||
1276 | 0xb604c807, | ||
1277 | 0x02d00604, | ||
1278 | 0xf004bd00, | ||
1279 | 0x07f04027, | ||
1280 | 0x0604b600, | ||
1281 | 0xbd0002d0, | ||
1282 | /* 0x0507: host_init */ | ||
1283 | 0xf100f804, | ||
1284 | 0xb6008017, | ||
1285 | 0x15f11014, | ||
1286 | 0x07f10270, | ||
1287 | 0x04b604d0, | ||
1288 | 0x0001d006, | ||
1289 | 0x17f104bd, | ||
1289 | 0x14b60080, | 1290 | 0x14b60080, |
1290 | 0x7015f110, | 1291 | 0xf015f110, |
1291 | 0xd007f102, | 1292 | 0xdc07f102, |
1292 | 0x0604b604, | 1293 | 0x0604b604, |
1293 | 0xbd0001d0, | 1294 | 0xbd0001d0, |
1294 | 0x8017f104, | 1295 | 0x0117f004, |
1295 | 0x1014b600, | 1296 | 0x04c407f1, |
1296 | 0x02f015f1, | ||
1297 | 0x04dc07f1, | ||
1298 | 0xd00604b6, | 1297 | 0xd00604b6, |
1299 | 0x04bd0001, | 1298 | 0x04bd0001, |
1300 | 0xf10117f0, | 1299 | /* 0x0546: memx_func_enter */ |
1301 | 0xb604c407, | 1300 | 0x87f100f8, |
1302 | 0x01d00604, | 1301 | 0x8eb91610, |
1303 | 0xf804bd00, | 1302 | 0x0421f402, |
1304 | /* 0x0551: memx_func_enter */ | 1303 | 0xf102d7b9, |
1305 | 0x1087f100, | 1304 | 0xf1fffc67, |
1306 | 0x028eb916, | 1305 | 0xfdffff63, |
1307 | 0xb90421f4, | 1306 | 0x67f10476, |
1308 | 0x67f102d7, | 1307 | 0x76fd0002, |
1309 | 0x63f1fffc, | 1308 | 0xf980f905, |
1310 | 0x76fdffff, | 1309 | 0xfcd0fc70, |
1311 | 0x0267f104, | 1310 | 0x3f21f4e0, |
1312 | 0x0576fd00, | ||
1313 | 0x70f980f9, | ||
1314 | 0xe0fcd0fc, | ||
1315 | 0xf03f21f4, | ||
1316 | 0x07f10467, | ||
1317 | 0x04b607e0, | ||
1318 | 0x0006d006, | ||
1319 | /* 0x058a: memx_func_enter_wait */ | ||
1320 | 0x67f104bd, | ||
1321 | 0x64b607c0, | ||
1322 | 0x0066cf06, | ||
1323 | 0xf40464f0, | ||
1324 | 0x67f0f30b, | ||
1325 | 0x0664b62c, | ||
1326 | 0x800066cf, | ||
1327 | 0x00f8f106, | ||
1328 | /* 0x05a8: memx_func_leave */ | ||
1329 | 0xb62c67f0, | ||
1330 | 0x66cf0664, | ||
1331 | 0xf2068000, | ||
1332 | 0xf10467f0, | 1311 | 0xf10467f0, |
1333 | 0xb607e407, | 1312 | 0xb607e007, |
1334 | 0x06d00604, | 1313 | 0x06d00604, |
1335 | /* 0x05c3: memx_func_leave_wait */ | 1314 | /* 0x057f: memx_func_enter_wait */ |
1336 | 0xf104bd00, | 1315 | 0xf104bd00, |
1337 | 0xb607c067, | 1316 | 0xb607c067, |
1338 | 0x66cf0664, | 1317 | 0x66cf0664, |
1339 | 0x0464f000, | 1318 | 0x0464f000, |
1340 | 0xf1f31bf4, | 1319 | 0xf0f30bf4, |
1341 | 0xb9161087, | 1320 | 0x64b62c67, |
1342 | 0x21f4028e, | 1321 | 0x0066cf06, |
1343 | 0x02d7b904, | 1322 | 0xf8f10680, |
1344 | 0xffcc67f1, | 1323 | /* 0x059d: memx_func_leave */ |
1345 | 0xffff63f1, | 1324 | 0x2c67f000, |
1346 | 0xf90476fd, | 1325 | 0xcf0664b6, |
1347 | 0xfc70f980, | 1326 | 0x06800066, |
1348 | 0xf4e0fcd0, | 1327 | 0x0467f0f2, |
1349 | 0x00f83f21, | 1328 | 0x07e407f1, |
1350 | /* 0x05f8: memx_func_wait_vblank */ | 1329 | 0xd00604b6, |
1351 | 0xb0001698, | 1330 | 0x04bd0006, |
1352 | 0x0bf40066, | 1331 | /* 0x05b8: memx_func_leave_wait */ |
1353 | 0x0166b013, | 1332 | 0x07c067f1, |
1354 | 0xf4060bf4, | 1333 | 0xcf0664b6, |
1355 | /* 0x060a: memx_func_wait_vblank_head1 */ | 1334 | 0x64f00066, |
1356 | 0x77f12e0e, | 1335 | 0xf31bf404, |
1357 | 0x0ef40020, | 1336 | 0x161087f1, |
1358 | /* 0x0611: memx_func_wait_vblank_head0 */ | 1337 | 0xf4028eb9, |
1359 | 0x0877f107, | 1338 | 0xd7b90421, |
1360 | /* 0x0615: memx_func_wait_vblank_0 */ | 1339 | 0xcc67f102, |
1361 | 0xc467f100, | 1340 | 0xff63f1ff, |
1362 | 0x0664b607, | 1341 | 0x0476fdff, |
1363 | 0xfd0066cf, | 1342 | 0x70f980f9, |
1364 | 0x1bf40467, | ||
1365 | /* 0x0625: memx_func_wait_vblank_1 */ | ||
1366 | 0xc467f1f3, | ||
1367 | 0x0664b607, | ||
1368 | 0xfd0066cf, | ||
1369 | 0x0bf40467, | ||
1370 | /* 0x0635: memx_func_wait_vblank_fini */ | ||
1371 | 0x0410b6f3, | ||
1372 | /* 0x063a: memx_func_wr32 */ | ||
1373 | 0x169800f8, | ||
1374 | 0x01159800, | ||
1375 | 0xf90810b6, | ||
1376 | 0xfc50f960, | ||
1377 | 0xf4e0fcd0, | ||
1378 | 0x42b63f21, | ||
1379 | 0xe91bf402, | ||
1380 | /* 0x0656: memx_func_wait */ | ||
1381 | 0x87f000f8, | ||
1382 | 0x0684b62c, | ||
1383 | 0x980088cf, | ||
1384 | 0x1d98001e, | ||
1385 | 0x021c9801, | ||
1386 | 0xb6031b98, | ||
1387 | 0x21f41010, | ||
1388 | /* 0x0673: memx_func_delay */ | ||
1389 | 0x9800f8a4, | ||
1390 | 0x10b6001e, | ||
1391 | 0x7f21f404, | ||
1392 | /* 0x067e: memx_func_train */ | ||
1393 | 0x57f100f8, | ||
1394 | 0x77f10003, | ||
1395 | 0x97f10000, | ||
1396 | 0x93f00000, | ||
1397 | 0x029eb970, | ||
1398 | 0xb90421f4, | ||
1399 | 0xe7f102d8, | ||
1400 | 0x21f42710, | ||
1401 | /* 0x069d: memx_func_train_loop_outer */ | ||
1402 | 0x0158e07f, | ||
1403 | 0x0083f101, | ||
1404 | 0xe097f102, | ||
1405 | 0x1193f011, | ||
1406 | 0x80f990f9, | ||
1407 | 0xe0fcd0fc, | 1343 | 0xe0fcd0fc, |
1408 | 0xf93f21f4, | 1344 | 0xf83f21f4, |
1409 | 0x0067f150, | 1345 | /* 0x05ed: memx_func_wait_vblank */ |
1410 | /* 0x06bd: memx_func_train_loop_inner */ | 1346 | 0x00169800, |
1411 | 0x1187f100, | 1347 | 0xf40066b0, |
1412 | 0x9068ff11, | 1348 | 0x66b0130b, |
1413 | 0xfd109894, | 1349 | 0x060bf401, |
1414 | 0x97f10589, | 1350 | /* 0x05ff: memx_func_wait_vblank_head1 */ |
1415 | 0x93f00720, | 1351 | 0xf12e0ef4, |
1416 | 0xf990f910, | 1352 | 0xf4002077, |
1417 | 0xfcd0fc80, | 1353 | /* 0x0606: memx_func_wait_vblank_head0 */ |
1418 | 0x3f21f4e0, | 1354 | 0x77f1070e, |
1419 | 0x008097f1, | 1355 | /* 0x060a: memx_func_wait_vblank_0 */ |
1420 | 0xb91093f0, | 1356 | 0x67f10008, |
1421 | 0x21f4029e, | 1357 | 0x64b607c4, |
1422 | 0x02d8b904, | 1358 | 0x0066cf06, |
1423 | 0xf92088c5, | 1359 | 0xf40467fd, |
1424 | 0xfc80f990, | 1360 | /* 0x061a: memx_func_wait_vblank_1 */ |
1425 | 0xf4e0fcd0, | 1361 | 0x67f1f31b, |
1426 | 0x97f13f21, | 1362 | 0x64b607c4, |
1427 | 0x93f0053c, | 1363 | 0x0066cf06, |
1428 | 0x0287f110, | 1364 | 0xf40467fd, |
1429 | 0x0083f130, | 1365 | /* 0x062a: memx_func_wait_vblank_fini */ |
1430 | 0xf990f980, | 1366 | 0x10b6f30b, |
1431 | 0xfcd0fc80, | 1367 | /* 0x062f: memx_func_wr32 */ |
1432 | 0x3f21f4e0, | 1368 | 0x9800f804, |
1433 | 0x0560e7f1, | 1369 | 0x15980016, |
1434 | 0xf110e3f0, | 1370 | 0x0810b601, |
1435 | 0xf10000d7, | 1371 | 0x50f960f9, |
1436 | 0x908000d3, | 1372 | 0xe0fcd0fc, |
1437 | 0xb7f100dc, | 1373 | 0xb63f21f4, |
1438 | 0xb3f08480, | 1374 | 0x1bf40242, |
1439 | 0xa421f41e, | 1375 | /* 0x064b: memx_func_wait */ |
1440 | 0x000057f1, | 1376 | 0xf000f8e9, |
1441 | 0xffff97f1, | 1377 | 0x84b62c87, |
1442 | 0x830093f1, | 1378 | 0x0088cf06, |
1443 | /* 0x073c: memx_func_train_loop_4x */ | 1379 | 0x98001e98, |
1444 | 0x0080a7f1, | 1380 | 0x1c98011d, |
1445 | 0xb910a3f0, | 1381 | 0x031b9802, |
1446 | 0x21f402ae, | 1382 | 0xf41010b6, |
1447 | 0x02d8b904, | 1383 | 0x00f8a421, |
1448 | 0xffdfb7f1, | 1384 | /* 0x0668: memx_func_delay */ |
1449 | 0xffffb3f1, | 1385 | 0xb6001e98, |
1450 | 0xf9048bfd, | 1386 | 0x21f40410, |
1451 | 0xfc80f9a0, | 1387 | /* 0x0673: memx_func_train */ |
1452 | 0xf4e0fcd0, | 1388 | 0xf100f87f, |
1453 | 0xa7f13f21, | 1389 | 0xf1000357, |
1454 | 0xa3f0053c, | 1390 | 0xf1000077, |
1455 | 0x0287f110, | 1391 | 0xf0000097, |
1456 | 0x0083f130, | 1392 | 0x9eb97093, |
1457 | 0xf9a0f980, | 1393 | 0x0421f402, |
1394 | 0xf102d8b9, | ||
1395 | 0xf42710e7, | ||
1396 | /* 0x0692: memx_func_train_loop_outer */ | ||
1397 | 0x58e07f21, | ||
1398 | 0x83f10101, | ||
1399 | 0x97f10200, | ||
1400 | 0x93f011e0, | ||
1401 | 0xf990f911, | ||
1458 | 0xfcd0fc80, | 1402 | 0xfcd0fc80, |
1459 | 0x3f21f4e0, | 1403 | 0x3f21f4e0, |
1460 | 0x0560e7f1, | 1404 | 0x67f150f9, |
1461 | 0xf110e3f0, | 1405 | /* 0x06b2: memx_func_train_loop_inner */ |
1462 | 0xf10000d7, | 1406 | 0x87f10000, |
1463 | 0xb98000d3, | 1407 | 0x68ff1111, |
1464 | 0xb7f102dc, | 1408 | 0x10989490, |
1465 | 0xb3f02710, | 1409 | 0xf10589fd, |
1466 | 0xa421f400, | 1410 | 0xf0072097, |
1467 | 0xf402eeb9, | 1411 | 0x90f91093, |
1468 | 0xddb90421, | 1412 | 0xd0fc80f9, |
1469 | 0x949dff02, | 1413 | 0x21f4e0fc, |
1414 | 0x8097f13f, | ||
1415 | 0x1093f000, | ||
1416 | 0xf4029eb9, | ||
1417 | 0xd8b90421, | ||
1418 | 0x2088c502, | ||
1419 | 0x80f990f9, | ||
1420 | 0xe0fcd0fc, | ||
1421 | 0xf13f21f4, | ||
1422 | 0xf0053c97, | ||
1423 | 0x87f11093, | ||
1424 | 0x83f13002, | ||
1425 | 0x90f98000, | ||
1426 | 0xd0fc80f9, | ||
1427 | 0x21f4e0fc, | ||
1428 | 0x60e7f13f, | ||
1429 | 0x10e3f005, | ||
1430 | 0x0000d7f1, | ||
1431 | 0x8000d3f1, | ||
1432 | 0xf100dc90, | ||
1433 | 0xf08480b7, | ||
1434 | 0x21f41eb3, | ||
1435 | 0x0057f1a4, | ||
1436 | 0xff97f100, | ||
1437 | 0x0093f1ff, | ||
1438 | /* 0x0731: memx_func_train_loop_4x */ | ||
1439 | 0x80a7f183, | ||
1440 | 0x10a3f000, | ||
1441 | 0xf402aeb9, | ||
1442 | 0xd8b90421, | ||
1443 | 0xdfb7f102, | ||
1444 | 0xffb3f1ff, | ||
1445 | 0x048bfdff, | ||
1446 | 0x80f9a0f9, | ||
1447 | 0xe0fcd0fc, | ||
1448 | 0xf13f21f4, | ||
1449 | 0xf0053ca7, | ||
1450 | 0x87f110a3, | ||
1451 | 0x83f13002, | ||
1452 | 0xa0f98000, | ||
1453 | 0xd0fc80f9, | ||
1454 | 0x21f4e0fc, | ||
1455 | 0x60e7f13f, | ||
1456 | 0x10e3f005, | ||
1457 | 0x0000d7f1, | ||
1458 | 0x8000d3f1, | ||
1459 | 0xf102dcb9, | ||
1460 | 0xf02710b7, | ||
1461 | 0x21f400b3, | ||
1462 | 0x02eeb9a4, | ||
1463 | 0xb90421f4, | ||
1464 | 0x9dff02dd, | ||
1465 | 0x0150b694, | ||
1466 | 0xf4045670, | ||
1467 | 0x7aa0921e, | ||
1468 | 0xa9800bcc, | ||
1469 | 0x0160b600, | ||
1470 | 0x700470b6, | ||
1471 | 0x1ef51066, | ||
1472 | 0x50fcff00, | ||
1470 | 0x700150b6, | 1473 | 0x700150b6, |
1471 | 0x1ef40456, | 1474 | 0x1ef50756, |
1472 | 0xcc7aa092, | 1475 | 0x00f8fed4, |
1473 | 0x00a9800b, | 1476 | /* 0x07c4: memx_exec */ |
1474 | 0xb60160b6, | 1477 | 0xd0f9e0f9, |
1475 | 0x66700470, | 1478 | 0xb902c1b9, |
1476 | 0x001ef510, | 1479 | /* 0x07ce: memx_exec_next */ |
1477 | 0xb650fcff, | 1480 | 0x139802b2, |
1478 | 0x56700150, | 1481 | 0x0410b600, |
1479 | 0xd41ef507, | 1482 | 0x01f034e7, |
1480 | /* 0x07cf: memx_exec */ | 1483 | 0x01e033e7, |
1481 | 0xf900f8fe, | 1484 | 0xf00132b6, |
1482 | 0xb9d0f9e0, | 1485 | 0x35980c30, |
1483 | 0xb2b902c1, | 1486 | 0xb855f9de, |
1484 | /* 0x07d9: memx_exec_next */ | 1487 | 0x1ef40612, |
1485 | 0x00139802, | 1488 | 0xf10b98e4, |
1486 | 0xe70410b6, | 1489 | 0xbbf20c98, |
1487 | 0xe701f034, | 1490 | 0xb7f102cb, |
1488 | 0xb601e033, | 1491 | 0xb4b607c4, |
1489 | 0x30f00132, | 1492 | 0x00bbcf06, |
1490 | 0xde35980c, | 1493 | 0xe0fcd0fc, |
1491 | 0x12b855f9, | 1494 | 0x033721f5, |
1492 | 0xe41ef406, | 1495 | /* 0x080a: memx_info */ |
1493 | 0x98f10b98, | 1496 | 0xc67000f8, |
1494 | 0xcbbbf20c, | 1497 | 0x0e0bf401, |
1495 | 0xc4b7f102, | 1498 | /* 0x0810: memx_info_data */ |
1496 | 0x06b4b607, | 1499 | 0x03ccc7f1, |
1497 | 0xfc00bbcf, | 1500 | 0x0800b7f1, |
1498 | 0xf5e0fcd0, | 1501 | /* 0x081b: memx_info_train */ |
1499 | 0xf8034221, | 1502 | 0xf10b0ef4, |
1500 | /* 0x0815: memx_info */ | 1503 | 0xf10bccc7, |
1501 | 0x01c67000, | 1504 | /* 0x0823: memx_info_send */ |
1502 | /* 0x081b: memx_info_data */ | 1505 | 0xf50100b7, |
1503 | 0xf10e0bf4, | 1506 | 0xf8033721, |
1504 | 0xf103ccc7, | 1507 | /* 0x0829: memx_recv */ |
1505 | 0xf40800b7, | 1508 | 0x01d6b000, |
1506 | /* 0x0826: memx_info_train */ | 1509 | 0xb0980bf4, |
1507 | 0xc7f10b0e, | 1510 | 0x0bf400d6, |
1508 | 0xb7f10bcc, | 1511 | /* 0x0837: memx_init */ |
1509 | /* 0x082e: memx_info_send */ | 1512 | 0xf800f8d8, |
1510 | 0x21f50100, | 1513 | /* 0x0839: perf_recv */ |
1511 | 0x00f80342, | 1514 | /* 0x083b: perf_init */ |
1512 | /* 0x0834: memx_recv */ | 1515 | 0xf800f800, |
1513 | 0xf401d6b0, | 1516 | /* 0x083d: i2c_drive_scl */ |
1514 | 0xd6b0980b, | 1517 | 0x0036b000, |
1515 | 0xd80bf400, | 1518 | 0xf1110bf4, |
1516 | /* 0x0842: memx_init */ | 1519 | 0xb607e007, |
1517 | 0x00f800f8, | 1520 | 0x01d00604, |
1518 | /* 0x0844: perf_recv */ | 1521 | 0xf804bd00, |
1519 | /* 0x0846: perf_init */ | 1522 | /* 0x0851: i2c_drive_scl_lo */ |
1520 | 0x00f800f8, | 1523 | 0xe407f100, |
1521 | /* 0x0848: i2c_drive_scl */ | 1524 | 0x0604b607, |
1522 | 0xf40036b0, | 1525 | 0xbd0001d0, |
1523 | 0x07f1110b, | 1526 | /* 0x085f: i2c_drive_sda */ |
1524 | 0x04b607e0, | 1527 | 0xb000f804, |
1525 | 0x0001d006, | 1528 | 0x0bf40036, |
1526 | 0x00f804bd, | 1529 | 0xe007f111, |
1527 | /* 0x085c: i2c_drive_scl_lo */ | 1530 | 0x0604b607, |
1528 | 0x07e407f1, | 1531 | 0xbd0002d0, |
1529 | 0xd00604b6, | 1532 | /* 0x0873: i2c_drive_sda_lo */ |
1530 | 0x04bd0001, | 1533 | 0xf100f804, |
1531 | /* 0x086a: i2c_drive_sda */ | 1534 | 0xb607e407, |
1532 | 0x36b000f8, | 1535 | 0x02d00604, |
1533 | 0x110bf400, | 1536 | 0xf804bd00, |
1534 | 0x07e007f1, | 1537 | /* 0x0881: i2c_sense_scl */ |
1535 | 0xd00604b6, | 1538 | 0x0132f400, |
1536 | 0x04bd0002, | 1539 | 0x07c437f1, |
1537 | /* 0x087e: i2c_drive_sda_lo */ | 1540 | 0xcf0634b6, |
1538 | 0x07f100f8, | 1541 | 0x31fd0033, |
1539 | 0x04b607e4, | 1542 | 0x060bf404, |
1540 | 0x0002d006, | 1543 | /* 0x0897: i2c_sense_scl_done */ |
1541 | 0x00f804bd, | 1544 | 0xf80131f4, |
1542 | /* 0x088c: i2c_sense_scl */ | 1545 | /* 0x0899: i2c_sense_sda */ |
1543 | 0xf10132f4, | 1546 | 0x0132f400, |
1544 | 0xb607c437, | 1547 | 0x07c437f1, |
1545 | 0x33cf0634, | 1548 | 0xcf0634b6, |
1546 | 0x0431fd00, | 1549 | 0x32fd0033, |
1547 | 0xf4060bf4, | 1550 | 0x060bf404, |
1548 | /* 0x08a2: i2c_sense_scl_done */ | 1551 | /* 0x08af: i2c_sense_sda_done */ |
1549 | 0x00f80131, | 1552 | 0xf80131f4, |
1550 | /* 0x08a4: i2c_sense_sda */ | 1553 | /* 0x08b1: i2c_raise_scl */ |
1551 | 0xf10132f4, | 1554 | 0xf140f900, |
1552 | 0xb607c437, | 1555 | 0xf0089847, |
1553 | 0x33cf0634, | 1556 | 0x21f50137, |
1554 | 0x0432fd00, | 1557 | /* 0x08be: i2c_raise_scl_wait */ |
1555 | 0xf4060bf4, | 1558 | 0xe7f1083d, |
1556 | /* 0x08ba: i2c_sense_sda_done */ | 1559 | 0x21f403e8, |
1557 | 0x00f80131, | 1560 | 0x8121f57f, |
1558 | /* 0x08bc: i2c_raise_scl */ | 1561 | 0x0901f408, |
1559 | 0x47f140f9, | 1562 | 0xf40142b6, |
1560 | 0x37f00898, | 1563 | /* 0x08d2: i2c_raise_scl_done */ |
1561 | 0x4821f501, | 1564 | 0x40fcef1b, |
1562 | /* 0x08c9: i2c_raise_scl_wait */ | 1565 | /* 0x08d6: i2c_start */ |
1566 | 0x21f500f8, | ||
1567 | 0x11f40881, | ||
1568 | 0x9921f50d, | ||
1569 | 0x0611f408, | ||
1570 | /* 0x08e7: i2c_start_rep */ | ||
1571 | 0xf0300ef4, | ||
1572 | 0x21f50037, | ||
1573 | 0x37f0083d, | ||
1574 | 0x5f21f501, | ||
1575 | 0x0076bb08, | ||
1576 | 0xf90465b6, | ||
1577 | 0x04659450, | ||
1578 | 0xbd0256bb, | ||
1579 | 0x0475fd50, | ||
1580 | 0x21f550fc, | ||
1581 | 0x64b608b1, | ||
1582 | 0x1f11f404, | ||
1583 | /* 0x0914: i2c_start_send */ | ||
1584 | 0xf50037f0, | ||
1585 | 0xf1085f21, | ||
1586 | 0xf41388e7, | ||
1587 | 0x37f07f21, | ||
1588 | 0x3d21f500, | ||
1589 | 0x88e7f108, | ||
1590 | 0x7f21f413, | ||
1591 | /* 0x0930: i2c_start_out */ | ||
1592 | /* 0x0932: i2c_stop */ | ||
1593 | 0x37f000f8, | ||
1594 | 0x3d21f500, | ||
1595 | 0x0037f008, | ||
1596 | 0x085f21f5, | ||
1597 | 0x03e8e7f1, | ||
1598 | 0xf07f21f4, | ||
1599 | 0x21f50137, | ||
1600 | 0xe7f1083d, | ||
1601 | 0x21f41388, | ||
1602 | 0x0137f07f, | ||
1603 | 0x085f21f5, | ||
1604 | 0x1388e7f1, | ||
1605 | 0xf87f21f4, | ||
1606 | /* 0x0965: i2c_bitw */ | ||
1607 | 0x5f21f500, | ||
1563 | 0xe8e7f108, | 1608 | 0xe8e7f108, |
1564 | 0x7f21f403, | 1609 | 0x7f21f403, |
1565 | 0x088c21f5, | ||
1566 | 0xb60901f4, | ||
1567 | 0x1bf40142, | ||
1568 | /* 0x08dd: i2c_raise_scl_done */ | ||
1569 | 0xf840fcef, | ||
1570 | /* 0x08e1: i2c_start */ | ||
1571 | 0x8c21f500, | ||
1572 | 0x0d11f408, | ||
1573 | 0x08a421f5, | ||
1574 | 0xf40611f4, | ||
1575 | /* 0x08f2: i2c_start_rep */ | ||
1576 | 0x37f0300e, | ||
1577 | 0x4821f500, | ||
1578 | 0x0137f008, | ||
1579 | 0x086a21f5, | ||
1580 | 0xb60076bb, | 1610 | 0xb60076bb, |
1581 | 0x50f90465, | 1611 | 0x50f90465, |
1582 | 0xbb046594, | 1612 | 0xbb046594, |
1583 | 0x50bd0256, | 1613 | 0x50bd0256, |
1584 | 0xfc0475fd, | 1614 | 0xfc0475fd, |
1585 | 0xbc21f550, | 1615 | 0xb121f550, |
1586 | 0x0464b608, | 1616 | 0x0464b608, |
1587 | /* 0x091f: i2c_start_send */ | 1617 | 0xf11811f4, |
1588 | 0xf01f11f4, | 1618 | 0xf41388e7, |
1589 | 0x21f50037, | ||
1590 | 0xe7f1086a, | ||
1591 | 0x21f41388, | ||
1592 | 0x0037f07f, | ||
1593 | 0x084821f5, | ||
1594 | 0x1388e7f1, | ||
1595 | /* 0x093b: i2c_start_out */ | ||
1596 | 0xf87f21f4, | ||
1597 | /* 0x093d: i2c_stop */ | ||
1598 | 0x0037f000, | ||
1599 | 0x084821f5, | ||
1600 | 0xf50037f0, | ||
1601 | 0xf1086a21, | ||
1602 | 0xf403e8e7, | ||
1603 | 0x37f07f21, | 1619 | 0x37f07f21, |
1604 | 0x4821f501, | 1620 | 0x3d21f500, |
1605 | 0x88e7f108, | 1621 | 0x88e7f108, |
1606 | 0x7f21f413, | 1622 | 0x7f21f413, |
1607 | 0xf50137f0, | 1623 | /* 0x09a4: i2c_bitw_out */ |
1608 | 0xf1086a21, | 1624 | /* 0x09a6: i2c_bitr */ |
1609 | 0xf41388e7, | 1625 | 0x37f000f8, |
1610 | 0x00f87f21, | 1626 | 0x5f21f501, |
1611 | /* 0x0970: i2c_bitw */ | 1627 | 0xe8e7f108, |
1612 | 0x086a21f5, | 1628 | 0x7f21f403, |
1613 | 0x03e8e7f1, | 1629 | 0xb60076bb, |
1614 | 0xbb7f21f4, | 1630 | 0x50f90465, |
1615 | 0x65b60076, | 1631 | 0xbb046594, |
1616 | 0x9450f904, | 1632 | 0x50bd0256, |
1617 | 0x56bb0465, | 1633 | 0xfc0475fd, |
1618 | 0xfd50bd02, | 1634 | 0xb121f550, |
1619 | 0x50fc0475, | 1635 | 0x0464b608, |
1620 | 0x08bc21f5, | 1636 | 0xf51b11f4, |
1621 | 0xf40464b6, | 1637 | 0xf0089921, |
1622 | 0xe7f11811, | 1638 | 0x21f50037, |
1639 | 0xe7f1083d, | ||
1623 | 0x21f41388, | 1640 | 0x21f41388, |
1624 | 0x0037f07f, | 1641 | 0x013cf07f, |
1625 | 0x084821f5, | 1642 | /* 0x09eb: i2c_bitr_done */ |
1626 | 0x1388e7f1, | 1643 | 0xf80131f4, |
1627 | /* 0x09af: i2c_bitw_out */ | 1644 | /* 0x09ed: i2c_get_byte */ |
1628 | 0xf87f21f4, | 1645 | 0x0057f000, |
1629 | /* 0x09b1: i2c_bitr */ | 1646 | /* 0x09f3: i2c_get_byte_next */ |
1630 | 0x0137f000, | 1647 | 0xb60847f0, |
1631 | 0x086a21f5, | 1648 | 0x76bb0154, |
1632 | 0x03e8e7f1, | 1649 | 0x0465b600, |
1633 | 0xbb7f21f4, | 1650 | 0x659450f9, |
1634 | 0x65b60076, | 1651 | 0x0256bb04, |
1635 | 0x9450f904, | 1652 | 0x75fd50bd, |
1636 | 0x56bb0465, | 1653 | 0xf550fc04, |
1637 | 0xfd50bd02, | 1654 | 0xb609a621, |
1638 | 0x50fc0475, | 1655 | 0x11f40464, |
1639 | 0x08bc21f5, | 1656 | 0x0553fd2b, |
1640 | 0xf40464b6, | 1657 | 0xf40142b6, |
1641 | 0x21f51b11, | 1658 | 0x37f0d81b, |
1642 | 0x37f008a4, | ||
1643 | 0x4821f500, | ||
1644 | 0x88e7f108, | ||
1645 | 0x7f21f413, | ||
1646 | 0xf4013cf0, | ||
1647 | /* 0x09f6: i2c_bitr_done */ | ||
1648 | 0x00f80131, | ||
1649 | /* 0x09f8: i2c_get_byte */ | ||
1650 | 0xf00057f0, | ||
1651 | /* 0x09fe: i2c_get_byte_next */ | ||
1652 | 0x54b60847, | ||
1653 | 0x0076bb01, | 1659 | 0x0076bb01, |
1654 | 0xf90465b6, | 1660 | 0xf90465b6, |
1655 | 0x04659450, | 1661 | 0x04659450, |
1656 | 0xbd0256bb, | 1662 | 0xbd0256bb, |
1657 | 0x0475fd50, | 1663 | 0x0475fd50, |
1658 | 0x21f550fc, | 1664 | 0x21f550fc, |
1659 | 0x64b609b1, | 1665 | 0x64b60965, |
1660 | 0x2b11f404, | 1666 | /* 0x0a3d: i2c_get_byte_done */ |
1661 | 0xb60553fd, | 1667 | /* 0x0a3f: i2c_put_byte */ |
1662 | 0x1bf40142, | 1668 | 0xf000f804, |
1663 | 0x0137f0d8, | 1669 | /* 0x0a42: i2c_put_byte_next */ |
1664 | 0xb60076bb, | 1670 | 0x42b60847, |
1665 | 0x50f90465, | 1671 | 0x3854ff01, |
1666 | 0xbb046594, | ||
1667 | 0x50bd0256, | ||
1668 | 0xfc0475fd, | ||
1669 | 0x7021f550, | ||
1670 | 0x0464b609, | ||
1671 | /* 0x0a48: i2c_get_byte_done */ | ||
1672 | /* 0x0a4a: i2c_put_byte */ | ||
1673 | 0x47f000f8, | ||
1674 | /* 0x0a4d: i2c_put_byte_next */ | ||
1675 | 0x0142b608, | ||
1676 | 0xbb3854ff, | ||
1677 | 0x65b60076, | ||
1678 | 0x9450f904, | ||
1679 | 0x56bb0465, | ||
1680 | 0xfd50bd02, | ||
1681 | 0x50fc0475, | ||
1682 | 0x097021f5, | ||
1683 | 0xf40464b6, | ||
1684 | 0x46b03411, | ||
1685 | 0xd81bf400, | ||
1686 | 0xb60076bb, | 1672 | 0xb60076bb, |
1687 | 0x50f90465, | 1673 | 0x50f90465, |
1688 | 0xbb046594, | 1674 | 0xbb046594, |
1689 | 0x50bd0256, | 1675 | 0x50bd0256, |
1690 | 0xfc0475fd, | 1676 | 0xfc0475fd, |
1691 | 0xb121f550, | 1677 | 0x6521f550, |
1692 | 0x0464b609, | 1678 | 0x0464b609, |
1693 | 0xbb0f11f4, | 1679 | 0xb03411f4, |
1694 | 0x36b00076, | 1680 | 0x1bf40046, |
1695 | 0x061bf401, | 1681 | 0x0076bbd8, |
1696 | /* 0x0aa3: i2c_put_byte_done */ | ||
1697 | 0xf80132f4, | ||
1698 | /* 0x0aa5: i2c_addr */ | ||
1699 | 0x0076bb00, | ||
1700 | 0xf90465b6, | 1682 | 0xf90465b6, |
1701 | 0x04659450, | 1683 | 0x04659450, |
1702 | 0xbd0256bb, | 1684 | 0xbd0256bb, |
1703 | 0x0475fd50, | 1685 | 0x0475fd50, |
1704 | 0x21f550fc, | 1686 | 0x21f550fc, |
1705 | 0x64b608e1, | 1687 | 0x64b609a6, |
1706 | 0x2911f404, | 1688 | 0x0f11f404, |
1707 | 0x012ec3e7, | 1689 | 0xb00076bb, |
1708 | 0xfd0134b6, | 1690 | 0x1bf40136, |
1709 | 0x76bb0553, | 1691 | 0x0132f406, |
1692 | /* 0x0a98: i2c_put_byte_done */ | ||
1693 | /* 0x0a9a: i2c_addr */ | ||
1694 | 0x76bb00f8, | ||
1710 | 0x0465b600, | 1695 | 0x0465b600, |
1711 | 0x659450f9, | 1696 | 0x659450f9, |
1712 | 0x0256bb04, | 1697 | 0x0256bb04, |
1713 | 0x75fd50bd, | 1698 | 0x75fd50bd, |
1714 | 0xf550fc04, | 1699 | 0xf550fc04, |
1715 | 0xb60a4a21, | 1700 | 0xb608d621, |
1716 | /* 0x0aea: i2c_addr_done */ | 1701 | 0x11f40464, |
1717 | 0x00f80464, | 1702 | 0x2ec3e729, |
1718 | /* 0x0aec: i2c_acquire_addr */ | 1703 | 0x0134b601, |
1719 | 0xb6f8cec7, | 1704 | 0xbb0553fd, |
1720 | 0xe0b702e4, | ||
1721 | 0xee980d1c, | ||
1722 | /* 0x0afb: i2c_acquire */ | ||
1723 | 0xf500f800, | ||
1724 | 0xf40aec21, | ||
1725 | 0xd9f00421, | ||
1726 | 0x3f21f403, | ||
1727 | /* 0x0b0a: i2c_release */ | ||
1728 | 0x21f500f8, | ||
1729 | 0x21f40aec, | ||
1730 | 0x03daf004, | ||
1731 | 0xf83f21f4, | ||
1732 | /* 0x0b19: i2c_recv */ | ||
1733 | 0x0132f400, | ||
1734 | 0xb6f8c1c7, | ||
1735 | 0x16b00214, | ||
1736 | 0x3a1ff528, | ||
1737 | 0xf413a001, | ||
1738 | 0x0032980c, | ||
1739 | 0x0ccc13a0, | ||
1740 | 0xf4003198, | ||
1741 | 0xd0f90231, | ||
1742 | 0xd0f9e0f9, | ||
1743 | 0x000067f1, | ||
1744 | 0x100063f1, | ||
1745 | 0xbb016792, | ||
1746 | 0x65b60076, | 1705 | 0x65b60076, |
1747 | 0x9450f904, | 1706 | 0x9450f904, |
1748 | 0x56bb0465, | 1707 | 0x56bb0465, |
1749 | 0xfd50bd02, | 1708 | 0xfd50bd02, |
1750 | 0x50fc0475, | 1709 | 0x50fc0475, |
1751 | 0x0afb21f5, | 1710 | 0x0a3f21f5, |
1752 | 0xfc0464b6, | 1711 | /* 0x0adf: i2c_addr_done */ |
1753 | 0x00d6b0d0, | 1712 | 0xf80464b6, |
1754 | 0x00b31bf5, | 1713 | /* 0x0ae1: i2c_acquire_addr */ |
1755 | 0xbb0057f0, | 1714 | 0xf8cec700, |
1715 | 0xb702e4b6, | ||
1716 | 0x980d1ce0, | ||
1717 | 0x00f800ee, | ||
1718 | /* 0x0af0: i2c_acquire */ | ||
1719 | 0x0ae121f5, | ||
1720 | 0xf00421f4, | ||
1721 | 0x21f403d9, | ||
1722 | /* 0x0aff: i2c_release */ | ||
1723 | 0xf500f83f, | ||
1724 | 0xf40ae121, | ||
1725 | 0xdaf00421, | ||
1726 | 0x3f21f403, | ||
1727 | /* 0x0b0e: i2c_recv */ | ||
1728 | 0x32f400f8, | ||
1729 | 0xf8c1c701, | ||
1730 | 0xb00214b6, | ||
1731 | 0x1ff52816, | ||
1732 | 0x13a0013a, | ||
1733 | 0x32980cf4, | ||
1734 | 0xcc13a000, | ||
1735 | 0x0031980c, | ||
1736 | 0xf90231f4, | ||
1737 | 0xf9e0f9d0, | ||
1738 | 0x0067f1d0, | ||
1739 | 0x0063f100, | ||
1740 | 0x01679210, | ||
1741 | 0xb60076bb, | ||
1742 | 0x50f90465, | ||
1743 | 0xbb046594, | ||
1744 | 0x50bd0256, | ||
1745 | 0xfc0475fd, | ||
1746 | 0xf021f550, | ||
1747 | 0x0464b60a, | ||
1748 | 0xd6b0d0fc, | ||
1749 | 0xb31bf500, | ||
1750 | 0x0057f000, | ||
1751 | 0xb60076bb, | ||
1752 | 0x50f90465, | ||
1753 | 0xbb046594, | ||
1754 | 0x50bd0256, | ||
1755 | 0xfc0475fd, | ||
1756 | 0x9a21f550, | ||
1757 | 0x0464b60a, | ||
1758 | 0x00d011f5, | ||
1759 | 0xbbe0c5c7, | ||
1756 | 0x65b60076, | 1760 | 0x65b60076, |
1757 | 0x9450f904, | 1761 | 0x9450f904, |
1758 | 0x56bb0465, | 1762 | 0x56bb0465, |
1759 | 0xfd50bd02, | 1763 | 0xfd50bd02, |
1760 | 0x50fc0475, | 1764 | 0x50fc0475, |
1761 | 0x0aa521f5, | 1765 | 0x0a3f21f5, |
1762 | 0xf50464b6, | 1766 | 0xf50464b6, |
1763 | 0xc700d011, | 1767 | 0xf000ad11, |
1764 | 0x76bbe0c5, | 1768 | 0x76bb0157, |
1765 | 0x0465b600, | 1769 | 0x0465b600, |
1766 | 0x659450f9, | 1770 | 0x659450f9, |
1767 | 0x0256bb04, | 1771 | 0x0256bb04, |
1768 | 0x75fd50bd, | 1772 | 0x75fd50bd, |
1769 | 0xf550fc04, | 1773 | 0xf550fc04, |
1770 | 0xb60a4a21, | 1774 | 0xb60a9a21, |
1771 | 0x11f50464, | 1775 | 0x11f50464, |
1772 | 0x57f000ad, | 1776 | 0x76bb008a, |
1773 | 0x0076bb01, | 1777 | 0x0465b600, |
1774 | 0xf90465b6, | 1778 | 0x659450f9, |
1775 | 0x04659450, | 1779 | 0x0256bb04, |
1776 | 0xbd0256bb, | 1780 | 0x75fd50bd, |
1777 | 0x0475fd50, | 1781 | 0xf550fc04, |
1778 | 0x21f550fc, | 1782 | 0xb609ed21, |
1779 | 0x64b60aa5, | 1783 | 0x11f40464, |
1780 | 0x8a11f504, | 1784 | 0xe05bcb6a, |
1781 | 0x0076bb00, | 1785 | 0xb60076bb, |
1782 | 0xf90465b6, | 1786 | 0x50f90465, |
1783 | 0x04659450, | 1787 | 0xbb046594, |
1784 | 0xbd0256bb, | 1788 | 0x50bd0256, |
1785 | 0x0475fd50, | 1789 | 0xfc0475fd, |
1786 | 0x21f550fc, | 1790 | 0x3221f550, |
1787 | 0x64b609f8, | 1791 | 0x0464b609, |
1788 | 0x6a11f404, | 1792 | 0xbd025bb9, |
1789 | 0xbbe05bcb, | 1793 | 0x430ef474, |
1790 | 0x65b60076, | 1794 | /* 0x0c14: i2c_recv_not_rd08 */ |
1791 | 0x9450f904, | 1795 | 0xf401d6b0, |
1792 | 0x56bb0465, | 1796 | 0x57f03d1b, |
1793 | 0xfd50bd02, | 1797 | 0x9a21f500, |
1794 | 0x50fc0475, | 1798 | 0x3311f40a, |
1795 | 0x093d21f5, | 1799 | 0xf5e0c5c7, |
1796 | 0xb90464b6, | 1800 | 0xf40a3f21, |
1797 | 0x74bd025b, | 1801 | 0x57f02911, |
1798 | /* 0x0c1f: i2c_recv_not_rd08 */ | 1802 | 0x9a21f500, |
1799 | 0xb0430ef4, | 1803 | 0x1f11f40a, |
1800 | 0x1bf401d6, | 1804 | 0xf5e0b5c7, |
1801 | 0x0057f03d, | 1805 | 0xf40a3f21, |
1802 | 0x0aa521f5, | 1806 | 0x21f51511, |
1803 | 0xc73311f4, | 1807 | 0x74bd0932, |
1804 | 0x21f5e0c5, | 1808 | 0xf408c5c7, |
1805 | 0x11f40a4a, | 1809 | 0x32f4091b, |
1806 | 0x0057f029, | 1810 | 0x030ef402, |
1807 | 0x0aa521f5, | 1811 | /* 0x0c54: i2c_recv_not_wr08 */ |
1808 | 0xc71f11f4, | 1812 | /* 0x0c54: i2c_recv_done */ |
1809 | 0x21f5e0b5, | 1813 | 0xf5f8cec7, |
1810 | 0x11f40a4a, | 1814 | 0xfc0aff21, |
1811 | 0x3d21f515, | 1815 | 0xf4d0fce0, |
1812 | 0xc774bd09, | 1816 | 0x7cb90a12, |
1813 | 0x1bf408c5, | 1817 | 0x3721f502, |
1814 | 0x0232f409, | 1818 | /* 0x0c69: i2c_recv_exit */ |
1815 | /* 0x0c5f: i2c_recv_not_wr08 */ | 1819 | /* 0x0c6b: i2c_init */ |
1816 | /* 0x0c5f: i2c_recv_done */ | 1820 | 0xf800f803, |
1817 | 0xc7030ef4, | 1821 | /* 0x0c6d: test_recv */ |
1818 | 0x21f5f8ce, | 1822 | 0xd817f100, |
1819 | 0xe0fc0b0a, | 1823 | 0x0614b605, |
1820 | 0x12f4d0fc, | 1824 | 0xb60011cf, |
1821 | 0x027cb90a, | 1825 | 0x07f10110, |
1822 | 0x034221f5, | 1826 | 0x04b605d8, |
1823 | /* 0x0c74: i2c_recv_exit */ | 1827 | 0x0001d006, |
1824 | /* 0x0c76: i2c_init */ | 1828 | 0xe7f104bd, |
1829 | 0xe3f1d900, | ||
1830 | 0x21f5134f, | ||
1831 | 0x00f80257, | ||
1832 | /* 0x0c94: test_init */ | ||
1833 | 0x0800e7f1, | ||
1834 | 0x025721f5, | ||
1835 | /* 0x0c9e: idle_recv */ | ||
1825 | 0x00f800f8, | 1836 | 0x00f800f8, |
1826 | /* 0x0c78: test_recv */ | 1837 | /* 0x0ca0: idle */ |
1827 | 0x05d817f1, | 1838 | 0xf10031f4, |
1828 | 0xcf0614b6, | 1839 | 0xb605d417, |
1829 | 0x10b60011, | 1840 | 0x11cf0614, |
1830 | 0xd807f101, | 1841 | 0x0110b600, |
1831 | 0x0604b605, | 1842 | 0x05d407f1, |
1832 | 0xbd0001d0, | 1843 | 0xd00604b6, |
1833 | 0x00e7f104, | 1844 | 0x04bd0001, |
1834 | 0x4fe3f1d9, | 1845 | /* 0x0cbc: idle_loop */ |
1835 | 0x6221f513, | 1846 | 0xf45817f0, |
1836 | /* 0x0c9f: test_init */ | 1847 | /* 0x0cc2: idle_proc */ |
1837 | 0xf100f802, | 1848 | /* 0x0cc2: idle_proc_exec */ |
1838 | 0xf50800e7, | 1849 | 0x10f90232, |
1839 | 0xf8026221, | 1850 | 0xf5021eb9, |
1840 | /* 0x0ca9: idle_recv */ | 1851 | 0xfc034021, |
1841 | /* 0x0cab: idle */ | 1852 | 0x0911f410, |
1842 | 0xf400f800, | 1853 | 0xf40231f4, |
1843 | 0x17f10031, | 1854 | /* 0x0cd6: idle_proc_next */ |
1844 | 0x14b605d4, | 1855 | 0x10b6ef0e, |
1845 | 0x0011cf06, | 1856 | 0x061fb858, |
1846 | 0xf10110b6, | 1857 | 0xf4e61bf4, |
1847 | 0xb605d407, | 1858 | 0x28f4dd02, |
1848 | 0x01d00604, | 1859 | 0xbb0ef400, |
1849 | /* 0x0cc7: idle_loop */ | 1860 | 0x00000000, |
1850 | 0xf004bd00, | 1861 | 0x00000000, |
1851 | 0x32f45817, | 1862 | 0x00000000, |
1852 | /* 0x0ccd: idle_proc */ | ||
1853 | /* 0x0ccd: idle_proc_exec */ | ||
1854 | 0xb910f902, | ||
1855 | 0x21f5021e, | ||
1856 | 0x10fc034b, | ||
1857 | 0xf40911f4, | ||
1858 | 0x0ef40231, | ||
1859 | /* 0x0ce1: idle_proc_next */ | ||
1860 | 0x5810b6ef, | ||
1861 | 0xf4061fb8, | ||
1862 | 0x02f4e61b, | ||
1863 | 0x0028f4dd, | ||
1864 | 0x00bb0ef4, | ||
1865 | 0x00000000, | 1863 | 0x00000000, |
1866 | 0x00000000, | 1864 | 0x00000000, |
1867 | 0x00000000, | 1865 | 0x00000000, |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/kernel.fuc b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/kernel.fuc index 5cf5be63cbef..ad35fa57be94 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/kernel.fuc +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/pmu/fuc/kernel.fuc | |||
@@ -225,17 +225,11 @@ intr: | |||
225 | nv_iowr(NV_PPWR_SUBINTR, $r9) | 225 | nv_iowr(NV_PPWR_SUBINTR, $r9) |
226 | 226 | ||
227 | intr_skip_subintr: | 227 | intr_skip_subintr: |
228 | and $r9 $r8 NV_PPWR_INTR_PAUSE | 228 | mov $r9 (NV_PPWR_INTR_USER0 | NV_PPWR_INTR_USER1 | NV_PPWR_INTR_PAUSE) |
229 | bra z #intr_skip_pause | 229 | not b32 $r9 |
230 | and $r10 0xffbf | 230 | and $r8 $r9 |
231 | |||
232 | intr_skip_pause: | ||
233 | and $r9 $r8 NV_PPWR_INTR_USER0 | ||
234 | bra z #intr_skip_user0 | ||
235 | and $r10 0xffbf | ||
236 | |||
237 | intr_skip_user0: | ||
238 | nv_iowr(NV_PPWR_INTR_ACK, $r8) | 231 | nv_iowr(NV_PPWR_INTR_ACK, $r8) |
232 | |||
239 | pop $r8 | 233 | pop $r8 |
240 | mov $flags $r8 | 234 | mov $flags $r8 |
241 | pop $r15 | 235 | pop $r15 |
diff --git a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c index 6326fdc5a48d..2c92ffb5f9d0 100644 --- a/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c +++ b/drivers/gpu/drm/nouveau/nvkm/subdev/therm/nv40.c | |||
@@ -107,7 +107,7 @@ nv40_fan_pwm_ctrl(struct nvkm_therm *therm, int line, bool enable) | |||
107 | { | 107 | { |
108 | struct nvkm_subdev *subdev = &therm->subdev; | 108 | struct nvkm_subdev *subdev = &therm->subdev; |
109 | struct nvkm_device *device = subdev->device; | 109 | struct nvkm_device *device = subdev->device; |
110 | u32 mask = enable ? 0x80000000 : 0x0000000; | 110 | u32 mask = enable ? 0x80000000 : 0x00000000; |
111 | if (line == 2) nvkm_mask(device, 0x0010f0, 0x80000000, mask); | 111 | if (line == 2) nvkm_mask(device, 0x0010f0, 0x80000000, mask); |
112 | else if (line == 9) nvkm_mask(device, 0x0015f4, 0x80000000, mask); | 112 | else if (line == 9) nvkm_mask(device, 0x0015f4, 0x80000000, mask); |
113 | else { | 113 | else { |