xref: /openbmc/u-boot/board/xes/common/actl_nand.c (revision e8f80a5a)
1*83d290c5STom Rini // SPDX-License-Identifier: GPL-2.0+
21f03cbfaSPeter Tyser /*
31f03cbfaSPeter Tyser  * Copyright 2008 Extreme Engineering Solutions, Inc.
41f03cbfaSPeter Tyser  *
51f03cbfaSPeter Tyser  * This driver support NAND devices which have address lines
61f03cbfaSPeter Tyser  * connected as ALE and CLE inputs.
71f03cbfaSPeter Tyser  */
81f03cbfaSPeter Tyser 
91f03cbfaSPeter Tyser #include <common.h>
101f03cbfaSPeter Tyser #include <nand.h>
111f03cbfaSPeter Tyser #include <asm/io.h>
121f03cbfaSPeter Tyser 
131f03cbfaSPeter Tyser /*
141f03cbfaSPeter Tyser  * Hardware specific access to control-lines
151f03cbfaSPeter Tyser  */
nand_addr_hwcontrol(struct mtd_info * mtd,int cmd,uint ctrl)161f03cbfaSPeter Tyser static void nand_addr_hwcontrol(struct mtd_info *mtd, int cmd, uint ctrl)
171f03cbfaSPeter Tyser {
1817cb4b8fSScott Wood 	struct nand_chip *this = mtd_to_nand(mtd);
191f03cbfaSPeter Tyser 	ulong IO_ADDR_W;
201f03cbfaSPeter Tyser 
211f03cbfaSPeter Tyser 	if (ctrl & NAND_CTRL_CHANGE) {
221f03cbfaSPeter Tyser 		IO_ADDR_W = (ulong)this->IO_ADDR_W;
231f03cbfaSPeter Tyser 
241f03cbfaSPeter Tyser 		IO_ADDR_W &= ~(CONFIG_SYS_NAND_ACTL_CLE |
251f03cbfaSPeter Tyser 				CONFIG_SYS_NAND_ACTL_ALE |
261f03cbfaSPeter Tyser 				CONFIG_SYS_NAND_ACTL_NCE);
271f03cbfaSPeter Tyser 		if (ctrl & NAND_CLE)
281f03cbfaSPeter Tyser 			IO_ADDR_W |= CONFIG_SYS_NAND_ACTL_CLE;
291f03cbfaSPeter Tyser 		if (ctrl & NAND_ALE)
301f03cbfaSPeter Tyser 			IO_ADDR_W |= CONFIG_SYS_NAND_ACTL_ALE;
311f03cbfaSPeter Tyser 		if (ctrl & NAND_NCE)
321f03cbfaSPeter Tyser 			IO_ADDR_W |= CONFIG_SYS_NAND_ACTL_NCE;
331f03cbfaSPeter Tyser 
341f03cbfaSPeter Tyser 		this->IO_ADDR_W = (void *)IO_ADDR_W;
351f03cbfaSPeter Tyser 	}
361f03cbfaSPeter Tyser 
371f03cbfaSPeter Tyser 	if (cmd != NAND_CMD_NONE)
381f03cbfaSPeter Tyser 		writeb(cmd, this->IO_ADDR_W);
391f03cbfaSPeter Tyser }
401f03cbfaSPeter Tyser 
board_nand_init(struct nand_chip * nand)411f03cbfaSPeter Tyser int board_nand_init(struct nand_chip *nand)
421f03cbfaSPeter Tyser {
431f03cbfaSPeter Tyser 	nand->ecc.mode = NAND_ECC_SOFT;
441f03cbfaSPeter Tyser 	nand->cmd_ctrl = nand_addr_hwcontrol;
451f03cbfaSPeter Tyser 	nand->chip_delay = CONFIG_SYS_NAND_ACTL_DELAY;
461f03cbfaSPeter Tyser 
471f03cbfaSPeter Tyser 	return 0;
481f03cbfaSPeter Tyser }
49