18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */
28c2ecf20Sopenharmony_ci// Copyright (C) 2018 Hangzhou C-SKY Microsystems co.,ltd.
38c2ecf20Sopenharmony_ci
48c2ecf20Sopenharmony_ci#ifndef __ASM_CSKY_CKMMUV1_H
58c2ecf20Sopenharmony_ci#define __ASM_CSKY_CKMMUV1_H
68c2ecf20Sopenharmony_ci#include <abi/reg_ops.h>
78c2ecf20Sopenharmony_ci
88c2ecf20Sopenharmony_cistatic inline int read_mmu_index(void)
98c2ecf20Sopenharmony_ci{
108c2ecf20Sopenharmony_ci	return cprcr("cpcr0");
118c2ecf20Sopenharmony_ci}
128c2ecf20Sopenharmony_ci
138c2ecf20Sopenharmony_cistatic inline void write_mmu_index(int value)
148c2ecf20Sopenharmony_ci{
158c2ecf20Sopenharmony_ci	cpwcr("cpcr0", value);
168c2ecf20Sopenharmony_ci}
178c2ecf20Sopenharmony_ci
188c2ecf20Sopenharmony_cistatic inline int read_mmu_entrylo0(void)
198c2ecf20Sopenharmony_ci{
208c2ecf20Sopenharmony_ci	return cprcr("cpcr2") << 6;
218c2ecf20Sopenharmony_ci}
228c2ecf20Sopenharmony_ci
238c2ecf20Sopenharmony_cistatic inline int read_mmu_entrylo1(void)
248c2ecf20Sopenharmony_ci{
258c2ecf20Sopenharmony_ci	return cprcr("cpcr3") << 6;
268c2ecf20Sopenharmony_ci}
278c2ecf20Sopenharmony_ci
288c2ecf20Sopenharmony_cistatic inline void write_mmu_pagemask(int value)
298c2ecf20Sopenharmony_ci{
308c2ecf20Sopenharmony_ci	cpwcr("cpcr6", value);
318c2ecf20Sopenharmony_ci}
328c2ecf20Sopenharmony_ci
338c2ecf20Sopenharmony_cistatic inline int read_mmu_entryhi(void)
348c2ecf20Sopenharmony_ci{
358c2ecf20Sopenharmony_ci	return cprcr("cpcr4");
368c2ecf20Sopenharmony_ci}
378c2ecf20Sopenharmony_ci
388c2ecf20Sopenharmony_cistatic inline void write_mmu_entryhi(int value)
398c2ecf20Sopenharmony_ci{
408c2ecf20Sopenharmony_ci	cpwcr("cpcr4", value);
418c2ecf20Sopenharmony_ci}
428c2ecf20Sopenharmony_ci
438c2ecf20Sopenharmony_cistatic inline unsigned long read_mmu_msa0(void)
448c2ecf20Sopenharmony_ci{
458c2ecf20Sopenharmony_ci	return cprcr("cpcr30");
468c2ecf20Sopenharmony_ci}
478c2ecf20Sopenharmony_ci
488c2ecf20Sopenharmony_cistatic inline void write_mmu_msa0(unsigned long value)
498c2ecf20Sopenharmony_ci{
508c2ecf20Sopenharmony_ci	cpwcr("cpcr30", value);
518c2ecf20Sopenharmony_ci}
528c2ecf20Sopenharmony_ci
538c2ecf20Sopenharmony_cistatic inline unsigned long read_mmu_msa1(void)
548c2ecf20Sopenharmony_ci{
558c2ecf20Sopenharmony_ci	return cprcr("cpcr31");
568c2ecf20Sopenharmony_ci}
578c2ecf20Sopenharmony_ci
588c2ecf20Sopenharmony_cistatic inline void write_mmu_msa1(unsigned long value)
598c2ecf20Sopenharmony_ci{
608c2ecf20Sopenharmony_ci	cpwcr("cpcr31", value);
618c2ecf20Sopenharmony_ci}
628c2ecf20Sopenharmony_ci
638c2ecf20Sopenharmony_ci/*
648c2ecf20Sopenharmony_ci * TLB operations.
658c2ecf20Sopenharmony_ci */
668c2ecf20Sopenharmony_cistatic inline void tlb_probe(void)
678c2ecf20Sopenharmony_ci{
688c2ecf20Sopenharmony_ci	cpwcr("cpcr8", 0x80000000);
698c2ecf20Sopenharmony_ci}
708c2ecf20Sopenharmony_ci
718c2ecf20Sopenharmony_cistatic inline void tlb_read(void)
728c2ecf20Sopenharmony_ci{
738c2ecf20Sopenharmony_ci	cpwcr("cpcr8", 0x40000000);
748c2ecf20Sopenharmony_ci}
758c2ecf20Sopenharmony_ci
768c2ecf20Sopenharmony_cistatic inline void tlb_invalid_all(void)
778c2ecf20Sopenharmony_ci{
788c2ecf20Sopenharmony_ci	cpwcr("cpcr8", 0x04000000);
798c2ecf20Sopenharmony_ci}
808c2ecf20Sopenharmony_ci
818c2ecf20Sopenharmony_ci
828c2ecf20Sopenharmony_cistatic inline void local_tlb_invalid_all(void)
838c2ecf20Sopenharmony_ci{
848c2ecf20Sopenharmony_ci	tlb_invalid_all();
858c2ecf20Sopenharmony_ci}
868c2ecf20Sopenharmony_ci
878c2ecf20Sopenharmony_cistatic inline void tlb_invalid_indexed(void)
888c2ecf20Sopenharmony_ci{
898c2ecf20Sopenharmony_ci	cpwcr("cpcr8", 0x02000000);
908c2ecf20Sopenharmony_ci}
918c2ecf20Sopenharmony_ci
928c2ecf20Sopenharmony_cistatic inline void setup_pgd(unsigned long pgd, bool kernel)
938c2ecf20Sopenharmony_ci{
948c2ecf20Sopenharmony_ci	cpwcr("cpcr29", pgd | BIT(0));
958c2ecf20Sopenharmony_ci}
968c2ecf20Sopenharmony_ci
978c2ecf20Sopenharmony_cistatic inline unsigned long get_pgd(void)
988c2ecf20Sopenharmony_ci{
998c2ecf20Sopenharmony_ci	return cprcr("cpcr29") & ~BIT(0);
1008c2ecf20Sopenharmony_ci}
1018c2ecf20Sopenharmony_ci#endif /* __ASM_CSKY_CKMMUV1_H */
102