18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * Support for the MicroBlaze PVR (Processor Version Register) 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2009 - 2011 Michal Simek <monstr@monstr.eu> 68c2ecf20Sopenharmony_ci * Copyright (C) 2007 John Williams <john.williams@petalogix.com> 78c2ecf20Sopenharmony_ci * Copyright (C) 2007 - 2011 PetaLogix 88c2ecf20Sopenharmony_ci */ 98c2ecf20Sopenharmony_ci 108c2ecf20Sopenharmony_ci#ifndef _ASM_MICROBLAZE_PVR_H 118c2ecf20Sopenharmony_ci#define _ASM_MICROBLAZE_PVR_H 128c2ecf20Sopenharmony_ci 138c2ecf20Sopenharmony_ci#define PVR_MSR_BIT 0x400 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_cistruct pvr_s { 168c2ecf20Sopenharmony_ci unsigned pvr[12]; 178c2ecf20Sopenharmony_ci}; 188c2ecf20Sopenharmony_ci 198c2ecf20Sopenharmony_ci/* The following taken from Xilinx's standalone BSP pvr.h */ 208c2ecf20Sopenharmony_ci 218c2ecf20Sopenharmony_ci/* Basic PVR mask */ 228c2ecf20Sopenharmony_ci#define PVR0_PVR_FULL_MASK 0x80000000 238c2ecf20Sopenharmony_ci#define PVR0_USE_BARREL_MASK 0x40000000 248c2ecf20Sopenharmony_ci#define PVR0_USE_DIV_MASK 0x20000000 258c2ecf20Sopenharmony_ci#define PVR0_USE_HW_MUL_MASK 0x10000000 268c2ecf20Sopenharmony_ci#define PVR0_USE_FPU_MASK 0x08000000 278c2ecf20Sopenharmony_ci#define PVR0_USE_EXC_MASK 0x04000000 288c2ecf20Sopenharmony_ci#define PVR0_USE_ICACHE_MASK 0x02000000 298c2ecf20Sopenharmony_ci#define PVR0_USE_DCACHE_MASK 0x01000000 308c2ecf20Sopenharmony_ci#define PVR0_USE_MMU 0x00800000 318c2ecf20Sopenharmony_ci#define PVR0_USE_BTC 0x00400000 328c2ecf20Sopenharmony_ci#define PVR0_ENDI 0x00200000 338c2ecf20Sopenharmony_ci#define PVR0_VERSION_MASK 0x0000FF00 348c2ecf20Sopenharmony_ci#define PVR0_USER1_MASK 0x000000FF 358c2ecf20Sopenharmony_ci 368c2ecf20Sopenharmony_ci/* User 2 PVR mask */ 378c2ecf20Sopenharmony_ci#define PVR1_USER2_MASK 0xFFFFFFFF 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_ci/* Configuration PVR masks */ 408c2ecf20Sopenharmony_ci#define PVR2_D_OPB_MASK 0x80000000 /* or AXI */ 418c2ecf20Sopenharmony_ci#define PVR2_D_LMB_MASK 0x40000000 428c2ecf20Sopenharmony_ci#define PVR2_I_OPB_MASK 0x20000000 /* or AXI */ 438c2ecf20Sopenharmony_ci#define PVR2_I_LMB_MASK 0x10000000 448c2ecf20Sopenharmony_ci#define PVR2_INTERRUPT_IS_EDGE_MASK 0x08000000 458c2ecf20Sopenharmony_ci#define PVR2_EDGE_IS_POSITIVE_MASK 0x04000000 468c2ecf20Sopenharmony_ci#define PVR2_D_PLB_MASK 0x02000000 /* new */ 478c2ecf20Sopenharmony_ci#define PVR2_I_PLB_MASK 0x01000000 /* new */ 488c2ecf20Sopenharmony_ci#define PVR2_INTERCONNECT 0x00800000 /* new */ 498c2ecf20Sopenharmony_ci#define PVR2_USE_EXTEND_FSL 0x00080000 /* new */ 508c2ecf20Sopenharmony_ci#define PVR2_USE_FSL_EXC 0x00040000 /* new */ 518c2ecf20Sopenharmony_ci#define PVR2_USE_MSR_INSTR 0x00020000 528c2ecf20Sopenharmony_ci#define PVR2_USE_PCMP_INSTR 0x00010000 538c2ecf20Sopenharmony_ci#define PVR2_AREA_OPTIMISED 0x00008000 548c2ecf20Sopenharmony_ci#define PVR2_USE_BARREL_MASK 0x00004000 558c2ecf20Sopenharmony_ci#define PVR2_USE_DIV_MASK 0x00002000 568c2ecf20Sopenharmony_ci#define PVR2_USE_HW_MUL_MASK 0x00001000 578c2ecf20Sopenharmony_ci#define PVR2_USE_FPU_MASK 0x00000800 588c2ecf20Sopenharmony_ci#define PVR2_USE_MUL64_MASK 0x00000400 598c2ecf20Sopenharmony_ci#define PVR2_USE_FPU2_MASK 0x00000200 /* new */ 608c2ecf20Sopenharmony_ci#define PVR2_USE_IPLBEXC 0x00000100 618c2ecf20Sopenharmony_ci#define PVR2_USE_DPLBEXC 0x00000080 628c2ecf20Sopenharmony_ci#define PVR2_OPCODE_0x0_ILL_MASK 0x00000040 638c2ecf20Sopenharmony_ci#define PVR2_UNALIGNED_EXC_MASK 0x00000020 648c2ecf20Sopenharmony_ci#define PVR2_ILL_OPCODE_EXC_MASK 0x00000010 658c2ecf20Sopenharmony_ci#define PVR2_IOPB_BUS_EXC_MASK 0x00000008 /* or AXI */ 668c2ecf20Sopenharmony_ci#define PVR2_DOPB_BUS_EXC_MASK 0x00000004 /* or AXI */ 678c2ecf20Sopenharmony_ci#define PVR2_DIV_ZERO_EXC_MASK 0x00000002 688c2ecf20Sopenharmony_ci#define PVR2_FPU_EXC_MASK 0x00000001 698c2ecf20Sopenharmony_ci 708c2ecf20Sopenharmony_ci/* Debug and exception PVR masks */ 718c2ecf20Sopenharmony_ci#define PVR3_DEBUG_ENABLED_MASK 0x80000000 728c2ecf20Sopenharmony_ci#define PVR3_NUMBER_OF_PC_BRK_MASK 0x1E000000 738c2ecf20Sopenharmony_ci#define PVR3_NUMBER_OF_RD_ADDR_BRK_MASK 0x00380000 748c2ecf20Sopenharmony_ci#define PVR3_NUMBER_OF_WR_ADDR_BRK_MASK 0x0000E000 758c2ecf20Sopenharmony_ci#define PVR3_FSL_LINKS_MASK 0x00000380 768c2ecf20Sopenharmony_ci 778c2ecf20Sopenharmony_ci/* ICache config PVR masks */ 788c2ecf20Sopenharmony_ci#define PVR4_USE_ICACHE_MASK 0x80000000 /* ICU */ 798c2ecf20Sopenharmony_ci#define PVR4_ICACHE_ADDR_TAG_BITS_MASK 0x7C000000 /* ICTS */ 808c2ecf20Sopenharmony_ci#define PVR4_ICACHE_ALLOW_WR_MASK 0x01000000 /* ICW */ 818c2ecf20Sopenharmony_ci#define PVR4_ICACHE_LINE_LEN_MASK 0x00E00000 /* ICLL */ 828c2ecf20Sopenharmony_ci#define PVR4_ICACHE_BYTE_SIZE_MASK 0x001F0000 /* ICBS */ 838c2ecf20Sopenharmony_ci#define PVR4_ICACHE_ALWAYS_USED 0x00008000 /* IAU */ 848c2ecf20Sopenharmony_ci#define PVR4_ICACHE_INTERFACE 0x00002000 /* ICI */ 858c2ecf20Sopenharmony_ci 868c2ecf20Sopenharmony_ci/* DCache config PVR masks */ 878c2ecf20Sopenharmony_ci#define PVR5_USE_DCACHE_MASK 0x80000000 /* DCU */ 888c2ecf20Sopenharmony_ci#define PVR5_DCACHE_ADDR_TAG_BITS_MASK 0x7C000000 /* DCTS */ 898c2ecf20Sopenharmony_ci#define PVR5_DCACHE_ALLOW_WR_MASK 0x01000000 /* DCW */ 908c2ecf20Sopenharmony_ci#define PVR5_DCACHE_LINE_LEN_MASK 0x00E00000 /* DCLL */ 918c2ecf20Sopenharmony_ci#define PVR5_DCACHE_BYTE_SIZE_MASK 0x001F0000 /* DCBS */ 928c2ecf20Sopenharmony_ci#define PVR5_DCACHE_ALWAYS_USED 0x00008000 /* DAU */ 938c2ecf20Sopenharmony_ci#define PVR5_DCACHE_USE_WRITEBACK 0x00004000 /* DWB */ 948c2ecf20Sopenharmony_ci#define PVR5_DCACHE_INTERFACE 0x00002000 /* DCI */ 958c2ecf20Sopenharmony_ci 968c2ecf20Sopenharmony_ci/* ICache base address PVR mask */ 978c2ecf20Sopenharmony_ci#define PVR6_ICACHE_BASEADDR_MASK 0xFFFFFFFF 988c2ecf20Sopenharmony_ci 998c2ecf20Sopenharmony_ci/* ICache high address PVR mask */ 1008c2ecf20Sopenharmony_ci#define PVR7_ICACHE_HIGHADDR_MASK 0xFFFFFFFF 1018c2ecf20Sopenharmony_ci 1028c2ecf20Sopenharmony_ci/* DCache base address PVR mask */ 1038c2ecf20Sopenharmony_ci#define PVR8_DCACHE_BASEADDR_MASK 0xFFFFFFFF 1048c2ecf20Sopenharmony_ci 1058c2ecf20Sopenharmony_ci/* DCache high address PVR mask */ 1068c2ecf20Sopenharmony_ci#define PVR9_DCACHE_HIGHADDR_MASK 0xFFFFFFFF 1078c2ecf20Sopenharmony_ci 1088c2ecf20Sopenharmony_ci/* Target family PVR mask */ 1098c2ecf20Sopenharmony_ci#define PVR10_TARGET_FAMILY_MASK 0xFF000000 1108c2ecf20Sopenharmony_ci 1118c2ecf20Sopenharmony_ci/* MMU description */ 1128c2ecf20Sopenharmony_ci#define PVR11_USE_MMU 0xC0000000 1138c2ecf20Sopenharmony_ci#define PVR11_MMU_ITLB_SIZE 0x38000000 1148c2ecf20Sopenharmony_ci#define PVR11_MMU_DTLB_SIZE 0x07000000 1158c2ecf20Sopenharmony_ci#define PVR11_MMU_TLB_ACCESS 0x00C00000 1168c2ecf20Sopenharmony_ci#define PVR11_MMU_ZONES 0x003C0000 1178c2ecf20Sopenharmony_ci#define PVR11_MMU_PRIVINS 0x00010000 1188c2ecf20Sopenharmony_ci/* MSR Reset value PVR mask */ 1198c2ecf20Sopenharmony_ci#define PVR11_MSR_RESET_VALUE_MASK 0x000007FF 1208c2ecf20Sopenharmony_ci 1218c2ecf20Sopenharmony_ci/* PVR access macros */ 1228c2ecf20Sopenharmony_ci#define PVR_IS_FULL(_pvr) (_pvr.pvr[0] & PVR0_PVR_FULL_MASK) 1238c2ecf20Sopenharmony_ci#define PVR_USE_BARREL(_pvr) (_pvr.pvr[0] & PVR0_USE_BARREL_MASK) 1248c2ecf20Sopenharmony_ci#define PVR_USE_DIV(_pvr) (_pvr.pvr[0] & PVR0_USE_DIV_MASK) 1258c2ecf20Sopenharmony_ci#define PVR_USE_HW_MUL(_pvr) (_pvr.pvr[0] & PVR0_USE_HW_MUL_MASK) 1268c2ecf20Sopenharmony_ci#define PVR_USE_FPU(_pvr) (_pvr.pvr[0] & PVR0_USE_FPU_MASK) 1278c2ecf20Sopenharmony_ci#define PVR_USE_FPU2(_pvr) (_pvr.pvr[2] & PVR2_USE_FPU2_MASK) 1288c2ecf20Sopenharmony_ci#define PVR_USE_ICACHE(_pvr) (_pvr.pvr[0] & PVR0_USE_ICACHE_MASK) 1298c2ecf20Sopenharmony_ci#define PVR_USE_DCACHE(_pvr) (_pvr.pvr[0] & PVR0_USE_DCACHE_MASK) 1308c2ecf20Sopenharmony_ci#define PVR_VERSION(_pvr) ((_pvr.pvr[0] & PVR0_VERSION_MASK) >> 8) 1318c2ecf20Sopenharmony_ci#define PVR_USER1(_pvr) (_pvr.pvr[0] & PVR0_USER1_MASK) 1328c2ecf20Sopenharmony_ci#define PVR_USER2(_pvr) (_pvr.pvr[1] & PVR1_USER2_MASK) 1338c2ecf20Sopenharmony_ci 1348c2ecf20Sopenharmony_ci#define PVR_D_OPB(_pvr) (_pvr.pvr[2] & PVR2_D_OPB_MASK) 1358c2ecf20Sopenharmony_ci#define PVR_D_LMB(_pvr) (_pvr.pvr[2] & PVR2_D_LMB_MASK) 1368c2ecf20Sopenharmony_ci#define PVR_I_OPB(_pvr) (_pvr.pvr[2] & PVR2_I_OPB_MASK) 1378c2ecf20Sopenharmony_ci#define PVR_I_LMB(_pvr) (_pvr.pvr[2] & PVR2_I_LMB_MASK) 1388c2ecf20Sopenharmony_ci#define PVR_INTERRUPT_IS_EDGE(_pvr) \ 1398c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_INTERRUPT_IS_EDGE_MASK) 1408c2ecf20Sopenharmony_ci#define PVR_EDGE_IS_POSITIVE(_pvr) \ 1418c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_EDGE_IS_POSITIVE_MASK) 1428c2ecf20Sopenharmony_ci#define PVR_USE_MSR_INSTR(_pvr) (_pvr.pvr[2] & PVR2_USE_MSR_INSTR) 1438c2ecf20Sopenharmony_ci#define PVR_USE_PCMP_INSTR(_pvr) (_pvr.pvr[2] & PVR2_USE_PCMP_INSTR) 1448c2ecf20Sopenharmony_ci#define PVR_AREA_OPTIMISED(_pvr) (_pvr.pvr[2] & PVR2_AREA_OPTIMISED) 1458c2ecf20Sopenharmony_ci#define PVR_USE_MUL64(_pvr) (_pvr.pvr[2] & PVR2_USE_MUL64_MASK) 1468c2ecf20Sopenharmony_ci#define PVR_OPCODE_0x0_ILLEGAL(_pvr) \ 1478c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_OPCODE_0x0_ILL_MASK) 1488c2ecf20Sopenharmony_ci#define PVR_UNALIGNED_EXCEPTION(_pvr) \ 1498c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_UNALIGNED_EXC_MASK) 1508c2ecf20Sopenharmony_ci#define PVR_ILL_OPCODE_EXCEPTION(_pvr) \ 1518c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_ILL_OPCODE_EXC_MASK) 1528c2ecf20Sopenharmony_ci#define PVR_IOPB_BUS_EXCEPTION(_pvr) \ 1538c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_IOPB_BUS_EXC_MASK) 1548c2ecf20Sopenharmony_ci#define PVR_DOPB_BUS_EXCEPTION(_pvr) \ 1558c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_DOPB_BUS_EXC_MASK) 1568c2ecf20Sopenharmony_ci#define PVR_DIV_ZERO_EXCEPTION(_pvr) \ 1578c2ecf20Sopenharmony_ci (_pvr.pvr[2] & PVR2_DIV_ZERO_EXC_MASK) 1588c2ecf20Sopenharmony_ci#define PVR_FPU_EXCEPTION(_pvr) (_pvr.pvr[2] & PVR2_FPU_EXC_MASK) 1598c2ecf20Sopenharmony_ci#define PVR_FSL_EXCEPTION(_pvr) (_pvr.pvr[2] & PVR2_USE_EXTEND_FSL) 1608c2ecf20Sopenharmony_ci 1618c2ecf20Sopenharmony_ci#define PVR_DEBUG_ENABLED(_pvr) (_pvr.pvr[3] & PVR3_DEBUG_ENABLED_MASK) 1628c2ecf20Sopenharmony_ci#define PVR_NUMBER_OF_PC_BRK(_pvr) \ 1638c2ecf20Sopenharmony_ci ((_pvr.pvr[3] & PVR3_NUMBER_OF_PC_BRK_MASK) >> 25) 1648c2ecf20Sopenharmony_ci#define PVR_NUMBER_OF_RD_ADDR_BRK(_pvr) \ 1658c2ecf20Sopenharmony_ci ((_pvr.pvr[3] & PVR3_NUMBER_OF_RD_ADDR_BRK_MASK) >> 19) 1668c2ecf20Sopenharmony_ci#define PVR_NUMBER_OF_WR_ADDR_BRK(_pvr) \ 1678c2ecf20Sopenharmony_ci ((_pvr.pvr[3] & PVR3_NUMBER_OF_WR_ADDR_BRK_MASK) >> 13) 1688c2ecf20Sopenharmony_ci#define PVR_FSL_LINKS(_pvr) ((_pvr.pvr[3] & PVR3_FSL_LINKS_MASK) >> 7) 1698c2ecf20Sopenharmony_ci 1708c2ecf20Sopenharmony_ci#define PVR_ICACHE_ADDR_TAG_BITS(_pvr) \ 1718c2ecf20Sopenharmony_ci ((_pvr.pvr[4] & PVR4_ICACHE_ADDR_TAG_BITS_MASK) >> 26) 1728c2ecf20Sopenharmony_ci#define PVR_ICACHE_USE_FSL(_pvr) \ 1738c2ecf20Sopenharmony_ci (_pvr.pvr[4] & PVR4_ICACHE_USE_FSL_MASK) 1748c2ecf20Sopenharmony_ci#define PVR_ICACHE_ALLOW_WR(_pvr) \ 1758c2ecf20Sopenharmony_ci (_pvr.pvr[4] & PVR4_ICACHE_ALLOW_WR_MASK) 1768c2ecf20Sopenharmony_ci#define PVR_ICACHE_LINE_LEN(_pvr) \ 1778c2ecf20Sopenharmony_ci (1 << ((_pvr.pvr[4] & PVR4_ICACHE_LINE_LEN_MASK) >> 21)) 1788c2ecf20Sopenharmony_ci#define PVR_ICACHE_BYTE_SIZE(_pvr) \ 1798c2ecf20Sopenharmony_ci (1 << ((_pvr.pvr[4] & PVR4_ICACHE_BYTE_SIZE_MASK) >> 16)) 1808c2ecf20Sopenharmony_ci 1818c2ecf20Sopenharmony_ci#define PVR_DCACHE_ADDR_TAG_BITS(_pvr) \ 1828c2ecf20Sopenharmony_ci ((_pvr.pvr[5] & PVR5_DCACHE_ADDR_TAG_BITS_MASK) >> 26) 1838c2ecf20Sopenharmony_ci#define PVR_DCACHE_USE_FSL(_pvr) (_pvr.pvr[5] & PVR5_DCACHE_USE_FSL_MASK) 1848c2ecf20Sopenharmony_ci#define PVR_DCACHE_ALLOW_WR(_pvr) \ 1858c2ecf20Sopenharmony_ci (_pvr.pvr[5] & PVR5_DCACHE_ALLOW_WR_MASK) 1868c2ecf20Sopenharmony_ci/* FIXME two shifts on one line needs any comment */ 1878c2ecf20Sopenharmony_ci#define PVR_DCACHE_LINE_LEN(_pvr) \ 1888c2ecf20Sopenharmony_ci (1 << ((_pvr.pvr[5] & PVR5_DCACHE_LINE_LEN_MASK) >> 21)) 1898c2ecf20Sopenharmony_ci#define PVR_DCACHE_BYTE_SIZE(_pvr) \ 1908c2ecf20Sopenharmony_ci (1 << ((_pvr.pvr[5] & PVR5_DCACHE_BYTE_SIZE_MASK) >> 16)) 1918c2ecf20Sopenharmony_ci 1928c2ecf20Sopenharmony_ci#define PVR_DCACHE_USE_WRITEBACK(_pvr) \ 1938c2ecf20Sopenharmony_ci ((_pvr.pvr[5] & PVR5_DCACHE_USE_WRITEBACK) >> 14) 1948c2ecf20Sopenharmony_ci 1958c2ecf20Sopenharmony_ci#define PVR_ICACHE_BASEADDR(_pvr) \ 1968c2ecf20Sopenharmony_ci (_pvr.pvr[6] & PVR6_ICACHE_BASEADDR_MASK) 1978c2ecf20Sopenharmony_ci#define PVR_ICACHE_HIGHADDR(_pvr) \ 1988c2ecf20Sopenharmony_ci (_pvr.pvr[7] & PVR7_ICACHE_HIGHADDR_MASK) 1998c2ecf20Sopenharmony_ci#define PVR_DCACHE_BASEADDR(_pvr) \ 2008c2ecf20Sopenharmony_ci (_pvr.pvr[8] & PVR8_DCACHE_BASEADDR_MASK) 2018c2ecf20Sopenharmony_ci#define PVR_DCACHE_HIGHADDR(_pvr) \ 2028c2ecf20Sopenharmony_ci (_pvr.pvr[9] & PVR9_DCACHE_HIGHADDR_MASK) 2038c2ecf20Sopenharmony_ci 2048c2ecf20Sopenharmony_ci#define PVR_TARGET_FAMILY(_pvr) \ 2058c2ecf20Sopenharmony_ci ((_pvr.pvr[10] & PVR10_TARGET_FAMILY_MASK) >> 24) 2068c2ecf20Sopenharmony_ci 2078c2ecf20Sopenharmony_ci#define PVR_MSR_RESET_VALUE(_pvr) \ 2088c2ecf20Sopenharmony_ci (_pvr.pvr[11] & PVR11_MSR_RESET_VALUE_MASK) 2098c2ecf20Sopenharmony_ci 2108c2ecf20Sopenharmony_ci/* mmu */ 2118c2ecf20Sopenharmony_ci#define PVR_USE_MMU(_pvr) ((_pvr.pvr[11] & PVR11_USE_MMU) >> 30) 2128c2ecf20Sopenharmony_ci#define PVR_MMU_ITLB_SIZE(_pvr) (_pvr.pvr[11] & PVR11_MMU_ITLB_SIZE) 2138c2ecf20Sopenharmony_ci#define PVR_MMU_DTLB_SIZE(_pvr) (_pvr.pvr[11] & PVR11_MMU_DTLB_SIZE) 2148c2ecf20Sopenharmony_ci#define PVR_MMU_TLB_ACCESS(_pvr) (_pvr.pvr[11] & PVR11_MMU_TLB_ACCESS) 2158c2ecf20Sopenharmony_ci#define PVR_MMU_ZONES(_pvr) (_pvr.pvr[11] & PVR11_MMU_ZONES) 2168c2ecf20Sopenharmony_ci#define PVR_MMU_PRIVINS(pvr) (pvr.pvr[11] & PVR11_MMU_PRIVINS) 2178c2ecf20Sopenharmony_ci 2188c2ecf20Sopenharmony_ci/* endian */ 2198c2ecf20Sopenharmony_ci#define PVR_ENDIAN(_pvr) (_pvr.pvr[0] & PVR0_ENDI) 2208c2ecf20Sopenharmony_ci 2218c2ecf20Sopenharmony_ciint cpu_has_pvr(void); 2228c2ecf20Sopenharmony_civoid get_pvr(struct pvr_s *pvr); 2238c2ecf20Sopenharmony_ci 2248c2ecf20Sopenharmony_ci#endif /* _ASM_MICROBLAZE_PVR_H */ 225