Hi Thomas, I love your patch! Perhaps something to improve: [auto build test WARNING on drm-tip/drm-tip] [also build test WARNING on next-20200715] [cannot apply to drm-intel/for-linux-next drm-exynos/exynos-drm-next tegra-drm/drm/tegra/for-next linus/master drm/drm-next v5.8-rc5] [If your patch is applied to the wrong git tree, kindly drop us a note. And when submitting patch, we suggest to use '--base' as documented in https://git-scm.com/docs/git-format-patch] url: https://github.com/0day-ci/linux/commits/Thomas-Zimmermann/drm-mgag200-Support-desktop-chips/20200715-230422 base: git://anongit.freedesktop.org/drm/drm-tip drm-tip config: i386-randconfig-s002-20200715 (attached as .config) compiler: gcc-9 (Debian 9.3.0-14) 9.3.0 reproduce: # apt-get install sparse # sparse version: v0.6.2-49-g707c5017-dirty # save the attached .config to linux build tree make W=1 C=1 CF='-fdiagnostic-prefix -D__CHECK_ENDIAN__' ARCH=i386 If you fix the issue, kindly add following tag as appropriate Reported-by: kernel test robot sparse warnings: (new ones prefixed by >>) >> drivers/gpu/drm/mgag200/mgag200_drv.c:143:17: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:143:36: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:143:55: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:144:17: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:144:36: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:144:55: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:147:23: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:147:57: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:153:17: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:153:36: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:154:31: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:155:32: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:158:32: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:158:43: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:179:27: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:179:39: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:184:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:185:58: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:188:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:189:58: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:190:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:194:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:195:57: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:196:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:200:27: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:201:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:202:57: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:203:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:204:57: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:205:25: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:227:30: sparse: sparse: dereference of noderef expression drivers/gpu/drm/mgag200/mgag200_drv.c:227:49: sparse: sparse: dereference of noderef expression vim +143 drivers/gpu/drm/mgag200/mgag200_drv.c 125 126 static void mgag200_g200_interpret_bios(struct mga_device *mdev, 127 unsigned char __iomem *bios, 128 size_t size) 129 { 130 static const unsigned int expected_length[6] = { 131 0, 64, 64, 64, 128, 128 132 }; 133 134 struct drm_device *dev = &mdev->base; 135 unsigned char __iomem *pins; 136 unsigned int pins_len, version; 137 int offset; 138 int tmp; 139 140 if (size < MGA_BIOS_OFFSET + 1) 141 return; 142 > 143 if (bios[45] != 'M' || bios[46] != 'A' || bios[47] != 'T' || 144 bios[48] != 'R' || bios[49] != 'O' || bios[50] != 'X') 145 return; 146 147 offset = (bios[MGA_BIOS_OFFSET + 1] << 8) | bios[MGA_BIOS_OFFSET]; 148 149 if (offset + 5 > size) 150 return; 151 152 pins = bios + offset; 153 if (pins[0] == 0x2e && pins[1] == 0x41) { 154 version = pins[5]; 155 pins_len = pins[2]; 156 } else { 157 version = 1; 158 pins_len = pins[0] + (pins[1] << 8); 159 } 160 161 if (version < 1 || version > 5) { 162 drm_warn(dev, "Unknown BIOS PInS version: %d\n", version); 163 return; 164 } 165 if (pins_len != expected_length[version]) { 166 drm_warn(dev, "Unexpected BIOS PInS size: %d expeced: %d\n", 167 pins_len, expected_length[version]); 168 return; 169 } 170 171 if (offset + pins_len > size) 172 return; 173 174 drm_dbg_kms(dev, "MATROX BIOS PInS version %d size: %d found\n", 175 version, pins_len); 176 177 switch (version) { 178 case 1: 179 tmp = pins[24] + (pins[25] << 8); 180 if (tmp) 181 mdev->model.g200.pclk_max = tmp * 10; 182 break; 183 case 2: 184 if (pins[41] != 0xff) 185 mdev->model.g200.pclk_max = (pins[41] + 100) * 1000; 186 break; 187 case 3: 188 if (pins[36] != 0xff) 189 mdev->model.g200.pclk_max = (pins[36] + 100) * 1000; 190 if (pins[52] & 0x20) 191 mdev->model.g200.ref_clk = 14318; 192 break; 193 case 4: 194 if (pins[39] != 0xff) 195 mdev->model.g200.pclk_max = pins[39] * 4 * 1000; 196 if (pins[92] & 0x01) 197 mdev->model.g200.ref_clk = 14318; 198 break; 199 case 5: 200 tmp = pins[4] ? 8000 : 6000; 201 if (pins[123] != 0xff) 202 mdev->model.g200.pclk_min = pins[123] * tmp; 203 if (pins[38] != 0xff) 204 mdev->model.g200.pclk_max = pins[38] * tmp; 205 if (pins[110] & 0x01) 206 mdev->model.g200.ref_clk = 14318; 207 break; 208 default: 209 break; 210 } 211 } 212 --- 0-DAY CI Kernel Test Service, Intel Corporation https://lists.01.org/hyperkitty/list/kbuild-all(a)lists.01.org