lists.openwall.net   lists  /  announce  owl-users  owl-dev  john-users  john-dev  passwdqc-users  yescrypt  popa3d-users  /  oss-security  kernel-hardening  musl  sabotage  tlsify  passwords  /  crypt-dev  xvendor  /  Bugtraq  Full-Disclosure  linux-kernel  linux-netdev  linux-ext4  linux-hardening  linux-cve-announce  PHC 
Open Source and information security mailing list archives
 
Hash Suite: Windows password security audit tool. GUI, reports in PDF.
[<prev] [next>] [<thread-prev] [thread-next>] [day] [month] [year] [list]
Date:   Thu, 6 Apr 2023 08:36:46 +0100
From:   Lee Jones <lee@...nel.org>
To:     Stephen Rothwell <sfr@...b.auug.org.au>
Cc:     Mark Brown <broonie@...nel.org>,
        William Breathitt Gray <william.gray@...aro.org>,
        Aidan MacDonald <aidanmacdonald.0x0@...il.com>,
        Linux Kernel Mailing List <linux-kernel@...r.kernel.org>,
        Linux Next Mailing List <linux-next@...r.kernel.org>
Subject: Re: linux-next: build failure after merge of the mfd tree

On Thu, 06 Apr 2023, Stephen Rothwell wrote:

> Hi all,
>
> After merging the mfd tree, today's linux-next build (x86_64 allmodconfig)
> failed like this:
>
> drivers/mfd/qcom-pm8008.c:135:35: error: initialization of 'int (*)(unsigned int **, unsigned int,  const struct regmap_irq *, int,  void *)' from incompatible pointer type 'int (*)(unsigned int **, unsigned int,  const struct regmap_irq *, int)' [-Werror=incompatible-pointer-types]
>   135 |         .set_type_config        = pm8008_set_type_config,
>       |                                   ^~~~~~~~~~~~~~~~~~~~~~
> drivers/mfd/qcom-pm8008.c:135:35: note: (near initialization for 'pm8008_irq_chip.set_type_config')
>
> Caused by commit
>
>   72a8a08b0c62 ("mfd: qcom-pm8008: Convert irq chip to config regs")
>
> interacting with commit
>
>   7697c64b9e49 ("regmap: Pass irq_drv_data as a parameter for set_type_config()")
>
> from the regmap tree.
>
> I have applied the following merge fix patch:
>
> From: Stephen Rothwell <sfr@...b.auug.org.au>
> Date: Thu, 6 Apr 2023 11:37:44 +1000
> Subject: [PATCH] fixup for "mfd: qcom-pm8008: Convert irq chip to config regs"
>
> interacting with "regmap: Pass irq_drv_data as a parameter for set_type_config()"
>
> Signed-off-by: Stephen Rothwell <sfr@...b.auug.org.au>
> ---
>  drivers/mfd/qcom-pm8008.c | 3 ++-
>  1 file changed, 2 insertions(+), 1 deletion(-)
>
> diff --git a/drivers/mfd/qcom-pm8008.c b/drivers/mfd/qcom-pm8008.c
> index a33fbc42ac8e..e60c838a78c1 100644
> --- a/drivers/mfd/qcom-pm8008.c
> +++ b/drivers/mfd/qcom-pm8008.c
> @@ -85,7 +85,8 @@ static unsigned int pm8008_get_irq_reg(struct regmap_irq_chip_data *data,
>  }
>
>  static int pm8008_set_type_config(unsigned int **buf, unsigned int type,
> -				  const struct regmap_irq *irq_data, int idx)
> +				  const struct regmap_irq *irq_data, int idx,
> +				  void *irq_drv_data)
>  {
>  	switch (type) {
>  	case IRQ_TYPE_EDGE_FALLING:

Applied, squashed and credit given, thanks:

Author: Aidan MacDonald <aidanmacdonald.0x0@...il.com>
Date:   Thu Feb 16 22:22:12 2023 +0000

    mfd: qcom-pm8008: Convert irq chip to config regs

    Replace type and virtual registers, which are both deprecated,
    with config registers. This also simplifies the driver because
    IRQ types are set in one place, the set_type_config() callback.

    Signed-off-by: Aidan MacDonald <aidanmacdonald.0x0@...il.com>
    [Lee: Squashed in fix-up patch from Stephen Rothwell adapting to new .set_type_config() API]
    Signed-off-by: Stephen Rothwell <sfr@...b.auug.org.au>
    Signed-off-by: Lee Jones <lee@...nel.org>
    Link: https://lore.kernel.org/r/20230216222214.138671-3-aidanmacdonald.0x0@gmail.com
---
 drivers/mfd/qcom-pm8008.c | 51 ++++++++++++++++++++++++-----------------------
 1 file changed, 26 insertions(+), 25 deletions(-)

diff --git a/drivers/mfd/qcom-pm8008.c b/drivers/mfd/qcom-pm8008.c
index 39fd2a792e736..d502ecf055903 100644
--- a/drivers/mfd/qcom-pm8008.c
+++ b/drivers/mfd/qcom-pm8008.c
@@ -66,15 +66,16 @@ static struct regmap_irq_sub_irq_map pm8008_sub_reg_offsets[] = {
 	REGMAP_IRQ_MAIN_REG_OFFSET(p3_offs),
 };

-static unsigned int pm8008_virt_regs[] = {
-	PM8008_POLARITY_HI_BASE,
-	PM8008_POLARITY_LO_BASE,
-};
-
 enum {
+	SET_TYPE_INDEX,
 	POLARITY_HI_INDEX,
 	POLARITY_LO_INDEX,
-	PM8008_NUM_VIRT_REGS,
+};
+
+static unsigned int pm8008_config_regs[] = {
+	PM8008_TYPE_BASE,
+	PM8008_POLARITY_HI_BASE,
+	PM8008_POLARITY_LO_BASE,
 };

 static struct regmap_irq pm8008_irqs[] = {
@@ -88,32 +89,37 @@ static struct regmap_irq pm8008_irqs[] = {
 	REGMAP_IRQ_REG(PM8008_IRQ_GPIO2,	PM8008_GPIO2,	BIT(0)),
 };

-static int pm8008_set_type_virt(unsigned int **virt_buf,
-				     unsigned int type, unsigned long hwirq,
-				     int reg)
+static int pm8008_set_type_config(unsigned int **buf, unsigned int type,
+				 const struct regmap_irq *irq_data, int idx,
+				 void *irq_drv_data)
 {
 	switch (type) {
 	case IRQ_TYPE_EDGE_FALLING:
 	case IRQ_TYPE_LEVEL_LOW:
-		virt_buf[POLARITY_HI_INDEX][reg] &= ~pm8008_irqs[hwirq].mask;
-		virt_buf[POLARITY_LO_INDEX][reg] |= pm8008_irqs[hwirq].mask;
+		buf[POLARITY_HI_INDEX][idx] &= ~irq_data->mask;
+		buf[POLARITY_LO_INDEX][idx] |= irq_data->mask;
 		break;

 	case IRQ_TYPE_EDGE_RISING:
 	case IRQ_TYPE_LEVEL_HIGH:
-		virt_buf[POLARITY_HI_INDEX][reg] |= pm8008_irqs[hwirq].mask;
-		virt_buf[POLARITY_LO_INDEX][reg] &= ~pm8008_irqs[hwirq].mask;
+		buf[POLARITY_HI_INDEX][idx] |= irq_data->mask;
+		buf[POLARITY_LO_INDEX][idx] &= ~irq_data->mask;
 		break;

 	case IRQ_TYPE_EDGE_BOTH:
-		virt_buf[POLARITY_HI_INDEX][reg] |= pm8008_irqs[hwirq].mask;
-		virt_buf[POLARITY_LO_INDEX][reg] |= pm8008_irqs[hwirq].mask;
+		buf[POLARITY_HI_INDEX][idx] |= irq_data->mask;
+		buf[POLARITY_LO_INDEX][idx] |= irq_data->mask;
 		break;

 	default:
 		return -EINVAL;
 	}

+	if (type & IRQ_TYPE_EDGE_BOTH)
+		buf[SET_TYPE_INDEX][idx] |= irq_data->mask;
+	else
+		buf[SET_TYPE_INDEX][idx] &= ~irq_data->mask;
+
 	return 0;
 }

@@ -121,21 +127,20 @@ static struct regmap_irq_chip pm8008_irq_chip = {
 	.name			= "pm8008_irq",
 	.main_status		= I2C_INTR_STATUS_BASE,
 	.num_main_regs		= 1,
-	.num_virt_regs		= PM8008_NUM_VIRT_REGS,
 	.irqs			= pm8008_irqs,
 	.num_irqs		= ARRAY_SIZE(pm8008_irqs),
 	.num_regs		= PM8008_NUM_PERIPHS,
 	.not_fixed_stride	= true,
 	.sub_reg_offsets	= pm8008_sub_reg_offsets,
-	.set_type_virt		= pm8008_set_type_virt,
 	.status_base		= PM8008_STATUS_BASE,
 	.mask_base		= PM8008_MASK_BASE,
 	.unmask_base		= PM8008_UNMASK_BASE,
 	.mask_unmask_non_inverted = true,
-	.type_base		= PM8008_TYPE_BASE,
 	.ack_base		= PM8008_ACK_BASE,
-	.virt_reg_base		= pm8008_virt_regs,
-	.num_type_reg		= PM8008_NUM_PERIPHS,
+	.config_base		= pm8008_config_regs,
+	.num_config_bases	= ARRAY_SIZE(pm8008_config_regs),
+	.num_config_regs	= PM8008_NUM_PERIPHS,
+	.set_type_config	= pm8008_set_type_config,
 };

 static struct regmap_config qcom_mfd_regmap_cfg = {
@@ -185,11 +190,7 @@ static int pm8008_probe_irq_peripherals(struct device *dev,
 	for (i = 0; i < ARRAY_SIZE(pm8008_irqs); i++) {
 		type = &pm8008_irqs[i].type;

-		type->type_reg_offset	 = pm8008_irqs[i].reg_offset;
-		type->type_rising_val	 = pm8008_irqs[i].mask;
-		type->type_falling_val	 = pm8008_irqs[i].mask;
-		type->type_level_high_val = 0;
-		type->type_level_low_val  = 0;
+		type->type_reg_offset = pm8008_irqs[i].reg_offset;

 		if (type->type_reg_offset == PM8008_MISC)
 			type->types_supported = IRQ_TYPE_EDGE_RISING;

--
Lee Jones [李琼斯]

Powered by blists - more mailing lists

Powered by Openwall GNU/*/Linux Powered by OpenVZ