BCC: [email protected] CC: [email protected] CC: [email protected] TO: Paul Kocialkowski <[email protected]> CC: Maxime Ripard <[email protected]>
tree: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git master head: 1612c382ffbdf1f673caec76502b1c00e6d35363 commit: efeeaefe9be56e8ae5e5b4e9ff6d2275ec977ec5 drm: Add support for the LogiCVC display controller date: 8 weeks ago :::::: branch date: 17 hours ago :::::: commit date: 8 weeks ago config: microblaze-randconfig-m041-20220805 (https://download.01.org/0day-ci/archive/20220808/[email protected]/config) compiler: microblaze-linux-gcc (GCC) 12.1.0 If you fix the issue, kindly add following tag where applicable Reported-by: kernel test robot <[email protected]> Reported-by: Dan Carpenter <[email protected]> New smatch warnings: drivers/gpu/drm/logicvc/logicvc_layer.c:320 logicvc_layer_buffer_find_setup() warn: impossible condition '(hoffset > (((((1))) << (16)) - 1)) => (0-u16max > u16max)' Old smatch warnings: drivers/gpu/drm/logicvc/logicvc_layer.c:492 logicvc_layer_init() warn: missing error code 'ret' vim +320 drivers/gpu/drm/logicvc/logicvc_layer.c efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 257 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 258 int logicvc_layer_buffer_find_setup(struct logicvc_drm *logicvc, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 259 struct logicvc_layer *layer, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 260 struct drm_plane_state *state, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 261 struct logicvc_layer_buffer_setup *setup) efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 262 { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 263 struct drm_device *drm_dev = &logicvc->drm_dev; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 264 struct drm_framebuffer *fb = state->fb; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 265 /* All the supported formats have a single data plane. */ efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 266 u32 layer_bytespp = fb->format->cpp[0]; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 267 u32 layer_stride = layer_bytespp * logicvc->config.row_stride; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 268 u32 base_offset = layer->config.base_offset * layer_stride; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 269 u32 buffer_offset = layer->config.buffer_offset * layer_stride; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 270 u8 buffer_sel = 0; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 271 u16 voffset = 0; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 272 u16 hoffset = 0; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 273 phys_addr_t fb_addr; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 274 u32 fb_offset; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 275 u32 gap; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 276 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 277 if (!logicvc->reserved_mem_base) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 278 drm_err(drm_dev, "No reserved memory base was registered!\n"); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 279 return -ENOMEM; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 280 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 281 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 282 fb_addr = drm_fb_cma_get_gem_addr(fb, state, 0); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 283 if (fb_addr < logicvc->reserved_mem_base) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 284 drm_err(drm_dev, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 285 "Framebuffer memory below reserved memory base!\n"); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 286 return -EINVAL; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 287 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 288 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 289 fb_offset = (u32) (fb_addr - logicvc->reserved_mem_base); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 290 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 291 if (fb_offset < base_offset) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 292 drm_err(drm_dev, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 293 "Framebuffer offset below layer base offset!\n"); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 294 return -EINVAL; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 295 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 296 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 297 gap = fb_offset - base_offset; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 298 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 299 /* Use the possible video buffers selection. */ efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 300 if (gap && buffer_offset) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 301 buffer_sel = gap / buffer_offset; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 302 if (buffer_sel > LOGICVC_BUFFER_SEL_MAX) efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 303 buffer_sel = LOGICVC_BUFFER_SEL_MAX; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 304 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 305 gap -= buffer_sel * buffer_offset; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 306 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 307 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 308 /* Use the vertical offset. */ efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 309 if (gap && layer_stride && logicvc->config.layers_configurable) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 310 voffset = gap / layer_stride; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 311 if (voffset > LOGICVC_LAYER_VOFFSET_MAX) efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 312 voffset = LOGICVC_LAYER_VOFFSET_MAX; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 313 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 314 gap -= voffset * layer_stride; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 315 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 316 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 317 /* Use the horizontal offset. */ efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 318 if (gap && layer_bytespp && logicvc->config.layers_configurable) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 319 hoffset = gap / layer_bytespp; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 @320 if (hoffset > LOGICVC_DIMENSIONS_MAX) efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 321 hoffset = LOGICVC_DIMENSIONS_MAX; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 322 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 323 gap -= hoffset * layer_bytespp; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 324 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 325 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 326 if (gap) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 327 drm_err(drm_dev, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 328 "Unable to find layer %d buffer setup for 0x%x byte gap\n", efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 329 layer->index, fb_offset - base_offset); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 330 return -EINVAL; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 331 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 332 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 333 drm_dbg_kms(drm_dev, "Found layer %d buffer setup for 0x%x byte gap:\n", efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 334 layer->index, fb_offset - base_offset); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 335 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 336 drm_dbg_kms(drm_dev, "- buffer_sel = 0x%x chunks of 0x%x bytes\n", efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 337 buffer_sel, buffer_offset); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 338 drm_dbg_kms(drm_dev, "- voffset = 0x%x chunks of 0x%x bytes\n", voffset, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 339 layer_stride); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 340 drm_dbg_kms(drm_dev, "- hoffset = 0x%x chunks of 0x%x bytes\n", hoffset, efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 341 layer_bytespp); efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 342 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 343 if (setup) { efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 344 setup->buffer_sel = buffer_sel; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 345 setup->voffset = voffset; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 346 setup->hoffset = hoffset; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 347 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 348 efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 349 return 0; efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 350 } efeeaefe9be56e8 Paul Kocialkowski 2022-05-20 351 -- 0-DAY CI Kernel Test Service https://01.org/lkp _______________________________________________ kbuild mailing list -- [email protected] To unsubscribe send an email to [email protected]
