mirror of
https://github.com/AuxXxilium/linux_dsm_epyc7002.git
synced 2024-12-28 11:18:45 +07:00
013de2d667
This patch adds files related to memory management and here is our memory-layout: Fixmap : 0xffc02000 – 0xfffff000 (4 MB - 12KB) Pkmap : 0xff800000 – 0xffc00000 (4 MB) Vmalloc : 0xf0200000 – 0xff000000 (238 MB) Lowmem : 0x80000000 – 0xc0000000 (1GB) abiv1 CPU (CK610) is VIPT cache and it doesn't support highmem. abiv2 CPUs are all PIPT cache and they could support highmem. Lowmem is directly mapped by msa0 & msa1 reg, and we needn't setup memory page table for it. Link:https://lore.kernel.org/lkml/20180518215548.GH17671@n2100.armlinux.org.uk/ Signed-off-by: Guo Ren <ren_guo@c-sky.com> Cc: Christoph Hellwig <hch@infradead.org> Reviewed-by: Arnd Bergmann <arnd@arndb.de>
76 lines
1.2 KiB
C
76 lines
1.2 KiB
C
/* SPDX-License-Identifier: GPL-2.0 */
|
|
// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
|
|
|
|
#ifndef __ASM_CSKY_CKMMUV1_H
|
|
#define __ASM_CSKY_CKMMUV1_H
|
|
#include <abi/reg_ops.h>
|
|
|
|
static inline int read_mmu_index(void)
|
|
{
|
|
return cprcr("cpcr0");
|
|
}
|
|
|
|
static inline void write_mmu_index(int value)
|
|
{
|
|
cpwcr("cpcr0", value);
|
|
}
|
|
|
|
static inline int read_mmu_entrylo0(void)
|
|
{
|
|
return cprcr("cpcr2") << 6;
|
|
}
|
|
|
|
static inline int read_mmu_entrylo1(void)
|
|
{
|
|
return cprcr("cpcr3") << 6;
|
|
}
|
|
|
|
static inline void write_mmu_pagemask(int value)
|
|
{
|
|
cpwcr("cpcr6", value);
|
|
}
|
|
|
|
static inline int read_mmu_entryhi(void)
|
|
{
|
|
return cprcr("cpcr4");
|
|
}
|
|
|
|
static inline void write_mmu_entryhi(int value)
|
|
{
|
|
cpwcr("cpcr4", value);
|
|
}
|
|
|
|
/*
|
|
* TLB operations.
|
|
*/
|
|
static inline void tlb_probe(void)
|
|
{
|
|
cpwcr("cpcr8", 0x80000000);
|
|
}
|
|
|
|
static inline void tlb_read(void)
|
|
{
|
|
cpwcr("cpcr8", 0x40000000);
|
|
}
|
|
|
|
static inline void tlb_invalid_all(void)
|
|
{
|
|
cpwcr("cpcr8", 0x04000000);
|
|
}
|
|
|
|
static inline void tlb_invalid_indexed(void)
|
|
{
|
|
cpwcr("cpcr8", 0x02000000);
|
|
}
|
|
|
|
static inline void setup_pgd(unsigned long pgd, bool kernel)
|
|
{
|
|
cpwcr("cpcr29", pgd);
|
|
}
|
|
|
|
static inline unsigned long get_pgd(void)
|
|
{
|
|
return cprcr("cpcr29");
|
|
}
|
|
#endif /* __ASM_CSKY_CKMMUV1_H */
|