1*997eba32SRunyang Chen /* 2*997eba32SRunyang Chen * Copyright (c) 2025, MediaTek Inc. All rights reserved. 3*997eba32SRunyang Chen * 4*997eba32SRunyang Chen * SPDX-License-Identifier: BSD-3-Clause 5*997eba32SRunyang Chen */ 6*997eba32SRunyang Chen 7*997eba32SRunyang Chen #include <arch_helpers.h> 8*997eba32SRunyang Chen #include <lib/mmio.h> 9*997eba32SRunyang Chen 10*997eba32SRunyang Chen #include <drivers/booker.h> 11*997eba32SRunyang Chen #include <mtk_mmap_pool.h> 12*997eba32SRunyang Chen #include <platform_booker.h> 13*997eba32SRunyang Chen 14*997eba32SRunyang Chen static const mmap_region_t booker_mmap[] MTK_MMAP_SECTION = { 15*997eba32SRunyang Chen MAP_REGION_FLAT(BOOKER_MAP_REGION, BOOKER_MAP_SIZE, MT_DEVICE | MT_RW | MT_SECURE), 16*997eba32SRunyang Chen {0} 17*997eba32SRunyang Chen }; 18*997eba32SRunyang Chen DECLARE_MTK_MMAP_REGIONS(booker_mmap); 19*997eba32SRunyang Chen booker_mtsx_tc_flush(uintptr_t base)20*997eba32SRunyang Chenstatic void booker_mtsx_tc_flush(uintptr_t base) 21*997eba32SRunyang Chen { 22*997eba32SRunyang Chen /* make no new lines be allocated in tag cache */ 23*997eba32SRunyang Chen mmio_setbits_64(base + MTU_AUX_CTL, BIT(TC_NO_FILL_MODE_BIT)); 24*997eba32SRunyang Chen dsb(); 25*997eba32SRunyang Chen 26*997eba32SRunyang Chen /* start flush tag cache with Clean Invalid mode */ 27*997eba32SRunyang Chen mmio_setbits_64(base + MTU_TC_FLUSH_PR, BIT(TC_FLUSH_ENABLE_BIT)); 28*997eba32SRunyang Chen dsb(); 29*997eba32SRunyang Chen 30*997eba32SRunyang Chen /* polling until flush completed */ 31*997eba32SRunyang Chen while (!(mmio_read_64(base + MTU_TC_FLUSH_SR) & BIT(TC_FLUSH_COMPLETE_BIT))) 32*997eba32SRunyang Chen ; 33*997eba32SRunyang Chen } 34*997eba32SRunyang Chen booker_flush(void)35*997eba32SRunyang Chenvoid booker_flush(void) 36*997eba32SRunyang Chen { 37*997eba32SRunyang Chen unsigned int i; 38*997eba32SRunyang Chen 39*997eba32SRunyang Chen /* flush tag cache before power down booker */ 40*997eba32SRunyang Chen for (i = 0; i < ARRAY_SIZE(booker_mtsx_bases); i++) 41*997eba32SRunyang Chen booker_mtsx_tc_flush(booker_mtsx_bases[i]); 42*997eba32SRunyang Chen } 43