source: EcnlProtoTool/trunk/asp3_dcre/arch/arm_gcc/common/core_pl310.c@ 270

Last change on this file since 270 was 270, checked in by coas-nagasima, 7 years ago

mruby版ECNLプロトタイピング・ツールを追加

  • Property svn:eol-style set to native
  • Property svn:keywords set to Id
  • Property svn:mime-type set to text/x-csrc
File size: 5.3 KB
Line 
1/*
2 * TOPPERS Software
3 * Toyohashi Open Platform for Embedded Real-Time Systems
4 *
5 * Copyright (C) 2013-2016 by Embedded and Real-Time Systems Laboratory
6 * Graduate School of Information Science, Nagoya Univ., JAPAN
7 *
8 * 上記著作権者
9は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
10 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
11 * 変・再é…
12å¸ƒï¼ˆä»¥ä¸‹ï¼Œåˆ©ç”¨ã¨å‘¼ã¶ï¼‰ã™ã‚‹ã“とを無償で許諾する.
13 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
14 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
15 * スコード中に含まれていること.
16 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
17 * 用できる形で再é…
18å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œå†é…
19å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨
20 * 者
21マニュアルなど)に,上記の著作権表示,この利用条件および下記
22 * の無保証規定を掲載すること.
23 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
24 * 用できない形で再é…
25å¸ƒã™ã‚‹å ´åˆã«ã¯ï¼Œæ¬¡ã®ã„ずれかの条件を満たすこ
26 * と.
27 * (a) 再é…
28å¸ƒã«ä¼´ã†ãƒ‰ã‚­ãƒ¥ãƒ¡ãƒ³ãƒˆï¼ˆåˆ©ç”¨è€…
29マニュアルなど)に,上記の著
30 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
31 * (b) 再é…
32å¸ƒã®å½¢æ…
33‹ã‚’,別に定める方法によって,TOPPERSプロジェクトに
34 * 報告すること.
35 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
36 * 害からも,上記著作権者
37およびTOPPERSプロジェクトをå…
38è²¬ã™ã‚‹ã“と.
39 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
40 * 由に基づく請求からも,上記著作権者
41およびTOPPERSプロジェクトを
42 * å…
43è²¬ã™ã‚‹ã“と.
44 *
45 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者
46お
47 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
48 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
49 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
50 * の責任を負わない.
51 *
52 * $Id: core_pl310.c 270 2017-02-09 04:03:47Z coas-nagasima $
53 */
54
55/*
56 * L2キャッシュコントローラ(PL310)の操作ライブラリ
57 */
58
59#include "kernel_impl.h"
60#include "core_pl310.h"
61
62Inline uint32_t
63get_way_mask(void)
64{
65 uint32_t aux;
66
67 aux = sil_rew_mem(PL310_AUX_CTRL);
68 if ((aux & PL310_AUX_CTRL_ASSOCIATIVITY) != 0U) {
69 /* 16ウェイ */
70 return(0x0000ffffU);
71 }
72 else {
73 /* 8ウェイ */
74 return(0x000000ffU);
75 }
76}
77
78Inline void
79pl310_cache_sync(void)
80{
81 sil_wrw_mem(PL310_CACHE_SYNC, 0);
82}
83
84Inline void
85pl310_inv_all(void)
86{
87 uint32_t way_mask = get_way_mask();
88
89 /* すべてのウェイを無効化する */
90 sil_wrw_mem(PL310_INV_WAY, 0xffff);
91 while ((sil_rew_mem(PL310_INV_WAY) & way_mask) != 0U) ;
92 pl310_cache_sync();
93}
94
95Inline void
96pl310_debug_set(uint32_t val)
97{
98 sil_wrw_mem(PL310_DEBUG_CTRL, val);
99}
100
101/*
102 * PL310の初期化
103 */
104void
105pl310_initialize(uint32_t aux_val, uint32_t aux_mask)
106{
107 uint32_t aux;
108 uint32_t prefetch;
109 uint32_t prefetch_val = 0U;
110
111 /* L2キャッシュがディスエーブルの場合のみ初期化を行う */
112 if ((sil_rew_mem(PL310_CTRL) & 0x01) == 0U) {
113 /* å…
114±æœ‰å±žæ€§ã‚’無視する */
115 aux_val |= PL310_AUX_CTRL_IGNORE_SHARE;
116
117 /* 命令プリフェッチをイネーブル */
118 aux_val |= PL310_AUX_CTRL_INST_PREFETCH;
119 prefetch_val |= PL310_AUX_CTRL_INST_PREFETCH;
120
121 /* データプリフェッチをイネーブル */
122 aux_val |= PL310_AUX_CTRL_DATA_PREFETCH;
123 prefetch_val |= PL310_AUX_CTRL_DATA_PREFETCH;
124
125 /* ダブルラインフィルをイネーブル */
126 prefetch_val |= PL310_PREFETCH_CTRL_DLINEFILL;
127 prefetch_val |= PL310_PREFETCH_CTRL_INCR_DLINEFILL;
128
129 /* 補助制御レジスタを設定 */
130 aux = sil_rew_mem(PL310_AUX_CTRL);
131 sil_wrw_mem(PL310_AUX_CTRL, ((aux & aux_mask) | aux_val));
132
133 /* プリフェッチ制御レジスタを設定 */
134 prefetch = sil_rew_mem(PL310_PREFETCH_CTRL);
135 sil_wrw_mem(PL310_PREFETCH_CTRL, (prefetch | prefetch_val));
136
137 /* L2キャッシュのå…
138¨ä½“の無効化 */
139 pl310_inv_all();
140
141 /* クロックゲーティングとスタンバイモードをイネーブル */
142 sil_wrw_mem(PL310_POWER_CTRL, 0x03);
143
144 /* L2キャッシュのイネーブル */
145 sil_wrw_mem(PL310_CTRL, 0x01);
146 }
147}
148
149/*
150 * L2キャッシュのディスエーブル
151 */
152void
153pl310_disable(void)
154{
155 pl310_clean_and_invalidate_all();
156 sil_wrw_mem(PL310_CTRL, 0x00);
157}
158
159/*
160 * L2キャッシュå…
161¨ä½“の無効化(書き戻さない)
162 */
163void
164pl310_invalidate_all(void)
165{
166 pl310_debug_set(0x03);
167 pl310_inv_all();
168 pl310_debug_set(0x00);
169}
170
171/*
172 * L2キャッシュå…
173¨ä½“のクリーンと無効化
174 */
175void
176pl310_clean_and_invalidate_all(void)
177{
178 uint32_t way_mask = get_way_mask();
179
180 pl310_debug_set(0x03);
181 sil_wrw_mem(PL310_CLEAN_INV_WAY, way_mask);
182 while ((sil_rew_mem(PL310_CLEAN_INV_WAY) & way_mask) != 0U) ;
183 pl310_cache_sync();
184 pl310_debug_set(0x00);
185}
Note: See TracBrowser for help on using the repository browser.