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