mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-22 23:02:27 +07:00
694b5a5d31
One new platform gets added, the Realtek RTD1195, which is an older Cortex-a7 based relative of the RTD12xx chips that are already supported in arch/arm64. The platform may also be extended to support running 32-bit kernels on those 64-bit chips for memory-constrained machines. In the Renesas shmobile platform, we gain support for "RZ/G1H" or R8A7742, an eight-core chip based on Cortex-A15 and Cortex-A7 cores, originally released in 2016 as one of the last high-end 32-bit designs. There is ongoing cleanup for the integrator, tegra, imx, and omap2 platforms, with integrator getting very close to the goal of having zero code in arch/arm/, and omap2 moving more of the chip specifics from old board code into device tree files. The Versatile Express platform is made more modular, with built-in drivers now becoming loadable modules. This is part of a greater effort for the Android OS to have a common kernel binary for all platforms and any platform specific code in loadable modules. The PXA platform drops support for Compulab's pxa2xx boards that had rather unusual flash and PCI drivers but no known users remaining. All device drivers specific to those boards can now get removed as well. Across platforms, there is ongoing cleanup, with Geert and Rob revisiting some a lot of Kconfig options. Signed-off-by: Arnd Bergmann <arnd@arndb.de> -----BEGIN PGP SIGNATURE----- iQIzBAABCgAdFiEEo6/YBQwIrVS28WGKmmx57+YAGNkFAl7XvmAACgkQmmx57+YA GNk4vRAAs3TxlwLAUk5dknAi+UstlviNPG/ys6mViFuLqktPyhkA/v6nFOBI5Ldf 8xAsaSk3+oAX3Dd7aTaudl5WMFWFtzT5xA4gEI7CBZrBaAL0BVns1JfnVxpPRIcF B09Sb3wv7++E/+AxYcoVLWd5wkc9tlMesrIV5FPHHasOp3rRjVI0cExXnXzqJU8M TbwrWEOczZNVAm2q4Eh1ttbuSIvPd3s4NMnI755MRSQ7u/rYFSPf6Ay8/eFTqx1e 0SMWHRmrGeP6yhLy7+Li0x0jsK3ReZ9SkLXp3iEZ9huKbBTHIPBUeBB1RMnCYGe+ M2OL+9ySSe9UI9sjvsLGPDAnJaZI/UDUOVhatZCTvYB7CZY5nYNrYp+heYFONWm6 Up3e1t2iGPbgs8/1y78a9YPxAdsW0iavRtjVUYb+nwX+savYZgSBATA1pZqLc317 5FAGmTh//OLKYBSjfAxu9H8aInJPZA595lUiPHEQujzZH5Xz0QNtv4dapeNL2I4g LO20PMvuEgmwlwj/Npnwdl0UQK3ztoeR2upCrk91VwtNWGiOWTzCMT/OkYAAjKuo QYMGu3UvbbTCHPsIdrUz8gZ2T3VnJoeE3ldny2QbNAtVdpH/F8htJcilrBbyv1vI IKB1oogf5zfUwXVwZRxCfI9s5hELUlAKMGTtNcybzdsKpN5xtTo= =gzCp -----END PGP SIGNATURE----- Merge tag 'arm-soc-5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc Pull ARM SoC updates from Arnd Bergmann: "One new platform gets added, the Realtek RTD1195, which is an older Cortex-a7 based relative of the RTD12xx chips that are already supported in arch/arm64. The platform may also be extended to support running 32-bit kernels on those 64-bit chips for memory-constrained machines. In the Renesas shmobile platform, we gain support for "RZ/G1H" or R8A7742, an eight-core chip based on Cortex-A15 and Cortex-A7 cores, originally released in 2016 as one of the last high-end 32-bit designs. There is ongoing cleanup for the integrator, tegra, imx, and omap2 platforms, with integrator getting very close to the goal of having zero code in arch/arm/, and omap2 moving more of the chip specifics from old board code into device tree files. The Versatile Express platform is made more modular, with built-in drivers now becoming loadable modules. This is part of a greater effort for the Android OS to have a common kernel binary for all platforms and any platform specific code in loadable modules. The PXA platform drops support for Compulab's pxa2xx boards that had rather unusual flash and PCI drivers but no known users remaining. All device drivers specific to those boards can now get removed as well. Across platforms, there is ongoing cleanup, with Geert and Rob revisiting some a lot of Kconfig options" * tag 'arm-soc-5.8' of git://git.kernel.org/pub/scm/linux/kernel/git/soc/soc: (94 commits) ARM: omap2: fix omap5_realtime_timer_init definition ARM: zynq: Don't select CONFIG_ICST ARM: OMAP2+: Fix regression for using local timer on non-SMP SoCs clk: versatile: Fix kconfig dependency on COMMON_CLK_VERSATILE ARM: davinci: fix build failure without I2C power: reset: vexpress: fix build issue power: vexpress: cleanup: use builtin_platform_driver power: vexpress: add suppress_bind_attrs to true Revert "ARM: vexpress: Don't select VEXPRESS_CONFIG" MAINTAINERS: pxa: remove Compulab arm/pxa support ARM: pxa: remove Compulab pxa2xx boards bus: arm-integrator-lm: Fix return value check in integrator_ap_lm_probe() soc: imx: move cpu code to drivers/soc/imx ARM: imx: move cpu definitions into a header ARM: imx: use device_initcall for imx_soc_device_init ARM: imx: pcm037: make pcm970_sja1000_platform_data static bus: ti-sysc: Timers no longer need legacy quirk handling ARM: OMAP2+: Drop old timer code for dmtimer and 32k counter ARM: dts: Configure system timers for omap2 ARM: dts: Configure system timers for ti81xx ...
137 lines
3.2 KiB
C
137 lines
3.2 KiB
C
// SPDX-License-Identifier: GPL-2.0-only
|
|
/*
|
|
* Clock driver for the ARM Integrator/IM-PD1 board
|
|
* Copyright (C) 2012-2013 Linus Walleij
|
|
*/
|
|
#include <linux/clk-provider.h>
|
|
#include <linux/clkdev.h>
|
|
#include <linux/err.h>
|
|
#include <linux/io.h>
|
|
#include <linux/platform_device.h>
|
|
#include <linux/module.h>
|
|
#include <linux/mfd/syscon.h>
|
|
#include <linux/regmap.h>
|
|
|
|
#include "icst.h"
|
|
#include "clk-icst.h"
|
|
|
|
#define IMPD1_OSC1 0x00
|
|
#define IMPD1_OSC2 0x04
|
|
#define IMPD1_LOCK 0x08
|
|
|
|
/*
|
|
* There are two VCO's on the IM-PD1
|
|
*/
|
|
|
|
static const struct icst_params impd1_vco1_params = {
|
|
.ref = 24000000, /* 24 MHz */
|
|
.vco_max = ICST525_VCO_MAX_3V,
|
|
.vco_min = ICST525_VCO_MIN,
|
|
.vd_min = 12,
|
|
.vd_max = 519,
|
|
.rd_min = 3,
|
|
.rd_max = 120,
|
|
.s2div = icst525_s2div,
|
|
.idx2s = icst525_idx2s,
|
|
};
|
|
|
|
static const struct clk_icst_desc impd1_icst1_desc = {
|
|
.params = &impd1_vco1_params,
|
|
.vco_offset = IMPD1_OSC1,
|
|
.lock_offset = IMPD1_LOCK,
|
|
};
|
|
|
|
static const struct icst_params impd1_vco2_params = {
|
|
.ref = 24000000, /* 24 MHz */
|
|
.vco_max = ICST525_VCO_MAX_3V,
|
|
.vco_min = ICST525_VCO_MIN,
|
|
.vd_min = 12,
|
|
.vd_max = 519,
|
|
.rd_min = 3,
|
|
.rd_max = 120,
|
|
.s2div = icst525_s2div,
|
|
.idx2s = icst525_idx2s,
|
|
};
|
|
|
|
static const struct clk_icst_desc impd1_icst2_desc = {
|
|
.params = &impd1_vco2_params,
|
|
.vco_offset = IMPD1_OSC2,
|
|
.lock_offset = IMPD1_LOCK,
|
|
};
|
|
|
|
static int integrator_impd1_clk_spawn(struct device *dev,
|
|
struct device_node *parent,
|
|
struct device_node *np)
|
|
{
|
|
struct regmap *map;
|
|
struct clk *clk = ERR_PTR(-EINVAL);
|
|
const char *name = np->name;
|
|
const char *parent_name;
|
|
const struct clk_icst_desc *desc;
|
|
int ret;
|
|
|
|
map = syscon_node_to_regmap(parent);
|
|
if (IS_ERR(map)) {
|
|
pr_err("no regmap for syscon IM-PD1 ICST clock parent\n");
|
|
return PTR_ERR(map);
|
|
}
|
|
|
|
if (of_device_is_compatible(np, "arm,impd1-vco1")) {
|
|
desc = &impd1_icst1_desc;
|
|
} else if (of_device_is_compatible(np, "arm,impd1-vco2")) {
|
|
desc = &impd1_icst2_desc;
|
|
} else {
|
|
dev_err(dev, "not a clock node %s\n", name);
|
|
return -ENODEV;
|
|
}
|
|
|
|
of_property_read_string(np, "clock-output-names", &name);
|
|
parent_name = of_clk_get_parent_name(np, 0);
|
|
clk = icst_clk_setup(NULL, desc, name, parent_name, map,
|
|
ICST_INTEGRATOR_IM_PD1);
|
|
if (!IS_ERR(clk)) {
|
|
of_clk_add_provider(np, of_clk_src_simple_get, clk);
|
|
ret = 0;
|
|
} else {
|
|
dev_err(dev, "error setting up IM-PD1 ICST clock\n");
|
|
ret = PTR_ERR(clk);
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static int integrator_impd1_clk_probe(struct platform_device *pdev)
|
|
{
|
|
struct device *dev = &pdev->dev;
|
|
struct device_node *np = dev->of_node;
|
|
struct device_node *child;
|
|
int ret = 0;
|
|
|
|
for_each_available_child_of_node(np, child) {
|
|
ret = integrator_impd1_clk_spawn(dev, np, child);
|
|
if (ret)
|
|
break;
|
|
}
|
|
|
|
return ret;
|
|
}
|
|
|
|
static const struct of_device_id impd1_syscon_match[] = {
|
|
{ .compatible = "arm,im-pd1-syscon", },
|
|
{}
|
|
};
|
|
MODULE_DEVICE_TABLE(of, impd1_syscon_match);
|
|
|
|
static struct platform_driver impd1_clk_driver = {
|
|
.driver = {
|
|
.name = "impd1-clk",
|
|
.of_match_table = impd1_syscon_match,
|
|
},
|
|
.probe = integrator_impd1_clk_probe,
|
|
};
|
|
builtin_platform_driver(impd1_clk_driver);
|
|
|
|
MODULE_AUTHOR("Linus Walleij <linusw@kernel.org>");
|
|
MODULE_DESCRIPTION("Arm IM-PD1 module clock driver");
|
|
MODULE_LICENSE("GPL v2");
|