18c2ecf20Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-only 28c2ecf20Sopenharmony_ci/** 38c2ecf20Sopenharmony_ci * Copyright (C) ST-Ericsson SA 2010 48c2ecf20Sopenharmony_ci * Author: Shujuan Chen <shujuan.chen@stericsson.com> for ST-Ericsson. 58c2ecf20Sopenharmony_ci * Author: Jonas Linde <jonas.linde@stericsson.com> for ST-Ericsson. 68c2ecf20Sopenharmony_ci * Author: Joakim Bech <joakim.xx.bech@stericsson.com> for ST-Ericsson. 78c2ecf20Sopenharmony_ci * Author: Berne Hebark <berne.herbark@stericsson.com> for ST-Ericsson. 88c2ecf20Sopenharmony_ci * Author: Niklas Hernaeus <niklas.hernaeus@stericsson.com> for ST-Ericsson. 98c2ecf20Sopenharmony_ci */ 108c2ecf20Sopenharmony_ci 118c2ecf20Sopenharmony_ci#include <linux/kernel.h> 128c2ecf20Sopenharmony_ci#include <linux/bitmap.h> 138c2ecf20Sopenharmony_ci#include <linux/device.h> 148c2ecf20Sopenharmony_ci 158c2ecf20Sopenharmony_ci#include "cryp.h" 168c2ecf20Sopenharmony_ci#include "cryp_p.h" 178c2ecf20Sopenharmony_ci#include "cryp_irq.h" 188c2ecf20Sopenharmony_ci#include "cryp_irqp.h" 198c2ecf20Sopenharmony_ci 208c2ecf20Sopenharmony_civoid cryp_enable_irq_src(struct cryp_device_data *device_data, u32 irq_src) 218c2ecf20Sopenharmony_ci{ 228c2ecf20Sopenharmony_ci u32 i; 238c2ecf20Sopenharmony_ci 248c2ecf20Sopenharmony_ci dev_dbg(device_data->dev, "[%s]", __func__); 258c2ecf20Sopenharmony_ci 268c2ecf20Sopenharmony_ci i = readl_relaxed(&device_data->base->imsc); 278c2ecf20Sopenharmony_ci i = i | irq_src; 288c2ecf20Sopenharmony_ci writel_relaxed(i, &device_data->base->imsc); 298c2ecf20Sopenharmony_ci} 308c2ecf20Sopenharmony_ci 318c2ecf20Sopenharmony_civoid cryp_disable_irq_src(struct cryp_device_data *device_data, u32 irq_src) 328c2ecf20Sopenharmony_ci{ 338c2ecf20Sopenharmony_ci u32 i; 348c2ecf20Sopenharmony_ci 358c2ecf20Sopenharmony_ci dev_dbg(device_data->dev, "[%s]", __func__); 368c2ecf20Sopenharmony_ci 378c2ecf20Sopenharmony_ci i = readl_relaxed(&device_data->base->imsc); 388c2ecf20Sopenharmony_ci i = i & ~irq_src; 398c2ecf20Sopenharmony_ci writel_relaxed(i, &device_data->base->imsc); 408c2ecf20Sopenharmony_ci} 418c2ecf20Sopenharmony_ci 428c2ecf20Sopenharmony_cibool cryp_pending_irq_src(struct cryp_device_data *device_data, u32 irq_src) 438c2ecf20Sopenharmony_ci{ 448c2ecf20Sopenharmony_ci return (readl_relaxed(&device_data->base->mis) & irq_src) > 0; 458c2ecf20Sopenharmony_ci} 46