source: asp3_tinet_ecnl_arm/trunk/asp3_dcre/arch/arm_gcc/common/core_pl310.c@ 352

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

arm向けASP3版ECNLを追加

  • Property svn:eol-style set to native
  • Property svn:mime-type set to text/x-csrc;charset=UTF-8
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 * 上記著作権者は,以下の(1)~(4)の条件を満たす場合に限り,本ソフトウェ
9 * ア(本ソフトウェアを改変したものを含む.以下同じ)を使用・複製・改
10 * 変・再配布(以下,利用と呼ぶ)することを無償で許諾する.
11 * (1) 本ソフトウェアをソースコードの形で利用する場合には,上記の著作
12 * 権表示,この利用条件および下記の無保証規定が,そのままの形でソー
13 * スコード中に含まれていること.
14 * (2) 本ソフトウェアを,ライブラリ形式など,他のソフトウェア開発に使
15 * 用できる形で再配布する場合には,再配布に伴うドキュメント(利用
16 * 者マニュアルなど)に,上記の著作権表示,この利用条件および下記
17 * の無保証規定を掲載すること.
18 * (3) 本ソフトウェアを,機器に組み込むなど,他のソフトウェア開発に使
19 * 用できない形で再配布する場合には,次のいずれかの条件を満たすこ
20 * と.
21 * (a) 再配布に伴うドキュメント(利用者マニュアルなど)に,上記の著
22 * 作権表示,この利用条件および下記の無保証規定を掲載すること.
23 * (b) 再配布の形態を,別に定める方法によって,TOPPERSプロジェクトに
24 * 報告すること.
25 * (4) 本ソフトウェアの利用により直接的または間接的に生じるいかなる損
26 * 害からも,上記著作権者およびTOPPERSプロジェクトを免責すること.
27 * また,本ソフトウェアのユーザまたはエンドユーザからのいかなる理
28 * 由に基づく請求からも,上記著作権者およびTOPPERSプロジェクトを
29 * 免責すること.
30 *
31 * 本ソフトウェアは,無保証で提供されているものである.上記著作権者お
32 * よびTOPPERSプロジェクトは,本ソフトウェアに関して,特定の使用目的
33 * に対する適合性も含めて,いかなる保証も行わない.また,本ソフトウェ
34 * アの利用により直接的または間接的に生じたいかなる損害に関しても,そ
35 * の責任を負わない.
36 *
37 * $Id$
38 */
39
40/*
41 * L2キャッシュコントローラ(PL310)の操作ライブラリ
42 */
43
44#include "kernel_impl.h"
45#include "core_pl310.h"
46
47Inline uint32_t
48get_way_mask(void)
49{
50 uint32_t aux;
51
52 aux = sil_rew_mem(PL310_AUX_CTRL);
53 if ((aux & PL310_AUX_CTRL_ASSOCIATIVITY) != 0U) {
54 /* 16ウェイ */
55 return(0x0000ffffU);
56 }
57 else {
58 /* 8ウェイ */
59 return(0x000000ffU);
60 }
61}
62
63Inline void
64pl310_cache_sync(void)
65{
66 sil_wrw_mem(PL310_CACHE_SYNC, 0);
67}
68
69Inline void
70pl310_inv_all(void)
71{
72 uint32_t way_mask = get_way_mask();
73
74 /* すべてのウェイを無効化する */
75 sil_wrw_mem(PL310_INV_WAY, 0xffff);
76 while ((sil_rew_mem(PL310_INV_WAY) & way_mask) != 0U) ;
77 pl310_cache_sync();
78}
79
80Inline void
81pl310_debug_set(uint32_t val)
82{
83 sil_wrw_mem(PL310_DEBUG_CTRL, val);
84}
85
86/*
87 * PL310の初期化
88 */
89void
90pl310_initialize(uint32_t aux_val, uint32_t aux_mask)
91{
92 uint32_t aux;
93 uint32_t prefetch;
94 uint32_t prefetch_val = 0U;
95
96 /* L2キャッシュがディスエーブルの場合のみ初期化を行う */
97 if ((sil_rew_mem(PL310_CTRL) & 0x01) == 0U) {
98 /* 共有属性を無視する */
99 aux_val |= PL310_AUX_CTRL_IGNORE_SHARE;
100
101 /* 命令プリフェッチをイネーブル */
102 aux_val |= PL310_AUX_CTRL_INST_PREFETCH;
103 prefetch_val |= PL310_AUX_CTRL_INST_PREFETCH;
104
105 /* データプリフェッチをイネーブル */
106 aux_val |= PL310_AUX_CTRL_DATA_PREFETCH;
107 prefetch_val |= PL310_AUX_CTRL_DATA_PREFETCH;
108
109 /* ダブルラインフィルをイネーブル */
110 prefetch_val |= PL310_PREFETCH_CTRL_DLINEFILL;
111 prefetch_val |= PL310_PREFETCH_CTRL_INCR_DLINEFILL;
112
113 /* 補助制御レジスタを設定 */
114 aux = sil_rew_mem(PL310_AUX_CTRL);
115 sil_wrw_mem(PL310_AUX_CTRL, ((aux & aux_mask) | aux_val));
116
117 /* プリフェッチ制御レジスタを設定 */
118 prefetch = sil_rew_mem(PL310_PREFETCH_CTRL);
119 sil_wrw_mem(PL310_PREFETCH_CTRL, (prefetch | prefetch_val));
120
121 /* L2キャッシュの全体の無効化 */
122 pl310_inv_all();
123
124 /* クロックゲーティングとスタンバイモードをイネーブル */
125 sil_wrw_mem(PL310_POWER_CTRL, 0x03);
126
127 /* L2キャッシュのイネーブル */
128 sil_wrw_mem(PL310_CTRL, 0x01);
129 }
130}
131
132/*
133 * L2キャッシュのディスエーブル
134 */
135void
136pl310_disable(void)
137{
138 pl310_clean_and_invalidate_all();
139 sil_wrw_mem(PL310_CTRL, 0x00);
140}
141
142/*
143 * L2キャッシュ全体の無効化(書き戻さない)
144 */
145void
146pl310_invalidate_all(void)
147{
148 pl310_debug_set(0x03);
149 pl310_inv_all();
150 pl310_debug_set(0x00);
151}
152
153/*
154 * L2キャッシュ全体のクリーンと無効化
155 */
156void
157pl310_clean_and_invalidate_all(void)
158{
159 uint32_t way_mask = get_way_mask();
160
161 pl310_debug_set(0x03);
162 sil_wrw_mem(PL310_CLEAN_INV_WAY, way_mask);
163 while ((sil_rew_mem(PL310_CLEAN_INV_WAY) & way_mask) != 0U) ;
164 pl310_cache_sync();
165 pl310_debug_set(0x00);
166}
Note: See TracBrowser for help on using the repository browser.