source: rtems/c/src/lib/libcpu/arm/pxa255/pmc/pmc.c @ 142a9df

4.104.115
Last change on this file since 142a9df was 142a9df, checked in by Joel Sherrill <joel.sherrill@…>, on 07/10/09 at 15:34:12

2009-07-10 Xi Yang <hiyangxi@…>

  • Makefile.am, pxa255/ffuart/ffuart.c, pxa255/include/pxa255.h, pxa255/pmc/pmc.c: Add PMC support.
  • Property mode set to 100755
File size: 2.8 KB
Line 
1/*
2 *  By Yang Xi <hiyangxi@gmail.com>.
3 *
4 *  The license and distribution terms for this file may be
5 *  found in the file LICENSE in this distribution or at
6 *  http://www.rtems.com/license/LICENSE.
7 *
8 *  $Id$
9 */
10
11#include <rtems.h>
12#include <bsp.h>
13#include <pxa255.h>
14
15unsigned int xscale_read_pmc(int reg)
16{
17  unsigned int val = 0;
18  switch(reg){
19  case PMC_PMNC:
20    asm volatile("mrc p14,0,%0,c0,c1,0\n":"=r"(val):);
21    break;
22  case PMC_CCNT:
23    asm volatile("mrc p14,0,%0,c1,c1,0\n":"=r"(val):);
24    break;
25  case PMC_INTEN:
26    asm volatile("mrc p14,0,%0,c4,c1,0\n":"=r"(val):);
27    break;
28  case PMC_FLAG:
29    asm volatile("mrc p14,0,%0,c5,c1,0\n":"=r"(val):);
30    break;
31  case PMC_EVTSEL:
32    asm volatile("mrc p14,0,%0,c8,c1,0\n":"=r"(val):);
33    break;
34  case PMC_PMN0:
35    asm volatile("mrc p14,0,%0,c0,c2,0\n":"=r"(val):);
36    break;
37  case PMC_PMN1:
38    asm volatile("mrc p14,0,%0,c1,c2,0\n":"=r"(val):);
39    break;
40  case PMC_PMN2:
41    asm volatile("mrc p14,0,%0,c2,c2,0\n":"=r"(val):);
42    break;
43  case PMC_PMN3:
44    asm volatile("mrc p14,0,%0,c3,c2,0\n":"=r"(val):);
45    break;
46  default:
47    val = 0;
48    break;
49  }
50  return val;
51}
52
53void xscale_write_pmc(int reg, unsigned int val)
54{
55  switch(reg){
56  case PMC_PMNC:
57    asm volatile("mcr p14,0,%0,c0,c1,0\n"::"r"(val));
58    break;
59  case PMC_CCNT:
60    asm volatile("mcr p14,0,%0,c1,c1,0\n"::"r"(val));
61    break;
62  case PMC_INTEN:
63    asm volatile("mcr p14,0,%0,c4,c1,0\n"::"r"(val));
64    break;
65  case PMC_FLAG:
66    asm volatile("mcr p14,0,%0,c5,c1,0\n"::"r"(val));
67    break;
68  case PMC_EVTSEL:
69    asm volatile("mcr p14,0,%0,c8,c1,0\n"::"r"(val));
70    break;
71  case PMC_PMN0:
72    asm volatile("mcr p14,0,%0,c0,c2,0\n"::"r"(val));
73    break;
74  case PMC_PMN1:
75    asm volatile("mcr p14,0,%0,c1,c2,0\n"::"r"(val));
76    break;
77  case PMC_PMN2:
78    asm volatile("mcr p14,0,%0,c2,c2,0\n"::"r"(val));
79    break;
80  case PMC_PMN3:
81    asm volatile("mcr p14,0,%0,c3,c2,0\n"::"r"(val));
82    break;
83  default:
84    break;
85  }
86}
87
88void xscale_pmc_enable_pmc(void)
89{
90  unsigned int val;
91  val = xscale_read_pmc(PMC_PMNC);
92  val = (val | PMC_PMNC_E)&(~PMC_PMNC_PCD);
93  xscale_write_pmc(PMC_PMNC,val);
94}
95void xscale_pmc_disable_pmc(void)
96{
97  unsigned int val;
98  val = xscale_read_pmc(PMC_PMNC);
99  val = val & (~PMC_PMNC_E);
100  xscale_write_pmc(PMC_PMNC,val);
101}
102
103void xscale_pmc_reset_pmc(void)
104{
105  unsigned int val;
106  val = xscale_read_pmc(PMC_PMNC);
107  val = val | PMC_PMNC_PCR;
108  xscale_write_pmc(PMC_PMNC,val);
109}
110
111void xscale_pmc_reset_ccnt(void)
112{
113  unsigned int val;
114  val = xscale_read_pmc(PMC_PMNC);
115  val = val | PMC_PMNC_CCR;
116  xscale_write_pmc(PMC_PMNC,val);
117}
118
119void xscale_pmc_setevent(int reg, unsigned char evt)
120{
121  unsigned int val;
122  val = xscale_read_pmc(PMC_EVTSEL);
123  if((reg >= PMC_PMN0) && (reg <= PMC_PMN3)){
124    val &= ~(0xff<<(reg-PMC_PMN0)*8);
125    val |= evt << (reg-PMC_PMN0)*8;
126    xscale_write_pmc(PMC_EVTSEL,val);
127  }
128}
Note: See TracBrowser for help on using the repository browser.