Hi Sylwester,
Thank you for refreshing the patchset!
On 10/30/20 14:51, Sylwester Nawrocki wrote:
This patch adds a generic interconnect driver for Exynos SoCs in order to provide interconnect functionality for each "samsung,exynos-bus" compatible device.
The SoC topology is a graph (or more specifically, a tree) and its edges are specified using the 'samsung,interconnect-parent' in the DT. Due to unspecified relative probing order, -EPROBE_DEFER may be propagated to ensure that the parent is probed before its children.
Each bus is now an interconnect provider and an interconnect node as well (cf. Documentation/interconnect/interconnect.rst), i.e. every bus registers itself as a node. Node IDs are not hardcoded but rather assigned dynamically at runtime. This approach allows for using this driver with various Exynos SoCs.
Frequencies requested via the interconnect API for a given node are propagated to devfreq using dev_pm_qos_update_request(). Please note that it is not an error when CONFIG_INTERCONNECT is 'n', in which case all interconnect API functions are no-op.
The bus-width DT property is to determine the interconnect data width and traslate requested bandwidth to clock frequency for each bus.
Signed-off-by: Artur Świgoń a.swigon@samsung.com Signed-off-by: Sylwester Nawrocki s.nawrocki@samsung.com
Changes for v7:
- adjusted to the DT property changes: "interconnects" instead of "samsung,interconnect-parent", "samsung,data-clk-ratio" instead of "bus-width",
- adaptation to of_icc_get_from_provider() function changes in v5.10-rc1.
Changes for v6:
- corrected of_node dereferencing in exynos_icc_get_parent() function,
- corrected initialization of icc_node->name so as to avoid direct of_node->name dereferencing,
- added parsing of bus-width DT property.
Changes for v5:
- adjust to renamed exynos,interconnect-parent-node property,
- use automatically generated platform device id as the interconect node id instead of a now unavailable devfreq->id field,
- add icc_ prefix to some variables to make the code more self-commenting,
- use icc_nodes_remove() instead of icc_node_del() + icc_node_destroy(),
- adjust to exynos,interconnect-parent-node property rename to samsung,interconnect-parent,
- converted to a separate platform driver in drivers/interconnect.
drivers/interconnect/Kconfig | 1 + drivers/interconnect/Makefile | 1 + drivers/interconnect/exynos/Kconfig | 6 ++ drivers/interconnect/exynos/Makefile | 4 + drivers/interconnect/exynos/exynos.c | 198 +++++++++++++++++++++++++++++++++++ 5 files changed, 210 insertions(+) create mode 100644 drivers/interconnect/exynos/Kconfig create mode 100644 drivers/interconnect/exynos/Makefile create mode 100644 drivers/interconnect/exynos/exynos.c
[..]
+static struct platform_driver exynos_generic_icc_driver = {
- .driver = {
.name = "exynos-generic-icc",
I think that you will need this: .sync_state = icc_sync_state,
Thanks, Georgi
- },
- .probe = exynos_generic_icc_probe,
- .remove = exynos_generic_icc_remove,
+}; +module_platform_driver(exynos_generic_icc_driver);
+MODULE_DESCRIPTION("Exynos generic interconnect driver"); +MODULE_AUTHOR("Artur Świgoń a.swigon@samsung.com"); +MODULE_AUTHOR("Sylwester Nawrocki s.nawrocki@samsung.com"); +MODULE_LICENSE("GPL v2"); +MODULE_ALIAS("platform:exynos-generic-icc");