aboutsummaryrefslogtreecommitdiffstats
path: root/drivers/rpmsg
diff options
context:
space:
mode:
authorGirish S Ghongdemath <girishsg@ti.com>2011-06-30 13:16:50 -0500
committerIliyan Malchev <malchev@google.com>2011-07-07 11:34:40 -0700
commit83389581850c416b184c6153c8ec61d26bd71592 (patch)
tree98034d0eb6cb787b3f63e65392535de9ad6b56c2 /drivers/rpmsg
parent550c45ebbcc51ccb332c709c02ea76a2cb1f2d7f (diff)
downloadkernel_samsung_tuna-83389581850c416b184c6153c8ec61d26bd71592.zip
kernel_samsung_tuna-83389581850c416b184c6153c8ec61d26bd71592.tar.gz
kernel_samsung_tuna-83389581850c416b184c6153c8ec61d26bd71592.tar.bz2
(TEMP) omap4: rpmsg_omx: Request L3 bandwidth and latency on core
This is temporary fix to latency on CORE. This should go into proper code path which will need a REVISIT. Reported-by: Sundar Raman <sunds@ti.com> Signed-off-by: Girish S G <girishsg@ti.com> Signed-off-by: Iliyan Malchev <malchev@google.com>
Diffstat (limited to 'drivers/rpmsg')
-rw-r--r--drivers/rpmsg/rpmsg_omx.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/drivers/rpmsg/rpmsg_omx.c b/drivers/rpmsg/rpmsg_omx.c
index 4e1eec7..75fd315 100644
--- a/drivers/rpmsg/rpmsg_omx.c
+++ b/drivers/rpmsg/rpmsg_omx.c
@@ -34,6 +34,7 @@
#include <linux/sched.h>
#include <linux/rpmsg.h>
#include <linux/rpmsg_omx.h>
+#include <linux/pm_qos_params.h>
#include <mach/tiler.h>
@@ -52,6 +53,7 @@ struct rpmsg_omx_service {
struct device *dev;
struct rpmsg_channel *rpdev;
int minor;
+ struct pm_qos_request_list *pm_qos;
};
struct rpmsg_omx_instance {
@@ -296,6 +298,9 @@ static int rpmsg_omx_open(struct inode *inode, struct file *filp)
dev_info(omxserv->dev, "local addr assigned: 0x%x\n", omx->ept->addr);
+ /* Request for CORE latency. REVISIT: Move to proper code path */
+ pm_qos_add_request(omxserv->pm_qos, PM_QOS_CPU_DMA_LATENCY, 400);
+
return 0;
}
@@ -309,6 +314,10 @@ static int rpmsg_omx_release(struct inode *inode, struct file *filp)
int use, ret;
/* todo: release resources here */
+ if (omxserv->pm_qos) {
+ pm_qos_remove_request(omxserv->pm_qos);
+ kfree(omxserv->pm_qos);
+ }
/* send a disconnect msg with the OMX instance addr */
hdr->type = OMX_DISCONNECT;
@@ -503,6 +512,12 @@ static int rpmsg_omx_probe(struct rpmsg_channel *rpdev)
goto clean_cdev;
}
+ omxserv->pm_qos = kzalloc(sizeof(struct pm_qos_request_list),
+ GFP_KERNEL);
+ if (!omxserv->pm_qos) {
+ goto clean_cdev;
+ }
+
dev_set_drvdata(&rpdev->dev, omxserv);
dev_info(omxserv->dev, "new OMX connection srv channel: %u -> %u!\n",