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-Su...
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 <lkp(a)intel.com>
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@lists.01.org