mailbox: mtk-cmdq: Dynamically allocate clk_bulk_data structure
authorAngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Thu, 20 Jun 2024 10:07:49 +0000 (12:07 +0200)
committerJassi Brar <jassisinghbrar@gmail.com>
Wed, 10 Jul 2024 18:24:55 +0000 (13:24 -0500)
Now that the clock probing code uses devm_kasprintf(), there is
no more restriction on the number of GCEs: dynamically allocate
the clk_bulk_data clocks array to improve flexibility and also
to get a slight memory saving on platforms featuring only one
CMDQ mailbox (and consequently only one Global Command Engine).

Signed-off-by: AngeloGioacchino Del Regno <angelogioacchino.delregno@collabora.com>
Signed-off-by: Jassi Brar <jassisinghbrar@gmail.com>
drivers/mailbox/mtk-cmdq-mailbox.c

index a3f5715..2a71a54 100644 (file)
@@ -22,7 +22,6 @@
 
 #define CMDQ_OP_CODE_MASK              (0xff << CMDQ_OP_CODE_SHIFT)
 #define CMDQ_NUM_CMD(t)                        (t->cmd_buf_size / CMDQ_INST_SIZE)
-#define CMDQ_GCE_NUM_MAX               (2)
 
 #define CMDQ_CURR_IRQ_STATUS           0x10
 #define CMDQ_SYNC_TOKEN_UPDATE         0x68
@@ -81,7 +80,7 @@ struct cmdq {
        u32                     irq_mask;
        const struct gce_plat   *pdata;
        struct cmdq_thread      *thread;
-       struct clk_bulk_data    clocks[CMDQ_GCE_NUM_MAX];
+       struct clk_bulk_data    *clocks;
        bool                    suspended;
 };
 
@@ -584,6 +583,11 @@ static int cmdq_get_clocks(struct device *dev, struct cmdq *cmdq)
        struct device_node *node, *parent = dev->of_node->parent;
        struct clk_bulk_data *clks;
 
+       cmdq->clocks = devm_kcalloc(dev, cmdq->pdata->gce_num,
+                                   sizeof(cmdq->clocks), GFP_KERNEL);
+       if (!cmdq->clocks)
+               return -ENOMEM;
+
        if (cmdq->pdata->gce_num == 1) {
                clks = &cmdq->clocks[0];