From: Janusz Krzysztofik <jmkrzyszt@gmail.com> To: Boris Brezillon <boris.brezillon@bootlin.com>, Miquel Raynal <miquel.raynal@bootlin.com> Cc: Tony Lindgren <tony@atomide.com>, Aaro Koskinen <aaro.koskinen@iki.fi>, Grygorii Strashko <grygorii.strashko@ti.com>, Santosh Shilimkar <ssantosh@kernel.org>, Kevin Hilman <khilman@kernel.org>, Linus Walleij <linus.walleij@linaro.org>, Richard Weinberger <richard@nod.at>, David Woodhouse <dwmw2@infradead.org>, Brian Norris <computersforpeace@gmail.com>, Marek Vasut <marek.vasut@gmail.com>, linux-mtd@lists.infradead.org, linux-arm-kernel@lists.infradead.org, linux-omap@vger.kernel.org, linux-gpio@vger.kernel.org, linux-kernel@vger.kernel.org, Artem Bityutskiy <artem.bityutskiy@linux.intel.com>, Janusz Krzysztofik <jmkrzyszt@gmail.com> Subject: [RFC PATCH 6/8] gpio: omap: Add get/set_multiple() callbacks Date: Thu, 19 Jul 2018 01:57:08 +0200 [thread overview] Message-ID: <20180718235710.18242-7-jmkrzyszt@gmail.com> (raw) In-Reply-To: <20180718235710.18242-1-jmkrzyszt@gmail.com> This should make applications utilizing whole banks work faster. Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com> --- drivers/gpio/gpio-omap.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index d1afedf4dcbf..e81008678a38 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -77,6 +77,8 @@ struct gpio_bank { bool workaround_enabled; void (*set_dataout)(struct gpio_bank *bank, unsigned gpio, int enable); + void (*set_dataout_multiple)(struct gpio_bank *bank, + unsigned long *mask, unsigned long *bits); int (*get_context_loss_count)(struct device *dev); struct omap_gpio_reg_offs *regs; @@ -161,6 +163,51 @@ static int omap_get_gpio_dataout(struct gpio_bank *bank, int offset) return (readl_relaxed(reg) & (BIT(offset))) != 0; } +/* set multiple data out values using dedicate set/clear register */ +static void omap_set_gpio_dataout_reg_multiple(struct gpio_bank *bank, + unsigned long *mask, + unsigned long *bits) +{ + void __iomem *reg = bank->base; + u32 l; + + l = *bits & *mask; + writel_relaxed(l, reg + bank->regs->set_dataout); + bank->context.dataout |= l; + + l = ~*bits & *mask; + writel_relaxed(l, reg + bank->regs->clr_dataout); + bank->context.dataout &= ~l; +} + +/* set multiple data out values using mask register */ +static void omap_set_gpio_dataout_mask_multiple(struct gpio_bank *bank, + unsigned long *mask, + unsigned long *bits) +{ + void __iomem *reg = bank->base + bank->regs->dataout; + u32 l = (readl_relaxed(reg) & ~*mask) | (*bits & *mask); + + writel_relaxed(l, reg); + bank->context.dataout = l; +} + +static unsigned long omap_get_gpio_datain_multiple(struct gpio_bank *bank, + unsigned long *mask) +{ + void __iomem *reg = bank->base + bank->regs->datain; + + return readl_relaxed(reg) & *mask; +} + +static unsigned long omap_get_gpio_dataout_multiple(struct gpio_bank *bank, + unsigned long *mask) +{ + void __iomem *reg = bank->base + bank->regs->dataout; + + return readl_relaxed(reg) & *mask; +} + static inline void omap_gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set) { int l = readl_relaxed(base + reg); @@ -968,6 +1015,26 @@ static int omap_gpio_output(struct gpio_chip *chip, unsigned offset, int value) return 0; } +static int omap_gpio_get_multiple(struct gpio_chip *chip, unsigned long *mask, + unsigned long *bits) +{ + struct gpio_bank *bank = gpiochip_get_data(chip); + void __iomem *reg = bank->base + bank->regs->direction; + unsigned long in = readl_relaxed(reg), l; + + *bits = 0; + + l = in & *mask; + if (l) + *bits |= omap_get_gpio_datain_multiple(bank, &l); + + l = ~in & *mask; + if (l) + *bits |= omap_get_gpio_dataout_multiple(bank, &l); + + return 0; +} + static int omap_gpio_debounce(struct gpio_chip *chip, unsigned offset, unsigned debounce) { @@ -1012,6 +1079,17 @@ static void omap_gpio_set(struct gpio_chip *chip, unsigned offset, int value) raw_spin_unlock_irqrestore(&bank->lock, flags); } +static void omap_gpio_set_multiple(struct gpio_chip *chip, unsigned long *mask, + unsigned long *bits) +{ + struct gpio_bank *bank = gpiochip_get_data(chip); + unsigned long flags; + + raw_spin_lock_irqsave(&bank->lock, flags); + bank->set_dataout_multiple(bank, mask, bits); + raw_spin_unlock_irqrestore(&bank->lock, flags); +} + /*---------------------------------------------------------------------*/ static void omap_gpio_show_rev(struct gpio_bank *bank) @@ -1073,9 +1151,11 @@ static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc) bank->chip.get_direction = omap_gpio_get_direction; bank->chip.direction_input = omap_gpio_input; bank->chip.get = omap_gpio_get; + bank->chip.get_multiple = omap_gpio_get_multiple; bank->chip.direction_output = omap_gpio_output; bank->chip.set_config = omap_gpio_set_config; bank->chip.set = omap_gpio_set; + bank->chip.set_multiple = omap_gpio_set_multiple; if (bank->is_mpuio) { bank->chip.label = "mpuio"; if (bank->regs->wkup_en) @@ -1209,10 +1289,14 @@ static int omap_gpio_probe(struct platform_device *pdev) pdata->get_context_loss_count; } - if (bank->regs->set_dataout && bank->regs->clr_dataout) + if (bank->regs->set_dataout && bank->regs->clr_dataout) { bank->set_dataout = omap_set_gpio_dataout_reg; - else + bank->set_dataout_multiple = omap_set_gpio_dataout_reg_multiple; + } else { bank->set_dataout = omap_set_gpio_dataout_mask; + bank->set_dataout_multiple = + omap_set_gpio_dataout_mask_multiple; + } raw_spin_lock_init(&bank->lock); raw_spin_lock_init(&bank->wa_lock); -- 2.16.4
WARNING: multiple messages have this Message-ID (diff)
From: jmkrzyszt@gmail.com (Janusz Krzysztofik) To: linux-arm-kernel@lists.infradead.org Subject: [RFC PATCH 6/8] gpio: omap: Add get/set_multiple() callbacks Date: Thu, 19 Jul 2018 01:57:08 +0200 [thread overview] Message-ID: <20180718235710.18242-7-jmkrzyszt@gmail.com> (raw) In-Reply-To: <20180718235710.18242-1-jmkrzyszt@gmail.com> This should make applications utilizing whole banks work faster. Signed-off-by: Janusz Krzysztofik <jmkrzyszt@gmail.com> --- drivers/gpio/gpio-omap.c | 88 ++++++++++++++++++++++++++++++++++++++++++++++-- 1 file changed, 86 insertions(+), 2 deletions(-) diff --git a/drivers/gpio/gpio-omap.c b/drivers/gpio/gpio-omap.c index d1afedf4dcbf..e81008678a38 100644 --- a/drivers/gpio/gpio-omap.c +++ b/drivers/gpio/gpio-omap.c @@ -77,6 +77,8 @@ struct gpio_bank { bool workaround_enabled; void (*set_dataout)(struct gpio_bank *bank, unsigned gpio, int enable); + void (*set_dataout_multiple)(struct gpio_bank *bank, + unsigned long *mask, unsigned long *bits); int (*get_context_loss_count)(struct device *dev); struct omap_gpio_reg_offs *regs; @@ -161,6 +163,51 @@ static int omap_get_gpio_dataout(struct gpio_bank *bank, int offset) return (readl_relaxed(reg) & (BIT(offset))) != 0; } +/* set multiple data out values using dedicate set/clear register */ +static void omap_set_gpio_dataout_reg_multiple(struct gpio_bank *bank, + unsigned long *mask, + unsigned long *bits) +{ + void __iomem *reg = bank->base; + u32 l; + + l = *bits & *mask; + writel_relaxed(l, reg + bank->regs->set_dataout); + bank->context.dataout |= l; + + l = ~*bits & *mask; + writel_relaxed(l, reg + bank->regs->clr_dataout); + bank->context.dataout &= ~l; +} + +/* set multiple data out values using mask register */ +static void omap_set_gpio_dataout_mask_multiple(struct gpio_bank *bank, + unsigned long *mask, + unsigned long *bits) +{ + void __iomem *reg = bank->base + bank->regs->dataout; + u32 l = (readl_relaxed(reg) & ~*mask) | (*bits & *mask); + + writel_relaxed(l, reg); + bank->context.dataout = l; +} + +static unsigned long omap_get_gpio_datain_multiple(struct gpio_bank *bank, + unsigned long *mask) +{ + void __iomem *reg = bank->base + bank->regs->datain; + + return readl_relaxed(reg) & *mask; +} + +static unsigned long omap_get_gpio_dataout_multiple(struct gpio_bank *bank, + unsigned long *mask) +{ + void __iomem *reg = bank->base + bank->regs->dataout; + + return readl_relaxed(reg) & *mask; +} + static inline void omap_gpio_rmw(void __iomem *base, u32 reg, u32 mask, bool set) { int l = readl_relaxed(base + reg); @@ -968,6 +1015,26 @@ static int omap_gpio_output(struct gpio_chip *chip, unsigned offset, int value) return 0; } +static int omap_gpio_get_multiple(struct gpio_chip *chip, unsigned long *mask, + unsigned long *bits) +{ + struct gpio_bank *bank = gpiochip_get_data(chip); + void __iomem *reg = bank->base + bank->regs->direction; + unsigned long in = readl_relaxed(reg), l; + + *bits = 0; + + l = in & *mask; + if (l) + *bits |= omap_get_gpio_datain_multiple(bank, &l); + + l = ~in & *mask; + if (l) + *bits |= omap_get_gpio_dataout_multiple(bank, &l); + + return 0; +} + static int omap_gpio_debounce(struct gpio_chip *chip, unsigned offset, unsigned debounce) { @@ -1012,6 +1079,17 @@ static void omap_gpio_set(struct gpio_chip *chip, unsigned offset, int value) raw_spin_unlock_irqrestore(&bank->lock, flags); } +static void omap_gpio_set_multiple(struct gpio_chip *chip, unsigned long *mask, + unsigned long *bits) +{ + struct gpio_bank *bank = gpiochip_get_data(chip); + unsigned long flags; + + raw_spin_lock_irqsave(&bank->lock, flags); + bank->set_dataout_multiple(bank, mask, bits); + raw_spin_unlock_irqrestore(&bank->lock, flags); +} + /*---------------------------------------------------------------------*/ static void omap_gpio_show_rev(struct gpio_bank *bank) @@ -1073,9 +1151,11 @@ static int omap_gpio_chip_init(struct gpio_bank *bank, struct irq_chip *irqc) bank->chip.get_direction = omap_gpio_get_direction; bank->chip.direction_input = omap_gpio_input; bank->chip.get = omap_gpio_get; + bank->chip.get_multiple = omap_gpio_get_multiple; bank->chip.direction_output = omap_gpio_output; bank->chip.set_config = omap_gpio_set_config; bank->chip.set = omap_gpio_set; + bank->chip.set_multiple = omap_gpio_set_multiple; if (bank->is_mpuio) { bank->chip.label = "mpuio"; if (bank->regs->wkup_en) @@ -1209,10 +1289,14 @@ static int omap_gpio_probe(struct platform_device *pdev) pdata->get_context_loss_count; } - if (bank->regs->set_dataout && bank->regs->clr_dataout) + if (bank->regs->set_dataout && bank->regs->clr_dataout) { bank->set_dataout = omap_set_gpio_dataout_reg; - else + bank->set_dataout_multiple = omap_set_gpio_dataout_reg_multiple; + } else { bank->set_dataout = omap_set_gpio_dataout_mask; + bank->set_dataout_multiple = + omap_set_gpio_dataout_mask_multiple; + } raw_spin_lock_init(&bank->lock); raw_spin_lock_init(&bank->wa_lock); -- 2.16.4
next prev parent reply other threads:[~2018-07-18 23:57 UTC|newest] Thread overview: 477+ messages / expand[flat|nested] mbox.gz Atom feed top 2018-07-18 23:57 [RFC PATCH 0/8] mtd: rawnand: ams-delta: Use gpio-omap accessors for data I/O Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-18 23:57 ` [RFC PATCH 1/8] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-19 6:17 ` Boris Brezillon 2018-07-19 6:17 ` Boris Brezillon 2018-07-20 17:57 ` Janusz Krzysztofik 2018-07-20 17:57 ` Janusz Krzysztofik 2018-07-18 23:57 ` [RFC PATCH 2/8] mtd: rawnand: ams-delta: Write protect device during probe Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-19 6:22 ` Boris Brezillon 2018-07-19 6:22 ` Boris Brezillon 2018-07-20 18:02 ` Janusz Krzysztofik 2018-07-20 18:02 ` Janusz Krzysztofik 2018-07-18 23:57 ` [RFC PATCH 3/8] mtd: rawnand: ams-delta: Set port direction once per transfer Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-19 6:23 ` Boris Brezillon 2018-07-19 6:23 ` Boris Brezillon 2018-07-20 18:12 ` Janusz Krzysztofik 2018-07-20 18:12 ` Janusz Krzysztofik 2018-07-20 19:29 ` Boris Brezillon 2018-07-20 19:29 ` Boris Brezillon 2018-07-18 23:57 ` [RFC PATCH 4/8] mtd: rawnand: ams-delta: Optimize pointer resolution on read/write Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-19 6:25 ` Boris Brezillon 2018-07-19 6:25 ` Boris Brezillon 2018-07-20 18:14 ` Janusz Krzysztofik 2018-07-20 18:14 ` Janusz Krzysztofik 2018-07-20 19:29 ` Boris Brezillon 2018-07-20 19:29 ` Boris Brezillon 2018-07-18 23:57 ` [RFC PATCH 5/8] mtd: rawnand: ams-delta: Request data port GPIO resource Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-19 6:28 ` Boris Brezillon 2018-07-19 6:28 ` Boris Brezillon 2018-07-18 23:57 ` Janusz Krzysztofik [this message] 2018-07-18 23:57 ` [RFC PATCH 6/8] gpio: omap: Add get/set_multiple() callbacks Janusz Krzysztofik 2018-07-29 20:29 ` Linus Walleij 2018-07-29 20:29 ` Linus Walleij 2018-08-03 1:52 ` Grygorii Strashko 2018-08-03 1:52 ` Grygorii Strashko 2018-08-03 1:52 ` Grygorii Strashko 2018-08-03 16:47 ` Linus Walleij 2018-08-03 16:47 ` Linus Walleij 2018-07-18 23:57 ` [RFC PATCH 7/8] mtd: rawnand: ams-delta: Check sanity of data GPIO resource Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-19 6:44 ` Boris Brezillon 2018-07-19 6:44 ` Boris Brezillon 2018-07-29 20:36 ` Linus Walleij 2018-07-29 20:36 ` Linus Walleij 2018-07-29 21:16 ` Boris Brezillon 2018-07-29 21:16 ` Boris Brezillon 2018-07-29 20:33 ` Linus Walleij 2018-07-29 20:33 ` Linus Walleij 2018-07-18 23:57 ` [RFC PATCH 8/8] mtd: rawnand: ams-delta: Use GPIO callbacks for data I/O Janusz Krzysztofik 2018-07-18 23:57 ` Janusz Krzysztofik 2018-07-19 6:47 ` Boris Brezillon 2018-07-19 6:47 ` Boris Brezillon 2018-07-20 18:38 ` Janusz Krzysztofik 2018-07-20 18:38 ` Janusz Krzysztofik 2018-07-20 19:48 ` Boris Brezillon 2018-07-20 19:48 ` Boris Brezillon 2018-07-19 6:15 ` [RFC PATCH 0/8] mtd: rawnand: ams-delta: Use gpio-omap accessors " Boris Brezillon 2018-07-19 6:15 ` Boris Brezillon 2018-07-20 17:55 ` Janusz Krzysztofik 2018-07-20 17:55 ` Janusz Krzysztofik 2018-07-20 19:25 ` Boris Brezillon 2018-07-20 19:25 ` Boris Brezillon 2018-10-03 12:00 ` [RFC PATCH] mtd: rawnand: ams-delta: use ->exec_op() Janusz Krzysztofik 2018-10-03 12:30 ` Boris Brezillon 2018-10-03 13:55 ` Janusz Krzysztofik 2018-10-03 14:06 ` Boris Brezillon 2018-10-04 13:52 ` Janusz Krzysztofik 2018-10-04 13:59 ` Boris Brezillon 2018-10-04 14:11 ` Janusz Krzysztofik 2018-10-04 14:22 ` Boris Brezillon 2018-10-12 20:41 ` [PATCH v2 1/2] mtd: rawnand: Provide helper for polling GPIO R/B pin Janusz Krzysztofik 2018-10-12 20:41 ` [PATCH v2 2/2] mtd: rawnand: ams-delta: Use ->exec_op() Janusz Krzysztofik 2018-10-13 6:05 ` Boris Brezillon 2018-10-13 5:55 ` [PATCH v2 1/2] mtd: rawnand: Provide helper for polling GPIO R/B pin Boris Brezillon 2018-10-15 19:41 ` [PATCH v3 1/3] " Janusz Krzysztofik 2018-10-15 19:41 ` [PATCH v3 2/3] mtd: rawnand: ams-delta: Stop using legacy .IOADDR_R/W Janusz Krzysztofik 2018-10-15 19:41 ` [PATCH v3 3/3] mtd: rawnand: ams-delta: Convert the driver to ->exec_op() Janusz Krzysztofik 2018-11-11 20:53 ` [PATCH v3 1/3] mtd: rawnand: Provide helper for polling GPIO R/B pin Miquel Raynal 2018-08-06 22:29 ` [RFC PATCH v2] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` [RFC PATCH v2 01/12] mtd: rawnand: ams-delta: Assign mtd->dev.parent, not mtd->owner Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 23:54 ` Marek Vasut 2018-08-06 23:54 ` Marek Vasut 2018-08-06 23:54 ` Marek Vasut 2018-08-07 21:55 ` Janusz Krzysztofik 2018-08-07 21:55 ` Janusz Krzysztofik 2018-08-07 21:55 ` Janusz Krzysztofik 2018-08-07 16:57 ` Boris Brezillon 2018-08-07 16:57 ` Boris Brezillon 2018-08-07 16:57 ` Boris Brezillon 2018-08-06 22:29 ` [RFC PATCH v2 02/12] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-07 16:59 ` Boris Brezillon 2018-08-07 16:59 ` Boris Brezillon 2018-08-07 16:59 ` Boris Brezillon 2018-08-06 22:29 ` [RFC PATCH v2 03/12] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-07 16:59 ` Boris Brezillon 2018-08-07 16:59 ` Boris Brezillon 2018-08-07 16:59 ` Boris Brezillon 2018-08-10 10:10 ` Linus Walleij 2018-08-10 10:10 ` Linus Walleij 2018-08-06 22:29 ` [RFC PATCH v2 04/12] mtd: rawnand: ams-delta: request data port GPIO resource Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-07 17:00 ` Boris Brezillon 2018-08-07 17:00 ` Boris Brezillon 2018-08-07 17:00 ` Boris Brezillon 2018-08-10 10:11 ` Linus Walleij 2018-08-10 10:11 ` Linus Walleij 2018-08-06 22:29 ` [RFC PATCH v2 05/12] mtd: rawnand: ams-delta: use GPIO API for data read/write Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 23:57 ` Marek Vasut 2018-08-06 23:57 ` Marek Vasut 2018-08-06 23:57 ` Marek Vasut 2018-08-07 17:06 ` Boris Brezillon 2018-08-07 17:06 ` Boris Brezillon 2018-08-07 17:06 ` Boris Brezillon 2018-08-07 17:11 ` Janusz Krzysztofik 2018-08-07 17:11 ` Janusz Krzysztofik 2018-08-07 17:11 ` Janusz Krzysztofik 2018-08-10 10:25 ` Linus Walleij 2018-08-10 10:25 ` Linus Walleij 2018-08-06 22:29 ` [RFC PATCH v2 06/12] ARM: OMAP1: ams-delta: drop obsolete NAND resources Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` [RFC PATCH v2 07/12] mtd: rawnand: ams-delta: Set port direction once per transfer Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-07 18:57 ` Boris Brezillon 2018-08-07 18:57 ` Boris Brezillon 2018-08-07 18:57 ` Boris Brezillon 2018-08-07 18:57 ` Boris Brezillon 2018-08-08 16:55 ` Janusz Krzysztofik 2018-08-08 16:55 ` Janusz Krzysztofik 2018-08-08 16:55 ` Janusz Krzysztofik 2018-08-08 17:42 ` Miquel Raynal 2018-08-08 17:42 ` Miquel Raynal 2018-08-08 17:42 ` Miquel Raynal 2018-08-06 22:29 ` [RFC PATCH v2 08/12] mtd: rawnand: ams-delta: Simplify pointer resolution on read/write Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-07 17:02 ` Boris Brezillon 2018-08-07 17:02 ` Boris Brezillon 2018-08-07 17:02 ` Boris Brezillon 2018-08-07 17:15 ` Janusz Krzysztofik 2018-08-07 17:15 ` Janusz Krzysztofik 2018-08-07 17:15 ` Janusz Krzysztofik 2018-08-06 22:29 ` [RFC PATCH v2 09/12] gpiolib: Identify GPIO descriptor arrays with direct mapping Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 23:29 ` Linus Walleij 2018-08-06 23:29 ` Linus Walleij 2018-08-06 23:29 ` Linus Walleij 2018-08-07 16:50 ` Janusz Krzysztofik 2018-08-07 16:50 ` Janusz Krzysztofik 2018-08-07 16:50 ` Janusz Krzysztofik 2018-08-07 17:10 ` Boris Brezillon 2018-08-07 17:10 ` Boris Brezillon 2018-08-07 17:10 ` Boris Brezillon 2018-08-07 17:14 ` Boris Brezillon 2018-08-07 17:14 ` Boris Brezillon 2018-08-07 17:14 ` Boris Brezillon 2018-08-07 17:19 ` Janusz Krzysztofik 2018-08-07 17:19 ` Janusz Krzysztofik 2018-08-07 17:19 ` Janusz Krzysztofik 2018-08-06 22:29 ` [RFC PATCH v2 10/12] gpiolib: Introduce bitmap get/set array API extension Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` [RFC PATCH v2 11/12] mtd: rawnand: ams-delta: Use GPIO API bitmap extension Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` [RFC PATCH v2 12/12] gpiolib: Add fast processing path to bitmap API functions Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 22:29 ` Janusz Krzysztofik 2018-08-06 23:43 ` Linus Walleij 2018-08-06 23:43 ` Linus Walleij 2018-08-06 23:43 ` Linus Walleij 2018-08-07 17:29 ` Janusz Krzysztofik 2018-08-07 17:29 ` Janusz Krzysztofik 2018-08-07 17:29 ` Janusz Krzysztofik 2018-08-07 17:47 ` Boris Brezillon 2018-08-07 17:47 ` Boris Brezillon 2018-08-07 17:47 ` Boris Brezillon 2018-08-10 10:55 ` Linus Walleij 2018-08-10 10:55 ` Linus Walleij 2018-08-13 22:34 ` [PATCH v3 0/7] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-13 22:34 ` [PATCH v3 1/7] mtd: rawnand: ams-delta: show parent device in sysfs Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-13 22:34 ` [PATCH v3 2/7] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-13 22:34 ` [PATCH v3 3/7] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-13 22:34 ` [PATCH v3 4/7] mtd: rawnand: ams-delta: request data port GPIO resource Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-13 22:34 ` [PATCH v3 5/7] mtd: rawnand: ams-delta: Set port direction when needed Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-16 7:30 ` Boris Brezillon 2018-08-16 7:30 ` Boris Brezillon 2018-08-13 22:34 ` [PATCH v3 6/7] mtd: rawnand: ams-delta: Simplify pointer resolution on read/write Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-13 22:34 ` [PATCH v3 7/7] mtd: rawnand: ams-delta: use GPIO API for data I/O Janusz Krzysztofik 2018-08-13 22:34 ` Janusz Krzysztofik 2018-08-16 7:39 ` Boris Brezillon 2018-08-16 7:39 ` Boris Brezillon 2018-08-20 21:39 ` [PATCH v4 0/3] mtd: rawnand: ams-delta: Cleanups and optimizations Janusz Krzysztofik 2018-08-20 21:39 ` [PATCH v4 1/3] mtd: rawnand: ams-delta: show parent device in sysfs Janusz Krzysztofik 2018-08-20 21:39 ` [PATCH v4 2/3] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik 2018-08-20 21:39 ` [PATCH v4 3/3] mtd: rawnand: ams-delta: Set port direction when needed Janusz Krzysztofik 2018-08-24 12:57 ` Boris Brezillon 2018-09-05 6:47 ` [PATCH v4 0/3] mtd: rawnand: ams-delta: Cleanups and optimizations Miquel Raynal 2018-09-05 20:53 ` Janusz Krzysztofik 2018-09-07 16:45 ` Tony Lindgren 2018-09-19 8:46 ` Miquel Raynal 2018-09-19 22:52 ` [PATCH v5 " Janusz Krzysztofik 2018-09-19 22:52 ` [PATCH v5 1/3] mtd: rawnand: ams-delta: show parent device in sysfs Janusz Krzysztofik 2018-09-19 22:52 ` [PATCH v5 2/3] mtd: rawnand: ams-delta: Use private structure Janusz Krzysztofik 2018-09-19 22:52 ` [PATCH v5 3/3] mtd: rawnand: ams-delta: Set port direction when needed Janusz Krzysztofik 2018-09-23 11:35 ` [PATCH v5 0/3] mtd: rawnand: ams-delta: Cleanups and optimizations Miquel Raynal 2018-08-20 23:43 ` [RFC RFT PATCH 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-20 23:43 ` [RFC RFT PATCH v4 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-21 6:49 ` Peter Rosin 2018-08-21 6:49 ` Peter Rosin 2018-08-21 6:52 ` Peter Rosin 2018-08-21 6:52 ` Peter Rosin 2018-08-29 12:03 ` Miguel Ojeda 2018-08-29 12:03 ` Miguel Ojeda 2018-08-29 12:03 ` Miguel Ojeda 2018-08-29 18:01 ` Janusz Krzysztofik 2018-08-29 18:01 ` Janusz Krzysztofik 2018-08-29 18:01 ` Janusz Krzysztofik 2018-08-20 23:43 ` [RFC RFT PATCH v4 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-20 23:43 ` [RFC RFT PATCH v4 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-20 23:43 ` [RFC RFT PATCH v4 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik 2018-08-20 23:43 ` Janusz Krzysztofik 2018-08-29 9:06 ` [RFC RFT PATCH 0/4] gpiolib: speed up GPIO array processing Linus Walleij 2018-08-29 9:06 ` Linus Walleij 2018-08-29 9:06 ` Linus Walleij 2018-08-29 18:16 ` Janusz Krzysztofik 2018-08-29 18:16 ` Janusz Krzysztofik 2018-08-29 18:16 ` Janusz Krzysztofik 2018-08-29 10:19 ` Ulf Hansson 2018-08-29 10:19 ` Ulf Hansson 2018-08-29 20:48 ` [PATH v5 " Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-29 20:48 ` [PATCH v5 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-30 4:30 ` Peter Rosin 2018-08-30 4:30 ` Peter Rosin 2018-08-30 7:40 ` Geert Uytterhoeven 2018-08-30 7:40 ` Geert Uytterhoeven 2018-08-30 7:40 ` Geert Uytterhoeven 2018-08-30 11:10 ` Miguel Ojeda 2018-08-30 11:10 ` Miguel Ojeda 2018-08-30 11:10 ` Miguel Ojeda 2018-08-30 15:35 ` David Laight 2018-08-30 15:35 ` David Laight 2018-08-30 15:35 ` David Laight 2018-09-02 10:19 ` Janusz Krzysztofik 2018-09-02 10:19 ` Janusz Krzysztofik 2018-09-02 10:19 ` Janusz Krzysztofik 2018-08-31 9:14 ` Linus Walleij 2018-08-31 9:14 ` Linus Walleij 2018-08-29 20:48 ` [PATCH v5 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-29 20:48 ` [PATCH v5 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-29 20:48 ` Janusz Krzysztofik 2018-08-29 20:49 ` [PATCH v5 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik 2018-08-29 20:49 ` Janusz Krzysztofik 2018-08-29 20:49 ` Janusz Krzysztofik 2018-08-31 22:56 ` [PATH v6 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-08-31 22:56 ` [PATCH v6 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-09-01 0:23 ` Peter Rosin 2018-09-01 0:23 ` Peter Rosin 2018-09-04 15:28 ` kbuild test robot 2018-09-04 15:28 ` kbuild test robot 2018-09-04 15:28 ` kbuild test robot 2018-09-04 15:28 ` kbuild test robot 2018-09-04 15:28 ` kbuild test robot 2018-09-04 15:28 ` kbuild test robot 2018-08-31 22:56 ` [PATCH v6 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-08-31 22:56 ` [PATCH v6 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-09-04 15:27 ` kbuild test robot 2018-09-04 15:27 ` kbuild test robot 2018-09-04 15:27 ` kbuild test robot 2018-08-31 22:56 ` [PATCH v6 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-08-31 22:56 ` Janusz Krzysztofik 2018-09-02 12:01 ` [PATCH v7 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik 2018-09-02 12:01 ` Janusz Krzysztofik 2018-09-02 12:01 ` [PATCH v7 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik 2018-09-02 12:01 ` Janusz Krzysztofik 2018-09-02 13:21 ` Lukas Wunner 2018-09-02 13:21 ` Lukas Wunner 2018-09-02 13:21 ` Lukas Wunner 2018-09-03 4:31 ` Matthew Wilcox 2018-09-03 4:31 ` Matthew Wilcox 2018-09-03 4:31 ` Matthew Wilcox 2018-09-03 14:24 ` Geert Uytterhoeven 2018-09-03 14:24 ` Geert Uytterhoeven 2018-09-03 14:24 ` Geert Uytterhoeven 2018-09-03 15:07 ` Geert Uytterhoeven 2018-09-03 15:07 ` Geert Uytterhoeven 2018-09-03 15:07 ` Geert Uytterhoeven 2018-09-04 15:29 ` kbuild test robot 2018-09-04 15:29 ` kbuild test robot 2018-09-04 15:29 ` kbuild test robot 2018-09-05 6:46 ` kbuild test robot 2018-09-05 6:46 ` kbuild test robot 2018-09-05 6:46 ` kbuild test robot 2018-09-02 12:01 ` [PATCH v7 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik 2018-09-02 12:01 ` Janusz Krzysztofik 2018-09-02 12:01 ` Janusz Krzysztofik 2018-09-02 12:01 ` [PATCH v7 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik 2018-09-02 12:01 ` Janusz Krzysztofik 2018-09-03 14:21 ` Geert Uytterhoeven 2018-09-03 14:21 ` Geert Uytterhoeven 2018-09-03 14:21 ` Geert Uytterhoeven 2018-09-04 15:23 ` kbuild test robot 2018-09-04 15:23 ` kbuild test robot 2018-09-04 15:23 ` kbuild test robot 2018-09-05 7:11 ` kbuild test robot 2018-09-05 7:11 ` kbuild test robot 2018-09-05 7:11 ` kbuild test robot 2018-09-02 12:01 ` [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik 2018-09-02 12:01 ` Janusz Krzysztofik [not found] ` <CGME20180920101151eucas1p221f5a1715b8556bb9d99bf08fe09ce6f@eucas1p2.samsung.com> 2018-09-20 10:11 ` Marek Szyprowski 2018-09-20 10:11 ` Marek Szyprowski 2018-09-20 10:11 ` Marek Szyprowski 2018-09-20 15:48 ` Janusz Krzysztofik 2018-09-20 15:48 ` Janusz Krzysztofik 2018-09-20 15:48 ` Janusz Krzysztofik 2018-09-20 15:48 ` Janusz Krzysztofik 2018-09-20 16:21 ` Janusz Krzysztofik 2018-09-20 16:21 ` Janusz Krzysztofik 2018-09-20 16:21 ` Janusz Krzysztofik 2018-09-21 8:18 ` Marek Szyprowski 2018-09-21 8:18 ` Marek Szyprowski 2018-09-21 10:51 ` Janusz Krzysztofik 2018-09-21 10:51 ` Janusz Krzysztofik 2018-09-21 11:26 ` Janusz Krzysztofik 2018-09-21 11:26 ` Janusz Krzysztofik 2018-09-21 11:26 ` Janusz Krzysztofik 2018-09-21 14:14 ` Marek Szyprowski 2018-09-21 14:14 ` Marek Szyprowski 2018-09-21 14:14 ` Marek Szyprowski 2018-09-23 10:43 ` Janusz Krzysztofik 2018-09-23 10:43 ` Janusz Krzysztofik 2018-09-23 23:53 ` [PATCH 0/2] gpiolib: Fix issues introduced by fast bitmap processing path Janusz Krzysztofik 2018-09-23 23:53 ` Janusz Krzysztofik 2018-09-23 23:53 ` [PATCH 1/2] gpiolib: Fix missing updates of bitmap index Janusz Krzysztofik 2018-09-23 23:53 ` Janusz Krzysztofik 2018-09-23 23:53 ` Janusz Krzysztofik 2018-09-24 8:11 ` Linus Walleij 2018-09-24 8:11 ` Linus Walleij 2018-09-24 8:11 ` Linus Walleij 2018-09-29 12:20 ` [PATCH] gpiolib: Fix incorrect use of find_next_zero_bit() Janusz Krzysztofik 2018-09-29 12:20 ` Janusz Krzysztofik 2018-10-01 6:46 ` Marek Szyprowski 2018-10-01 6:46 ` Marek Szyprowski 2018-10-01 9:37 ` Linus Walleij 2018-10-01 9:37 ` Linus Walleij 2018-10-01 9:37 ` Linus Walleij 2018-09-23 23:53 ` [PATCH 2/2] gpiolib: Fix array members of same chip processed separately Janusz Krzysztofik 2018-09-23 23:53 ` Janusz Krzysztofik 2018-09-23 23:53 ` Janusz Krzysztofik 2018-09-24 8:13 ` Linus Walleij 2018-09-24 8:13 ` Linus Walleij 2018-09-24 8:13 ` Linus Walleij 2018-09-24 9:43 ` [PATCH 0/2] gpiolib: Fix issues introduced by fast bitmap processing path Marek Szyprowski 2018-09-24 9:43 ` Marek Szyprowski 2018-09-24 9:43 ` Marek Szyprowski 2018-09-24 11:08 ` Janusz Krzysztofik 2018-09-24 11:08 ` Janusz Krzysztofik 2018-09-24 11:38 ` Marek Szyprowski 2018-09-24 11:38 ` Marek Szyprowski 2018-09-24 11:38 ` Marek Szyprowski 2018-09-24 14:18 ` Janusz Krzysztofik 2018-09-24 14:18 ` Janusz Krzysztofik 2018-09-24 14:18 ` Janusz Krzysztofik 2018-09-25 19:24 ` [PATCH] mmc: pwrseq_simple: Fix incorrect handling of GPIO bitmap Janusz Krzysztofik 2018-09-26 7:50 ` Linus Walleij 2018-09-26 8:14 ` Marek Szyprowski [not found] ` <7a4906d9-ffb1-f2af-07e7-d5815dcd0d8c@samsung.com> 2018-09-26 8:27 ` Marek Szyprowski 2018-10-12 19:09 ` [RFT PATCH] " Janusz Krzysztofik 2018-10-12 19:09 ` Janusz Krzysztofik 2018-10-12 19:09 ` Janusz Krzysztofik 2018-10-12 19:09 ` Janusz Krzysztofik 2018-10-15 8:32 ` Marek Szyprowski 2018-10-15 8:32 ` Marek Szyprowski 2018-10-15 8:32 ` Marek Szyprowski 2018-10-15 8:32 ` Marek Szyprowski 2018-10-15 10:29 ` Ulf Hansson 2018-10-15 10:29 ` Ulf Hansson 2018-10-15 10:29 ` Ulf Hansson 2018-10-15 10:29 ` Ulf Hansson 2018-10-15 14:27 ` Linus Walleij 2018-10-15 14:27 ` Linus Walleij 2018-10-15 14:27 ` Linus Walleij 2018-10-15 14:27 ` Linus Walleij 2018-09-20 18:05 ` [PATCH v7 4/4] gpiolib: Implement fast processing path in get/set array Dan Carpenter 2018-09-20 18:05 ` Dan Carpenter 2018-09-20 15:49 ` Linus Walleij 2018-09-20 15:49 ` Linus Walleij 2018-09-20 15:49 ` Linus Walleij 2018-09-05 21:50 ` [PATCH v8 0/4] gpiolib: speed up GPIO array processing Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-05 21:50 ` [PATCH v8 1/4] gpiolib: Pass bitmaps, not integer arrays, to get/set array Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-05 21:50 ` [PATCH v8 2/4] gpiolib: Identify arrays matching GPIO hardware Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-05 21:50 ` [PATCH v8 3/4] gpiolib: Pass array info to get/set array functions Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-05 21:50 ` [PATCH v8 4/4] gpiolib: Implement fast processing path in get/set array Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-05 21:50 ` Janusz Krzysztofik 2018-09-13 9:22 ` [PATCH v8 0/4] gpiolib: speed up GPIO array processing Linus Walleij 2018-09-13 9:22 ` Linus Walleij 2018-09-13 9:22 ` Linus Walleij 2018-09-19 18:08 ` Linus Walleij 2018-09-19 18:08 ` Linus Walleij 2018-09-19 18:08 ` Linus Walleij 2018-11-21 11:08 ` Subject: [PATCH v4 0/4] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik 2018-11-21 11:08 ` Janusz Krzysztofik 2018-11-21 11:08 ` [PATCH v4 1/4] ARM: OMAP1: ams-delta: Provide GPIO lookup table for NAND data port Janusz Krzysztofik 2018-11-21 11:08 ` Janusz Krzysztofik 2018-11-23 17:02 ` Tony Lindgren 2018-11-23 17:02 ` Tony Lindgren 2018-11-21 11:08 ` [PATCH v4 2/4] mtd: rawnand: ams-delta: Request data port GPIO resource Janusz Krzysztofik 2018-11-21 11:08 ` Janusz Krzysztofik 2018-11-21 11:08 ` [PATCH v4 3/4] mtd: rawnand: ams-delta: Use GPIO API for data I/O Janusz Krzysztofik 2018-11-21 11:08 ` Janusz Krzysztofik 2018-11-21 14:53 ` Boris Brezillon 2018-11-21 14:53 ` Boris Brezillon 2018-11-21 11:08 ` [PATCH v4 4/4] ARM: OMAP1: ams-delta: Drop obsolete NAND resources Janusz Krzysztofik 2018-11-21 11:08 ` Janusz Krzysztofik 2018-11-21 14:56 ` Subject: [PATCH v4 0/4] mtd: rawnand: ams-delta: Use GPIO API for data I/O Boris Brezillon 2018-11-21 14:56 ` Boris Brezillon 2018-11-23 17:03 ` Tony Lindgren 2018-11-23 17:03 ` Tony Lindgren 2018-12-07 8:04 ` Miquel Raynal 2018-12-07 8:04 ` Miquel Raynal 2018-12-07 16:10 ` Tony Lindgren 2018-12-07 16:10 ` Tony Lindgren
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20180718235710.18242-7-jmkrzyszt@gmail.com \ --to=jmkrzyszt@gmail.com \ --cc=aaro.koskinen@iki.fi \ --cc=artem.bityutskiy@linux.intel.com \ --cc=boris.brezillon@bootlin.com \ --cc=computersforpeace@gmail.com \ --cc=dwmw2@infradead.org \ --cc=grygorii.strashko@ti.com \ --cc=khilman@kernel.org \ --cc=linus.walleij@linaro.org \ --cc=linux-arm-kernel@lists.infradead.org \ --cc=linux-gpio@vger.kernel.org \ --cc=linux-kernel@vger.kernel.org \ --cc=linux-mtd@lists.infradead.org \ --cc=linux-omap@vger.kernel.org \ --cc=marek.vasut@gmail.com \ --cc=miquel.raynal@bootlin.com \ --cc=richard@nod.at \ --cc=ssantosh@kernel.org \ --cc=tony@atomide.com \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: linkBe sure your reply has a Subject: header at the top and a blank line before the message body.
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.