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