parent
eaf9e447be
commit
1a33ce65a4
@ -0,0 +1,115 @@ |
|||||||
|
/*
|
||||||
|
* (C) Copyright 2000-2003 |
||||||
|
* Wolfgang Denk, DENX Software Engineering, wd@denx.de. |
||||||
|
* |
||||||
|
* Copyright (C) 2004-2007 Freescale Semiconductor, Inc. |
||||||
|
* TsiChung Liew (Tsi-Chung.Liew@freescale.com) |
||||||
|
* |
||||||
|
* See file CREDITS for list of people who contributed to this |
||||||
|
* project. |
||||||
|
* |
||||||
|
* This program is free software; you can redistribute it and/or |
||||||
|
* modify it under the terms of the GNU General Public License as |
||||||
|
* published by the Free Software Foundation; either version 2 of |
||||||
|
* the License, or (at your option) any later version. |
||||||
|
* |
||||||
|
* This program is distributed in the hope that it will be useful, |
||||||
|
* but WITHOUT ANY WARRANTY; without even the implied warranty of |
||||||
|
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
||||||
|
* GNU General Public License for more details. |
||||||
|
* |
||||||
|
* You should have received a copy of the GNU General Public License |
||||||
|
* along with this program; if not, write to the Free Software |
||||||
|
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, |
||||||
|
* MA 02111-1307 USA |
||||||
|
*/ |
||||||
|
|
||||||
|
#include <config.h> |
||||||
|
#include <common.h> |
||||||
|
#include <asm/io.h> |
||||||
|
#include <asm/immap.h> |
||||||
|
|
||||||
|
DECLARE_GLOBAL_DATA_PTR; |
||||||
|
|
||||||
|
#if (CONFIG_COMMANDS & CFG_CMD_NAND) |
||||||
|
#include <nand.h> |
||||||
|
#include <linux/mtd/mtd.h> |
||||||
|
|
||||||
|
#define SET_CLE 0x10 |
||||||
|
#define CLR_CLE ~SET_CLE |
||||||
|
#define SET_ALE 0x08 |
||||||
|
#define CLR_ALE ~SET_ALE |
||||||
|
|
||||||
|
static void nand_hwcontrol(struct mtd_info *mtdinfo, int cmd) |
||||||
|
{ |
||||||
|
struct nand_chip *this = mtdinfo->priv; |
||||||
|
volatile fbcs_t *fbcs = (fbcs_t *) MMAP_FBCS; |
||||||
|
u32 nand_baseaddr = (u32) this->IO_ADDR_W; |
||||||
|
|
||||||
|
switch (cmd) { |
||||||
|
case NAND_CTL_SETNCE: |
||||||
|
case NAND_CTL_CLRNCE: |
||||||
|
break; |
||||||
|
case NAND_CTL_SETCLE: |
||||||
|
nand_baseaddr |= SET_CLE; |
||||||
|
break; |
||||||
|
case NAND_CTL_CLRCLE: |
||||||
|
nand_baseaddr &= CLR_CLE; |
||||||
|
break; |
||||||
|
case NAND_CTL_SETALE: |
||||||
|
nand_baseaddr |= SET_ALE; |
||||||
|
break; |
||||||
|
case NAND_CTL_CLRALE: |
||||||
|
nand_baseaddr |= CLR_ALE; |
||||||
|
break; |
||||||
|
case NAND_CTL_SETWP: |
||||||
|
fbcs->csmr2 |= CSMR_WP; |
||||||
|
break; |
||||||
|
case NAND_CTL_CLRWP: |
||||||
|
fbcs->csmr2 &= ~CSMR_WP; |
||||||
|
break; |
||||||
|
} |
||||||
|
this->IO_ADDR_W = (void __iomem *)(nand_baseaddr); |
||||||
|
} |
||||||
|
|
||||||
|
static void nand_write_byte(struct mtd_info *mtdinfo, u_char byte) |
||||||
|
{ |
||||||
|
struct nand_chip *this = mtdinfo->priv; |
||||||
|
*((volatile u8 *)(this->IO_ADDR_W)) = byte; |
||||||
|
} |
||||||
|
|
||||||
|
static u8 nand_read_byte(struct mtd_info *mtdinfo) |
||||||
|
{ |
||||||
|
struct nand_chip *this = mtdinfo->priv; |
||||||
|
return (u8) (*((volatile u8 *)this->IO_ADDR_R)); |
||||||
|
} |
||||||
|
|
||||||
|
static int nand_dev_ready(struct mtd_info *mtdinfo) |
||||||
|
{ |
||||||
|
return 1; |
||||||
|
} |
||||||
|
|
||||||
|
int board_nand_init(struct nand_chip *nand) |
||||||
|
{ |
||||||
|
volatile gpio_t *gpio = (gpio_t *) MMAP_GPIO; |
||||||
|
|
||||||
|
*((volatile u16 *)CFG_LATCH_ADDR) |= 0x0004; |
||||||
|
|
||||||
|
/* set up pin configuration */ |
||||||
|
gpio->par_timer &= ~GPIO_PAR_TIN3_TIN3; |
||||||
|
gpio->pddr_timer |= 0x08; |
||||||
|
gpio->ppd_timer |= 0x08; |
||||||
|
gpio->pclrr_timer = 0; |
||||||
|
gpio->podr_timer = 0; |
||||||
|
|
||||||
|
nand->chip_delay = 50; |
||||||
|
nand->eccmode = NAND_ECC_SOFT; |
||||||
|
nand->hwcontrol = nand_hwcontrol; |
||||||
|
nand->read_byte = nand_read_byte; |
||||||
|
nand->write_byte = nand_write_byte; |
||||||
|
nand->dev_ready = nand_dev_ready; |
||||||
|
|
||||||
|
return 0; |
||||||
|
} |
||||||
|
#endif |
||||||
|
|
@ -0,0 +1,138 @@ |
|||||||
|
#ifndef _PPC_ERRNO_H |
||||||
|
#define _PPC_ERRNO_H |
||||||
|
|
||||||
|
#define EPERM 1 /* Operation not permitted */ |
||||||
|
#define ENOENT 2 /* No such file or directory */ |
||||||
|
#define ESRCH 3 /* No such process */ |
||||||
|
#define EINTR 4 /* Interrupted system call */ |
||||||
|
#define EIO 5 /* I/O error */ |
||||||
|
#define ENXIO 6 /* No such device or address */ |
||||||
|
#define E2BIG 7 /* Arg list too long */ |
||||||
|
#define ENOEXEC 8 /* Exec format error */ |
||||||
|
#define EBADF 9 /* Bad file number */ |
||||||
|
#define ECHILD 10 /* No child processes */ |
||||||
|
#define EAGAIN 11 /* Try again */ |
||||||
|
#define ENOMEM 12 /* Out of memory */ |
||||||
|
#define EACCES 13 /* Permission denied */ |
||||||
|
#define EFAULT 14 /* Bad address */ |
||||||
|
#define ENOTBLK 15 /* Block device required */ |
||||||
|
#define EBUSY 16 /* Device or resource busy */ |
||||||
|
#define EEXIST 17 /* File exists */ |
||||||
|
#define EXDEV 18 /* Cross-device link */ |
||||||
|
#define ENODEV 19 /* No such device */ |
||||||
|
#define ENOTDIR 20 /* Not a directory */ |
||||||
|
#define EISDIR 21 /* Is a directory */ |
||||||
|
#define EINVAL 22 /* Invalid argument */ |
||||||
|
#define ENFILE 23 /* File table overflow */ |
||||||
|
#define EMFILE 24 /* Too many open files */ |
||||||
|
#define ENOTTY 25 /* Not a typewriter */ |
||||||
|
#define ETXTBSY 26 /* Text file busy */ |
||||||
|
#define EFBIG 27 /* File too large */ |
||||||
|
#define ENOSPC 28 /* No space left on device */ |
||||||
|
#define ESPIPE 29 /* Illegal seek */ |
||||||
|
#define EROFS 30 /* Read-only file system */ |
||||||
|
#define EMLINK 31 /* Too many links */ |
||||||
|
#define EPIPE 32 /* Broken pipe */ |
||||||
|
#define EDOM 33 /* Math argument out of domain of func */ |
||||||
|
#define ERANGE 34 /* Math result not representable */ |
||||||
|
#define EDEADLK 35 /* Resource deadlock would occur */ |
||||||
|
#define ENAMETOOLONG 36 /* File name too long */ |
||||||
|
#define ENOLCK 37 /* No record locks available */ |
||||||
|
#define ENOSYS 38 /* Function not implemented */ |
||||||
|
#define ENOTEMPTY 39 /* Directory not empty */ |
||||||
|
#define ELOOP 40 /* Too many symbolic links encountered */ |
||||||
|
#define EWOULDBLOCK EAGAIN /* Operation would block */ |
||||||
|
#define ENOMSG 42 /* No message of desired type */ |
||||||
|
#define EIDRM 43 /* Identifier removed */ |
||||||
|
#define ECHRNG 44 /* Channel number out of range */ |
||||||
|
#define EL2NSYNC 45 /* Level 2 not synchronized */ |
||||||
|
#define EL3HLT 46 /* Level 3 halted */ |
||||||
|
#define EL3RST 47 /* Level 3 reset */ |
||||||
|
#define ELNRNG 48 /* Link number out of range */ |
||||||
|
#define EUNATCH 49 /* Protocol driver not attached */ |
||||||
|
#define ENOCSI 50 /* No CSI structure available */ |
||||||
|
#define EL2HLT 51 /* Level 2 halted */ |
||||||
|
#define EBADE 52 /* Invalid exchange */ |
||||||
|
#define EBADR 53 /* Invalid request descriptor */ |
||||||
|
#define EXFULL 54 /* Exchange full */ |
||||||
|
#define ENOANO 55 /* No anode */ |
||||||
|
#define EBADRQC 56 /* Invalid request code */ |
||||||
|
#define EBADSLT 57 /* Invalid slot */ |
||||||
|
#define EDEADLOCK 58 /* File locking deadlock error */ |
||||||
|
#define EBFONT 59 /* Bad font file format */ |
||||||
|
#define ENOSTR 60 /* Device not a stream */ |
||||||
|
#define ENODATA 61 /* No data available */ |
||||||
|
#define ETIME 62 /* Timer expired */ |
||||||
|
#define ENOSR 63 /* Out of streams resources */ |
||||||
|
#define ENONET 64 /* Machine is not on the network */ |
||||||
|
#define ENOPKG 65 /* Package not installed */ |
||||||
|
#define EREMOTE 66 /* Object is remote */ |
||||||
|
#define ENOLINK 67 /* Link has been severed */ |
||||||
|
#define EADV 68 /* Advertise error */ |
||||||
|
#define ESRMNT 69 /* Srmount error */ |
||||||
|
#define ECOMM 70 /* Communication error on send */ |
||||||
|
#define EPROTO 71 /* Protocol error */ |
||||||
|
#define EMULTIHOP 72 /* Multihop attempted */ |
||||||
|
#define EDOTDOT 73 /* RFS specific error */ |
||||||
|
#define EBADMSG 74 /* Not a data message */ |
||||||
|
#define EOVERFLOW 75 /* Value too large for defined data type */ |
||||||
|
#define ENOTUNIQ 76 /* Name not unique on network */ |
||||||
|
#define EBADFD 77 /* File descriptor in bad state */ |
||||||
|
#define EREMCHG 78 /* Remote address changed */ |
||||||
|
#define ELIBACC 79 /* Can not access a needed shared library */ |
||||||
|
#define ELIBBAD 80 /* Accessing a corrupted shared library */ |
||||||
|
#define ELIBSCN 81 /* .lib section in a.out corrupted */ |
||||||
|
#define ELIBMAX 82 /* Attempting to link in too many shared libraries */ |
||||||
|
#define ELIBEXEC 83 /* Cannot exec a shared library directly */ |
||||||
|
#define EILSEQ 84 /* Illegal byte sequence */ |
||||||
|
#define ERESTART 85 /* Interrupted system call should be restarted */ |
||||||
|
#define ESTRPIPE 86 /* Streams pipe error */ |
||||||
|
#define EUSERS 87 /* Too many users */ |
||||||
|
#define ENOTSOCK 88 /* Socket operation on non-socket */ |
||||||
|
#define EDESTADDRREQ 89 /* Destination address required */ |
||||||
|
#define EMSGSIZE 90 /* Message too long */ |
||||||
|
#define EPROTOTYPE 91 /* Protocol wrong type for socket */ |
||||||
|
#define ENOPROTOOPT 92 /* Protocol not available */ |
||||||
|
#define EPROTONOSUPPORT 93 /* Protocol not supported */ |
||||||
|
#define ESOCKTNOSUPPORT 94 /* Socket type not supported */ |
||||||
|
#define EOPNOTSUPP 95 /* Operation not supported on transport endpoint */ |
||||||
|
#define EPFNOSUPPORT 96 /* Protocol family not supported */ |
||||||
|
#define EAFNOSUPPORT 97 /* Address family not supported by protocol */ |
||||||
|
#define EADDRINUSE 98 /* Address already in use */ |
||||||
|
#define EADDRNOTAVAIL 99 /* Cannot assign requested address */ |
||||||
|
#define ENETDOWN 100 /* Network is down */ |
||||||
|
#define ENETUNREACH 101 /* Network is unreachable */ |
||||||
|
#define ENETRESET 102 /* Network dropped connection because of reset */ |
||||||
|
#define ECONNABORTED 103 /* Software caused connection abort */ |
||||||
|
#define ECONNRESET 104 /* Connection reset by peer */ |
||||||
|
#define ENOBUFS 105 /* No buffer space available */ |
||||||
|
#define EISCONN 106 /* Transport endpoint is already connected */ |
||||||
|
#define ENOTCONN 107 /* Transport endpoint is not connected */ |
||||||
|
#define ESHUTDOWN 108 /* Cannot send after transport endpoint shutdown */ |
||||||
|
#define ETOOMANYREFS 109 /* Too many references: cannot splice */ |
||||||
|
#define ETIMEDOUT 110 /* Connection timed out */ |
||||||
|
#define ECONNREFUSED 111 /* Connection refused */ |
||||||
|
#define EHOSTDOWN 112 /* Host is down */ |
||||||
|
#define EHOSTUNREACH 113 /* No route to host */ |
||||||
|
#define EALREADY 114 /* Operation already in progress */ |
||||||
|
#define EINPROGRESS 115 /* Operation now in progress */ |
||||||
|
#define ESTALE 116 /* Stale NFS file handle */ |
||||||
|
#define EUCLEAN 117 /* Structure needs cleaning */ |
||||||
|
#define ENOTNAM 118 /* Not a XENIX named type file */ |
||||||
|
#define ENAVAIL 119 /* No XENIX semaphores available */ |
||||||
|
#define EISNAM 120 /* Is a named type file */ |
||||||
|
#define EREMOTEIO 121 /* Remote I/O error */ |
||||||
|
#define EDQUOT 122 /* Quota exceeded */ |
||||||
|
|
||||||
|
#define ENOMEDIUM 123 /* No medium found */ |
||||||
|
#define EMEDIUMTYPE 124 /* Wrong medium type */ |
||||||
|
|
||||||
|
/* Should never be seen by user programs */ |
||||||
|
#define ERESTARTSYS 512 |
||||||
|
#define ERESTARTNOINTR 513 |
||||||
|
#define ERESTARTNOHAND 514 /* restart if no handler.. */ |
||||||
|
#define ENOIOCTLCMD 515 /* No ioctl command */ |
||||||
|
|
||||||
|
#define _LAST_ERRNO 515 |
||||||
|
|
||||||
|
#endif |
Loading…
Reference in new issue