18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/* 38c2ecf20Sopenharmony_ci * OMAP4 PRCM_MPU module functions 48c2ecf20Sopenharmony_ci * 58c2ecf20Sopenharmony_ci * Copyright (C) 2009 Nokia Corporation 68c2ecf20Sopenharmony_ci * Paul Walmsley 78c2ecf20Sopenharmony_ci */ 88c2ecf20Sopenharmony_ci 98c2ecf20Sopenharmony_ci#include <linux/kernel.h> 108c2ecf20Sopenharmony_ci#include <linux/types.h> 118c2ecf20Sopenharmony_ci#include <linux/errno.h> 128c2ecf20Sopenharmony_ci#include <linux/err.h> 138c2ecf20Sopenharmony_ci#include <linux/io.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include "iomap.h" 168c2ecf20Sopenharmony_ci#include "common.h" 178c2ecf20Sopenharmony_ci#include "prcm_mpu44xx.h" 188c2ecf20Sopenharmony_ci#include "cm-regbits-44xx.h" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_ci/* 218c2ecf20Sopenharmony_ci * prcm_mpu_base: the virtual address of the start of the PRCM_MPU IP 228c2ecf20Sopenharmony_ci * block registers 238c2ecf20Sopenharmony_ci */ 248c2ecf20Sopenharmony_cistruct omap_domain_base prcm_mpu_base; 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci/* PRCM_MPU low-level functions */ 278c2ecf20Sopenharmony_ci 288c2ecf20Sopenharmony_ciu32 omap4_prcm_mpu_read_inst_reg(s16 inst, u16 reg) 298c2ecf20Sopenharmony_ci{ 308c2ecf20Sopenharmony_ci return readl_relaxed(OMAP44XX_PRCM_MPU_REGADDR(inst, reg)); 318c2ecf20Sopenharmony_ci} 328c2ecf20Sopenharmony_ci 338c2ecf20Sopenharmony_civoid omap4_prcm_mpu_write_inst_reg(u32 val, s16 inst, u16 reg) 348c2ecf20Sopenharmony_ci{ 358c2ecf20Sopenharmony_ci writel_relaxed(val, OMAP44XX_PRCM_MPU_REGADDR(inst, reg)); 368c2ecf20Sopenharmony_ci} 378c2ecf20Sopenharmony_ci 388c2ecf20Sopenharmony_ciu32 omap4_prcm_mpu_rmw_inst_reg_bits(u32 mask, u32 bits, s16 inst, s16 reg) 398c2ecf20Sopenharmony_ci{ 408c2ecf20Sopenharmony_ci u32 v; 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_ci v = omap4_prcm_mpu_read_inst_reg(inst, reg); 438c2ecf20Sopenharmony_ci v &= ~mask; 448c2ecf20Sopenharmony_ci v |= bits; 458c2ecf20Sopenharmony_ci omap4_prcm_mpu_write_inst_reg(v, inst, reg); 468c2ecf20Sopenharmony_ci 478c2ecf20Sopenharmony_ci return v; 488c2ecf20Sopenharmony_ci} 498c2ecf20Sopenharmony_ci 508c2ecf20Sopenharmony_ci/** 518c2ecf20Sopenharmony_ci * omap2_set_globals_prcm_mpu - set the MPU PRCM base address (for early use) 528c2ecf20Sopenharmony_ci * @prcm_mpu: PRCM_MPU base virtual address 538c2ecf20Sopenharmony_ci * 548c2ecf20Sopenharmony_ci * XXX Will be replaced when the PRM/CM drivers are completed. 558c2ecf20Sopenharmony_ci */ 568c2ecf20Sopenharmony_civoid __init omap2_set_globals_prcm_mpu(void __iomem *prcm_mpu) 578c2ecf20Sopenharmony_ci{ 588c2ecf20Sopenharmony_ci prcm_mpu_base.va = prcm_mpu; 598c2ecf20Sopenharmony_ci} 60