18c2ecf20Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 28c2ecf20Sopenharmony_ci#ifndef BCM63XX_IOREMAP_H_ 38c2ecf20Sopenharmony_ci#define BCM63XX_IOREMAP_H_ 48c2ecf20Sopenharmony_ci 58c2ecf20Sopenharmony_ci#include <bcm63xx_cpu.h> 68c2ecf20Sopenharmony_ci 78c2ecf20Sopenharmony_cistatic inline int is_bcm63xx_internal_registers(phys_addr_t offset) 88c2ecf20Sopenharmony_ci{ 98c2ecf20Sopenharmony_ci switch (bcm63xx_get_cpu_id()) { 108c2ecf20Sopenharmony_ci case BCM3368_CPU_ID: 118c2ecf20Sopenharmony_ci if (offset >= 0xfff80000) 128c2ecf20Sopenharmony_ci return 1; 138c2ecf20Sopenharmony_ci break; 148c2ecf20Sopenharmony_ci case BCM6338_CPU_ID: 158c2ecf20Sopenharmony_ci case BCM6345_CPU_ID: 168c2ecf20Sopenharmony_ci case BCM6348_CPU_ID: 178c2ecf20Sopenharmony_ci case BCM6358_CPU_ID: 188c2ecf20Sopenharmony_ci if (offset >= 0xfff00000) 198c2ecf20Sopenharmony_ci return 1; 208c2ecf20Sopenharmony_ci break; 218c2ecf20Sopenharmony_ci case BCM6328_CPU_ID: 228c2ecf20Sopenharmony_ci case BCM6362_CPU_ID: 238c2ecf20Sopenharmony_ci case BCM6368_CPU_ID: 248c2ecf20Sopenharmony_ci if (offset >= 0xb0000000 && offset < 0xb1000000) 258c2ecf20Sopenharmony_ci return 1; 268c2ecf20Sopenharmony_ci break; 278c2ecf20Sopenharmony_ci } 288c2ecf20Sopenharmony_ci return 0; 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_cistatic inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size, 328c2ecf20Sopenharmony_ci unsigned long flags) 338c2ecf20Sopenharmony_ci{ 348c2ecf20Sopenharmony_ci if (is_bcm63xx_internal_registers(offset)) 358c2ecf20Sopenharmony_ci return (void __iomem *)offset; 368c2ecf20Sopenharmony_ci return NULL; 378c2ecf20Sopenharmony_ci} 388c2ecf20Sopenharmony_ci 398c2ecf20Sopenharmony_cistatic inline int plat_iounmap(const volatile void __iomem *addr) 408c2ecf20Sopenharmony_ci{ 418c2ecf20Sopenharmony_ci return is_bcm63xx_internal_registers((unsigned long)addr); 428c2ecf20Sopenharmony_ci} 438c2ecf20Sopenharmony_ci 448c2ecf20Sopenharmony_ci#endif /* BCM63XX_IOREMAP_H_ */ 45