diff options
Diffstat (limited to 'meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0032-Create-snapshot-of-OpenBMC.patch')
-rw-r--r-- | meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0032-Create-snapshot-of-OpenBMC.patch | 8462 |
1 files changed, 0 insertions, 8462 deletions
diff --git a/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0032-Create-snapshot-of-OpenBMC.patch b/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0032-Create-snapshot-of-OpenBMC.patch deleted file mode 100644 index f84dc62..0000000 --- a/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0032-Create-snapshot-of-OpenBMC.patch +++ /dev/null @@ -1,8462 +0,0 @@ -From 19459c799ac0a521082d6d79e68ffc3decb18ea2 Mon Sep 17 00:00:00 2001 -From: Ori Bernstein <orib@fb.com> -Date: Thu, 3 Sep 2015 11:28:27 -0700 -Subject: [PATCH] Create snapshot of OpenBMC - ---- - .../arch/arm/configs/wedge_defconfig | 1 + - .../arch/arm/configs/yosemite_defconfig | 1480 ++++++++++++++++++++ - .../arch/arm/include/asm/ioctls.h | 1 + - .../arch/arm/mach-aspeed/Kconfig | 12 + - .../arch/arm/mach-aspeed/gpio.c | 2 +- - .../arm/mach-aspeed/include/mach/debug-macro.S | 4 +- - .../arch/arm/mach-aspeed/include/mach/platform.h | 17 +- - .../arch/arm/mach-aspeed/include/mach/uncompress.h | 6 +- - .../arch/arm/mach-aspeed/include/mach/vmalloc.h | 4 +- - .../arch/arm/plat-aspeed/ast-scu.c | 372 ++--- - .../arch/arm/plat-aspeed/dev-eth.c | 35 +- - .../arch/arm/plat-aspeed/dev-i2c.c | 385 +++-- - .../arch/arm/plat-aspeed/dev-spi.c | 27 +- - .../arch/arm/plat-aspeed/dev-uart.c | 50 +- - .../arch/arm/plat-aspeed/irq.c | 28 +- - .../linux-aspeed-2.6.28.9/drivers/hwmon/ast_adc.c | 233 +-- - .../drivers/i2c/busses/i2c-ast.c | 689 +++++---- - .../linux-aspeed-2.6.28.9/drivers/i2c/i2c-core.c | 15 +- - .../linux-aspeed-2.6.28.9/drivers/i2c/i2c-dev.c | 113 +- - .../drivers/net/ftgmac100_26.c | 1211 ++++++++++++++-- - .../drivers/net/ftgmac100_26.h | 67 +- - .../linux-aspeed-2.6.28.9/drivers/rtc/rtc-aspeed.c | 42 +- - .../linux-aspeed-2.6.28.9/drivers/serial/8250.c | 39 +- - .../linux-aspeed-2.6.28.9/drivers/watchdog/Kconfig | 9 +- - .../drivers/watchdog/ast_wdt.c | 27 + - .../files/linux-aspeed-2.6.28.9/fs/compat_ioctl.c | 51 +- - .../linux-aspeed-2.6.28.9/include/linux/i2c-dev.h | 1 + - .../linux-aspeed-2.6.28.9/include/linux/i2c.h | 6 + - ...m25p80-Add-support-for-the-Winbond-W25Q64.patch | 29 + - ...t-leak-packets-when-a-netns-is-going-down.patch | 56 + - ...int-error-value-when-skb-allocation-fails.patch | 43 + - .../recipes-kernel/linux/linux-aspeed_2.6.28.9.bb | 17 +- - 34 files changed, 7064 insertions(+), 950 deletions(-) - create mode 100644 arch/arm/configs/fbplatform1_defconfig - create mode 100644 arch/arm/configs/yosemite_defconfig - create mode 100644 meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0029-mtd-m25p80-Add-support-for-the-Winbond-W25Q64.patch - create mode 100644 meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0030-net-Don-t-leak-packets-when-a-netns-is-going-down.patch - create mode 100644 meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0031-IPv6-Print-error-value-when-skb-allocation-fails.patch - -diff --git a/arch/arm/configs/wedge_defconfig b/arch/arm/configs/wedge_defconfig -index 23a9fe3..41fe288 100644 ---- a/arch/arm/configs/wedge_defconfig -+++ b/arch/arm/configs/wedge_defconfig -@@ -174,6 +174,7 @@ CONFIG_IRMP=y - # CONFIG_ARCH_AST2200 is not set - # CONFIG_ARCH_AST2300 is not set - CONFIG_ARCH_AST2400=y -+CONFIG_WEDGE=y - # CONFIG_ARCH_AST2500 is not set - - # -diff --git a/arch/arm/configs/yosemite_defconfig b/arch/arm/configs/yosemite_defconfig -new file mode 100644 -index 0000000..d32f18e ---- /dev/null -+++ b/arch/arm/configs/yosemite_defconfig -@@ -0,0 +1,1480 @@ -+# -+# Automatically generated make config: don't edit -+# Linux kernel version: 2.6.28.9 -+# Tue Feb 3 16:41:40 2015 -+# -+CONFIG_ARM=y -+CONFIG_SYS_SUPPORTS_APM_EMULATION=y -+CONFIG_GENERIC_GPIO=y -+CONFIG_GENERIC_TIME=y -+CONFIG_GENERIC_CLOCKEVENTS=y -+CONFIG_MMU=y -+# CONFIG_NO_IOPORT is not set -+CONFIG_GENERIC_HARDIRQS=y -+CONFIG_STACKTRACE_SUPPORT=y -+CONFIG_HAVE_LATENCYTOP_SUPPORT=y -+CONFIG_LOCKDEP_SUPPORT=y -+CONFIG_TRACE_IRQFLAGS_SUPPORT=y -+CONFIG_HARDIRQS_SW_RESEND=y -+CONFIG_GENERIC_IRQ_PROBE=y -+CONFIG_RWSEM_GENERIC_SPINLOCK=y -+# CONFIG_ARCH_HAS_ILOG2_U32 is not set -+# CONFIG_ARCH_HAS_ILOG2_U64 is not set -+CONFIG_GENERIC_HWEIGHT=y -+CONFIG_GENERIC_CALIBRATE_DELAY=y -+CONFIG_GENERIC_HARDIRQS_NO__DO_IRQ=y -+CONFIG_VECTORS_BASE=0xffff0000 -+CONFIG_DEFCONFIG_LIST="/lib/modules/$UNAME_RELEASE/.config" -+ -+# -+# General setup -+# -+CONFIG_EXPERIMENTAL=y -+CONFIG_BROKEN_ON_SMP=y -+CONFIG_INIT_ENV_ARG_LIMIT=32 -+CONFIG_LOCALVERSION="" -+# CONFIG_LOCALVERSION_AUTO is not set -+CONFIG_KERNEL_GZIP=y -+# CONFIG_KERNEL_BZIP2 is not set -+# CONFIG_KERNEL_LZMA is not set -+CONFIG_SWAP=y -+CONFIG_SYSVIPC=y -+CONFIG_SYSVIPC_SYSCTL=y -+CONFIG_POSIX_MQUEUE=y -+# CONFIG_BSD_PROCESS_ACCT is not set -+# CONFIG_TASKSTATS is not set -+# CONFIG_AUDIT is not set -+CONFIG_IKCONFIG=m -+CONFIG_IKCONFIG_PROC=y -+CONFIG_LOG_BUF_SHIFT=16 -+# CONFIG_CGROUPS is not set -+# CONFIG_GROUP_SCHED is not set -+CONFIG_SYSFS_DEPRECATED=y -+CONFIG_SYSFS_DEPRECATED_V2=y -+# CONFIG_RELAY is not set -+CONFIG_NAMESPACES=y -+# CONFIG_UTS_NS is not set -+# CONFIG_IPC_NS is not set -+# CONFIG_USER_NS is not set -+# CONFIG_PID_NS is not set -+CONFIG_BLK_DEV_INITRD=y -+CONFIG_INITRAMFS_SOURCE="" -+CONFIG_CC_OPTIMIZE_FOR_SIZE=y -+CONFIG_SYSCTL=y -+CONFIG_ANON_INODES=y -+# CONFIG_EMBEDDED is not set -+CONFIG_UID16=y -+CONFIG_SYSCTL_SYSCALL=y -+CONFIG_KALLSYMS=y -+CONFIG_KALLSYMS_EXTRA_PASS=y -+CONFIG_HOTPLUG=y -+CONFIG_PRINTK=y -+CONFIG_BUG=y -+CONFIG_ELF_CORE=y -+CONFIG_BASE_FULL=y -+CONFIG_FUTEX=y -+CONFIG_EPOLL=y -+CONFIG_SIGNALFD=y -+CONFIG_TIMERFD=y -+CONFIG_EVENTFD=y -+CONFIG_SHMEM=y -+CONFIG_AIO=y -+CONFIG_VM_EVENT_COUNTERS=y -+CONFIG_SLUB_DEBUG=y -+CONFIG_COMPAT_BRK=y -+# CONFIG_SLAB is not set -+CONFIG_SLUB=y -+# CONFIG_SLOB is not set -+# CONFIG_PROFILING is not set -+# CONFIG_MARKERS is not set -+CONFIG_HAVE_OPROFILE=y -+# CONFIG_KPROBES is not set -+CONFIG_HAVE_KPROBES=y -+CONFIG_HAVE_KRETPROBES=y -+CONFIG_HAVE_GENERIC_DMA_COHERENT=y -+CONFIG_SLABINFO=y -+CONFIG_RT_MUTEXES=y -+# CONFIG_TINY_SHMEM is not set -+CONFIG_BASE_SMALL=0 -+CONFIG_MODULES=y -+# CONFIG_MODULE_FORCE_LOAD is not set -+CONFIG_MODULE_UNLOAD=y -+# CONFIG_MODULE_FORCE_UNLOAD is not set -+# CONFIG_MODVERSIONS is not set -+# CONFIG_MODULE_SRCVERSION_ALL is not set -+CONFIG_KMOD=y -+CONFIG_BLOCK=y -+# CONFIG_LBD is not set -+# CONFIG_BLK_DEV_IO_TRACE is not set -+# CONFIG_LSF is not set -+# CONFIG_BLK_DEV_BSG is not set -+# CONFIG_BLK_DEV_INTEGRITY is not set -+ -+# -+# IO Schedulers -+# -+CONFIG_IOSCHED_NOOP=y -+CONFIG_IOSCHED_AS=y -+CONFIG_IOSCHED_DEADLINE=y -+CONFIG_IOSCHED_CFQ=y -+# CONFIG_DEFAULT_AS is not set -+# CONFIG_DEFAULT_DEADLINE is not set -+CONFIG_DEFAULT_CFQ=y -+# CONFIG_DEFAULT_NOOP is not set -+CONFIG_DEFAULT_IOSCHED="cfq" -+CONFIG_CLASSIC_RCU=y -+CONFIG_FREEZER=y -+ -+# -+# System Type -+# -+CONFIG_ARCH_ASPEED=y -+# CONFIG_ARCH_AAEC2000 is not set -+# CONFIG_ARCH_INTEGRATOR is not set -+# CONFIG_ARCH_REALVIEW is not set -+# CONFIG_ARCH_VERSATILE is not set -+# CONFIG_ARCH_AT91 is not set -+# CONFIG_ARCH_CLPS7500 is not set -+# CONFIG_ARCH_CLPS711X is not set -+# CONFIG_ARCH_EBSA110 is not set -+# CONFIG_ARCH_EP93XX is not set -+# CONFIG_ARCH_FOOTBRIDGE is not set -+# CONFIG_ARCH_NETX is not set -+# CONFIG_ARCH_H720X is not set -+# CONFIG_ARCH_IMX is not set -+# CONFIG_ARCH_IOP13XX is not set -+# CONFIG_ARCH_IOP32X is not set -+# CONFIG_ARCH_IOP33X is not set -+# CONFIG_ARCH_IXP23XX is not set -+# CONFIG_ARCH_IXP2000 is not set -+# CONFIG_ARCH_IXP4XX is not set -+# CONFIG_ARCH_L7200 is not set -+# CONFIG_ARCH_KIRKWOOD is not set -+# CONFIG_ARCH_KS8695 is not set -+# CONFIG_ARCH_NS9XXX is not set -+# CONFIG_ARCH_LOKI is not set -+# CONFIG_ARCH_MV78XX0 is not set -+# CONFIG_ARCH_MXC is not set -+# CONFIG_ARCH_ORION5X is not set -+# CONFIG_ARCH_PNX4008 is not set -+# CONFIG_ARCH_PXA is not set -+# CONFIG_ARCH_RPC is not set -+# CONFIG_ARCH_SA1100 is not set -+# CONFIG_ARCH_S3C2410 is not set -+# CONFIG_ARCH_SHARK is not set -+# CONFIG_ARCH_LH7A40X is not set -+# CONFIG_ARCH_DAVINCI is not set -+# CONFIG_ARCH_OMAP is not set -+# CONFIG_ARCH_MSM is not set -+CONFIG_IRMP=y -+# CONFIG_PCEXT is not set -+# CONFIG_REMOTEFX is not set -+# CONFIG_ARCH_AST1100 is not set -+# CONFIG_ARCH_AST2100 is not set -+# CONFIG_ARCH_AST2200 is not set -+# CONFIG_ARCH_AST2300 is not set -+CONFIG_ARCH_AST2400=y -+CONFIG_YOSEMITE=y -+# CONFIG_ARCH_AST2500 is not set -+ -+# -+# FLASH Chip Select -+# -+# CONFIG_AST_CS0_NOR is not set -+# CONFIG_AST_CS0_NAND is not set -+CONFIG_AST_CS0_SPI=y -+# CONFIG_AST_CS0_NONE is not set -+# CONFIG_AST_CS1_NOR is not set -+# CONFIG_AST_CS1_NAND is not set -+# CONFIG_AST_CS1_SPI is not set -+CONFIG_AST_CS1_NONE=y -+# CONFIG_AST_CS2_NOR is not set -+# CONFIG_AST_CS2_NAND is not set -+# CONFIG_AST_CS2_SPI is not set -+CONFIG_AST_CS2_NONE=y -+# CONFIG_AST_CS3_NOR is not set -+# CONFIG_AST_CS3_NAND is not set -+# CONFIG_AST_CS3_SPI is not set -+CONFIG_AST_CS3_NONE=y -+# CONFIG_AST_CS4_NOR is not set -+# CONFIG_AST_CS4_NAND is not set -+# CONFIG_AST_CS4_SPI is not set -+CONFIG_AST_CS4_NONE=y -+# CONFIG_ARCH_AST1070 is not set -+# CONFIG_AST_SCU_LOCK is not set -+ -+# -+# Boot options -+# -+ -+# -+# Power management -+# -+CONFIG_PLAT_ASPEED=y -+ -+# -+# Processor Type -+# -+CONFIG_CPU_32=y -+CONFIG_CPU_ARM926T=y -+CONFIG_CPU_32v5=y -+CONFIG_CPU_ABRT_EV5TJ=y -+CONFIG_CPU_PABRT_NOIFAR=y -+CONFIG_CPU_CACHE_VIVT=y -+CONFIG_CPU_COPY_V4WB=y -+CONFIG_CPU_TLB_V4WBI=y -+CONFIG_CPU_CP15=y -+CONFIG_CPU_CP15_MMU=y -+ -+# -+# Processor Features -+# -+CONFIG_ARM_THUMB=y -+# CONFIG_CPU_ICACHE_DISABLE is not set -+# CONFIG_CPU_DCACHE_DISABLE is not set -+# CONFIG_CPU_DCACHE_WRITETHROUGH is not set -+# CONFIG_CPU_CACHE_ROUND_ROBIN is not set -+# CONFIG_OUTER_CACHE is not set -+ -+# -+# Bus support -+# -+CONFIG_ARM_AMBA=y -+# CONFIG_PCI_SYSCALL is not set -+# CONFIG_ARCH_SUPPORTS_MSI is not set -+# CONFIG_PCCARD is not set -+ -+# -+# Kernel Features -+# -+CONFIG_TICK_ONESHOT=y -+CONFIG_NO_HZ=y -+CONFIG_HIGH_RES_TIMERS=y -+CONFIG_GENERIC_CLOCKEVENTS_BUILD=y -+CONFIG_VMSPLIT_3G=y -+# CONFIG_VMSPLIT_2G is not set -+# CONFIG_VMSPLIT_1G is not set -+CONFIG_PAGE_OFFSET=0xC0000000 -+# CONFIG_PREEMPT is not set -+CONFIG_HZ=100 -+CONFIG_AEABI=y -+CONFIG_OABI_COMPAT=y -+CONFIG_ARCH_FLATMEM_HAS_HOLES=y -+# CONFIG_ARCH_SPARSEMEM_DEFAULT is not set -+# CONFIG_ARCH_SELECT_MEMORY_MODEL 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_PAGEFLAGS_EXTENDED=y -+CONFIG_SPLIT_PTLOCK_CPUS=4096 -+# CONFIG_RESOURCES_64BIT is not set -+# CONFIG_PHYS_ADDR_T_64BIT is not set -+CONFIG_ZONE_DMA_FLAG=0 -+CONFIG_VIRT_TO_BUS=y -+CONFIG_UNEVICTABLE_LRU=y -+CONFIG_ALIGNMENT_TRAP=y -+ -+# -+# Boot options -+# -+CONFIG_ZBOOT_ROM_TEXT=0 -+CONFIG_ZBOOT_ROM_BSS=0 -+CONFIG_CMDLINE="" -+# CONFIG_XIP_KERNEL is not set -+# CONFIG_KEXEC is not set -+ -+# -+# CPU Power Management -+# -+# CONFIG_CPU_IDLE is not set -+ -+# -+# Floating point emulation -+# -+ -+# -+# At least one emulation must be selected -+# -+CONFIG_FPE_NWFPE=y -+CONFIG_FPE_NWFPE_XP=y -+# CONFIG_FPE_FASTFPE is not set -+CONFIG_VFP=y -+ -+# -+# Userspace binary formats -+# -+CONFIG_BINFMT_ELF=y -+# CONFIG_CORE_DUMP_DEFAULT_ELF_HEADERS is not set -+CONFIG_HAVE_AOUT=y -+CONFIG_BINFMT_AOUT=y -+# CONFIG_BINFMT_MISC is not set -+ -+# -+# Power management options -+# -+CONFIG_PM=y -+# CONFIG_PM_DEBUG is not set -+CONFIG_PM_SLEEP=y -+CONFIG_SUSPEND=y -+CONFIG_SUSPEND_FREEZER=y -+# CONFIG_APM_EMULATION is not set -+CONFIG_ARCH_SUSPEND_POSSIBLE=y -+CONFIG_NET=y -+ -+# -+# Networking options -+# -+CONFIG_PACKET=y -+# CONFIG_PACKET_MMAP is not set -+CONFIG_UNIX=y -+CONFIG_XFRM=y -+# CONFIG_XFRM_USER is not set -+# CONFIG_XFRM_SUB_POLICY is not set -+# CONFIG_XFRM_MIGRATE is not set -+# CONFIG_XFRM_STATISTICS is not set -+# 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=y -+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 is not set -+# CONFIG_INET_AH is not set -+# CONFIG_INET_ESP is not set -+# CONFIG_INET_IPCOMP is not set -+# CONFIG_INET_XFRM_TUNNEL is not set -+CONFIG_INET_TUNNEL=m -+CONFIG_INET_XFRM_MODE_TRANSPORT=y -+CONFIG_INET_XFRM_MODE_TUNNEL=y -+CONFIG_INET_XFRM_MODE_BEET=y -+# CONFIG_INET_LRO is not set -+CONFIG_INET_DIAG=y -+CONFIG_INET_TCP_DIAG=y -+# CONFIG_TCP_CONG_ADVANCED is not set -+CONFIG_TCP_CONG_CUBIC=y -+CONFIG_DEFAULT_TCP_CONG="cubic" -+# CONFIG_TCP_MD5SIG is not set -+CONFIG_IPV6=m -+# CONFIG_IPV6_PRIVACY is not set -+# CONFIG_IPV6_ROUTER_PREF is not set -+# CONFIG_IPV6_OPTIMISTIC_DAD is not set -+# CONFIG_INET6_AH is not set -+# CONFIG_INET6_ESP is not set -+# CONFIG_INET6_IPCOMP is not set -+# CONFIG_IPV6_MIP6 is not set -+# CONFIG_INET6_XFRM_TUNNEL is not set -+# CONFIG_INET6_TUNNEL is not set -+CONFIG_INET6_XFRM_MODE_TRANSPORT=m -+CONFIG_INET6_XFRM_MODE_TUNNEL=m -+CONFIG_INET6_XFRM_MODE_BEET=m -+# CONFIG_INET6_XFRM_MODE_ROUTEOPTIMIZATION is not set -+CONFIG_IPV6_SIT=m -+CONFIG_IPV6_NDISC_NODETYPE=y -+# CONFIG_IPV6_TUNNEL is not set -+# CONFIG_IPV6_MULTIPLE_TABLES is not set -+# CONFIG_IPV6_MROUTE is not set -+# CONFIG_NETWORK_SECMARK is not set -+# CONFIG_NETFILTER is not set -+# CONFIG_IP_DCCP is not set -+# CONFIG_IP_SCTP is not set -+# CONFIG_TIPC is not set -+# CONFIG_ATM is not set -+# CONFIG_BRIDGE is not set -+# CONFIG_NET_DSA is not set -+CONFIG_VLAN_8021Q=m -+# CONFIG_VLAN_8021Q_GVRP 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_ECONET is not set -+CONFIG_WAN_ROUTER=y -+# CONFIG_NET_SCHED is not set -+ -+# -+# Network testing -+# -+# CONFIG_NET_PKTGEN is not set -+# CONFIG_HAMRADIO is not set -+# CONFIG_CAN is not set -+# CONFIG_IRDA is not set -+# CONFIG_BT is not set -+# CONFIG_AF_RXRPC is not set -+# CONFIG_PHONET is not set -+# CONFIG_WIRELESS is not set -+# CONFIG_RFKILL is not set -+# CONFIG_NET_9P is not set -+ -+# -+# Device Drivers -+# -+ -+# -+# Generic Driver Options -+# -+CONFIG_UEVENT_HELPER_PATH="/sbin/hotplug" -+CONFIG_STANDALONE=y -+CONFIG_PREVENT_FIRMWARE_BUILD=y -+CONFIG_FW_LOADER=y -+CONFIG_FIRMWARE_IN_KERNEL=y -+CONFIG_EXTRA_FIRMWARE="" -+# CONFIG_SYS_HYPERVISOR is not set -+CONFIG_CONNECTOR=y -+CONFIG_PROC_EVENTS=y -+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 -+# CONFIG_MTD_AFS_PARTS is not set -+# CONFIG_MTD_AR7_PARTS is not set -+ -+# -+# User Modules And Translation Layers -+# -+CONFIG_MTD_CHAR=y -+CONFIG_MTD_BLKDEVS=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 -+# CONFIG_SSFDC is not set -+# CONFIG_MTD_OOPS is not set -+ -+# -+# RAM/ROM/Flash chip drivers -+# -+# CONFIG_MTD_CFI is not set -+# CONFIG_MTD_JEDECPROBE 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_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_PLATRAM is not set -+ -+# -+# Self-contained MTD device drivers -+# -+CONFIG_MTD_DATAFLASH=m -+CONFIG_MTD_DATAFLASH_WRITE_VERIFY=y -+# CONFIG_MTD_DATAFLASH_OTP is not set -+CONFIG_MTD_M25P80=y -+CONFIG_M25PXX_USE_FAST_READ=y -+# CONFIG_MTD_SLRAM is not set -+# CONFIG_MTD_PHRAM is not set -+# CONFIG_MTD_MTDRAM 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 -+# CONFIG_MTD_NAND is not set -+# CONFIG_MTD_ONENAND is not set -+ -+# -+# UBI - Unsorted block images -+# -+# CONFIG_MTD_UBI is not set -+# CONFIG_PARPORT is not set -+CONFIG_BLK_DEV=y -+# CONFIG_BLK_DEV_COW_COMMON is not set -+CONFIG_BLK_DEV_LOOP=y -+# CONFIG_BLK_DEV_CRYPTOLOOP is not set -+CONFIG_BLK_DEV_NBD=y -+# CONFIG_BLK_DEV_UB is not set -+CONFIG_BLK_DEV_RAM=y -+CONFIG_BLK_DEV_RAM_COUNT=16 -+CONFIG_BLK_DEV_RAM_SIZE=16384 -+# CONFIG_BLK_DEV_XIP is not set -+# CONFIG_RD_BZIP2 is not set -+CONFIG_RD_LZMA=y -+CONFIG_RD_GZIP=y -+# CONFIG_CDROM_PKTCDVD is not set -+# CONFIG_ATA_OVER_ETH is not set -+CONFIG_MISC_DEVICES=y -+# CONFIG_EEPROM_93CX6 is not set -+# CONFIG_ICS932S401 is not set -+# CONFIG_ENCLOSURE_SERVICES is not set -+# CONFIG_C2PORT is not set -+CONFIG_HAVE_IDE=y -+# CONFIG_IDE is not set -+ -+# -+# SCSI device support -+# -+# CONFIG_RAID_ATTRS is not set -+CONFIG_SCSI=y -+CONFIG_SCSI_DMA=y -+CONFIG_SCSI_TGT=y -+# CONFIG_SCSI_NETLINK is not set -+CONFIG_SCSI_PROC_FS=y -+ -+# -+# SCSI support type (disk, tape, CD-ROM) -+# -+CONFIG_BLK_DEV_SD=y -+# CONFIG_CHR_DEV_ST is not set -+# CONFIG_CHR_DEV_OSST is not set -+# CONFIG_BLK_DEV_SR is not set -+CONFIG_CHR_DEV_SG=y -+# CONFIG_CHR_DEV_SCH is not set -+ -+# -+# Some SCSI devices (e.g. CD jukebox) support multiple LUNs -+# -+# CONFIG_SCSI_MULTI_LUN is not set -+# CONFIG_SCSI_CONSTANTS is not set -+# CONFIG_SCSI_LOGGING is not set -+CONFIG_SCSI_SCAN_ASYNC=y -+CONFIG_SCSI_WAIT_SCAN=m -+ -+# -+# SCSI Transports -+# -+# CONFIG_SCSI_SPI_ATTRS is not set -+# CONFIG_SCSI_FC_ATTRS is not set -+CONFIG_SCSI_ISCSI_ATTRS=m -+# CONFIG_SCSI_SAS_LIBSAS is not set -+# CONFIG_SCSI_SRP_ATTRS is not set -+# CONFIG_SCSI_LOWLEVEL is not set -+# CONFIG_SCSI_DH is not set -+# CONFIG_ATA is not set -+# CONFIG_MD is not set -+CONFIG_NETDEVICES=y -+# CONFIG_DUMMY is not set -+CONFIG_BONDING=m -+# CONFIG_MACVLAN is not set -+# CONFIG_EQUALIZER is not set -+CONFIG_TUN=m -+# CONFIG_VETH is not set -+# CONFIG_NET_ETHERNET is not set -+CONFIG_NETDEV_1000=y -+CONFIG_ASPEEDMAC=y -+# CONFIG_NETDEV_10000 is not set -+ -+# -+# Wireless LAN -+# -+# CONFIG_WLAN_PRE80211 is not set -+# CONFIG_WLAN_80211 is not set -+# CONFIG_IWLWIFI_LEDS is not set -+ -+# -+# USB Network Adapters -+# -+# CONFIG_USB_CATC is not set -+# CONFIG_USB_KAWETH is not set -+# CONFIG_USB_PEGASUS is not set -+# CONFIG_USB_RTL8150 is not set -+# CONFIG_USB_USBNET is not set -+# CONFIG_WAN is not set -+# CONFIG_PPP is not set -+# CONFIG_SLIP is not set -+# CONFIG_NETCONSOLE is not set -+# CONFIG_NETPOLL is not set -+# CONFIG_NET_POLL_CONTROLLER is not set -+# CONFIG_ISDN is not set -+ -+# -+# Input device support -+# -+CONFIG_INPUT=y -+# CONFIG_INPUT_FF_MEMLESS is not set -+# CONFIG_INPUT_POLLDEV is not set -+ -+# -+# Userland interfaces -+# -+CONFIG_INPUT_MOUSEDEV=y -+CONFIG_INPUT_MOUSEDEV_PSAUX=y -+CONFIG_INPUT_MOUSEDEV_SCREEN_X=1024 -+CONFIG_INPUT_MOUSEDEV_SCREEN_Y=768 -+# CONFIG_INPUT_JOYDEV is not set -+CONFIG_INPUT_EVDEV=y -+# CONFIG_INPUT_EVBUG is not set -+ -+# -+# Input Device Drivers -+# -+CONFIG_INPUT_KEYBOARD=y -+CONFIG_KEYBOARD_ATKBD=y -+# CONFIG_KEYBOARD_SUNKBD is not set -+# CONFIG_KEYBOARD_LKKBD is not set -+# CONFIG_KEYBOARD_XTKBD is not set -+# CONFIG_KEYBOARD_NEWTON is not set -+# CONFIG_KEYBOARD_STOWAWAY is not set -+# CONFIG_KEYBOARD_GPIO is not set -+CONFIG_INPUT_MOUSE=y -+CONFIG_MOUSE_PS2=y -+CONFIG_MOUSE_PS2_ALPS=y -+CONFIG_MOUSE_PS2_LOGIPS2PP=y -+CONFIG_MOUSE_PS2_SYNAPTICS=y -+CONFIG_MOUSE_PS2_LIFEBOOK=y -+CONFIG_MOUSE_PS2_TRACKPOINT=y -+# CONFIG_MOUSE_PS2_ELANTECH is not set -+# CONFIG_MOUSE_PS2_TOUCHKIT is not set -+CONFIG_MOUSE_SERIAL=y -+# CONFIG_MOUSE_APPLETOUCH is not set -+# CONFIG_MOUSE_BCM5974 is not set -+# CONFIG_MOUSE_VSXXXAA is not set -+# CONFIG_MOUSE_GPIO is not set -+# CONFIG_INPUT_JOYSTICK is not set -+# CONFIG_INPUT_TABLET is not set -+# CONFIG_INPUT_TOUCHSCREEN is not set -+# CONFIG_INPUT_MISC is not set -+ -+# -+# Hardware I/O ports -+# -+CONFIG_SERIO=y -+CONFIG_SERIO_SERPORT=y -+# CONFIG_SERIO_AMBAKMI is not set -+CONFIG_SERIO_LIBPS2=y -+# CONFIG_SERIO_RAW is not set -+# CONFIG_GAMEPORT is not set -+ -+# -+# Character devices -+# -+CONFIG_VT=y -+CONFIG_CONSOLE_TRANSLATIONS=y -+CONFIG_VT_CONSOLE=y -+CONFIG_HW_CONSOLE=y -+# CONFIG_VT_HW_CONSOLE_BINDING is not set -+CONFIG_DEVKMEM=y -+CONFIG_SERIAL_NONSTANDARD=y -+# CONFIG_N_HDLC is not set -+# CONFIG_RISCOM8 is not set -+# CONFIG_SPECIALIX is not set -+# CONFIG_RIO is not set -+# CONFIG_STALDRV is not set -+ -+# -+# Serial drivers -+# -+CONFIG_SERIAL_8250=y -+CONFIG_SERIAL_8250_CONSOLE=y -+CONFIG_SERIAL_8250_NR_UARTS=5 -+CONFIG_SERIAL_8250_RUNTIME_UARTS=5 -+# CONFIG_SERIAL_AST_DMA_UART is not set -+# CONFIG_SERIAL_8250_EXTENDED is not set -+ -+# -+# Non-8250 serial port support -+# -+# CONFIG_SERIAL_AMBA_PL010 is not set -+# CONFIG_SERIAL_AMBA_PL011 is not set -+# CONFIG_SERIAL_AST is not set -+CONFIG_SERIAL_CORE=y -+CONFIG_SERIAL_CORE_CONSOLE=y -+CONFIG_UNIX98_PTYS=y -+CONFIG_LEGACY_PTYS=y -+CONFIG_LEGACY_PTY_COUNT=256 -+# CONFIG_IPMI_HANDLER is not set -+CONFIG_AST_MISC=y -+# CONFIG_AST_VIDEO is not set -+# CONFIG_ADC_CAT9883 is not set -+# CONFIG_AST_SPI_BIOS is not set -+CONFIG_AST_PECI=y -+# CONFIG_AST_KCS is not set -+# CONFIG_AST_GPIO is not set -+# CONFIG_HW_RANDOM is not set -+CONFIG_NVRAM=y -+# CONFIG_R3964 is not set -+# CONFIG_RAW_DRIVER is not set -+# CONFIG_TCG_TPM is not set -+CONFIG_I2C=y -+CONFIG_I2C_BOARDINFO=y -+CONFIG_I2C_CHARDEV=y -+CONFIG_I2C_HELPER_AUTO=y -+ -+# -+# I2C Hardware Bus support -+# -+ -+# -+# I2C system bus drivers (mostly embedded / system-on-chip) -+# -+# CONFIG_I2C_GPIO is not set -+# CONFIG_I2C_OCORES is not set -+CONFIG_I2C_AST=y -+CONFIG_AST_I2C_SLAVE_MODE=y -+# CONFIG_AST_I2C_SLAVE_EEPROM is not set -+CONFIG_AST_I2C_SLAVE_RDWR=y -+# CONFIG_I2C_SIMTEC is not set -+ -+# -+# External I2C/SMBus adapter drivers -+# -+# CONFIG_I2C_PARPORT_LIGHT is not set -+# CONFIG_I2C_TAOS_EVM is not set -+# CONFIG_I2C_TINY_USB is not set -+ -+# -+# Other I2C/SMBus bus drivers -+# -+# CONFIG_I2C_PCA_PLATFORM is not set -+# CONFIG_I2C_STUB is not set -+ -+# -+# Miscellaneous I2C Chip support -+# -+# CONFIG_DS1682 is not set -+CONFIG_AT24=m -+# CONFIG_SENSORS_EEPROM is not set -+CONFIG_SENSORS_PCF8574=m -+# CONFIG_PCF8575 is not set -+# CONFIG_SENSORS_PCA9539 is not set -+# CONFIG_SENSORS_PCF8591 is not set -+# CONFIG_TPS65010 is not set -+# CONFIG_SENSORS_MAX6875 is not set -+# CONFIG_SENSORS_TSL2550 is not set -+# CONFIG_I2C_DEBUG_CORE is not set -+# CONFIG_I2C_DEBUG_ALGO is not set -+# CONFIG_I2C_DEBUG_BUS is not set -+# CONFIG_I2C_DEBUG_CHIP is not set -+CONFIG_SPI=y -+CONFIG_SPI_MASTER=y -+ -+# -+# SPI Master Controller Drivers -+# -+CONFIG_SPI_AST=y -+CONFIG_SPI_FMC=y -+CONFIG_SPI_BITBANG=y -+ -+# -+# SPI Protocol Masters -+# -+CONFIG_SPI_AT25=m -+# CONFIG_SPI_SPIDEV is not set -+# CONFIG_SPI_TLE62X0 is not set -+CONFIG_ARCH_REQUIRE_GPIOLIB=y -+CONFIG_GPIOLIB=y -+CONFIG_GPIO_SYSFS=y -+ -+# -+# Memory mapped GPIO expanders: -+# -+ -+# -+# I2C GPIO expanders: -+# -+# CONFIG_GPIO_MAX732X is not set -+# CONFIG_GPIO_PCA953X is not set -+# CONFIG_GPIO_PCF857X is not set -+ -+# -+# PCI GPIO expanders: -+# -+ -+# -+# SPI GPIO expanders: -+# -+# CONFIG_GPIO_MAX7301 is not set -+# CONFIG_GPIO_MCP23S08 is not set -+# CONFIG_W1 is not set -+# CONFIG_POWER_SUPPLY is not set -+CONFIG_HWMON=y -+# CONFIG_HWMON_VID is not set -+# CONFIG_SENSORS_AD7414 is not set -+# CONFIG_SENSORS_AD7418 is not set -+# CONFIG_SENSORS_ADCXX is not set -+# CONFIG_SENSORS_ADM1021 is not set -+# CONFIG_SENSORS_ADM1025 is not set -+# CONFIG_SENSORS_ADM1026 is not set -+# CONFIG_SENSORS_ADM1029 is not set -+# CONFIG_SENSORS_ADM1031 is not set -+# CONFIG_SENSORS_ADM9240 is not set -+# CONFIG_SENSORS_ADT7462 is not set -+# CONFIG_SENSORS_ADT7470 is not set -+# CONFIG_SENSORS_ADT7473 is not set -+# CONFIG_SENSORS_ATXP1 is not set -+# CONFIG_SENSORS_DS1621 is not set -+# CONFIG_SENSORS_F71805F is not set -+# CONFIG_SENSORS_F71882FG is not set -+# CONFIG_SENSORS_F75375S is not set -+# CONFIG_SENSORS_GL518SM is not set -+# CONFIG_SENSORS_GL520SM is not set -+# CONFIG_SENSORS_IT87 is not set -+# CONFIG_SENSORS_LM63 is not set -+# CONFIG_SENSORS_LM70 is not set -+CONFIG_SENSORS_LM75=m -+# CONFIG_SENSORS_LM77 is not set -+# CONFIG_SENSORS_LM78 is not set -+# CONFIG_SENSORS_LM80 is not set -+# CONFIG_SENSORS_LM83 is not set -+# CONFIG_SENSORS_LM85 is not set -+# CONFIG_SENSORS_LM87 is not set -+# CONFIG_SENSORS_LM90 is not set -+# CONFIG_SENSORS_LM92 is not set -+# CONFIG_SENSORS_LM93 is not set -+CONFIG_SENSORS_MAX127=m -+# CONFIG_SENSORS_MAX1111 is not set -+# CONFIG_SENSORS_MAX1619 is not set -+# CONFIG_SENSORS_MAX6650 is not set -+# CONFIG_SENSORS_PC87360 is not set -+# CONFIG_SENSORS_PC87427 is not set -+# CONFIG_SENSORS_DME1737 is not set -+# CONFIG_SENSORS_SMSC47M1 is not set -+# CONFIG_SENSORS_SMSC47M192 is not set -+# CONFIG_SENSORS_SMSC47B397 is not set -+CONFIG_SENSORS_ADS7828=m -+# CONFIG_SENSORS_THMC50 is not set -+# CONFIG_SENSORS_VT1211 is not set -+# CONFIG_SENSORS_W83781D is not set -+# CONFIG_SENSORS_W83791D is not set -+# CONFIG_SENSORS_W83792D is not set -+# CONFIG_SENSORS_W83793 is not set -+# CONFIG_SENSORS_W83L785TS is not set -+# CONFIG_SENSORS_W83L786NG is not set -+# CONFIG_SENSORS_W83627HF is not set -+# CONFIG_SENSORS_W83627EHF is not set -+CONFIG_SENSORS_AST_ADC=y -+CONFIG_SENSORS_AST_PWM_FAN=y -+# CONFIG_SENSORS_FB_PANTHER_PLUS is not set -+CONFIG_PMBUS=m -+CONFIG_SENSORS_PMBUS=m -+CONFIG_SENSORS_ADM1275=m -+# CONFIG_SENSORS_LM25066 is not set -+# CONFIG_SENSORS_LTC2978 is not set -+# CONFIG_SENSORS_MAX16064 is not set -+# CONFIG_SENSORS_MAX34440 is not set -+# CONFIG_SENSORS_MAX8688 is not set -+CONFIG_SENSORS_PFE1100=m -+CONFIG_SENSORS_PFE3000=m -+# CONFIG_SENSORS_UCD9000 is not set -+# CONFIG_SENSORS_UCD9200 is not set -+# CONFIG_SENSORS_ZL6100 is not set -+# CONFIG_HWMON_DEBUG_CHIP is not set -+CONFIG_THERMAL=y -+CONFIG_THERMAL_HWMON=y -+CONFIG_WATCHDOG=y -+# CONFIG_WATCHDOG_NOWAYOUT is not set -+ -+# -+# Watchdog Device Drivers -+# -+# CONFIG_SOFT_WATCHDOG is not set -+CONFIG_AST_WATCHDOG=y -+ -+# -+# USB-based Watchdog Cards -+# -+# CONFIG_USBPCWATCHDOG is not set -+CONFIG_SSB_POSSIBLE=y -+ -+# -+# Sonics Silicon Backplane -+# -+# CONFIG_SSB is not set -+ -+# -+# Multifunction device drivers -+# -+# CONFIG_MFD_CORE is not set -+# CONFIG_MFD_SM501 is not set -+# CONFIG_MFD_ASIC3 is not set -+# CONFIG_HTC_EGPIO is not set -+# CONFIG_HTC_PASIC3 is not set -+# CONFIG_MFD_TMIO is not set -+# CONFIG_MFD_TC6393XB is not set -+# CONFIG_PMIC_DA903X is not set -+# CONFIG_MFD_WM8400 is not set -+# CONFIG_MFD_WM8350_I2C is not set -+ -+# -+# Multimedia devices -+# -+ -+# -+# Multimedia core support -+# -+# CONFIG_VIDEO_DEV is not set -+# CONFIG_DVB_CORE is not set -+# CONFIG_VIDEO_MEDIA is not set -+ -+# -+# Multimedia drivers -+# -+# CONFIG_DAB is not set -+ -+# -+# Graphics support -+# -+# CONFIG_VGASTATE is not set -+# CONFIG_VIDEO_OUTPUT_CONTROL is not set -+# CONFIG_FB is not set -+# CONFIG_BACKLIGHT_LCD_SUPPORT is not set -+ -+# -+# Display device support -+# -+# CONFIG_DISPLAY_SUPPORT is not set -+ -+# -+# Console display driver support -+# -+# CONFIG_VGA_CONSOLE is not set -+CONFIG_DUMMY_CONSOLE=y -+# CONFIG_SOUND is not set -+# CONFIG_HID_SUPPORT is not set -+CONFIG_USB_SUPPORT=y -+CONFIG_USB_ARCH_HAS_HCD=y -+# CONFIG_USB_ARCH_HAS_OHCI is not set -+CONFIG_USB_ARCH_HAS_EHCI=y -+CONFIG_USB=m -+# CONFIG_USB_DEBUG is not set -+# CONFIG_USB_ANNOUNCE_NEW_DEVICES is not set -+ -+# -+# Miscellaneous USB options -+# -+CONFIG_USB_DEVICEFS=y -+CONFIG_USB_DEVICE_CLASS=y -+# CONFIG_USB_DYNAMIC_MINORS is not set -+# CONFIG_USB_SUSPEND is not set -+# CONFIG_USB_OTG is not set -+# CONFIG_USB_MON is not set -+# CONFIG_USB_WUSB is not set -+# CONFIG_USB_WUSB_CBAF is not set -+ -+# -+# USB Host Controller Drivers -+# -+# CONFIG_USB_C67X00_HCD is not set -+# CONFIG_USB_EHCI_HCD is not set -+# CONFIG_USB_ISP116X_HCD is not set -+# CONFIG_USB_SL811_HCD is not set -+# CONFIG_USB_R8A66597_HCD is not set -+# CONFIG_USB_HWA_HCD is not set -+ -+# -+# AST USB Drivers -+# -+CONFIG_AST_USB_UHCI_HCD=y -+# CONFIG_AST_USB_UHCI_MULTIPORT_1 is not set -+# CONFIG_AST_USB_UHCI_MULTIPORT_2 is not set -+CONFIG_AST_USB_UHCI_MULTIPORT_4=y -+# CONFIG_USB_EHCI_SPLIT_ISO is not set -+ -+# -+# USB Device Class drivers -+# -+# CONFIG_USB_ACM is not set -+# CONFIG_USB_PRINTER is not set -+# CONFIG_USB_WDM is not set -+# CONFIG_USB_TMC is not set -+ -+# -+# NOTE: USB_STORAGE depends on SCSI but BLK_DEV_SD may also be needed; -+# -+ -+# -+# see USB_STORAGE Help for more information -+# -+CONFIG_USB_STORAGE=m -+# CONFIG_USB_STORAGE_DEBUG is not set -+# CONFIG_USB_STORAGE_DATAFAB is not set -+# CONFIG_USB_STORAGE_FREECOM is not set -+# CONFIG_USB_STORAGE_ISD200 is not set -+# CONFIG_USB_STORAGE_DPCM is not set -+# CONFIG_USB_STORAGE_USBAT is not set -+# CONFIG_USB_STORAGE_SDDR09 is not set -+# CONFIG_USB_STORAGE_SDDR55 is not set -+# CONFIG_USB_STORAGE_JUMPSHOT is not set -+# CONFIG_USB_STORAGE_ALAUDA is not set -+# CONFIG_USB_STORAGE_ONETOUCH is not set -+# CONFIG_USB_STORAGE_KARMA is not set -+# CONFIG_USB_STORAGE_CYPRESS_ATACB is not set -+# CONFIG_USB_LIBUSUAL is not set -+ -+# -+# USB Imaging devices -+# -+# CONFIG_USB_MDC800 is not set -+# CONFIG_USB_MICROTEK is not set -+ -+# -+# USB port drivers -+# -+# CONFIG_USB_SERIAL is not set -+ -+# -+# USB Miscellaneous drivers -+# -+# CONFIG_USB_EMI62 is not set -+# CONFIG_USB_EMI26 is not set -+# CONFIG_USB_ADUTUX is not set -+# CONFIG_USB_SEVSEG is not set -+# CONFIG_USB_RIO500 is not set -+# CONFIG_USB_LEGOTOWER is not set -+# CONFIG_USB_LCD is not set -+# CONFIG_USB_BERRY_CHARGE is not set -+# CONFIG_USB_LED is not set -+# CONFIG_USB_CYPRESS_CY7C63 is not set -+# CONFIG_USB_CYTHERM is not set -+# CONFIG_USB_PHIDGET is not set -+# CONFIG_USB_IDMOUSE is not set -+# CONFIG_USB_FTDI_ELAN is not set -+# CONFIG_USB_APPLEDISPLAY is not set -+# CONFIG_USB_LD is not set -+# CONFIG_USB_TRANCEVIBRATOR is not set -+# CONFIG_USB_IOWARRIOR is not set -+# CONFIG_USB_TEST is not set -+# CONFIG_USB_ISIGHTFW is not set -+# CONFIG_USB_VST is not set -+CONFIG_USB_GADGET=y -+# CONFIG_USB_GADGET_DEBUG_FILES is not set -+CONFIG_USB_GADGET_VBUS_DRAW=2 -+CONFIG_USB_GADGET_SELECTED=y -+# CONFIG_USB_GADGET_AT91 is not set -+# CONFIG_USB_GADGET_ATMEL_USBA is not set -+# CONFIG_USB_GADGET_FSL_USB2 is not set -+# CONFIG_USB_GADGET_LH7A40X is not set -+# CONFIG_USB_GADGET_OMAP is not set -+# CONFIG_USB_GADGET_PXA25X is not set -+# CONFIG_USB_GADGET_PXA27X is not set -+# CONFIG_USB_GADGET_S3C2410 is not set -+# CONFIG_USB_GADGET_M66592 is not set -+# CONFIG_USB_GADGET_AMD5536UDC is not set -+# CONFIG_USB_GADGET_FSL_QE is not set -+# CONFIG_USB_GADGET_NET2280 is not set -+# CONFIG_USB_GADGET_GOKU is not set -+CONFIG_USB_GADGET_ASPEED_AST=y -+CONFIG_USB_ASPEED_AST=y -+# CONFIG_USB_GADGET_DUMMY_HCD is not set -+CONFIG_USB_GADGET_DUALSPEED=y -+CONFIG_USB_ZERO=m -+CONFIG_USB_ETH=m -+CONFIG_USB_ETH_RNDIS=y -+CONFIG_USB_GADGETFS=m -+CONFIG_USB_FILE_STORAGE=m -+# CONFIG_USB_FILE_STORAGE_TEST is not set -+CONFIG_USB_G_SERIAL=m -+# CONFIG_USB_MIDI_GADGET is not set -+# CONFIG_USB_G_PRINTER is not set -+CONFIG_USB_CDC_COMPOSITE=m -+# CONFIG_MMC is not set -+# CONFIG_MEMSTICK is not set -+# CONFIG_ACCESSIBILITY is not set -+# CONFIG_NEW_LEDS is not set -+CONFIG_RTC_LIB=y -+CONFIG_RTC_CLASS=y -+# CONFIG_RTC_HCTOSYS is not set -+# CONFIG_RTC_DEBUG is not set -+ -+# -+# RTC interfaces -+# -+CONFIG_RTC_INTF_SYSFS=y -+CONFIG_RTC_INTF_PROC=y -+CONFIG_RTC_INTF_DEV=y -+# CONFIG_RTC_INTF_DEV_UIE_EMUL is not set -+# CONFIG_RTC_DRV_TEST is not set -+ -+# -+# I2C RTC drivers -+# -+# CONFIG_RTC_DRV_DS1307 is not set -+# CONFIG_RTC_DRV_DS1374 is not set -+# CONFIG_RTC_DRV_DS1672 is not set -+# CONFIG_RTC_DRV_MAX6900 is not set -+# CONFIG_RTC_DRV_RS5C372 is not set -+# CONFIG_RTC_DRV_ISL1208 is not set -+# CONFIG_RTC_DRV_X1205 is not set -+# CONFIG_RTC_DRV_PCF8563 is not set -+# CONFIG_RTC_DRV_PCF8583 is not set -+# CONFIG_RTC_DRV_M41T80 is not set -+# CONFIG_RTC_DRV_S35390A is not set -+# CONFIG_RTC_DRV_FM3130 is not set -+# CONFIG_RTC_DRV_RX8581 is not set -+ -+# -+# SPI RTC drivers -+# -+# CONFIG_RTC_DRV_M41T94 is not set -+# CONFIG_RTC_DRV_DS1305 is not set -+# CONFIG_RTC_DRV_DS1390 is not set -+# CONFIG_RTC_DRV_MAX6902 is not set -+# CONFIG_RTC_DRV_R9701 is not set -+# CONFIG_RTC_DRV_RS5C348 is not set -+# CONFIG_RTC_DRV_DS3234 is not set -+ -+# -+# Platform RTC drivers -+# -+# CONFIG_RTC_DRV_CMOS is not set -+# CONFIG_RTC_DRV_DS1286 is not set -+# CONFIG_RTC_DRV_DS1511 is not set -+# CONFIG_RTC_DRV_DS1553 is not set -+# CONFIG_RTC_DRV_DS1742 is not set -+# CONFIG_RTC_DRV_STK17TA8 is not set -+# CONFIG_RTC_DRV_M48T86 is not set -+# CONFIG_RTC_DRV_M48T35 is not set -+# CONFIG_RTC_DRV_M48T59 is not set -+# CONFIG_RTC_DRV_BQ4802 is not set -+# CONFIG_RTC_DRV_V3020 is not set -+ -+# -+# on-CPU RTC drivers -+# -+# CONFIG_RTC_DRV_PL030 is not set -+# CONFIG_RTC_DRV_PL031 is not set -+CONFIG_RTC_DRV_ASPEED=y -+# CONFIG_DMADEVICES is not set -+# CONFIG_REGULATOR is not set -+# CONFIG_UIO is not set -+ -+# -+# File systems -+# -+CONFIG_EXT2_FS=y -+CONFIG_EXT2_FS_XATTR=y -+CONFIG_EXT2_FS_POSIX_ACL=y -+CONFIG_EXT2_FS_SECURITY=y -+# CONFIG_EXT2_FS_XIP is not set -+# CONFIG_EXT3_FS is not set -+# CONFIG_EXT4_FS is not set -+CONFIG_FS_MBCACHE=y -+# CONFIG_REISERFS_FS is not set -+# CONFIG_JFS_FS is not set -+CONFIG_FS_POSIX_ACL=y -+CONFIG_FILE_LOCKING=y -+# CONFIG_XFS_FS is not set -+# CONFIG_OCFS2_FS is not set -+CONFIG_DNOTIFY=y -+CONFIG_INOTIFY=y -+CONFIG_INOTIFY_USER=y -+# CONFIG_QUOTA is not set -+# CONFIG_AUTOFS_FS is not set -+# CONFIG_AUTOFS4_FS is not set -+# CONFIG_FUSE_FS is not set -+CONFIG_GENERIC_ACL=y -+ -+# -+# CD-ROM/DVD Filesystems -+# -+# CONFIG_ISO9660_FS is not set -+# CONFIG_UDF_FS is not set -+ -+# -+# DOS/FAT/NT Filesystems -+# -+CONFIG_FAT_FS=y -+CONFIG_MSDOS_FS=y -+CONFIG_VFAT_FS=y -+CONFIG_FAT_DEFAULT_CODEPAGE=437 -+CONFIG_FAT_DEFAULT_IOCHARSET="iso8859-1" -+CONFIG_NTFS_FS=y -+# CONFIG_NTFS_DEBUG is not set -+CONFIG_NTFS_RW=y -+ -+# -+# Pseudo filesystems -+# -+CONFIG_PROC_FS=y -+CONFIG_PROC_SYSCTL=y -+CONFIG_PROC_PAGE_MONITOR=y -+CONFIG_SYSFS=y -+CONFIG_TMPFS=y -+CONFIG_TMPFS_POSIX_ACL=y -+# CONFIG_HUGETLB_PAGE is not set -+CONFIG_CONFIGFS_FS=m -+ -+# -+# 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_YAFFS_FS=y -+CONFIG_YAFFS_YAFFS1=y -+# CONFIG_YAFFS_9BYTE_TAGS is not set -+# CONFIG_YAFFS_DOES_ECC is not set -+CONFIG_YAFFS_YAFFS2=y -+CONFIG_YAFFS_AUTO_YAFFS2=y -+# CONFIG_YAFFS_DISABLE_TAGS_ECC is not set -+# CONFIG_YAFFS_DISABLE_LAZY_LOAD is not set -+# CONFIG_YAFFS_DISABLE_WIDE_TNODES is not set -+# CONFIG_YAFFS_ALWAYS_CHECK_CHUNK_ERASED is not set -+CONFIG_YAFFS_SHORT_NAMES_IN_RAM=y -+# CONFIG_YAFFS_EMPTY_LOST_AND_FOUND is not set -+CONFIG_JFFS2_FS=y -+CONFIG_JFFS2_FS_DEBUG=0 -+CONFIG_JFFS2_FS_WRITEBUFFER=y -+# CONFIG_JFFS2_FS_WBUF_VERIFY is not set -+# CONFIG_JFFS2_SUMMARY is not set -+# CONFIG_JFFS2_FS_XATTR is not set -+# CONFIG_JFFS2_COMPRESSION_OPTIONS is not set -+CONFIG_JFFS2_ZLIB=y -+# CONFIG_JFFS2_LZO is not set -+CONFIG_JFFS2_RTIME=y -+# CONFIG_JFFS2_RUBIN is not set -+# CONFIG_CRAMFS is not set -+# CONFIG_VXFS_FS is not set -+# CONFIG_MINIX_FS is not set -+# CONFIG_OMFS_FS is not set -+# CONFIG_HPFS_FS is not set -+# CONFIG_QNX4FS_FS is not set -+# CONFIG_ROMFS_FS is not set -+# CONFIG_SYSV_FS is not set -+# CONFIG_UFS_FS is not set -+CONFIG_NETWORK_FILESYSTEMS=y -+CONFIG_NFS_FS=y -+# CONFIG_NFS_V3 is not set -+# CONFIG_NFS_V4 is not set -+CONFIG_ROOT_NFS=y -+# CONFIG_NFSD is not set -+CONFIG_LOCKD=y -+CONFIG_NFS_COMMON=y -+CONFIG_SUNRPC=y -+# CONFIG_SUNRPC_REGISTER_V4 is not set -+# 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 -+ -+# -+# Partition Types -+# -+# CONFIG_PARTITION_ADVANCED is not set -+CONFIG_MSDOS_PARTITION=y -+CONFIG_NLS=y -+CONFIG_NLS_DEFAULT="utf8" -+CONFIG_NLS_CODEPAGE_437=y -+# CONFIG_NLS_CODEPAGE_737 is not set -+# CONFIG_NLS_CODEPAGE_775 is not set -+# CONFIG_NLS_CODEPAGE_850 is not set -+# CONFIG_NLS_CODEPAGE_852 is not set -+# CONFIG_NLS_CODEPAGE_855 is not set -+# CONFIG_NLS_CODEPAGE_857 is not set -+# CONFIG_NLS_CODEPAGE_860 is not set -+# CONFIG_NLS_CODEPAGE_861 is not set -+# CONFIG_NLS_CODEPAGE_862 is not set -+# CONFIG_NLS_CODEPAGE_863 is not set -+# CONFIG_NLS_CODEPAGE_864 is not set -+# CONFIG_NLS_CODEPAGE_865 is not set -+# CONFIG_NLS_CODEPAGE_866 is not set -+# CONFIG_NLS_CODEPAGE_869 is not set -+CONFIG_NLS_CODEPAGE_936=y -+CONFIG_NLS_CODEPAGE_950=y -+CONFIG_NLS_CODEPAGE_932=y -+# CONFIG_NLS_CODEPAGE_949 is not set -+# CONFIG_NLS_CODEPAGE_874 is not set -+# CONFIG_NLS_ISO8859_8 is not set -+# CONFIG_NLS_CODEPAGE_1250 is not set -+# CONFIG_NLS_CODEPAGE_1251 is not set -+CONFIG_NLS_ASCII=y -+CONFIG_NLS_ISO8859_1=y -+# CONFIG_NLS_ISO8859_2 is not set -+# CONFIG_NLS_ISO8859_3 is not set -+# CONFIG_NLS_ISO8859_4 is not set -+# CONFIG_NLS_ISO8859_5 is not set -+# CONFIG_NLS_ISO8859_6 is not set -+# CONFIG_NLS_ISO8859_7 is not set -+# CONFIG_NLS_ISO8859_9 is not set -+# CONFIG_NLS_ISO8859_13 is not set -+# CONFIG_NLS_ISO8859_14 is not set -+# CONFIG_NLS_ISO8859_15 is not set -+# CONFIG_NLS_KOI8_R is not set -+# CONFIG_NLS_KOI8_U is not set -+CONFIG_NLS_UTF8=y -+# CONFIG_DLM is not set -+ -+# -+# Kernel hacking -+# -+# CONFIG_PRINTK_TIME is not set -+# CONFIG_ENABLE_WARN_DEPRECATED is not set -+CONFIG_ENABLE_MUST_CHECK=y -+CONFIG_FRAME_WARN=1024 -+CONFIG_MAGIC_SYSRQ=y -+# CONFIG_UNUSED_SYMBOLS is not set -+# CONFIG_DEBUG_FS is not set -+# CONFIG_HEADERS_CHECK is not set -+# CONFIG_DEBUG_KERNEL is not set -+# CONFIG_SLUB_DEBUG_ON is not set -+# CONFIG_SLUB_STATS is not set -+CONFIG_DEBUG_BUGVERBOSE=y -+CONFIG_DEBUG_MEMORY_INIT=y -+CONFIG_FRAME_POINTER=y -+# CONFIG_RCU_CPU_STALL_DETECTOR is not set -+# CONFIG_LATENCYTOP is not set -+# CONFIG_SYSCTL_SYSCALL_CHECK is not set -+CONFIG_HAVE_FUNCTION_TRACER=y -+ -+# -+# Tracers -+# -+# CONFIG_DYNAMIC_PRINTK_DEBUG is not set -+# CONFIG_SAMPLES is not set -+CONFIG_HAVE_ARCH_KGDB=y -+# CONFIG_DEBUG_USER is not set -+ -+# -+# Security options -+# -+# CONFIG_KEYS is not set -+# CONFIG_SECURITY is not set -+# CONFIG_SECURITYFS is not set -+# CONFIG_SECURITY_FILE_CAPABILITIES is not set -+CONFIG_CRYPTO=y -+ -+# -+# Crypto core or helper -+# -+# CONFIG_CRYPTO_FIPS is not set -+CONFIG_CRYPTO_ALGAPI=y -+CONFIG_CRYPTO_ALGAPI2=y -+CONFIG_CRYPTO_AEAD=m -+CONFIG_CRYPTO_AEAD2=y -+CONFIG_CRYPTO_BLKCIPHER=y -+CONFIG_CRYPTO_BLKCIPHER2=y -+CONFIG_CRYPTO_HASH=y -+CONFIG_CRYPTO_HASH2=y -+CONFIG_CRYPTO_RNG2=y -+CONFIG_CRYPTO_MANAGER=y -+CONFIG_CRYPTO_MANAGER2=y -+# CONFIG_CRYPTO_GF128MUL is not set -+CONFIG_CRYPTO_NULL=y -+# CONFIG_CRYPTO_CRYPTD is not set -+CONFIG_CRYPTO_AUTHENC=m -+# CONFIG_CRYPTO_TEST is not set -+ -+# -+# Authenticated Encryption with Associated Data -+# -+# CONFIG_CRYPTO_CCM is not set -+# CONFIG_CRYPTO_GCM is not set -+# CONFIG_CRYPTO_SEQIV is not set -+ -+# -+# Block modes -+# -+CONFIG_CRYPTO_CBC=y -+# CONFIG_CRYPTO_CTR is not set -+# CONFIG_CRYPTO_CTS is not set -+# CONFIG_CRYPTO_ECB is not set -+# CONFIG_CRYPTO_LRW is not set -+# CONFIG_CRYPTO_PCBC is not set -+# CONFIG_CRYPTO_XTS is not set -+ -+# -+# Hash modes -+# -+CONFIG_CRYPTO_HMAC=y -+# CONFIG_CRYPTO_XCBC is not set -+ -+# -+# Digest -+# -+# CONFIG_CRYPTO_CRC32C is not set -+# CONFIG_CRYPTO_MD4 is not set -+CONFIG_CRYPTO_MD5=y -+# CONFIG_CRYPTO_MICHAEL_MIC is not set -+# CONFIG_CRYPTO_RMD128 is not set -+# CONFIG_CRYPTO_RMD160 is not set -+# CONFIG_CRYPTO_RMD256 is not set -+# CONFIG_CRYPTO_RMD320 is not set -+CONFIG_CRYPTO_SHA1=y -+# CONFIG_CRYPTO_SHA256 is not set -+# CONFIG_CRYPTO_SHA512 is not set -+# CONFIG_CRYPTO_TGR192 is not set -+# CONFIG_CRYPTO_WP512 is not set -+ -+# -+# Ciphers -+# -+# CONFIG_CRYPTO_AES is not set -+# CONFIG_CRYPTO_ANUBIS is not set -+# CONFIG_CRYPTO_ARC4 is not set -+# CONFIG_CRYPTO_BLOWFISH is not set -+# CONFIG_CRYPTO_CAMELLIA is not set -+# CONFIG_CRYPTO_CAST5 is not set -+# CONFIG_CRYPTO_CAST6 is not set -+CONFIG_CRYPTO_DES=y -+# CONFIG_CRYPTO_FCRYPT is not set -+# CONFIG_CRYPTO_KHAZAD is not set -+# CONFIG_CRYPTO_SALSA20 is not set -+# CONFIG_CRYPTO_SEED is not set -+# CONFIG_CRYPTO_SERPENT is not set -+# CONFIG_CRYPTO_TEA is not set -+# CONFIG_CRYPTO_TWOFISH is not set -+ -+# -+# Compression -+# -+CONFIG_CRYPTO_DEFLATE=m -+# CONFIG_CRYPTO_LZO is not set -+ -+# -+# Random Number Generation -+# -+# CONFIG_CRYPTO_ANSI_CPRNG is not set -+# CONFIG_CRYPTO_HW is not set -+ -+# -+# Library routines -+# -+CONFIG_BITREVERSE=y -+# CONFIG_CRC_CCITT is not set -+# CONFIG_CRC16 is not set -+# CONFIG_CRC_T10DIF is not set -+CONFIG_CRC_ITU_T=m -+CONFIG_CRC32=y -+# CONFIG_CRC7 is not set -+# CONFIG_LIBCRC32C is not set -+CONFIG_ZLIB_INFLATE=y -+CONFIG_ZLIB_DEFLATE=y -+CONFIG_PLIST=y -+CONFIG_HAS_IOMEM=y -+CONFIG_HAS_IOPORT=y -+CONFIG_HAS_DMA=y -+ -+ -+# GUC USB Drivers -+# -+CONFIG_GUC_USB_UHCI_HCD=m -+# CONFIG_GUC_USB_UHCI_MULTIPORT_1 is not set -+# CONFIG_GUC_USB_UHCI_MULTIPORT_2 is not set -+CONFIG_GUC_USB_UHCI_MULTIPORT_4=y -+# CONFIG_USB_GADGET_MUSB_HDRC is not set -diff --git a/arch/arm/include/asm/ioctls.h b/arch/arm/include/asm/ioctls.h -index a91d8a1..fd50ffe 100644 ---- a/arch/arm/include/asm/ioctls.h -+++ b/arch/arm/include/asm/ioctls.h -@@ -65,6 +65,7 @@ - #define TIOCSERGETLSR 0x5459 /* Get line status register */ - #define TIOCSERGETMULTI 0x545A /* Get multiport config */ - #define TIOCSERSETMULTI 0x545B /* Set multiport config */ -+#define TIOCSERWAITTEMT 0x5499 /* Wait for empty */ - - #define TIOCMIWAIT 0x545C /* wait for a change on serial input line(s) */ - #define TIOCGICOUNT 0x545D /* read serial port inline interrupt counts */ -diff --git a/arch/arm/mach-aspeed/Kconfig b/arch/arm/mach-aspeed/Kconfig -index a948ab8..6d548f8 100644 ---- a/arch/arm/mach-aspeed/Kconfig -+++ b/arch/arm/mach-aspeed/Kconfig -@@ -203,6 +203,18 @@ endchoice - config AST_SCU_LOCK - bool "AST SCU Protection Key" - -+config WEDGE -+ bool "Facebook Wedge/6-Pack" -+ -+config WEDGE100 -+ bool "Facebook Wedge100" -+ -+config YOSEMITE -+ bool "Facebook Yosemite" -+ -+config FBPLATFORM1 -+ bool "Facebook Platform1" -+ - # Support PCIE - config PCIE - bool "ASPEED PCIE support" -diff --git a/arch/arm/mach-aspeed/gpio.c b/arch/arm/mach-aspeed/gpio.c -index 3a633e9..e56ca35 100644 ---- a/arch/arm/mach-aspeed/gpio.c -+++ b/arch/arm/mach-aspeed/gpio.c -@@ -232,7 +232,7 @@ static struct ast_gpio_bank ast_gpio_gp[] = { - AST_GPIO_BANK("GPIOR", IO_ADDRESS(AST_GPIO_BASE), 1, 0x080, 0x084, 0x118, 0x11c, 0x128, 0x12c, 0x130, 0x110), - AST_GPIO_BANK("GPIOS", IO_ADDRESS(AST_GPIO_BASE), 2, 0x080, 0x084, 0x118, 0x11c, 0x128, 0x12c, 0x130, 0x110), - #if defined(CONFIG_ARCH_AST2400) -- AST_GPIO_BANK("GPIOT", IO_ADDRESS(AST_GPIO_BASE), 4, 0x080, 0x084, 0x118, 0x11c, 0x128, 0x12c, 0x130, 0x110), -+ AST_GPIO_BANK("GPIOT", IO_ADDRESS(AST_GPIO_BASE), 3, 0x080, 0x084, 0x118, 0x11c, 0x128, 0x12c, 0x130, 0x110), - AST_GPIO_BANK("GPIOU", IO_ADDRESS(AST_GPIO_BASE), 0, 0x088, 0x08c, 0x148, 0x14c, 0x158, 0x15c, 0x160, 0x140), - AST_GPIO_BANK("GPIOV", IO_ADDRESS(AST_GPIO_BASE), 1, 0x088, 0x08c, 0x148, 0x14c, 0x158, 0x15c, 0x160, 0x140), - AST_GPIO_BANK("GPIOW", IO_ADDRESS(AST_GPIO_BASE), 2, 0x088, 0x08c, 0x148, 0x14c, 0x158, 0x15c, 0x160, 0x140), -diff --git a/arch/arm/mach-aspeed/include/mach/debug-macro.S b/arch/arm/mach-aspeed/include/mach/debug-macro.S -index ff3195a..33fc879 100644 ---- a/arch/arm/mach-aspeed/include/mach/debug-macro.S -+++ b/arch/arm/mach-aspeed/include/mach/debug-macro.S -@@ -13,8 +13,8 @@ - .macro addruart, rx, tmp - mrc p15, 0, \rx, c1, c0 - tst \rx, #1 @ MMU enabled? -- ldreq \rx, =AST_UART3_BASE -- ldrne \rx, =IO_ADDRESS(AST_UART3_BASE) -+ ldreq \rx, =AST_UART_BASE -+ ldrne \rx, =IO_ADDRESS(AST_UART_BASE) - .endm - - #define UART_SHIFT 2 -diff --git a/arch/arm/mach-aspeed/include/mach/platform.h b/arch/arm/mach-aspeed/include/mach/platform.h -index 8951ffc..4d6c50c 100644 ---- a/arch/arm/mach-aspeed/include/mach/platform.h -+++ b/arch/arm/mach-aspeed/include/mach/platform.h -@@ -62,5 +62,20 @@ - * Watchdog - */ - #define AST_WDT_VA_BASE (IO_ADDRESS(AST_WDT_BASE)) -- -+ -+/* -+ * Console UART -+ */ -+#ifdef CONFIG_WEDGE -+#define AST_UART_BASE AST_UART3_BASE -+#elif defined(CONFIG_WEDGE100) -+#define AST_UART_BASE AST_UART3_BASE -+#elif defined(CONFIG_YOSEMITE) -+#define AST_UART_BASE AST_UART0_BASE -+#elif defined(CONFIG_FBPLATFORM1) -+#define AST_UART_BASE AST_UART0_BASE -+#else -+#define AST_UART_BASE AST_UART0_BASE -+#endif -+ - #endif -diff --git a/arch/arm/mach-aspeed/include/mach/uncompress.h b/arch/arm/mach-aspeed/include/mach/uncompress.h -index 80e560d..3be04b0 100644 ---- a/arch/arm/mach-aspeed/include/mach/uncompress.h -+++ b/arch/arm/mach-aspeed/include/mach/uncompress.h -@@ -12,8 +12,8 @@ - #include <mach/platform.h> - #include <mach/aspeed_serial.h> - --#define UART_PUT_CHAR (*(volatile unsigned char *)(AST_UART3_BASE + UART_THR)) --#define UART_GET_LSR (*(volatile unsigned char *)(AST_UART3_BASE + UART_LSR)) -+#define UART_PUT_CHAR (*(volatile unsigned char *)(AST_UART_BASE + UART_THR)) -+#define UART_GET_LSR (*(volatile unsigned char *)(AST_UART_BASE + UART_LSR)) - - static void putc(int c) - { -@@ -21,7 +21,7 @@ static void putc(int c) - /* wait for space in the UART's transmitter */ - while (!(UART_GET_LSR & UART_LSR_THRE)) - barrier(); -- -+ - /* send the character out. */ - UART_PUT_CHAR = c; - } -diff --git a/arch/arm/mach-aspeed/include/mach/vmalloc.h b/arch/arm/mach-aspeed/include/mach/vmalloc.h -index 51912ae..bc1b471 100644 ---- a/arch/arm/mach-aspeed/include/mach/vmalloc.h -+++ b/arch/arm/mach-aspeed/include/mach/vmalloc.h -@@ -25,5 +25,5 @@ - #define VMALLOC_VMADDR(x) ((unsigned long)(x)) - #define VMALLOC_END (PAGE_OFFSET + 0x20000000) - #else --#define VMALLOC_END 0xf8000000UL --#endif -\ No newline at end of file -+#define VMALLOC_END 0xf8000000UL -+#endif -diff --git a/arch/arm/plat-aspeed/ast-scu.c b/arch/arm/plat-aspeed/ast-scu.c -index 76722f4..101b141 100644 ---- a/arch/arm/plat-aspeed/ast-scu.c -+++ b/arch/arm/plat-aspeed/ast-scu.c -@@ -1,20 +1,20 @@ - /******************************************************************************** --* File Name : arch/arm/plat-aspeed/ast-scu.c -+* File Name : arch/arm/plat-aspeed/ast-scu.c - * Author : Ryan Chen --* Description : AST SCU --* -+* Description : AST SCU -+* - * Copyright (C) 2012-2020 ASPEED Technology Inc. --* This program is free software; you can redistribute it and/or modify --* it under the terms of the GNU General Public License as published by the Free Software Foundation; --* either version 2 of the License, or (at your option) any later version. --* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; --* without even the implied warranty of MERCHANTABILITY or --* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --* You should have received a copy of the GNU General Public License --* along with this program; if not, write to the Free Software --* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -- --CLK24M -+* This program is free software; you can redistribute it and/or modify -+* it under the terms of the GNU General Public License as published by the Free Software Foundation; -+* either version 2 of the License, or (at your option) any later version. -+* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -+* without even the implied warranty of MERCHANTABILITY or -+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -+* You should have received a copy of the GNU General Public License -+* along with this program; if not, write to the Free Software -+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+ -+CLK24M - | - |--> H-PLL -->HCLK - | -@@ -27,9 +27,9 @@ CLK24M - |--> USB2PHY -->UTMICLK - - --* History : -+* History : - * 1. 2012/08/15 Ryan Chen Create --* -+* - ********************************************************************************/ - #include <linux/kernel.h> - #include <linux/module.h> -@@ -56,34 +56,34 @@ CLK24M - - static u32 ast_scu_base = IO_ADDRESS(AST_SCU_BASE); - --static inline u32 -+static inline u32 - ast_scu_read(u32 reg) - { - u32 val; -- -+ - val = readl(ast_scu_base + reg); -- -+ - SCUDBUG("ast_scu_read : reg = 0x%08x, val = 0x%08x\n", reg, val); -- -+ - return val; - } - - static inline void --ast_scu_write(u32 val, u32 reg) -+ast_scu_write(u32 val, u32 reg) - { - SCUDBUG("ast_scu_write : reg = 0x%08x, val = 0x%08x\n", reg, val); - #ifdef CONFIG_AST_SCU_LOCK -- //unlock -+ //unlock - writel(SCU_PROTECT_UNLOCK, ast_scu_base); - writel(val, ast_scu_base + reg); - //lock -- writel(0xaa,ast_scu_base); -+ writel(0xaa,ast_scu_base); - #else - writel(val, ast_scu_base + reg); - #endif - } - --//SoC mapping Table -+//SoC mapping Table - struct soc_id { - const char * name; - u32 rev_id; -@@ -180,9 +180,9 @@ ast_scu_init_video(u8 dynamic_en) - ast_scu_write((ast_scu_read(AST_SCU_CLK_SEL) & ~SCU_CLK_VIDEO_SLOW_MASK) | SCU_CLK_VIDEO_SLOW_EN | SCU_CLK_VIDEO_SLOW_SET(0), AST_SCU_CLK_SEL); - else - ast_scu_write((ast_scu_read(AST_SCU_CLK_SEL) & ~SCU_ECLK_SOURCE_MASK) | SCU_ECLK_SOURCE(2), AST_SCU_CLK_SEL); -- -+ - // Enable CLK -- ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) & ~(SCU_ECLK_STOP_EN | SCU_VCLK_STOP_EN), AST_SCU_CLK_STOP); -+ ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) & ~(SCU_ECLK_STOP_EN | SCU_VCLK_STOP_EN), AST_SCU_CLK_STOP); - mdelay(10); - ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_VIDEO, AST_SCU_RESET); - udelay(100); -@@ -201,32 +201,32 @@ ast_scu_init_eth(u8 num) - ast_scu_write((ast_scu_read(AST_SCU_CLK_SEL) & ~SCU_CLK_MAC_MASK) | SCU_CLK_MAC_DIV(4), AST_SCU_CLK_SEL); - - //Set MAC delay Timing -- ast_scu_write(0x2255, AST_SCU_MAC_CLK); -+ ast_scu_write(0x2255, AST_SCU_MAC_CLK); - - switch(num) { - case 0: -- ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_MAC0, -- AST_SCU_RESET); -+ ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_MAC0, -+ AST_SCU_RESET); - udelay(100); -- ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) & ~SCU_MAC0CLK_STOP_EN, -- AST_SCU_CLK_STOP); -+ ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) & ~SCU_MAC0CLK_STOP_EN, -+ AST_SCU_CLK_STOP); - udelay(1000); -- ast_scu_write(ast_scu_read(AST_SCU_RESET) & ~SCU_RESET_MAC0, -- AST_SCU_RESET); -- -+ ast_scu_write(ast_scu_read(AST_SCU_RESET) & ~SCU_RESET_MAC0, -+ AST_SCU_RESET); -+ - break; - case 1: -- ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_MAC1, -- AST_SCU_RESET); -+ ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_MAC1, -+ AST_SCU_RESET); - udelay(100); -- ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) & ~SCU_MAC1CLK_STOP_EN, -- AST_SCU_CLK_STOP); -+ ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) & ~SCU_MAC1CLK_STOP_EN, -+ AST_SCU_CLK_STOP); - udelay(1000); -- ast_scu_write(ast_scu_read(AST_SCU_RESET) & ~SCU_RESET_MAC1, -- AST_SCU_RESET); -+ ast_scu_write(ast_scu_read(AST_SCU_RESET) & ~SCU_RESET_MAC1, -+ AST_SCU_RESET); - break; -- -- } -+ -+ } - } - - -@@ -292,7 +292,7 @@ ast_scu_init_sdhci(void) - { - //SDHCI Host's Clock Enable and Reset - ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_SD, AST_SCU_RESET); -- -+ - ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) & ~SCU_SDCLK_STOP_EN, AST_SCU_CLK_STOP); - mdelay(10); - -@@ -300,10 +300,10 @@ ast_scu_init_sdhci(void) - mdelay(10); - - // SDCLK = H-PLL / 4 -- ast_scu_write((ast_scu_read(AST_SCU_CLK_SEL) & ~SCU_CLK_SD_MASK) | SCU_CLK_SD_DIV(1), -+ ast_scu_write((ast_scu_read(AST_SCU_CLK_SEL) & ~SCU_CLK_SD_MASK) | SCU_CLK_SD_DIV(1), - AST_SCU_CLK_SEL); - mdelay(10); -- -+ - ast_scu_write(ast_scu_read(AST_SCU_RESET) & ~SCU_RESET_SD, AST_SCU_RESET); - } - -@@ -358,13 +358,13 @@ EXPORT_SYMBOL(ast_scu_init_jtag); - extern void - ast_scu_init_lpc(void) - { -- //Note .. It have been enable in U-boot..... -+ //Note .. It have been enable in U-boot..... - // ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_LPC, AST_SCU_RESET); - - //enable LPC clock LHCLK = H-PLL/8 -- ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) | -- SCU_SET_LHCLK_DIV(3) | -- SCU_LHCLK_SOURCE_EN, -+ ast_scu_write(ast_scu_read(AST_SCU_CLK_STOP) | -+ SCU_SET_LHCLK_DIV(3) | -+ SCU_LHCLK_SOURCE_EN, - AST_SCU_CLK_STOP); - - } -@@ -377,7 +377,7 @@ ast_scu_get_lpc_plus_enable(void) - { - if(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & SCU_FUN_PIN_LPC_PLUS) - return 1; -- else -+ else - return 0; - } - -@@ -390,10 +390,10 @@ ast_scu_init_crt(void) - #if defined(CONFIG_AST_DAC) || defined(CONFIG_AST_DVO) - ast_scu_write((ast_scu_read(AST_SCU_MISC1_CTRL) & ~(SCU_MISC_D2_PLL_DIS | SCU_MISC_DAC_MASK)) - | SCU_MISC_DAC_SOURCE_CRT | SCU_MISC_DVO_SOURCE_CRT | SCU_MISC_2D_CRT_EN , AST_SCU_MISC1_CTRL); --#elif defined(CONFIG_AST_DVO) -+#elif defined(CONFIG_AST_DVO) - ast_scu_write((ast_scu_read(AST_SCU_MISC1_CTRL) & ~(SCU_MISC_D2_PLL_DIS)) | - SCU_MISC_DVO_SOURCE_CRT| SCU_MISC_2D_CRT_EN, AST_SCU_MISC1_CTRL); --#else //default(CONFIG_AST_DAC) -+#else //default(CONFIG_AST_DAC) - ast_scu_write((ast_scu_read(AST_SCU_MISC1_CTRL) & ~(SCU_MISC_D2_PLL_DIS | SCU_MISC_DAC_MASK)) - | SCU_MISC_DAC_SOURCE_CRT | SCU_MISC_2D_CRT_EN, AST_SCU_MISC1_CTRL); - #endif -@@ -401,7 +401,7 @@ ast_scu_init_crt(void) - ast_scu_write((ast_scu_read(AST_SCU_CLK_SEL) & ~SCU_CLK_VIDEO_DELAY_MASK) | - SCU_CLK_VIDEO_DELAY(5), AST_SCU_CLK_SEL); - -- /* Reset CRT */ -+ /* Reset CRT */ - ast_scu_write(ast_scu_read(AST_SCU_RESET) | SCU_RESET_CRT, AST_SCU_RESET); - - //enable D2 CLK -@@ -409,7 +409,7 @@ ast_scu_init_crt(void) - - udelay(10); - ast_scu_write(ast_scu_read(AST_SCU_RESET) & ~SCU_RESET_CRT, AST_SCU_RESET); -- -+ - } - - EXPORT_SYMBOL(ast_scu_init_crt); -@@ -448,7 +448,7 @@ ast_get_h_pll_clk(void) - - if(h_pll_set & SCU_H_PLL_OFF) - return 0; -- -+ - if(h_pll_set & SCU_H_PLL_PARAMETER) { - // Programming - clk = ast_get_clk_source(); -@@ -470,21 +470,21 @@ ast_get_h_pll_clk(void) - speed = SCU_HW_STRAP_GET_H_PLL_CLK(ast_scu_read(AST_SCU_HW_STRAP1)); - switch (speed) { - case 0: -- clk = 384000000; -+ clk = 384000000; - break; - case 1: -- clk = 360000000; -+ clk = 360000000; - break; - case 2: -- clk = 336000000; -+ clk = 336000000; - break; - case 3: -- clk = 408000000; -+ clk = 408000000; - break; - default: -- BUG(); -+ BUG(); - break; -- } -+ } - } - SCUDBUG("h_pll = %d\n",clk); - return clk; -@@ -500,7 +500,7 @@ ast_get_m_pll_clk(void) - - if(m_pll_set & SCU_M_PLL_OFF) - return 0; -- -+ - // Programming - clk = ast_get_clk_source(); - if(m_pll_set & SCU_M_PLL_BYPASS_EN) { -@@ -542,10 +542,10 @@ ast_get_ahbclk(void) - case 3: - div = 4; - break; -- -+ - } -- -- SCUDBUG("HPLL=%d, Div=%d, AHB CLK=%d\n", hpll, div, hpll/div); -+ -+ SCUDBUG("HPLL=%d, Div=%d, AHB CLK=%d\n", hpll, div, hpll/div); - return (hpll/div); - - } -@@ -559,8 +559,8 @@ ast_get_pclk(void) - hpll = ast_get_h_pll_clk(); - div = SCU_GET_PCLK_DIV(ast_scu_read(AST_SCU_CLK_SEL)); - div = (div+1) << 1; -- -- SCUDBUG("HPLL=%d, Div=%d, PCLK=%d\n", hpll, div, hpll/div); -+ -+ SCUDBUG("HPLL=%d, Div=%d, PCLK=%d\n", hpll, div, hpll/div); - return (hpll/div); - - } -@@ -572,7 +572,7 @@ ast_get_lhclk(void) - unsigned int div, hpll; - u32 clk_sel = ast_scu_read(AST_SCU_CLK_SEL); - //FPGA AST1070 is default 100/2 Mhz input --// return 50000000; -+// return 50000000; - hpll = ast_get_h_pll_clk(); - if(SCU_LHCLK_SOURCE_EN & clk_sel) { - div = SCU_GET_LHCLK_DIV(clk_sel); -@@ -600,10 +600,10 @@ ast_get_lhclk(void) - break; - case 7: - div = 16; -- break; -+ break; - } -- -- SCUDBUG("HPLL=%d, Div=%d, LHCLK = %d\n", hpll, div, hpll/div); -+ -+ SCUDBUG("HPLL=%d, Div=%d, LHCLK = %d\n", hpll, div, hpll/div); - return (hpll/div); - } else { - SCUMSG("LPC CLK not enable \n"); -@@ -704,7 +704,7 @@ ast_get_sd_clock_src(void) - sd_div = SCU_CLK_SD_GET_DIV(ast_scu_read(AST_SCU_CLK_SEL)); - SCUDBUG("div %d, sdclk =%d \n",((sd_div + 1) * 2),clk/((sd_div + 1) * 2)); - clk /= ((sd_div + 1) * 2); -- -+ - #endif - return clk; - } -@@ -717,7 +717,7 @@ ast_scu_show_system_info (void) - u32 h_pll, div; - - h_pll = ast_get_h_pll_clk(); -- -+ - div = SCU_HW_STRAP_GET_CPU_AHB_RATIO(ast_scu_read(AST_SCU_HW_STRAP1)); - switch(div) { - case 0: -@@ -732,10 +732,10 @@ ast_scu_show_system_info (void) - case 3: - div = 4; - break; -- -+ - } - -- SCUMSG("CPU = %d MHz ,AHB = %d MHz (%d:1) \n", h_pll/1000000, h_pll/div/1000000,div); -+ SCUMSG("CPU = %d MHz ,AHB = %d MHz (%d:1) \n", h_pll/1000000, h_pll/div/1000000,div); - - return ; - } -@@ -750,54 +750,68 @@ ast_scu_multi_func_uart(u8 uart) - case 1: - ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL2) | - SCU_FUN_PIN_UART1_RXD | -+#ifdef CONFIG_YOSEMITE -+ SCU_FUN_PIN_UART1_TXD, -+#else - SCU_FUN_PIN_UART1_TXD | - SCU_FUN_PIN_UART1_NRTS | - SCU_FUN_PIN_UART1_NDTR | - SCU_FUN_PIN_UART1_NRI | - SCU_FUN_PIN_UART1_NDSR | - SCU_FUN_PIN_UART1_NDCD | -- SCU_FUN_PIN_UART1_NCTS, -- AST_SCU_FUN_PIN_CTRL2); -- break; -+ SCU_FUN_PIN_UART1_NCTS, -+#endif -+ AST_SCU_FUN_PIN_CTRL2); -+ break; - case 2: - ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL2) | - SCU_FUN_PIN_UART2_RXD | -+#ifdef CONFIG_YOSEMITE -+ SCU_FUN_PIN_UART2_TXD, -+#else - SCU_FUN_PIN_UART2_TXD | - SCU_FUN_PIN_UART2_NRTS | - SCU_FUN_PIN_UART2_NDTR | - SCU_FUN_PIN_UART2_NRI | - SCU_FUN_PIN_UART2_NDSR | - SCU_FUN_PIN_UART2_NDCD | -- SCU_FUN_PIN_UART2_NCTS, -- AST_SCU_FUN_PIN_CTRL2); -- break; -+ SCU_FUN_PIN_UART2_NCTS, -+#endif -+ AST_SCU_FUN_PIN_CTRL2); -+ break; - case 3: - ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) | - SCU_FUN_PIN_UART3_RXD | -+#ifdef CONFIG_YOSEMITE -+ SCU_FUN_PIN_UART3_TXD, -+#else - SCU_FUN_PIN_UART3_TXD | - SCU_FUN_PIN_UART3_NRTS | - SCU_FUN_PIN_UART3_NDTR | - SCU_FUN_PIN_UART3_NRI | - SCU_FUN_PIN_UART3_NDSR | - SCU_FUN_PIN_UART3_NDCD | -- SCU_FUN_PIN_UART3_NCTS, -- AST_SCU_FUN_PIN_CTRL1); -+ SCU_FUN_PIN_UART3_NCTS, -+#endif -+ AST_SCU_FUN_PIN_CTRL1); - break; - case 4: - ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) | - SCU_FUN_PIN_UART4_RXD | -+#ifdef CONFIG_YOSEMITE -+ SCU_FUN_PIN_UART4_TXD, -+#else - SCU_FUN_PIN_UART4_TXD | - SCU_FUN_PIN_UART4_NRTS | - SCU_FUN_PIN_UART4_NDTR | - SCU_FUN_PIN_UART4_NRI | - SCU_FUN_PIN_UART4_NDSR | - SCU_FUN_PIN_UART4_NDCD | -- SCU_FUN_PIN_UART4_NCTS, -- AST_SCU_FUN_PIN_CTRL1); -+ SCU_FUN_PIN_UART4_NCTS, -+#endif -+ AST_SCU_FUN_PIN_CTRL1); - break; - } -- -- - } - - extern void -@@ -806,13 +820,13 @@ ast_scu_multi_func_video() - #if defined(CONFIG_ARCH_2100) || defined(CONFIG_ARCH_2200) - ast_scu_write(ast_scu_read(AST_SCU_MULTI_FUNC_2) | - MULTI_FUNC_VIDEO_RGB18 | -- MULTI_FUNC_VIDEO_SINGLE_EDGE, -- AST_SCU_MULTI_FUNC_2); -+ MULTI_FUNC_VIDEO_SINGLE_EDGE, -+ AST_SCU_MULTI_FUNC_2); - #elif defined(CONFIG_ARCH_1100) || defined(CONFIG_ARCH_2050) - ast_scu_write(ast_scu_read(AST_SCU_MULTI_FUNC_2) | - MULTI_FUNC_VIDEO_RGB18 | -- MULTI_FUNC_VIDEO_SINGLE_EDGE, -- AST_SCU_MULTI_FUNC_2); -+ MULTI_FUNC_VIDEO_SINGLE_EDGE, -+ AST_SCU_MULTI_FUNC_2); - #else - - #endif -@@ -823,40 +837,40 @@ ast_scu_multi_func_eth(u8 num) - { - switch(num) { - case 0: -- if(ast_scu_read(AST_SCU_HW_STRAP1) && SCU_HW_STRAP_MAC0_RGMII) { -+ if(ast_scu_read(AST_SCU_HW_STRAP1) & SCU_HW_STRAP_MAC0_RGMII) { - SCUMSG("MAC0 : RGMII \n"); -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) | -- SCU_FUN_PIN_MAC0_PHY_LINK, -- AST_SCU_FUN_PIN_CTRL1); -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) | -+ SCU_FUN_PIN_MAC0_PHY_LINK, -+ AST_SCU_FUN_PIN_CTRL1); - } else { -- SCUMSG("MAC0 : RMII/NCSI \n"); -+ SCUMSG("MAC0 : RMII/NCSI \n"); - ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) & -- ~SCU_FUN_PIN_MAC0_PHY_LINK, -- AST_SCU_FUN_PIN_CTRL1); -+ ~SCU_FUN_PIN_MAC0_PHY_LINK, -+ AST_SCU_FUN_PIN_CTRL1); - } - -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL3) | -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL3) | - SCU_FUN_PIN_MAC0_MDIO | -- SCU_FUN_PIN_MAC0_MDC, -- AST_SCU_FUN_PIN_CTRL3); -- -+ SCU_FUN_PIN_MAC0_MDC, -+ AST_SCU_FUN_PIN_CTRL3); -+ - break; - case 1: -- if(ast_scu_read(AST_SCU_HW_STRAP1) && SCU_HW_STRAP_MAC1_RGMII) { -+ if(ast_scu_read(AST_SCU_HW_STRAP1) & SCU_HW_STRAP_MAC1_RGMII) { - SCUMSG("MAC1 : RGMII \n"); -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) | -- SCU_FUN_PIN_MAC1_PHY_LINK, -- AST_SCU_FUN_PIN_CTRL1); -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) | -+ SCU_FUN_PIN_MAC1_PHY_LINK, -+ AST_SCU_FUN_PIN_CTRL1); - } else { - SCUMSG("MAC1 : RMII/NCSI \n"); -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) & -- ~SCU_FUN_PIN_MAC1_PHY_LINK, -- AST_SCU_FUN_PIN_CTRL1); -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL1) & -+ ~SCU_FUN_PIN_MAC1_PHY_LINK, -+ AST_SCU_FUN_PIN_CTRL1); - } -- -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | -+ -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | - SCU_FUC_PIN_MAC1_MDIO, -- AST_SCU_FUN_PIN_CTRL5); -+ AST_SCU_FUN_PIN_CTRL5); - - break; - } -@@ -866,18 +880,18 @@ extern void - ast_scu_multi_func_nand(void) - { - //enable NAND flash multipin FLBUSY and FLWP -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL2) | -- SCU_FUN_PIN_NAND_FLBUSY | SCU_FUN_PIN_NAND_FLWP, -- AST_SCU_FUN_PIN_CTRL2); -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL2) | -+ SCU_FUN_PIN_NAND_FLBUSY | SCU_FUN_PIN_NAND_FLWP, -+ AST_SCU_FUN_PIN_CTRL2); - - } - - extern void - ast_scu_multi_func_nor(void) - { -- //Address -+ //Address - //ROMA2~17 -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL8) | -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL8) | - SCU_FUN_PIN_ROMA2 | SCU_FUN_PIN_ROMA3 | - SCU_FUN_PIN_ROMA4 | SCU_FUN_PIN_ROMA5 | - SCU_FUN_PIN_ROMA6 | SCU_FUN_PIN_ROMA7 | -@@ -885,39 +899,39 @@ ast_scu_multi_func_nor(void) - SCU_FUN_PIN_ROMA10 | SCU_FUN_PIN_ROMA11 | - SCU_FUN_PIN_ROMA12 | SCU_FUN_PIN_ROMA13 | - SCU_FUN_PIN_ROMA14 | SCU_FUN_PIN_ROMA15 | -- SCU_FUN_PIN_ROMA16 | SCU_FUN_PIN_ROMA17, -+ SCU_FUN_PIN_ROMA16 | SCU_FUN_PIN_ROMA17, - AST_SCU_FUN_PIN_CTRL8); - - //ROMA18~21 -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL9) | -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL9) | - SCU_FUN_PIN_ROMA18 | SCU_FUN_PIN_ROMA19 | -- SCU_FUN_PIN_ROMA20 | SCU_FUN_PIN_ROMA21, -- AST_SCU_FUN_PIN_CTRL9); -- -+ SCU_FUN_PIN_ROMA20 | SCU_FUN_PIN_ROMA21, -+ AST_SCU_FUN_PIN_CTRL9); -+ - //ROMA22,23 -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL4) | SCU_FUN_PIN_ROMA22 | SCU_FUN_PIN_ROMA23, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL4) | SCU_FUN_PIN_ROMA22 | SCU_FUN_PIN_ROMA23, - AST_SCU_FUN_PIN_CTRL4); -- -+ - //ROMA24,25 -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL3) | SCU_FUN_PIN_ROMA24 | SCU_FUN_PIN_ROMA25, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL3) | SCU_FUN_PIN_ROMA24 | SCU_FUN_PIN_ROMA25, - AST_SCU_FUN_PIN_CTRL3); - - //SCU94 [1] = 0 -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL6) & SCU_VIDEO_OUT_MASK, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL6) & SCU_VIDEO_OUT_MASK, - AST_SCU_FUN_PIN_CTRL6); - -- -+ - //data - //ROMD 4~7 //ROMWE#, OE# -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL4) | -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL4) | - SCU_FUN_PIN_ROMOE | SCU_FUN_PIN_ROMWE | - SCU_FUN_PIN_ROMD4 | SCU_FUN_PIN_ROMD5 | - SCU_FUN_PIN_ROMD6 | SCU_FUN_PIN_ROMD7, - AST_SCU_FUN_PIN_CTRL4); -- -+ - //ROMD 8~15 -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | -- SCU_FUC_PIN_ROM_16BIT, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | -+ SCU_FUC_PIN_ROM_16BIT, - AST_SCU_FUN_PIN_CTRL5); - - } -@@ -925,44 +939,44 @@ ast_scu_multi_func_nor(void) - extern void - ast_scu_multi_func_romcs(u8 num) - { -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL3) | -- SCU_FUN_PIN_ROMCS(num), -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL3) | -+ SCU_FUN_PIN_ROMCS(num), - AST_SCU_FUN_PIN_CTRL3); - } - - extern void - ast_scu_multi_func_i2c(void) - { -- //TODO check ... //In AST2400 Due to share pin with SD , please not enable I2C 10 ~14 -+ //TODO check ... //In AST2400 Due to share pin with SD , please not enable I2C 10 ~14 - // AST 2400 have 14 , AST 2300 9 ... - #ifdef CONFIG_MMC_AST -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | -- SCU_FUC_PIN_I2C3 | -- SCU_FUC_PIN_I2C4 | -- SCU_FUC_PIN_I2C5 | -- SCU_FUC_PIN_I2C6 | -- SCU_FUC_PIN_I2C7 | -- SCU_FUC_PIN_I2C8 | -- SCU_FUC_PIN_I2C9, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | -+ SCU_FUC_PIN_I2C3 | -+ SCU_FUC_PIN_I2C4 | -+ SCU_FUC_PIN_I2C5 | -+ SCU_FUC_PIN_I2C6 | -+ SCU_FUC_PIN_I2C7 | -+ SCU_FUC_PIN_I2C8 | -+ SCU_FUC_PIN_I2C9, - AST_SCU_FUN_PIN_CTRL5); - #else -- ast_scu_write((ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | -- SCU_FUC_PIN_I2C3 | -- SCU_FUC_PIN_I2C4 | -- SCU_FUC_PIN_I2C5 | -- SCU_FUC_PIN_I2C6 | -- SCU_FUC_PIN_I2C7 | -- SCU_FUC_PIN_I2C8 | -- SCU_FUC_PIN_I2C9 | -- SCU_FUC_PIN_I2C10 | -- SCU_FUC_PIN_I2C11 | -- SCU_FUC_PIN_I2C12 | -- SCU_FUC_PIN_I2C13 | -+ ast_scu_write((ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | -+ SCU_FUC_PIN_I2C3 | -+ SCU_FUC_PIN_I2C4 | -+ SCU_FUC_PIN_I2C5 | -+ SCU_FUC_PIN_I2C6 | -+ SCU_FUC_PIN_I2C7 | -+ SCU_FUC_PIN_I2C8 | -+ SCU_FUC_PIN_I2C9 | -+ SCU_FUC_PIN_I2C10 | -+ SCU_FUC_PIN_I2C11 | -+ SCU_FUC_PIN_I2C12 | -+ SCU_FUC_PIN_I2C13 | - SCU_FUC_PIN_I2C14) & -- ~(SCU_FUC_PIN_SD1 | SCU_FUC_PIN_SD2), -+ ~(SCU_FUC_PIN_SD1 | SCU_FUC_PIN_SD2), - AST_SCU_FUN_PIN_CTRL5); - #endif --} -+} - - EXPORT_SYMBOL(ast_scu_multi_func_i2c); - -@@ -972,7 +986,7 @@ ast_scu_multi_func_pwm_tacho(void) - //TODO check - u32 sts = ast_scu_read(AST_SCU_FUN_PIN_CTRL3) &~0xcfffff; - ast_scu_write(sts | 0xc000ff, AST_SCU_FUN_PIN_CTRL3); --} -+} - - EXPORT_SYMBOL(ast_scu_multi_func_pwm_tacho); - -@@ -981,12 +995,12 @@ extern void - ast_scu_multi_func_usb20_host_hub(u8 mode) - { - if(mode) -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_USB20_HOST, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_USB20_HOST, - AST_SCU_FUN_PIN_CTRL5); - else -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_USB20_HOST, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_USB20_HOST, - AST_SCU_FUN_PIN_CTRL5); --} -+} - - EXPORT_SYMBOL(ast_scu_multi_func_usb20_host_hub); - -@@ -995,12 +1009,12 @@ extern void - ast_scu_multi_func_usb11_host_port4(u8 mode) - { - if(mode) -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_USB11_PORT4, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_USB11_PORT4, - AST_SCU_FUN_PIN_CTRL5); - else -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_USB11_PORT4, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_USB11_PORT4, - AST_SCU_FUN_PIN_CTRL5); --} -+} - - EXPORT_SYMBOL(ast_scu_multi_func_usb11_host_port4); - -@@ -1009,26 +1023,26 @@ extern void - ast_scu_multi_func_usb11_host_port2(u8 mode) - { - if(mode) -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_USB11_PORT2, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_USB11_PORT2, - AST_SCU_FUN_PIN_CTRL5); - else -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_USB11_PORT2, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_USB11_PORT2, - AST_SCU_FUN_PIN_CTRL5); --} -+} - - EXPORT_SYMBOL(ast_scu_multi_func_usb11_host_port2); - --//0 : 1: SD1 function -+//0 : 1: SD1 function - extern void - ast_scu_multi_func_sdhc_slot1(u8 mode) - { - if(mode) -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_SD1, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_SD1, - AST_SCU_FUN_PIN_CTRL5); - else -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_SD1, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_SD1, - AST_SCU_FUN_PIN_CTRL5); --} -+} - - EXPORT_SYMBOL(ast_scu_multi_func_sdhc_slot1); - -@@ -1036,13 +1050,13 @@ extern void - ast_scu_multi_func_sdhc_slot2(u8 mode) - { - if(mode) -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_SD2, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) | SCU_FUC_PIN_SD2, - AST_SCU_FUN_PIN_CTRL5); - else -- ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_SD2, -+ ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & ~SCU_FUC_PIN_SD2, - AST_SCU_FUN_PIN_CTRL5); - --} -+} - - EXPORT_SYMBOL(ast_scu_multi_func_sdhc_slot2); - -@@ -1053,11 +1067,11 @@ ast_scu_multi_func_crt(void) - - //Digital vodeo input function pins : 00 disable, 10 24bits mode 888, - ast_scu_write((ast_scu_read(AST_SCU_FUN_PIN_CTRL5) & -- ~SCU_FUC_PIN_DIGI_V_OUT_MASK) | -+ ~SCU_FUC_PIN_DIGI_V_OUT_MASK) | - SCU_FUC_PIN_DIGI_V_OUT(VIDEO_24BITS),AST_SCU_FUN_PIN_CTRL5); - - //VPI input --#if 0 -+#if 0 - ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL2) | - SCU_FUN_PIN_VPIB9 | SCU_FUN_PIN_VPIB8 | - SCU_FUN_PIN_VPIB7 | SCU_FUN_PIN_VPIB6 | -@@ -1070,11 +1084,11 @@ ast_scu_multi_func_crt(void) - - ast_scu_write(ast_scu_read(AST_SCU_FUN_PIN_CTRL3) | - SCU_FUN_PIN_VPIR9 | SCU_FUN_PIN_VPIR8 | -- SCU_FUN_PIN_VPIR7 | SCU_FUN_PIN_VPIR6 | -+ SCU_FUN_PIN_VPIR7 | SCU_FUN_PIN_VPIR6 | - SCU_FUN_PIN_VPIR5 | SCU_FUN_PIN_VPIR4 | - SCU_FUN_PIN_VPIR3 | SCU_FUN_PIN_VPIR2 | - SCU_FUN_PIN_VPIR1 | SCU_FUN_PIN_VPIR0 | -- SCU_FUN_PIN_VPIG9 | SCU_FUN_PIN_VPIG8 | -+ SCU_FUN_PIN_VPIG9 | SCU_FUN_PIN_VPIG8 | - SCU_FUN_PIN_VPIG7 | SCU_FUN_PIN_VPIG6 | - SCU_FUN_PIN_VPIG5 | SCU_FUN_PIN_VPIG4 | - SCU_FUN_PIN_VPIG3 | SCU_FUN_PIN_VPIG2 | -@@ -1097,9 +1111,9 @@ ast_scu_revision_id(void) - SCUMSG("UnKnow-SOC : %x \n",rev_id); - else - SCUMSG("SOC : %4s \n",soc_map_table[i].name); -- -+ - return rev_id; --} -+} - - EXPORT_SYMBOL(ast_scu_revision_id); - -diff --git a/arch/arm/plat-aspeed/dev-eth.c b/arch/arm/plat-aspeed/dev-eth.c -index 5d33e33..b115c5a 100644 ---- a/arch/arm/plat-aspeed/dev-eth.c -+++ b/arch/arm/plat-aspeed/dev-eth.c -@@ -7,11 +7,11 @@ - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the Free Software Foundation; - * either version 2 of the License, or (at your option) any later version. --* -+* - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --* -+* - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -@@ -37,7 +37,7 @@ - #if defined(CONFIG_ASPEEDMAC) || defined(CONFIG_ASPEEDMAC_MODULE) - #ifdef AST_MAC0_BASE - static struct ftgmac100_eth_data ast_eth0_data = { -- .dev_addr = { 0x00, 0x84, 0x14, 0xA0, 0xB0, 0x22}, -+ .dev_addr = { 0x00, 0x84, 0x14, 0xA0, 0xB0, 0x22}, - .phy_id = 1, - }; - -@@ -69,7 +69,7 @@ static struct platform_device ast_eth0_device = { - #endif - #ifdef AST_MAC1_BASE - static struct ftgmac100_eth_data ast_eth1_data = { -- .dev_addr = { 0x00, 0x84, 0x14, 0xA0, 0xB0, 0x23}, -+ .dev_addr = { 0x00, 0x84, 0x14, 0xA0, 0xB0, 0x23}, - .phy_id = 1, - }; - -@@ -131,11 +131,16 @@ void __init ast_add_device_gmac(void) - } - - ast_eth0_data.DF_support = !isRevA0; -- -+ -+ // Wedge/6-Pack hardware attaches to MAC1; there's nothing on -+ // MAC0. Older drivers would drop interfaces without PHYs, but -+ // the latest open source drivers do not, so we drop the first -+ // MAC specs. -+#if !defined(CONFIG_WEDGE) && !defined(CONFIG_WEDGE100) - ast_scu_init_eth(0); - ast_scu_multi_func_eth(0); -- -- -+ -+ - /* - * D[15:11] in 0x1E6E2040 is NCSI scratch from U-Boot. D[15:14] = MAC1, D[13:12] = MAC2 - * The meanings of the 2 bits are: -@@ -144,7 +149,7 @@ void __init ast_add_device_gmac(void) - * 10(2): ASPEED's MAC is connected to NC-SI PHY chip directly - * 11: Reserved - */ -- -+ - phy_mode = ast_scu_get_phy_config(0); - switch(phy_mode) { - case 0: -@@ -152,12 +157,12 @@ void __init ast_add_device_gmac(void) - ast_eth0_data.NCSI_support = 0; - break; - case 1: -- ast_eth0_data.NCSI_support = 1; -+ ast_eth0_data.INTEL_NCSI_EVA_support = 1; - break; - case 2: -- ast_eth0_data.INTEL_NCSI_EVA_support = 1; -+ ast_eth0_data.NCSI_support = 1; - break; -- -+ - } - - phy_inter = ast_scu_get_phy_interface(0); -@@ -165,12 +170,13 @@ void __init ast_add_device_gmac(void) - // We assume the Clock Stop register does not disable the MAC1 or MAC2 clock - // unless Reset Control also holds the MAC in reset. - -- -+ - platform_device_register(&ast_eth0_device); -+#endif - - #ifdef AST_MAC1_BASE - ast_scu_init_eth(1); -- ast_scu_multi_func_eth(1); -+ ast_scu_multi_func_eth(1); - - ast_eth1_data.DF_support = !isRevA0; - -@@ -186,7 +192,7 @@ void __init ast_add_device_gmac(void) - case 2: - ast_eth1_data.INTEL_NCSI_EVA_support = 1; - break; -- -+ - } - phy_inter = ast_scu_get_phy_interface(1); - -@@ -198,4 +204,3 @@ void __init ast_add_device_gmac(void) - #else - void __init ast_add_device_gmac(void) {} - #endif -- -diff --git a/arch/arm/plat-aspeed/dev-i2c.c b/arch/arm/plat-aspeed/dev-i2c.c -index 9905390..fffa480 100644 ---- a/arch/arm/plat-aspeed/dev-i2c.c -+++ b/arch/arm/plat-aspeed/dev-i2c.c -@@ -7,11 +7,11 @@ - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the Free Software Foundation; - * either version 2 of the License, or (at your option) any later version. --* -+* - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --* -+* - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -@@ -47,59 +47,59 @@ - #if defined (CONFIG_ARCH_AST2400) - #define I2C_PAGE_SIZE 8 - static spinlock_t page_info_lock = SPIN_LOCK_UNLOCKED; --static struct buf_page page_info[I2C_PAGE_SIZE] = --{ -+static struct buf_page page_info[I2C_PAGE_SIZE] = -+{ - [0] = { - .flag = 0, - .page_no = 0, - .page_size = 256, -- .page_addr_point = 0, -+ .page_addr_point = 0, - }, - [1] = { - .flag = 0, -- .page_no = 1, -+ .page_no = 1, - .page_size = 256, -- .page_addr_point = 0, -+ .page_addr_point = 0, - }, - [2] = { - .flag = 0, -- .page_no = 2, -+ .page_no = 2, - .page_size = 256, - .page_addr_point = 0, - }, - [3] = { - .flag = 0, -- .page_no = 3, -+ .page_no = 3, - .page_size = 256, - .page_addr_point = 0, - }, - [4] = { - .flag = 0, -- .page_no = 4, -+ .page_no = 4, - .page_size = 256, - .page_addr_point = 0, - }, - [5] = { - .flag = 0, -- .page_no = 5, -+ .page_no = 5, - .page_size = 256, - .page_addr_point = 0, - }, - [6] = { - .flag = 0, -- .page_no = 6, -+ .page_no = 6, - .page_size = 256, - .page_addr_point = 0, - }, - [7] = { - .flag = 0, -- .page_no = 7, -+ .page_no = 7, - .page_size = 256, - .page_addr_point = 0, - }, - }; - --static void pool_buff_page_init(u32 buf_pool_addr) -+static void pool_buff_page_init(u32 buf_pool_addr) - { - u32 offset; - int i ,j; -@@ -108,7 +108,7 @@ static void pool_buff_page_init(u32 buf_pool_addr) - offset = 0; - for(j=0;j<i;j++) - offset += page_info[i].page_size; -- -+ - page_info[i].page_addr = buf_pool_addr + offset; - // I2CDBUG( "page[%d],addr :%x \n", i, page_info[i].page_addr); - } -@@ -130,7 +130,7 @@ static u8 request_pool_buff_page(struct buf_page **req_page) - break; - } - } -- spin_unlock_irqrestore(&page_info_lock, flags); -+ spin_unlock_irqrestore(&page_info_lock, flags); - return (i >= I2C_PAGE_SIZE); - } - -@@ -140,17 +140,17 @@ static void free_pool_buff_page(struct buf_page *req_page) - spin_lock_irqsave(&page_info_lock, flags); - - req_page->flag = 0; --// I2CDBUG( "free page addr %x \n", req_page->page_addr); -+// I2CDBUG( "free page addr %x \n", req_page->page_addr); - req_page = NULL; -- spin_unlock_irqrestore(&page_info_lock, flags); -+ spin_unlock_irqrestore(&page_info_lock, flags); - } - - #elif defined (CONFIG_ARCH_AST2300) - #define I2C_PAGE_SIZE 5 - - static spinlock_t page_info_lock = SPIN_LOCK_UNLOCKED; --static struct buf_page page_info[I2C_PAGE_SIZE] = --{ -+static struct buf_page page_info[I2C_PAGE_SIZE] = -+{ - [0] = { - .flag = 0, - .page_size = 128, -@@ -173,7 +173,7 @@ static struct buf_page page_info[I2C_PAGE_SIZE] = - }, - }; - --static void pool_buff_page_init(u32 buf_pool_addr) -+static void pool_buff_page_init(u32 buf_pool_addr) - { - - u32 offset; -@@ -183,7 +183,7 @@ static void pool_buff_page_init(u32 buf_pool_addr) - offset = 0; - for(j=0;j<i;j++) - offset += page_info[i].page_size; -- -+ - page_info[i].page_addr = buf_pool_addr + offset; - page_info[i].page_addr_point = page_info[i].page_addr/4; - // printk("page[%d],addr :%x , point : %d\n", i, page_info[i].page_addr, page_info[i].page_addr_point); -@@ -201,11 +201,11 @@ static u8 request_pool_buff_page(struct buf_page **req_page) - if(page_info[i].flag ==0) { - page_info[i].flag = 1; - *req_page = &page_info[i]; -- spin_unlock_irqrestore(&page_info_lock, flags); -+ spin_unlock_irqrestore(&page_info_lock, flags); - return 0; - } - } -- spin_unlock_irqrestore(&page_info_lock, flags); -+ spin_unlock_irqrestore(&page_info_lock, flags); - return 1; - - } -@@ -217,10 +217,10 @@ static void free_pool_buff_page(struct buf_page *req_page) - spin_lock_irqsave(&page_info_lock, flags); - req_page->flag = 0; - req_page = NULL; -- spin_unlock_irqrestore(&page_info_lock, flags); -+ spin_unlock_irqrestore(&page_info_lock, flags); - } - --#else -+#else - //DO nothing - static void pool_buff_page_init(void) {} - static u8 request_pool_buff_page(struct buf_page **req_page) {return 0;} -@@ -228,15 +228,15 @@ static void free_pool_buff_page(struct buf_page *req_page) {} - #endif - - static struct ast_i2c_driver_data ast_i2c_data = { -- .bus_clk = 100000, //bus clock 100KHz -+ .bus_clk = 100000, //bus clock 100KHz - .master_dma = BUFF_MODE, - .slave_dma = BYTE_MODE, - .request_pool_buff_page = request_pool_buff_page, - .free_pool_buff_page = free_pool_buff_page, --#ifdef CONFIG_AST_I2C_SLAVE_MODE -+#ifdef CONFIG_AST_I2C_SLAVE_MODE - .slave_xfer = i2c_slave_xfer, - .slave_init = i2c_slave_init, --#endif -+#endif - .get_i2c_clock = ast_get_pclk, - }; - -@@ -285,7 +285,7 @@ struct platform_device ast_i2c_dev2_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev2_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev2_resources), -@@ -310,7 +310,7 @@ struct platform_device ast_i2c_dev3_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev3_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev3_resources), -@@ -335,7 +335,7 @@ struct platform_device ast_i2c_dev4_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev4_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev4_resources), -@@ -360,7 +360,7 @@ struct platform_device ast_i2c_dev5_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev5_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev5_resources), -@@ -385,7 +385,7 @@ struct platform_device ast_i2c_dev6_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev6_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev6_resources), -@@ -410,7 +410,7 @@ struct platform_device ast_i2c_dev7_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev7_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev7_resources), -@@ -435,7 +435,7 @@ struct platform_device ast_i2c_dev8_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev8_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev8_resources), -@@ -460,7 +460,7 @@ struct platform_device ast_i2c_dev9_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev9_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev9_resources), -@@ -486,7 +486,7 @@ struct platform_device ast_i2c_dev10_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev10_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev10_resources), -@@ -511,7 +511,7 @@ struct platform_device ast_i2c_dev11_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev11_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev11_resources), -@@ -536,7 +536,7 @@ struct platform_device ast_i2c_dev12_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev12_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev12_resources), -@@ -561,7 +561,7 @@ struct platform_device ast_i2c_dev13_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev13_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev13_resources), -@@ -586,7 +586,7 @@ struct platform_device ast_i2c_dev14_device = { - .dev = { - .dma_mask = &ast_i2c_dma_mask, - .coherent_dma_mask = 0xffffffff, -- .platform_data = &ast_i2c_data, -+ .platform_data = &ast_i2c_data, - }, - .resource = ast_i2c_dev14_resources, - .num_resources = ARRAY_SIZE(ast_i2c_dev14_resources), -@@ -594,12 +594,196 @@ struct platform_device ast_i2c_dev14_device = { - #endif - - /*--------- I2C Board devices ------------*/ --//ASPEED AST2300 EVB I2C Device -+//ASPEED AST2300 EVB I2C Device - #if defined(CONFIG_ARCH_AST2300) || defined(CONFIG_ARCH_AST2400) -+ -+#if defined(CONFIG_WEDGE100) -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus1[] = { -+ /* shared NIC, no kernel driver */ -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus2[] = { -+ /* TODO: one IR3581 and two IR3584 */ -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus3[] = { -+ /* TODO: one PWR1014A */ -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus4[] = { -+ { -+ I2C_BOARD_INFO("tmp75", 0x48), -+ }, -+ { -+ I2C_BOARD_INFO("tmp75", 0x49), -+ }, -+ { -+ I2C_BOARD_INFO("tmp75", 0x4a), -+ }, -+ { -+ I2C_BOARD_INFO("tmp75", 0x4b), -+ }, -+ { -+ I2C_BOARD_INFO("tmp75", 0x4c), -+ }, -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus5[] = { -+ /* Panther+ microserver */ -+ { -+ I2C_BOARD_INFO("fb_panther_plus", 0x40), -+ }, -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus6[] = { -+ /* TODO: USB hub */ -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus7[] = { -+ { -+ I2C_BOARD_INFO("pcf8574", 0x2f), -+ }, -+ { -+ I2C_BOARD_INFO("24c64", 0x51), -+ } -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus8[] = { -+ /* BMC PHY EEPROM */ -+ { -+ I2C_BOARD_INFO("24c02", 0x50), -+ }, -+ // EEPROM on the pfe1100 power supplies -+ { -+ I2C_BOARD_INFO("24c64", 0x51), -+ }, -+ { -+ I2C_BOARD_INFO("24c64", 0x52), -+ }, -+ /* PSU driver */ -+ { -+ I2C_BOARD_INFO("pfe1100", 0x59), -+ }, -+ { -+ I2C_BOARD_INFO("pfe1100", 0x5a), -+ }, -+}; -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus9[] = { -+ { -+ I2C_BOARD_INFO("fancpld", 0x33), -+ }, -+ { -+ I2C_BOARD_INFO("tmp75", 0x48), -+ }, -+ { -+ I2C_BOARD_INFO("tmp75", 0x49), -+ }, -+}; -+ -+/* i2c bus 10-12 on wedge100 are not connected as i2c bus */ -+ -+static struct i2c_board_info __initdata wedge100_i2c_bus13[] = { -+ { -+ I2C_BOARD_INFO("syscpld", 0x31), -+ }, -+}; -+ -+/* i2c bus 14 on wedge100 are not connected as i2c bus */ -+ -+/* end of defined(CONFIG_WEDGE100) */ -+ -+#elif defined(CONFIG_YOSEMITE) || defined(CONFIG_FBPLATFORM1) -+ -+//Under I2C Dev 1 -+static struct i2c_board_info __initdata ast_i2c_board_info_1[] = { -+ // Slot#0 NIC sideband -+}; -+ -+//Under I2C Dev 2 -+static struct i2c_board_info __initdata ast_i2c_board_info_2[] = { -+ // Slot#0 IPMB interface -+}; -+ -+//Under I2C Dev 3 -+static struct i2c_board_info __initdata ast_i2c_board_info_3[] = { -+ // Slot#1 NIC sideband -+}; -+ -+ -+//Under I2C Dev 4 -+static struct i2c_board_info __initdata ast_i2c_board_info_4[] = { -+ // Slot#1 IPMB interface -+}; -+ -+//Under I2C Dev 5 -+static struct i2c_board_info __initdata ast_i2c_board_info_5[] = { -+ // Slot#2 NIC sideband -+}; -+ -+//Under I2C Dev 6 -+static struct i2c_board_info __initdata ast_i2c_board_info_6[] = { -+ // Slot#2 IPMB interface -+}; -+ -+//Under I2C Dev 7 -+static struct i2c_board_info __initdata ast_i2c_board_info_7[] = { -+ // Slot#3 NIC sideband -+}; -+ -+//Under I2C Dev 8 -+static struct i2c_board_info __initdata ast_i2c_board_info_8[] = { -+ // Slot#3 IPMB interface -+}; -+ -+//Under I2C Dev 9 -+static struct i2c_board_info __initdata ast_i2c_board_info_9[] = { -+ // FRUID -+ { -+ I2C_BOARD_INFO("24c64", 0x51), -+ }, -+}; -+ -+//Under I2C Dev 10 -+static struct i2c_board_info __initdata ast_i2c_board_info_10[] = { -+ // Inlet and Outlet temp. sensors -+ { -+ I2C_BOARD_INFO("tmp75", 0x4e), -+ }, -+ { -+ I2C_BOARD_INFO("tmp75", 0x4f), -+ }, -+}; -+ -+//Under I2C Dev 11 -+static struct i2c_board_info __initdata ast_i2c_board_info_11[] = { -+ // Hotswap Sensor -+ { -+ I2C_BOARD_INFO("adm1278", 0x40), -+ }, -+}; -+ -+//Under I2C Dev 12 -+static struct i2c_board_info __initdata ast_i2c_board_info_12[] = { -+ // Mezz Card LAN_SMB bus (PHY, Temp. Sensor) -+}; -+ -+//Under I2C Dev 13 -+static struct i2c_board_info __initdata ast_i2c_board_info_13[] = { -+ // Mezz Card Mezz_SMB bus (FRUID, GPIO expander, QSFP+) -+}; -+ -+/* end of CONFIG_YOSEMITE */ -+ -+#else -+ -+/* wedge */ -+ - //Under I2C Dev 1 - static struct i2c_board_info __initdata ast_i2c_board_info_1[] = { - { -- I2C_BOARD_INFO("cat9883", 0x4d), -+ I2C_BOARD_INFO("cat9883", 0x4d), - } - }; - -@@ -612,15 +796,6 @@ static struct i2c_board_info __initdata ast_i2c_board_info_2[] = { - { - I2C_BOARD_INFO("ncp4200", 0x60), - }, -- { -- I2C_BOARD_INFO("ncp4200", 0x61), -- }, -- { -- I2C_BOARD_INFO("ncp4200", 0x62), -- }, -- { -- I2C_BOARD_INFO("ncp4200", 0x63), -- }, - }; - - -@@ -632,15 +807,6 @@ static struct i2c_board_info __initdata ast_i2c_board_info_3[] = { - { - I2C_BOARD_INFO("ncp4200", 0x60), - }, -- { -- I2C_BOARD_INFO("ncp4200", 0x61), -- }, -- { -- I2C_BOARD_INFO("ncp4200", 0x62), -- }, -- { -- I2C_BOARD_INFO("ncp4200", 0x63), -- }, - }; - - -@@ -675,7 +841,7 @@ static struct i2c_board_info __initdata ast_i2c_board_info_5[] = { - I2C_BOARD_INFO("24c128", 0x51), - }, - }; -- -+ - //Under I2C Dev 7 - static struct i2c_board_info __initdata ast_i2c_board_info_7[] = { - // Wedge devices -@@ -688,15 +854,23 @@ static struct i2c_board_info __initdata ast_i2c_board_info_7[] = { - }, - { - I2C_BOARD_INFO("24c64", 0x50), -- } -+ }, - }; - - - //Under I2C Dev 8 - static struct i2c_board_info __initdata ast_i2c_board_info_8[] = { - { -+ // 6pack power supply -+ I2C_BOARD_INFO("pfe3000", 0x10), -+ }, -+ { - // Eval board: -- I2C_BOARD_INFO("lm75b", 0x4a), -+ I2C_BOARD_INFO("lm75b", 0x4a), -+ }, -+ { -+ // 6pack power supply EEPROM -+ I2C_BOARD_INFO("24c64", 0x50), - }, - // EEPROMS on the pfe1100 power supplies - { -@@ -722,20 +896,12 @@ static struct i2c_board_info __initdata ast_i2c_board_info_9[] = { - { - I2C_BOARD_INFO("ncp4200", 0x60), - }, -- { -- I2C_BOARD_INFO("ncp4200", 0x61), -- }, -- { -- I2C_BOARD_INFO("ncp4200", 0x62), -- }, -- { -- I2C_BOARD_INFO("ncp4200", 0x63), -- }, - }; - - //Under I2C Dev 12 - static struct i2c_board_info __initdata ast_i2c_board_info_12[] = { - { -+ // Early version of 6pack - I2C_BOARD_INFO("pfe3000", 0x10), - }, - }; -@@ -747,6 +913,10 @@ static struct i2c_board_info __initdata ast_i2c_board_info_13[] = { - }, - }; - -+/* end of WEDGE case */ -+#endif -+ -+/* end of defined(CONFIG_ARCH_AST2300) || defined(CONFIG_ARCH_AST2400) */ - #endif - - /*-------------------------------------*/ -@@ -755,7 +925,7 @@ void __init ast_add_device_i2c(void) - //I2C Multi-Pin - ast_scu_multi_func_i2c(); - -- //SCU I2C Reset -+ //SCU I2C Reset - ast_scu_init_i2c(); - - ast_i2c_data.reg_gr = ioremap(AST_I2C_BASE, 4*SZ_16); -@@ -777,8 +947,48 @@ void __init ast_add_device_i2c(void) - return; - } - #endif -- //TODO -- pool_buff_page_init(ast_i2c_data.buf_pool); -+ -+ pool_buff_page_init(ast_i2c_data.buf_pool); -+ -+#if defined(CONFIG_WEDGE100) -+ -+ platform_device_register(&ast_i2c_dev1_device); -+ i2c_register_board_info(0, wedge100_i2c_bus1, ARRAY_SIZE(wedge100_i2c_bus1)); -+ -+ platform_device_register(&ast_i2c_dev2_device); -+ i2c_register_board_info(1, wedge100_i2c_bus2, ARRAY_SIZE(wedge100_i2c_bus2)); -+ -+ platform_device_register(&ast_i2c_dev3_device); -+ i2c_register_board_info(2, wedge100_i2c_bus3, ARRAY_SIZE(wedge100_i2c_bus3)); -+ -+ platform_device_register(&ast_i2c_dev4_device); -+ i2c_register_board_info(3, wedge100_i2c_bus4, ARRAY_SIZE(wedge100_i2c_bus4)); -+ -+ platform_device_register(&ast_i2c_dev5_device); -+ i2c_register_board_info(4, wedge100_i2c_bus5, ARRAY_SIZE(wedge100_i2c_bus5)); -+ -+ platform_device_register(&ast_i2c_dev6_device); -+ i2c_register_board_info(5, wedge100_i2c_bus6, ARRAY_SIZE(wedge100_i2c_bus6)); -+ -+ platform_device_register(&ast_i2c_dev7_device); -+ i2c_register_board_info(6, wedge100_i2c_bus7, ARRAY_SIZE(wedge100_i2c_bus7)); -+ -+ platform_device_register(&ast_i2c_dev8_device); -+ i2c_register_board_info(7, wedge100_i2c_bus8, ARRAY_SIZE(wedge100_i2c_bus8)); -+ -+ platform_device_register(&ast_i2c_dev9_device); -+ i2c_register_board_info(8, wedge100_i2c_bus9, ARRAY_SIZE(wedge100_i2c_bus9)); -+ -+ /* i2c bus 10 - 12 are not used as i2c on wedge100 */ -+ -+ platform_device_register(&ast_i2c_dev13_device); -+ i2c_register_board_info(12, wedge100_i2c_bus13, ARRAY_SIZE(wedge100_i2c_bus13)); -+ -+ /* i2c bug 14 is not used as i2c on wedge100 */ -+ -+ /* end of defined(CONFIG_WEDGE100) */ -+#else -+ - platform_device_register(&ast_i2c_dev1_device); - i2c_register_board_info(0, ast_i2c_board_info_1, ARRAY_SIZE(ast_i2c_board_info_1)); - platform_device_register(&ast_i2c_dev2_device); -@@ -790,17 +1000,27 @@ void __init ast_add_device_i2c(void) - platform_device_register(&ast_i2c_dev5_device); - i2c_register_board_info(4, ast_i2c_board_info_5, ARRAY_SIZE(ast_i2c_board_info_5)); - platform_device_register(&ast_i2c_dev6_device); -+#if defined(CONFIG_YOSEMITE) -+ i2c_register_board_info(5, ast_i2c_board_info_6, ARRAY_SIZE(ast_i2c_board_info_6)); -+#endif - platform_device_register(&ast_i2c_dev7_device); - i2c_register_board_info(6, ast_i2c_board_info_7, ARRAY_SIZE(ast_i2c_board_info_7)); - platform_device_register(&ast_i2c_dev8_device); - i2c_register_board_info(7, ast_i2c_board_info_8, ARRAY_SIZE(ast_i2c_board_info_8)); -- platform_device_register(&ast_i2c_dev9_device); -+ platform_device_register(&ast_i2c_dev9_device); - i2c_register_board_info(8, ast_i2c_board_info_9, ARRAY_SIZE(ast_i2c_board_info_9)); - - #if defined(CONFIG_ARCH_AST2400) - platform_device_register(&ast_i2c_dev10_device); -+ -+#if defined(CONFIG_YOSEMITE) -+ i2c_register_board_info(9, ast_i2c_board_info_10, ARRAY_SIZE(ast_i2c_board_info_10)); -+ platform_device_register(&ast_i2c_dev11_device); -+ i2c_register_board_info(10, ast_i2c_board_info_11, ARRAY_SIZE(ast_i2c_board_info_11)); -+#endif -+ - #if defined(CONFIG_MMC_AST) -- //Due to share pin with SD -+ //Due to share pin with SD - #else - /* - * On Wedge, bus 13 is used as i2c bus. Bus 12 is used on other -@@ -812,7 +1032,12 @@ void __init ast_add_device_i2c(void) - i2c_register_board_info(11, ast_i2c_board_info_12, ARRAY_SIZE(ast_i2c_board_info_12)); - platform_device_register(&ast_i2c_dev13_device); - i2c_register_board_info(12, ast_i2c_board_info_13, ARRAY_SIZE(ast_i2c_board_info_13)); --#endif -+#endif -+ -+ /* end of defined(CONFIG_ARCH_AST2400) */ -+#endif -+ -+ /* end of else of defined(CONFIG_WEDGE100) */ - #endif - } - #else -diff --git a/arch/arm/plat-aspeed/dev-spi.c b/arch/arm/plat-aspeed/dev-spi.c -index e22c49e..0cb0189 100644 ---- a/arch/arm/plat-aspeed/dev-spi.c -+++ b/arch/arm/plat-aspeed/dev-spi.c -@@ -344,8 +344,8 @@ static struct flash_platform_data wedge_spi_flash_data = { - - - /* Device info for the flash on ast-spi */ --#ifdef CONFIG_ARCH_AST2400 --static struct mtd_partition ast_spi5_flash_partitions[] = { -+#ifdef CONFIG_WEDGE -+static struct mtd_partition wedge_spi5_flash_partitions[] = { - { - .name = "led-fpga", - .offset = 0, /* From 0 */ -@@ -355,8 +355,8 @@ static struct mtd_partition ast_spi5_flash_partitions[] = { - - static struct flash_platform_data wedge_spi5_flash_data = { - .type = "at45db011d", -- .nr_parts = ARRAY_SIZE(ast_spi5_flash_partitions), -- .parts = ast_spi5_flash_partitions, -+ .nr_parts = ARRAY_SIZE(wedge_spi5_flash_partitions), -+ .parts = wedge_spi5_flash_partitions, - }; - #endif - -@@ -372,6 +372,7 @@ static struct spi_board_info ast_spi_devices[] = { - }, - #endif - #ifdef CONFIG_ARCH_AST2400 -+#ifdef CONFIG_WEDGE - { - .modalias = "mtd_dataflash", - .platform_data = &wedge_spi5_flash_data, -@@ -380,6 +381,15 @@ static struct spi_board_info ast_spi_devices[] = { - .bus_num = 5, - .mode = SPI_MODE_0, - }, -+#elif defined CONFIG_WEDGE100 -+ { -+ .modalias = "spidev", -+ .chip_select = 0, -+ .max_speed_hz = 33 * 1000 * 1000, -+ .bus_num = 5, -+ .mode = SPI_MODE_0, -+ }, -+#endif - { - .modalias = "m25p80", - .platform_data = &wedge_spi_flash_data, -@@ -389,13 +399,6 @@ static struct spi_board_info ast_spi_devices[] = { - .mode = SPI_MODE_0, - }, - #endif -- { -- .modalias = "spidev", -- .chip_select = 0, -- .max_speed_hz = 30 * 1000 * 1000, -- .bus_num = 1, -- .mode = SPI_MODE_0, -- }, - }; - - #if defined(AST_SPI1_BASE) -@@ -490,5 +493,3 @@ void __init ast_add_device_spi(void) - #else - void __init ast_add_device_spi(void) {} - #endif -- -- -diff --git a/arch/arm/plat-aspeed/dev-uart.c b/arch/arm/plat-aspeed/dev-uart.c -index 0b7b614..e424a5a 100644 ---- a/arch/arm/plat-aspeed/dev-uart.c -+++ b/arch/arm/plat-aspeed/dev-uart.c -@@ -6,11 +6,11 @@ - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the Free Software Foundation; - * either version 2 of the License, or (at your option) any later version. --* -+* - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --* -+* - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -@@ -50,14 +50,14 @@ static struct plat_serial8250_port ast_uart_data[] = { - .irq = IRQ_UART0, - .uartclk = (24*1000000L), - .regshift = 2, --#if defined(CONFIG_COLDFIRE) -+#if defined(CONFIG_COLDFIRE) - .iotype = UPIO_MEM32, - #else - .iotype = UPIO_MEM, --#endif -+#endif - .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, - }, --#if defined(CONFIG_ARCH_AST1010) -+#if defined(CONFIG_ARCH_AST1010) - { - .mapbase = AST_UART1_BASE, - .irq = IRQ_UART1, -@@ -65,7 +65,7 @@ static struct plat_serial8250_port ast_uart_data[] = { - .regshift = 2, - .iotype = UPIO_MEM32, - .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -- }, -+ }, - { - .mapbase = AST_UART2_BASE, - .irq = IRQ_UART2, -@@ -73,7 +73,7 @@ static struct plat_serial8250_port ast_uart_data[] = { - .regshift = 2, - .iotype = UPIO_MEM32, - .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -- }, -+ }, - #else - //BMC UART 1 ,2 default to LPC - #ifdef CONFIG_ARCH_AST1070 -@@ -85,7 +85,7 @@ static struct plat_serial8250_port ast_uart_data[] = { - .regshift = 2, - .iotype = UPIO_MEM, - .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -- }, -+ }, - #endif - #ifdef AST_UART2_BASE - { -@@ -95,7 +95,7 @@ static struct plat_serial8250_port ast_uart_data[] = { - .regshift = 2, - .iotype = UPIO_MEM, - .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -- }, -+ }, - #endif - #endif - #ifdef AST_UART1_BASE -@@ -109,6 +109,19 @@ static struct plat_serial8250_port ast_uart_data[] = { - .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, - }, - #endif -+#if defined(CONFIG_YOSEMITE) //Without this, tty offset might change for others -+#ifdef AST_UART2_BASE -+ { -+ .mapbase = AST_UART2_BASE, -+ .membase = (char*)(IO_ADDRESS(AST_UART2_BASE)), -+ .irq = IRQ_UART2, -+ .uartclk = (24*1000000L), -+ .regshift = 2, -+ .iotype = UPIO_MEM, -+ .flags = UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -+ }, -+#endif -+#endif - #ifdef AST_UART3_BASE - { - .mapbase = AST_UART3_BASE, -@@ -117,7 +130,7 @@ static struct plat_serial8250_port ast_uart_data[] = { - .regshift = 2, - .iotype = UPIO_MEM, - .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -- }, -+ }, - #endif - #ifdef AST_UART4_BASE - { -@@ -127,9 +140,9 @@ static struct plat_serial8250_port ast_uart_data[] = { - .regshift = 2, - .iotype = UPIO_MEM, - .flags = UPF_IOREMAP | UPF_BOOT_AUTOCONF | UPF_SKIP_TEST, -- }, -+ }, -+#endif - #endif --#endif - { }, - }; - -@@ -144,11 +157,16 @@ struct platform_device ast_uart_device = { - void __init ast_add_device_uart(void) - { - #if defined(CONFIG_ARCH_AST1010) -+#elif defined(CONFIG_YOSEMITE) -+ ast_scu_multi_func_uart(1); -+ ast_scu_multi_func_uart(2); -+ ast_scu_multi_func_uart(3); -+ ast_scu_multi_func_uart(4); - #else -- ast_scu_multi_func_uart(1); -- ast_scu_multi_func_uart(3); -- ast_scu_multi_func_uart(4); --#endif -+ ast_scu_multi_func_uart(1); -+ ast_scu_multi_func_uart(3); -+ ast_scu_multi_func_uart(4); -+#endif - platform_device_register(&ast_uart_device); - } - #else -diff --git a/arch/arm/plat-aspeed/irq.c b/arch/arm/plat-aspeed/irq.c -index b118359..f6100fa 100644 ---- a/arch/arm/plat-aspeed/irq.c -+++ b/arch/arm/plat-aspeed/irq.c -@@ -48,13 +48,14 @@ static void ast_mask_irq(unsigned int irq) - if((irq >= IRQ_TIMER0) && (irq <= IRQ_TIMER2)) - timer = 1; - #endif -- -- if (irq > 32) { -+ -+ // for irq0-irq31 use LOW register; for irq32-irq63 use HIGH register set. -+ if (irq >= 32) { - i=1; - irq = irq - 32; - } else - i=0; -- -+ - regVal = readl(AST_INTR_DIS(i)); - regVal |= (1 << irq); - writel(regVal, AST_INTR_DIS(i)); -@@ -63,8 +64,8 @@ static void ast_mask_irq(unsigned int irq) - * clear the interrupt - */ - if(timer) -- IRQ_EDGE_CLEAR(i,irq); -- -+ IRQ_EDGE_CLEAR(i,irq); -+ - } - - static void ast_unmask_irq(unsigned int irq) -@@ -72,12 +73,13 @@ static void ast_unmask_irq(unsigned int irq) - int i; - u32 regVal; - -- if (irq > 32) { -+ // for irq0-irq31 use LOW register; for irq32-irq63 use HIGH register set. -+ if (irq >= 32) { - i=1; - irq = irq - 32; - } else - i=0; -- -+ - regVal = readl(AST_INTR_EN(i)); - regVal |= (1 << irq); - writel(regVal, AST_INTR_EN(i)); -@@ -88,8 +90,8 @@ static struct irq_chip ast_irq_chip = { - .ack = ast_mask_irq, - .mask = ast_mask_irq, - .unmask = ast_unmask_irq, --}; -- -+}; -+ - void __init ast_init_irq(void) - { - unsigned int i; -@@ -107,8 +109,8 @@ void __init ast_init_irq(void) - writel(0xFFFFFFFF, AST_INTR_EDGE_CLR(1)); - #endif - -- //TOTAL IRQ NUM = -- for (i = 0; i < AST_VIC_NUM; i++) -+ //TOTAL IRQ NUM = -+ for (i = 0; i < AST_VIC_NUM; i++) - { - if(i<32) { - if((i >= IRQ_TIMER0) && (i <= IRQ_TIMER2)) //Timer0/1/2 -@@ -125,9 +127,9 @@ void __init ast_init_irq(void) - IRQ_SET_HIGH_LEVEL(1,i-32); - IRQ_SET_LEVEL_TRIGGER(1,i-32); - } --#endif -+#endif - } -- -+ - set_irq_chip(i, &ast_irq_chip); - set_irq_handler(i, handle_level_irq); - set_irq_flags(i, IRQF_VALID); -diff --git a/drivers/hwmon/ast_adc.c b/drivers/hwmon/ast_adc.c -index 3f95dc6..8f5aa54 100644 ---- a/drivers/hwmon/ast_adc.c -+++ b/drivers/hwmon/ast_adc.c -@@ -13,10 +13,10 @@ - * 2012.11.26: Initial version [Ryan Chen] - */ - --/* attr ADC sysfs 0~max adc channel -+/* attr ADC sysfs 0~max adc channel - * 0 - show/store enable - * 3 - show value --* 1 - show/store alarm_en set enable -+* 1 - show/store alarm_en set enable - * 2 - show alarm get statuse - * 4 - show/store upper - * 5 - show/store lower */ -@@ -44,13 +44,33 @@ - - #define REST_DESIGN 5 - -+ -+#ifdef CONFIG_YOSEMITE -+enum { -+ ADC_P5V = 0, -+ ADC_P12V, -+ ADC_P3V3_STBY, -+ ADC_P12V_SLOT0, -+ ADC_P12V_SLOT1, -+ ADC_P12V_SLOT2, -+ ADC_P12V_SLOT3, -+ ADC_P3V3, -+}; -+ -+enum { -+ REST_DESIGN_P3V3 = 6, -+ REST_DESIGN_P5V = 7, -+ REST_DESIGN_P12V = 8, -+}; -+#endif // CONFIG_YOSEMITE -+ - struct adc_vcc_ref_data { - int v2; - int r1; -- int r2; -+ int r2; - }; - --static struct adc_vcc_ref_data adc_vcc_ref[6] = { -+static struct adc_vcc_ref_data adc_vcc_ref[9] = { - [0] = { - .v2 = 0, - .r1 = 5600, -@@ -81,6 +101,24 @@ static struct adc_vcc_ref_data adc_vcc_ref[6] = { - .r1 = 1000, - .r2 = 1000, - }, -+ // P3V3 -+ [6] = { -+ .v2 = 0, -+ .r1 = 5110, -+ .r2 = 8250, -+ }, -+ // P5V -+ [7] = { -+ .v2 = 0, -+ .r1 = 5110, -+ .r2 = 3480, -+ }, -+ // P12V -+ [8] = { -+ .v2 = 0, -+ .r1 = 5110, -+ .r2 = 1020, -+ }, - }; - - /* Divisors for voltage sense; right now adc5 & adc6 divide by 2 */ -@@ -93,7 +131,7 @@ static int adc_divisor[] = { 1, 1, 1, 1, - struct ast_adc_data { - struct device *hwmon_dev; - void __iomem *reg_base; /* virtual */ -- int irq; //ADC IRQ number -+ int irq; //ADC IRQ number - int compen_value; //Compensating value - }; - -@@ -123,14 +161,14 @@ static void ast_adc_ctrl_init(void) - ast_adc_write(ast_adc, AST_ADC_CTRL_COMPEN | AST_ADC_CTRL_NORMAL | AST_ADC_CTRL_EN, AST_ADC_CTRL); - - //Set wait a sensing cycle t (s) = 1000 * 12 * (1/PCLK) * 2 * (ADC0c[31:17] + 1) * (ADC0c[9:0] +1) -- //ex : pclk = 48Mhz , ADC0c[31:17] = 0, ADC0c[9:0] = 0x40 : 64, ADC0c[31:17] = 0x3e7 : 999 -+ //ex : pclk = 48Mhz , ADC0c[31:17] = 0, ADC0c[9:0] = 0x40 : 64, ADC0c[31:17] = 0x3e7 : 999 - // --> 0.0325s = 12 * 2 * (0x3e7 + 1) *(64+1) / 48000000 -- // --> 0.0005s = 12 * 2 * (0x3e7 + 1) / 48000000 -- -+ // --> 0.0005s = 12 * 2 * (0x3e7 + 1) / 48000000 -+ - pclk = ast_get_pclk(); - - #if defined(CONFIG_ARCH_AST2300) -- ast_adc_write(ast_adc, 0x3e7, AST_ADC_CLK); -+ ast_adc_write(ast_adc, 0x3e7, AST_ADC_CLK); - - ast_adc_write(ast_adc, AST_ADC_CTRL_CH12_EN | AST_ADC_CTRL_COMPEN_CLR| ast_adc_read(ast_adc, AST_ADC_CTRL), AST_ADC_CTRL); - -@@ -141,16 +179,16 @@ static void ast_adc_ctrl_init(void) - ast_adc->compen_value = 0x200 - (ast_adc_read(ast_adc, AST_ADC_CH12_13) & AST_ADC_L_CH_MASK); - else - ast_adc->compen_value = 0 - (ast_adc_read(ast_adc, AST_ADC_CH12_13) & AST_ADC_L_CH_MASK); -- -- printk("compensating value %d \n",ast_adc->compen_value); -- -+ -+ // printk("compensating value %d \n",ast_adc->compen_value); -+ - #elif defined(CONFIG_ARCH_AST2400) - - //For AST2400 A0 workaround ... ADC0c = 1 ; - // ast_adc_write(ast_adc, 1, AST_ADC_CLK); - // ast_adc_write(ast_adc, (0x3e7<< 17) | 0x40, AST_ADC_CLK); - ast_adc_write(ast_adc, 0x40, AST_ADC_CLK); -- -+ - ast_adc_write(ast_adc, AST_ADC_CTRL_CH0_EN | AST_ADC_CTRL_COMPEN | AST_ADC_CTRL_NORMAL | AST_ADC_CTRL_EN, AST_ADC_CTRL); - - ast_adc_read(ast_adc, AST_ADC_CTRL); -@@ -159,15 +197,15 @@ static void ast_adc_ctrl_init(void) - - //compensating value = 0x200 - ADC10[9:0] - ast_adc->compen_value = 0x200 - (ast_adc_read(ast_adc, AST_ADC_CH0_1) & AST_ADC_L_CH_MASK); -- printk("compensating value %d \n",ast_adc->compen_value); -+ // printk("compensating value %d \n",ast_adc->compen_value); - - #elif defined(CONFIG_ARCH_AST2500) --// TODO ... --// scu read trim -+// TODO ... -+// scu read trim - // write trim 0xc4 [3:0] -- -+ - ast_adc_write(ast_adc, 0x40, AST_ADC_CLK); -- -+ - ast_adc_write(ast_adc, AST_ADC_CTRL_NORMAL | AST_ADC_CTRL_EN, AST_ADC_CTRL); - - while(!ast_adc_read(ast_adc, AST_ADC_CTRL) & 0x100); -@@ -175,17 +213,17 @@ static void ast_adc_ctrl_init(void) - ast_adc_write(ast_adc, AST_ADC_CTRL_COMPEN | AST_ADC_CTRL_NORMAL | AST_ADC_CTRL_EN, AST_ADC_CTRL); - - while(ast_adc_read(ast_adc, AST_ADC_CTRL) & AST_ADC_CTRL_COMPEN); -- -+ - //compensating value = 0x200 - ADC10[9:0] - ast_adc->compen_value = 0x200 - ((ast_adc_read(ast_adc, AST_ADC_TRIM) >> 16) & 0x3ff); -- printk("compensating value %d \n",ast_adc->compen_value); -- -+ // printk("compensating value %d \n",ast_adc->compen_value); -+ - #else - #err "No define for ADC " - #endif - - ast_adc_write(ast_adc, AST_ADC_CTRL_NORMAL | AST_ADC_CTRL_EN, AST_ADC_CTRL); -- -+ - } - - static u16 -@@ -203,9 +241,9 @@ ast_get_adc_hyster_lower(struct ast_adc_data *ast_adc, u8 adc_ch) - static void - ast_set_adc_hyster_lower(struct ast_adc_data *ast_adc, u8 adc_ch, u16 value) - { -- ast_adc_write(ast_adc, -+ ast_adc_write(ast_adc, - (ast_adc_read(ast_adc, AST_ADC_HYSTER0 + (adc_ch *4)) & ~AST_ADC_L_BOUND) | -- value, -+ value, - AST_ADC_HYSTER0 + (adc_ch *4)); - - } -@@ -224,9 +262,9 @@ ast_get_adc_hyster_upper(struct ast_adc_data *ast_adc, u8 adc_ch) - static void - ast_set_adc_hyster_upper(struct ast_adc_data *ast_adc, u8 adc_ch, u32 value) - { -- ast_adc_write(ast_adc, -+ ast_adc_write(ast_adc, - (ast_adc_read(ast_adc, AST_ADC_HYSTER0 + (adc_ch *4)) & ~AST_ADC_H_BOUND) | -- (value << 16), -+ (value << 16), - AST_ADC_HYSTER0 + (adc_ch *4)); - - } -@@ -244,7 +282,7 @@ ast_get_adc_hyster_en(struct ast_adc_data *ast_adc, u8 adc_ch) - static void - ast_set_adc_hyster_en(struct ast_adc_data *ast_adc, u8 adc_ch, u8 enable) - { -- //tacho source -+ //tacho source - if(enable == 1) - ast_adc_write(ast_adc, - ast_adc_read(ast_adc, AST_ADC_HYSTER0 + (adc_ch *4)) | AST_ADC_HYSTER_EN, -@@ -270,9 +308,9 @@ ast_get_adc_lower(struct ast_adc_data *ast_adc, u8 adc_ch) - static void - ast_set_adc_lower(struct ast_adc_data *ast_adc, u8 adc_ch, u16 value) - { -- ast_adc_write(ast_adc, -+ ast_adc_write(ast_adc, - (ast_adc_read(ast_adc, AST_ADC_BOUND0 + (adc_ch *4)) & ~AST_ADC_L_BOUND) | -- value, -+ value, - AST_ADC_BOUND0 + (adc_ch *4)); - - } -@@ -293,9 +331,9 @@ ast_get_adc_upper(struct ast_adc_data *ast_adc, u8 adc_ch) - static void - ast_set_adc_upper(struct ast_adc_data *ast_adc, u8 adc_ch, u32 value) - { -- ast_adc_write(ast_adc, -+ ast_adc_write(ast_adc, - (ast_adc_read(ast_adc, AST_ADC_BOUND0 + (adc_ch *4)) & ~AST_ADC_H_BOUND) | -- (value << 16), -+ (value << 16), - AST_ADC_BOUND0 + (adc_ch *4)); - - } -@@ -304,7 +342,7 @@ ast_set_adc_upper(struct ast_adc_data *ast_adc, u8 adc_ch, u32 value) - static u8 - ast_get_adc_alarm(struct ast_adc_data *ast_adc, u8 adc_ch) - { -- //adc ch source -+ //adc ch source - if(ast_adc_read(ast_adc, AST_ADC_IER) & (0x1 << adc_ch)) - return 1; - else -@@ -322,61 +360,61 @@ ast_get_adc_value(struct ast_adc_data *ast_adc, u8 adc_ch) - break; - case 1: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH0_1) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - case 2: - tmp = ast_adc_read(ast_adc, AST_ADC_CH2_3) & AST_ADC_L_CH_MASK; - break; - case 3: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH2_3) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - case 4: - tmp = ast_adc_read(ast_adc, AST_ADC_CH4_5) & AST_ADC_L_CH_MASK; - break; - case 5: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH4_5) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - case 6: - tmp = ast_adc_read(ast_adc, AST_ADC_CH6_7) & AST_ADC_L_CH_MASK; - break; - case 7: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH6_7) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - case 8: - tmp = ast_adc_read(ast_adc, AST_ADC_CH8_9) & AST_ADC_L_CH_MASK; - break; - case 9: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH8_9) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - case 10: - tmp = ast_adc_read(ast_adc, AST_ADC_CH10_11) & AST_ADC_L_CH_MASK; - break; - case 11: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH10_11) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - case 12: - tmp = ast_adc_read(ast_adc, AST_ADC_CH12_13) & AST_ADC_L_CH_MASK; - break; - case 13: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH12_13) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - case 14: - tmp = ast_adc_read(ast_adc, AST_ADC_CH14_15) & AST_ADC_L_CH_MASK; - break; - case 15: - tmp = (ast_adc_read(ast_adc, AST_ADC_CH14_15) & AST_ADC_H_CH_MASK) >> 16; -- break; -+ break; - - } - - tmp += ast_adc->compen_value; - - // printk("voltage = %d \n",tmp); -- -+ - return tmp; - - } - --static u8 -+static u8 - ast_get_adc_en(struct ast_adc_data *ast_adc, u8 adc_ch) - { - u8 tmp=0; -@@ -390,7 +428,7 @@ ast_get_adc_en(struct ast_adc_data *ast_adc, u8 adc_ch) - - } - --static void -+static void - ast_set_adc_en(struct ast_adc_data *ast_adc, u8 adc_ch, u8 enable) - { - if(enable) -@@ -401,7 +439,7 @@ ast_set_adc_en(struct ast_adc_data *ast_adc, u8 adc_ch, u8 enable) - - - /* NAME sysfs */ --static ssize_t -+static ssize_t - show_name(struct device *dev, struct device_attribute *devattr, - char *buf) - { -@@ -416,38 +454,63 @@ static const struct attribute_group name_attribute_groups = { - .attrs = name_attributes, - }; - --/* attr ADC sysfs 0~max adc channel -+/* attr ADC sysfs 0~max adc channel - * 0 - show/store channel enable --* 1 - show value -+* 1 - show value - * 2 - show alarm get statuse - * 3 - show/store upper --* 4 - show/store lower --* 5 - show/store hystersis enable --* 6 - show/store hystersis upper --* 7 - show/store hystersis low -+* 4 - show/store lower -+* 5 - show/store hystersis enable -+* 6 - show/store hystersis upper -+* 7 - show/store hystersis low - */ - --static u32 -+static u32 - ast_get_voltage(int idx) { -+ u8 rest_design = REST_DESIGN; - u16 tmp; - u32 voltage, tmp1, tmp2, tmp3; - tmp = ast_get_adc_value(ast_adc, idx); -+ -+#ifdef CONFIG_YOSEMITE -+ switch (idx) { -+ case ADC_P3V3: -+ case ADC_P3V3_STBY: -+ rest_design = REST_DESIGN_P3V3; -+ break; -+ case ADC_P5V: -+ rest_design = REST_DESIGN_P5V; -+ break; -+ case ADC_P12V: -+ case ADC_P12V_SLOT0: -+ case ADC_P12V_SLOT1: -+ case ADC_P12V_SLOT2: -+ case ADC_P12V_SLOT3: -+ rest_design = REST_DESIGN_P12V; -+ break; -+ default: -+ rest_design = REST_DESIGN; -+ } -+#endif // CONFIG_YOSEMITE -+ - // Voltage Sense Method -- tmp1 = (adc_vcc_ref[REST_DESIGN].r1 + adc_vcc_ref[REST_DESIGN].r2) * tmp * 25 * 10; -- tmp2 = adc_vcc_ref[REST_DESIGN].r2 * 1024 ; -- tmp3 = (adc_vcc_ref[REST_DESIGN].r1 * adc_vcc_ref[REST_DESIGN].v2) / adc_vcc_ref[REST_DESIGN].r2; -+ tmp1 = (adc_vcc_ref[rest_design].r1 + adc_vcc_ref[rest_design].r2) * tmp * 25 * 10; -+ tmp2 = adc_vcc_ref[rest_design].r2 * 1024 ; -+ tmp3 = (adc_vcc_ref[rest_design].r1 * adc_vcc_ref[rest_design].v2) / adc_vcc_ref[rest_design].r2; - // printk("tmp3 = %d \n",tmp3); - voltage = (tmp1/tmp2) - tmp3; - -+#ifndef CONFIG_YOSEMITE - // Higher voltage inputs require a divisor - - if (adc_divisor[idx]) - voltage /= adc_divisor[idx]; -+#endif //CONFIG_YOSEMITE - - return voltage; - } - --static ssize_t -+static ssize_t - ast_show_adc(struct device *dev, struct device_attribute *attr, char *sysfsbuf) - { - struct sensor_device_attribute_2 *sensor_attr = to_sensor_dev_attr_2(attr); -@@ -455,7 +518,7 @@ ast_show_adc(struct device *dev, struct device_attribute *attr, char *sysfsbuf) - - //sensor_attr->index : pwm_ch# - //sensor_attr->nr : attr# -- switch(sensor_attr->nr) -+ switch(sensor_attr->nr) - { - case 0: //channel enable, disable - return sprintf(sysfsbuf, "%d : %s\n", ast_get_adc_en(ast_adc,sensor_attr->index),ast_get_adc_en(ast_adc,sensor_attr->index) ? "Enable":"Disable"); -@@ -466,23 +529,23 @@ ast_show_adc(struct device *dev, struct device_attribute *attr, char *sysfsbuf) - break; - case 2: //alarm - return sprintf(sysfsbuf, "%d \n", ast_get_adc_alarm(ast_adc,sensor_attr->index)); -- break; -+ break; - case 3: //upper - return sprintf(sysfsbuf, "%d \n", ast_get_adc_upper(ast_adc,sensor_attr->index)); -- break; -+ break; - case 4: //lower - return sprintf(sysfsbuf, "%d \n", ast_get_adc_lower(ast_adc,sensor_attr->index)); -- break; -- case 5: //hystersis enable -+ break; -+ case 5: //hystersis enable - return sprintf(sysfsbuf, "%d : %s\n", ast_get_adc_hyster_en(ast_adc,sensor_attr->index),ast_get_adc_hyster_en(ast_adc,sensor_attr->index) ? "Enable":"Disable"); -- break; -+ break; - case 6: //hystersis upper - return sprintf(sysfsbuf, "%d \n", ast_get_adc_hyster_upper(ast_adc,sensor_attr->index)); -- break; -+ break; - case 7: //hystersis lower - return sprintf(sysfsbuf, "%d \n", ast_get_adc_hyster_lower(ast_adc,sensor_attr->index)); -- break; -- case 8: -+ break; -+ case 8: - voltage = ast_get_voltage(sensor_attr->index); - return sprintf(sysfsbuf, "%d\n",voltage * 10); - -@@ -492,7 +555,7 @@ ast_show_adc(struct device *dev, struct device_attribute *attr, char *sysfsbuf) - } - } - --static ssize_t -+static ssize_t - ast_store_adc(struct device *dev, struct device_attribute *attr, const char *sysfsbuf, size_t count) - { - u32 input_val; -@@ -503,16 +566,16 @@ ast_store_adc(struct device *dev, struct device_attribute *attr, const char *sys - - //sensor_attr->index : pwm_ch# - //sensor_attr->nr : attr# -- switch(sensor_attr->nr) -+ switch(sensor_attr->nr) - { - case 0: //enable, disable - ast_set_adc_en(ast_adc, sensor_attr->index, input_val); - break; - case 1: //value -- -+ - break; - case 2: //alarm -- break; -+ break; - case 3: - ast_set_adc_upper(ast_adc, sensor_attr->index, input_val); - break; -@@ -521,14 +584,14 @@ ast_store_adc(struct device *dev, struct device_attribute *attr, const char *sys - break; - case 5: //hystersis - ast_set_adc_hyster_en(ast_adc, sensor_attr->index, input_val); -- break; -+ break; - case 6: - ast_set_adc_hyster_upper(ast_adc, sensor_attr->index, input_val); - break; - case 7: - ast_set_adc_hyster_lower(ast_adc, sensor_attr->index, input_val); - break; -- -+ - default: - return -EINVAL; - break; -@@ -537,15 +600,15 @@ ast_store_adc(struct device *dev, struct device_attribute *attr, const char *sys - return count; - } - --/* attr ADC sysfs 0~max adc channel -+/* attr ADC sysfs 0~max adc channel - * 0 - show/store channel enable --* 1 - show value -+* 1 - show value - * 2 - show alarm get statuse - * 3 - show/store upper --* 4 - show/store lower --* 5 - show/store hystersis enable --* 6 - show/store hystersis upper --* 7 - show/store hystersis low -+* 4 - show/store lower -+* 5 - show/store hystersis enable -+* 6 - show/store hystersis upper -+* 7 - show/store hystersis low - * 8 - show value as 1000s, expected by lm-sensors - */ - -@@ -624,18 +687,18 @@ static const struct attribute_group adc_attribute_groups[] = { - { .attrs = adc7_attributes }, - { .attrs = adc8_attributes }, - { .attrs = adc9_attributes }, -- { .attrs = adc10_attributes }, -+ { .attrs = adc10_attributes }, - { .attrs = adc11_attributes }, - #if defined(CONFIG_ARCH_AST2400) || defined(CONFIG_ARCH_AST2500) - { .attrs = adc12_attributes }, - { .attrs = adc13_attributes }, - { .attrs = adc14_attributes }, - { .attrs = adc15_attributes }, --#endif -+#endif - }; - - --static int -+static int - ast_adc_probe(struct platform_device *pdev) - { - struct resource *res; -@@ -695,7 +758,7 @@ ast_adc_probe(struct platform_device *pdev) - } - - ast_adc_ctrl_init(); -- -+ - printk(KERN_INFO "ast_adc: driver successfully loaded.\n"); - - return 0; -@@ -714,7 +777,7 @@ out: - return ret; - } - --static int -+static int - ast_adc_remove(struct platform_device *pdev) - { - int i=0; -@@ -739,14 +802,14 @@ ast_adc_remove(struct platform_device *pdev) - } - - #ifdef CONFIG_PM --static int -+static int - ast_adc_suspend(struct platform_device *pdev, pm_message_t state) - { - printk("ast_adc_suspend : TODO \n"); - return 0; - } - --static int -+static int - ast_adc_resume(struct platform_device *pdev) - { - ast_adc_ctrl_init(); -@@ -769,13 +832,13 @@ static struct platform_driver ast_adc_driver = { - }, - }; - --static int __init -+static int __init - ast_adc_init(void) - { - return platform_driver_register(&ast_adc_driver); - } - --static void __exit -+static void __exit - ast_adc_exit(void) - { - platform_driver_unregister(&ast_adc_driver); -diff --git a/drivers/i2c/busses/i2c-ast.c b/drivers/i2c/busses/i2c-ast.c -index 7a083de..9bb3154 100644 ---- a/drivers/i2c/busses/i2c-ast.c -+++ b/drivers/i2c/busses/i2c-ast.c -@@ -40,63 +40,68 @@ - #include <plat/ast_i2c.h> - #endif - --//AST2400 buffer mode issue , force I2C slave write use byte mode , read use buffer mode -+//AST2400 buffer mode issue , force I2C slave write use byte mode , read use buffer mode - /* Use platform_data instead of module parameters */ - /* Fast Mode = 400 kHz, Standard = 100 kHz */ - //static int clock = 100; /* Default: 100 kHz */ - - - /***************************************************************************/ -+ -+#ifdef CONFIG_AST_I2C_SLAVE_RDWR -+#define I2C_S_BUF_SIZE 64 -+#define I2C_S_RX_BUF_NUM 4 -+#define BUFF_FULL 0xff00 -+#define BUFF_ONGOING 1 -+#endif -+ -+#define AST_LOCKUP_DETECTED (0x1 << 15) -+ - struct ast_i2c_dev { - struct ast_i2c_driver_data *ast_i2c_data; - struct device *dev; -- void __iomem *reg_base; /* virtual */ -- int irq; //I2C IRQ number -- u32 bus_id; //for i2c dev# IRQ number check -- u32 state; //I2C xfer mode state matchine -+ void __iomem *reg_base; /* virtual */ -+ int irq; //I2C IRQ number -+ u32 bus_id; //for i2c dev# IRQ number check -+ u32 state; //I2C xfer mode state matchine - struct i2c_adapter adap; -- struct buf_page *req_page; -+ struct buf_page *req_page; - //dma or buff mode needed - unsigned char *dma_buf; - dma_addr_t dma_addr; -- --//master -+ -+//master - int xfer_last; //cur xfer is last msgs for stop msgs - struct i2c_msg *master_msgs; //cur xfer msgs -- int master_xfer_len; //cur xfer len -+ int master_xfer_len; //cur xfer len - int master_xfer_cnt; //total xfer count - u32 master_xfer_mode; //cur xfer mode ... 0 : no_op , master: 1 byte , 2 : buffer , 3: dma , slave : xxxx - struct completion cmd_complete; - int cmd_err; - u8 blk_r_flag; //for smbus block read -- void (*do_master_xfer)(struct ast_i2c_dev *i2c_dev); --//Slave structure -+ void (*do_master_xfer)(struct ast_i2c_dev *i2c_dev); -+ spinlock_t master_lock; -+//Slave structure - u8 slave_operation; - u8 slave_event; - struct i2c_msg *slave_msgs; //cur slave xfer msgs -- int slave_xfer_len; -- int slave_xfer_cnt; -- u32 slave_xfer_mode; //cur xfer mode ... 0 : no_op , master: 1 byte , 2 : buffer , 3: dma , slave : xxxx -+ int slave_xfer_len; -+ int slave_xfer_cnt; -+ u32 slave_xfer_mode; //cur xfer mode ... 0 : no_op , master: 1 byte , 2 : buffer , 3: dma , slave : xxxx - void (*do_slave_xfer)(struct ast_i2c_dev *i2c_dev); --}; -- - #ifdef CONFIG_AST_I2C_SLAVE_RDWR --#define I2C_S_BUF_SIZE 64 --#define I2C_S_RX_BUF_NUM 4 --#define BUFF_FULL 0xff00 --#define BUFF_ONGOING 1 -- --struct i2c_msg slave_rx_msg[I2C_S_RX_BUF_NUM + 1]; --struct i2c_msg slave_tx_msg; --static spinlock_t slave_rx_lock = SPIN_LOCK_UNLOCKED; -+ struct i2c_msg slave_rx_msg[I2C_S_RX_BUF_NUM + 1]; -+ struct i2c_msg slave_tx_msg; -+ spinlock_t slave_rx_lock; - #endif -+}; -+ - --static spinlock_t g_master_lock = SPIN_LOCK_UNLOCKED; - - static inline void - ast_i2c_write(struct ast_i2c_dev *i2c_dev, u32 val, u32 reg) - { --// dev_dbg(i2c_dev->dev, "ast_i2c_write : val: %x , reg : %x \n",val,reg); -+// dev_dbg(i2c_dev->dev, "ast_i2c_write : val: %x , reg : %x \n",val,reg); - writel(val, i2c_dev->reg_base+ reg); - } - -@@ -107,7 +112,7 @@ ast_i2c_read(struct ast_i2c_dev *i2c_dev, u32 reg) - u32 val = readl(i2c_dev->reg_base + reg); - printk("R : reg %x , val: %x \n",reg, val); - return val; --#else -+#else - return readl(i2c_dev->reg_base + reg); - #endif - } -@@ -152,7 +157,7 @@ static void ast_slave_issue_alert(struct ast_i2c_dev *i2c_dev, u8 enable) - static void ast_slave_mode_enable(struct ast_i2c_dev *i2c_dev, struct i2c_msg *msgs) - { - if(msgs->buf[0] == 1) { -- ast_i2c_write(i2c_dev, msgs->addr, I2C_DEV_ADDR_REG); -+ ast_i2c_write(i2c_dev, msgs->addr, I2C_DEV_ADDR_REG); - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_FUN_CTRL_REG) | AST_I2CD_SLAVE_EN, I2C_FUN_CTRL_REG); - } else - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_FUN_CTRL_REG) & ~AST_I2CD_SLAVE_EN, I2C_FUN_CTRL_REG); -@@ -162,12 +167,14 @@ static void ast_slave_mode_enable(struct ast_i2c_dev *i2c_dev, struct i2c_msg *m - - static void ast_i2c_dev_init(struct ast_i2c_dev *i2c_dev) - { -- //I2CG Reset -+ //I2CG Reset - ast_i2c_write(i2c_dev, 0, I2C_FUN_CTRL_REG); - --#ifdef CONFIG_AST_I2C_SLAVE_EEPROM -+#ifdef CONFIG_AST_I2C_SLAVE_EEPROM - i2c_dev->ast_i2c_data->slave_init(&(i2c_dev->slave_msgs)); - ast_slave_mode_enable(i2c_dev, i2c_dev->slave_msgs); -+#else -+ i2c_dev->slave_msgs = i2c_dev->slave_rx_msg; - #endif - - //Enable Master Mode -@@ -177,20 +184,20 @@ static void ast_i2c_dev_init(struct ast_i2c_dev *i2c_dev) - /* Set AC Timing */ - #if defined(CONFIG_ARCH_AST2400) - if(i2c_dev->ast_i2c_data->bus_clk/1000 > 400) { -- printk("high speed mode enable clk [%dkhz]\n",i2c_dev->ast_i2c_data->bus_clk/1000); -+ printk("high speed mode enable clk [%dkhz]\n",i2c_dev->ast_i2c_data->bus_clk/1000); - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev, I2C_FUN_CTRL_REG) | - AST_I2CD_M_HIGH_SPEED_EN | - AST_I2CD_M_SDA_DRIVE_1T_EN | -- AST_I2CD_SDA_DRIVE_1T_EN -+ AST_I2CD_SDA_DRIVE_1T_EN - , I2C_FUN_CTRL_REG); -- -+ - /* Set AC Timing */ - ast_i2c_write(i2c_dev, 0x3, I2C_AC_TIMING_REG2); -- ast_i2c_write(i2c_dev, select_i2c_clock(i2c_dev), I2C_AC_TIMING_REG1); -+ ast_i2c_write(i2c_dev, select_i2c_clock(i2c_dev), I2C_AC_TIMING_REG1); - }else { -- /* target apeed is xxKhz*/ -+ /* target apeed is xxKhz*/ - ast_i2c_write(i2c_dev, select_i2c_clock(i2c_dev), I2C_AC_TIMING_REG1); -- ast_i2c_write(i2c_dev, AST_NO_TIMEOUT_CTRL, I2C_AC_TIMING_REG2); -+ ast_i2c_write(i2c_dev, AST_NO_TIMEOUT_CTRL, I2C_AC_TIMING_REG2); - } - #else - /* target apeed is xxKhz*/ -@@ -206,12 +213,12 @@ static void ast_i2c_dev_init(struct ast_i2c_dev *i2c_dev) - - //TODO - // ast_i2c_write(i2c_dev, 0xAF, I2C_INTR_CTRL_REG); -- //Enable Interrupt, STOP Interrupt has bug in AST2000 -- -+ //Enable Interrupt, STOP Interrupt has bug in AST2000 -+ - /* Set interrupt generation of I2C controller */ - ast_i2c_write(i2c_dev, -- AST_I2CD_SDA_DL_TO_INTR_EN | -- AST_I2CD_BUS_RECOVER_INTR_EN | -+ AST_I2CD_SDA_DL_TO_INTR_EN | -+ AST_I2CD_BUS_RECOVER_INTR_EN | - AST_I2CD_SMBUS_ALT_INTR_EN | - // AST_I2CD_SLAVE_MATCH_INTR_EN | - AST_I2CD_SCL_TO_INTR_EN | -@@ -230,16 +237,16 @@ static void ast_i2c_dev_init(struct ast_i2c_dev *i2c_dev) - static void ast_i2c_slave_buff_init(struct ast_i2c_dev *i2c_dev) - { - int i; -- //Tx buf 1 -- slave_tx_msg.len = I2C_S_BUF_SIZE; -- slave_tx_msg.buf = kzalloc(I2C_S_BUF_SIZE, GFP_KERNEL); -+ //Tx buf 1 -+ i2c_dev->slave_tx_msg.len = I2C_S_BUF_SIZE; -+ i2c_dev->slave_tx_msg.buf = kzalloc(I2C_S_BUF_SIZE, GFP_KERNEL); - //Rx buf 4 - for(i=0; i<I2C_S_RX_BUF_NUM+1; i++) { -- slave_rx_msg[i].addr = ~BUFF_ONGOING; -- slave_rx_msg[i].flags = 0; //mean empty buffer -- slave_rx_msg[i].len = I2C_S_BUF_SIZE; -- slave_rx_msg[i].buf = kzalloc(I2C_S_BUF_SIZE, GFP_KERNEL); -- } -+ i2c_dev->slave_rx_msg[i].addr = ~BUFF_ONGOING; -+ i2c_dev->slave_rx_msg[i].flags = 0; //mean empty buffer -+ i2c_dev->slave_rx_msg[i].len = I2C_S_BUF_SIZE; -+ i2c_dev->slave_rx_msg[i].buf = kzalloc(I2C_S_BUF_SIZE, GFP_KERNEL); -+ } - } - - static void ast_i2c_slave_rdwr_xfer(struct ast_i2c_dev *i2c_dev) -@@ -247,13 +254,13 @@ static void ast_i2c_slave_rdwr_xfer(struct ast_i2c_dev *i2c_dev) - int i; - unsigned long flags; - -- spin_lock_irqsave(&slave_rx_lock, flags); -- -+ spin_lock_irqsave(&i2c_dev->slave_rx_lock, flags); -+ - switch(i2c_dev->slave_event) { - case I2C_SLAVE_EVENT_START_WRITE: - for(i=0; i<I2C_S_RX_BUF_NUM; i++) { -- if((slave_rx_msg[i].flags == 0) && (slave_rx_msg[i].addr != BUFF_ONGOING)) { -- slave_rx_msg[i].addr = BUFF_ONGOING; -+ if((i2c_dev->slave_rx_msg[i].flags == 0) && (i2c_dev->slave_rx_msg[i].addr != BUFF_ONGOING)) { -+ i2c_dev->slave_rx_msg[i].addr = BUFF_ONGOING; - break; - } - } -@@ -261,40 +268,40 @@ static void ast_i2c_slave_rdwr_xfer(struct ast_i2c_dev *i2c_dev) - printk("RX buffer full ........use tmp msgs buff \n"); - //TODO... - } -- printk("I2C_SLAVE_EVENT_START_WRITE ... %d \n", i); -+ //printk("I2C_SLAVE_EVENT_START_WRITE ... %d \n", i); - -- i2c_dev->slave_msgs = &slave_rx_msg[i]; -+ i2c_dev->slave_msgs = &i2c_dev->slave_rx_msg[i]; - break; - case I2C_SLAVE_EVENT_START_READ: -- printk("I2C_SLAVE_EVENT_START_READ ERROR .. not imple \n"); -- i2c_dev->slave_msgs = &slave_tx_msg; -+ //printk("I2C_SLAVE_EVENT_START_READ ERROR .. not imple \n"); -+ i2c_dev->slave_msgs = &i2c_dev->slave_tx_msg; - break; - case I2C_SLAVE_EVENT_WRITE: -- printk("I2C_SLAVE_EVENT_WRITE next write ERROR ...\n"); -- i2c_dev->slave_msgs = &slave_tx_msg; -+ //printk("I2C_SLAVE_EVENT_WRITE next write ERROR ...\n"); -+ i2c_dev->slave_msgs = &i2c_dev->slave_tx_msg; - break; - case I2C_SLAVE_EVENT_READ: -- printk("I2C_SLAVE_EVENT_READ ERROR ... \n"); -- i2c_dev->slave_msgs = &slave_tx_msg; -+ printk("I2C_SLAVE_EVENT_READ ERROR ... \n"); -+ i2c_dev->slave_msgs = &i2c_dev->slave_tx_msg; - break; - case I2C_SLAVE_EVENT_NACK: -- printk("I2C_SLAVE_EVENT_NACK ERROR ... \n"); -- i2c_dev->slave_msgs = &slave_tx_msg; -+ //printk("I2C_SLAVE_EVENT_NACK ERROR ... \n"); -+ i2c_dev->slave_msgs = &i2c_dev->slave_tx_msg; - break; - case I2C_SLAVE_EVENT_STOP: -- printk("I2C_SLAVE_EVENT_STOP \n"); -+ //printk("I2C_SLAVE_EVENT_STOP \n"); - for(i=0; i<I2C_S_RX_BUF_NUM; i++) { -- if(slave_rx_msg[i].addr == BUFF_ONGOING) { -- slave_rx_msg[i].flags = BUFF_FULL; -- slave_rx_msg[i].addr = 0; -+ if(i2c_dev->slave_rx_msg[i].addr == BUFF_ONGOING) { -+ i2c_dev->slave_rx_msg[i].flags = BUFF_FULL; -+ i2c_dev->slave_rx_msg[i].addr = 0; - break; - } - } -- -- i2c_dev->slave_msgs = &slave_tx_msg; -+ -+ i2c_dev->slave_msgs = &i2c_dev->slave_tx_msg; - break; - } -- spin_unlock_irqrestore(&slave_rx_lock, flags); -+ spin_unlock_irqrestore(&i2c_dev->slave_rx_lock, flags); - - } - -@@ -308,29 +315,29 @@ static int ast_i2c_slave_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs) - case 0: - // printk("slave read \n"); - //cur_msg = get_free_msg; -- spin_lock_irqsave(&slave_rx_lock, flags); -+ spin_lock_irqsave(&i2c_dev->slave_rx_lock, flags); - - for(i=0; i<I2C_S_RX_BUF_NUM; i++) { -- if((slave_rx_msg[i].addr == 0) && (slave_rx_msg[i].flags == BUFF_FULL)) { -- memcpy(msgs->buf, slave_rx_msg[i].buf, slave_rx_msg[i].len); -- msgs->len = slave_rx_msg[i].len; -- slave_rx_msg[i].flags = 0; -- slave_rx_msg[i].len = 0; -+ if((i2c_dev->slave_rx_msg[i].addr == 0) && (i2c_dev->slave_rx_msg[i].flags == BUFF_FULL)) { -+ memcpy(msgs->buf, i2c_dev->slave_rx_msg[i].buf, i2c_dev->slave_rx_msg[i].len); -+ msgs->len = i2c_dev->slave_rx_msg[i].len; -+ i2c_dev->slave_rx_msg[i].flags = 0; -+ i2c_dev->slave_rx_msg[i].len = 0; - break; - } - } -- spin_unlock_irqrestore(&slave_rx_lock, flags); -- -+ spin_unlock_irqrestore(&i2c_dev->slave_rx_lock, flags); -+ - if(i == I2C_S_RX_BUF_NUM) { -- printk("No buffer ........ \n"); -+ //printk("No buffer ........ \n"); - msgs->len = 0; - ret = -1; - } - break; - case I2C_M_RD: //slave write - // printk("slave write \n"); -- memcpy(msgs->buf, slave_tx_msg.buf, I2C_S_BUF_SIZE); -- break; -+ memcpy(msgs->buf, i2c_dev->slave_tx_msg.buf, I2C_S_BUF_SIZE); -+ break; - case I2C_S_EN: - if((msgs->addr < 0x1) || (msgs->addr > 0xff)) { - ret = -1; -@@ -352,7 +359,7 @@ static int ast_i2c_slave_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs) - default: - printk("slave xfer error \n"); - break; -- -+ - } - return ret; - } -@@ -360,16 +367,16 @@ static int ast_i2c_slave_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs) - - #endif - --static u8 -+static u8 - ast_i2c_bus_error_recover(struct ast_i2c_dev *i2c_dev) - { - u32 sts; -- int r; -+ int r; - u32 i = 0; -- -+ - //Check 0x14's SDA and SCL status - sts = ast_i2c_read(i2c_dev,I2C_CMD_REG); -- -+ - if ((sts & AST_I2CD_SDA_LINE_STS) && (sts & AST_I2CD_SCL_LINE_STS)) { - //Means bus is idle. - dev_dbg(i2c_dev->dev, "I2C bus (%d) is idle. I2C slave doesn't exist?!\n", i2c_dev->bus_id); -@@ -377,11 +384,11 @@ ast_i2c_bus_error_recover(struct ast_i2c_dev *i2c_dev) - } - - dev_dbg(i2c_dev->dev, "ERROR!! I2C(%d) bus hanged, try to recovery it!\n", i2c_dev->bus_id); -- -- -+ -+ - if ((sts & AST_I2CD_SDA_LINE_STS) && !(sts & AST_I2CD_SCL_LINE_STS)) { - //if SDA == 1 and SCL == 0, it means the master is locking the bus. -- //Send a stop command to unlock the bus. -+ //Send a stop command to unlock the bus. - dev_dbg(i2c_dev->dev, "I2C's master is locking the bus, try to stop it.\n"); - // - init_completion(&i2c_dev->cmd_complete); -@@ -397,12 +404,12 @@ ast_i2c_bus_error_recover(struct ast_i2c_dev *i2c_dev) - dev_dbg(i2c_dev->dev, "recovery error \n"); - return -1; - } -- -+ - if (r == 0) { - dev_dbg(i2c_dev->dev, "recovery timed out\n"); - return -1; - } else { -- dev_dbg(i2c_dev->dev, "Recovery successfully\n"); -+ dev_dbg(i2c_dev->dev, "Recovery successfully\n"); - return 0; - } - -@@ -415,11 +422,11 @@ ast_i2c_bus_error_recover(struct ast_i2c_dev *i2c_dev) - for (i = 0; i < 10; i++) { - ast_i2c_dev_init(i2c_dev); - //Do the recovery command BIT11 -- init_completion(&i2c_dev->cmd_complete); -+ init_completion(&i2c_dev->cmd_complete); - ast_i2c_write(i2c_dev, AST_I2CD_BUS_RECOVER_CMD_EN, I2C_CMD_REG); -- -+ - r = wait_for_completion_interruptible_timeout(&i2c_dev->cmd_complete, -- i2c_dev->adap.timeout*HZ); -+ i2c_dev->adap.timeout*HZ); - if (i2c_dev->cmd_err != 0 && - i2c_dev->cmd_err != AST_I2CD_INTR_STS_NORMAL_STOP) { - dev_dbg(i2c_dev->dev, "ERROR!! Failed to do recovery command(0x%08x)\n", i2c_dev->cmd_err); -@@ -438,31 +445,56 @@ ast_i2c_bus_error_recover(struct ast_i2c_dev *i2c_dev) - dev_dbg(i2c_dev->dev, "Don't know how to handle this case?!\n"); - return -1; - } -- dev_dbg(i2c_dev->dev, "Recovery successfully\n"); -+ dev_dbg(i2c_dev->dev, "Recovery successfully\n"); - return 0; - } - --static void ast_master_alert_recv(struct ast_i2c_dev *i2c_dev) -+static void ast_master_alert_recv(struct ast_i2c_dev *i2c_dev) - { - printk("ast_master_alert_recv bus id %d, Disable Alt, Please Imple \n",i2c_dev->bus_id); - } - - static int ast_i2c_wait_bus_not_busy(struct ast_i2c_dev *i2c_dev) - { -- int timeout = 32; //TODO number -+ int timeout = 10; //TODO number -+ volatile u8 mode = 0; - // printk("ast_i2c_wait_bus_not_busy \n"); -+ -+ // Wait for slave transfer to finish -+ mode = i2c_dev->slave_operation; -+ while (mode == 1) { -+ if (timeout <= 0) { -+ break; -+ } -+ mode = i2c_dev->slave_operation; -+ timeout--; -+ msleep(1); -+ } -+ -+ if (timeout <= 0) { -+ return -EAGAIN; -+ } -+ -+ // Wait for Bus to go IDLE -+ timeout = 10; - while (ast_i2c_read(i2c_dev,I2C_CMD_REG) & AST_I2CD_BUS_BUSY_STS) { -- ast_i2c_bus_error_recover(i2c_dev); -- if(timeout<=0) -+ if(timeout<=0) { - break; -+ } -+ - timeout--; -- msleep(2); -+ msleep(1); - } - -- return timeout <= 0 ? EAGAIN : 0; -+ if (timeout <=0) { -+ ast_i2c_bus_error_recover(i2c_dev); -+ return 0; -+ } -+ -+ return 0; - } - --static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) -+static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - { - u32 cmd = 0; - int i; -@@ -470,49 +502,49 @@ static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - i2c_dev->master_xfer_mode = DMA_XFER; - i2c_dev->slave_xfer_mode = DMA_XFER; - -- if(i2c_dev->slave_operation == 1) { -+ if(i2c_dev->slave_operation == 1) { - if(i2c_dev->slave_msgs->flags & I2C_M_RD) { - //DMA tx mode - if(i2c_dev->slave_msgs->len > AST_I2C_DMA_SIZE) - i2c_dev->slave_xfer_len = AST_I2C_DMA_SIZE; -- else -+ else - i2c_dev->slave_xfer_len = i2c_dev->slave_msgs->len; -- -+ - dev_dbg(i2c_dev->dev, "(<--) slave tx DMA \n"); - for(i=0; i<i2c_dev->slave_xfer_len; i++) - i2c_dev->dma_buf[i] = i2c_dev->slave_msgs->buf[i2c_dev->slave_xfer_cnt + i]; -- -+ - ast_i2c_write(i2c_dev, i2c_dev->dma_addr, I2C_DMA_BASE_REG); - ast_i2c_write(i2c_dev, (i2c_dev->slave_xfer_len-1), I2C_DMA_LEN_REG); -- ast_i2c_write(i2c_dev, AST_I2CD_TX_DMA_ENABLE | AST_I2CD_S_TX_CMD,I2C_CMD_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_TX_DMA_ENABLE | AST_I2CD_S_TX_CMD,I2C_CMD_REG); - } else { - //DMA prepare rx - dev_dbg(i2c_dev->dev, "(-->) slave rx DMA \n"); - ast_i2c_write(i2c_dev, i2c_dev->dma_addr, I2C_DMA_BASE_REG); - ast_i2c_write(i2c_dev, (AST_I2C_DMA_SIZE-1), I2C_DMA_LEN_REG); -- ast_i2c_write(i2c_dev, AST_I2CD_RX_DMA_ENABLE, I2C_CMD_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_RX_DMA_ENABLE, I2C_CMD_REG); - } - } else { - dev_dbg(i2c_dev->dev,"M cnt %d, xf len %d \n",i2c_dev->master_xfer_cnt, i2c_dev->master_msgs->len); - if(i2c_dev->master_xfer_cnt == -1) { -- //send start -+ //send start - dev_dbg(i2c_dev->dev, " %sing %d byte%s %s 0x%02x\n", - i2c_dev->master_msgs->flags & I2C_M_RD ? "read" : "write", - i2c_dev->master_msgs->len, i2c_dev->master_msgs->len > 1 ? "s" : "", - i2c_dev->master_msgs->flags & I2C_M_RD ? "from" : "to", i2c_dev->master_msgs->addr); - - if(i2c_dev->master_msgs->flags & I2C_M_RD) { -- //workaround .. HW can;t send start read addr with buff mode -+ //workaround .. HW can;t send start read addr with buff mode - cmd = AST_I2CD_M_START_CMD | AST_I2CD_M_TX_CMD; - ast_i2c_write(i2c_dev, (i2c_dev->master_msgs->addr <<1) |0x1, I2C_BYTE_BUF_REG); - - // tx_buf[0] = (i2c_dev->master_msgs->addr <<1); //+1 - i2c_dev->master_xfer_len = 1; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - } else { - //tx -- cmd = AST_I2CD_M_START_CMD | AST_I2CD_M_TX_CMD | AST_I2CD_TX_DMA_ENABLE; -+ cmd = AST_I2CD_M_START_CMD | AST_I2CD_M_TX_CMD | AST_I2CD_TX_DMA_ENABLE; - - i2c_dev->dma_buf[0] = (i2c_dev->master_msgs->addr <<1); //+1 - //next data write -@@ -520,44 +552,44 @@ static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - i2c_dev->master_xfer_len = AST_I2C_DMA_SIZE; - else - i2c_dev->master_xfer_len = i2c_dev->master_msgs->len + 1; -- -+ - for(i = 1; i < i2c_dev->master_xfer_len; i++) - i2c_dev->dma_buf[i] = i2c_dev->master_msgs->buf[i2c_dev->master_xfer_cnt+i]; -- -+ - if (i2c_dev->xfer_last == 1) { - dev_dbg(i2c_dev->dev, "last stop \n"); - cmd |= AST_I2CD_M_STOP_CMD; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & -- ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -- -+ ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ - } else { - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - } - ast_i2c_write(i2c_dev, i2c_dev->dma_addr, I2C_DMA_BASE_REG); - ast_i2c_write(i2c_dev, (i2c_dev->master_xfer_len-1), I2C_DMA_LEN_REG); -- -+ - } -- ast_i2c_write(i2c_dev, cmd, I2C_CMD_REG); -+ ast_i2c_write(i2c_dev, cmd, I2C_CMD_REG); - dev_dbg(i2c_dev->dev, "txfer size %d , cmd = %x \n",i2c_dev->master_xfer_len, cmd); - - } else if (i2c_dev->master_xfer_cnt < i2c_dev->master_msgs->len){ -- //Next send -+ //Next send - if(i2c_dev->master_msgs->flags & I2C_M_RD) { - //Rx data - cmd = AST_I2CD_M_RX_CMD | AST_I2CD_RX_DMA_ENABLE; -- -+ - if((i2c_dev->master_msgs->len - i2c_dev->master_xfer_cnt) > AST_I2C_DMA_SIZE) { - i2c_dev->master_xfer_len = AST_I2C_DMA_SIZE; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | - AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); -- -+ - } else { - i2c_dev->master_xfer_len = i2c_dev->master_msgs->len - i2c_dev->master_xfer_cnt; - if((i2c_dev->master_msgs->flags & I2C_M_RECV_LEN) && (i2c_dev->blk_r_flag == 0)) { - dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN \n"); - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); - } else { - #ifdef CONFIG_AST1010 - //Workaround for ast1010 can't send NACK -@@ -568,7 +600,7 @@ static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - i2c_dev->master_xfer_mode = BYTE_XFER; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & - ~AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); -- -+ - } else if (i2c_dev->master_xfer_len > 1) { - i2c_dev->master_xfer_len -=1; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -@@ -578,8 +610,8 @@ static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - } - #else - if(i2c_dev->xfer_last == 1) { -- dev_dbg(i2c_dev->dev, "last stop \n"); -- cmd |= AST_I2CD_M_STOP_CMD; -+ dev_dbg(i2c_dev->dev, "last stop \n"); -+ cmd |= AST_I2CD_M_STOP_CMD; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & - ~AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); - } else { -@@ -588,9 +620,9 @@ static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - } - //TODO check.... - cmd |= AST_I2CD_M_S_RX_CMD_LAST; --#endif -+#endif - } -- -+ - } - ast_i2c_write(i2c_dev, i2c_dev->dma_addr, I2C_DMA_BASE_REG); - ast_i2c_write(i2c_dev, i2c_dev->master_xfer_len-1, I2C_DMA_LEN_REG); -@@ -603,23 +635,23 @@ static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - if((i2c_dev->master_msgs->len - i2c_dev->master_xfer_cnt) > AST_I2C_DMA_SIZE) { - i2c_dev->master_xfer_len = AST_I2C_DMA_SIZE; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -- -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ - } else { - i2c_dev->master_xfer_len = i2c_dev->master_msgs->len - i2c_dev->master_xfer_cnt; - if(i2c_dev->xfer_last == 1) { - dev_dbg(i2c_dev->dev, "last stop \n"); - cmd |= AST_I2CD_M_STOP_CMD; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & -- ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -- -+ ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ - } else { - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - } - } - -- for(i = 0; i < i2c_dev->master_xfer_len; i++) -+ for(i = 0; i < i2c_dev->master_xfer_len; i++) - i2c_dev->dma_buf[i] = i2c_dev->master_msgs->buf[i2c_dev->master_xfer_cnt + i]; - - ast_i2c_write(i2c_dev, i2c_dev->dma_addr, I2C_DMA_BASE_REG); -@@ -627,33 +659,33 @@ static void ast_i2c_do_dma_xfer(struct ast_i2c_dev *i2c_dev) - ast_i2c_write(i2c_dev, cmd , I2C_CMD_REG); - dev_dbg(i2c_dev->dev, "txfer size %d , cmd = %x \n",i2c_dev->master_xfer_len, cmd); - -- } -+ } - }else { -- //should send next msg -+ //should send next msg - if(i2c_dev->master_xfer_cnt != i2c_dev->master_msgs->len) - printk("complete rx ... bus=%d addr=0x%x (%d vs. %d) ERROR\n", - i2c_dev->bus_id, i2c_dev->master_msgs->addr, - i2c_dev->master_xfer_cnt, i2c_dev->master_msgs->len); -- -+ - dev_dbg(i2c_dev->dev, "ast_i2c_do_byte_xfer complete \n"); - i2c_dev->cmd_err = 0; -- complete(&i2c_dev->cmd_complete); -+ complete(&i2c_dev->cmd_complete); - } -- -+ - } - -- -+ - } - --static void ast_i2c_do_pool_xfer(struct ast_i2c_dev *i2c_dev) -+static void ast_i2c_do_pool_xfer(struct ast_i2c_dev *i2c_dev) - { - u32 cmd = 0; - int i; - u32 *tx_buf; - - i2c_dev->master_xfer_mode = BUFF_XFER; -- i2c_dev->slave_xfer_mode = BUFF_XFER; -- -+ i2c_dev->slave_xfer_mode = BUFF_XFER; -+ - #if defined(CONFIG_ARCH_AST2400) - ast_i2c_write(i2c_dev, - (ast_i2c_read(i2c_dev, I2C_FUN_CTRL_REG) & -@@ -665,15 +697,15 @@ static void ast_i2c_do_pool_xfer(struct ast_i2c_dev *i2c_dev) - tx_buf = (u32 *) i2c_dev->req_page->page_addr; - - -- if(i2c_dev->slave_operation == 1) { -+ if(i2c_dev->slave_operation == 1) { - if(i2c_dev->slave_msgs->flags & I2C_M_RD) { - dev_dbg(i2c_dev->dev, "(<--) slave tx buf \n"); -- -+ - if(i2c_dev->slave_msgs->len > i2c_dev->req_page->page_size) - i2c_dev->slave_xfer_len = i2c_dev->req_page->page_size; - else - i2c_dev->slave_xfer_len = i2c_dev->slave_msgs->len; -- -+ - for(i = 0; i< i2c_dev->slave_xfer_len; i++) { - if(i%4 == 0) - tx_buf[i/4] = 0; -@@ -681,80 +713,80 @@ static void ast_i2c_do_pool_xfer(struct ast_i2c_dev *i2c_dev) - dev_dbg(i2c_dev->dev, "[%x] ",tx_buf[i/4]); - } - dev_dbg(i2c_dev->dev, "\n"); -- -- ast_i2c_write(i2c_dev, AST_I2CD_TX_DATA_BUF_END_SET((i2c_dev->slave_xfer_len-1)) | -- AST_I2CD_BUF_BASE_ADDR_SET((i2c_dev->req_page->page_addr_point)), -+ -+ ast_i2c_write(i2c_dev, AST_I2CD_TX_DATA_BUF_END_SET((i2c_dev->slave_xfer_len-1)) | -+ AST_I2CD_BUF_BASE_ADDR_SET((i2c_dev->req_page->page_addr_point)), - I2C_BUF_CTRL_REG); -- -+ - ast_i2c_write(i2c_dev, AST_I2CD_TX_BUFF_ENABLE | AST_I2CD_S_TX_CMD, I2C_CMD_REG); - } else { - //prepare for new rx - dev_dbg(i2c_dev->dev, "(-->) slave prepare rx buf \n"); -- ast_i2c_write(i2c_dev, -+ ast_i2c_write(i2c_dev, - AST_I2CD_RX_BUF_END_ADDR_SET((i2c_dev->req_page->page_size-1)) | - AST_I2CD_BUF_BASE_ADDR_SET((i2c_dev->req_page->page_addr_point)), - I2C_BUF_CTRL_REG); - -- ast_i2c_write(i2c_dev, AST_I2CD_RX_BUFF_ENABLE, I2C_CMD_REG); -- -+ ast_i2c_write(i2c_dev, AST_I2CD_RX_BUFF_ENABLE, I2C_CMD_REG); -+ - } - } else { - dev_dbg(i2c_dev->dev,"M cnt %d, xf len %d \n",i2c_dev->master_xfer_cnt, i2c_dev->master_msgs->len); - if(i2c_dev->master_xfer_cnt == -1) { -- //send start -+ //send start - dev_dbg(i2c_dev->dev, " %sing %d byte%s %s 0x%02x\n", - i2c_dev->master_msgs->flags & I2C_M_RD ? "read" : "write", - i2c_dev->master_msgs->len, i2c_dev->master_msgs->len > 1 ? "s" : "", - i2c_dev->master_msgs->flags & I2C_M_RD ? "from" : "to", i2c_dev->master_msgs->addr); - - if(i2c_dev->master_msgs->flags & I2C_M_RD) { --//workaround .. HW can;t send start read addr with buff mode -+//workaround .. HW can;t send start read addr with buff mode - cmd = AST_I2CD_M_START_CMD | AST_I2CD_M_TX_CMD; - ast_i2c_write(i2c_dev, (i2c_dev->master_msgs->addr <<1) |0x1, I2C_BYTE_BUF_REG); - - // tx_buf[0] = (i2c_dev->master_msgs->addr <<1); //+1 - i2c_dev->master_xfer_len = 1; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - } else { -- cmd = AST_I2CD_M_START_CMD | AST_I2CD_M_TX_CMD | AST_I2CD_TX_BUFF_ENABLE; -+ cmd = AST_I2CD_M_START_CMD | AST_I2CD_M_TX_CMD | AST_I2CD_TX_BUFF_ENABLE; - tx_buf[0] = (i2c_dev->master_msgs->addr <<1); //+1 - //next data write - if((i2c_dev->master_msgs->len + 1) > i2c_dev->req_page->page_size) - i2c_dev->master_xfer_len = i2c_dev->req_page->page_size; - else - i2c_dev->master_xfer_len = i2c_dev->master_msgs->len + 1; -- -+ - for(i = 1; i < i2c_dev->master_xfer_len; i++) { - if(i%4 == 0) - tx_buf[i/4] = 0; - tx_buf[i/4] |= (i2c_dev->master_msgs->buf[i2c_dev->master_xfer_cnt + i] << ((i%4)*8)) ; - } -- -+ - if (i2c_dev->xfer_last == 1) { - dev_dbg(i2c_dev->dev, "last stop \n"); - cmd |= AST_I2CD_M_STOP_CMD; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & -- ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -- -+ ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ - } else { - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - } -- ast_i2c_write(i2c_dev, -+ ast_i2c_write(i2c_dev, - AST_I2CD_TX_DATA_BUF_END_SET((i2c_dev->master_xfer_len - 1)) | - AST_I2CD_BUF_BASE_ADDR_SET(i2c_dev->req_page->page_addr_point), - I2C_BUF_CTRL_REG); - } -- ast_i2c_write(i2c_dev, cmd, I2C_CMD_REG); -+ ast_i2c_write(i2c_dev, cmd, I2C_CMD_REG); - dev_dbg(i2c_dev->dev, "txfer size %d , cmd = %x \n",i2c_dev->master_xfer_len, cmd); - - } else if (i2c_dev->master_xfer_cnt < i2c_dev->master_msgs->len){ -- //Next send -+ //Next send - if(i2c_dev->master_msgs->flags & I2C_M_RD) { - //Rx data - cmd = AST_I2CD_M_RX_CMD | AST_I2CD_RX_BUFF_ENABLE; -- -+ - if((i2c_dev->master_msgs->len - i2c_dev->master_xfer_cnt) > i2c_dev->req_page->page_size) { - i2c_dev->master_xfer_len = i2c_dev->req_page->page_size; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -@@ -764,11 +796,11 @@ static void ast_i2c_do_pool_xfer(struct ast_i2c_dev *i2c_dev) - if((i2c_dev->master_msgs->flags & I2C_M_RECV_LEN) && (i2c_dev->blk_r_flag == 0)) { - dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN \n"); - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); - } else { - if(i2c_dev->xfer_last == 1) { -- dev_dbg(i2c_dev->dev, "last stop \n"); -- cmd |= AST_I2CD_M_STOP_CMD; -+ dev_dbg(i2c_dev->dev, "last stop \n"); -+ cmd |= AST_I2CD_M_STOP_CMD; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & - ~AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); - } else { -@@ -791,46 +823,46 @@ static void ast_i2c_do_pool_xfer(struct ast_i2c_dev *i2c_dev) - if((i2c_dev->master_msgs->len - i2c_dev->master_xfer_cnt) > i2c_dev->req_page->page_size) { - i2c_dev->master_xfer_len = i2c_dev->req_page->page_size; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -- -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ - } else { - i2c_dev->master_xfer_len = i2c_dev->master_msgs->len - i2c_dev->master_xfer_cnt; - if(i2c_dev->xfer_last == 1) { - dev_dbg(i2c_dev->dev, "last stop \n"); - cmd |= AST_I2CD_M_STOP_CMD; - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & -- ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -- -+ ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ - } else { - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - } - } -- -+ - for(i = 0; i < i2c_dev->master_xfer_len; i++) { - if(i%4 == 0) - tx_buf[i/4] = 0; - tx_buf[i/4] |= (i2c_dev->master_msgs->buf[i2c_dev->master_xfer_cnt + i] << ((i%4)*8)) ; - } --// printk("count %x \n",ast_i2c_read(i2c_dev,I2C_CMD_REG)); -- ast_i2c_write(i2c_dev, -+// printk("count %x \n",ast_i2c_read(i2c_dev,I2C_CMD_REG)); -+ ast_i2c_write(i2c_dev, - AST_I2CD_TX_DATA_BUF_END_SET((i2c_dev->master_xfer_len - 1)) | - AST_I2CD_BUF_BASE_ADDR_SET(i2c_dev->req_page->page_addr_point), - I2C_BUF_CTRL_REG); -- -+ - ast_i2c_write(i2c_dev, cmd , I2C_CMD_REG); - dev_dbg(i2c_dev->dev, "txfer size %d , cmd = %x \n",i2c_dev->master_xfer_len, cmd); - } - } else { -- //should send next msg -+ //should send next msg - if(i2c_dev->master_xfer_cnt != i2c_dev->master_msgs->len) - printk("complete rx ... bus=%d addr=0x%x (%d vs. %d) ERROR\n", - i2c_dev->bus_id, i2c_dev->master_msgs->addr, - i2c_dev->master_xfer_cnt, i2c_dev->master_msgs->len); -- -+ - dev_dbg(i2c_dev->dev, "ast_i2c_do_byte_xfer complete \n"); - i2c_dev->cmd_err = 0; -- complete(&i2c_dev->cmd_complete); -+ complete(&i2c_dev->cmd_complete); - } - - } -@@ -843,16 +875,16 @@ static void ast_i2c_do_byte_xfer(struct ast_i2c_dev *i2c_dev) - i2c_dev->master_xfer_mode = BYTE_XFER; - i2c_dev->master_xfer_len = 1; - -- i2c_dev->slave_xfer_mode = BYTE_XFER; -+ i2c_dev->slave_xfer_mode = BYTE_XFER; - i2c_dev->slave_xfer_len = 1; -- -- if(i2c_dev->slave_operation == 1) { -+ -+ if(i2c_dev->slave_operation == 1) { - dev_dbg(i2c_dev->dev,"S cnt %d, xf len %d \n",i2c_dev->slave_xfer_cnt, i2c_dev->slave_msgs->len); - if(i2c_dev->slave_msgs->flags & I2C_M_RD) { - //READ <-- TX - dev_dbg(i2c_dev->dev, "(<--) slave(tx) buf %d [%x]\n", i2c_dev->slave_xfer_cnt, i2c_dev->slave_msgs->buf[i2c_dev->slave_xfer_cnt]); - ast_i2c_write(i2c_dev, i2c_dev->slave_msgs->buf[i2c_dev->slave_xfer_cnt], I2C_BYTE_BUF_REG); -- ast_i2c_write(i2c_dev, AST_I2CD_S_TX_CMD, I2C_CMD_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_S_TX_CMD, I2C_CMD_REG); - } else { - // Write -->Rx - //no need to handle in byte mode -@@ -862,21 +894,21 @@ static void ast_i2c_do_byte_xfer(struct ast_i2c_dev *i2c_dev) - } else { - dev_dbg(i2c_dev->dev,"M cnt %d, xf len %d \n",i2c_dev->master_xfer_cnt, i2c_dev->master_msgs->len); - if(i2c_dev->master_xfer_cnt == -1) { -- //first start -+ //first start - dev_dbg(i2c_dev->dev, " %sing %d byte%s %s 0x%02x\n", - i2c_dev->master_msgs->flags & I2C_M_RD ? "read" : "write", - i2c_dev->master_msgs->len, i2c_dev->master_msgs->len > 1 ? "s" : "", - i2c_dev->master_msgs->flags & I2C_M_RD ? "from" : "to", i2c_dev->master_msgs->addr); -- -- -- if(i2c_dev->master_msgs->flags & I2C_M_RD) -+ -+ -+ if(i2c_dev->master_msgs->flags & I2C_M_RD) - ast_i2c_write(i2c_dev, (i2c_dev->master_msgs->addr <<1) |0x1, I2C_BYTE_BUF_REG); - else - ast_i2c_write(i2c_dev, (i2c_dev->master_msgs->addr <<1), I2C_BYTE_BUF_REG); - - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -- -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ - ast_i2c_write(i2c_dev, AST_I2CD_M_TX_CMD | AST_I2CD_M_START_CMD, I2C_CMD_REG); - - -@@ -888,7 +920,7 @@ static void ast_i2c_do_byte_xfer(struct ast_i2c_dev *i2c_dev) - if((i2c_dev->master_msgs->flags & I2C_M_RECV_LEN) && (i2c_dev->master_xfer_cnt == 0)) { - dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN \n"); - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); - - } else if((i2c_dev->xfer_last == 1) && (i2c_dev->master_xfer_cnt + 1 == i2c_dev->master_msgs->len)) { - cmd |= AST_I2CD_M_S_RX_CMD_LAST | AST_I2CD_M_STOP_CMD; -@@ -897,11 +929,11 @@ static void ast_i2c_do_byte_xfer(struct ast_i2c_dev *i2c_dev) - ~AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); - } else { - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_RX_DOWN_INTR_EN, I2C_INTR_CTRL_REG); - } - - dev_dbg(i2c_dev->dev, "(<--) rx byte, cmd = %x \n",cmd); -- -+ - ast_i2c_write(i2c_dev, cmd, I2C_CMD_REG); - - -@@ -911,29 +943,29 @@ static void ast_i2c_do_byte_xfer(struct ast_i2c_dev *i2c_dev) - ast_i2c_write(i2c_dev, *(xfer_buf + i2c_dev->master_xfer_cnt), I2C_BYTE_BUF_REG); - if((i2c_dev->xfer_last == 1) && (i2c_dev->master_xfer_cnt + 1 == i2c_dev->master_msgs->len)) { - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) & -- ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ ~AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - ast_i2c_write(i2c_dev, AST_I2CD_M_TX_CMD | AST_I2CD_M_STOP_CMD, I2C_CMD_REG); - } else { - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -- AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); -+ AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - ast_i2c_write(i2c_dev, AST_I2CD_M_TX_CMD, I2C_CMD_REG); - } - } -- -+ - } else { -- //should send next msg -+ //should send next msg - if(i2c_dev->master_xfer_cnt != i2c_dev->master_msgs->len) - printk("CNT ERROR bus=%d addr=0x%x (%d vs. %d)\n", - i2c_dev->bus_id, i2c_dev->master_msgs->addr, - i2c_dev->master_xfer_cnt, i2c_dev->master_msgs->len); -- -+ - dev_dbg(i2c_dev->dev, "ast_i2c_do_byte_xfer complete \n"); - i2c_dev->cmd_err = 0; -- complete(&i2c_dev->cmd_complete); -- -+ complete(&i2c_dev->cmd_complete); -+ - } - } -- -+ - } - - static void ast_i2c_slave_xfer_done(struct ast_i2c_dev *i2c_dev) -@@ -941,8 +973,8 @@ static void ast_i2c_slave_xfer_done(struct ast_i2c_dev *i2c_dev) - u32 xfer_len; - int i; - u8 *rx_buf; -- -- dev_dbg(i2c_dev->dev, "ast_i2c_slave_xfer_done [%d]\n",i2c_dev->slave_xfer_mode); -+ -+ dev_dbg(i2c_dev->dev, "ast_i2c_slave_xfer_done [%d]\n",i2c_dev->slave_xfer_mode); - - if (i2c_dev->slave_msgs->flags & I2C_M_RD) { - //tx done , only check tx count ... -@@ -979,16 +1011,16 @@ static void ast_i2c_slave_xfer_done(struct ast_i2c_dev *i2c_dev) - xfer_len = AST_I2CD_RX_BUF_ADDR_GET(ast_i2c_read(i2c_dev, I2C_BUF_CTRL_REG)); - if(xfer_len == 0) - xfer_len = AST_I2C_PAGE_SIZE; -- -+ - dev_dbg(i2c_dev->dev,"rx buff done len %d \n",xfer_len); -- -+ - rx_buf = (u8 *)i2c_dev->req_page->page_addr; -- -+ - for(i=0;i<xfer_len;i++) { - i2c_dev->slave_msgs->buf[i2c_dev->slave_xfer_cnt+i] = rx_buf[i]; - dev_dbg(i2c_dev->dev,"%d, [%x] \n",i2c_dev->slave_xfer_cnt+i ,i2c_dev->slave_msgs->buf[i2c_dev->slave_xfer_cnt+i]); - } -- -+ - } else { - //RX DMA DOWN - xfer_len = ast_i2c_read(i2c_dev, I2C_DMA_LEN_REG); -@@ -996,15 +1028,15 @@ static void ast_i2c_slave_xfer_done(struct ast_i2c_dev *i2c_dev) - xfer_len = i2c_dev->slave_xfer_len; - else - xfer_len = i2c_dev->slave_xfer_len - xfer_len - 1; -- -+ - dev_dbg(i2c_dev->dev, " rx dma done len %d \n", xfer_len); -- -+ - for(i=0;i<xfer_len;i++) { - i2c_dev->slave_msgs->buf[i2c_dev->slave_xfer_cnt+i] = i2c_dev->dma_buf[i]; - dev_dbg(i2c_dev->dev,"%d, [%x] \n",i2c_dev->slave_xfer_cnt+i ,i2c_dev->slave_msgs->buf[i2c_dev->slave_xfer_cnt+i]); - } - } -- -+ - } - - if(xfer_len !=i2c_dev->slave_xfer_len) { -@@ -1012,7 +1044,7 @@ static void ast_i2c_slave_xfer_done(struct ast_i2c_dev *i2c_dev) - printk(" **slave xfer error ====\n"); - //should goto stop.... - } else -- i2c_dev->slave_xfer_cnt += i2c_dev->slave_xfer_len; -+ i2c_dev->slave_xfer_cnt += i2c_dev->slave_xfer_len; - - - if((i2c_dev->slave_event == I2C_SLAVE_EVENT_NACK) || (i2c_dev->slave_event == I2C_SLAVE_EVENT_STOP)) { -@@ -1020,33 +1052,33 @@ static void ast_i2c_slave_xfer_done(struct ast_i2c_dev *i2c_dev) - ast_i2c_slave_rdwr_xfer(i2c_dev); - #else - i2c_dev->ast_i2c_data->slave_xfer(i2c_dev->slave_event, &(i2c_dev->slave_msgs)); --#endif -+#endif - i2c_dev->slave_xfer_cnt = 0; - } else { - if(i2c_dev->slave_xfer_cnt == i2c_dev->slave_msgs->len) { -- dev_dbg(i2c_dev->dev,"slave next msgs \n"); -+ dev_dbg(i2c_dev->dev,"slave next msgs \n"); - #ifdef CONFIG_AST_I2C_SLAVE_RDWR - ast_i2c_slave_rdwr_xfer(i2c_dev); - #else - i2c_dev->ast_i2c_data->slave_xfer(i2c_dev->slave_event, &(i2c_dev->slave_msgs)); --#endif -+#endif - - i2c_dev->slave_xfer_cnt = 0; -- } -+ } - i2c_dev->do_slave_xfer(i2c_dev); - } - - - if(AST_I2CD_IDLE == i2c_dev->state) { -- dev_dbg(i2c_dev->dev,"** Slave go IDLE **\n"); -+ dev_dbg(i2c_dev->dev,"** Slave go IDLE **\n"); - i2c_dev->slave_operation = 0; -- -+ - if(i2c_dev->slave_xfer_mode == BUFF_XFER) { - i2c_dev->ast_i2c_data->free_pool_buff_page(i2c_dev->req_page); -- } -- -- } -- -+ } -+ -+ } -+ - } - - //TX/Rx Done -@@ -1057,7 +1089,7 @@ static void ast_i2c_master_xfer_done(struct ast_i2c_dev *i2c_dev) - u8 *pool_buf; - unsigned long flags; - -- spin_lock_irqsave(&g_master_lock, flags); -+ spin_lock_irqsave(&i2c_dev->master_lock, flags); - - /* - * This function shall be involked during interrupt handling. -@@ -1068,8 +1100,8 @@ static void ast_i2c_master_xfer_done(struct ast_i2c_dev *i2c_dev) - goto unlock_out; - } - -- dev_dbg(i2c_dev->dev, "ast_i2c_master_xfer_done mode[%d]\n",i2c_dev->master_xfer_mode); -- -+ dev_dbg(i2c_dev->dev, "ast_i2c_master_xfer_done mode[%d]\n",i2c_dev->master_xfer_mode); -+ - if (i2c_dev->master_msgs->flags & I2C_M_RD) { - if(i2c_dev->master_xfer_cnt == -1) { - xfer_len = 1; -@@ -1077,16 +1109,16 @@ static void ast_i2c_master_xfer_done(struct ast_i2c_dev *i2c_dev) - } - if(i2c_dev->master_xfer_mode == BYTE_XFER) { - if ((i2c_dev->master_msgs->flags & I2C_M_RECV_LEN) && (i2c_dev->blk_r_flag == 0)) { -- i2c_dev->master_msgs->len += (ast_i2c_read(i2c_dev,I2C_BYTE_BUF_REG) & AST_I2CD_RX_BYTE_BUFFER) >> 8; -+ i2c_dev->master_msgs->len += (ast_i2c_read(i2c_dev,I2C_BYTE_BUF_REG) & AST_I2CD_RX_BYTE_BUFFER) >> 8; - i2c_dev->blk_r_flag = 1; -- dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN %d \n", i2c_dev->master_msgs->len -1); -+ dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN %d \n", i2c_dev->master_msgs->len -1); - } - xfer_len = 1; - i2c_dev->master_msgs->buf[i2c_dev->master_xfer_cnt] = (ast_i2c_read(i2c_dev,I2C_BYTE_BUF_REG) & AST_I2CD_RX_BYTE_BUFFER) >> 8; - } else if (i2c_dev->master_xfer_mode == BUFF_XFER) { - pool_buf = (u8 *)i2c_dev->req_page->page_addr; - xfer_len = AST_I2CD_RX_BUF_ADDR_GET(ast_i2c_read(i2c_dev, I2C_BUF_CTRL_REG)); -- -+ - if(xfer_len == 0) - xfer_len = AST_I2C_PAGE_SIZE; - -@@ -1098,7 +1130,7 @@ static void ast_i2c_master_xfer_done(struct ast_i2c_dev *i2c_dev) - if ((i2c_dev->master_msgs->flags & I2C_M_RECV_LEN) && (i2c_dev->blk_r_flag == 0)) { - i2c_dev->master_msgs->len += pool_buf[0]; - i2c_dev->blk_r_flag = 1; -- dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN %d \n", i2c_dev->master_msgs->len -1); -+ dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN %d \n", i2c_dev->master_msgs->len -1); - } - } else { - //DMA Mode -@@ -1114,13 +1146,13 @@ static void ast_i2c_master_xfer_done(struct ast_i2c_dev *i2c_dev) - dev_dbg(i2c_dev->dev, "buf[%x] \n", i2c_dev->dma_buf[i]); - dev_dbg(i2c_dev->dev, "buf[%x] \n", i2c_dev->dma_buf[i+1]); - } -- -+ - if ((i2c_dev->master_msgs->flags & I2C_M_RECV_LEN) && (i2c_dev->blk_r_flag == 0)) { - i2c_dev->master_msgs->len += i2c_dev->dma_buf[0]; - i2c_dev->blk_r_flag = 1; -- dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN %d \n", i2c_dev->master_msgs->len -1); -+ dev_dbg(i2c_dev->dev, "I2C_M_RECV_LEN %d \n", i2c_dev->master_msgs->len -1); - } -- -+ - } - - }else { -@@ -1153,28 +1185,28 @@ next_xfer: - i2c_dev->cmd_err = 1; - goto done_out; - } else -- i2c_dev->master_xfer_cnt += i2c_dev->master_xfer_len; -+ i2c_dev->master_xfer_cnt += i2c_dev->master_xfer_len; - - if(i2c_dev->master_xfer_cnt != i2c_dev->master_msgs->len) { - dev_dbg(i2c_dev->dev,"do next cnt \n"); - i2c_dev->do_master_xfer(i2c_dev); - } else { --#if 0 -- int i; -+#if 0 -+ int i; - printk(" ===== \n"); - for(i=0;i<i2c_dev->master_msgs->len;i++) - printk("rx buf i,[%x]\n",i,i2c_dev->master_msgs->buf[i]); -- printk(" ===== \n"); --#endif -+ printk(" ===== \n"); -+#endif - i2c_dev->cmd_err = 0; - - done_out: - dev_dbg(i2c_dev->dev,"msgs complete \n"); -- complete(&i2c_dev->cmd_complete); -+ complete(&i2c_dev->cmd_complete); - } - - unlock_out: -- spin_unlock_irqrestore(&g_master_lock, flags); -+ spin_unlock_irqrestore(&i2c_dev->master_lock, flags); - } - - static void ast_i2c_slave_addr_match(struct ast_i2c_dev *i2c_dev) -@@ -1187,7 +1219,7 @@ static void ast_i2c_slave_addr_match(struct ast_i2c_dev *i2c_dev) - i2c_dev->slave_msgs->buf[0] = match; - dev_dbg(i2c_dev->dev, "S Start Addr match [%x] \n",match); - -- -+ - if(match & 1) { - i2c_dev->slave_event = I2C_SLAVE_EVENT_START_READ; - } else { -@@ -1201,7 +1233,7 @@ static void ast_i2c_slave_addr_match(struct ast_i2c_dev *i2c_dev) - #else - i2c_dev->ast_i2c_data->slave_xfer(i2c_dev->slave_event, &(i2c_dev->slave_msgs)); - i2c_dev->slave_xfer_cnt = 0; --#endif -+#endif - - //request - if(i2c_dev->ast_i2c_data->slave_dma == BYTE_MODE) -@@ -1211,7 +1243,7 @@ static void ast_i2c_slave_addr_match(struct ast_i2c_dev *i2c_dev) - else { - if(i2c_dev->ast_i2c_data->request_pool_buff_page(&(i2c_dev->req_page)) == 0) - i2c_dev->do_slave_xfer = ast_i2c_do_pool_xfer; -- else -+ else - i2c_dev->do_slave_xfer = ast_i2c_do_byte_xfer; - } - -@@ -1221,7 +1253,7 @@ static void ast_i2c_slave_addr_match(struct ast_i2c_dev *i2c_dev) - - static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - { -- u32 sts; -+ u32 sts; - - struct ast_i2c_dev *i2c_dev = dev_id; - u32 isr_sts = readl(i2c_dev->ast_i2c_data->reg_gr); -@@ -1231,7 +1263,7 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - - i2c_dev->state = (ast_i2c_read(i2c_dev,I2C_CMD_REG) >> 19) & 0xf; - sts = ast_i2c_read(i2c_dev,I2C_INTR_STS_REG); --// printk("ISR : %x , sts [%x]\n",sts , xfer_sts); -+// printk("ISR : %x , sts [%x]\n",sts , xfer_sts); - // dev_dbg(i2c_dev->dev,"ISR : %x , sts [%x]\n",sts , xfer_sts); - - // dev_dbg(i2c_dev->dev,"sts machine %x, slave_op %d \n", xfer_sts,i2c_dev->slave_operation); -@@ -1244,9 +1276,9 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - I2C_INTR_CTRL_REG); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_SMBUS_ALT, I2C_INTR_STS_REG); - ast_master_alert_recv(i2c_dev); -- sts &= ~AST_I2CD_SMBUS_ALT_INTR_EN; -+ sts &= ~AST_I2CD_SMBUS_ALT_INTR_EN; - } -- -+ - if(AST_I2CD_INTR_STS_ABNORMAL & sts) { - i2c_dev->cmd_err |= AST_I2CD_INTR_STS_ABNORMAL; - // Turn off interrupts for further abnormal -@@ -1257,6 +1289,8 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - I2C_INTR_CTRL_REG); - complete(&i2c_dev->cmd_complete); - sts &= ~AST_I2CD_INTR_STS_ABNORMAL; -+ // Need to clear the interrupt -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_ABNORMAL, I2C_INTR_STS_REG); - } - - switch(sts) { -@@ -1265,7 +1299,7 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - i2c_dev->slave_event = I2C_SLAVE_EVENT_READ; - ast_i2c_slave_xfer_done(i2c_dev); - dev_dbg(i2c_dev->dev, "S clear isr: AST_I2CD_INTR_STS_TX_ACK = %x\n",sts); -- ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_ACK, I2C_INTR_STS_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_ACK, I2C_INTR_STS_REG); - } else { - dev_dbg(i2c_dev->dev, "M clear isr: AST_I2CD_INTR_STS_TX_ACK = %x\n",sts); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_ACK, I2C_INTR_STS_REG); -@@ -1280,9 +1314,17 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - ast_i2c_write(i2c_dev, ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | - AST_I2CD_TX_ACK_INTR_EN, I2C_INTR_CTRL_REG); - ast_i2c_master_xfer_done(i2c_dev); -- -+ - } else { -- printk("TODO ...\n"); -+ printk("ast_i2c: TX_ACK | NORMAL_STOP; xfer_last %d\n", i2c_dev->xfer_last); -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_ACK | AST_I2CD_INTR_STS_NORMAL_STOP, I2C_INTR_STS_REG); -+ uint32_t new_val = ast_i2c_read(i2c_dev,I2C_INTR_CTRL_REG) | -+ AST_I2CD_NORMAL_STOP_INTR_EN | -+ AST_I2CD_TX_ACK_INTR_EN; -+ ast_i2c_write(i2c_dev, new_val, I2C_INTR_CTRL_REG); -+ //take care -+ i2c_dev->cmd_err |= AST_LOCKUP_DETECTED; -+ complete(&i2c_dev->cmd_complete); - } - break; - -@@ -1291,8 +1333,8 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - i2c_dev->slave_event = I2C_SLAVE_EVENT_NACK; - ast_i2c_slave_xfer_done(i2c_dev); - dev_dbg(i2c_dev->dev, "S clear isr: AST_I2CD_INTR_STS_TX_NAK = %x\n",sts); -- ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_NAK, I2C_INTR_STS_REG); -- -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_NAK, I2C_INTR_STS_REG); -+ - } else { - dev_dbg(i2c_dev->dev, "M clear isr: AST_I2CD_INTR_STS_TX_NAK = %x\n",sts); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_NAK, I2C_INTR_STS_REG); -@@ -1310,7 +1352,7 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - case AST_I2CD_INTR_STS_TX_NAK | AST_I2CD_INTR_STS_NORMAL_STOP: - if(i2c_dev->slave_operation == 1) { - printk("SLAVE TODO .... \n"); -- -+ - } else { - dev_dbg(i2c_dev->dev, "M clear isr: AST_I2CD_INTR_STS_TX_NAK| AST_I2CD_INTR_STS_NORMAL_STOP = %x\n",sts); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_NAK | AST_I2CD_INTR_STS_NORMAL_STOP, I2C_INTR_STS_REG); -@@ -1320,47 +1362,47 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - } - break; - -- //Issue : Workaround for I2C slave mode -+ //Issue : Workaround for I2C slave mode - case AST_I2CD_INTR_STS_TX_NAK | AST_I2CD_INTR_STS_SLAVE_MATCH: - if(i2c_dev->slave_operation == 1) { - i2c_dev->slave_event = I2C_SLAVE_EVENT_NACK; - ast_i2c_slave_xfer_done(i2c_dev); - ast_i2c_slave_addr_match(i2c_dev); -- ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_NAK | AST_I2CD_INTR_STS_SLAVE_MATCH , I2C_INTR_STS_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_TX_NAK | AST_I2CD_INTR_STS_SLAVE_MATCH , I2C_INTR_STS_REG); - } else { - printk("ERROR !!!!\n"); - } - break; - case AST_I2CD_INTR_STS_RX_DOWN | AST_I2CD_INTR_STS_SLAVE_MATCH: - ast_i2c_slave_addr_match(i2c_dev); -- dev_dbg(i2c_dev->dev, "S clear isr: AST_I2CD_INTR_STS_RX_DOWN | AST_I2CD_INTR_STS_SLAVE_MATCH = %x\n",sts); -+ dev_dbg(i2c_dev->dev, "S clear isr: AST_I2CD_INTR_STS_RX_DOWN | AST_I2CD_INTR_STS_SLAVE_MATCH = %x\n",sts); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_RX_DOWN | AST_I2CD_INTR_STS_SLAVE_MATCH, I2C_INTR_STS_REG); - break; -- -+ - case AST_I2CD_INTR_STS_RX_DOWN: - if(i2c_dev->slave_operation == 1) { - i2c_dev->slave_event = I2C_SLAVE_EVENT_WRITE; - ast_i2c_slave_xfer_done(i2c_dev); - dev_dbg(i2c_dev->dev, "S clear isr: AST_I2CD_INTR_STS_RX_DOWN = %x\n",sts); -- ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_RX_DOWN, I2C_INTR_STS_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_RX_DOWN, I2C_INTR_STS_REG); - } else { - dev_dbg(i2c_dev->dev, "M clear isr: AST_I2CD_INTR_STS_RX_DOWN = %x\n",sts); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_RX_DOWN, I2C_INTR_STS_REG); - ast_i2c_master_xfer_done(i2c_dev); -- -+ - } - break; -- -+ - case AST_I2CD_INTR_STS_NORMAL_STOP: - if(i2c_dev->slave_operation == 1) { - i2c_dev->slave_event = I2C_SLAVE_EVENT_STOP; - ast_i2c_slave_xfer_done(i2c_dev); - dev_dbg(i2c_dev->dev, "S clear isr: AST_I2CD_INTR_STS_NORMAL_STOP = %x\n",sts); -- ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_NORMAL_STOP, I2C_INTR_STS_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_NORMAL_STOP, I2C_INTR_STS_REG); - dev_dbg(i2c_dev->dev, "state [%x] \n",i2c_dev->state); -- } else { -+ } else { - dev_dbg(i2c_dev->dev, "M clear isr: AST_I2CD_INTR_STS_NORMAL_STOP = %x\n",sts); -- ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_NORMAL_STOP, I2C_INTR_STS_REG); -+ ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_NORMAL_STOP, I2C_INTR_STS_REG); - i2c_dev->cmd_err |= AST_I2CD_INTR_STS_NORMAL_STOP; - complete(&i2c_dev->cmd_complete); - } -@@ -1380,24 +1422,24 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - dev_dbg(i2c_dev->dev, "M clear isr: AST_I2CD_INTR_STS_ARBIT_LOSS = %x\n",sts); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_ARBIT_LOSS, I2C_INTR_STS_REG); - i2c_dev->cmd_err |= AST_I2CD_INTR_STS_ARBIT_LOSS; -- complete(&i2c_dev->cmd_complete); -+ complete(&i2c_dev->cmd_complete); - break; - case AST_I2CD_INTR_STS_SCL_TO: - i2c_dev->cmd_err |= AST_I2CD_INTR_STS_SCL_TO; -- complete(&i2c_dev->cmd_complete); -- -+ complete(&i2c_dev->cmd_complete); -+ - break; - case AST_I2CD_INTR_STS_GCALL_ADDR: - i2c_dev->cmd_err |= AST_I2CD_INTR_STS_GCALL_ADDR; -- complete(&i2c_dev->cmd_complete); -+ complete(&i2c_dev->cmd_complete); - - break; - case AST_I2CD_INTR_STS_SMBUS_DEF_ADDR: - break; - case AST_I2CD_INTR_STS_SMBUS_DEV_ALT: -- -+ - break; -- -+ - case AST_I2CD_INTR_STS_SMBUS_ARP_ADDR: - break; - case AST_I2CD_INTR_STS_SDA_DL_TO: -@@ -1405,25 +1447,50 @@ static irqreturn_t i2c_ast_handler(int this_irq, void *dev_id) - case AST_I2CD_INTR_STS_BUS_RECOVER: - dev_dbg(i2c_dev->dev, "M clear isr: AST_I2CD_INTR_STS_BUS_RECOVER= %x\n",sts); - ast_i2c_write(i2c_dev, AST_I2CD_INTR_STS_BUS_RECOVER, I2C_INTR_STS_REG); -- complete(&i2c_dev->cmd_complete); -+ complete(&i2c_dev->cmd_complete); - break; - default: -- if(sts) -- printk("GR %x : No one care : %x, bus_id %d\n",i2c_dev->ast_i2c_data->reg_gr, sts, i2c_dev->bus_id); -- return IRQ_NONE; -+ //TODO: Clearing this interrupt for now, but needs to cleanup this ISR function -+ ast_i2c_write(i2c_dev, sts, I2C_INTR_STS_REG); -+ -+ // Handle Arbitration Loss -+ if (sts & AST_I2CD_INTR_STS_ARBIT_LOSS) { -+ i2c_dev->cmd_err |= AST_I2CD_INTR_STS_ARBIT_LOSS; -+ complete(&i2c_dev->cmd_complete); -+ sts &= (~AST_I2CD_INTR_STS_ARBIT_LOSS); -+ } -+ -+ // Handle the write transaction ACK -+ if (sts & AST_I2CD_INTR_STS_TX_ACK) { -+ ast_i2c_master_xfer_done(i2c_dev); -+ complete(&i2c_dev->cmd_complete); -+ sts &= (~AST_I2CD_INTR_STS_TX_ACK); -+ } -+ -+ // Handle the Slave address match -+ if (sts & AST_I2CD_INTR_STS_SLAVE_MATCH) { -+ ast_i2c_slave_addr_match(i2c_dev); -+ sts &= (~AST_I2CD_INTR_STS_SLAVE_MATCH); -+ } -+ -+ // TODO: Debug print for any unhandled condition -+ if(sts) { -+ printk("GR %x : Status : %x, bus_id %d\n",i2c_dev->ast_i2c_data->reg_gr, sts, i2c_dev->bus_id); -+ } -+ -+ return IRQ_HANDLED; - } - - return IRQ_HANDLED; -- - } - - static int ast_i2c_do_msgs_xfer(struct ast_i2c_dev *i2c_dev, struct i2c_msg *msgs, int num) - { - int i; -- int ret = 1; -+ int ret = 1; - unsigned long flags; - -- spin_lock_irqsave(&g_master_lock, flags); -+ spin_lock_irqsave(&i2c_dev->master_lock, flags); - - //request - if(i2c_dev->ast_i2c_data->master_dma == BYTE_MODE) -@@ -1433,7 +1500,7 @@ static int ast_i2c_do_msgs_xfer(struct ast_i2c_dev *i2c_dev, struct i2c_msg *msg - else { - if(i2c_dev->ast_i2c_data->request_pool_buff_page(&(i2c_dev->req_page)) == 0) - i2c_dev->do_master_xfer = ast_i2c_do_pool_xfer; -- else -+ else - i2c_dev->do_master_xfer = ast_i2c_do_byte_xfer; - } - -@@ -1458,12 +1525,12 @@ static int ast_i2c_do_msgs_xfer(struct ast_i2c_dev *i2c_dev, struct i2c_msg *msg - - i2c_dev->do_master_xfer(i2c_dev); - -- spin_unlock_irqrestore(&g_master_lock, flags); -+ spin_unlock_irqrestore(&i2c_dev->master_lock, flags); - - ret = wait_for_completion_interruptible_timeout(&i2c_dev->cmd_complete, - i2c_dev->adap.timeout*HZ); -- -- spin_lock_irqsave(&g_master_lock, flags); -+ -+ spin_lock_irqsave(&i2c_dev->master_lock, flags); - i2c_dev->master_msgs = NULL; - - if (ret == 0) { -@@ -1471,25 +1538,30 @@ static int ast_i2c_do_msgs_xfer(struct ast_i2c_dev *i2c_dev, struct i2c_msg *msg - i2c_dev->state = (ast_i2c_read(i2c_dev,I2C_CMD_REG) >> 19) & 0xf; - // printk("sts [%x], isr sts [%x] \n",i2c_dev->state, ast_i2c_read(i2c_dev,I2C_INTR_STS_REG)); - ret = -ETIMEDOUT; -- spin_unlock_irqrestore(&g_master_lock, flags); -+ spin_unlock_irqrestore(&i2c_dev->master_lock, flags); - goto stop; - } -- -+ - if(i2c_dev->cmd_err != 0 && - i2c_dev->cmd_err != AST_I2CD_INTR_STS_NORMAL_STOP) { -+ if (i2c_dev->cmd_err & AST_LOCKUP_DETECTED) { -+ printk("ast-i2c: error got unexpected STOP\n"); -+ // reset the bus -+ ast_i2c_bus_error_recover(i2c_dev); -+ } - ret = -EAGAIN; -- spin_unlock_irqrestore(&g_master_lock, flags); -+ spin_unlock_irqrestore(&i2c_dev->master_lock, flags); - goto stop; - } - } - -- spin_unlock_irqrestore(&g_master_lock, flags); -+ spin_unlock_irqrestore(&i2c_dev->master_lock, flags); - - if(i2c_dev->cmd_err == 0 || - i2c_dev->cmd_err == AST_I2CD_INTR_STS_NORMAL_STOP) { - ret = num; - goto out; -- -+ - } - stop: - init_completion(&i2c_dev->cmd_complete); -@@ -1503,8 +1575,8 @@ out: - //Free .. - if(i2c_dev->master_xfer_mode == BUFF_XFER) { - i2c_dev->ast_i2c_data->free_pool_buff_page(i2c_dev->req_page); -- -- } -+ -+ } - dev_dbg(i2c_dev->dev, "end xfer ret = %d, xfer mode[%d]\n",ret, i2c_dev->master_xfer_mode); - return ret; - -@@ -1521,7 +1593,7 @@ static int ast_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) - /* - * Wait for the bus to become free. - */ -- -+ - ret = ast_i2c_wait_bus_not_busy(i2c_dev); - if (ret) { - dev_err(&i2c_dev->adap.dev, "i2c_ast: timeout waiting for bus free\n"); -@@ -1536,7 +1608,7 @@ static int ast_i2c_xfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) - dev_dbg(&adap->dev, "Retrying transmission [%d]\n",i); - udelay(100); - } -- -+ - ret = -EREMOTEIO; - out: - -@@ -1550,9 +1622,9 @@ static u32 ast_i2c_functionality(struct i2c_adapter *adap) - - static const struct i2c_algorithm i2c_ast_algorithm = { - .master_xfer = ast_i2c_xfer, --#ifdef CONFIG_AST_I2C_SLAVE_RDWR -+#ifdef CONFIG_AST_I2C_SLAVE_RDWR - .slave_xfer = ast_i2c_slave_xfer, --#endif -+#endif - .functionality = ast_i2c_functionality, - }; - -@@ -1572,23 +1644,23 @@ static int ast_i2c_probe(struct platform_device *pdev) - - i2c_dev->ast_i2c_data = pdev->dev.platform_data; - if(i2c_dev->ast_i2c_data->master_dma == BUFF_MODE) { -- dev_dbg(&pdev->dev, "use buffer pool mode 256\n"); -- -+ dev_dbg(&pdev->dev, "use buffer pool mode 256\n"); -+ - } else if ((i2c_dev->ast_i2c_data->master_dma == DMA_MODE) || (i2c_dev->ast_i2c_data->slave_dma == DMA_MODE)) { -- dev_dbg(&pdev->dev, "use dma mode \n"); -+ dev_dbg(&pdev->dev, "use dma mode \n"); - if (!i2c_dev->dma_buf) { - i2c_dev->dma_buf = dma_alloc_coherent(NULL, AST_I2C_DMA_SIZE, &i2c_dev->dma_addr, GFP_KERNEL); - if (!i2c_dev->dma_buf) { - printk("unable to allocate tx Buffer memory\n"); - ret = -ENOMEM; -- goto err_no_dma; -+ goto err_no_dma; - } - if(i2c_dev->dma_addr%4 !=0) { - printk("not 4 byte boundary \n"); - ret = -ENOMEM; -- goto err_no_dma; -- } --// printk("dma_buf = [0x%x] dma_addr = [0x%x], please check 4byte boundary \n",i2c_dev->dma_buf,i2c_dev->dma_addr); -+ goto err_no_dma; -+ } -+// printk("dma_buf = [0x%x] dma_addr = [0x%x], please check 4byte boundary \n",i2c_dev->dma_buf,i2c_dev->dma_addr); - memset (i2c_dev->dma_buf, 0, AST_I2C_DMA_SIZE); - } - -@@ -1596,7 +1668,7 @@ static int ast_i2c_probe(struct platform_device *pdev) - //master_mode 0: use byte mode - dev_dbg(&pdev->dev, "use default byte mode \n"); - } -- -+ - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); - if (NULL == res) { - dev_err(&pdev->dev, "cannot get IORESOURCE_MEM\n"); -@@ -1628,11 +1700,11 @@ static int ast_i2c_probe(struct platform_device *pdev) - if(i2c_dev->irq == IRQ_C0_I2C) { - i2c_dev->bus_id = pdev->id - NUM_BUS; - dev_dbg(&pdev->dev, "C0 :: pdev->id %d , i2c_dev->bus_id = %d, i2c_dev->irq =%d\n",pdev->id, i2c_dev->bus_id,i2c_dev->irq); --#if (CONFIG_AST1070_NR >= 2) -+#if (CONFIG_AST1070_NR >= 2) - } else if(i2c_dev->irq == IRQ_C1_I2C) { - i2c_dev->bus_id = pdev->id - (NUM_BUS + 8); -- dev_dbg(&pdev->dev, "C1 :: pdev->id %d , i2c_dev->bus_id = %d, i2c_dev->irq =%d\n",pdev->id, i2c_dev->bus_id,i2c_dev->irq); --#endif -+ dev_dbg(&pdev->dev, "C1 :: pdev->id %d , i2c_dev->bus_id = %d, i2c_dev->irq =%d\n",pdev->id, i2c_dev->bus_id,i2c_dev->irq); -+#endif - } else { - i2c_dev->bus_id = pdev->id; - dev_dbg(&pdev->dev, "AST pdev->id %d , i2c_dev->bus_id = %d, i2c_dev->irq =%d\n",pdev->id, i2c_dev->bus_id,i2c_dev->irq); -@@ -1644,13 +1716,13 @@ static int ast_i2c_probe(struct platform_device *pdev) - /* Initialize the I2C adapter */ - i2c_dev->adap.owner = THIS_MODULE; - //TODO -- i2c_dev->adap.retries = 0; -+ i2c_dev->adap.retries = 0; - --// i2c_dev->adap.retries = 3; -+// i2c_dev->adap.retries = 3; - -- i2c_dev->adap.timeout = 5; -+ i2c_dev->adap.timeout = 5; - -- i2c_dev->master_xfer_mode = BYTE_XFER; -+ i2c_dev->master_xfer_mode = BYTE_XFER; - - /* - * If "pdev->id" is negative we consider it as zero. -@@ -1662,7 +1734,7 @@ static int ast_i2c_probe(struct platform_device *pdev) - i2c_dev->adap.nr); - - i2c_dev->slave_operation = 0; -- i2c_dev->blk_r_flag = 0; -+ i2c_dev->blk_r_flag = 0; - i2c_dev->adap.algo = &i2c_ast_algorithm; - - ast_i2c_dev_init(i2c_dev); -@@ -1674,8 +1746,11 @@ static int ast_i2c_probe(struct platform_device *pdev) - goto ereqirq; - } - -+ spin_lock_init(&i2c_dev->master_lock); -+ - #ifdef CONFIG_AST_I2C_SLAVE_RDWR - ast_i2c_slave_buff_init(i2c_dev); -+ spin_lock_init(&i2c_dev->slave_rx_lock); - #endif - - i2c_dev->adap.algo_data = i2c_dev; -@@ -1718,7 +1793,7 @@ static int ast_i2c_remove(struct platform_device *pdev) - - platform_set_drvdata(pdev, NULL); - i2c_del_adapter(&i2c_dev->adap); -- -+ - free_irq(i2c_dev->irq, i2c_dev); - - res = platform_get_resource(pdev, IORESOURCE_MEM, 0); -@@ -1742,7 +1817,7 @@ static int ast_i2c_resume(struct platform_device *pdev) - { - //TODO - // struct ast_i2c_dev *i2c_dev = platform_get_drvdata(pdev); -- //Should reset i2c ??? -+ //Should reset i2c ??? - return 0; - } - #else -diff --git a/drivers/i2c/i2c-core.c b/drivers/i2c/i2c-core.c -index c8e3cf6..06d9042 100644 ---- a/drivers/i2c/i2c-core.c -+++ b/drivers/i2c/i2c-core.c -@@ -1064,7 +1064,7 @@ int i2c_transfer(struct i2c_adapter * adap, struct i2c_msg *msgs, int num) - EXPORT_SYMBOL(i2c_transfer); - - #ifdef CONFIG_AST_I2C_SLAVE_RDWR --int i2c_slave_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs) -+int i2c_slave_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, int num) - { - unsigned long orig_jiffies; - int ret, try; -@@ -1075,9 +1075,18 @@ int i2c_slave_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs) - "len=%d\n", (msgs->flags & I2C_S_RD) - ? 'R' : 'W', msgs->addr, msgs->len); - #endif -- i2c_lock_adapter(adap); -+ if (in_atomic() || irqs_disabled()) { -+ ret = mutex_trylock(&adap->bus_lock); -+ if (!ret) -+ /* I2C activity is ongoing. */ -+ return -EAGAIN; -+ } else { -+ mutex_lock_nested(&adap->bus_lock, adap->level); -+ } -+ - ret = adap->algo->slave_xfer(adap, msgs); -- i2c_unlock_adapter(adap); -+ -+ mutex_unlock(&adap->bus_lock); - - return ret; - } else { -diff --git a/drivers/i2c/i2c-dev.c b/drivers/i2c/i2c-dev.c -index 07f393d..82f2c7c 100644 ---- a/drivers/i2c/i2c-dev.c -+++ b/drivers/i2c/i2c-dev.c -@@ -38,7 +38,7 @@ - #include <asm/uaccess.h> - - #ifdef CONFIG_AST_I2C_SLAVE_RDWR --#include <asm/arch/ast_i2c.h> -+#include <plat/ast_i2c.h> - #endif - - static struct i2c_driver i2cdev_driver; -@@ -310,6 +310,113 @@ static noinline int i2cdev_ioctl_rdrw(struct i2c_client *client, - return res; - } - -+static noinline int i2cdev_ioctl_slave_rdrw(struct i2c_client *client, -+ unsigned long arg) -+{ -+ struct i2c_rdwr_ioctl_data rdwr_arg; -+ struct i2c_msg *rdwr_pa; -+ u8 __user **data_ptrs; -+ int i, res; -+ -+ if (copy_from_user(&rdwr_arg, -+ (struct i2c_rdwr_ioctl_data __user *)arg, -+ sizeof(rdwr_arg))) -+ return -EFAULT; -+ -+ /* Put an arbitrary limit on the number of messages that can -+ * be sent at once */ -+ if (rdwr_arg.nmsgs > I2C_RDRW_IOCTL_MAX_MSGS) -+ return -EINVAL; -+ -+ rdwr_pa = (struct i2c_msg *) -+ kmalloc(rdwr_arg.nmsgs * sizeof(struct i2c_msg), -+ GFP_KERNEL); -+ if (!rdwr_pa) -+ return -ENOMEM; -+ -+ if (copy_from_user(rdwr_pa, rdwr_arg.msgs, -+ rdwr_arg.nmsgs * sizeof(struct i2c_msg))) { -+ kfree(rdwr_pa); -+ return -EFAULT; -+ } -+ -+ data_ptrs = kmalloc(rdwr_arg.nmsgs * sizeof(u8 __user *), GFP_KERNEL); -+ if (data_ptrs == NULL) { -+ kfree(rdwr_pa); -+ return -ENOMEM; -+ } -+ -+ res = 0; -+ for (i = 0; i < rdwr_arg.nmsgs; i++) { -+ /* Limit the size of the message to a sane amount; -+ * and don't let length change either. */ -+ if (rdwr_pa[i].len > 8192) { -+ res = -EINVAL; -+ break; -+ } -+ data_ptrs[i] = (u8 __user *)rdwr_pa[i].buf; -+ rdwr_pa[i].buf = kmalloc(rdwr_pa[i].len, GFP_KERNEL); -+ if (rdwr_pa[i].buf == NULL) { -+ res = -ENOMEM; -+ break; -+ } -+ if (copy_from_user(rdwr_pa[i].buf, data_ptrs[i], -+ rdwr_pa[i].len)) { -+ ++i; /* Needs to be kfreed too */ -+ res = -EFAULT; -+ break; -+ } -+ -+ /* From Linux 3.5: */ -+ /* -+ * If the message length is received from the slave (similar -+ * to SMBus block read), we must ensure that the buffer will -+ * be large enough to cope with a message length of -+ * I2C_SMBUS_BLOCK_MAX as this is the maximum underlying bus -+ * drivers allow. The first byte in the buffer must be -+ * pre-filled with the number of extra bytes, which must be -+ * at least one to hold the message length, but can be -+ * greater (for example to account for a checksum byte at -+ * the end of the message.) -+ */ -+ if (rdwr_pa[i].flags & I2C_M_RECV_LEN) { -+ if (!(rdwr_pa[i].flags & I2C_M_RD) || -+ rdwr_pa[i].buf[0] < 1 || -+ rdwr_pa[i].len < rdwr_pa[i].buf[0] + -+ I2C_SMBUS_BLOCK_MAX) { -+ res = -EINVAL; -+ break; -+ } -+ -+ rdwr_pa[i].len = rdwr_pa[i].buf[0]; -+ } -+ -+ } -+ if (res < 0) { -+ int j; -+ for (j = 0; j < i; ++j) -+ kfree(rdwr_pa[j].buf); -+ kfree(data_ptrs); -+ kfree(rdwr_pa); -+ return res; -+ } -+ -+ res = i2c_slave_transfer(client->adapter, rdwr_pa, rdwr_arg.nmsgs); -+ while (i-- > 0) { -+ if (res >= 0 ) { -+ if (copy_to_user(data_ptrs[i], rdwr_pa[i].buf, -+ rdwr_pa[i].len)) -+ res = -EFAULT; -+ -+ rdwr_arg.msgs[i].len = rdwr_pa[i].len; -+ } -+ kfree(rdwr_pa[i].buf); -+ } -+ kfree(data_ptrs); -+ kfree(rdwr_pa); -+ return res; -+} -+ - static noinline int i2cdev_ioctl_smbus(struct i2c_client *client, - unsigned long arg) - { -@@ -448,8 +555,8 @@ static long i2cdev_ioctl(struct file *file, unsigned int cmd, unsigned long arg) - - #ifdef CONFIG_AST_I2C_SLAVE_RDWR - case I2C_SLAVE_RDWR: -- return i2cdev_ioctl_slave_rdrw(client->adapter, (struct i2c_msg __user *)arg); --#endif -+ return i2cdev_ioctl_slave_rdrw(client, arg); -+#endif - - case I2C_SMBUS: - return i2cdev_ioctl_smbus(client, arg); -diff --git a/drivers/net/ftgmac100_26.c b/drivers/net/ftgmac100_26.c -index fdc77fc..3a5d796 100644 ---- a/drivers/net/ftgmac100_26.c -+++ b/drivers/net/ftgmac100_26.c -@@ -1,16 +1,16 @@ - /******************************************************************************** - * File Name : ftgmac100_26.c --* -+* - * Copyright (C) 2012-2020 ASPEED Technology Inc. --* This program is free software; you can redistribute it and/or modify --* it under the terms of the GNU General Public License as published by the Free Software Foundation; --* either version 2 of the License, or (at your option) any later version. --* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; --* without even the implied warranty of MERCHANTABILITY or --* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --* You should have received a copy of the GNU General Public License --* along with this program; if not, write to the Free Software --* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+* This program is free software; you can redistribute it and/or modify -+* it under the terms of the GNU General Public License as published by the Free Software Foundation; -+* either version 2 of the License, or (at your option) any later version. -+* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -+* without even the implied warranty of MERCHANTABILITY or -+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -+* You should have received a copy of the GNU General Public License -+* along with this program; if not, write to the Free Software -+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - ********************************************************************************/ - //----------------------------------------------------------------------------- - // "ASPEED MAC Driver, (Linux Kernel 2.6.15.7) 10/02/07 - by ASPEED\n" -@@ -76,7 +76,7 @@ - //AST2300 SDK 0.14 - //19.09/13/2010 - by river@aspeed - // Support Realtek RTL8201EL 10/100M PHY --//AST2400 -+//AST2400 - //20.06/25/2013 - by CC@aspeed - // Support BCM54612E 10/100/1000M PHY - //----------------------------------------------------------------------------- -@@ -120,7 +120,12 @@ - #err "Not define include for GMAC" - #endif - -+#ifdef CONFIG_WEDGE100 -+#define PHY_DEFAULT_ADDR 0x18 -+#else -+/* wedge */ - #define PHY_DEFAULT_ADDR 0x1F -+#endif - - /*------------------------------------------------------------------------ - . -@@ -172,7 +177,6 @@ static int ftgmac100_wait_to_send_packet(struct sk_buff * skb, struct net_device - - static volatile int trans_busy = 0; - -- - void ftgmac100_phy_rw_waiting(unsigned int ioaddr) - { - unsigned int tmp; -@@ -255,6 +259,7 @@ static void getMacHwConfig( struct net_device* dev, struct AstMacHwConfig* out ) - - // out->macId = dev->dev_id; - //.. getMacAndPhy(dev, out); -+ out->phyAddr = PHY_DEFAULT_ADDR; - out->miiPhyId = 0; - - // We assume the Clock Stop register does not disable the MAC1 or MAC2 clock -@@ -272,7 +277,7 @@ no_phy_access: - out->phyAddr = 1; - } - #if 0 -- if (out->miiPhyId == 0x0362) { -+ if (out->miiPhyId == 0x0362) { - out->phyAddr = 1; - } - #endif -@@ -297,6 +302,902 @@ no_phy_access: - return; - } - -+// -------------------------------------------------------------------- -+// NCSI function -+// -------------------------------------------------------------------- -+void NCSI_Struct_Initialize(struct net_device *dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long i; -+ -+ for (i = 0; i < 6; i++) { -+ lp->NCSI_Request.DA[i] = 0xFF; -+ lp->NCSI_Respond.DA[i] = 0xFF; -+ lp->NCSI_Respond.SA[i] = 0xFF; -+ lp->NCSI_Request.SA[i] = dev->dev_addr[i]; -+ } -+ lp->NCSI_Request.EtherType = 0xF888; -+ lp->NCSI_Request.MC_ID = 0; -+ lp->NCSI_Request.Header_Revision = 0x01; -+ lp->NCSI_Request.Reserved_1 = 0; -+ lp->NCSI_Request.Reserved_2 = 0; -+ lp->NCSI_Request.Reserved_3 = 0; -+ lp->NCSI_Respond.EtherType = 0xF888; -+ lp->NCSI_Respond.MC_ID = 0; -+ lp->NCSI_Respond.Header_Revision = 0x01; -+ lp->NCSI_Respond.Reserved_1 = 0; -+ lp->NCSI_Respond.Reserved_2 = 0; -+ lp->NCSI_Respond.Reserved_3 = 0; -+ -+ lp->InstanceID = 0; -+ lp->Payload_Checksum = 0; -+ for (i = 0; i < 4; i++) { -+ lp->Payload_Pad[i] = 0; -+ } -+ for (i = 0; i < 64; i++) { -+ lp->Payload_Data[i] = 0; -+ } -+} -+ -+void Calculate_Checksum(struct net_device * dev, unsigned char *buffer_base, int Length) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned int i, CheckSum = 0; -+ unsigned int Data, Data1; -+ -+ for (i = 0; i < ((Length - 14) / 2); i++) { -+ Data = buffer_base[i * 2]; -+ Data1 = buffer_base[i * 2 + 1]; -+ CheckSum += ((Data << 8) + Data1); -+ } -+ lp->Payload_Checksum = (~(CheckSum) + 1); //2's complement -+//Inverse for insert into buffer -+ Data = (lp->Payload_Checksum & 0xFF000000) >> 24; -+ Data1 = (lp->Payload_Checksum & 0x000000FF) << 24; -+ lp->Payload_Checksum = (lp->Payload_Checksum & 0x00FFFF00) + Data + Data1; -+ Data = (lp->Payload_Checksum & 0x00FF0000) >> 8; -+ Data1 = (lp->Payload_Checksum & 0x0000FF00) << 8; -+ lp->Payload_Checksum = (lp->Payload_Checksum & 0xFF0000FF) + Data + Data1; -+} -+ -+void copy_data (struct net_device * dev, struct sk_buff * skb, int Length) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ -+ memcpy ((unsigned char *)(skb->data + 30), &lp->Payload_Data, Length); -+ Calculate_Checksum(dev, skb->data + 14, 30 + Length); -+ memcpy ((unsigned char *)(skb->data + 30 + Length), &lp->Payload_Checksum, 4); -+} -+ -+void NCSI_Rx (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long status, length, i = 0; -+ volatile RX_DESC *cur_desc; -+ -+ncsi_rx: -+ i = 0; -+ cur_desc = &lp->rx_descs[lp->rx_idx]; -+ do { -+ status = cur_desc->RXPKT_RDY; -+ i++; -+ } while (!(((status & RX_OWNBY_SOFTWARE) != 0) || (i >= NCSI_LOOP))); -+ -+ if (i < NCSI_LOOP) { -+ if (cur_desc->LRS) { -+ length = cur_desc->VDBC; -+ unsigned char *tbuf = (unsigned char *)phys_to_virt(cur_desc->RXBUF_BADR); -+ if (length <= 128 && tbuf[12] == 0x88 && tbuf[13] == 0xF8) { -+ memcpy (&lp->NCSI_Respond, (unsigned char *)phys_to_virt(cur_desc->RXBUF_BADR), length); -+ } else { -+ printk("NCSI_RX: Skip len: %d, proto: %x:%x\n", length, tbuf[12], tbuf[13]); -+ lp->rx_descs[lp->rx_idx].RXPKT_RDY = RX_OWNBY_FTGMAC100; -+ lp->rx_idx = (lp->rx_idx+1)%RXDES_NUM; -+ goto ncsi_rx; -+ } -+ -+ } -+ lp->rx_descs[lp->rx_idx].RXPKT_RDY = RX_OWNBY_FTGMAC100; -+ lp->rx_idx = (lp->rx_idx+1)%RXDES_NUM; -+ } else { -+ printk("NCSI_Rx: Failed\n"); -+ } -+} -+ -+void DeSelect_Package (struct net_device * dev, int Package_ID) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = DESELECT_PACKAGE; -+ Combined_Channel_ID = (Package_ID << 5) + 0x1F; //Internal Channel ID = 0x1F, 0x1F means all channel -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (DESELECT_PACKAGE | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+int Select_Package (struct net_device * dev, int Package_ID) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID, Found = 0; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = SELECT_PACKAGE; -+ Combined_Channel_ID = (Package_ID << 5) + 0x1F; //Internal Channel ID = 0x1F -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (4 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 4; -+ memset ((void *)lp->Payload_Data, 0, 4); -+ lp->Payload_Data[3] = 1; //Arbitration Disable -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (SELECT_PACKAGE | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ Found = 0; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ Found = 1; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+ -+ return Found; -+} -+ -+ -+void DeSelect_Active_Package (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = DESELECT_PACKAGE; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + 0x1F; //Internal Channel ID = 0x1F, 0x1F means all channel -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (DESELECT_PACKAGE | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+ -+int Select_Active_Package (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID, Found = 0; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = SELECT_PACKAGE; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + 0x1F; //Internal Channel ID = 0x1F -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (4 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 4; -+ memset ((void *)lp->Payload_Data, 0, 4); -+ lp->Payload_Data[3] = 1; //Arbitration Disable -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (SELECT_PACKAGE | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ Found = 0; -+ } -+ else { -+ lp->Retry = 0; -+ Found = 1; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+ -+ return Found; -+} -+ -+int Clear_Initial_State (struct net_device * dev, int Channel_ID) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID, Found = 0; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = CLEAR_INITIAL_STATE; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + Channel_ID; //Internal Channel ID = 0 -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (CLEAR_INITIAL_STATE | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ Found = 0; -+ } -+ else { -+ lp->Retry = 0; -+ Found = 1; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+ -+ return Found; -+} -+ -+void Get_Version_ID (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = GET_VERSION_ID; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (GET_VERSION_ID | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Get_Capabilities (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = GET_CAPABILITIES; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (GET_CAPABILITIES | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ lp->NCSI_Cap.Capabilities_Flags = lp->NCSI_Respond.Payload_Data[0]; -+ lp->NCSI_Cap.Broadcast_Packet_Filter_Capabilities = lp->NCSI_Respond.Payload_Data[1]; -+ lp->NCSI_Cap.Multicast_Packet_Filter_Capabilities = lp->NCSI_Respond.Payload_Data[2]; -+ lp->NCSI_Cap.Buffering_Capabilities = lp->NCSI_Respond.Payload_Data[3]; -+ lp->NCSI_Cap.AEN_Control_Support = lp->NCSI_Respond.Payload_Data[4]; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Enable_AEN (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = AEN_ENABLE; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (8 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 8; -+ lp->Payload_Data[3] = 0; //MC ID -+ lp->Payload_Data[7] = 1; //Link Status Change AEN -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (AEN_ENABLE | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Get_MAC_Address (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID, i; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = 0x50; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (8 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 8; -+ lp->Payload_Data[0] = 0x00; -+ lp->Payload_Data[1] = 0x00; -+ lp->Payload_Data[2] = 0x81; -+ lp->Payload_Data[3] = 0x19; -+ -+ lp->Payload_Data[4] = 0x00; -+ lp->Payload_Data[5] = 0x00; -+ lp->Payload_Data[6] = 0x1B; -+ lp->Payload_Data[7] = 0x00; -+ -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (0x50 | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+ -+ // Update MAC Address -+printk("NCSI: MAC "); -+for (i = 0; i < 6; i++) -+ printk("%02X:", lp->NCSI_Respond.Payload_Data[12+i]); -+printk("\n"); -+ memcpy(lp->NCSI_Request.SA, &lp->NCSI_Respond.Payload_Data[12], 6); -+ memcpy(dev->dev_addr, &lp->NCSI_Respond.Payload_Data[12], 6); -+ -+ /* Update the MAC address */ -+ ast_gmac_set_mac(lp, dev->dev_addr); -+} -+ -+void Set_MAC_Affinity (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID, i; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = 0x50; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (60 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ -+ lp->NCSI_Request.Payload_Length = 60; -+ memset(lp->Payload_Data, 0x00, 60); -+ lp->Payload_Data[0] = 0x00; -+ lp->Payload_Data[1] = 0x00; -+ lp->Payload_Data[2] = 0x81; -+ lp->Payload_Data[3] = 0x19; -+ -+ lp->Payload_Data[4] = 0x00; -+ lp->Payload_Data[5] = 0x01; -+ lp->Payload_Data[6] = 0x07; -+ lp->Payload_Data[7] = 0x00; -+ -+ for (i = 0; i < 6; i++) { -+ lp->Payload_Data[8+i] = lp->NCSI_Request.SA[i]; -+ } -+ -+ lp->Payload_Data[14] = 0x09; -+ -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (0x50 | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Enable_Set_MAC_Address (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID, i; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = SET_MAC_ADDRESS; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (8 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 8; -+ for (i = 0; i < 6; i++) { -+ lp->Payload_Data[i] = lp->NCSI_Request.SA[i]; -+ } -+ lp->Payload_Data[6] = 1; //MAC Address Num = 1 --> address filter 1, fixed in sample code -+ lp->Payload_Data[7] = UNICAST + 0 + ENABLE_MAC_ADDRESS_FILTER; //AT + Reserved + E -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (SET_MAC_ADDRESS | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Enable_Broadcast_Filter (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = ENABLE_BROADCAST_FILTERING; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (4 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 4; -+ memset ((void *)lp->Payload_Data, 0, 4); -+ lp->Payload_Data[3] = 0x1; //ARP, DHCP, NetBIOS -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (ENABLE_BROADCAST_FILTERING | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Disable_VLAN (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = DISABLE_VLAN; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (DISABLE_VLAN | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Get_Parameters (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = GET_PARAMETERS; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (GET_PARAMETERS | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+// printk ("Retry: Command = %x, Response_Code = %x, Resonpd.Command = %x, IID = %x, lp->InstanceID = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code, lp->NCSI_Respond.Command, lp->NCSI_Respond.IID, lp->InstanceID); -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ lp->NCSI_Cap.Capabilities_Flags = lp->NCSI_Respond.Payload_Data[0]; -+ lp->NCSI_Cap.Broadcast_Packet_Filter_Capabilities = lp->NCSI_Respond.Payload_Data[1]; -+ lp->NCSI_Cap.Multicast_Packet_Filter_Capabilities = lp->NCSI_Respond.Payload_Data[2]; -+ lp->NCSI_Cap.Buffering_Capabilities = lp->NCSI_Respond.Payload_Data[3]; -+ lp->NCSI_Cap.AEN_Control_Support = lp->NCSI_Respond.Payload_Data[4]; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Enable_Network_TX (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = ENABLE_CHANNEL_NETWORK_TX; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (ENABLE_CHANNEL_NETWORK_TX | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Disable_Network_TX (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = DISABLE_CHANNEL_NETWORK_TX; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + (lp->NCSI_Request.Payload_Length % 4) + 8; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (DISABLE_CHANNEL_NETWORK_TX | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Enable_Channel (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = ENABLE_CHANNEL; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (ENABLE_CHANNEL | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+void Disable_Channel (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = DISABLE_CHANNEL; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (4 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 4; -+ memset ((void *)lp->Payload_Data, 0, 4); -+ lp->Payload_Data[3] = 0x1; //ALD -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (DISABLE_CHANNEL | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} -+ -+int Get_Link_Status (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = GET_LINK_STATUS; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = 0; -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (GET_LINK_STATUS | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+ if (lp->NCSI_Respond.Payload_Data[3] & 0x40) { -+ return (lp->NCSI_Respond.Payload_Data[3] & 0x01); //Link Up or Not -+ } -+ else { -+ return 0; //Auto Negotiate did not finish -+ } -+} -+ -+void Set_Link (struct net_device * dev) -+{ -+ struct ftgmac100_priv *lp = (struct ftgmac100_priv *)dev->priv; -+ unsigned long Combined_Channel_ID; -+ struct sk_buff * skb; -+ -+ do { -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ memset(skb->data, 0, TX_BUF_SIZE + 16); -+//TX -+ lp->InstanceID++; -+ lp->NCSI_Request.IID = lp->InstanceID; -+ lp->NCSI_Request.Command = SET_LINK; -+ Combined_Channel_ID = (lp->NCSI_Cap.Package_ID << 5) + lp->NCSI_Cap.Channel_ID; -+ lp->NCSI_Request.Channel_ID = Combined_Channel_ID; -+ lp->NCSI_Request.Payload_Length = (8 << 8); -+ memcpy ((unsigned char *)skb->data, &lp->NCSI_Request, 30); -+ lp->NCSI_Request.Payload_Length = 8; -+ memset ((void *)lp->Payload_Data, 0, 8); -+ lp->Payload_Data[2] = 0x02; //full duplex -+ lp->Payload_Data[3] = 0x04; //100M, auto-disable -+ copy_data (dev, skb, lp->NCSI_Request.Payload_Length); -+ skb->len = 30 + lp->NCSI_Request.Payload_Length + 4; -+ ftgmac100_wait_to_send_packet (skb, dev); -+//RX -+ NCSI_Rx(dev); -+ if (((lp->NCSI_Respond.IID != lp->InstanceID) || (lp->NCSI_Respond.Command != (SET_LINK | 0x80)) || (lp->NCSI_Respond.Response_Code != COMMAND_COMPLETED)) && (lp->Retry != RETRY_COUNT)) { -+ printk ("Retry: Command = %x, Response_Code = %x\n", lp->NCSI_Request.Command, lp->NCSI_Respond.Response_Code); -+ printk ("IID: %x:%x, Command: %x:%x\n", lp->InstanceID, lp->NCSI_Respond.IID, lp->NCSI_Request.Command, lp->NCSI_Respond.Command); -+ lp->Retry++; -+ lp->InstanceID--; -+ } -+ else { -+ lp->Retry = 0; -+ } -+ } while ((lp->Retry != 0) && (lp->Retry <= RETRY_COUNT)); -+ lp->Retry = 0; -+} - - static void ftgmac100_reset( struct net_device* dev ) - { -@@ -308,64 +1209,71 @@ static void ftgmac100_reset( struct net_device* dev ) - PRINTK("%s:ftgmac100_reset, phyAddr=0x%x, miiPhyId=0x%04x_%04x\n", - dev->name, ids->phyAddr, (ids->miiPhyId >> 16), (ids->miiPhyId & 0xffff)); - -- if (ids->miiPhyId < 1) -- return; // Cannot access MAC registers -- -- // Check the link speed and duplex. -- // They are not valid until auto-neg is resolved, which is reg.1 bit[5], -- // or the link is up, which is reg.1 bit[2]. -- -- if (ids->phyAddr < 0xff) -- tmp = ftgmac100_read_phy_register(dev->base_addr, ids->phyAddr, 0x1); -- else tmp = 0; -- -- if (0==(tmp & (1u<<5 | 1u<<2)) || ids->phyAddr >= 0xff) { -- // No PHY chip, or link has not negotiated. -- speed = PHY_SPEED_100M; -- duplex = 1; -- netif_carrier_off(dev); -- } -- else if (((ids->miiPhyId & PHYID_VENDOR_MODEL_MASK) == PHYID_RTL8201EL)) { -- tmp = ftgmac100_read_phy_register(dev->base_addr, priv->ids.phyAddr, 0x00); -- duplex = (tmp & 0x0100) ? 1 : 0; -- speed = (tmp & 0x2000) ? PHY_SPEED_100M : PHY_SPEED_10M; -- } -- else if (((ids->miiPhyId & PHYID_VENDOR_MASK) == PHYID_VENDOR_MARVELL) || -- ((ids->miiPhyId & PHYID_VENDOR_MODEL_MASK) == PHYID_RTL8211)) { -- // Use reg.17_0.bit[15:13] for {speed[1:0], duplex}. -- tmp = ftgmac100_read_phy_register(dev->base_addr, ids->phyAddr, 0x11); -- duplex = (tmp & PHY_DUPLEX_mask)>>13; -- speed = (tmp & PHY_SPEED_mask)>>14; -- netif_carrier_on(dev); -- } -- else if (priv->ids.miiPhyId == PHYID_BCM54612E -- || priv->ids.miiPhyId == PHYID_BCM54616S) { -- // Get link status -- // First Switch shadow register selector -- ftgmac100_write_phy_register(dev->base_addr, priv->ids.phyAddr, 0x1C, 0x2000); -- tmp = ftgmac100_read_phy_register(dev->base_addr, priv->ids.phyAddr, 0x1C); -- if ( (tmp & 0x0080) == 0x0080 ) -- duplex = 0; -- else -- duplex = 1; -- -- switch(tmp & 0x0018) { -- case 0x0000: -- speed = PHY_SPEED_1G; break; -- case 0x0008: -- speed = PHY_SPEED_100M; break; -- case 0x0010: -- speed = PHY_SPEED_10M; break; -- default: -- speed = PHY_SPEED_100M; -- } -+ if ((priv->NCSI_support == 1) || (priv->INTEL_NCSI_EVA_support == 1)) { -+ ids->miiPhyId = 0xFFFF; -+ // NCSI mode always is 100M and full duplex -+ duplex = 1; -+ speed = PHY_SPEED_100M; -+ } else { -+ if (ids->miiPhyId < 1) -+ return; // Cannot access MAC registers -+ -+ // Check the link speed and duplex. -+ // They are not valid until auto-neg is resolved, which is reg.1 bit[5], -+ // or the link is up, which is reg.1 bit[2]. -+ -+ if (ids->phyAddr < 0xff) -+ tmp = ftgmac100_read_phy_register(dev->base_addr, ids->phyAddr, 0x1); -+ else tmp = 0; -+ -+ if (0==(tmp & (1u<<5 | 1u<<2)) || ids->phyAddr >= 0xff) { -+ // No PHY chip, or link has not negotiated. -+ speed = PHY_SPEED_100M; -+ duplex = 1; -+ netif_carrier_off(dev); - } -- else { -- // Assume Broadcom BCM5221. Use reg.18 bits [1:0] for {100Mb/s, fdx}. -- tmp = ftgmac100_read_phy_register(dev->base_addr, ids->phyAddr, 0x18); -- duplex = (tmp & 0x0001); -- speed = (tmp & 0x0002) ? PHY_SPEED_100M : PHY_SPEED_10M; -- } -+ else if (((ids->miiPhyId & PHYID_VENDOR_MODEL_MASK) == PHYID_RTL8201EL)) { -+ tmp = ftgmac100_read_phy_register(dev->base_addr, priv->ids.phyAddr, 0x00); -+ duplex = (tmp & 0x0100) ? 1 : 0; -+ speed = (tmp & 0x2000) ? PHY_SPEED_100M : PHY_SPEED_10M; -+ } -+ else if (((ids->miiPhyId & PHYID_VENDOR_MASK) == PHYID_VENDOR_MARVELL) || -+ ((ids->miiPhyId & PHYID_VENDOR_MODEL_MASK) == PHYID_RTL8211)) { -+ // Use reg.17_0.bit[15:13] for {speed[1:0], duplex}. -+ tmp = ftgmac100_read_phy_register(dev->base_addr, ids->phyAddr, 0x11); -+ duplex = (tmp & PHY_DUPLEX_mask)>>13; -+ speed = (tmp & PHY_SPEED_mask)>>14; -+ netif_carrier_on(dev); -+ } -+ else if (priv->ids.miiPhyId == PHYID_BCM54612E -+ || priv->ids.miiPhyId == PHYID_BCM54616S) { -+ // Get link status -+ // First Switch shadow register selector -+ ftgmac100_write_phy_register(dev->base_addr, priv->ids.phyAddr, 0x1C, 0x2000); -+ tmp = ftgmac100_read_phy_register(dev->base_addr, priv->ids.phyAddr, 0x1C); -+ if ( (tmp & 0x0080) == 0x0080 ) -+ duplex = 0; -+ else -+ duplex = 1; -+ -+ switch(tmp & 0x0018) { -+ case 0x0000: -+ speed = PHY_SPEED_1G; break; -+ case 0x0008: -+ speed = PHY_SPEED_100M; break; -+ case 0x0010: -+ speed = PHY_SPEED_10M; break; -+ default: -+ speed = PHY_SPEED_100M; -+ } -+ } -+ else { -+ // Assume Broadcom BCM5221. Use reg.18 bits [1:0] for {100Mb/s, fdx}. -+ tmp = ftgmac100_read_phy_register(dev->base_addr, ids->phyAddr, 0x18); -+ duplex = (tmp & 0x0001); -+ speed = (tmp & 0x0002) ? PHY_SPEED_100M : PHY_SPEED_10M; -+ } -+ }// NCSI_Check - - if (speed == PHY_SPEED_1G) { - // Set SPEED_100_bit too, for consistency. -@@ -385,9 +1293,9 @@ static void ftgmac100_reset( struct net_device* dev ) - } - if (duplex) - priv->maccr_val |= FULLDUP_bit; -- else -+ else - priv->maccr_val &= ~FULLDUP_bit; -- -+ - outl( SW_RST_bit, dev->base_addr + MACCR_REG ); - - #ifdef not_complete_yet -@@ -419,6 +1327,7 @@ static void ftgmac100_enable( struct net_device *dev ) - unsigned int rfifo_rsize; //Richard - unsigned int tfifo_rsize; //Richard - unsigned int rxbuf_size; -+ unsigned long Package_Found = 0, Channel_Found = 0, Re_Send = 0, Link_Status; - - rxbuf_size = RX_BUF_SIZE & 0x3fff; - outl( rxbuf_size , dev->base_addr + RBSR_REG); //for NC Body -@@ -475,7 +1384,7 @@ static void ftgmac100_enable( struct net_device *dev ) - - /// enable trans/recv,... - outl(priv->maccr_val, dev->base_addr + MACCR_REG ); --#if 0 -+ - //NCSI Start - //DeSelect Package/ Select Package - if ((priv->NCSI_support == 1) || (priv->INTEL_NCSI_EVA_support == 1)) { -@@ -491,16 +1400,18 @@ static void ftgmac100_enable( struct net_device *dev ) - } - if (Package_Found != 0) { - //Initiali State -- for (i = 0; i < 2; i++) { //Suppose 2 channels in current version, You could modify it to 0x1F to support 31 channels -- Channel_Found = Clear_Initial_State(dev, i); -+ for (i = 0; i < 1; i++) { //Suppose 2 channels in current version, You could modify it to 0x1F to support 31 channels -+ //Channel_Found = Clear_Initial_State(dev, i); -+ Channel_Found = 1; - if (Channel_Found == 1) { - priv->NCSI_Cap.Channel_ID = i; - printk ("Found NCSI Network Controller at (%d, %d)\n", priv->NCSI_Cap.Package_ID, priv->NCSI_Cap.Channel_ID); -+ Get_MAC_Address(dev); -+ Set_MAC_Affinity(dev); -+ Clear_Initial_State(dev, i); - //Get Version and Capabilities - Get_Version_ID(dev); - Get_Capabilities(dev); --//Configuration -- Select_Active_Package(dev); - //Set MAC Address - Enable_Set_MAC_Address(dev); - //Enable Broadcast Filter -@@ -508,16 +1419,18 @@ static void ftgmac100_enable( struct net_device *dev ) - //Disable VLAN - Disable_VLAN(dev); - //Enable AEN -- Enable_AEN(dev); -+ //Enable_AEN(dev); - //Get Parameters - Get_Parameters(dev); --//Enable TX -+//Enable TX - Enable_Network_TX(dev); - //Enable Channel - Enable_Channel(dev); - //Get Link Status - Re_Get_Link_Status: -- Link_Status = Get_Link_Status(dev); -+ //TODO: Workaround for CX4 Link status issue -+ //Link_Status = Get_Link_Status(dev); -+ Link_Status = LINK_UP; - if (Link_Status == LINK_UP) { - printk ("Using NCSI Network Controller (%d, %d)\n", priv->NCSI_Cap.Package_ID, priv->NCSI_Cap.Channel_ID); - netif_carrier_on(dev); -@@ -528,7 +1441,7 @@ Re_Get_Link_Status: - netif_carrier_off(dev); - goto Re_Get_Link_Status; - } --//Disable TX -+//Disable TX - Disable_Network_TX(dev); - //Disable Channel - // Disable_Channel(dev); -@@ -537,9 +1450,19 @@ Re_Get_Link_Status: - } - } - } -+ // Enable Interrupts -+ outl( -+ AHB_ERR_bit | -+ TPKT_LOST_bit | -+ TPKT2E_bit | -+ RXBUF_UNAVA_bit | -+ RPKT2B_bit -+ ,dev->base_addr + IER_REG -+ ); -+ -+ return; - } - /* now, enable interrupts */ --#endif - if (((priv->ids.miiPhyId & PHYID_VENDOR_MASK) == PHYID_VENDOR_MARVELL) || - ((priv->ids.miiPhyId & PHYID_VENDOR_MODEL_MASK) == PHYID_RTL8211)) { - outl( -@@ -564,7 +1487,7 @@ Re_Get_Link_Status: - ); - } - else if (priv->ids.miiPhyId == PHYID_BCM54612E -- || priv->ids.miiPhyId == PHYID_BCM54616S) { -+ || priv->ids.miiPhyId == PHYID_BCM54616S) { - outl( - // no link PHY link status pin PHYSTS_CHG_bit | - AHB_ERR_bit | -@@ -583,7 +1506,7 @@ Re_Get_Link_Status: - RXBUF_UNAVA_bit | - RPKT2B_bit - ,dev->base_addr + IER_REG -- ); -+ ); - } - } - -@@ -619,7 +1542,7 @@ static void aspeed_mac_timer(unsigned long data) - speed = (tmp & PHY_SPEED_mask)>>14; - } - else if (priv->ids.miiPhyId == PHYID_BCM54612E -- || priv->ids.miiPhyId == PHYID_BCM54616S) { -+ || priv->ids.miiPhyId == PHYID_BCM54616S) { - // Get link status - // First Switch shadow register selector - ftgmac100_write_phy_register(dev->base_addr, priv->ids.phyAddr, 0x1C, 0x2000); -@@ -628,23 +1551,23 @@ static void aspeed_mac_timer(unsigned long data) - duplex = 0; - else - duplex = 1; -- -+ - switch(tmp & 0x0018) { - case 0x0000: -- speed = PHY_SPEED_1G; -- -+ speed = PHY_SPEED_1G; -+ - break; -- case 0x0008: -- speed = PHY_SPEED_100M; -- -+ case 0x0008: -+ speed = PHY_SPEED_100M; -+ - break; -- case 0x0010: -- speed = PHY_SPEED_10M; -- -+ case 0x0010: -+ speed = PHY_SPEED_10M; -+ - break; - default: - speed = PHY_SPEED_100M; -- } -+ } - } - else { - duplex = 1; speed = PHY_SPEED_100M; -@@ -730,27 +1653,26 @@ static int ftgmac100_wait_to_send_packet( struct sk_buff * skb, struct net_devic - PRINTK3("%s:ftgmac100_wait_to_send_packet, skb=%x\n", dev->name, skb); - cur_desc = &priv->tx_descs[priv->tx_idx]; - --#ifdef not_complete_yet -- if (cur_desc->TXDMA_OWN != TX_OWNBY_SOFTWARE) /// no empty transmit descriptor -+#ifdef not_complete_yet -+ if (cur_desc->TXDMA_OWN != TX_OWNBY_SOFTWARE) /// no empty transmit descriptor - { - DO_PRINT("no empty transmit descriptor\n"); - DO_PRINT("jiffies = %d\n", jiffies); - priv->stats.tx_dropped++; -- netif_stop_queue(dev); /// waiting to do: -+ netif_stop_queue(dev); /// waiting to do: - spin_unlock_irqrestore(&priv->tx_lock, flags); - - return 1; - } - #endif /* end_of_not */ - -- if (cur_desc->TXDMA_OWN != TX_OWNBY_SOFTWARE) /// no empty transmit descriptor -+ if (cur_desc->TXDMA_OWN != TX_OWNBY_SOFTWARE) /// no empty transmit descriptor - { - DO_PRINT("no empty TX descriptor:0x%x:0x%x\n", - (unsigned int)cur_desc,((unsigned int *)cur_desc)[0]); - priv->stats.tx_dropped++; -- netif_stop_queue(dev); /// waiting to do: -+ netif_stop_queue(dev); /// waiting to do: - spin_unlock_irqrestore(&priv->tx_lock, flags); -- - return 1; - } - priv->tx_skbuff[priv->tx_idx] = skb; -@@ -803,18 +1725,18 @@ static int ftgmac100_ringbuf_alloc(struct ftgmac100_priv *priv) - int i; - struct sk_buff *skb; - -- priv->rx_descs = dma_alloc_coherent(priv->dev, -- sizeof(RX_DESC)*RXDES_NUM, -+ priv->rx_descs = dma_alloc_coherent(priv->dev, -+ sizeof(RX_DESC)*RXDES_NUM, - &priv->rx_descs_dma, GFP_KERNEL); - - if(!priv->rx_descs) - return -ENOMEM; -- -+ - memset(priv->rx_descs, 0, sizeof(RX_DESC)*RXDES_NUM); - priv->rx_descs[RXDES_NUM-1].EDORR = 1; - - for (i=0; i<RXDES_NUM; i++) { -- dma_addr_t mapping; -+ dma_addr_t mapping; - skb = dev_alloc_skb(RX_BUF_SIZE + NET_IP_ALIGN); - skb_reserve(skb, NET_IP_ALIGN); - -@@ -829,8 +1751,8 @@ static int ftgmac100_ringbuf_alloc(struct ftgmac100_priv *priv) - priv->rx_descs[i].VIR_RXBUF_BADR = skb->data; - } - -- priv->tx_descs = dma_alloc_coherent(priv->dev, -- sizeof(TX_DESC)*TXDES_NUM, -+ priv->tx_descs = dma_alloc_coherent(priv->dev, -+ sizeof(TX_DESC)*TXDES_NUM, - &priv->tx_descs_dma ,GFP_KERNEL); - - if(!priv->tx_descs) -@@ -838,7 +1760,7 @@ static int ftgmac100_ringbuf_alloc(struct ftgmac100_priv *priv) - - memset((void*)priv->tx_descs, 0, sizeof(TX_DESC)*TXDES_NUM); - priv->tx_descs[TXDES_NUM-1].EDOTR = 1; // is last descriptor -- -+ - } - - #if FTMAC100_DEBUG > 2 -@@ -918,20 +1840,14 @@ static void ftgmac100_phy_configure(struct net_device* dev) - } - break; - case PHYID_VENDOR_BROADCOM: -- switch (priv->ids.miiPhyId) { -- case PHYID_BCM54612E: -- case PHYID_BCM54616S: -- ftgmac100_write_phy_register(ioaddr, priv->ids.phyAddr, 0x1C, 0x8C00); // Disable GTXCLK Clock Delay Enable -- ftgmac100_write_phy_register(ioaddr, priv->ids.phyAddr, 0x18, 0xF0E7); // Disable RGMII RXD to RXC Skew -- break; -- case PHYID_BCM5221A4: -- default: -- tmp = ftgmac100_read_phy_register(ioaddr, priv->ids.phyAddr, 0x1b); -- tmp |= 0x0004; -- ftgmac100_write_phy_register(ioaddr, priv->ids.phyAddr, 0x1b, (u16) tmp); -- break; -- } -- break; -+ tmp = ftgmac100_read_phy_register(ioaddr, priv->ids.phyAddr, 0x1b); -+ tmp |= 0x0004; -+ ftgmac100_write_phy_register(ioaddr, priv->ids.phyAddr, 0x1b, (u16) tmp); -+ break; -+ case PHYID_VENDOR_BCM5461X: -+ ftgmac100_write_phy_register(ioaddr, priv->ids.phyAddr, 0x1C, 0x8C00); // Disable GTXCLK Clock Delay Enable -+ ftgmac100_write_phy_register(ioaddr, priv->ids.phyAddr, 0x18, 0xF0E7); // Disable RGMII RXD to RXC Skew -+ break; - } - } - -@@ -960,26 +1876,26 @@ static void ftgmac100_timeout (struct net_device *dev) - } - - --static void ftgmac100_free_tx (struct net_device *dev) -+static void ftgmac100_free_tx (struct net_device *dev) - { - struct ftgmac100_priv *priv = (struct ftgmac100_priv *)dev->priv; -- int entry = priv->old_tx % TXDES_NUM; -+ int entry = priv->old_tx % TXDES_NUM; - unsigned long flags = 0; -- -+ - spin_lock_irqsave(&priv->tx_lock,flags); -- -+ - /* Free used tx skbuffs */ - - while ((priv->tx_descs[entry].TXDMA_OWN == TX_OWNBY_SOFTWARE) && (priv->tx_skbuff[entry] != NULL)) { - struct sk_buff *skb; -- -+ - skb = priv->tx_skbuff[entry]; - dev_kfree_skb_any (skb); - priv->tx_skbuff[entry] = 0; - entry = (entry + 1) % TXDES_NUM; - priv->tx_free++; - } -- -+ - spin_unlock_irqrestore(&priv->tx_lock, flags); - priv->old_tx = entry; - if ((netif_queue_stopped(dev)) && (priv->tx_free > 0)) { -@@ -1295,7 +2211,7 @@ static irqreturn_t ftgmac100_interrupt(int irq, void * dev_id, struct pt_regs * - DO_PRINT("PHYSTS_CHG \n"); - // Is this interrupt for changes of the PHYLINK pin? - // Note: PHYLINK is optional; not all boards connect it. -- if (((priv->ids.miiPhyId & PHYID_VENDOR_MASK) == PHYID_VENDOR_MARVELL) || -+ if (((priv->ids.miiPhyId & PHYID_VENDOR_MASK) == PHYID_VENDOR_MARVELL) || - ((priv->ids.miiPhyId & PHYID_VENDOR_MODEL_MASK) == PHYID_RTL8211)) - { - tmp = ftgmac100_read_phy_register(ioaddr, priv->ids.phyAddr, 0x13); -@@ -1312,7 +2228,7 @@ static irqreturn_t ftgmac100_interrupt(int irq, void * dev_id, struct pt_regs * - tmp &= 0x000e; - } - else if (priv->ids.miiPhyId == PHYID_BCM54612E -- || priv->ids.miiPhyId == PHYID_BCM54616S) { -+ || priv->ids.miiPhyId == PHYID_BCM54616S) { - tmp = ftgmac100_read_phy_register(ioaddr, priv->ids.phyAddr, 0x1A); - PRINTK("%s: PHY interrupt status, read_phy_reg(0x1A) = 0x%04x\n", - dev->name, tmp); -@@ -1403,10 +2319,10 @@ static irqreturn_t ftgmac100_interrupt(int irq, void * dev_id, struct pt_regs * - . Get the current statistics. - . This may be called with the card open or closed. - .-------------------------------------------------------------*/ --static struct net_device_stats* ftgmac100_query_statistics(struct net_device *dev) -+static struct net_device_stats* ftgmac100_query_statistics(struct net_device *dev) - { - struct ftgmac100_priv *priv = (struct ftgmac100_priv *)dev->priv; -- -+ - return &priv->stats; - } - -@@ -1416,7 +2332,7 @@ static struct net_device_stats* ftgmac100_query_statistics(struct net_device *de - // Finds the CRC32 of a set of bytes. - // Again, from Peter Cammaert's code. - // -------------------------------------------------------------------- --static int crc32( char * s, int length ) -+static int crc32( char * s, int length ) - { - /* indices */ - int perByte; -@@ -1446,7 +2362,7 @@ static int crc32( char * s, int length ) - . packets before they take up memory. - */ - --static void ftgmac100_setmulticast( struct net_device *dev, int count, struct dev_mc_list * addrs ) -+static void ftgmac100_setmulticast( struct net_device *dev, int count, struct dev_mc_list * addrs ) - { - struct dev_mc_list * cur_addr; - int crc_val; -@@ -1455,12 +2371,12 @@ static void ftgmac100_setmulticast( struct net_device *dev, int count, struct de - struct AstMacHwConfig* ids = &priv->ids; - unsigned long Combined_Channel_ID, i; - struct sk_buff * skb; -- cur_addr = addrs; -+ cur_addr = addrs; - - //TX --#if 0 -+#if 1 - if (priv->NCSI_support == 1) { -- skb = dev_alloc_skb (TX_BUF_SIZE + 16); -+ skb = dev_alloc_skb (TX_BUF_SIZE + 16); - priv->InstanceID++; - priv->NCSI_Request.IID = priv->InstanceID; - priv->NCSI_Request.Command = SET_MAC_ADDRESS; -@@ -1597,7 +2513,7 @@ static int ast_gmac_stop(struct net_device *dev) - priv->rx_descs = NULL; priv->rx_descs_dma = 0; - priv->tx_descs = NULL; priv->tx_descs_dma = 0; - priv->tx_buf = NULL; priv->tx_buf_dma = 0; -- -+ - - return 0; - } -@@ -1651,10 +2567,10 @@ static int ftgmac100_open(struct net_device *netdev) - ftgmac100_reset(netdev); - ftgmac100_enable(netdev); - -- if (((priv->ids.miiPhyId & PHYID_VENDOR_MASK) == PHYID_VENDOR_BROADCOM) || -+ if (((priv->ids.miiPhyId & PHYID_VENDOR_MASK) == PHYID_VENDOR_BROADCOM) || - ((priv->ids.miiPhyId & PHYID_VENDOR_MODEL_MASK) == PHYID_RTL8201EL) || - (priv->ids.miiPhyId == PHYID_BCM54612E) || -- (priv->ids.miiPhyId == PHYID_BCM54616S)) { -+ (priv->ids.miiPhyId == PHYID_BCM54616S)) { - - init_timer(&priv->timer); - priv->timer.data = (unsigned long)netdev; -@@ -1702,7 +2618,7 @@ static int __init ast_gmac_probe(struct platform_device *pdev) - - - // SET_ETHTOOL_OPS(netdev, &ftgmac100_ethtool_ops); -- -+ - #if (LINUX_VERSION_CODE > KERNEL_VERSION(2,6,30)) - netdev->netdev_ops = &ftgmac100_netdev_ops; - #else -@@ -1715,13 +2631,12 @@ static int __init ast_gmac_probe(struct platform_device *pdev) - netdev->hard_start_xmit = ftgmac100_wait_to_send_packet; - netdev->tx_timeout = ftgmac100_timeout; - netdev->get_stats = ftgmac100_query_statistics; --//#ifdef HAVE_MULTICAST --#if 0 -+#ifdef HAVE_MULTICAST - netdev->set_multicast_list = &ftgmac100_set_multicast_list; - #endif - - #endif -- -+ - - #ifdef CONFIG_AST_NPAI - // netdev->features = NETIF_F_GRO; -@@ -1734,12 +2649,12 @@ static int __init ast_gmac_probe(struct platform_device *pdev) - priv = netdev_priv(netdev); - priv->netdev = netdev; - priv->dev = &pdev->dev; -- -+ - - priv->ids.macId = pdev->id; -- -+ - priv->NCSI_support = ast_eth_data->NCSI_support; -- priv->INTEL_NCSI_EVA_support= ast_eth_data->INTEL_NCSI_EVA_support; -+ priv->INTEL_NCSI_EVA_support= ast_eth_data->INTEL_NCSI_EVA_support; - spin_lock_init(&priv->tx_lock); - - #if 0 -@@ -1833,7 +2748,7 @@ err_ioremap: - err_req_mem: - // netif_napi_del(&priv->napi); - platform_set_drvdata(pdev, NULL); --err_netdev: -+err_netdev: - free_netdev(netdev); - err_alloc_etherdev: - return err; -diff --git a/drivers/net/ftgmac100_26.h b/drivers/net/ftgmac100_26.h -index 0d47024..2493111 100644 ---- a/drivers/net/ftgmac100_26.h -+++ b/drivers/net/ftgmac100_26.h -@@ -1,16 +1,16 @@ - /******************************************************************************** - * File Name : ftgmac100_26.h --* -+* - * Copyright (C) 2012-2020 ASPEED Technology Inc. --* This program is free software; you can redistribute it and/or modify --* it under the terms of the GNU General Public License as published by the Free Software Foundation; --* either version 2 of the License, or (at your option) any later version. --* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; --* without even the implied warranty of MERCHANTABILITY or --* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --* You should have received a copy of the GNU General Public License --* along with this program; if not, write to the Free Software --* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -+* This program is free software; you can redistribute it and/or modify -+* it under the terms of the GNU General Public License as published by the Free Software Foundation; -+* either version 2 of the License, or (at your option) any later version. -+* This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; -+* without even the implied warranty of MERCHANTABILITY or -+* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. -+* You should have received a copy of the GNU General Public License -+* along with this program; if not, write to the Free Software -+* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA - ********************************************************************************/ - // -------------------------------------------------------------------- - -@@ -78,7 +78,7 @@ - - - // -------------------------------------------------------------------- --// APTC_REG -+// APTC_REG - // -------------------------------------------------------------------- - - -@@ -99,18 +99,18 @@ typedef struct - #define PHY_READ_bit (1UL<<26) - #define PHY_WRITE_bit (1UL<<27) - // -------------------------------------------------------------------- --// PHYCR_REG -+// PHYCR_REG - // -------------------------------------------------------------------- - #define PHY_AUTO_OK_bit (1UL<<5) - // -------------------------------------------------------------------- --// PHY INT_STAT_REG -+// PHY INT_STAT_REG - // -------------------------------------------------------------------- - #define PHY_SPEED_CHG_bit (1UL<<14) - #define PHY_DUPLEX_CHG_bit (1UL<<13) - #define PHY_LINK_CHG_bit (1UL<<10) - #define PHY_AUTO_COMP_bit (1UL<<11) - // -------------------------------------------------------------------- --// PHY SPE_STAT_REG -+// PHY SPE_STAT_REG - // -------------------------------------------------------------------- - #define PHY_RESOLVED_bit (1UL<<11) - #define PHY_SPEED_mask 0xC000 -@@ -269,7 +269,7 @@ typedef struct { - unsigned short Reserved_5; - unsigned short Response_Code; - unsigned short Reason_Code; -- unsigned char Payload_Data[64]; -+ unsigned char Payload_Data[128]; - } NCSI_Response_Packet; - - //Standard Response Code -@@ -365,30 +365,30 @@ typedef struct - u32 FRS:1; - u32 EDORR:1; - u32 RXPKT_RDY:1; // 1 ==> owned by FTMAC100, 0 ==> owned by software -- -+ - // RXDES1 - u32 VLAN_TAGC:16; - u32 Reserved4:4; - u32 PROTL_TYPE:2; - u32 LLC_PKT:1; - u32 DF:1; -- u32 VLAN_AVA:1; -+ u32 VLAN_AVA:1; - u32 TCPCS_FAIL:1; - u32 UDPCS_FAIL:1; - u32 IPCS_FAIL:1; - u32 Reserved5:4; -- -+ - // RXDES2 - u32 Reserved6:32; -- -+ - // RXDES3 - u32 RXBUF_BADR; -- -+ - u32 VIR_RXBUF_BADR; // not defined, the virtual address of receive buffer is placed here -- -- u32 RESERVED; -- u32 RESERVED1; -- u32 RESERVED2; -+ -+ u32 RESERVED; -+ u32 RESERVED1; -+ u32 RESERVED2; - }RX_DESC; - - -@@ -405,7 +405,7 @@ typedef struct - u32 FTS:1; - u32 EDOTR:1; - u32 TXDMA_OWN:1; -- -+ - // TXDES1 - u32 VLAN_TAGC:16; - u32 INS_VLAN:1; -@@ -416,8 +416,8 @@ typedef struct - u32 LLC_PKT:1; - u32 Reserved6:7; - u32 TX2FIC:1; -- u32 TXIC:1; -- -+ u32 TXIC:1; -+ - // TXDES2 - u32 Reserved7:32; - -@@ -427,8 +427,8 @@ typedef struct - u32 VIR_TXBUF_BADR; // Reserve, the virtual address of transmit buffer is placed here - - u32 RESERVED; -- u32 RESERVED1; -- u32 RESERVED2; -+ u32 RESERVED1; -+ u32 RESERVED2; - - }TX_DESC; - -@@ -450,7 +450,7 @@ typedef struct - // -------------------------------------------------------------------- - - --//#define RXDES_NUM 64//64 // we defined 32 descriptor for OTG issue -+//#define RXDES_NUM 64//64 // we defined 32 descriptor for OTG issue - #define RXDES_NUM 32 - - #define RX_BUF_SIZE 1536 -@@ -464,6 +464,7 @@ typedef struct - #define PHYID_REVISION_MASK 0x0000000f - #define PHYID_VENDOR_MARVELL 0x01410c00 - #define PHYID_VENDOR_BROADCOM 0x00406000 -+#define PHYID_VENDOR_BCM5461X 0x03625c00 - #define PHYID_VENDOR_REALTEK 0x001cc800 - - #define PHYID_BCM5221A4 0x004061e4 -@@ -521,7 +522,7 @@ struct ftgmac100_priv { - int tx_idx; - int old_tx; - struct sk_buff *tx_skbuff[TXDES_NUM]; -- -+ - int maccr_val; - struct timer_list timer; - u32 GigaBit_MAHT0; -@@ -533,7 +534,7 @@ struct ftgmac100_priv { - NCSI_Capability NCSI_Cap; - unsigned int InstanceID; - unsigned int Retry; -- unsigned char Payload_Data[16]; -+ unsigned char Payload_Data[64]; - unsigned char Payload_Pad[4]; - unsigned long Payload_Checksum; - int tx_free; -@@ -575,7 +576,7 @@ struct ftgmac100_priv { - #define STOP_DONE (1 << 4) - - -- -+ - #endif /* _SMC_91111_H_ */ - - -diff --git a/drivers/rtc/rtc-aspeed.c b/drivers/rtc/rtc-aspeed.c -index 477032e..de9e995 100644 ---- a/drivers/rtc/rtc-aspeed.c -+++ b/drivers/rtc/rtc-aspeed.c -@@ -7,11 +7,11 @@ - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by the Free Software Foundation; - * either version 2 of the License, or (at your option) any later version. --* -+* - * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; - * without even the implied warranty of MERCHANTABILITY or - * FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. --* -+* - * You should have received a copy of the GNU General Public License - * along with this program; if not, write to the Free Software - * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA -@@ -67,8 +67,16 @@ ast_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) - { - struct ast_rtc *ast_rtc = dev_get_drvdata(dev); - pr_debug("cmd = 0x%08x, arg = 0x%08lx\n", cmd, arg); -- -+ - switch (cmd) { -+ case RTC_SET_TIME: -+ case RTC_RD_TIME: -+ case RTC_ALM_READ: -+ case RTC_ALM_SET: -+ { -+ // use rtc-dev.c fallback -+ return -ENOIOCTLCMD; -+ } - case RTC_AIE_ON: /* alarm on */ - { - rtc_write(ast_rtc->base, rtc_read(ast_rtc->base, RTC_CONTROL) | ENABLE_ALL_ALARM, RTC_CONTROL); -@@ -105,7 +113,7 @@ ast_rtc_ioctl(struct device *dev, unsigned int cmd, unsigned long arg) - default: - return -ENOTTY; - } -- -+ - return 0; - } - -@@ -122,7 +130,7 @@ ast_rtc_get_time(struct device *dev, struct rtc_time *rtc_tm) - - reg_time = rtc_read(ast_rtc->base, RTC_CNTR_STS_1); - reg_date = rtc_read(ast_rtc->base, RTC_CNTR_STS_2); -- -+ - spin_unlock_irqrestore(&ast_rtc->lock, flags); - - rtc_tm->tm_year = GET_CENT_VAL(reg_date)*1000 | GET_YEAR_VAL(reg_date); -@@ -132,7 +140,7 @@ ast_rtc_get_time(struct device *dev, struct rtc_time *rtc_tm) - rtc_tm->tm_hour = GET_HOUR_VAL(reg_time); - rtc_tm->tm_min = GET_MIN_VAL(reg_time); - rtc_tm->tm_sec = GET_SEC_VAL(reg_time); -- -+ - pr_debug("read time %02x.%02x.%02x %02x/%02x/%02x\n", - rtc_tm->tm_year, rtc_tm->tm_mon, rtc_tm->tm_mday, - rtc_tm->tm_hour, rtc_tm->tm_min, rtc_tm->tm_sec); -@@ -155,7 +163,7 @@ ast_rtc_set_time(struct device *dev, struct rtc_time *tm) - - /* set hours */ - reg_time = SET_DAY_VAL(tm->tm_mday) | SET_HOUR_VAL(tm->tm_hour) | SET_MIN_VAL(tm->tm_min) | SET_SEC_VAL(tm->tm_sec); -- -+ - /* set century */ - /* set mon */ - reg_date = SET_CENT_VAL(tm->tm_year / 1000) | SET_YEAR_VAL(tm->tm_year % 1000) | SET_MON_VAL(tm->tm_mon); -@@ -166,10 +174,10 @@ ast_rtc_set_time(struct device *dev, struct rtc_time *tm) - rtc_write(ast_rtc->base, reg_date, RTC_CNTR_STS_2); - - rtc_write(ast_rtc->base, rtc_read(ast_rtc->base, RTC_CONTROL) &~RTC_LOCK , RTC_CONTROL); -- -+ - spin_unlock_irqrestore(&ast_rtc->lock, flags); - -- return 0; -+ return 0; - } - static int - ast_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) -@@ -183,7 +191,7 @@ ast_rtc_read_alarm(struct device *dev, struct rtc_wkalrm *alarm) - alarm_reg = rtc_read(ast_rtc->base, RTC_ALARM); - spin_unlock_irqrestore(&ast_rtc->lock, flags); - --//DAY -+//DAY - alm_tm->tm_mday = GET_DAY_VAL(alarm_reg); - - //HR -@@ -221,7 +229,7 @@ ast_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) - if (tm->tm_mday <= 31 && tm->tm_mday >= 1) { - reg_alarm |= SET_DAY_VAL(tm->tm_mday); - } -- -+ - //HR - /* set ten hours */ - if (tm->tm_hour <= 23 && tm->tm_hour >= 0) { -@@ -245,8 +253,8 @@ ast_rtc_set_alarm(struct device *dev, struct rtc_wkalrm *alarm) - spin_lock_irqsave(&ast_rtc->lock, flags); - - rtc_write(ast_rtc->base, reg_alarm, RTC_ALARM); -- -- if(alarm->enabled) -+ -+ if(alarm->enabled) - rtc_write(ast_rtc->base, reg_alarm, RTC_CONTROL); - else - rtc_write(ast_rtc->base, reg_alarm, RTC_CONTROL); -@@ -366,14 +374,14 @@ static int __init ast_rtc_probe(struct platform_device *pdev) - ret = -EBUSY; - goto free_rtc; - } -- -+ - ast_rtc->base = ioremap(res->start, resource_size(res)); - if (!ast_rtc->base) { - dev_err(&pdev->dev, "cannot map SocleDev registers\n"); - ret = -ENOMEM; - goto release_mem; - } -- -+ - pr_debug("base = 0x%p, irq = %d\n", ast_rtc->base, ast_rtc->irq); - - rtc_dev = rtc_device_register(pdev->name, &pdev->dev, &ast_rtcops, THIS_MODULE); -@@ -381,7 +389,7 @@ static int __init ast_rtc_probe(struct platform_device *pdev) - ret = PTR_ERR(rtc_dev); - goto unmap; - } -- -+ - ast_rtc->res = res; - ast_rtc->rtc_dev = rtc_dev; - spin_lock_init(&ast_rtc->lock); -@@ -406,7 +414,7 @@ static int __init ast_rtc_probe(struct platform_device *pdev) - printk("no need to enable RTC \n"); - - spin_unlock_irq(&ast_rtc->lock); -- -+ - /* register ISR */ - ret = request_irq(ast_rtc->irq, ast_rtc_interrupt, IRQF_DISABLED, dev_name(&rtc_dev->dev), ast_rtc); - if (ret) { -diff --git a/drivers/serial/8250.c b/drivers/serial/8250.c -index a181ccf..f16da59 100644 ---- a/drivers/serial/8250.c -+++ b/drivers/serial/8250.c -@@ -38,6 +38,7 @@ - #include <linux/serial_8250.h> - #include <linux/nmi.h> - #include <linux/mutex.h> -+#include <linux/gpio.h> - - #include <asm/io.h> - #include <asm/irq.h> -@@ -59,6 +60,8 @@ static unsigned int nr_uarts = CONFIG_SERIAL_8250_RUNTIME_UARTS; - - static struct uart_driver serial8250_reg; - -+DECLARE_WAIT_QUEUE_HEAD(thre_wait); -+ - static int serial_index(struct uart_port *port) - { - return (serial8250_reg.minor - 64) + port->line; -@@ -1225,7 +1228,10 @@ static void autoconfig_irq(struct uart_8250_port *up) - - static inline void __stop_tx(struct uart_8250_port *p) - { -- if (p->ier & UART_IER_THRI) { -+ int status = serial_in(p, UART_LSR); -+ // only turn off THRE interrupt if THRE is *currently* asserted -+ // (we still want to catch it a final time after the FIFO empties) -+ if ((p->ier & UART_IER_THRI) && (status & UART_LSR_THRE)) { - p->ier &= ~UART_IER_THRI; - serial_out(p, UART_IER, p->ier); - } -@@ -1527,6 +1533,7 @@ static irqreturn_t serial8250_interrupt(int irq, void *dev_id) - - DEBUG_INTR("end.\n"); - -+ wake_up(&thre_wait); - return IRQ_RETVAL(handled); - } - -@@ -2526,6 +2533,35 @@ serial8250_type(struct uart_port *port) - return uart_config[type].name; - } - -+static int serial8250_ioctl(struct uart_port *port, unsigned int cmd, unsigned long arg) { -+ struct uart_8250_port *up = (struct uart_8250_port *)port; -+ unsigned long flags; -+ int ret = -ENOIOCTLCMD; -+ // kernel-space RS485 drain-and-switch hack -+ if (cmd == TIOCSERWAITTEMT) { -+ // wait for kernel buffers and UART FIFO to both empty -+ struct circ_buf *xmit = &up->port.info->xmit; -+ wait_event_interruptible( -+ thre_wait, -+ uart_circ_empty(xmit) && -+ (serial_in(up, UART_LSR) & UART_LSR_THRE)); -+ // spin until TEMT (transmit shift register empty) -+ spin_lock_irqsave(&up->port.lock, flags); -+ wait_for_xmitr(up, BOTH_EMPTY); -+ if (arg != 0) { -+ // turn off RS485 DE pin -+ gpio_set_value(arg, 0); -+ } -+ // grab any phantom char seen on RX when transceiver switches -+ (void) serial_inp(up, UART_RX); -+ // enable read -+ up->port.ignore_status_mask &= ~UART_LSR_DR; -+ spin_unlock_irqrestore(&up->port.lock, flags); -+ return 0; -+ } -+ return ret; -+} -+ - static struct uart_ops serial8250_pops = { - .tx_empty = serial8250_tx_empty, - .set_mctrl = serial8250_set_mctrl, -@@ -2544,6 +2580,7 @@ static struct uart_ops serial8250_pops = { - .request_port = serial8250_request_port, - .config_port = serial8250_config_port, - .verify_port = serial8250_verify_port, -+ .ioctl = serial8250_ioctl, - #ifdef CONFIG_CONSOLE_POLL - .poll_get_char = serial8250_get_poll_char, - .poll_put_char = serial8250_put_poll_char, -diff --git a/drivers/watchdog/Kconfig b/drivers/watchdog/Kconfig -index 5702145..0b01ba8 100644 ---- a/drivers/watchdog/Kconfig -+++ b/drivers/watchdog/Kconfig -@@ -235,10 +235,17 @@ config ORION5X_WATCHDOG - - config AST_WATCHDOG - tristate "ASPEED GUC watchdog" -- depends on WATCHDOG -+ depends on WATCHDOG - help - Watchdog timer for ASPEED chips. - -+config AST_WATCHDOG_REARM_DUAL_BOOT -+ bool "Rearm dual boot watchdog" -+ default n -+ depends on AST_WATCHDOG -+ help -+ Rearm dual boot watchdog or not during boot -+ - # ARM26 Architecture - - # AVR32 Architecture -diff --git a/drivers/watchdog/ast_wdt.c b/drivers/watchdog/ast_wdt.c -index 9e7e84f..e599a55 100644 ---- a/drivers/watchdog/ast_wdt.c -+++ b/drivers/watchdog/ast_wdt.c -@@ -68,6 +68,7 @@ typedef unsigned char bool_T; - - #else - #define WDT_BASE_VA (IO_ADDRESS(AST_WDT_BASE)) -+#define WDT2_BASE_VA (IO_ADDRESS(AST_WDT_BASE + 20)) - #endif - - #define WDT_CntSts (WDT_BASE_VA+0x00) -@@ -78,6 +79,14 @@ typedef unsigned char bool_T; - #define WDT_Clr (WDT_BASE_VA+0x14) - #define WDT_RstWd (WDT_BASE_VA+0x18) - -+#define WDT2_CntSts (WDT2_BASE_VA+0x00) -+#define WDT2_Reload (WDT2_BASE_VA+0x04) -+#define WDT2_Restart (WDT2_BASE_VA+0x08) -+#define WDT2_Ctrl (WDT2_BASE_VA+0x0C) -+#define WDT2_TimeOut (WDT2_BASE_VA+0x10) -+#define WDT2_Clr (WDT2_BASE_VA+0x14) -+#define WDT2_RstWd (WDT2_BASE_VA+0x18) -+ - #define WDT_CTRL_B_SECOND_BOOT (0x1 << 7) - #define WDT_CTRL_B_RESET_SOC (0x00 << 5) /* yes, 0x00 */ - #define WDT_CTRL_B_RESET_FULL (0x01 << 5) -@@ -101,6 +110,11 @@ typedef unsigned char bool_T; - #define WDT_TIMO 30 /* Default heartbeat = 30 seconds */ - - #define WDT_INITIAL_TIMO (8*60) /* Initial timeout, 8m */ -+/* -+ * Dual boot watchdog is 5s shorter so that dual boot watchdog -+ * will kick in first. -+ */ -+#define WDT_DUAL_BOOT_TIMO (WDT_INITIAL_TIMO - 5) - #define WDT_TIMO2TICKS(t) (TICKS_PER_uSEC * 1000000 * (t)) - - static int heartbeat = WDT_TIMO; -@@ -233,6 +247,14 @@ bool_T wdt_is_enabled(void) - return reg & WDT_CTRL_B_ENABLE; - } - -+#ifdef CONFIG_AST_WATCHDOG_REARM_DUAL_BOOT -+void wdt_dual_boot_restart(unsigned int timeo) -+{ -+ AST_WRITE_REG(WDT2_Reload, WDT_TIMO2TICKS(timeo)); -+ AST_WRITE_REG(WDT2_Restart, 0x4755); /* reload! */ -+ printk(KERN_INFO "Re-arm the dual boot watchdog for %u seconds\n", timeo); -+} -+#endif - - void wdt_restart_new(unsigned int nPeriod, int sourceClk, bool_T bResetOut, - bool_T bIntrSys, bool_T bClrAfter, bool_T bResetARMOnly) -@@ -542,6 +564,11 @@ static int ast_wdt_probe(struct platform_device *pdev) - return ret; - } - -+#ifdef CONFIG_AST_WATCHDOG_REARM_DUAL_BOOT -+ /* re-arm dual boot watchdog */ -+ wdt_dual_boot_restart(WDT_DUAL_BOOT_TIMO); -+#endif -+ - /* interrupt the system while WDT timeout */ - wdt_restart_new(WDT_TIMO2TICKS(WDT_INITIAL_TIMO), WDT_CLK_SRC_EXT, - /* No Ext, No intr, Self clear, Full chip reset */ -diff --git a/fs/compat_ioctl.c b/fs/compat_ioctl.c -index 61cb48f..5dc69ab 100644 ---- a/fs/compat_ioctl.c -+++ b/fs/compat_ioctl.c -@@ -3,7 +3,7 @@ - * - * Copyright (C) 1997-2000 Jakub Jelinek (jakub@redhat.com) - * Copyright (C) 1998 Eddie C. Dost (ecd@skynet.be) -- * Copyright (C) 2001,2002 Andi Kleen, SuSE Labs -+ * Copyright (C) 2001,2002 Andi Kleen, SuSE Labs - * Copyright (C) 2003 Pavel Machek (pavel@suse.cz) - * - * These routines maintain argument size conversion between 32bit and 64bit -@@ -125,7 +125,7 @@ static int w_long(unsigned int fd, unsigned int cmd, unsigned long arg) - mm_segment_t old_fs = get_fs(); - int err; - unsigned long val; -- -+ - set_fs (KERNEL_DS); - err = sys_ioctl(fd, cmd, (unsigned long)&val); - set_fs (old_fs); -@@ -133,14 +133,14 @@ static int w_long(unsigned int fd, unsigned int cmd, unsigned long arg) - return -EFAULT; - return err; - } -- -+ - static int rw_long(unsigned int fd, unsigned int cmd, unsigned long arg) - { - mm_segment_t old_fs = get_fs(); - u32 __user *argptr = compat_ptr(arg); - int err; - unsigned long val; -- -+ - if(get_user(val, argptr)) - return -EFAULT; - set_fs (KERNEL_DS); -@@ -365,17 +365,17 @@ static int dev_ifconf(unsigned int fd, unsigned int cmd, unsigned long arg) - if (copy_in_user(ifr, ifr32, sizeof(struct ifreq32))) - return -EFAULT; - ifr++; -- ifr32++; -+ ifr32++; - } - } - if (copy_to_user(uifc, &ifc, sizeof(struct ifconf))) - return -EFAULT; - -- err = sys_ioctl (fd, SIOCGIFCONF, (unsigned long)uifc); -+ err = sys_ioctl (fd, SIOCGIFCONF, (unsigned long)uifc); - if (err) - return err; - -- if (copy_from_user(&ifc, uifc, sizeof(struct ifconf))) -+ if (copy_from_user(&ifc, uifc, sizeof(struct ifconf))) - return -EFAULT; - - ifr = ifc.ifc_req; -@@ -411,7 +411,7 @@ static int ethtool_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) - struct ifreq32 __user *ifr32; - u32 data; - void __user *datap; -- -+ - ifr = compat_alloc_user_space(sizeof(*ifr)); - ifr32 = compat_ptr(arg); - -@@ -507,7 +507,7 @@ static int dev_ifsioc(unsigned int fd, unsigned int cmd, unsigned long arg) - struct ifmap32 __user *uifmap32; - mm_segment_t old_fs; - int err; -- -+ - uifr32 = compat_ptr(arg); - uifmap32 = &uifr32->ifr_ifru.ifru_map; - switch (cmd) { -@@ -610,7 +610,7 @@ static int routing_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) - char devname[16]; - u32 rtdev; - mm_segment_t old_fs = get_fs(); -- -+ - struct socket *mysock = sockfd_lookup(fd, &ret); - - if (mysock && mysock->sk && mysock->sk->sk_family == AF_INET6) { /* ipv6 */ -@@ -624,7 +624,7 @@ static int routing_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg) - ret |= __get_user (r6.rtmsg_info, &(ur6->rtmsg_info)); - ret |= __get_user (r6.rtmsg_flags, &(ur6->rtmsg_flags)); - ret |= __get_user (r6.rtmsg_ifindex, &(ur6->rtmsg_ifindex)); -- -+ - r = (void *) &r6; - } else { /* ipv4 */ - struct rtentry32 __user *ur4 = compat_ptr(arg); -@@ -1046,14 +1046,14 @@ static int vt_check(struct file *file) - struct tty_struct *tty; - struct inode *inode = file->f_path.dentry->d_inode; - struct vc_data *vc; -- -+ - if (file->f_op->unlocked_ioctl != tty_ioctl) - return -EINVAL; -- -+ - tty = (struct tty_struct *)file->private_data; - if (tty_paranoia_check(tty, inode, "tty_ioctl")) - return -EINVAL; -- -+ - if (tty->ops->ioctl != vt_ioctl) - return -EINVAL; - -@@ -1067,7 +1067,7 @@ static int vt_check(struct file *file) - */ - if (current->signal->tty == tty || capable(CAP_SYS_TTY_CONFIG)) - return 1; -- return 0; -+ return 0; - } - - struct consolefontdesc32 { -@@ -1085,7 +1085,7 @@ static int do_fontx_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg, - - perm = vt_check(file); - if (perm < 0) return perm; -- -+ - switch (cmd) { - case PIO_FONTX: - if (!perm) -@@ -1130,16 +1130,16 @@ struct console_font_op32 { - compat_uint_t charcount; - compat_caddr_t data; /* font data with height fixed to 32 */ - }; -- -+ - static int do_kdfontop_ioctl(unsigned int fd, unsigned int cmd, unsigned long arg, struct file *file) - { - struct console_font_op op; - struct console_font_op32 __user *fontop = compat_ptr(arg); - int perm = vt_check(file), i; - struct vc_data *vc; -- -+ - if (perm < 0) return perm; -- -+ - if (copy_from_user(&op, fontop, sizeof(struct console_font_op32))) - return -EFAULT; - if (!perm && op.op != KD_FONT_OP_GET) -@@ -1303,7 +1303,7 @@ static int do_atmif_sioc(unsigned int fd, unsigned int cmd, unsigned long arg) - u32 data; - void __user *datap; - int err; -- -+ - sioc = compat_alloc_user_space(sizeof(*sioc)); - sioc32 = compat_ptr(arg); - -@@ -1328,7 +1328,7 @@ static int do_atm_ioctl(unsigned int fd, unsigned int cmd32, unsigned long arg) - { - int i; - unsigned int cmd = 0; -- -+ - switch (cmd32) { - case SONET_GETSTAT: - case SONET_GETSTATZ: -@@ -1349,11 +1349,11 @@ static int do_atm_ioctl(unsigned int fd, unsigned int cmd32, unsigned long arg) - } - if (i == NR_ATM_IOCTL) - return -EINVAL; -- -+ - switch (cmd) { - case ATM_GETNAMES: - return do_atm_iobuf(fd, cmd, arg); -- -+ - case ATM_GETLINKRATE: - case ATM_GETTYPE: - case ATM_GETESI: -@@ -1444,7 +1444,7 @@ static int mtd_rw_oob(unsigned int fd, unsigned int cmd, unsigned long arg) - } - - return err; --} -+} - - #ifdef CONFIG_BLOCK - struct raw32_config_request -@@ -1798,7 +1798,7 @@ static int rtc_ioctl(unsigned fd, unsigned cmd, unsigned long arg) - val32 = kval; - return put_user(val32, (unsigned int __user *)arg); - case RTC_IRQP_SET32: -- return sys_ioctl(fd, RTC_IRQP_SET, arg); -+ return sys_ioctl(fd, RTC_IRQP_SET, arg); - case RTC_EPOCH_SET32: - return sys_ioctl(fd, RTC_EPOCH_SET, arg); - default: -@@ -2678,6 +2678,7 @@ COMPATIBLE_IOCTL(USBDEVFS_IOCTL32) - /* i2c */ - HANDLE_IOCTL(I2C_FUNCS, w_long) - HANDLE_IOCTL(I2C_RDWR, do_i2c_rdwr_ioctl) -+HANDLE_IOCTL(I2C_SLAVE_RDWR, do_i2c_rdwr_ioctl) - HANDLE_IOCTL(I2C_SMBUS, do_i2c_smbus_ioctl) - /* bridge */ - HANDLE_IOCTL(SIOCSIFBR, old_bridge_ioctl) -diff --git a/include/linux/i2c-dev.h b/include/linux/i2c-dev.h -index 311315b..ed9b48d 100644 ---- a/include/linux/i2c-dev.h -+++ b/include/linux/i2c-dev.h -@@ -46,6 +46,7 @@ - #define I2C_FUNCS 0x0705 /* Get the adapter functionality mask */ - - #define I2C_RDWR 0x0707 /* Combined R/W transfer (one STOP only) */ -+#define I2C_SLAVE_RDWR 0x0709 /* Slave Read Write */ - - #define I2C_PEC 0x0708 /* != 0 to use PEC with SMBus */ - #define I2C_SMBUS 0x0720 /* SMBus transfer */ -diff --git a/include/linux/i2c.h b/include/linux/i2c.h -index 59167e2..f037cde 100644 ---- a/include/linux/i2c.h -+++ b/include/linux/i2c.h -@@ -62,6 +62,9 @@ extern int i2c_master_recv(struct i2c_client *client, char *buf, int count); - extern int i2c_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, - int num); - -+extern int i2c_slave_transfer(struct i2c_adapter *adap, struct i2c_msg *msgs, -+ int num); -+ - /* This is the very generalized SMBus access routine. You probably do not - want to use this, though; one of the functions below may be much easier, - and probably just as fast. -@@ -333,6 +336,7 @@ struct i2c_algorithm { - processed, or a negative value on error */ - int (*master_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs, - int num); -+ int (*slave_xfer)(struct i2c_adapter *adap, struct i2c_msg *msgs); - int (*smbus_xfer) (struct i2c_adapter *adap, u16 addr, - unsigned short flags, char read_write, - u8 command, int size, union i2c_smbus_data *data); -@@ -516,6 +520,8 @@ struct i2c_msg { - __u16 flags; - #define I2C_M_TEN 0x0010 /* this is a ten bit chip address */ - #define I2C_M_RD 0x0001 /* read data, from slave to master */ -+#define I2C_S_EN 0x0002 /* Slave Enable */ -+#define I2C_S_ALT 0x0004 /* Slave Alert */ - #define I2C_M_NOSTART 0x4000 /* if I2C_FUNC_PROTOCOL_MANGLING */ - #define I2C_M_REV_DIR_ADDR 0x2000 /* if I2C_FUNC_PROTOCOL_MANGLING */ - #define I2C_M_IGNORE_NAK 0x1000 /* if I2C_FUNC_PROTOCOL_MANGLING */ -diff --git a/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0029-mtd-m25p80-Add-support-for-the-Winbond-W25Q64.patch b/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0029-mtd-m25p80-Add-support-for-the-Winbond-W25Q64.patch -new file mode 100644 -index 0000000..52aef04 ---- /dev/null -+++ b/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0029-mtd-m25p80-Add-support-for-the-Winbond-W25Q64.patch -@@ -0,0 +1,29 @@ -+From d2ac467a108400ff1ae682a423c7d41265e62d47 Mon Sep 17 00:00:00 2001 -+From: Thierry Reding <thierry.reding@avionic-design.de> -+Date: Mon, 30 Aug 2010 13:00:48 +0200 -+Subject: [PATCH] mtd: m25p80: Add support for the Winbond W25Q64 -+ -+This patch adds support for the Winbond W25Q64 serial flash. -+ -+Signed-off-by: Thierry Reding <thierry.reding@avionic-design.de> -+Signed-off-by: Artem Bityutskiy <Artem.Bityutskiy@nokia.com> -+Signed-off-by: David Woodhouse <David.Woodhouse@intel.com> -+--- -+ drivers/mtd/devices/m25p80.c | 1 + -+ 1 file changed, 1 insertion(+) -+ -+diff --git a/drivers/mtd/devices/m25p80.c b/drivers/mtd/devices/m25p80.c -+index 1f0f703..b6fd7c2 100644 -+--- a/drivers/mtd/devices/m25p80.c -++++ b/drivers/mtd/devices/m25p80.c -+@@ -716,6 +716,7 @@ static const struct spi_device_id m25p_ids[] = { -+ { "w25x32", INFO(0xef3016, 0, 64 * 1024, 64, SECT_4K) }, -+ { "w25q32", INFO(0xef4016, 0, 64 * 1024, 64, SECT_4K) }, -+ { "w25x64", INFO(0xef3017, 0, 64 * 1024, 128, SECT_4K) }, -++ { "w25q64", INFO(0xef4017, 0, 64 * 1024, 128, SECT_4K) }, -+ -+ /* Catalyst / On Semiconductor -- non-JEDEC */ -+ { "cat25c11", CAT25_INFO( 16, 8, 16, 1) }, -+-- -+1.8.5.6 -+ -diff --git a/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0030-net-Don-t-leak-packets-when-a-netns-is-going-down.patch b/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0030-net-Don-t-leak-packets-when-a-netns-is-going-down.patch -new file mode 100644 -index 0000000..ad04217 ---- /dev/null -+++ b/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0030-net-Don-t-leak-packets-when-a-netns-is-going-down.patch -@@ -0,0 +1,56 @@ -+From 0a36b345ab99d6b3c96999e7e3b79bd243cf9bf7 Mon Sep 17 00:00:00 2001 -+From: "Eric W. Biederman" <ebiederm@xmission.com> -+Date: Wed, 5 Nov 2008 16:00:24 -0800 -+Subject: [PATCH] net: Don't leak packets when a netns is going down -+ -+I have been tracking for a while a case where when the -+network namespace exits the cleanup gets stck in an -+endless precessess of: -+ -+unregister_netdevice: waiting for lo to become free. Usage count = 3 -+unregister_netdevice: waiting for lo to become free. Usage count = 3 -+unregister_netdevice: waiting for lo to become free. Usage count = 3 -+unregister_netdevice: waiting for lo to become free. Usage count = 3 -+unregister_netdevice: waiting for lo to become free. Usage count = 3 -+unregister_netdevice: waiting for lo to become free. Usage count = 3 -+unregister_netdevice: waiting for lo to become free. Usage count = 3 -+ -+It turns out that if you listen on a multicast address an unsubscribe -+packet is sent when the network device goes down. If you shutdown -+the network namespace without carefully cleaning up this can trigger -+the unsubscribe packet to be sent over the loopback interface while -+the network namespace is going down. -+ -+All of which is fine except when we drop the packet and forget to -+free it leaking the skb and the dst entry attached to. As it -+turns out the dst entry hold a reference to the idev which holds -+the dev and keeps everything from being cleaned up. Yuck! -+ -+By fixing my earlier thinko and add the needed kfree_skb and everything -+cleans up beautifully. -+ -+Signed-off-by: Eric W. Biederman <ebiederm@xmission.com> -+Signed-off-by: David S. Miller <davem@davemloft.net> -+--- -+ net/core/dev.c | 4 +++- -+ 1 file changed, 3 insertions(+), 1 deletion(-) -+ -+diff --git a/net/core/dev.c b/net/core/dev.c -+index 811507c..a0c60607 100644 -+--- a/net/core/dev.c -++++ b/net/core/dev.c -+@@ -2253,8 +2253,10 @@ int netif_receive_skb(struct sk_buff *skb) -+ rcu_read_lock(); -+ -+ /* Don't receive packets in an exiting network namespace */ -+- if (!net_alive(dev_net(skb->dev))) -++ if (!net_alive(dev_net(skb->dev))) { -++ kfree_skb(skb); -+ goto out; -++ } -+ -+ #ifdef CONFIG_NET_CLS_ACT -+ if (skb->tc_verd & TC_NCLS) { -+-- -+1.8.1 -+ -diff --git a/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0031-IPv6-Print-error-value-when-skb-allocation-fails.patch b/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0031-IPv6-Print-error-value-when-skb-allocation-fails.patch -new file mode 100644 -index 0000000..b638996 ---- /dev/null -+++ b/meta-aspeed/recipes-kernel/linux/files/patch-2.6.28.9/0031-IPv6-Print-error-value-when-skb-allocation-fails.patch -@@ -0,0 +1,43 @@ -+From 5777cee30776da63ecbe2b6d4929e01d82c7d72e Mon Sep 17 00:00:00 2001 -+From: Brian Haley <brian.haley@hp.com> -+Date: Tue, 2 Jun 2009 00:20:26 -0700 -+Subject: [PATCH] IPv6: Print error value when skb allocation fails -+ -+Print-out the error value when sock_alloc_send_skb() fails in -+the IPv6 neighbor discovery code - can be useful for debugging. -+ -+Signed-off-by: Brian Haley <brian.haley@hp.com> -+Signed-off-by: David S. Miller <davem@davemloft.net> -+--- -+ net/ipv6/ndisc.c | 8 ++++---- -+ 1 file changed, 4 insertions(+), 4 deletions(-) -+ -+diff --git a/net/ipv6/ndisc.c b/net/ipv6/ndisc.c -+index d0f54d1..45529b1 100644 -+--- a/net/ipv6/ndisc.c -++++ b/net/ipv6/ndisc.c -+@@ -483,8 +483,8 @@ static void __ndisc_send(struct net_device *dev, -+ 1, &err); -+ if (!skb) { -+ ND_PRINTK0(KERN_ERR -+- "ICMPv6 ND: %s() failed to allocate an skb.\n", -+- __func__); -++ "ICMPv6 ND: %s() failed to allocate an skb, err=%d.\n", -++ __func__, err); -+ dst_release(dst); -+ return; -+ } -+@@ -1533,8 +1533,8 @@ void ndisc_send_redirect(struct sk_buff *skb, struct neighbour *neigh, -+ 1, &err); -+ if (buff == NULL) { -+ ND_PRINTK0(KERN_ERR -+- "ICMPv6 Redirect: %s() failed to allocate an skb.\n", -+- __func__); -++ "ICMPv6 Redirect: %s() failed to allocate an skb, err=%d.\n", -++ __func__, err); -+ dst_release(dst); -+ return; -+ } -+-- -+1.8.1 -+ |