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
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
Show 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
;
/* Fetch AP type to distinguish between AP806 and AP807 */
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
"
,
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
]);
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,6 +444,7 @@ static void ble_plat_svc_config(void)
...
@@ -397,6 +444,7 @@ static void ble_plat_svc_config(void)
}
}
/* Remove parity bit */
/* Remove parity bit */
if
(
ap_type
!=
CHIP_ID_AP807
)
avs_workpoint
&=
0x7F
;
avs_workpoint
&=
0x7F
;
reg_val
=
mmio_read_32
(
AVS_EN_CTRL_REG
);
reg_val
=
mmio_read_32
(
AVS_EN_CTRL_REG
);
...
...
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
)
{
{
if
(
!
is_pm_fw_running
())
{
ERROR
(
"%s: needs to be implemented
\n
"
,
__func__
);
ERROR
(
"%s: needs to be implemented
\n
"
,
__func__
);
panic
();
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