]>
Commit | Line | Data |
---|---|---|
ef509b90 VA |
1 | /* |
2 | * MSMC controller utilities | |
3 | * | |
4 | * (C) Copyright 2012-2014 | |
5 | * Texas Instruments Incorporated, <www.ti.com> | |
6 | * | |
7 | * SPDX-License-Identifier: GPL-2.0+ | |
8 | */ | |
9 | ||
10 | #include <common.h> | |
20187fd1 | 11 | #include <asm/arch/msmc.h> |
ef509b90 VA |
12 | |
13 | struct mpax { | |
14 | u32 mpaxl; | |
15 | u32 mpaxh; | |
16 | }; | |
17 | ||
18 | struct msms_regs { | |
19 | u32 pid; | |
20 | u32 _res_04; | |
21 | u32 smcerrar; | |
22 | u32 smcerrxr; | |
23 | u32 smedcc; | |
24 | u32 smcea; | |
25 | u32 smsecc; | |
26 | u32 smpfar; | |
27 | u32 smpfxr; | |
28 | u32 smpfr; | |
29 | u32 smpfcr; | |
30 | u32 _res_2c; | |
31 | u32 sbndc[8]; | |
32 | u32 sbndm; | |
33 | u32 sbnde; | |
34 | u32 _res_58; | |
35 | u32 cfglck; | |
36 | u32 cfgulck; | |
37 | u32 cfglckstat; | |
38 | u32 sms_mpax_lck; | |
39 | u32 sms_mpax_ulck; | |
40 | u32 sms_mpax_lckstat; | |
41 | u32 ses_mpax_lck; | |
42 | u32 ses_mpax_ulck; | |
43 | u32 ses_mpax_lckstat; | |
44 | u32 smestat; | |
45 | u32 smirstat; | |
46 | u32 smirc; | |
47 | u32 smiestat; | |
48 | u32 smiec; | |
49 | u32 _res_94_c0[12]; | |
50 | u32 smncerrar; | |
51 | u32 smncerrxr; | |
52 | u32 smncea; | |
53 | u32 _res_d0_1fc[76]; | |
54 | struct mpax sms[16][8]; | |
55 | struct mpax ses[16][8]; | |
56 | }; | |
57 | ||
58 | ||
20187fd1 | 59 | void msmc_share_all_segments(int priv_id) |
ef509b90 | 60 | { |
3d315386 | 61 | struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE; |
ef509b90 VA |
62 | int j; |
63 | ||
64 | for (j = 0; j < 8; j++) { | |
65 | msmc->sms[priv_id][j].mpaxh &= 0xffffff7ful; | |
66 | msmc->ses[priv_id][j].mpaxh &= 0xffffff7ful; | |
67 | } | |
68 | } | |
079da2d5 VA |
69 | |
70 | void msmc_map_ses_segment(int priv_id, int ses_pair, | |
71 | u32 src_pfn, u32 dst_pfn, enum mpax_seg_size size) | |
72 | { | |
73 | struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE; | |
74 | ||
75 | msmc->ses[priv_id][ses_pair].mpaxh = src_pfn << 12 | | |
76 | (size & 0x1f) | 0x80; | |
77 | msmc->ses[priv_id][ses_pair].mpaxl = dst_pfn << 8 | 0x3f; | |
78 | } | |
79 | ||
80 | void msmc_get_ses_mpax(int priv_id, int ses_pair, u32 *mpax) | |
81 | { | |
82 | struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE; | |
83 | ||
84 | *mpax++ = msmc->ses[priv_id][ses_pair].mpaxl; | |
85 | *mpax = msmc->ses[priv_id][ses_pair].mpaxh; | |
86 | } | |
87 | ||
88 | void msmc_set_ses_mpax(int priv_id, int ses_pair, u32 *mpax) | |
89 | { | |
90 | struct msms_regs *msmc = (struct msms_regs *)KS2_MSMC_CTRL_BASE; | |
91 | ||
92 | msmc->ses[priv_id][ses_pair].mpaxl = *mpax++; | |
93 | msmc->ses[priv_id][ses_pair].mpaxh = *mpax; | |
94 | } |