[bug report] clk: mediatek: mt8173: Break down clock drivers and allow module build

Dan Carpenter error27 at gmail.com
Thu Feb 2 04:36:07 PST 2023


Hello AngeloGioacchino Del Regno,

The patch 4c02c9af3cb9: "clk: mediatek: mt8173: Break down clock
drivers and allow module build" from Jan 20, 2023, leads to the
following Smatch static checker warning:

	drivers/clk/mediatek/clk-mt8173-apmixedsys.c:95 clk_mt8173_apmixed_probe()
	warn: passing zero to 'PTR_ERR'

drivers/clk/mediatek/clk-mt8173-apmixedsys.c
    85 static int clk_mt8173_apmixed_probe(struct platform_device *pdev)
    86 {
    87         struct device_node *node = pdev->dev.of_node;
    88         struct clk_hw_onecell_data *clk_data;
    89         void __iomem *base;
    90         struct clk_hw *hw;
    91         int r;
    92 
    93         base = of_iomap(node, 0);
    94         if (!base)
--> 95                 return PTR_ERR(base);

return -ENOMEM;

    96 
    97         clk_data = mtk_alloc_clk_data(CLK_APMIXED_NR_CLK);
    98         if (IS_ERR_OR_NULL(clk_data))
    99                 return -ENOMEM;

mtk_alloc_clk_data() does not return error pointers.  This needs to
call of_unmap(base);.  The ->remove() function doesn't unmap base either.

    100 
    101         r = mtk_clk_register_plls(node, plls, ARRAY_SIZE(plls), clk_data);
    102         if (r)
    103                 goto free_clk_data;
    104 
    105         hw = mtk_clk_register_ref2usb_tx("ref2usb_tx", "clk26m", base + REGOFF_REF2USB);
    106         if (IS_ERR(hw)) {
    107                 r = PTR_ERR(hw);
    108                 dev_err(&pdev->dev, "Failed to register ref2usb_tx: %d\n", r);
    109                 goto unregister_plls;
    110         }
    111         clk_data->hws[CLK_APMIXED_REF2USB_TX] = hw;
    112 
    113         hw = devm_clk_hw_register_divider(&pdev->dev, "hdmi_ref", "tvdpll_594m", 0,
    114                                           base + REGOFF_HDMI_REF, 16, 3,
    115                                           CLK_DIVIDER_POWER_OF_TWO, NULL);
    116         clk_data->hws[CLK_APMIXED_HDMI_REF] = hw;
    117 
    118         r = of_clk_add_hw_provider(node, of_clk_hw_onecell_get, clk_data);
    119         if (r)
    120                 goto unregister_ref2usb;
    121 
    122         return 0;
    123 
    124 unregister_ref2usb:
    125         mtk_clk_unregister_ref2usb_tx(clk_data->hws[CLK_APMIXED_REF2USB_TX]);
    126 unregister_plls:
    127         mtk_clk_unregister_plls(plls, ARRAY_SIZE(plls), clk_data);
    128 free_clk_data:
    129         mtk_free_clk_data(clk_data);
    130         return r;
    131 }

regards,
dan carpenter



More information about the Linux-mediatek mailing list