[Intel-gfx] [V3 8/8] drm/i915/dsi: Initiate fame request in cmd mode
kbuild test robot
lkp at intel.com
Tue Nov 19 21:30:42 UTC 2019
Hi Vandita,
Thank you for the patch! Yet something to improve:
[auto build test ERROR on drm-intel/for-linux-next]
[cannot apply to v5.4-rc8 next-20191118]
[if your patch is applied to the wrong git tree, please drop us a note to help
improve the system. BTW, we also suggest to use '--base' option to specify the
base tree in git format-patch, please see https://stackoverflow.com/a/37406982]
url: https://github.com/0day-ci/linux/commits/Vandita-Kulkarni/Add-support-for-mipi-dsi-cmd-mode/20191120-015713
base: git://anongit.freedesktop.org/drm-intel for-linux-next
config: i386-defconfig (attached as .config)
compiler: gcc-7 (Debian 7.4.0-14) 7.4.0
reproduce:
# save the attached .config to linux build tree
make ARCH=i386
If you fix the issue, kindly add following tag
Reported-by: kbuild test robot <lkp at intel.com>
All errors (new ones prefixed by >>):
drivers/gpu/drm/i915/display/icl_dsi.c:203:52: error: 'struct intel_crtc_state' has no member named 'uapi'
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
^
include/linux/kernel.h:993:26: note: in definition of macro 'container_of'
void *__mptr = (void *)(ptr); \
^~~
drivers/gpu/drm/i915/display/icl_dsi.c:203:28: note: in expansion of macro 'to_intel_crtc'
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
^~~~~~~~~~~~~
In file included from include/linux/ioport.h:13:0,
from include/linux/acpi.h:12,
from include/linux/i2c.h:13,
from include/drm/drm_crtc.h:28,
from include/drm/drm_atomic_helper.h:31,
from drivers/gpu/drm/i915/display/icl_dsi.c:28:
drivers/gpu/drm/i915/display/icl_dsi.c:203:52: error: 'struct intel_crtc_state' has no member named 'uapi'
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
^
include/linux/compiler.h:330:9: note: in definition of macro '__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
include/linux/compiler.h:350:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^~~~~~~~~~~~~~~~~~
include/linux/kernel.h:994:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~~~~~~~~~~~
include/linux/kernel.h:994:20: note: in expansion of macro '__same_type'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~~~~~~
drivers/gpu/drm/i915/display/intel_display_types.h:1125:26: note: in expansion of macro 'container_of'
#define to_intel_crtc(x) container_of(x, struct intel_crtc, base)
^~~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:203:28: note: in expansion of macro 'to_intel_crtc'
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
^~~~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:203:52: error: 'struct intel_crtc_state' has no member named 'uapi'
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
^
include/linux/compiler.h:330:9: note: in definition of macro '__compiletime_assert'
if (!(condition)) \
^~~~~~~~~
include/linux/compiler.h:350:2: note: in expansion of macro '_compiletime_assert'
_compiletime_assert(condition, msg, __compiletime_assert_, __LINE__)
^~~~~~~~~~~~~~~~~~~
include/linux/build_bug.h:39:37: note: in expansion of macro 'compiletime_assert'
#define BUILD_BUG_ON_MSG(cond, msg) compiletime_assert(!(cond), msg)
^~~~~~~~~~~~~~~~~~
include/linux/kernel.h:994:2: note: in expansion of macro 'BUILD_BUG_ON_MSG'
BUILD_BUG_ON_MSG(!__same_type(*(ptr), ((type *)0)->member) && \
^~~~~~~~~~~~~~~~
include/linux/kernel.h:995:6: note: in expansion of macro '__same_type'
!__same_type(*(ptr), void), \
^~~~~~~~~~~
drivers/gpu/drm/i915/display/intel_display_types.h:1125:26: note: in expansion of macro 'container_of'
#define to_intel_crtc(x) container_of(x, struct intel_crtc, base)
^~~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:203:28: note: in expansion of macro 'to_intel_crtc'
struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
^~~~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:208:28: error: 'struct intel_crtc_state' has no member named 'hw'
private_flags = crtc_state->hw.adjusted_mode.private_flags;
^~
In file included from drivers/gpu/drm/i915/display/intel_display_types.h:46:0,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/display/icl_dsi.c:218:18: error: implicit declaration of function 'DSI_CMD_FRMCTL'; did you mean 'DSI_CMD_RXCTL'? [-Werror=implicit-function-declaration]
tmp = I915_READ(DSI_CMD_FRMCTL(port));
^
drivers/gpu/drm/i915/i915_drv.h:1979:45: note: in definition of macro '__I915_REG_OP'
intel_uncore_##op__(&(dev_priv__)->uncore, __VA_ARGS__)
^~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:218:8: note: in expansion of macro 'I915_READ'
tmp = I915_READ(DSI_CMD_FRMCTL(port));
^~~~~~~~~
drivers/gpu/drm/i915/i915_drv.h:1981:57: error: incompatible type for argument 2 of 'intel_uncore_read'
#define I915_READ(reg__) __I915_REG_OP(read, dev_priv, (reg__))
^
drivers/gpu/drm/i915/i915_drv.h:1979:45: note: in definition of macro '__I915_REG_OP'
intel_uncore_##op__(&(dev_priv__)->uncore, __VA_ARGS__)
^~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:218:8: note: in expansion of macro 'I915_READ'
tmp = I915_READ(DSI_CMD_FRMCTL(port));
^~~~~~~~~
In file included from drivers/gpu/drm/i915/gt/uc/intel_guc.h:9:0,
from drivers/gpu/drm/i915/gt/uc/intel_uc.h:9,
from drivers/gpu/drm/i915/gt/intel_gt_types.h:16,
from drivers/gpu/drm/i915/i915_drv.h:81,
from drivers/gpu/drm/i915/display/intel_display_types.h:46,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/intel_uncore.h:287:22: note: expected 'i915_reg_t {aka struct <anonymous>}' but argument is of type 'int'
static inline u##x__ intel_uncore_##name__(struct intel_uncore *uncore, \
^
drivers/gpu/drm/i915/intel_uncore.h:302:1: note: in expansion of macro '__uncore_read'
__uncore_read(read, 32, l, true)
^~~~~~~~~~~~~
>> drivers/gpu/drm/i915/display/icl_dsi.c:219:9: error: 'DSI_FRAME_UPDATE_REQUEST' undeclared (first use in this function); did you mean 'HDCP_REAUTH_REQUEST'?
tmp |= DSI_FRAME_UPDATE_REQUEST;
^~~~~~~~~~~~~~~~~~~~~~~~
HDCP_REAUTH_REQUEST
drivers/gpu/drm/i915/display/icl_dsi.c:219:9: note: each undeclared identifier is reported only once for each function it appears in
In file included from drivers/gpu/drm/i915/display/intel_display_types.h:46:0,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/i915_drv.h:1982:65: error: incompatible type for argument 2 of 'intel_uncore_write'
#define I915_WRITE(reg__, val__) __I915_REG_OP(write, dev_priv, (reg__), (val__))
^
drivers/gpu/drm/i915/i915_drv.h:1979:45: note: in definition of macro '__I915_REG_OP'
intel_uncore_##op__(&(dev_priv__)->uncore, __VA_ARGS__)
^~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:220:2: note: in expansion of macro 'I915_WRITE'
I915_WRITE(DSI_CMD_FRMCTL(port), tmp);
^~~~~~~~~~
In file included from drivers/gpu/drm/i915/gt/uc/intel_guc.h:9:0,
from drivers/gpu/drm/i915/gt/uc/intel_uc.h:9,
from drivers/gpu/drm/i915/gt/intel_gt_types.h:16,
from drivers/gpu/drm/i915/i915_drv.h:81,
from drivers/gpu/drm/i915/display/intel_display_types.h:46,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/intel_uncore.h:294:20: note: expected 'i915_reg_t {aka struct <anonymous>}' but argument is of type 'int'
static inline void intel_uncore_##name__(struct intel_uncore *uncore, \
^
drivers/gpu/drm/i915/intel_uncore.h:308:1: note: in expansion of macro '__uncore_write'
__uncore_write(write, 32, l, true)
^~~~~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c: In function 'gen11_dsi_configure_transcoder':
drivers/gpu/drm/i915/display/icl_dsi.c:740:11: error: 'TE_SOURCE_GPIO' undeclared (first use in this function); did you mean 'DP_SOURCE_OUI'?
tmp |= TE_SOURCE_GPIO;
^~~~~~~~~~~~~~
DP_SOURCE_OUI
drivers/gpu/drm/i915/display/icl_dsi.c: In function 'gen11_dsi_config_util_pin':
drivers/gpu/drm/i915/display/icl_dsi.c:1021:10: error: 'UTIL_PIN_DIRECTION_INPUT' undeclared (first use in this function); did you mean 'UTIL_PIN_PIPE_MASK'?
tmp |= UTIL_PIN_DIRECTION_INPUT;
^~~~~~~~~~~~~~~~~~~~~~~~
UTIL_PIN_PIPE_MASK
In file included from drivers/gpu/drm/i915/display/intel_display_types.h:46:0,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/display/icl_dsi.c: In function 'gen11_dsi_deconfigure_trancoder':
drivers/gpu/drm/i915/i915_drv.h:1981:57: error: incompatible type for argument 2 of 'intel_uncore_read'
#define I915_READ(reg__) __I915_REG_OP(read, dev_priv, (reg__))
^
drivers/gpu/drm/i915/i915_drv.h:1979:45: note: in definition of macro '__I915_REG_OP'
intel_uncore_##op__(&(dev_priv__)->uncore, __VA_ARGS__)
^~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:1186:10: note: in expansion of macro 'I915_READ'
tmp = I915_READ(DSI_CMD_FRMCTL(port));
^~~~~~~~~
In file included from drivers/gpu/drm/i915/gt/uc/intel_guc.h:9:0,
from drivers/gpu/drm/i915/gt/uc/intel_uc.h:9,
from drivers/gpu/drm/i915/gt/intel_gt_types.h:16,
from drivers/gpu/drm/i915/i915_drv.h:81,
from drivers/gpu/drm/i915/display/intel_display_types.h:46,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/intel_uncore.h:287:22: note: expected 'i915_reg_t {aka struct <anonymous>}' but argument is of type 'int'
static inline u##x__ intel_uncore_##name__(struct intel_uncore *uncore, \
^
drivers/gpu/drm/i915/intel_uncore.h:302:1: note: in expansion of macro '__uncore_read'
__uncore_read(read, 32, l, true)
^~~~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:1187:12: error: 'DSI_PERIODIC_FRAME_UPDATE_ENABLE' undeclared (first use in this function); did you mean 'GEN6_MBCTL_BME_UPDATE_ENABLE'?
tmp &= ~DSI_PERIODIC_FRAME_UPDATE_ENABLE;
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GEN6_MBCTL_BME_UPDATE_ENABLE
In file included from drivers/gpu/drm/i915/display/intel_display_types.h:46:0,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/i915_drv.h:1982:65: error: incompatible type for argument 2 of 'intel_uncore_write'
#define I915_WRITE(reg__, val__) __I915_REG_OP(write, dev_priv, (reg__), (val__))
^
drivers/gpu/drm/i915/i915_drv.h:1979:45: note: in definition of macro '__I915_REG_OP'
intel_uncore_##op__(&(dev_priv__)->uncore, __VA_ARGS__)
^~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c:1188:4: note: in expansion of macro 'I915_WRITE'
I915_WRITE(DSI_CMD_FRMCTL(port), tmp);
^~~~~~~~~~
In file included from drivers/gpu/drm/i915/gt/uc/intel_guc.h:9:0,
from drivers/gpu/drm/i915/gt/uc/intel_uc.h:9,
from drivers/gpu/drm/i915/gt/intel_gt_types.h:16,
from drivers/gpu/drm/i915/i915_drv.h:81,
from drivers/gpu/drm/i915/display/intel_display_types.h:46,
from drivers/gpu/drm/i915/display/intel_dsi.h:30,
from drivers/gpu/drm/i915/display/icl_dsi.c:35:
drivers/gpu/drm/i915/intel_uncore.h:294:20: note: expected 'i915_reg_t {aka struct <anonymous>}' but argument is of type 'int'
static inline void intel_uncore_##name__(struct intel_uncore *uncore, \
^
drivers/gpu/drm/i915/intel_uncore.h:308:1: note: in expansion of macro '__uncore_write'
__uncore_write(write, 32, l, true)
^~~~~~~~~~~~~~
drivers/gpu/drm/i915/display/icl_dsi.c: In function 'gen11_dsi_is_periodic_cmd_mode':
drivers/gpu/drm/i915/display/icl_dsi.c:1340:16: error: 'DSI_PERIODIC_FRAME_UPDATE_ENABLE' undeclared (first use in this function); did you mean 'GEN6_MBCTL_BME_UPDATE_ENABLE'?
return (val & DSI_PERIODIC_FRAME_UPDATE_ENABLE);
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
GEN6_MBCTL_BME_UPDATE_ENABLE
drivers/gpu/drm/i915/display/icl_dsi.c: In function 'gen11_dsi_get_config':
vim +219 drivers/gpu/drm/i915/display/icl_dsi.c
30
31 #include "intel_atomic.h"
32 #include "intel_combo_phy.h"
33 #include "intel_connector.h"
34 #include "intel_ddi.h"
> 35 #include "intel_dsi.h"
36 #include "intel_panel.h"
37
38 static inline int header_credits_available(struct drm_i915_private *dev_priv,
39 enum transcoder dsi_trans)
40 {
41 return (I915_READ(DSI_CMD_TXCTL(dsi_trans)) & FREE_HEADER_CREDIT_MASK)
42 >> FREE_HEADER_CREDIT_SHIFT;
43 }
44
45 static inline int payload_credits_available(struct drm_i915_private *dev_priv,
46 enum transcoder dsi_trans)
47 {
48 return (I915_READ(DSI_CMD_TXCTL(dsi_trans)) & FREE_PLOAD_CREDIT_MASK)
49 >> FREE_PLOAD_CREDIT_SHIFT;
50 }
51
52 static void wait_for_header_credits(struct drm_i915_private *dev_priv,
53 enum transcoder dsi_trans)
54 {
55 if (wait_for_us(header_credits_available(dev_priv, dsi_trans) >=
56 MAX_HEADER_CREDIT, 100))
57 DRM_ERROR("DSI header credits not released\n");
58 }
59
60 static void wait_for_payload_credits(struct drm_i915_private *dev_priv,
61 enum transcoder dsi_trans)
62 {
63 if (wait_for_us(payload_credits_available(dev_priv, dsi_trans) >=
64 MAX_PLOAD_CREDIT, 100))
65 DRM_ERROR("DSI payload credits not released\n");
66 }
67
68 static enum transcoder dsi_port_to_transcoder(enum port port)
69 {
70 if (port == PORT_A)
71 return TRANSCODER_DSI_0;
72 else
73 return TRANSCODER_DSI_1;
74 }
75
76 static void wait_for_cmds_dispatched_to_panel(struct intel_encoder *encoder)
77 {
78 struct drm_i915_private *dev_priv = to_i915(encoder->base.dev);
79 struct intel_dsi *intel_dsi = enc_to_intel_dsi(&encoder->base);
80 struct mipi_dsi_device *dsi;
81 enum port port;
82 enum transcoder dsi_trans;
83 int ret;
84
85 /* wait for header/payload credits to be released */
86 for_each_dsi_port(port, intel_dsi->ports) {
87 dsi_trans = dsi_port_to_transcoder(port);
88 wait_for_header_credits(dev_priv, dsi_trans);
89 wait_for_payload_credits(dev_priv, dsi_trans);
90 }
91
92 /* send nop DCS command */
93 for_each_dsi_port(port, intel_dsi->ports) {
94 dsi = intel_dsi->dsi_hosts[port]->device;
95 dsi->mode_flags |= MIPI_DSI_MODE_LPM;
96 dsi->channel = 0;
97 ret = mipi_dsi_dcs_nop(dsi);
98 if (ret < 0)
99 DRM_ERROR("error sending DCS NOP command\n");
100 }
101
102 /* wait for header credits to be released */
103 for_each_dsi_port(port, intel_dsi->ports) {
104 dsi_trans = dsi_port_to_transcoder(port);
105 wait_for_header_credits(dev_priv, dsi_trans);
106 }
107
108 /* wait for LP TX in progress bit to be cleared */
109 for_each_dsi_port(port, intel_dsi->ports) {
110 dsi_trans = dsi_port_to_transcoder(port);
111 if (wait_for_us(!(I915_READ(DSI_LP_MSG(dsi_trans)) &
112 LPTX_IN_PROGRESS), 20))
113 DRM_ERROR("LPTX bit not cleared\n");
114 }
115 }
116
117 static bool add_payld_to_queue(struct intel_dsi_host *host, const u8 *data,
118 u32 len)
119 {
120 struct intel_dsi *intel_dsi = host->intel_dsi;
121 struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
122 enum transcoder dsi_trans = dsi_port_to_transcoder(host->port);
123 int free_credits;
124 int i, j;
125
126 for (i = 0; i < len; i += 4) {
127 u32 tmp = 0;
128
129 free_credits = payload_credits_available(dev_priv, dsi_trans);
130 if (free_credits < 1) {
131 DRM_ERROR("Payload credit not available\n");
132 return false;
133 }
134
135 for (j = 0; j < min_t(u32, len - i, 4); j++)
136 tmp |= *data++ << 8 * j;
137
138 I915_WRITE(DSI_CMD_TXPYLD(dsi_trans), tmp);
139 }
140
141 return true;
142 }
143
144 static int dsi_send_pkt_hdr(struct intel_dsi_host *host,
145 struct mipi_dsi_packet pkt, bool enable_lpdt)
146 {
147 struct intel_dsi *intel_dsi = host->intel_dsi;
148 struct drm_i915_private *dev_priv = to_i915(intel_dsi->base.base.dev);
149 enum transcoder dsi_trans = dsi_port_to_transcoder(host->port);
150 u32 tmp;
151 int free_credits;
152
153 /* check if header credit available */
154 free_credits = header_credits_available(dev_priv, dsi_trans);
155 if (free_credits < 1) {
156 DRM_ERROR("send pkt header failed, not enough hdr credits\n");
157 return -1;
158 }
159
160 tmp = I915_READ(DSI_CMD_TXHDR(dsi_trans));
161
162 if (pkt.payload)
163 tmp |= PAYLOAD_PRESENT;
164 else
165 tmp &= ~PAYLOAD_PRESENT;
166
167 tmp &= ~VBLANK_FENCE;
168
169 if (enable_lpdt)
170 tmp |= LP_DATA_TRANSFER;
171
172 tmp &= ~(PARAM_WC_MASK | VC_MASK | DT_MASK);
173 tmp |= ((pkt.header[0] & VC_MASK) << VC_SHIFT);
174 tmp |= ((pkt.header[0] & DT_MASK) << DT_SHIFT);
175 tmp |= (pkt.header[1] << PARAM_WC_LOWER_SHIFT);
176 tmp |= (pkt.header[2] << PARAM_WC_UPPER_SHIFT);
177 I915_WRITE(DSI_CMD_TXHDR(dsi_trans), tmp);
178
179 return 0;
180 }
181
182 static int dsi_send_pkt_payld(struct intel_dsi_host *host,
183 struct mipi_dsi_packet pkt)
184 {
185 /* payload queue can accept *256 bytes*, check limit */
186 if (pkt.payload_length > MAX_PLOAD_CREDIT * 4) {
187 DRM_ERROR("payload size exceeds max queue limit\n");
188 return -1;
189 }
190
191 /* load data into command payload queue */
192 if (!add_payld_to_queue(host, pkt.payload,
193 pkt.payload_length)) {
194 DRM_ERROR("adding payload to queue failed\n");
195 return -1;
196 }
197
198 return 0;
199 }
200
201 void gen11_dsi_frame_update(struct intel_crtc_state *crtc_state)
202 {
203 struct intel_crtc *crtc = to_intel_crtc(crtc_state->uapi.crtc);
204 struct drm_i915_private *dev_priv = to_i915(crtc->base.dev);
205 u32 tmp, private_flags;
206 enum port port;
207
208 private_flags = crtc_state->hw.adjusted_mode.private_flags;
209
210 /* case 1 also covers dual link */
211 if (private_flags & I915_MODE_FLAG_DSI_USE_TE0)
212 port = PORT_A;
213 else if (private_flags & I915_MODE_FLAG_DSI_USE_TE1)
214 port = PORT_B;
215 else
216 return;
217
218 tmp = I915_READ(DSI_CMD_FRMCTL(port));
> 219 tmp |= DSI_FRAME_UPDATE_REQUEST;
220 I915_WRITE(DSI_CMD_FRMCTL(port), tmp);
221 }
222
---
0-DAY kernel test infrastructure Open Source Technology Center
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org Intel Corporation
-------------- next part --------------
A non-text attachment was scrubbed...
Name: .config.gz
Type: application/gzip
Size: 28187 bytes
Desc: not available
URL: <https://lists.freedesktop.org/archives/intel-gfx/attachments/20191120/82452958/attachment-0001.gz>
More information about the Intel-gfx
mailing list