xref: /openbmc/u-boot/arch/powerpc/cpu/mpc8xx/cache.c (revision 83d290c56fab2d38cd1ab4c4cc7099559c1d5046)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
21e7cefefSChristophe Leroy /*
31e7cefefSChristophe Leroy  * (C) Copyright 2017
41e7cefefSChristophe Leroy  * Christophe Leroy, CS Systemes d'Information, christophe.leroy@c-s.fr
51e7cefefSChristophe Leroy  */
61e7cefefSChristophe Leroy 
71e7cefefSChristophe Leroy #include <common.h>
81e7cefefSChristophe Leroy #include <asm/processor.h>
91e7cefefSChristophe Leroy #include <asm/ppc.h>
101e7cefefSChristophe Leroy #include <asm/io.h>
111e7cefefSChristophe Leroy #include <asm/mmu.h>
121e7cefefSChristophe Leroy 
icache_status(void)131e7cefefSChristophe Leroy int icache_status(void)
141e7cefefSChristophe Leroy {
151e7cefefSChristophe Leroy 	return !!(mfspr(IC_CST) & IDC_ENABLED);
161e7cefefSChristophe Leroy }
171e7cefefSChristophe Leroy 
icache_enable(void)181e7cefefSChristophe Leroy void icache_enable(void)
191e7cefefSChristophe Leroy {
201e7cefefSChristophe Leroy 	sync();
211e7cefefSChristophe Leroy 	mtspr(IC_CST, IDC_INVALL);
221e7cefefSChristophe Leroy 	mtspr(IC_CST, IDC_ENABLE);
231e7cefefSChristophe Leroy }
241e7cefefSChristophe Leroy 
icache_disable(void)251e7cefefSChristophe Leroy void icache_disable(void)
261e7cefefSChristophe Leroy {
271e7cefefSChristophe Leroy 	sync();
281e7cefefSChristophe Leroy 	mtspr(IC_CST, IDC_DISABLE);
291e7cefefSChristophe Leroy }
301e7cefefSChristophe Leroy 
dcache_status(void)311e7cefefSChristophe Leroy int dcache_status(void)
321e7cefefSChristophe Leroy {
331e7cefefSChristophe Leroy 	return !!(mfspr(IC_CST) & IDC_ENABLED);
341e7cefefSChristophe Leroy }
351e7cefefSChristophe Leroy 
dcache_enable(void)361e7cefefSChristophe Leroy void dcache_enable(void)
371e7cefefSChristophe Leroy {
381e7cefefSChristophe Leroy 	mtspr(MD_CTR, MD_RESETVAL);	/* Set cache mode with MMU off */
391e7cefefSChristophe Leroy 	mtspr(DC_CST, IDC_INVALL);
401e7cefefSChristophe Leroy 	mtspr(DC_CST, IDC_ENABLE);
411e7cefefSChristophe Leroy }
421e7cefefSChristophe Leroy 
dcache_disable(void)431e7cefefSChristophe Leroy void dcache_disable(void)
441e7cefefSChristophe Leroy {
451e7cefefSChristophe Leroy 	sync();
461e7cefefSChristophe Leroy 	mtspr(DC_CST, IDC_DISABLE);
471e7cefefSChristophe Leroy 	mtspr(DC_CST, IDC_INVALL);
481e7cefefSChristophe Leroy }
49