Hello! Add support for IDS8247 board from IDS GmbH, Germany
Regards Sergej Stepanov. --- diff -ruN linux-2.6.22.1_orig/arch/powerpc/boot/dts/mpc8247ids.dts linux-2.6.22.1_ids8247/arch/powerpc/boot/dts/mpc8247ids.dts --- linux-2.6.22.1_orig/arch/powerpc/boot/dts/mpc8247ids.dts 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.22.1_ids8247/arch/powerpc/boot/dts/mpc8247ids.dts 2007-08-02 10:15:22.000000000 +0200 @@ -0,0 +1,146 @@ +/* + * IDS8247 Device Tree Source + * + * Copyright 2007 IDS GmbH, Germany + * Sergej Steapnov <[EMAIL PROTECTED]> + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + * Compiled: dtc -O dtb -o mpc8247ids.dtb -b 0 mpc8247ids.dts + */ + +/ { + model = "MPC8247IDS"; + compatible = "IDSLinuxFamily"; + #address-cells = <1>; + #size-cells = <1>; + + cpus { + #cpus = <1>; + #address-cells = <1>; + #size-cells = <0>; + + PowerPC,[EMAIL PROTECTED] { + name="PowerPC,8247"; + device_type = "cpu"; + reg = <0>; + d-cache-line-size = <20>; // 32 bytes + i-cache-line-size = <20>; // 32 bytes + d-cache-size = <4000>; // L1, 16K + i-cache-size = <4000>; // L1, 16K + timebase-frequency = <FBC520>; + bus-frequency = <3EF1480>; + clock-frequency = <FBC5200>; + 32-bit; + }; + }; + + memory { + name="memory"; + device_type = "memory"; + reg = <0 2000000>; + }; + + [EMAIL PROTECTED] { + #address-cells = <1>; + #size-cells = <1>; + #interrupt-cells = <2>; + device_type = "soc"; + reg = <f0000000 21000>; + [EMAIL PROTECTED] { + #address-cells = <1>; + #size-cells = <1>; + #interrupt-cells = <1>; + device_type = "serial"; + compatible = "ns16550"; + reg = <e0008000 0000100>; + interrputs = <19>; + //bus-frequency = <BEBC200>; + clock-frequency = <E10000>; + current-speed = <1C200>; + }; + [EMAIL PROTECTED] { + device_type = "mdio"; + compatible = "fs_enet"; + reg = <0 0>; + #address-cells = <1>; + #size-cells = <0>; + #interrupt-cells = <2>; + interrupt-parent = <&cpmpic>; + phy0: [EMAIL PROTECTED] { + #address-cells = <0>; + #interrupt-cells = <2>; + interrupts = <14 2>; + interrupt-parent = <&cpmpic>; + bitbang = [07 07 15 00 00 01]; + bboffsets = <10d70 10d60 10d50>; + reg = <1>; + device_type = "ethernet-phy"; + }; + }; + [EMAIL PROTECTED] { + #address-cells = <1>; + #size-cells = <0>; + device_type = "network"; + compatible = "fs_enet"; + device-id=<1>; + model = "FCC"; + reg = <f0011300 20 f0008400 100 f0011380 30>; + interrupts = <20 2>; + interrupt-parent = <&cpmpic>; + phy-handle = <&phy0>; + rx-clock = <a>; + tx-clock = <9>; + }; + cpm2: [EMAIL PROTECTED] { + #address-cells = <1>; + #size-cells = <1>; + device_type = "cpm"; + model = "CPM2"; + ranges = <00000000 00000000 20000>; + reg = <0 20000>; + command-proc = <119c0>; + brg-frequency = <5E69EC0>; + cpm_clk = <BCD3D80>; + compatible = "8272"; + }; + cpmpic: [EMAIL PROTECTED] { + #address-cells = <0>; + #interrupt-cells = <2>; + interrupt-controller; + reg = <10c00 80>; + built-in; + device_type = "cpm-pic"; + compatible = "CPM2"; + }; + }; + + [EMAIL PROTECTED] { + device_type = "rom"; + compatible = "direct-mapped"; + reg = <ff800000 800000>; /* Default (64MB) */ + probe-type = "CFI"; + bank-width = <1>; + partitions = <00000000 00200000 /* RO */ + 00200000 00700000 /* R0 */ + 00700000 00740000 /* RO */ + 00740000 00780000>; /* RO */ + partition-names = "kernel", "cramfs", "u-boot", "env"; + }; + [EMAIL PROTECTED] { + device_type = "gen_nand"; + compatible = "direct-mapped"; + reg = <e1000000 1000>; + partitions = <00000000 01000000 /* RW */ + 01000000 01000000>;/* RO */ + partition-names = "IDS8247-NANDBIN", "IDS8247-NANDDATA"; + }; + chosen { + name = "chosen"; + bootargs = "root=/dev/nfs rtc-pcf8563.probe=1,0x51 rw nfsroot=192.168.30.54:/home/opt/eldk-4.1/ppc_6xx ip=192.168.30.131:192.168.30.54:192.168.30.1:255.255.255.0:ids8247:eth0:off netconsole=@/,@192.168.30.54"; + linux,platform = <0>; + linux,stdout-path = "/[EMAIL PROTECTED]/[EMAIL PROTECTED]"; + }; +}; diff -ruN linux-2.6.22.1_orig/arch/powerpc/configs/ids8247_defconfig linux-2.6.22.1_ids8247/arch/powerpc/configs/ids8247_defconfig --- linux-2.6.22.1_orig/arch/powerpc/configs/ids8247_defconfig 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.22.1_ids8247/arch/powerpc/configs/ids8247_defconfig 2007-08-02 10:15:22.000000000 +0200 @@ -0,0 +1,637 @@ +# +# Automatically generated make config: don't edit +# Linux kernel version: 2.6.22.1 +# Tue Jul 31 09:34:17 2007 +# +# CONFIG_PPC64 is not set +CONFIG_PPC32=y +CONFIG_PPC_MERGE=y +CONFIG_MMU=y +CONFIG_GENERIC_HARDIRQS=y +CONFIG_IRQ_PER_CPU=y +CONFIG_RWSEM_XCHGADD_ALGORITHM=y +CONFIG_ARCH_HAS_ILOG2_U32=y +CONFIG_GENERIC_HWEIGHT=y +CONFIG_GENERIC_CALIBRATE_DELAY=y +CONFIG_GENERIC_FIND_NEXT_BIT=y +CONFIG_PPC=y +CONFIG_EARLY_PRINTK=y +CONFIG_GENERIC_NVRAM=y +CONFIG_SCHED_NO_NO_OMIT_FRAME_POINTER=y +CONFIG_ARCH_MAY_HAVE_PC_FDC=y +CONFIG_PPC_OF=y +CONFIG_PPC_UDBG_16550=y +# CONFIG_GENERIC_TBSYNC is not set +CONFIG_AUDIT_ARCH=y +CONFIG_GENERIC_BUG=y +CONFIG_DEFAULT_UIMAGE=y + +# +# Processor support +# +CONFIG_PPC_82xx=y +CONFIG_6xx=y +CONFIG_PPC_FPU=y +CONFIG_PPC_STD_MMU=y +CONFIG_PPC_STD_MMU_32=y +CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" + +# +# Code maturity level options +# +CONFIG_EXPERIMENTAL=y +CONFIG_BROKEN_ON_SMP=y +CONFIG_INIT_ENV_ARG_LIMIT=32 + +# +# General setup +# +CONFIG_LOCALVERSION="" +CONFIG_LOCALVERSION_AUTO=y +CONFIG_SWAP=y +CONFIG_SYSVIPC=y +CONFIG_IPC_NS=y +CONFIG_SYSVIPC_SYSCTL=y +CONFIG_POSIX_MQUEUE=y +CONFIG_BSD_PROCESS_ACCT=y +CONFIG_BSD_PROCESS_ACCT_V3=y +CONFIG_LOG_BUF_SHIFT=14 +CONFIG_SYSCTL=y +CONFIG_EMBEDDED=y +CONFIG_SYSCTL_SYSCALL=y +CONFIG_KALLSYMS=y +CONFIG_KALLSYMS_ALL=y +CONFIG_HOTPLUG=y +CONFIG_PRINTK=y +CONFIG_BUG=y +CONFIG_BASE_FULL=y +CONFIG_FUTEX=y +CONFIG_ANON_INODES=y +CONFIG_EPOLL=y +CONFIG_SIGNALFD=y +CONFIG_TIMERFD=y +CONFIG_EVENTFD=y +CONFIG_SHMEM=y +CONFIG_VM_EVENT_COUNTERS=y +CONFIG_SLAB=y +CONFIG_RT_MUTEXES=y +CONFIG_BASE_SMALL=0 + +# +# Loadable module support +# +CONFIG_MODULES=y +CONFIG_MODULE_UNLOAD=y +CONFIG_MODULE_FORCE_UNLOAD=y +CONFIG_KMOD=y + +# +# Block layer +# +CONFIG_BLOCK=y + +# +# IO Schedulers +# +CONFIG_IOSCHED_NOOP=y +CONFIG_IOSCHED_DEADLINE=y +CONFIG_DEFAULT_DEADLINE=y +CONFIG_DEFAULT_IOSCHED="deadline" + +# +# Platform support +# +CONFIG_MPC82xx_IDS8247=y +CONFIG_8260=y +CONFIG_8272=y +CONFIG_PPC_NATIVE=y +CONFIG_CPM2=y + +# +# Kernel options +# +CONFIG_HZ_250=y +CONFIG_HZ=250 +CONFIG_PREEMPT_NONE=y +CONFIG_BINFMT_ELF=y +CONFIG_BINFMT_MISC=y +CONFIG_ARCH_ENABLE_MEMORY_HOTPLUG=y +CONFIG_ARCH_FLATMEM_ENABLE=y +CONFIG_ARCH_POPULATES_NODE_MAP=y +CONFIG_SELECT_MEMORY_MODEL=y +CONFIG_FLATMEM_MANUAL=y +CONFIG_FLATMEM=y +CONFIG_FLAT_NODE_MEM_MAP=y +CONFIG_SPLIT_PTLOCK_CPUS=4 +CONFIG_ZONE_DMA_FLAG=1 +CONFIG_PROC_DEVICETREE=y +CONFIG_SECCOMP=y +CONFIG_WANT_DEVICE_TREE=y +CONFIG_DEVICE_TREE="" +CONFIG_ISA_DMA_API=y + +# +# Bus options +# +CONFIG_ZONE_DMA=y +CONFIG_FSL_SOC=y + +# +# 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_BOOT_LOAD_BOOL is not set +CONFIG_BOOT_LOAD=0x00400000 + +# +# Networking +# +CONFIG_NET=y + +# +# Networking options +# +CONFIG_PACKET=y +CONFIG_UNIX=y +CONFIG_XFRM=y +CONFIG_INET=y +CONFIG_IP_MULTICAST=y +CONFIG_IP_FIB_HASH=y +CONFIG_IP_PNP=y +CONFIG_IP_PNP_DHCP=y +CONFIG_IP_PNP_BOOTP=y +CONFIG_SYN_COOKIES=y +CONFIG_INET_XFRM_MODE_TRANSPORT=y +CONFIG_INET_XFRM_MODE_TUNNEL=y +CONFIG_INET_XFRM_MODE_BEET=y +CONFIG_INET_DIAG=y +CONFIG_INET_TCP_DIAG=y +CONFIG_TCP_CONG_CUBIC=y +CONFIG_DEFAULT_TCP_CONG="cubic" +# CONFIG_IPV6 is not set + +# +# QoS and/or fair queueing +# +# CONFIG_NET_SCHED is not set + +# +# Network testing +# + +# +# Wireless +# + +# +# Device Drivers +# + +# +# Generic Driver Options +# +CONFIG_STANDALONE=y +CONFIG_PREVENT_FIRMWARE_BUILD=y +CONFIG_DEBUG_DRIVER=y + +# +# Connector - unified userspace <-> kernelspace linker +# +CONFIG_MTD=y +CONFIG_MTD_PARTITIONS=y + +# +# User Modules And Translation Layers +# +CONFIG_MTD_CHAR=y +CONFIG_MTD_BLKDEVS=y +CONFIG_MTD_BLOCK=y +CONFIG_NFTL=y +CONFIG_NFTL_RW=y + +# +# RAM/ROM/Flash chip drivers +# +CONFIG_MTD_CFI=y +CONFIG_MTD_GEN_PROBE=y +CONFIG_MTD_CFI_ADV_OPTIONS=y +CONFIG_MTD_CFI_NOSWAP=y +CONFIG_MTD_CFI_GEOMETRY=y +CONFIG_MTD_MAP_BANK_WIDTH_1=y +CONFIG_MTD_CFI_I1=y +CONFIG_MTD_CFI_AMDSTD=y +CONFIG_MTD_CFI_UTIL=y + +# +# Mapping drivers for chip access +# +CONFIG_MTD_PHYSMAP=y +CONFIG_MTD_PHYSMAP_START=0xFF800000 +CONFIG_MTD_PHYSMAP_LEN=0x800000 +CONFIG_MTD_PHYSMAP_BANKWIDTH=1 + +# +# Self-contained MTD device drivers +# + +# +# Disk-On-Chip Device Drivers +# +CONFIG_MTD_NAND=y +CONFIG_MTD_NAND_VERIFY_WRITE=y +CONFIG_MTD_NAND_IDS=y +CONFIG_MTD_NAND_PLATFORM=y + +# +# UBI - Unsorted block images +# +# CONFIG_MTD_UBI is not set + +# +# Parallel port support +# +# CONFIG_PARPORT is not set + +# +# Plug and Play support +# +# CONFIG_PNPACPI is not set + +# +# Block devices +# +CONFIG_BLK_DEV_LOOP=y + +# +# Misc devices +# +# CONFIG_IDE is not set + +# +# SCSI device support +# + +# +# Multi-device support (RAID and LVM) +# + +# +# Network device support +# +CONFIG_NETDEVICES=y +CONFIG_PHYLIB=y + +# +# MII PHY device drivers +# +CONFIG_MICREL_PHY=y + +# +# Ethernet (10 or 100Mbit) +# +CONFIG_NET_ETHERNET=y +CONFIG_MII=y +CONFIG_FS_ENET=y +# CONFIG_FS_ENET_HAS_SCC is not set +CONFIG_FS_ENET_HAS_FCC=y +# CONFIG_NETDEV_1000 is not set +# CONFIG_NETDEV_10000 is not set + +# +# Wireless LAN +# + +# +# ISDN subsystem +# +# CONFIG_ISDN is not set + +# +# Telephony Support +# +# CONFIG_PHONE is not set + +# +# Input device support +# +CONFIG_INPUT=y + +# +# Userland interfaces +# + +# +# Input Device Drivers +# + +# +# Hardware I/O ports +# + +# +# Character devices +# +CONFIG_VT=y +CONFIG_VT_CONSOLE=y +CONFIG_HW_CONSOLE=y + +# +# Serial drivers +# +CONFIG_SERIAL_8250=y +CONFIG_SERIAL_8250_CONSOLE=y +CONFIG_SERIAL_8250_NR_UARTS=1 +CONFIG_SERIAL_8250_RUNTIME_UARTS=1 +CONFIG_SERIAL_8250_EXTENDED=y +CONFIG_SERIAL_8250_SHARE_IRQ=y + +# +# Non-8250 serial port support +# +CONFIG_SERIAL_CORE=y +CONFIG_SERIAL_CORE_CONSOLE=y +CONFIG_UNIX98_PTYS=y +CONFIG_LEGACY_PTYS=y +CONFIG_LEGACY_PTY_COUNT=256 + +# +# IPMI +# +CONFIG_NVRAM=y +CONFIG_GEN_RTC=y + +# +# TPM devices +# +CONFIG_I2C=y +CONFIG_I2C_BOARDINFO=y +CONFIG_I2C_CHARDEV=y + +# +# I2C Algorithms +# +CONFIG_I2C_ALGOBIT=y + +# +# I2C Hardware Bus support +# +CONFIG_I2C_IDS8247=y + +# +# Miscellaneous I2C Chip support +# +CONFIG_SENSORS_EEPROM=y +CONFIG_I2C_DEBUG_CORE=y +CONFIG_I2C_DEBUG_ALGO=y +CONFIG_I2C_DEBUG_BUS=y +CONFIG_I2C_DEBUG_CHIP=y + +# +# SPI support +# + +# +# Dallas's 1-wire bus +# +# CONFIG_W1 is not set +CONFIG_HWMON=y + +# +# Multifunction device drivers +# +# CONFIG_MFD_SM501 is not set + +# +# Multimedia devices +# + +# +# Graphics support +# +# CONFIG_BACKLIGHT_LCD_SUPPORT is not set + +# +# Display device support +# + +# +# Console display driver support +# +CONFIG_VGA_CONSOLE=y +CONFIG_DUMMY_CONSOLE=y + +# +# Sound +# +# CONFIG_SOUND is not set + +# +# HID Devices +# +# CONFIG_HID is not set + +# +# USB support +# + +# +# NOTE: USB_STORAGE enables SCSI, and 'SCSI disk support' +# + +# +# USB Gadget Support +# + +# +# LED devices +# +# CONFIG_NEW_LEDS is not set + +# +# LED drivers +# + +# +# LED Triggers +# + +# +# InfiniBand support +# + +# +# EDAC - error detection and reporting (RAS) (EXPERIMENTAL) +# + +# +# Real Time Clock +# +CONFIG_RTC_LIB=y +CONFIG_RTC_CLASS=y +CONFIG_RTC_HCTOSYS=y +CONFIG_RTC_HCTOSYS_DEVICE="rtc0" + +# +# RTC interfaces +# +CONFIG_RTC_INTF_SYSFS=y +CONFIG_RTC_INTF_PROC=y +CONFIG_RTC_INTF_DEV=y +CONFIG_RTC_INTF_DEV_UIE_EMUL=y + +# +# I2C RTC drivers +# +CONFIG_RTC_DRV_PCF8563=y + +# +# SPI RTC drivers +# + +# +# Platform RTC drivers +# + +# +# on-CPU RTC drivers +# + +# +# DMA Engine support +# +# CONFIG_DMA_ENGINE is not set + +# +# DMA Clients +# + +# +# DMA Devices +# + +# +# File systems +# +CONFIG_FS_POSIX_ACL=y +CONFIG_ROMFS_FS=y +CONFIG_INOTIFY=y +CONFIG_INOTIFY_USER=y +CONFIG_AUTOFS_FS=y +CONFIG_GENERIC_ACL=y + +# +# CD-ROM/DVD Filesystems +# + +# +# DOS/FAT/NT Filesystems +# + +# +# Pseudo filesystems +# +CONFIG_PROC_FS=y +CONFIG_PROC_KCORE=y +CONFIG_PROC_SYSCTL=y +CONFIG_SYSFS=y +CONFIG_TMPFS=y +CONFIG_TMPFS_POSIX_ACL=y +CONFIG_RAMFS=y + +# +# Miscellaneous filesystems +# +CONFIG_JFFS2_FS=y +CONFIG_JFFS2_FS_DEBUG=0 +CONFIG_JFFS2_FS_WRITEBUFFER=y +CONFIG_JFFS2_ZLIB=y +CONFIG_JFFS2_RTIME=y +CONFIG_CRAMFS=y + +# +# Network File Systems +# +CONFIG_NFS_FS=y +CONFIG_NFS_V3=y +CONFIG_NFS_V3_ACL=y +CONFIG_NFS_DIRECTIO=y +CONFIG_ROOT_NFS=y +CONFIG_LOCKD=y +CONFIG_LOCKD_V4=y +CONFIG_NFS_ACL_SUPPORT=y +CONFIG_NFS_COMMON=y +CONFIG_SUNRPC=y + +# +# Partition Types +# +# CONFIG_PARTITION_ADVANCED is not set +CONFIG_MSDOS_PARTITION=y + +# +# Native Language Support +# +# CONFIG_NLS is not set + +# +# Distributed Lock Manager +# + +# +# Library routines +# +CONFIG_BITREVERSE=y +CONFIG_CRC32=y +CONFIG_ZLIB_INFLATE=y +CONFIG_ZLIB_DEFLATE=y +CONFIG_PLIST=y +CONFIG_HAS_IOMEM=y +CONFIG_HAS_IOPORT=y +CONFIG_HAS_DMA=y + +# +# Instrumentation Support +# + +# +# Kernel hacking +# +CONFIG_PRINTK_TIME=y +CONFIG_DEBUG_KERNEL=y +CONFIG_DEBUG_KOBJECT=y +CONFIG_DEBUG_BUGVERBOSE=y +CONFIG_DEBUG_INFO=y +CONFIG_DEBUGGER=y +CONFIG_BDI_SWITCH=y + +# +# Security options +# + +# +# Cryptographic options +# +CONFIG_CRYPTO=y +CONFIG_CRYPTO_ALGAPI=y +CONFIG_CRYPTO_BLKCIPHER=y +CONFIG_CRYPTO_MANAGER=y +CONFIG_CRYPTO_MD5=y +CONFIG_CRYPTO_CBC=y +CONFIG_CRYPTO_DES=y +CONFIG_CRYPTO_BLOWFISH=y + +# +# Hardware crypto devices +# diff -ruN linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/ids8247.h linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/ids8247.h --- linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/ids8247.h 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/ids8247.h 2007-08-02 10:15:22.000000000 +0200 @@ -0,0 +1,52 @@ +/* + * MPC8247 IDS8274 board platform setup + * + * Author: Sergej Stepanov <[EMAIL PROTECTED]> + * Copyright (c) 2007, IDS GmbH, Germany + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ +#ifdef __KERNEL__ +#ifndef __IDS8247_PLATFORM +#define __IDS8247_PLATFORM + + +#include <linux/seq_file.h> +#include <asm/ppcboot.h> +#include <asm/irq.h> + +#define IO_PHYS_ADDR ((uint)0xE0000000) + +#define CPM_MAP_ADDR ((uint)get_immrbase()) +#define CPM_IRQ_OFFSET 0 + +#define PHY_INTERRUPT SIU_INT_IRQ2 + +/* For our show_cpuinfo hooks. */ +#define CPUINFO_VENDOR "Freescale Semiconductor" +#define CPUINFO_MACHINE "IDS8247 PowerPC Port by IDS GmbH" + +/* some info stuff */ +#define BOOTROM_RESTART_ADDR ((uint)0xFFF00104) + +#define I2C_ADDR_RTC 0x51 +#define CFG_NAND_BASE 0xE1000000 +#define IDS8247_UART_BASE 0xE0008000 +#define RS_TABLE_SIZE 1 +#define BASE_BAUD 115200 +#define IDS8247UARTIRQ SIU_INT_IRQ7 +#define SERIAL_PORT_DFNS \ + { 0, 14745600, 0, IDS8247UARTIRQ, \ + ASYNC_BOOT_AUTOCONF|ASYNC_SKIP_TEST, \ + iomem_base: (unsigned char *) 0xE0008000, \ + io_type: SERIAL_IO_MEM}, + + +void m82xx_calibrate_decr(void); +void mpc82xx_ads_show_cpuinfo(struct seq_file*); + +#endif /* __IDS8274_PLATFORM */ +#endif /* __KERNEL__ */ diff -ruN linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/Kconfig linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/Kconfig --- linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/Kconfig 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/Kconfig 2007-08-02 10:15:22.000000000 +0200 @@ -13,6 +13,19 @@ help This option enables support for the MPC8272 ADS board +config MPC82xx_IDS8247 + bool "IDS8247 based on MPC8247" + select DEFAULT_UIMAGE + select 8272 + select 8260 + select FSL_SOC + select PPC_NATIVE + select PPC_UDBG_16550 if SERIAL_8250 + select WANT_DEVICE_TREE + select MTD_NAND + help + This option enables support for the IDS8247 board + endchoice config PQ2ADS diff -ruN linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/Makefile linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/Makefile --- linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/Makefile 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/Makefile 2007-08-02 10:15:22.000000000 +0200 @@ -3,3 +3,4 @@ # obj-$(CONFIG_PPC_82xx) += mpc82xx.o obj-$(CONFIG_MPC82xx_ADS) += mpc82xx_ads.o +obj-$(CONFIG_MPC82xx_IDS8247) += mpc8247_ids.o diff -ruN linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/mpc8247_ids.c linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/mpc8247_ids.c --- linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/mpc8247_ids.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/mpc8247_ids.c 2007-08-02 10:15:22.000000000 +0200 @@ -0,0 +1,390 @@ +/* + * MPC8247 IDS8274 platform setup + * + * Adapted by Sergej Stepanov <[EMAIL PROTECTED]> + * Copyright (c) 2007, IDS GmbH, Germany + * + * Derived from: mpc82xx_ads.c + * Author: Vitaly Bordug <[EMAIL PROTECTED]> + * Copyright (c) 2007, IDS GmbH, Germany + * + * This program is free software; you can redistribute it and/or modify it + * under the terms of the GNU General Public License as published by the + * Free Software Foundation; either version 2 of the License, or (at your + * option) any later version. + */ + +#include <linux/stddef.h> +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/errno.h> +#include <linux/reboot.h> +#include <linux/pci.h> +#include <linux/interrupt.h> +#include <linux/kdev_t.h> +#include <linux/major.h> +#include <linux/console.h> +#include <linux/delay.h> +#include <linux/seq_file.h> +#include <linux/root_dev.h> +#include <linux/initrd.h> +#include <linux/module.h> +#include <linux/fsl_devices.h> +#include <linux/fs_uart_pd.h> +#include <linux/mtd/mtd.h> +#include <linux/mtd/nand.h> +#include <linux/mtd/physmap.h> +#include <linux/mtd/partitions.h> + +#include <asm/system.h> +#include <asm/pgtable.h> +#include <asm/page.h> +#include <asm/atomic.h> +#include <asm/time.h> +#include <asm/io.h> +#include <asm/machdep.h> +#include <asm/bootinfo.h> +#include <asm/pci-bridge.h> +#include <asm/mpc8260.h> +#include <asm/irq.h> +#include <mm/mmu_decl.h> +#include <asm/prom.h> +#include <asm/cpm2.h> +#include <asm/udbg.h> +#include <asm/i8259.h> +#include <linux/fs_enet_pd.h> +#include <linux/i2c-id.h> + +#include <sysdev/fsl_soc.h> +#include <../sysdev/cpm2_pic.h> + +#include "ids8247.h" + +/* FCC1 Clock Source Configuration. These can be redefined in the board specific file. + Can only choose from CLK9-10 */ +#define F1_RXCLK 10 +#define F1_TXCLK 9 + +/* + Callback function from fs_enet driver. +*/ +void init_fcc_ioports(struct fs_platform_info *fpi) +{ + int fcc_no = fs_get_fcc_index(fpi->fs_no); + struct io_port *io; + u32 tempval; + + if( fcc_no > 0) + { + printk(KERN_ERR "init_fcc_ioports: invalid FCC number\n"); + return; + } + + io = &((cpm2_map_t *) cpm2_immr)->im_ioport; + + /* FCC1 are port A/C. */ + /* Configure port A and C pins for FCC1 Ethernet. */ + tempval = in_be32(&io->iop_pdira); + tempval &= ~PA1_DIRA0; + tempval |= PA1_DIRA1; + out_be32(&io->iop_pdira, tempval); + + tempval = in_be32(&io->iop_psora); + tempval &= ~PA1_PSORA0; + tempval |= PA1_PSORA1; + out_be32(&io->iop_psora, tempval); + + setbits32(&io->iop_ppara,PA1_DIRA0 | PA1_DIRA1); + + tempval = PC_F1TXCLK|PC_F1RXCLK; + + clrbits32(&io->iop_psorc, tempval); + clrbits32(&io->iop_pdirc, tempval); + setbits32(&io->iop_pparc, tempval); + + clrbits32(&cpm2_immr->im_cpmux.cmx_fcr, CMX1_CLK_MASK); + setbits32(&cpm2_immr->im_cpmux.cmx_fcr, CMX1_CLK_ROUTE); + +} + +/* + General board setup +*/ +int __init m82xx_board_setup( void) +{ + struct device_node *np; + struct io_port *io; + io = &((cpm2_map_t *) cpm2_immr)->im_ioport; + + np = of_find_node_by_type(NULL, "memory"); + if (!np) { + printk(KERN_INFO "No memory node in device tree\n"); + return 1; + } + of_node_put(np); + + /* setup for bb-mdio */ + setbits32(&io->iop_pdird, (0x1 << (31 - 7))); + clrbits32(&io->iop_ppard, (0x1 << (31 - 7))); + setbits32(&io->iop_pdirc, (0x1 << (31 - 21))); + clrbits32(&io->iop_pparc, (0x1 << (31 - 21))); + + return 1; +} + +/* + Init stuff for MPC8247_IDS + Copied from mpc82xx_ads.c +*/ +static void __init mpc8247ids_setup_arch(void) +{ + cpm2_reset(); + m82xx_board_setup(); + + if (ppc_md.progress) + ppc_md.progress("mpc8247ids_setup_arch(), finish", 0); +} + +static int __init mpc8247_ids_probe(void) +{ + return 1; +} + +/* Copied from mpc82xx_ads.c */ +#define RMR_CSRE 0x00000001 +static void m82xx_restart(char *cmd) +{ + __volatile__ unsigned char dummy; + + local_irq_disable(); + ((cpm2_map_t *) cpm2_immr)->im_clkrst.car_rmr |= RMR_CSRE; + + /* Clear the ME,EE,IR & DR bits in MSR to cause checkstop */ + mtmsr(mfmsr() & ~(MSR_ME | MSR_EE | MSR_IR | MSR_DR)); + dummy = ((cpm2_map_t *) cpm2_immr)->im_clkrst.res[0]; + printk("Restart failed\n"); + while (1) ; +} + +/* Copied from mpc82xx_ads.c */ +static void m82xx_halt(void) +{ + local_irq_disable(); + while (1) ; +} + +static void __init mpc8247_ids_init_IRQ(void) +{ + struct device_node *np = of_find_compatible_node(NULL, + "cpm-pic", "CPM2"); + struct resource r; + if (np == NULL) { + printk(KERN_ERR "PIC init: can not find cpm-pic node\n"); + return; + } + if (of_address_to_resource(np, 0, &r)) { + printk(KERN_ERR "PIC init: invalid resource\n"); + of_node_put(np); + return; + } + cpm2_pic_init(np); + of_node_put(np); +} + +#ifdef CONFIG_MTD_PHYSMAP +/* + TODO: the table has to be build in physmap_of +*/ +static struct mtd_partition ids8247_cramfs_partitions[] = { + { + .name = "kernel", + .size = 0x200000, + .offset = 0, + .mask_flags = 0, + }, + { + .name = "cramfs", + .offset = 0x200000, + .size = 0x500000, + .mask_flags = 0, + }, + { + .name = "u-boot", + .offset = 0x700000, + .size = 0x40000, + .mask_flags = 0, + }, + { + .name = "env", + .offset = 0x740000, + .size = 0x40000, + .mask_flags = 0, + } +}; + +static int __init mpc82xx_ids8247_setup_mtd(void) +{ + physmap_set_partitions(ids8247_cramfs_partitions, 4); + return 0; +} +arch_initcall(mpc82xx_ids8247_setup_mtd); +#endif /* CONFIG_MTD_PHYSMAP */ + +#ifdef CONFIG_MTD_NAND_PLATFORM +static struct mtd_partition *mpc82xx_ids8247_nand_partitions; + +/* + NAND HW special for IDS8247 + Derived from 2.4 kernel for NC650/IDS8247 +*/ +static void mpc82xx_ids8247_nandhwcontrol(struct mtd_info *mtd, int cmd, unsigned int ctrl) +{ + struct nand_chip *chip = mtd->priv; + if( ctrl & NAND_CTRL_CHANGE) { + ctrl &= ~NAND_CTRL_CHANGE; + switch( ctrl ) + { + case NAND_CTRL_CLE: + *(((volatile __u8 *) chip->IO_ADDR_W) + 0xa) = 0; + break; + case NAND_CTRL_ALE: + *(((volatile __u8 *) chip->IO_ADDR_W) + 0x9) = 0; + break; + case NAND_NCE: + *(((volatile __u8 *) chip->IO_ADDR_W) + 0x8) = 0; + break; + default: + *(((volatile __u8 *) chip->IO_ADDR_W) + 0xc) = 0; + } + } + if (cmd != NAND_CMD_NONE) + out_8(chip->IO_ADDR_W, (char)cmd); +} + +/* + Makes init for gen_nand device with config from OF + Some part of the function derived from physmap_of.c +*/ +static int __init mpc8247_ids8247_nand_setup(void) +{ + int ret = 0; + struct device_node *np = NULL; + struct platform_device *nanddevice; + struct platform_nand_data *pdata; + struct resource r[1]; + int i, plen, retval = -ENOMEM; + const u32 *part; + const char *name; + + memset(&r, 0, sizeof(r)); + + pdata = kzalloc(sizeof(struct platform_nand_data), GFP_KERNEL); + if( !pdata) { + ret = -ENOMEM; + return ret; + } + + np = of_find_compatible_node(np, "gen_nand", "direct-mapped"); + + ret = of_address_to_resource(np, 0, &r[0]); + + nanddevice = platform_device_register_simple("gen_nand", 0, r, 1); + if( !nanddevice) { + ret = -ENOMEM; + return ret; + } + + part = of_get_property(np, "partitions", &plen); + if (part == NULL) + goto error; + + retval = plen / (2 * sizeof(u32)); + + mpc82xx_ids8247_nand_partitions + = kzalloc(retval * sizeof(struct mtd_partition), GFP_KERNEL); + + if (mpc82xx_ids8247_nand_partitions == NULL) { + printk(KERN_ERR "Can't allocate the flash partition data!\n"); + goto error; + } + + name = of_get_property(np, "partition-names", &plen); + + for (i = 0; i < retval; i++) { + mpc82xx_ids8247_nand_partitions[i].offset = *part++; + mpc82xx_ids8247_nand_partitions[i].size = *part & ~1; + + if (name != NULL && plen > 0) { + int len = strlen(name) + 1; + + mpc82xx_ids8247_nand_partitions[i].name = (char *)name; + plen -= len; + name += len; + } else + mpc82xx_ids8247_nand_partitions[i].name = "unnamed"; + } + + pdata->chip.partitions = mpc82xx_ids8247_nand_partitions; + pdata->chip.nr_partitions = retval; + pdata->ctrl.cmd_ctrl = mpc82xx_ids8247_nandhwcontrol; + pdata->chip.chip_delay = 12; + pdata->chip.options = 0; + ret = platform_device_add_data(nanddevice, + pdata, + sizeof(struct platform_nand_data)); + + if (IS_ERR(nanddevice)) { + ret = PTR_ERR(nanddevice); + goto error; + } + of_node_put(np); + return 0; + +error: + of_node_put(np); + kfree(pdata); + platform_device_unregister(nanddevice); + return ret; + +} + +arch_initcall(mpc8247_ids8247_nand_setup); +#endif /* CONFIG_MTD_NAND_PARTITIONS */ + +static int __init mpc82xx_ids8247_i2c_setup(void) +{ + int ret = 0; + struct platform_device *i2c_dev; + struct fsl_i2c_platform_data i2c_data; + + i2c_data.device_flags = 0; + i2c_dev = platform_device_register_simple("bb-i2c", 0, NULL, 0); + if (IS_ERR(i2c_dev)) { + ret = PTR_ERR(i2c_dev); + return ret; + } + ret = platform_device_add_data(i2c_dev, + &i2c_data, + sizeof(struct fsl_i2c_platform_data)); + if(ret) + { + platform_device_unregister(i2c_dev); + return ret; + } + + return 0; +} +arch_initcall(mpc82xx_ids8247_i2c_setup); + +define_machine(mpc8247_ids) +{ + .name = "MPC8247 IDS", + .probe = mpc8247_ids_probe, + .setup_arch = mpc8247ids_setup_arch, + .show_cpuinfo = mpc82xx_ads_show_cpuinfo, + .get_irq = cpm2_get_irq, + .init_IRQ = mpc8247_ids_init_IRQ, + .calibrate_decr = m82xx_calibrate_decr, + .restart = m82xx_restart, + .halt = m82xx_halt, +}; diff -ruN linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/mpc82xx.c linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/mpc82xx.c --- linux-2.6.22.1_orig/arch/powerpc/platforms/82xx/mpc82xx.c 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/arch/powerpc/platforms/82xx/mpc82xx.c 2007-08-02 10:15:22.000000000 +0200 @@ -50,7 +50,13 @@ #include <sysdev/fsl_soc.h> #include <sysdev/cpm2_pic.h> +#ifdef CONFIG_MPC82xx_ADS #include "pq2ads.h" +#endif + +#ifdef CONFIG_MPC82xx_IDS8247 +#include "ids8247.h" +#endif static int __init get_freq(char *name, unsigned long *val) { diff -ruN linux-2.6.22.1_orig/arch/powerpc/sysdev/fsl_soc.c linux-2.6.22.1_ids8247/arch/powerpc/sysdev/fsl_soc.c --- linux-2.6.22.1_orig/arch/powerpc/sysdev/fsl_soc.c 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/arch/powerpc/sysdev/fsl_soc.c 2007-08-02 10:15:22.000000000 +0200 @@ -677,7 +677,7 @@ if (strstr(model, "FCC")) { int fcc_index = *id - 1; const unsigned char *mdio_bb_prop; - + const unsigned int *bboffsets; fs_enet_data.dpram_offset = (u32)cpm_dpram_addr(0); fs_enet_data.rx_ring = 32; fs_enet_data.tx_ring = 32; @@ -697,6 +697,7 @@ if (mdio_bb_prop) { struct platform_device *fs_enet_mdio_bb_dev; struct fs_mii_bb_platform_info fs_enet_mdio_bb_data; + struct resource phyr[1]; fs_enet_mdio_bb_dev = platform_device_register_simple("fsl-bb-mdio", @@ -728,7 +729,23 @@ (u32)&cpm2_immr->im_ioport.iop_pdirc; fs_enet_mdio_bb_data.mdc_dat.offset = (u32)&cpm2_immr->im_ioport.iop_pdatc; - + + bboffsets = of_get_property(phy, "bboffsets", NULL); + if( bboffsets ) { + fs_enet_mdio_bb_data.mdio_dat.offset = + (u32)((cpm2_map_t *) cpm2_immr) + bboffsets[0]; + fs_enet_mdio_bb_data.mdio_dir.offset = + (u32)((cpm2_map_t *) cpm2_immr) + bboffsets[1]; + fs_enet_mdio_bb_data.mdc_dat.offset = + (u32)((cpm2_map_t *) cpm2_immr) + bboffsets[2]; + fs_enet_mdio_bb_data.irq[0] = -1; + fs_enet_mdio_bb_data.irq[1] = phy_irq[0]; + fs_enet_mdio_bb_data.irq[2] = -1; + fs_enet_mdio_bb_data.irq[3] = -1; + fs_enet_mdio_bb_data.irq[31] = -1; + of_irq_to_resource(phy, 0, &phyr[0]); + } + ret = platform_device_add_data( fs_enet_mdio_bb_dev, &fs_enet_mdio_bb_data, diff -ruN linux-2.6.22.1_orig/drivers/i2c/busses/i2c-ids8247.c linux-2.6.22.1_ids8247/drivers/i2c/busses/i2c-ids8247.c --- linux-2.6.22.1_orig/drivers/i2c/busses/i2c-ids8247.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.22.1_ids8247/drivers/i2c/busses/i2c-ids8247.c 2007-08-02 10:15:22.000000000 +0200 @@ -0,0 +1,203 @@ +/* + * File i2c-ids8247.c + * + * Copyright (c) 2007 IDS GmbH, Germany + * Author: Sergej Stepanov, <[EMAIL PROTECTED]> + * Derived from i2c-tqm8272 and i2c-i801.c + * + */ + +#include <linux/kernel.h> +#include <linux/init.h> +#include <linux/platform_device.h> +#include <linux/module.h> +#include <linux/i2c.h> +#include <linux/i2c-algo-bit.h> +#include <asm/mpc8260.h> +#include <asm/immap_cpm2.h> +#include <asm/io.h> + + +/* delays */ +#define CYCLE_DELAY 10 +#define TIMEOUT 100 /*(HZ / 2)*/ + +#define SCL1 0x20000 /* PD 14 */ +#define SDA1 0x10000 /* PD 15 */ + +#define SCL2 0x00100 /* PC 23 */ +#define SDA2 0x00080 /* PC 24 */ + +#define PAR1 cpm2_immr->im_ioport.iop_ppard +#define DIR1 cpm2_immr->im_ioport.iop_pdird +#define DAT1 cpm2_immr->im_ioport.iop_pdatd + +#define PAR2 cpm2_immr->im_ioport.iop_ppara +#define DIR2 cpm2_immr->im_ioport.iop_pdira +#define DAT2 cpm2_immr->im_ioport.iop_pdata + +static void ids8247_bit_setscl1(void *data, int val) +{ + if (val) + DAT1 |= SCL1; + else { + DAT1 &= ~SCL1; + } +} + +static void ids8247_bit_setscl2(void *data, int val) +{ + if (val) + DAT2 |= SCL2; + else { + DAT2 &= ~SCL2; + } +} + +static void ids8247_bit_setsda1(void *data, int val) +{ + if (val) + DIR1 &= ~SDA1; + else { + DAT1 &= ~SDA1; + DIR1 |= SDA1; + } +} + +static void ids8247_bit_setsda2(void *data, int val) +{ + if (val) + DIR2 &= ~SDA2; + else { + DAT2 &= ~SDA2; + DIR2 |= SDA2; + } +} + +static int ids8247_bit_getscl1(void *data) +{ + return (DAT1 & SCL1) != 0; +} + +static int ids8247_bit_getscl2(void *data) +{ + return (DAT2 & SCL2) != 0; +} + +static int ids8247_bit_getsda1(void *data) +{ + int res; + + res = (DAT1 & SDA1) != 0; + + return res; +} + +static int ids8247_bit_getsda2(void *data) +{ + int res; + + res = (DAT2 & SDA2) != 0; + + return res; +} + +static void ids8247_i2c_line_init1 (void) +{ + PAR1 &= ~(SCL1 | SDA1); DIR1 |= SCL1; +} + +static void ids8247_i2c_line_init2 (void) +{ + PAR2 &= ~(SCL2 | SDA2); DIR2 |= SCL2; +} + +static struct i2c_algo_bit_data ids8247_i2c_bit_data1 = { + .setsda = ids8247_bit_setsda1, + .setscl = ids8247_bit_setscl1, + .getsda = ids8247_bit_getsda1, + .getscl = ids8247_bit_getscl1, + .udelay = CYCLE_DELAY, + .timeout = TIMEOUT, +}; + +static struct i2c_algo_bit_data ids8247_i2c_bit_data2 = { + .setsda = ids8247_bit_setsda2, + .setscl = ids8247_bit_setscl2, + .getsda = ids8247_bit_getsda2, + .getscl = ids8247_bit_getscl2, + .udelay = CYCLE_DELAY, + .timeout = TIMEOUT, +}; + +static struct i2c_adapter ids8247_i2c_adapter1 = { + .owner = THIS_MODULE, + .name = "IDS8247 I2C Adapter1", + .algo_data = &ids8247_i2c_bit_data1, + .id = I2C_HW_BB_MPC8247, + .class = I2C_CLASS_HWMON, +}; + +static struct i2c_adapter ids8247_i2c_adapter2 = { + .owner = THIS_MODULE, + .name = "IDS8247 I2C Adapter2", + .algo_data = &ids8247_i2c_bit_data2, + .id = I2C_HW_BB_MPC8247, + .class = I2C_CLASS_HWMON, +}; + +static int ids8247_i2c_remove(struct platform_device *plat_dev) +{ + i2c_del_adapter(&ids8247_i2c_adapter1); + i2c_del_adapter(&ids8247_i2c_adapter2); + return 0; +} + +static int ids8247_i2c_probe(struct platform_device *plat_dev) +{ + int err; + + ids8247_i2c_line_init1(); + ids8247_i2c_line_init2(); + ids8247_i2c_adapter1.dev.parent = &plat_dev->dev; + ids8247_i2c_adapter2.dev.parent = &plat_dev->dev; + + if ((err = i2c_bit_add_bus( &ids8247_i2c_adapter1) != 0)) { + printk(KERN_ERR "ERROR: Could not install %s\n", ids8247_i2c_adapter1.name); + return err; + } + + if ((err = i2c_bit_add_bus( &ids8247_i2c_adapter2) != 0)) { + printk(KERN_ERR "ERROR: Could not install %s\n", ids8247_i2c_adapter2.name); + return err; + } + return 0; +} + + +/* Structure for a device driver */ +static struct platform_driver bb_i2c_driver = { + .probe = ids8247_i2c_probe, + .remove = __devexit_p(ids8247_i2c_remove), + .driver = { + .owner = THIS_MODULE, + .name = "bb-i2c", + }, +}; + +static int __init ids8247_i2c_init(void) +{ + return platform_driver_register(&bb_i2c_driver); +} + +static void __exit ids8247_i2c_exit(void) +{ + platform_driver_unregister(&bb_i2c_driver); +} + +MODULE_DESCRIPTION("MPC82xx-based BB-I2C adapter on IDS8247"); +MODULE_LICENSE("GPL"); +MODULE_AUTHOR("Sergej Stepanov, <[EMAIL PROTECTED]>"); + +module_init(ids8247_i2c_init); +module_exit(ids8247_i2c_exit); diff -ruN linux-2.6.22.1_orig/drivers/i2c/busses/Kconfig linux-2.6.22.1_ids8247/drivers/i2c/busses/Kconfig --- linux-2.6.22.1_orig/drivers/i2c/busses/Kconfig 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/drivers/i2c/busses/Kconfig 2007-08-02 10:15:22.000000000 +0200 @@ -267,6 +267,16 @@ This driver is deprecated and will be dropped soon. Use i2c-gpio instead. +config I2C_IDS8247 + tristate "IDS8247 Bitbanged I2C Interface" + depends on I2C && MPC82xx_IDS8247 + select I2C_ALGOBIT + help + Say Y here if you have a IDS8247 board. + + This support is also available as a module. If so, the module + will be called i2c-ids8247. + config I2C_POWERMAC tristate "Powermac I2C interface" depends on PPC_PMAC diff -ruN linux-2.6.22.1_orig/drivers/i2c/busses/Makefile linux-2.6.22.1_ids8247/drivers/i2c/busses/Makefile --- linux-2.6.22.1_orig/drivers/i2c/busses/Makefile 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/drivers/i2c/busses/Makefile 2007-08-02 10:15:22.000000000 +0200 @@ -50,6 +50,7 @@ obj-$(CONFIG_I2C_VIA) += i2c-via.o obj-$(CONFIG_I2C_VIAPRO) += i2c-viapro.o obj-$(CONFIG_I2C_VOODOO3) += i2c-voodoo3.o +obj-$(CONFIG_I2C_IDS8247) += i2c-ids8247.o obj-$(CONFIG_SCx200_ACB) += scx200_acb.o obj-$(CONFIG_SCx200_I2C) += scx200_i2c.o diff -ruN linux-2.6.22.1_orig/drivers/mtd/nand/plat_nand.c linux-2.6.22.1_ids8247/drivers/mtd/nand/plat_nand.c --- linux-2.6.22.1_orig/drivers/mtd/nand/plat_nand.c 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/drivers/mtd/nand/plat_nand.c 2007-08-02 10:15:22.000000000 +0200 @@ -66,7 +66,7 @@ data->chip.ecc.hwctl = pdata->ctrl.hwcontrol; data->chip.ecc.layout = pdata->chip.ecclayout; data->chip.ecc.mode = NAND_ECC_SOFT; - + data->chip.cmd_ctrl = pdata->ctrl.cmd_ctrl; platform_set_drvdata(pdev, data); /* Scan to find existance of the device */ diff -ruN linux-2.6.22.1_orig/drivers/net/fs_enet/mii-bitbang.c linux-2.6.22.1_ids8247/drivers/net/fs_enet/mii-bitbang.c --- linux-2.6.22.1_orig/drivers/net/fs_enet/mii-bitbang.c 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/drivers/net/fs_enet/mii-bitbang.c 2007-08-02 10:15:22.000000000 +0200 @@ -336,7 +336,11 @@ new_bus->reset = &fs_enet_mii_bb_reset, new_bus->id = pdev->id; +#ifndef CONFIG_MPC82xx_IDS8247 new_bus->phy_mask = ~0x9; +#else + new_bus->phy_mask = ~0x2; +#endif pdata = (struct fs_mii_bb_platform_info *)pdev->dev.platform_data; if (NULL == pdata) { diff -ruN linux-2.6.22.1_orig/drivers/net/phy/Kconfig linux-2.6.22.1_ids8247/drivers/net/phy/Kconfig --- linux-2.6.22.1_orig/drivers/net/phy/Kconfig 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/drivers/net/phy/Kconfig 2007-08-02 10:15:22.000000000 +0200 @@ -55,6 +55,11 @@ ---help--- Currently supports the BCM5411, BCM5421 and BCM5461 PHYs. +config MICREL_PHY + tristate "Drivers for MICREL KS8721BL PHYs" + ---help--- + Currently supports on MPC82xx_IDS8247 board. + config FIXED_PHY tristate "Drivers for PHY emulation on fixed speed/link" ---help--- diff -ruN linux-2.6.22.1_orig/drivers/net/phy/Makefile linux-2.6.22.1_ids8247/drivers/net/phy/Makefile --- linux-2.6.22.1_orig/drivers/net/phy/Makefile 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/drivers/net/phy/Makefile 2007-08-02 10:15:22.000000000 +0200 @@ -11,4 +11,5 @@ obj-$(CONFIG_SMSC_PHY) += smsc.o obj-$(CONFIG_VITESSE_PHY) += vitesse.o obj-$(CONFIG_BROADCOM_PHY) += broadcom.o +obj-$(CONFIG_MICREL_PHY) += micrel.o obj-$(CONFIG_FIXED_PHY) += fixed.o diff -ruN linux-2.6.22.1_orig/drivers/net/phy/micrel.c linux-2.6.22.1_ids8247/drivers/net/phy/micrel.c --- linux-2.6.22.1_orig/drivers/net/phy/micrel.c 1970-01-01 01:00:00.000000000 +0100 +++ linux-2.6.22.1_ids8247/drivers/net/phy/micrel.c 2007-08-02 10:15:22.000000000 +0200 @@ -0,0 +1,109 @@ +/* + * drivers/net/phy/micrel.c + * + * Driver for Micrel KS8721BL PHY + * based on drivers/net/phy/lxt.c from Andy Fleming + * + * Author: Sergej Stepanov, IDS + * Copyright (c) 2007 IDS GmbH, Germany + * + */ +#include <linux/kernel.h> +#include <linux/sched.h> +#include <linux/string.h> +#include <linux/errno.h> +#include <linux/unistd.h> +#include <linux/slab.h> +#include <linux/interrupt.h> +#include <linux/init.h> +#include <linux/delay.h> +#include <linux/netdevice.h> +#include <linux/etherdevice.h> +#include <linux/skbuff.h> +#include <linux/spinlock.h> +#include <linux/mm.h> +#include <linux/module.h> +#include <linux/mii.h> +#include <linux/ethtool.h> +#include <linux/phy.h> + +#include <asm/io.h> +#include <asm/irq.h> +#include <asm/uaccess.h> + + +#define MII_KS8721BL_RXERCR 0x15 +#define MII_KS8721BL_ICSR 0x1B +#define MII_KS8721BL_PHYCR 0x1F + + +MODULE_DESCRIPTION("Micrel KS8721BL driver"); +MODULE_AUTHOR("Sergej Stepanov"); +MODULE_LICENSE("GPL"); + + +static int ks8721bl_config_intr(struct phy_device *phydev) +{ + int err1; + + if(phydev->interrupts == PHY_INTERRUPT_ENABLED) + { + err1 = phy_write(phydev, MII_KS8721BL_ICSR, 0xFF00); + err1 = phy_write(phydev, 0, 0x1200); /* control register */ + } + else + err1 = phy_write(phydev, MII_KS8721BL_ICSR, 0); + + return err1; +} + +static int ks8721bl_config_init(struct phy_device *phydev) +{ + phy_write(phydev, MII_KS8721BL_ICSR, 0); + return 0; +} + + +static int ks8721bl_ack_interrupt(struct phy_device *phydev) +{ + int err = phy_read(phydev, MII_KS8721BL_ICSR); + if (err < 0) + return err; + + return 0; +} + +static struct phy_driver ks8721bl_driver = { + .phy_id = 0x000221619, + .name = "KS8721BL", + .phy_id_mask = 0xfffffff0, /*??*/ + .features = PHY_BASIC_FEATURES, + .flags = PHY_HAS_INTERRUPT, + .config_init = ks8721bl_config_init, + .config_aneg = genphy_config_aneg, + .read_status = genphy_read_status, + .ack_interrupt = ks8721bl_ack_interrupt, + .config_intr = ks8721bl_config_intr, + .driver = { .owner = THIS_MODULE,}, +}; + +static int __init ks8721_init(void) +{ + int ret; + + ret = phy_driver_register(&ks8721bl_driver); + if (ret) + goto err1; + + return 0; + err1: + return ret; +} + +static void __exit ks8721_exit(void) +{ + phy_driver_unregister(&ks8721bl_driver); +} + +module_init(ks8721_init); +module_exit(ks8721_exit); diff -ruN linux-2.6.22.1_orig/include/asm-powerpc/mpc8260.h linux-2.6.22.1_ids8247/include/asm-powerpc/mpc8260.h --- linux-2.6.22.1_orig/include/asm-powerpc/mpc8260.h 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/include/asm-powerpc/mpc8260.h 2007-08-02 10:15:22.000000000 +0200 @@ -19,6 +19,10 @@ #include <platforms/82xx/m82xx_pci.h> #endif +#ifdef CONFIG_MPC82xx_IDS8247 +#include <platforms/82xx/ids8247.h> +#endif + #endif /* CONFIG_8260 */ #endif /* !__ASM_POWERPC_MPC8260_H__ */ #endif /* __KERNEL__ */ diff -ruN linux-2.6.22.1_orig/include/linux/i2c-id.h linux-2.6.22.1_ids8247/include/linux/i2c-id.h --- linux-2.6.22.1_orig/include/linux/i2c-id.h 2007-07-10 20:56:30.000000000 +0200 +++ linux-2.6.22.1_ids8247/include/linux/i2c-id.h 2007-08-02 10:15:22.000000000 +0200 @@ -209,6 +209,7 @@ /* --- MPC824x PowerPC adapters */ #define I2C_HW_MPC824X 0x100001 /* Motorola 8240 / 8245 */ +#define I2C_HW_BB_MPC8247 0x100002 /* */ /* --- MPC8xx PowerPC adapters */ #define I2C_HW_MPC8XX_EPON 0x110000 /* Eponymous MPC8xx I2C adapter */ _______________________________________________ Linuxppc-embedded mailing list Linuxppc-embedded@ozlabs.org https://ozlabs.org/mailman/listinfo/linuxppc-embedded