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