162306a36Sopenharmony_ci/* SPDX-License-Identifier: GPL-2.0 */ 262306a36Sopenharmony_ci#ifndef BCM63XX_IOREMAP_H_ 362306a36Sopenharmony_ci#define BCM63XX_IOREMAP_H_ 462306a36Sopenharmony_ci 562306a36Sopenharmony_ci#include <bcm63xx_cpu.h> 662306a36Sopenharmony_ci 762306a36Sopenharmony_cistatic inline int is_bcm63xx_internal_registers(phys_addr_t offset) 862306a36Sopenharmony_ci{ 962306a36Sopenharmony_ci switch (bcm63xx_get_cpu_id()) { 1062306a36Sopenharmony_ci case BCM3368_CPU_ID: 1162306a36Sopenharmony_ci if (offset >= 0xfff80000) 1262306a36Sopenharmony_ci return 1; 1362306a36Sopenharmony_ci break; 1462306a36Sopenharmony_ci case BCM6338_CPU_ID: 1562306a36Sopenharmony_ci case BCM6345_CPU_ID: 1662306a36Sopenharmony_ci case BCM6348_CPU_ID: 1762306a36Sopenharmony_ci case BCM6358_CPU_ID: 1862306a36Sopenharmony_ci if (offset >= 0xfff00000) 1962306a36Sopenharmony_ci return 1; 2062306a36Sopenharmony_ci break; 2162306a36Sopenharmony_ci case BCM6328_CPU_ID: 2262306a36Sopenharmony_ci case BCM6362_CPU_ID: 2362306a36Sopenharmony_ci case BCM6368_CPU_ID: 2462306a36Sopenharmony_ci if (offset >= 0xb0000000 && offset < 0xb1000000) 2562306a36Sopenharmony_ci return 1; 2662306a36Sopenharmony_ci break; 2762306a36Sopenharmony_ci } 2862306a36Sopenharmony_ci return 0; 2962306a36Sopenharmony_ci} 3062306a36Sopenharmony_ci 3162306a36Sopenharmony_cistatic inline void __iomem *plat_ioremap(phys_addr_t offset, unsigned long size, 3262306a36Sopenharmony_ci unsigned long flags) 3362306a36Sopenharmony_ci{ 3462306a36Sopenharmony_ci if (is_bcm63xx_internal_registers(offset)) 3562306a36Sopenharmony_ci return (void __iomem *)offset; 3662306a36Sopenharmony_ci return NULL; 3762306a36Sopenharmony_ci} 3862306a36Sopenharmony_ci 3962306a36Sopenharmony_cistatic inline int plat_iounmap(const volatile void __iomem *addr) 4062306a36Sopenharmony_ci{ 4162306a36Sopenharmony_ci return is_bcm63xx_internal_registers((unsigned long)addr); 4262306a36Sopenharmony_ci} 4362306a36Sopenharmony_ci 4462306a36Sopenharmony_ci#endif /* BCM63XX_IOREMAP_H_ */ 45