aboutsummaryrefslogtreecommitdiff
path: root/drivers/soc
diff options
context:
space:
mode:
Diffstat (limited to 'drivers/soc')
-rw-r--r--drivers/soc/amlogic/meson-gx-socinfo.c3
-rw-r--r--drivers/soc/amlogic/meson-mx-socinfo.c2
-rw-r--r--drivers/soc/apple/Kconfig4
-rw-r--r--drivers/soc/apple/Makefile3
-rw-r--r--drivers/soc/apple/rtkit.c20
-rw-r--r--drivers/soc/apple/tunable.c80
-rw-r--r--drivers/soc/aspeed/aspeed-p2a-ctrl.c2
-rw-r--r--drivers/soc/aspeed/aspeed-socinfo.c4
-rw-r--r--drivers/soc/atmel/soc.c2
-rw-r--r--drivers/soc/bcm/brcmstb/common.c2
-rw-r--r--drivers/soc/cirrus/soc-ep93xx.c2
-rw-r--r--drivers/soc/dove/pmu.c17
-rw-r--r--drivers/soc/fsl/dpaa2-console.c2
-rw-r--r--drivers/soc/fsl/dpio/dpio-service.c6
-rw-r--r--drivers/soc/fsl/dpio/qbman-portal.c2
-rw-r--r--drivers/soc/fsl/guts.c14
-rw-r--r--drivers/soc/fsl/qbman/bman.c2
-rw-r--r--drivers/soc/fsl/qbman/qman.c26
-rw-r--r--drivers/soc/fsl/qe/Makefile2
-rw-r--r--drivers/soc/fsl/qe/gpio.c2
-rw-r--r--drivers/soc/fsl/qe/qe_common.c2
-rw-r--r--drivers/soc/fsl/qe/qe_ports_ic.c141
-rw-r--r--drivers/soc/fsl/qe/qmc.c17
-rw-r--r--drivers/soc/fsl/qe/ucc_fast.c2
-rw-r--r--drivers/soc/fsl/qe/ucc_slow.c2
-rw-r--r--drivers/soc/hisilicon/kunpeng_hccs.c10
-rw-r--r--drivers/soc/imx/soc-imx.c2
-rw-r--r--drivers/soc/imx/soc-imx8m.c17
-rw-r--r--drivers/soc/imx/soc-imx9.c50
-rw-r--r--drivers/soc/mediatek/mtk-cmdq-helper.c79
-rw-r--r--drivers/soc/mediatek/mtk-dvfsrc.c364
-rw-r--r--drivers/soc/mediatek/mtk-socinfo.c1
-rw-r--r--drivers/soc/mediatek/mtk-svs.c5
-rw-r--r--drivers/soc/microchip/Kconfig11
-rw-r--r--drivers/soc/microchip/Makefile1
-rw-r--r--drivers/soc/microchip/mpfs-control-scb.c6
-rw-r--r--drivers/soc/microchip/mpfs-irqmux.c181
-rw-r--r--drivers/soc/microchip/mpfs-mss-top-sysreg.c6
-rw-r--r--drivers/soc/microchip/mpfs-sys-controller.c89
-rw-r--r--drivers/soc/nuvoton/wpcm450-soc.c2
-rw-r--r--drivers/soc/qcom/apr.c14
-rw-r--r--drivers/soc/qcom/cmd-db.c7
-rw-r--r--drivers/soc/qcom/llcc-qcom.c395
-rw-r--r--drivers/soc/qcom/mdt_loader.c51
-rw-r--r--drivers/soc/qcom/ocmem.c19
-rw-r--r--drivers/soc/qcom/pdr_interface.c13
-rw-r--r--drivers/soc/qcom/pdr_internal.h5
-rw-r--r--drivers/soc/qcom/pmic_glink.c66
-rw-r--r--drivers/soc/qcom/pmic_glink_altmode.c191
-rw-r--r--drivers/soc/qcom/qcom_aoss.c2
-rw-r--r--drivers/soc/qcom/qcom_pd_mapper.c41
-rw-r--r--drivers/soc/qcom/qcom_pdr_msg.c2
-rw-r--r--drivers/soc/qcom/qmi_encdec.c137
-rw-r--r--drivers/soc/qcom/qmi_interface.c6
-rw-r--r--drivers/soc/qcom/rmtfs_mem.c2
-rw-r--r--drivers/soc/qcom/rpmh.c4
-rw-r--r--drivers/soc/qcom/smem.c9
-rw-r--r--drivers/soc/qcom/smem_state.c2
-rw-r--r--drivers/soc/qcom/smp2p.c103
-rw-r--r--drivers/soc/qcom/socinfo.c11
-rw-r--r--drivers/soc/qcom/ubwc_config.c31
-rw-r--r--drivers/soc/qcom/wcnss_ctrl.c17
-rw-r--r--drivers/soc/renesas/Kconfig19
-rw-r--r--drivers/soc/renesas/Makefile2
-rw-r--r--drivers/soc/renesas/r9a08g046-sysc.c91
-rw-r--r--drivers/soc/renesas/r9a09g047-sys.c2
-rw-r--r--drivers/soc/renesas/r9a09g056-sys.c2
-rw-r--r--drivers/soc/renesas/r9a09g057-sys.c2
-rw-r--r--drivers/soc/renesas/renesas-soc.c2
-rw-r--r--drivers/soc/renesas/rz-sysc.c5
-rw-r--r--drivers/soc/renesas/rz-sysc.h1
-rw-r--r--drivers/soc/renesas/rzn1_irqmux.c127
-rw-r--r--drivers/soc/rockchip/grf.c58
-rw-r--r--drivers/soc/samsung/exynos-chipid.c133
-rw-r--r--drivers/soc/sunxi/sunxi_mbus.c2
-rw-r--r--drivers/soc/tegra/Kconfig20
-rw-r--r--drivers/soc/tegra/cbb/tegra234-cbb.c169
-rw-r--r--drivers/soc/tegra/common.c5
-rw-r--r--drivers/soc/tegra/fuse/fuse-tegra.c2
-rw-r--r--drivers/soc/tegra/pmc.c1093
-rw-r--r--drivers/soc/ti/Kconfig2
-rw-r--r--drivers/soc/ti/k3-socinfo.c4
-rw-r--r--drivers/soc/ti/knav_dma.c21
-rw-r--r--drivers/soc/ti/knav_qmss_queue.c25
-rw-r--r--drivers/soc/ti/pruss.c6
-rw-r--r--drivers/soc/ux500/ux500-soc-id.c2
-rw-r--r--drivers/soc/versatile/soc-integrator.c2
-rw-r--r--drivers/soc/xilinx/xlnx_event_manager.c10
-rw-r--r--drivers/soc/xilinx/zynqmp_power.c6
89 files changed, 3265 insertions, 861 deletions
diff --git a/drivers/soc/amlogic/meson-gx-socinfo.c b/drivers/soc/amlogic/meson-gx-socinfo.c
index 2a54ca43cd13..c20f685e56f9 100644
--- a/drivers/soc/amlogic/meson-gx-socinfo.c
+++ b/drivers/soc/amlogic/meson-gx-socinfo.c
@@ -85,6 +85,7 @@ static const struct meson_gx_package_id {
{ "S905D3", 0x2b, 0x30, 0x3f },
{ "A113L", 0x2c, 0x0, 0xf8 },
{ "S805X2", 0x37, 0x2, 0xf },
+ { "S905Y4", 0x37, 0x3, 0xf },
{ "C308L", 0x3d, 0x1, 0xf },
{ "A311D2", 0x36, 0x1, 0xf },
{ "A113X2", 0x3c, 0x1, 0xf },
@@ -187,7 +188,7 @@ static int __init meson_gx_socinfo_init(void)
return -EINVAL;
}
- soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+ soc_dev_attr = kzalloc_obj(*soc_dev_attr);
if (!soc_dev_attr)
return -ENODEV;
diff --git a/drivers/soc/amlogic/meson-mx-socinfo.c b/drivers/soc/amlogic/meson-mx-socinfo.c
index 92125dd65f33..e1a7795a2733 100644
--- a/drivers/soc/amlogic/meson-mx-socinfo.c
+++ b/drivers/soc/amlogic/meson-mx-socinfo.c
@@ -146,7 +146,7 @@ static int __init meson_mx_socinfo_init(void)
if (ret < 0)
return ret;
- soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+ soc_dev_attr = kzalloc_obj(*soc_dev_attr);
if (!soc_dev_attr)
return -ENODEV;
diff --git a/drivers/soc/apple/Kconfig b/drivers/soc/apple/Kconfig
index ad6736889231..d0ff32182a2b 100644
--- a/drivers/soc/apple/Kconfig
+++ b/drivers/soc/apple/Kconfig
@@ -38,6 +38,10 @@ config APPLE_SART
Say 'y' here if you have an Apple SoC.
+config APPLE_TUNABLE
+ tristate
+ depends on ARCH_APPLE || COMPILE_TEST
+
endmenu
endif
diff --git a/drivers/soc/apple/Makefile b/drivers/soc/apple/Makefile
index 4d9ab8f3037b..0b85ab61aefe 100644
--- a/drivers/soc/apple/Makefile
+++ b/drivers/soc/apple/Makefile
@@ -8,3 +8,6 @@ apple-rtkit-y = rtkit.o rtkit-crashlog.o
obj-$(CONFIG_APPLE_SART) += apple-sart.o
apple-sart-y = sart.o
+
+obj-$(CONFIG_APPLE_TUNABLE) += apple-tunable.o
+apple-tunable-y = tunable.o
diff --git a/drivers/soc/apple/rtkit.c b/drivers/soc/apple/rtkit.c
index b8d4da147d23..a3fdac8f6f06 100644
--- a/drivers/soc/apple/rtkit.c
+++ b/drivers/soc/apple/rtkit.c
@@ -590,7 +590,7 @@ static void apple_rtkit_rx(struct apple_mbox *mbox, struct apple_mbox_msg msg,
rtk->ops->recv_message_early(rtk->cookie, ep, msg.msg0))
return;
- work = kzalloc(sizeof(*work), GFP_ATOMIC);
+ work = kzalloc_obj(*work, GFP_ATOMIC);
if (!work)
return;
@@ -667,7 +667,7 @@ struct apple_rtkit *apple_rtkit_init(struct device *dev, void *cookie,
if (!ops)
return ERR_PTR(-EINVAL);
- rtk = kzalloc(sizeof(*rtk), GFP_KERNEL);
+ rtk = kzalloc_obj(*rtk);
if (!rtk)
return ERR_PTR(-ENOMEM);
@@ -851,6 +851,22 @@ int apple_rtkit_shutdown(struct apple_rtkit *rtk)
}
EXPORT_SYMBOL_GPL(apple_rtkit_shutdown);
+int apple_rtkit_poweroff(struct apple_rtkit *rtk)
+{
+ int ret;
+
+ ret = apple_rtkit_set_ap_power_state(rtk, APPLE_RTKIT_PWR_STATE_OFF);
+ if (ret)
+ return ret;
+
+ ret = apple_rtkit_set_iop_power_state(rtk, APPLE_RTKIT_PWR_STATE_OFF);
+ if (ret)
+ return ret;
+
+ return apple_rtkit_reinit(rtk);
+}
+EXPORT_SYMBOL_GPL(apple_rtkit_poweroff);
+
int apple_rtkit_idle(struct apple_rtkit *rtk)
{
int ret;
diff --git a/drivers/soc/apple/tunable.c b/drivers/soc/apple/tunable.c
new file mode 100644
index 000000000000..659323839171
--- /dev/null
+++ b/drivers/soc/apple/tunable.c
@@ -0,0 +1,80 @@
+// SPDX-License-Identifier: GPL-2.0-only OR MIT
+/*
+ * Apple Silicon hardware tunable support
+ *
+ * Each tunable is a list with each entry containing a offset into the MMIO
+ * region, a mask of bits to be cleared and a set of bits to be set. These
+ * tunables are passed along by the previous boot stages and vary from device
+ * to device such that they cannot be hardcoded in the individual drivers.
+ *
+ * Copyright (C) The Asahi Linux Contributors
+ */
+
+#include <linux/io.h>
+#include <linux/module.h>
+#include <linux/of.h>
+#include <linux/overflow.h>
+#include <linux/soc/apple/tunable.h>
+
+struct apple_tunable *devm_apple_tunable_parse(struct device *dev,
+ struct device_node *np,
+ const char *name,
+ struct resource *res)
+{
+ struct apple_tunable *tunable;
+ struct property *prop;
+ const __be32 *p;
+ size_t sz;
+ int i;
+
+ if (resource_size(res) < 4)
+ return ERR_PTR(-EINVAL);
+
+ prop = of_find_property(np, name, NULL);
+ if (!prop)
+ return ERR_PTR(-ENOENT);
+
+ if (prop->length % (3 * sizeof(u32)))
+ return ERR_PTR(-EINVAL);
+ sz = prop->length / (3 * sizeof(u32));
+
+ tunable = devm_kzalloc(dev, struct_size(tunable, values, sz), GFP_KERNEL);
+ if (!tunable)
+ return ERR_PTR(-ENOMEM);
+ tunable->sz = sz;
+
+ for (i = 0, p = NULL; i < tunable->sz; ++i) {
+ p = of_prop_next_u32(prop, p, &tunable->values[i].offset);
+ p = of_prop_next_u32(prop, p, &tunable->values[i].mask);
+ p = of_prop_next_u32(prop, p, &tunable->values[i].value);
+
+ /* Sanity checks to catch bugs in our bootloader */
+ if (tunable->values[i].offset % 4)
+ return ERR_PTR(-EINVAL);
+ if (tunable->values[i].offset > (resource_size(res) - 4))
+ return ERR_PTR(-EINVAL);
+ }
+
+ return tunable;
+}
+EXPORT_SYMBOL(devm_apple_tunable_parse);
+
+void apple_tunable_apply(void __iomem *regs, struct apple_tunable *tunable)
+{
+ size_t i;
+
+ for (i = 0; i < tunable->sz; ++i) {
+ u32 val, old_val;
+
+ old_val = readl(regs + tunable->values[i].offset);
+ val = old_val & ~tunable->values[i].mask;
+ val |= tunable->values[i].value;
+ if (val != old_val)
+ writel(val, regs + tunable->values[i].offset);
+ }
+}
+EXPORT_SYMBOL(apple_tunable_apply);
+
+MODULE_LICENSE("Dual MIT/GPL");
+MODULE_AUTHOR("Sven Peter <sven@kernel.org>");
+MODULE_DESCRIPTION("Apple Silicon hardware tunable support");
diff --git a/drivers/soc/aspeed/aspeed-p2a-ctrl.c b/drivers/soc/aspeed/aspeed-p2a-ctrl.c
index 3be2e1b1085b..d88abc5f195b 100644
--- a/drivers/soc/aspeed/aspeed-p2a-ctrl.c
+++ b/drivers/soc/aspeed/aspeed-p2a-ctrl.c
@@ -238,7 +238,7 @@ static int aspeed_p2a_open(struct inode *inode, struct file *file)
{
struct aspeed_p2a_user *priv;
- priv = kmalloc(sizeof(*priv), GFP_KERNEL);
+ priv = kmalloc_obj(*priv);
if (!priv)
return -ENOMEM;
diff --git a/drivers/soc/aspeed/aspeed-socinfo.c b/drivers/soc/aspeed/aspeed-socinfo.c
index 67e9ac3d08ec..fb8fde94b651 100644
--- a/drivers/soc/aspeed/aspeed-socinfo.c
+++ b/drivers/soc/aspeed/aspeed-socinfo.c
@@ -39,7 +39,7 @@ static const char *siliconid_to_name(u32 siliconid)
unsigned int i;
for (i = 0 ; i < ARRAY_SIZE(rev_table) ; ++i) {
- if (rev_table[i].id == id)
+ if ((rev_table[i].id & 0xff00ffff) == id)
return rev_table[i].name;
}
@@ -113,7 +113,7 @@ static int __init aspeed_socinfo_init(void)
}
of_node_put(np);
- attrs = kzalloc(sizeof(*attrs), GFP_KERNEL);
+ attrs = kzalloc_obj(*attrs);
if (!attrs)
return -ENODEV;
diff --git a/drivers/soc/atmel/soc.c b/drivers/soc/atmel/soc.c
index 09347bccdb1d..d89f9dcade7d 100644
--- a/drivers/soc/atmel/soc.c
+++ b/drivers/soc/atmel/soc.c
@@ -368,7 +368,7 @@ struct soc_device * __init at91_soc_init(const struct at91_soc *socs)
return NULL;
}
- soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+ soc_dev_attr = kzalloc_obj(*soc_dev_attr);
if (!soc_dev_attr)
return NULL;
diff --git a/drivers/soc/bcm/brcmstb/common.c b/drivers/soc/bcm/brcmstb/common.c
index 2a010881f4b6..2da79bd42930 100644
--- a/drivers/soc/bcm/brcmstb/common.c
+++ b/drivers/soc/bcm/brcmstb/common.c
@@ -82,7 +82,7 @@ static int __init brcmstb_soc_device_init(void)
if (!sun_top_ctrl)
return ret;
- soc_dev_attr = kzalloc(sizeof(*soc_dev_attr), GFP_KERNEL);
+ soc_dev_attr = kzalloc_obj(*soc_dev_attr);
if (!soc_dev_attr) {
ret = -ENOMEM;
goto out;
diff --git a/drivers/soc/cirrus/soc-ep93xx.c b/drivers/soc/cirrus/soc-ep93xx.c
index 3e79b3b13aef..d55cf28ed726 100644
--- a/drivers/soc/cirrus/soc-ep93xx.c
+++ b/drivers/soc/cirrus/soc-ep93xx.c
@@ -92,7 +92,7 @@ static struct auxiliary_device __init *ep93xx_adev_alloc(struct device *parent,
struct auxiliary_device *adev;
int ret;
- rdev = kzalloc(sizeof(*rdev), GFP_KERNEL);
+ rdev = kzalloc_obj(*rdev);
if (!rdev)
return ERR_PTR(-ENOMEM);
diff --git a/drivers/soc/dove/pmu.c b/drivers/soc/dove/pmu.c
index 7bbd3f940e4d..611caaeed8fc 100644
--- a/drivers/soc/dove/pmu.c
+++ b/drivers/soc/dove/pmu.c
@@ -311,7 +311,7 @@ int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata)
struct pmu_data *pmu;
int ret;
- pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+ pmu = kzalloc_obj(*pmu);
if (!pmu)
return -ENOMEM;
@@ -324,7 +324,7 @@ int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata)
domain_initdata++) {
struct pmu_domain *domain;
- domain = kzalloc(sizeof(*domain), GFP_KERNEL);
+ domain = kzalloc_obj(*domain);
if (domain) {
domain->pmu = pmu;
domain->pwr_mask = domain_initdata->pwr_mask;
@@ -371,7 +371,7 @@ int __init dove_init_pmu_legacy(const struct dove_pmu_initdata *initdata)
*/
int __init dove_init_pmu(void)
{
- struct device_node *np_pmu, *domains_node, *np;
+ struct device_node *np_pmu, *domains_node;
struct pmu_data *pmu;
int ret, parent_irq;
@@ -386,7 +386,7 @@ int __init dove_init_pmu(void)
return 0;
}
- pmu = kzalloc(sizeof(*pmu), GFP_KERNEL);
+ pmu = kzalloc_obj(*pmu);
if (!pmu)
return -ENOMEM;
@@ -404,21 +404,18 @@ int __init dove_init_pmu(void)
pmu_reset_init(pmu);
- for_each_available_child_of_node(domains_node, np) {
+ for_each_available_child_of_node_scoped(domains_node, np) {
struct of_phandle_args args;
struct pmu_domain *domain;
- domain = kzalloc(sizeof(*domain), GFP_KERNEL);
- if (!domain) {
- of_node_put(np);
+ domain = kzalloc_obj(*domain);
+ if (!domain)
break;
- }
domain->pmu = pmu;
domain->base.name = kasprintf(GFP_KERNEL, "%pOFn", np);
if (!domain->base.name) {
kfree(domain);
- of_node_put(np);
break;
}
diff --git a/drivers/soc/fsl/dpaa2-console.c b/drivers/soc/fsl/dpaa2-console.c
index 6310f54e68a2..7f2ffe38dc07 100644
--- a/drivers/soc/fsl/dpaa2-console.c
+++ b/drivers/soc/fsl/dpaa2-console.c
@@ -111,7 +111,7 @@ static int dpaa2_generic_console_open(struct inode *node, struct file *fp,
u64 base_addr;
int err;
- cd = kmalloc(sizeof(*cd), GFP_KERNEL);
+ cd = kmalloc_obj(*cd);
if (!cd)
return -ENOMEM;
diff --git a/drivers/soc/fsl/dpio/dpio-service.c b/drivers/soc/fsl/dpio/dpio-service.c
index 0b60ed16297c..317ca50b0c2b 100644
--- a/drivers/soc/fsl/dpio/dpio-service.c
+++ b/drivers/soc/fsl/dpio/dpio-service.c
@@ -133,7 +133,7 @@ static void dpaa2_io_dim_work(struct work_struct *w)
struct dpaa2_io *dpaa2_io_create(const struct dpaa2_io_desc *desc,
struct device *dev)
{
- struct dpaa2_io *obj = kmalloc(sizeof(*obj), GFP_KERNEL);
+ struct dpaa2_io *obj = kmalloc_obj(*obj);
u32 qman_256_cycles_per_ns;
if (!obj)
@@ -523,7 +523,7 @@ int dpaa2_io_service_enqueue_multiple_desc_fq(struct dpaa2_io *d,
struct qbman_eq_desc *ed;
int i, ret;
- ed = kcalloc(32, sizeof(struct qbman_eq_desc), GFP_KERNEL);
+ ed = kzalloc_objs(struct qbman_eq_desc, 32);
if (!ed)
return -ENOMEM;
@@ -658,7 +658,7 @@ struct dpaa2_io_store *dpaa2_io_store_create(unsigned int max_frames,
if (!max_frames || (max_frames > 32))
return NULL;
- ret = kmalloc(sizeof(*ret), GFP_KERNEL);
+ ret = kmalloc_obj(*ret);
if (!ret)
return NULL;
diff --git a/drivers/soc/fsl/dpio/qbman-portal.c b/drivers/soc/fsl/dpio/qbman-portal.c
index 0a3fb6c115f4..278e25d09be2 100644
--- a/