* [PATCH] soc: qcom: llcc: Support chipsets that can write to llcc registers
@ 2020-08-17 8:11 Sai Prakash Ranjan
2020-08-17 12:43 ` kernel test robot
0 siblings, 1 reply; 3+ messages in thread
From: Sai Prakash Ranjan @ 2020-08-17 8:11 UTC (permalink / raw)
To: Andy Gross, Bjorn Andersson, Stephen Boyd
Cc: linux-arm-msm, Douglas Anderson, linux-kernel,
Isaac J. Manjarres, Sai Prakash Ranjan
From: "Isaac J. Manjarres" <isaacm@codeaurora.org>
Older chipsets may not be allowed to configure certain LLCC registers
as that is handled by the secure side software. However, this is not
the case for newer chipsets and they must configure these registers
according to the contents of the SCT table, while keeping in mind that
older targets may not have these capabilities. So add support to allow
such configuration of registers to enable capacity based allocation
and power collapse retention for capable chipsets.
Signed-off-by: Isaac J. Manjarres <isaacm@codeaurora.org>
(sai: use table instead of dt property and minor commit msg change)
Signed-off-by: Sai Prakash Ranjan <saiprakash.ranjan@codeaurora.org>
---
drivers/soc/qcom/llcc-qcom.c | 28 ++++++++++++++++++++++++++++
1 file changed, 28 insertions(+)
diff --git a/drivers/soc/qcom/llcc-qcom.c b/drivers/soc/qcom/llcc-qcom.c
index 429b5a60a1ba..20619d15ecba 100644
--- a/drivers/soc/qcom/llcc-qcom.c
+++ b/drivers/soc/qcom/llcc-qcom.c
@@ -45,6 +45,9 @@
#define LLCC_TRP_ATTR0_CFGn(n) (0x21000 + SZ_8 * n)
#define LLCC_TRP_ATTR1_CFGn(n) (0x21004 + SZ_8 * n)
+#define LLCC_TRP_SCID_DIS_CAP_ALLOC 0x21F00
+#define LLCC_TRP_PCB_ACT 0x21F04
+
#define BANK_OFFSET_STRIDE 0x80000
/**
@@ -318,6 +321,11 @@ size_t llcc_get_slice_size(struct llcc_slice_desc *desc)
}
EXPORT_SYMBOL_GPL(llcc_get_slice_size);
+static const struct of_device_id qcom_llcc_configure_of_match[] = {
+ { .compatible = "qcom,sc7180-llcc" },
+ { }
+};
+
static int qcom_llcc_cfg_program(struct platform_device *pdev)
{
int i;
@@ -327,13 +335,18 @@ static int qcom_llcc_cfg_program(struct platform_device *pdev)
u32 attr0_val;
u32 max_cap_cacheline;
u32 sz;
+ u32 disable_cap_alloc = 0, retain_pc = 0;
int ret = 0;
const struct llcc_slice_config *llcc_table;
struct llcc_slice_desc desc;
+ const struct of_device_id *llcc_configure;
+ const struct device_node *np = dev_of_node(&pdev->dev);
sz = drv_data->cfg_size;
llcc_table = drv_data->cfg;
+ llcc_configure = of_match_node(qcom_llcc_configure_of_match, np);
+
for (i = 0; i < sz; i++) {
attr1_cfg = LLCC_TRP_ATTR1_CFGn(llcc_table[i].slice_id);
attr0_cfg = LLCC_TRP_ATTR0_CFGn(llcc_table[i].slice_id);
@@ -369,6 +382,21 @@ static int qcom_llcc_cfg_program(struct platform_device *pdev)
attr0_val);
if (ret)
return ret;
+
+ if (llcc_configure) {
+ disable_cap_alloc |= llcc_table[i].dis_cap_alloc << llcc_table[i].slice_id;
+ ret = regmap_write(drv_data->bcast_regmap,
+ LLCC_TRP_SCID_DIS_CAP_ALLOC, disable_cap_alloc);
+ if (ret)
+ return ret;
+
+ retain_pc |= llcc_table[i].retain_on_pc << llcc_table[i].slice_id;
+ ret = regmap_write(drv_data->bcast_regmap,
+ LLCC_TRP_PCB_ACT, retain_pc);
+ if (ret)
+ return ret;
+ }
+
if (llcc_table[i].activate_on_init) {
desc.slice_id = llcc_table[i].slice_id;
ret = llcc_slice_activate(&desc);
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a member
of Code Aurora Forum, hosted by The Linux Foundation
^ permalink raw reply related [flat|nested] 3+ messages in thread
* Re: [PATCH] soc: qcom: llcc: Support chipsets that can write to llcc registers
2020-08-17 8:11 [PATCH] soc: qcom: llcc: Support chipsets that can write to llcc registers Sai Prakash Ranjan
@ 2020-08-17 12:43 ` kernel test robot
2020-08-17 14:08 ` Sai Prakash Ranjan
0 siblings, 1 reply; 3+ messages in thread
From: kernel test robot @ 2020-08-17 12:43 UTC (permalink / raw)
To: Sai Prakash Ranjan, Andy Gross, Bjorn Andersson, Stephen Boyd
Cc: kbuild-all, clang-built-linux, linux-arm-msm, Douglas Anderson,
linux-kernel, Isaac J. Manjarres, Sai Prakash Ranjan
[-- Attachment #1: Type: text/plain, Size: 5435 bytes --]
Hi Sai,
Thank you for the patch! Perhaps something to improve:
[auto build test WARNING on linux/master]
[also build test WARNING on linus/master v5.9-rc1 next-20200817]
[cannot apply to agross-msm/qcom/for-next]
[If your patch is applied to the wrong git tree, kindly drop us a note.
And when submitting patch, we suggest to use '--base' as documented in
https://git-scm.com/docs/git-format-patch]
url: https://github.com/0day-ci/linux/commits/Sai-Prakash-Ranjan/soc-qcom-llcc-Support-chipsets-that-can-write-to-llcc-registers/20200817-161342
base: https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git bcf876870b95592b52519ed4aafcf9d95999bc9c
config: mips-randconfig-r006-20200817 (attached as .config)
compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project de71b46a519db014ce906a39f8a0e1b235ef1568)
reproduce (this is a W=1 build):
wget https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross -O ~/bin/make.cross
chmod +x ~/bin/make.cross
# install mips cross compiling tool for clang build
# apt-get install binutils-mips-linux-gnu
# save the attached .config to linux build tree
COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross ARCH=mips
If you fix the issue, kindly add following tag as appropriate
Reported-by: kernel test robot <lkp@intel.com>
All warnings (new ones prefixed by >>):
drivers/soc/qcom/llcc-qcom.c:343:28: warning: unused variable 'np' [-Wunused-variable]
const struct device_node *np = dev_of_node(&pdev->dev);
^
>> drivers/soc/qcom/llcc-qcom.c:324:34: warning: unused variable 'qcom_llcc_configure_of_match' [-Wunused-const-variable]
static const struct of_device_id qcom_llcc_configure_of_match[] = {
^
2 warnings generated.
# https://github.com/0day-ci/linux/commit/69ff7ebbde628483bfe9eacd588984bdae4d6121
git remote add linux-review https://github.com/0day-ci/linux
git fetch --no-tags linux-review Sai-Prakash-Ranjan/soc-qcom-llcc-Support-chipsets-that-can-write-to-llcc-registers/20200817-161342
git checkout 69ff7ebbde628483bfe9eacd588984bdae4d6121
vim +/qcom_llcc_configure_of_match +324 drivers/soc/qcom/llcc-qcom.c
323
> 324 static const struct of_device_id qcom_llcc_configure_of_match[] = {
325 { .compatible = "qcom,sc7180-llcc" },
326 { }
327 };
328
329 static int qcom_llcc_cfg_program(struct platform_device *pdev)
330 {
331 int i;
332 u32 attr1_cfg;
333 u32 attr0_cfg;
334 u32 attr1_val;
335 u32 attr0_val;
336 u32 max_cap_cacheline;
337 u32 sz;
338 u32 disable_cap_alloc = 0, retain_pc = 0;
339 int ret = 0;
340 const struct llcc_slice_config *llcc_table;
341 struct llcc_slice_desc desc;
342 const struct of_device_id *llcc_configure;
> 343 const struct device_node *np = dev_of_node(&pdev->dev);
344
345 sz = drv_data->cfg_size;
346 llcc_table = drv_data->cfg;
347
348 llcc_configure = of_match_node(qcom_llcc_configure_of_match, np);
349
350 for (i = 0; i < sz; i++) {
351 attr1_cfg = LLCC_TRP_ATTR1_CFGn(llcc_table[i].slice_id);
352 attr0_cfg = LLCC_TRP_ATTR0_CFGn(llcc_table[i].slice_id);
353
354 attr1_val = llcc_table[i].cache_mode;
355 attr1_val |= llcc_table[i].probe_target_ways <<
356 ATTR1_PROBE_TARGET_WAYS_SHIFT;
357 attr1_val |= llcc_table[i].fixed_size <<
358 ATTR1_FIXED_SIZE_SHIFT;
359 attr1_val |= llcc_table[i].priority <<
360 ATTR1_PRIORITY_SHIFT;
361
362 max_cap_cacheline = MAX_CAP_TO_BYTES(llcc_table[i].max_cap);
363
364 /* LLCC instances can vary for each target.
365 * The SW writes to broadcast register which gets propagated
366 * to each llcc instace (llcc0,.. llccN).
367 * Since the size of the memory is divided equally amongst the
368 * llcc instances, we need to configure the max cap accordingly.
369 */
370 max_cap_cacheline = max_cap_cacheline / drv_data->num_banks;
371 max_cap_cacheline >>= CACHE_LINE_SIZE_SHIFT;
372 attr1_val |= max_cap_cacheline << ATTR1_MAX_CAP_SHIFT;
373
374 attr0_val = llcc_table[i].res_ways & ATTR0_RES_WAYS_MASK;
375 attr0_val |= llcc_table[i].bonus_ways << ATTR0_BONUS_WAYS_SHIFT;
376
377 ret = regmap_write(drv_data->bcast_regmap, attr1_cfg,
378 attr1_val);
379 if (ret)
380 return ret;
381 ret = regmap_write(drv_data->bcast_regmap, attr0_cfg,
382 attr0_val);
383 if (ret)
384 return ret;
385
386 if (llcc_configure) {
387 disable_cap_alloc |= llcc_table[i].dis_cap_alloc << llcc_table[i].slice_id;
388 ret = regmap_write(drv_data->bcast_regmap,
389 LLCC_TRP_SCID_DIS_CAP_ALLOC, disable_cap_alloc);
390 if (ret)
391 return ret;
392
393 retain_pc |= llcc_table[i].retain_on_pc << llcc_table[i].slice_id;
394 ret = regmap_write(drv_data->bcast_regmap,
395 LLCC_TRP_PCB_ACT, retain_pc);
396 if (ret)
397 return ret;
398 }
399
400 if (llcc_table[i].activate_on_init) {
401 desc.slice_id = llcc_table[i].slice_id;
402 ret = llcc_slice_activate(&desc);
403 }
404 }
405 return ret;
406 }
407
---
0-DAY CI Kernel Test Service, Intel Corporation
https://lists.01.org/hyperkitty/list/kbuild-all@lists.01.org
[-- Attachment #2: .config.gz --]
[-- Type: application/gzip, Size: 27214 bytes --]
^ permalink raw reply [flat|nested] 3+ messages in thread
* Re: [PATCH] soc: qcom: llcc: Support chipsets that can write to llcc registers
2020-08-17 12:43 ` kernel test robot
@ 2020-08-17 14:08 ` Sai Prakash Ranjan
0 siblings, 0 replies; 3+ messages in thread
From: Sai Prakash Ranjan @ 2020-08-17 14:08 UTC (permalink / raw)
To: kernel test robot
Cc: Andy Gross, Bjorn Andersson, Stephen Boyd, kbuild-all,
clang-built-linux, linux-arm-msm, Douglas Anderson, linux-kernel,
Isaac J. Manjarres
On 2020-08-17 18:13, kernel test robot wrote:
> Hi Sai,
>
> Thank you for the patch! Perhaps something to improve:
>
> [auto build test WARNING on linux/master]
> [also build test WARNING on linus/master v5.9-rc1 next-20200817]
> [cannot apply to agross-msm/qcom/for-next]
> [If your patch is applied to the wrong git tree, kindly drop us a note.
> And when submitting patch, we suggest to use '--base' as documented in
> https://git-scm.com/docs/git-format-patch]
>
> url:
> https://github.com/0day-ci/linux/commits/Sai-Prakash-Ranjan/soc-qcom-llcc-Support-chipsets-that-can-write-to-llcc-registers/20200817-161342
> base:
> https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
> bcf876870b95592b52519ed4aafcf9d95999bc9c
> config: mips-randconfig-r006-20200817 (attached as .config)
> compiler: clang version 12.0.0 (https://github.com/llvm/llvm-project
> de71b46a519db014ce906a39f8a0e1b235ef1568)
> reproduce (this is a W=1 build):
> wget
> https://raw.githubusercontent.com/intel/lkp-tests/master/sbin/make.cross
> -O ~/bin/make.cross
> chmod +x ~/bin/make.cross
> # install mips cross compiling tool for clang build
> # apt-get install binutils-mips-linux-gnu
> # save the attached .config to linux build tree
> COMPILER_INSTALL_PATH=$HOME/0day COMPILER=clang make.cross
> ARCH=mips
>
> If you fix the issue, kindly add following tag as appropriate
> Reported-by: kernel test robot <lkp@intel.com>
>
> All warnings (new ones prefixed by >>):
>
> drivers/soc/qcom/llcc-qcom.c:343:28: warning: unused variable 'np'
> [-Wunused-variable]
> const struct device_node *np = dev_of_node(&pdev->dev);
> ^
>>> drivers/soc/qcom/llcc-qcom.c:324:34: warning: unused variable
>>> 'qcom_llcc_configure_of_match' [-Wunused-const-variable]
> static const struct of_device_id qcom_llcc_configure_of_match[] = {
> ^
> 2 warnings generated.
>
Ok, W=1 build and CONFIG_OF=n, so I need __maybe_unused for
qcom_llcc_configure_of_match.
Will add and send v2.
Thanks,
Sai
--
QUALCOMM INDIA, on behalf of Qualcomm Innovation Center, Inc. is a
member
of Code Aurora Forum, hosted by The Linux Foundation
^ permalink raw reply [flat|nested] 3+ messages in thread
end of thread, other threads:[~2020-08-17 14:09 UTC | newest]
Thread overview: 3+ messages (download: mbox.gz / follow: Atom feed)
-- links below jump to the message on this page --
2020-08-17 8:11 [PATCH] soc: qcom: llcc: Support chipsets that can write to llcc registers Sai Prakash Ranjan
2020-08-17 12:43 ` kernel test robot
2020-08-17 14:08 ` Sai Prakash Ranjan
This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).