Commit ea8d69af authored by danh-arm's avatar danh-arm
Browse files

Merge pull request #519 from vikramkanigiri/vk/misc_plat_reorg

Vk/misc plat reorg
parents 4a966306 65cb1c4c
/* /*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -239,44 +239,31 @@ ...@@ -239,44 +239,31 @@
#define BL1_RO_LIMIT (PLAT_ARM_TRUSTED_ROM_BASE \ #define BL1_RO_LIMIT (PLAT_ARM_TRUSTED_ROM_BASE \
+ PLAT_ARM_TRUSTED_ROM_SIZE) + PLAT_ARM_TRUSTED_ROM_SIZE)
/* /*
* Put BL1 RW at the top of the Trusted SRAM. BL1_RW_BASE is calculated using * Put BL1 RW at the top of the Trusted SRAM.
* the current BL1 RW debug size plus a little space for growth.
*/ */
#if TRUSTED_BOARD_BOOT
#define BL1_RW_BASE (ARM_BL_RAM_BASE + \ #define BL1_RW_BASE (ARM_BL_RAM_BASE + \
ARM_BL_RAM_SIZE - \ ARM_BL_RAM_SIZE - \
0x9000) PLAT_ARM_MAX_BL1_RW_SIZE)
#else
#define BL1_RW_BASE (ARM_BL_RAM_BASE + \
ARM_BL_RAM_SIZE - \
0x6000)
#endif
#define BL1_RW_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) #define BL1_RW_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
/******************************************************************************* /*******************************************************************************
* BL2 specific defines. * BL2 specific defines.
******************************************************************************/ ******************************************************************************/
/* /*
* Put BL2 just below BL31. BL2_BASE is calculated using the current BL2 debug * Put BL2 just below BL31.
* size plus a little space for growth.
*/ */
#if TRUSTED_BOARD_BOOT #define BL2_BASE (BL31_BASE - PLAT_ARM_MAX_BL2_SIZE)
#define BL2_BASE (BL31_BASE - 0x1D000)
#else
#define BL2_BASE (BL31_BASE - 0xC000)
#endif
#define BL2_LIMIT BL31_BASE #define BL2_LIMIT BL31_BASE
/******************************************************************************* /*******************************************************************************
* BL31 specific defines. * BL31 specific defines.
******************************************************************************/ ******************************************************************************/
/* /*
* Put BL31 at the top of the Trusted SRAM. BL31_BASE is calculated using the * Put BL31 at the top of the Trusted SRAM.
* current BL31 debug size plus a little space for growth.
*/ */
#define BL31_BASE (ARM_BL_RAM_BASE + \ #define BL31_BASE (ARM_BL_RAM_BASE + \
ARM_BL_RAM_SIZE - \ ARM_BL_RAM_SIZE - \
0x1D000) PLAT_ARM_MAX_BL31_SIZE)
#define BL31_PROGBITS_LIMIT BL1_RW_BASE #define BL31_PROGBITS_LIMIT BL1_RW_BASE
#define BL31_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE) #define BL31_LIMIT (ARM_BL_RAM_BASE + ARM_BL_RAM_SIZE)
......
/* /*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -37,11 +37,6 @@ ...@@ -37,11 +37,6 @@
#include <stdint.h> #include <stdint.h>
#include <xlat_tables.h> #include <xlat_tables.h>
/*
* Extern declarations common to ARM standard platforms
*/
extern const mmap_region_t plat_arm_mmap[];
#define ARM_CASSERT_MMAP \ #define ARM_CASSERT_MMAP \
CASSERT((ARRAY_SIZE(plat_arm_mmap) + ARM_BL_REGIONS) \ CASSERT((ARRAY_SIZE(plat_arm_mmap) + ARM_BL_REGIONS) \
<= MAX_MMAP_REGIONS, \ <= MAX_MMAP_REGIONS, \
...@@ -204,6 +199,6 @@ int plat_arm_get_alt_image_source( ...@@ -204,6 +199,6 @@ int plat_arm_get_alt_image_source(
uintptr_t *dev_handle, uintptr_t *dev_handle,
uintptr_t *image_spec); uintptr_t *image_spec);
unsigned int plat_arm_calc_core_pos(u_register_t mpidr); unsigned int plat_arm_calc_core_pos(u_register_t mpidr);
const mmap_region_t *plat_arm_get_mmap(void);
#endif /* __PLAT_ARM_H__ */ #endif /* __PLAT_ARM_H__ */
/* /*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -45,7 +45,6 @@ ...@@ -45,7 +45,6 @@
/* Following covers CSS Peripherals excluding NSROM and NSRAM */ /* Following covers CSS Peripherals excluding NSROM and NSRAM */
#define CSS_DEVICE_BASE 0x20000000 #define CSS_DEVICE_BASE 0x20000000
#define CSS_DEVICE_SIZE 0x0e000000 #define CSS_DEVICE_SIZE 0x0e000000
#define MHU_BASE 0x2b1f0000
#define NSRAM_BASE 0x2e000000 #define NSRAM_BASE 0x2e000000
#define NSRAM_SIZE 0x00008000 #define NSRAM_SIZE 0x00008000
...@@ -103,6 +102,35 @@ ...@@ -103,6 +102,35 @@
CSS_DEVICE_SIZE, \ CSS_DEVICE_SIZE, \
MT_DEVICE | MT_RW | MT_SECURE) MT_DEVICE | MT_RW | MT_SECURE)
/* Platform ID address */
#define SSC_VERSION_OFFSET 0x040
#define SSC_VERSION_CONFIG_SHIFT 28
#define SSC_VERSION_MAJOR_REV_SHIFT 24
#define SSC_VERSION_MINOR_REV_SHIFT 20
#define SSC_VERSION_DESIGNER_ID_SHIFT 12
#define SSC_VERSION_PART_NUM_SHIFT 0x0
#define SSC_VERSION_CONFIG_MASK 0xf
#define SSC_VERSION_MAJOR_REV_MASK 0xf
#define SSC_VERSION_MINOR_REV_MASK 0xf
#define SSC_VERSION_DESIGNER_ID_MASK 0xff
#define SSC_VERSION_PART_NUM_MASK 0xfff
#ifndef __ASSEMBLY__
/* SSC_VERSION related accessors */
/* Returns the part number of the platform */
#define GET_SSC_VERSION_PART_NUM(val) \
(((val) >> SSC_VERSION_PART_NUM_SHIFT) & \
SSC_VERSION_PART_NUM_MASK)
/* Returns the configuration number of the platform */
#define GET_SSC_VERSION_CONFIG(val) \
(((val) >> SSC_VERSION_CONFIG_SHIFT) & \
SSC_VERSION_CONFIG_MASK)
#endif /* __ASSEMBLY__ */
/************************************************************************* /*************************************************************************
* Required platform porting definitions common to all * Required platform porting definitions common to all
...@@ -125,10 +153,6 @@ ...@@ -125,10 +153,6 @@
/* TZC related constants */ /* TZC related constants */
#define PLAT_ARM_TZC_FILTERS REG_ATTR_FILTER_BIT_ALL #define PLAT_ARM_TZC_FILTERS REG_ATTR_FILTER_BIT_ALL
#define PLAT_ARM_TZC_BASE 0x2a4a0000
/* System timer related constants */
#define PLAT_ARM_NSTIMER_FRAME_ID 1
/* Trusted mailbox base address common to all CSS */ /* Trusted mailbox base address common to all CSS */
#define PLAT_ARM_TRUSTED_MAILBOX_BASE ARM_TRUSTED_SRAM_BASE #define PLAT_ARM_TRUSTED_MAILBOX_BASE ARM_TRUSTED_SRAM_BASE
......
/* /*
* Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -144,4 +144,30 @@ ...@@ -144,4 +144,30 @@
#define PLAT_ARM_G0_IRQS ARM_G0_IRQS #define PLAT_ARM_G0_IRQS ARM_G0_IRQS
/*
* PLAT_ARM_MAX_BL1_RW_SIZE is calculated using the current BL1 RW debug size
* plus a little space for growth.
*/
#if TRUSTED_BOARD_BOOT
# define PLAT_ARM_MAX_BL1_RW_SIZE 0x9000
#else
# define PLAT_ARM_MAX_BL1_RW_SIZE 0x6000
#endif
/*
* PLAT_ARM_MAX_BL2_SIZE is calculated using the current BL2 debug size plus a
* little space for growth.
*/
#if TRUSTED_BOARD_BOOT
# define PLAT_ARM_MAX_BL2_SIZE 0x1D000
#else
# define PLAT_ARM_MAX_BL2_SIZE 0xC000
#endif
/*
* PLAT_ARM_MAX_BL31_SIZE is calculated using the current BL31 debug size plus a
* little space for growth.
*/
#define PLAT_ARM_MAX_BL31_SIZE 0x1D000
#endif /* __PLATFORM_DEF_H__ */ #endif /* __PLATFORM_DEF_H__ */
/* /*
* Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -76,7 +76,11 @@ ...@@ -76,7 +76,11 @@
#define PLAT_ARM_CCI_CLUSTER0_SL_IFACE_IX 4 #define PLAT_ARM_CCI_CLUSTER0_SL_IFACE_IX 4
#define PLAT_ARM_CCI_CLUSTER1_SL_IFACE_IX 3 #define PLAT_ARM_CCI_CLUSTER1_SL_IFACE_IX 3
/* System timer related constants */
#define PLAT_ARM_NSTIMER_FRAME_ID 1
/* TZC related constants */ /* TZC related constants */
#define PLAT_ARM_TZC_BASE 0x2a4a0000
#define PLAT_ARM_TZC_NS_DEV_ACCESS ( \ #define PLAT_ARM_TZC_NS_DEV_ACCESS ( \
TZC_REGION_ACCESS_RDWR(TZC400_NSAID_CCI400) | \ TZC_REGION_ACCESS_RDWR(TZC400_NSAID_CCI400) | \
TZC_REGION_ACCESS_RDWR(TZC400_NSAID_PCIE) | \ TZC_REGION_ACCESS_RDWR(TZC400_NSAID_PCIE) | \
...@@ -99,6 +103,9 @@ ...@@ -99,6 +103,9 @@
#define PLAT_ARM_GICH_BASE 0x2c04f000 #define PLAT_ARM_GICH_BASE 0x2c04f000
#define PLAT_ARM_GICV_BASE 0x2c06f000 #define PLAT_ARM_GICV_BASE 0x2c06f000
/* MHU related constants */
#define PLAT_CSS_MHU_BASE 0x2b1f0000
/* /*
* Define a list of Group 1 Secure and Group 0 interrupts as per GICv3 * Define a list of Group 1 Secure and Group 0 interrupts as per GICv3
* terminology. On a GICv2 system or mode, the lists will be merged and treated * terminology. On a GICv2 system or mode, the lists will be merged and treated
...@@ -124,5 +131,30 @@ ...@@ -124,5 +131,30 @@
/* CSS SoC NIC-400 Global Programmers View (GPV) */ /* CSS SoC NIC-400 Global Programmers View (GPV) */
#define PLAT_SOC_CSS_NIC400_BASE 0x2a000000 #define PLAT_SOC_CSS_NIC400_BASE 0x2a000000
/*
* PLAT_ARM_MAX_BL1_RW_SIZE is calculated using the current BL1 RW debug size
* plus a little space for growth.
*/
#if TRUSTED_BOARD_BOOT
# define PLAT_ARM_MAX_BL1_RW_SIZE 0x9000
#else
# define PLAT_ARM_MAX_BL1_RW_SIZE 0x6000
#endif
/*
* PLAT_ARM_MAX_BL2_SIZE is calculated using the current BL2 debug size plus a
* little space for growth.
*/
#if TRUSTED_BOARD_BOOT
# define PLAT_ARM_MAX_BL2_SIZE 0x1D000
#else
# define PLAT_ARM_MAX_BL2_SIZE 0xC000
#endif
/*
* PLAT_ARM_MAX_BL31_SIZE is calculated using the current BL31 debug size plus a
* little space for growth.
*/
#define PLAT_ARM_MAX_BL31_SIZE 0x1D000
#endif /* __PLATFORM_DEF_H__ */ #endif /* __PLATFORM_DEF_H__ */
/* /*
* Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -50,6 +50,7 @@ ...@@ -50,6 +50,7 @@
#define PSRAM_BASE 0x14000000 #define PSRAM_BASE 0x14000000
#define PSRAM_SIZE 0x02000000 #define PSRAM_SIZE 0x02000000
#define JUNO_SSC_VER_PART_NUM 0x030
/******************************************************************************* /*******************************************************************************
* TZC-400 related constants * TZC-400 related constants
......
/* /*
* Copyright (c) 2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2015-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -35,6 +35,7 @@ ...@@ -35,6 +35,7 @@
#include <platform_def.h> #include <platform_def.h>
#include <xlat_tables.h> #include <xlat_tables.h>
extern const mmap_region_t plat_arm_mmap[];
static const int cci_map[] = { static const int cci_map[] = {
PLAT_ARM_CCI_CLUSTER0_SL_IFACE_IX, PLAT_ARM_CCI_CLUSTER0_SL_IFACE_IX,
...@@ -43,6 +44,7 @@ static const int cci_map[] = { ...@@ -43,6 +44,7 @@ static const int cci_map[] = {
/* Weak definitions may be overridden in specific ARM standard platform */ /* Weak definitions may be overridden in specific ARM standard platform */
#pragma weak plat_get_ns_image_entrypoint #pragma weak plat_get_ns_image_entrypoint
#pragma weak plat_arm_get_mmap
/******************************************************************************* /*******************************************************************************
...@@ -67,7 +69,7 @@ static const int cci_map[] = { ...@@ -67,7 +69,7 @@ static const int cci_map[] = {
mmap_add_region(coh_start, coh_start, \ mmap_add_region(coh_start, coh_start, \
coh_limit - coh_start, \ coh_limit - coh_start, \
MT_DEVICE | MT_RW | MT_SECURE); \ MT_DEVICE | MT_RW | MT_SECURE); \
mmap_add(plat_arm_mmap); \ mmap_add(plat_arm_get_mmap()); \
init_xlat_tables(); \ init_xlat_tables(); \
\ \
enable_mmu_el##_el(0); \ enable_mmu_el##_el(0); \
...@@ -85,7 +87,7 @@ static const int cci_map[] = { ...@@ -85,7 +87,7 @@ static const int cci_map[] = {
mmap_add_region(ro_start, ro_start, \ mmap_add_region(ro_start, ro_start, \
ro_limit - ro_start, \ ro_limit - ro_start, \
MT_MEMORY | MT_RO | MT_SECURE); \ MT_MEMORY | MT_RO | MT_SECURE); \
mmap_add(plat_arm_mmap); \ mmap_add(plat_arm_get_mmap()); \
init_xlat_tables(); \ init_xlat_tables(); \
\ \
enable_mmu_el##_el(0); \ enable_mmu_el##_el(0); \
...@@ -161,3 +163,11 @@ void arm_configure_sys_timer(void) ...@@ -161,3 +163,11 @@ void arm_configure_sys_timer(void)
reg_val = (1 << CNTNSAR_NS_SHIFT(PLAT_ARM_NSTIMER_FRAME_ID)); reg_val = (1 << CNTNSAR_NS_SHIFT(PLAT_ARM_NSTIMER_FRAME_ID));
mmio_write_32(ARM_SYS_TIMCTL_BASE + CNTNSAR, reg_val); mmio_write_32(ARM_SYS_TIMCTL_BASE + CNTNSAR, reg_val);
} }
/*******************************************************************************
* Returns ARM platform specific memory map regions.
******************************************************************************/
const mmap_region_t *plat_arm_get_mmap(void)
{
return plat_arm_mmap;
}
/* /*
* Copyright (c) 2014-2015, ARM Limited and Contributors. All rights reserved. * Copyright (c) 2014-2016, ARM Limited and Contributors. All rights reserved.
* *
* Redistribution and use in source and binary forms, with or without * Redistribution and use in source and binary forms, with or without
* modification, are permitted provided that the following conditions are met: * modification, are permitted provided that the following conditions are met:
...@@ -33,6 +33,7 @@ ...@@ -33,6 +33,7 @@
#include <bakery_lock.h> #include <bakery_lock.h>
#include <css_def.h> #include <css_def.h>
#include <mmio.h> #include <mmio.h>
#include <platform_def.h>
#include <plat_arm.h> #include <plat_arm.h>
#include "css_mhu.h" #include "css_mhu.h"
...@@ -66,24 +67,26 @@ void mhu_secure_message_start(unsigned int slot_id) ...@@ -66,24 +67,26 @@ void mhu_secure_message_start(unsigned int slot_id)
arm_lock_get(); arm_lock_get();
/* Make sure any previous command has finished */ /* Make sure any previous command has finished */
while (mmio_read_32(MHU_BASE + CPU_INTR_S_STAT) & (1 << slot_id)) while (mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) &
(1 << slot_id))
; ;
} }
void mhu_secure_message_send(unsigned int slot_id) void mhu_secure_message_send(unsigned int slot_id)
{ {
assert(slot_id <= MHU_MAX_SLOT_ID); assert(slot_id <= MHU_MAX_SLOT_ID);
assert(!(mmio_read_32(MHU_BASE + CPU_INTR_S_STAT) & (1 << slot_id))); assert(!(mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) &
(1 << slot_id)));
/* Send command to SCP */ /* Send command to SCP */
mmio_write_32(MHU_BASE + CPU_INTR_S_SET, 1 << slot_id); mmio_write_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_SET, 1 << slot_id);
} }
uint32_t mhu_secure_message_wait(void) uint32_t mhu_secure_message_wait(void)
{ {
/* Wait for response from SCP */ /* Wait for response from SCP */
uint32_t response; uint32_t response;
while (!(response = mmio_read_32(MHU_BASE + SCP_INTR_S_STAT))) while (!(response = mmio_read_32(PLAT_CSS_MHU_BASE + SCP_INTR_S_STAT)))
; ;
return response; return response;
...@@ -97,7 +100,7 @@ void mhu_secure_message_end(unsigned int slot_id) ...@@ -97,7 +100,7 @@ void mhu_secure_message_end(unsigned int slot_id)
* Clear any response we got by writing one in the relevant slot bit to * Clear any response we got by writing one in the relevant slot bit to
* the CLEAR register * the CLEAR register
*/ */
mmio_write_32(MHU_BASE + SCP_INTR_S_CLEAR, 1 << slot_id); mmio_write_32(PLAT_CSS_MHU_BASE + SCP_INTR_S_CLEAR, 1 << slot_id);
arm_lock_release(); arm_lock_release();
} }
...@@ -111,7 +114,7 @@ void mhu_secure_init(void) ...@@ -111,7 +114,7 @@ void mhu_secure_init(void)
* as a stale or garbage value would make us think it's a message we've * as a stale or garbage value would make us think it's a message we've
* already sent. * already sent.
*/ */
assert(mmio_read_32(MHU_BASE + CPU_INTR_S_STAT) == 0); assert(mmio_read_32(PLAT_CSS_MHU_BASE + CPU_INTR_S_STAT) == 0);
} }
void plat_arm_pwrc_setup(void) void plat_arm_pwrc_setup(void)
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment