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 Tyserstatic 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 Tyserint 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