On Tue, 23 Apr 2024 18:58:19 +0300 Andy Shevchenko <andy@xxxxxxxxxx> wrote: > On Thu, Apr 18, 2024 at 02:11:12PM +0200, Marek Behún wrote: > > Add support for true random number generator provided by the MCU. > > New Omnia boards come without the Atmel SHA204-A chip. Instead the > > crypto functionality is provided by new microcontroller, which has > > a TRNG peripheral. > > ... > > > +int omnia_mcu_register_trng(struct omnia_mcu *mcu) > > +{ > > + struct device *dev = &mcu->client->dev; > > + int irq, err; > > + u8 irq_idx; > > + > > + if (!(mcu->features & FEAT_TRNG)) > > + return 0; > > > + irq_idx = omnia_int_to_gpio_idx[__bf_shf(INT_TRNG)]; > > + irq = devm_irq_create_mapping(dev, mcu->gc.irq.domain, irq_idx); > > + if (irq < 0) > > + return dev_err_probe(dev, irq, "Cannot map TRNG IRQ\n"); > > This looks like some workaround against existing gpiod_to_irq(). Why do you > need this? Hmmm, I thought that would not work because that line is only valid as an IRQ, not as a GPIO (this is enforced via the valid_mask member of gpio_chip and gpio_irq_chip). But looking at the code of gpiolib, if I do irq = gpiod_to_irq(gpiochip_get_desc(gc, irq_idx)); the valid_mask is not enforced anywhere. Is this semantically right to do even in spite of the fact that the line is not a valid GPIO line? Marek