All of lore.kernel.org
 help / color / mirror / Atom feed
* [litex-hub:litex-rebase 15/15] drivers/block/litesata.c:129:25: sparse: sparse: incorrect type in argument 1 (different base types)
@ 2025-02-05 12:20 kernel test robot
  0 siblings, 0 replies; only message in thread
From: kernel test robot @ 2025-02-05 12:20 UTC (permalink / raw)
  To: Gabriel Somlo; +Cc: oe-kbuild-all

tree:   https://github.com/litex-hub/linux litex-rebase
head:   a1cd33eb9593685b8b0716cbecf1a817b6410ca2
commit: e6c6fef5f6b404cbbbabf0039fbb30acd3b49517 [15/15] LiteX: LiteSATA block driver
config: arm-randconfig-r113-20250205 (https://download.01.org/0day-ci/archive/20250205/202502052018.oLKo0Dcd-lkp@intel.com/config)
compiler: arm-linux-gnueabi-gcc (GCC) 14.2.0
reproduce: (https://download.01.org/0day-ci/archive/20250205/202502052018.oLKo0Dcd-lkp@intel.com/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@intel.com>
| Closes: https://lore.kernel.org/oe-kbuild-all/202502052018.oLKo0Dcd-lkp@intel.com/

sparse warnings: (new ones prefixed by >>)
>> drivers/block/litesata.c:129:25: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected restricted blk_opf_t [usertype] op @@     got unsigned int op @@
   drivers/block/litesata.c:129:25: sparse:     expected restricted blk_opf_t [usertype] op
   drivers/block/litesata.c:129:25: sparse:     got unsigned int op
>> drivers/block/litesata.c:156:33: sparse: sparse: incorrect type in initializer (different base types) @@     expected unsigned int op @@     got restricted blk_opf_t enum req_op @@
   drivers/block/litesata.c:156:33: sparse:     expected unsigned int op
   drivers/block/litesata.c:156:33: sparse:     got restricted blk_opf_t enum req_op
   drivers/block/litesata.c:170:25: sparse: sparse: incorrect type in argument 1 (different base types) @@     expected restricted blk_opf_t [usertype] op @@     got unsigned int op @@
   drivers/block/litesata.c:170:25: sparse:     expected restricted blk_opf_t [usertype] op
   drivers/block/litesata.c:170:25: sparse:     got unsigned int op
>> drivers/block/litesata.c:236:15: sparse: sparse: incorrect type in argument 3 (different address spaces) @@     expected void *data @@     got void [noderef] __iomem *lsirq @@
   drivers/block/litesata.c:236:15: sparse:     expected void *data
   drivers/block/litesata.c:236:15: sparse:     got void [noderef] __iomem *lsirq

vim +129 drivers/block/litesata.c

   117	
   118	/* Process a single bvec of a bio. */
   119	static int litesata_do_bvec(struct litesata_dev *lbd, struct bio_vec *bv,
   120				    unsigned int op, sector_t sector)
   121	{
   122		struct device *dev = lbd->dev;
   123		dma_addr_t dma;
   124		void __iomem *regs;
   125		int err;
   126		enum dma_data_direction dir;
   127		unsigned int count;
   128	
 > 129		if (op_is_write(op)) {
   130			dir = DMA_TO_DEVICE;
   131			regs = lbd->lswriter;
   132		} else {
   133			dir = DMA_FROM_DEVICE;
   134			regs = lbd->lsreader;
   135		}
   136	
   137		dma = dma_map_bvec(dev, bv, dir, 0);
   138		err = dma_mapping_error(dev, dma);
   139		if (err)
   140			return err;
   141	
   142		count = bv->bv_len >> SECTOR_SHIFT;
   143		mutex_lock(&lbd->lock);
   144		err = litesata_do_dma(lbd, regs, dma, sector, count);
   145		mutex_unlock(&lbd->lock);
   146		if (err)
   147			return err;
   148	
   149		dma_unmap_page(dev, dma, bv->bv_len, dir);
   150		return 0;
   151	}
   152	
   153	static void litesata_submit_bio(struct bio *bio)
   154	{
   155		struct litesata_dev *lbd = bio->bi_bdev->bd_disk->private_data;
 > 156		unsigned int op = bio_op(bio);
   157		sector_t sector = bio->bi_iter.bi_sector;
   158		struct bio_vec bvec;
   159		struct bvec_iter iter;
   160	
   161		bio_for_each_segment(bvec, bio, iter) {
   162			int err;
   163	
   164			/* Don't support un-aligned buffer */
   165			WARN_ON_ONCE((bvec.bv_offset & (SECTOR_SIZE - 1)) ||
   166					(bvec.bv_len & (SECTOR_SIZE - 1)));
   167	
   168			err = litesata_do_bvec(lbd, &bvec, op, sector);
   169			if (err) {
   170				dev_err(lbd->dev, "error %s sectors %Ld..%Ld\n",
   171					op_is_write(op) ? "writing" : "reading",
   172					sector, sector + (bvec.bv_len >> SECTOR_SHIFT));
   173				bio_io_error(bio);
   174				return;
   175			}
   176			sector += (bvec.bv_len >> SECTOR_SHIFT);
   177		}
   178	
   179		bio_endio(bio);
   180	}
   181	
   182	static const struct block_device_operations litesata_fops = {
   183		.owner		= THIS_MODULE,
   184		.submit_bio	= litesata_submit_bio,
   185	};
   186	
   187	static irqreturn_t litesata_interrupt(int irq, void *arg)
   188	{
   189		struct litesata_dev *lbd = arg;
   190		u32 pend;
   191	
   192		/* should be either LSIRQ_RD or LSIRQ_WR (but never *both*)! */
   193		pend = litex_read32(lbd->lsirq + LITESATA_IRQ_PEND);
   194	
   195		/* acknowledge interrupt */
   196		litex_write32(lbd->lsirq + LITESATA_IRQ_PEND, pend);
   197	
   198		/* signal DMA xfer completion */
   199		complete(&lbd->dma_done);
   200	
   201		return IRQ_HANDLED;
   202	}
   203	
   204	static void litesata_devm_irq_off(void *lsirq)
   205	{
   206		litex_write32((void __iomem *)lsirq + LITESATA_IRQ_ENA, 0);
   207	}
   208	
   209	static int litesata_irq_init(struct platform_device *pdev,
   210				     struct litesata_dev *lbd)
   211	{
   212		struct device *dev = &pdev->dev;
   213		int ret;
   214	
   215		ret = platform_get_irq_optional(pdev, 0);
   216		if (ret < 0 && ret != -ENXIO)
   217			return ret;
   218		if (ret > 0)
   219			lbd->irq = ret;
   220		else {
   221			dev_warn(dev, "Failed to get IRQ, using polling\n");
   222			goto use_polling;
   223		}
   224	
   225		lbd->lsirq = devm_platform_ioremap_resource_byname(pdev, "irq");
   226		if (IS_ERR(lbd->lsirq))
   227			return PTR_ERR(lbd->lsirq);
   228	
   229		ret = devm_request_irq(dev, lbd->irq, litesata_interrupt, 0,
   230				       "litesata", lbd);
   231		if (ret < 0) {
   232			dev_warn(dev, "IRQ request error %d, using polling\n", ret);
   233			goto use_polling;
   234		}
   235	
 > 236		ret = devm_add_action_or_reset(dev, litesata_devm_irq_off, lbd->lsirq);
   237		if (ret)
   238			return dev_err_probe(dev, ret,
   239					     "Can't register irq_off action\n");
   240	
   241		/* Clear & enable DMA-completion interrupts */
   242		litex_write32(lbd->lsirq + LITESATA_IRQ_PEND, LSIRQ_RD | LSIRQ_WR);
   243		litex_write32(lbd->lsirq + LITESATA_IRQ_ENA, LSIRQ_RD | LSIRQ_WR);
   244	
   245		init_completion(&lbd->dma_done);
   246	
   247		return 0;
   248	
   249	use_polling:
   250		lbd->irq = 0;
   251		return 0;
   252	}
   253	

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

^ permalink raw reply	[flat|nested] only message in thread

only message in thread, other threads:[~2025-02-05 12:20 UTC | newest]

Thread overview: (only message) (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2025-02-05 12:20 [litex-hub:litex-rebase 15/15] drivers/block/litesata.c:129:25: sparse: sparse: incorrect type in argument 1 (different base types) kernel test robot

This is an external index of several public inboxes,
see mirroring instructions on how to clone and mirror
all data and code used by this external index.