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:   b2a88c212e652e94f1e4b635910972ac57ba4e97
commit: efeeaefe9be56e8ae5e5b4e9ff6d2275ec977ec5 drm: Add support for the 
LogiCVC display controller
date:   8 weeks ago
:::::: branch date: 12 hours ago
:::::: commit date: 8 weeks ago
config: microblaze-randconfig-m041-20220805 
(https://download.01.org/0day-ci/archive/20220805/[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

efeeaefe9be56e Paul Kocialkowski 2022-05-20  257  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  258  int 
logicvc_layer_buffer_find_setup(struct logicvc_drm *logicvc,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  259                                
    struct logicvc_layer *layer,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  260                                
    struct drm_plane_state *state,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  261                                
    struct logicvc_layer_buffer_setup *setup)
efeeaefe9be56e Paul Kocialkowski 2022-05-20  262  {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  263        struct drm_device 
*drm_dev = &logicvc->drm_dev;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  264        struct drm_framebuffer 
*fb = state->fb;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  265        /* All the supported 
formats have a single data plane. */
efeeaefe9be56e Paul Kocialkowski 2022-05-20  266        u32 layer_bytespp = 
fb->format->cpp[0];
efeeaefe9be56e Paul Kocialkowski 2022-05-20  267        u32 layer_stride = 
layer_bytespp * logicvc->config.row_stride;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  268        u32 base_offset = 
layer->config.base_offset * layer_stride;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  269        u32 buffer_offset = 
layer->config.buffer_offset * layer_stride;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  270        u8 buffer_sel = 0;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  271        u16 voffset = 0;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  272        u16 hoffset = 0;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  273        phys_addr_t fb_addr;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  274        u32 fb_offset;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  275        u32 gap;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  276  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  277        if 
(!logicvc->reserved_mem_base) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  278                
drm_err(drm_dev, "No reserved memory base was registered!\n");
efeeaefe9be56e Paul Kocialkowski 2022-05-20  279                return -ENOMEM;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  280        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  281  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  282        fb_addr = 
drm_fb_cma_get_gem_addr(fb, state, 0);
efeeaefe9be56e Paul Kocialkowski 2022-05-20  283        if (fb_addr < 
logicvc->reserved_mem_base) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  284                drm_err(drm_dev,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  285                        
"Framebuffer memory below reserved memory base!\n");
efeeaefe9be56e Paul Kocialkowski 2022-05-20  286                return -EINVAL;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  287        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  288  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  289        fb_offset = (u32) 
(fb_addr - logicvc->reserved_mem_base);
efeeaefe9be56e Paul Kocialkowski 2022-05-20  290  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  291        if (fb_offset < 
base_offset) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  292                drm_err(drm_dev,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  293                        
"Framebuffer offset below layer base offset!\n");
efeeaefe9be56e Paul Kocialkowski 2022-05-20  294                return -EINVAL;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  295        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  296  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  297        gap = fb_offset - 
base_offset;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  298  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  299        /* Use the possible 
video buffers selection. */
efeeaefe9be56e Paul Kocialkowski 2022-05-20  300        if (gap && 
buffer_offset) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  301                buffer_sel = 
gap / buffer_offset;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  302                if (buffer_sel 
> LOGICVC_BUFFER_SEL_MAX)
efeeaefe9be56e Paul Kocialkowski 2022-05-20  303                        
buffer_sel = LOGICVC_BUFFER_SEL_MAX;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  304  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  305                gap -= 
buffer_sel * buffer_offset;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  306        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  307  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  308        /* Use the vertical 
offset. */
efeeaefe9be56e Paul Kocialkowski 2022-05-20  309        if (gap && layer_stride 
&& logicvc->config.layers_configurable) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  310                voffset = gap / 
layer_stride;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  311                if (voffset > 
LOGICVC_LAYER_VOFFSET_MAX)
efeeaefe9be56e Paul Kocialkowski 2022-05-20  312                        voffset 
= LOGICVC_LAYER_VOFFSET_MAX;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  313  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  314                gap -= voffset 
* layer_stride;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  315        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  316  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  317        /* Use the horizontal 
offset. */
efeeaefe9be56e Paul Kocialkowski 2022-05-20  318        if (gap && 
layer_bytespp && logicvc->config.layers_configurable) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  319                hoffset = gap / 
layer_bytespp;
efeeaefe9be56e Paul Kocialkowski 2022-05-20 @320                if (hoffset > 
LOGICVC_DIMENSIONS_MAX)
efeeaefe9be56e Paul Kocialkowski 2022-05-20  321                        hoffset 
= LOGICVC_DIMENSIONS_MAX;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  322  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  323                gap -= hoffset 
* layer_bytespp;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  324        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  325  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  326        if (gap) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  327                drm_err(drm_dev,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  328                        "Unable 
to find layer %d buffer setup for 0x%x byte gap\n",
efeeaefe9be56e Paul Kocialkowski 2022-05-20  329                        
layer->index, fb_offset - base_offset);
efeeaefe9be56e Paul Kocialkowski 2022-05-20  330                return -EINVAL;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  331        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  332  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  333        drm_dbg_kms(drm_dev, 
"Found layer %d buffer setup for 0x%x byte gap:\n",
efeeaefe9be56e Paul Kocialkowski 2022-05-20  334                    
layer->index, fb_offset - base_offset);
efeeaefe9be56e Paul Kocialkowski 2022-05-20  335  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  336        drm_dbg_kms(drm_dev, "- 
buffer_sel = 0x%x chunks of 0x%x bytes\n",
efeeaefe9be56e Paul Kocialkowski 2022-05-20  337                    buffer_sel, 
buffer_offset);
efeeaefe9be56e Paul Kocialkowski 2022-05-20  338        drm_dbg_kms(drm_dev, "- 
voffset = 0x%x chunks of 0x%x bytes\n", voffset,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  339                    
layer_stride);
efeeaefe9be56e Paul Kocialkowski 2022-05-20  340        drm_dbg_kms(drm_dev, "- 
hoffset = 0x%x chunks of 0x%x bytes\n", hoffset,
efeeaefe9be56e Paul Kocialkowski 2022-05-20  341                    
layer_bytespp);
efeeaefe9be56e Paul Kocialkowski 2022-05-20  342  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  343        if (setup) {
efeeaefe9be56e Paul Kocialkowski 2022-05-20  344                
setup->buffer_sel = buffer_sel;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  345                setup->voffset 
= voffset;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  346                setup->hoffset 
= hoffset;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  347        }
efeeaefe9be56e Paul Kocialkowski 2022-05-20  348  
efeeaefe9be56e Paul Kocialkowski 2022-05-20  349        return 0;
efeeaefe9be56e Paul Kocialkowski 2022-05-20  350  }
efeeaefe9be56e 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]

Reply via email to