Merge "clk: msm: Add rpm controlled clock support for virtual clock"

This commit is contained in:
Linux Build Service Account 2018-05-17 03:38:41 -07:00 committed by Gerrit - the friendly Code Review server
commit 8ca800b9eb
4 changed files with 41 additions and 7 deletions

View file

@ -15,6 +15,7 @@
#include <linux/platform_device.h> #include <linux/platform_device.h>
#include <linux/of.h> #include <linux/of.h>
#include <dt-bindings/clock/msm-clocks-8996.h> #include <dt-bindings/clock/msm-clocks-8996.h>
#include "virtclk-front.h"
#include "virt-reset-front.h" #include "virt-reset-front.h"
static struct virtclk_front gcc_blsp1_ahb_clk = { static struct virtclk_front gcc_blsp1_ahb_clk = {
@ -498,6 +499,33 @@ static struct virtclk_front gcc_mss_mnoc_bimc_axi_clk = {
}, },
}; };
static struct virtclk_front ipa_clk = {
.c = {
.dbg_name = "ipa",
.ops = &virtclk_front_ops,
CLK_INIT(ipa_clk.c),
},
.flag = CLOCK_FLAG_NODE_TYPE_REMOTE,
};
static struct virtclk_front pnoc_clk = {
.c = {
.dbg_name = "pnoc",
.ops = &virtclk_front_ops,
CLK_INIT(pnoc_clk.c),
},
.flag = CLOCK_FLAG_NODE_TYPE_REMOTE,
};
static struct virtclk_front qdss_clk = {
.c = {
.dbg_name = "qdss",
.ops = &virtclk_front_ops,
CLK_INIT(qdss_clk.c),
},
.flag = CLOCK_FLAG_NODE_TYPE_REMOTE,
};
static struct clk_lookup msm_clocks_8996[] = { static struct clk_lookup msm_clocks_8996[] = {
CLK_LIST(gcc_blsp1_ahb_clk), CLK_LIST(gcc_blsp1_ahb_clk),
CLK_LIST(gcc_blsp1_qup1_spi_apps_clk), CLK_LIST(gcc_blsp1_qup1_spi_apps_clk),
@ -559,6 +587,9 @@ static struct clk_lookup msm_clocks_8996[] = {
CLK_LIST(gpll0_out_msscc), CLK_LIST(gpll0_out_msscc),
CLK_LIST(gcc_mss_snoc_axi_clk), CLK_LIST(gcc_mss_snoc_axi_clk),
CLK_LIST(gcc_mss_mnoc_bimc_axi_clk), CLK_LIST(gcc_mss_mnoc_bimc_axi_clk),
CLK_LIST(ipa_clk),
CLK_LIST(pnoc_clk),
CLK_LIST(qdss_clk),
}; };
static struct virt_reset_map msm_resets_8996[] = { static struct virt_reset_map msm_resets_8996[] = {

View file

@ -62,7 +62,7 @@ static int virtclk_front_get_id(struct clk *clk)
if (v->id) if (v->id)
return ret; return ret;
msg.header.cmd = CLK_MSG_GETID; msg.header.cmd = CLK_MSG_GETID | v->flag;
msg.header.len = sizeof(msg); msg.header.len = sizeof(msg);
strlcpy(msg.name, clk->dbg_name, sizeof(msg.name)); strlcpy(msg.name, clk->dbg_name, sizeof(msg.name));
@ -119,7 +119,7 @@ static int virtclk_front_prepare(struct clk *clk)
return ret; return ret;
msg.clk_id = v->id; msg.clk_id = v->id;
msg.cmd = CLK_MSG_ENABLE; msg.cmd = CLK_MSG_ENABLE | v->flag;
msg.len = sizeof(struct clk_msg_header); msg.len = sizeof(struct clk_msg_header);
rt_mutex_lock(&virtclk_front_ctx.lock); rt_mutex_lock(&virtclk_front_ctx.lock);
@ -173,7 +173,7 @@ static void virtclk_front_unprepare(struct clk *clk)
return; return;
msg.clk_id = v->id; msg.clk_id = v->id;
msg.cmd = CLK_MSG_DISABLE; msg.cmd = CLK_MSG_DISABLE | v->flag;
msg.len = sizeof(struct clk_msg_header); msg.len = sizeof(struct clk_msg_header);
rt_mutex_lock(&virtclk_front_ctx.lock); rt_mutex_lock(&virtclk_front_ctx.lock);
@ -224,7 +224,7 @@ static int virtclk_front_reset(struct clk *clk, enum clk_reset_action action)
return ret; return ret;
msg.header.clk_id = v->id; msg.header.clk_id = v->id;
msg.header.cmd = CLK_MSG_RESET; msg.header.cmd = CLK_MSG_RESET | v->flag;
msg.header.len = sizeof(struct clk_msg_header); msg.header.len = sizeof(struct clk_msg_header);
msg.reset = action; msg.reset = action;
@ -279,7 +279,7 @@ static int virtclk_front_set_rate(struct clk *clk, unsigned long rate)
return ret; return ret;
msg.header.clk_id = v->id; msg.header.clk_id = v->id;
msg.header.cmd = CLK_MSG_SETFREQ; msg.header.cmd = CLK_MSG_SETFREQ | v->flag;
msg.header.len = sizeof(msg); msg.header.len = sizeof(msg);
msg.freq = (u32)rate; msg.freq = (u32)rate;
@ -352,7 +352,7 @@ static unsigned long virtclk_front_get_rate(struct clk *clk)
return 0; return 0;
msg.clk_id = v->id; msg.clk_id = v->id;
msg.cmd = CLK_MSG_GETFREQ; msg.cmd = CLK_MSG_GETFREQ | v->flag;
msg.len = sizeof(msg); msg.len = sizeof(msg);
rt_mutex_lock(&virtclk_front_ctx.lock); rt_mutex_lock(&virtclk_front_ctx.lock);

View file

@ -23,6 +23,8 @@ enum virtclk_cmd {
CLK_MSG_MAX CLK_MSG_MAX
}; };
#define CLOCK_FLAG_NODE_TYPE_REMOTE 0xff00
struct clk_msg_header { struct clk_msg_header {
u32 cmd; u32 cmd;
u32 len; u32 len;

View file

@ -1,5 +1,5 @@
/* /*
* Copyright (c) 2013-2017, The Linux Foundation. All rights reserved. * Copyright (c) 2013-2018, The Linux Foundation. All rights reserved.
* *
* This program is free software; you can redistribute it and/or modify * This program is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License version 2 and * it under the terms of the GNU General Public License version 2 and
@ -311,6 +311,7 @@ extern struct clk_ops clk_ops_mux_div_clk;
struct virtclk_front { struct virtclk_front {
int id; int id;
struct clk c; struct clk c;
u32 flag;
}; };
extern struct clk_ops virtclk_front_ops; extern struct clk_ops virtclk_front_ops;