Linux Audio

Check our new training course

Loading...
Note: File does not exist in v5.4.
 1/*
 2 * Copyright (c) 2012 Samsung Electronics Co., Ltd.
 3 *		http://www.samsung.com/
 4 *
 5 * EXYNOS - PPMU support
 6 *
 7 * This program is free software; you can redistribute it and/or modify
 8 * it under the terms of the GNU General Public License version 2 as
 9 * published by the Free Software Foundation.
10 */
11
12#include <linux/kernel.h>
13#include <linux/types.h>
14#include <linux/io.h>
15
16#include "exynos_ppmu.h"
17
18void exynos_ppmu_reset(void __iomem *ppmu_base)
19{
20	__raw_writel(PPMU_CYCLE_RESET | PPMU_COUNTER_RESET, ppmu_base);
21	__raw_writel(PPMU_ENABLE_CYCLE  |
22		     PPMU_ENABLE_COUNT0 |
23		     PPMU_ENABLE_COUNT1 |
24		     PPMU_ENABLE_COUNT2 |
25		     PPMU_ENABLE_COUNT3,
26		     ppmu_base + PPMU_CNTENS);
27}
28
29void exynos_ppmu_setevent(void __iomem *ppmu_base, unsigned int ch,
30			unsigned int evt)
31{
32	__raw_writel(evt, ppmu_base + PPMU_BEVTSEL(ch));
33}
34
35void exynos_ppmu_start(void __iomem *ppmu_base)
36{
37	__raw_writel(PPMU_ENABLE, ppmu_base);
38}
39
40void exynos_ppmu_stop(void __iomem *ppmu_base)
41{
42	__raw_writel(PPMU_DISABLE, ppmu_base);
43}
44
45unsigned int exynos_ppmu_read(void __iomem *ppmu_base, unsigned int ch)
46{
47	unsigned int total;
48
49	if (ch == PPMU_PMNCNT3)
50		total = ((__raw_readl(ppmu_base + PMCNT_OFFSET(ch)) << 8) |
51			  __raw_readl(ppmu_base + PMCNT_OFFSET(ch + 1)));
52	else
53		total = __raw_readl(ppmu_base + PMCNT_OFFSET(ch));
54
55	return total;
56}