Hi Arnd, On Wed, Oct 16, 2024 at 11:15:18AM +0000, Arnd Bergmann wrote: > From: Arnd Bergmann <arnd@xxxxxxxx> > > A few of the helper modules contain functions for both IORESOURCE_MEM > and IORESOURCE_IO type access, with the latter not being supported > on all architectures but also not used by all the drivers. > > Add #ifdef checks around these to allow building the library code > and use it on MMIO-only configurations. > > Signed-off-by: Arnd Bergmann <arnd@xxxxxxxx> > --- > drivers/staging/gpib/common/gpib_os.c | 2 ++ > drivers/staging/gpib/nec7210/nec7210.c | 38 ++++++++++++++------------ > drivers/staging/gpib/tms9914/tms9914.c | 2 ++ > 3 files changed, 24 insertions(+), 18 deletions(-) > > diff --git a/drivers/staging/gpib/common/gpib_os.c b/drivers/staging/gpib/common/gpib_os.c > index e9dd7b2d1569..e93a45132a40 100644 > --- a/drivers/staging/gpib/common/gpib_os.c > +++ b/drivers/staging/gpib/common/gpib_os.c > @@ -140,6 +140,7 @@ unsigned int readw_wrapper(void *address) > }; > EXPORT_SYMBOL(readw_wrapper); > > +#ifdef CONFIG_HAS_IOPORT > void outb_wrapper(unsigned int value, void *address) > { > outb(value, (unsigned long)(address)); > @@ -163,6 +164,7 @@ unsigned int inw_wrapper(void *address) > return inw((unsigned long)(address)); > }; > EXPORT_SYMBOL(inw_wrapper); > +#endif > > /* this is a function instead of a constant because of Suse > * defining HZ to be a function call to get_hz() > diff --git a/drivers/staging/gpib/nec7210/nec7210.c b/drivers/staging/gpib/nec7210/nec7210.c > index 632322799ed2..1330743d05fd 100644 > --- a/drivers/staging/gpib/nec7210/nec7210.c > +++ b/drivers/staging/gpib/nec7210/nec7210.c > @@ -1031,6 +1031,7 @@ void nec7210_board_online(struct nec7210_priv *priv, const gpib_board_t *board) > } > EXPORT_SYMBOL(nec7210_board_online); > > +#ifdef CONFIG_HAS_IOPORT > /* wrappers for io */ > uint8_t nec7210_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num) > { > @@ -1050,24 +1051,6 @@ void nec7210_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned > } > EXPORT_SYMBOL(nec7210_ioport_write_byte); > > -uint8_t nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num) > -{ > - return readb(priv->iobase + register_num * priv->offset); > -} > -EXPORT_SYMBOL(nec7210_iomem_read_byte); > - > -void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num) > -{ > - if (register_num == AUXMR) > - /* locking makes absolutely sure noone accesses the > - * AUXMR register faster than once per microsecond > - */ > - nec7210_locking_iomem_write_byte(priv, data, register_num); > - else > - writeb(data, priv->iobase + register_num * priv->offset); > -} > -EXPORT_SYMBOL(nec7210_iomem_write_byte); > - > /* locking variants of io wrappers, for chips that page-in registers */ > uint8_t nec7210_locking_ioport_read_byte(struct nec7210_priv *priv, unsigned int register_num) > { > @@ -1093,6 +1076,25 @@ void nec7210_locking_ioport_write_byte(struct nec7210_priv *priv, uint8_t data, > spin_unlock_irqrestore(&priv->register_page_lock, flags); > } > EXPORT_SYMBOL(nec7210_locking_ioport_write_byte); > +#endif > + > +uint8_t nec7210_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num) > +{ > + return readb(priv->iobase + register_num * priv->offset); > +} > +EXPORT_SYMBOL(nec7210_iomem_read_byte); > + > +void nec7210_iomem_write_byte(struct nec7210_priv *priv, uint8_t data, unsigned int register_num) > +{ > + if (register_num == AUXMR) > + /* locking makes absolutely sure noone accesses the > + * AUXMR register faster than once per microsecond > + */ > + nec7210_locking_iomem_write_byte(priv, data, register_num); > + else > + writeb(data, priv->iobase + register_num * priv->offset); > +} > +EXPORT_SYMBOL(nec7210_iomem_write_byte); > > uint8_t nec7210_locking_iomem_read_byte(struct nec7210_priv *priv, unsigned int register_num) > { > diff --git a/drivers/staging/gpib/tms9914/tms9914.c b/drivers/staging/gpib/tms9914/tms9914.c > index a85a796de024..b4a8ab55c5ec 100644 > --- a/drivers/staging/gpib/tms9914/tms9914.c > +++ b/drivers/staging/gpib/tms9914/tms9914.c > @@ -862,6 +862,7 @@ void tms9914_online(gpib_board_t *board, struct tms9914_priv *priv) > } > EXPORT_SYMBOL_GPL(tms9914_online); > > +#ifdef CONFIG_HAS_IOPORT > // wrapper for inb > uint8_t tms9914_ioport_read_byte(struct tms9914_priv *priv, unsigned int register_num) > { > @@ -877,6 +878,7 @@ void tms9914_ioport_write_byte(struct tms9914_priv *priv, uint8_t data, unsigned > udelay(1); > } > EXPORT_SYMBOL_GPL(tms9914_ioport_write_byte); > +#endif > > // wrapper for readb > uint8_t tms9914_iomem_read_byte(struct tms9914_priv *priv, unsigned int register_num) > -- > 2.39.5 > Now that this change is in -next, I think it might be incorrect or incomplete, as hexagon and s390 allmodconfig error with ERROR: modpost: "inb_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined! ERROR: modpost: "inw_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined! ERROR: modpost: "nec7210_locking_ioport_write_byte" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined! ERROR: modpost: "nec7210_locking_ioport_read_byte" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined! ERROR: modpost: "outb_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined! ERROR: modpost: "outw_wrapper" [drivers/staging/gpib/tnt4882/tnt4882.ko] undefined! and it is not immediately obvious to me what the fix is. Cheers, Nathan