armv7/8 cache: add up_get_xcache_size() support
Signed-off-by: chenrun1 <chenrun1@xiaomi.com>
This commit is contained in:
parent
09da8fb651
commit
22d1059c97
@ -63,6 +63,32 @@ size_t up_get_icache_linesize(void)
|
|||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_icache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get icache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_icache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = MAX(cp15_icache_size(), l2cc_size());
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_invalidate_icache_all
|
* Name: up_invalidate_icache_all
|
||||||
*
|
*
|
||||||
@ -172,6 +198,32 @@ size_t up_get_dcache_linesize(void)
|
|||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_dcache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get dcache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_dcache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = MAX(cp15_dcache_size(), l2cc_size());
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_invalidate_dcache
|
* Name: up_invalidate_dcache
|
||||||
*
|
*
|
||||||
|
@ -415,6 +415,25 @@ uint32_t l2cc_linesize(void)
|
|||||||
return PL310_CACHE_LINE_SIZE;
|
return PL310_CACHE_LINE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: l2cc_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get L2CC-P310 L2 cache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* L2 cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
uint32_t l2cc_size(void)
|
||||||
|
{
|
||||||
|
return PL310_CACHE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: l2cc_enable
|
* Name: l2cc_enable
|
||||||
*
|
*
|
||||||
|
@ -86,6 +86,22 @@ void arm_l2ccinitialize(void);
|
|||||||
|
|
||||||
uint32_t l2cc_linesize(void);
|
uint32_t l2cc_linesize(void);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: l2cc_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get L2CC-P310 L2 cache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* L2 cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
uint32_t l2cc_size(void);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: l2cc_enable
|
* Name: l2cc_enable
|
||||||
*
|
*
|
||||||
@ -245,6 +261,7 @@ void l2cc_flush(uint32_t startaddr, uint32_t endaddr);
|
|||||||
* compilation in one place.
|
* compilation in one place.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
# define l2cc_size() 0
|
||||||
# define l2cc_linesize() 0
|
# define l2cc_linesize() 0
|
||||||
# define l2cc_enable()
|
# define l2cc_enable()
|
||||||
# define l2cc_disable()
|
# define l2cc_disable()
|
||||||
|
@ -142,6 +142,49 @@ static size_t up_get_cache_linesize(bool icache)
|
|||||||
|
|
||||||
return 1 << sshift;
|
return 1 << sshift;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_cache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get cache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* level - Difference between icache and dcache.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static size_t up_get_cache_size(bool icache)
|
||||||
|
{
|
||||||
|
uint32_t ccsidr;
|
||||||
|
uint32_t csselr;
|
||||||
|
uint32_t sshift;
|
||||||
|
uint32_t sets;
|
||||||
|
uint32_t ways;
|
||||||
|
uint32_t line;
|
||||||
|
|
||||||
|
csselr = getreg32(NVIC_CSSELR);
|
||||||
|
|
||||||
|
if (icache)
|
||||||
|
{
|
||||||
|
csselr = (csselr & ~NVIC_CSSELR_IND) | NVIC_CSSELR_IND_ICACHE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
csselr = (csselr & ~NVIC_CSSELR_IND) | NVIC_CSSELR_IND_DCACHE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ccsidr = getreg32(NVIC_CCSIDR);
|
||||||
|
sets = CCSIDR_SETS(ccsidr) + 1;
|
||||||
|
ways = CCSIDR_WAYS(ccsidr) + 1;
|
||||||
|
sshift = CCSIDR_LSSHIFT(ccsidr) + 4; /* log2(cache-line-size-in-bytes) */
|
||||||
|
line = 1 << sshift;
|
||||||
|
|
||||||
|
return sets * ways * line;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -174,6 +217,32 @@ size_t up_get_icache_linesize(void)
|
|||||||
|
|
||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_icache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get icache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_icache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = up_get_cache_size(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -367,6 +436,32 @@ size_t up_get_dcache_linesize(void)
|
|||||||
|
|
||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_dcache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get icache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_dcache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = up_get_cache_size(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -63,6 +63,32 @@ size_t up_get_icache_linesize(void)
|
|||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_icache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get icache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_icache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = MAX(cp15_icache_size(), l2cc_size());
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_invalidate_icache_all
|
* Name: up_invalidate_icache_all
|
||||||
*
|
*
|
||||||
@ -172,6 +198,32 @@ size_t up_get_dcache_linesize(void)
|
|||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_dcache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get dcache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_dcache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = MAX(cp15_dcache_size(), l2cc_size());
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_invalidate_dcache
|
* Name: up_invalidate_dcache
|
||||||
*
|
*
|
||||||
|
@ -415,6 +415,25 @@ uint32_t l2cc_linesize(void)
|
|||||||
return PL310_CACHE_LINE_SIZE;
|
return PL310_CACHE_LINE_SIZE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: l2cc_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get L2CC-P310 L2 cache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* L2 cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
uint32_t l2cc_size(void)
|
||||||
|
{
|
||||||
|
return PL310_CACHE_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: l2cc_enable
|
* Name: l2cc_enable
|
||||||
*
|
*
|
||||||
|
@ -86,6 +86,22 @@ void arm_l2ccinitialize(void);
|
|||||||
|
|
||||||
uint32_t l2cc_linesize(void);
|
uint32_t l2cc_linesize(void);
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: l2cc_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get L2CC-P310 L2 cache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* L2 cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
uint32_t l2cc_size(void);
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: l2cc_enable
|
* Name: l2cc_enable
|
||||||
*
|
*
|
||||||
@ -245,6 +261,7 @@ void l2cc_flush(uint32_t startaddr, uint32_t endaddr);
|
|||||||
* compilation in one place.
|
* compilation in one place.
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
# define l2cc_size() 0
|
||||||
# define l2cc_linesize() 0
|
# define l2cc_linesize() 0
|
||||||
# define l2cc_enable()
|
# define l2cc_enable()
|
||||||
# define l2cc_disable()
|
# define l2cc_disable()
|
||||||
|
@ -144,6 +144,49 @@ static size_t up_get_cache_linesize(bool icache)
|
|||||||
}
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_cache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get cache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* level - Difference between icache and dcache.
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
static size_t up_get_cache_size(bool icache)
|
||||||
|
{
|
||||||
|
uint32_t ccsidr;
|
||||||
|
uint32_t csselr;
|
||||||
|
uint32_t sshift;
|
||||||
|
uint32_t sets;
|
||||||
|
uint32_t ways;
|
||||||
|
uint32_t line;
|
||||||
|
|
||||||
|
csselr = getreg32(NVIC_CSSELR);
|
||||||
|
|
||||||
|
if (icache)
|
||||||
|
{
|
||||||
|
csselr = (csselr & ~NVIC_CSSELR_IND) | NVIC_CSSELR_IND_ICACHE;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
csselr = (csselr & ~NVIC_CSSELR_IND) | NVIC_CSSELR_IND_DCACHE;
|
||||||
|
}
|
||||||
|
|
||||||
|
ccsidr = getreg32(NVIC_CCSIDR);
|
||||||
|
sets = CCSIDR_SETS(ccsidr) + 1;
|
||||||
|
ways = CCSIDR_WAYS(ccsidr) + 1;
|
||||||
|
sshift = CCSIDR_LSSHIFT(ccsidr) + 4; /* log2(cache-line-size-in-bytes) */
|
||||||
|
line = 1 << sshift;
|
||||||
|
|
||||||
|
return sets * ways * line;
|
||||||
|
}
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Public Functions
|
* Public Functions
|
||||||
****************************************************************************/
|
****************************************************************************/
|
||||||
@ -174,6 +217,32 @@ size_t up_get_icache_linesize(void)
|
|||||||
|
|
||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_icache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get icache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_icache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = up_get_cache_size(true);
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
@ -367,6 +436,32 @@ size_t up_get_dcache_linesize(void)
|
|||||||
|
|
||||||
return clsize;
|
return clsize;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_dcache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get icache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
size_t up_get_dcache_size(void)
|
||||||
|
{
|
||||||
|
static uint32_t csize;
|
||||||
|
|
||||||
|
if (csize == 0)
|
||||||
|
{
|
||||||
|
csize = up_get_cache_size(false);
|
||||||
|
}
|
||||||
|
|
||||||
|
return csize;
|
||||||
|
}
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
|
@ -68,6 +68,26 @@ size_t up_get_icache_linesize(void);
|
|||||||
# define up_get_icache_linesize() 0
|
# define up_get_icache_linesize() 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_icache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get icache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_ICACHE
|
||||||
|
size_t up_get_icache_size(void);
|
||||||
|
#else
|
||||||
|
# define up_get_icache_size() 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_enable_icache
|
* Name: up_enable_icache
|
||||||
*
|
*
|
||||||
@ -237,6 +257,26 @@ size_t up_get_dcache_linesize(void);
|
|||||||
# define up_get_dcache_linesize() 0
|
# define up_get_dcache_linesize() 0
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
/****************************************************************************
|
||||||
|
* Name: up_get_dcache_size
|
||||||
|
*
|
||||||
|
* Description:
|
||||||
|
* Get dcache size
|
||||||
|
*
|
||||||
|
* Input Parameters:
|
||||||
|
* None
|
||||||
|
*
|
||||||
|
* Returned Value:
|
||||||
|
* Cache size
|
||||||
|
*
|
||||||
|
****************************************************************************/
|
||||||
|
|
||||||
|
#ifdef CONFIG_ARCH_DCACHE
|
||||||
|
size_t up_get_dcache_size(void);
|
||||||
|
#else
|
||||||
|
# define up_get_dcache_size() 0
|
||||||
|
#endif
|
||||||
|
|
||||||
/****************************************************************************
|
/****************************************************************************
|
||||||
* Name: up_enable_dcache
|
* Name: up_enable_dcache
|
||||||
*
|
*
|
||||||
|
Loading…
Reference in New Issue
Block a user