mirror of
				https://source.denx.de/u-boot/u-boot.git
				synced 2025-10-31 00:11:51 +01:00 
			
		
		
		
	This function is clearly architecture specific code, not board specific code. The only difference from the previous arm arch_lmb_reserve() is the extra reservation of 16k of memory below the stack bottom, rather than the 4k. The common code now also uses 16k alignment. Remove this custom implementation, as it now behaves exactly as the common code. Signed-off-by: Marek Vasut <marek.vasut+renesas@gmail.com> Cc: Alexey Brodkin <alexey.brodkin@synopsys.com> Cc: Angelo Dureghello <angelo@sysam.it> Cc: Daniel Schwierzeck <daniel.schwierzeck@gmail.com> Cc: Eugeniy Paltsev <Eugeniy.Paltsev@synopsys.com> Cc: Hai Pham <hai.pham.ud@renesas.com> Cc: Michal Simek <monstr@monstr.eu> Cc: Simon Goldschmidt <simon.k.r.goldschmidt@gmail.com> Cc: Tom Rini <trini@konsulko.com> Cc: Wolfgang Denk <wd@denx.de> Cc: Ye Li <ye.li@nxp.com>
		
			
				
	
	
		
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			80 lines
		
	
	
		
			1.6 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0+
 | |
| /*
 | |
|  * Copyright 2013 Stefan Roese <sr@denx.de>
 | |
|  */
 | |
| 
 | |
| #include <common.h>
 | |
| #include <lmb.h>
 | |
| #include <log.h>
 | |
| #include <asm/arch/sys_proto.h>
 | |
| #include <asm/global_data.h>
 | |
| #include <linux/delay.h>
 | |
| #include <linux/errno.h>
 | |
| #include <asm/io.h>
 | |
| #include <asm/mach-imx/regs-common.h>
 | |
| 
 | |
| DECLARE_GLOBAL_DATA_PTR;
 | |
| 
 | |
| /* 1 second delay should be plenty of time for block reset. */
 | |
| #define	RESET_MAX_TIMEOUT	1000000
 | |
| 
 | |
| #define	MXS_BLOCK_SFTRST	(1 << 31)
 | |
| #define	MXS_BLOCK_CLKGATE	(1 << 30)
 | |
| 
 | |
| int mxs_wait_mask_set(struct mxs_register_32 *reg, uint32_t mask, unsigned
 | |
| 								int timeout)
 | |
| {
 | |
| 	while (--timeout) {
 | |
| 		if ((readl(®->reg) & mask) == mask)
 | |
| 			break;
 | |
| 		udelay(1);
 | |
| 	}
 | |
| 
 | |
| 	return !timeout;
 | |
| }
 | |
| 
 | |
| int mxs_wait_mask_clr(struct mxs_register_32 *reg, uint32_t mask, unsigned
 | |
| 								int timeout)
 | |
| {
 | |
| 	while (--timeout) {
 | |
| 		if ((readl(®->reg) & mask) == 0)
 | |
| 			break;
 | |
| 		udelay(1);
 | |
| 	}
 | |
| 
 | |
| 	return !timeout;
 | |
| }
 | |
| 
 | |
| int mxs_reset_block(struct mxs_register_32 *reg)
 | |
| {
 | |
| 	/* Clear SFTRST */
 | |
| 	writel(MXS_BLOCK_SFTRST, ®->reg_clr);
 | |
| 
 | |
| 	if (mxs_wait_mask_clr(reg, MXS_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
 | |
| 		return 1;
 | |
| 
 | |
| 	/* Clear CLKGATE */
 | |
| 	writel(MXS_BLOCK_CLKGATE, ®->reg_clr);
 | |
| 
 | |
| 	/* Set SFTRST */
 | |
| 	writel(MXS_BLOCK_SFTRST, ®->reg_set);
 | |
| 
 | |
| 	/* Wait for CLKGATE being set */
 | |
| 	if (mxs_wait_mask_set(reg, MXS_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
 | |
| 		return 1;
 | |
| 
 | |
| 	/* Clear SFTRST */
 | |
| 	writel(MXS_BLOCK_SFTRST, ®->reg_clr);
 | |
| 
 | |
| 	if (mxs_wait_mask_clr(reg, MXS_BLOCK_SFTRST, RESET_MAX_TIMEOUT))
 | |
| 		return 1;
 | |
| 
 | |
| 	/* Clear CLKGATE */
 | |
| 	writel(MXS_BLOCK_CLKGATE, ®->reg_clr);
 | |
| 
 | |
| 	if (mxs_wait_mask_clr(reg, MXS_BLOCK_CLKGATE, RESET_MAX_TIMEOUT))
 | |
| 		return 1;
 | |
| 
 | |
| 	return 0;
 | |
| }
 |