* [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.