#include <linux/of.h>
 #include <linux/of_address.h>
 #include <linux/of_platform.h>
+#include <linux/of_reserved_mem.h>
 #include <linux/pm_runtime.h>
 #include <linux/soc/mediatek/infracfg.h>
 #include <linux/reset.h>
 {
        struct mtk_base_afe *afe;
        struct mt8188_afe_private *afe_priv;
-       struct device *dev;
+       struct device *dev = &pdev->dev;
        struct reset_control *rstc;
        struct regmap *infra_ao;
        int i, irq_id, ret;
 
+       ret = of_reserved_mem_device_init(dev);
+       if (ret)
+               dev_dbg(dev, "failed to assign memory region: %d\n", ret);
+
        ret = dma_set_mask_and_coherent(&pdev->dev, DMA_BIT_MASK(33));
        if (ret)
                return ret;
 
        afe_priv = afe->platform_priv;
        afe->dev = &pdev->dev;
-       dev = afe->dev;
 
        afe->base_addr = devm_platform_ioremap_resource(pdev, 0);
        if (IS_ERR(afe->base_addr))