CC: [email protected]
CC: [email protected]
CC: [email protected]
TO: Kees Cook <[email protected]>
CC: Alex Deucher <[email protected]>

tree:   https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git 
master
head:   d567f5db412ed52de0b3b3efca4a451263de6108
commit: c69f27137a38d24301a6b659454a91ad85dff4aa drm/radeon: Avoid power table 
parsing memory leaks
date:   10 months ago
:::::: branch date: 21 hours ago
:::::: commit date: 10 months ago
config: arm-randconfig-c002-20220214 
(https://download.01.org/0day-ci/archive/20220215/[email protected]/config)
compiler: clang version 15.0.0 (https://github.com/llvm/llvm-project 
ea071884b0cc7210b3cc5fe858f0e892a779a23b)
reproduce (this is a W=1 build):
        wget 
https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O 
~/bin/make.cross
        chmod +x ~/bin/make.cross
        # install arm cross compiling tool for clang build
        # apt-get install binutils-arm-linux-gnueabi
        # 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/commit/?id=c69f27137a38d24301a6b659454a91ad85dff4aa
        git remote add linus 
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
        git fetch --no-tags linus master
        git checkout c69f27137a38d24301a6b659454a91ad85dff4aa
        # save the config file to linux build tree
        COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=arm 
clang-analyzer 

If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <[email protected]>


clang-analyzer warnings: (new ones prefixed by >>)
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                       ^
   include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   drivers/gpu/drm/radeon/rv6xx_dpm.c:146:2: note: Taking true branch
           if (ret)
           ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   drivers/gpu/drm/radeon/rv6xx_dpm.c:147:3: note: Returning without writing to 
'step->vco_frequency'
                   return ret;
                   ^
   drivers/gpu/drm/radeon/rv6xx_dpm.c:249:2: note: Returning from 
'rv6xx_convert_clock_to_stepping'
           rv6xx_convert_clock_to_stepping(rdev, high, &target);
           ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/radeon/rv6xx_dpm.c:253:41: note: The left operand of '>=' is 
a garbage value
           increasing_vco = (target.vco_frequency >= cur.vco_frequency);
                             ~~~~~~~~~~~~~~~~~~~~ ^
   Suppressed 7 warnings (6 in non-user code, 1 with check filters).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   8 warnings generated.
   include/asm-generic/bitops/non-atomic.h:106:16: warning: Array access (from 
variable 'addr') results in a null pointer dereference 
[clang-analyzer-core.NullDereference]
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^
   drivers/perf/arm_pmu.c:756:24: note: Assuming '____ptr' is null
           struct arm_pmu *pmu = hlist_entry_safe(node, struct arm_pmu, node);
                                 ^
   include/linux/list.h:983:5: note: expanded from macro 'hlist_entry_safe'
              ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
              ^~~~~~~
   drivers/perf/arm_pmu.c:756:24: note: '?' condition is false
           struct arm_pmu *pmu = hlist_entry_safe(node, struct arm_pmu, node);
                                 ^
   include/linux/list.h:983:5: note: expanded from macro 'hlist_entry_safe'
              ____ptr ? hlist_entry(____ptr, type, member) : NULL; \
              ^
   drivers/perf/arm_pmu.c:759:7: note: Calling 'cpumask_test_cpu'
           if (!cpumask_test_cpu(cpu, &pmu->supported_cpus))
                ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                                                 ^~~~
   include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                      ^~~~
   include/linux/cpumask.h:373:38: note: Passing null pointer value via 2nd 
parameter 'addr'
           return test_bit(cpumask_check(cpu), cpumask_bits((cpumask)));
                                               ^
   include/linux/cpumask.h:26:29: note: expanded from macro 'cpumask_bits'
   #define cpumask_bits(maskp) ((maskp)->bits)
                               ^~~~~~~~~~~~~~~
   include/linux/cpumask.h:373:9: note: Calling 'test_bit'
           return test_bit(cpumask_check(cpu), cpumask_bits((cpumask)));
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/asm-generic/bitops/non-atomic.h:106:16: note: Array access (from 
variable 'addr') results in a null pointer dereference
           return 1UL & (addr[BIT_WORD(nr)] >> (nr & (BITS_PER_LONG-1)));
                         ^~~~
   Suppressed 7 warnings (7 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   7 warnings generated.
   Suppressed 7 warnings (7 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   17 warnings generated.
   Suppressed 17 warnings (17 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   2 warnings generated.
   Suppressed 2 warnings (2 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   9 warnings generated.
   drivers/gpu/drm/amd/amdgpu/cz_ih.c:394:3: warning: Value stored to 'tmp' is 
never read [clang-analyzer-deadcode.DeadStores]
                   tmp = RREG32(mmSRBM_SOFT_RESET);
                   ^
   drivers/gpu/drm/amd/amdgpu/cz_ih.c:394:3: note: Value stored to 'tmp' is 
never read
   Suppressed 8 warnings (8 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   8 warnings generated.
   Suppressed 8 warnings (8 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   7 warnings generated.
   block/partitions/atari.c:143:5: warning: Value stored to 'part_fmt' is never 
read [clang-analyzer-deadcode.DeadStores]
                                   part_fmt = 2;
                                   ^          ~
   block/partitions/atari.c:143:5: note: Value stored to 'part_fmt' is never 
read
                                   part_fmt = 2;
                                   ^          ~
   Suppressed 6 warnings (6 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
   Suppressed 6 warnings (6 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   6 warnings generated.
   Suppressed 6 warnings (6 in non-user code).
   Use -header-filter=.* to display errors from all non-system headers. Use 
-system-headers to display errors from system headers as well.
   60 warnings generated.
>> drivers/gpu/drm/radeon/radeon_atombios.c:1661:28: warning: The left 
>> expression of the compound assignment is an uninitialized value. The 
>> computed value will also be garbage 
>> [clang-analyzer-core.uninitialized.Assign]
                           lvds->native_mode.flags |= DRM_MODE_FLAG_NVSYNC;
                           ~~~~~~~~~~~~~~~~~~~~~~~ ^
   drivers/gpu/drm/radeon/radeon_atombios.c:1627:2: note: Assuming the 
condition is false
           if (atom_parse_data_header(mode_info->atom_context, index, NULL,
           ^
   include/linux/compiler.h:56:45: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                      ^~~~
   drivers/gpu/drm/radeon/radeon_atombios.c:1627:2: note: '?' condition is false
           if (atom_parse_data_header(mode_info->atom_context, index, NULL,
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/gpu/drm/radeon/radeon_atombios.c:1627:2: note: Assuming the 
condition is false
           if (atom_parse_data_header(mode_info->atom_context, index, NULL,
           ^
   include/linux/compiler.h:56:45: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ~~~~~~~~~~~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                       
~~~~~~~~~~~~~~~~~^~~~~
   include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
            ^~~~
   drivers/gpu/drm/radeon/radeon_atombios.c:1627:2: note: '?' condition is true
           if (atom_parse_data_header(mode_info->atom_context, index, NULL,
           ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                       ^
   include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
           ^
   drivers/gpu/drm/radeon/radeon_atombios.c:1627:2: note: Taking true branch
           if (atom_parse_data_header(mode_info->atom_context, index, NULL,
           ^
   include/linux/compiler.h:56:23: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                         ^
   drivers/gpu/drm/radeon/radeon_atombios.c:1632:7: note: Calling 'kzalloc'
                       kzalloc(sizeof(struct radeon_encoder_atom_dig), 
GFP_KERNEL);
                       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   include/linux/slab.h:684:9: note: Uninitialized value stored to field 'flags'
           return kmalloc(size, flags | __GFP_ZERO);
                  ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/radeon/radeon_atombios.c:1632:7: note: Returning from 
'kzalloc'
                       kzalloc(sizeof(struct radeon_encoder_atom_dig), 
GFP_KERNEL);
                       
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
   drivers/gpu/drm/radeon/radeon_atombios.c:1634:7: note: Assuming 'lvds' is 
non-null
                   if (!lvds)
                       ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                                                 ^~~~
   include/linux/compiler.h:58:52: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                      ^~~~
   drivers/gpu/drm/radeon/radeon_atombios.c:1634:3: note: '?' condition is false
                   if (!lvds)
                   ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:31: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                 ^
   drivers/gpu/drm/radeon/radeon_atombios.c:1634:8: note: 'lvds' is non-null
                   if (!lvds)
                        ^
   include/linux/compiler.h:56:47: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                                                 ^~~~
   include/linux/compiler.h:58:86: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                                
        ^~~~
   include/linux/compiler.h:69:3: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \
            ^~~~
   drivers/gpu/drm/radeon/radeon_atombios.c:1634:3: note: '?' condition is false
                   if (!lvds)
                   ^
   include/linux/compiler.h:56:28: note: expanded from macro 'if'
   #define if(cond, ...) if ( __trace_if_var( !!(cond , ## __VA_ARGS__) ) )
                              ^
   include/linux/compiler.h:58:69: note: expanded from macro '__trace_if_var'
   #define __trace_if_var(cond) (__builtin_constant_p(cond) ? (cond) : 
__trace_if_value(cond))
                                                                       ^
   include/linux/compiler.h:69:2: note: expanded from macro '__trace_if_value'
           (cond) ?                                        \

vim +1661 drivers/gpu/drm/radeon/radeon_atombios.c

771fe6b912fca5 Jerome Glisse 2009-06-05  1612  
771fe6b912fca5 Jerome Glisse 2009-06-05  1613  struct radeon_encoder_atom_dig 
*radeon_atombios_get_lvds_info(struct
771fe6b912fca5 Jerome Glisse 2009-06-05  1614                                   
                      radeon_encoder
771fe6b912fca5 Jerome Glisse 2009-06-05  1615                                   
                      *encoder)
771fe6b912fca5 Jerome Glisse 2009-06-05  1616  {
771fe6b912fca5 Jerome Glisse 2009-06-05  1617   struct drm_device *dev = 
encoder->base.dev;
771fe6b912fca5 Jerome Glisse 2009-06-05  1618   struct radeon_device *rdev = 
dev->dev_private;
771fe6b912fca5 Jerome Glisse 2009-06-05  1619   struct radeon_mode_info 
*mode_info = &rdev->mode_info;
771fe6b912fca5 Jerome Glisse 2009-06-05  1620   int index = 
GetIndexIntoMasterTable(DATA, LVDS_Info);
7dde8a19656dde Alex Deucher  2009-11-30  1621   uint16_t data_offset, misc;
771fe6b912fca5 Jerome Glisse 2009-06-05  1622   union lvds_info *lvds_info;
771fe6b912fca5 Jerome Glisse 2009-06-05  1623   uint8_t frev, crev;
771fe6b912fca5 Jerome Glisse 2009-06-05  1624   struct radeon_encoder_atom_dig 
*lvds = NULL;
5137ee940c3e59 Alex Deucher  2010-08-12  1625   int encoder_enum = 
(encoder->encoder_enum & ENUM_ID_MASK) >> ENUM_ID_SHIFT;
771fe6b912fca5 Jerome Glisse 2009-06-05  1626  
a084e6ee6e64a7 Alex Deucher  2010-03-18  1627   if 
(atom_parse_data_header(mode_info->atom_context, index, NULL,
a084e6ee6e64a7 Alex Deucher  2010-03-18  1628                              
&frev, &crev, &data_offset)) {
771fe6b912fca5 Jerome Glisse 2009-06-05  1629           lvds_info =
771fe6b912fca5 Jerome Glisse 2009-06-05  1630                   (union 
lvds_info *)(mode_info->atom_context->bios + data_offset);
771fe6b912fca5 Jerome Glisse 2009-06-05  1631           lvds =
771fe6b912fca5 Jerome Glisse 2009-06-05  1632               
kzalloc(sizeof(struct radeon_encoder_atom_dig), GFP_KERNEL);
771fe6b912fca5 Jerome Glisse 2009-06-05  1633  
771fe6b912fca5 Jerome Glisse 2009-06-05  1634           if (!lvds)
771fe6b912fca5 Jerome Glisse 2009-06-05  1635                   return NULL;
771fe6b912fca5 Jerome Glisse 2009-06-05  1636  
de2103e452ec7f Alex Deucher  2009-10-09  1637           lvds->native_mode.clock 
=
771fe6b912fca5 Jerome Glisse 2009-06-05  1638               
le16_to_cpu(lvds_info->info.sLCDTiming.usPixClk) * 10;
de2103e452ec7f Alex Deucher  2009-10-09  1639           
lvds->native_mode.hdisplay =
771fe6b912fca5 Jerome Glisse 2009-06-05  1640               
le16_to_cpu(lvds_info->info.sLCDTiming.usHActive);
de2103e452ec7f Alex Deucher  2009-10-09  1641           
lvds->native_mode.vdisplay =
771fe6b912fca5 Jerome Glisse 2009-06-05  1642               
le16_to_cpu(lvds_info->info.sLCDTiming.usVActive);
de2103e452ec7f Alex Deucher  2009-10-09  1643           
lvds->native_mode.htotal = lvds->native_mode.hdisplay +
771fe6b912fca5 Jerome Glisse 2009-06-05  1644                   
le16_to_cpu(lvds_info->info.sLCDTiming.usHBlanking_Time);
de2103e452ec7f Alex Deucher  2009-10-09  1645           
lvds->native_mode.hsync_start = lvds->native_mode.hdisplay +
771fe6b912fca5 Jerome Glisse 2009-06-05  1646                   
le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncOffset);
de2103e452ec7f Alex Deucher  2009-10-09  1647           
lvds->native_mode.hsync_end = lvds->native_mode.hsync_start +
771fe6b912fca5 Jerome Glisse 2009-06-05  1648                   
le16_to_cpu(lvds_info->info.sLCDTiming.usHSyncWidth);
de2103e452ec7f Alex Deucher  2009-10-09  1649           
lvds->native_mode.vtotal = lvds->native_mode.vdisplay +
771fe6b912fca5 Jerome Glisse 2009-06-05  1650                   
le16_to_cpu(lvds_info->info.sLCDTiming.usVBlanking_Time);
de2103e452ec7f Alex Deucher  2009-10-09  1651           
lvds->native_mode.vsync_start = lvds->native_mode.vdisplay +
1ff26a3604d029 Alex Deucher  2010-05-18  1652                   
le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncOffset);
de2103e452ec7f Alex Deucher  2009-10-09  1653           
lvds->native_mode.vsync_end = lvds->native_mode.vsync_start +
771fe6b912fca5 Jerome Glisse 2009-06-05  1654                   
le16_to_cpu(lvds_info->info.sLCDTiming.usVSyncWidth);
771fe6b912fca5 Jerome Glisse 2009-06-05  1655           lvds->panel_pwr_delay =
771fe6b912fca5 Jerome Glisse 2009-06-05  1656               
le16_to_cpu(lvds_info->info.usOffDelayInMs);
ba032a58d1f320 Alex Deucher  2010-10-04  1657           lvds->lcd_misc = 
lvds_info->info.ucLVDS_Misc;
7dde8a19656dde Alex Deucher  2009-11-30  1658  
7dde8a19656dde Alex Deucher  2009-11-30  1659           misc = 
le16_to_cpu(lvds_info->info.sLCDTiming.susModeMiscInfo.usAccess);
7dde8a19656dde Alex Deucher  2009-11-30  1660           if (misc & 
ATOM_VSYNC_POLARITY)
7dde8a19656dde Alex Deucher  2009-11-30 @1661                   
lvds->native_mode.flags |= DRM_MODE_FLAG_NVSYNC;
7dde8a19656dde Alex Deucher  2009-11-30  1662           if (misc & 
ATOM_HSYNC_POLARITY)
7dde8a19656dde Alex Deucher  2009-11-30  1663                   
lvds->native_mode.flags |= DRM_MODE_FLAG_NHSYNC;
7dde8a19656dde Alex Deucher  2009-11-30  1664           if (misc & 
ATOM_COMPOSITESYNC)
7dde8a19656dde Alex Deucher  2009-11-30  1665                   
lvds->native_mode.flags |= DRM_MODE_FLAG_CSYNC;
7dde8a19656dde Alex Deucher  2009-11-30  1666           if (misc & 
ATOM_INTERLACE)
7dde8a19656dde Alex Deucher  2009-11-30  1667                   
lvds->native_mode.flags |= DRM_MODE_FLAG_INTERLACE;
7dde8a19656dde Alex Deucher  2009-11-30  1668           if (misc & 
ATOM_DOUBLE_CLOCK_MODE)
7dde8a19656dde Alex Deucher  2009-11-30  1669                   
lvds->native_mode.flags |= DRM_MODE_FLAG_DBLSCAN;
7dde8a19656dde Alex Deucher  2009-11-30  1670  
4589433c57bd34 Cédric Cano   2011-02-11  1671           
lvds->native_mode.width_mm = 
le16_to_cpu(lvds_info->info.sLCDTiming.usImageHSize);
4589433c57bd34 Cédric Cano   2011-02-11  1672           
lvds->native_mode.height_mm = 
le16_to_cpu(lvds_info->info.sLCDTiming.usImageVSize);
7a868e18a4907d Alex Deucher  2010-12-08  1673  
de2103e452ec7f Alex Deucher  2009-10-09  1674           /* set crtc values */
de2103e452ec7f Alex Deucher  2009-10-09  1675           
drm_mode_set_crtcinfo(&lvds->native_mode, CRTC_INTERLACE_HALVE_V);
771fe6b912fca5 Jerome Glisse 2009-06-05  1676  
ba032a58d1f320 Alex Deucher  2010-10-04  1677           lvds->lcd_ss_id = 
lvds_info->info.ucSS_Id;
ebbe1cb936dfc9 Alex Deucher  2009-10-16  1678  
771fe6b912fca5 Jerome Glisse 2009-06-05  1679           encoder->native_mode = 
lvds->native_mode;
5137ee940c3e59 Alex Deucher  2010-08-12  1680  
5137ee940c3e59 Alex Deucher  2010-08-12  1681           if (encoder_enum == 2)
5137ee940c3e59 Alex Deucher  2010-08-12  1682                   lvds->linkb = 
true;
5137ee940c3e59 Alex Deucher  2010-08-12  1683           else
5137ee940c3e59 Alex Deucher  2010-08-12  1684                   lvds->linkb = 
false;
5137ee940c3e59 Alex Deucher  2010-08-12  1685  
c324acd5032f51 Alex Deucher  2010-12-08  1686           /* parse the lcd record 
table */
4589433c57bd34 Cédric Cano   2011-02-11  1687           if 
(le16_to_cpu(lvds_info->info.usModePatchTableOffset)) {
c324acd5032f51 Alex Deucher  2010-12-08  1688                   
ATOM_FAKE_EDID_PATCH_RECORD *fake_edid_record;
c324acd5032f51 Alex Deucher  2010-12-08  1689                   
ATOM_PANEL_RESOLUTION_PATCH_RECORD *panel_res_record;
c324acd5032f51 Alex Deucher  2010-12-08  1690                   bool bad_record 
= false;
05fa7ea7d23980 Alex Deucher  2011-05-11  1691                   u8 *record;
05fa7ea7d23980 Alex Deucher  2011-05-11  1692  
05fa7ea7d23980 Alex Deucher  2011-05-11  1693                   if ((frev == 1) 
&& (crev < 2))
05fa7ea7d23980 Alex Deucher  2011-05-11  1694                           /* 
absolute */
05fa7ea7d23980 Alex Deucher  2011-05-11  1695                           record 
= (u8 *)(mode_info->atom_context->bios +
05fa7ea7d23980 Alex Deucher  2011-05-11  1696                                   
        le16_to_cpu(lvds_info->info.usModePatchTableOffset));
05fa7ea7d23980 Alex Deucher  2011-05-11  1697                   else
05fa7ea7d23980 Alex Deucher  2011-05-11  1698                           /* 
relative */
05fa7ea7d23980 Alex Deucher  2011-05-11  1699                           record 
= (u8 *)(mode_info->atom_context->bios +
c324acd5032f51 Alex Deucher  2010-12-08  1700                                   
        data_offset +
4589433c57bd34 Cédric Cano   2011-02-11  1701                                   
        le16_to_cpu(lvds_info->info.usModePatchTableOffset));
c324acd5032f51 Alex Deucher  2010-12-08  1702                   while (*record 
!= ATOM_RECORD_END_TYPE) {
c324acd5032f51 Alex Deucher  2010-12-08  1703                           switch 
(*record) {
c324acd5032f51 Alex Deucher  2010-12-08  1704                           case 
LCD_MODE_PATCH_RECORD_MODE_TYPE:
c324acd5032f51 Alex Deucher  2010-12-08  1705                                   
record += sizeof(ATOM_PATCH_RECORD_MODE);
c324acd5032f51 Alex Deucher  2010-12-08  1706                                   
break;
c324acd5032f51 Alex Deucher  2010-12-08  1707                           case 
LCD_RTS_RECORD_TYPE:
c324acd5032f51 Alex Deucher  2010-12-08  1708                                   
record += sizeof(ATOM_LCD_RTS_RECORD);
c324acd5032f51 Alex Deucher  2010-12-08  1709                                   
break;
c324acd5032f51 Alex Deucher  2010-12-08  1710                           case 
LCD_CAP_RECORD_TYPE:
c324acd5032f51 Alex Deucher  2010-12-08  1711                                   
record += sizeof(ATOM_LCD_MODE_CONTROL_CAP);
c324acd5032f51 Alex Deucher  2010-12-08  1712                                   
break;
c324acd5032f51 Alex Deucher  2010-12-08  1713                           case 
LCD_FAKE_EDID_PATCH_RECORD_TYPE:
c324acd5032f51 Alex Deucher  2010-12-08  1714                                   
fake_edid_record = (ATOM_FAKE_EDID_PATCH_RECORD *)record;
c324acd5032f51 Alex Deucher  2010-12-08  1715                                   
if (fake_edid_record->ucFakeEDIDLength) {
c324acd5032f51 Alex Deucher  2010-12-08  1716                                   
        struct edid *edid;
c324acd5032f51 Alex Deucher  2010-12-08  1717                                   
        int edid_size =
c324acd5032f51 Alex Deucher  2010-12-08  1718                                   
                max((int)EDID_LENGTH, (int)fake_edid_record->ucFakeEDIDLength);
c324acd5032f51 Alex Deucher  2010-12-08  1719                                   
        edid = kmalloc(edid_size, GFP_KERNEL);
c324acd5032f51 Alex Deucher  2010-12-08  1720                                   
        if (edid) {
c324acd5032f51 Alex Deucher  2010-12-08  1721                                   
                memcpy((u8 *)edid, (u8 *)&fake_edid_record->ucFakeEDIDString[0],
c324acd5032f51 Alex Deucher  2010-12-08  1722                                   
                       fake_edid_record->ucFakeEDIDLength);
c324acd5032f51 Alex Deucher  2010-12-08  1723  
eaa4f5e1d0b816 Dave Airlie   2011-05-01  1724                                   
                if (drm_edid_is_valid(edid)) {
c324acd5032f51 Alex Deucher  2010-12-08  1725                                   
                        rdev->mode_info.bios_hardcoded_edid = edid;
eaa4f5e1d0b816 Dave Airlie   2011-05-01  1726                                   
                        rdev->mode_info.bios_hardcoded_edid_size = edid_size;
eaa4f5e1d0b816 Dave Airlie   2011-05-01  1727                                   
                } else
c324acd5032f51 Alex Deucher  2010-12-08  1728                                   
                        kfree(edid);
c324acd5032f51 Alex Deucher  2010-12-08  1729                                   
        }
c324acd5032f51 Alex Deucher  2010-12-08  1730                                   
}
95663948ba22a4 Alex Deucher  2013-08-20  1731                                   
record += fake_edid_record->ucFakeEDIDLength ?
95663948ba22a4 Alex Deucher  2013-08-20  1732                                   
        fake_edid_record->ucFakeEDIDLength + 2 :
95663948ba22a4 Alex Deucher  2013-08-20  1733                                   
        sizeof(ATOM_FAKE_EDID_PATCH_RECORD);
c324acd5032f51 Alex Deucher  2010-12-08  1734                                   
break;
c324acd5032f51 Alex Deucher  2010-12-08  1735                           case 
LCD_PANEL_RESOLUTION_RECORD_TYPE:
c324acd5032f51 Alex Deucher  2010-12-08  1736                                   
panel_res_record = (ATOM_PANEL_RESOLUTION_PATCH_RECORD *)record;
c324acd5032f51 Alex Deucher  2010-12-08  1737                                   
lvds->native_mode.width_mm = panel_res_record->usHSize;
c324acd5032f51 Alex Deucher  2010-12-08  1738                                   
lvds->native_mode.height_mm = panel_res_record->usVSize;
c324acd5032f51 Alex Deucher  2010-12-08  1739                                   
record += sizeof(ATOM_PANEL_RESOLUTION_PATCH_RECORD);
c324acd5032f51 Alex Deucher  2010-12-08  1740                                   
break;
c324acd5032f51 Alex Deucher  2010-12-08  1741                           default:
c324acd5032f51 Alex Deucher  2010-12-08  1742                                   
DRM_ERROR("Bad LCD record %d\n", *record);
c324acd5032f51 Alex Deucher  2010-12-08  1743                                   
bad_record = true;
c324acd5032f51 Alex Deucher  2010-12-08  1744                                   
break;
c324acd5032f51 Alex Deucher  2010-12-08  1745                           }
c324acd5032f51 Alex Deucher  2010-12-08  1746                           if 
(bad_record)
c324acd5032f51 Alex Deucher  2010-12-08  1747                                   
break;
c324acd5032f51 Alex Deucher  2010-12-08  1748                   }
c324acd5032f51 Alex Deucher  2010-12-08  1749           }
771fe6b912fca5 Jerome Glisse 2009-06-05  1750   }
771fe6b912fca5 Jerome Glisse 2009-06-05  1751   return lvds;
771fe6b912fca5 Jerome Glisse 2009-06-05  1752  }
771fe6b912fca5 Jerome Glisse 2009-06-05  1753  

:::::: The code at line 1661 was first introduced by commit
:::::: 7dde8a19656ddec769b609e8b5662aa7243b8b6a drm/radeon/kms/atom: pull misc 
mode info for lvds from bios tables

:::::: TO: Alex Deucher <[email protected]>
:::::: CC: Dave Airlie <[email protected]>

---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/[email protected]
_______________________________________________
kbuild mailing list -- [email protected]
To unsubscribe send an email to [email protected]

Reply via email to