LinuxPPC-Dev Archive on lore.kernel.org
 help / color / mirror / Atom feed
* [PATCH] Support 8xx based Silicon Turnkey XTc
From: Pantelis Antoniou @ 2005-12-05 19:15 UTC (permalink / raw)
  To: Marcelo Tosatti, Dan Malek, Robert Applebaum, linuxppc-embedded,
	Benjamin Herrenschmidt

Support of Silicon Turnkey's XTc.

---
commit fac9bbd80d8f8ab3c6af5a417f804dbf8537c700
tree 7863f94249651a26ca3eb29aed4c65c214968dda
parent e4f5c82a92c2a546a16af1614114eec19120e40a
author Pantelis Antoniou <pantelis.antoniou@gmail.com> Mon, 05 Dec 2005 21:13:56 +0200
committer Pantelis Antoniou <pantelis.antoniou@gmail.com> Mon, 05 Dec 2005 21:13:56 +0200

 arch/ppc/Kconfig                  |    5 
 arch/ppc/configs/stxxtc_defconfig |  804 +++++++++++++++++++++++++++++++++++++
 arch/ppc/platforms/Makefile       |    1 
 arch/ppc/platforms/stxxtc.h       |  285 +++++++++++++
 arch/ppc/platforms/stxxtc_setup.c |  193 +++++++++
 arch/ppc/syslib/m8xx_setup.c      |   14 +
 drivers/mtd/maps/Kconfig          |    6 
 drivers/mtd/maps/Makefile         |    1 
 drivers/mtd/maps/stxxtc_nor.c     |  326 +++++++++++++++
 drivers/mtd/nand/Kconfig          |    8 
 drivers/mtd/nand/Makefile         |    1 
 drivers/mtd/nand/stxxtc_nand.c    |  277 +++++++++++++
 include/asm-ppc/mpc8xx.h          |    4 
 13 files changed, 1922 insertions(+), 3 deletions(-)

diff --git a/arch/ppc/Kconfig b/arch/ppc/Kconfig
--- a/arch/ppc/Kconfig
+++ b/arch/ppc/Kconfig
@@ -504,6 +504,11 @@ config WINCEPT
 	  MPC821 PowerPC, introduced in 1998 and designed to be used in
 	  thin-client machines.  Say Y to support it directly.
 
+config STXXTC
+	bool "Silicon Turnkey eXpress XTc"
+	help
+	  Select STXXTC if configuring for an Silicon Turnkey eXpress XTc
+
 endchoice
 
 choice
diff --git a/arch/ppc/configs/stxxtc_defconfig b/arch/ppc/configs/stxxtc_defconfig
new file mode 100644
--- /dev/null
+++ b/arch/ppc/configs/stxxtc_defconfig
@@ -0,0 +1,804 @@
+#
+# Automatically generated make config: don't edit
+# Linux kernel version: 2.6.15-rc5
+# Mon Dec  5 19:57:09 2005
+#
+CONFIG_MMU=y
+CONFIG_GENERIC_HARDIRQS=y
+CONFIG_RWSEM_XCHGADD_ALGORITHM=y
+CONFIG_GENERIC_CALIBRATE_DELAY=y
+CONFIG_PPC=y
+CONFIG_PPC32=y
+CONFIG_GENERIC_NVRAM=y
+CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y
+CONFIG_ARCH_MAY_HAVE_PC_FDC=y
+
+#
+# Code maturity level options
+#
+CONFIG_EXPERIMENTAL=y
+CONFIG_CLEAN_COMPILE=y
+CONFIG_BROKEN_ON_SMP=y
+CONFIG_INIT_ENV_ARG_LIMIT=32
+
+#
+# General setup
+#
+CONFIG_LOCALVERSION="-stxxtc"
+# CONFIG_LOCALVERSION_AUTO is not set
+# CONFIG_SWAP is not set
+CONFIG_SYSVIPC=y
+# CONFIG_POSIX_MQUEUE is not set
+# CONFIG_BSD_PROCESS_ACCT is not set
+CONFIG_SYSCTL=y
+# CONFIG_AUDIT is not set
+# CONFIG_HOTPLUG is not set
+CONFIG_KOBJECT_UEVENT=y
+# CONFIG_IKCONFIG is not set
+CONFIG_INITRAMFS_SOURCE=""
+CONFIG_EMBEDDED=y
+CONFIG_KALLSYMS=y
+CONFIG_KALLSYMS_ALL=y
+CONFIG_KALLSYMS_EXTRA_PASS=y
+CONFIG_PRINTK=y
+CONFIG_BUG=y
+CONFIG_BASE_FULL=y
+CONFIG_FUTEX=y
+CONFIG_EPOLL=y
+# CONFIG_CC_OPTIMIZE_FOR_SIZE is not set
+CONFIG_SHMEM=y
+CONFIG_CC_ALIGN_FUNCTIONS=0
+CONFIG_CC_ALIGN_LABELS=0
+CONFIG_CC_ALIGN_LOOPS=0
+CONFIG_CC_ALIGN_JUMPS=0
+# CONFIG_TINY_SHMEM is not set
+CONFIG_BASE_SMALL=0
+
+#
+# Loadable module support
+#
+CONFIG_MODULES=y
+CONFIG_MODULE_UNLOAD=y
+# CONFIG_MODULE_FORCE_UNLOAD is not set
+CONFIG_OBSOLETE_MODPARM=y
+# CONFIG_MODVERSIONS is not set
+# CONFIG_MODULE_SRCVERSION_ALL is not set
+# CONFIG_KMOD is not set
+
+#
+# Block layer
+#
+# CONFIG_LBD is not set
+
+#
+# IO Schedulers
+#
+CONFIG_IOSCHED_NOOP=y
+CONFIG_IOSCHED_AS=y
+CONFIG_IOSCHED_DEADLINE=y
+CONFIG_IOSCHED_CFQ=y
+CONFIG_DEFAULT_AS=y
+# CONFIG_DEFAULT_DEADLINE is not set
+# CONFIG_DEFAULT_CFQ is not set
+# CONFIG_DEFAULT_NOOP is not set
+CONFIG_DEFAULT_IOSCHED="anticipatory"
+
+#
+# Processor
+#
+# CONFIG_6xx is not set
+# CONFIG_40x is not set
+# CONFIG_44x is not set
+# CONFIG_POWER3 is not set
+# CONFIG_POWER4 is not set
+CONFIG_8xx=y
+# CONFIG_E200 is not set
+# CONFIG_E500 is not set
+CONFIG_MATH_EMULATION=y
+# CONFIG_KEXEC is not set
+# CONFIG_CPU_FREQ is not set
+# CONFIG_WANT_EARLY_SERIAL is not set
+CONFIG_EMBEDDEDBOOT=y
+CONFIG_NOT_COHERENT_CACHE=y
+
+#
+# Platform options
+#
+# CONFIG_RPXLITE is not set
+# CONFIG_RPXCLASSIC is not set
+# CONFIG_BSEIP is not set
+# CONFIG_MPC8XXFADS is not set
+# CONFIG_MPC86XADS is not set
+# CONFIG_MPC885ADS is not set
+# CONFIG_TQM823L is not set
+# CONFIG_TQM850L is not set
+# CONFIG_TQM855L is not set
+# CONFIG_TQM860L is not set
+# CONFIG_FPS850L is not set
+# CONFIG_IVMS8 is not set
+# CONFIG_IVML24 is not set
+# CONFIG_HERMES_PRO is not set
+# CONFIG_IP860 is not set
+# CONFIG_LWMON is not set
+# CONFIG_PCU_E is not set
+# CONFIG_CCM is not set
+# CONFIG_LANTEC is not set
+# CONFIG_MBX is not set
+# CONFIG_WINCEPT is not set
+CONFIG_STXXTC=y
+CONFIG_CPM1=y
+# CONFIG_HIGHMEM is not set
+# CONFIG_HZ_100 is not set
+CONFIG_HZ_250=y
+# CONFIG_HZ_1000 is not set
+CONFIG_HZ=250
+CONFIG_PREEMPT_NONE=y
+# CONFIG_PREEMPT_VOLUNTARY is not set
+# CONFIG_PREEMPT is not set
+CONFIG_SELECT_MEMORY_MODEL=y
+CONFIG_FLATMEM_MANUAL=y
+# CONFIG_DISCONTIGMEM_MANUAL is not set
+# CONFIG_SPARSEMEM_MANUAL is not set
+CONFIG_FLATMEM=y
+CONFIG_FLAT_NODE_MEM_MAP=y
+# CONFIG_SPARSEMEM_STATIC is not set
+CONFIG_SPLIT_PTLOCK_CPUS=4
+CONFIG_BINFMT_ELF=y
+# CONFIG_BINFMT_MISC is not set
+# CONFIG_CMDLINE_BOOL is not set
+# CONFIG_PM is not set
+# CONFIG_SOFTWARE_SUSPEND is not set
+# CONFIG_SECCOMP is not set
+CONFIG_ISA_DMA_API=y
+
+#
+# Bus options
+#
+# CONFIG_PPC_I8259 is not set
+# CONFIG_PCI is not set
+# CONFIG_PCI_DOMAINS is not set
+# CONFIG_PCI_QSPAN is not set
+
+#
+# PCCARD (PCMCIA/CardBus) support
+#
+# CONFIG_PCCARD is not set
+
+#
+# Advanced setup
+#
+CONFIG_ADVANCED_OPTIONS=y
+CONFIG_HIGHMEM_START=0xfe000000
+# CONFIG_LOWMEM_SIZE_BOOL is not set
+CONFIG_LOWMEM_SIZE=0x30000000
+# CONFIG_KERNEL_START_BOOL is not set
+CONFIG_KERNEL_START=0xc0000000
+# CONFIG_TASK_SIZE_BOOL is not set
+CONFIG_TASK_SIZE=0x80000000
+CONFIG_CONSISTENT_START_BOOL=y
+CONFIG_CONSISTENT_START=0xe0000000
+# CONFIG_CONSISTENT_SIZE_BOOL is not set
+CONFIG_CONSISTENT_SIZE=0x00200000
+# CONFIG_BOOT_LOAD_BOOL is not set
+CONFIG_BOOT_LOAD=0x00400000
+# CONFIG_PIN_TLB is not set
+
+#
+# Networking
+#
+CONFIG_NET=y
+
+#
+# Networking options
+#
+CONFIG_PACKET=y
+# CONFIG_PACKET_MMAP is not set
+CONFIG_UNIX=y
+# CONFIG_NET_KEY is not set
+CONFIG_INET=y
+CONFIG_IP_MULTICAST=y
+# CONFIG_IP_ADVANCED_ROUTER is not set
+CONFIG_IP_FIB_HASH=y
+CONFIG_IP_PNP=y
+# CONFIG_IP_PNP_DHCP is not set
+CONFIG_IP_PNP_BOOTP=y
+# CONFIG_IP_PNP_RARP is not set
+# CONFIG_NET_IPIP is not set
+# CONFIG_NET_IPGRE is not set
+# CONFIG_IP_MROUTE is not set
+# CONFIG_ARPD is not set
+CONFIG_SYN_COOKIES=y
+# CONFIG_INET_AH is not set
+# CONFIG_INET_ESP is not set
+# CONFIG_INET_IPCOMP is not set
+# CONFIG_INET_TUNNEL is not set
+CONFIG_INET_DIAG=y
+CONFIG_INET_TCP_DIAG=y
+# CONFIG_TCP_CONG_ADVANCED is not set
+CONFIG_TCP_CONG_BIC=y
+# CONFIG_IPV6 is not set
+# CONFIG_NETFILTER is not set
+
+#
+# DCCP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_DCCP is not set
+
+#
+# SCTP Configuration (EXPERIMENTAL)
+#
+# CONFIG_IP_SCTP is not set
+# CONFIG_ATM is not set
+# CONFIG_BRIDGE is not set
+# CONFIG_VLAN_8021Q is not set
+# CONFIG_DECNET is not set
+# CONFIG_LLC2 is not set
+# CONFIG_IPX is not set
+# CONFIG_ATALK is not set
+# CONFIG_X25 is not set
+# CONFIG_LAPB is not set
+# CONFIG_NET_DIVERT is not set
+# CONFIG_ECONET is not set
+# CONFIG_WAN_ROUTER is not set
+
+#
+# QoS and/or fair queueing
+#
+# CONFIG_NET_SCHED is not set
+
+#
+# Network testing
+#
+# CONFIG_NET_PKTGEN is not set
+# CONFIG_HAMRADIO is not set
+# CONFIG_IRDA is not set
+# CONFIG_BT is not set
+# CONFIG_IEEE80211 is not set
+
+#
+# Device Drivers
+#
+
+#
+# Generic Driver Options
+#
+CONFIG_STANDALONE=y
+CONFIG_PREVENT_FIRMWARE_BUILD=y
+# CONFIG_FW_LOADER is not set
+# CONFIG_DEBUG_DRIVER is not set
+
+#
+# Connector - unified userspace <-> kernelspace linker
+#
+# CONFIG_CONNECTOR is not set
+
+#
+# Memory Technology Devices (MTD)
+#
+CONFIG_MTD=y
+# CONFIG_MTD_DEBUG is not set
+CONFIG_MTD_CONCAT=y
+CONFIG_MTD_PARTITIONS=y
+# CONFIG_MTD_REDBOOT_PARTS is not set
+CONFIG_MTD_CMDLINE_PARTS=y
+
+#
+# User Modules And Translation Layers
+#
+CONFIG_MTD_CHAR=y
+CONFIG_MTD_BLOCK=y
+# CONFIG_FTL is not set
+# CONFIG_NFTL is not set
+# CONFIG_INFTL is not set
+# CONFIG_RFD_FTL is not set
+
+#
+# RAM/ROM/Flash chip drivers
+#
+CONFIG_MTD_CFI=y
+CONFIG_MTD_JEDECPROBE=y
+CONFIG_MTD_GEN_PROBE=y
+CONFIG_MTD_CFI_ADV_OPTIONS=y
+CONFIG_MTD_CFI_NOSWAP=y
+# CONFIG_MTD_CFI_BE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_LE_BYTE_SWAP is not set
+# CONFIG_MTD_CFI_GEOMETRY is not set
+CONFIG_MTD_MAP_BANK_WIDTH_1=y
+CONFIG_MTD_MAP_BANK_WIDTH_2=y
+CONFIG_MTD_MAP_BANK_WIDTH_4=y
+# CONFIG_MTD_MAP_BANK_WIDTH_8 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_16 is not set
+# CONFIG_MTD_MAP_BANK_WIDTH_32 is not set
+CONFIG_MTD_CFI_I1=y
+CONFIG_MTD_CFI_I2=y
+# CONFIG_MTD_CFI_I4 is not set
+# CONFIG_MTD_CFI_I8 is not set
+# CONFIG_MTD_OTP is not set
+CONFIG_MTD_CFI_INTELEXT=y
+CONFIG_MTD_CFI_AMDSTD=y
+CONFIG_MTD_CFI_AMDSTD_RETRY=0
+CONFIG_MTD_CFI_STAA=y
+CONFIG_MTD_CFI_UTIL=y
+# CONFIG_MTD_RAM is not set
+# CONFIG_MTD_ROM is not set
+# CONFIG_MTD_ABSENT is not set
+
+#
+# Mapping drivers for chip access
+#
+# CONFIG_MTD_COMPLEX_MAPPINGS is not set
+# CONFIG_MTD_PHYSMAP is not set
+# CONFIG_MTD_CFI_FLAGADM is not set
+# CONFIG_MTD_PLATRAM is not set
+CONFIG_MTD_STXXTC_NOR=y
+
+#
+# Self-contained MTD device drivers
+#
+# CONFIG_MTD_SLRAM is not set
+# CONFIG_MTD_PHRAM is not set
+# CONFIG_MTD_MTDRAM is not set
+# CONFIG_MTD_BLKMTD is not set
+# CONFIG_MTD_BLOCK2MTD is not set
+
+#
+# Disk-On-Chip Device Drivers
+#
+# CONFIG_MTD_DOC2000 is not set
+# CONFIG_MTD_DOC2001 is not set
+# CONFIG_MTD_DOC2001PLUS is not set
+
+#
+# NAND Flash Device Drivers
+#
+CONFIG_MTD_NAND=y
+CONFIG_MTD_NAND_VERIFY_WRITE=y
+CONFIG_MTD_NAND_IDS=y
+# CONFIG_MTD_NAND_DISKONCHIP is not set
+# CONFIG_MTD_NAND_NANDSIM is not set
+CONFIG_MTD_NAND_STXXTC=y
+
+#
+# OneNAND Flash Device Drivers
+#
+# CONFIG_MTD_ONENAND is not set
+
+#
+# Parallel port support
+#
+# CONFIG_PARPORT is not set
+
+#
+# Plug and Play support
+#
+
+#
+# Block devices
+#
+# CONFIG_BLK_DEV_FD is not set
+# CONFIG_BLK_DEV_COW_COMMON is not set
+CONFIG_BLK_DEV_LOOP=y
+# CONFIG_BLK_DEV_CRYPTOLOOP is not set
+# CONFIG_BLK_DEV_NBD is not set
+CONFIG_BLK_DEV_RAM=y
+CONFIG_BLK_DEV_RAM_COUNT=16
+CONFIG_BLK_DEV_RAM_SIZE=4096
+CONFIG_BLK_DEV_INITRD=y
+# CONFIG_CDROM_PKTCDVD is not set
+# CONFIG_ATA_OVER_ETH is not set
+
+#
+# ATA/ATAPI/MFM/RLL support
+#
+# CONFIG_IDE is not set
+
+#
+# SCSI device support
+#
+# CONFIG_RAID_ATTRS is not set
+# CONFIG_SCSI is not set
+
+#
+# Multi-device support (RAID and LVM)
+#
+# CONFIG_MD is not set
+
+#
+# Fusion MPT device support
+#
+# CONFIG_FUSION is not set
+
+#
+# IEEE 1394 (FireWire) support
+#
+
+#
+# I2O device support
+#
+
+#
+# Macintosh device drivers
+#
+# CONFIG_WINDFARM is not set
+
+#
+# Network device support
+#
+CONFIG_NETDEVICES=y
+# CONFIG_DUMMY is not set
+# CONFIG_BONDING is not set
+# CONFIG_EQUALIZER is not set
+# CONFIG_TUN is not set
+
+#
+# PHY device support
+#
+# CONFIG_PHYLIB is not set
+
+#
+# Ethernet (10 or 100Mbit)
+#
+CONFIG_NET_ETHERNET=y
+CONFIG_MII=y
+# CONFIG_FEC_8XX is not set
+CONFIG_FS_ENET=y
+# CONFIG_FS_ENET_HAS_SCC is not set
+CONFIG_FS_ENET_HAS_FEC=y
+
+#
+# Ethernet (1000 Mbit)
+#
+
+#
+# Ethernet (10000 Mbit)
+#
+
+#
+# Token Ring devices
+#
+
+#
+# Wireless LAN (non-hamradio)
+#
+# CONFIG_NET_RADIO is not set
+
+#
+# Wan interfaces
+#
+# CONFIG_WAN is not set
+# CONFIG_PPP is not set
+# CONFIG_SLIP is not set
+# CONFIG_SHAPER is not set
+# CONFIG_NETCONSOLE is not set
+# CONFIG_NETPOLL is not set
+# CONFIG_NET_POLL_CONTROLLER is not set
+
+#
+# ISDN subsystem
+#
+# CONFIG_ISDN is not set
+
+#
+# Telephony Support
+#
+# CONFIG_PHONE is not set
+
+#
+# Input device support
+#
+# CONFIG_INPUT is not set
+
+#
+# Hardware I/O ports
+#
+# CONFIG_SERIO is not set
+# CONFIG_GAMEPORT is not set
+
+#
+# Character devices
+#
+# CONFIG_VT is not set
+# CONFIG_SERIAL_NONSTANDARD is not set
+
+#
+# Serial drivers
+#
+# CONFIG_SERIAL_8250 is not set
+
+#
+# Non-8250 serial port support
+#
+CONFIG_SERIAL_CORE=y
+CONFIG_SERIAL_CORE_CONSOLE=y
+CONFIG_SERIAL_CPM=y
+CONFIG_SERIAL_CPM_CONSOLE=y
+# CONFIG_SERIAL_CPM_SCC1 is not set
+# CONFIG_SERIAL_CPM_SCC2 is not set
+# CONFIG_SERIAL_CPM_SCC3 is not set
+# CONFIG_SERIAL_CPM_SCC4 is not set
+CONFIG_SERIAL_CPM_SMC1=y
+# CONFIG_SERIAL_CPM_SMC2 is not set
+CONFIG_UNIX98_PTYS=y
+CONFIG_LEGACY_PTYS=y
+CONFIG_LEGACY_PTY_COUNT=256
+
+#
+# IPMI
+#
+# CONFIG_IPMI_HANDLER is not set
+
+#
+# Watchdog Cards
+#
+CONFIG_WATCHDOG=y
+# CONFIG_WATCHDOG_NOWAYOUT is not set
+
+#
+# Watchdog Device Drivers
+#
+# CONFIG_SOFT_WATCHDOG is not set
+CONFIG_8xx_WDT=y
+# CONFIG_NVRAM is not set
+# CONFIG_GEN_RTC is not set
+# CONFIG_DTLK is not set
+# CONFIG_R3964 is not set
+
+#
+# Ftape, the floppy tape device driver
+#
+# CONFIG_AGP is not set
+# CONFIG_RAW_DRIVER is not set
+
+#
+# TPM devices
+#
+# CONFIG_TCG_TPM is not set
+# CONFIG_TELCLOCK is not set
+
+#
+# I2C support
+#
+# CONFIG_I2C is not set
+
+#
+# Dallas's 1-wire bus
+#
+# CONFIG_W1 is not set
+
+#
+# Hardware Monitoring support
+#
+CONFIG_HWMON=y
+# CONFIG_HWMON_VID is not set
+# CONFIG_HWMON_DEBUG_CHIP is not set
+
+#
+# Misc devices
+#
+
+#
+# Multimedia Capabilities Port drivers
+#
+
+#
+# Multimedia devices
+#
+# CONFIG_VIDEO_DEV is not set
+
+#
+# Digital Video Broadcasting Devices
+#
+# CONFIG_DVB is not set
+
+#
+# Graphics support
+#
+# CONFIG_FB is not set
+
+#
+# Sound
+#
+# CONFIG_SOUND is not set
+
+#
+# USB support
+#
+# CONFIG_USB_ARCH_HAS_HCD is not set
+# CONFIG_USB_ARCH_HAS_OHCI is not set
+
+#
+# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support'
+#
+
+#
+# USB Gadget Support
+#
+# CONFIG_USB_GADGET is not set
+
+#
+# MMC/SD Card support
+#
+# CONFIG_MMC is not set
+
+#
+# InfiniBand support
+#
+
+#
+# SN Devices
+#
+
+#
+# File systems
+#
+# CONFIG_EXT2_FS is not set
+# CONFIG_EXT3_FS is not set
+# CONFIG_JBD is not set
+# CONFIG_REISERFS_FS is not set
+# CONFIG_JFS_FS is not set
+# CONFIG_FS_POSIX_ACL is not set
+# CONFIG_XFS_FS is not set
+# CONFIG_MINIX_FS is not set
+# CONFIG_ROMFS_FS is not set
+CONFIG_INOTIFY=y
+# CONFIG_QUOTA is not set
+# CONFIG_DNOTIFY is not set
+# CONFIG_AUTOFS_FS is not set
+# CONFIG_AUTOFS4_FS is not set
+# CONFIG_FUSE_FS is not set
+
+#
+# CD-ROM/DVD Filesystems
+#
+# CONFIG_ISO9660_FS is not set
+# CONFIG_UDF_FS is not set
+
+#
+# DOS/FAT/NT Filesystems
+#
+# CONFIG_MSDOS_FS is not set
+# CONFIG_VFAT_FS is not set
+# CONFIG_NTFS_FS is not set
+
+#
+# Pseudo filesystems
+#
+CONFIG_PROC_FS=y
+CONFIG_PROC_KCORE=y
+CONFIG_SYSFS=y
+CONFIG_TMPFS=y
+# CONFIG_HUGETLB_PAGE is not set
+CONFIG_RAMFS=y
+# CONFIG_RELAYFS_FS is not set
+
+#
+# Miscellaneous filesystems
+#
+# CONFIG_ADFS_FS is not set
+# CONFIG_AFFS_FS is not set
+# CONFIG_HFS_FS is not set
+# CONFIG_HFSPLUS_FS is not set
+# CONFIG_BEFS_FS is not set
+# CONFIG_BFS_FS is not set
+# CONFIG_EFS_FS is not set
+# CONFIG_JFFS_FS is not set
+CONFIG_JFFS2_FS=y
+CONFIG_JFFS2_FS_DEBUG=0
+CONFIG_JFFS2_FS_WRITEBUFFER=y
+# CONFIG_JFFS2_SUMMARY is not set
+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set
+CONFIG_JFFS2_ZLIB=y
+CONFIG_JFFS2_RTIME=y
+# CONFIG_JFFS2_RUBIN is not set
+CONFIG_CRAMFS=y
+# CONFIG_VXFS_FS is not set
+# CONFIG_HPFS_FS is not set
+# CONFIG_QNX4FS_FS is not set
+# CONFIG_SYSV_FS is not set
+# CONFIG_UFS_FS is not set
+
+#
+# Network File Systems
+#
+CONFIG_NFS_FS=y
+CONFIG_NFS_V3=y
+# CONFIG_NFS_V3_ACL is not set
+# CONFIG_NFS_V4 is not set
+# CONFIG_NFS_DIRECTIO is not set
+# CONFIG_NFSD is not set
+CONFIG_ROOT_NFS=y
+CONFIG_LOCKD=y
+CONFIG_LOCKD_V4=y
+CONFIG_NFS_COMMON=y
+CONFIG_SUNRPC=y
+# CONFIG_RPCSEC_GSS_KRB5 is not set
+# CONFIG_RPCSEC_GSS_SPKM3 is not set
+# CONFIG_SMB_FS is not set
+# CONFIG_CIFS is not set
+# CONFIG_NCP_FS is not set
+# CONFIG_CODA_FS is not set
+# CONFIG_AFS_FS is not set
+# CONFIG_9P_FS is not set
+
+#
+# Partition Types
+#
+CONFIG_PARTITION_ADVANCED=y
+# CONFIG_ACORN_PARTITION is not set
+# CONFIG_OSF_PARTITION is not set
+# CONFIG_AMIGA_PARTITION is not set
+# CONFIG_ATARI_PARTITION is not set
+# CONFIG_MAC_PARTITION is not set
+# CONFIG_MSDOS_PARTITION is not set
+# CONFIG_LDM_PARTITION is not set
+# CONFIG_SGI_PARTITION is not set
+# CONFIG_ULTRIX_PARTITION is not set
+# CONFIG_SUN_PARTITION is not set
+# CONFIG_EFI_PARTITION is not set
+
+#
+# Native Language Support
+#
+# CONFIG_NLS is not set
+
+#
+# MPC8xx CPM Options
+#
+# CONFIG_SCC_ENET is not set
+# CONFIG_FEC_ENET is not set
+
+#
+# Generic MPC8xx Options
+#
+CONFIG_8xx_COPYBACK=y
+# CONFIG_8xx_CPU6 is not set
+CONFIG_NO_UCODE_PATCH=y
+# CONFIG_USB_SOF_UCODE_PATCH is not set
+# CONFIG_I2C_SPI_UCODE_PATCH is not set
+# CONFIG_I2C_SPI_SMC1_UCODE_PATCH is not set
+
+#
+# Library routines
+#
+# CONFIG_CRC_CCITT is not set
+# CONFIG_CRC16 is not set
+CONFIG_CRC32=y
+# CONFIG_LIBCRC32C is not set
+CONFIG_ZLIB_INFLATE=y
+CONFIG_ZLIB_DEFLATE=y
+# CONFIG_PROFILING is not set
+
+#
+# Kernel hacking
+#
+# CONFIG_PRINTK_TIME is not set
+CONFIG_DEBUG_KERNEL=y
+# CONFIG_MAGIC_SYSRQ is not set
+CONFIG_LOG_BUF_SHIFT=14
+# CONFIG_DETECT_SOFTLOCKUP is not set
+# CONFIG_SCHEDSTATS is not set
+# CONFIG_DEBUG_SLAB is not set
+# CONFIG_DEBUG_SPINLOCK is not set
+# CONFIG_DEBUG_SPINLOCK_SLEEP is not set
+# CONFIG_DEBUG_KOBJECT is not set
+CONFIG_DEBUG_INFO=y
+# CONFIG_DEBUG_FS is not set
+# CONFIG_DEBUG_VM is not set
+# CONFIG_RCU_TORTURE_TEST is not set
+# CONFIG_XMON is not set
+# CONFIG_BDI_SWITCH is not set
+
+#
+# Security options
+#
+# CONFIG_KEYS is not set
+# CONFIG_SECURITY is not set
+
+#
+# Cryptographic options
+#
+# CONFIG_CRYPTO is not set
+
+#
+# Hardware crypto devices
+#
diff --git a/arch/ppc/platforms/Makefile b/arch/ppc/platforms/Makefile
--- a/arch/ppc/platforms/Makefile
+++ b/arch/ppc/platforms/Makefile
@@ -45,6 +45,7 @@ obj-$(CONFIG_SBC82xx)		+= sbc82xx.o
 obj-$(CONFIG_SPRUCE)		+= spruce.o
 obj-$(CONFIG_LITE5200)		+= lite5200.o
 obj-$(CONFIG_EV64360)		+= ev64360.o
+obj-$(CONFIG_STXXTC)		+= stxxtc_setup.o
 
 ifeq ($(CONFIG_SMP),y)
 obj-$(CONFIG_PPC_PMAC)		+= pmac_smp.o
diff --git a/arch/ppc/platforms/stxxtc.h b/arch/ppc/platforms/stxxtc.h
new file mode 100644
--- /dev/null
+++ b/arch/ppc/platforms/stxxtc.h
@@ -0,0 +1,285 @@
+/*
+ * A collection of structures, addresses, and values associated with
+ * the STXXTC systems.
+ *
+ * Copyright (c) 2005 Pantelis Antoniou <pantelis.antoniou@gmail.com>
+ *                    Dan Malek <dan@embeddedalley.com>
+ *
+ */
+#ifndef __MACH_STXXTC_DEFS
+#define __MACH_STXXTC_DEFS
+
+#include <linux/config.h>
+
+#ifndef __ASSEMBLY__
+
+#include <asm/ppcboot.h>
+
+#include <asm/8xx_immap.h>
+#include <asm/commproc.h>
+#include <asm/mpc8xx.h>
+#include <asm/delay.h>
+
+#endif
+
+#define	IMAP_ADDR	0xFF000000		/* physical base address of IMMR area	*/
+#define IMAP_SIZE	(64 * 1024)		/* mapped size of IMMR area		*/
+
+/* We don't use the 8259.
+*/
+#define NR_8259_INTS	0
+
+#define NAND_SIZE	0x00010000
+#define NAND_BASE	0xF1000000
+
+/*-----------------------------------------------------------------------
+ * PCMCIA stuff
+ *-----------------------------------------------------------------------
+ *
+ */
+#define PCMCIA_MEM_SIZE		( 64 << 20 )
+
+#define	MAX_HWIFS	1	/* overwrite default in include/asm-ppc/ide.h	*/
+
+/*
+ * Definitions for IDE0 Interface
+ */
+#define IDE0_BASE_OFFSET		0
+#define IDE0_DATA_REG_OFFSET		(PCMCIA_MEM_SIZE + 0x320)
+#define IDE0_ERROR_REG_OFFSET		(2 * PCMCIA_MEM_SIZE + 0x320 + 1)
+#define IDE0_NSECTOR_REG_OFFSET		(2 * PCMCIA_MEM_SIZE + 0x320 + 2)
+#define IDE0_SECTOR_REG_OFFSET		(2 * PCMCIA_MEM_SIZE + 0x320 + 3)
+#define IDE0_LCYL_REG_OFFSET		(2 * PCMCIA_MEM_SIZE + 0x320 + 4)
+#define IDE0_HCYL_REG_OFFSET		(2 * PCMCIA_MEM_SIZE + 0x320 + 5)
+#define IDE0_SELECT_REG_OFFSET		(2 * PCMCIA_MEM_SIZE + 0x320 + 6)
+#define IDE0_STATUS_REG_OFFSET		(2 * PCMCIA_MEM_SIZE + 0x320 + 7)
+#define IDE0_CONTROL_REG_OFFSET		0x0106
+#define IDE0_IRQ_REG_OFFSET		0x000A	/* not used			*/
+
+#define	IDE0_INTERRUPT			13
+
+/* XXX FUCK!, for IDE disk set to 0, for normal PCMCIA set to 1 */
+/* XXX don't ask me why.. */
+#if 1
+/* define IO_BASE for PCMCIA */
+#define _IO_BASE 0x80000000
+#define _IO_BASE_SIZE  (64<<10)
+#endif
+
+/***********************************************************************/
+
+/* shorthand for the ports data registers */
+#define PORTA		(((volatile immap_t *)IMAP_ADDR)->im_ioport.iop_padat)
+#define PORTB		(((volatile immap_t *)IMAP_ADDR)->im_cpm.cp_pbdat)
+#define PORTC		(((volatile immap_t *)IMAP_ADDR)->im_ioport.iop_pcdat)
+#define PORTD		(((volatile immap_t *)IMAP_ADDR)->im_ioport.iop_pddat)
+#define PORTE		(((volatile immap_t *)IMAP_ADDR)->im_cpm.cp_pedat)
+
+/********************************************************************************/
+
+#define PIN_PORT_EQ(p, x)	((void *) & x ## _PORT == (void *) & p)
+#define PIN_PORT_NE(p, x)	((void *) & x ## _PORT != (void *) & p)
+
+#define PIN_PORT_RW(x)		(PIN_PORT_NE(PORTXWO, x) && PIN_PORT_NE(PORTXRO, x))
+#define PIN_PORT_RO(x)		PIN_PORT_EQ(PORTXRO, x)
+#define PIN_PORT_WO(x)		PIN_PORT_EQ(PORTXWO, x)
+
+/********************************************************************************/
+
+#define PIN_SFT(x) ((sizeof(x ## _PORT) * 8 - 1) - x ## _BIT)
+#define PIN_MSK(x) (1U << PIN_SFT(x))
+
+/********************************************************************************/
+
+/* normal m8xx pins */
+#define _PIN_HI(x) \
+	do { \
+		x ## _PORT |=  PIN_MSK(x); \
+	} while(0)
+
+#define _PIN_LO(x) \
+	do { \
+		x ## _PORT &= ~PIN_MSK(x); \
+	} while(0)
+
+#define _PIN_TGL(x) \
+	do { \
+		x ## _PORT ^=  PIN_MSK(x); \
+	} while(0)
+
+#define _PIN_GET(x) \
+	(!!(x ## _PORT & PIN_MSK(x)))
+
+#define _PIN_SET(x, v)	\
+	do { \
+		if (__builtin_constant_p(v)) { \
+			if ((v) != 0) \
+				_PIN_HI(x); \
+			else \
+				_PIN_LO(x); \
+		} else \
+			x ## _PORT = ( x ## _PORT & ~PIN_MSK(x)) | (!!(v) << PIN_SFT(x)); \
+	} while(0)
+
+#define _PIN_CFG_IN(x) \
+	do { \
+		if (PIN_PORT_EQ(PORTA, x)) \
+			PORTA_config(PIN_MSK(x), 0, 0); \
+		if (PIN_PORT_EQ(PORTB, x)) \
+			PORTB_config(PIN_MSK(x), 0, 0); \
+		if (PIN_PORT_EQ(PORTC, x)) \
+			PORTC_config(PIN_MSK(x), 0, 0); \
+		if (PIN_PORT_EQ(PORTD, x)) \
+			PORTD_config(PIN_MSK(x), 0, 0); \
+		if (PIN_PORT_EQ(PORTE, x)) \
+			PORTE_config(PIN_MSK(x), 0, 0); \
+	} while(0)
+
+#define _PIN_CFG_INT_ANY(x) \
+	do { \
+		if (PIN_PORT_EQ(PORTC, x)) \
+			PORTC_config(PIN_MSK(x), 0, 0); \
+	} while(0)
+
+#define _PIN_CFG_INT_FALL(x) \
+	do { \
+		if (PIN_PORT_EQ(PORTC, x)) \
+			PORTC_config(PIN_MSK(x), 0, 0); \
+	} while(0)
+
+#define _PIN_CFG_OUT(x, v) \
+	do { \
+		_PIN_SET(x, v); \
+		if (PIN_PORT_EQ(PORTA, x)) \
+			PORTA_config(0, PIN_MSK(x), 0); \
+		if (PIN_PORT_EQ(PORTB, x)) \
+			PORTB_config(0, PIN_MSK(x), 0); \
+		if (PIN_PORT_EQ(PORTC, x)) \
+			PORTC_config(0, PIN_MSK(x), 0); \
+		if (PIN_PORT_EQ(PORTD, x)) \
+			PORTD_config(0, PIN_MSK(x), 0); \
+		if (PIN_PORT_EQ(PORTE, x)) \
+			PORTE_config(0, PIN_MSK(x), 0); \
+	} while(0)
+
+#define _PIN_CFG_OUT_HI(x) _PIN_CFG_OUT(x, 1)
+#define _PIN_CFG_OUT_LO(x) _PIN_CFG_OUT(x, 0)
+
+#ifndef __ASSEMBLY__
+
+static inline void PORTA_config(uint inmsk, uint outmsk, uint dummy)
+{
+	volatile immap_t *imap = (volatile immap_t *)IMAP_ADDR;
+	ushort msk = (ushort)inmsk | (ushort)outmsk;
+
+	imap->im_ioport.iop_padir  = (imap->im_ioport.iop_padir & ~(ushort)inmsk) | (ushort)outmsk;
+	imap->im_ioport.iop_paodr &= ~msk;
+	imap->im_ioport.iop_papar &= ~msk;
+}
+
+static inline void PORTB_config(uint inmsk, uint outmsk, uint dummy)
+{
+	volatile immap_t *imap = (volatile immap_t *)IMAP_ADDR;
+	uint msk = inmsk | outmsk;
+
+	imap->im_cpm.cp_pbdir  = (imap->im_cpm.cp_pbdir & ~inmsk) | outmsk;
+	imap->im_cpm.cp_pbodr &= ~msk;
+	imap->im_cpm.cp_pbpar &= ~msk;
+}
+
+static inline void PORTC_config(uint inmsk, uint outmsk, uint fallmsk)
+{
+	volatile immap_t *imap = (volatile immap_t *)IMAP_ADDR;
+	ushort msk = (ushort)inmsk | (ushort)outmsk;
+
+	imap->im_ioport.iop_pcdir  = (imap->im_ioport.iop_pcdir & ~(ushort)inmsk) | (ushort)outmsk;
+	imap->im_ioport.iop_pcso  &= ~msk;
+	imap->im_ioport.iop_pcint  = (imap->im_ioport.iop_pcint & ~(ushort)inmsk) | ((ushort)fallmsk & (ushort)inmsk);
+	imap->im_ioport.iop_pcpar &= ~msk;
+}
+
+static inline void PORTD_config(uint inmsk, uint outmsk, uint dummy)
+{
+	volatile immap_t *imap = (volatile immap_t *)IMAP_ADDR;
+	ushort msk = (ushort)inmsk | (ushort)outmsk;
+
+	imap->im_ioport.iop_pddir  = (imap->im_ioport.iop_pddir & ~(ushort)inmsk) | (ushort)outmsk;
+	imap->im_ioport.iop_pdpar &= ~msk;
+}
+
+static inline void PORTE_config(uint inmsk, uint outmsk, uint dummy)
+{
+	volatile immap_t *imap = (volatile immap_t *)IMAP_ADDR;
+	uint msk = inmsk | outmsk;
+
+	imap->im_cpm.cp_pedir  = (imap->im_cpm.cp_pedir & ~inmsk) | outmsk;
+	imap->im_cpm.cp_peodr &= ~msk;
+	imap->im_cpm.cp_pepar &= ~msk;
+}
+
+/**********************************************/
+
+unsigned long pin_lock(void);
+void pin_unlock(unsigned long flags);
+
+#endif /* __ASSEMBLY */
+
+/******************************************************************************/
+
+/* NAND flash pins */
+
+#define F_ALE_PORT	PORTC
+#define F_ALE_BIT	15
+
+#define F_CLE_PORT	PORTB
+#define F_CLE_BIT	23
+
+#define F_CE_PORT	PORTA
+#define F_CE_BIT	7
+
+#define F_RY_BY_PORT	PORTA
+#define F_RY_BY_BIT	6
+
+/***********************************************************************/
+
+/* SPI pin definitions */
+
+#define SPI_RXD_PORT	PORTB
+#define SPI_RXD_BIT	28
+
+#define SPI_TXD_PORT	PORTB
+#define SPI_TXD_BIT	29
+
+#define SPI_CLK_PORT	PORTB
+#define SPI_CLK_BIT	30
+
+#define SPI_DELAY() 	udelay(1)
+
+#ifndef __ASSEMBLY__
+
+static inline unsigned int spi_transfer(unsigned int tx)
+{
+	unsigned int rx;
+	int i;
+
+	rx = 0;
+	for (i = 0; i < 8; i++) {
+		_PIN_SET(SPI_TXD, tx & 0x80);
+		tx <<= 1;
+		_PIN_TGL(SPI_CLK);
+		SPI_DELAY();
+		rx <<= 1;
+		rx |= _PIN_GET(SPI_RXD);
+		_PIN_TGL(SPI_CLK);
+		SPI_DELAY();
+	}
+
+	return rx;
+}
+
+#endif
+
+#define BOARD_CHIP_NAME "MPC870"
+
+#endif	/* __MACH_STXXTC_DEFS */
+
diff --git a/arch/ppc/platforms/stxxtc_setup.c b/arch/ppc/platforms/stxxtc_setup.c
new file mode 100644
--- /dev/null
+++ b/arch/ppc/platforms/stxxtc_setup.c
@@ -0,0 +1,193 @@
+/*
+ * arch/ppc/platforms/stxxtc.c
+ * 
+ * Platform setup for the Silicon Turnkey eXpress XTc
+ */
+
+#include <linux/config.h>
+#include <linux/init.h>
+#include <linux/module.h>
+#include <linux/param.h>
+#include <linux/string.h>
+#include <linux/ioport.h>
+#include <linux/device.h>
+
+#include <asm/delay.h>
+#include <asm/io.h>
+#include <asm/machdep.h>
+#include <asm/page.h>
+#include <asm/processor.h>
+#include <asm/system.h>
+#include <asm/time.h>
+#include <asm/ppcboot.h>
+#include <asm/ppc_sys.h>
+
+#include <linux/stddef.h>
+
+#include <linux/fs_enet_pd.h>
+
+#include <platforms/stxxtc.h>
+
+/***********************************************************************/
+
+#ifdef CONFIG_FW_ENV
+#include <syslib/fw_env.h>
+
+static const char *ro_vars[] = {
+	"ethaddr", "eth1addr", "adsladdr", "serial#", "usbaddr", "usb1addr", "ver", "board",
+	NULL
+};
+#endif
+
+/***********************************************************************/
+
+static spinlock_t port_spinlock;
+
+unsigned long pin_lock(void)
+{
+	unsigned long flags;
+
+	spin_lock_irqsave(&port_spinlock, flags);
+	return flags;
+}
+EXPORT_SYMBOL(pin_lock);
+
+void pin_unlock(unsigned long flags)
+{
+	spin_unlock_irqrestore(&port_spinlock, flags);
+}
+EXPORT_SYMBOL(pin_unlock);
+
+/***********************************************************************/
+
+static struct fs_mii_bus_info fec_mii_bus_info = {
+        .method                 = fsmii_fec,
+        .id                     = 0,
+};
+
+static struct fs_platform_info mpc8xx_fec_pdata[2] = {
+	[0] = {
+		.phy_addr	= 0x01,
+		.phy_irq	= -1,
+		.fs_no		= fsid_fec1,
+		.rx_ring	= 128,
+		.tx_ring	= 16,
+		.napi_weight	= 17,
+		.bus_info	= &fec_mii_bus_info,
+		.rx_copybreak	= 240,
+		.use_napi	= 1,
+		.use_rmii	= 0,
+	},
+	[1] = {
+		.phy_addr	= 0x03,
+		.phy_irq	= -1,
+		.fs_no		= fsid_fec2,
+		.rx_ring	= 128,
+		.tx_ring	= 16,
+		.napi_weight	= 17,
+		.bus_info	= &fec_mii_bus_info,
+		.rx_copybreak	= 240,
+		.use_napi	= 1,
+		.use_rmii	= 0,
+	}
+};
+
+/***********************************************************************/
+
+static void stxxtc_fixup_fs_pdata(struct platform_device *pd, int fs_no)
+{
+	struct fs_platform_info *fpi;
+	bd_t *bd;
+	int idx;
+
+	idx = fs_get_fec_index(fs_no);
+	if (idx == -1) {
+		printk(KERN_ERR "stxxtc_setup: Only FEC ethernets supported by STXXTC.\n");
+		return;
+	}
+
+	fpi = &mpc8xx_fec_pdata[idx];
+
+	bd = (bd_t *)__res;
+
+	memcpy(fpi->macaddr, bd->bi_enetaddr, 6);
+	fpi->macaddr[5] += idx;	/* different per interface */
+
+	pd->dev.platform_data = fpi;
+
+	/* we don't setup *any* pins, we trust the bootloader */
+}
+
+static void stxxtc_fixup_fec_pdata(struct platform_device *pd, int idx)
+{
+	int fs_no = fsid_fec1 + pd->id - 1;
+
+	stxxtc_fixup_fs_pdata(pd, fs_no);
+}
+
+static int stxxtc_platform_notify(struct device *dev)
+{
+	static struct {
+		const char *bus_id;
+		void (*rtn)(struct platform_device * pdev, int idx);
+	} dev_map[] = {
+		{ "fsl-cpm-fec", stxxtc_fixup_fec_pdata },
+	};
+	struct platform_device *pdev;
+	int i, j, idx;
+	const char *s;
+
+	if (dev && dev->bus_id)
+		for (i = 0; i < ARRAY_SIZE(dev_map); i++) {
+			idx = -1;
+			if ((s = strrchr(dev->bus_id, '.')) != NULL)
+				idx = (int)simple_strtol(s + 1, NULL, 10);
+			else
+				s = dev->bus_id + strlen(s);
+
+			j = s - dev->bus_id;
+
+			if (!strncmp(dev->bus_id, dev_map[i].bus_id, j)) {
+				pdev = container_of(dev, struct platform_device, dev);
+				dev_map[i].rtn(pdev, idx);
+			}
+		}
+
+	return 0;
+}
+
+int __init
+stxxtc_init(void)
+{
+	immap_t *imap = (immap_t *)IMAP_ADDR;
+
+	spin_lock_init(&port_spinlock);
+
+	imap->im_siu_conf.sc_sypcr |= 0x0000FF00;
+
+	/* configure SPI pins */
+	_PIN_CFG_OUT_HI(SPI_TXD);
+	_PIN_CFG_OUT_HI(SPI_CLK);
+	_PIN_CFG_IN(SPI_RXD);
+
+	/* configure NAND pins */
+	_PIN_CFG_OUT_LO(F_ALE);
+	_PIN_CFG_OUT_LO(F_CLE);
+	_PIN_CFG_OUT_HI(F_CE);
+	_PIN_CFG_IN(F_RY_BY);
+
+	platform_notify = stxxtc_platform_notify;
+
+	identify_ppc_sys_by_name("MPC885");
+
+	/* remove these devices */
+	ppc_sys_device_remove(MPC8xx_CPM_SCC1);
+	ppc_sys_device_remove(MPC8xx_CPM_SCC2);
+	ppc_sys_device_remove(MPC8xx_CPM_SCC3);
+	ppc_sys_device_remove(MPC8xx_CPM_SCC4);
+
+	return 0;
+}
+
+arch_initcall(stxxtc_init);
+
diff --git a/arch/ppc/syslib/m8xx_setup.c b/arch/ppc/syslib/m8xx_setup.c
--- a/arch/ppc/syslib/m8xx_setup.c
+++ b/arch/ppc/syslib/m8xx_setup.c
@@ -370,16 +370,26 @@ m8xx_map_io(void)
 #if defined(CONFIG_NETTA)
 	io_block_mapping(_IO_BASE,_IO_BASE,_IO_BASE_SIZE, _PAGE_IO);
 #endif
+#if defined(CONFIG_STXXTC)
+ 	io_block_mapping(_IO_BASE,_IO_BASE,64 << 10, _PAGE_IO);
+#endif
 }
 
 void __init
 platform_init(unsigned long r3, unsigned long r4, unsigned long r5,
 		unsigned long r6, unsigned long r7)
 {
+	bd_t *bd;
+
 	parse_bootinfo(find_bootinfo());
 
-	if ( r3 )
-		memcpy( (void *)__res,(void *)(r3+KERNELBASE), sizeof(bd_t) );
+	if ( r3 ) {
+		bd = (bd_t *)(r3+KERNELBASE);
+		/* skip OF tree if present */
+		if (*(u32 *)bd == 0xd00dfeed)
+			bd = (bd_t *)((char *)bd + ((u32 *)bd)[1]);
+		memcpy(__res, bd, sizeof(bd_t));
+	}
 
 #ifdef CONFIG_PCI
 	m8xx_setup_pci_ptrs();
diff --git a/drivers/mtd/maps/Kconfig b/drivers/mtd/maps/Kconfig
--- a/drivers/mtd/maps/Kconfig
+++ b/drivers/mtd/maps/Kconfig
@@ -639,5 +639,11 @@ config MTD_PLATRAM
 
 	  This selection automatically selects the map_ram driver.
 
+config MTD_STXXTC_NOR
+	tristate "NOR Map driver for STXXTC NOR flash"
+	depends on STXXTC && MTD_CONCAT && MTD_PARTITIONS && MTD_CFI_INTELEXT
+	help
+	  Map driver for Silicon Turnkey eXpress XTc NOR flash. 
+
 endmenu
 
diff --git a/drivers/mtd/maps/Makefile b/drivers/mtd/maps/Makefile
--- a/drivers/mtd/maps/Makefile
+++ b/drivers/mtd/maps/Makefile
@@ -72,3 +72,4 @@ obj-$(CONFIG_MTD_PLATRAM)	+= plat-ram.o
 obj-$(CONFIG_MTD_OMAP_NOR)	+= omap_nor.o
 obj-$(CONFIG_MTD_MTX1)		+= mtx-1_flash.o
 obj-$(CONFIG_MTD_TQM834x)	+= tqm834x.o
+obj-$(CONFIG_MTD_STXXTC_NOR)	+= stxxtc_nor.o
diff --git a/drivers/mtd/maps/stxxtc_nor.c b/drivers/mtd/maps/stxxtc_nor.c
new file mode 100644
--- /dev/null
+++ b/drivers/mtd/maps/stxxtc_nor.c
@@ -0,0 +1,326 @@
+/*
+ * Handle mapping of the flash on the STXXTC board
+ */
+
+#include <linux/module.h>
+#include <linux/types.h>
+#include <linux/kernel.h>
+#include <linux/init.h>
+#include <linux/ioport.h>
+#include <asm/io.h>
+
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/map.h>
+#include <linux/mtd/partitions.h>
+#include <linux/mtd/concat.h>
+
+/* Boot flash; same on every board */
+static struct mtd_info *stxxtc_mtd;
+
+#define SECTORSZ(x)	((x) * 64 * 1024)
+
+#define UBOOT_CODE_SECTORS	4
+
+#define ENV1_PART	0
+#define ENV2_PART	1
+
+#define CHKP1_PART	2
+#define CHKP2_PART	3
+
+#define STRG1_PART	4
+
+#define BOOT_PART	5
+
+#define STRG2_PART	6
+
+/* partition_info gives details on the logical partitions that the split the
+ * single flash device into. If the size if zero we use up to the end of the
+ * device. */
+static struct mtd_partition pi[]= {
+	[ENV1_PART] = {
+		.name		= "u-boot env #1 0 4000",
+		.size		= SECTORSZ(1),
+		.offset		= SECTORSZ(0),
+	},
+	[ENV2_PART] = {
+		.name		= "u-boot env #2 0 4000",
+		.size		= SECTORSZ(1),
+		.offset		= SECTORSZ(1),
+	},
+	[CHKP1_PART] = {
+		.name		= "checkpoint #1",
+		.size		= SECTORSZ(1),
+		.offset		= SECTORSZ(2),
+	},
+	[CHKP2_PART] = {
+		.name		= "checkpoint #2",
+		.size		= SECTORSZ(1),
+		.offset		= SECTORSZ(3),
+	},
+	[STRG1_PART] = {
+		.name		= "storage #1",
+		.size		= 0,	/* to be filled */
+		.offset		= SECTORSZ(4),
+	},
+	[BOOT_PART] = {
+		.name		= "u-boot code",
+		.size		= SECTORSZ(UBOOT_CODE_SECTORS),
+		.offset		= 0,	/* to be filled */
+		.mask_flags	= MTD_WRITEABLE,	/* don't allow writes at all */
+	},
+	[STRG2_PART] = {
+		.name		= "storage #2",
+		.size		= 0,	/* what ever remains */
+		.offset		= 0,	/* to be filled */
+	}
+};
+
+#define NUM_PARTITIONS (sizeof(pi) / sizeof(pi[0]))
+
+#define WINDOW_ADDR	0x40000000
+#define WINDOW_SIZE	0x00200000
+
+struct map_info stxxtc_map = {
+	.name		= "STXXTC boot flash",
+	.size		= WINDOW_SIZE,
+	.bankwidth	= 2,
+	.phys		= WINDOW_ADDR,
+};
+
+/* two chips supported */
+#define NR_CHIPS	2
+
+struct stxxtc_nor_info {
+	unsigned long base;
+	unsigned long map_size;
+	char *mapname;
+	int width;
+	struct map_info map;
+	struct mtd_info *mtd;
+	struct resource *res;
+};
+
+static struct stxxtc_nor_info info[NR_CHIPS] = {
+	{
+		.base		= 0x40000000,
+		.map_size	= 0x01000000,
+		.width		= 2,
+		.mapname	= "stxxtc NOR flash #1",
+	}, {
+		.base		= 0x42000000,
+		.map_size	= 0x01000000,
+		.width		= 2,
+		.mapname	= "stxxtc NOR flash #2",
+	}
+};
+
+#if 1
+
+int __init init_stxxtc_nor(void)
+{
+	struct stxxtc_nor_info *ni;
+	int i, j, r = 0, found = 0;
+	unsigned long mask, off;
+	struct mtd_info *subdev[NR_CHIPS];
+
+	memset(subdev, 0, sizeof(subdev));
+
+	for (i = 0, ni = info; i < NR_CHIPS; i++, ni++) {
+
+		memset(&ni->map, 0, sizeof(ni->map));
+
+		ni->res = request_mem_region(ni->base, ni->map_size, ni->mapname);
+		if (ni->res == NULL) {
+			r = -EBUSY;
+			goto err;
+		}
+
+		ni->map.virt = ioremap(ni->base, ni->map_size);
+		if (ni->map.virt == NULL) {
+			r = -ENOMEM;
+			goto err;
+		}
+		ni->map.name = ni->mapname;
+		ni->map.phys = ni->base;
+		ni->map.bankwidth = 2;
+		ni->map.size = ni->map_size;
+		simple_map_init(&ni->map);
+
+		ni->mtd = do_map_probe("cfi_probe", &ni->map);
+		if (ni->mtd == NULL) {
+			/* chip missing; just cleanup and continue */
+			iounmap(ni->map.virt);
+			release_resource(ni->res);
+			ni->res = NULL;
+			memset(&ni->map, 0, sizeof(ni->map));
+			continue;
+		}
+
+		ni->mtd->owner = THIS_MODULE;
+
+		found++;
+
+	}
+
+	/* no chips found... */
+	if (found == 0) {
+		printk(KERN_INFO "stxxtc_nor: No devices found\n");
+		return -ENXIO;
+	}
+
+	/* first chip must exist. */
+	ni = &info[0]; i = 0; j = 0;
+	if (ni->mtd == NULL) {
+		printk(KERN_INFO "stxxtc_nor: First chip missing, not able to continue\n");
+		r = -ENXIO;
+		goto err;
+	}
+
+	printk(KERN_INFO "stxxtc_nor: CFI device found at 0x%08lx, "
+			"%dMiB, %d-bit wide\n", 
+			ni->base, ni->mtd->size >> 20, ni->width * 8);
+
+	/* find out where u-boot code is. It's size is 256K and is located
+	 * at the last megabyte of the first flash, for example a 2M flash
+	 * will have the u-boot part at offset 0x00100000
+	 */
+
+	mask = ni->mtd->size - 1;
+	off = 0xFFF00000 & mask;
+	printk(KERN_INFO "u-boot offset is at 0x%08lx\n", off);
+
+	/* keep it */
+	subdev[j++] = ni->mtd;
+
+	/* next */
+	i++; ni++;
+
+	/* report what we found */
+	for (; i < NR_CHIPS; i++, ni++) {
+		if (ni->mtd == NULL)
+			continue;
+		printk(KERN_INFO "stxxtc_nor: CFI device found at 0x%08lx, "
+				"%dMiB, %d-bit wide\n", 
+				ni->base, ni->mtd->size >> 20, ni->width * 8);
+		subdev[j++] = ni->mtd;
+	}
+
+	/* concat all the devices into one */
+	stxxtc_mtd = mtd_concat_create(subdev, found, "stxxtc NOR flash");
+	if (stxxtc_mtd == NULL) {
+		r = -ENXIO;
+		goto err;
+	}
+	stxxtc_mtd->owner = THIS_MODULE;
+
+	/* fixup partitions */
+	pi[STRG1_PART].size	= off - pi[STRG1_PART].offset;
+	pi[BOOT_PART].offset 	= off;
+	pi[STRG2_PART].offset	= pi[BOOT_PART].offset + pi[BOOT_PART].size;
+
+	add_mtd_partitions(stxxtc_mtd, pi, NUM_PARTITIONS);
+
+	return 0;
+
+err:
+	if (stxxtc_mtd != NULL) {
+		del_mtd_partitions(stxxtc_mtd);
+		mtd_concat_destroy(stxxtc_mtd);
+	}
+
+	for (i = NR_CHIPS - 1, ni = info + i; i >= 0; i--, ni--) {
+		if (ni->mtd)
+			map_destroy(ni->mtd);
+		if (ni->map.virt)
+			iounmap(ni->map.virt);
+		if (ni->res != NULL)
+			release_resource(ni->res);
+	}
+
+
+	return r;
+}
+
+static void __exit cleanup_stxxtc_nor(void)
+{
+	int i;
+	struct stxxtc_nor_info *ni;
+
+	if (stxxtc_mtd != NULL) {
+		del_mtd_partitions(stxxtc_mtd);
+		mtd_concat_destroy(stxxtc_mtd);
+	}
+
+	for (i = NR_CHIPS - 1, ni = info + i; i >= 0; i--, ni--) {
+		if (ni->mtd)
+			map_destroy(ni->mtd);
+		if (ni->map.virt)
+			iounmap(ni->map.virt);
+		if (ni->res != NULL)
+			release_resource(ni->res);
+	}
+
+}
+
+#else
+
+int __init init_stxxtc_nor(void)
+{
+	int err = 0;
+	static const char *probes[] = { "cfi_probe", NULL };
+	const char **sv, *s;
+
+	stxxtc_map.virt = (void __iomem *)ioremap(WINDOW_ADDR, WINDOW_SIZE);
+	if (!stxxtc_map.virt) {
+		printk("stxxtc_nor: Failed to ioremap\n");
+		err = -ENXIO;
+		goto out;
+	}
+	simple_map_init(&stxxtc_map);
+
+	sv = probes;
+	while ((s = *sv++) != NULL) {
+		stxxtc_mtd = do_map_probe(s, &stxxtc_map);
+		if (stxxtc_mtd != NULL)
+			break;
+	}
+
+	if (!stxxtc_mtd) {
+		printk(KERN_NOTICE "stxxtc_nor: probe failed flash device: %x at %x\n", WINDOW_SIZE, WINDOW_ADDR);
+		err = -ENXIO;
+		goto out_unmap;
+	}
+
+	stxxtc_mtd->owner = THIS_MODULE;
+	add_mtd_partitions(stxxtc_mtd, pi, NUM_PARTITIONS);
+
+	return 0;
+
+out_unmap:
+	iounmap((void *)stxxtc_map.virt);
+out:
+
+	return err;
+}
+
+static void __exit cleanup_stxxtc_nor(void)
+{
+	if (stxxtc_mtd) {
+		del_mtd_partitions(stxxtc_mtd);
+		map_destroy(stxxtc_mtd);
+		stxxtc_mtd = 0;
+	}
+	if (stxxtc_map.virt) {
+		iounmap(stxxtc_map.virt);
+		stxxtc_map.virt = 0;
+	}
+}
+
+#endif
+
+module_init(init_stxxtc_nor);
+module_exit(cleanup_stxxtc_nor);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Pantelis Antoniou <pantelis.antoniou@gmail.com>");
+MODULE_DESCRIPTION("MTD map driver for STXXTC boards");
diff --git a/drivers/mtd/nand/Kconfig b/drivers/mtd/nand/Kconfig
--- a/drivers/mtd/nand/Kconfig
+++ b/drivers/mtd/nand/Kconfig
@@ -190,5 +190,11 @@ config MTD_NAND_DISKONCHIP_BBTWRITE
 	help
 	  The simulator may simulate verious NAND flash chips for the
 	  MTD nand layer.
- 
+
+config MTD_NAND_STXXTC
+	tristate "NAND Flash support for STXXTC"
+	depends on STXXTC && MTD_NAND
+	help
+	  Use the NAND flash present on Silicon Turnkey eXpress XTc.
+
 endmenu
diff --git a/drivers/mtd/nand/Makefile b/drivers/mtd/nand/Makefile
--- a/drivers/mtd/nand/Makefile
+++ b/drivers/mtd/nand/Makefile
@@ -18,5 +18,6 @@ obj-$(CONFIG_MTD_NAND_H1900)		+= h1910.o
 obj-$(CONFIG_MTD_NAND_RTC_FROM4)	+= rtc_from4.o
 obj-$(CONFIG_MTD_NAND_SHARPSL)		+= sharpsl.o
 obj-$(CONFIG_MTD_NAND_NANDSIM)		+= nandsim.o
+obj-$(CONFIG_MTD_NAND_STXXTC)		+= stxxtc_nand.o
 
 nand-objs = nand_base.o nand_bbt.o
diff --git a/drivers/mtd/nand/stxxtc_nand.c b/drivers/mtd/nand/stxxtc_nand.c
new file mode 100644
--- /dev/null
+++ b/drivers/mtd/nand/stxxtc_nand.c
@@ -0,0 +1,277 @@
+/*
+ *  drivers/mtd/nand/stxxtc_nand.c
+ *
+ *  Copyright (C) 2005 Pantelis Antoniou <pantelis.antoniou@gmail.com>
+ *                     Dan Malek <dan@embeddedalley.com>
+ *
+ *  Derived from drivers/mtd/nand/edb7312.c
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ *
+ */
+
+#include <linux/config.h>
+
+#include <linux/slab.h>
+#include <linux/module.h>
+#include <linux/init.h>
+#include <linux/mtd/mtd.h>
+#include <linux/mtd/nand.h>
+#include <linux/mtd/partitions.h>
+#include <linux/init.h>
+#include <asm/io.h>
+#include <asm/semaphore.h>
+
+#include <platforms/stxxtc.h>
+
+/******************************************************************************/
+
+static struct mtd_info *stxxtc_mtd = NULL;
+static unsigned int stxxtc_fio_base;
+static int mtd_parts_nb = 0;
+static struct mtd_partition *mtd_parts;
+static const char *part_type = NULL;
+static const char *part_probes[] = { "cmdlinepart", NULL };
+
+/* we need these */
+extern struct semaphore mtd_table_mutex;
+extern struct mtd_info *mtd_table[MAX_MTD_DEVICES];
+
+/******************************************************************************/
+
+/* 
+ * hardware specific access to control-lines
+ */
+static void stxxtc_hwcontrol(struct mtd_info *mtd, int cmd) 
+{
+	unsigned long flags;
+	
+	local_irq_save(flags);
+
+	switch (cmd) {
+
+		case NAND_CTL_SETNCE:
+			_PIN_LO(F_CE);
+			break;
+
+		case NAND_CTL_CLRNCE:
+			_PIN_HI(F_CE);
+			break;
+
+		case NAND_CTL_SETCLE:
+			_PIN_HI(F_CLE);
+			break;
+
+		case NAND_CTL_CLRCLE:
+			_PIN_LO(F_CLE);
+			break;
+
+		case NAND_CTL_SETALE:
+			_PIN_HI(F_ALE);
+			break;
+
+		case NAND_CTL_CLRALE:
+			_PIN_LO(F_ALE);
+			break;
+	}
+
+	local_irq_restore(flags);
+}
+
+/*
+ *	read device ready pin
+ */
+static int stxxtc_device_ready(struct mtd_info *mtd)
+{
+	return _PIN_GET(F_RY_BY);
+}
+
+/*
+ * Main initialization routine
+ */
+static int __init stxxtc_init(void)
+{
+	struct nand_chip *this = NULL;
+	int i, j, err = 0, rootidx;
+	const char *s, *rootmark="root=/dev/mtdblock";
+	unsigned int curroff, sz;
+	struct mtd_partition *part;
+	
+	/* Allocate memory for MTD device structure and private data */
+	stxxtc_mtd = kmalloc(sizeof(struct mtd_info) + sizeof(struct nand_chip), GFP_KERNEL);
+	if (!stxxtc_mtd) {
+		printk("Unable to allocate STXXTC NAND MTD device structure.\n");
+		err = -ENOMEM;
+		goto out;
+	}
+
+	/* map physical adress */
+	stxxtc_fio_base = (unsigned long)ioremap(NAND_BASE, NAND_SIZE);
+	if(!stxxtc_fio_base) {
+		printk("ioremap STXXTC NAND flash failed\n");
+		err = -EIO;
+		goto out;
+	}
+	
+	/* Get pointer to private data */
+	this = (struct nand_chip *)&stxxtc_mtd[1];
+	
+	/* Initialize structures */
+	memset((char *) stxxtc_mtd, 0, sizeof(struct mtd_info));
+	memset((char *) this, 0, sizeof(struct nand_chip));
+	
+	/* Link the private data with the MTD structure */
+	stxxtc_mtd->priv = this;
+	
+	/* insert callbacks */
+	this->IO_ADDR_R = (void __iomem *)stxxtc_fio_base;
+	this->IO_ADDR_W = (void __iomem *)stxxtc_fio_base;
+	this->hwcontrol = stxxtc_hwcontrol;
+	this->dev_ready = stxxtc_device_ready;
+	/* 15 us command delay time (XXX actually not used) */
+	this->chip_delay = 15;
+	/* TODO F_RY_BY pin is interrupt capable but it's not used as such */
+	this->eccmode = NAND_ECC_SOFT;
+	
+	/* Scan to find existence of the device (minimum size is 8MiB) */
+	if (nand_scan(stxxtc_mtd, 1) || stxxtc_mtd->size < 8 * 1024 * 1024) {
+		err = -ENXIO;
+		goto out;
+	}
+
+	/* Set internal data buffer */
+	this->data_buf = kmalloc(stxxtc_mtd->oobblock + stxxtc_mtd->oobsize, GFP_KERNEL);
+	if (this->data_buf == NULL) {
+		printk(KERN_ERR "stxxtc_nand: Unable to allocate data buffer\n");
+		err = -ENOMEM;
+		goto out;
+	}
+
+
+#ifdef CONFIG_MTD_CMDLINE_PARTS
+	stxxtc_mtd->name = "stxxtc-nand";
+	mtd_parts_nb = parse_mtd_partitions(stxxtc_mtd, part_probes, &mtd_parts, 0);
+	if (mtd_parts_nb > 0)
+		part_type = "command line";
+	else
+		mtd_parts_nb = 0;
+#endif
+	if (mtd_parts_nb == 0) {
+
+		mtd_parts_nb = 3;
+
+		mtd_parts = kmalloc(sizeof(*mtd_parts) * mtd_parts_nb, GFP_KERNEL);
+		if (mtd_parts == NULL) {
+			printk(KERN_ERR "stxxtc_nand: Unable to allocate partition table buffer\n");
+			err = -ENOMEM;
+			goto out;
+		}
+		memset(mtd_parts, 0, sizeof(*mtd_parts) * mtd_parts_nb);
+
+		part = mtd_parts;
+
+		curroff = 0;
+
+		sz = (stxxtc_mtd->size - 512 * 1024) / 2;
+
+		part->name	= "STXXTC root fs #1";
+		part->offset	= curroff;
+		part->size	= sz;
+		/* part->mask_flags= MTD_WRITEABLE; */
+		part++;
+		curroff += sz;
+
+		part->name	= "STXXTC root fs #2";
+		part->offset	= curroff;
+		part->size	= sz;
+		part++;
+		curroff += sz;
+
+		part->name	= "Persistent storage";
+		part->offset	= curroff;
+		part->size	= stxxtc_mtd->size - curroff;
+		part++;
+
+		part_type = "static";
+	}
+
+	/* lookup index of root MTD partition (if any) */
+	if ((s = strstr(saved_command_line, rootmark)) != NULL) {
+
+		rootidx = simple_strtoul(s + strlen(rootmark), NULL, 10);
+
+		/* XXX we assume that no-one will interrupts afterwards */
+		down(&mtd_table_mutex);
+		for (i = 0, j = 0; i < MAX_MTD_DEVICES; i++) {
+
+			if (mtd_table[i] != NULL)
+				continue;
+
+			if (i == rootidx) {
+				printk(KERN_INFO "stxxtc_nand: Marking root device mtd%d as read-only (%d)\n", i, j);
+				mtd_parts[j].mask_flags = MTD_WRITEABLE;
+				break;
+			}
+
+			if (++j >= mtd_parts_nb)
+				break;
+		}
+		up(&mtd_table_mutex);
+
+	}
+
+	/* Register the partitions */
+	printk(KERN_NOTICE "Using %s partition definition\n", part_type);
+	err = add_mtd_partitions(stxxtc_mtd, mtd_parts, mtd_parts_nb);
+	if (err != 0) {
+		printk(KERN_ERR "stxxtc_nand: Unable to add mtd partitions\n");
+		goto out;
+	}
+
+	kfree(mtd_parts);
+	mtd_parts = NULL;
+
+	return 0;
+
+out:
+	if (mtd_parts)
+		kfree(mtd_parts);
+	if (stxxtc_fio_base)
+		iounmap((void *)stxxtc_fio_base);
+	if (this && this->data_buf)
+		kfree(this->data_buf);
+	if (stxxtc_mtd)
+		kfree(stxxtc_mtd);
+	return err;
+}
+
+/*
+ * Clean up routine
+ */
+static void __exit stxxtc_cleanup(void)
+{
+	struct nand_chip *this = (struct nand_chip *) &stxxtc_mtd[1];
+
+	/* Unregister the device */
+	del_mtd_device(stxxtc_mtd);
+	
+	/* unmap */
+	iounmap((void *)stxxtc_fio_base);
+
+	/* free data buffer */
+	kfree(this->data_buf);
+
+	/* Free the MTD device structure */
+	kfree(stxxtc_mtd);
+}
+
+module_init(stxxtc_init);
+module_exit(stxxtc_cleanup);
+
+MODULE_LICENSE("GPL");
+MODULE_AUTHOR("Pantelis Antoniou <pantelis.antoniou@gmail.com>");
+MODULE_DESCRIPTION("MTD map driver for STXXTC");
+
+
diff --git a/include/asm-ppc/mpc8xx.h b/include/asm-ppc/mpc8xx.h
--- a/include/asm-ppc/mpc8xx.h
+++ b/include/asm-ppc/mpc8xx.h
@@ -68,6 +68,10 @@
 #include <platforms/mpc885ads.h>
 #endif
 
+#if defined(CONFIG_STXXTC)
+#include <platforms/stxxtc.h>
+#endif
+
 /* Currently, all 8xx boards that support a processor to PCI/ISA bridge
  * use the same memory map.
  */

^ permalink raw reply

* Re: [PATCH 1/2] Move Virtex-II Pro / ML300 port over to the platform bus.
From: Grant Likely @ 2005-12-05 17:40 UTC (permalink / raw)
  To: Peter Korsgaard, linuxppc-embedded
In-Reply-To: <9305ca410512050858s4c8f640dja71c3945cdb5762f@mail.gmail.com>

Peter Korsgaard wrote:

>On 12/5/05, Grant Likely <glikely@gmail.com> wrote:
>  
>
>>Yeah, I'm back working on it again after being pulled away on consulting
>>priorities.  I hope to have a public git tree up soon, and I'll be
>>sending patches to mainline shortly thereafter.
>>
>>Cheers
>>g.
>>    
>>
>
>Great - I have also been away from the V2P/Linux stuff for the last
>few months, but some new work is coming up, that's why I pinged you.
>
>If you want me to test something, just say so.
>  
>
Hey, what boards do you have access to?  I'm going to lose my ML300
shortly, but I've just got an ML403.

^ permalink raw reply

* RFI doesn't branch off?
From: Saari, James @ 2005-12-05 17:34 UTC (permalink / raw)
  To: linuxppc-embedded

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

I am chasing a very similar problem. Did you ever find resolution to
your problem? Can you share what you did to get past this?

 

Thanks.

 

--

 

Amit Shah shahamit at gmail.com
<mailto:linuxppc-embedded%40ozlabs.org?Subject=RFI%20doesn%27t%20branch%
20off%3F&In-Reply-To=> 
Wed Aug 25 20:20:33 EST 2004 

*	Previous message: RFI doesn't branch off?
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-August/015393.html> 
*	Next message: value of XIP? and whether it works with 2.6
kernel?
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-August/015394.html> 
*	Messages sorted by: [ date ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-August/date.html#154
10>  [ thread ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-August/thread.html#1
5410>  [ subject ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-August/subject.html#
15410>  [ author ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-August/author.html#1
5410>  

  _____  

Amit Shah wrote:
 
> 
> Hi all,
> 
> I have a strange issue with a custom board running a 750GX on a
> Marvell 64360 bridge. I transferred control to the uImage via u-boot
> (which I had to modify for my board-specific UART and SDRAM inits,
> also disabling PCI).
> 
> Using the UART that's initialized by u-boot, I put some putchar()s in
> head.S to figure out where the kernel was freezing. It seems 'rfi' in
> mmu_off doesn't jump off to '__after_mmu_off' as expected. I also put
> some pattern into SDRAM before an after mmu_off. I just see the
> pattern (via a PCI interface) put before mmu_off.
> 
> The contents of SRR0 correctly point to __after_mmu_off just before
> the 'rfi'. However, the 'rfi' documentation says the value of SRR0 is
> concatenated with '0x0b00'. I don't think this should be done.
> Anyways, since this code is supposed to work, I'm not sure why it
> isn't working.
 
If I keep the DR enabled in MSR, the RFI goes back properly... disabling
DR
causes some randomness.
 
> 
> Can any u-boot initializations be causing this? I guess not, I've not
> touched any CPU-specific settings in u-boot.
> 
> Can anyone give me some pointers?
 
--
Amit Shah
http://amitshah.nav.to/
 
 

 


[-- Attachment #2: Type: text/html, Size: 10929 bytes --]

^ permalink raw reply

* Anyone using CodeWarrior USB TAP?
From: Addison Baldwin @ 2005-12-05 17:05 UTC (permalink / raw)
  To: linuxppc-embedded

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

Hi

I received a MPC8272ADS board from Freescale, and I'm trying to use a
CodeWarrior USB TAB that has been provided with the board. It seems that
such a device only works under Windows, as I didn't find a driver to make it
works under Linux.

I would like to know if anyone have got the CodeWarrior USB working under
Linux.

Thanks,
Addison

[-- Attachment #2: Type: text/html, Size: 385 bytes --]

^ permalink raw reply

* Re: [PATCH 1/2] Move Virtex-II Pro / ML300 port over to the platform bus.
From: Grant Likely @ 2005-12-05 16:52 UTC (permalink / raw)
  To: Peter Korsgaard, linuxppc-embedded
In-Reply-To: <9305ca410512050558o4778824as5a5b24a9bfeccc75@mail.gmail.com>

Peter Korsgaard wrote:

>On 9/20/05, Grant Likely <glikely@gmail.com> wrote:
>  
>
>>On 9/20/05, Peter Korsgaard <jacmet@sunsite.dk> wrote:
>>    
>>
>>>>>>>>" " == Grant Likely <glikely@gmail.com> writes:
>>>>>>>>                
>>>>>>>>
>>>Hi,
>>>
>>> > This is a large patch that moves the ML300 to the platform bus.
>>> > It also isolates most of the linux tree from changes to the
>>> > xparameters.h file.  Ultimately, the goal is to move everything
>>> > over to the flattened device tree for telling the kernel about
>>> > devices.  That way xparameters.h can go away entirely for the
>>> > kernel proper.  (Isolated to the bootloader)
>>>      
>>>
>
>Hi,
>
>Any news on submitting this to mainline?
>  
>

Yeah, I'm back working on it again after being pulled away on consulting
priorities.  I hope to have a public git tree up soon, and I'll be
sending patches to mainline shortly thereafter.

Cheers
g.

^ permalink raw reply

* Failure to boot v2.6.14+ on PPC8xx
From: Marcelo Tosatti @ 2005-12-05 15:33 UTC (permalink / raw)
  To: Paul Mackerras, Benjamin Herrenschmidt; +Cc: linux-ppc-embedded



Hi,

More details on the problem reported earlier. Some change introduced
after v2.6.14 makes the "relocate_code" relocate section of
arch/ppc/boot/common/util.o disappear. This results in a kernel image
with functions at util.o not being part of the relocate section,
rendering the system unbootable.

Follows relevant output, Debian unstable toolchain (/opt/montavista is 
a link to the default Debian tools).

marcelo@pegasos:~$ gcc -v
Using built-in specs.
Target: powerpc-linux-gnu Configured with: ../src/configure -v
--enable-languages=c,c++,java,f95,objc,ada,treelang --prefix=/usr
--enable-shared --with-system-zlib --libexecdir=/usr/lib
--without-included-gettext --enable-threads=posix
--enable-nls --program-suffix=-4.0 --enable-__cxa_atexit
--enable-libstdcxx-allocator=mt --enable-clocale=gnu
--enable-libstdcxx-debug --enable-java-gc=boehm
--enable-java-awt=gtk-default --enable-gtk-cairo
--with-java-home=/usr/lib/jvm/java-1.4.2-gcj-4.0-1.4.2.0/jre
--enable-mpfr --disable-softfloat
--enable-targets=powerpc-linux,powerpc64-linux --with-cpu=default32
--disable-werror --enable-checking=release powerpc-linux-gnu Thread
model: posix gcc version 4.0.2 (Debian 4.0.2-2)

marcelo@pegasos:~$ ld -v
GNU ld version 2.16.1 Debian GNU/Linux

marcelo@pegasos:~/8xx/linux-2.6.14$
/opt/montavista/pro/devkit/ppc/8xx/bin/ppc_8xx-gcc -m32
-Wp,-MD,arch/ppc/boot/common/.util.o.d -nostdinc -isystem
/usr/lib/gcc/powerpc-linux-gnu/4.0.2/include -D__KERNEL__ -Iinclude
-include include/linux/autoconf.h -Iarch/ppc -Iarch/ppc/include
-D__ASSEMBLY__ -Iarch/ppc -c -o arch/ppc/boot/common/util.o
arch/ppc/boot/common/util.S

marcelo@pegasos:~/8xx/linux-2.6.14$ readelf -a arch/ppc/boot/common/util.o 
Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        00000000 000034 000150 00  AX  0   0  1
  [ 2] .rela.text        RELA            00000000 00061c 000018 0c     11   1  4
  [ 3] .data             PROGBITS        00000000 000184 000004 00  WA  0   0  1
  [ 4] .bss              NOBITS          00000000 000188 000000 00  WA  0   0  1
  [ 5] .relocate_code    PROGBITS        00000000 000188 000048 00  AX  0   0  1
  [ 6] .rela.relocate_co RELA            00000000 000634 00000c 0c     11   5  4
  [ 7] .stab             PROGBITS        00000000 0001d0 000024 0c      9   0  4
  [ 8] .rela.stab        RELA            00000000 000640 000018 0c     11   7  4
  [ 9] .stabstr          STRTAB          00000000 0001f4 00004e 00      0   0  1
  [10] .shstrtab         STRTAB          00000000 000242 000059 00      0   0  1
  [11] .symtab           SYMTAB          00000000 0004a4 0000f0 10     12   9  4
  [12] .strtab           STRTAB          00000000 000594 000088 00      0   0  1

Relocation section '.rela.text' at offset 0x61c contains 2 entries:
 Offset     Info    Type            Sym.Value  Sym. Name + Addend
00000102  00000b06 R_PPC_ADDR16_HA   00000000   timebase_period_ns + 0
00000106  00000b04 R_PPC_ADDR16_LO   00000000   timebase_period_ns + 0

Relocation section '.rela.relocate_code' at offset 0x634 contains 1 entries:
 Offset     Info    Type            Sym.Value  Sym. Name + Addend
00000004  00000e0a R_PPC_REL24       00000028   flush_data_cache + 0

Relocation section '.rela.stab' at offset 0x640 contains 2 entries:
 Offset     Info    Type            Sym.Value  Sym. Name + Addend
00000014  00000d01 R_PPC_ADDR32      00000000   flush_instruction_cach + 0
00000020  00000e01 R_PPC_ADDR32      00000028   flush_data_cache + 0

There are no unwind sections in this file.

Symbol table '.symtab' contains 15 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 FILE    LOCAL  DEFAULT  ABS arch/ppc/boot/common/util
     2: 00000000     0 SECTION LOCAL  DEFAULT    1 
     3: 00000000     0 SECTION LOCAL  DEFAULT    3 
     4: 00000000     0 SECTION LOCAL  DEFAULT    4 
     5: 000000fc     0 NOTYPE  LOCAL  DEFAULT    1 .udelay_not_601
     6: 00000000     0 SECTION LOCAL  DEFAULT    5 
     7: 00000000     0 SECTION LOCAL  DEFAULT    7 
     8: 00000000     0 SECTION LOCAL  DEFAULT    9 
     9: 00000000     0 NOTYPE  GLOBAL DEFAULT    1 _setup_L2CR
    10: 00000080     0 NOTYPE  GLOBAL DEFAULT    1 _setup_L3CR
    11: 00000000     0 NOTYPE  GLOBAL DEFAULT    3 timebase_period_ns
    12: 000000d0     0 NOTYPE  GLOBAL DEFAULT    1 udelay
    13: 00000000     0 NOTYPE  GLOBAL DEFAULT    5 flush_instruction_cache
    14: 00000028     0 NOTYPE  GLOBAL DEFAULT    5 flush_data_cache

No version information found in this file.

marcelo@pegasos:~/8xx/linux-2.6-git-dec01$
/opt/montavista/pro/devkit/ppc/8xx/bin/ppc_8xx-gcc -m32
-Wp,-MD,arch/ppc/boot/common/.util.o.d -nostdinc -isystem
/usr/lib/gcc/powerpc-linux-gnu/4.0.2/include -D__KERNEL__ -Iinclude
-include include/linux/autoconf.h -Iarch/ppc -Iarch/ppc/include
-D__ASSEMBLY__ -Iarch/ppc -c -o arch/ppc/boot/common/util.o
arch/ppc/boot/common/util.S

marcelo@pegasos:~/8xx/linux-2.6-git-dec01$ readelf -a arch/ppc/boot/common/util.o 

Section Headers:
  [Nr] Name              Type            Addr     Off    Size   ES Flg Lk Inf Al
  [ 0]                   NULL            00000000 000000 000000 00      0   0  0
  [ 1] .text             PROGBITS        00000000 000034 000198 00  AX  0   0  1
  [ 2] .rela.text        RELA            00000000 0005f0 000024 0c     10   1  4
  [ 3] .data             PROGBITS        00000000 0001cc 000004 00  WA  0   0  1
  [ 4] .bss              NOBITS          00000000 0001d0 000000 00  WA  0   0  1
  [ 5] .relocate_code    PROGBITS        00000000 0001d0 000000 00  AX  0   0  1
  [ 6] .stab             PROGBITS        00000000 0001d0 000024 0c      8   0  4
  [ 7] .rela.stab        RELA            00000000 000614 000018 0c     10   6  4
  [ 8] .stabstr          STRTAB          00000000 0001f4 00004e 00      0   0  1
  [ 9] .shstrtab         STRTAB          00000000 000242 000054 00      0   0  1
  [10] .symtab           SYMTAB          00000000 000478 0000f0 10     11   9  4
  [11] .strtab           STRTAB          00000000 000568 000088 00      0   0  1

Relocation section '.rela.text' at offset 0x5f0 contains 3 entries:
 Offset     Info    Type            Sym.Value  Sym. Name + Addend
00000102  00000b06 R_PPC_ADDR16_HA   00000000   timebase_period_ns + 0
00000106  00000b04 R_PPC_ADDR16_LO   00000000   timebase_period_ns + 0
00000154  00000e0a R_PPC_REL24       00000178   flush_data_cache + 0

Relocation section '.rela.stab' at offset 0x614 contains 2 entries:
 Offset     Info    Type            Sym.Value  Sym. Name + Addend
00000014  00000d01 R_PPC_ADDR32      00000150   flush_instruction_cach + 0
00000020  00000e01 R_PPC_ADDR32      00000178   flush_data_cache + 0

There are no unwind sections in this file.

Symbol table '.symtab' contains 15 entries:
   Num:    Value  Size Type    Bind   Vis      Ndx Name
     0: 00000000     0 NOTYPE  LOCAL  DEFAULT  UND 
     1: 00000000     0 FILE    LOCAL  DEFAULT  ABS arch/ppc/boot/common/util
     2: 00000000     0 SECTION LOCAL  DEFAULT    1 
     3: 00000000     0 SECTION LOCAL  DEFAULT    3 
     4: 00000000     0 SECTION LOCAL  DEFAULT    4 
     5: 000000fc     0 NOTYPE  LOCAL  DEFAULT    1 .udelay_not_601
     6: 00000000     0 SECTION LOCAL  DEFAULT    5 
     7: 00000000     0 SECTION LOCAL  DEFAULT    6 
     8: 00000000     0 SECTION LOCAL  DEFAULT    8 
     9: 00000000     0 NOTYPE  GLOBAL DEFAULT    1 _setup_L2CR
    10: 00000080     0 NOTYPE  GLOBAL DEFAULT    1 _setup_L3CR
    11: 00000000     0 NOTYPE  GLOBAL DEFAULT    3 timebase_period_ns
    12: 000000d0     0 NOTYPE  GLOBAL DEFAULT    1 udelay
    13: 00000150     0 NOTYPE  GLOBAL DEFAULT    1 flush_instruction_cache
    14: 00000178     0 NOTYPE  GLOBAL DEFAULT    1 flush_data_cache

No version information found in this file.

^ permalink raw reply

* RE: Xilinx_uartlite
From: Jaap de Jong @ 2005-12-05 11:02 UTC (permalink / raw)
  To: T Ziomek, linuxppc-embedded

Hi Tom, ea,
Found it....
Had to use plb ddr sdram instead of the default opb ddr sdram...
Now it works.
Thanks!
	Jaap

-----Oorspronkelijk bericht-----
Van: Jaap de Jong=20
Verzonden: maandag 5 december 2005 08:36
Aan: 'T Ziomek'; linuxppc-embedded
Onderwerp: RE: Xilinx_uartlite

Hi Tom,

> Well, I never see that exact text, plus it's hard to tell much from
such a short snippet. =20
> Could you provide a more complete transcript of your console output?

This is the output:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~
loaded at:     00400000 004C91E0
board data at: 004C6138 004C6150
relocated to:  004052D4 004052EC
zimage at:     004057F4 00453621
initrd at:     00454000 004C5747
avail ram:     004CA000 02000000

Linux/PPC load: root=3D/dev/ram
Uncompressing Linux...done.
Now booting the kernel
Linux version 2.4.20_mvl31-ml300 (jdj@jdj) (gcc version 3.3.3 (DENX ELDK
3.1.1 3
.3.3-10)) #25 Fri Dec 2 16:04:56 UTC 2005 Xilinx Virtex-II Pro port (C)
2002 MontaVista Software, Inc. (source@mvista.com) On node 0 totalpages:
8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=3D/dev/ram
Xilinx INTC #0 at 0x41200000 mapped to 0xFDFFF000 Calibrating delay
loop... 299.00 BogoMIPS
Memory: 31112k available (556k kernel code, 216k data, 36k init, 0k
highmem) Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes) Mount-cache
hash table entries: 512 (order: 0, 4096 bytes) Buffer-cache hash table
entries: 1024 (order: 0, 4096 bytes) Page-cache hash table entries: 8192
(order: 3, 32768 bytes) POSIX conformance testing by UNIFIX Linux NET4.0
for Linux 2.4 Based upon Swansea University Computer Society NET3.039
LSP Revision 22 ikconfig 0.5 with /proc/ikconfig Starting kswapd
Disabling the Out Of Memory Killer
pty: 256 Unix98 ptys configured
xgpio #0 at 0x40000000 mapped to 0xC3000000 xgpio #1 at 0x40020000
mapped to 0xC3011000 RAMDISK driver initialized: 16 RAM disks of 4096K
size 1024 blocksize
RAMDISK: Compressed image found at block 0 Freeing initrd memory: 453k
freed
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 36k init
Warning: unable to open an initial
console.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~

And there it stops.=20
I'm affraid it is related to something else though.
Sometimes it ends in:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~
EXT2-fs error (device ramdisk(1,0)): ext2_check_page: bad entry in
directory #12
: rec_len is smaller than minimal - offset=3D1024, inode=3D0, =
rec_len=3D0,
name_len=3D0 Kernel panic: No init found.  Try passing init=3D option to
kernel.
 <0>Rebooting in 180 seconds..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~

After a rebuild without any changes to my rootfilesystem!
How I make my image:

    dd if=3D/dev/zero of=3Dramdisk.image bs=3D1k count=3D4096
    mkfs.ext2 -F ramdisk.image
    mount -o loop ramdisk.image mnt

    sync; sync; sync; sync; sync; sync
    umount mnt
    fsck.ext2 -p ramdisk.image
    gzip -9 ramdisk.image

    make zImage.initrd


Somtimes it starts up till here:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~
init started:  BusyBox v0.60.5 (2005.12.01-00:25+0000) multi-call binary

Please press Enter to activate this console.


BusyBox v0.60.5 (2005.12.01-00:25+0000) Built-in shell (ash) Enter
'help' for a list of built-in commands.

sh: can't access tty; job control turned off # ls -l Please press Enter
to activate this
console.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~

But even then things are not good...

So you can think of corruption of the rootfs but everytime i have
checked it on my linux system and nothing is wrong.=20
So perhaps my memory is corrupt? Memory test do not reveal this.
If you have any hints or ideas, please share them!!

Best regards,
	Jaap.




-----Oorspronkelijk bericht-----
Van: T Ziomek [mailto:ctz001@email.mot.com]
Verzonden: zaterdag 3 december 2005 02:03
Aan: Jaap de Jong
CC: linuxppc-embedded
Onderwerp: RE: Xilinx_uartlite

On Thu, 1 Dec 2005, Jaap de Jong wrote:
>
> Thanks for your reply, but then I only get:
> 	Now booting the kernel

Well, I never see that exact text, plus it's hard to tell much from such
a short snippet.  Could you provide a more complete transcript of your
con- sole output?

--=20
   /"\  ASCII Ribbon Campaign   |
   \ /                          |   Email to user 'CTZ001'
    X        Against HTML       |             at 'email.mot.com'
   / \     in e-mail & news     |

^ permalink raw reply

* RE: Xilinx_uartlite
From: Jaap de Jong @ 2005-12-05  7:35 UTC (permalink / raw)
  To: T Ziomek, linuxppc-embedded

Hi Tom,

> Well, I never see that exact text, plus it's hard to tell much from
such a short snippet. =20
> Could you provide a more complete transcript of your console output?

This is the output:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~
loaded at:     00400000 004C91E0
board data at: 004C6138 004C6150
relocated to:  004052D4 004052EC
zimage at:     004057F4 00453621
initrd at:     00454000 004C5747
avail ram:     004CA000 02000000

Linux/PPC load: root=3D/dev/ram
Uncompressing Linux...done.
Now booting the kernel
Linux version 2.4.20_mvl31-ml300 (jdj@jdj) (gcc version 3.3.3 (DENX ELDK
3.1.1 3
.3.3-10)) #25 Fri Dec 2 16:04:56 UTC 2005
Xilinx Virtex-II Pro port (C) 2002 MontaVista Software, Inc.
(source@mvista.com)
On node 0 totalpages: 8192
zone(0): 8192 pages.
zone(1): 0 pages.
zone(2): 0 pages.
Kernel command line: root=3D/dev/ram
Xilinx INTC #0 at 0x41200000 mapped to 0xFDFFF000
Calibrating delay loop... 299.00 BogoMIPS
Memory: 31112k available (556k kernel code, 216k data, 36k init, 0k
highmem)
Dentry cache hash table entries: 4096 (order: 3, 32768 bytes)
Inode cache hash table entries: 2048 (order: 2, 16384 bytes)
Mount-cache hash table entries: 512 (order: 0, 4096 bytes)
Buffer-cache hash table entries: 1024 (order: 0, 4096 bytes)
Page-cache hash table entries: 8192 (order: 3, 32768 bytes)
POSIX conformance testing by UNIFIX
Linux NET4.0 for Linux 2.4
Based upon Swansea University Computer Society NET3.039
LSP Revision 22
ikconfig 0.5 with /proc/ikconfig
Starting kswapd
Disabling the Out Of Memory Killer
pty: 256 Unix98 ptys configured
xgpio #0 at 0x40000000 mapped to 0xC3000000
xgpio #1 at 0x40020000 mapped to 0xC3011000
RAMDISK driver initialized: 16 RAM disks of 4096K size 1024 blocksize
RAMDISK: Compressed image found at block 0
Freeing initrd memory: 453k freed
VFS: Mounted root (ext2 filesystem) readonly.
Freeing unused kernel memory: 36k init
Warning: unable to open an initial
console.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~

And there it stops.=20
I'm affraid it is related to something else though.
Sometimes it ends in:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~
EXT2-fs error (device ramdisk(1,0)): ext2_check_page: bad entry in
directory #12
: rec_len is smaller than minimal - offset=3D1024, inode=3D0, =
rec_len=3D0,
name_len=3D0
Kernel panic: No init found.  Try passing init=3D option to kernel.
 <0>Rebooting in 180 seconds..
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~

After a rebuild without any changes to my rootfilesystem!
How I make my image:

    dd if=3D/dev/zero of=3Dramdisk.image bs=3D1k count=3D4096
    mkfs.ext2 -F ramdisk.image
    mount -o loop ramdisk.image mnt

    sync; sync; sync; sync; sync; sync
    umount mnt
    fsck.ext2 -p ramdisk.image
    gzip -9 ramdisk.image

    make zImage.initrd


Somtimes it starts up till here:

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~
init started:  BusyBox v0.60.5 (2005.12.01-00:25+0000) multi-call binary

Please press Enter to activate this console.


BusyBox v0.60.5 (2005.12.01-00:25+0000) Built-in shell (ash)
Enter 'help' for a list of built-in commands.

sh: can't access tty; job control turned off
# ls -l
Please press Enter to activate this
console.~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
~~~~~~~~~~~~~~~~~~~

But even then things are not good...

So you can think of corruption of the rootfs but everytime i have
checked it
on my linux system and nothing is wrong.=20
So perhaps my memory is corrupt? Memory test do not reveal this.
If you have any hints or ideas, please share them!!

Best regards,
	Jaap.




-----Oorspronkelijk bericht-----
Van: T Ziomek [mailto:ctz001@email.mot.com]=20
Verzonden: zaterdag 3 december 2005 02:03
Aan: Jaap de Jong
CC: linuxppc-embedded
Onderwerp: RE: Xilinx_uartlite

On Thu, 1 Dec 2005, Jaap de Jong wrote:
>
> Thanks for your reply, but then I only get:
> 	Now booting the kernel

Well, I never see that exact text, plus it's hard to tell much from such
a short snippet.  Could you provide a more complete transcript of your
con- sole output?

--=20
   /"\  ASCII Ribbon Campaign   |
   \ /                          |   Email to user 'CTZ001'
    X        Against HTML       |             at 'email.mot.com'
   / \     in e-mail & news     |

^ permalink raw reply

* Re: [PATCH] arch/ppc/kernel/idle.c: don't declare cpu variable in non-SMP kernels
From: Paul Mackerras @ 2005-12-05  4:12 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linuxppc-dev, Otavio Salvador
In-Reply-To: <20051203104639.4b477dea.akpm@osdl.org>

Andrew Morton writes:

> Surely this would be better?

Yes it would, care to give me a signed-off-by for it? :)

Paul.

^ permalink raw reply

* Re: [PATCH 2.6.15-rc4] ppc32: Fixes for non-zero PPC_MEMSTART on PPC440
From: Jason Gunthorpe @ 2005-12-05  4:08 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-embedded
In-Reply-To: <1133742158.6100.119.camel@gaston>

On Mon, Dec 05, 2005 at 11:22:37AM +1100, Benjamin Herrenschmidt wrote:

> Just out of curiosity: why did you do such a bogus setup in the first
> place ?

Historical.. This a FPGA design (Xilinx, embedded 405's) and the first
time we deployed it was in conjunction with a 2nd MIPS processor that
had system memory mapped 0 -> 0x200000. To keep the world sane and
simple the 405's memory was desired to be non-overlapping with the
MIPS world. The MIPS did care about the memory layout so it got to
have RAM at address 0. This put the PPC ram at 0xC00000. The same
basic components (mini embedded OS, internal FPGA cores, etc, etc)
kept getting reused from project to project.

Nowadays, the 405 part of the original design has been retasked for
something totally different and the MIPS is gone, taking along with it
the reason for the odd memory map. But we built a stack of software
which all assumes the classic memory map so the hardware just kept
repeating it.

Fortunately for us Linux was pretty close to supporting the odd memory
map, so we got to retain compatability with the old software, keep the
hardware the same, and just patch the kernel a little bit.

Jason

^ permalink raw reply

* Re: CPU off power consumption
From: Paul Mackerras @ 2005-12-05  3:59 UTC (permalink / raw)
  To: Giuliano Pochini; +Cc: LinuxPPC-dev
In-Reply-To: <Pine.LNX.4.58.0512021604360.23144@denise.shiny.it>

Giuliano Pochini writes:

> Any hint on how to debug it ?  Where is the code that enables/disables the
> cpus ?  Where is the sleep loop ?

The initial sleep loop is in ROM.  A CPU that is being offlined will
enter low_cpu_die() in arch/ppc/platforms/pmac_sleep.c and will go to
sleep at the mtmsr about 40 lines into that function.

Paul.

^ permalink raw reply

* Re: back trace when a SIGSEGV
From: Benjamin Herrenschmidt @ 2005-12-05  1:23 UTC (permalink / raw)
  To: Dustin Lang; +Cc: linuxppc-dev, Redondo Garcia, Roberto
In-Reply-To: <Pine.LNX.4.60.0512041654330.16831@tin.icics.ubc.ca>

On Sun, 2005-12-04 at 17:20 -0800, Dustin Lang wrote:
> Hi,
> 
> > You don't need to play the cop on this list, nobody appointed you to
> > that position.
> 
> Fair enough.  But do you think my reply, over all, was unreasonable?[1] I 
> made an attempt to answer his question, pointing out two of the most 
> useful resources.  I also told him that his question wasn't really suited 
> to the list - I would have listed some better resources but I'm not 
> familiar with any - but I tried to write a balanced, 
> gentle-push-in-the-right-direction, sort of message.  Re-reading the 
> snippet you highlighted, it does sound rude.  It wasn't meant to be. 
> (Roberto, please accept my apologies!)

The s/n ratio of this list is good enough to make such occasional
questions acceptable.

Ben.

^ permalink raw reply

* Re: back trace when a SIGSEGV
From: Dustin Lang @ 2005-12-05  1:20 UTC (permalink / raw)
  To: Benjamin Herrenschmidt; +Cc: linuxppc-dev, Redondo Garcia, Roberto
In-Reply-To: <1133734477.6100.101.camel@gaston>


Hi,

> You don't need to play the cop on this list, nobody appointed you to
> that position.

Fair enough.  But do you think my reply, over all, was unreasonable?[1] I 
made an attempt to answer his question, pointing out two of the most 
useful resources.  I also told him that his question wasn't really suited 
to the list - I would have listed some better resources but I'm not 
familiar with any - but I tried to write a balanced, 
gentle-push-in-the-right-direction, sort of message.  Re-reading the 
snippet you highlighted, it does sound rude.  It wasn't meant to be. 
(Roberto, please accept my apologies!)

Anyway, I'll go back to my lurking now.

Cheers,
dstn.


[1] Rhetorical question.  If you feel like replying, can I suggest we take 
it off-list?  (Not trying to be a list-cop or anything, of course... :)

^ permalink raw reply

* Re: [PATCH 2.6.15-rc4] ppc32: Fixes for non-zero PPC_MEMSTART on PPC440
From: Benjamin Herrenschmidt @ 2005-12-05  0:22 UTC (permalink / raw)
  To: Jason Gunthorpe; +Cc: linuxppc-embedded
In-Reply-To: <20051202080711.GA32759@obsidianresearch.com>

On Fri, 2005-12-02 at 01:07 -0700, Jason Gunthorpe wrote:
> I have a custom embedded system with a 440GP derived CPU that places the
> memory starting at 0xc0000000 which requires a non-zero PPC_MEMSTART. There
> are a couple of places that assume PPC_MEMSTART is 0. This results in
> various tricky crashing during booting. Most of the problems are
> not accounting for PPC_MEMSTART during va/pa translations. My fixes
> convert these places to use pre-existing macros instead of duplicating
> the calculation.

Just out of curiosity: why did you do such a bogus setup in the first
place ?

Ben.

^ permalink raw reply

* problem during kernel init with mmu_off
From: Saari, James @ 2005-12-04 22:39 UTC (permalink / raw)
  To: linuxppc-embedded

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


I would seem to be in much the same bad place; can you tell my how you
resolved your issue?


problem during kernel init with mmu_off

Stuart Yoder stuart.yoder at conformative.com
<mailto:linuxppc-embedded%40ozlabs.org?Subject=problem%20during%20kernel
%20init%20with%20mmu_off&In-Reply-To=> 
Fri Mar 12 01:28:25 EST 2004 

*	Previous message: unable to input in u-boot at Lite5200
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-March/013598.html> 
*	Next message: Can't set the schedual parameter of threads in
linux
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-March/013592.html> 
*	Messages sorted by: [ date ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-March/date.html#1359
1>  [ thread ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-March/thread.html#13
591>  [ subject ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-March/subject.html#1
3591>  [ author ]
<http://ozlabs.org/pipermail/linuxppc-embedded/2004-March/author.html#13
591>  

  _____  

I am trying to boot the 2.4 PPC kernel on a PPC750FX eval board.   The
bootloader in the boards firmware has the mmu _on_ with block addr
translation enabled.  It seems that all the BAT mappings are 1:1.

The kernel source as well as comments in the archive of this mailing
list
indicate that the mmu being on during kernel initialization should not
be an
issue.

However, I've determined through leds and uart that the kernel makes it
to
the RFI in mmu_off, but from that point goes into never-never land (I
can't
tell exactly what happened).

I've verified that the values in SRR0 and SRR1 are what is expected
prior to
the RFI which is supposed to turn the mmu off.

I also tried using MTMSR instead of RFI to turn the mmu off but the
processor seems to halt at that instruction.

I don't have a jtag debugger (yet) so I'm relying on leds and uart to
debug.
I really have no idea of the state of the chip after the RFI or MTMSR.

Anyone out there have any ideas?   Anything about the 750FX that is
different than other processors?

Thanks,

Stuart Yoder



 

---------------------------------------------------------------- 
James E P Saari, Systems Engineer, Defense Electronics Group
Mercury Computer Systems, Inc. http://www.mc.com
<blocked::blocked::blocked::http://www.mc.com/>  
1800 Alexander Bell Drive, Suite 100, Reston VA 20191
O: 703-673-2700 800-969-6702 D: 703-673-2717
F: 703-673-2727 800-969-8578
E-Mail mailto:jsaari@mc.com
<blocked::blocked::blocked::mailto:jsaari@mc.com>  (Personal)
mailto:jamesepsaari@cox.net
<blocked::blocked::blocked::mailto:jamesepsaari@cox.net>  
Internal: x2717 http://home.mc.com/~jsaari
<blocked::blocked::blocked::http://home.mc.com/~jsaari>  
-- [ ] --
Website of the week: http://biz.yahoo.com/special/drucker05.html
"Exploit change as an opportunity, and don't view it as a threat." -
Peter Drucker

 

[-- Attachment #2: Type: text/html, Size: 4848 bytes --]

^ permalink raw reply

* Re: PowerBook5,8 - TrackPad update
From: Michael Hanselmann @ 2005-12-04 22:42 UTC (permalink / raw)
  To: Stelian Pop
  Cc: linuxppc-dev, johannes, debian-powerpc, linux-kernel,
	Parag Warudkar
In-Reply-To: <1133533712.23129.25.camel@localhost.localdomain>

On Fri, Dec 02, 2005 at 03:28:31PM +0100, Stelian Pop wrote:
> Is this version really working well on the new Powerbooks ? From what
> I've seen in this thread there are still issues and it's still a work
> in progress, so it may be too early to integrate the changes in the
> kernel.

It works fine for the 15" PowerBooks (Oct 2005) and has been tested by
at least three people. 17" should work too, but I can't test that until
later this week.

> +#if defined(CONFIG_RELAYFS_FS) || defined(CONFIG_RELAYFS_FS_MODULE)
> +#include <linux/relayfs_fs.h>
> +#endif

> While the relayfs code is ok for debugging, I'm wondering if it should
> be left in the final version at all.

It doesn't hurt as it's not much code, it makes updating the driver for
newer devices easier and it's only enabled if requested. Because of
that, I would leave it in. However, I can split it into a separate patch
if wanted.

> +       int                     overflowwarn;   /* overflow warning printed? */

> I would use a static variable in the case -OVERFLOW: block here.

As there could be, due to whatever reason, multiple devices using the
same driver, one could overflow while another doesn't. Therefore, it
should be device specific.

> +               dev->xy_cur[i++] = dev->data[19];
> +               dev->xy_cur[i++] = dev->data[20];
> +               dev->xy_cur[i++] = dev->data[22];
> +               dev->xy_cur[i++] = dev->data[23];

> There is obviously a pattern here:

> 	for (i = 0; i < 15; i++)
> 		dev->xy_cur[i] = dev->data[ 19 + (i * 3) / 2 ]

It's not that easy. This code wouldn't work as it should.

I wrote a working loop into the patch below, but as the code's called
about 1'000 times a second I unrolled the loop myself. A friend of mine
calculated that the code would take at least twice the time to run when
written using a loop.

> I'm wondering if the same formula doesn't apply for more X and Y
> sensors (like 16 X and 16 Y sensors on the old Powerbooks, 26 for the
> 17" models)

It does and is addressed in the new patch below.

> What is the point in doing this since the dbg_dump is called a few lines
> later ?

Those were some leftovers from my debugging and would have been deleted
before submitting. I just didn't want to take everything out if someone
else wants to do some extensive debugging or so.

Here's an updated patch including support for the 17" PowerBooks (Oct
2005). The informations about the 17" one are from Alex Harper.

---
--- linux-2.6.15-rc5/drivers/usb/input/appletouch.c.orig	2005-12-04 20:25:21.000000000 +0100
+++ linux-2.6.15-rc5/drivers/usb/input/appletouch.c	2005-12-04 23:37:29.000000000 +0100
@@ -6,9 +6,19 @@
  * Copyright (C) 2005      Stelian Pop (stelian@popies.net)
  * Copyright (C) 2005      Frank Arnold (frank@scirocco-5v-turbo.de)
  * Copyright (C) 2005      Peter Osterlund (petero2@telia.com)
+ * Copyright (C) 2005      Parag Warudkar (parag.warudkar@gmail.com)
+ * Copyright (C) 2005      Michael Hanselmann (linux-kernel@hansmi.ch)
  *
  * Thanks to Alex Harper <basilisk@foobox.net> for his inputs.
  *
+ * Nov 2005 - Parag Warudkar 
+ *  o Added ability to export data via relayfs
+ *
+ * Nov 2005 - Michael Hanselmann
+ *  o Compile relayfs support only if enabled in the kernel
+ *  o Enable relayfs only if requested by the user
+ *  o Added support for new October 2005 PowerBooks (Geyser 2)
+ *
  * 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
@@ -35,8 +45,13 @@
 #include <linux/input.h>
 #include <linux/usb_input.h>
 
+#if defined(CONFIG_RELAYFS_FS) || defined(CONFIG_RELAYFS_FS_MODULE)
+#include <linux/relayfs_fs.h>
+#endif
+
 /* Apple has powerbooks which have the keyboard with different Product IDs */
 #define APPLE_VENDOR_ID		0x05AC
+#define GEYSER_2_PRODUCT_ID	0x0215
 
 #define ATP_DEVICE(prod)					\
 	.match_flags = USB_DEVICE_ID_MATCH_DEVICE |		\
@@ -51,14 +66,17 @@
 static struct usb_device_id atp_table [] = {
 	{ ATP_DEVICE(0x020E) },
 	{ ATP_DEVICE(0x020F) },
+	{ ATP_DEVICE(GEYSER_2_PRODUCT_ID) },	/* PowerBooks Oct 2005 */
 	{ ATP_DEVICE(0x030A) },
 	{ ATP_DEVICE(0x030B) },
 	{ }					/* Terminating entry */
 };
 MODULE_DEVICE_TABLE (usb, atp_table);
 
-/* size of a USB urb transfer */
-#define ATP_DATASIZE	81
+#if defined(CONFIG_RELAYFS_FS) || defined(CONFIG_RELAYFS_FS_MODULE)
+struct rchan* rch = NULL;
+struct rchan_callbacks* rcb = NULL;
+#endif
 
 /*
  * number of sensors. Note that only 16 instead of 26 X (horizontal)
@@ -73,6 +91,7 @@
 
 /* maximum pressure this driver will report */
 #define ATP_PRESSURE	300
+
 /*
  * multiplication factor for the X and Y coordinates.
  * We try to keep the touchpad aspect ratio while still doing only simple
@@ -108,6 +127,8 @@
 	signed char		xy_old[ATP_XSENSORS + ATP_YSENSORS];
 						/* accumulated sensors */
 	int			xy_acc[ATP_XSENSORS + ATP_YSENSORS];
+	int			overflowwarn;	/* overflow warning printed? */
+	int			datalen;	/* size of an USB urb transfer */
 };
 
 #define dbg_dump(msg, tab) \
@@ -124,7 +145,11 @@
 		if (debug) printk(format, ##a);				\
 	} while (0)
 
-MODULE_AUTHOR("Johannes Berg, Stelian Pop, Frank Arnold");
+/* Checks if the device a Geyser 2 */
+#define IS_GEYSER_2(dev) \
+	(le16_to_cpu(dev->udev->descriptor.idProduct) == GEYSER_2_PRODUCT_ID)
+
+MODULE_AUTHOR("Johannes Berg, Stelian Pop, Frank Arnold, Parag Warudkar, Michael Hanselmann");
 MODULE_DESCRIPTION("Apple PowerBooks USB touchpad driver");
 MODULE_LICENSE("GPL");
 
@@ -132,6 +157,10 @@
 module_param(debug, int, 0644);
 MODULE_PARM_DESC(debug, "Activate debugging output");
 
+static int relayfs = 0;
+module_param(relayfs, int, 0644);
+MODULE_PARM_DESC(relayfs, "Activate relayfs support");
+
 static int atp_calculate_abs(int *xy_sensors, int nb_sensors, int fact,
 			     int *z, int *fingers)
 {
@@ -175,6 +204,13 @@
 	case 0:
 		/* success */
 		break;
+	case -EOVERFLOW:
+		if(!dev->overflowwarn) {
+			printk("appletouch: OVERFLOW with data "
+				"length %d, actual length is %d\n",
+				dev->datalen, dev->urb->actual_length);
+			dev->overflowwarn = 1;
+		}
 	case -ECONNRESET:
 	case -ENOENT:
 	case -ESHUTDOWN:
@@ -189,23 +225,83 @@
 	}
 
 	/* drop incomplete datasets */
-	if (dev->urb->actual_length != ATP_DATASIZE) {
+	if (dev->urb->actual_length != dev->datalen) {
 		dprintk("appletouch: incomplete data package.\n");
 		goto exit;
 	}
 
+#if defined(CONFIG_RELAYFS_FS) || defined(CONFIG_RELAYFS_FS_MODULE)
+	if (relayfs && dev->data) {
+		relay_write(rch, dev->data, dev->urb->actual_length);
+	}
+#endif
+
 	/* reorder the sensors values */
-	for (i = 0; i < 8; i++) {
+	if (IS_GEYSER_2(dev)) {
+		memset(dev->xy_cur, 0, sizeof(dev->xy_cur));
+
+		/*
+		 * The values are laid out like this:
+		 * Y1, Y2, -, Y3, Y4, -, ...
+		 * '-' is an unused value.
+		 *
+		 * The logic in a loop:
+		 * for (i = 0, j = 19; i < 20; i += 2, j += 3) {
+		 *	dev->xy_cur[i] = dev->data[j];
+		 *	dev->xy_cur[i + 1] = dev->data[j + 1];
+		 * }
+		 *
+		 * This code is called about 1'000 times per second for each
+		 * interrupt from the touchpad. Therefore it should be as fast
+		 * as possible. Writing the following code in a loop would take
+		 * about twice the time to run if not more.
+		 */
+
 		/* X values */
-		dev->xy_cur[i     ] = dev->data[5 * i +  2];
-		dev->xy_cur[i +  8] = dev->data[5 * i +  4];
-		dev->xy_cur[i + 16] = dev->data[5 * i + 42];
-		if (i < 2)
-			dev->xy_cur[i + 24] = dev->data[5 * i + 44];
+		dev->xy_cur[0] = dev->data[19];
+		dev->xy_cur[1] = dev->data[20];
+		dev->xy_cur[2] = dev->data[22];
+		dev->xy_cur[3] = dev->data[23];
+		dev->xy_cur[4] = dev->data[25];
+		dev->xy_cur[5] = dev->data[26];
+		dev->xy_cur[6] = dev->data[28];
+		dev->xy_cur[7] = dev->data[29];
+		dev->xy_cur[8] = dev->data[31];
+		dev->xy_cur[9] = dev->data[32];
+		dev->xy_cur[10] = dev->data[34];
+		dev->xy_cur[11] = dev->data[35];
+		dev->xy_cur[12] = dev->data[37];
+		dev->xy_cur[13] = dev->data[38];
+		dev->xy_cur[14] = dev->data[40];
+		dev->xy_cur[15] = dev->data[41];
+		dev->xy_cur[16] = dev->data[43];
+		dev->xy_cur[17] = dev->data[44];
+		dev->xy_cur[18] = dev->data[46];
+		dev->xy_cur[19] = dev->data[47];
 
 		/* Y values */
-		dev->xy_cur[i + 26] = dev->data[5 * i +  1];
-		dev->xy_cur[i + 34] = dev->data[5 * i +  3];
+		dev->xy_cur[ATP_XSENSORS + 0] = dev->data[1];
+		dev->xy_cur[ATP_XSENSORS + 1] = dev->data[2];
+		dev->xy_cur[ATP_XSENSORS + 2] = dev->data[4];
+		dev->xy_cur[ATP_XSENSORS + 3] = dev->data[5];
+		dev->xy_cur[ATP_XSENSORS + 4] = dev->data[7];
+		dev->xy_cur[ATP_XSENSORS + 5] = dev->data[8];
+		dev->xy_cur[ATP_XSENSORS + 6] = dev->data[10];
+		dev->xy_cur[ATP_XSENSORS + 7] = dev->data[11];
+		dev->xy_cur[ATP_XSENSORS + 8] = dev->data[13];
+	} else {
+		for (i = 0; i < 8; i++) {
+			/* X values */
+			dev->xy_cur[i     ] = dev->data[5 * i +  2];
+			dev->xy_cur[i +  8] = dev->data[5 * i +  4];
+			dev->xy_cur[i + 16] = dev->data[5 * i + 42];
+			if (i < 2)
+				dev->xy_cur[i + 24] = dev->data[5 * i + 44];
+
+			/* Y values */
+			dev->xy_cur[i + 26] = dev->data[5 * i +  1];
+			dev->xy_cur[i + 34] = dev->data[5 * i +  3];
+		}
 	}
 
 	dbg_dump("sample", dev->xy_cur);
@@ -216,16 +312,23 @@
 		dev->x_old = dev->y_old = -1;
 		memcpy(dev->xy_old, dev->xy_cur, sizeof(dev->xy_old));
 
-		/* 17" Powerbooks have 10 extra X sensors */
-		for (i = 16; i < ATP_XSENSORS; i++)
-			if (dev->xy_cur[i]) {
-				printk("appletouch: 17\" model detected.\n");
+		/* 17" Powerbooks have extra X sensors */
+		for (i = (IS_GEYSER_2(dev)?15:16); i < ATP_XSENSORS; i++) {
+			if (!dev->xy_cur[i]) continue;
+
+			printk("appletouch: 17\" model detected.\n");
+			if(IS_GEYSER_2(dev))
+				input_set_abs_params(dev->input, ABS_X, 0,
+						     (20 - 1) *
+						     ATP_XFACT - 1,
+						     ATP_FUZZ, 0);
+			else
 				input_set_abs_params(dev->input, ABS_X, 0,
 						     (ATP_XSENSORS - 1) *
 						     ATP_XFACT - 1,
 						     ATP_FUZZ, 0);
-				break;
-			}
+			break;
+		}
 
 		goto exit;
 	}
@@ -282,7 +385,8 @@
 		memset(dev->xy_acc, 0, sizeof(dev->xy_acc));
 	}
 
-	input_report_key(dev->input, BTN_LEFT, !!dev->data[80]);
+	input_report_key(dev->input, BTN_LEFT,
+			 !!dev->data[dev->datalen - 1]);
 
 	input_sync(dev->input);
 
@@ -323,7 +427,6 @@
 	int int_in_endpointAddr = 0;
 	int i, retval = -ENOMEM;
 
-
 	/* set up the endpoint information */
 	/* use only the first interrupt-in endpoint */
 	iface_desc = iface->cur_altsetting;
@@ -353,6 +456,8 @@
 
 	dev->udev = udev;
 	dev->input = input_dev;
+	dev->overflowwarn = 0;
+	dev->datalen = (IS_GEYSER_2(dev)?64:81);
 
 	dev->urb = usb_alloc_urb(0, GFP_KERNEL);
 	if (!dev->urb) {
@@ -360,7 +465,7 @@
 		goto err_free_devs;
 	}
 
-	dev->data = usb_buffer_alloc(dev->udev, ATP_DATASIZE, GFP_KERNEL,
+	dev->data = usb_buffer_alloc(dev->udev, dev->datalen, GFP_KERNEL,
 				     &dev->urb->transfer_dma);
 	if (!dev->data) {
 		retval = -ENOMEM;
@@ -369,7 +474,7 @@
 
 	usb_fill_int_urb(dev->urb, udev,
 			 usb_rcvintpipe(udev, int_in_endpointAddr),
-			 dev->data, ATP_DATASIZE, atp_complete, dev, 1);
+			 dev->data, dev->datalen, atp_complete, dev, 1);
 
 	usb_make_path(udev, dev->phys, sizeof(dev->phys));
 	strlcat(dev->phys, "/input0", sizeof(dev->phys));
@@ -385,14 +490,25 @@
 
 	set_bit(EV_ABS, input_dev->evbit);
 
-	/*
-	 * 12" and 15" Powerbooks only have 16 x sensors,
-	 * 17" models are detected later.
-	 */
-	input_set_abs_params(input_dev, ABS_X, 0,
-			     (16 - 1) * ATP_XFACT - 1, ATP_FUZZ, 0);
-	input_set_abs_params(input_dev, ABS_Y, 0,
-			     (ATP_YSENSORS - 1) * ATP_YFACT - 1, ATP_FUZZ, 0);
+	if (IS_GEYSER_2(dev)) {
+		/*
+		 * Oct 2005 15" PowerBooks have 15 X sensors, 17" are detected
+		 * later.
+		 */
+		input_set_abs_params(input_dev, ABS_X, 0,
+				     ((15 - 1) * ATP_XFACT) - 1, ATP_FUZZ, 0);
+		input_set_abs_params(input_dev, ABS_Y, 0,
+				     ((9 - 1) * ATP_YFACT) - 1, ATP_FUZZ, 0);
+	} else {
+		/*
+		 * 12" and 15" Powerbooks only have 16 x sensors,
+		 * 17" models are detected later.
+		 */
+		input_set_abs_params(input_dev, ABS_X, 0,
+				     (16 - 1) * ATP_XFACT - 1, ATP_FUZZ, 0);
+		input_set_abs_params(input_dev, ABS_Y, 0,
+				     (ATP_YSENSORS - 1) * ATP_YFACT - 1, ATP_FUZZ, 0);
+	}
 	input_set_abs_params(input_dev, ABS_PRESSURE, 0, ATP_PRESSURE, 0, 0);
 
 	set_bit(EV_KEY, input_dev->evbit);
@@ -427,7 +543,7 @@
 		usb_kill_urb(dev->urb);
 		input_unregister_device(dev->input);
 		usb_free_urb(dev->urb);
-		usb_buffer_free(dev->udev, ATP_DATASIZE,
+		usb_buffer_free(dev->udev, dev->datalen,
 				dev->data, dev->urb->transfer_dma);
 		kfree(dev);
 	}
@@ -463,11 +579,30 @@
 
 static int __init atp_init(void)
 {
+#if defined(CONFIG_RELAYFS_FS) || defined(CONFIG_RELAYFS_FS_MODULE)
+	if (relayfs) {
+		rcb = kmalloc(sizeof(struct rchan_callbacks), GFP_KERNEL);
+		rcb->subbuf_start = NULL;
+		rcb->buf_mapped = NULL;
+		rcb->buf_unmapped = NULL;
+		rch = relay_open("atpdata", NULL, 256, 256, NULL);
+		if (!rch) return -ENOMEM;
+		printk("appletouch: Relayfs enabled.\n");
+	} else {
+		printk("appletouch: Relayfs disabled.\n");
+	}
+#endif
 	return usb_register(&atp_driver);
 }
 
 static void __exit atp_exit(void)
 {
+#if defined(CONFIG_RELAYFS_FS) || defined(CONFIG_RELAYFS_FS_MODULE)
+	if (relayfs) {
+		relay_close(rch);
+		kfree(rcb);
+	}
+#endif
 	usb_deregister(&atp_driver);
 }
 

^ permalink raw reply

* MPC8272ADS stability issues
From: Liechty Ronald-RAT109 @ 2005-12-04 22:36 UTC (permalink / raw)
  To: linuxppc-embedded

Hello,

Please excuse my intrusion into this mail group.  Usually I subscribe
and read the messages for a while before I post.  However, it was
brought to Freescale's attention that there was a thread that needed
addressing.

I want to thank you all for reporting this stability issue with the
boards. We were aware of some problems and are working hard to
straighten them out, in particular problems with the Flash SIMMs.  If
you have a board which you even question please contact Freescale for
new Flash SIMMs or to get a replacement for your board. =20

Freescale and Developer Technology group within Freescale strives for
the highest quality and anything less is unacceptable.  I personally
wish to apologize for any inconvenience this has caused anyone. =20

Finally I will be monitory this message list and reporting to those who
can make differences all that I see here.  If you wish to write to me
directly please do so.

I'm sorry for the delay in responding to this issue.

Ron

-- =20
Ron Liechty =20
Ombudsman Freescale Developer Technology
ron.liechty@freescale.com=20

^ permalink raw reply

* Re: back trace when a SIGSEGV
From: Benjamin Herrenschmidt @ 2005-12-04 22:16 UTC (permalink / raw)
  To: Redondo Garcia, Roberto; +Cc: linuxppc-dev
In-Reply-To: <6A28467355D2AD478D1F51C479415AE77B47E9@MADTORMAIL.indra.es>

On Fri, 2005-12-02 at 11:33 +0100, Redondo Garcia, Roberto wrote:
> hello, 
> I have a program that when it has been several hours running, it has a
> problem and falls and it produces a SIGSEGV.  I would like to know to
> how debug this error, because I do not have ulimit for generate core
> dump o examine a back trace.

You can run your program under gdb, or you may want to have a look at
tridge' junk code directory for his segv_handler bit that you can put in
LD_PRELOAD

http://www.samba.org/junkcode/#segv_handler

Ben.

^ permalink raw reply

* Re: back trace when a SIGSEGV
From: Benjamin Herrenschmidt @ 2005-12-04 22:14 UTC (permalink / raw)
  To: Dustin Lang; +Cc: linuxppc-dev, Redondo Garcia, Roberto
In-Reply-To: <Pine.LNX.4.60.0512020612540.4326@tin.icics.ubc.ca>


> However, this mailing list is for _development_ of the linux _kernel_ on 
> PowerPC.  Your question is not about kernel development so it doesn't 
> belong here.  (Unless you are sure that your program is correct and 
> somehow the kernel is unfairly giving you a segfault - which doesn't seem 
> to be the case, based on your message.)  Find a mailing list or message 
> board about userspace programming and ask your question there.
>
> .../...

You don't need to play the cop on this list, nobody appointed you to
that position.

Ben.

^ permalink raw reply

* Re: [PATCH] include/asm-ppc/btext.h: add prototype of btext_init function.
From: Geert Uytterhoeven @ 2005-12-04 21:13 UTC (permalink / raw)
  To: Andrew Morton; +Cc: Linux/PPC Development, otavio
In-Reply-To: <20051203160020.42d1da3c.akpm@osdl.org>

On Sat, 3 Dec 2005, Andrew Morton wrote:
> Eugene Surovegin <ebs@ebshome.net> wrote:
> >  > +extern void __init btext_init(boot_infos_t *bi);
> >  >  extern void btext_welcome(void);
> >  >  extern void btext_prepare_BAT(void);
> >  >  extern void btext_setup_display(int width, int height, int depth, int pitch,
> > 
> >  "__init" should be placed between closing brace and semicolon. For 
> >  more info, see include/linux/init.h
> 
> I don't think it matters much.  Often we just omit it from the declaration
> - it's only required at the definition site

IIRC, on Alpha it's needed/recommended on both, to allow the compiler to
optimize jumps to the same section?

Gr{oetje,eeting}s,

						Geert

--
Geert Uytterhoeven -- There's lots of Linux beyond ia32 -- geert@linux-m68k.org

In personal conversations with technical people, I call myself a hacker. But
when I'm talking to journalists I just say "programmer" or something like that.
							    -- Linus Torvalds

^ permalink raw reply

* Re: 回复:Re: mfspr r0,638. Why 638 ?
From: Wolfgang Denk @ 2005-12-04 10:18 UTC (permalink / raw)
  To: zengshuai; +Cc: ppc
In-Reply-To: <14801389.1133657729738.JavaMail.postfix@mx3.mail.sohu.com>

In message <14801389.1133657729738.JavaMail.postfix@mx3.mail.sohu.com> you wrote:
>
> but how we can get IMMR in PQ2 ? still "mfspr r0,638"?

Instead of asking here you should read the PQ2 User's Manual.

Best regards,

Wolfgang Denk

-- 
Software Engineering:  Embedded and Realtime Systems,  Embedded Linux
Phone: (+49)-8142-66989-10 Fax: (+49)-8142-66989-80 Email: wd@denx.de
If at first you don't succeed, you are running about average.

^ permalink raw reply

* Re: [PATCH] include/asm-ppc/btext.h: add prototype of btext_init function.
From: Paul Mackerras @ 2005-12-04  2:21 UTC (permalink / raw)
  To: Eugene Surovegin; +Cc: akpm, linuxppc-dev, Otavio Salvador
In-Reply-To: <20051203212402.GA2821@gate.ebshome.net>

Eugene Surovegin writes:

> "__init" should be placed between closing brace and semicolon. For 
> more info, see include/linux/init.h

Actually, there's no point putting __init in an extern declaration.

Paul.

^ permalink raw reply

* 回复:Re: mfspr r0,638. Why 638 ?
From: zengshuai @ 2005-12-04  0:55 UTC (permalink / raw)
  To: Kumar Gala; +Cc: ppc

thanks.i have found it.
but how we can get IMMR in PQ2 ? still "mfspr r0,638"?

-----  原文  -----
From: Kumar Gala 
Cc: ppc 
Subject: Re: mfspr r0,638. Why 638 ?
Sent: Sun Dec 04 00:16:50 CST 2005

> This is 8xx (PQ1) SPR.  If you look one of those user manuals you  
> will see it.
> 
> - kumar
> 
> On Dec 3, 2005, at 4:38 AM, <zengshuai@sogou.com>  
> <zengshuai@sogou.com> wrote:
> 
> > We know "mfspr r0,638" can get the IMMR.
> > But why?
> > I checked "MPC82xx Reference Manual","G2 PowerPC&#8482; Core  
> > Reference Manual","Programming Environments Manual",
> > but I didn't find any word about that.How did the person who first  
> > known know?
> >
> > "G2 PowerPC&#8482; Core Reference Manual"  where is the "SPR 638"?
> > Table 3-33. Implementation-Specific SPR Encodings (mfspr)
> > Decimal spr[5?9] spr[0?4] RegisterName Access
> > 58 00001 11010 CSRR0  Supervisor
> > 59 00001 11011 CSRR1  Supervisor
> > 276 01000 10100 SPRG4  Supervisor
> > 277 01000 10101 SPRG5  Supervisor
> > 278 01000 10110 SPRG6  Supervisor
> > 279 01000 10111 SPRG7  Supervisor
> > 286 01000 11110 SVR  Supervisor
> > 309 01001 10101 IBCR  Supervisor
> > 310 01001 10110 DBCR  Supervisor
> > 311 01001 10111 MBAR  Supervisor
> > 317 01001 11101 DABR2  Supervisor
> > 560 10001 10000 IBAT4U  Supervisor
> > 561 10001 10001 IBAT4L  Supervisor
> > 562 10001 10010 IBAT5U  Supervisor
> > 563 10001 10011 IBAT5L  Supervisor
> > 564 10001 10100 IBAT6U  Supervisor
> > 565 10001 10101 IBAT6L  Supervisor
> > 566 10001 10110 IBAT7U  Supervisor
> > 567 10001 10111 IBAT7L  Supervisor
> > 568 10001 11000 DBAT4U  Supervisor
> > 569 10001 11001 DBAT4L  Supervisor
> > 570 10001 11010 DBAT5U  Supervisor
> > 571 10001 11011 DBAT5L  Supervisor
> > 572 10001 11100 DBAT6U  Supervisor
> > 573 10001 11101 DBAT6L Supervisor
> > 574 10001 11110 DBAT7U  Supervisor
> > 575 10001 11111 DBAT7L  Supervisor
> > 976 11110 10000 DMISS Supervisor
> > 977 11110 10001 DCMP Supervisor
> > 978 11110 10010 HASH1 Supervisor
> > 979 11110 10011 HASH2 Supervisor
> > 980 11110 10100 IMISS Supervisor
> > 981 11110 10101 ICMP Supervisor
> > 982 11110 10110 RPA Supervisor
> > 1008 11111 10000 HID0 Supervisor
> > 1009 11111 10001 HID1 Supervisor
> > 1010 11111 10010 IABR Supervisor
> > 1011 11111 10011 HID2 Supervisor
> > 1013 11111 10101 DABR  Supervisor
> > 1018 11111 11010 IABR2  Supervisor
> >
> > ------------------------------
> > 我现在使用Sogou.com的2G邮箱了,你也来试试吧!
> > http://mail.sogou.com/recommend/sogoumail_invite_reg1.jsp? 
> > from=sogouinvitation&s_EMAIL=zengshuai% 
> > 40sogou.com&username=linuxppc-embedded&FullName=linuxppc- 
> > embedded&Email=linuxppc-embedded% 
> > 40ozlabs.org&verify=755eff4e640bdcfc57d93cbd8b0a9cb7
> >
> > _______________________________________________
> > Linuxppc-embedded mailing list
> > Linuxppc-embedded@ozlabs.org
> > https://ozlabs.org/mailman/listinfo/linuxppc-embedded
> 


------------------------------
我现在使用Sogou.com的2G邮箱了,你也来试试吧! 
http://mail.sogou.com/recommend/sogoumail_invite_reg1.jsp?from=sogouinvitation&s_EMAIL=zengshuai%40sogou.com&username=&FullName=&Email=&verify=e197bd6dbd1fc7f8d6a035729df08d63

^ permalink raw reply

* Re: [PATCH] include/asm-ppc/btext.h: add prototype of btext_init function.
From: Eugene Surovegin @ 2005-12-04  0:12 UTC (permalink / raw)
  To: Andrew Morton; +Cc: linuxppc-dev, otavio
In-Reply-To: <20051203160020.42d1da3c.akpm@osdl.org>

On Sat, Dec 03, 2005 at 04:00:20PM -0800, Andrew Morton wrote:
> Eugene Surovegin <ebs@ebshome.net> wrote:
> >
> >  > +extern void __init btext_init(boot_infos_t *bi);
> >  >  extern void btext_welcome(void);
> >  >  extern void btext_prepare_BAT(void);
> >  >  extern void btext_setup_display(int width, int height, int depth, int pitch,
> > 
> >  "__init" should be placed between closing brace and semicolon. For 
> >  more info, see include/linux/init.h
> 
> I don't think it matters much.  Often we just omit it from the declaration
> - it's only required at the definition site

Quite likely it doesn't matter, but I think we should follow existing 
style, if not for correctness, but at least for consistency (it 
actually caught my eye exactly because it _looked_ different). I'm 
pretty sure original poster have tested original version :).

-- 
Eugene

^ permalink raw reply

* Re: [PATCH] include/asm-ppc/btext.h: add prototype of btext_init function.
From: Andrew Morton @ 2005-12-04  0:00 UTC (permalink / raw)
  To: Eugene Surovegin; +Cc: linuxppc-dev, otavio
In-Reply-To: <20051203212402.GA2821@gate.ebshome.net>

Eugene Surovegin <ebs@ebshome.net> wrote:
>
>  > +extern void __init btext_init(boot_infos_t *bi);
>  >  extern void btext_welcome(void);
>  >  extern void btext_prepare_BAT(void);
>  >  extern void btext_setup_display(int width, int height, int depth, int pitch,
> 
>  "__init" should be placed between closing brace and semicolon. For 
>  more info, see include/linux/init.h

I don't think it matters much.  Often we just omit it from the declaration
- it's only required at the definition site

^ permalink raw reply


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