Mercurial > ecos
annotate packages/hal/powerpc/mpc8xx/current/src/var_misc.c @ 3292:7f8e529b4d82 default tip
Fix FREESCALE_EDMA_NBYTES_MLOFFYES_MLOFF() so it works with negative offsets.
| author | vae |
|---|---|
| date | Wed, 29 Apr 2015 23:31:48 +0000 |
| parents | 74dbf4c3f2e1 |
| children |
| rev | line source |
|---|---|
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
1 //========================================================================== |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
2 // |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
3 // var_misc.c |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
4 // |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
5 // HAL implementation miscellaneous functions |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
6 // |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
7 //========================================================================== |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
8 // ####ECOSGPLCOPYRIGHTBEGIN#### |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
9 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
10 // This file is part of eCos, the Embedded Configurable Operating System. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
11 // Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004 Free Software Foundation, Inc. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
103
diff
changeset
|
12 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
13 // eCos is free software; you can redistribute it and/or modify it under |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
14 // the terms of the GNU General Public License as published by the Free |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
15 // Software Foundation; either version 2 or (at your option) any later |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
16 // version. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
103
diff
changeset
|
17 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
18 // eCos is distributed in the hope that it will be useful, but WITHOUT |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
19 // ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
20 // FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
21 // for more details. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
103
diff
changeset
|
22 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
23 // You should have received a copy of the GNU General Public License |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
24 // along with eCos; if not, write to the Free Software Foundation, Inc., |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
25 // 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
103
diff
changeset
|
26 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
27 // As a special exception, if other files instantiate templates or use |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
28 // macros or inline functions from this file, or you compile this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
29 // and link it with other works to produce a work based on this file, |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
30 // this file does not by itself cause the resulting work to be covered by |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
31 // the GNU General Public License. However the source code for this file |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
32 // must still be made available in accordance with section (3) of the GNU |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
33 // General Public License v2. |
|
208
e0c0827131d1
Merge from eCos master repository on 2002-05-20-20:11:54-BST
jlarmour
parents:
103
diff
changeset
|
34 // |
|
2729
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
35 // This exception does not invalidate any other reasons why a work based |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
36 // on this file might be covered by the GNU General Public License. |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
37 // ------------------------------------------- |
|
74dbf4c3f2e1
Update all copyright banners to reflect FSF ownership; fix and improve licence text.
jlarmour
parents:
1914
diff
changeset
|
38 // ####ECOSGPLCOPYRIGHTEND#### |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
39 //========================================================================== |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
40 //#####DESCRIPTIONBEGIN#### |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
41 // |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
42 // Author(s): jskov |
| 420 | 43 // Contributors: jskov, gthomas |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
44 // Date: 2000-02-04 |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
45 // Purpose: HAL miscellaneous functions |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
46 // Description: This file contains miscellaneous functions provided by the |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
47 // HAL. |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
48 // |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
49 //####DESCRIPTIONEND#### |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
50 // |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
51 //========================================================================== |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
52 |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
53 #include <pkgconf/hal.h> |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
54 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
55 #define CYGARC_HAL_COMMON_EXPORT_CPU_MACROS |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
56 #include <cyg/hal/ppc_regs.h> |
| 948 | 57 #include <cyg/hal/quicc/ppc8xx.h> |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
58 #include <cyg/infra/cyg_type.h> // types |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
59 #include <cyg/infra/diag.h> // diag_printf |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
60 |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
61 #include <cyg/hal/hal_mem.h> // some of the functions defined here |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
62 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
63 //-------------------------------------------------------------------------- |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
64 void |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
65 hal_variant_init(void) |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
66 { |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
67 // Disable serialization |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
68 { |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
69 cyg_uint32 ictrl; |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
70 CYGARC_MFSPR (ICTRL, ictrl); |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
71 ictrl |= ICTRL_NOSERSHOW; |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
72 CYGARC_MTSPR (ICTRL, ictrl); |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
73 } |
| 806 | 74 |
| 812 | 75 #ifndef CYGSEM_HAL_USE_ROM_MONITOR |
|
804
c309f36b6de9
Better CPM/DPRAM handling. Fix minor bug in hal_diag_putc().
gthomas
parents:
426
diff
changeset
|
76 // Reset CPM |
|
c309f36b6de9
Better CPM/DPRAM handling. Fix minor bug in hal_diag_putc().
gthomas
parents:
426
diff
changeset
|
77 _mpc8xx_reset_cpm(); |
| 812 | 78 #endif |
|
82
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
79 } |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
80 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
81 //-------------------------------------------------------------------------- |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
82 // Variant specific idle thread action. |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
83 bool |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
84 hal_variant_idle_thread_action( cyg_uint32 count ) |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
85 { |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
86 #if 0 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
87 cyg_uint32 *psivec = (cyg_uint32*)CYGARC_REG_IMM_SIVEC ; |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
88 cyg_uint32 *psimask = (cyg_uint32*)CYGARC_REG_IMM_SIMASK; |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
89 cyg_uint32 *psipend = (cyg_uint32*)CYGARC_REG_IMM_SIPEND; |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
90 cyg_uint16 *ptbscr = (cyg_uint16*)CYGARC_REG_IMM_TBSCR; |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
91 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
92 diag_printf( "TBSCR %04x, vec %d: sivec %08x, simask %08x, sipend %08x\n", |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
93 (cyg_uint32)(*ptbscr), (*psivec)>>26, *psivec, |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
94 *psimask, *psipend ); |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
95 #endif |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
96 |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
97 // Let architecture idle thread action run |
|
6736c52df507
Merge from eCos master repository on 2000-04-14-13:35:46-BST
jlarmour
parents:
72
diff
changeset
|
98 return true; |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
99 } |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
100 |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
101 //--------------------------------------------------------------------------- |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
102 // Use MMU resources to map memory regions. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
103 // Takes and returns an int used to ID the MMU resource to use. This ID |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
104 // is increased as resources are used and should be used for subsequent |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
105 // invocations. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
106 // |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
107 // The MPC8xx CPUs do not have BATs. Fortunately we don't currently |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
108 // use the MMU, so we can simulate BATs by using the TLBs. |
|
860
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
109 |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
110 #if defined(CYGHWR_HAL_POWERPC_MPC8XX_860) || \ |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
111 defined(CYGHWR_HAL_POWERPC_MPC8XX_860T) || \ |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
112 defined(CYGHWR_HAL_POWERPC_MPC8XX_852T) || \ |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
113 defined(CYGHWR_HAL_POWERPC_MPC8XX_855T) || \ |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
114 defined(CYGHWR_HAL_POWERPC_MPC8XX_862T) || \ |
|
1171
02b328ea4e09
New platform and variant support for A&M Rattler (MPC8250)
gthomas
parents:
948
diff
changeset
|
115 defined(CYGHWR_HAL_POWERPC_MPC8XX_866T) || \ |
|
860
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
116 defined(CYGHWR_HAL_POWERPC_MPC8XX_862P) |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
117 #define NUM_TLBS 32 |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
118 #elif defined(CYGHWR_HAL_POWERPC_MPC8XX_823) || defined(CYGHWR_HAL_POWERPC_MPC8XX_850) |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
119 #define NUM_TLBS 8 |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
120 #else |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
121 #error Missing TLB information for this platform |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
122 #endif |
|
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
123 |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
124 int |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
125 cyg_hal_map_memory (int id,CYG_ADDRESS virt, CYG_ADDRESS phys, |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
126 cyg_int32 size, cyg_uint8 flags) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
127 { |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
128 cyg_uint32 epn, rpn, twc, ctr = 0; |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
129 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
130 epn = (virt & MI_EPN_EPNMASK) | MI_EPN_EV; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
131 rpn = ((phys & MI_RPN_RPNMASK) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
132 | MI_RPN_PPRWRW | MI_RPN_LPS | MI_RPN_SH | MI_RPN_V); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
133 if (flags & CYGARC_MEMDESC_CI) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
134 rpn |= MI_RPN_CI; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
135 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
136 twc = MI_TWC_PS8MB | MI_TWC_V; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
137 if (flags & CYGARC_MEMDESC_GUARDED) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
138 twc |= MI_TWC_G; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
139 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
140 // Ignore attempts to use more than max_tlbs. |
|
860
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
141 while (id < NUM_TLBS && size > 0) { |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
142 ctr = id << MI_CTR_INDX_SHIFT; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
143 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
144 // Instruction TLB. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
145 CYGARC_MTSPR (MI_TWC, twc); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
146 CYGARC_MTSPR (MI_CTR, ctr); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
147 CYGARC_MTSPR (MI_EPN, epn); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
148 CYGARC_MTSPR (MI_RPN, rpn); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
149 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
150 // Data TLB. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
151 { |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
152 cyg_uint32 drpn; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
153 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
154 // Need to mark data page as changed or an exception |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
155 // will be generated on first write to the page. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
156 drpn = rpn | MD_RPN_CHANGED; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
157 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
158 CYGARC_MTSPR (MD_TWC, twc); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
159 CYGARC_MTSPR (MD_CTR, ctr); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
160 CYGARC_MTSPR (MD_EPN, epn); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
161 CYGARC_MTSPR (MD_RPN, drpn); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
162 } |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
163 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
164 // Move to next 8MB block. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
165 size -= 8*1024*1024; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
166 epn += 8*1024*1024; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
167 rpn += 8*1024*1024; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
168 id++; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
169 } |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
170 |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
171 // Make caches default disabled when MMU is disabled. |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
172 CYGARC_MTSPR (MI_CTR, ctr | CYGARC_REG_MI_CTR_CIDEF); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
173 CYGARC_MTSPR (MD_CTR, ctr | CYGARC_REG_MD_CTR_CIDEF); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
174 |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
175 return id; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
176 } |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
177 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
178 // Initialize MMU to a sane (NOP) state. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
179 // |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
180 // Initialize TLBs with 0, Valid bits unset. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
181 void |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
182 cyg_hal_clear_MMU (void) |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
183 { |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
184 cyg_uint32 ctr = 0; |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
185 int id; |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
186 |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
187 CYGARC_MTSPR (M_CASID, 0); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
188 |
|
860
8e23fe1ac05e
Improve processor type support. Add baud rate generator allocation.
gthomas
parents:
812
diff
changeset
|
189 for (id = 0; id < NUM_TLBS; id++) { |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
190 ctr = id << MI_CTR_INDX_SHIFT; |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
191 |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
192 // Instruction TLBs. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
193 CYGARC_MTSPR (MI_TWC, 0); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
194 CYGARC_MTSPR (MI_CTR, ctr); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
195 CYGARC_MTSPR (MI_EPN, 0); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
196 CYGARC_MTSPR (MI_RPN, 0); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
197 // Data TLBs. |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
198 CYGARC_MTSPR (MD_TWC, 0); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
199 CYGARC_MTSPR (MD_CTR, ctr); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
200 CYGARC_MTSPR (MD_EPN, 0); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
201 CYGARC_MTSPR (MD_RPN, 0); |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
202 } |
|
103
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
203 |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
204 // Make caches default disabled when MMU is disabled. |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
205 CYGARC_MTSPR (MI_CTR, ctr | CYGARC_REG_MI_CTR_CIDEF); |
|
95f3e12a6327
Merge from eCos master repository on 2000-06-23-16:41:10-BST
jlarmour
parents:
82
diff
changeset
|
206 CYGARC_MTSPR (MD_CTR, ctr | CYGARC_REG_MD_CTR_CIDEF); |
|
72
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
207 } |
|
da3908c9cd10
Merge from eCos master repository on 2000-02-17-18:56:14-GMT
jlarmour
parents:
70
diff
changeset
|
208 |
|
425
cd7e3413ad01
Rework profile package to more closely follow standards
gthomas
parents:
423
diff
changeset
|
209 #ifdef CYGPKG_PROFILE_GPROF |
| 423 | 210 //-------------------------------------------------------------------------- |
| 211 // | |
| 212 // Profiling support - uses a separate high-speed timer | |
| 213 // | |
| 214 | |
| 215 #include <cyg/hal/hal_arch.h> | |
| 216 #include <cyg/hal/hal_intr.h> | |
| 217 #include <cyg/hal/quicc/ppc8xx.h> | |
|
425
cd7e3413ad01
Rework profile package to more closely follow standards
gthomas
parents:
423
diff
changeset
|
218 #include <cyg/profile/profile.h> |
| 423 | 219 |
| 220 // Can't rely on Cyg_Interrupt class being defined. | |
| 221 #define Cyg_InterruptHANDLED 1 | |
| 222 | |
| 223 #define PIT_IRQ_LEVEL 4 | |
| 224 #define PIT_IRQ CYGNUM_HAL_INTERRUPT_SIU_LVL4 | |
| 225 #define ID_PIT 34512 | |
| 226 | |
| 227 | |
| 228 // Periodic timer ISR. | |
| 229 static cyg_uint32 | |
| 230 isr_pit(CYG_ADDRWORD vector, CYG_ADDRWORD data, HAL_SavedRegisters *regs) | |
| 231 { | |
| 232 | |
| 233 HAL_INTERRUPT_ACKNOWLEDGE (CYGNUM_HAL_INTERRUPT_SIU_PIT); | |
| 426 | 234 __profile_hit(regs->pc); |
| 423 | 235 |
| 236 return Cyg_InterruptHANDLED; | |
| 237 } | |
| 238 | |
| 1914 | 239 int |
| 423 | 240 hal_enable_profile_timer(int resolution) |
| 241 { | |
| 242 // Run periodic timer interrupt for profile | |
| 243 cyg_uint16 piscr; | |
| 244 int period = resolution / 100; | |
| 245 | |
| 246 // Attach pit arbiter. | |
| 247 HAL_INTERRUPT_ATTACH (PIT_IRQ, | |
| 248 &hal_arbitration_isr_pit, ID_PIT, 0); | |
| 249 HAL_INTERRUPT_UNMASK (PIT_IRQ); | |
| 250 | |
| 251 // Attach pit isr. | |
| 252 HAL_INTERRUPT_ATTACH (CYGNUM_HAL_INTERRUPT_SIU_PIT, &isr_pit, | |
| 253 ID_PIT, 0); | |
| 254 HAL_INTERRUPT_SET_LEVEL (CYGNUM_HAL_INTERRUPT_SIU_PIT, PIT_IRQ_LEVEL); | |
| 255 HAL_INTERRUPT_UNMASK (CYGNUM_HAL_INTERRUPT_SIU_PIT); | |
| 256 | |
| 257 | |
| 258 // Set period. | |
| 259 HAL_WRITE_UINT32 (CYGARC_REG_IMM_PITC, | |
| 260 (2*period) << CYGARC_REG_IMM_PITC_COUNT_SHIFT); | |
| 261 | |
| 262 // Enable. | |
| 263 HAL_READ_UINT16 (CYGARC_REG_IMM_PISCR, piscr); | |
| 264 piscr |= CYGARC_REG_IMM_PISCR_PTE; | |
| 265 HAL_WRITE_UINT16 (CYGARC_REG_IMM_PISCR, piscr); | |
| 1914 | 266 |
| 267 return resolution; | |
| 423 | 268 } |
| 269 #endif | |
| 270 | |
|
70
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
271 //-------------------------------------------------------------------------- |
|
c5536bad4c24
Merge from eCos master repository on 2000-02-11-15:46:40-GMT
jlarmour
parents:
diff
changeset
|
272 // End of var_misc.c |
