Loading drivers/soc/qcom/rpmh-internal.h +3 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. */ Loading Loading @@ -95,6 +95,7 @@ struct rpmh_ctrlr { * @lock: synchronize state of the controller * @client: handle to the DRV's client. * @irq: IRQ at gic * @ipc_log_ctx IPC logger handle */ struct rsc_drv { const char *name; Loading @@ -108,6 +109,7 @@ struct rsc_drv { spinlock_t lock; struct rpmh_ctrlr client; int irq; void *ipc_log_ctx; }; extern bool rpmh_standalone; Loading drivers/soc/qcom/rpmh-rsc.c +20 −3 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #include <linux/delay.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/ipc_logging.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/of.h> Loading @@ -27,6 +28,8 @@ #define CREATE_TRACE_POINTS #include "trace-rpmh.h" #define RSC_DRV_IPC_LOG_SIZE 2 #define RSC_DRV_TCS_OFFSET 672 #define RSC_DRV_CMD_OFFSET 20 Loading Loading @@ -236,6 +239,7 @@ static void __tcs_trigger(struct rsc_drv *drv, int tcs_id, bool trigger) write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable); enable |= TCS_AMC_MODE_TRIGGER; write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable); ipc_log_string(drv->ipc_log_ctx, "TCS trigger: m=%d", tcs_id); } } Loading Loading @@ -287,6 +291,8 @@ static irqreturn_t tcs_tx_done(int irq, void *p) } trace_rpmh_tx_done(drv, i, req, err); ipc_log_string(drv->ipc_log_ctx, "IRQ response: m=%d err=%d", i, err); /* * if wake tcs was re-purposed for sending active Loading Loading @@ -341,6 +347,10 @@ static void __tcs_buffer_write(struct rsc_drv *drv, int tcs_id, int cmd_id, write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr); write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data); trace_rpmh_send_msg(drv, tcs_id, j, msgid, cmd); ipc_log_string(drv->ipc_log_ctx, "TCS write: m=%d n=%d msgid=%#x addr=%#x data=%#x wait=%d", tcs_id, j, msgid, cmd->addr, cmd->data, cmd->wait); } write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete); Loading Loading @@ -610,15 +620,19 @@ int rpmh_rsc_write_pdc_data(struct rsc_drv *drv, const struct tcs_request *msg) { int i; void __iomem *addr = drv->base + RSC_PDC_DRV_DATA; struct tcs_cmd *cmd; if (!msg || !msg->cmds || msg->num_cmds != RSC_PDC_DATA_SIZE) return -EINVAL; for (i = 0; i < msg->num_cmds; i++) { cmd = &msg->cmds[i]; /* Only data is write capable */ writel_relaxed(msg->cmds[i].data, addr); trace_rpmh_send_msg(drv, RSC_PDC_DRV_DATA, i, 0, &msg->cmds[i]); writel_relaxed(cmd->data, addr); trace_rpmh_send_msg(drv, RSC_PDC_DRV_DATA, i, 0, cmd); ipc_log_string(drv->ipc_log_ctx, "PDC write: n=%d addr=%#x data=%x", i, cmd->addr, cmd->data); addr += RSC_PDC_DATA_OFFSET; } Loading Loading @@ -877,6 +891,9 @@ static int rpmh_rsc_probe(struct platform_device *pdev) INIT_LIST_HEAD(&drv->client.cache); INIT_LIST_HEAD(&drv->client.batch_cache); drv->ipc_log_ctx = ipc_log_context_create(RSC_DRV_IPC_LOG_SIZE, drv->name, 0); dev_set_drvdata(&pdev->dev, drv); __rsc_drv[__rsc_count++] = drv; Loading Loading
drivers/soc/qcom/rpmh-internal.h +3 −1 Original line number Diff line number Diff line /* SPDX-License-Identifier: GPL-2.0 */ /* * Copyright (c) 2016-2018, The Linux Foundation. All rights reserved. * Copyright (c) 2016-2019, The Linux Foundation. All rights reserved. */ Loading Loading @@ -95,6 +95,7 @@ struct rpmh_ctrlr { * @lock: synchronize state of the controller * @client: handle to the DRV's client. * @irq: IRQ at gic * @ipc_log_ctx IPC logger handle */ struct rsc_drv { const char *name; Loading @@ -108,6 +109,7 @@ struct rsc_drv { spinlock_t lock; struct rpmh_ctrlr client; int irq; void *ipc_log_ctx; }; extern bool rpmh_standalone; Loading
drivers/soc/qcom/rpmh-rsc.c +20 −3 Original line number Diff line number Diff line Loading @@ -9,6 +9,7 @@ #include <linux/delay.h> #include <linux/interrupt.h> #include <linux/io.h> #include <linux/ipc_logging.h> #include <linux/kernel.h> #include <linux/list.h> #include <linux/of.h> Loading @@ -27,6 +28,8 @@ #define CREATE_TRACE_POINTS #include "trace-rpmh.h" #define RSC_DRV_IPC_LOG_SIZE 2 #define RSC_DRV_TCS_OFFSET 672 #define RSC_DRV_CMD_OFFSET 20 Loading Loading @@ -236,6 +239,7 @@ static void __tcs_trigger(struct rsc_drv *drv, int tcs_id, bool trigger) write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable); enable |= TCS_AMC_MODE_TRIGGER; write_tcs_reg_sync(drv, RSC_DRV_CONTROL, tcs_id, enable); ipc_log_string(drv->ipc_log_ctx, "TCS trigger: m=%d", tcs_id); } } Loading Loading @@ -287,6 +291,8 @@ static irqreturn_t tcs_tx_done(int irq, void *p) } trace_rpmh_tx_done(drv, i, req, err); ipc_log_string(drv->ipc_log_ctx, "IRQ response: m=%d err=%d", i, err); /* * if wake tcs was re-purposed for sending active Loading Loading @@ -341,6 +347,10 @@ static void __tcs_buffer_write(struct rsc_drv *drv, int tcs_id, int cmd_id, write_tcs_cmd(drv, RSC_DRV_CMD_ADDR, tcs_id, j, cmd->addr); write_tcs_cmd(drv, RSC_DRV_CMD_DATA, tcs_id, j, cmd->data); trace_rpmh_send_msg(drv, tcs_id, j, msgid, cmd); ipc_log_string(drv->ipc_log_ctx, "TCS write: m=%d n=%d msgid=%#x addr=%#x data=%#x wait=%d", tcs_id, j, msgid, cmd->addr, cmd->data, cmd->wait); } write_tcs_reg(drv, RSC_DRV_CMD_WAIT_FOR_CMPL, tcs_id, cmd_complete); Loading Loading @@ -610,15 +620,19 @@ int rpmh_rsc_write_pdc_data(struct rsc_drv *drv, const struct tcs_request *msg) { int i; void __iomem *addr = drv->base + RSC_PDC_DRV_DATA; struct tcs_cmd *cmd; if (!msg || !msg->cmds || msg->num_cmds != RSC_PDC_DATA_SIZE) return -EINVAL; for (i = 0; i < msg->num_cmds; i++) { cmd = &msg->cmds[i]; /* Only data is write capable */ writel_relaxed(msg->cmds[i].data, addr); trace_rpmh_send_msg(drv, RSC_PDC_DRV_DATA, i, 0, &msg->cmds[i]); writel_relaxed(cmd->data, addr); trace_rpmh_send_msg(drv, RSC_PDC_DRV_DATA, i, 0, cmd); ipc_log_string(drv->ipc_log_ctx, "PDC write: n=%d addr=%#x data=%x", i, cmd->addr, cmd->data); addr += RSC_PDC_DATA_OFFSET; } Loading Loading @@ -877,6 +891,9 @@ static int rpmh_rsc_probe(struct platform_device *pdev) INIT_LIST_HEAD(&drv->client.cache); INIT_LIST_HEAD(&drv->client.batch_cache); drv->ipc_log_ctx = ipc_log_context_create(RSC_DRV_IPC_LOG_SIZE, drv->name, 0); dev_set_drvdata(&pdev->dev, drv); __rsc_drv[__rsc_count++] = drv; Loading