mirror of
				https://xff.cz/git/u-boot/
				synced 2025-10-31 02:15:45 +01:00 
			
		
		
		
	The comment /* deassert reset */ is wrong. It asserts the reset. It no longer needs to stay in SPL. The NAND controller reset is handled in the driver. So, this assert can be moved to the board_init() of U-Boot proper. Signed-off-by: Masahiro Yamada <yamada.masahiro@socionext.com>
		
			
				
	
	
		
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
			
		
		
	
	
			44 lines
		
	
	
		
			1.2 KiB
		
	
	
	
		
			C
		
	
	
	
	
	
| // SPDX-License-Identifier: GPL-2.0 or later
 | |
| /*
 | |
|  * Copyright (C) 2020 Socionext Inc.
 | |
|  *   Author: Masahiro Yamada <yamada.masahiro@socionext.com>
 | |
|  */
 | |
| 
 | |
| #include <linux/errno.h>
 | |
| #include <dm.h>
 | |
| #include <dm/uclass-internal.h>
 | |
| #include <reset.h>
 | |
| 
 | |
| #include "init.h"
 | |
| 
 | |
| /*
 | |
|  * Assert the Denali NAND controller reset if found.
 | |
|  *
 | |
|  * On LD4, the bootstrap process starts running after power-on reset regardless
 | |
|  * of the boot mode, here the pin-mux is not necessarily set up for NAND, then
 | |
|  * the controller is stuck. Assert the controller reset here, and should be
 | |
|  * deasserted in the driver after the pin-mux is correctly handled. For other
 | |
|  * SoCs, the bootstrap runs only when the boot mode selects ONFi, but it is yet
 | |
|  * effective when the boot swap is on. So, the reset should be asserted anyway.
 | |
|  */
 | |
| void uniphier_nand_reset_assert(void)
 | |
| {
 | |
| 	struct udevice *dev;
 | |
| 	struct reset_ctl_bulk resets;
 | |
| 	int ret;
 | |
| 
 | |
| 	ret = uclass_find_first_device(UCLASS_MTD, &dev);
 | |
| 	if (ret || !dev)
 | |
| 		return;
 | |
| 
 | |
| 	/* make sure this is the Denali NAND controller */
 | |
| 	if (strcmp(dev->driver->name, "denali-nand-dt"))
 | |
| 		return;
 | |
| 
 | |
| 	ret = reset_get_bulk(dev, &resets);
 | |
| 	if (ret)
 | |
| 		return;
 | |
| 
 | |
| 	reset_assert_bulk(&resets);
 | |
| }
 |