76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			76 lines
		
	
	
		
			1.7 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
/**
 | 
						|
    NVT SRAM Contrl
 | 
						|
    This file will Enable and disable SRAM shutdown
 | 
						|
    @file       nvt-sramctl.c
 | 
						|
    @ingroup
 | 
						|
    @note
 | 
						|
    Copyright   Novatek Microelectronics Corp. 2018.  All rights reserved.
 | 
						|
 | 
						|
    This program is free software; you can redistribute it and/or modify
 | 
						|
    it under the terms of the GNU General Public License version 2 as
 | 
						|
    published by the Free Software Foundation.
 | 
						|
*/
 | 
						|
 | 
						|
#include <plat/nvt-sramctl.h>
 | 
						|
#include <linux/spinlock.h>
 | 
						|
 | 
						|
static void __iomem *remap_base;
 | 
						|
#define NVT_SRAM_SETREG(ofs, value)	writel((value), (remap_base+(ofs)))
 | 
						|
#define NVT_SRAM_GETREG(ofs)		readl(remap_base+(ofs))
 | 
						|
 | 
						|
#ifdef __KERNEL__
 | 
						|
static DEFINE_SPINLOCK(my_lock);
 | 
						|
#define loc_cpu(flags)   spin_lock_irqsave(&my_lock, flags)
 | 
						|
#define unl_cpu(flags)   spin_unlock_irqrestore(&my_lock, flags)
 | 
						|
#endif
 | 
						|
 | 
						|
void nvt_disable_sram_shutdown(SRAM_SD id)
 | 
						|
{
 | 
						|
	unsigned long flags;
 | 
						|
	u32 reg_data, reg_ofs;
 | 
						|
 | 
						|
	reg_ofs = (id >> 5) << 2;
 | 
						|
 | 
						|
	loc_cpu(flags);
 | 
						|
 | 
						|
	reg_data = NVT_SRAM_GETREG(reg_ofs);
 | 
						|
 | 
						|
	reg_data &= ~(1 << (id & 0x1F));
 | 
						|
 | 
						|
	NVT_SRAM_SETREG(reg_ofs, reg_data);
 | 
						|
 | 
						|
	unl_cpu(flags);
 | 
						|
}
 | 
						|
 | 
						|
void nvt_enable_sram_shutdown(SRAM_SD id)
 | 
						|
{
 | 
						|
	unsigned long flags;    
 | 
						|
	u32 reg_data, reg_ofs;
 | 
						|
 | 
						|
	reg_ofs = (id >> 5) << 2;
 | 
						|
 | 
						|
	loc_cpu(flags);
 | 
						|
 | 
						|
	reg_data = NVT_SRAM_GETREG(reg_ofs);
 | 
						|
 | 
						|
	reg_data |= (1 << (id & 0x1F));
 | 
						|
 | 
						|
	NVT_SRAM_SETREG(reg_ofs, reg_data);
 | 
						|
 | 
						|
	unl_cpu(flags);
 | 
						|
}
 | 
						|
 | 
						|
static int __init nvt_init_sram_membase(void)
 | 
						|
{
 | 
						|
	remap_base = ioremap_nocache(NVT_SRAM_PHY_BASE, 0x1000);
 | 
						|
	if (unlikely(remap_base == 0)) {
 | 
						|
		pr_err("%s fails: ioremap_nocache fail\n", __FUNCTION__);
 | 
						|
		return -1;
 | 
						|
	}
 | 
						|
 | 
						|
	return 0;
 | 
						|
}
 | 
						|
 | 
						|
core_initcall(nvt_init_sram_membase);
 | 
						|
EXPORT_SYMBOL(nvt_enable_sram_shutdown);
 | 
						|
EXPORT_SYMBOL(nvt_disable_sram_shutdown); |