]> git.ipfire.org Git - thirdparty/linux.git/commitdiff
pinctrl: mediatek: Fix the invalid conditions
authorHao Chang <ot_chhao.chang@mediatek.com>
Sat, 29 Mar 2025 02:40:29 +0000 (10:40 +0800)
committerLinus Walleij <linus.walleij@linaro.org>
Tue, 15 Apr 2025 07:45:07 +0000 (09:45 +0200)
The variable count_reg_names is defined as an int type and cannot be
directly compared to an unsigned int. To resolve this issue,
first verify the correctness of count_reg_names.

Link: https://lore.kernel.org/all/5ae93d42e4c4e70fb33bf35dcc37caebf324c8d3.camel@mediatek.com/T/
Signed-off-by: Hao Chang <ot_chhao.chang@mediatek.com>
Signed-off-by: Qingliang Li <qingliang.li@mediatek.com>
Link: https://lore.kernel.org/20250329024533.5279-1-ot_chhao.chang@mediatek.com
Signed-off-by: Linus Walleij <linus.walleij@linaro.org>
drivers/pinctrl/mediatek/mtk-eint.c
drivers/pinctrl/mediatek/mtk-eint.h
drivers/pinctrl/mediatek/pinctrl-mtk-common-v2.c

index ced4ee509b5b6df25e240d061d6ebb94b59c2a1d..557dec75fa03187ccc2e4492c8edcebfd19262ee 100644 (file)
@@ -507,7 +507,7 @@ EXPORT_SYMBOL_GPL(mtk_eint_find_irq);
 
 int mtk_eint_do_init(struct mtk_eint *eint)
 {
-       unsigned int size, i, port, inst = 0;
+       unsigned int size, i, port, virq, inst = 0;
        struct mtk_pinctrl *hw = (struct mtk_pinctrl *)eint->pctl;
 
        /* If clients don't assign a specific regs, let's use generic one */
@@ -584,7 +584,7 @@ int mtk_eint_do_init(struct mtk_eint *eint)
                if (inst >= eint->nbase)
                        continue;
                eint->pin_list[inst][eint->pins[i].index] = i;
-               int virq = irq_create_mapping(eint->domain, i);
+               virq = irq_create_mapping(eint->domain, i);
                irq_set_chip_and_handler(virq, &mtk_eint_irq_chip,
                                         handle_level_irq);
                irq_set_chip_data(virq, eint);
index f7f58cca0d5e3161a1b22f619f154bb9ad3e0560..0c6bf7cbdc3a4f16e35d576535c6cef102962356 100644 (file)
@@ -66,7 +66,7 @@ struct mtk_eint_xt {
 struct mtk_eint {
        struct device *dev;
        void __iomem **base;
-       u8 nbase;
+       int nbase;
        u16 *base_pin_num;
        struct irq_domain *domain;
        int irq;
index d1556b75d9effd9139a3b6be83e31f195b0479bd..0884c0700b3ee463c4571f2ac5b0254b5583b54a 100644 (file)
@@ -381,10 +381,13 @@ int mtk_build_eint(struct mtk_pinctrl *hw, struct platform_device *pdev)
                return -ENOMEM;
 
        count_reg_names = of_property_count_strings(np, "reg-names");
-       if (count_reg_names < hw->soc->nbase_names)
+       if (count_reg_names < 0)
+               return -EINVAL;
+
+       hw->eint->nbase = count_reg_names - (int)hw->soc->nbase_names;
+       if (hw->eint->nbase <= 0)
                return -EINVAL;
 
-       hw->eint->nbase = count_reg_names - hw->soc->nbase_names;
        hw->eint->base = devm_kmalloc_array(&pdev->dev, hw->eint->nbase,
                                            sizeof(*hw->eint->base), GFP_KERNEL | __GFP_ZERO);
        if (!hw->eint->base) {