On Fri, 2022-04-29 at 16:33 +0200, Ahmad Fatoum wrote: > Hello Niklas, > > On 29.04.22 16:23, Niklas Schnelle wrote: > > > Hello Niklas, > > > > > > On 29.04.22 15:50, Niklas Schnelle wrote: > > > > In a future patch HAS_IOPORT=n will result in inb()/outb() and friends > > > > not being declared. We thus need to add this dependency and ifdef > > > > sections of code using inb()/outb() as alternative access methods. > > > > > > > > Co-developed-by: Arnd Bergmann <arnd@xxxxxxxxxx> > > > > Signed-off-by: Niklas Schnelle <schnelle@xxxxxxxxxxxxx> > > > > > > [snip] > > > > > > > diff --git a/drivers/char/tpm/tpm_infineon.c b/drivers/char/tpm/tpm_infineon.c > > > > index 9c924a1440a9..2d2ae37153ba 100644 > > > > --- a/drivers/char/tpm/tpm_infineon.c > > > > +++ b/drivers/char/tpm/tpm_infineon.c > > > > @@ -51,34 +51,40 @@ static struct tpm_inf_dev tpm_dev; > > > > > > > > static inline void tpm_data_out(unsigned char data, unsigned char offset) > > > > { > > > > +#ifdef CONFIG_HAS_IOPORT > > > > if (tpm_dev.iotype == TPM_INF_IO_PORT) > > > > outb(data, tpm_dev.data_regs + offset); > > > > else > > > > +#endif > > > > > > This looks ugly. Can't you declare inb/outb anyway and skip the definition, > > > so you can use IS_ENABLED() here instead? > > > > > > You can mark the declarations with __compiletime_error("some message"), so > > > if an IS_ENABLED() reference is not removed at compile time, you get some > > > readable error message instead of a link error. > > > > > > Cheers, > > > Ahmad > > > > I didn't know about __compiletime_error() that certainly sounds > > interesting even when using a normal #ifdef. > > > > That said either with the function not being declared or this > > __compiletime_error() mechanism I would think that using IS_ENABLED() > > relies on compiler optimizations not to compile in the missing/error > > function call, right? I'm not sure if that is something we should do. > > Yes, it assumes your compiler is able to discard the body of an if (0), > which we already assume, otherwise it wouldn't make sense for any existing > code to use __compiletime_error(). > > To me this sounds much cleaner than #ifdefs in the midst of functions, > which are a detriment to maintainability. > > Cheers, > Ahmad > Ok, makes sense. I'll look into using __compiletime_error() and IS_ENABLED().