Skip to content
GitLab
Menu
Projects
Groups
Snippets
Loading...
Help
Help
Support
Community forum
Keyboard shortcuts
?
Submit feedback
Sign in / Register
Toggle navigation
Menu
Open sidebar
adam.huang
Arm Trusted Firmware
Commits
ebf417aa
"vscode:/vscode.git/clone" did not exist on "5f5d1ed7d5a7626b2da48f3ac423d366bbee1fd8"
Unverified
Commit
ebf417aa
authored
Sep 04, 2018
by
Soby Mathew
Committed by
GitHub
Sep 04, 2018
Browse files
Merge pull request #1540 from MISL-EBU-System-SW/marvell-updates-18.09
Marvell updates 18.09
parents
100992b5
6d55ef1a
Changes
43
Hide whitespace changes
Inline
Side-by-side
plat/marvell/a8k/a70x0/board/marvell_plat_config.c
View file @
ebf417aa
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a
8k
_common.h>
#include <a
rmada
_common.h>
/*
/*
* If bootrom is currently at BLE there's no need to include the memory
* If bootrom is currently at BLE there's no need to include the memory
...
@@ -76,6 +76,8 @@ struct addr_map_win iob_memory_map[] = {
...
@@ -76,6 +76,8 @@ struct addr_map_win iob_memory_map[] = {
{
0x00000000f7000000
,
0x1000000
,
PEX1_TID
},
{
0x00000000f7000000
,
0x1000000
,
PEX1_TID
},
/* PEX2_X1 window */
/* PEX2_X1 window */
{
0x00000000f8000000
,
0x1000000
,
PEX2_TID
},
{
0x00000000f8000000
,
0x1000000
,
PEX2_TID
},
{
0x00000000c0000000
,
0x30000000
,
PEX2_TID
},
{
0x0000000800000000
,
0x100000000
,
PEX2_TID
},
/* PEX0_X4 window */
/* PEX0_X4 window */
{
0x00000000f6000000
,
0x1000000
,
PEX0_TID
},
{
0x00000000f6000000
,
0x1000000
,
PEX0_TID
},
/* SPI1_CS0 (RUNIT) window */
/* SPI1_CS0 (RUNIT) window */
...
@@ -101,6 +103,8 @@ struct addr_map_win ccu_memory_map[] = { /* IO window */
...
@@ -101,6 +103,8 @@ struct addr_map_win ccu_memory_map[] = { /* IO window */
{
0x00000000f2000000
,
0x4000000
,
IO_0_TID
},
/* IO window */
{
0x00000000f2000000
,
0x4000000
,
IO_0_TID
},
/* IO window */
#else
#else
{
0x00000000f2000000
,
0xe000000
,
IO_0_TID
},
{
0x00000000f2000000
,
0xe000000
,
IO_0_TID
},
{
0x00000000c0000000
,
0x30000000
,
IO_0_TID
},
/* IO window */
{
0x0000000800000000
,
0x100000000
,
IO_0_TID
},
/* IO window */
#endif
#endif
};
};
...
...
plat/marvell/a8k/a70x0_amc/board/marvell_plat_config.c
View file @
ebf417aa
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a
8k
_common.h>
#include <a
rmada
_common.h>
/*
/*
* If bootrom is currently at BLE there's no need to include the memory
* If bootrom is currently at BLE there's no need to include the memory
...
...
plat/marvell/a8k/a80x0/board/marvell_plat_config.c
View file @
ebf417aa
...
@@ -5,7 +5,8 @@
...
@@ -5,7 +5,8 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a8k_common.h>
#include <armada_common.h>
/*
/*
* If bootrom is currently at BLE there's no need to include the memory
* If bootrom is currently at BLE there's no need to include the memory
* maps structure at this point
* maps structure at this point
...
@@ -85,7 +86,9 @@ struct addr_map_win iob_memory_map_cp0[] = {
...
@@ -85,7 +86,9 @@ struct addr_map_win iob_memory_map_cp0[] = {
/* PEX2_X1 window */
/* PEX2_X1 window */
{
0x00000000f8000000
,
0x1000000
,
PEX2_TID
},
{
0x00000000f8000000
,
0x1000000
,
PEX2_TID
},
/* PEX0_X4 window */
/* PEX0_X4 window */
{
0x00000000f6000000
,
0x1000000
,
PEX0_TID
}
{
0x00000000f6000000
,
0x1000000
,
PEX0_TID
},
{
0x00000000c0000000
,
0x30000000
,
PEX0_TID
},
{
0x0000000800000000
,
0x100000000
,
PEX0_TID
},
};
};
struct
addr_map_win
iob_memory_map_cp1
[]
=
{
struct
addr_map_win
iob_memory_map_cp1
[]
=
{
...
@@ -129,6 +132,8 @@ struct addr_map_win ccu_memory_map[] = {
...
@@ -129,6 +132,8 @@ struct addr_map_win ccu_memory_map[] = {
{
0x00000000f2000000
,
0x4000000
,
IO_0_TID
},
/* IO window */
{
0x00000000f2000000
,
0x4000000
,
IO_0_TID
},
/* IO window */
#else
#else
{
0x00000000f2000000
,
0xe000000
,
IO_0_TID
},
/* IO window */
{
0x00000000f2000000
,
0xe000000
,
IO_0_TID
},
/* IO window */
{
0x00000000c0000000
,
0x30000000
,
IO_0_TID
},
/* IO window */
{
0x0000000800000000
,
0x100000000
,
IO_0_TID
},
/* IO window */
#endif
#endif
};
};
...
...
plat/marvell/a8k/a80x0_mcbin/board/marvell_plat_config.c
View file @
ebf417aa
...
@@ -5,9 +5,10 @@
...
@@ -5,9 +5,10 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a
8k
_common.h>
#include <a
rmada
_common.h>
#include <delay_timer.h>
#include <delay_timer.h>
#include <mmio.h>
#include <mmio.h>
/*
/*
* If bootrom is currently at BLE there's no need to include the memory
* If bootrom is currently at BLE there's no need to include the memory
* maps structure at this point
* maps structure at this point
...
...
plat/marvell/a8k/common/a8k_common.mk
View file @
ebf417aa
...
@@ -76,7 +76,8 @@ MARVELL_DRV := $(MARVELL_DRV_BASE)/io_win.c \
...
@@ -76,7 +76,8 @@ MARVELL_DRV := $(MARVELL_DRV_BASE)/io_win.c \
$(MARVELL_DRV_BASE)
/amb_adec.c
\
$(MARVELL_DRV_BASE)
/amb_adec.c
\
$(MARVELL_DRV_BASE)
/ccu.c
\
$(MARVELL_DRV_BASE)
/ccu.c
\
$(MARVELL_DRV_BASE)
/cache_llc.c
\
$(MARVELL_DRV_BASE)
/cache_llc.c
\
$(MARVELL_DRV_BASE)
/comphy/phy-comphy-cp110.c
$(MARVELL_DRV_BASE)
/comphy/phy-comphy-cp110.c
\
$(MARVELL_DRV_BASE)
/mc_trustzone/mc_trustzone.c
BL31_PORTING_SOURCES
:=
$(PLAT_FAMILY_BASE)
/
$(PLAT)
/board/marvell_plat_config.c
BL31_PORTING_SOURCES
:=
$(PLAT_FAMILY_BASE)
/
$(PLAT)
/board/marvell_plat_config.c
...
...
plat/marvell/a8k/common/include/platform_def.h
View file @
ebf417aa
...
@@ -134,6 +134,8 @@
...
@@ -134,6 +134,8 @@
INTR_PROP_DESC(MARVELL_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, grp, \
INTR_PROP_DESC(MARVELL_IRQ_SEC_SGI_0, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_LEVEL), \
GIC_INTR_CFG_LEVEL), \
INTR_PROP_DESC(MARVELL_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, grp, \
INTR_PROP_DESC(MARVELL_IRQ_SEC_SGI_6, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_LEVEL), \
INTR_PROP_DESC(MARVELL_IRQ_PIC0, GIC_HIGHEST_SEC_PRIORITY, grp, \
GIC_INTR_CFG_LEVEL)
GIC_INTR_CFG_LEVEL)
#define PLAT_MARVELL_G1S_IRQ_PROPS(grp) \
#define PLAT_MARVELL_G1S_IRQ_PROPS(grp) \
...
@@ -199,4 +201,6 @@
...
@@ -199,4 +201,6 @@
#define BL32_BASE TRUSTED_DRAM_BASE
#define BL32_BASE TRUSTED_DRAM_BASE
#define MVEBU_PMU_IRQ_WA
#endif
/* __PLATFORM_DEF_H__ */
#endif
/* __PLATFORM_DEF_H__ */
plat/marvell/a8k/common/mss/mss_bl2_setup.c
View file @
ebf417aa
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a
8k
_common.h>
#include <a
rmada
_common.h>
#include <bl_common.h>
#include <bl_common.h>
#include <ccu.h>
#include <ccu.h>
#include <cp110_setup.h>
#include <cp110_setup.h>
...
...
plat/marvell/a8k/common/plat_bl31_setup.c
View file @
ebf417aa
...
@@ -5,12 +5,13 @@
...
@@ -5,12 +5,13 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a
8k
_common.h>
#include <a
rmada
_common.h>
#include <ap_setup.h>
#include <ap_setup.h>
#include <cp110_setup.h>
#include <cp110_setup.h>
#include <debug.h>
#include <debug.h>
#include <marvell_plat_priv.h>
#include <marvell_plat_priv.h>
#include <marvell_pm.h>
#include <marvell_pm.h>
#include <mc_trustzone/mc_trustzone.h>
#include <mmio.h>
#include <mmio.h>
#include <mci.h>
#include <mci.h>
#include <plat_marvell.h>
#include <plat_marvell.h>
...
@@ -75,6 +76,24 @@ _Bool is_pm_fw_running(void)
...
@@ -75,6 +76,24 @@ _Bool is_pm_fw_running(void)
return
pm_fw_running
;
return
pm_fw_running
;
}
}
/* For TrusTzone we treat the "target" field of addr_map_win
* struct as attribute
*/
static
const
struct
addr_map_win
tz_map
[]
=
{
{
PLAT_MARVELL_ATF_BASE
,
0x200000
,
TZ_PERM_ABORT
}
};
/* Configure MC TrustZone regions */
static
void
marvell_bl31_security_setup
(
void
)
{
int
tz_nr
,
win_id
;
tz_nr
=
ARRAY_SIZE
(
tz_map
);
for
(
win_id
=
0
;
win_id
<
tz_nr
;
win_id
++
)
tz_enable_win
(
MVEBU_AP0
,
tz_map
,
win_id
);
}
/* This function overruns the same function in marvell_bl31_setup.c */
/* This function overruns the same function in marvell_bl31_setup.c */
void
bl31_plat_arch_setup
(
void
)
void
bl31_plat_arch_setup
(
void
)
{
{
...
@@ -116,4 +135,6 @@ void bl31_plat_arch_setup(void)
...
@@ -116,4 +135,6 @@ void bl31_plat_arch_setup(void)
/* Configure GPIO */
/* Configure GPIO */
marvell_gpio_config
();
marvell_gpio_config
();
marvell_bl31_security_setup
();
}
}
plat/marvell/a8k/common/plat_ble_setup.c
View file @
ebf417aa
...
@@ -5,8 +5,8 @@
...
@@ -5,8 +5,8 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a8k_common.h>
#include <ap_setup.h>
#include <ap_setup.h>
#include <armada_common.h>
#include <aro.h>
#include <aro.h>
#include <ccu.h>
#include <ccu.h>
#include <cp110_setup.h>
#include <cp110_setup.h>
...
@@ -43,11 +43,22 @@
...
@@ -43,11 +43,22 @@
#define AVS_EN_CTRL_REG (MVEBU_AP_GEN_MGMT_BASE + 0x130)
#define AVS_EN_CTRL_REG (MVEBU_AP_GEN_MGMT_BASE + 0x130)
#define AVS_ENABLE_OFFSET (0)
#define AVS_ENABLE_OFFSET (0)
#define AVS_SOFT_RESET_OFFSET (2)
#define AVS_SOFT_RESET_OFFSET (2)
#define AVS_LOW_VDD_LIMIT_OFFSET (4)
#define AVS_HIGH_VDD_LIMIT_OFFSET (12)
#define AVS_TARGET_DELTA_OFFSET (21)
#define AVS_TARGET_DELTA_OFFSET (21)
#define AVS_VDD_LOW_LIMIT_MASK (0xFF << AVS_LOW_VDD_LIMIT_OFFSET)
#define AVS_VDD_HIGH_LIMIT_MASK (0xFF << AVS_HIGH_VDD_LIMIT_OFFSET)
#ifndef MVEBU_SOC_AP807
/* AP806 SVC bits */
#define AVS_LOW_VDD_LIMIT_OFFSET (4)
#define AVS_HIGH_VDD_LIMIT_OFFSET (12)
#define AVS_VDD_LOW_LIMIT_MASK (0xFF << AVS_LOW_VDD_LIMIT_OFFSET)
#define AVS_VDD_HIGH_LIMIT_MASK (0xFF << AVS_HIGH_VDD_LIMIT_OFFSET)
#else
/* AP807 SVC bits */
#define AVS_LOW_VDD_LIMIT_OFFSET (3)
#define AVS_HIGH_VDD_LIMIT_OFFSET (13)
#define AVS_VDD_LOW_LIMIT_MASK (0x3FF << AVS_LOW_VDD_LIMIT_OFFSET)
#define AVS_VDD_HIGH_LIMIT_MASK (0x3FF << AVS_HIGH_VDD_LIMIT_OFFSET)
#endif
/* VDD limit is 0.9V for A70x0 @ CPU frequency < 1600MHz */
/* VDD limit is 0.9V for A70x0 @ CPU frequency < 1600MHz */
#define AVS_A7K_LOW_CLK_VALUE ((0x80 << AVS_TARGET_DELTA_OFFSET) | \
#define AVS_A7K_LOW_CLK_VALUE ((0x80 << AVS_TARGET_DELTA_OFFSET) | \
(0x1A << AVS_HIGH_VDD_LIMIT_OFFSET) | \
(0x1A << AVS_HIGH_VDD_LIMIT_OFFSET) | \
...
@@ -84,11 +95,6 @@
...
@@ -84,11 +95,6 @@
#define AP807_CPU_ARO_SEL_PLL_MASK (0x1 << AP807_CPU_ARO_SEL_PLL_OFFSET)
#define AP807_CPU_ARO_SEL_PLL_MASK (0x1 << AP807_CPU_ARO_SEL_PLL_OFFSET)
/*
/*
* - AVS work points in the LD0 eFuse:
* SVC1 work point: LD0[88:81]
* SVC2 work point: LD0[96:89]
* SVC3 work point: LD0[104:97]
* SVC4 work point: LD0[112:105]
* - Identification information in the LD-0 eFuse:
* - Identification information in the LD-0 eFuse:
* DRO: LD0[74:65] - Not used by the SW
* DRO: LD0[74:65] - Not used by the SW
* Revision: LD0[78:75] - Not used by the SW
* Revision: LD0[78:75] - Not used by the SW
...
@@ -114,11 +120,30 @@
...
@@ -114,11 +120,30 @@
#define EFUSE_AP_LD0_SWREV_OFFS 50
/* LD0[115:113] */
#define EFUSE_AP_LD0_SWREV_OFFS 50
/* LD0[115:113] */
#define EFUSE_AP_LD0_SWREV_MASK 0x7
#define EFUSE_AP_LD0_SWREV_MASK 0x7
#define EFUSE_AP_LD0_SVC1_OFFS 18
/* LD0[88:81] */
#ifndef MVEBU_SOC_AP807
#define EFUSE_AP_LD0_SVC2_OFFS 26
/* LD0[96:89] */
/* AP806 AVS work points in the LD0 eFuse
#define EFUSE_AP_LD0_SVC3_OFFS 34
/* LD0[104:97] */
* SVC1 work point: LD0[88:81]
* SVC2 work point: LD0[96:89]
* SVC3 work point: LD0[104:97]
* SVC4 work point: LD0[112:105]
*/
#define EFUSE_AP_LD0_SVC1_OFFS 18
/* LD0[88:81] */
#define EFUSE_AP_LD0_SVC2_OFFS 26
/* LD0[96:89] */
#define EFUSE_AP_LD0_SVC3_OFFS 34
/* LD0[104:97] */
#define EFUSE_AP_LD0_WP_MASK 0xFF
#else
/* AP807 AVS work points in the LD0 eFuse
* SVC1 work point: LD0[91:81]
* SVC2 work point: LD0[102:92]
* SVC3 work point: LD0[113:103]
*/
#define EFUSE_AP_LD0_SVC1_OFFS 17
/* LD0[91:81] */
#define EFUSE_AP_LD0_SVC2_OFFS 28
/* LD0[102:92] */
#define EFUSE_AP_LD0_SVC3_OFFS 39
/* LD0[113:103] */
#define EFUSE_AP_LD0_WP_MASK 0x3FF
#endif
#define EFUSE_AP_LD0_SVC4_OFFS 42
/* LD0[112:105] */
#define EFUSE_AP_LD0_SVC4_OFFS 42
/* LD0[112:105] */
#define EFUSE_AP_LD0_WP_MASK 0xFF
#define EFUSE_AP_LD0_CLUSTER_DOWN_OFFS 4
#define EFUSE_AP_LD0_CLUSTER_DOWN_OFFS 4
...
@@ -233,16 +258,8 @@ static void ble_plat_svc_config(void)
...
@@ -233,16 +258,8 @@ static void ble_plat_svc_config(void)
uint32_t
reg_val
,
avs_workpoint
,
freq_pidi_mode
;
uint32_t
reg_val
,
avs_workpoint
,
freq_pidi_mode
;
uint64_t
efuse
;
uint64_t
efuse
;
uint32_t
device_id
,
single_cluster
;
uint32_t
device_id
,
single_cluster
;
uint8_t
svc
[
4
],
perr
[
4
],
i
,
sw_ver
;
uint16_t
svc
[
4
],
perr
[
4
],
i
,
sw_ver
;
unsigned
int
ap_type
;
/* Due to a bug in A3900 device_id skip SVC config
* TODO: add SVC config once it is decided for a3900
*/
if
(
ble_get_ap_type
()
==
CHIP_ID_AP807
)
{
NOTICE
(
"SVC: SVC is not supported on AP807
\n
"
);
ble_plat_avs_config
();
return
;
}
/* Set access to LD0 */
/* Set access to LD0 */
reg_val
=
mmio_read_32
(
MVEBU_AP_EFUSE_SRV_CTRL_REG
);
reg_val
=
mmio_read_32
(
MVEBU_AP_EFUSE_SRV_CTRL_REG
);
...
@@ -276,9 +293,19 @@ static void ble_plat_svc_config(void)
...
@@ -276,9 +293,19 @@ static void ble_plat_svc_config(void)
svc
[
0
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC1_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
svc
[
0
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC1_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
svc
[
1
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC2_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
svc
[
1
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC2_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
svc
[
2
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC3_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
svc
[
2
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC3_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
svc
[
3
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC4_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
INFO
(
"SVC: Efuse WP: [0]=0x%x, [1]=0x%x, [2]=0x%x, [3]=0x%x
\n
"
,
/* Fetch AP type to distinguish between AP806 and AP807 */
svc
[
0
],
svc
[
1
],
svc
[
2
],
svc
[
3
]);
ap_type
=
ble_get_ap_type
();
if
(
ap_type
!=
CHIP_ID_AP807
)
{
svc
[
3
]
=
(
efuse
>>
EFUSE_AP_LD0_SVC4_OFFS
)
&
EFUSE_AP_LD0_WP_MASK
;
INFO
(
"SVC: Efuse WP: [0]=0x%x, [1]=0x%x, [2]=0x%x, [3]=0x%x
\n
"
,
svc
[
0
],
svc
[
1
],
svc
[
2
],
svc
[
3
]);
}
else
{
INFO
(
"SVC: Efuse WP: [0]=0x%x, [1]=0x%x, [2]=0x%x
\n
"
,
svc
[
0
],
svc
[
1
],
svc
[
2
]);
}
/* Validate parity of SVC workpoint values */
/* Validate parity of SVC workpoint values */
for
(
i
=
0
;
i
<
4
;
i
++
)
{
for
(
i
=
0
;
i
<
4
;
i
++
)
{
...
@@ -385,6 +412,26 @@ static void ble_plat_svc_config(void)
...
@@ -385,6 +412,26 @@ static void ble_plat_svc_config(void)
avs_workpoint
=
0
;
avs_workpoint
=
0
;
break
;
break
;
}
}
}
else
if
(
device_id
==
MVEBU_3900_DEV_ID
)
{
NOTICE
(
"SVC: DEV ID: %s, FREQ Mode: 0x%x
\n
"
,
"3900"
,
freq_pidi_mode
);
switch
(
freq_pidi_mode
)
{
case
CPU_1600_DDR_1200_RCLK_1200
:
if
(
perr
[
0
])
goto
perror
;
avs_workpoint
=
svc
[
0
];
break
;
case
CPU_1300_DDR_800_RCLK_800
:
if
(
perr
[
1
])
goto
perror
;
avs_workpoint
=
svc
[
1
];
break
;
default:
if
(
perr
[
0
])
goto
perror
;
avs_workpoint
=
svc
[
0
];
break
;
}
}
else
{
}
else
{
ERROR
(
"SVC: Unsupported Device ID 0x%x
\n
"
,
device_id
);
ERROR
(
"SVC: Unsupported Device ID 0x%x
\n
"
,
device_id
);
return
;
return
;
...
@@ -397,7 +444,8 @@ static void ble_plat_svc_config(void)
...
@@ -397,7 +444,8 @@ static void ble_plat_svc_config(void)
}
}
/* Remove parity bit */
/* Remove parity bit */
avs_workpoint
&=
0x7F
;
if
(
ap_type
!=
CHIP_ID_AP807
)
avs_workpoint
&=
0x7F
;
reg_val
=
mmio_read_32
(
AVS_EN_CTRL_REG
);
reg_val
=
mmio_read_32
(
AVS_EN_CTRL_REG
);
NOTICE
(
"SVC: AVS work point changed from 0x%x to 0x%x
\n
"
,
NOTICE
(
"SVC: AVS work point changed from 0x%x to 0x%x
\n
"
,
...
...
plat/marvell/a8k/common/plat_pm.c
View file @
ebf417aa
...
@@ -5,7 +5,7 @@
...
@@ -5,7 +5,7 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <a
8k
_common.h>
#include <a
rmada
_common.h>
#include <assert.h>
#include <assert.h>
#include <bakery_lock.h>
#include <bakery_lock.h>
#include <debug.h>
#include <debug.h>
...
@@ -379,8 +379,10 @@ static int a8k_validate_power_state(unsigned int power_state,
...
@@ -379,8 +379,10 @@ static int a8k_validate_power_state(unsigned int power_state,
*/
*/
static
void
a8k_cpu_standby
(
plat_local_state_t
cpu_state
)
static
void
a8k_cpu_standby
(
plat_local_state_t
cpu_state
)
{
{
ERROR
(
"%s: needs to be implemented
\n
"
,
__func__
);
if
(
!
is_pm_fw_running
())
{
panic
();
ERROR
(
"%s: needs to be implemented
\n
"
,
__func__
);
panic
();
}
}
}
/*****************************************************************************
/*****************************************************************************
...
...
plat/marvell/common/marvell_gicv2.c
View file @
ebf417aa
...
@@ -5,7 +5,11 @@
...
@@ -5,7 +5,11 @@
* https://spdx.org/licenses
* https://spdx.org/licenses
*/
*/
#include <bakery_lock.h>
#include <debug.h>
#include <gicv2.h>
#include <gicv2.h>
#include <interrupt_mgmt.h>
#include <mmio.h>
#include <plat_marvell.h>
#include <plat_marvell.h>
#include <platform.h>
#include <platform.h>
#include <platform_def.h>
#include <platform_def.h>
...
@@ -17,6 +21,21 @@
...
@@ -17,6 +21,21 @@
#pragma weak plat_marvell_gic_driver_init
#pragma weak plat_marvell_gic_driver_init
#pragma weak plat_marvell_gic_init
#pragma weak plat_marvell_gic_init
#define A7K8K_PIC_CAUSE_REG 0xf03f0100
#define A7K8K_PIC0_MASK_REG 0xf03f0108
#define A7K8K_PIC_PMUOF_IRQ_MASK (1 << 17)
#define A7K8K_PIC_MAX_IRQS 32
#define A7K8K_PIC_MAX_IRQ_MASK ((1UL << A7K8K_PIC_MAX_IRQS) - 1)
#define A7K8K_ODMIN_SET_REG 0xf0300040
#define A7K8K_ODMI_PMU_IRQ(idx) ((2 + idx) << 12)
#define A7K8K_ODMI_PMU_GIC_IRQ(idx) (130 + idx)
static
DEFINE_BAKERY_LOCK
(
a7k8k_irq_lock
);
/*
/*
* On a GICv2 system, the Group 1 secure interrupts are treated as Group 0
* On a GICv2 system, the Group 1 secure interrupts are treated as Group 0
* interrupts.
* interrupts.
...
@@ -50,6 +69,74 @@ void plat_marvell_gic_driver_init(void)
...
@@ -50,6 +69,74 @@ void plat_marvell_gic_driver_init(void)
gicv2_driver_init
(
&
marvell_gic_data
);
gicv2_driver_init
(
&
marvell_gic_data
);
}
}
static
uint64_t
a7k8k_pmu_interrupt_handler
(
uint32_t
id
,
uint32_t
flags
,
void
*
handle
,
void
*
cookie
)
{
unsigned
int
idx
=
plat_my_core_pos
();
uint32_t
irq
;
bakery_lock_get
(
&
a7k8k_irq_lock
);
/* Acknowledge IRQ */
irq
=
plat_ic_acknowledge_interrupt
();
plat_ic_end_of_interrupt
(
irq
);
if
(
irq
!=
MARVELL_IRQ_PIC0
)
{
bakery_lock_release
(
&
a7k8k_irq_lock
);
return
0
;
}
/* Acknowledge PMU overflow IRQ in PIC0 */
mmio_setbits_32
(
A7K8K_PIC_CAUSE_REG
,
A7K8K_PIC_PMUOF_IRQ_MASK
);
/* Trigger ODMI Frame IRQ */
mmio_write_32
(
A7K8K_ODMIN_SET_REG
,
A7K8K_ODMI_PMU_IRQ
(
idx
));
bakery_lock_release
(
&
a7k8k_irq_lock
);
return
0
;
}
void
mvebu_pmu_interrupt_enable
(
void
)
{
unsigned
int
idx
;
uint32_t
flags
;
int32_t
rc
;
/* Reset PIC */
mmio_write_32
(
A7K8K_PIC_CAUSE_REG
,
A7K8K_PIC_MAX_IRQ_MASK
);
/* Unmask PMU overflow IRQ in PIC0 */
mmio_clrbits_32
(
A7K8K_PIC0_MASK_REG
,
A7K8K_PIC_PMUOF_IRQ_MASK
);
/* Configure ODMI Frame IRQs as edge triggered */
for
(
idx
=
0
;
idx
<
PLATFORM_CORE_COUNT
;
idx
++
)
gicv2_interrupt_set_cfg
(
A7K8K_ODMI_PMU_GIC_IRQ
(
idx
),
GIC_INTR_CFG_EDGE
);
/*
* Register IRQ handler as INTR_TYPE_S_EL1 as its the only valid type
* for GICv2 in ARM-TF.
*/
flags
=
0U
;
set_interrupt_rm_flag
((
flags
),
(
NON_SECURE
));
rc
=
register_interrupt_type_handler
(
INTR_TYPE_S_EL1
,
a7k8k_pmu_interrupt_handler
,
flags
);
if
(
rc
!=
0
)
panic
();
}
void
mvebu_pmu_interrupt_disable
(
void
)
{
/* Reset PIC */
mmio_write_32
(
A7K8K_PIC_CAUSE_REG
,
A7K8K_PIC_MAX_IRQ_MASK
);
/* Mask PMU overflow IRQ in PIC0 */
mmio_setbits_32
(
A7K8K_PIC0_MASK_REG
,
A7K8K_PIC_PMUOF_IRQ_MASK
);
}
void
plat_marvell_gic_init
(
void
)
void
plat_marvell_gic_init
(
void
)
{
{
gicv2_distif_init
();
gicv2_distif_init
();
...
...
plat/marvell/common/mrvl_sip_svc.c
View file @
ebf417aa
...
@@ -9,6 +9,7 @@
...
@@ -9,6 +9,7 @@
#include <cache_llc.h>
#include <cache_llc.h>
#include <debug.h>
#include <debug.h>
#include <marvell_plat_priv.h>
#include <marvell_plat_priv.h>
#include <plat_marvell.h>
#include <runtime_svc.h>
#include <runtime_svc.h>
#include <smcc.h>
#include <smcc.h>
#include "comphy/phy-comphy-cp110.h"
#include "comphy/phy-comphy-cp110.h"
...
@@ -30,6 +31,8 @@
...
@@ -30,6 +31,8 @@
/* Miscellaneous FID's' */
/* Miscellaneous FID's' */
#define MV_SIP_DRAM_SIZE 0x82000010
#define MV_SIP_DRAM_SIZE 0x82000010
#define MV_SIP_LLC_ENABLE 0x82000011
#define MV_SIP_LLC_ENABLE 0x82000011
#define MV_SIP_PMU_IRQ_ENABLE 0x82000012
#define MV_SIP_PMU_IRQ_DISABLE 0x82000013
#define MAX_LANE_NR 6
#define MAX_LANE_NR 6
#define MVEBU_COMPHY_OFFSET 0x441000
#define MVEBU_COMPHY_OFFSET 0x441000
...
@@ -109,6 +112,14 @@ uintptr_t mrvl_sip_smc_handler(uint32_t smc_fid,
...
@@ -109,6 +112,14 @@ uintptr_t mrvl_sip_smc_handler(uint32_t smc_fid,
llc_runtime_enable
(
i
);
llc_runtime_enable
(
i
);
SMC_RET1
(
handle
,
0
);
SMC_RET1
(
handle
,
0
);
#ifdef MVEBU_PMU_IRQ_WA
case
MV_SIP_PMU_IRQ_ENABLE
:
mvebu_pmu_interrupt_enable
();
SMC_RET1
(
handle
,
0
);
case
MV_SIP_PMU_IRQ_DISABLE
:
mvebu_pmu_interrupt_disable
();
SMC_RET1
(
handle
,
0
);
#endif
default:
default:
ERROR
(
"%s: unhandled SMC (0x%x)
\n
"
,
__func__
,
smc_fid
);
ERROR
(
"%s: unhandled SMC (0x%x)
\n
"
,
__func__
,
smc_fid
);
...
...
plat/marvell/marvell.mk
View file @
ebf417aa
...
@@ -48,6 +48,7 @@ mrvl_clean:
...
@@ -48,6 +48,7 @@ mrvl_clean:
${Q}${MAKE}
PLAT
=
${PLAT}
--no-print-directory
-C
${DOIMAGEPATH}
clean
${Q}${MAKE}
PLAT
=
${PLAT}
--no-print-directory
-C
${DOIMAGEPATH}
clean
${DOIMAGETOOL}
:
mrvl_clean
${DOIMAGETOOL}
:
mrvl_clean
@
$(DOIMAGE_LIBS_CHECK)
${Q}${MAKE}
--no-print-directory
-C
${DOIMAGEPATH}
WTMI_IMG
=
$(WTMI_IMG)
${Q}${MAKE}
--no-print-directory
-C
${DOIMAGEPATH}
WTMI_IMG
=
$(WTMI_IMG)
plat/marvell/version.mk
View file @
ebf417aa
SUBVERSION
=
devel-18.0
8.0
SUBVERSION
=
devel-18.0
9.1
tools/doimage/doimage.c
View file @
ebf417aa
...
@@ -768,7 +768,7 @@ int parse_sec_config_file(char *filename)
...
@@ -768,7 +768,7 @@ int parse_sec_config_file(char *filename)
/* CSK index option */
/* CSK index option */
if
(
config_lookup_int
(
&
sec_cfg
,
"csk_key_index"
,
if
(
config_lookup_int
(
&
sec_cfg
,
"csk_key_index"
,
&
cfg_int32
)
!=
CONFIG_TRUE
)
{
&
cfg_int32
)
!=
CONFIG_TRUE
)
{
fprintf
(
stderr
,
"Error obtaining
\"
flash_id
\"
element. "
fprintf
(
stderr
,
"Error obtaining
\"
flash_id
\"
element. "
);
fprintf
(
stderr
,
"Using default - 0x0
\n
"
);
fprintf
(
stderr
,
"Using default - 0x0
\n
"
);
cfg_int32
=
0
;
cfg_int32
=
0
;
}
}
...
...
tools/doimage/secure/aes_key.txt
0 → 100644
View file @
ebf417aa
ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890ABCDEF1234567890
tools/doimage/secure/csk_priv_pem0.key
0 → 100644
View file @
ebf417aa
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAm6jN6o2zQmtyUlvfkfDbSjPJ7Vlpp/KgK/eznoVBBsDIZakX
cIgf8TSLpNVkc+ZE0f/n8X7mEZIyjuSBObLOm9vbkoZcR7DlKUL7RNNOUCv55Ozl
hQwrzpH/uIyIJTvmek29G5wroi0wGbPoxzhelIRTjVCibleBWhYCmZQ6SIRmTY8L
JT8VkX8I/Mhu62DjvxF3BnV6pXuh/FdgDN7MbldzM8Y+GOxVGi5Kcm5WHY7eyMxl
4Y0Yko31Xv7T1PcXahVBIciT+11w+fLc4wQuCJ6GUf9JbzQ0ZllY/FdRG0AhuRMH
zN0jAc/sKrIFoAErED6qlcoQg0vl7gmWN5x+2wIDAQABAoIBACtnPFOkw1FH6I6y
c3qcMGlWW33FKsLb0nGwFfOjsGgTpU1Dgver3UxCnJWPsvzmPlZYBvK9saVAoLxb
VvUhuJ6ZBXar5FtRJfUFak7cpL+SI5IDxFP++tAUwbtR5DyNoUyFFK/4Mep8sybX
lZbHTwgWhb2nuEMQP09BR+RPAplpcitkIoPkhmbGfbt9Hsd25I3bb5Z9R4S/2Rcf
7tmaxndQamij7/pUI7xtd8L6cMESJGIWrgEt/MaT2z8nNPE3EDctDSlH9yKqA2O7
/LTfrxNDnw5gGRtOgahloThKljVM6pQa4mi91FufD67pHwnKn8urNbt8/3AWg6uU
x4FzZdECgYEA0k2UYzBM+dU6T1bZZ176YI0cZrP1tbf/JwnZGHicQYS7lPLAqgfO
u5oRQzuDimOXaV4xCPBO2nadd6aBxbZTXaglR7GG2uCHX6w2DnOr8/d66YTErTVV
u7/Bf8gMKT9mM4rWPrOEXfXfF0fvcpkBQ+QDynIB37tx/mj2lXRkLx0CgYEAvXuX
Dbe2QgSK0ajrcH7YJyx3RVx9RonOqL4yjCVCELmaDQd307Ef3j+gkd59XIewm+HA
mPyeWEUd8EzH+UvjckfKFuF2I4lEUUWtVZTa7me7mvsFqeEOu5KusD4+Hs+B9Kqd
3Evqcpj2lcMBI519Hvr9BTKfDBcH1EUos6A9rFcCgYAxsyPeTQvj/wBIv72hMFD7
gF2159GpoFIsZ6dmoRpMYZHzIWtmw3GX5FEwEmCD1AV0YU41TpVUC7QrEq6Yiv4o
pBQrXUkBcQ6NDaW4xJ1eip4Bkd7pEDGyrR6NlDlLhjAg/i6joskla3XNirKL4pzp
7nj23vqSZToLZcLgjyEeAQKBgD5EvDo80j9VwMzvpxecB6qv+S4pG94vcWOQxYm6
wMBATjjT6HP/9EoUPM9S/32F9er0QFfGRL8bT6Blix4I62Dl6KqmQy2gcXwH2tOS
DHRmUIe40H6oQDAyHwg6HC4B4WInI6N+qzgnvnku0VQD8FdbAgVQQmY1t1PxulN1
aG8XAoGAPWAr4i8KkVAx4wLlMF8E/ecKcsX1J0+UuKket7Dvk7xJfwtkSLPeV8Bp
HuoHXMM3KYoZ93Hlto5rAT1VQhYuj7heU10v+9UtYTFHgaitptYmxovoCKKiZICl
48aPUI377e5jQ6RhhGYy8ltKsJ80K1T9DIkThJPSS+9NAI+jrmg=
-----END RSA PRIVATE KEY-----
tools/doimage/secure/csk_priv_pem1.key
0 → 100644
View file @
ebf417aa
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAgwHXB0AaIhT15Z9lHpQ2YT1W8i4oMvvRiLGQCrba5l7BJ03E
ct0x3zagNKZEnpNndT4EAy98ihkhwVlUhxZCparJ2L3JsTs5RgV0wyQkQzwMLM8g
QI5EMmJCgFAVRHmVICOsisGGfNVUHjGdGwPOipyQCsX2MAm3E139VpB7NYj+Q4IR
4kvcb+59LZxKuRJTFKRDIqMGJu98P/ga70+YLXPCBPKSfnZnUppuaI86jF1E6xt8
o7YtfEPCHDd2LXxKPZ670OapVqwo0t7ZSzEG63NkLp56FXc1OpfC69C8VPiZ8JqW
wxvS/vL8MMCxsBnjSuqnmOAbcNR2GFtUwJOGwwIDAQABAoIBAFcfoiDwQHDp/531
ownzBzcj0+67Q4Ckd3SwoVp+wJTz7wB0d3DsKX6IlYJuELRk0yjlVUXJDsnIbOpo
vg4Yf7otGo9JqBh1imFGv6AHKRaNmIs0M/66nh/juNYcbAhd0w7MqrKcgRQDyy1J
UXHl1jXYaPLBNDg+PcJjf1dSPp4axzmW2Pk2rXnJCsPcZXL/0YmEvqhfOze0GdjR
hOkbbr6MPPVM66tA00xSwg9XEYJvHtwH6oB0rnANM8ieNK1mtcWkTU5di17CCrjS
ohIhXQrdVpxt549EJoUqEFSgo8OOMm2npDbFrjlukb5euakvMacwoT1te79blSKf
hrTvjgECgYEA0VqoFL0Vqe1qleikYDJ7S5xcv1oruEV31TeuBhDuf0c4PADCnBrV
/RnCEYuXs6wCk60chHg5s0jxg+nGbiY6jRTHkJLRU3ZhDtrtfidEZ78GRzFF3shl
Uzt7dHkKK1ZdiMH4sWzyRLom91TKWMrNKC1AD7v4/zjEXy6phall3ZcCgYEAoDJa
0dIKvVCS6dM2E2kMqi/45mJqsJzFvYL1s4mbma/BAC47bBju/YEse90x+iIi3Gg/
NoXmNfGPrtgdl+/J/Y6Pohxf/e7gGN71tYVETzgc2Jv09wqmzmTjCmo3wyepyWf+
pIAE39kdhwnqXVw5xwOG1N3xrQ9TomOO+1QiXbUCgYAF84TJqiJehUA9aLKbhXPZ
z2UXj3GkuFzSs9V/mKWe+qBPnFnr5BtnKX9JzmUOl3ovRoGEBoLlZNJwxIl+ghmx
/wA5TOMkcz4JFRIhPu6D4HtGNNFepuWyewNkaThvyPG5vIHcUVOFvqDy8PcblRBF
7xteFyLZ5nw2lHX/NbSOmwKBgFxLZqPIPcPArkPlGhyow1Ex/lbNkOZcDFkZIHHl
8C3lYm62NCodW2PWjkh2shqInEkcDn9dObsOh1eWz8X/swJQplQhwPROMfJiUnHY
a/iwPX5WrBXAn0X+Pgh8FdBsA5g0QDOKRkSplCd/APX08pzEXWQ60siAMhE3BuOq
H3qZAoGAVnzFidlXuyn+fbNaNVepK9hbuoxHHbzYYWSkpi+73EchN8kXktC+AdEf
owr9TPILbwWWJyisa3wW4xdbMifCgVLTedWZpZ09BENVqC+7g7ksX0pNMGYuFLOh
Td7mFAgmclxG5UiKexajOLjjdnAsJyrDaNKhHn8NQNN6L93N0sE=
-----END RSA PRIVATE KEY-----
tools/doimage/secure/csk_priv_pem2.key
0 → 100644
View file @
ebf417aa
-----BEGIN RSA PRIVATE KEY-----
MIIEogIBAAKCAQEAjxTSTh57/5njUpE200+Qb3ySAn8lKeufgaa0K2Xc6Ri7lDZR
ZJ2BPuQZV4lYGqgWUf0IOzNf2WnE2lPfVnLMx08h7NhBqJ83yJVajpr+itnOmW+r
M7h76TFyuna1xz2kw1uhgI5Y4FRnJ4Cg4AexCSyViXSzEN/7LQwxa5z5WGDiNX5N
3/tgjGu+dzSMOiIQhXwIcK/XaiQNm3WHqqnAhPb5Q9IBuuqBfpZoFfH4XmbFWrC8
neSMMMxX5Ti9pKhLd1EsiaP0aUNQlF8gNWuC/tNaf+OCtwVelVa3sGSRjRFe06VQ
sAE9oyXKri11yD5Dwp1xXivbpOrf7xjUe5gILwIDAQABAoIBABTr94CCxqDucKYP
I9QsSzNyJKuGyfliQdWkea3q3C2ddzhJ5QbwXQjEM8xwAdkMAQ+GD2EQtxBEfgtq
vjqW2MjAEnbefGNavL5w0GgP0+6bwLEA+ii67iuAFoWbfCMhKWmDiY8RwX8z+E13
ao63sTRlN4x86v4pskG5CbTxpCg+8m7KklLns4SwRGf5gGQcgKRtNSR5nE4g2UNl
dghbDdNlvUncm4zxUcTh0kquhF5Tef5w+6L7W8Hv9Pky3b1c2OK1BMhJlxYrtt69
/zhIJs89CLx5ACfam+DT/xs0uUiuRQq/e1CCQLCnUO02JqpeN/schtDCd0ZWhbtB
nT7fwTECgYEAx+COhys+7AZI0U+PeuTkI86GUsWHoBislXThxbxyGvMFjgyADZD+
q/XEGAcxd4eTA1fr0Q9cLuuHZubjGQ7+OIXMZ6arXUsrmMrjRu3kHO+y6K6r4s8j
5bxN/iQ0bymUtJRfJSLI172plszusiPWhCL5+yhYlNoh4mNZJuJnzXkCgYEAt0Gz
07P19YPsxk5ow7ZnSNOMOkkEPP0SuHHWekMIK9KMjiRUSygOAk07zTL7MUoFn9Gy
Prfi0ybFArNhIa4Xio3Fbjfig7rGgaApK4Y3d9A/CGPv/Nj7C2OTepqlEzRLmU9e
Xw5yhbccCydXLyAYFAET2XHsmbewpvHyeYUSoOcCgYBRMJEUrOdhPmhDxZqVo/Zb
6R887gnaaUtpZlHzXUnIUqEWA1PcruIT/b/KttlMIWEBQayDfkbGtFuK3AyxeBqh
4Q+XpucC/W7XIMrTW/yGGIPG6nTdq6B8SFIyAojeArjp5T8Eua11nRAPNm1bJR2V
DRQYBlp9FGIhMJPdLKhXmQKBgGeywSyR0COfBHPu2K+u3uFB/D7bJI/ScS54FHLY
zZ3mpeylOCHTR6IbzDRAng31Ihue0KtW6P6tGJx/nv4tAltAADFvZDlAjqW5WLKt
X2PoLlL0IlBFBEIclc6yBalJVWIqnG9TwJBT3oWdPGOJWLaxKWdJZSZS4J6HmLsV
B0aPAoGAduLsOt8C5z48jPqmJxyPwsmT0Q424FccPMcvGOJ13yxq3xNsfAsbmg9l
L2i/ktE0wCMA+Pm7cuFgxwD7xTr67POZgt9022KsOSonjPsIn24UQeP46vAX/Qtx
Qf3sfvzf57vNy2Hybe38T8RsVOZla+v/QctfSfmb8Y95XL/SZzA=
-----END RSA PRIVATE KEY-----
tools/doimage/secure/csk_priv_pem3.key
0 → 100644
View file @
ebf417aa
-----BEGIN RSA PRIVATE KEY-----
MIIEowIBAAKCAQEAlA/T/5IMTPTu+k5PeesB2oeP80Y6nq0ls8vXLul0TVEJoJ+O
InbPYNqYPu4dbQQg/u8qp8BeXm2ujtJbBTcdn0jKIiDTKYEnlsGfUt9GHnuuzvFh
rORSKuAolUqvo/zcSCo1uykaFvSuyTovSPlwllzSixD9XBbHfn3kXneiIUa45vsJ
AyjTn2qCJt0WgvX42NTxH6Q/OWLeOuKTyRHf25eabucIv77KYy0mlEPq5jjiV5AJ
gl5F1h5G8n07JCIWjkZ2QV4wr+Hv9uGNaSb0WGppBp4CbdQa0eUI75cKzz4WXqds
HZaYiX/a8YC+EUfvqDD02vKREIKFL/1zL53P/wIDAQABAoIBAGzBj5w7oBNrGpr7
qL9KEyt8xg0Q+gAR+Q6vXRlVXBtquiKk8Jd6I+vlxUz8RNsN3FrGPNPJpse/0yeP
dlJHYNfedLNK3zCucPD4uln6LRw5B3d0sKV5dK2Px9+ZY5iWJQxRDPS0RTi1dCnV
NmRo7P1Vo0WJLkFVbiYIvRVy1MGRfF9ejN41G6U4MoBAQ9WqLp+JasUMTspZI49a
z8tOiJPT94MHBwbKnz8Mcq8sy02LR7U5h82+0T7JoRVix/OXiOoiQExNjZ9yGar0
wBnl0SL1UW5UUaYzbyNH0mlMXLD+qowbDZM2pBWPfqXK+CMOsL6STIwnns7lY+ZJ
ILbaVmECgYEA2kQXE1PZ25A87a81wCEld402WJ2KegrZC719EWv+xeoS72Ji8uv7
V0PxVGJQOcG1N+dzJ5tN59SQ/NvVTrjwqNUxQqsygmWq/TcfGb9ONZRmyzcehYLb
m4xTjqJKQ6Kwm5SoaCYmzEb/xaeLwLS9HmR9MdB1dxtDOLpjaK/8qPECgYEArait
QhgaknlxG8pcAimPsEUrLHYWSFRE/MUk4+YvZg/5+YJ8csvY0SO2h0tF/ARwUrdI
DaLEifHm4vqgN03K/0gqj7TKxcNlV16PvVx7Vz97xejdqdHZLDfAo4lcotsgvFQW
zIqoQGGPLf6WhFixZ8mEYj8xnmzLGPvHQmf1h+8CgYEA0LDl917nIN4qw4ARPqDy
t/pXCienrcUNfgIxwSSnNwj2DdjejzI+4VNfPbW6y16BLPCp1CbUOGOwNXTj4R9H
S8Z8ESirZK5c7Tt1CyM1XlmEZ61OC43w+CsWAXz+0OiPQFLFKr+/vPXtvEjUgO7P
HG4sniKZDccNYQIl5oTOaaECgYAPU4u3AZmWw9EPutRT/IcJ75DX47Qjvgw4os2W
r4IPZ+mP88w39XW1P4mkdyg+DcY8BqD9Uxg1dHwEHEp3lw4LabsX48Thn1UaWOYm
uDrKgHfUB7FIg5S/Kkx+ImliliRVerZoZvRiejnAvW9bTtiZaFeetCUU7lUeZ1o2
qiYpUQKBgHQDfdDhguBGPKpkJ7pVwHkJA/lyRWaN1hwplw4TvX2oH14NsHg5Q5Fd
lHqHFs2Ry/6X3bKgF0E6q4cx0V1Xnnj9sGsemlrHdiSxplDYRQql7X5OeYPGF/Bg
ZTTG8rDwy+ey6EP9BZUb03hISx/LyMynOzjGl6uOcdAcy2d9Vno0
-----END RSA PRIVATE KEY-----
Prev
1
2
3
Next
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
.
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment