Root/target/linux/lantiq/files/arch/mips/lantiq/svip/pms.c

1/************************************************************************
2 *
3 * Copyright (c) 2007
4 * Infineon Technologies AG
5 * St. Martin Strasse 53; 81669 Muenchen; Germany
6 *
7 * This program is free software; you can redistribute it and/or
8 * modify it under the terms of the GNU General Public License
9 * as published by the Free Software Foundation; either version
10 * 2 of the License, or (at your option) any later version.
11 *
12 ************************************************************************/
13
14#include <linux/module.h>
15#include <linux/types.h>
16#include <linux/kernel.h>
17#include <linux/proc_fs.h>
18#include <linux/init.h>
19#include <asm/addrspace.h>
20
21#include <base_reg.h>
22#include <sys1_reg.h>
23#include <sys2_reg.h>
24#include <lantiq_soc.h>
25
26static struct svip_reg_sys1 *const sys1 = (struct svip_reg_sys1 *)LTQ_SYS1_BASE;
27static struct svip_reg_sys2 *const sys2 = (struct svip_reg_sys2 *)LTQ_SYS2_BASE;
28
29void svip_sys1_clk_enable(u32 mask)
30{
31    sys1_w32(sys1_r32(clksr) | mask, clkenr);
32    asm("sync;");
33}
34EXPORT_SYMBOL(svip_sys1_clk_enable);
35
36int svip_sys1_clk_is_enabled(u32 mask)
37{
38    return (sys1_r32(clksr) & mask) != 0;
39}
40EXPORT_SYMBOL(svip_sys1_clk_is_enabled);
41
42void svip_sys2_clk_enable(u32 mask)
43{
44    sys2_w32(sys2_r32(clksr) | mask, clkenr);
45    asm("sync;");
46}
47EXPORT_SYMBOL(svip_sys2_clk_enable);
48
49int svip_sys2_clk_is_enabled(u32 mask)
50{
51    return (sys2_r32(clksr) & mask) != 0;
52}
53EXPORT_SYMBOL(svip_sys2_clk_is_enabled);
54
55int ltq_pms_read_procmem(char *buf, char **start, off_t offset,
56             int count, int *eof, void *data)
57{
58    long len = 0;
59    int t = 0;
60    u32 bit = 0;
61    u32 reg_tmp, bits_tmp;
62
63    len = sprintf(buf, "\nSVIP PMS Settings\n");
64    len = len + sprintf(buf + len,
65                " 3 2 1 0\n");
66    len = len + sprintf(buf + len,
67                " 210987654321098765432109876543210\n");
68    len = len + sprintf(buf + len,
69                "---------------------------------------------\n");
70    len = len + sprintf(buf + len,
71                "SYS1_CLKSR: ");
72    reg_tmp = sys1_r32(clksr);
73    bit = 0x80000000;
74    for (t = 31; t != -1; t--) {
75        bits_tmp = (reg_tmp & bit) >> t;
76        len = len + sprintf(buf + len, "%d", bits_tmp);
77        bit = bit >> 1;
78    }
79    len = len + sprintf(buf + len, "\n\n");
80    len = len + sprintf(buf + len, "SYS2_CLKSR: ");
81    reg_tmp = sys2_r32(clksr);
82    bit = 0x80000000;
83    for (t = 31; t != -1; t--) {
84        bits_tmp = (reg_tmp & bit) >> t;
85        len = len + sprintf(buf + len, "%d", bits_tmp);
86        bit = bit >> 1;
87    }
88    len = len + sprintf(buf + len, "\n\n");
89
90    *eof = 1;
91
92    return len;
93}
94
95int __init ltq_pms_init_proc(void)
96{
97    return create_proc_read_entry("driver/ltq_pms", 0, NULL,
98                      ltq_pms_read_procmem, NULL) == NULL;
99}
100
101module_init(ltq_pms_init_proc);
102

Archive Download this file



interactive