public inbox for linux-mtd@lists.infradead.org
 help / color / mirror / Atom feed
* patch for 64 bit wide flash
@ 2001-12-18 23:27 Adam Wozniak
  2001-12-21  9:14 ` David Woodhouse
  2002-02-14 12:32 ` Jörn Engel
  0 siblings, 2 replies; 12+ messages in thread
From: Adam Wozniak @ 2001-12-18 23:27 UTC (permalink / raw)
  To: linux-mtd, Dave

[-- Attachment #1: Type: text/plain, Size: 490 bytes --]

I've got a 64 bit wide flash consisting of eight 8bit wide chips.
Here's a patch against the 2.4.16 kernel

I think I've added enough code to support all 64 bit wide
configurations,
but somebody whould probably check me on it.

-- 
Adam Wozniak (KG6GZR)   COM DEV Wireless - Digital and Software Systems
awozniak@comdev.cc      3450 Broad St. 107, San Luis Obispo, CA 93401
                        http://www.comdev.cc
                        Voice: (805) 544-1089       Fax: (805) 544-2055

[-- Attachment #2: mtd_delta --]
[-- Type: text/plain, Size: 37712 bytes --]

diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/autoconf.h linux/include/linux/autoconf.h
--- linux-original/include/linux/autoconf.h	Wed Dec 31 16:00:00 1969
+++ linux/include/linux/autoconf.h	Tue Dec 18 14:06:08 2001
@@ -0,0 +1,592 @@
+/*
+ * Automatically generated by make menuconfig: don't edit
+ */
+#define AUTOCONF_INCLUDED
+#undef  CONFIG_UID16
+#undef  CONFIG_RWSEM_GENERIC_SPINLOCK
+#define CONFIG_RWSEM_XCHGADD_ALGORITHM 1
+#define CONFIG_HAVE_DEC_LOCK 1
+
+/*
+ * Code maturity level options
+ */
+#define CONFIG_EXPERIMENTAL 1
+
+/*
+ * Loadable module support
+ */
+#undef  CONFIG_MODULES
+
+/*
+ * Platform support
+ */
+#define CONFIG_PPC 1
+#define CONFIG_PPC32 1
+#define CONFIG_6xx 1
+#undef  CONFIG_4xx
+#undef  CONFIG_POWER3
+#undef  CONFIG_POWER4
+#undef  CONFIG_8xx
+#define CONFIG_8260 1
+#define CONFIG_PPC_STD_MMU 1
+#define CONFIG_SERIAL_CONSOLE 1
+#undef  CONFIG_EST8260
+#define CONFIG_SERIAL_CONSOLE 1
+#define CONFIG_COMDEV 1
+#undef  CONFIG_SMP
+
+/*
+ * General setup
+ */
+#undef  CONFIG_HIGHMEM
+#undef  CONFIG_ISA
+#undef  CONFIG_EISA
+#undef  CONFIG_SBUS
+#undef  CONFIG_MCA
+#undef  CONFIG_PCI
+#define CONFIG_NET 1
+#define CONFIG_SYSCTL 1
+#define CONFIG_SYSVIPC 1
+#undef  CONFIG_BSD_PROCESS_ACCT
+#define CONFIG_KCORE_ELF 1
+#define CONFIG_BINFMT_ELF 1
+#define CONFIG_KERNEL_ELF 1
+#undef  CONFIG_BINFMT_MISC
+#undef  CONFIG_HOTPLUG
+#undef  CONFIG_PCMCIA
+
+/*
+ * Parallel port support
+ */
+#undef  CONFIG_PARPORT
+#undef  CONFIG_PPC_RTC
+#define CONFIG_CMDLINE_BOOL 1
+#define CONFIG_CMDLINE "console=ttyS0,9600 console=tty0 root=/dev/sda2"
+
+/*
+ * Memory Technology Devices (MTD)
+ */
+#define CONFIG_MTD 1
+#undef  CONFIG_MTD_DEBUG
+#define CONFIG_MTD_PARTITIONS 1
+#undef  CONFIG_MTD_REDBOOT_PARTS
+#undef  CONFIG_MTD_CHAR
+#define CONFIG_MTD_BLOCK 1
+#undef  CONFIG_FTL
+#undef  CONFIG_NFTL
+
+/*
+ * RAM/ROM/Flash chip drivers
+ */
+#define CONFIG_MTD_CFI 1
+#undef  CONFIG_MTD_JEDECPROBE
+#define CONFIG_MTD_GEN_PROBE 1
+#undef  CONFIG_MTD_CFI_ADV_OPTIONS
+#define CONFIG_MTD_CFI_INTELEXT 1
+#undef  CONFIG_MTD_CFI_AMDSTD
+#undef  CONFIG_MTD_RAM
+#undef  CONFIG_MTD_ROM
+#undef  CONFIG_MTD_ABSENT
+#undef  CONFIG_MTD_OBSOLETE_CHIPS
+#undef  CONFIG_MTD_AMDSTD
+#undef  CONFIG_MTD_SHARP
+#undef  CONFIG_MTD_JEDEC
+
+/*
+ * Mapping drivers for chip access
+ */
+#define CONFIG_MTD_PHYSMAP 1
+#define CONFIG_MTD_PHYSMAP_START 0xF8000000
+#define CONFIG_MTD_PHYSMAP_LEN 0x8000000
+#define CONFIG_MTD_PHYSMAP_BUSWIDTH (8)
+#undef  CONFIG_MTD_TQM8XXL
+#undef  CONFIG_MTD_RPXLITE
+#undef  CONFIG_MTD_DBOX2
+#undef  CONFIG_MTD_CFI_FLAGADM
+
+/*
+ * Self-contained MTD device drivers
+ */
+#undef  CONFIG_MTD_PMC551
+#undef  CONFIG_MTD_SLRAM
+#undef  CONFIG_MTD_MTDRAM
+#undef  CONFIG_MTD_BLKMTD
+#undef  CONFIG_MTD_DOC1000
+#undef  CONFIG_MTD_DOC2000
+#undef  CONFIG_MTD_DOC2001
+#undef  CONFIG_MTD_DOCPROBE
+
+/*
+ * NAND Flash Device Drivers
+ */
+#undef  CONFIG_MTD_NAND
+
+/*
+ * Plug and Play configuration
+ */
+#undef  CONFIG_PNP
+#undef  CONFIG_ISAPNP
+
+/*
+ * Block devices
+ */
+#undef  CONFIG_BLK_DEV_FD
+#undef  CONFIG_BLK_DEV_XD
+#undef  CONFIG_PARIDE
+#undef  CONFIG_BLK_CPQ_DA
+#undef  CONFIG_BLK_CPQ_CISS_DA
+#undef  CONFIG_BLK_DEV_DAC960
+#define CONFIG_BLK_DEV_LOOP 1
+#undef  CONFIG_BLK_DEV_NBD
+#define CONFIG_BLK_DEV_RAM 1
+#define CONFIG_BLK_DEV_RAM_SIZE (10240)
+#define CONFIG_BLK_DEV_INITRD 1
+
+/*
+ * Multi-device support (RAID and LVM)
+ */
+#undef  CONFIG_MD
+#undef  CONFIG_BLK_DEV_MD
+#undef  CONFIG_MD_LINEAR
+#undef  CONFIG_MD_RAID0
+#undef  CONFIG_MD_RAID1
+#undef  CONFIG_MD_RAID5
+#undef  CONFIG_MD_MULTIPATH
+#undef  CONFIG_BLK_DEV_LVM
+
+/*
+ * Networking options
+ */
+#define CONFIG_PACKET 1
+#undef  CONFIG_PACKET_MMAP
+#define CONFIG_NETLINK 1
+#define CONFIG_RTNETLINK 1
+#undef  CONFIG_NETLINK_DEV
+#define CONFIG_NETFILTER 1
+#undef  CONFIG_NETFILTER_DEBUG
+#define CONFIG_FILTER 1
+#define CONFIG_UNIX 1
+#define CONFIG_INET 1
+#define CONFIG_IP_MULTICAST 1
+#undef  CONFIG_IP_ADVANCED_ROUTER
+#define CONFIG_IP_PNP 1
+#undef  CONFIG_IP_PNP_DHCP
+#undef  CONFIG_IP_PNP_BOOTP
+#undef  CONFIG_IP_PNP_RARP
+#undef  CONFIG_NET_IPIP
+#undef  CONFIG_NET_IPGRE
+#define CONFIG_IP_MROUTE 1
+#undef  CONFIG_IP_PIMSM_V1
+#undef  CONFIG_IP_PIMSM_V2
+#undef  CONFIG_ARPD
+#undef  CONFIG_INET_ECN
+#define CONFIG_SYN_COOKIES 1
+
+/*
+ *   IP: Netfilter Configuration
+ */
+#define CONFIG_IP_NF_CONNTRACK 1
+#define CONFIG_IP_NF_FTP 1
+#define CONFIG_IP_NF_IRC 1
+#undef  CONFIG_IP_NF_QUEUE
+#define CONFIG_IP_NF_IPTABLES 1
+#undef  CONFIG_IP_NF_MATCH_LIMIT
+#define CONFIG_IP_NF_MATCH_MAC 1
+#undef  CONFIG_IP_NF_MATCH_MARK
+#define CONFIG_IP_NF_MATCH_MULTIPORT 1
+#undef  CONFIG_IP_NF_MATCH_TOS
+#define CONFIG_IP_NF_MATCH_LENGTH 1
+#define CONFIG_IP_NF_MATCH_TTL 1
+#undef  CONFIG_IP_NF_MATCH_TCPMSS
+#define CONFIG_IP_NF_MATCH_STATE 1
+#undef  CONFIG_IP_NF_MATCH_UNCLEAN
+#undef  CONFIG_IP_NF_MATCH_OWNER
+#define CONFIG_IP_NF_FILTER 1
+#define CONFIG_IP_NF_TARGET_REJECT 1
+#undef  CONFIG_IP_NF_TARGET_MIRROR
+#define CONFIG_IP_NF_NAT 1
+#define CONFIG_IP_NF_NAT_NEEDED 1
+#define CONFIG_IP_NF_TARGET_MASQUERADE 1
+#define CONFIG_IP_NF_TARGET_REDIRECT 1
+#define CONFIG_IP_NF_NAT_SNMP_BASIC 1
+#define CONFIG_IP_NF_NAT_IRC 1
+#define CONFIG_IP_NF_NAT_FTP 1
+#undef  CONFIG_IP_NF_MANGLE
+#undef  CONFIG_IP_NF_TARGET_LOG
+#undef  CONFIG_IP_NF_TARGET_TCPMSS
+#undef  CONFIG_IPV6
+#undef  CONFIG_KHTTPD
+#undef  CONFIG_ATM
+#undef  CONFIG_VLAN_8021Q
+#undef  CONFIG_IPX
+#undef  CONFIG_ATALK
+#undef  CONFIG_DECNET
+#undef  CONFIG_BRIDGE
+#undef  CONFIG_X25
+#undef  CONFIG_LAPB
+#undef  CONFIG_LLC
+#undef  CONFIG_NET_DIVERT
+#undef  CONFIG_ECONET
+#undef  CONFIG_WAN_ROUTER
+#undef  CONFIG_NET_FASTROUTE
+#undef  CONFIG_NET_HW_FLOWCONTROL
+
+/*
+ * QoS and/or fair queueing
+ */
+#undef  CONFIG_NET_SCHED
+
+/*
+ * ATA/IDE/MFM/RLL support
+ */
+#undef  CONFIG_IDE
+#undef  CONFIG_BLK_DEV_IDE_MODES
+#undef  CONFIG_BLK_DEV_HD
+
+/*
+ * SCSI support
+ */
+#undef  CONFIG_SCSI
+
+/*
+ * Network device support
+ */
+#define CONFIG_NETDEVICES 1
+
+/*
+ * ARCnet devices
+ */
+#undef  CONFIG_ARCNET
+#undef  CONFIG_DUMMY
+#undef  CONFIG_BONDING
+#undef  CONFIG_EQUALIZER
+#undef  CONFIG_TUN
+#undef  CONFIG_ETHERTAP
+
+/*
+ * Ethernet (10 or 100Mbit)
+ */
+#define CONFIG_NET_ETHERNET 1
+#undef  CONFIG_MACE
+#undef  CONFIG_BMAC
+#undef  CONFIG_GMAC
+#undef  CONFIG_OAKNET
+#undef  CONFIG_SUNLANCE
+#undef  CONFIG_SUNBMAC
+#undef  CONFIG_SUNQE
+#undef  CONFIG_SUNLANCE
+#undef  CONFIG_SUNGEM
+#undef  CONFIG_NET_VENDOR_3COM
+#undef  CONFIG_LANCE
+#undef  CONFIG_NET_VENDOR_SMC
+#undef  CONFIG_NET_VENDOR_RACAL
+#undef  CONFIG_NET_ISA
+#undef  CONFIG_NET_PCI
+#undef  CONFIG_NET_POCKET
+
+/*
+ * Ethernet (1000 Mbit)
+ */
+#undef  CONFIG_ACENIC
+#undef  CONFIG_DL2K
+#undef  CONFIG_MYRI_SBUS
+#undef  CONFIG_NS83820
+#undef  CONFIG_HAMACHI
+#undef  CONFIG_YELLOWFIN
+#undef  CONFIG_SK98LIN
+#undef  CONFIG_FDDI
+#undef  CONFIG_HIPPI
+#undef  CONFIG_PLIP
+#undef  CONFIG_PPP
+#undef  CONFIG_SLIP
+
+/*
+ * Wireless LAN (non-hamradio)
+ */
+#undef  CONFIG_NET_RADIO
+
+/*
+ * Token Ring devices
+ */
+#undef  CONFIG_TR
+#undef  CONFIG_NET_FC
+#undef  CONFIG_RCPCI
+#undef  CONFIG_SHAPER
+
+/*
+ * Wan interfaces
+ */
+#undef  CONFIG_WAN
+
+/*
+ * Amateur Radio support
+ */
+#undef  CONFIG_HAMRADIO
+
+/*
+ * IrDA (infrared) support
+ */
+#undef  CONFIG_IRDA
+
+/*
+ * ISDN subsystem
+ */
+#undef  CONFIG_ISDN
+
+/*
+ * Old CD-ROM drivers (not SCSI, not IDE)
+ */
+#undef  CONFIG_CD_NO_IDESCSI
+
+/*
+ * Console drivers
+ */
+#undef  CONFIG_VGA_CONSOLE
+
+/*
+ * Frame-buffer support
+ */
+#undef  CONFIG_FB
+
+/*
+ * Input core support
+ */
+#undef  CONFIG_INPUT
+#undef  CONFIG_INPUT_KEYBDEV
+#undef  CONFIG_INPUT_MOUSEDEV
+#undef  CONFIG_INPUT_JOYDEV
+#undef  CONFIG_INPUT_EVDEV
+
+/*
+ * Macintosh device drivers
+ */
+
+/*
+ * Character devices
+ */
+#undef  CONFIG_VT
+#undef  CONFIG_SERIAL
+#undef  CONFIG_SERIAL_EXTENDED
+#undef  CONFIG_SERIAL_NONSTANDARD
+#undef  CONFIG_UNIX98_PTYS
+
+/*
+ * I2C support
+ */
+#undef  CONFIG_I2C
+
+/*
+ * Mice
+ */
+#undef  CONFIG_BUSMOUSE
+#undef  CONFIG_MOUSE
+
+/*
+ * Joysticks
+ */
+#undef  CONFIG_INPUT_GAMEPORT
+#undef  CONFIG_QIC02_TAPE
+
+/*
+ * Watchdog Cards
+ */
+#undef  CONFIG_WATCHDOG
+#undef  CONFIG_INTEL_RNG
+#undef  CONFIG_NVRAM
+#undef  CONFIG_RTC
+#undef  CONFIG_DTLK
+#undef  CONFIG_R3964
+#undef  CONFIG_APPLICOM
+
+/*
+ * Ftape, the floppy tape device driver
+ */
+#undef  CONFIG_FTAPE
+#undef  CONFIG_AGP
+#undef  CONFIG_DRM
+
+/*
+ * Multimedia devices
+ */
+#undef  CONFIG_VIDEO_DEV
+
+/*
+ * File systems
+ */
+#undef  CONFIG_QUOTA
+#undef  CONFIG_AUTOFS_FS
+#undef  CONFIG_AUTOFS4_FS
+#undef  CONFIG_REISERFS_FS
+#undef  CONFIG_REISERFS_CHECK
+#undef  CONFIG_REISERFS_PROC_INFO
+#undef  CONFIG_ADFS_FS
+#undef  CONFIG_ADFS_FS_RW
+#undef  CONFIG_AFFS_FS
+#undef  CONFIG_HFS_FS
+#undef  CONFIG_BFS_FS
+#undef  CONFIG_EXT3_FS
+#undef  CONFIG_JBD
+#undef  CONFIG_JBD_DEBUG
+#undef  CONFIG_FAT_FS
+#undef  CONFIG_MSDOS_FS
+#undef  CONFIG_UMSDOS_FS
+#undef  CONFIG_VFAT_FS
+#undef  CONFIG_EFS_FS
+#define CONFIG_JFFS_FS 1
+#define CONFIG_JFFS_FS_VERBOSE (0)
+#undef  CONFIG_JFFS_PROC_FS
+#define CONFIG_JFFS2_FS 1
+#define CONFIG_JFFS2_FS_DEBUG (0)
+#undef  CONFIG_CRAMFS
+#undef  CONFIG_TMPFS
+#undef  CONFIG_RAMFS
+#undef  CONFIG_ISO9660_FS
+#undef  CONFIG_JOLIET
+#undef  CONFIG_ZISOFS
+#define CONFIG_MINIX_FS 1
+#undef  CONFIG_VXFS_FS
+#undef  CONFIG_NTFS_FS
+#undef  CONFIG_NTFS_RW
+#undef  CONFIG_HPFS_FS
+#define CONFIG_PROC_FS 1
+#undef  CONFIG_DEVFS_FS
+#undef  CONFIG_DEVFS_MOUNT
+#undef  CONFIG_DEVFS_DEBUG
+#undef  CONFIG_DEVPTS_FS
+#undef  CONFIG_QNX4FS_FS
+#undef  CONFIG_QNX4FS_RW
+#undef  CONFIG_ROMFS_FS
+#define CONFIG_EXT2_FS 1
+#undef  CONFIG_SYSV_FS
+#undef  CONFIG_UDF_FS
+#undef  CONFIG_UDF_RW
+#undef  CONFIG_UFS_FS
+#undef  CONFIG_UFS_FS_WRITE
+
+/*
+ * Network File Systems
+ */
+#undef  CONFIG_CODA_FS
+#undef  CONFIG_INTERMEZZO_FS
+#define CONFIG_NFS_FS 1
+#undef  CONFIG_NFS_V3
+#define CONFIG_ROOT_NFS 1
+#undef  CONFIG_NFSD
+#undef  CONFIG_NFSD_V3
+#define CONFIG_SUNRPC 1
+#define CONFIG_LOCKD 1
+#undef  CONFIG_SMB_FS
+#undef  CONFIG_NCP_FS
+#undef  CONFIG_NCPFS_PACKET_SIGNING
+#undef  CONFIG_NCPFS_IOCTL_LOCKING
+#undef  CONFIG_NCPFS_STRONG
+#undef  CONFIG_NCPFS_NFS_NS
+#undef  CONFIG_NCPFS_OS2_NS
+#undef  CONFIG_NCPFS_SMALLDOS
+#undef  CONFIG_NCPFS_NLS
+#undef  CONFIG_NCPFS_EXTRAS
+#undef  CONFIG_ZISOFS_FS
+#undef  CONFIG_ZLIB_FS_INFLATE
+
+/*
+ * Partition Types
+ */
+#undef  CONFIG_PARTITION_ADVANCED
+#define CONFIG_MSDOS_PARTITION 1
+#undef  CONFIG_SMB_NLS
+#undef  CONFIG_NLS
+
+/*
+ * Sound
+ */
+#undef  CONFIG_SOUND
+
+/*
+ * MPC8260 Communication Options
+ */
+#undef  CONFIG_SCC_ENET
+#define CONFIG_FEC_ENET 1
+#undef  CONFIG_FCC1_ENET
+#undef  CONFIG_FCC2_ENET
+#define CONFIG_FCC3_ENET 1
+
+/*
+ * MPC8260 serial options
+ */
+#define CONFIG_SMC2_UART 1
+#undef  CONFIG_ALTSMC2
+#define CONFIG_CONS_SMC2 1
+
+/*
+ * USB support
+ */
+#undef  CONFIG_USB
+#undef  CONFIG_USB_UHCI
+#undef  CONFIG_USB_UHCI_ALT
+#undef  CONFIG_USB_OHCI
+#undef  CONFIG_USB_AUDIO
+#undef  CONFIG_USB_BLUETOOTH
+#undef  CONFIG_USB_STORAGE
+#undef  CONFIG_USB_STORAGE_DEBUG
+#undef  CONFIG_USB_STORAGE_DATAFAB
+#undef  CONFIG_USB_STORAGE_FREECOM
+#undef  CONFIG_USB_STORAGE_ISD200
+#undef  CONFIG_USB_STORAGE_DPCM
+#undef  CONFIG_USB_STORAGE_HP8200e
+#undef  CONFIG_USB_STORAGE_SDDR09
+#undef  CONFIG_USB_STORAGE_JUMPSHOT
+#undef  CONFIG_USB_ACM
+#undef  CONFIG_USB_PRINTER
+#undef  CONFIG_USB_DC2XX
+#undef  CONFIG_USB_MDC800
+#undef  CONFIG_USB_SCANNER
+#undef  CONFIG_USB_MICROTEK
+#undef  CONFIG_USB_HPUSBSCSI
+#undef  CONFIG_USB_PEGASUS
+#undef  CONFIG_USB_KAWETH
+#undef  CONFIG_USB_CATC
+#undef  CONFIG_USB_CDCETHER
+#undef  CONFIG_USB_USBNET
+#undef  CONFIG_USB_USS720
+
+/*
+ * USB Serial Converter support
+ */
+#undef  CONFIG_USB_SERIAL
+#undef  CONFIG_USB_SERIAL_GENERIC
+#undef  CONFIG_USB_SERIAL_BELKIN
+#undef  CONFIG_USB_SERIAL_WHITEHEAT
+#undef  CONFIG_USB_SERIAL_DIGI_ACCELEPORT
+#undef  CONFIG_USB_SERIAL_EMPEG
+#undef  CONFIG_USB_SERIAL_FTDI_SIO
+#undef  CONFIG_USB_SERIAL_VISOR
+#undef  CONFIG_USB_SERIAL_IR
+#undef  CONFIG_USB_SERIAL_EDGEPORT
+#undef  CONFIG_USB_SERIAL_KEYSPAN_PDA
+#undef  CONFIG_USB_SERIAL_KEYSPAN
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA28
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA28X
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA28XA
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA28XB
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA19
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA18X
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA19W
+#undef  CONFIG_USB_SERIAL_KEYSPAN_USA49W
+#undef  CONFIG_USB_SERIAL_MCT_U232
+#undef  CONFIG_USB_SERIAL_PL2303
+#undef  CONFIG_USB_SERIAL_CYBERJACK
+#undef  CONFIG_USB_SERIAL_XIRCOM
+#undef  CONFIG_USB_SERIAL_OMNINET
+#undef  CONFIG_USB_RIO500
+
+/*
+ * Bluetooth support
+ */
+#undef  CONFIG_BLUEZ
+
+/*
+ * Kernel hacking
+ */
+#undef  CONFIG_MAGIC_SYSRQ
+#undef  CONFIG_KGDB
+#undef  CONFIG_XMON
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/compile.h linux/include/linux/compile.h
--- linux-original/include/linux/compile.h	Wed Dec 31 16:00:00 1969
+++ linux/include/linux/compile.h	Tue Dec 18 14:25:33 2001
@@ -0,0 +1,6 @@
+#define UTS_VERSION "#92 Tue Dec 18 14:25:33 PST 2001"
+#define LINUX_COMPILE_TIME "14:25:33"
+#define LINUX_COMPILE_BY "awozniak"
+#define LINUX_COMPILE_HOST "rangers.comdev.cc"
+#define LINUX_COMPILE_DOMAIN "comdev.cc"
+#define LINUX_COMPILER "gcc version 2.95.3 20010315 (release)"
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/mtd/cfi.h linux/include/linux/mtd/cfi.h
--- linux-original/include/linux/mtd/cfi.h	Thu Oct  4 15:13:18 2001
+++ linux/include/linux/mtd/cfi.h	Tue Dec 18 14:07:50 2001
@@ -28,10 +28,12 @@
 #define CFIDEV_INTERLEAVE_1 (1)
 #define CFIDEV_INTERLEAVE_2 (2)
 #define CFIDEV_INTERLEAVE_4 (4)
+#define CFIDEV_INTERLEAVE_8 (8)
 
 #define CFIDEV_BUSWIDTH_1 (1)
 #define CFIDEV_BUSWIDTH_2 (2)
 #define CFIDEV_BUSWIDTH_4 (4)
+#define CFIDEV_BUSWIDTH_8 (8)
 
 #else
 
@@ -44,6 +46,9 @@
 #ifdef CONFIG_MTD_CFI_I4
 #define CFIDEV_INTERLEAVE_4 (4)
 #endif
+#ifdef CONFIG_MTD_CFI_I8
+#define CFIDEV_INTERLEAVE_8 (8)
+#endif
 
 #ifdef CONFIG_MTD_CFI_B1
 #define CFIDEV_BUSWIDTH_1 (1)
@@ -54,6 +59,9 @@
 #ifdef CONFIG_MTD_CFI_B4
 #define CFIDEV_BUSWIDTH_4 (4)
 #endif
+#ifdef CONFIG_MTD_CFI_B8
+#define CFIDEV_BUSWIDTH_8 (8)
+#endif
 
 #endif
 
@@ -61,7 +69,7 @@
  * The following macros are used to select the code to execute:
  *   cfi_buswidth_is_*()
  *   cfi_interleave_is_*()
- *   [where * is either 1, 2 or 4]
+ *   [where * is either 1, 2, 4, or 8]
  * Those macros should be used with 'if' statements.  If only one of few
  * geometry arrangements are selected, they expand to constants thus allowing
  * the compiler (most of them being 0) to optimize away all the unneeded code,
@@ -105,6 +113,18 @@
 # define cfi_interleave_is_4() (0)
 #endif
 
+#ifdef CFIDEV_INTERLEAVE_8
+# ifdef CFIDEV_INTERLEAVE
+#  undef CFIDEV_INTERLEAVE
+#  define CFIDEV_INTERLEAVE (cfi->interleave)
+# else
+#  define CFIDEV_INTERLEAVE CFIDEV_INTERLEAVE_8
+# endif
+# define cfi_interleave_is_8() (CFIDEV_INTERLEAVE == CFIDEV_INTERLEAVE_8)
+#else
+# define cfi_interleave_is_8() (0)
+#endif
+
 #ifndef CFIDEV_INTERLEAVE
 #error You must define at least one interleave to support!
 #endif
@@ -145,6 +165,18 @@
 # define cfi_buswidth_is_4() (0)
 #endif
 
+#ifdef CFIDEV_BUSWIDTH_8
+# ifdef CFIDEV_BUSWIDTH
+#  undef CFIDEV_BUSWIDTH
+#  define CFIDEV_BUSWIDTH (map->buswidth)
+# else
+#  define CFIDEV_BUSWIDTH CFIDEV_BUSWIDTH_8
+# endif
+# define cfi_buswidth_is_8() (CFIDEV_BUSWIDTH == CFIDEV_BUSWIDTH_8)
+#else
+# define cfi_buswidth_is_8() (0)
+#endif
+
 #ifndef CFIDEV_BUSWIDTH
 #error You must define at least one bus width to support!
 #endif
@@ -156,6 +188,7 @@
 #define CFI_DEVICETYPE_X8  (8 / 8)
 #define CFI_DEVICETYPE_X16 (16 / 8)
 #define CFI_DEVICETYPE_X32 (32 / 8)
+#define CFI_DEVICETYPE_X64 (64 / 8)
 
 /* NB: We keep these structures in memory in HOST byteorder, except
  * where individually noted.
@@ -264,9 +297,9 @@
 /*
  * Transforms the CFI command for the given geometry (bus width & interleave.
  */
-static inline __u32 cfi_build_cmd(u_char cmd, struct map_info *map, struct cfi_private *cfi)
+static inline __u64 cfi_build_cmd(u_char cmd, struct map_info *map, struct cfi_private *cfi)
 {
-	__u32 val = 0;
+	__u64 val = 0;
 
 	if (cfi_buswidth_is_1()) {
 		/* 1 x8 device */
@@ -291,6 +324,25 @@
 			val = (cmd << 16) | cmd;
 			val = cpu_to_cfi32((val << 8) | val);
 		}
+	} else if (cfi_buswidth_is_8()) {
+		if (cfi_interleave_is_1()) {
+			/* 1 x64 device in x64 mode */
+			val = cpu_to_cfi64(cmd);
+		} else if (cfi_interleave_is_2()) {
+			/* 2 x32 device in x32 mode */
+                        val = cmd;
+			val = cpu_to_cfi64((val << 32) | val);
+		} else if (cfi_interleave_is_4()) {
+			/* 4 (x16, x32 or x64) devices in x16 mode */
+			val = (cmd << 16) | cmd;
+			val = cpu_to_cfi64((val << 32) | val);
+		} else if (cfi_interleave_is_8()) {
+			/* 8 (x8, x16 or x32) devices in x8 mode */
+			val = (cmd << 8) | cmd;
+			val = (val << 16) | val;
+			val = (val << 32) | val;
+			val = cpu_to_cfi64(val);
+		}
 	}
 	return val;
 }
@@ -300,7 +352,7 @@
  * Read a value according to the bus width.
  */
 
-static inline __u32 cfi_read(struct map_info *map, __u32 addr)
+static inline __u64 cfi_read(struct map_info *map, __u32 addr)
 {
 	if (cfi_buswidth_is_1()) {
 		return map->read8(map, addr);
@@ -308,6 +360,8 @@
 		return map->read16(map, addr);
 	} else if (cfi_buswidth_is_4()) {
 		return map->read32(map, addr);
+	} else if (cfi_buswidth_is_8()) {
+		return map->read64(map, addr);
 	} else {
 		return 0;
 	}
@@ -317,7 +371,7 @@
  * Write a value according to the bus width.
  */
 
-static inline void cfi_write(struct map_info *map, __u32 val, __u32 addr)
+static inline void cfi_write(struct map_info *map, __u64 val, __u32 addr)
 {
 	if (cfi_buswidth_is_1()) {
 		map->write8(map, val, addr);
@@ -325,6 +379,8 @@
 		map->write16(map, val, addr);
 	} else if (cfi_buswidth_is_4()) {
 		map->write32(map, val, addr);
+	} else if (cfi_buswidth_is_8()) {
+		map->write64(map, val, addr);
 	}
 }
 
@@ -337,9 +393,9 @@
  */
 static inline __u32 cfi_send_gen_cmd(u_char cmd, __u32 cmd_addr, __u32 base,
 				struct map_info *map, struct cfi_private *cfi,
-				int type, __u32 *prev_val)
+				int type, __u64 *prev_val)
 {
-	__u32 val;
+	__u64 val;
 	__u32 addr = base + cfi_build_cmd_addr(cmd_addr, CFIDEV_INTERLEAVE, type);
 
 	val = cfi_build_cmd(cmd, map, cfi);
@@ -360,6 +416,8 @@
 		return cfi16_to_cpu(map->read16(map, addr));
 	} else if (cfi_buswidth_is_4()) {
 		return cfi32_to_cpu(map->read32(map, addr));
+	} else if (cfi_buswidth_is_8()) {
+		return cfi64_to_cpu(map->read64(map, addr));
 	} else {
 		return 0;
 	}
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/mtd/cfi_endian.h linux/include/linux/mtd/cfi_endian.h
--- linux-original/include/linux/mtd/cfi_endian.h	Thu Oct  4 15:13:18 2001
+++ linux/include/linux/mtd/cfi_endian.h	Tue Dec 18 14:07:50 2001
@@ -30,22 +30,28 @@
 #define cfi8_to_cpu(x) (x)
 #define cpu_to_cfi16(x) cpu_to_le16(x)
 #define cpu_to_cfi32(x) cpu_to_le32(x)
+#define cpu_to_cfi64(x) cpu_to_le64(x)
 #define cfi16_to_cpu(x) le16_to_cpu(x)
 #define cfi32_to_cpu(x) le32_to_cpu(x)
+#define cfi64_to_cpu(x) le64_to_cpu(x)
 #elif defined (CFI_BIG_ENDIAN)
 #define cpu_to_cfi8(x) (x)
 #define cfi8_to_cpu(x) (x)
 #define cpu_to_cfi16(x) cpu_to_be16(x)
 #define cpu_to_cfi32(x) cpu_to_be32(x)
+#define cpu_to_cfi64(x) cpu_to_be64(x)
 #define cfi16_to_cpu(x) be16_to_cpu(x)
 #define cfi32_to_cpu(x) be32_to_cpu(x)
+#define cfi64_to_cpu(x) be64_to_cpu(x)
 #elif defined (CFI_HOST_ENDIAN)
 #define cpu_to_cfi8(x) (x)
 #define cfi8_to_cpu(x) (x)
 #define cpu_to_cfi16(x) (x)
 #define cpu_to_cfi32(x) (x)
+#define cpu_to_cfi64(x) (x)
 #define cfi16_to_cpu(x) (x)
 #define cfi32_to_cpu(x) (x)
+#define cfi64_to_cpu(x) (x)
 #else
 #error No CFI endianness defined
 #endif
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/mtd/map.h linux/include/linux/mtd/map.h
--- linux-original/include/linux/mtd/map.h	Thu Oct  4 15:13:18 2001
+++ linux/include/linux/mtd/map.h	Tue Dec 18 14:07:50 2001
@@ -33,6 +33,7 @@
 	__u8 (*read8)(struct map_info *, unsigned long);
 	__u16 (*read16)(struct map_info *, unsigned long);
 	__u32 (*read32)(struct map_info *, unsigned long);  
+	__u64 (*read64)(struct map_info *, unsigned long);  
 	/* If it returned a 'long' I'd call it readl.
 	 * It doesn't.
 	 * I won't.
@@ -42,6 +43,7 @@
 	void (*write8)(struct map_info *, __u8, unsigned long);
 	void (*write16)(struct map_info *, __u16, unsigned long);
 	void (*write32)(struct map_info *, __u32, unsigned long);
+	void (*write64)(struct map_info *, __u64, unsigned long);
 	void (*copy_to)(struct map_info *, unsigned long, const void *, ssize_t);
 
 	void (*set_vpp)(struct map_info *, int);
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/version.h linux/include/linux/version.h
--- linux-original/include/linux/version.h	Wed Dec 31 16:00:00 1969
+++ linux/include/linux/version.h	Tue Dec 18 14:06:08 2001
@@ -0,0 +1,3 @@
+#define UTS_RELEASE "2.4.16"
+#define LINUX_VERSION_CODE 132112
+#define KERNEL_VERSION(a,b,c) (((a) << 16) + ((b) << 8) + (c))
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/drivers/mtd/chips/Config.in linux/drivers/mtd/chips/Config.in
--- linux-original/drivers/mtd/chips/Config.in	Thu Oct  4 15:13:18 2001
+++ linux/drivers/mtd/chips/Config.in	Tue Dec 18 14:06:06 2001
@@ -31,6 +31,7 @@
        bool '    Support  8-bit buswidth' CONFIG_MTD_CFI_B1
        bool '    Support 16-bit buswidth' CONFIG_MTD_CFI_B2
        bool '    Support 32-bit buswidth' CONFIG_MTD_CFI_B4
+       bool '    Support 64-bit buswidth' CONFIG_MTD_CFI_B8
 	 if [ "$CONFIG_MTD_CFI_B1" = "y" ]; then
 	   define_bool CONFIG_MTD_CFI_I1 y
          else
@@ -38,6 +39,7 @@
 	 fi
        bool '    Support 2-chip flash interleave' CONFIG_MTD_CFI_I2
        bool '    Support 4-chip flash interleave' CONFIG_MTD_CFI_I4
+       bool '    Support 8-chip flash interleave' CONFIG_MTD_CFI_I8
      fi
   fi
 fi
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/drivers/mtd/chips/cfi_cmdset_0001.c linux/drivers/mtd/chips/cfi_cmdset_0001.c
--- linux-original/drivers/mtd/chips/cfi_cmdset_0001.c	Thu Oct  4 15:14:59 2001
+++ linux/drivers/mtd/chips/cfi_cmdset_0001.c	Tue Dec 18 14:06:06 2001
@@ -30,6 +30,8 @@
 #include <linux/mtd/cfi.h>
 #include <linux/mtd/compatmac.h>
 
+//#define FORCE_WORD_WRITE
+
 static int cfi_intelext_read (struct mtd_info *, loff_t, size_t, size_t *, u_char *);
 static int cfi_intelext_write_words(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
 static int cfi_intelext_write_buffers(struct mtd_info *, loff_t, size_t, size_t *, const u_char *);
@@ -240,11 +242,15 @@
 	/* Also select the correct geometry setup too */ 
 		mtd->erase = cfi_intelext_erase_varsize;
 	mtd->read = cfi_intelext_read;
+#ifndef FORCE_WORD_WRITE
 	if ( cfi->cfiq->BufWriteTimeoutTyp ) {
-		//printk(KERN_INFO "Using buffer write method\n" );
+		printk("Using buffer write method\n" );
 		mtd->write = cfi_intelext_write_buffers;
 	} else {
-		//printk(KERN_INFO "Using word write method\n" );
+#else
+	{
+#endif
+		printk("Using word write method\n" );
 		mtd->write = cfi_intelext_write_words;
 	}
 	mtd->sync = cfi_intelext_sync;
@@ -262,7 +268,7 @@
 
 static inline int do_read_onechip(struct map_info *map, struct flchip *chip, loff_t adr, size_t len, u_char *buf)
 {
-	__u32 status, status_OK;
+	__u64 status, status_OK;
 	unsigned long timeo;
 	DECLARE_WAITQUEUE(wait, current);
 	int suspended = 0;
@@ -312,7 +318,7 @@
 				chip->state = FL_ERASING;
 				spin_unlock_bh(chip->mutex);
 				printk(KERN_ERR "Chip not ready after erase "
-				       "suspended: status = 0x%x\n", status);
+				       "suspended: status = 0x%llx\n", status);
 				return -EIO;
 			}
 			
@@ -350,7 +356,7 @@
 		/* Urgh. Chip not yet ready to talk to us. */
 		if (time_after(jiffies, timeo)) {
 			spin_unlock_bh(chip->mutex);
-			printk(KERN_ERR "waiting for chip to be ready timed out in read. WSM status = %x\n", status);
+			printk(KERN_ERR "waiting for chip to be ready timed out in read. WSM status = %llx\n", status);
 			return -EIO;
 		}
 
@@ -433,10 +439,10 @@
 	return ret;
 }
 
-static int do_write_oneword(struct map_info *map, struct flchip *chip, unsigned long adr, __u32 datum)
+static int do_write_oneword(struct map_info *map, struct flchip *chip, unsigned long adr, __u64 datum)
 {
 	struct cfi_private *cfi = map->fldrv_priv;
-	__u32 status, status_OK;
+	__u64 status, status_OK;
 	unsigned long timeo;
 	DECLARE_WAITQUEUE(wait, current);
 	int z;
@@ -583,8 +589,8 @@
 		unsigned long bus_ofs = ofs & ~(CFIDEV_BUSWIDTH-1);
 		int gap = ofs - bus_ofs;
 		int i = 0, n = 0;
-		u_char tmp_buf[4];
-		__u32 datum;
+		u_char tmp_buf[8];
+		__u64 datum;
 
 		while (gap--)
 			tmp_buf[i++] = 0xff;
@@ -597,6 +603,8 @@
 			datum = *(__u16*)tmp_buf;
 		} else if (cfi_buswidth_is_4()) {
 			datum = *(__u32*)tmp_buf;
+		} else if (cfi_buswidth_is_8()) {
+			datum = *(__u64*)tmp_buf;
 		} else {
 			return -EINVAL;  /* should never happen, but be safe */
 		}
@@ -619,7 +627,7 @@
 	}
 	
 	while(len >= CFIDEV_BUSWIDTH) {
-		__u32 datum;
+		__u64 datum;
 
 		if (cfi_buswidth_is_1()) {
 			datum = *(__u8*)buf;
@@ -627,6 +635,8 @@
 			datum = *(__u16*)buf;
 		} else if (cfi_buswidth_is_4()) {
 			datum = *(__u32*)buf;
+		} else if (cfi_buswidth_is_8()) {
+			datum = *(__u64*)buf;
 		} else {
 			return -EINVAL;
 		}
@@ -651,8 +661,8 @@
 
 	if (len & (CFIDEV_BUSWIDTH-1)) {
 		int i = 0, n = 0;
-		u_char tmp_buf[4];
-		__u32 datum;
+		u_char tmp_buf[8];
+		__u64 datum;
 
 		while (len--)
 			tmp_buf[i++] = buf[n++];
@@ -663,6 +673,8 @@
 			datum = *(__u16*)tmp_buf;
 		} else if (cfi_buswidth_is_4()) {
 			datum = *(__u32*)tmp_buf;
+		} else if (cfi_buswidth_is_8()) {
+			datum = *(__u64*)tmp_buf;
 		} else {
 			return -EINVAL;  /* should never happen, but be safe */
 		}
@@ -683,7 +695,7 @@
 				  unsigned long adr, const u_char *buf, int len)
 {
 	struct cfi_private *cfi = map->fldrv_priv;
-	__u32 status, status_OK;
+	__u64 status, status_OK;
 	unsigned long cmd_adr, timeo;
 	DECLARE_WAITQUEUE(wait, current);
 	int wbufsize, z;
@@ -761,7 +773,7 @@
 			chip->state = FL_STATUS;
 			DISABLE_VPP(map);
 			spin_unlock_bh(chip->mutex);
-			printk(KERN_ERR "Chip not ready for buffer write. Xstatus = %x, status = %x\n", status, cfi_read(map, cmd_adr));
+			printk(KERN_ERR "Chip not ready for buffer write. Xstatus = %llx, status = %llx\n", status, cfi_read(map, cmd_adr));
 			return -EIO;
 		}
 	}
@@ -777,6 +789,8 @@
 			map->write16 (map, *((__u16*)buf)++, adr+z);
 		} else if (cfi_buswidth_is_4()) {
 			map->write32 (map, *((__u32*)buf)++, adr+z);
+		} else if (cfi_buswidth_is_8()) {
+			map->write64 (map, *((__u64*)buf)++, adr+z);
 		} else {
 			DISABLE_VPP(map);
 			return -EINVAL;
@@ -930,7 +944,7 @@
 static inline int do_erase_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr)
 {
 	struct cfi_private *cfi = map->fldrv_priv;
-	__u32 status, status_OK;
+	__u64 status, status_OK;
 	unsigned long timeo;
 	int retries = 3;
 	DECLARE_WAITQUEUE(wait, current);
@@ -1020,7 +1034,7 @@
 		if (time_after(jiffies, timeo)) {
 			cfi_write(map, CMD(0x70), adr);
 			chip->state = FL_STATUS;
-			printk(KERN_ERR "waiting for erase to complete timed out. Xstatus = %x, status = %x.\n", status, cfi_read(map, adr));
+			printk(KERN_ERR "waiting for erase to complete timed out. Xstatus = %llx, status = %llx.\n", status, cfi_read(map, adr));
 			DISABLE_VPP(map);
 			spin_unlock_bh(chip->mutex);
 			return -EIO;
@@ -1048,31 +1062,31 @@
 			for (i = 1; i<CFIDEV_INTERLEAVE; i++) {
 				      chipstatus |= status >> (cfi->device_type * 8);
 			}
-			printk(KERN_WARNING "Status is not identical for all chips: 0x%x. Merging to give 0x%02x\n", status, chipstatus);
+			printk(KERN_WARNING "Status is not identical for all chips: 0x%llx. Merging to give 0x%02x\n", status, chipstatus);
 		}
 		/* Reset the error bits */
 		cfi_write(map, CMD(0x50), adr);
 		cfi_write(map, CMD(0x70), adr);
 		
 		if ((chipstatus & 0x30) == 0x30) {
-			printk(KERN_NOTICE "Chip reports improper command sequence: status 0x%x\n", status);
+			printk(KERN_NOTICE "Chip reports improper command sequence: status 0x%llx\n", status);
 			ret = -EIO;
 		} else if (chipstatus & 0x02) {
 			/* Protection bit set */
 			ret = -EROFS;
 		} else if (chipstatus & 0x8) {
 			/* Voltage */
-			printk(KERN_WARNING "Chip reports voltage low on erase: status 0x%x\n", status);
+			printk(KERN_WARNING "Chip reports voltage low on erase: status 0x%llx\n", status);
 			ret = -EIO;
 		} else if (chipstatus & 0x20) {
 			if (retries--) {
-				printk(KERN_DEBUG "Chip erase failed at 0x%08lx: status 0x%x. Retrying...\n", adr, status);
+				printk(KERN_DEBUG "Chip erase failed at 0x%08lx: status 0x%llx. Retrying...\n", adr, status);
 				timeo = jiffies + HZ;
 				chip->state = FL_STATUS;
 				spin_unlock_bh(chip->mutex);
 				goto retry;
 			}
-			printk(KERN_DEBUG "Chip erase failed at 0x%08lx: status 0x%x\n", adr, status);
+			printk(KERN_DEBUG "Chip erase failed at 0x%08lx: status 0x%llx\n", adr, status);
 			ret = -EIO;
 		}
 	}
@@ -1233,7 +1247,7 @@
 static inline int do_lock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr)
 {
 	struct cfi_private *cfi = map->fldrv_priv;
-	__u32 status, status_OK;
+	__u64 status, status_OK;
 	unsigned long timeo = jiffies + HZ;
 	DECLARE_WAITQUEUE(wait, current);
 
@@ -1306,7 +1320,7 @@
 		if (time_after(jiffies, timeo)) {
 			cfi_write(map, CMD(0x70), adr);
 			chip->state = FL_STATUS;
-			printk(KERN_ERR "waiting for lock to complete timed out. Xstatus = %x, status = %x.\n", status, cfi_read(map, adr));
+			printk(KERN_ERR "waiting for lock to complete timed out. Xstatus = %llx, status = %llx.\n", status, cfi_read(map, adr));
 			DISABLE_VPP(map);
 			spin_unlock_bh(chip->mutex);
 			return -EIO;
@@ -1382,7 +1396,7 @@
 static inline int do_unlock_oneblock(struct map_info *map, struct flchip *chip, unsigned long adr)
 {
 	struct cfi_private *cfi = map->fldrv_priv;
-	__u32 status, status_OK;
+	__u64 status, status_OK;
 	unsigned long timeo = jiffies + HZ;
 	DECLARE_WAITQUEUE(wait, current);
 
@@ -1455,7 +1469,7 @@
 		if (time_after(jiffies, timeo)) {
 			cfi_write(map, CMD(0x70), adr);
 			chip->state = FL_STATUS;
-			printk(KERN_ERR "waiting for unlock to complete timed out. Xstatus = %x, status = %x.\n", status, cfi_read(map, adr));
+			printk(KERN_ERR "waiting for unlock to complete timed out. Xstatus = %llx, status = %llx.\n", status, cfi_read(map, adr));
 			DISABLE_VPP(map);
 			spin_unlock_bh(chip->mutex);
 			return -EIO;
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/drivers/mtd/chips/cfi_probe.c linux/drivers/mtd/chips/cfi_probe.c
--- linux-original/drivers/mtd/chips/cfi_probe.c	Thu Oct  4 15:14:59 2001
+++ linux/drivers/mtd/chips/cfi_probe.c	Tue Dec 18 14:06:06 2001
@@ -18,7 +18,7 @@
 #include <linux/mtd/cfi.h>
 #include <linux/mtd/gen_probe.h>
 
-//#define DEBUG_CFI 
+#define DEBUG_CFI 
 
 #ifdef DEBUG_CFI
 static void print_cfi_ident(struct cfi_ident *);
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/drivers/mtd/chips/gen_probe.c linux/drivers/mtd/chips/gen_probe.c
--- linux-original/drivers/mtd/chips/gen_probe.c	Thu Oct  4 15:14:59 2001
+++ linux/drivers/mtd/chips/gen_probe.c	Tue Dec 18 14:06:06 2001
@@ -96,6 +96,11 @@
 		cfi.chipshift+=2;
 		break;
 #endif
+#ifdef CFIDEV_INTERLEAVE_8
+	case 8:
+		cfi.chipshift+=3;
+		break;
+#endif
 	default:
 		BUG();
 	}
@@ -223,6 +228,70 @@
 #endif /* CFIDEV_INTERLEAVE_4 */
 		break;
 #endif /* CFIDEV_BUSWIDTH_4 */
+
+#ifdef CFIDEV_BUSWIDTH_8
+	case CFIDEV_BUSWIDTH_8:
+#if defined(CFIDEV_INTERLEAVE_1) && defined(SOMEONE_ACTUALLY_MAKES_THESE)
+                cfi->interleave = CFIDEV_INTERLEAVE_1;
+
+                cfi->device_type = CFI_DEVICETYPE_X32;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+#endif /* CFIDEV_INTERLEAVE_1 */
+#ifdef CFIDEV_INTERLEAVE_2
+		cfi->interleave = CFIDEV_INTERLEAVE_2;
+
+#ifdef SOMEONE_ACTUALLY_MAKES_THESE
+		cfi->device_type = CFI_DEVICETYPE_X32;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+#endif
+		cfi->device_type = CFI_DEVICETYPE_X16;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+
+		cfi->device_type = CFI_DEVICETYPE_X8;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+#endif /* CFIDEV_INTERLEAVE_2 */
+#ifdef CFIDEV_INTERLEAVE_4
+		cfi->interleave = CFIDEV_INTERLEAVE_4;
+
+#ifdef SOMEONE_ACTUALLY_MAKES_THESE
+		cfi->device_type = CFI_DEVICETYPE_X32;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+#endif
+		cfi->device_type = CFI_DEVICETYPE_X16;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+
+		cfi->device_type = CFI_DEVICETYPE_X8;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+#endif /* CFIDEV_INTERLEAVE_4 */
+#ifdef CFIDEV_INTERLEAVE_8
+		cfi->interleave = CFIDEV_INTERLEAVE_8;
+
+#ifdef SOMEONE_ACTUALLY_MAKES_THESE
+		cfi->device_type = CFI_DEVICETYPE_X64;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+
+		cfi->device_type = CFI_DEVICETYPE_X32;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+#endif
+		cfi->device_type = CFI_DEVICETYPE_X16;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+
+		cfi->device_type = CFI_DEVICETYPE_X8;
+		if (cp->probe_chip(map, 0, NULL, cfi))
+			return 1;
+#endif /* CFIDEV_INTERLEAVE_8 */
+		break;
+#endif /* CFIDEV_BUSWIDTH_8 */
 
 	default:
 		printk(KERN_WARNING "genprobe_new_chip called with unsupported buswidth %d\n", map->buswidth);
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/drivers/mtd/maps/comdev_np.c linux/drivers/mtd/maps/comdev_np.c
--- linux-original/drivers/mtd/maps/comdev_np.c	Wed Dec 31 16:00:00 1969
+++ linux/drivers/mtd/maps/comdev_np.c	Tue Dec 18 14:06:06 2001
@@ -0,0 +1,22 @@
+static struct mtd_partition partition_info[] =
+{
+  {
+     name:"SBC-GXx flash boot partition",
+     offset:0,
+     size:BOOT_PARTITION_SIZE_KiB * 1024
+  },
+  {
+     name:"SBC-GXx flash data partition",
+     offset:BOOT_PARTITION_SIZE_KiB * 1024,
+     size:(DATA_PARTITION_SIZE_KiB) * 1024
+  },
+  {
+     name:"SBC-GXx flash application partition",
+     offset:(BOOT_PARTITION_SIZE_KiB + DATA_PARTITION_SIZE_KiB) * 1024
+  }
+};
+
+#define NUM_PARTITIONS (sizeof(partition_info) / sizeof(partition_info[0]))
+
+	/* Create MTD devices for each partition. */
+add_mtd_partitions (all_mtd, partition_info, NUM_PARTITIONS);
diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/drivers/mtd/maps/physmap.c linux/drivers/mtd/maps/physmap.c
--- linux-original/drivers/mtd/maps/physmap.c	Thu Oct  4 15:14:59 2001
+++ linux/drivers/mtd/maps/physmap.c	Tue Dec 18 14:06:06 2001
@@ -10,6 +10,7 @@
 #include <asm/io.h>
 #include <linux/mtd/mtd.h>
 #include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
 #include <linux/config.h>
 
 
@@ -34,6 +35,11 @@
 	return __raw_readl(map->map_priv_1 + ofs);
 }
 
+__u64 physmap_read64(struct map_info *map, unsigned long ofs)
+{
+	return __raw_readll(map->map_priv_1 + ofs);
+}
+
 void physmap_copy_from(struct map_info *map, void *to, unsigned long from, ssize_t len)
 {
 	memcpy_fromio(to, map->map_priv_1 + from, len);
@@ -57,6 +63,12 @@
 	mb();
 }
 
+void physmap_write64(struct map_info *map, __u64 d, unsigned long adr)
+{
+	__raw_writell(d, map->map_priv_1 + adr);
+	mb();
+}
+
 void physmap_copy_to(struct map_info *map, unsigned long to, const void *from, ssize_t len)
 {
 	memcpy_toio(map->map_priv_1 + to, from, len);
@@ -69,10 +81,12 @@
 	read8: physmap_read8,
 	read16: physmap_read16,
 	read32: physmap_read32,
+	read64: physmap_read64,
 	copy_from: physmap_copy_from,
 	write8: physmap_write8,
 	write16: physmap_write16,
 	write32: physmap_write32,
+	write64: physmap_write64,
 	copy_to: physmap_copy_to
 };
 
@@ -90,6 +104,61 @@
 		mymtd->module = THIS_MODULE;
 
 		add_mtd_device(mymtd);
+
+#ifdef CONFIG_COMDEV
+
+		{
+		static struct mtd_partition partition_info[] =
+		{
+		        {
+		                name: "jffs part",
+		                size:   96 << 20,
+		                offset:  0 << 20
+		        },
+		        {
+		                name: "hrcw part",
+		                size:    1 << 20,
+		                offset: 96 << 20
+		        },
+		        {
+		                name: "kernel part",
+		                size:    1 << 20,
+		                offset: 97 << 20
+		        },
+		        {
+		                name: "fpga part",
+		                size:    1 << 20,
+		                offset: 98 << 20
+		        },
+		        {
+		                name: "bonus part",
+		                size:    5 << 20,
+		                offset: 99 << 20
+		        },
+		        {
+		                name: "root part",
+		                size:   22 << 20,
+		                offset:104 << 20
+		        },
+		        {
+		                name: "env part",
+		                size:    1 << 20,
+		                offset:126 << 20
+		        },
+		        {
+		                name: "monitor part",
+		                size:    1 << 20,
+		                offset:127 << 20
+		        },
+		};
+		
+		#define NUM_PARTITIONS (sizeof(partition_info) / sizeof(partition_info[0]))
+		
+		/* Create MTD devices for each partition. */
+		add_mtd_partitions (mymtd, partition_info, NUM_PARTITIONS);
+		}
+#endif
+
 		return 0;
 	}
 

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2001-12-18 23:27 Adam Wozniak
@ 2001-12-21  9:14 ` David Woodhouse
  2001-12-21 16:30   ` Adam Wozniak
  2001-12-27 23:31   ` Adam Wozniak
  2002-02-14 12:32 ` Jörn Engel
  1 sibling, 2 replies; 12+ messages in thread
From: David Woodhouse @ 2001-12-21  9:14 UTC (permalink / raw)
  To: Adam Wozniak; +Cc: linux-mtd

adam.wozniak@comdev.cc said:
> I've got a 64 bit wide flash consisting of eight 8bit wide chips.
> Here's a patch against the 2.4.16 kernel 

I'm a little concerned about the following bit - gcc is fairly crap at 
dealing with 64-bit datatypes. I'd prefer to do that only if it's 
necessary. Can we define a cfi_busword type which is only as big as we need 
- so it's only a __u64 if CONFIG_MTD_CFI_B8 is set?

@@ -337,9 +393,9 @@
  */
 static inline __u32 cfi_send_gen_cmd(u_char cmd, __u32 cmd_addr, __u32 base,
 				struct map_info *map, struct cfi_private *cfi,
-				int type, __u32 *prev_val)
+				int type, __u64 *prev_val)
 {
-	__u32 val;
+	__u64 val;
 	__u32 addr = base + cfi_build_cmd_addr(cmd_addr, CFIDEV_INTERLEAVE, type);
 
 	val = cfi_build_cmd(cmd, map, cfi);

--
dwmw2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2001-12-21  9:14 ` David Woodhouse
@ 2001-12-21 16:30   ` Adam Wozniak
  2001-12-27 23:31   ` Adam Wozniak
  1 sibling, 0 replies; 12+ messages in thread
From: Adam Wozniak @ 2001-12-21 16:30 UTC (permalink / raw)
  To: David Woodhouse; +Cc: linux-mtd

David Woodhouse wrote:
> adam.wozniak@comdev.cc said:
> > I've got a 64 bit wide flash consisting of eight 8bit wide chips.
> > Here's a patch against the 2.4.16 kernel
> 
> I'm a little concerned about the following bit - gcc is fairly crap at
> dealing with 64-bit datatypes. I'd prefer to do that only if it's
> necessary. Can we define a cfi_busword type which is only as big as we need
> - so it's only a __u64 if CONFIG_MTD_CFI_B8 is set?
> 
> @@ -337,9 +393,9 @@
>   */
>  static inline __u32 cfi_send_gen_cmd(u_char cmd, __u32 cmd_addr, __u32 base,
>                                 struct map_info *map, struct cfi_private *cfi,
> -                               int type, __u32 *prev_val)
> +                               int type, __u64 *prev_val)
>  {
> -       __u32 val;
> +       __u64 val;
>         __u32 addr = base + cfi_build_cmd_addr(cmd_addr, CFIDEV_INTERLEAVE, type);
> 
>         val = cfi_build_cmd(cmd, map, cfi);

That's fine with me.  I'll release a patch later today or tomorrow. =)

--Adam
-- 
Adam Wozniak (KG6GZR)   COM DEV Wireless - Digital and Software Systems
awozniak@comdev.cc      3450 Broad St. 107, San Luis Obispo, CA 93401
                        http://www.comdev.cc
                        Voice: (805) 544-1089       Fax: (805) 544-2055

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2001-12-21  9:14 ` David Woodhouse
  2001-12-21 16:30   ` Adam Wozniak
@ 2001-12-27 23:31   ` Adam Wozniak
  1 sibling, 0 replies; 12+ messages in thread
From: Adam Wozniak @ 2001-12-27 23:31 UTC (permalink / raw)
  To: David Woodhouse; +Cc: linux-mtd

[-- Attachment #1: Type: text/plain, Size: 1552 bytes --]

David Woodhouse wrote:
> 
> adam.wozniak@comdev.cc said:
> > I've got a 64 bit wide flash consisting of eight 8bit wide chips.
> > Here's a patch against the 2.4.16 kernel
> 
> I'm a little concerned about the following bit - gcc is fairly crap at
> dealing with 64-bit datatypes. I'd prefer to do that only if it's
> necessary. Can we define a cfi_busword type which is only as big as we need
> - so it's only a __u64 if CONFIG_MTD_CFI_B8 is set?

Here's a new patch.

cfi.h has the following in it (paraphrased and indented for readablity):

#ifndef CONFIG_MTD_CFI_GEOMETRY
 
/* we don't know what we'll get, so we pick the largest possible here */
typedef __u64 cfi_word;
 
#else

/* pick the largest necessary */
#ifdef CONFIG_MTD_CFI_B8
typedef __u64 cfi_word;
#else  /* CONFIG_MTD_CFI_B8 */
   #ifdef CONFIG_MTD_CFI_B4
   typedef __u32 cfi_word;
   #else  /* CONFIG_MTD_CFI_B4 */
      #ifdef CONFIG_MTD_CFI_B2
      typedef __u16 cfi_word;
      #else  /* CONFIG_MTD_CFI_B2 */
         #ifdef CONFIG_MTD_CFI_B1
         typedef __u8 cfi_word;
         #else  /* CONFIG_MTD_CFI_B1 */
            #error You must specify a bus width
         #endif /* CONFIG_MTD_CFI_B1 */
      #endif /* CONFIG_MTD_CFI_B2 */
   #endif /* CONFIG_MTD_CFI_B4 */
#endif /* CONFIG_MTD_CFI_B8 */
 
#endif

-- 
Adam Wozniak (KG6GZR)   COM DEV Wireless - Digital and Software Systems
awozniak@comdev.cc      3450 Broad St. 107, San Luis Obispo, CA 93401
                        http://www.comdev.cc
                        Voice: (805) 544-1089       Fax: (805) 544-2055

[-- Attachment #2: mtd_delta --]
[-- Type: text/plain, Size: 8460 bytes --]

diff -urbBN --exclude=autoconf.h --exclude=compile.h --exclude=version.h --exclude=config --exclude=asm --exclude=asm-ppc --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/mtd/cfi.h linux/include/linux/mtd/cfi.h
--- linux-original/include/linux/mtd/cfi.h	Thu Oct  4 15:13:18 2001
+++ linux/include/linux/mtd/cfi.h	Thu Dec 27 15:21:09 2001
@@ -28,10 +28,15 @@
 #define CFIDEV_INTERLEAVE_1 (1)
 #define CFIDEV_INTERLEAVE_2 (2)
 #define CFIDEV_INTERLEAVE_4 (4)
+#define CFIDEV_INTERLEAVE_8 (8)
 
 #define CFIDEV_BUSWIDTH_1 (1)
 #define CFIDEV_BUSWIDTH_2 (2)
 #define CFIDEV_BUSWIDTH_4 (4)
+#define CFIDEV_BUSWIDTH_8 (8)
+
+/* we don't know what we'll get, so we pick the largest possible here */
+typedef __u64 cfi_word;
 
 #else
 
@@ -44,6 +49,9 @@
 #ifdef CONFIG_MTD_CFI_I4
 #define CFIDEV_INTERLEAVE_4 (4)
 #endif
+#ifdef CONFIG_MTD_CFI_I8
+#define CFIDEV_INTERLEAVE_8 (8)
+#endif
 
 #ifdef CONFIG_MTD_CFI_B1
 #define CFIDEV_BUSWIDTH_1 (1)
@@ -54,6 +62,28 @@
 #ifdef CONFIG_MTD_CFI_B4
 #define CFIDEV_BUSWIDTH_4 (4)
 #endif
+#ifdef CONFIG_MTD_CFI_B8
+#define CFIDEV_BUSWIDTH_8 (8)
+#endif
+
+/* pick the largest necessary */
+#ifdef CONFIG_MTD_CFI_B8
+typedef __u64 cfi_word;
+#else  /* CONFIG_MTD_CFI_B8 */
+#ifdef CONFIG_MTD_CFI_B4
+typedef __u32 cfi_word;
+#else  /* CONFIG_MTD_CFI_B4 */
+#ifdef CONFIG_MTD_CFI_B2
+typedef __u16 cfi_word;
+#else  /* CONFIG_MTD_CFI_B2 */
+#ifdef CONFIG_MTD_CFI_B1
+typedef __u8 cfi_word;
+#else  /* CONFIG_MTD_CFI_B1 */
+#error You must specify a bus width
+#endif /* CONFIG_MTD_CFI_B1 */
+#endif /* CONFIG_MTD_CFI_B2 */
+#endif /* CONFIG_MTD_CFI_B4 */
+#endif /* CONFIG_MTD_CFI_B8 */
 
 #endif
 
@@ -61,7 +91,7 @@
  * The following macros are used to select the code to execute:
  *   cfi_buswidth_is_*()
  *   cfi_interleave_is_*()
- *   [where * is either 1, 2 or 4]
+ *   [where * is either 1, 2, 4, or 8]
  * Those macros should be used with 'if' statements.  If only one of few
  * geometry arrangements are selected, they expand to constants thus allowing
  * the compiler (most of them being 0) to optimize away all the unneeded code,
@@ -105,6 +135,18 @@
 # define cfi_interleave_is_4() (0)
 #endif
 
+#ifdef CFIDEV_INTERLEAVE_8
+# ifdef CFIDEV_INTERLEAVE
+#  undef CFIDEV_INTERLEAVE
+#  define CFIDEV_INTERLEAVE (cfi->interleave)
+# else
+#  define CFIDEV_INTERLEAVE CFIDEV_INTERLEAVE_8
+# endif
+# define cfi_interleave_is_8() (CFIDEV_INTERLEAVE == CFIDEV_INTERLEAVE_8)
+#else
+# define cfi_interleave_is_8() (0)
+#endif
+
 #ifndef CFIDEV_INTERLEAVE
 #error You must define at least one interleave to support!
 #endif
@@ -145,6 +187,18 @@
 # define cfi_buswidth_is_4() (0)
 #endif
 
+#ifdef CFIDEV_BUSWIDTH_8
+# ifdef CFIDEV_BUSWIDTH
+#  undef CFIDEV_BUSWIDTH
+#  define CFIDEV_BUSWIDTH (map->buswidth)
+# else
+#  define CFIDEV_BUSWIDTH CFIDEV_BUSWIDTH_8
+# endif
+# define cfi_buswidth_is_8() (CFIDEV_BUSWIDTH == CFIDEV_BUSWIDTH_8)
+#else
+# define cfi_buswidth_is_8() (0)
+#endif
+
 #ifndef CFIDEV_BUSWIDTH
 #error You must define at least one bus width to support!
 #endif
@@ -156,6 +210,7 @@
 #define CFI_DEVICETYPE_X8  (8 / 8)
 #define CFI_DEVICETYPE_X16 (16 / 8)
 #define CFI_DEVICETYPE_X32 (32 / 8)
+#define CFI_DEVICETYPE_X64 (64 / 8)
 
 /* NB: We keep these structures in memory in HOST byteorder, except
  * where individually noted.
@@ -264,9 +319,9 @@
 /*
  * Transforms the CFI command for the given geometry (bus width & interleave.
  */
-static inline __u32 cfi_build_cmd(u_char cmd, struct map_info *map, struct cfi_private *cfi)
+static inline cfi_word cfi_build_cmd(u_char cmd, struct map_info *map, struct cfi_private *cfi)
 {
-	__u32 val = 0;
+	cfi_word val = 0;
 
 	if (cfi_buswidth_is_1()) {
 		/* 1 x8 device */
@@ -291,6 +346,25 @@
 			val = (cmd << 16) | cmd;
 			val = cpu_to_cfi32((val << 8) | val);
 		}
+	} else if (cfi_buswidth_is_8()) {
+		if (cfi_interleave_is_1()) {
+			/* 1 x64 device in x64 mode */
+			val = cpu_to_cfi64(cmd);
+		} else if (cfi_interleave_is_2()) {
+			/* 2 x32 device in x32 mode */
+			val = cmd;
+			val = cpu_to_cfi64((val << 32) | val);
+		} else if (cfi_interleave_is_4()) {
+			/* 4 (x16, x32 or x64) devices in x16 mode */
+			val = (cmd << 16) | cmd;
+			val = cpu_to_cfi64((val << 32) | val);
+		} else if (cfi_interleave_is_8()) {
+			/* 8 (x8, x16 or x32) devices in x8 mode */
+			val = (cmd << 8) | cmd;
+			val = (val << 16) | val;
+			val = (val << 32) | val;
+			val = cpu_to_cfi64(val);
+		}
 	}
 	return val;
 }
@@ -300,7 +374,7 @@
  * Read a value according to the bus width.
  */
 
-static inline __u32 cfi_read(struct map_info *map, __u32 addr)
+static inline cfi_word cfi_read(struct map_info *map, __u32 addr)
 {
 	if (cfi_buswidth_is_1()) {
 		return map->read8(map, addr);
@@ -308,6 +382,8 @@
 		return map->read16(map, addr);
 	} else if (cfi_buswidth_is_4()) {
 		return map->read32(map, addr);
+	} else if (cfi_buswidth_is_8()) {
+		return map->read64(map, addr);
 	} else {
 		return 0;
 	}
@@ -317,7 +393,7 @@
  * Write a value according to the bus width.
  */
 
-static inline void cfi_write(struct map_info *map, __u32 val, __u32 addr)
+static inline void cfi_write(struct map_info *map, cfi_word val, __u32 addr)
 {
 	if (cfi_buswidth_is_1()) {
 		map->write8(map, val, addr);
@@ -325,6 +401,8 @@
 		map->write16(map, val, addr);
 	} else if (cfi_buswidth_is_4()) {
 		map->write32(map, val, addr);
+	} else if (cfi_buswidth_is_8()) {
+		map->write64(map, val, addr);
 	}
 }
 
@@ -337,9 +415,9 @@
  */
 static inline __u32 cfi_send_gen_cmd(u_char cmd, __u32 cmd_addr, __u32 base,
 				struct map_info *map, struct cfi_private *cfi,
-				int type, __u32 *prev_val)
+				int type, cfi_word *prev_val)
 {
-	__u32 val;
+	cfi_word val;
 	__u32 addr = base + cfi_build_cmd_addr(cmd_addr, CFIDEV_INTERLEAVE, type);
 
 	val = cfi_build_cmd(cmd, map, cfi);
@@ -360,6 +438,8 @@
 		return cfi16_to_cpu(map->read16(map, addr));
 	} else if (cfi_buswidth_is_4()) {
 		return cfi32_to_cpu(map->read32(map, addr));
+	} else if (cfi_buswidth_is_8()) {
+		return cfi64_to_cpu(map->read64(map, addr));
 	} else {
 		return 0;
 	}
diff -urbBN --exclude=autoconf.h --exclude=compile.h --exclude=version.h --exclude=config --exclude=asm --exclude=asm-ppc --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/mtd/cfi_endian.h linux/include/linux/mtd/cfi_endian.h
--- linux-original/include/linux/mtd/cfi_endian.h	Thu Oct  4 15:13:18 2001
+++ linux/include/linux/mtd/cfi_endian.h	Wed Dec 19 11:52:03 2001
@@ -30,22 +30,28 @@
 #define cfi8_to_cpu(x) (x)
 #define cpu_to_cfi16(x) cpu_to_le16(x)
 #define cpu_to_cfi32(x) cpu_to_le32(x)
+#define cpu_to_cfi64(x) cpu_to_le64(x)
 #define cfi16_to_cpu(x) le16_to_cpu(x)
 #define cfi32_to_cpu(x) le32_to_cpu(x)
+#define cfi64_to_cpu(x) le64_to_cpu(x)
 #elif defined (CFI_BIG_ENDIAN)
 #define cpu_to_cfi8(x) (x)
 #define cfi8_to_cpu(x) (x)
 #define cpu_to_cfi16(x) cpu_to_be16(x)
 #define cpu_to_cfi32(x) cpu_to_be32(x)
+#define cpu_to_cfi64(x) cpu_to_be64(x)
 #define cfi16_to_cpu(x) be16_to_cpu(x)
 #define cfi32_to_cpu(x) be32_to_cpu(x)
+#define cfi64_to_cpu(x) be64_to_cpu(x)
 #elif defined (CFI_HOST_ENDIAN)
 #define cpu_to_cfi8(x) (x)
 #define cfi8_to_cpu(x) (x)
 #define cpu_to_cfi16(x) (x)
 #define cpu_to_cfi32(x) (x)
+#define cpu_to_cfi64(x) (x)
 #define cfi16_to_cpu(x) (x)
 #define cfi32_to_cpu(x) (x)
+#define cfi64_to_cpu(x) (x)
 #else
 #error No CFI endianness defined
 #endif
diff -urbBN --exclude=autoconf.h --exclude=compile.h --exclude=version.h --exclude=config --exclude=asm --exclude=asm-ppc --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/include/linux/mtd/map.h linux/include/linux/mtd/map.h
--- linux-original/include/linux/mtd/map.h	Thu Oct  4 15:13:18 2001
+++ linux/include/linux/mtd/map.h	Wed Dec 19 11:52:03 2001
@@ -33,6 +33,7 @@
 	__u8 (*read8)(struct map_info *, unsigned long);
 	__u16 (*read16)(struct map_info *, unsigned long);
 	__u32 (*read32)(struct map_info *, unsigned long);  
+	__u64 (*read64)(struct map_info *, unsigned long);  
 	/* If it returned a 'long' I'd call it readl.
 	 * It doesn't.
 	 * I won't.
@@ -42,6 +43,7 @@
 	void (*write8)(struct map_info *, __u8, unsigned long);
 	void (*write16)(struct map_info *, __u16, unsigned long);
 	void (*write32)(struct map_info *, __u32, unsigned long);
+	void (*write64)(struct map_info *, __u64, unsigned long);
 	void (*copy_to)(struct map_info *, unsigned long, const void *, ssize_t);
 
 	void (*set_vpp)(struct map_info *, int);

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
@ 2001-12-29  0:47 Allen Curtis
  2001-12-31 16:01 ` adam.wozniak
  0 siblings, 1 reply; 12+ messages in thread
From: Allen Curtis @ 2001-12-29  0:47 UTC (permalink / raw)
  To: adam.wozniak; +Cc: linux-mtd

When we did our 64 bit patch we did not use 64 bit variables. Everything
thing was accomplished with the existing functions but making sure that the
commands issues affected all banks. The only exception to this was
do_writewords() (I think that was it). In that case the value to be written
was passed as a u32 value instead of a pointer. In that case we added
another parameter "u32 datum2" which was only used with 64 bit mode. Not
sure if this is useful but it reduced the overall impact on the code.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2001-12-29  0:47 patch for 64 bit wide flash Allen Curtis
@ 2001-12-31 16:01 ` adam.wozniak
  0 siblings, 0 replies; 12+ messages in thread
From: adam.wozniak @ 2001-12-31 16:01 UTC (permalink / raw)
  To: acurtis; +Cc: linux-mtd

Allen Curtis wrote:

> When we did our 64 bit patch we did not use 64 bit variables. Everything
> thing was accomplished with the existing functions but making sure that the
> commands issues affected all banks. The only exception to this was
> do_writewords() (I think that was it). In that case the value to be written
> was passed as a u32 value instead of a pointer. In that case we added
> another parameter "u32 datum2" which was only used with 64 bit mode. Not
> sure if this is useful but it reduced the overall impact on the code.

I'm a big fan of orthagonality. =)

--Adam

--
Adam Wozniak (KG6GZR)   COM DEV Wireless - Digital and Software Systems
awozniak@comdev.cc      3450 Broad St. 107, San Luis Obispo, CA 93401
                        http://www.comdev.cc
                        Voice: (805) 544-1089       Fax: (805) 544-2055

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2001-12-18 23:27 Adam Wozniak
  2001-12-21  9:14 ` David Woodhouse
@ 2002-02-14 12:32 ` Jörn Engel
  2002-02-14 12:38   ` David Woodhouse
  2002-02-14 14:16   ` Allen Curtis
  1 sibling, 2 replies; 12+ messages in thread
From: Jörn Engel @ 2002-02-14 12:32 UTC (permalink / raw)
  To: Adam Wozniak; +Cc: linux-mtd

Hi!

> I've got a 64 bit wide flash consisting of eight 8bit wide chips.
> Here's a patch against the 2.4.16 kernel
> 
> I think I've added enough code to support all 64 bit wide
> configurations,
> but somebody whould probably check me on it.

After merging with current cvs again, I found an issue with your code
and my kernel:

> diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o linux-original/drivers/mtd/maps/physmap.c linux/drivers/mtd/maps/physmap.c
> --- linux-original/drivers/mtd/maps/physmap.c	Thu Oct  4 15:14:59 2001
> +++ linux/drivers/mtd/maps/physmap.c	Tue Dec 18 14:06:06 2001
> @@ -10,6 +10,7 @@
>  #include <asm/io.h>
>  #include <linux/mtd/mtd.h>
>  #include <linux/mtd/map.h>
> +#include <linux/mtd/partitions.h>
>  #include <linux/config.h>
>  
>  
> @@ -34,6 +35,11 @@
>  	return __raw_readl(map->map_priv_1 + ofs);
>  }
>  
> +__u64 physmap_read64(struct map_info *map, unsigned long ofs)
> +{
> +	return __raw_readll(map->map_priv_1 + ofs);
> +}

__raw_readll is not defined in our kernel (2.4.2 based). Worse, I
couldn't find that definition in the 2.4.17 kernel, either. Is this
specific to your private kernel?

Joern

PS: The same applies to __raw_writell, of course.

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2002-02-14 12:32 ` Jörn Engel
@ 2002-02-14 12:38   ` David Woodhouse
  2002-02-14 12:58     ` Jörn Engel
  2002-02-14 14:16   ` Allen Curtis
  1 sibling, 1 reply; 12+ messages in thread
From: David Woodhouse @ 2002-02-14 12:38 UTC (permalink / raw)
  To: Jörn Engel; +Cc: Adam Wozniak, linux-mtd

joern@wohnheim.fh-wedel.de said:
>  __raw_readll is not defined in our kernel (2.4.2 based). Worse, I
> couldn't find that definition in the 2.4.17 kernel, either. Is this
> specific to your private kernel? 

I fixed this yesterday, for most people at least. The 64-bit stuff was being
included even if you didn't explicitly turn it on. Now you do have to turn 
it on - and if you do, you're expected to provide a read64/write64 that 
works somehow.

--
dwmw2

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2002-02-14 12:38   ` David Woodhouse
@ 2002-02-14 12:58     ` Jörn Engel
  0 siblings, 0 replies; 12+ messages in thread
From: Jörn Engel @ 2002-02-14 12:58 UTC (permalink / raw)
  To: David Woodhouse; +Cc: linux-mtd

Hi!

> I fixed this yesterday, for most people at least. The 64-bit stuff was being
> included even if you didn't explicitly turn it on. Now you do have to turn 
> it on - and if you do, you're expected to provide a read64/write64 that 
> works somehow.

You are incredible! Solving a problem, before it gets reported! :-)

Jörn

-- 
Any tool should be useful in the expected way, but a truly great tool
lends itself to uses you never expected.
-- Eric Raymond in "The cathedral and the bazaar"

^ permalink raw reply	[flat|nested] 12+ messages in thread

* RE: patch for 64 bit wide flash
  2002-02-14 12:32 ` Jörn Engel
  2002-02-14 12:38   ` David Woodhouse
@ 2002-02-14 14:16   ` Allen Curtis
  2002-02-14 16:16     ` Adam Wozniak
  1 sibling, 1 reply; 12+ messages in thread
From: Allen Curtis @ 2002-02-14 14:16 UTC (permalink / raw)
  To: Jörn Engel, Adam Wozniak; +Cc: linux-mtd

I have another version of 64-bit bus support which does not change any of
the variable types and only changes one function prototype. It probably is
not as fast as this 64-bit version, assuming that it is really doing 64-bit
bus accesses, but it is a very low impact solution.

> -----Original Message-----
> From: linux-mtd-admin@lists.infradead.org
> [mailto:linux-mtd-admin@lists.infradead.org]On Behalf Of Jörn Engel
> Sent: Thursday, February 14, 2002 4:32 AM
> To: Adam Wozniak
> Cc: linux-mtd@lists.infradead.org
> Subject: Re: patch for 64 bit wide flash
>
>
> Hi!
>
> > I've got a 64 bit wide flash consisting of eight 8bit wide chips.
> > Here's a patch against the 2.4.16 kernel
> >
> > I think I've added enough code to support all 64 bit wide
> > configurations,
> > but somebody whould probably check me on it.
>
> After merging with current cvs again, I found an issue with your code
> and my kernel:
>
> > diff -urbBN --exclude=.*depend --exclude=*.flags --exclude=*.o
> linux-original/drivers/mtd/maps/physmap.c linux/drivers/mtd/maps/physmap.c
> > --- linux-original/drivers/mtd/maps/physmap.c	Thu Oct  4
> 15:14:59 2001
> > +++ linux/drivers/mtd/maps/physmap.c	Tue Dec 18 14:06:06 2001
> > @@ -10,6 +10,7 @@
> >  #include <asm/io.h>
> >  #include <linux/mtd/mtd.h>
> >  #include <linux/mtd/map.h>
> > +#include <linux/mtd/partitions.h>
> >  #include <linux/config.h>
> >
> >
> > @@ -34,6 +35,11 @@
> >  	return __raw_readl(map->map_priv_1 + ofs);
> >  }
> >
> > +__u64 physmap_read64(struct map_info *map, unsigned long ofs)
> > +{
> > +	return __raw_readll(map->map_priv_1 + ofs);
> > +}
>
> __raw_readll is not defined in our kernel (2.4.2 based). Worse, I
> couldn't find that definition in the 2.4.17 kernel, either. Is this
> specific to your private kernel?
>
> Joern
>
> PS: The same applies to __raw_writell, of course.
>
> ______________________________________________________
> Linux MTD discussion mailing list
> http://lists.infradead.org/mailman/listinfo/linux-mtd/

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2002-02-14 14:16   ` Allen Curtis
@ 2002-02-14 16:16     ` Adam Wozniak
  2002-02-14 16:48       ` Jörn Engel
  0 siblings, 1 reply; 12+ messages in thread
From: Adam Wozniak @ 2002-02-14 16:16 UTC (permalink / raw)
  To: acurtis; +Cc: Jörn Engel, linux-mtd

in my physmap.c (I should probably check this in):

__u64 physmap_read64(struct map_info *map, unsigned long ofs)
{
#ifndef __raw_readll
#error Your architecture needs a __raw_readll in asm/io.h
#endif
        return __raw_readll(map->map_priv_1 + ofs);
}

void physmap_write64(struct map_info *map, __u64 d, unsigned long adr)
{
#ifndef __raw_writell
#error Your architecture needs a __raw_writell in asm/io.h
#endif
        __raw_writell(d, map->map_priv_1 + adr);
        mb();
}

from my include/asm/io.h (this will vary from architecture to
architecture)

#define __raw_readll(addr)      (*(volatile unsigned long long *)(addr)) 
#define __raw_writell(v, addr)  (*(volatile unsigned long long *)(addr)
= (v))

(right next to __raw_writel and all those guys)

Allen Curtis wrote:
> 
> I have another version of 64-bit bus support which does not change any of
> the variable types and only changes one function prototype. It probably is
> not as fast as this 64-bit version, assuming that it is really doing 64-bit
> bus accesses, but it is a very low impact solution.

Whether or not you really do 64 bit bus accesses is going to be compiler
dependant.  If it does, then everything is good.  If it doesn't, it most
likely won't be any worse than anything you come up with by hand.  IMHO
it would be a shame to break this for people who have tools which really
do 64 bit accesses on architectures that can benefit from it.

--Adam
-- 
Adam Wozniak (KG6GZR)   COM DEV Wireless - Digital and Software Systems
awozniak@comdev.cc      3450 Broad St. 107, San Luis Obispo, CA 93401
                        http://www.comdev.cc
                        Voice: (805) 544-1089       Fax: (805) 544-2055

^ permalink raw reply	[flat|nested] 12+ messages in thread

* Re: patch for 64 bit wide flash
  2002-02-14 16:16     ` Adam Wozniak
@ 2002-02-14 16:48       ` Jörn Engel
  0 siblings, 0 replies; 12+ messages in thread
From: Jörn Engel @ 2002-02-14 16:48 UTC (permalink / raw)
  To: Adam Wozniak; +Cc: acurtis, linux-mtd

Hi!

> in my physmap.c (I should probably check this in):
> 
> __u64 physmap_read64(struct map_info *map, unsigned long ofs)
> {
> #ifndef __raw_readll
> #error Your architecture needs a __raw_readll in asm/io.h
> #endif
>         return __raw_readll(map->map_priv_1 + ofs);
> }

It is already checked in. As a result, I hit your #error and was 
really happy. ;-)

David said, he fixed that, but I haven't checked yet.

> #define __raw_readll(addr)      (*(volatile unsigned long long*)(addr)) 
> #define __raw_writell(v, addr)  (*(volatile unsigned long long*)(addr) = (v))

> > I have another version of 64-bit bus support which does not change any of
> > the variable types and only changes one function prototype. It probably is
> > not as fast as this 64-bit version, assuming that it is really doing 64-bit
> > bus accesses, but it is a very low impact solution.
> 
> Whether or not you really do 64 bit bus accesses is going to be compiler
> dependant.  If it does, then everything is good.  If it doesn't, it most
> likely won't be any worse than anything you come up with by hand. IMHO
> it would be a shame to break this for people who have tools which really
> do 64 bit accesses on architectures that can benefit from it.

I agree. This solution appears quite sound and solid. It only has to
have a little more testing, as there is propably only one user, to
this moment. Adam, count me in, as soon as I find a little free time.

-- 
Remember that not getting what you want is sometimes a wonderful
stroke of luck.
-- reputely from the Dalai Lama, unverified

^ permalink raw reply	[flat|nested] 12+ messages in thread

end of thread, other threads:[~2002-02-14 16:37 UTC | newest]

Thread overview: 12+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2001-12-29  0:47 patch for 64 bit wide flash Allen Curtis
2001-12-31 16:01 ` adam.wozniak
  -- strict thread matches above, loose matches on Subject: below --
2001-12-18 23:27 Adam Wozniak
2001-12-21  9:14 ` David Woodhouse
2001-12-21 16:30   ` Adam Wozniak
2001-12-27 23:31   ` Adam Wozniak
2002-02-14 12:32 ` Jörn Engel
2002-02-14 12:38   ` David Woodhouse
2002-02-14 12:58     ` Jörn Engel
2002-02-14 14:16   ` Allen Curtis
2002-02-14 16:16     ` Adam Wozniak
2002-02-14 16:48       ` Jörn Engel

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox