Re: [PATCH v2 1/2] cdrom: gdrom: replace port I/O with MMIO accessors
Artur Rojek <[email protected]>
| Newsgroups | gmane.linux.ports.sh.devel,gmane.linux.kernel |
|---|---|
| Message-ID | <[email protected]> |
On 2026-04-19 18:28, Florian Fuchs wrote: > GDROM_DATA_REG is a memory-mapped data register, but the driver uses > outsw() and insw() only for this register. Replace this with MMIO > accessors readsw() / writesw(). > > Before, it oopsed accessing the data register, as the io_port_base > P2SEG gets added to the argument in outsw() / insw(), which leads to an > unusable drive: > > BUG: unable to handle kernel paging request at 405f7080 > PC: [<8c28d5b4>] gdrom_spicommand+0x6c/0xb0 > > Signed-off-by: Florian Fuchs <[email protected]> Acked-by: Artur Rojek <[email protected]> > --- > v1->v2: Don't use helper functions with io.*_rep(), but writesw() and > readsw() local in the respective functions > > v1: > https://lore.kernel.org/linux-sh/[email protected]/ > --- > drivers/cdrom/gdrom.c | 8 ++++---- > 1 file changed, 4 insertions(+), 4 deletions(-) > > diff --git a/drivers/cdrom/gdrom.c b/drivers/cdrom/gdrom.c > index 4ba4dd06cbf4..89938d9b2825 100644 > --- a/drivers/cdrom/gdrom.c > +++ b/drivers/cdrom/gdrom.c > @@ -198,7 +198,7 @@ static void gdrom_spicommand(void *spi_string, int > buflen) > gdrom_getsense(NULL); > return; > } > - outsw(GDROM_DATA_REG, cmd, 6); > + writesw((void __iomem *)GDROM_DATA_REG, cmd, 6); > } > > > @@ -282,7 +282,7 @@ static int gdrom_readtoc_cmd(struct gdromtoc *toc, > int session) > err = -EINVAL; > goto cleanup_readtoc; > } > - insw(GDROM_DATA_REG, toc, tocsize/2); > + readsw((void __iomem *)GDROM_DATA_REG, toc, tocsize / 2); > if (gd.status & 0x01) > err = -EINVAL; > > @@ -433,7 +433,7 @@ static int gdrom_getsense(short *bufstring) > GDROM_DEFAULT_TIMEOUT); > if (gd.pending) > goto cleanup_sense; > - insw(GDROM_DATA_REG, &sense, sense_command->buflen/2); > + readsw((void __iomem *)GDROM_DATA_REG, &sense, sense_command->buflen > / 2); > if (sense[1] & 40) { > pr_info("Drive not ready - command aborted\n"); > goto cleanup_sense; > @@ -612,7 +612,7 @@ static blk_status_t gdrom_readdisk_dma(struct > request *req) > cpu_relax(); > gd.pending = 1; > gd.transfer = 1; > - outsw(GDROM_DATA_REG, &read_command->cmd, 6); > + writesw((void __iomem *)GDROM_DATA_REG, read_command->cmd, 6); > timeout = jiffies + HZ / 2; > /* Wait for any pending DMA to finish */ > while (__raw_readb(GDROM_DMA_STATUS_REG) &&