On 16/04/2021 05:32, Po-Kai Chi wrote: > MediaTek DRAM controller (DRAMC) driver provides cross-platform features > as below: > > 1. provide APIs for low power feature queries > 2. create sysfs to pass the DRAM information to user-space > > Signed-off-by: Po-Kai Chi <pk.chi@xxxxxxxxxxxx> > --- > drivers/memory/Kconfig | 1 + > drivers/memory/Makefile | 1 + > drivers/memory/mediatek/Kconfig | 9 + > drivers/memory/mediatek/Makefile | 3 + > drivers/memory/mediatek/mtk-dramc.c | 711 +++++++++++++++++++++++++++++++++++ > include/memory/mediatek/dramc.h | 18 + > 6 files changed, 743 insertions(+) > create mode 100644 drivers/memory/mediatek/Kconfig > create mode 100644 drivers/memory/mediatek/Makefile > create mode 100644 drivers/memory/mediatek/mtk-dramc.c > create mode 100644 include/memory/mediatek/dramc.h > > diff --git a/drivers/memory/Kconfig b/drivers/memory/Kconfig > index 72c0df1..056e906 100644 > --- a/drivers/memory/Kconfig > +++ b/drivers/memory/Kconfig > @@ -225,6 +225,7 @@ config STM32_FMC2_EBI > devices (like SRAM, ethernet adapters, FPGAs, LCD displays, ...) on > SOCs containing the FMC2 External Bus Interface. > > +source "drivers/memory/mediatek/Kconfig" Please first group existing Mediatek driver there. It's messy. > source "drivers/memory/samsung/Kconfig" > source "drivers/memory/tegra/Kconfig" > > diff --git a/drivers/memory/Makefile b/drivers/memory/Makefile > index bc7663e..cd4f8cf 100644 > --- a/drivers/memory/Makefile > +++ b/drivers/memory/Makefile > @@ -25,6 +25,7 @@ obj-$(CONFIG_PL353_SMC) += pl353-smc.o > obj-$(CONFIG_RENESAS_RPCIF) += renesas-rpc-if.o > obj-$(CONFIG_STM32_FMC2_EBI) += stm32-fmc2-ebi.o > > +obj-$(CONFIG_MTK_DRAMC) += mediatek/ > obj-$(CONFIG_SAMSUNG_MC) += samsung/ > obj-$(CONFIG_TEGRA_MC) += tegra/ > obj-$(CONFIG_TI_EMIF_SRAM) += ti-emif-sram.o > diff --git a/drivers/memory/mediatek/Kconfig b/drivers/memory/mediatek/Kconfig > new file mode 100644 > index 0000000..a1618b0 > --- /dev/null > +++ b/drivers/memory/mediatek/Kconfig > @@ -0,0 +1,9 @@ > +# SPDX-License-Identifier: GPL-2.0 > + > +config MTK_DRAMC > + tristate "MediaTek DRAMC driver" > + help > + This selects the MediaTek(R) DRAMC driver. > + Provide the API for DRAMC low power scenario, and the interface > + for reporting DRAM information, e.g. DRAM mode register (MR) for > + DRAM vendor ID, temperature, and density. > diff --git a/drivers/memory/mediatek/Makefile b/drivers/memory/mediatek/Makefile > new file mode 100644 > index 0000000..632be48 > --- /dev/null > +++ b/drivers/memory/mediatek/Makefile > @@ -0,0 +1,3 @@ > +# SPDX-License-Identifier: GPL-2.0 > + > +obj-$(CONFIG_MTK_DRAMC) += mtk-dramc.o > diff --git a/drivers/memory/mediatek/mtk-dramc.c b/drivers/memory/mediatek/mtk-dramc.c > new file mode 100644 > index 0000000..155b3b7 > --- /dev/null > +++ b/drivers/memory/mediatek/mtk-dramc.c > @@ -0,0 +1,711 @@ > +// SPDX-License-Identifier: GPL-2.0 > +/* > + * Copyright (c) 2021 MediaTek Inc. > + */ > + > +#include <linux/kernel.h> > +#include <linux/module.h> > +#include <linux/device.h> > +#include <linux/platform_device.h> > +#include <linux/of.h> > +#include <linux/of_address.h> > +#include <linux/of_device.h> > +#include <linux/printk.h> > +#include <linux/slab.h> > +#include <linux/io.h> > +#include <memory/mediatek/dramc.h> > + > +#define DRAMC_DRV_NAME "mtk-dramc" What does this define bring? What's the benefit? > + > +struct mr_info_t { > + unsigned int mr_index; > + unsigned int mr_value; > +}; > + > +/* (...) > + > +static struct platform_driver dramc_drv = { > + .probe = dramc_probe, > + .remove = dramc_remove, > + .driver = { > + .name = DRAMC_DRV_NAME, > + .owner = THIS_MODULE, NAK, this is so old mistake... No point to review - run Smatch, sparse, checkpatch and coccinelle. Fix all the errors and then resubmit. > + .of_match_table = mtk_dramc_of_ids, > + }, > +}; > + > +static int __init dramc_drv_init(void) > +{ > + int ret; > + > + ret = platform_driver_register(&dramc_drv); > + if (ret) { > + pr_info("%s: init fail, ret 0x%x\n", __func__, ret); > + return ret; > + } > + > + return ret; > +} > + > +static void __exit dramc_drv_exit(void) > +{ > + platform_driver_unregister(&dramc_drv); > +} > + > +module_init(dramc_drv_init); > +module_exit(dramc_drv_exit); > + > +MODULE_LICENSE("GPL v2"); > +MODULE_DESCRIPTION("MediaTek DRAMC Driver"); > +MODULE_AUTHOR("Po-Kai Chi <pk.chi@xxxxxxxxxxxx>"); > diff --git a/include/memory/mediatek/dramc.h b/include/memory/mediatek/dramc.h > new file mode 100644 > index 0000000..c8d200f > --- /dev/null > +++ b/include/memory/mediatek/dramc.h > @@ -0,0 +1,18 @@ > +/* SPDX-License-Identifier: GPL-2.0 */ > +/* > + * Copyright (c) 2021 MediaTek Inc. > + */ > + > +#ifndef __DRAMC_H__ Extend the header guard - MEMORY_MEDIATEK_DRAMC > +#define __DRAMC_H__ Best regards, Krzysztof