[geert-renesas-drivers:topic/msiof-fifo 25/25] drivers/spi/spi-sh-msiof.c:1285:35: sparse: sparse: Using plain integer as NULL pointer

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



tree:   https://git.kernel.org/pub/scm/linux/kernel/git/geert/renesas-drivers.git topic/msiof-fifo
head:   ea0b0c13af38da57a973b3c0f37e54595546ea2d
commit: ea0b0c13af38da57a973b3c0f37e54595546ea2d [25/25] [TEST] spi: sh-msiof: Add FIFO test code
config: arm64-randconfig-r112-20250513 (https://download.01.org/0day-ci/archive/20250514/202505140608.WAS0ac0x-lkp@xxxxxxxxx/config)
compiler: clang version 21.0.0git (https://github.com/llvm/llvm-project f819f46284f2a79790038e1f6649172789734ae8)
reproduce: (https://download.01.org/0day-ci/archive/20250514/202505140608.WAS0ac0x-lkp@xxxxxxxxx/reproduce)

If you fix the issue in a separate patch/commit (i.e. not just a new version of
the same patch/commit), kindly add following tags
| Reported-by: kernel test robot <lkp@xxxxxxxxx>
| Closes: https://lore.kernel.org/oe-kbuild-all/202505140608.WAS0ac0x-lkp@xxxxxxxxx/

sparse warnings: (new ones prefixed by >>)
>> drivers/spi/spi-sh-msiof.c:1285:35: sparse: sparse: Using plain integer as NULL pointer

vim +1285 drivers/spi/spi-sh-msiof.c

  1279	
  1280	static void sh_msiof_test(struct sh_msiof_spi_priv *p)
  1281	{
  1282		unsigned int bitlen, wdlen1, wdlen2, words, tx_fifo_size, rx_fifo_size;
  1283		u32 tmdr2, tmdr3, rmdr2, rmdr3, fctr, fctr0, str, str0;
  1284		struct device *dev = &p->pdev->dev;
> 1285		struct spi_transfer t = { 0, };
  1286		void *dummy_tx = (void *)1;
  1287		void *dummy_rx = (void *)1;
  1288		static char buf[160];
  1289		unsigned int i, j;
  1290		u32 x, y;
  1291		int ret;
  1292	
  1293		sh_msiof_test_reset();
  1294	
  1295		pm_runtime_get_sync(dev);
  1296	
  1297		pr_info("--- Initial BITLEN / WDLEN / FUA values ---\n");
  1298		// BITLEN = 16
  1299		// WDLEN = 1
  1300		// TFUA = TX FIFO size (i.e. 256 on R-Car V4H/V4M, 64 everywhere else?)
  1301		// RFUA = 0
  1302	
  1303		fctr = sh_msiof_read(p, SIFCTR);
  1304		tmdr2 = sh_msiof_read(p, SITMDR2);
  1305		tmdr3 = sh_msiof_read(p, SITMDR3);
  1306		pr_info("TX: BITLEN1 %lu WDLEN1 %lu BITLEN2 %lu WDLEN2 %lu FUA %lu\n",
  1307			FIELD_GET(SIMDR2_BITLEN1, tmdr2) + 1,
  1308			FIELD_GET(SIMDR2_WDLEN1, tmdr2) + 1,
  1309			FIELD_GET(SIMDR3_BITLEN2, tmdr3) + 1,
  1310			FIELD_GET(SIMDR3_WDLEN2, tmdr3) + 1,
  1311			FIELD_GET(SIFCTR_TFUA, fctr));
  1312		rmdr2 = sh_msiof_read(p, SITMDR2);
  1313		rmdr3 = sh_msiof_read(p, SITMDR3);
  1314		pr_info("RX: BITLEN1 %lu WDLEN1 %lu BITLEN2 %lu WDLEN2 %lu FUA %lu\n",
  1315			FIELD_GET(SIMDR2_BITLEN1, rmdr2) + 1,
  1316			FIELD_GET(SIMDR2_WDLEN1, rmdr2) + 1,
  1317			FIELD_GET(SIMDR3_BITLEN2, rmdr3) + 1,
  1318			FIELD_GET(SIMDR3_WDLEN2, rmdr3) + 1,
  1319			FIELD_GET(SIFCTR_RFUA, fctr));
  1320	
  1321		tx_fifo_size = FIELD_GET(SIFCTR_TFUA, fctr);
  1322	
  1323		pr_info("--- WDLEN valid values test ---\n");
  1324		// => Everything sticks, no conclusion
  1325	
  1326		for (wdlen1 = 1; wdlen1 <= 256; wdlen1 *= 2) {
  1327			static const struct {
  1328				unsigned int offset;
  1329				const char *name;
  1330			} sixmdrx[] = {
  1331				{ SITMDR2, "SITMDR2" },
  1332				{ SITMDR3, "SITMDR3" },
  1333				{ SIRMDR2, "SIRMDR2" },
  1334				{ SIRMDR3, "SIRMDR3" },
  1335			};
  1336	
  1337			pr_info("WDLEN %u\n", wdlen1);
  1338	
  1339			for (i = 0; i < ARRAY_SIZE(sixmdrx); i++) {
  1340				x = sh_msiof_read(p, sixmdrx[i].offset);
  1341				x &= ~SIMDR2_WDLEN1;
  1342				x |= FIELD_PREP(SIMDR2_WDLEN1, wdlen1 - 1);
  1343				sh_msiof_write(p, sixmdrx[i].offset, x);
  1344	
  1345				y = sh_msiof_read(p, sixmdrx[i].offset);
  1346				if (x != y)
  1347					pr_info("%s: expected 0x%08x got 0x%08x\n",
  1348						sixmdrx[i].name, x, y);
  1349			}
  1350		}
  1351	
  1352		pr_info("--- Setup ---\n");
  1353	
  1354		sh_msiof_spi_reset_regs(p);
  1355	
  1356		sh_msiof_spi_set_pin_regs(p, /* ss */ 0, /* cpol */ false,
  1357					  /* cpha */ false, /* tx_hi_z */ false,
  1358					  /* lsb_first */ false, /* cs_high */ false);
  1359	
  1360		t.speed_hz = 100000;
  1361		sh_msiof_spi_set_clk_regs(p, &t);
  1362	
  1363		sh_msiof_write(p, SIFCTR, 0);
  1364	
  1365		bitlen = FIELD_MAX(SIMDR2_BITLEN1) + 1;
  1366		wdlen1 = FIELD_MAX(SIMDR2_WDLEN1) + 1;
  1367		wdlen2 = 0;
  1368		words = FIELD_MAX(SIMDR2_WDLEN1) + 1;
  1369		pr_info("Using word size %u and counts %u+%u to transfer %u words\n",
  1370			bitlen, wdlen1, wdlen2, words);
  1371		sh_msiof_spi_set_mode_regs(p, dummy_tx, dummy_rx, bitlen, wdlen1,
  1372					   wdlen2);
  1373	
  1374		pr_info("--- Fill TX FIFO ---\n");
  1375	
  1376		fctr0 = sh_msiof_read(p, SIFCTR);
  1377	
  1378		for (i = 0; i < 1024; i++) {
  1379			x = sh_msiof_write_word(p);
  1380	
  1381			for (j = 0; j < 10000; j++) {
  1382				fctr = sh_msiof_read(p, SIFCTR);
  1383				if (fctr != fctr0)
  1384					break;
  1385				udelay(1);
  1386			}
  1387	
  1388			pr_info("Wrote word %u (0x%08x): TFUA %lu RFUA %lu\n",
  1389				words_written, x, FIELD_GET(SIFCTR_TFUA, fctr),
  1390				FIELD_GET(SIFCTR_RFUA, fctr));
  1391	
  1392			if (fctr == fctr0) {
  1393				pr_info("No change in FCTR, aborting\n");
  1394				break;
  1395			}
  1396	
  1397			if (FIELD_GET(SIFCTR_TFUA, fctr) == 0) {
  1398				pr_info("TX FIFO full\n");
  1399				break;
  1400			}
  1401	
  1402			fctr0 = fctr;
  1403		}
  1404	
  1405		if (words_written != tx_fifo_size)
  1406			pr_err("Wrote %u words != TX fifo size %u\n", words_written,
  1407			       tx_fifo_size);
  1408	
  1409		pr_info("--- Start transmission ---\n");
  1410	
  1411		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TSCKE);
  1412		pr_info("TSCKE enable: %pe\n", ERR_PTR(ret));
  1413	
  1414		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_RXE);
  1415		pr_info("RXE enable: %pe\n", ERR_PTR(ret));
  1416	
  1417		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TXE);
  1418		pr_info("TXE enable: %pe\n", ERR_PTR(ret));
  1419	
  1420		str0 = sh_msiof_read(p, SISTR);
  1421		pr_info("STR 0x%x%s\n", str0, str_name(buf, str0));
  1422	
  1423		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TFSE);
  1424		pr_info("TFSE enable: %pe\n", ERR_PTR(ret));
  1425	
  1426		pr_info("--- Wait for full RX FIFO, refill TX FIFO ---\n");
  1427	
  1428		for (i = 0; i < 1024; i++) {
  1429			for (j = 0; j < 10000; j++) {
  1430				fctr = sh_msiof_read(p, SIFCTR);
  1431				str = sh_msiof_read(p, SISTR);
  1432				if (fctr != fctr0 || str != str0)
  1433					break;
  1434				udelay(1);
  1435			}
  1436	
  1437			pr_info("TFUA %lu RFUA %lu STR 0x%x%s\n",
  1438				FIELD_GET(SIFCTR_TFUA, fctr),
  1439				FIELD_GET(SIFCTR_RFUA, fctr), str,
  1440				str_name(buf, str));
  1441	
  1442			if (fctr == fctr0 && str == str0) {
  1443				pr_info("No change in FCTR/STR, aborting\n");
  1444				break;
  1445			}
  1446	
  1447			if (str & SISTR_RFFUL) {
  1448				pr_info("RX FIFO full\n");
  1449				break;
  1450			}
  1451	
  1452			if (words_written < words && FIELD_GET(SIFCTR_TFUA, fctr)) {
  1453				for (j = 0; words_written < words &&
  1454					    FIELD_GET(SIFCTR_TFUA, fctr); j++) {
  1455					x = sh_msiof_write_word(p);
  1456					fctr = sh_msiof_read(p, SIFCTR);
  1457				}
  1458				pr_info("Wrote words %u-%u\n", words_written - j + 1,
  1459					words_written);
  1460			}
  1461	
  1462			fctr0 = fctr;
  1463			str0 = str;
  1464		}
  1465	
  1466		rx_fifo_size = FIELD_GET(SIFCTR_RFUA, fctr);
  1467	
  1468		pr_info("--- Empty RX FIFO ---\n");
  1469	
  1470		for (i = 0; i < 1024; i++) {
  1471			if (FIELD_GET(SIFCTR_RFUA, fctr) == 0) {
  1472				pr_info("RX FIFO empty\n");
  1473				break;
  1474			}
  1475	
  1476			x = sh_msiof_read_word(p);
  1477	
  1478			fctr = sh_msiof_read(p, SIFCTR);
  1479			str = sh_msiof_read(p, SISTR);
  1480			pr_info("Read word %u (0x%02x): TFUA %lu RFUA %lu STR 0x%x%s\n",
  1481				words_read, x, FIELD_GET(SIFCTR_TFUA, fctr),
  1482				FIELD_GET(SIFCTR_RFUA, fctr), str, str_name(buf, str));
  1483		}
  1484	
  1485		if (words_read != rx_fifo_size)
  1486			pr_err("Read %u words != RX fifo size %u\n", words_read,
  1487			       rx_fifo_size);
  1488	
  1489		pr_info("--- Shutdown ---\n");
  1490	
  1491		ret = sh_msiof_modify_ctr_wait(p, SICTR_TFSE, 0);
  1492		pr_info("TFSE disable: %pe\n", ERR_PTR(ret));
  1493	
  1494		ret = sh_msiof_modify_ctr_wait(p, SICTR_RXE, 0);
  1495		pr_info("RXE disable: %pe\n", ERR_PTR(ret));
  1496	
  1497		ret = sh_msiof_modify_ctr_wait(p, SICTR_TXE, 0);
  1498		pr_info("TXE disable: %pe\n", ERR_PTR(ret));
  1499	
  1500		ret = sh_msiof_modify_ctr_wait(p, 0, SICTR_TSCKE);
  1501		pr_info("TSCKE disable: %pe\n", ERR_PTR(ret));
  1502	
  1503		pr_info("--- Test summary ---\n");
  1504	
  1505		pr_info("FIFO can hold %u TX words and %u RX words\n", tx_fifo_size,
  1506			rx_fifo_size);
  1507		if (loopback)
  1508			pr_info("Wrote %u words, read %u words, %u mismatches\n",
  1509				words_written, words_read, mismatches);
  1510		else
  1511			pr_info("Wrote %u words, read %u words (no loopback)\n",
  1512				words_written, words_read);
  1513	
  1514		pr_info("--- Done ---\n");
  1515	
  1516		pm_runtime_put(dev);
  1517	}
  1518	

-- 
0-DAY CI Kernel Test Service
https://github.com/intel/lkp-tests/wiki




[Index of Archives]     [Linux Samsung SOC]     [Linux Wireless]     [Linux Kernel]     [ATH6KL]     [Linux Bluetooth]     [Linux Netdev]     [Kernel Newbies]     [IDE]     [Security]     [Git]     [Netfilter]     [Bugtraq]     [Yosemite News]     [MIPS Linux]     [ARM Linux]     [Linux Security]     [Linux RAID]     [Linux ATA RAID]     [Samba]     [Device Mapper]

  Powered by Linux