xref: /OK3568_Linux_fs/kernel/drivers/gpu/host1x/hw/host1x05_hardware.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: GPL-2.0-only */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Tegra host1x Register Offsets for Tegra210
4*4882a593Smuzhiyun  *
5*4882a593Smuzhiyun  * Copyright (c) 2015 NVIDIA Corporation.
6*4882a593Smuzhiyun  */
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #ifndef __HOST1X_HOST1X05_HARDWARE_H
9*4882a593Smuzhiyun #define __HOST1X_HOST1X05_HARDWARE_H
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun #include <linux/types.h>
12*4882a593Smuzhiyun #include <linux/bitops.h>
13*4882a593Smuzhiyun 
14*4882a593Smuzhiyun #include "hw_host1x05_channel.h"
15*4882a593Smuzhiyun #include "hw_host1x05_sync.h"
16*4882a593Smuzhiyun #include "hw_host1x05_uclass.h"
17*4882a593Smuzhiyun 
host1x_class_host_wait_syncpt(unsigned indx,unsigned threshold)18*4882a593Smuzhiyun static inline u32 host1x_class_host_wait_syncpt(
19*4882a593Smuzhiyun 	unsigned indx, unsigned threshold)
20*4882a593Smuzhiyun {
21*4882a593Smuzhiyun 	return host1x_uclass_wait_syncpt_indx_f(indx)
22*4882a593Smuzhiyun 		| host1x_uclass_wait_syncpt_thresh_f(threshold);
23*4882a593Smuzhiyun }
24*4882a593Smuzhiyun 
host1x_class_host_load_syncpt_base(unsigned indx,unsigned threshold)25*4882a593Smuzhiyun static inline u32 host1x_class_host_load_syncpt_base(
26*4882a593Smuzhiyun 	unsigned indx, unsigned threshold)
27*4882a593Smuzhiyun {
28*4882a593Smuzhiyun 	return host1x_uclass_load_syncpt_base_base_indx_f(indx)
29*4882a593Smuzhiyun 		| host1x_uclass_load_syncpt_base_value_f(threshold);
30*4882a593Smuzhiyun }
31*4882a593Smuzhiyun 
host1x_class_host_wait_syncpt_base(unsigned indx,unsigned base_indx,unsigned offset)32*4882a593Smuzhiyun static inline u32 host1x_class_host_wait_syncpt_base(
33*4882a593Smuzhiyun 	unsigned indx, unsigned base_indx, unsigned offset)
34*4882a593Smuzhiyun {
35*4882a593Smuzhiyun 	return host1x_uclass_wait_syncpt_base_indx_f(indx)
36*4882a593Smuzhiyun 		| host1x_uclass_wait_syncpt_base_base_indx_f(base_indx)
37*4882a593Smuzhiyun 		| host1x_uclass_wait_syncpt_base_offset_f(offset);
38*4882a593Smuzhiyun }
39*4882a593Smuzhiyun 
host1x_class_host_incr_syncpt_base(unsigned base_indx,unsigned offset)40*4882a593Smuzhiyun static inline u32 host1x_class_host_incr_syncpt_base(
41*4882a593Smuzhiyun 	unsigned base_indx, unsigned offset)
42*4882a593Smuzhiyun {
43*4882a593Smuzhiyun 	return host1x_uclass_incr_syncpt_base_base_indx_f(base_indx)
44*4882a593Smuzhiyun 		| host1x_uclass_incr_syncpt_base_offset_f(offset);
45*4882a593Smuzhiyun }
46*4882a593Smuzhiyun 
host1x_class_host_incr_syncpt(unsigned cond,unsigned indx)47*4882a593Smuzhiyun static inline u32 host1x_class_host_incr_syncpt(
48*4882a593Smuzhiyun 	unsigned cond, unsigned indx)
49*4882a593Smuzhiyun {
50*4882a593Smuzhiyun 	return host1x_uclass_incr_syncpt_cond_f(cond)
51*4882a593Smuzhiyun 		| host1x_uclass_incr_syncpt_indx_f(indx);
52*4882a593Smuzhiyun }
53*4882a593Smuzhiyun 
host1x_class_host_indoff_reg_write(unsigned mod_id,unsigned offset,bool auto_inc)54*4882a593Smuzhiyun static inline u32 host1x_class_host_indoff_reg_write(
55*4882a593Smuzhiyun 	unsigned mod_id, unsigned offset, bool auto_inc)
56*4882a593Smuzhiyun {
57*4882a593Smuzhiyun 	u32 v = host1x_uclass_indoff_indbe_f(0xf)
58*4882a593Smuzhiyun 		| host1x_uclass_indoff_indmodid_f(mod_id)
59*4882a593Smuzhiyun 		| host1x_uclass_indoff_indroffset_f(offset);
60*4882a593Smuzhiyun 	if (auto_inc)
61*4882a593Smuzhiyun 		v |= host1x_uclass_indoff_autoinc_f(1);
62*4882a593Smuzhiyun 	return v;
63*4882a593Smuzhiyun }
64*4882a593Smuzhiyun 
host1x_class_host_indoff_reg_read(unsigned mod_id,unsigned offset,bool auto_inc)65*4882a593Smuzhiyun static inline u32 host1x_class_host_indoff_reg_read(
66*4882a593Smuzhiyun 	unsigned mod_id, unsigned offset, bool auto_inc)
67*4882a593Smuzhiyun {
68*4882a593Smuzhiyun 	u32 v = host1x_uclass_indoff_indmodid_f(mod_id)
69*4882a593Smuzhiyun 		| host1x_uclass_indoff_indroffset_f(offset)
70*4882a593Smuzhiyun 		| host1x_uclass_indoff_rwn_read_v();
71*4882a593Smuzhiyun 	if (auto_inc)
72*4882a593Smuzhiyun 		v |= host1x_uclass_indoff_autoinc_f(1);
73*4882a593Smuzhiyun 	return v;
74*4882a593Smuzhiyun }
75*4882a593Smuzhiyun 
76*4882a593Smuzhiyun /* cdma opcodes */
host1x_opcode_setclass(unsigned class_id,unsigned offset,unsigned mask)77*4882a593Smuzhiyun static inline u32 host1x_opcode_setclass(
78*4882a593Smuzhiyun 	unsigned class_id, unsigned offset, unsigned mask)
79*4882a593Smuzhiyun {
80*4882a593Smuzhiyun 	return (0 << 28) | (offset << 16) | (class_id << 6) | mask;
81*4882a593Smuzhiyun }
82*4882a593Smuzhiyun 
host1x_opcode_incr(unsigned offset,unsigned count)83*4882a593Smuzhiyun static inline u32 host1x_opcode_incr(unsigned offset, unsigned count)
84*4882a593Smuzhiyun {
85*4882a593Smuzhiyun 	return (1 << 28) | (offset << 16) | count;
86*4882a593Smuzhiyun }
87*4882a593Smuzhiyun 
host1x_opcode_nonincr(unsigned offset,unsigned count)88*4882a593Smuzhiyun static inline u32 host1x_opcode_nonincr(unsigned offset, unsigned count)
89*4882a593Smuzhiyun {
90*4882a593Smuzhiyun 	return (2 << 28) | (offset << 16) | count;
91*4882a593Smuzhiyun }
92*4882a593Smuzhiyun 
host1x_opcode_mask(unsigned offset,unsigned mask)93*4882a593Smuzhiyun static inline u32 host1x_opcode_mask(unsigned offset, unsigned mask)
94*4882a593Smuzhiyun {
95*4882a593Smuzhiyun 	return (3 << 28) | (offset << 16) | mask;
96*4882a593Smuzhiyun }
97*4882a593Smuzhiyun 
host1x_opcode_imm(unsigned offset,unsigned value)98*4882a593Smuzhiyun static inline u32 host1x_opcode_imm(unsigned offset, unsigned value)
99*4882a593Smuzhiyun {
100*4882a593Smuzhiyun 	return (4 << 28) | (offset << 16) | value;
101*4882a593Smuzhiyun }
102*4882a593Smuzhiyun 
host1x_opcode_imm_incr_syncpt(unsigned cond,unsigned indx)103*4882a593Smuzhiyun static inline u32 host1x_opcode_imm_incr_syncpt(unsigned cond, unsigned indx)
104*4882a593Smuzhiyun {
105*4882a593Smuzhiyun 	return host1x_opcode_imm(host1x_uclass_incr_syncpt_r(),
106*4882a593Smuzhiyun 		host1x_class_host_incr_syncpt(cond, indx));
107*4882a593Smuzhiyun }
108*4882a593Smuzhiyun 
host1x_opcode_restart(unsigned address)109*4882a593Smuzhiyun static inline u32 host1x_opcode_restart(unsigned address)
110*4882a593Smuzhiyun {
111*4882a593Smuzhiyun 	return (5 << 28) | (address >> 4);
112*4882a593Smuzhiyun }
113*4882a593Smuzhiyun 
host1x_opcode_gather(unsigned count)114*4882a593Smuzhiyun static inline u32 host1x_opcode_gather(unsigned count)
115*4882a593Smuzhiyun {
116*4882a593Smuzhiyun 	return (6 << 28) | count;
117*4882a593Smuzhiyun }
118*4882a593Smuzhiyun 
host1x_opcode_gather_nonincr(unsigned offset,unsigned count)119*4882a593Smuzhiyun static inline u32 host1x_opcode_gather_nonincr(unsigned offset,	unsigned count)
120*4882a593Smuzhiyun {
121*4882a593Smuzhiyun 	return (6 << 28) | (offset << 16) | BIT(15) | count;
122*4882a593Smuzhiyun }
123*4882a593Smuzhiyun 
host1x_opcode_gather_incr(unsigned offset,unsigned count)124*4882a593Smuzhiyun static inline u32 host1x_opcode_gather_incr(unsigned offset, unsigned count)
125*4882a593Smuzhiyun {
126*4882a593Smuzhiyun 	return (6 << 28) | (offset << 16) | BIT(15) | BIT(14) | count;
127*4882a593Smuzhiyun }
128*4882a593Smuzhiyun 
129*4882a593Smuzhiyun #define HOST1X_OPCODE_NOP host1x_opcode_nonincr(0, 0)
130*4882a593Smuzhiyun 
131*4882a593Smuzhiyun #endif
132